function Player:onGainExperience(source, exp, rawExp)
if not source or source:isPlayer() then
return exp
end
-- Soul regeneration
local vocation = self:getVocation()
if self:getSoul() < vocation:getMaxSoul() and exp >= self:getLevel() then
soulCondition:setParameter(CONDITION_PARAM_SOULTICKS, vocation:getSoulGainTicks() * 1000)
self:addCondition(soulCondition)
end
-- Apply experience stage multiplier
exp = exp * Game.getExperienceStage(self:getLevel())
-- Party Experience Bonus
local membersList = getPartyMembers(cid)
if(membersList == nil or type(membersList) ~= 'table' or #membersList <= 1) then
doPlayerSendCancel(cid, "No party members in range.")
doSendMagicEffect(pos, CONST_ME_POFF)
return false
end
local affectedList = {}
for _, pid in ipairs(membersList) do
if(getDistanceBetween(getCreaturePosition(pid), pos) <= 36) then
table.insert(affectedList, pid)
end
end
local tmp = #affectedList
if(tmp <= 1) then
exp = exp * 1.0
elseif(tmp <=2) then
exp = exp * 1.2
elseif(tmp <=3) then
exp = exp * 1.3
elseif(tmp <=4) then
exp = exp * 1.4
elseif(tmp <=5) then
exp = exp * 1.5
elseif(tmp <=6) then
exp = exp * 1.6
elseif(tmp <=7) then
exp = exp * 1.7
elseif(tmp <=8) then
exp = exp * 1.8
elseif(tmp <=9) then
exp = exp * 1.9
elseif(tmp <=10) then
exp = exp * 2.0
doPlayerSendCancel(cid, "No party members in range.")
return false
end
-- Stamina modifier
if configManager.getBoolean(configKeys.STAMINA_SYSTEM) then
useStamina(self)
local staminaMinutes = self:getStamina()
if staminaMinutes > 2400 and self:isPremium() then
exp = exp * 1.5
elseif staminaMinutes <= 840 then
exp = exp * 0.5
end
end
return exp
end
local tmp = #affectedList
if(tmp <= 1) then
exp = exp * 1.0
elseif(tmp <=2) then
exp = exp * 1.2
elseif(tmp <=3) then
exp = exp * 1.3
elseif(tmp <=4) then
exp = exp * 1.4
elseif(tmp <=5) then
exp = exp * 1.5
elseif(tmp <=6) then
exp = exp * 1.6
elseif(tmp <=7) then
exp = exp * 1.7
elseif(tmp <=8) then
exp = exp * 1.8
elseif(tmp <=9) then
exp = exp * 1.9
elseif(tmp <=10) then
exp = exp * 2.0
doPlayerSendCancel(cid, "No party members in range.")
return false
end
if #affectedList > 0 and #affectedList < 21 then
exp = exp * (#affectedList * 0.1)
else
doPlayerSendCancel(cid, "No party members in range.")
return false
end
-- Party Experience Bonus
local membersList = getPartyMembers(cid)
if(membersList == nil or type(membersList) ~= 'table' or #membersList <= 1) then
doPlayerSendCancel(cid, "No party members in range.")
return false
end
local affectedList = {}
for _, pid in ipairs(membersList) do
if(getDistanceBetween(getCreaturePosition(pid), pos) <= 36) then
table.insert(affectedList, pid)
end
end
local tmp = #affectedList
if #affectedList > 0 and #affectedList < 21 then
exp = exp + (#affectedList * 0.1 )
else
doPlayerSendCancel(cid, "No party members in range.")
return false
end
getPartyMembers(cid)
getPartyMembers(self:getId())
-- Apply experience stage multiplier
exp = exp * Game.getExperienceStage(self:getLevel())
-- Party Experience Bonus
local membersList = getPartyMembers(self:getId())
if(membersList == nil or type(membersList) ~= 'table' or #membersList <= 1) then
doPlayerSendCancel(self:getId(), "No party members in range.")
return false
end
local affectedList = {}
for _, pid in ipairs(membersList) do
if(getDistanceBetween(getCreaturePosition(pid), pos) <= 36) then
table.insert(affectedList, pid)
end
end
local tmp = #affectedList
if #affectedList > 0 and #affectedList < 21 then
exp = exp + (#affectedList * 0.1 + 1 )
return false
end
TFS is just a framework, lua is a scripting language, there is no such video tutorial that I know of that combines the 2, start looking on youtube for videos on lua if you don't like to read.Do you know of any tibia specific LUA video tutorials that I can watch?
You shouldn't return false in this event, you have to return the amount of exp that the player is going to get.Thanks i've tried this out:
Code:-- Apply experience stage multiplier exp = exp * Game.getExperienceStage(self:getLevel()) -- Party Experience Bonus local membersList = getPartyMembers(self:getId()) if(membersList == nil or type(membersList) ~= 'table' or #membersList <= 1) then doPlayerSendCancel(self:getId(), "No party members in range.") return false end local affectedList = {} for _, pid in ipairs(membersList) do if(getDistanceBetween(getCreaturePosition(pid), pos) <= 36) then table.insert(affectedList, pid) end end local tmp = #affectedList if #affectedList > 0 and #affectedList < 21 then exp = exp + (#affectedList * 0.1 + 1 ) return false end
It displays the "no party members in range." msg when testing with 0 party memebers but doesn't give any exp.
I thought this may have been this line " exp = exp + (#affectedList * 0.1 )" so i changed that line to " exp = exp + (#affectedList * 0.1 + 1 )"
But still nothing.
Thanks for your help!
Do you know of any tibia specific LUA video tutorials that I can watch?
local membersList = getPartyMembers(self:getId())
if(membersList == nil or type(membersList) ~= 'table' or #membersList <= 1) then
doPlayerSendCancel(self:getId(), "No party members in range.")
elseif #memberList > 0 and #memberList < 21 then
exp = exp + (#memberList * 0.1 + 1 )
return false
end
-- Party Experience Bonus
local membersList = getPartyMembers(self:getId())
if(membersList == nil or type(membersList) ~= 'table' or #membersList <= 1) then
exp = exp
elseif (#membersList > 1) then
exp = exp * (#membersList * 1.0)
return exp
end