• TibiaFace

    Tibiaface | Una comunidad Open Tibia donde encontras : mapas, scripts, Otserver, npc y amigos etc ...

    .
    demo menumenu

    Afiliados



    Votar:

    [Mods] Comprar characters y agregarlos a tu lista.

    Ver el tema anterior Ver el tema siguiente Ir abajo  Mensaje (Página 1 de 1.)

    Se trata de un MOD el cual te permite por medio de un talkaction comprar characters de forma segura y agregarlos a tu propia lista de chars. Tambien puedes vender characters libremente y todo dentro del juego.

    Código:
    <?xml version="1.0" encoding="UTF-8"?>  
    <mod name="Characters Market System" version="1.0" author="LuckOake" contact="none" enabled="yes">
    ------------------------------------------------------------------------------------
    <config name="market"><![CDATA[
    price = 27112
    owner = 27113
    level = 30 -- Level mínimo que o character deve ter para ser vendido
    min_price = 10000 -- Preço mínimo de um character
    max_price = 500000000 -- Preço máximo de um character
     
    function doTransferCharacter(cid, accId)
            return db.executeQuery("UPDATE `players` SET `account_id` = "..accId.." WHERE `id` = "..getPlayerGUIDByName(cid).."")
    end
     
    function doOfflinePlayerAddMoney(guid, money)
            return db.executeQuery("UPDATE `players` SET `balance` = `balance` + '"..money.."' WHERE `id` = '"..getPlayerGUIDByName(guid).."';")
    end
     
    function setOfflinePlayerStorageValue(name, key, value)
            local result = db.getResult("SELECT * FROM `player_storage` WHERE `player_id` = ".. getPlayerGUIDByName(name) .." AND `key` = ".. key ..";")
            if result:getID() == -1 then
                    return db.executeQuery("INSERT INTO `player_storage` (`player_id`, `key`, `value`) VALUES (".. getPlayerGUIDByName(name) ..", ".. key ..", ".. value ..");")
            else
                    result:free()
                    return db.executeQuery("UPDATE `player_storage` SET `value` = ".. value .." WHERE `player_id` = ".. getPlayerGUIDByName(name) .." AND `key` = ".. key ..";")
            end
    end
     
    function getOfflinePlayerStorageValue(name, key)
            local result, ret = db.getResult("SELECT `value` FROM `player_storage` WHERE `player_id` = '".. getPlayerGUIDByName(name) .."' AND `key` = ".. key ..";")
            if result:getID() == -1 then
                    return nil
            end
            ret = result:getDataInt("value")
            result:free()
            return ret
    end
     
    function getOfflinePlayerValue(name, value)
            local result, ret = db.getResult("SELECT `"..value.."` FROM `players` WHERE `id` = "..getPlayerGUIDByName(name)..";")
            ret = result:getDataInt(value)
            result:free()
            return ret
    end
     
    function isCharacterForSale(name)
            if not getOfflinePlayerStorageValue(name, price) or getOfflinePlayerStorageValue(name, price) < 1 then
            return false
            else
            return true
            end
    end
    ]]></config>
    ------------------------------------------------------------------------------------
    <talkaction words="!character" event="buffer"><![CDATA[
    domodlib('market')
            local t = string.explode(param, ",")
          
            if t[1] == "sell" then
                    if not t[3] or not tonumber(t[3]) or t[4] or tonumber(t[2]) then
                            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Incorrect Params. Specify the character name and the price.") return true
                    elseif getPlayerAccountId(cid) ~= getAccountIdByName(t[2]) then
                            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "This is not your character.") return true
                    elseif isCharacterForSale(t[2]) then
                            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "This character is already for sale.") return true
                    elseif getPlayerGUIDByName(t[2]) == getPlayerGUID(cid) then
                            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You cannot sell yourself.") return true
                    elseif getPlayerByName(t[2]) then
                            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "The character must be offline to be sold.") return true
                    elseif getOfflinePlayerValue(t[2], "level") < level then
                            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Your character can't be sold until it has level "..level..".") return true
                    elseif tonumber(t[3]) < min_price then
                            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Sorry, but the minimum price for selling a character is "..min_price..".") return true
                    elseif tonumber(t[3]) > max_price then
                            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Sorry, but the maximum price for selling a character is "..max_price..".") return true
                    end
          
                            setOfflinePlayerStorageValue(t[2], price, t[3])
                            setOfflinePlayerStorageValue(t[2], owner, getPlayerGUID(cid))
                            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Your character "'..t[2]..'" is now for sale for the price of "'..t[3]..'" gold coins.')
            elseif t[1] == "buy" then
                    if not t[2] then
                            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Incorrect Params. Specify the character name.") return true
                    elseif not playerExists(t[2]) then
                            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "This character doesn't exist.") return true
                    elseif getPlayerAccountId(cid) == getAccountIdByName(t[2]) then
                            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You can't buy your own character.") return true
                    elseif not isCharacterForSale(t[2]) then
                            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "This character is not for sale.") return true
                    elseif not doPlayerRemoveMoney(cid, getOfflinePlayerStorageValue(t[2], price)) then
                            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Not enough money. This character's price is "..getOfflinePlayerStorageValue(t[2], price).." gold coins.") return true
                    end
                          
                    if not getPlayerByGUID(getOfflinePlayerStorageValue(t[2], owner)) then
                            doOfflinePlayerAddMoney(getPlayerNameByGUID(getOfflinePlayerStorageValue(t[2], owner)), getOfflinePlayerStorageValue(t[2], price))
                            setOfflinePlayerStorageValue(getPlayerNameByGUID(getOfflinePlayerStorageValue(t[2], owner)), 41792, getPlayerGUIDByName(t[2]))
                    else
                            doPlayerAddMoney(getPlayerByGUID(getOfflinePlayerStorageValue(t[2], owner)), getOfflinePlayerStorageValue(t[2], price))
                            doPlayerSendTextMessage(getPlayerByGUID(getOfflinePlayerStorageValue(t[2], owner)), MESSAGE_STATUS_CONSOLE_BLUE, 'Your character "'..t[2]..'" has been sold for the price of '..getOfflinePlayerStorageValue(t[2], price)..' gold coins.')
                    end
                            doTransferCharacter(t[2], getPlayerAccountId(cid))
                            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'You bought the character "'..t[2]..'" for the price of '..getOfflinePlayerStorageValue(t[2], price)..' gold coins.')
                            setOfflinePlayerStorageValue(t[2], owner, -1)
                            setOfflinePlayerStorageValue(t[2], price, -1) return true
            elseif t[1] == "remove" then
                    if not t[2] then
                            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Incorrect Params. Specify the character name.") return true
                    elseif getPlayerAccountId(cid) ~= getAccountIdByName(t[2]) then
                            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "This is not your character.") return true
                    elseif not isCharacterForSale(t[2]) then
                            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "This character is not for sale.") return true
                    end
                  
                            setOfflinePlayerStorageValue(t[2], price, -1)
                            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'You removed the character "'..t[2]..'" from the Characters Market.') return true
            elseif t[1] == "list" then
                    local result = db.getResult("SELECT `name` FROM `players`")
                    if result:getID() == -1 then
                            return true
                    end
                    local msg = "Characters for Sale:\n\n"
                    while true do
                            local name = result:getDataString("name")
                            if isCharacterForSale(name) then
                            local sex = getOfflinePlayerValue(name, "sex") == 1 and "Male" or "Female"
                                    msg = ""..msg.." - ".. name .." (Level: "..getOfflinePlayerValue(name, "level").." / Vocation: "..getVocationInfo(getOfflinePlayerValue(name, "vocation")).name.." / Sex: "..sex.." / Owner: "..getPlayerNameByGUID(getOfflinePlayerStorageValue(name, owner))..") [Price: "..getOfflinePlayerStorageValue(name, price).."] \n"
                            end
                            if not result:next() then
                                    break
                            end
                    end
                            doPlayerPopupFYI(cid, msg) return true
            elseif not t[1] or t[1] ~= "buy" or t[1] ~= "sell" or t[1] ~= "remove" or t[1] ~= "list" then
                    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Incorrect params. You can only 'buy' or 'sell' a character, 'remove' it from the Characters Market or see the 'list' of characters for sale.") return true
            end
    return true
    ]]></talkaction>
    ------------------------------------------------------------------------------------
    <event type="login" name="MarketLogin" event="script"><![CDATA[
    function onLogin(cid)
    domodlib('market')
            if getPlayerStorageValue(cid, price) > 0 then return false
            elseif getPlayerStorageValue(cid, 41792) ~= -1 then
                    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You sold the character "..getPlayerNameByGUID(getPlayerStorageValue(cid, 41792))..". The money is in your bank account.")
                    setPlayerStorageValue(cid, 41792, -1)
            end
    return true
    end
    ]]></event>
    </mod>

    Comandos
    Comandos:
    !character buy,nome -- Compra un character
    !character sell,nome,preço -- Vende un character
    !character remove,nome -- Remover un character de la lista de oferta en caso de que te arrepientas de venderlo
    !character list -- Ver la lista de characters disponibles para comprar
    Creditos
    Creditos:
    LuckOake -- Pelo Sistema
    Oneshot -- Pela ajuda com algumas funções
    Demonbholder -- Pela ajuda com algumas funções



    Última edición por Simón Marín el Vie Dic 09, 2016 12:15 am, editado 1 vez

    Ver perfil de usuario

    2default Tema importante el Vie Dic 09, 2016 12:14 am

    Subo este scipp por que creo que TibiaFace no lo tienes.. es importante que sepan que tambien lo subi buscando ayuda ya que todo este mod esta funcional... pero el unico error es al momento en que se escribe /!character list/ sale un bug que te cierra el cliente . Ayuda pls

    Ver perfil de usuario

    Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje (Página 1 de 1.)

    Permisos de este foro:
    No puedes responder a temas en este foro.