Postado Março 21, 2022 3 anos Olá galera do TK, estou aqui para pedir a ajuda de vossas excelências, pois estou com um script me infernizando, o qual já tentei e procurei arrumar e não tem jeito de arrumar esse bug. é sobre um reflect system que foi criado aqui no tibiaking segue o link: MOD Spoiler <?xml version="1.0" encoding="UTF-8"?> <mod name="Reflect System" version="0.1" author="Aluccard" contact="" enabled="yes"> <description> Script que funciona para refletir danos para as creatures que o atacar. </description> <event type="login" name="regReflectDamage" event="script"><![CDATA[ function onLogin(cid) registerCreatureEvent(cid,"ReflectDamage") return true end ]]></event> <event type="statschange" name="ReflectDamage" event="script"><![CDATA[ local slotPos = {CONST_SLOT_NECKLACE, CONST_SLOT_FEET, CONST_SLOT_RING} function onStatsChange(cid, attacker, type, combat, value) local reflectPercent = 0 local dmg = value local playerPos = getCreaturePosition(cid) local attackerPos = getCreaturePosition(attacker) for i = 1, #slotPos do if getPlayerSlotItem(cid, slotPos[i]).uid > 1 then if getItemReflectPercent(getPlayerSlotItem(cid, slotPos[i]).uid) then reflectPercent = reflectPercent + getItemReflectPercent(getPlayerSlotItem(cid, slotPos[i]).uid) end end end if reflectPercent > 0 then dmg = math.ceil(-value*((100-reflectPercent)/100)) if (dmg < 0) then doCreatureAddHealth(cid, dmg) doSendAnimatedText(playerPos, -dmg, COLOR_RED) doSendMagicEffect(playerPos, 0) else doSendMagicEffect(playerPos, 3) end dmg = math.ceil(-value*(reflectPercent/100)) if (dmg < 0) then doCreatureAddHealth(attacker, dmg) doSendAnimatedText(attackerPos, -dmg, COLOR_RED) doSendDistanceShoot(playerPos, attackerPos, CONST_ANI_SMALLHOLY) end else return true end end]]></event> </mod> LIB Spoiler function getItemReflectPercent(itemuid) return getItemAttribute(itemuid, "reflectPercent") end function doPlayerAddReflectedItem(cid, itemid, percent) doPlayerAddReflectedItem(cid,2538,100) local item = doPlayerAddItem(cid, itemid) doItemSetAttribute(item, "description", "[Reflect: "..percent.."%]") doItemSetAttribute(item, "reflectPercent", percent) end pelo que entendi esse item nao pode ser criado, pois irá dar um crash no servidor e cai mas pode ser adicionado por quest ou npc, tentei por npc NPC Spoiler local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end -- Config -- local reflectid = 2341 local percent = 20 local cost = 10000 function AddReflectItem(cid, message, keywords, parameters, node) if(not npcHandler:isFocused(cid)) then return false end if doPlayerRemoveMoney(cid, cost) then if doPlayerAddReflectedItem(cid, reflectid, percent) then return true else selfSay("No momento estou indisponivel.") doPlayerAddMoney(cid, cost) return false end else selSay("Voce não possui o dinheiro total!") return false end end reflect = keywordHandler:addKeyword({'reflect'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'You want to buy a reflect item? It cost '.. cost ..' gps'}) reflect:addChildKeyword({'yes'}, AddReflectItem, {}) reflect:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Alright then.', reset = true}) npcHandler:addModule(FocusModule:new()) em um script que o proprio @Aluccard criou mas nao funcionou também. agora estou pelejando para coloca-lo por quest. Reflect Spoiler function onUse(cid, item, fromPosition, itemEx, toPosition) a = 28606 id = 2538 if getPlayerStorageValue(cid, a) < 1 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Voce achou o "..getItemNameById(id)..".") doPlayerAddReflectedItem(cid,id,100) doPlayerSetStorageValue(cid, a, 1) else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Nao tem nada no bau.") end end mas ao abrir o baú aparece este erro: [Error - Action Interface] data/actions/scripts/Reflect.lua:onUse Description: data/lib/ReflectLib.lua:5: stack overflow stack traceback: data/lib/ReflectLib.lua:5: in function 'doPlayerAddReflectedItem' data/lib/ReflectLib.lua:5: in function 'doPlayerAddReflectedItem' data/lib/ReflectLib.lua:5: in function 'doPlayerAddReflectedItem' data/lib/ReflectLib.lua:5: in function 'doPlayerAddReflectedItem' data/lib/ReflectLib.lua:5: in function 'doPlayerAddReflectedItem' data/lib/ReflectLib.lua:5: in function 'doPlayerAddReflectedItem' data/lib/ReflectLib.lua:5: in function 'doPlayerAddReflectedItem' data/lib/ReflectLib.lua:5: in function 'doPlayerAddReflectedItem' data/lib/ReflectLib.lua:5: in function 'doPlayerAddReflectedItem' data/lib/ReflectLib.lua:5: in function 'doPlayerAddReflectedItem' ... data/lib/ReflectLib.lua:5: in function 'doPlayerAddReflectedItem' data/lib/ReflectLib.lua:5: in function 'doPlayerAddReflectedItem' data/lib/ReflectLib.lua:5: in function 'doPlayerAddReflectedItem' data/lib/ReflectLib.lua:5: in function 'doPlayerAddReflectedItem' data/lib/ReflectLib.lua:5: in function 'doPlayerAddReflectedItem' data/lib/ReflectLib.lua:5: in function 'doPlayerAddReflectedItem' data/lib/ReflectLib.lua:5: in function 'doPlayerAddReflectedItem' data/lib/ReflectLib.lua:5: in function 'doPlayerAddReflectedItem' data/lib/ReflectLib.lua:5: in function 'doPlayerAddReflectedItem' data/actions/scripts/Reflect.lua:8: in function <data/actions/scripts/Reflect.lua:1> e estava entregando o item, mas agora nem isso. conto com a ajuda de vocês POR FAVOR Editado Março 21, 2022 3 anos por Carlinhous1996 (veja o histórico de edições)
Postado Março 22, 2022 3 anos 3 horas atrás, Carlinhous1996 disse: doPlayerAddReflectedItem(cid,2538,100) creio que isso dentro da lib que ta fazendo bugar, vc chama função na lib adicionando e la ele chama a função de novo e fica num loop infinito tipo pela logica: action > chama doplayeradd na lib > dentro da lib ele chama de novo a função... creio que se vc tirar o doPlayerAddReflectedItem(cid,2538,100) da lib para function getItemReflectPercent(itemuid) return getItemAttribute(itemuid, "reflectPercent") end function doPlayerAddReflectedItem(cid, itemid, percent) local item = doPlayerAddItem(cid, itemid) doItemSetAttribute(item, "description", "[Reflect: "..percent.."%]") doItemSetAttribute(item, "reflectPercent", percent) end tenta deixar assim na lib, fecha e abre o ot e tenta clicar no bau
Postado Março 22, 2022 3 anos Autor 9 horas atrás, FeeTads disse: creio que isso dentro da lib que ta fazendo bugar, vc chama função na lib adicionando e la ele chama a função de novo e fica num loop infinito tipo pela logica: action > chama doplayeradd na lib > dentro da lib ele chama de novo a função... creio que se vc tirar o doPlayerAddReflectedItem(cid,2538,100) da lib para function getItemReflectPercent(itemuid) return getItemAttribute(itemuid, "reflectPercent") end function doPlayerAddReflectedItem(cid, itemid, percent) local item = doPlayerAddItem(cid, itemid) doItemSetAttribute(item, "description", "[Reflect: "..percent.."%]") doItemSetAttribute(item, "reflectPercent", percent) end tenta deixar assim na lib, fecha e abre o ot e tenta clicar no bau irei testar assim, mas no script ele manda adicionar essa tag. "Para adicionarmos novos items com o atributo Reflect usamos o comando doPlayerAddReflectedItem(cid,itemid,percent)." acabei de testa-la e realmente a quest voltou a funcionar, mas o player reflete 100% dos danos e nao toma dano algum. e aparece isso na distro: [Error - CreatureScript Interface] buffer:onStatsChange Description: (luaGetThingPosition) Thing not found Editado Março 22, 2022 3 anos por Carlinhous1996 (veja o histórico de edições)
Postado Março 23, 2022 3 anos 13 horas atrás, Carlinhous1996 disse: irei testar assim, mas no script ele manda adicionar essa tag. "Para adicionarmos novos items com o atributo Reflect usamos o comando doPlayerAddReflectedItem(cid,itemid,percent)." não mano, kkkkkkk ele fala pra vc usar isso dentro do script do action, tipo no teu bau que vc fez, vc adicionou ali "doPlayerAddReflectedItem(cid,id,100) " ele se referia a isso como chamar a função. e eu testei aqui esse script e ele não funciona, não pega a position do player mesmo, esse system de reflect é muito antigo, se tua source for atualizada existe o atributo de reflect mano <attribute key="reflectpercentall" value="10"/> <attribute key="reflectchanceall" value="30"/> se tu source for OTX 2+ ele tem esse atributo que vc bota no item, ai funciona assim <attribute key="reflectpercentall" value="10"/> esse eh referente a quanto dano o player vai receber de volta, ou seja se o player que esta batendo der 100 de dano, vai voltar 10 e vc pode alterar ali conforme quiser, o Value vai de 1 a 100 <attribute key="reflectchanceall" value="30"/> esse é a chance que o player dono do item tem de refletir, ou seja 30% de chance do dano tomado voltar pro atacador, e vc coloca no value qualquer valor de 1 a 100 também isso vai la no item.xml, dentro do item que vc quer que tenha reflect Editado Março 23, 2022 3 anos por FeeTads explicação extra (veja o histórico de edições)
Postado Março 24, 2022 3 anos Autor Em 22/03/2022 em 22:24, FeeTads disse: não mano, kkkkkkk ele fala pra vc usar isso dentro do script do action, tipo no teu bau que vc fez, vc adicionou ali "doPlayerAddReflectedItem(cid,id,100) " ele se referia a isso como chamar a função. e eu testei aqui esse script e ele não funciona, não pega a position do player mesmo, esse system de reflect é muito antigo, se tua source for atualizada existe o atributo de reflect mano <attribute key="reflectpercentall" value="10"/> <attribute key="reflectchanceall" value="30"/> se tu source for OTX 2+ ele tem esse atributo que vc bota no item, ai funciona assim <attribute key="reflectpercentall" value="10"/> esse eh referente a quanto dano o player vai receber de volta, ou seja se o player que esta batendo der 100 de dano, vai voltar 10 e vc pode alterar ali conforme quiser, o Value vai de 1 a 100 <attribute key="reflectchanceall" value="30"/> esse é a chance que o player dono do item tem de refletir, ou seja 30% de chance do dano tomado voltar pro atacador, e vc coloca no value qualquer valor de 1 a 100 também isso vai la no item.xml, dentro do item que vc quer que tenha reflect entendi. eu sei, mas esse sistema de refletir por atribute quando voce passa num fild aleatorio ou fica envenenado por um monstro que matara ele bug e o serve cai
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.