Ir para conteúdo
Banner com Efeitos

Featured Replies

Postado

Bom dia/tarde/noite.

pra ser direto ao ponto... Eu tive uma ideia de um sistema muito interessante para meu servidor.

após algum tempo estudando formas de faze-lo eu descobri uma forma (bem feia) de fazer.

Após algum tempo trabalhando no script cheguei a um resultado... porém não funcional vejamos:

 

Primeiro a ideia: esse script ,era pra ser bem simples, seria uma skill target que quando atingisse o inimigo deixaria nele um storage value por determinado tempo.

sairia um texto animado por puro capricho. passado o tempo esse storage value seria removido e sairia outro texto animado.

Esse sistema que pretendo fazer funcionaria somente se o player tivesse equipado com um item, mas tornou-se muito mais problematico do que eu imaginava.

 

vou postar os 2 pois acredito que o erro seja o mesmo então... não muda muito haha.

 

Verifica se X item está equipado:

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -2, -1, -3, -2)


local inimigo = {}
local escudo = 2520
local slot1 = getPlayerSlotItem(getCreatureTarget(cid), 5)
local slot2 = getPlayerSlotItem(getCreatureTarget(cid), 6)
local storage = 199901

function onCastSpell(cid, var)
         table.insert(inimigo, getCreatureTarget(cid))
                 if isPlayer then
                   if slot1 or slot2 == 2520 then
           	       setPlayerStorageValue(#inimigo, storage, 1)
                   doSendAnimatedText(getCreaturePosition(cid), 'Charged', 180)
                         else
                         return doCombat(cid, combar, var)
                   end
                       addEvent(function()
                           if isCreature(cid) then
                           setPlayerStorageValue(#inimigo, storage, 0)
                           doSendAnimatedText(getCreaturePosition(cid), 'Charge lost', 180)
                           end
                   end,4000)
                return doCombat(cid, combat, var)
                 end
                end

 

Não verifica se item está equipado:

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -2, -1, -3, -2)


local inimigo = {}
local storage = 199901

function onCastSpell(cid, var)
         table.insert(inimigo, getCreatureTarget(cid))
                 if isPlayer then
           	       setPlayerStorageValue(#inimigo, storage, 1)
                   doSendAnimatedText(getCreaturePosition(cid), 'Charged', 180)
                         else
                         return doCombat(cid, combat, var)
                         end
            addEvent(function()
                 if isCreature(cid) then
                    setPlayerStorageValue(#inimigo, storage, 0)
                    doSendAnimatedText(getCreaturePosition(cid), 'Charge lost', 180)
                 end
            end,4000)
return doCombat(cid, combat, var)
                 end

O que me intriga muito nos 2 scripts é o fato de não ter nenhum erro no debugger (OtScriptLive) e nem no distro do servidor.

o unico erro aparente é quano o player usa que aparece o erro avisando que o player está sem mana...

porém baixei o custo de mana da magia pra 0 e testei em 2 personagens com mais de 5k de mana...

eu sou um scripter iniciante (MUITO iniciante... NOVATO... NEWBA) portanto deve ser um erro ridiculo...

alguem tem alguma solução? haha

Resolvido por Wakon

Ir para solução
  • Respostas 6
  • Visualizações 433
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • Fiz um aqui pra você, veja se lhe agrada: local storage, escudo = 40955, 2520 function onCastSpell(cid, var) local slot1, slot2 = getPlayerSlotItem(cid, CONST_SLOT_RIGHT).itemid, getPlayerSlotIte

  • Sim é possível declarar um else para cada if, sobre a função no meio da frase, acho que da maneira que eu coloquei deu a entender errado, coloquei essas aspas para citar o nome do shield na frase, ent

Postado
  • Solução

Fiz um aqui pra você, veja se lhe agrada:

local storage, escudo = 40955, 2520

function onCastSpell(cid, var)
local slot1, slot2 = getPlayerSlotItem(cid, CONST_SLOT_RIGHT).itemid, getPlayerSlotItem(cid, CONST_SLOT_LEFT).itemid
local target, pos =  getCreatureTarget(cid), getCreaturePosition
    if isPlayer(target) then   
        if slot1 == escudo or slot2 == escudo then     
            setPlayerStorageValue(target, storage, 1)	
            doCreatureSay(target, 'Charged!', TALKTYPE_MONSTER)	
            doSendMagicEffect(pos(target), CONST_ME_STUN)	
            addEvent(function()	    
                setPlayerStorageValue(target, storage, -1)		
                doCreatureSay(target, 'Charged lost!', TALKTYPE_MONSTER)		
                doSendMagicEffect(pos(target), CONST_ME_MAGIC_GREEN)	
            end, 4000)
        else   
            doSendMagicEffect(pos(cid), CONST_ME_POFF)  
           return doPlayerSendCancel(cid, 'Você só pode usar esta magia com o escudo "'.. getItemNameById(escudo) ..'" equiipado.') and false
        end
    else
        doSendMagicEffect(pos(cid), CONST_ME_POFF)
       return doPlayerSendCancel(cid, 'Você só pode usar em jogadores.') and false
    end
   return true
end

 

Postado
  • Autor

testarei logo logo, no momento estou lendo o script de cima a baixo algumas 50vezes, para detectar todos os erros.

inclusive não sabia que podia usar mais de 1 else... mas pelo visto é possivel declarar 1 else para cada if que foi aberto, correto?

todavia fiquei curioso a respeito dessa linha especifica:

return doPlayerSendCancel(cid, 'Você só pode usar esta magia com o escudo "'.. getItemNameById(escudo) ..'" equiipado.') and false

para declarara uma função no meio de uma frase essa é a "formula"?  colocar entre "'. . XXyyXyxyX . .'"?

haha, há tantas coisas para aprender... :rolleyes:

 

obs-- 

uma outra (ultima!?) pergunta, nesse addevents :

addEvent(function()	    
                setPlayerStorageValue(target, storage, -1)		
                doCreatureSay(target, 'Charged lost!', TALKTYPE_MONSTER)		
                doSendMagicEffect(pos(target), CONST_ME_MAGIC_GREEN)	
            end, 4000)

caso o player mude seu target durante os 4 segundos, acho que o script vai retirar o storage de um terceiro player. estou certo?

Editado por Henriquegb
outra duvida (veja o histórico de edições)

Postado

Sim é possível declarar um else para cada if, sobre a função no meio da frase, acho que da maneira que eu coloquei deu a entender errado, coloquei essas aspas para citar o nome do shield na frase, então não é necessário colocar as aspas, você abre o texto utilizando ' ou " e caso queira adicionar uma função no meio você fecha ' ou ", adiciona a .. função .., abre o texto de novo e termina de digitar, no final fecha novamente. Exemplo:

doPlayerSendCancel(cid, "Aqui é o texto e fecha ".. função aqui .." abre novamente e fecha.")

ou utilizando apenas '

doPlayerSendCancel(cid, 'Aqui é o texto e fecha '.. função aqui ..' abre novamente e fecha.')

 

Agora sobre o addEvent, não, pois o addEvent já é "iniciado" assim que manda a magia, sendo assim target do addEvent será o que você lançou a magia.

 

Espero que tenha entendido, não sou muito bom em explicar.

Editado por Wakon (veja o histórico de edições)

Postado
  • Autor

Eu entendi perfeitamente a explicação, não posso testar o script agora.

encontrei uns erros na minha distro e estou investindo tempo procurando e tentando editar outras.

mas, acredito que funcione.

Somente pela "aula" que recebi já da pra dar o topico como sanado.

 

Uma correção (no caso tinha tanto erro que não foi bem uma correção) explica tão bem quanto os proprios tutoriais.

OBRIGADO PELA ATENÇÃO rep+

 

Editado por Henriquegb (veja o histórico de edições)

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.6k

Informação Importante

Confirmação de Termo