Ir para conteúdo
  • 0

O Que É Esse Error?


tonynamoral

Pergunta

Eu peguei esse script de reflect damage aki do Aluccard , porém ele fica dando error . e a funçao de adicionar o reflect no ITEM não está funcionando ;

 

Script :

 

 

 

<?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_HEAD}

 

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).uid > 1 then

if getItemReflectPercent(getPlayerSlotItem(cid, slotPos).uid) then

reflectPercent = reflectPercent + getItemReflectPercent(getPlayerSlotItem(cid, slotPos).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>

 

 

 

Funão de Adicionar item com Reflect


function getItemReflectPercent(itemid)
			return getItemAttribute(itemid, "reflectPercent")
end
function doPlayerAddReflectedItem(cid, itemid, percent)
local item = doPlayerAddItem(cid, itemid)
doItemSetAttribute(item, "description", "[Reflect: "..percent.."%]")
doItemSetAttribute(item, "reflectPercent", percent)
end

return true
end

 

Agora o error :


[11/12/2012 17:01:03] [Error - CreatureScript Interface]
[11/12/2012 17:01:03] buffer:onStatsChange
[11/12/2012 17:01:03] Description:
[11/12/2012 17:01:03] [string "loadBuffer"]:11: attempt to call global 'getItemReflectPercent' (a nil value)
[11/12/2012 17:01:03] stack traceback:
[11/12/2012 17:01:03]  [string "loadBuffer"]:11: in function <[string "loadBuffer"]:3>

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

Esse System está na sua pasta mods certo? Se for então o erro não é ele, porque o erro no Distro se trata de um CreatureScripts. Oque você colocou de novo no CreatureScripts? Seja oque for nos passe para resolvermos.

Link para o comentário
Compartilhar em outros sites

  • 0

Não testei, so tirei um end mas n deu bug, testa ae:

 


function getItemReflectPercent(itemid)
                               return getItemAttribute(itemid, "reflectPercent")
end
function doPlayerAddReflectedItem(cid, itemid, percent)
local item = doPlayerAddItem(cid, itemid)
doItemSetAttribute(item, "description", "[Reflect: "..percent.."%]")
doItemSetAttribute(item, "reflectPercent", percent)
return true
end

Link para o comentário
Compartilhar em outros sites

  • 0

Essa função está errada

 

function getItemReflectPercent(itemid)
return getItemAttribute(itemid, "reflectPercent")
end

 

Como ela está, ela retorna apenas atributos únicos de itens, e caso eles não existam, retorna nil.

 

Fiz algumas modificações nela e no script:

 



function getItemReflectPercent(item)
local reflectPercent = getItemAttribute(item.uid) or getItemInfo(item.itemid).reflectPercent
return reflectPercent or 0
end

 


<?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_HEAD}

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])) then
reflectPercent = reflectPercent + getItemReflectPercent(getPlayerSlotItem(cid, slotPos[i]))
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>

 

Não estou certo se irá funcionar.

 

Abraços.

Editado por Oneshot
Link para o comentário
Compartilhar em outros sites

  • 0

É só agora notei que seu erro tem nada a ver com o que eu fiz. No caso o servidor acusa que a função não existe.

 

Vou tentar criar um sistema parecido sem usar mods, pois eu odeio eles.

 

Abraços.

Link para o comentário
Compartilhar em outros sites

  • 0

Não agora que estou um tanto ocupado, mas se você quiser, você pode criar itens que refletem coisas pelo items.xml sem precisar de scripts secundários.

 

Por exemplo, vou pegar a magic plate armor, de ID 2472.

 

	<item id="2472" article="a" name="magic plate armor">
	<attribute key="description" value="An enchanted gem glows on the plate armor." />
	<attribute key="weight" value="8500" />
	<attribute key="armor" value="17" />
	<attribute key="slotType" value="body" />
</item>

 

Supondo que eu quero que ela reflita 10% de todos os tipos de dano, faço isso:

 

    <item id="2472" article="a" name="magic plate armor">
       <attribute key="description" value="An enchanted gem glows on the plate armor." />
       <attribute key="weight" value="8500" />
       <attribute key="armor" value="17" />
       <attribute key="reflectpercentall" value="10"/>
       <attribute key="reflectchanceall" value="100"/>
       <attribute key="slotType" value="body" />
   </item>

 

Assim ela terá 100% de chance de refletir 10% de todos os tipos de dano.

 

Lembrando que só funciona se estiver registrado no movements.xml.

 

Abraços.

Editado por Oneshot
Link para o comentário
Compartilhar em outros sites

  • 0

Não é possível, esses tipos de atributos só podem ser configurados no items.xml,não é possível criar um item que modifique eles. Só criando um atributo falso e um script que se baseie nele, como o Aluccard fez.

 

Mas se você usar vários itens com reflexão, a taxa acumula sim.

Editado por Oneshot
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...