FL

[ACTION] Cada Item da level de skill

Por Flaah, 03 de nov. de 2015 em Scripts

skill
level
script
xtibia
action
21
4.9k
FlaahF
03 de novembro de 2015 às 22:36

Galera como faço pra cada item da um certo level de skill?

 

Funções que já tentei usar:

 

doPlayerAddSkills(cid, IDdaSkill,Quantidade): Com essa função da uma travada monstro quando mudo 3 leveis de skill's de uma só vez.

 

doPlayerAddSkill(cid, IDdaSkill, Quantidade): E com essa função, mesmo colocando 50 de quantidade, só adiciona 1 level por 1.

 

doPlayerSetSkill(cid, IDdaSkill, Quantidade): E com essa função criada pelo Vodkart que achei aqui no fórum, faz o player deslogar e não da pra trocar mais de uma skill ao mesmo tempo.

 

Cada item daria um valor de sword, axe e club para cada item usado, (e claro lookType, vocation e effect).

 

Script:

local config = {

    [ItemID] = {Life = 900, sword = 31, axe = 36, club = 42, lookType = 1, vocation = 1, effect = 45, msg = "ClasseName"},
    [ItemID] = {Life = 900, sword = 54, axe = 92, club = 35, lookType = 1, vocation = 1, effect = 45, msg = "ClasseName"},
    [ItemID] = {Life = 780, sword = 46, axe = 53, club = 66, lookType = 5, vocation = 2, effect = 15, msg = "ClasseName"},
    [ItemID] = {Life = 500, sword = 84, axe = 74, club = 79, lookType = 7, vocation = 3, effect = 37, msg = "ClasseName"},
    [ItemID] = {Life = 800, sword = 50, axe = 85, club = 14, lookType = 9, vocation = 4, effect = 48, msg = "ClasseName"}
}

function onUse(cid, item, frompos)

	local t = config[item.itemid]

	if t then
	if not isInArray(t.vocation, getPlayerVocation(cid)) then

        local outfit = getCreatureOutfit(cid)
        outfit.lookType = t.lookType

        doCreatureChangeOutfit(cid, outfit)
	doPlayerSetVocation(cid, t.vocation)

	setCreatureMaxHealth(cid, getCreatureMaxHealth(cid) +t.Life)
	doCreatureAddHealth(cid, getCreatureMaxHealth(cid))

	doSendMagicEffect(frompos, t.effect)
	setPlayerStorageValue(cid, 14160, os.time() + cfg.time *60)
	doPlayerSendTextMessage(cid, 20, "Congratulations! You become a "..t.msg.."!")

	else
	doPlayerSendCancel(cid, "You are now ready.") 

   return true
   end
end

Aguardando.. worriedsmiley.gif

AhehFe97A
04 de novembro de 2015 às 15:07

Usa, doPlayerAddSkillTry(cid,id_da_skil, qnt)

CaronteC
04 de novembro de 2015 às 15:09

Não seria melhor onEquip e onDeEquip?

FlaahF
04 de novembro de 2015 às 15:26

@

A função doPlayerAddSkillTry(cid,id_da_skil, qnt), só adiciona uma certa quantidade de experiência na skill, queria algo que adicionasse o level diretamente na skill.

@@Caronte

O item é usável e n de equipar.
Ambos os itens ficariam em uma bag.

---------------------------------------

Eu estava pensando usar esse esquema:

local condition = createConditionObject(CONDITION_ATTRIBUTES)

setConditionParam(condition, CONDITION_PARAM_SKILL_SWORD, sword)
setConditionParam(condition, CONDITION_PARAM_SKILL_AXE, axe)
setConditionParam(condition, CONDITION_PARAM_SKILL_CLUB, club)
setConditionParam(condition, CONDITION_PARAM_TICKS, -1)

doAddCondition(cid, condition)

Só que não consegui configurar o quanto vai ganhar de level nas skills para cada item confused.gif

Editado Novembro 4 por Flaah

SkyLighS
04 de novembro de 2015 às 15:35

Não seria mais fácil adicionar atributtes no items.xml ?

AhehFe97A
04 de novembro de 2015 às 15:40

Precisa dar um loop, tenta assim,

 

local config = {

 

[ItemID] = {Life = 900, sword = 31, axe = 36, club = 42, lookType = 1, vocation = 1, effect = 45, msg = "ClasseName"},
[ItemID] = {Life = 900, sword = 54, axe = 92, club = 35, lookType = 1, vocation = 1, effect = 45, msg = "ClasseName"},
[ItemID] = {Life = 780, sword = 46, axe = 53, club = 66, lookType = 5, vocation = 2, effect = 15, msg = "ClasseName"},
[ItemID] = {Life = 500, sword = 84, axe = 74, club = 79, lookType = 7, vocation = 3, effect = 37, msg = "ClasseName"},
[ItemID] = {Life = 800, sword = 50, axe = 85, club = 14, lookType = 9, vocation = 4, effect = 48, msg = "ClasseName"}
}

function onUse(cid, item, frompos)

for _, t in ipairs(config) do

end

if t then

if not isInArray(config[t]vocation, getPlayerVocation(cid)) then

local outfit = getCreatureOutfit(cid)
outfit.lookType = config[t]lookType

doCreatureChangeOutfit
(cid, outfit)
doPlayerSetVocation(cid, config[t]vocation)

setCreatureMaxHealth(cid, getCreatureMaxHealth(cid) +config[t]Life)
doCreatureAddHealth(cid, getCreatureMaxHealth(cid))

for i = 1,50 do

doPlayerAddSkill(cid, IDdaSkill, i)
end

doSendMagicEffect(frompos, config[t]effect)
setPlayerStorageValue(cid, 14160, os.time() + cfg.time *60)
doPlayerSendTextMessage(cid, 20, "Congratulations! You become a "..config[t]msg.."!")

else
doPlayerSendCancel(cid, "You are now ready.")

return true
end
end

Editado Novembro 4 por TheLastSecond

FlaahF
04 de novembro de 2015 às 16:13

Deu esse erro:

[04/11/2015 16:04:36] [Error - LuaScriptInterface::loadFile] data/actions/scripts/Classe.lua:17: ')' expected near 'vocation'
[04/11/2015 16:04:36] [Warning - Event::loadScript] Cannot load script (data/actions/scripts/Classe.lua)
[04/11/2015 16:04:36] data/actions/scripts/Classe.lua:17: ')' expected near 'vocation'

Uma pergunta: Quando for usar o item e trocar de vocation, ira tbm receber essas 3 skills (sword, axe e club)?

 

@

O item não é pra equipar, ele vai ficar na bag normalmente.
Quando vc for clicar no item ele vai dar uma vocation, outfit, efeito e novos leveis nas skills.
Cada item dará uma coisa diferente, tanto pra vocation, como skill.

 

 

 

Editado Novembro 4 por Flaah

SkyLighS
04 de novembro de 2015 às 18:03

Consertando o script acima.

 

 

local config = {
 
[ItemID] = {Life = 900, sword = 31, axe = 36, club = 42, lookType = 1, vocation = 1, effect = 45, msg = "ClasseName"},
[ItemID] = {Life = 900, sword = 54, axe = 92, club = 35, lookType = 1, vocation = 1, effect = 45, msg = "ClasseName"},
[ItemID] = {Life = 780, sword = 46, axe = 53, club = 66, lookType = 5, vocation = 2, effect = 15, msg = "ClasseName"},
[ItemID] = {Life = 500, sword = 84, axe = 74, club = 79, lookType = 7, vocation = 3, effect = 37, msg = "ClasseName"},
[ItemID] = {Life = 800, sword = 50, axe = 85, club = 14, lookType = 9, vocation = 4, effect = 48, msg = "ClasseName"}
}
 
function onUse(cid, item, frompos)
 
for _, t in ipairs(config) do
end 
  if  t then
 if not isInArray(config.vocation, getPlayerVocation(cid)) then
local outfit = getCreatureOutfit(cid)
outfit.lookType = config.lookType
 
   doCreatureChangeOutfit(cid, outfit)
    doPlayerSetVocation(cid, config.vocation)
    setCreatureMaxHealth(cid, getCreatureMaxHealth(cid) +config.Life)
    doCreatureAddHealth(cid, getCreatureMaxHealth(cid))
     for i = 1,50 do
    doPlayerAddSkill(cid, IDdaSkill, i)
    end
    doSendMagicEffect(frompos, config.effect)
    setPlayerStorageValue(cid, 14160, os.time() + cfg.time *60)
    doPlayerSendTextMessage(cid, 20, "Congratulations! You become a "..config.msg.."!")
 
    else
    doPlayerSendCancel(cid, "You are now ready.") 
    end
 
return true
end
end
FlaahF
04 de novembro de 2015 às 18:32

Já já falo se funcionou, (y)

 

#Edit

 

@

 

Bem.. mudou, só que trava o server pra kct, porq mudar 3 skills de uma só vez, da muuuito lag..

 

Eu estava pensando em alguma forma que não mude a skill no banco de dados pra n ocorrer esse lag todo..

 

Como se fosse um buff de spell? Sakas?

Que aumente o level da skill, mais que não mude no banco de dados do player..

 

Aguardando ajuda... sad.png

Editado Novembro 4 por Flaah

CaronteC
05 de novembro de 2015 às 11:14

Ta dando lag por causa disso, eu acho:

 for i = 1,50 do
    doPlayerAddSkill(cid, IDdaSkill, i)
    end

Tá dando 1275 de skill pro player...

FlaahF
05 de novembro de 2015 às 14:40

Pelo que eu fiquei sabendo é a função toda doPlayerAddSkill que altera o banco de dados do player, carregando assim um novo valor e gerando lag. Porque são 3 valores de leveis de skills que são alteradas ao mesmo tempo.

Por isso cogitei a idéia de ser só um buff, como de uma spell. Porque assim n altera o banco de dados do player e n causando lag.

AhehFe97A
05 de novembro de 2015 às 15:14

Ta dando lag por causa disso, eu acho:

 for i = 1,50 do
    doPlayerAddSkill(cid, IDdaSkill, i)
    end

Tá dando 1275 de skill pro player...

como ta dando 1275 se a variável "i" da um loop de 1 a 50, retomando o valor 50 que é o valor que termina, ele gera 1,2,3 até 50, assim adicionando 50x a skill ao player wink_smile.gif

Pelo que eu fiquei sabendo é a função toda doPlayerAddSkill que altera o banco de dados do player, carregando assim um novo valor e gerando lag. Porque são 3 valores de leveis de skills que são alteradas ao mesmo tempo.

Por isso cogitei a idéia de ser só um buff, como de uma spell. Porque assim n altera o banco de dados do player e n causando lag.

Cara, nada ver, a função doPlayerAddSkill esta correta, só se ela está com os códigos mau feitos na sua source, mas retornando ao assunto..

 

tenta assim

 

for i = 1,50 do

doPlayerAddSkill(cid, IDdaSkill, i)
addEvent(doPlayerAddSkill, cid , IDdaSkill, i , 100)
addEvent(doPlayerAddSkill, cid , IDdaSkill, i , 100)
addEvent(doPlayerAddSkill, cid , IDdaSkill, i , 100)
end

Pelo que eu fiquei sabendo é a função toda doPlayerAddSkill que altera o banco de dados do player, carregando assim um novo valor e gerando lag. Porque são 3 valores de leveis de skills que são alteradas ao mesmo tempo.

Por isso cogitei a idéia de ser só um buff, como de uma spell. Porque assim n altera o banco de dados do player e n causando lag.

Cara, nada ver, a função doPlayerAddSkill esta correta, só se ela está com os códigos mau feitos na sua source, mas retornando ao assunto..

 

caso você queira dar mais skills, tenta assim:

 

for i = 1,50 do

doPlayerAddSkill(cid, IDdaSkill, i)
addEvent(doPlayerAddSkill, cid , IDdaSkill, i , 100)
addEvent(doPlayerAddSkill, cid , IDdaSkill2, i , 1500)
addEvent(doPlayerAddSkill, cid , IDdaSkill3, i , 3000)
end

Editado Novembro 5 por TheLastSecond

FlaahF
05 de novembro de 2015 às 16:31

Ok, mais tem 2 problemas:

 

1°: Eu tinha pedido que cada item daria um certo level determinado na skill correspondente ao item que for usado. Não um loop de 1 á 50.

 

2°: Se vc disse que essa função esta errada na minha source, e possivelmente esse seria o motivo do lag, qual a logica de continuar usando ela? o.o'

AhehFe97A
05 de novembro de 2015 às 16:56

Ok, mais tem 2 problemas:

 

1°: Eu tinha pedido que cada item daria um certo level determinado na skill correspondente ao item que for usado. Não um loop de 1 á 50.

 

2°: Se vc disse que essa função esta errada na minha source, e possivelmente esse seria o motivo do lag, qual a logica de continuar usando ela? o.o'

o loop serve para add a skill de 1 em 1 até 50, adicionando a quantidade de skill que vc quer, no caso 50 de skill..

 

não tem haver com a lógica, se não for ela, vai usar qual função?? eu só disse que pode ser um motivo..

 

e coloquei o event, pra demorar não add todas skill de uma vez à você, mesma coisa fiz com o loop, ela adciona de 1 em 1 até 50 que é a quantidade que voce pediu..

 

entendeu?

CaronteC
05 de novembro de 2015 às 17:38

Se a função funciona como deve ou deveria funcionar, ela adiciona a quantidade de leveis, certo?

 

1 + 2 é 3

então se você estiver dando for i = 1, 2 do , vai estar adicionando 3...

 


 

Essa função é bugada, tem que ver nas source...