good night
I have a script to gain exp before killing the monster, but with this error:
I use The Forgotten Server 0.3.6 (Crying Damson) V5
This error is:
[03/08/2012 20:19:37] [Error - CreatureScript Interface]
[03/08/2012 20:19:37] data/creaturescripts/scripts/exphit.luanStatsChange
[03/08/2012 20:19:37] Description:
[03/08/2012 20:19:37] data/creaturescripts/scripts/exphit.lua:44: attempt to call global 'getMonsterExperience' (a nil value)
[03/08/2012 20:19:37] stack traceback:
[03/08/2012 20:19:37] data/creaturescripts/scripts/exphit.lua:44: in function <data/creaturescripts/scripts/exphit.lua:22>
script:
rateExp = 100 -- 0 a 20
rateExp1 = 50 -- 21 a 50
rateExp2 = 25 -- 51 a 100
rateExp3 = 10 -- 101 a 200
rateExp4 = 5 -- 201 a 300
rateExp5 = 3 -- 301 a 350
rateExp6 = 1 -- 351 em diante
rateExp7 = 0.5 --
bonus = 1 -- Bonus por estar com exp ring
expringid = 148 -- Id do exp ring
function CalculeExp(monsterhp, exptotal, hit)
local x = hit <= monsterhp and math.ceil(exptotal * hit / monsterhp) or 0
local x2 = x - 20 + math.random(20)
return x2 > 0 and x2 or 0
end
function isSummon(uid)
return uid ~= getCreatureMaster(uid) or false
end
function onStatsChange(cid, attacker, type, combat, value)
if type == STATSCHANGE_HEALTHLOSS then
if isMonster(cid) then
if isCreature(attacker) then
local sid = isSummon(attacker) == true and getCreatureMaster(attacker) or attacker
if isPlayer(sid) and getPlayerLevel(sid) <= 20 then
local expg = CalculeExp(getCreatureMaxHealth(cid), getMonsterExperience(getCreatureName(cid)) * rateExp, value)
doPlayerSendTextMessage(sid, 23, "Você Ganhou "..expg.." exp.")
doPlayerAddExp(sid, expg)
elseif isPlayer(sid) and getPlayerLevel(sid) <= 50 then
local expg1 = CalculeExp(getCreatureMaxHealth(cid), getMonsterExperience(getCreatureName(cid)) * rateExp1, value)
doPlayerSendTextMessage(sid, 23, "Você Ganhou "..expg1.." exp.")
doPlayerAddExp(sid, expg1)
elseif isPlayer(sid) and getPlayerLevel(sid) <= 100 then
local expg2 = CalculeExp(getCreatureMaxHealth(cid), getMonsterExperience(getCreatureName(cid)) * rateExp2, value)
doPlayerSendTextMessage(sid, 23, "Você Ganhou "..expg2.." exp.")
doPlayerAddExp(sid, expg2)
elseif isPlayer(sid) and getPlayerLevel(sid) <= 200 then
local expg3 = CalculeExp(getCreatureMaxHealth(cid), getMonsterExperience(getCreatureName(cid)) * rateExp3, value)
doPlayerSendTextMessage(sid, 23, "Você Ganhou "..expg3.." exp.")
doPlayerAddExp(sid, expg3)
elseif isPlayer(sid) and getPlayerLevel(sid) <= 300 then
local expg4 = CalculeExp(getCreatureMaxHealth(cid), getMonsterExperience(getCreatureName(cid)) * rateExp4, value)
doPlayerSendTextMessage(sid, 23, "Você Ganhou "..expg4.." exp.")
doPlayerAddExp(sid, expg4)
elseif isPlayer(sid) and getPlayerLevel(sid) <= 350 then
local expg5 = CalculeExp(getCreatureMaxHealth(cid), getMonsterExperience(getCreatureName(cid)) * rateExp5, value)
doPlayerSendTextMessage(sid, 23, "Você Ganhou "..expg5.." exp.")
doPlayerAddExp(sid, expg5)
elseif isPlayer(sid) and getPlayerLevel(sid) <= 400 then
local expg6 = CalculeExp(getCreatureMaxHealth(cid), getMonsterExperience(getCreatureName(cid)) * rateExp6, value)
doPlayerSendTextMessage(sid, 23, "Você Ganhou "..expg6.." exp.")
doPlayerAddExp(sid, expg6)
elseif isPlayer(sid) and getPlayerLevel(sid) <= 600 then
local expg7 = CalculeExp(getCreatureMaxHealth(cid), getMonsterExperience(getCreatureName(cid)) * rateExp7, value)
doPlayerSendTextMessage(sid, 23, "Você Ganhou "..expg7.." exp.")
doPlayerAddExp(sid, expg7)
elseif isPlayer(sid) and itemid == expringid then
local expbonus = CalculeExp(getCreatureMaxHealth(cid), getMonsterExperience(getCreatureName(cid)) * bonus, value)
doPlayerSendTextMessage(sid, 23, "You gain "..expbonus.." bonus exp.")
doPlayerAddExp(sid, expbonus)
end
end
end
elseif type == STATSCHANGE_HEALTHGAIN then
return false
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
Last edited: