• 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!
  • 2026 staff recruitment is open! Check it out and consider applying!

need convert a mod to lua system

risy

Member
Joined
Aug 25, 2007
Messages
51
Solutions
1
Reaction score
6
Location
Spain
well i need convert the Cyber's rep system to lua function system for tfs 1.1 because it havent mods system,
if someone could help me I would be eternally grateful

here is the mod:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<!-- To use this system, execute query:
 ALTER TABLE `players` ADD COLUMN `rep` INT( 11 ) NOT NULL DEFAULT '0' COMMENT 'Cyber''s REPSystem © OTLand.net';
 -->
<mod name="Cyber's REP System" revision="6.1" author="Cybermaster" web="otland.net" enabled="yes"
released="August2010" credits="Sync;Shawak;Chris;nsanee"><config name="repSystem"><![CDATA[
    rep = {
        --[[ CONFIG ]]--
        interval = 3 * 60, --This is [3] hours, in minutes. Time to be online to gain [1] Opinion Point.
        minLevel = 20, --From this level onwards player can use commands
        pvpLevel = 30, --Minimum level for PVP Rep'ing
        required = 5, --Opinion points required to repute with talkaction command
        exhaustion = 60, --Seconds to wait to be able to use !rep command again
        power = false, --Use RepPower Feature? OPTIONS 1:true 2:false
        --[[ STORAGES ]]--
        exhaust = 5045, --Exhaustion for !rep command.
        lastName = 5036, --Used to store the last repped's GUID
        lastKilled = 5037, --Used to store the last killed's GUID
        opinion = 5038, --Used to store the opinion points
        online = 5039, --Used to store online minutes
    
        autoOpinion = function(cid)
            if not isPlayer(cid) then
                return true
            end
            doCreatureSetStorage(cid, rep.online, getCreatureStorage(cid, rep.online)+1)
            if getCreatureStorage(cid, rep.online) >= rep.interval then
                doCreatureSetStorage(cid, rep.online, 0)
                doSendAnimatedText(getThingPos(cid), '+1', TEXTCOLOR_LIGHTBLUE)
                doCreatureSetStorage(cid, rep.opinion, getCreatureStorage(cid, rep.opinion)+1)
                doPlayerSendTextMessage(cid, 27, 'You have just obtained an opinion point.')
            end
            repEvent = addEvent(rep.autoOpinion, 60 * 1000, cid)
        end,
        
        getArticle = function(cid, uppercase)
            return (getPlayerSex(cid) ==  0 and (uppercase and 'Sh' or 'sh') or (uppercase and 'H' or 'h')) .. 'e'
        end,
  
        getPoints = function(cid)
            local result = db.getResult('SELECT `rep` FROM `players` WHERE `id` = '.. getPlayerGUID(cid))
            local data = result:getDataInt('rep')
            result:free()
            return data
        end,
  
        getPower = function(points)
            local power = {{0,1},{300,2},{500,3},{1000,4},{1500,5},{2000,6},{5000,7}}
            table.sort(power, function(a, b) return a[1] > b[1] end)
            for _, t in ipairs(power) do     
                if math.abs(points) >= t[1] then
                    return t[2]
                end
            end
            return power[1][2]
        end,
  
        getRank = function(points)
            local ranks = {
                {-5000, 'Power Abuser (*<<==========)'},
                {-2000, 'Evil (=*<==========)'},
                {-1500, 'Slayer (==*==========)'},
                {-1000, 'Killer (===|=========)'},
                {-500,     'Villain (====|========)'},
                {-300,     'Creeping (=====|=======)'},
                {0,     'Unknown (======|======)'},
                {300,     'Avowed (=======|=====)'},
                {500,     'Popular (========|====)'},
                {1000,     'Hailed (=========|===)'},
                {1500,     'Acclaimed (==========+==)'},
                {2000,     'Hero (==========>+=)'},
                {5000,    'Legend (==========>>+)'}
            }
            if points > -1 then
                table.sort(ranks, function(a, b) return a[1] > b[1] end)
                for _, t in ipairs(ranks) do if points >= t[1] then return t[2] end end
            else
                table.sort(ranks, function(a, b) return a[1] < b[1] end)
                for _, t in ipairs(ranks) do if points <= t[1] then return t[2] end end
            end       
            return ranks[1][2]
        end,
  
        set = function(cid, points)
            db.executeQuery('UPDATE `players` SET `rep` = ' .. points .. ' WHERE `id` = ' .. getPlayerGUID(cid))
        end,

        add = function(cid, amount, color)
            db.executeQuery('UPDATE `players` SET `rep` = `rep` + ' .. amount .. ' WHERE `id` = ' .. getPlayerGUID(cid))
            doSendAnimatedText(getThingPos(cid), '+REP', color and color or math.random(255))
            doPlayerSendCancel(cid, 'You have just been hailed and gained '.. amount ..' reputation points.')
        end,
  
        remove = function(cid, amount, color)
            db.executeQuery('UPDATE `players` SET `rep` = `rep` - ' .. amount .. ' WHERE `id` = ' .. getPlayerGUID(cid))
            doSendAnimatedText(getThingPos(cid), '-REP',  color and color or math.random(255))
            doPlayerSendCancel(cid, 'You have just been repudiated and lost '.. amount ..' reputation points.')
        end,
        
        format = function(str)
            str = tostring(str):reverse()
            str = str:gsub("(%d)(%d)(%d)", '%1%2%3' .. (',' or ' '), math.ceil(str:len() / 3)-1)
            return str:reverse()
        end,
    }
]]></config>

<event type="login" name="repRegister" event="script"><![CDATA[
    domodlib('repSystem')
    function onLogin(cid)
        repEvent = addEvent(rep.autoOpinion, 60 * 1000, cid)
        if getCreatureStorage(cid, rep.opinion) == -1 then
            doCreatureSetStorage(cid, rep.online, 0)
            doCreatureSetStorage(cid, rep.opinion, 0)
        end
        registerCreatureEvent(cid, "repLook")
        registerCreatureEvent(cid, "repKill")
        registerCreatureEvent(cid, "repMonster")
        return true
    end
]]></event>

<event type="logout" name="repCancel" event="script"><![CDATA[
    domodlib('repSystem')
    function onLogout(cid)
        stopEvent(repEvent)
        return true
    end
]]></event>
      
<event type="look" name="repLook" event="script"><![CDATA[
    domodlib('repSystem')
    function onLook(cid, thing, position, lookDistance)
        if isPlayer(thing.uid) and thing.uid ~= cid then
            doPlayerSetSpecialDescription(thing.uid,'\n'.. rep.getArticle(thing.uid, true)..' is ' .. rep.getRank(rep.getPoints(thing.uid)) ..'.')
            return true
        elseif thing.uid == cid then     
            local string = 'You see yourself.'
            if getPlayerFlagValue(cid, PLAYERFLAG_SHOWGROUPINSTEADOFVOCATION) then
                string = string..' You are '.. getPlayerGroupName(cid) ..'.'
            elseif getPlayerVocation(cid) ~= 0 then
                string = string..' You are '.. getPlayerVocationName(cid) ..'.'
            else
                string = string..' You have no vocation.'
            end
            string = string..' You are '.. rep.getRank(rep.getPoints(cid)) ..'.'
    
            if getPlayerNameByGUID(getPlayerPartner(cid), false, false) ~= nil then
                string = string..' You are '.. (getPlayerSex(cid) == 0 and 'wife' or 'husband') ..' of '.. getPlayerNameByGUID(getPlayerPartner(cid)) ..'.'
            end
    
            if getPlayerGuildId(cid) > 0 then
                string = string..' You are ' .. (getPlayerGuildRank(cid) == '' and 'a member' or getPlayerGuildRank(cid)) ..' of the '.. getPlayerGuildName(cid)
                string = getPlayerGuildNick(cid) ~= '' and string..' ('.. getPlayerGuildNick(cid) ..').' or string..'.'
            end
    
            if getPlayerFlagValue(cid, PLAYERCUSTOMFLAG_CANSEECREATUREDETAILS) then
                string = string..'\nHealth: ['.. getCreatureHealth(cid) ..' / '.. getCreatureMaxHealth(cid) ..'], Mana: ['.. getCreatureMana(cid) ..' / '.. getCreatureMaxMana(cid) ..'].'
                string = string..'\nIP: '.. doConvertIntegerToIp(getPlayerIp(cid)) ..'.'
            end
    
            if getPlayerFlagValue(cid, PLAYERCUSTOMFLAG_CANSEEPOSITION) then
                string = string..'\nPosition: [X:'.. position.x..'] [Y:'.. position.y..'] [Z:'.. position.z..'].'
            end
            doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, string) 
            return false
        end
        return true
    end]]>
</event>
              
<event type="kill" name="repKill" event="script"><![CDATA[
    domodlib('repSystem')
    local t = {
        [SKULL_WHITE] = 15,
        [SKULL_RED] = 20,
        [SKULL_BLACK] = 40,
        [SKULL_NONE] = -30,
    }

    function onKill(cid, target, lastHit)
        if isPlayer(cid) and isPlayer(target) and getPlayerIp(cid) ~= getPlayerIp(target) and getCreatureStorage(cid, rep.lastKilled) ~= getPlayerGUID(target) and not getTileInfo(getThingPos(cid)).nopvp or not getTileInfo(getThingPos(cid)).optional then
        --THE KILLER
            if t[getCreatureSkullType(target)] and getPlayerLevel(target) >= rep.pvpLevel then
                doSendAnimatedText(getThingPos(cid), getCreatureSkullType(target) == 0 and '-REP' or '+REP', math.random(255))
                doCreatureSetStorage(cid, rep.lastKilled, getPlayerGUID(target))
                rep.set(cid, rep.getPoints(cid)+t[getCreatureSkullType(target)])
                doPlayerSendCancel(cid, 'You '.. (getCreatureSkullType(target) == 0 and 'lose' or 'gain') ..' reputation because you killed a player.')
            end
        --THE VICTIM
            if rep.getPoints(target) == 0 then
                return true
            elseif rep.getPoints(target) > 0 then
                rep.remove(target, 5, TEXTCOLOR_RED)
                doPlayerSendCancel(target, 'You lose reputation because you were killed by a player.')
            else
                rep.add(target, 5, TEXTCOLOR_LIGHTBLUE)
                doPlayerSendCancel(target, 'You lose reputation because you were killed by a player.')
            end
        end
        return true
    end]]>
</event>
              
<event type="kill" name="repMonster" event="script"><![CDATA[
    domodlib('repSystem')
    local monster = { --add monsters names only in lowercase
        ['demon'] = 3,
        ['behemoth'] = 4,
        ['hellfire fighter'] = 5,
        ['orshabaal'] = 10,
    }
    function onKill(cid, target, lastHit)
        if isPlayer(cid) and isMonster(target) and monster[getCreatureName(target):lower()] and lastHit then
            rep.add(cid, monster[getCreatureName(target):lower()])
        end
        return true
    end]]>
</event>
      
<talkaction log="yes" words="/hail;/fuck;/set" access="4" event="buffer">
    <![CDATA[
        domodlib('repSystem')
        if param == '' then
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,'[REP_SYSTEM] You must write a player\'s name.')
            return true
        end

        local t = string.explode(param, ',')
        local tid = getPlayerByNameWildcard(t[1])

        if not isPlayer(tid) then
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, '[REP_SYSTEM] Player ' .. param .. ' not found.')
            return true
        end
      
        if not t[2] and isPlayer(tid) then 
            if words == '/hail' then
                rep.add(tid, 5, TEXTCOLOR_TEAL)
                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, '[REP_SYSTEM] You added +5 rep points to ' .. getPlayerName(tid) .. ', and now ' .. rep.getArticle(tid, false) .. ' has ' .. rep.getPoints(tid) .. ' points.')
                return true
            end
              
            if words == '/fuck' then
                rep.remove(tid, 5, TEXTCOLOR_RED)
                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, '[REP_SYSTEM] You removed -5 rep points to ' .. getPlayerName(tid) .. ', and now ' .. rep.getArticle(tid, false) .. ' has ' .. rep.getPoints(tid) .. ' points.')
                return true
            end
        end
      
        if t[2] and isInArray({'/set','/hail','fuck'}, words) then
            if not tonumber(t[2]) then
                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, '[REP_SYSTEM] Reputation amount is invalid.')
                return true
            end                                   
        end
      
        if words == '/hail' then
            rep.add(tid, t[2], TEXTCOLOR_TEAL)
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, '[REP_SYSTEM] You added ' .. t[2] .. ' rep points to ' .. getPlayerName(tid) .. ', and now ' .. rep.getArticle(tid, false) .. ' has ' .. rep.getPoints(tid) .. ' points.')
            return true
        end
              
        if words == '/fuck' then
            rep.remove(tid, t[2], TEXTCOLOR_RED)
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, '[REP_SYSTEM] You removed ' .. t[2] .. ' rep points to ' .. getPlayerName(tid) .. ', and now ' .. rep.getArticle(tid, false) .. ' has ' .. rep.getPoints(tid) .. ' points.')
            return true
        end
              
        if t[2] and words == '/set' then
            rep.set(tid, t[2])
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, '[REP_SYSTEM] You have set ' .. getPlayerName(tid) .. '\'s points to ' .. rep.getPoints(tid))
        else
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, '[REP_SYSTEM] Absolute reputation amount not specified.')
            return true
        end
      
        if not t[2] then
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, '[REP_SYSTEM] Absolute reputation amount not specified.')
            return true
        end   
    return true]]>
</talkaction>
              
<talkaction words="!rep" event="buffer"><![CDATA[
    domodlib('repSystem')
    if exhaustion.check(cid, rep.exhaust) then
        doPlayerSendCancel(cid, 'You can\'t use this command yet['..exhaustion.get(cid, rep.exhaust)..'].')
        return true
    else
        exhaustion.set(cid, rep.exhaust, rep.exhaustion)
    end
    
    if param ~= '' then
        local str, value, name, result = '', '',' ', 0, nil
        if isInArray({'hero','pos','1','+'}, param) then
            str,value,name = '[#]-[Name]-[Points]-[Rank]\n--[Positive Reputation Highscores]--\n','rep','name'
            result = db.getResult('SELECT `name`, `rep` FROM `players` WHERE `rep` > 0 AND `name` NOT LIKE "%Sample" AND `name`!= "Account Manager" AND `deleted` = 0 AND `group_id` = 1 ORDER BY `rep` DESC LIMIT 10;')
        elseif isInArray({'evil','neg','2','-'}, param) then
            str,value,name = '[#]-[Name]-[Points]-[Rank]\n--[Negative Reputation Highscores]--\n','rep','name'
            result = db.getResult('SELECT `name`, `rep` FROM `players` WHERE `rep` < 0 AND `name` NOT LIKE "%Sample" AND `name`!= "Account Manager" AND `deleted` = 0 AND `group_id` = 1 ORDER BY `rep` ASC LIMIT 10;')
        else
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Unknown parameter, use only +, -, 1, 2.')
            return true
        end

        if isInArray({-1,nil,false,''},result:getID()) then
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'No results were found.')
            return true
        end
        local i = 1
        while true do
            str = str .. '\n ' .. i .. '. ' .. result:getDataString('name') .. ' - [' .. result:getDataInt(value) .. '] - ' .. rep.getRank(result:getDataInt(value))
            i = i + 1
            if not(result:next()) then
                break
            end
        end
        result:free()
        doPlayerPopupFYI(cid, str)
        return true
    elseif param == '' then
        local points, action, name = rep.getPoints(cid), false, getPlayerNameByGUID(getCreatureStorage(cid, rep.lastName), false, false)
        doPlayerSendTextMessage(cid, 27, 'You have '.. rep.format(points) ..' reputation points. You have ' .. getCreatureStorage(cid, rep.opinion) .. ' opinion points and you will gain one '.. (getCreatureStorage(cid, rep.opinion) > 0 and 'more ' or '') ..'in '.. rep.interval - getCreatureStorage(cid, rep.online) ..' minutes.'.. (rep.power and ' Your Rep Power is ' .. rep.getPower(points) ..'.' or '')..(name ~= nil and ' You last reputed ' .. name .. '.' or ''))
        if points > 4999 then --female rep+++ queen outfit
            disguise, text, action = getPlayerSex(cid) == 0 and 331 or 332, getPlayerSex(cid) == 0 and 'Queen!!' or 'King!!', true
        elseif points > 1999 then --rep++ cm outfit
            disguise, text, action = 73, 'Hero!!', true
        elseif points > 1499 then --rep+ hero outfit
            disguise, text, action = 63, 'Acclaimed!!', true
        elseif points < -4999 then --rep*** devil outfit
            disguise, text, action = 334, 'P.O.!', true
        elseif points < -1999  then --rep** pig outfit
            disguise, text, action = 306, 'Evil!!', true
        elseif points < -1499 then --rep* orc outfit
            disguise, text, action = 5, "Slayer!!", true 
        end
        
        if action and getCreatureOutfit(cid).lookType ~= disguise then
            doSetCreatureOutfit(cid, {lookType = disguise}, -1)
            doSendAnimatedText(getThingPos(cid), text, math.random(255))
            return true
        end
    end
    return true]]>
</talkaction>
      
<talkaction words="!hail;!fuck" event="buffer"><![CDATA[
    domodlib('repSystem')
    if param == '' then
        doPlayerSendCancel(cid, 'Command requires a player\'s name.')
        return true
    end
      
    local target = getPlayerByNameWildcard(param)
  
    if not isPlayer(target) then
        doPlayerSendCancel(cid, 'That player does not exist or is offline.')
        return true
    end
                                  
    if getPlayerLevel(cid) < rep.minLevel then
        doPlayerSendCancel(cid,'You may repute from level ' .. rep.minLevel ..' onwards.')
        return true
    end
      
    if getPlayerIp(cid) == getPlayerIp(target) then
        doPlayerSendCancel(cid, 'You may not repute neither yourself nor anyone in your IP.') 
        return true
    end
    
    if getPlayerGUID(target) == getCreatureStorage(cid, rep.lastName) then
        doPlayerSendCancel(cid, 'You may not repute that player two times in a row.') 
        return true
    end
  
    if getCreatureStorage(cid, rep.opinion) < rep.required then
        doPlayerSendCancel(cid, 'You do not have enough opinion points to repute.') 
        return true
    end
                                        
    if words == '!hail' then
        doCreatureSetStorage(cid, rep.lastName, getPlayerGUID(target))
        doCreatureSetStorage(cid, rep.opinion, getCreatureStorage(cid, rep.opinion)-rep.required)
        doPlayerSendCancel(cid, 'You have just reputed ' .. getCreatureName(target) .. '. You have ' .. getCreatureStorage(cid, rep.opinion) .. ' opinion points left.')
        rep.add(target, rep.power and rep.getPower(rep.getPoints(cid)) or 5, TEXTCOLOR_LIGHTBLUE)
    elseif words == '!fuck' then
        doCreatureSetStorage(cid, rep.lastName, getPlayerGUID(target))
        doCreatureSetStorage(cid, rep.opinion, getCreatureStorage(cid, rep.opinion)-rep.required)
        doPlayerSendCancel(cid, 'You have just reputed ' .. getCreatureName(target) .. '. You have ' .. getCreatureStorage(cid, rep.opinion) .. ' opinion points left.')
        rep.remove(target, rep.power and rep.getPower(rep.getPoints(cid)) or 5, TEXTCOLOR_RED)
    end
    return true
]]></talkaction>
</mod>
 
Back
Top