• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Lua [TFS 1.0] Vip system ( exp extra)

Thiagobs

New Member
Joined
Nov 18, 2014
Messages
24
Reaction score
1
Hey friends can anyone tell me how to add extra exp for vip players
I want 20 % more exp




But with the script below is not successful , the system of the msg but I have 20 % but not to kill the monster and added 20%



errorxp.jpg


Code:
local rate = 20  --- porcentagem que irá ganhar a mais.

function onKill(cid, target, lastHit)


if hasVip(cid) == true then
local monster = Monster(target)
if not monster then
return true
end


for id, damage in pairs(monster:getDamageMap()) do
local player = Player(id)
if player then


local experience = damage.total / monster:getType():getHealth() * monster:getType():getExperience()
local expFormula = (((experience * Game.getExperienceStage(player:getLevel())) / 100) * rate)
player:addExperience(math.floor(expFormula), true)
end
end
end


return true
end

creaturescripts.xml adcione a tag:

Code:
<event type="kill" name="Exp_Extra" event="script" value="extraexp.lua"/>

creaturescripts/scripts/login.lua:

Code:
player:registerEvent("Exp_Extra")
 
Use the Player event onGainExperience
Code:
<event class="Player" method="onGainExperience" enabled="1" />
Code:
function Player:onGainExperience(source, exp, rawExp)
    if hasVip(self:getId()) then
        return exp * 1.2
    end
    return exp
end
 
this correct?

Code:
function Player:onBrowseField(position)
    return true
end

function Player:onLook(thing, position, distance)
    local description = "You see " .. thing:getDescription(distance)
    if self:getGroup():getAccess() then
        if thing:isItem() then
            description = string.format("%s\nItemID: [%d]", description, thing:getId())

            local actionId = thing:getActionId()
            if actionId ~= 0 then
                description = string.format("%s, ActionID: [%d]", description, actionId)
            end
          
            local uniqueId = thing:getAttribute(ITEM_ATTRIBUTE_UNIQUEID)
            if uniqueId > 0 and uniqueId < 65536 then
                description = string.format("%s, UniqueId: [%d]", description, uniqueId)
            end
          
            description = description .. "."
            local itemType = thing:getType()
          
            local transformEquipId = itemType:getTransformEquipId()
            local transformDeEquipId = itemType:getTransformDeEquipId()
            if transformEquipId ~= 0 then
                description = string.format("%s\nTransformTo: [%d] (onEquip).", description, transformEquipId)
            elseif transformDeEquipId ~= 0 then
                description = string.format("%s\nTransformTo: [%d] (onDeEquip).", description, transformDeEquipId)
            end

            local decayId = itemType:getDecayId()
            if decayId ~= -1 then
                description = string.format("%s\nDecayTo: [%d]", description, decayId)
            end
        elseif thing:isCreature() then
            local str = "%s\nHealth: [%d / %d]"
            if thing:getMaxMana() > 0 then
                str = string.format("%s, Mana: [%d / %d]", str, thing:getMana(), thing:getMaxMana())
            end
            description = string.format(str, description, thing:getHealth(), thing:getMaxHealth()) .. "."
        end
      
        local position = thing:getPosition()
        description = string.format(
            "%s\nPosition: [X: %d] [Y: %d] [Z: %d].",
            description, position.x, position.y, position.z
        )
      
        if thing:isCreature() then
            if thing:isPlayer() then
                description = string.format("%s\nIP: [%s].", description, Game.convertIpToString(thing:getIp()))
            end
        end
    end
    self:sendTextMessage(MESSAGE_INFO_DESCR, description)
end

function Player:onLookInBattleList(creature, distance)
    local description = "You see " .. creature:getDescription(distance)
    if self:getGroup():getAccess() then
        local str = "%s\nHealth: [%d / %d]"
        if creature:getMaxMana() > 0 then
            str = string.format("%s, Mana: [%d / %d]", str, creature:getMana(), creature:getMaxMana())
        end
        description = string.format(str, description, creature:getHealth(), creature:getMaxHealth()) .. "."

        local position = creature:getPosition()
        description = string.format(
            "%s\nPosition: [X: %d] [Y: %d] [Z: %d].",
            description, position.x, position.y, position.z
        )
      
        if creature:isPlayer() then
            description = string.format("%s\nIP: [%s].", description, Game.convertIpToString(creature:getIp()))
        end
    end
    self:sendTextMessage(MESSAGE_INFO_DESCR, description)
end

function Player:onLookInTrade(partner, item, distance)
    self:sendTextMessage(MESSAGE_INFO_DESCR, "You see " .. item:getDescription(distance))
end

function Player:onLookInShop(itemType, count)
    return true
end

function Player:onMoveItem(item, count, fromPosition, toPosition)
    local tile = toPosition:getTile()
    if tile then
        local thing = tile:getItemByType(ITEM_TYPE_TELEPORT)
        if thing ~= nil then
            self:sendCancelMessage("Sorry, not possible.")
            self:getPosition():sendMagicEffect(CONST_ME_POFF)
            return false
        end
    end
    return true
end

function Player:onMoveCreature(creature, fromPosition, toPosition)
    return true
end

function Player:onTurn(direction)
    return true
end

function Player:onTradeRequest(target, item)
    return true
end

function Player:onGainExperience(source, exp, rawExp)
    if hasVip(self:getId()) then
        return exp * 1.2
    end
    return exp
end
 
You have to enable onGainExperience in events.xml

my events.xml

Code:
<?xml version="1.0" encoding="UTF-8"?>
<events>
    <!-- Party methods -->
    <event class="Party" method="onJoin" enabled="0"/>
    <event class="Party" method="onLeave" enabled="0"/>
    <event class="Party" method="onDisband" enabled="0"/>
  
    <!-- Player methods -->
    <event class="Player" method="onLook" enabled="1"/>
    <event class="Player" method="onBrowseField" enabled="0"/>
    <event class="Player" method="onLookInBattleList" enabled="1"/>
    <event class="Player" method="onLookInTrade" enabled="1"/>
    <event class="Player" method="onLookInShop" enabled="0"/>
    <event class="Player" method="onMoveItem" enabled="1"/>
    <event class="Player" method="onMoveCreature" enabled="0"/>
    <event class="Player" method="onTurn" enabled="0"/>
    <event class="Player" method="onTradeRequest" enabled="0"/>
        <event class="Player" method="onGainExperience" enabled="1" />
      
</events>
 
Last edited:
You have in events 1 <- enable?
Events.xml

Code:
<event class="Player" method="onGainExperience" enabled="1" />

and try:
Code:
function Player:onBrowseField(position)
    return true
end

function Player:onLook(thing, position, distance)
    local description = "You see " .. thing:getDescription(distance)
    if self:getGroup():getAccess() then
        if thing:isItem() then
            description = string.format("%s\nItemID: [%d]", description, thing:getId())

            local actionId = thing:getActionId()
            if actionId ~= 0 then
                description = string.format("%s, ActionID: [%d]", description, actionId)
            end
        
            local uniqueId = thing:getAttribute(ITEM_ATTRIBUTE_UNIQUEID)
            if uniqueId > 0 and uniqueId < 65536 then
                description = string.format("%s, UniqueId: [%d]", description, uniqueId)
            end
        
            description = description .. "."
            local itemType = thing:getType()
        
            local transformEquipId = itemType:getTransformEquipId()
            local transformDeEquipId = itemType:getTransformDeEquipId()
            if transformEquipId ~= 0 then
                description = string.format("%s\nTransformTo: [%d] (onEquip).", description, transformEquipId)
            elseif transformDeEquipId ~= 0 then
                description = string.format("%s\nTransformTo: [%d] (onDeEquip).", description, transformDeEquipId)
            end

            local decayId = itemType:getDecayId()
            if decayId ~= -1 then
                description = string.format("%s\nDecayTo: [%d]", description, decayId)
            end
        elseif thing:isCreature() then
            local str = "%s\nHealth: [%d / %d]"
            if thing:getMaxMana() > 0 then
                str = string.format("%s, Mana: [%d / %d]", str, thing:getMana(), thing:getMaxMana())
            end
            description = string.format(str, description, thing:getHealth(), thing:getMaxHealth()) .. "."
        end
    
        local position = thing:getPosition()
        description = string.format(
            "%s\nPosition: [X: %d] [Y: %d] [Z: %d].",
            description, position.x, position.y, position.z
        )
    
        if thing:isCreature() then
            if thing:isPlayer() then
                description = string.format("%s\nIP: [%s].", description, Game.convertIpToString(thing:getIp()))
            end
        end
    end
    self:sendTextMessage(MESSAGE_INFO_DESCR, description)
end

function Player:onLookInBattleList(creature, distance)
    local description = "You see " .. creature:getDescription(distance)
    if self:getGroup():getAccess() then
        local str = "%s\nHealth: [%d / %d]"
        if creature:getMaxMana() > 0 then
            str = string.format("%s, Mana: [%d / %d]", str, creature:getMana(), creature:getMaxMana())
        end
        description = string.format(str, description, creature:getHealth(), creature:getMaxHealth()) .. "."

        local position = creature:getPosition()
        description = string.format(
            "%s\nPosition: [X: %d] [Y: %d] [Z: %d].",
            description, position.x, position.y, position.z
        )
    
        if creature:isPlayer() then
            description = string.format("%s\nIP: [%s].", description, Game.convertIpToString(creature:getIp()))
        end
    end
    self:sendTextMessage(MESSAGE_INFO_DESCR, description)
end

function Player:onLookInTrade(partner, item, distance)
    self:sendTextMessage(MESSAGE_INFO_DESCR, "You see " .. item:getDescription(distance))
end

function Player:onLookInShop(itemType, count)
    return true
end

function Player:onMoveItem(item, count, fromPosition, toPosition)
    local tile = toPosition:getTile()
    if tile then
        local thing = tile:getItemByType(ITEM_TYPE_TELEPORT)
        if thing ~= nil then
            self:sendCancelMessage("Sorry, not possible.")
            self:getPosition():sendMagicEffect(CONST_ME_POFF)
            return false
        end
    end
    return true
end

function Player:onMoveCreature(creature, fromPosition, toPosition)
    return true
end

function Player:onTurn(direction)
    return true
end

function Player:onTradeRequest(target, item)
    return true
end

function Player:onGainExperience(source, exp, rawExp)
if hasVip(self:getId()) then
exp = exp * 1.2
end
return exp
end
 
Last edited:
Back
Top