Ir para conteúdo
  • 0

Atualizar Vocations


darkempire

Pergunta

Bom dia pessoal do Xtibia, estou trabalhando em um server que terá uma nova vocation, as vocations estão da seguinte forma:

 

Sorcerer > Master Sorcerer > Epic Sorcerer

Druid > Elder Druid > Epic Druid

Paladin > Royal Paladin > Epic Paladin

Knight > Elit Knight > Epic Knight

 

Com os respectivos ids:

 

Sorcerer = 1 / Master Sorcerer = 5 / Epic Sorcerer = 9

Druid = 2 / Elder Druid = 6 / Epic Druid = 10

Paladin = 3 / Royal Paladin = 7 / Epic Paladin = 11

Knight = 4 / Elit Knight = 8 / Epic Knight = 12

 

Depois de configurar as vocations adicionei um npc que promova os jogadores, até ai está tudo ok!

 

O meu problema está sendo o seguinte:

 

As novas vocations adiciona mais life, mana e cap ao jogador ao upar os leveis, mas, o level minimo para adiquirir essa vocation é 200, eu gostaria que quando o jogador adiquirisse a nova vocação independentemente se é level 200 ou 250 ou seja la qual for o level, o life e mana dele seja atualizado para o da nova vocation, por exemplo o epic paladin ganha 15 de life por level, se um level 200 vira epic ele vai manter o life dele e so apartir do level 200 ele passa a ganhar 15 de life por level, porém queria que o life mana cap etc fosse atualizado como se desde o level 8 ele venha ganhando 15 de life por level.

 

Pesquisei durante 4 dias em muitos lugares e não encontrei nada falando sobre isso, apenas sistemas de reset, mais eu não gostaria de reset e ja vi servers que fazem isso.

 

Não sei se alguem pode me ajudar, mais se puderem ficarei muito agradecido!

 

Obs: Desculpem se postei no local errado ou de forma errada, sou novo no Forum

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Você deve realizar uma operação de multiplicação, multiplicando o quanto de mana ele vai ganhar por level * level do player e depois diminuir da mana total do player

 

local newmana = getPlayerLevel(cid) * 15 - getCreatureMaxMana(cid)
setCreatureMaxMana(cid, newmana)

 

Vamos supor que no level 200 um player tenha 2450 de mana, agora ele se transforma em epic, e começa a ganhar 15 de mana por level * 200 = 3000 de mana, o script vai fazer essa conta de level * novo ganho de mana e diminuir da mana atual do player 3000-2450 = 550, agora ele vai pegar essa diferença e vai somar a mana do player 2450 + 550 = 3000. Você pode usar a mesma formula com cap, hp e o que quiser.

 

Essa conta você adiciona dentro do npc que da a promotion e na parte em que ele adiciona ela.

Editado por BananaFight
Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia BananaFight,

 

primeiramente queria agradecer por me ajudar, não tinha pensado nisso e realmente é interessante esse método, porém, cada vocação ganha uma quantia difetente de mana, por exemplo um eipic kina ganha 7 de mana por level um epic druid ganha 38 de mana por level, como posso separar os ganhos por vocações? o npc que promove é esse:

 

local keywordHandler = KeywordHandler:new()

local npcHandler = NpcHandler:new(keywordHandler)

NpcSystem.parseParameters(npcHandler)

local talkState = {}

function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end

function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end

function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end

function onThink() npcHandler:onThink() end

function creatureSayCallback(cid, type, msg)

if(not npcHandler:isFocused(cid)) then

return false

end

local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid

local msg = string.lower(msg)

local promote = {

["vip"] = {level = 300, price = 0, promotion = 2, premium = true}

}

if promote[msg] then

if promote[msg].premium == true and not isPremium(cid) then

npcHandler:say('You need a premium account in order to get promoted', cid)

return true

end

if getPlayerPromotionLevel(cid) < promote[msg].promotion then

if getPlayerLevel(cid) >= promote[msg].level then

if doPlayerRemoveItem(cid, 2157, 400) then

setPlayerPromotionLevel(cid, promote[msg].promotion)

npcHandler:say('Congratulations! You are now promoted!', cid)

else

npcHandler:say('You need 200 epic Coins to buy this promotion.', cid)

end

else

npcHandler:say('I am sorry, but I can only promote you once you have reached level '..promote[msg].level, cid)

end

else

npcHandler:say('You are already promoted!', cid)

end

end

return true

end

 

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)

npcHandler:addModule(FocusModule:new())

Link para o comentário
Compartilhar em outros sites

  • 0

Use

 [/code ] sem o espaço para deixar mas organizado seu script

teste assim

[code]

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid
local msg = string.lower(msg)
local promote = {
["vip"] = {level = 300, price = 0, promotion = 2, premium = true}
}
if promote[msg] then
if promote[msg].premium == true and not isPremium(cid) then
npcHandler:say('You need a premium account in order to get promoted', cid)
return true
end
if getPlayerPromotionLevel(cid) < promote[msg].promotion then
if getPlayerLevel(cid) >= promote[msg].level then
if doPlayerRemoveItem(cid, 2157, 400) then
setPlayerPromotionLevel(cid, promote[msg].promotion)
npcHandler:say('Congratulations! You are now promoted!', cid)

if getPlayerVocation(cid) == 9 then -- epic sorcerer

local newmana = getPlayerLevel(cid) * 38 - getCreatureMaxMana(cid)
setCreatureMaxMana(cid, newmana)

local newhp = getPlayerLevel(cid) * 10 - getCreatureMaxHealth(cid)
setCreatureMaxHealth(cid, newhp)

elseif getPlayerVocation(cid) == 10 then -- epic druid

local newmana = getPlayerLevel(cid) * 38 - getCreatureMaxMana(cid)
setCreatureMaxMana(cid, newmana)

local newhp = getPlayerLevel(cid) * 10 - getCreatureMaxHealth(cid)
setCreatureMaxHealth(cid, newhp)

elseif getPlayerVocation(cid) == 11 then -- epic paladin

local newmana = getPlayerLevel(cid) * 15 - getCreatureMaxMana(cid)
setCreatureMaxMana(cid, newmana)

local newhp = getPlayerLevel(cid) * 15 - getCreatureMaxHealth(cid)
setCreatureMaxHealth(cid, newhp)

elseif getPlayerVocation(cid) == 12 then -- epic knight

local newmana = getPlayerLevel(cid) * 7 - getCreatureMaxMana(cid)
setCreatureMaxMana(cid, newmana)

local newhp = getPlayerLevel(cid) * 35 - getCreatureMaxHealth(cid)
setCreatureMaxHealth(cid, newhp)
end
else
npcHandler:say('You need 200 epic Coins to buy this promotion.', cid)
end
else
npcHandler:say('I am sorry, but I can only promote you once you have reached level '..promote[msg].level, cid)
end
else
npcHandler:say('You are already promoted!', cid)
end
end
return true
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new()) 

Link para o comentário
Compartilhar em outros sites

  • 0

Tente assim:

 

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid
local msg = string.lower(msg)
local promote = {
["vip"] = {level = 300, price = 0, promotion = 2, premium = true}
}
if promote[msg] then
if promote[msg].premium == true and not isPremium(cid) then
npcHandler:say('You need a premium account in order to get promoted', cid)
return true
end
if getPlayerPromotionLevel(cid) < promote[msg].promotion then
if getPlayerLevel(cid) >= promote[msg].level then
if doPlayerRemoveItem(cid, 2157, 400) then
setPlayerPromotionLevel(cid, promote[msg].promotion)
npcHandler:say('Congratulations! You are now promoted!', cid)
if getPlayerVocation(cid) == 9 then -- epic sorcerer
local newmana = getPlayerLevel(cid) * 8 + getCreatureMaxMana(cid)
setCreatureMaxMana(cid, newmana)
local newhp = getPlayerLevel(cid) * 5 + getCreatureMaxHealth(cid)
setCreatureMaxHealth(cid, newhp)
elseif getPlayerVocation(cid) == 10 then -- epic druid
local newmana = getPlayerLevel(cid) * 8 + getCreatureMaxMana(cid)
setCreatureMaxMana(cid, newmana)
local newhp = getPlayerLevel(cid) * 5 + getCreatureMaxHealth(cid)
setCreatureMaxHealth(cid, newhp)
elseif getPlayerVocation(cid) == 11 then -- epic paladin
local newmana = getPlayerLevel(cid) * 5 + getCreatureMaxMana(cid)
setCreatureMaxMana(cid, newmana)
local newhp = getPlayerLevel(cid) * 5 + getCreatureMaxHealth(cid)
setCreatureMaxHealth(cid, newhp)
elseif getPlayerVocation(cid) == 12 then -- epic knight
local newmana = getPlayerLevel(cid) * 2 + getCreatureMaxMana(cid)
setCreatureMaxMana(cid, newmana)
local newhp = getPlayerLevel(cid) * 20 + getCreatureMaxHealth(cid)
setCreatureMaxHealth(cid, newhp)
end
else
npcHandler:say('You need 200 epic Coins to buy this promotion.', cid)
end
else
npcHandler:say('I am sorry, but I can only promote you once you have reached level '..promote[msg].level, cid)
end
else
npcHandler:say('You are already promoted!', cid)
end
end
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...