Ir para conteúdo

Featured Replies

Postado

Boa tarde pessoal, peguei um server no meio do caminho e agora estou tendo dificuldade para finalizar alguns sistemas, entre eles um onde o player troca items em um npc para aumentar progressivamente o dano da sua wand em 50%, o npc está funcionando corretamente e consegue fazer essa troca do item para setar um storage novo. Segue parte do script do NPC com a wand que estou tentando arrumar:

Citar

function creatureSayCallback(cid, type, msg)
          if(not npcHandler:isFocused(cid)) then
                    return false
          end
          local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
          if msgcontains(msg, 'comuns') then 
                     npcHandler:say("Voce deseja evoluir a {jester staff} ou {crystal staff}?", cid)
                              elseif msgcontains(msg, {"jester staff"}) then 
                              local a1 = 5 * getPlayerStorageValue(cid, 81)    
                              local level1 = 50 * getPlayerStorageValue(cid, 81)
                              if getPlayerStorageValue(cid, 80) < 7500 then                              
                              if getPlayerItemCount(cid, 5944) >= a1 then
                              doPlayerRemoveItem(cid, 5944, a1)
                              setPlayerStorageValue(cid, 80, getPlayerStorageValue(cid, 80)+500)
                              setPlayerStorageValue(cid, 81, getPlayerStorageValue(cid, 81)+1)
                              doSendAnimatedText(getPlayerPosition(cid), "Upgrade!", TEXTCOLOR_YELLOW)
                              doSendMagicEffect(getCreaturePosition(cid), math.random(28,28))
                              doBroadcastMessage("[WANDS/RODS SYSTEM]: O jogador (" .. getCreatureName(cid) .. ") aumentou em ".. level1 .."% o ataque com a Jester Staff.", 19)
                              selfSay('Parabéns voce recebeu seu upgrade.', cid)
                              else
                              selfSay('Desculpe voce não tem '.. a1 ..' upgrade sphere.', cid)
                              end
                              else
                              selfSay('Desculpe voce atingiu o limite de upgrade da jester staff.', cid)
                              end

 

A parte que não estou conseguindo resolver é sobre onde utilizar esse storage setado... nesse server as wands são editadas com paralyze critical etc a partir do seguinte script:

Citar

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, true)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE)

setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_DEATH)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -5.10, -60, -5.10, -60, 5, 5, 4, 7)

local combat2 = createCombatObject()
setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE)
setCombatParam(combat2, COMBAT_PARAM_EFFECT, CONST_ME_SMALLCLOUDS)


local condition = createConditionObject(CONDITION_CURSED)
setConditionParam(condition, CONDITION_PARAM_DELAYED, 1)
addDamageCondition(condition, 9, 600, -2200)
addDamageCondition(condition, 9, 600, -2200)
setCombatCondition(combat2, condition)

local combat3 = createCombatObject()
setCombatParam(combat3, COMBAT_PARAM_TARGETCASTERORTOPMOST, true)
setCombatParam(combat3, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE)

setCombatParam(combat3, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
setCombatParam(combat3, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_DEATH)
setCombatFormula(combat3, COMBAT_FORMULA_LEVELMAGIC, -7.20, -60, -7.20, -60, 5, 5, 4, 7)


local function onUseWeapon1(parameters)
doCombat(parameters.cid, combat, parameters.var)
end

local function onUseWeapon2(parameters)
doCombat(parameters.cid, combat2, parameters.var)
end

local function onUseWeapon3(parameters)
doCombat(parameters.cid, combat3, parameters.var)
end


function onUseWeapon(cid, var)
local parameters = {cid = cid, var = var, combat = combat, combat2 = combat2, combat3 = combat3}
local chance = math.random(1, 100)

if chance > 20 then
doCombat(cid, combat, var)
elseif chance > 1 and chance <= 5 then
doCombat(cid, combat2, var)
doSendAnimatedText(getPlayerPosition(cid),"CURSED!", TEXTCOLOR_GREY)
doCombat(cid, combat, var)
elseif chance <= 10 then
doCombat(cid, combat3, var)
doSendAnimatedText(getPlayerPosition(cid),"CRITICAL!", TEXTCOLOR_GREY)
elseif chance <= 8 then
doPlayerAddMana(cid, 15000)
doSendMagicEffect(getPlayerPosition(cid), COST_ME_MAGIC_BLUE)
addEvent(onUseWeapon1, 1, parameters)
end
return true
end

 

 

Minha idéia foi utilizar essa fórmula de dano para aumentar conforme a storage, porém sou muito iniciante na escrita .lua e acho que estou errando algo, segue o que tentei fazer:

Citar

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, true)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_DEATH)

if getPlayerStorageValue(cid, 80) then
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -5.10, -60, -5.10, -60, 5, 5, 4, 7)
elseif (getPlayerStorageValue(cid, 81) == 1) then
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -15.10, -60, -15.10, -60, 5, 5, 4, 7)
end
 

Obtive os seguintes erros no registro e a wand sequer ataca agora

Citar

[Error - Test Interface] data/weapons/scripts/anihi/jester.lua Description: (luaGetCreatureStorage) Creature not found [Error - Test Interface] data/weapons/scripts/anihi/jester.lua Description: (luaGetCreatureStorage) Creature not found [Error - Weapon Interface] data/weapons/scripts/anihi/jester.lua Description: (luaGetCreatureStorage) Creature not found [Error - Weapon Interface] data/weapons/scripts/anihi/jester.lua Description: (luaGetCreatureStorage) Creature not found (done).

Agradeceria muito qualquer ajuda! Desde já obrigado

Postado

Coloquei alguns comentários pra vc entender passo a passo.

 

Spoiler

local function damage(cid, critical) 
    local lvl, ml = getPlayerLevel(cid), getPlayerMagLevel(cid)
    local formula = (lvl + ml + 100) -- crie sua formula do dano da wand aqui
    if critical == true then -- aqui checa se é dano critical
        formula = formula * 2 -- aqui é o dano base se tornando critico
    end
    if getPlayerStorageValue(cid, XXXX) >= 1 then -- storage que boosta a wand
        for i = 1, getPlayerStorageValue(cid, XXXX) do 
            formula = formula * 1.5 -- multiplica o dano por 50%
        end
    end
    return(formula) -- retorna o dano da wand após os devidos calculos
end

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, true)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_DEATH)

local combat2 = createCombatObject()
setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE)
setCombatParam(combat2, COMBAT_PARAM_EFFECT, CONST_ME_SMALLCLOUDS)

local condition = createConditionObject(CONDITION_CURSED)
setConditionParam(condition, CONDITION_PARAM_DELAYED, 1)
addDamageCondition(condition, 9, 600, -2200)
addDamageCondition(condition, 9, 600, -2200)
setCombatCondition(combat2, condition)

local combat3 = createCombatObject()
setCombatParam(combat3, COMBAT_PARAM_TARGETCASTERORTOPMOST, true)
setCombatParam(combat3, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE)
setCombatParam(combat3, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
setCombatParam(combat3, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_DEATH)

function onTargetCreature(cid, target)  -- funcao que eh ativada quando o "combat" for atingir o alvo
    doTargetCombatHealth(cid, target, COMBAT_DEATHDAMAGE, -damage(cid, false), -damage(cid, false), CONST_ME_NONE) -- causa dano no alvo
end
setCombatCallback(combat, CALLBACK_PARAM_TARGETCREATURE, "onTargetCreature")

function onTargetCreature(cid, target) -- funcao que eh ativada quando o "combat3" for atingir o alvo
    doTargetCombatHealth(cid, target, COMBAT_DEATHDAMAGE, -damage(cid, true), -damage(cid, true), CONST_ME_NONE) -- causa dano no alvo
end
setCombatCallback(combat3, CALLBACK_PARAM_TARGETCREATURE, "onTargetCreature")

function onUseWeapon(cid, var)
    local chance = math.random(1, 100)
    if chance > 20 then
        doCombat(cid, combat, var)
    elseif chance > 1 and chance <= 5 then
        doCombat(cid, combat2, var)
        doSendAnimatedText(getPlayerPosition(cid),"CURSED!", TEXTCOLOR_GREY)
        doCombat(cid, combat, var)
    elseif chance <= 10 then
        doCombat(cid, combat3, var)
        doSendAnimatedText(getPlayerPosition(cid),"CRITICAL!", TEXTCOLOR_GREY)
    elseif chance <= 8 then
        doPlayerAddMana(cid, 15000)
        doSendMagicEffect(getPlayerPosition(cid), COST_ME_MAGIC_BLUE)
        doCombat(cid, combat, var)
    end
return true
end

 

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.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.7k

Informação Importante

Confirmação de Termo