Ir para conteúdo

Featured Replies

Postado

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 por Carlinhous1996 (veja o histórico de edições)

  • Respostas 7
  • Visualizações 969
  • Created
  • Última resposta

Top Posters In This Topic

Posted Images

Postado
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
  • 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 por Carlinhous1996 (veja o histórico de edições)

Postado
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 por FeeTads
explicação extra (veja o histórico de edições)

Postado
  • 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.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Conteúdo Similar

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.7k

Informação Importante

Confirmação de Termo