• 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!

Solved party

Il Knight

Veteran OT User
Joined
Dec 1, 2014
Messages
676
Solutions
7
Reaction score
350
Location
Spain
Lua:
function onUse(player, item, fromPosition, target, toPosition, isHotkey)
  
local partys = getPartyMembers(player)

for _, miembros in pairs(partys) do
local exp = 100
local div = ???
doPlayerAddExp(miembros, exp/div)

end
    return true
end

this script add 100 of exp to each party member<
how can i know the level of the recipient?
local div = ??? << the level of the player who are receiving this exp
 
Last edited by a moderator:
tfs 1.2 code:

Lua:
function onUse(player, item, fromPosition, target, toPosition, isHotkey)
    local party = player:getParty()
    if not party then
        return true
    end
    local members = party:getMembers()
    for i = 1, #members do
        members[i]:addExperience(100/members[i]:getLevel())
    end
    return true
end
 
@Xeraphus

here the full script.
the script, give the exp all good, but not the money.
can you optimize this script?
bug =

[C]: in function 'getBankBalance'
data/creaturescripts/scripts/Config.lua:37: in function <data/creaturescripts/scripts/Config.lua:1>

Code:
function onKill(player, target, mostDamageKiller)
       
if not player == mostDamageKiller or isSummon(target) then

return true
end

local monsters = {
        [1] = { name = "rat",      min_gold = 1, max_gold = 10, exp = 1000 },
        [2] = { name = "cave rat", min_gold = 100, max_gold = 200, exp = 10000 },
        [3] = { name = "rotworm",  min_gold = 2000, max_gold = 3000, exp = 100000 }
    }

local party = player:getParty()

if party and party:isSharedExperienceActive() then

local rate = (party:getMemberCount() + 1)
local leader = party:getLeader():getId()
local partys = getPartyMembers(player)

for i = 1, #monsters do
        if monsters[i].name == target:getName():lower() then
          
local value = math.random(monsters[i].min_gold, monsters[i].max_gold)

local gold = (value/rate)

local exp = (monsters[i].exp)

local div = (exp/rate)

for _, members in pairs(partys) do

doPlayerAddExp(members, div/getPlayerLevel(members))

doPlayerAddMoney(members, getBankBalance(members) + gold)

dosendTextMessage(members, MESSAGE_STATUS_DEFAULT, string.format('You have gained %d coins in this battle.', gold))
       
                    break
            end
        end
    end
end
    return true
end
 
@Xeraphus

here the full script.
the script, give the exp all good, but not the money.
can you optimize this script?
bug =

[C]: in function 'getBankBalance'
data/creaturescripts/scripts/Config.lua:37: in function <data/creaturescripts/scripts/Config.lua:1>

Code:
function onKill(player, target, mostDamageKiller)
     
if not player == mostDamageKiller or isSummon(target) then

return true
end

local monsters = {
        [1] = { name = "rat",      min_gold = 1, max_gold = 10, exp = 1000 },
        [2] = { name = "cave rat", min_gold = 100, max_gold = 200, exp = 10000 },
        [3] = { name = "rotworm",  min_gold = 2000, max_gold = 3000, exp = 100000 }
    }

local party = player:getParty()

if party and party:isSharedExperienceActive() then

local rate = (party:getMemberCount() + 1)
local leader = party:getLeader():getId()
local partys = getPartyMembers(player)

for i = 1, #monsters do
        if monsters[i].name == target:getName():lower() then
        
local value = math.random(monsters[i].min_gold, monsters[i].max_gold)

local gold = (value/rate)

local exp = (monsters[i].exp)

local div = (exp/rate)

for _, members in pairs(partys) do

doPlayerAddExp(members, div/getPlayerLevel(members))

doPlayerAddMoney(members, getBankBalance(members) + gold)

dosendTextMessage(members, MESSAGE_STATUS_DEFAULT, string.format('You have gained %d coins in this battle.', gold))
     
                    break
            end
        end
    end
end
    return true
end
Lua:
local monsters = {
    {name = "rat",      min_gold = 1,    max_gold = 10,   exp = 1000 },
    {name = "cave rat", min_gold = 100,  max_gold = 200,  exp = 10000 },
    {name = "rotworm",  min_gold = 2000, max_gold = 3000, exp = 100000 }
}

function onKill(creature, target, mostDamageKiller)
    local player = creature:getPlayer()
    if not player then
        return true
    end

    if not (player == mostDamageKiller) or target:getMaster() then
        return true
    end

    local party = player:getParty()
    if party and party:isSharedExperienceActive() then
        local rate = (party:getMemberCount() + 1)
        local members = party:getMembers()

        for i = 1, #monsters do
            if monsters[i].name == target:getName():lower() then
                local value = math.random(monsters[i].min_gold, monsters[i].max_gold)
                local gold = value/rate
                local exp = monsters[i].exp
                local div = exp/rate
                for i = 1, #members do
                    members[i]:addExperience(div/members[i]:getLevel())                    
                    members[i]:setBankBalance(members[i]:getBankBalance() + gold)                    
                    members[i]:sendTextMessage(MESSAGE_STATUS_DEFAULT, "You have gained ".. gold .." coins in this battle.")
                end
            end
        end
    end
    return true
end
keep a function list with you so you actually know what to use
https://otland.net/threads/tfs-1-0-1-2-lua-functions.197202/
 
Lua:
local monsters = {
    {name = "rat",      min_gold = 1,    max_gold = 10,   exp = 1000 },
    {name = "cave rat", min_gold = 100,  max_gold = 200,  exp = 10000 },
    {name = "rotworm",  min_gold = 2000, max_gold = 3000, exp = 100000 }
}

function onKill(creature, target, mostDamageKiller)
    local player = creature:getPlayer()
    if not player then
        return true
    end

    if not (player == mostDamageKiller) or target:getMaster() then
        return true
    end

    local party = player:getParty()
    if party and party:isSharedExperienceActive() then
        local rate = (party:getMemberCount() + 1)
        local members = party:getMembers()

        for i = 1, #monsters do
            if monsters[i].name == target:getName():lower() then
                local value = math.random(monsters[i].min_gold, monsters[i].max_gold)
                local gold = value/rate
                local exp = monsters[i].exp
                local div = exp/rate
                for i = 1, #members do
                    members[i]:addExperience(div/members[i]:getLevel())                   
                    members[i]:setBankBalance(members[i]:getBankBalance() + gold)                   
                    members[i]:sendTextMessage(MESSAGE_STATUS_DEFAULT, "You have gained ".. gold .." coins in this battle.")
                end
            end
        end
    end
    return true
end
keep a function list with you so you actually know what to use
https://otland.net/threads/tfs-1-0-1-2-lua-functions.197202/
is not working, i use print and is not reaching the part of
for i = 1, #monsters do
if monsters.name == target:getName():lower() then
 
now is working
but when the party kill something =
You have Gained 4.333333333 coins in this battle.
D:
is a method to do =
You have Gained 4.3 coins in this battle.
or
You have Gained 4 coins in this battle.
?
thanks in advance Xeraphus

other question,
i wanna add some "special items" to this monsters in this script

is possible to add other table like= ?

local loot = {
iron ore = rat, rotworm.
cluster of solace = cave rat, super rotworm. }

this loot its only sended to the party:getLeader()
in the purse slot (11)

Code:
local monsters = {
    {name = "rat",      min_gold = 1,    max_gold = 10,   exp = 1000 },
    {name = "cave rat", min_gold = 100,  max_gold = 200,  exp = 10000 },
    {name = "rotworm",  min_gold = 2000, max_gold = 3000, exp = 100000{
}
function onKill(creature, target, mostDamageKiller)

        local player = creature:getPlayer()
       
    if not player then
        return true
    end
   
    if not player == mostDamageKiller then
        return true
    end
   
    if target:getMaster() then
        return true
    end
   
        local party = player:getParty()
       
    if party and party:isSharedExperienceActive() then
       
        local rate = (party:getMemberCount() + 1)
        local members = party:getMembers()
    for i = 1, #monsters do
   
    if monsters[i].name == target:getName():lower() then
   
        local value = math.random(monsters[i].min_gold, monsters[i].max_gold)
        local gold = value/rate
        local exp = monsters[i].exp
        local div = exp/rate
        local leader = party:getLeader()
        local lev = leader:getLevel()
               
            leader:addExperience(div/lev)
            leader:setBankBalance(leader:getBankBalance() + gold)
            leader:sendTextMessage(MESSAGE_STATUS_DEFAULT, "You have gained ".. gold .." coins in this battle.")
                   
    for i = 1, #members do
   
            members[i]:addExperience(div/members[i]:getLevel())                   
            members[i]:setBankBalance(members[i]:getBankBalance() + gold)                   
            members[i]:sendTextMessage(MESSAGE_STATUS_DEFAULT, "You have gained ".. gold .." coins in this battle.")
           
                end
            end
        end
    end

    return true
end
 
Back
Top