IQ
pedido

vip by talkaction

Por iqueob, 04 de fev. de 2013 em Scripts

resolvido
otserv
tibia
script
20
2.8k
iqueobI
04 de fevereiro de 2013 às 12:40

olá Xtibianos, possuo um STYLLER 8.6 versao 0.7.5 e este sistema de vip por Item:

 

function onUse(cid, item, fromPosition, itemEx, toPosition)

 

local config={

removeOnUse = "yes" -- remover quando usar ("yes" or "no")

}

 

local days = 5 -- dias que serão adicionados

local daysvalue = days * 24 * 60 * 60

local storageplayer = getPlayerStorageValue(cid, 13001)

local timenow = os.time()

 

if getPlayerStorageValue(cid, 13001) - os.time() <= 0 then

time = timenow + daysvalue

else

time = storageplayer + daysvalue

end

 

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Foram adicionados ".. days .." dias de VIP no seu character.Para acessar a NOVA area vip, suba o segundo andar do templo.")

setPlayerStorageValue(cid, 13001, time)

local quantity = math.floor((getPlayerStorageValue(cid, 13001) - timenow)/(24 * 60 * 60))

doSendMagicEffect(getPlayerPosition(cid), math.random(28,30))

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você tem ".. quantity .." dias de VIP restantes.")

if (config.removeOnUse == "yes") then

doRemoveItem(item.uid, 1)

end

 

return TRUE

end

Bom, eu queria algum jeito que so os jogadores que ja possuem a storage id "7777" (storage da quest que ganha o item do script acima) possam usar uma talkaction e renovar sua vip.

 

desde já, Obrigado.

RoksasR
04 de fevereiro de 2013 às 12:58

Vá em data/talkactions/scripts, crie um arquivo chamado newstor.lua e adicione isso dentro:

 

 

 

local days = 10

local price = 50000

local storage = 7777

local daysvalue = days * 24 * 60 * 60

local storageplayer = getPlayerStorageValue(cid, 13001)

local timenow = os.time()

 

function onSay(cid, words, param)

if getPlayerStorageValue(cid, 13001) - os.time() <= 0 then

time = timenow + daysvalue

else

time = storageplayer + daysvalue

end

if(words == "!buyvip") then

if not doPlayerRemoveMoney(cid, price) then

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você precisa de "..price.." gp's para colocar vip.")

doPlayerAddItem(cid,2148,50000)

return true

end

if getPlayerStorageValue(cid, storage) ~= 1 then

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você precisa completar a quest para renovar sua vip.") return true

end

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Foram adicionados "..days.." dias de VIP no seu character.")

setPlayerStorageValue(cid, 13001, time)

end

return true

end

 

 

 

Agora adicione essa tag em talkactions.xml

<talkaction log="no" words="!buyvip" event="script" value="newstor.lua"/>

Editado Fevereiro 4 por Roksas

iqueobI
04 de fevereiro de 2013 às 13:21

testei, aconteceu o seguinte, no char do god, removeu a grana mas mandou a mensagem "22:47 Você precisa completar a quest para renovar sua vip." e nao adicionou os dias de vip. Com um player que nao tinha a quest, aconteceu da mesma maneira que com o god, retirou o dinheiro, nao adicionou vip days e mensagem:"Você precisa completar a quest para renovar sua vip.". Com o player que ja tinha a quest, o dinheiro foi retirado e a vip normalmente adicionada.

obrigado.

Editado Fevereiro 4 por iqueob

RoksasR
04 de fevereiro de 2013 às 13:24

Me passe o script da quest, o action. pf

iqueobI
04 de fevereiro de 2013 às 13:31

action da quest vip:

function onUse(cid, item, frompos, item2, topos)

if item.uid == 7007 then

if item.itemid == 1946 then

 

player1pos = {x=1265, y=1033, z=5, stackpos=253}

player1 = getThingfromPos(player1pos)

 

player2pos = {x=1264, y=1033, z=5, stackpos=253}

player2 = getThingfromPos(player2pos)

 

player3pos = {x=1263, y=1033, z=5, stackpos=253}

player3 = getThingfromPos(player3pos)

 

player4pos = {x=1262, y=1033, z=5, stackpos=253}

player4 = getThingfromPos(player4pos)

 

 

if player1.itemid > 0 and player2.itemid > 0 and player3.itemid > 0 and player4.itemid > 0 then

 

player1level = getPlayerLevel(player1.uid)

player2level = getPlayerLevel(player2.uid)

player3level = getPlayerLevel(player3.uid)

player4level = getPlayerLevel(player4.uid)

 

questlevel = 200

 

if player1level >= questlevel and player2level >= questlevel and player3level >= questlevel and player4level >= questlevel then

 

handmaiden1pos = {x=1267, y=1031, z=6}

demon2pos = {x=1266, y=1031, z=6}

demon3pos = {x=1265, y=1031, z=6}

demon4pos = {x=1264, y=1031, z=6}

demon5pos = {x=1263, y=1031, z=6}

demon6pos = {x=1262, y=1031, z=6}

handmaiden7pos = {x=1261, y=1031, z=6}

punish8pos = {x=1260, y=1032, z=6}

dracola9pos = {x=1260, y=1033, z=6}

punish10pos = {x=1260, y=1034, z=6}

handmaiden11pos = {x=1261, y=1035, z=6}

demon12pos = {x=1262, y=1035, z=6}

demon13pos = {x=1263, y=1035, z=6}

demon14pos = {x=1264, y=1035, z=6}

demon15pos = {x=1265, y=1035, z=6}

demon16pos = {x=1266, y=1035, z=6}

handmaiden17pos = {x=1267, y=1035, z=6}

orshabaal18pos = {x=1266, y=1033, z=6}

orshabaal19pos = {x=1267, y=1033, z=6}

orshabaal20pos = {x=1268, y=1033, z=6}

 

doSummonCreature("The Handmaiden", handmaiden1pos)

doSummonCreature("The Handmaiden", handmaiden11pos)

doSummonCreature("The Handmaiden", handmaiden17pos)

doSummonCreature("The Handmaiden", handmaiden7pos)

doSummonCreature("Orshabaal", orshabaal18pos)

doSummonCreature("Orshabaal", orshabaal19pos)

doSummonCreature("Orshabaal", orshabaal20pos)

doSummonCreature("Dracola", dracola9pos)

doSummonCreature("Mr. Punish", punish8pos)

doSummonCreature("Mr. Punish", punish10pos)

doSummonCreature("Hellhound", demon2pos)

doSummonCreature("Hellhound", demon3pos)

doSummonCreature("Hellhound", demon5pos)

doSummonCreature("Hellhound", demon4pos)

doSummonCreature("Hellhound", demon6pos)

doSummonCreature("Hellhound", demon12pos)

doSummonCreature("Hellhound", demon13pos)

doSummonCreature("Hellhound", demon14pos)

doSummonCreature("Hellhound", demon15pos)

doSummonCreature("Hellhound", demon16pos)

 

 

 

nplayer1pos = {x=1265, y=1033, z=6}

nplayer2pos = {x=1264, y=1033, z=6}

nplayer3pos = {x=1263, y=1033, z=6}

nplayer4pos = {x=1262, y=1033, z=6}

 

doSendMagicEffect(player1pos,2)

doSendMagicEffect(player2pos,2)

doSendMagicEffect(player3pos,2)

doSendMagicEffect(player4pos,2)

 

doTeleportThing(player1.uid,nplayer1pos)

doTeleportThing(player2.uid,nplayer2pos)

doTeleportThing(player3.uid,nplayer3pos)

doTeleportThing(player4.uid,nplayer4pos)

 

doSendMagicEffect(nplayer1pos,10)

doSendMagicEffect(nplayer2pos,10)

doSendMagicEffect(nplayer3pos,10)

doSendMagicEffect(nplayer4pos,10)

 

doTransformItem(item.uid,1945)

 

else

doPlayerSendCancel(cid,"All players must have level 200 to enter.")

end

else

doPlayerSendCancel(cid,"You need 4 players in your team.")

end

end

if item.itemid == 1945 then

 

starting={x=1252, y=1023, z=6, stackpos=253}

checking={x=starting.x, y=starting.y, z=starting.z, stackpos=starting.stackpos}

ending={x=1281, y=1041, z=6, stackpos=253}

players=0

totalmonsters=0

monster = {}

repeat

creature= getThingfromPos(checking)

if creature.itemid > 0 then

if getPlayerAccess(creature.uid) == 0 then

players=players+1

end

if getPlayerAccess(creature.uid) ~= 0 and getPlayerAccess(creature.uid) ~= 3 then

totalmonsters=totalmonsters+1

monster[totalmonsters]=creature.uid

end

end

checking.x=checking.x+1

if checking.x>ending.x then

checking.x=starting.x

checking.y=checking.y+1

end

until checking.y>ending.y

if players==0 then

trash= {x=233, y=125, z=10}

current=0

repeat

current=current+1

doTeleportThing(monster[current],trash)

until current>=totalmonsters

doTransformItem(item.uid,1946)

end

 

 

end

end

if item.uid == 7770 then

queststatus = getPlayerStorageValue(cid,7777)

if queststatus == -1 then

doPlayerSendTextMessage(cid,22,"You have found a Ticket Vip.")

doPlayerAddItem(cid,5785,1)

setPlayerStorageValue(cid,7777,1)

else

doPlayerSendTextMessage(cid,22,"It is empty.")

end

end

if item.uid == 7772 then

queststatus = getPlayerStorageValue(cid,7778)

if queststatus ~= 1 then

doPlayerSendTextMessage(cid,22,"You have found a signet ring.")

doPlayerAddItem(cid,7697,1)

setPlayerStorageValue(cid,7778,1)

else

doPlayerSendTextMessage(cid,22,"It is empty.")

end

end

if item.uid == 7773 then

queststatus = getPlayerStorageValue(cid,7779)

if queststatus ~= 1 then

doPlayerSendTextMessage(cid,22,"You have found a Boots Vip.")

doPlayerAddItem(cid,2358,1)

setPlayerStorageValue(cid,7779,1)

else

doPlayerSendTextMessage(cid,22,"It is empty.")

end

end

return 1

end

RoksasR
04 de fevereiro de 2013 às 13:33

Ok certo. o talkaction deu ?

iqueobI
04 de fevereiro de 2013 às 13:39

o talkaction funcinou so para quem ja possuia a quest vip, quem nao tem, se tentar, vai perder o dinheiro e nao vai ganhar vip.

RoksasR
04 de fevereiro de 2013 às 13:44

OK, irei arrumar Isso.

Você tem alguma preferencia? Quer que ganhe mais doque 10 dias vip? Quer que tire a opção de dinheiro?Quer que mude algo?

iqueobI
04 de fevereiro de 2013 às 13:46

nao nao, basicamente eu sei editar isso tudo, mexi justamente na parte do dinheiro e da quantidade de dias de vip. coloquei 5kk e 15 respectivamente...

RoksasR
04 de fevereiro de 2013 às 14:01

Substitua o talkaction por esse, arrumei uns bugs, depois é só editar conforme quiser

 

 

local days = 10

local price = 50000

local storage = 7777

local daysvalue = days * 24 * 60 * 60

local storageplayer = getPlayerStorageValue(cid, 13001)

local timenow = os.time()

 

function onSay(cid, words, param)

if getPlayerStorageValue(cid, 13001) - os.time() <= 0 then

time = timenow + daysvalue

else

time = storageplayer + daysvalue

end

if(words == "!buyvip") then

if not doPlayerRemoveMoney(cid, price) then

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você precisa de "..price.." gp's para colocar vip.")

doPlayerAddItem(cid,2148,50000)

return true

end

if getPlayerStorageValue(cid, storage) ~= 1 then

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você precisa completar a quest para renovar sua vip.") return true

end

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Foram adicionados "..days.." dias de VIP no seu character.")

setPlayerStorageValue(cid, 13001, time)

end

return true

end

 

 

Boa sorte!

iqueobI
04 de fevereiro de 2013 às 14:05

Agora deu esse erro:

[04/02/2013 14:04:20] [Error - TalkAction Interface]

[04/02/2013 14:04:20] data/talkactions/scripts/systemvip2.lua:onSay

[04/02/2013 14:04:20] Description:

[04/02/2013 14:04:20] data/talkactions/scripts/systemvip2.lua:12: attempt to perform arithmetic on upvalue 'storageplayer' (a boolean value)

[04/02/2013 14:04:20] stack traceback:

[04/02/2013 14:04:20] data/talkactions/scripts/systemvip2.lua:12: in function <data/talkactions/scripts/systemvip2.lua:8>

ArtigoA
04 de fevereiro de 2013 às 14:06
function onSay(cid, words, param)
local days = 10
local price = 50000
local storage = 7777
local daysvalue = days * 24 * 60 * 60
local storageplayer = getPlayerStorageValue(cid, 13001)
local timenow = os.time()
if getPlayerStorageValue(cid, 13001) - os.time() <= 0 then
time = timenow + daysvalue
else
time = storageplayer + daysvalue
end
if(words == "!buyvip") then
if not doPlayerRemoveMoney(cid, price) then
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você precisa de "..price.." gp's para colocar vip.")
doPlayerAddItem(cid,2148,50000)
return true
end
if getPlayerStorageValue(cid, storage) ~= 1 then
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você precisa completar a quest para renovar sua vip.") return true
end
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Foram adicionados "..days.." dias de VIP no seu character.")
setPlayerStorageValue(cid, 13001, time)
end
return true
end

RoksasR
04 de fevereiro de 2013 às 14:09

Artigo...? What?

 

@topic

 

Cara, me passa o arquivo system2.lua da pasta talkactions/scripts

iqueobI
04 de fevereiro de 2013 às 14:41

deu o mesmo erro inicial, se o player nao fez a quest, remove a grana e nao add vip!

 

script systemvip2:

function onSay(cid, words, param)

local days = 10

local price = 5000000

local storage = 7777

local daysvalue = days * 24 * 60 * 60

local storageplayer = getPlayerStorageValue(cid, 13001)

local timenow = os.time()

if getPlayerStorageValue(cid, 13001) - os.time() <= 0 then

time = timenow + daysvalue

else

time = storageplayer + daysvalue

end

if(words == "!viphog") then

if not doPlayerRemoveMoney(cid, price) then

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você precisa de "..price.." gp's para colocar vip.")

doPlayerAddItem(cid,2148,50000)

return true

end

if getPlayerStorageValue(cid, storage) ~= 1 then

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você precisa completar a quest para renovar sua vip.") return true

end

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Foram adicionados "..days.." dias de VIP no seu character.")

setPlayerStorageValue(cid, 13001, time)

end

return true

end

 

talkactions.xml:

<talkaction log="no" words="!viphog" event="script" value="systemvip2.lua"/>
RoksasR
04 de fevereiro de 2013 às 14:48

Ok, tenta assim. substitui por esse:

 

 

function onSay(cid, words, param)

local days = 10

local price = 5000000

local stor1 = 7777

local daysvalue = days * 24 * 60 * 60

local storplayer = getPlayerStorageValue(cid, 13001)

local timenow = os.time()

if getPlayerStorageValue(cid, 13001) - os.time() <= 0 then

time = timenow + daysvalue

else

time = storplayer + daysvalue

end

if(words == "!viphog") then

if not doPlayerRemoveMoney(cid, price) then

doPlayerAddItem(cid,2148,price)

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você precisa de "..price.." gp's para colocar vip.")

return true

end

if getPlayerStorageValue(cid, stor1) ~= 1 then

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você precisa completar a quest para renovar sua vip.") return true

end

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Foram adicionados "..days.." dias de VIP no seu character.")

setPlayerStorageValue(cid, 13001, time)

end

return true

end

 

Editado Fevereiro 4 por Roksas