Já fiz este sistema faz bastante tempo, só que nunca postei.
Você adciona X dias de vip a um player, e este player só terá acesso à área VIP enquanto estes dias não acabarem.
Em talkactions/talkactions.xml adcione a seguinte linha:
<talkaction words="/addvip" script="addvip.lua"/>
Em data/talkactions faça um arquivo chamado addvip.lua contendo:
function onSay(cid, words, param)
-- configs
access = 1
days = 30
-- end configs
player = getPlayerByName(param)
daysvalue = days*3600*24
storageplayer = getPlayerStorageValue(player,29000)
timenow = os.time()
if storageplayer == -1 or storageplayer == 0 then
time = timenow+daysvalue
else
time = storageplayer+daysvalue
end
if param ~= "" then
if getPlayerGroupId(cid) >= access then
doPlayerSendTextMessage(player, MESSAGE_INFO_DESCR, "Foram adcionados ".. days .." dias de VIP no seu character.")
setPlayerStorageValue(player,29000,time)
quantity = math.floor((getPlayerStorageValue(player,29000) - timenow)/(3600*24))
doPlayerSendTextMessage(player, MESSAGE_INFO_DESCR, "Você tem ".. quantity .." dias de VIP restantes.")
else
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Somente jogadores com acesso maior que "..access.." podem adcionar vips.")
end
end
end
Edite o access para adcionar VIP e os dias que serão adcionados.
Em movements/movements.xml adcione a seguinte linha:
<movevent event="StepIn" actionid="29000" script="vipsystem.lua"/>
Em data/movements faça um arquivo chamado vipsystem.lua contendo:
function onStepIn(cid, item, position, fromPosition)timenow = os.time()
quantity = math.floor((getPlayerStorageValue(cid,29000) - timenow)/(3600*24))
if isPlayer(cid) then
if quantity > 0 then
doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você ainda tem ".. quantity .." dia(s) restante(s) de VIP.")
else
dir = getPlayerLookDir(cid)
pos = getCreaturePosition(cid)
if dir == 0 then
newpos = {x=pos.x, y=pos.y+1, z=pos.z}
elseif dir == 2 then
newpos = {x=pos.x, y=pos.y-1, z=pos.z}
elseif dir == 1 then
newpos = {x=pos.x-1, y=pos.y, z=pos.z}
elseif dir == 3 then
newpos = {x=pos.x+1, y=pos.y, z=pos.z}
end
doTeleportThing(cid, newpos, dir)
doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Somente jogadores VIPs podem entrar nesta área.")
end
end
end
Pronto, seu sistema de VIP está implantado.
Para adicionar VIP no player Yunie, por exemplo, é só dizer:
/addvip "Yunie
Nota-se que para quem adicionou não aparecerá nenhum aviso que foi adcionado, somente para o player.
E as áreas do mapa VIPs, faça uma entrada com actionid 29000, ao pisar na entrada, o sistema checará se o player é VIP e se consequentemente ele poderá passar adiante.
Para deixar mais perfeito o sistema, você mesmo pode criar um script onLogin para checar se ele está em uma área VIP com sua VIP esgotada e então teleportar ele para o templo.
Novo! Script onLogin (não testado), caso tenha bugs, reporte!
Em creaturescripts/scripts faça um arquivo chamado vip.lua contendo:
-- configstemplepos = {x=200,y=200,z=7}
cityid = 1
-- end configs
function onLogin(cid)
timenow = os.time()
viptime = getPlayerStorageValue(cid,29000)
quantity = math.floor((getPlayerStorageValue(cid,29000) - timenow)/(3600*24))
if quantity <= 0 and viptime > 0 then
setPlayerStorageValue(cid,29000,0)
doTeleportThing(cid,templepos)
-- setPlayerTown (estou sem minha listinha de functions para ver qual function que é para colocar townid), você pode colocar aqui se quiser
end
return TRUE
end
Em creaturescripts/creaturescripts.xml coloque:
<event type="login" name="VipLogin" script="vip.lua"/>
PS.: Estou sem minha listinha de function, e este script acima não mudará o templo do player, se alguém puder me dizer a function que faz isso. É setPlayerTown, algo assim.
Bom proveito,
Yunie.