Dúvida Sobre Spell!

kilat
Por kilat
em Scripts

kilat

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 23/07/07Posts: 7

Olá gente, vamos direto ao ponto.

 

Eu tenho essa spell (exevo gran mas vis):

 

local combat = createCombatObject()

setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)

setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_BIGCLOUDS)

setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1.3, -30, -1.6, 0)

 

local area = createCombatArea(AREA_CROSS5X5)

setCombatArea(combat, area)

 

function onCastSpell(cid, var)

return doCombat(cid, combat, var)

end

 

E também tenho esta spell (exevo gran mas flam):

 

local combat = createCombatObject()

setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)

setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA)

setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1.6, -50, -1.8, 0)

 

local area = createCombatArea(AREA_CROSS5X5)

setCombatArea(combat, area)

 

function onCastSpell(cid, var)

return doCombat(cid, combat, var)

end

 

Eu gostaria de colocar as 2 em um script só, cuja palavra mágica para ativar fosse "exevo gran mas vis" e fazer uma condição assim:

Vou dar um exemplo em portugol.

 

 

se (player = premium and promotion) entao

USA A MAGIA DE FOGO que no caso seria o script do (exevo gran mas flam)

senao

USA A MAGIA DE RAIO que no caso seria o script do (exevo gran mas vis)

fim

 

 

Espero que alguem possa me ajudar.

Desde já,

Obrigado!

Mixtura

Mixtura
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 11/07/09Posts: 45Char no Tibia: nao tenho

Olá gente, vamos direto ao ponto.

 

Eu tenho essa spell (exevo gran mas vis):

 

local combat = createCombatObject()

setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)

setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_BIGCLOUDS)

setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1.3, -30, -1.6, 0)

 

local area = createCombatArea(AREA_CROSS5X5)

setCombatArea(combat, area)

 

function onCastSpell(cid, var)

return doCombat(cid, combat, var)

end

 

 

E também tenho esta spell (exevo gran mas flam):

 

local combat = createCombatObject()

setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)

setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA)

setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1.6, -50, -1.8, 0)

 

local area = createCombatArea(AREA_CROSS5X5)

setCombatArea(combat, area)

 

function onCastSpell(cid, var)

return doCombat(cid, combat, var)

end

 

Eu gostaria de colocar as 2 em um script só, cuja palavra mágica para ativar fosse "exevo gran mas vis" e fazer uma condição assim:

Vou dar um exemplo em portugol.

 

 

se (player = premium and promotion) entao

USA A MAGIA DE FOGO que no caso seria o script do (exevo gran mas flam)

senao

USA A MAGIA DE RAIO que no caso seria o script do (exevo gran mas vis)

fim

 

 

Espero que alguem possa me ajudar.

Desde já,

Obrigado!

 

Kara.

dexa eu ve se entendi...

voce quer um exevo gran mas vis com ataque de fogo???

se for...

Troca: setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)

por: setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)

 

é isso...

caso nao for isso que voce queira pode fala, que outras pessoas podem lhe sanar essa duvida...

Flw's

Quer Saber Quem Eu Sou???Add:

daniel_brozoski@hotmail.com

 

Clique Aqui E Ganhe Um Doce

Oneshot

avatar
Marquês
Marquês

INFOS

Grupo: MarquêsRegistrado: 05/07/09Posts: 1347

kilat,

Pelo que compreendi, você quer uma magia que seja ativada de um jeito para certa condição, e do contrário, de outro jeito. Então, segue o conteúdo da sua magia, que você deverá substituir pelo conteúdo do arquivo LUA da magia Exevo Gran Mas Vis.

 

local combat_premium = createCombatObject()
  setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
  setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA)
  setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1.6, -50, -1.8, 0)

local combat_free = createCombatObject()
  setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
  setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_BIGCLOUDS)
  setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1.3, -30, -1.6, 0)

local area_premium = createCombatArea(AREA_CROSS5X5)
local area_free = createCombatArea(AREA_CROSS5X5)

setCombatArea(combat_premium, area_premium)
setCombatArea(combat_free, area_free)

function onCastSpell_free(parameters)
  doCombat(parameters.cid, combat_free, parameters.var)
end

function onCastSpell_premium(parameters)
  doCombat(parameters.cid, combat_free, parameters.var)
end

function onCastSpell(cid, var)
  local parameters = {cid = cid, var = var}
  if (getPlayerVocation(cid) == 5 and getPlayerPremiumDays(cid) > 0) then
     addEvent(onCastSpell_premium, 0, parameters)
  else
     addEvent(onCastSpell_free, 0, parameters)
  end
  return true
end

Vodkart

Sumus Validus
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 21/05/10Posts: 3406Gênero: Masculino

ah deixa nem vi o post do oneshot

 

abraços

 

ah o meu fico assim:

(acho que não tem funçao pra ve se o jogador é promote)

 

 

 

local combat1 = createCombatObject()
setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
setCombatParam(combat1, COMBAT_PARAM_EFFECT, CONST_ME_BIGCLOUDS)
setCombatFormula(combat1, COMBAT_FORMULA_LEVELMAGIC, -1.3, -30, -1.6, 0)

local combat2 = createCombatObject()
setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
setCombatParam(combat2, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA)
setCombatFormula(combat2, COMBAT_FORMULA_LEVELMAGIC, -1.6, -50, -1.8, 0)


local area1 = createCombatArea(AREA_CROSS5X5)
setCombatArea(combat1, area1)

local area2 = createCombatArea(AREA_CROSS5X5)
setCombatArea(combat2, area2)

function onCastSpell(cid, var)
if (isPremium(cid) == TRUE) then
return doCombat(cid, combat2, var)
else
return doCombat(cid, combat1, var)
end
end

 

 

bossisg.png

kilat

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 23/07/07Posts: 7

Oneshot, você entendeu perfeitamente o que eu desejo fazer, usei o seu script porém ocorreram alguns erros:

 

 

[17/07/2010 12:30:46] Lua Script Error: [spell Interface]

[17/07/2010 12:30:46] data/spells/scripts/attack/rage of the skies.lua

 

[17/07/2010 12:30:46] luaSetCombatParam(). Combat not found

 

[17/07/2010 12:30:46] Lua Script Error: [spell Interface]

[17/07/2010 12:30:46] data/spells/scripts/attack/rage of the skies.lua

 

[17/07/2010 12:30:46] luaSetCombatParam(). Combat not found

 

[17/07/2010 12:30:46] Lua Script Error: [spell Interface]

[17/07/2010 12:30:46] data/spells/scripts/attack/rage of the skies.lua

 

[17/07/2010 12:30:46] luaSetCombatFormula(). Combat not found

 

[17/07/2010 12:30:46] Lua Script Error: [spell Interface]

[17/07/2010 12:30:46] data/spells/scripts/attack/rage of the skies.lua

 

[17/07/2010 12:30:46] luaSetCombatParam(). Combat not found

 

[17/07/2010 12:30:46] Lua Script Error: [spell Interface]

[17/07/2010 12:30:46] data/spells/scripts/attack/rage of the skies.lua

 

[17/07/2010 12:30:46] luaSetCombatParam(). Combat not found

 

[17/07/2010 12:30:46] Lua Script Error: [spell Interface]

[17/07/2010 12:30:46] data/spells/scripts/attack/rage of the skies.lua

 

 

Obrigadão ai pelo esforço e pela ajuda, espero que consigamos resolver estes erros.

 

Vodkart, sua cript funcionou perfeitamente, do jeitinho que eu queria, te agradeço muitoo pela dedicação e esforço, porém, tem mais 2 negocinhos que eu precio nessa script ;x

Precisava que ele usasse como condição além de ser premium, ele tem q ser promotion = 2 e precisaria de uma variável booleana própria para identificar se o player tem permissão para usar a magia,

 

Verdadeiro = pode usar

falso = não pode usar

 

Muito obrigado pelo esforço de todos para me ajudar e desculpa se estou pedindo de mais,

aguardo resposta

abraço!

 

Eiiiii gente, eu já consegui fazer a condição pra promotion2 que no caso seria a vaocation alem do master sorcerer, agora só falta eu fazer uma condição própria de verdadeiro ou falso ou 0 e 1 para dizer se o player tem ou nao a magia 2 (que no caso é a de fogo).

 

A spell por enquanto está assim:

 

local combat1 = createCombatObject()

setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)

setCombatParam(combat1, COMBAT_PARAM_EFFECT, CONST_ME_BIGCLOUDS)

setCombatFormula(combat1, COMBAT_FORMULA_LEVELMAGIC, -1.3, -30, -1.6, 0)

 

local combat2 = createCombatObject()

setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)

setCombatParam(combat2, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA)

setCombatFormula(combat2, COMBAT_FORMULA_LEVELMAGIC, -1.6, -50, -1.8, 0)

 

 

local area1 = createCombatArea(AREA_CROSS5X5)

setCombatArea(combat1, area1)

 

local area2 = createCombatArea(AREA_CROSS5X5)

setCombatArea(combat2, area2)

 

function onCastSpell(cid, var)

if (isPremium(cid) == TRUE and getPlayerVocation(cid) == 9) then

return doCombat(cid, combat2, var)

else

return doCombat(cid, combat1, var)

end

end

 

Só falta a condição que citei a cima..

Vlw gente!! to qsee :D

graças a vocês!!

abraço

Oneshot

avatar
Marquês
Marquês

INFOS

Grupo: MarquêsRegistrado: 05/07/09Posts: 1347

kilat,

Haha! Se não fosse pelo meu erro, teria funcionado também,

Agora, vejamos se entendi, você quer uma verificação se o jogador aprendeu a magia para poder invocar-la? No caso seria com a função getPlayerLearnedInstantSpell(cid, name), ele retorna um valor booleano [verdadeiro = o jogador aprendeu a magia, falso = o contrário].

 

Vou usar o script do Vodkart, que está menos propenso a erros.

 

local combat1 = createCombatObject()
setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
setCombatParam(combat1, COMBAT_PARAM_EFFECT, CONST_ME_BIGCLOUDS)
setCombatFormula(combat1, COMBAT_FORMULA_LEVELMAGIC, -1.3, -30, -1.6, 0)

local combat2 = createCombatObject()
setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
setCombatParam(combat2, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA)
setCombatFormula(combat2, COMBAT_FORMULA_LEVELMAGIC, -1.6, -50, -1.8, 0)

local area1 = createCombatArea(AREA_CROSS5X5)
setCombatArea(combat1, area1)

local area2 = createCombatArea(AREA_CROSS5X5)
setCombatArea(combat2, area2)

function onCastSpell(cid, var)
if (isPremium(cid) == TRUE and getPlayerVocation(cid) == 9) then
return doCombat(cid, combat2, var)
elseif (getPlayerLearnedSpell(cid, "Rage of the Skies")) then
return doCombat(cid, combat1, var)
else
doPlayerSendCancel(cid, "You can\'t use this spell")
end
end

 

Até mais,

kilat

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 23/07/07Posts: 7

O learn spell foi uma boa idéia, porém, não funcionou. Pois eu teria que abilidar o learnspell na magia nos spell.xml

Eu precisaria de uma condição propia, para que, quando o player entrar no site e clicar em "adicionar spell" ele tem q adicionar um TRUE no char para liberar a spell e assim passando pela condição a spell iria mudar. Seria algo mais ou menso assim:

 

if (player == premium AND vocation == 9 AND condição == TRUE) then

USAR MAGIA DE FOGO, no caso, return COMBAT 2

else

USAR MAGIA DE RAIO, no caso, retur combat 1

end

 

 

//a condição == TRUE seria a condição que te falei, que o cara vai add a spell pelo site e em algum lugar no char vai add condição = TRUE caso contrário será FALSO

precisaria de uma condição e uma tabela especial no sql do char para addo TRUE correto?

 

Fico no aguardo

Obrigadãoo

Vodkart

Sumus Validus
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 21/05/10Posts: 3406Gênero: Masculino

botei por storage

ou seja quando esse cara for no site e comprar a spells ele ganha storage 11254 e pode usar a spells

 

local combat1 = createCombatObject()
setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
setCombatParam(combat1, COMBAT_PARAM_EFFECT, CONST_ME_BIGCLOUDS)
setCombatFormula(combat1, COMBAT_FORMULA_LEVELMAGIC, -1.3, -30, -1.6, 0)

local combat2 = createCombatObject()
setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
setCombatParam(combat2, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA)
setCombatFormula(combat2, COMBAT_FORMULA_LEVELMAGIC, -1.6, -50, -1.8, 0)


local area1 = createCombatArea(AREA_CROSS5X5)
setCombatArea(combat1, area1)

local area2 = createCombatArea(AREA_CROSS5X5)
setCombatArea(combat2, area2)

local config = {
magia = "TRUE", 
storage = 11254
}


function onCastSpell(cid, var)
if (isPremium(cid) == TRUE and getPlayerVocation(cid) == 9) then
if (config.magia == "TRUE") and getPlayerStorageValue(cid, tonumber(config.storage)) >= 1  then
return doCombat(cid, combat2, var)
else
return doCombat(cid, combat1, var)
end
end
end

bossisg.png

kilat

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 23/07/07Posts: 7

Valeu Vodkart muito bem pensado, só faltou uma coisa. Como e onde eu vou fazer o direcionamento para quando ele clicar no site "adicionar magia" adicionar aquele número de storage no personagem?

Acho que se você apenas me informar aonde exatamente fica o número do storage no player eu já conseguirei fazer o direcionamento.

 

;)

Vodkart

Sumus Validus
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 21/05/10Posts: 3406Gênero: Masculino

sinceramente eu não sei absolutamente nada sobre website...

 

oque eu sei é que dá para fazer o seguinte,ele clica lá compra o item talz ai ele usa o item ganha a storage...

 

mais esse do storage por site vo ficar devendo

 

abraços

bossisg.png

kilat

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 23/07/07Posts: 7

Sim sim eu te entendo, mais eu só precisava saber aonde essa storage fica salva no char, sabendo isso eu sei como fazer pra direcionar através do website.

Vou dar um exemplo bem simples: quando o cara clicar em adicionar magia, ele vai adicionar o número na storage, mais aonde fica essa storage?

Só isto eu precisaria saber :D

 

brigadão ai pelo esforço Vodkart

Oneshot

avatar
Marquês
Marquês

INFOS

Grupo: MarquêsRegistrado: 05/07/09Posts: 1347

kilat,

Imagine assim,

Cada personagem do jogo tem um creatureID distinto e a cada creatureID são atribuídos variáveis de memória que podem assumir qualquer valor ao longo do tempo, seja booleano, analógico ou uma string.

 

São, se não me engano, 65535 variáveis de memória. Essas são as chamadas storages.

Teoricamente elas ficam na personagem, mas acho que não dá para fazer algo com elas em websites,

Você só pode "setar" os valores das storages com setPlayerStorageValue(cid, storage, value) e pegar os valores das storages com getPlayerStorageValue(cid, storage)

Abraços,

kilat

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 23/07/07Posts: 7

Muito obrigado Vodkart e Oneshot pela ajuda, foram muito proveitosas suas dicas e scripts, principalmente ao Vodkart que primeiramente enviou o script bem do jeito doido que eu queria fazer.

 

Att,

Kilat

LorDz

Emo cheio de Glitter/ Moderador de OTserv
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 13/05/07Posts: 778Char no Tibia: Shea Fald

Dúvida sanada,

Tópico movido.

 

Abraços

Att,

Carlos "LorDz" Alberto



mplz1ajaxizt5mzcdc6n.png

Email: LorDz@XTibia.com