Ir para conteúdo
  • Cadastre-se

Posts Recomendados

  • Administrador

VIP System by Mock 100%


Fala galerinha do TK, então, há muito tempo atrás lá para meados de 2010 eu e alguns amigos pegamos um sistema de VIP inacabado pelo tão famoso scripter Mock e finalizamos ele deixando-o perfeito para uso, enfim, eu não achei esse script aqui no fórum e resolvi compartilhar com vocês, espero que gostem, confiram:

1° - Acesse a pasta data/lib e crie um arquivo chamado 049-vipsys.lua, coloque isso dentro do arquivo:


vip = {
name = "VIP System";
author = "Mock";
version = "1.0.0.0";
query="ALTER TABLE `accounts` ADD `vip_time` INTEGER";
query2="ALTER TABLE `accounts` ADD `vip_time` INT(15) NOT NULL"
}

function vip.setTable()
dofile('config.lua')
if sqlType == "sqlite" then
db.executeQuery(vip.query)
else
db.executeQuery(vip.query2)
end
end

function vip.getVip(cid)
assert(tonumber(cid),'Parameter must be a number')
if isPlayer(cid) == FALSE then error('Player don\'t find') end;
ae = db.getResult("SELECT `vip_time` FROM `accounts` WHERE `name` = '"..getPlayerAccount(cid).."';")
if ae:getID() == -1 then
return 0
end

local retee = ae:getDataInt("vip_time") or 0
ae:free()
return retee
end

function vip.getVipByAcc(acc)
assert(acc,'Account is nil')
local a = db.getResult("SELECT `vip_time` FROM `accounts` WHERE `name` = '"..acc.."';")
if a:getID() ~= -1 then
return a:getDataInt("vip_time") or 0, a:free()
else
error('Account don\'t find.')
end
end

function vip.setVip(cid,time)
dofile("config.lua")
assert(tonumber(cid),'Parameter must be a number')
assert(tonumber(time),'Parameter must be a number')
if isPlayer(cid) == FALSE then error('Player don\'t find') end;
db.executeQuery("UPDATE `"..sqlDatabase.."`.`accounts` SET `vip_time` = '"..(os.time()+time).."' WHERE `accounts`.`name` ='".. getPlayerAccount(cid).."';")
end

function vip.getVipByAccount(acc)
assert(acc,'Account is nil')
return db.getResult("SELECT `vip_time` FROM `accounts` WHERE `name` = '"..acc.."';"):getDataInt("vip_time") or 0
end

function vip.hasVip(cid)
assert(tonumber(cid),'Parameter must be a number')
if isPlayer(cid) == FALSE then return end;
local t = vip.getVip(cid) or 0
if os.time(day) < t then
return TRUE
else
return FALSE
end
end

function vip.hasVips(cid)
assert(tonumber(cid),'Parameter must be a number')
if isPlayer(cid) == FALSE then return end;
local t = vip.getVip(cid)
if os.time(day) < t then
return TRUE
else
return FALSE
end
end

function vip.accountHasVip(acc)
assert(acc,'Account is nil')
if os.time() < vip.getVipByAccount(acc) then
return TRUE
else
return FALSE
end
end
function vip.getDays(days)
return (3600 * 24 * days)
end

function vip.addVipByAccount(acc,time)
assert(acc,'Account is nil')
assert(tonumber(time),'Parameter must be a number')
local a = vip.getVipByAcc(acc)
a = os.difftime(a,os.time())
if a < 0 then a = 0 end;
a = a+time
return vip.setVipByAccount(acc,a)
end

function vip.setVipByAccount(acc,time)
dofile("config.lua")
assert(acc,'Account is nil')
assert(tonumber(time),'Parameter must be a number')
db.executeQuery("UPDATE `accounts` SET `vip_time` = '"..(os.time()+time).."' WHERE `accounts`.`name` ='"..acc.."';")
return TRUE
end

function vip.returnVipString(cid)
assert(tonumber(cid),'Parameter must be a number')
if isPlayer(cid) == TRUE then
return os.date("%d %B %Y %X ", vip.getVip(cid))
end
end
2° - Abra a pasta data/creaturescrpits/scripts e crie um arquivo chamado fimvip.lua, dentro dele adicione:

By Lukeskywalker

function onLogin(cid)
local temple = { x =32369, y = 32246, z = 6}
if vip.hasVip(cid) == true then
if getPlayerStorageValue(cid,55555) ~= 1 then
setPlayerStorageValue(cid,55555,1)
end
else
if getPlayerStorageValue(cid,55555) == 1 then
doTeleportThing(cid, temple)
doPlayerSendTextMessage(cid, 22, "Your VIP Time over!")
db.executeQuery("UPDATE `accounts` SET `vip_time` = 0 WHERE `id` = ".. getAccountIdByName(getPlayerName(cid)) ..";")
setPlayerPromotionLevel(cid, 1)
setPlayerStorageValue(cid, 55555, 0)
end
end
return true
end
Você pode troca as coordenadas do templo: local temple = {x=32369, y=32246, z=6}.

3° - Em data/creaturescripts/scripts/login.lua adicione essas tags:


registerCreatureEvent(cid, "FimVip")
registerCreatureEvent(cid, "VipReceive")
4° - Em data/creaturescripts/creaturescripts.xml adicione está tag:

<event type="login" name="FimVip" event="script" value="fimvip.lua"/>
5º - Em data\movements\scripts e crie um arquivo chamado viptile.lua e adicione isso dentro dele:

function onStepIn(cid, item, position, fromPosition)

local tileConfig = {
kickPos = fromPosition, kickEffect = CONST_ME_POFF,
kickMsg = "You need to be a vip player to access this area.",
enterMsg = "Welcome to vip area!",
enterEffect = CONST_ME_MAGIC_RED,
}

if isPlayer(cid) == true then
if vip.hasVip(cid) == FALSE then
doTeleportThing(cid, tileConfig.kickPos)
doSendMagicEffect(tileConfig.kickPos, tileConfig.kickEffect)
doPlayerSendCancel(cid, tileConfig.kickMsg)
return
end
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, tileConfig.enterMsg)
doSendMagicEffect(position, tileConfig.enterEffect)
return true
end
end
6° - Em data\movements\movements.xml adicione a tag:

<movevent type="StepIn" actionid="13500" event="script" value="viptile.lua"/>
Vejam a numeração 13500 você irá usar no tile que você quer para a passagem de player VIP para configurar adicione a numeração em ActionID do tile.

7° - Em data/talkactions/scripts acrescente dentro da pasta scripts uma outra pasta com o nome VIP vamos precisar de 7 arquivos.lua que teram os nomes e códigos a seguir:

add.lua

function onSay(cid, words, param, channel)
doPlayerSendCancel(cid, "Added "..param.." Vip Days.")
return doPlayerAddVipDays(cid, param)
end
addvipp.lua
function onSay(cid, words, param)
if param == "" then
return doPlayerPopupFYI(cid,"Está com problemas?\nAprenda os comandos!\n---------------\nAdicionar vip:\n/vip add days player\n/vip add 30 Real\n---------------\nDeletar vip:\n/vip del player\n/vip del Real\n---------------\nVer a vip:\n/vip see player\n/vip see Real\n---------------\n")
end
if param:lower():find('add') == 1 and 3 then
local _,_,id,name = param:lower():find('add (%d+) (.+)')
name = name or ""
id = tonumber(id or 1) or 1
if tonumber(id) == nil or getPlayerByName(name) == false then
return doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"Adicionar vip:\n/vip add days player\n/vip add 30 Real\n [Player: "..name.."]")
end
if isPlayer(getPlayerByName(name)) == TRUE then
vip.addVipByAccount(getPlayerAccount(getPlayerByName(name)) ,vip.getDays(id))

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR,"Foram adicionados "..tonumber(id).." dias de vip a "..name..".")
doPlayerSendTextMessage(getPlayerByName(name),MESSAGE_INFO_DESCR,"Você recebeu "..tonumber(id).." dias de vip.")
else
doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,name.." não esta online ou não existe.")
end
elseif param:lower():find('del') == 1 and 3 then
local _,_,name = param:lower():find('del (.+)')
if getPlayerByName(name) == false then
return doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"Deletar vip:\n/vip del player\n/vip del Real\n")
end

vip.setVipByAccount(getPlayerAccount(getPlayerByName(name)),-os.time())
doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"A vip de "..name.." foi apagada.")
elseif param:lower():find('see') == 1 and 3 then
local _,_,name = param:lower():find('see (.+)')
name = name or ""
if getPlayerByName(name) == false then
return doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"Ver a vip:\n/vip see player\n/vip see Real\n")
end
local ret_ = vip.getVip(getPlayerByName(name))
if ret_ == 0 then
return doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR,name.." Não tem vip, e nunca teve.")
else
return doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "A vip de "..name.." Acaba/terminou em "..os.date("%d %B %Y %X ",ret_))
end
end
return TRUE
end
get.lua
function onSay(cid, words, param, channel)
doPlayerSendCancel(cid, ""..getPlayerVipDays(cid).." days VIP left.")
end
is.lua
function onSay(cid, words, param, channel)
if isPlayerVip(cid) == TRUE then
doPlayerSendCancel(cid, "You are a VIP player.")
else
doPlayerSendCancel(cid, "You are not a VIP player.")
end
end
removevip.lua
function onSay(cid, words, param, channel)
doPlayerSendCancel(cid, "Vip removed.")
return doPlayerRemoveVip(cid)
end
set.lua
function onSay(cid, words, param, channel)
doPlayerSendCancel(cid, "VIP Days: "..param..".")
return setPlayerVipDays(cid, param)
end
vipdays.lua
function onSay(cid, words, param)
if vip.hasVip(cid) == TRUE then
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Your vip end in "..os.date("%d %B %Y %X ",vip.getVip(cid)))
else
if vip.getVip(cid) ~= 0 then
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You're not a vip player. Your vip has finished in "..os.date("%d %B %Y %X ", vip.getVip(cid)).." and now is "..os.date("%d %B %Y %X ", os.time()))
else
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You're not a vip player. You naver has a vip.")
end
end
return TRUE
end
8° - Em data/talkactions/talkactions.xml adicione está tag:

<!-- VIP System -->
<talkaction log="yes" words="/vip" access="5" event="script" value="VIP/addvipp.lua" />
<talkaction words="!vipdays" event="script" value="VIP/vipdays.lua" />
9° - Para finalizar execute este comando na sua database:

ALTER TABLE `accounts` ADD `vip_time` INT NOT NULL; 
Bom galera este sistema vip adiciona os dias corretos e ao termino do VIP o player recebe a mensagem que a VIP acabou e é teletransportado para o templo.

Créditos:
Mock (por ter iniciado algo e não terminou)
Lukeskywalker (Sistema de finalização perfeito do vip)

Matheus [Eu] (Por ter feito várias alterações nas talkacions)
Natan Beckman (Por ter ido atrás da conclusão 100% in game e php)


dm3o5y8.png

Você gostou deste conteúdo!? Este conteúdo te ajudou!? Isso será realmente útil pra você!?
Então, se possível, faça uma doação (de qualquer valor) que estará me ajudando também! :P

TibiaKing Team- KingTópicos
www.tibiaking.com

Link para o post
Compartilhar em outros sites
  • Respostas 66
  • Created
  • Última resposta

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

facinho entra no sqlite studio abre a tabela account ai vai em edit table, clica em add column digita o nome da coluna vip_time em data type deixa VARCHAR na frente bota 255 em column constraints sele

Caso você esteja usando MySql, basta seguir esta sequencia: Acesse o sua caixa de endereço do seu navegador, escreva "http://localhost/phpmyadmin" Aparecerá pra você digitar seu Usuário e Senha,

Como boto pra vender no site? Alguem me ajuda Por Favor Tou prescisando muito vender á vip no site

Posted Images

Obrigado Matheus Foi Muito Util para mim!

vou usa-lo!

Editado por Deft (veja o histórico de edições)

sem_ta18.jpg

Servidor Exbaiak

24280_4.png

Link para o post
Compartilhar em outros sites

Tópico muito bom, bem estruturado e com um ótimo conteúdo! Reputado Concerteza :accept:

Atenciosamente, Avuenja.

 

 

OTAAC | TIBIA CLIENTS

Link para o post
Compartilhar em outros sites
  • 4 weeks later...

Tópico muito bem feito! mas como posso adicionar tempo VIP ao player? e se for por comando de gm, como botar x dias ?

Só não te dou REP+ pq não sei onde fica hahahahaha ( acc velha, mas comecei a acessar o site há pouco tempo )

se me explicar como da rep eu dou =)

Editado por cianovs (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • 1 month later...

intao, to tentando instala, só que eu uso sqlite, nao sei com executo esse comando pelo sqlite, se alguem souber da força!


 

ALTER TABLE `accounts` ADD `vip_time` INT NOT NULL;
 

Mulher e dinheiro, dinheiro e mulher,


quanto mais você tem muito mais você quer


BREVE! NOVO SERVIDOR GLOBAL... AGUARDE

Link para o post
Compartilhar em outros sites

facinho entra no sqlite studio abre a tabela account ai vai em edit table, clica em add column digita o nome da coluna vip_time em data type deixa VARCHAR na frente bota 255 em column constraints seleciona not null depois clica em add e pronto.

ou deleta a tabela accounts e executa essa no sql query

CREATE TABLE accounts (

id INTEGER PRIMARY KEY

NOT NULL,

name VARCHAR( 255 ) NOT NULL,

password VARCHAR( 255 ) NOT NULL,

premdays INTEGER NOT NULL

DEFAULT ( 0 ),

lastday INTEGER NOT NULL

DEFAULT ( 0 ),

email VARCHAR( 255 ) NOT NULL

DEFAULT ( '' ),

[key] VARCHAR( 32 ) NOT NULL

DEFAULT ( 0 ),

blocked BOOLEAN NOT NULL

DEFAULT ( 0 ),

warnings INTEGER NOT NULL

DEFAULT ( 0 ),

group_id INTEGER NOT NULL

DEFAULT ( 1 ),

salt VARCHAR( 40 ) NOT NULL

DEFAULT ( '' ),

vip_time VARCHAR( 255 ) NOT NULL

);

Editado por Moose (veja o histórico de edições)

logo.png

 

Hospedagen BR e USA, VPS e Dedicados de alta peformance  você so encontra aqui

www.jeahost.com.br

Link para o post
Compartilhar em outros sites
  • 1 month later...

Tem como adicionar vip em apenas um character da conta ?

Link para o post
Compartilhar em outros sites
  • 2 weeks later...
  • 1 month later...

facinho entra no sqlite studio abre a tabela account ai vai em edit table, clica em add column digita o nome da coluna vip_time em data type deixa VARCHAR na frente bota 255 em column constraints seleciona not null depois clica em add e pronto.

ou deleta a tabela accounts e executa essa no sql query

CREATE TABLE accounts (

id INTEGER PRIMARY KEY

NOT NULL,

name VARCHAR( 255 ) NOT NULL,

password VARCHAR( 255 ) NOT NULL,

premdays INTEGER NOT NULL

DEFAULT ( 0 ),

lastday INTEGER NOT NULL

DEFAULT ( 0 ),

email VARCHAR( 255 ) NOT NULL

DEFAULT ( '' ),

[key] VARCHAR( 32 ) NOT NULL

DEFAULT ( 0 ),

blocked BOOLEAN NOT NULL

DEFAULT ( 0 ),

warnings INTEGER NOT NULL

DEFAULT ( 0 ),

group_id INTEGER NOT NULL

DEFAULT ( 1 ),

salt VARCHAR( 40 ) NOT NULL

DEFAULT ( '' ),

vip_time VARCHAR( 255 ) NOT NULL

);

Executei a primeira forma usando o (vip_time) e mesmo assim deu erro. Como executo no sql? Pode explicar?

Link para o post
Compartilhar em outros sites
  • 4 weeks later...
  • 8 months later...

MIL desculpas por reviver o tópico mas é urgente x.x eu tento executar o comando no sqlstudio em >Tables>accounts>edit table>add table... Coloco tudo oq o parceiro ai em cima falou mas na hora de salvar da isso aqui >>>>>>>table "players" references table "accounts". Please remove foreign key reference to table before editing it.<<<<<

Oq faço? ;s

Link para o post
Compartilhar em outros sites

Funcionou perfeitamente aqui, mas estou com uma dúvida.

 

Como faço pra dar vip ao usuário??

 

E tipo, queria que a vip fosse validada só se o usuário fizesse uma quest e conseguisse um item vip que fiz, como faço isso?

Link para o post
Compartilhar em outros sites
  • 2 weeks later...

Funciona com tfs 1.0 ?

Antica Global - Server Online

 

SITE: http://anticaglobal.com/

IP: anticaglobal.com
EXP: 999x [sTAGES]
ML: 300x
SKILL: 500x
LOOT: 10x
 
VERSÃO: 10.77
PORTA: 7171
 
Stages:
1 - 8 level, 999x
9 - 20 level, 950x
21 - 50 level, 800x
51 - 100 level, 750x
101 - 130 level, 650x
131 - 180 level, 550x
181 - 230 level, 450x
231 - 300 level, 350x
301+ level, 300x
 
Link para o post
Compartilhar em outros sites
  • 5 weeks later...

Se eu quiser fazer para passar por porta, barco essas coisas, tenho que separar com storage, mais não acho o storage =// Help

Link para o post
Compartilhar em outros sites
  • 2 weeks later...
  • 4 weeks later...
[25/07/2014 19:39:10] [Error - TalkAction Interface] 
[25/07/2014 19:39:10] data/talkactions/scripts/vip/addvipp.lua:onSay
[25/07/2014 19:39:10] Description: 
[25/07/2014 19:39:10] data/lib/049-vipsys.lua:102: attempt to call field 'executeQuery' (a nil value)
[25/07/2014 19:39:10] stack traceback:
[25/07/2014 19:39:10] data/lib/049-vipsys.lua:102: in function <data/lib/049-vipsys.lua:98>
[25/07/2014 19:39:10] (tail call): ?
[25/07/2014 19:39:10] data/talkactions/scripts/vip/addvipp.lua:13: in function <data/talkactions/scripts/vip/addvipp.lua:1>
 
:cry:

Antica Global - Server Online

 

SITE: http://anticaglobal.com/

IP: anticaglobal.com
EXP: 999x [sTAGES]
ML: 300x
SKILL: 500x
LOOT: 10x
 
VERSÃO: 10.77
PORTA: 7171
 
Stages:
1 - 8 level, 999x
9 - 20 level, 950x
21 - 50 level, 800x
51 - 100 level, 750x
101 - 130 level, 650x
131 - 180 level, 550x
181 - 230 level, 450x
231 - 300 level, 350x
301+ level, 300x
 
Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.




×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo