Usa, doPlayerAddSkillTry(cid,id_da_skil, qnt)
[ACTION] Cada Item da level de skill
Por Flaah, 03 de nov. de 2015 em Scripts
info
Grupo: Marquês
Registrado: 25/09/10
Posts: 1.3k
Reputação: +446
Gênero: Masculino

Não seria melhor onEquip e onDeEquip?
info
Grupo: Barão
Registrado: 26/12/11
Posts: 201
Reputação: +18
Char no Tibia: Flaah

@
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
Editado Novembro 4 por Flaah
info
Grupo: Lorde
Registrado: 22/07/12
Posts: 2.2k
Reputação: +453
Char no Tibia: Kissy

Não seria mais fácil adicionar atributtes no items.xml ?
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
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
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
info
Grupo: Barão
Registrado: 26/12/11
Posts: 201
Reputação: +18
Char no Tibia: Flaah

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
info
Grupo: Lorde
Registrado: 22/07/12
Posts: 2.2k
Reputação: +453
Char no Tibia: Kissy

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
info
Grupo: Barão
Registrado: 26/12/11
Posts: 201
Reputação: +18
Char no Tibia: Flaah

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...
Editado Novembro 4 por Flaah
info
Grupo: Marquês
Registrado: 25/09/10
Posts: 1.3k
Reputação: +446
Gênero: Masculino

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...
info
Grupo: Barão
Registrado: 26/12/11
Posts: 201
Reputação: +18
Char no Tibia: Flaah

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.
Ta dando lag por causa disso, eu acho:
for i = 1,50 do doPlayerAddSkill(cid, IDdaSkill, i) endTá 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 ![]()
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
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
Editado Novembro 5 por TheLastSecond
info
Grupo: Barão
Registrado: 26/12/11
Posts: 201
Reputação: +18
Char no Tibia: Flaah

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'
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?
info
Grupo: Marquês
Registrado: 25/09/10
Posts: 1.3k
Reputação: +446
Gênero: Masculino

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




info
Grupo: Barão
Registrado: 26/12/11
Posts: 201
Reputação: +18
Char no Tibia: Flaah
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 endAguardando..