BX

[pedido] Tenho Pedidos De Script E Talkaction

Por bxkbxk, 15 de ago. de 2009 em Archived

otserv
tibia
script
12
1.3k
bxkbxkB
15 de agosto de 2009 às 21:09

Ola gente... eu denovo :p

 

Tenho alguns pedidos sobre Sript e talkaction.

 

1°-Voce fala [Exemplo] !item, dai vc ganha um item, mas perde um item[exemplo, crystal coin]?

 

2°-Um script que a cada 1 hora ou 2 hora da clean no server

 

3°-Por exemplo, um talkaction que vc compra uma magia, tipo !blastspell, dai vc perde um certo item [exemplo, crystal coin], mas vc pod soltar o blast spell...

 

E otra coisa, se o Macryzius ler este topico, me responda uma coisa,

Naquele topico anterior Topico, voce disse o talkaction completo, mas me explique 3 coisas [xD]

1-O que exatamente precisa por nessa parte:

if(getPlayerVocation(cid) > 4) then [Eh o ID da classe?]

 

2-Tem que por 4 talkaction para cada vocaçao?

 

3-Como resolve este erro:

[15/08/2009 20:52:18] Warning: [Event::loadScript] Can not load script. data/talkactions/scripts/blastkina.lua

[15/08/2009 20:52:18] data/talkactions/scripts/blastkina.lua:17: 'end' expected (to close 'if' at line 2) near '<eof>'

 

 

 

 

Agradecido desde ja

WiltryW
15 de agosto de 2009 às 21:59

1°Script

 

function onSay(cid, words, param)

itemid = 2160 -- cristal coin, no caso o item que da em troca
item = 2160 -- item que ganha
itemname = getItemNameById(item)
itemidname = getItemNameById(itemid)

if doRemoveItem(cid, itemid, [b]1[/b]) == TRUE then -- 1 e igual a quantidade
doPlayerAddItem(cid, item, 1)
doPlayerSendTextMessage(cid, 22, "Você comprou um(a) "..itemname..".")
else
doPlayerSendTextMessage(cid, 22, "Você precisa de um(a) "..itemidname.." para ganhar um(a) "..itemname..".")
end
return TRUE
end

<talkaction words="!item" script="nomedoscript.lua"/>

 

Não testei, qualquer bug posta ae.

 

Script 2:

O seu servidor tem a pasta globalevents?

Se tiver, vem um script no TFS assim:

function executeClean()
doCleanMap()
doBroadcastMessage("Game map cleaned, next clean in 2 hours.")
return TRUE
end

function onThink(interval, lastExecution)
doBroadcastMessage("Game map cleaning within 30 seconds, please pick up your items!")
addEvent(executeClean, 30000)
return TRUE
end

<globalevent name="clean" interval="7200" event="script" value="clean.lua"/>

 

Dai só configurar como quizer...

 

A da magia nao sei fazer...

E sobre o bug do Marcryzius

[15/08/2009 20:52:18] Warning: [Event::loadScript] Can not load script. data/talkactions/scripts/blastkina.lua

[15/08/2009 20:52:18] data/talkactions/scripts/blastkina.lua:17: 'end' expected (to close 'if' at line 2) near '<eof>'

Um erro muito normal.

Só adicionar um end no script que creio eu que irá funcionar.

 

Abraços!

bxkbxkB
15 de agosto de 2009 às 22:29

Vlwws, vo testa jah jah edito...

 

function onSay(cid, words, param)
if isPremium(cid) == TRUE then
if getPlayerStorageValue(cid, 1020) == 50 then
if(getPlayerVocation(cid) > 11) then
if(doPlayerRemoveItem(cid, 8839,50) == TRUE) then
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "msg.")
setPlayerPromotionLevel(cid, 1)
else
doPlayerSendTextMessage(cid,22, "item.")
doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
end
else
doPlayerSendCancel(cid, "promot.")
doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
end
return TRUE
end
end
end

Vc pode me responder esta? tipo esse eh um talkaction que precisa ter um item pra virar 2° promotion...

mas na parte if(getPlayerVocation(cid) > 11) then, tem de botar a id da vocation? [em negrito]

satan666S
15 de agosto de 2009 às 22:36

/z\ up:

retorne a função e não ao if.

 

wiltry

isso não e erro no meu script.

 

topico:

1ª)

você ponhe o id da vocação maxima que pode ter promotion tipo existe normalmente 4 vocações e cada uma existe uma promotion.

 

então seria assim

if(getPlayerVocation(cid) <= 4) then

que no caso seria vocação 4 ou menor.

 

2ª)

não.

esse script serve pra todas as vocações.

 

3ª) esse erro e não bug e causado pela falta do end pra fechar o if.

Editado Agosto 15 por Marcryzius

bxkbxkB
15 de agosto de 2009 às 22:41

Vlw macryzius :D

Vc tah me ajudando muito ateh agora :p

WiltryW
16 de agosto de 2009 às 08:24

#Mar~

Foi mal, entendi errado.

 

#xxempirexx

O script (o meu) funcionou?

bxkbxkB
16 de agosto de 2009 às 16:35

Olha como esta o script:

function onSay(cid, words, param)

itemid = 8839
item = 2306
itemname = getItemNameById(item)
itemidname = getItemNameById(itemid)

if doRemoveItem(cid, item, 65) == TRUE then
doPlayerAddItem(cid, itemid, 1)
doPlayerSendTextMessage(cid, 22, "Você comprou um(a) "..itemname..".")
else
doPlayerSendTextMessage(cid, 22, "Você precisa de um(a) "..itemidname.." para ganhar um(a) "..itemname..".")
end
return TRUE
end

 

No caso o "itemid" seria 8839, e o "item" seria 2306,

Eu tenho os 65 "itemid" mas aparece:

16:33 Você precisa de um(a) Pereba de Reset para ganhar um(a) blast healing rune.

[itemid: pereba de reset]

[item:blast healing rune]

E eu nao ganho nada :p plz explica ae xP

satan666S
16 de agosto de 2009 às 17:24

troca isso:

 

if doRemoveItem(cid, item, 65) == TRUE then

 

por isso:

 

if doPlayerRemoveItem(cid, item, 65) == TRUE then
16 de agosto de 2009 às 17:58

Mto bom esses scripters aew vo bota no meu ot tambem obrigado

bxkbxkB
16 de agosto de 2009 às 18:30

function onSay(cid, words, param)

itemid = 8839
item = 2306
itemname = getItemNameById(item)
itemidname = getItemNameById(itemid)

if doPlayerRemoveItem(cid, item, 65) == TRUE then
doPlayerAddItem(cid, itemid, 1)
doPlayerSendTextMessage(cid, 22, "Você comprou um(a) "..itemname..".")
else
doPlayerSendTextMessage(cid, 22, "Você precisa de 65 "..itemidname.." para ganhar um(a) "..itemname..".")
end
return TRUE
end

 

Olhe como esta o talkaction. Ainda nao funciona, eu falo o comando

mas aparece "Voce precisa de 65 perebas de reset para ganhar um(a) blast healing rune"

Mas eu tenho mais q 65! E nao ganho nada :p tem algo de errado?

satan666S
16 de agosto de 2009 às 20:39

se você tiver usando isso em runas com cargas não vai funcionar você vai ter que modificar o script pra retirar as cagas da runa.

WiltryW
16 de agosto de 2009 às 20:50

Ahh, um erro aqui de coerencia.

Troca por isso:

 

function onSay(cid, words, param)

itemid = 8839 -- id do item que o player vai ganhar
item = 2306 -- no caso, o ID da pereba
itemname = getItemNameById(item)
itemidname = getItemNameById(itemid)

if doPlayerRemoveItem(cid, item, 65) == TRUE then
doPlayerAddItem(cid, itemid, 1)
doPlayerSendTextMessage(cid, 22, "Você comprou um(a) "..itemidname..".")
else
doPlayerSendTextMessage(cid, 22, "Você precisa de 65 "..itemname.." para ganhar um(a) "..itemidname..".")
end
return TRUE
end

 

Acho que agora da.

flw