• TibiaFace

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

    .
    demo menumenu

    Afiliados



    Votar:

    [Sistema] ShopGuild Points 100% add in player offline.

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

    [Admin] God Maya

    avatar
    Administrador
    Administrador
    hola usuarios de tibiaface

    bueno aqui les traigo el famoso guild shop donde todos los miembro de la guild reciben puntos cada 24 horas si el linder ejecuta un talkaction.

    sin mas preangulos aqui le dejo el tutorial de como instalarlo:

    lo primero que tenemos que hacer es ejecutar estas lineas en nuestro phpadmin base de datos:

    Código:
    ALTER TABLE `accounts` ADD `guild_points` INTEGER(11) NOT NULL DEFAULT 0;

    Código:
    ALTER TABLE `accounts` ADD `guild_points_stats` INT NOT NULL DEFAULT '0';

    Código:
    ALTER TABLE `guilds` ADD `last_execute_points` INT NOT NULL DEFAULT '0';

    Código:
    CREATE TABLE `z_shopguild_offer`(
                           `id`int(11) NOT NULL auto_increment,
                           `points`int(11) NOT NULL default'0',
                           `itemid1`int(11) NOT NULL default'0',
                           `count1`int(11) NOT NULL default'0',
                           `itemid2`int(11) NOT NULL default'0',
                           `count2`int(11) NOT NULL default'0',
                           `offer_type` varchar(255)default NULL,
                           `offer_description` text NOT NULL,
                           `offer_name` varchar(255) NOT NULL,
                           `pid` INT(11) NOT NULL DEFAULT '0',
                     PRIMARY KEY (`id`))

    Código:
    CREATE TABLE `z_shopguild_history_item`(
                           `id`int(11) NOT NULL auto_increment,
                           `to_name` varchar(255) NOT NULL default'0',
                           `to_account`int(11) NOT NULL default'0',
                           `from_nick` varchar(255) NOT NULL,
                           `from_account`int(11) NOT NULL default'0',
                           `price`int(11) NOT NULL default'0',
                           `offer_id`int(11) NOT NULL default'0',
                           `trans_state` varchar(255) NOT NULL,
                           `trans_start`int(11) NOT NULL default'0',
                           `trans_real`int(11) NOT NULL default'0',
                     PRIMARY KEY (`id`))

    Código:
    CREATE TABLE `z_shopguild_history_pacc`(
                           `id`int(11) NOT NULL auto_increment,
                           `to_name` varchar(255) NOT NULL default'0',
                           `to_account`int(11) NOT NULL default'0',
                           `from_nick` varchar(255) NOT NULL,
                           `from_account`int(11) NOT NULL default'0',
                           `price`int(11) NOT NULL default'0',
                           `pacc_days`int(11) NOT NULL default'0',
                           `trans_state` varchar(255) NOT NULL,
                           `trans_start`int(11) NOT NULL default'0',
                           `trans_real`int(11) NOT NULL default'0',
                     PRIMARY KEY (`id`))

    Código:
    CREATE TABLE IF NOT EXISTS `z_ots_guildcomunication` (
      `id` int(11) NOT NULL,
      `name` varchar(255) NOT NULL,
      `type` varchar(255) NOT NULL,
      `action` varchar(255) NOT NULL,
      `param1` varchar(255) NOT NULL,
      `param2` varchar(255) NOT NULL,
      `param3` varchar(255) NOT NULL,
      `param4` varchar(255) NOT NULL,
      `param5` varchar(255) NOT NULL,
      `param6` varchar(255) NOT NULL,
      `param7` varchar(255) NOT NULL,
      `delete_it` int(2) NOT NULL DEFAULT '1'
    ) ENGINE=MyISAM AUTO_INCREMENT=13382 DEFAULT CHARSET=latin1;


    listo ahora nos vamos a:

    index.php y añadimos

    Código:
    case "shopguild";
    $topic = "Shop Guild";
    $subtopic = "shopguild";
    include("shopguild.php");
    break;

    Código:
    case "shopguildadmin";
    $subtopic = "shopguildadmin";
    $topic = "Shop System";
    include("shopguildadmin.php");
    break;


    en config.php añadimos:

    Código:
    $config['site']['shopguild_system'] = 1;


    en la layouts.php añadimos_.

    Código:
    <a href='?subtopic=shopguild'>
      <div id='submenu_shopguild' class='Submenuitem' onMouseOver='MouseOverSubmenuItem(this)' onMouseOut='MouseOutSubmenuItem(this)'>
            <div class='LeftChain' style='background-image:url(".$layout_name."/images/general/chain.gif);'></div>
            <div id='ActiveSubmenuItemIcon_shopguild' class='ActiveSubmenuItemIcon' style='background-image:url(".$layout_name."/images/menu/icon-activesubmenu.gif);'></div>
            <div class='SubmenuitemLabel'>Shop Guild <blink><font size='0'><font color='yellow'>NEW</font></font></blink></div>
            <div class='RightChain' style='background-image:url(".$layout_name."/images/general/chain.gif);'></div>
      </div>
    </a>

    Código:
    <a href='?subtopic=shopguildadmin'>
      <div id id='submenu_shopguildadmin' class='Submenuitem' onMouseOver='MouseOverSubmenuItem(this)' onMouseOut='MouseOutSubmenuItem(this)'>
        <div class='LeftChain' style='background-image:url(".$layout_name."/images/general/chain.gif);'></div>
        <div id='ActiveSubmenuItemIcon_shopguildadmin' class='ActiveSubmenuItemIcon' style='background-image:url(".$layout_name."/images/menu/icon-activesubmenu.gif);'></div>
        <div class='SubmenuitemLabel'><font color=red>! ShopGuild Admin !</font></div>
        <div class='RightChain' style='background-image:url(".$layout_name."/images/general/chain.gif);'></div>
      </div>
    </a>

    en htdoc añadimos estos archivos shopguild.php y shopguildadmin.php con aquellos nombres


    shopguild.php
    [Tienes que estar registrado y conectado para ver este vínculo]

    shopguildadmin.php

    [Tienes que estar registrado y conectado para ver este vínculo]


    Y esto añaden en globalevents:


    Código:
    -- Created by Unknown, Fixed by Rac --
    GUILDSHOP_MSG_TYPE =18
    SQL_interval =30
    function onThink(interval, lastExecution)
       local result_plr = db.storeQuery("SELECT * FROM z_ots_guildcomunication")
        if(result_plr ~= false) then
            repeat
                local id = tonumber(result.getDataInt(result_plr, "id"))
                local action = tostring(result.getDataString(result_plr, "action"))
                local delete = tonumber(result.getDataInt(result_plr, "delete_it"))
                local cid = getPlayerByName(tostring(result.getDataString(result_plr, "name")))
                if(cid) then
                    local itemtogive_id = tonumber(result.getDataInt(result_plr, "param1"))
                    local itemtogive_count = tonumber(result.getDataInt(result_plr, "param2"))
                    local container_id = tonumber(result.getDataInt(result_plr, "param3"))
                    local container_count = tonumber(result.getDataInt(result_plr, "param4"))
                    local add_item_type = tostring(result.getDataString(result_plr, "param5"))
                    local add_item_name = tostring(result.getDataString(result_plr, "param6"))
                    local received_item = 0
                    local full_weight = 0
                    if(add_item_type == 'container') then
                        container_weight = getItemWeight(container_id, 1)
                        if(isItemRune(itemtogive_id)) then
                            items_weight = container_count * getItemWeight(itemtogive_id, 1)
                        else
                            items_weight = container_count * getItemWeight(itemtogive_id, itemtogive_count)
                        end
                        full_weight = items_weight + container_weight
                    else
                        full_weight = getItemWeight(itemtogive_id, itemtogive_count)
                        if(isItemRune(itemtogive_id)) then
                            full_weight = getItemWeight(itemtogive_id, 1)
                        else
                            full_weight = getItemWeight(itemtogive_id, itemtogive_count)
                        end
                    end
                    local free_cap = getPlayerFreeCap(cid)
                    if(full_weight <= free_cap) then
                        if(add_item_type == 'container') then
                            local new_container = doCreateItemEx(container_id, 1)
                            local iter = 0
                            while(iter ~= container_count) do
                                doAddContainerItem(new_container, itemtogive_id, itemtogive_count)
                                iter = iter + 1
                            end
                            received_item = doPlayerAddItemEx(cid, new_container)
                        else
                            local new_item = doCreateItemEx(itemtogive_id, itemtogive_count)
                            received_item = doPlayerAddItemEx(cid, new_item)
                        end
                        if(type(received_item) == "number" and received_item == RETURNVALUE_NOERROR) then
                            doPlayerSendTextMessage(cid, GUILDSHOP_MSG_TYPE, 'You received items '.. add_item_name ..'from OTS guildshop.')
                            db.query("DELETE FROM `z_ots_guildcomunication` WHERE `id` = " .. id .. ";")
                            db.query("UPDATE `z_shopguild_history_item` SET `trans_state`='realized', `trans_real`=" .. os.time() .. " WHERE id = " .. id .. ";")
                        else
                            doPlayerSendTextMessage(cid, GUILDSHOP_MSG_TYPE, ' '.. add_item_name ..'  from OTS guildshop is waiting for you. Please make place for this item in your backpack/hands and wait about '.. SQL_interval ..' seconds to get it.')
                        end
                    else
                        doPlayerSendTextMessage(cid, GUILDSHOP_MSG_TYPE, ' '.. add_item_name ..'  from OTS guildshop is waiting for you. It weight is '.. full_weight ..' oz., you have only '.. free_cap ..' oz. free capacity. Put some items in depot and wait about '.. SQL_interval ..' seconds to get it.')
                    end
                end
            until not result.next(result_plr)
            result.free(result_plr)
        end
        return true
    end

    y esto en globalevents.xml


    Código:
    <globalevent name="shopguild" interval="30" script="shopguild.lua"/>


    en talkactions.xml


    Código:
    <talkaction words="!guildpoints" event="script" value="guildpoints.lua"/>


    y en scripts:

    Código:
    GuildPointsConfigs =
    {
            ExecuteIntervalHours = 24,
            NeedPlayersOnline = 10,
            NeedDiferentIps = 6,
            MinLevel = 80,
            AddPointsForAcc = 9
    }

    function getGuildPlayersValidAccIDS(GuildID, MinLevel)
            local RanksIDS = {}
            local AccsID = {}
            local ValidAccsID = {}
            Query1 = db.getResult("SELECT `id` FROM `guild_ranks` WHERE guild_id = '".. GuildID .."'")
            if(Query1:getID() == -1) then
                    return ValidAccsID
            end
            for i = 1, Query1:getRows() do
                    table.insert(RanksIDS, Query1:getDataInt("id"))
                    Query1:next()
            end
            Query2 = db.getResult("SELECT `account_id` FROM `players` WHERE `rank_id` IN (".. table.concat(RanksIDS, ', ') ..") AND `level` >= ".. MinLevel .."")
            if(Query2:getID() == -1) then
                    return ValidAccsID
            end
            for i = 1, Query2:getRows() do
                    local AccID = Query2:getDataInt("account_id")
                    if #AccsID > 0 then
                            for k = 1, #AccsID do
                                    if AccID == AccsID[k] then
                                            AddAccList = false
                                            break
                                    end
                                    AddAccList = true
                            end
                            if AddAccList then
                                    table.insert(AccsID, AccID)
                            end
                    else
                            table.insert(AccsID, AccID)
                    end
                    Query2:next()
            end
            Query3 = db.getResult("SELECT `id` FROM `accounts` WHERE `guild_points_stats` = 0 AND `id` IN (".. table.concat(AccsID, ', ') ..")")
            if(Query3:getID() == -1) then
                    return ValidAccsID
            end
            for i = 1, Query3:getRows() do
                    local AccID = Query3:getDataInt("id")
                    if #ValidAccsID > 0 then
                            for k = 1, #ValidAccsID do
                                    if AccID == ValidAccsID[k] then
                                            AddAccList = false
                                            break
                                    end
                                    AddAccList = true
                            end
                            if AddAccList then
                                    table.insert(ValidAccsID, AccID)
                            end
                    else
                            table.insert(ValidAccsID, AccID)
                    end
                    Query3:next()
            end
            return ValidAccsID
    end

    function onSay(cid, words, param, channel)
            if(getPlayerGuildLevel(cid) == 3) then
                    local GuildID = getPlayerGuildId(cid)
                    Query = db.getResult("SELECT `last_execute_points` FROM `guilds` WHERE id = '".. GuildID .."'")
                    if(Query:getID() == -1) then
                            return true
                    end
                    if Query:getDataInt("last_execute_points") < os.time() then
                            local GuildMembers = {}
                            local GuildMembersOnline = {}
                            local PlayersOnline = getPlayersOnline()
                            for i, pid in ipairs(PlayersOnline) do
                                    if getPlayerGuildId(pid) == GuildID then
                                            if getPlayerLevel(pid) >= GuildPointsConfigs.MinLevel then
                                                    table.insert(GuildMembersOnline, pid)
                                            end
                                    end
                            end
                            if #GuildMembersOnline >= GuildPointsConfigs.NeedPlayersOnline then
                                    local IPS = {}
                                    for i, pid in ipairs(GuildMembersOnline) do
                                            local PlayerIP = getPlayerIp(pid)
                                            if #IPS > 0 then
                                                    for k = 1, #IPS do
                                                            if PlayerIP == IPS[k] then
                                                                    AddIPList = false
                                                                    break
                                                            end
                                                            AddIPList = true
                                                    end
                                                    if AddIPList then
                                                            table.insert(IPS, PlayerIP)
                                                    end
                                            else
                                                    table.insert(IPS, PlayerIP)
                                            end
                                    end
                                    if #IPS >= GuildPointsConfigs.NeedDiferentIps then
                                            local ValidAccounts = getGuildPlayersValidAccIDS(GuildID, GuildPointsConfigs.MinLevel)
                                            db.executeQuery("UPDATE `guilds` SET `last_execute_points` = ".. os.time() +(GuildPointsConfigs.ExecuteIntervalHours * 3600) .." WHERE `guilds`.`id` = ".. GuildID ..";")
                                            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "".. #ValidAccounts .." Players received points")
                                            if #ValidAccounts > 0 then
                                                    db.executeQuery("UPDATE `accounts` SET `guild_points` = `guild_points` + " ..GuildPointsConfigs.AddPointsForAcc .. ", `guild_points_stats` = ".. os.time() .." WHERE `id` IN (" .. table.concat(ValidAccounts, ',') ..");")
                                                    for i, pid in ipairs(GuildMembersOnline) do
                                                            local PlayerMSGAccID = getPlayerAccountId(pid)
                                                            for k = 1, #ValidAccounts do
                                                                    if PlayerMSGAccID == ValidAccounts[k] then
                                                                            doPlayerSendTextMessage(pid, MESSAGE_INFO_DESCR, "You received "..GuildPointsConfigs.AddPointsForAcc .." guild points.")
                                                                            break
                                                                    end
                                                            end
                                                    end
                                            end
                                    else
                                            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Only ".. #IPS .." players are valid, you need ".. GuildPointsConfigs.NeedDiferentIps .." players with different ips.")
                                    end
                            else
                                    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Has only ".. #GuildMembersOnline .." players online you need ".. GuildPointsConfigs.NeedPlayersOnline .." players online at least from level ".. GuildPointsConfigs.MinLevel ..".")
                            end
                    else
                            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "The command can only be run once every "..GuildPointsConfigs.ExecuteIntervalHours .." hours.")
                    end
            else
                    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Only guild leader can request points.")
            end
            return true
    end


    config:

    ExecuteIntervalHours = 24,
    NeedPlayersOnline = 10,
    NeedDiferentIps = 6,
    MinLevel = 80,
    AddPointsForAcc = 9



    Ver perfil de usuario http://www.tibiaface.com

    mingidan

    avatar
    Donador User
    Donador User
    error en consola por favor ayudar no llega el item

    [9:24:17.729] [Error - GlobalEvent Interface]
    [9:24:17.731] data/globalevents/scripts/shopguild.lua:onThink
    [9:24:17.731] Description:
    [9:24:17.731] (luaGetItemWeight) Item not found

    [9:24:17.732] [Error - GlobalEvent Interface]
    [9:24:17.732] data/globalevents/scripts/shopguild.lua:onThink
    [9:24:17.733] Description:
    [9:24:17.733] (luaGetItemWeight) Item not found

    [9:24:17.782] [Error - GlobalEvent Interface]
    [9:24:17.792] data/globalevents/scripts/shopguild.lua:onThink
    [9:24:17.793] Description:
    [9:24:17.794] data/globalevents/scripts/shopguild.lua:38: attempt to compare boolean with number
    [9:24:17.795] stack traceback:
    [9:24:17.800] data/globalevents/scripts/shopguild.lua:38: in function <data/globalevents/scripts/shopguild.lua:4>
    [9:24:17.813] [Error - GlobalEvents::think] Couldn't execute event: shopguild

    Ver perfil de usuario

    [Admin] God Maya

    avatar
    Administrador
    Administrador
    [Tienes que estar registrado y conectado para ver este vínculo] escribió:error en consola por favor ayudar no llega el item

    [9:24:17.729] [Error - GlobalEvent Interface]
    [9:24:17.731] data/globalevents/scripts/shopguild.lua:onThink
    [9:24:17.731] Description:
    [9:24:17.731] (luaGetItemWeight) Item not found

    [9:24:17.732] [Error - GlobalEvent Interface]
    [9:24:17.732] data/globalevents/scripts/shopguild.lua:onThink
    [9:24:17.733] Description:
    [9:24:17.733] (luaGetItemWeight) Item not found

    [9:24:17.782] [Error - GlobalEvent Interface]
    [9:24:17.792] data/globalevents/scripts/shopguild.lua:onThink
    [9:24:17.793] Description:
    [9:24:17.794] data/globalevents/scripts/shopguild.lua:38: attempt to compare boolean with number
    [9:24:17.795] stack traceback:
    [9:24:17.800] data/globalevents/scripts/shopguild.lua:38: in function <data/globalevents/scripts/shopguild.lua:4>
    [9:24:17.813] [Error - GlobalEvents] Couldn't execute event: shopguild


    que version de ot usas primero tendrias que comensar dandonos la version de tu ot



    Ver perfil de usuario http://www.tibiaface.com

    Hokku

    avatar
    Miembro
    Miembro
    que tfs es compatible maya?

    Ver perfil de usuario

    The_Pain

    avatar
    Miembro
    Miembro
    Si su TFS low version les dice este error :
    Código:
    attempt to compare boolean with number
    Entonces debes usar este script con una modificacion para evitar eso.
    Compatibilidad para TFS [ 0.4 ]
    Me refiero al globalevents Lua
    Código:
    -- Created by Unknown, Fixed by Rac --
    GUILDSHOP_MSG_TYPE =18
    SQL_interval =30
    function onThink(interval, lastExecution)
      local result_plr = db.storeQuery("SELECT * FROM z_ots_guildcomunication")
        if(result_plr ~= false) then
            repeat
                local id = tonumber(result.getDataInt(result_plr, "id"))
                local action = tostring(result.getDataString(result_plr, "action"))
                local delete = tonumber(result.getDataInt(result_plr, "delete_it"))
                local cid = getPlayerByName(tostring(result.getDataString(result_plr, "name")))
                if (cid) then
                    local itemtogive_id = tonumber(result.getDataInt(result_plr, "param1"))
                    local itemtogive_count = tonumber(result.getDataInt(result_plr, "param2"))
                    local container_id = tonumber(result.getDataInt(result_plr, "param3"))
                    local container_count = tonumber(result.getDataInt(result_plr, "param4"))
                    local add_item_type = tostring(result.getDataString(result_plr, "param5"))
                    local add_item_name = tostring(result.getDataString(result_plr, "param6"))
                    local received_item = 0
                    local full_weight = 0
                    if(add_item_type == 'container') then
                        container_weight = getItemWeightById(container_id, 1)
                        if(isItemRune(itemtogive_id)) then
                            items_weight = container_count * getItemWeightById(itemtogive_id, 1)
                        else
                            items_weight = container_count * getItemWeightById(itemtogive_id, itemtogive_count)
                        end
                        full_weight = items_weight + container_weight
                    else
                        full_weight = getItemWeightById(itemtogive_id, itemtogive_count)
                        if(isItemRune(itemtogive_id)) then
                            full_weight = getItemWeightById(itemtogive_id, 1)
                        else
                            full_weight = getItemWeightById(itemtogive_id, itemtogive_count)
                        end
                    end
                    local free_cap = getPlayerFreeCap(cid)
                    if full_weight <= free_cap then
                        if(add_item_type == 'container') then
                            local new_container = doCreateItemEx(container_id, 1)
                            local iter = 0
                            while(iter ~= container_count) do
                                doAddContainerItem(new_container, itemtogive_id, itemtogive_count)
                                iter = iter + 1
                            end
                            received_item = doPlayerAddItemEx(cid, new_container)
                        else
                            local new_item = doCreateItemEx(itemtogive_id, itemtogive_count)
                            received_item = doPlayerAddItemEx(cid, new_item)
                        end
                        if(type(received_item) == "number" and received_item == RETURNVALUE_NOERROR) then
                            doPlayerSendTextMessage(cid, GUILDSHOP_MSG_TYPE, 'You received items '.. add_item_name ..'from OTS guildshop.')
                            db.query("DELETE FROM `z_ots_guildcomunication` WHERE `id` = " .. id .. ";")
                            db.query("UPDATE `z_shopguild_history_item` SET `trans_state`='realized', `trans_real`=" .. os.time() .. " WHERE id = " .. id .. ";")
                        else
                            doPlayerSendTextMessage(cid, GUILDSHOP_MSG_TYPE, ' '.. add_item_name ..'  from OTS guildshop is waiting for you. Please make place for this item in your backpack/hands and wait about '.. SQL_interval ..' seconds to get it.')
                        end
                    else
                        doPlayerSendTextMessage(cid, GUILDSHOP_MSG_TYPE, ' '.. add_item_name ..'  from OTS guildshop is waiting for you. It weight is '.. full_weight ..' oz., you have only '.. free_cap ..' oz. free capacity. Put some items in depot and wait about '.. SQL_interval ..' seconds to get it.')
                    end
                end
            until not result.next(result_plr)
            result.free(result_plr)
        end
        return true
    end



    Ver perfil de usuario

    Tibia Matatan

    avatar
    Nuevo Miembro
    Nuevo Miembro
    [Tienes que estar registrado y conectado para ver este vínculo] no me resulto tu solucion pero el error debe ser en las tablas del mysql ya que el shop normal resulta perfecto pero con las tablas z_ots_comunication z_shop_history_item
    no con las del guild seguro que algo les falta a las de guild
    saludos y ojalas poder solucionar este problema

    Ver perfil de usuario

    Contenido patrocinado


    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.