Ir para conteúdo
Entre para seguir isso  
Messiah

Sistema Vip Por Sql Para Tfs 2.0

Recommended Posts

Messiah    0
Messiah

Nome: Sistema Vip Por Sql Para Tfs

.

Versão: 2.0

.

Tipo do script: action, talkaction

.

Servidor Testado: Tfs 0.3.3.147

.

Autor: Luke sky walker

Comentario: Sistema vip que tem por finalidade facilitar a vida dos ADMs de Otserv fácil fazer e configurar mas vamos deixar de conversinha e vamos ao script!

 

Bom vamos começa primeiro adicionando as tabelas para indicar se o player é vip ou não, tabela que mostra a quantidade de dias e a tabela de define o tempo da vip.

 

Va em seu MySQL e use este query.

 

ALTER TABLE `accounts` ADD `vip` TINYINT( 1 ) NOT NULL DEFAULT '0';
ALTER TABLE `accounts` ADD `vip_days` INT( 11 ) NOT NULL DEFAULT '0';
ALTER TABLE `accounts` ADD `vip_time` INT( 11 ) NOT NULL DEFAULT '0';

Ah tinha esquecido em que parte do mysql faça como está na ss para adicionar a query!

http://img2.imageshack.us/img2/7506/imagemeke.jpg

 

 

Agora vamos colocar a talkaction para poder adicionar a vip e verificar quantos dia de vip dos players.

Va em "Data/Talkactions/Talkactions.xml" e adicione.

 

    <talkaction log="yes" words="/addvip" access="5" event="script" value="vip.lua"/>
   <talkaction log="yes" words="/checkvip" access="5" event="script" value="vip.lua"/>

Agora crie um script chamado vip.lua na pasta "Data/Talkactions/Scripts" e coloque este codigo abaixo.

 

function onSay(cid, words, param)
   local Data = string.explode(param, ",")
   if Data then
       local Target = db.getResult("SELECT `name` FROM `players` WHERE `name` = " .. db.escapeString(Data[1]) .. ";")
       if Data then
           if (Target:getID() ~= -1) then
               if Data[2] then
                   if (words:sub(2, 2) == "a") then
                       if isNumber(Data[2]) == TRUE then
                           if vipTimeByName(Data[1]) == 0 then
                               db.executeQuery("UPDATE `accounts` SET `vip_time` = 86400 * ".. Data[2] .." + ".. os.time() .." WHERE `accounts`.`id` = ".. getAccountIdByName(Data[1]) ..";")
                           else
                               db.executeQuery("UPDATE `accounts` SET `vip_time` = `accounts`.`vip_time` + (86400 * ".. Data[2] ..") WHERE `accounts`.`id` = ".. getAccountIdByName(Data[1]) ..";")
                           end
                           db.executeQuery("UPDATE `accounts` SET `vip` = 1 WHERE `accounts`.`id` = ".. getAccountIdByName(Data[1]) .." LIMIT 1;")
                           db.executeQuery("UPDATE `accounts` SET `vip_days` = `accounts`.`vip_days` + ".. Data[2] .." WHERE `accounts`.`id` = ".. getAccountIdByName(Data[1]) ..";")
                           doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Foi adicionado ".. Data[2] .." dias de vip ao player ".. Data[1] ..".")
                       else
                           doPlayerSendCancel(cid, "Insira apenas numeros.")
                       end
                   else
                       doPlayerSendCancel(cid, "Para verificar uma vip não presisa inserir os dias.")
                   end
               else
                   if (words:sub(2, 2) == "c") then
                       if vipDaysByName(Data[1]) == 0 then
                           doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "O player ".. Data[1] .." não é vip.")
                       elseif vipDaysByName(Data[1]) == 1 then
                           doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "O player ".. Data[1] .." tem ".. vipDaysByName(Data[1]) .." dia de vip.")
                       else
                           doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "O player ".. Data[1] .." tem ".. vipDaysByName(Data[1]) .." dias de vip.")
                       end
                   else
                       doPlayerSendCancel(cid, "Insira a quantidade de dias que vai adicionar de vip ao player.")
                   end
               end
           else
               doPlayerSendCancel(cid, "Este player ".. Data[1] .." não existe.")
           end
       end
   else
       doPlayerSendCancel(cid, "Insira um nome.")
   end
   return TRUE
end

Agora vamos em "Data/Libs" e vamos adicionar em "Data.lua" na ultima linha.

 

dofile(getDataDir() .. "Lib/Vip_Functions.lua")

Agora vamos criar um script chamado "Vip_Functions.lua" na pasta "Data/Libs" e colocar este codigo abaixo.

 

function vipDays(cid)
   local Query = db.getResult("SELECT `vip_days` FROM `accounts` WHERE `accounts`.`id` = ".. getPlayerAccountId(cid) ..";")
   local vip_days = Query:getDataInt("vip_days")
   return vip_days
end

function vipDaysByName(cid)
   local Query = db.getResult("SELECT `vip_days` FROM `accounts` WHERE `accounts`.`id` = ".. getAccountIdByName(cid) ..";")
   local vip_days = Query:getDataInt("vip_days")
   return vip_days
end

function haveVipDays(cid)
   local Query = db.getResult("SELECT `vip_days` FROM `accounts` WHERE `accounts`.`id` = ".. getPlayerAccountId(cid) ..";")
   local vip_days = Query:getDataInt("vip_days")
   return (isPlayer(cid) == TRUE and (vip_days > 0)) and TRUE or FALSE
end

function haveVipDaysByName(cid)
   local Query = db.getResult("SELECT `vip_days` FROM `accounts` WHERE `accounts`.`id` = ".. getAccountIdByName(cid) ..";")
   local vip_days = Query:getDataInt("vip_days")
   return (isPlayer(cid) == TRUE and (vip_days > 0)) and TRUE or FALSE
end

function isVip(cid)
   local Query = db.getResult("SELECT `vip` FROM `accounts` WHERE `accounts`.`id` = ".. getPlayerAccountId(cid) ..";")
   local vip = Query:getDataInt("vip")
   return (isPlayer(cid) == TRUE and (vip == 1)) and TRUE or FALSE
end

function haveVipTime(cid)
   local Query = db.getResult("SELECT `vip_time` FROM `accounts` WHERE `accounts`.`id` = ".. getPlayerAccountId(cid) ..";")
   local vip_time = Query:getDataInt("vip_time")
   return (isPlayer(cid) == TRUE and (vip_time >= 1)) and TRUE or FALSE
end

function vipTimeByName(cid)
   local Query = db.getResult("SELECT `vip_time` FROM `accounts` WHERE `accounts`.`id` = ".. getAccountIdByName(cid) ..";")
   local vip_time = Query:getDataInt("vip_time")
   return vip_time
end

function vipTime(cid)
   local Query = db.getResult("SELECT `vip_time` FROM `accounts` WHERE `accounts`.`id` = ".. getPlayerAccountId(cid) ..";")
   local vip_time = Query:getDataInt("vip_time")
   return vip_time
end

Agora iremos colocar os creture script que faz a remoção automatica dos dias da vip e teleporta os chars para o temple quando acaba a vip!

 

Vamos em "Data\Creaturescripts" e abriremos o script "Login.lua" e adicione o codigo abaixo.

 

if vipTime(cid) >= 1 then
       if vipTime(cid) >= os.time() then
db.executeQuery("UPDATE `accounts` SET `vip_days` = ".. (vipTime(cid) - os.time()) / 86400 .." WHERE `accounts`.`id` = ".. getPlayerAccountId(cid) ..";")
       else
           db.executeQuery("UPDATE `accounts` SET `vip_time` = 0 WHERE `accounts`.`id` = ".. getPlayerAccountId(cid) ..";")
           db.executeQuery("UPDATE `accounts` SET `vip_days` = 0 WHERE `accounts`.`id` = ".. getPlayerAccountId(cid) ..";")
       end
   end
   if haveVipDays(cid) == FALSE then
       if isVip(cid) == TRUE then
           db.executeQuery("UPDATE `players` SET `town_id` = [color=#0000ff]1[/color], `posx` = [color=#ff0000]X[/color], `posy` = [color=#ff0000]Y[/color], `posz` = [color=#ff0000]Z[/color] WHERE `players`.`account_id` = ".. getPlayerAccountId(cid) ..";")
           db.executeQuery("UPDATE `accounts` SET `vip` = '0' WHERE `accounts`.`id` = ".. getPlayerAccountId(cid) ..";")
           local Position = getTownTemplePosition(1)
           doTeleportThing(cid, Position)
           doSendMagicEffect(Position, 10)
           doPlayerSetTown(cid, [color=#0000ff]1[/color])
       end
   end

OBS = Coloque as coordenadas do templo da cidade principal.

OBS = Coloque ID da cidade principal.

 

Agora iremos cria uma action que no tile que tiver o actionID 1000 tera que ser player vip para passar por ele.

Va em Movements.xml e adicione.

 

<movevent type="StepIn" actionid="1000" event="script" value="Viptile.lua"/>

Agora crie um scripts chamado Viptile.lua na pasta scripts

 

function onStepIn(cid, item, position, fromPosition)
   if isVip(cid) == FALSE then
       doTeleportThing(cid, fromPosition)
       doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você não é um player vip para poder passar por aqui.")
   end
   return TRUE
end

Exemplos de como adicionar vip e remover e verificar se o player é vip.

 

Exemplo de como adicionar uma vip de 10 dias

/addvip Luke sky walker, 10

 

Exemplo de como verificar se o player é vip e quantos dias de vip ele tem ainda.

/checkvip Luke sky walker

 

OBS: Este sistema serve tambem para players offline como online pois é direto por SQL.

Detalhe eu so fiz testes basicos não usei ele em server que fica online então se acharem algum erro reporte par min.

 

Espero que tenham gostado pois tive um bom trabalho para cria este script e decidi disponibiliza a vocês!

Que usam um sistema de vip.

 

*OBS: Créditos todos do Luke Sky Walker não fiz nada a não ser trazer este Tópico para Otserv comenten e não tirem os devidos créditos!:yes:

Editado por Messiah
Faltava a tag do movements

Compartilhar este post


Link para o post
Mock    32
Mock

Comentario: Finalmente um sistema vip via sql!

 

Aprovadoico_aprovado.png & Movidoicon_movido.giffechado22xnux7.gif

Compartilhar este post


Link para o post
chupetta    0
chupetta

Muito bom Mock tava precisando dele tinah um vip system mas totalmente mal configurado ;x

 

--APROVADÍSSIMO--

 

AJUDEI?DOE OT$ :D

Compartilhar este post


Link para o post
Oliveira    0
Oliveira

Nossa Muito bom msm.

Ainda lembro q se usava sistema de vip por house ;D

Compartilhar este post


Link para o post
Fletch    0
Fletch

eu ja tinha feito um xD mas eu n ia postar esse tem as msm funções do meu agora tenhu q faze um melhor pra diferencia dos otros otserv. Paia, mas vlw pelo script ^^

Compartilhar este post


Link para o post
fabianobn    0
fabianobn

Caramba veio eu tinha elogiado o Luke Sky Walker via msn ^^

mais ae ele é sinistro eu testei e funfo mesmo ^^

Sem nenhum BUG o.O

Manow ele é Sinistro.

Abraços!

 

Agora Você trouxe para a OTNEt ^^

Obrigado Tbm ^^

Abraços!

Editado por fabianobn

Compartilhar este post


Link para o post
Adriez    0
Adriez

blz galera?? Agora iremos cria uma action que no tile que tiver o actionID 1000 tera que ser player vip para passar por ele.

Agora crie um scripts chamado Viptile.lua na pasta scripts NESSA PARTE ACTION ID 1000 AONDE COLOCA ISSO SO ISSO Q NAO ENTENDI FLWS VLWS

Compartilhar este post


Link para o post
fabianobn    0
fabianobn

Essa Action vc coloca num Tile no seu mapa ^^

Escolhe um Tile vai em properties e em actionsID Coloque 1000

 

Pronto teste e ver se ta fufando se sim Pronto se não poste aki ^^.

 

Abraços!

Compartilhar este post


Link para o post
Adriez    0
Adriez

blz cara ??? entendi coloca aonde quero q bloquea a passagem aqui agora o vip.tile lua eu coloco pasta scrip da aonde???

Compartilhar este post


Link para o post
Zuvutaba    0
Zuvutaba

Ele tambem funciona na versão 0.3.2 da TFS

 

OBS: Luke sky walker aqui

Compartilhar este post


Link para o post
Rajas    0
Rajas

Tpw ta dando um error aki em casa quando vc fala para coloca :

Agora iremos colocar os creture script que faz a remoção automatica dos dias da vip e teleporta os chars para o temple quando acaba a vip!

 

Vamos em "Data\Creaturescripts" e abriremos o script "Login.lua" e adicione o codigo abaixo.

 

Código:

 

if vipTime(cid) >= 1 then

if vipTime(cid) >= os.time() then

db.executeQuery("UPDATE `accounts` SET `vip_days` = ".. (vipTime(cid) - os.time()) / 86400 .." WHERE `accounts`.`id` = ".. getPlayerAccountId(cid) ..";")

else

db.executeQuery("UPDATE `accounts` SET `vip_time` = 0 WHERE `accounts`.`id` = ".. getPlayerAccountId(cid) ..";")

db.executeQuery("UPDATE `accounts` SET `vip_days` = 0 WHERE `accounts`.`id` = ".. getPlayerAccountId(cid) ..";")

end

end

if haveVipDays(cid) == FALSE then

if isVip(cid) == TRUE then

db.executeQuery("UPDATE `players` SET `town_id` = 1, `posx` = X, `posy` = Y, `posz` = Z WHERE `players`.`account_id` = ".. getPlayerAccountId(cid) ..";")

db.executeQuery("UPDATE `accounts` SET `vip` = '0' WHERE `accounts`.`id` = ".. getPlayerAccountId(cid) ..";")

local Position = getTownTemplePosition(1)

doTeleportThing(cid, Position)

doSendMagicEffect(Position, 10)

doPlayerSetTown(cid, 1)

end

 

coloca dentro do login.lua ou cria um arquivo chamando vip.lua dentro do Creaturescripts eh adicionar ?

grato pela atençao!!!!

Compartilhar este post


Link para o post
Rajas    0
Rajas

tpw eu nao to conseguindo instalar o

if vipTime(cid) >= 1 then

if vipTime(cid) >= os.time() then

db.executeQuery("UPDATE `accounts` SET `vip_days` = ".. (vipTime(cid) - os.time()) / 86400 .." WHERE `accounts`.`id` = ".. getPlayerAccountId(cid) ..";")

else

db.executeQuery("UPDATE `accounts` SET `vip_time` = 0 WHERE `accounts`.`id` = ".. getPlayerAccountId(cid) ..";")

db.executeQuery("UPDATE `accounts` SET `vip_days` = 0 WHERE `accounts`.`id` = ".. getPlayerAccountId(cid) ..";")

end

end

if haveVipDays(cid) == FALSE then

if isVip(cid) == TRUE then

db.executeQuery("UPDATE `players` SET `town_id` = 1, `posx` = X, `posy` = Y, `posz` = Z WHERE `players`.`account_id` = ".. getPlayerAccountId(cid) ..";")

db.executeQuery("UPDATE `accounts` SET `vip` = '0' WHERE `accounts`.`id` = ".. getPlayerAccountId(cid) ..";")

local Position = getTownTemplePosition(1)

doTeleportThing(cid, Position)

doSendMagicEffect(Position, 10)

doPlayerSetTown(cid, 1)

end

end

eu coloquei isso no login.lua dentro do data\creaturescripts\scripts no final e da um error foda aki onde eu coloco isso eh qual o tag q eu preciso add no creaturescripts.xml?

obrigado pela atençao!

Compartilhar este post


Link para o post
Zuvutaba    0
Zuvutaba
tpw eu nao to conseguindo instalar o eu coloquei isso no login.lua dentro do data\creaturescripts\scripts no final e da um error foda aki onde eu coloco isso eh qual o tag q eu preciso add no creaturescripts.xml?

obrigado pela atençao!

adicione esse codigo logo abaixo de "function onLogin(cid)" do login.lua

 

e se divirta com o sistema :D

Compartilhar este post


Link para o post
Rajas    0
Rajas
adicione esse codigo logo abaixo de "function onLogin(cid)" do login.lua

 

e se divirta com o sistema :D

 

vlw ae pela atençao vou testa agora.

Compartilhar este post


Link para o post
Jedi    7
Jedi

Ae cara tava procurando! ^^

Vlw

 

Parabéns

Compartilhar este post


Link para o post
reinan16    1
reinan16

não tah acabando a vip o systema não tah contando os dias n....

Compartilhar este post


Link para o post
niKer    0
niKer

Bom Otimo Script So Me Diga Uma Coisa!

Tipo Ele Permite Que O Player VIP Entre Na Frente De Todos?

Compartilhar este post


Link para o post
goiabinha    0
goiabinha

Muito obrigado

 

Fiunalmente VIP em SQL

=]

 

vlww

Compartilhar este post


Link para o post
Messiah    0
Messiah
vei o systema esta ruim msm não conta os dia i nem os minutos... a vip não acaba..

 

Por favor amigo, poste se ele apresenta algum erro no tfs para podermos corrir pois aqui funcionou perfeito mas poste tbm a versão do seu Tfs para eu poder te ajudar flw!

 

Bom Otimo Script So Me Diga Uma Coisa!

Tipo Ele Permite Que O Player VIP Entre Na Frente De Todos?

 

Olha amigo, não tenho certeza mas acho que não houve esta configuração, estarei verificando e postarei logo! ok!

 

Desculpem a minha demora pois estava formatando!:no:

Compartilhar este post


Link para o post
reinan16    1
reinan16

Man tem como emplementa voc no systema??? tipow quando a vip acabar o voc some.. tipow a premmy cando acaba premmy a promotion fica inativa so fuciona com outra premmy.. quero isso pra poder cria items so pra vip.. ajuda urgente..

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×