Pessoal, boa noite.
Instalei um Exp hit no meu servidor, porém ao atacar o treiner ele mostra esse erro na distro.
Acredito que o exp hit não reconheça o monstro chamado Treiner Tibia, e por esse motivo retorna esse erro.
Alguém conseguiria me ajudar com alguma função para que esse erro não surgisse na distro ao atacar o treiner ou qualquer outro tipo de monstro que tenha um nome diferente dos comuns?
Agradeço.
Qual servidor ou website você utiliza como base?
TFS 0.4
Qual o motivo deste tópico?
DUVIDA COM SCRIPT
Está surgindo algum erro? Se sim coloque-o aqui.
Você tem o código disponível? Se tiver publique-o aqui:
-- CONFIGURAÇÕES DE EXPERIENCIA --
useStages = true -- Usar sistema de Stages , true/false
premiumMultipliqueExp = 1 -- Players Premiums terão exp multiplicada, caso não querer deixe 1.
rateExp = 50 -- Exp caso não for usar stages.
local stages = { -- ["DELEVEL-ATELEVEL"] = EXP, (OBS: NUNCA REPETIR O MSM NUMERO, SEMPRE COLOCAR UM A MAIS.)
["1-50"] = 150,
["51-80"] = 100,
["81-100"] = 80,
["101-150"] = 70,
["151-180"] = 60,
["181-200"] = 50,
["201-230"] = 45,
["231-250"] = 40,
["251-280"] = 35,
["281-300"] = 30,
["301-320"] = 25,
["321-350"] = 20,
["351-400"] = 15,
}
ultimateExp = 10 -- exp que vai usar caso o level do player não tiver mais na tabela .
-- CONFIGURAÇÕES DA PARTY
partyPorcent = 40 -- Quantos Porcento da exp vai para os membros da party
levelBlockParty = 1000 -- Diferença Maxima de Level permitida para membro da party ganhar exp.
expShareRadiusX = 30 -- Distancia maxima permitida no eixo X para membro da party ganhar exp.
expShareRadiusY = 30 -- Distancia maxima permitida no eixo Y para membro da party ganhar exp.
expShareRadiusZ = 1 -- Distancia maxima permitida no eixo Z para membro da party ganhar exp.
-- CONFIGURAÇÕES DE RINGS --
local rings = { -- [ID DO ANEL] = EXP MULTIPLICADA POR X EXP.
[3048] = 2,
[3049] = 4,
[3050] = 6,
}
-- FIM DAS CONFIGURAÇÕES --
function CalculeExp(monsterhp, exptotal, hit)
hit = hit <= monsterhp and math.ceil(exptotal * hit / monsterhp) or 0
return hit < 0 and 0 or hit
end
function isSummon(cid)
return getCreatureMaster(cid)
end
function onStatsChange(cid, attacker, type, combat, value)
if isPlayer(attacker) and isMonster(cid) then
if getCreatureStorage(cid, 50001) ~= 1 then
doCreatureSetStorage(cid, 50002, getMonsterInfo(getCreatureName(cid)).experience * rateExp)
doCreatureSetStorage(cid, 50001, 1)
end
end
if type == STATSCHANGE_HEALTHLOSS then
if isMonster(cid) then
if isCreature(attacker) then
local _cid = isSummon(attacker) and getCreatureMaster(attacker) or attacker
if isPlayer(_cid) then
if useStages then
for strstage, experience in pairs(stages) do
tabstage = string.explode(strstage, "-")
if getPlayerLevel(_cid) >= tonumber(tabstage[1]) and getPlayerLevel(_cid) <= tonumber(tabstage[2]) then
ultimateExp = experience
end
end
experienceRate = ultimateExp
else
experienceRate = rateExp
end
local expgain = CalculeExp(getCreatureMaxHealth(cid), getMonsterInfo(getCreatureName(cid)).experience * experienceRate, value)
if getCreatureStorage(cid, 50002) > 0 then
if getCreatureStorage(cid, 50002) - expgain < 0 then
expgain = getCreatureStorage(cid, 50002)
end
doCreatureSetStorage(cid, 50002, getCreatureStorage(cid, 50002) - expgain)
local ringexp = 1
for idring, expring in pairs(rings) do
if getPlayerSlotItem(_cid, 9).itemid == idring then
ringexp = expring
break
end
end
local premiumMultipliqueExp = isPremium(_cid) and premiumMultipliqueExp or 1
expgain = expgain * ringexp * premiumMultipliqueExp
local party = false
if isInParty(_cid) then
local partyMembers, expParty = getPartyMembers(getPartyLeader(_cid)), expgain / 100 * partyPorcent
for indice, partyMember in pairs(partyMembers) do
attackerLevel, partyLevel = getPlayerLevel(_cid), getPlayerLevel(partyMember)
attackerPos, partyPos = getThingPos(_cid), getThingPos(partyMember)
x = false
if math.abs(attackerLevel - partyLevel) > levelBlockParty then
x = true
elseif math.abs(attackerPos.x - partyPos.x) > expShareRadiusX then
x = true
elseif math.abs(attackerPos.y - partyPos.y) > expShareRadiusY then
x = true
elseif attackerPos.z ~= partyPos.z then
x = true
elseif _cid == partyMember then
x = true
end
if x then
partyMembers[indice] = nil
end
end
if #partyMembers ~= 0 then
expParty = math.ceil(expgain / 100 * partyPorcent)
expmember = math.ceil(expParty / #partyMembers)
for _, member in pairs(partyMembers) do
if member ~= _cid then
doPlayerSendTextMessage(member, 12, "You received "..expmember.." party exp.")
doSendAnimatedText(getCreaturePosition(member), expmember, 215)
doPlayerAddExp(member, expmember)
end
end
doPlayerSendTextMessage(_cid, 12, "You gain "..expgain.." exp. (" ..partyPorcent.."% send to party)")
doSendAnimatedText(_cid, expgain - expParty, 215)
doPlayerAddExp(_cid, expgain - expParty)
party = true
else
party = false
end
end
if not party then
doPlayerAddExp(_cid, expgain)
doSendAnimatedText(getThingPos(_cid), expgain, 215)
end
end
end
end
end
end
return true
end
function onCombat(cid, target)
if isMonster(target) and not isSummon(target) and not isPlayer(target) then
registerCreatureEvent(target, "ExpGain")
end
return true
end
Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui.
RESOLVIDO
Vou deixar a solução abaixo caso alguém futuramente tenha o mesmo problema.
Eu havia feito uma atualização no meu training monk, dessa forma, acusava o erro "(luaGetMonsterInfo) Monster not found".
Simplesmente o que eu fiz foi editar o meu training monk.xml e adicionar ele no monster.xml com o nome de training monk.
Vou deixar abaixo os dois arquivos.