Tibia Dark

¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.
Tibia Dark

TibiaDark Aqui Podras Encontrar Todo Sobre OTXserver.


2 participantes

    War System funcionando

    avatar
    God Relaxer


    Mensajes : 1
    Reputación : 1

    War System funcionando Empty Re: War System funcionando

    Mensaje por God Relaxer Jue Sep 18, 2014 5:59 pm

    Y los comandos para invitar a war cuales son amigo?
    Kroxos
    Kroxos


    Vocacion : Paladin

    Experiencia : LUA

    Mensajes : 7
    Reputación : 3
    Edad : 28
    Localización : Venezuela

    War System funcionando Empty War System funcionando

    Mensaje por Kroxos Sáb Mayo 03, 2014 4:10 pm

    Aqui le traigo el war sistem funcionando a la perfecion:

    primero que nada copian un xml y le llaman guildWarSystem y le agregan el siguiente mod:

    Código:
    <?xml version="1.0" encoding="UTF-8"?>
    <mod name="Guild War System" version="0.3.5+" author="Xampy and Nahruto" contact="otland.net" enabled="yes">
    <config name="function_config"><![CDATA[
    DelayToCancel = 24 -- HOURS <-> [max: 47 -- min: 24] --> default: 24 hours [1 day]

    Maps = {
            ["map1"] =
                    {
                            Guild1Pos = {x=238, y=442, z=12},
                            Guild2Pos = {x=244, y=442, z=12}
                    },
            ["map2"] =
                    {
                            Guild1Pos = {x=994, y=1004, z=6},
                            Guild2Pos = {x=1000, y=1003, z=6}                      
                    }
            }

    TimeToTeleport = 1 --minutes, when start a challenge
    StopBattle = TRUE --Stop battle after X time ? TRUE  /  FALSE
    TimeToStop = 60 --Minutes Time to Stop if StopBattle = TRUE.

    --Cancel messages~
    CancelMessagesWar = {
            --Message when player try accept/reject/cancel a war but there is no a invitation.
            [1] = "Not pending invitations.",
            --Message when the player is not the guild leader.
            [2] = "Only Guild Leader can execute this command.",
            --Message when try Cancel the invitation but the war is already accepted.
            [3] = "The war is already accepted.",
            --MEssage when the invited guild name is not correct or does not exist.
            [4] = "Not correct guild name.",
            --Message when try invite any guild to a war but his guild already have a war or a pending invitation.
            [5] = "Your guild is already in war or have a pending invitation.",
            --Same of the cancel message 5 but the the enemy guild.
            [6] = "This guild is already in war or have a pending invitation.",
            --Message when use invite command but not write guild name.
            [7] = "Command needs param.",
            --Message when try invite his guild.
            [8] = "You can\'t invite you guild.",
            --Message when the map name is not correct.
            [9] = "Please write a correct name.",
            --Message when try go to any map but the guild is have no received/sent any war invitation
            [10] = "Your guild is not in any war.",
            --When try to cancel a war before the delay
            [11] = "You should wait ".. DelayToCancel .." hours to cancel the war"
            }
          
    --Broadcast messages when invite/accept/reject/cancel ~ Remember the Spaces.
    BroadCast_Type = MESSAGE_EVENT_ADVANCE
    BroadCast = {
            --Message when inviting
            [1] =
                    {
                            "Guild ",
                            --Here will be the guild name
                            " have invited guild ",
                            --Here will be the invited guild name
                            " to have a war."
                    },
            --Message when accept.
            [2] =
                    {
                            "Guild ",
                            --Here will be the guild name
                            " have accepted the invitation of the guild " ,
                            --Here will be the name of the guild who have invited em.
                            " to have a war."
                    },
            --Message when reject.
            [3] =
                    {
                            "Guild ",
                            --Here will be the guild name
                            " have rejected the invitation of the guild " ,
                            --Here will be the name of the guild who have invited em.
                            " to have a war."
                    },
            --Message when cancel.
            [4] =
                    {
                            "Guild ",
                            --Here will be the guild name
                            " have canceled the invitation to the guild " ,
                            --Here will be the name of the guild who have invited em.
                            " to have a war."
                    },
            --Message whenstar a battle..
            [5] =
                    {
                            "Guild ",
                            --Here will be the guild name
                            " and guild " ,
                            --Here will be the name of the guild who have invited em.
                            " will have a battle in the map :"
                    },
            --message when a battle ends.
            [6] =
                    {
                            "The battle betwen guild ",
                            --Here will be the guild name
                            " and guild " ,
                            --Here will be the name of the guild who have invited em.
                            " its over."
                    },
            }

    --Functions ~.

    function getShowInfo(id)
            local Info = db.getResult("SELECT `show` FROM `guilds` WHERE `id` = " .. id .. "")
            if Info:getID() ~= -1 then
                    local showy = Info:getDataInt("show")
                    Info:free()
                    return showy
            end
            return -1
    end

    function getKills(name)
            local Info = db.getResult("SELECT `kills` FROM `guilds` WHERE `name` = '"..name.."'")
            if Info:getID() ~= -1 then
                    local killy = Info:getDataInt("kills")
                    Info:free()
                    return killy
            end
            return -1
    end

    function getGuildWarInfo(id)
            local Info = db.getResult("SELECT `invited_to`, `invited_by`, `in_war_with`,`war_time` FROM `guilds` WHERE `id` = " .. id .. "")
            if Info:getID() ~= -1 then
                    local invTo, invBy, warWith, Time = Info:getDataInt("invited_to"), Info:getDataInt("invited_by"), Info:getDataInt("in_war_with"), Info:getDataInt("war_time")
                    Info:free()
                    return {To = invTo, By = invBy, With = warWith, T = Time}
            end
            return -1
    end

    function getGuildNameById(id)
            local Info = db.getResult("SELECT `name` FROM `guilds` WHERE `id` = " .. id .. "")
                    if Info:getID() ~= -1 then
                    local Name = Info:getDataString("name")
                    Info:free()
                    return Name
            end
            return -1
    end

    function GuildIsInPEace(id)
            local Info = getGuildWarInfo(id)
            return (Info.To == 0 and Info.By == 0 and Info.With == 0)
    end

    function doInviteToWar(myGuild, enemyGuild)
            local StartTime = os.time()
            db.executeQuery("UPDATE `guilds` SET `invited_to` = ".. enemyGuild ..", `war_time` = ".. StartTime .." WHERE `id` = ".. myGuild .."")
            db.executeQuery("UPDATE `guilds` SET `invited_by` = ".. myGuild .." WHERE `id` = ".. enemyGuild .."")
    end

    function WarAccept(myGuild, enemyGuild)
            local StartTime = os.time()
            db.executeQuery("UPDATE `guilds` SET `invited_to` = 0, `invited_by` = 0, `in_war_with`  =  ".. myGuild ..", `kills` = 0, `show` = 1 WHERE `id` = ".. enemyGuild .."")
            db.executeQuery("UPDATE `guilds` SET `invited_to` = 0, `invited_by` = 0, `war_time` = ".. StartTime ..", `in_war_with`  =  ".. enemyGuild ..", `kills` = 0, `show` = 0 WHERE `id` = ".. myGuild .."")
    end

    function cleanInfo(myGuild)
            db.executeQuery("UPDATE `guilds` SET `invited_to` = 0, `invited_by` = 0, `war_time` = 0, `in_war_with`  =  0, `kills` = 0, `show` = 0 WHERE `id` = ".. myGuild .."")
    end

    function registerDeathOne(myGuild, enemyGuild, cid, target)
            db.executeQuery("INSERT INTO `deaths_in_wars` (`guild_id`, `player_id`, `killer_guild`, `killer`, `date`, `result1`, `result2`) VALUES ("..enemyGuild..", "..getPlayerGUID(target)..", "..myGuild..", "..getPlayerGUID(cid)..", " .. os.time() ..", 1, 0);")      
            db.executeQuery("UPDATE `guilds` SET `kills` = `kills` + 1 WHERE `id` = ".. myGuild .."")
    end

    function registerDeathTwo(myGuild, enemyGuild, cid, target)
            db.executeQuery("INSERT INTO `deaths_in_wars` (`guild_id`, `player_id`, `killer_guild`, `killer`, `date`, `result1`, `result2`) VALUES ("..enemyGuild..", "..getPlayerGUID(target)..", "..myGuild..", "..getPlayerGUID(cid)..", " .. os.time() ..", 0, 1);")      
            db.executeQuery("UPDATE `guilds` SET `kills` = `kills` + 1 WHERE `id` = ".. myGuild .."")
    end

    function removeDeaths(id)
            db.executeQuery("DELETE FROM `deaths_in_wars` WHERE `guild_id` = " ..id .. ";")
    end

    function StopWar(myGuild, enemyGuild)
            cleanInfo(myGuild)
            cleanInfo(enemyGuild)
            removeDeaths(myGuild)
            removeDeaths(enemyGuild)
    end

    function WeAreInWar(myGuild, enemyGuild)
            local myGuildInfo = getGuildWarInfo(myGuild)
            local enemyGuildInfo = getGuildWarInfo(enemyGuild)
            if myGuild == enemyGuildInfo.With and enemyGuild ==  myGuildInfo.With then
                    if enemyGuildInfo.ON == 1 and myGuildInfo.ON == 1 then
                            return TRUE
                    end            
            end
            return FALSE
    end

    function getOnlineMembers(id)
            local PlayersOnline = getPlayersOnline()
            local MembersOnline = {}
            for i, pid in ipairs(PlayersOnline) do
                    if id == getPlayerGuildId(PlayersOnline[i]) then
                            table.insert(MembersOnline, PlayersOnline[i])
                    end
            end
            return MembersOnline
    end

    function teleportGuild(id, pos)
            local Members = getOnlineMembers(id)
            if #Members > 0 then
            for i = 1, #Members do
                    if #Members > 1 then
                            if getTilePzInfo(getCreaturePosition(Members[i])) == TRUE then
                                    doTeleportThing(Members[i], pos, FALSE)
                                    doSendMagicEffect(pos, CONST_ME_TELEPORT)
                                    doSendMagicEffect(getCreaturePosition(Members[i]), CONST_ME_POFF)
                                    doPlayerSendTextMessage(Members[i], 22, 'Prepare to fight!')
                            else
                                    doPlayerPopupFYI(Members[i], 'GuildWar challenge error:\n\nBoth guild members must stay in Protection Zone.')
                            end
                    else
                            doPlayerPopupFYI(Members[i], 'GuildWar challenge error:\n\nBoth guilds must have more than one player online (leader & any member, at least).')
                    end
            end
            end
    end

    function getGuildsWithWar()
            local res = db.getResult("SELECT `id` FROM `guilds` WHERE `in_war_with` > 0")
            local GuildW = {}
            if res:getID() ~= -1 then
                    while true do
                            table.insert(GuildW, res:getDataInt "id")
                            if not res:next() then
                                    break
                            end
                    end
                    res:free()
            end
            return GuildW
    end

    function guildExist(nom)
            local Get = db.getResult("SELECT `id` FROM `guilds` WHERE `name` = " .. db.escapeString(nom) .. ";")
            if Get:getID() ~= -1 then
                    local ret = Get:getDataInt("id")
                    Get:free()
                    return ret
            end
            return -1
    end

    function StartWar(x)
            teleportGuild(x.myGuild, Maps[x.map].Guild1Pos)
            teleportGuild(x.enemyGuild, Maps[x.map].Guild2Pos)

            if StopBattle == TRUE then
                    addEvent(StopWarNow, 60 * 1000, {myGuild = x.myGuild, enemyGuild = x.enemyGuild})
            end
    end    

    function StopWarNow(c)
            StopWar(c.myGuild, c.enemyGuild)
            doBroadcastMessage(BroadCast[6][1] ..getGuildNameById(c.myGuild).. BroadCast[6][2] ..getGuildNameById(c.enemyGuild).. BroadCast[6][3], BroadCast_Type)
    end

    function putWarOn(myGuild, enemyGuild)
            db.executeQuery("UPDATE `guilds` SET `war_time`  = 1 WHERE `id` = ".. myGuild .."")
            db.executeQuery("UPDATE `guilds` SET `war_time`  = 1 WHERE `id` = ".. enemyGuild .."")
    end]]></config>


    <talkaction words="!disband; /war-invite; /war-accept; /war-reject; /war-cancel-invite; /war-cancel" event="script"><![CDATA[
    domodlib('function_config')
    function onSay(cid, words, param, channel)
            if getPlayerGuildLevel(cid) == GUILDLEVEL_LEADER then
                    local myGuild = getPlayerGuildId(cid)
                    if words == "/war-invite" then
                            if GuildIsInPEace(myGuild) == true then
                                    if param ~= "" then
                                            if guildExist(param) ~= -1 then
                                                    local invitedGuild = getGuildId(param)
                                                    if invitedGuild ~= -1 then
                                                            if invitedGuild ~= myGuild then
                                                                    if GuildIsInPEace(invitedGuild) == true then
                                        if getPlayerStorageValue(cid, 65570) <= os.time() then
                                                                                doInviteToWar(myGuild, invitedGuild)
                                                                                doBroadcastMessage(BroadCast[1][1] ..getPlayerGuildName(cid).. BroadCast[1][2] ..getGuildNameById(invitedGuild).. BroadCast[1][3], BroadCast_Type)
                                            setPlayerStorageValue(cid, 65570, os.time()+(20*60))
                                        else
                                            local waitTime = (getPlayerStorageValue(cid, 65570) - os.time())
                                            doPlayerSendCancel(cid, "You must wait " .. os.date("%M", waitTime) .. " minutes and " .. os.date("%S", waitTime) .. " seconds until declare another war.")
                                        end
                                                                    else
                                                                            doPlayerSendCancel(cid, CancelMessagesWar[6])
                                                                    end
                                                            else
                                                                    doPlayerSendCancel(cid, CancelMessagesWar[8])
                                                            end
                                                    else
                                                            doPlayerSendCancel(cid, CancelMessagesWar[4])
                                                    end
                                            else
                                                    doPlayerSendCancel(cid, CancelMessagesWar[4])
                                            end
                                    else
                                            doPlayerSendCancel(cid, CancelMessagesWar[7])
                                    end
                            else
                                    doPlayerSendCancel(cid, CancelMessagesWar[5])
                            end
                    elseif words == "/war-accept" then
                            if getGuildWarInfo(myGuild).By ~= 0 then
                                    local enemyGuild = getGuildWarInfo(myGuild).By
                                    doBroadcastMessage(BroadCast[2][1] ..getPlayerGuildName(cid).. BroadCast[2][2] ..getGuildNameById(enemyGuild).. BroadCast[2][3], BroadCast_Type)
                                    WarAccept(myGuild, enemyGuild)
                            else
                                    doPlayerSendCancel(cid, CancelMessagesWar[1])
                            end
                    elseif words == "/war-reject" then
                            if getGuildWarInfo(myGuild).By ~= 0 then
                                    doBroadcastMessage(BroadCast[3][1] ..getPlayerGuildName(cid).. BroadCast[3][2] ..getGuildNameById(getGuildWarInfo(myGuild).By).. BroadCast[3][3], BroadCast_Type)
                                    cleanInfo(getGuildWarInfo(myGuild).By)
                                    cleanInfo(myGuild)
                            else
                                    doPlayerSendCancel(cid, CancelMessagesWar[1])  
                            end
                    elseif words == "/war-cancel-invite" then
                            if getGuildWarInfo(myGuild).To ~= 0 then
                                    if getGuildWarInfo(myGuild).With == 0 then
                                            doBroadcastMessage(BroadCast[4][1] ..getPlayerGuildName(cid).. BroadCast[4][2] ..getGuildNameById(getGuildWarInfo(myGuild).To).. BroadCast[4][3], BroadCast_Type)
                                            cleanInfo(getGuildWarInfo(myGuild).To)
                                            cleanInfo(myGuild)
                                    else
                                            doPlayerSendCancel(cid, CancelMessagesWar[3])
                                    end
                            else
                                    doPlayerSendCancel(cid, CancelMessagesWar[1])  
                            end
                    elseif words == "/war-challenge" then
                            local map = Maps[param]
                            if map then
                                    if enemy ~= 0 then
                                            local enemyGuild = getGuildWarInfo(myGuild).With
                                            addEvent(StartWar, 15000, {myGuild = myGuild, enemyGuild = enemyGuild, map = param})
                                            doBroadcastMessage(BroadCast[5][1] ..getPlayerGuildName(cid).. BroadCast[5][2] ..getGuildNameById(enemyGuild).. BroadCast[5][3] .. param ..".", BroadCast_Type)
                                    else
                                            doPlayerSendCancel(cid, CancelMessagesWar[10])
                                    end
                            else
                                    doPlayerSendCancel(cid, CancelMessagesWar[9])
                            end
                    elseif words == "/war-cancel" then
                            local enemy = getGuildWarInfo(myGuild).With
                            if enemy ~= 0 then
                                    if (os.time() - getGuildWarInfo(myGuild).T) >= (60 * 60 * DelayToCancel) then
                                            StopWar(myGuild, enemy)
                                            doBroadcastMessage(BroadCast[6][1] ..getGuildNameById(myGuild).. BroadCast[6][2] ..getGuildNameById(enemy).. BroadCast[6][3], BroadCast_Type)
                                    else
                        local timeEnd = getGuildWarInfo(myGuild).T + (60 * 60 * DelayToCancel)
                        local timeLeft = timeEnd - os.time()
                        local hours = (os.date("%H", timeLeft) + 23)
                                            doPlayerSendCancel(cid, "Time remaining: "..hours.." hours, " .. os.date("%M", timeLeft) .. " minutes and " .. os.date("%S", timeLeft) .. " seconds.")
                                    end
                            else
                                    doPlayerSendCancel(cid, CancelMessagesWar[10])
                            end
                    elseif words == "!disband" then
                            local enemy = getGuildWarInfo(myGuild).With
                            if enemy > 0 then
                    if channel == CHANNEL_GUILD then
                        if (os.time() - getGuildWarInfo(myGuild).T) >= (60 * 60 * DelayToCancel) then
                                                StopWar(myGuild, enemy)
                                                doBroadcastMessage(BroadCast[6][1] ..getGuildNameById(myGuild).. BroadCast[6][2] ..getGuildNameById(enemy).. BroadCast[6][3], BroadCast_Type)
                                        else
                        local timeEnd = getGuildWarInfo(myGuild).T + (60 * 60 * DelayToCancel)
                        local timeLeft = timeEnd - os.time()
                        local hours = (os.date("%H", timeLeft) + 23)
                                            doPlayerSendCancel(cid, "Time remaining: "..hours.." hours, " .. os.date("%M", timeLeft) .. " minutes and " .. os.date("%S", timeLeft) .. " seconds.")
                                        end
                                else
                        doPlayerSendCancel(cid, "You have to say this command in your guild channel.")
                                end
                else
                                    return FALSE
                end
                                    return FALSE
                    end
            else
                    doPlayerSendCancel(cid, CancelMessagesWar[2])
            end
            local file = io.open("data/logs/Wars.txt", "a")
            file:write("".. os.date("%d %B %Y %X ", os.time()) .." -->  "..getCreatureName(cid)..": "..words.." "..param.."\n")
            file:close()
            return TRUE
    end]]></talkaction>

    <event type="login" name="WarLogin" event="script"><![CDATA[
    domodlib('function_config')
    function onLogin(cid)
            registerCreatureEvent(cid, "WarKill")
            return true
    end]]></event>

    <event type="kill" name="WarKill" event="script"><![CDATA[
    domodlib('function_config')
                  
    local PZ = createConditionObject(CONDITION_INFIGHT)
    setConditionParam(PZ, CONDITION_PARAM_TICKS, getConfigInfo('whiteSkullTime'))

    function onKill(cid, target, lastHit)

            if isPlayer(cid) == TRUE and isPlayer(target) == TRUE then

    local config = {
                    removeFrags = true -- If 'true' player won't gain frags from a player that is versus him; else, player will gain frags as normal.
                    }

            local GUID = getPlayerGUID(cid)
            local namec = getPlayerName(cid)
            local namet = getPlayerName(target)
            local skull = getCreatureSkullType(cid)
            local skullend = getPlayerSkullEnd(cid)
        local playerPos = getPlayerPosition(cid)
        local targetPos = getPlayerPosition(target)
            local cidd = cid

            local timeA = os.time()
            local timesA = {today = (timeA - 86400), week = (timeA - (7 * 86400))}

            local contentsA, resultA = {day = {}, week = {}, month = {}}, db.getResult("SELECT `pd`.`date`, `pd`.`level`, `p`.`name` FROM `player_killers` pk LEFT JOIN `killers` k ON `pk`.`kill_id` = `k`.`id` LEFT JOIN `player_deaths` pd ON `k`.`death_id` = `pd`.`id` LEFT JOIN `players` p ON `pd`.`player_id` = `p`.`id` WHERE `pk`.`player_id` = " .. getPlayerGUID(cid) .. " AND `k`.`unjustified` = 1 AND `pd`.`date` >= " .. (timeA - (30 * 86400)) .. " ORDER BY `pd`.`date` DESC")
            if(resultA:getID() ~= -1) then
                    repeat
                            local contentA = {
                                    name = resultA:getDataString("name"),
                                    level = resultA:getDataInt("level"),
                                    date = resultA:getDataInt("date")
                            }
                            if(contentA.date > timesA.today) then
                                    table.insert(contentsA.day, contentA)
                            elseif(contentA.date > timesA.week) then
                                    table.insert(contentsA.week, contentA)
                            else
                                    table.insert(contentsA.month, contentA)
                            end
                    until not resultA:next()
                    resultA:free()
            end

            local sizeA = {
                    day = table.maxn(contentsA.day),
                    week = table.maxn(contentsA.week),
                    month = table.maxn(contentsA.month)
            }
    local function removeFrag(cid)

            local timeB = os.time()
            local timesB = {today = (timeB - 86400), week = (timeB - (7 * 86400))}

            local contentsB, resultB = {day = {}, week = {}, month = {}}, db.getResult("SELECT `pd`.`date`, `pd`.`level`, `p`.`name` FROM `player_killers` pk LEFT JOIN `killers` k ON `pk`.`kill_id` = `k`.`id` LEFT JOIN `player_deaths` pd ON `k`.`death_id` = `pd`.`id` LEFT JOIN `players` p ON `pd`.`player_id` = `p`.`id` WHERE `pk`.`player_id` = " .. GUID .. " AND `k`.`unjustified` = 1 AND `pd`.`date` >= " .. (timeB - (30 * 86400)) .. " ORDER BY `pd`.`date` DESC")
            if(resultB:getID() ~= -1) then
                    repeat
                            local contentB = {
                                    name = resultB:getDataString("name"),
                                    level = resultB:getDataInt("level"),
                                    date = resultB:getDataInt("date")
                            }
                            if(contentB.date > timesB.today) then
                                    table.insert(contentsB.day, contentB)
                            elseif(contentB.date > timesB.week) then
                                    table.insert(contentsB.week, contentB)
                            else
                                    table.insert(contentsB.month, contentB)
                            end
                    until not resultB:next()
                    resultB:free()
            end

            local sizeB = {
                    day = table.maxn(contentsB.day),
                    week = table.maxn(contentsB.week),
                    month = table.maxn(contentsB.month)
            }


    if sizeB.day > sizeA.day or sizeB.week > sizeA.week or sizeB.month > sizeA.month then
            db.executeQuery("UPDATE `killers` SET `unjustified` = 0 WHERE `id` IN (SELECT `kill_id` FROM `player_killers` WHERE `player_id` = "..GUID..") ORDER BY `death_id` DESC LIMIT 1;")
            doPlayerSendTextMessage(cidd, 21, "Frag from "..namet.." wasn't counted.")
    end

    if skull == SKULL_RED then
            if getCreatureSkullType(cidd) == SKULL_BLACK then
                    doPlayerSetSkullEnd(cidd, skullend, SKULL_RED)
                    doCreatureSetSkullType(cidd, SKULL_RED)
            end
    elseif skull == SKULL_WHITE then
            if getCreatureSkullType(cidd) == SKULL_RED then
                    doPlayerSetSkullEnd(cidd, timeB, SKULL_RED)
                    doCreatureSetSkullType(cidd, SKULL_WHITE)
            end
    end

    end

                    local myGuild = getPlayerGuildId(cid)
                    local enemyGuild = getPlayerGuildId(target)

                    if myGuild ~= 0 and enemyGuild ~= 0 then
                            if enemyGuild == getGuildWarInfo(myGuild).With then
    local guildc = getPlayerGuildName(cid)
    local guildt = getPlayerGuildName(target)
                                    doAddCondition(cid, PZ)

                                    if lastHit == TRUE then
                        if getTileZoneInfo(playerPos) == 0 and getTileZoneInfo(targetPos) == 0 then
                                                if getShowInfo(myGuild) == 1 then
                                                        registerDeathOne(myGuild, enemyGuild, cid, target)
                                                else
                                                        registerDeathTwo(myGuild, enemyGuild, cid, target)
                                                end    
                        else
                            doPlayerSendTextMessage(cid, 19, "Remember: in PvP zone the system doesn't register the frag.")
                        end
                                    end

                                    if config.removeFrags == true then
                                            addEvent(removeFrag, 150)
                                    end

    local gsim = getShowInfo(myGuild)
    local gsie = getShowInfo(enemyGuild)

    if gsim > gsie then
        resulta = getKills(guildc)
        resultb = getKills(guildt)
    else
        resulta = getKills(guildt)
        resultb = getKills(guildc)
    end

    local players = getOnlinePlayers()
        for i,playerName in ipairs(players) do
            local player = getPlayerByName(playerName);
            if getPlayerGuildId(player) == myGuild then
        if getTileZoneInfo(playerPos) == 0 and getTileZoneInfo(targetPos) == 0 then
                doPlayerSendChannelMessage(player, "", "Opponent "..namet.." of the "..guildt.." was killed by "..namec..". The new score is "..resulta..":"..resultb.." frags.", TALKTYPE_CHANNEL_W, CHANNEL_GUILD)
        end
            end
        end
                            end
                    end
            end
            return TRUE
    end]]></event>
    </mod>

    luego se van a talkation/scripts y agregan un lua llamado war y agregan lo siguiente:

    Código:
    function onSay(cid, words, param, channel)
     local guild = getPlayerGuildId(cid)
     if(not guild or getPlayerGuildLevel(cid) < GUILDLEVEL_LEADER) then
     doPlayerSendChannelMessage(cid, "", "You cannot execute this talkaction.", TALKTYPE_CHANNEL_W, 0)
     return true
     end

     local t = string.explode(param, ",")
     if(not t[2]) then
     doPlayerSendChannelMessage(cid, "", "Not enough param(s).", TALKTYPE_CHANNEL_W, 0)
     return true
     end

     local enemy = getGuildId(t[2])
     if(not enemy) then
     doPlayerSendChannelMessage(cid, "", "Guild \"" .. t[2] .. "\" does not exists.", TALKTYPE_CHANNEL_W, 0)
     return true
     end

     if(enemy == guild) then
     doPlayerSendChannelMessage(cid, "", "You cannot perform war action on your own guild.", TALKTYPE_CHANNEL_W, 0)
     return true
     end

     local enemyName, tmp = "", db.getResult("SELECT `name` FROM `guilds` WHERE `id` = " .. enemy)
     if(tmp:getID() ~= -1) then
     enemyName = tmp:getDataString("name")
     tmp:free()
     end

     if(isInArray({"accept", "reject", "cancel"}, t[1])) then
     local query = "`guild_id` = " .. enemy .. " AND `enemy_id` = " .. guild
     if(t[1] == "cancel") then
     query = "`guild_id` = " .. guild .. " AND `enemy_id` = " .. enemy
     end

     tmp = db.getResult("SELECT `id`, `begin`, `end`, `payment` FROM `guild_wars` WHERE " .. query .. " AND `status` = 0")
     if(tmp:getID() == -1) then
     doPlayerSendChannelMessage(cid, "", "Currently there's no pending invitation for a war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0)
     return true
     end

     if(t[1] == "accept") then
     local _tmp = db.getResult("SELECT `balance` FROM `guilds` WHERE `id` = " .. guild)
     local state = _tmp:getID() < 0 or _tmp:getDataInt("balance") < tmp:getDataInt("payment")

     _tmp:free()
     if(state) then
     doPlayerSendChannelMessage(cid, "", "Your guild balance is too low to accept this invitation.", TALKTYPE_CHANNEL_W, 0)
     return true
     end

     db.executeQuery("UPDATE `guilds` SET `balance` = `balance` - " .. tmp:getDataInt("payment") .. " WHERE `id` = " .. guild)
     end

     query = "UPDATE `guild_wars` SET "
     local msg = "accepted " .. enemyName .. " invitation to war."
     if(t[1] == "reject") then
     query = query .. "`end` = " .. os.time() .. ", `status` = 2"
     msg = "rejected " .. enemyName .. " invitation to war."
     elseif(t[1] == "cancel") then
     query = query .. "`end` = " .. os.time() .. ", `status` = 3"
     msg = "canceled invitation to a war with " .. enemyName .. "."
     else
     query = query .. "`begin` = " .. os.time() .. ", `end` = " .. (tmp:getDataInt("end") > 0 and (os.time() + ((tmp:getDataInt("begin") - tmp:getDataInt("end")) / 86400)) or 0) .. ", `status` = 1"
     end

     query = query .. " WHERE `id` = " .. tmp:getDataInt("id")
     if(t[1] == "accept") then
     doGuildAddEnemy(guild, enemy, tmp:getDataInt("id"), WAR_GUILD)
     doGuildAddEnemy(enemy, guild, tmp:getDataInt("id"), WAR_ENEMY)
     end

     tmp:free()
     db.executeQuery(query)
     doBroadcastMessage(getPlayerGuildName(cid) .. " has " .. msg, MESSAGE_EVENT_ADVANCE)
     return true
     end

     if(t[1] == "invite") then
     local str = ""
     tmp = db.getResult("SELECT `guild_id`, `status` FROM `guild_wars` WHERE `guild_id` IN (" .. guild .. "," .. enemy .. ") AND `enemy_id` IN (" .. enemy .. "," .. guild .. ") AND `status` IN (0, 1)")
     if(tmp:getID() ~= -1) then
     if(tmp:getDataInt("status") == 0) then
     if(tmp:getDataInt("guild_id") == guild) then
     str = "You have already invited " .. enemyName .. " to war."
     else
     str = enemyName .. " have already invited you to war."
     end
     else
     str = "You are already on a war with " .. enemyName .. "."
     end

     tmp:free()
     end

     if(str ~= "") then
     doPlayerSendChannelMessage(cid, "", str, TALKTYPE_CHANNEL_W, 0)
     return true
     end

     local frags = tonumber(t[3])
     if(frags ~= nil) then
     frags = math.max(10, math.min(1000, frags))
     else
     frags = 100
     end

     local payment = tonumber(t[4])
     if(payment ~= nil) then
     payment = math.max(100000, math.min(1000000000, payment))
     tmp = db.getResult("SELECT `balance` FROM `guilds` WHERE `id` = " .. guild)

     local state = tmp:getID() < 0 or tmp:getDataInt("balance") < payment
     tmp:free()
     if(state) then
     doPlayerSendChannelMessage(cid, "", "Your guild balance is too low for such payment.", TALKTYPE_CHANNEL_W, 0)
     return true
     end

     db.executeQuery("UPDATE `guilds` SET `balance` = `balance` - " .. payment .. " WHERE `id` = " .. guild)
     else
     payment = 0
     end

     local begining, ending = os.time(), tonumber(t[5])
     if(ending ~= nil and ending ~= 0) then
     ending = begining + (ending * 86400)
     else
     ending = 0
     end

     db.executeQuery("INSERT INTO `guild_wars` (`guild_id`, `enemy_id`, `begin`, `end`, `frags`, `payment`) VALUES (" .. guild .. ", " .. enemy .. ", " .. begining .. ", " .. ending .. ", " .. frags .. ", " .. payment .. ");")
     doBroadcastMessage(getPlayerGuildName(cid) .. " has invited " .. enemyName .. " to war till " .. frags .. " frags.", MESSAGE_EVENT_ADVANCE)
     return true
     end

     if(not isInArray({"end", "finish"}, t[1])) then
     return false
     end

     local status = (t[1] == "end" and 1 or 4)
     tmp = db.getResult("SELECT `id` FROM `guild_wars` WHERE `guild_id` = " .. guild .. " AND `enemy_id` = " .. enemy .. " AND `status` = " .. status)
     if(tmp:getID() ~= -1) then
     local query = "UPDATE `guild_wars` SET `end` = " .. os.time() .. ", `status` = 5 WHERE `id` = " .. tmp:getDataInt("id")
     tmp:free()
     doGuildRemoveEnemy(guild, enemy)
     doGuildRemoveEnemy(enemy, guild)

     db.executeQuery(query)
     doBroadcastMessage(getPlayerGuildName(cid) .. " has " .. (status == 4 and "mend fences" or "ended up a war") .. " with " .. enemyName .. ".", MESSAGE_EVENT_ADVANCE)
     return true
     end

     if(status == 4) then
     doPlayerSendChannelMessage(cid, "", "Currently there's no pending war truce from " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0)
     return true
     end

     tmp = db.getResult("SELECT `id`, `end` FROM `guild_wars` WHERE `guild_id` = " .. enemy .. " AND `enemy_id` = " .. guild .. " AND `status` = 1")
     if(tmp:getID() ~= -1) then
     if(tmp:getDataInt("end") > 0) then
     tmp:free()
     doPlayerSendChannelMessage(cid, "", "You cannot request ending for war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0)
     return true
     end

     local query = "UPDATE `guild_wars` SET `status` = 4, `end` = " .. os.time() .. " WHERE `id` = " .. tmp:getDataInt("id")
     tmp:free()

     db.executeQuery(query)
     doBroadcastMessage(getPlayerGuildName(cid) .. " has signed an armstice declaration on a war with " .. enemyName .. ".", MESSAGE_EVENT_ADVANCE)
     return true
     end

     doPlayerSendChannelMessage(cid, "", "Currently there's no active war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0)
     return true
    end
    function onSay(cid, words, param, channel)
     local guild = getPlayerGuildId(cid)
     if(not guild or getPlayerGuildLevel(cid) < GUILDLEVEL_LEADER) then
     doPlayerSendChannelMessage(cid, "", "You cannot execute this talkaction.", TALKTYPE_CHANNEL_W, 0)
     return true
     end

     local t = string.explode(param, ",")
     if(not t[2]) then
     doPlayerSendChannelMessage(cid, "", "Not enough param(s).", TALKTYPE_CHANNEL_W, 0)
     return true
     end

     local enemy = getGuildId(t[2])
     if(not enemy) then
     doPlayerSendChannelMessage(cid, "", "Guild \"" .. t[2] .. "\" does not exists.", TALKTYPE_CHANNEL_W, 0)
     return true
     end

     if(enemy == guild) then
     doPlayerSendChannelMessage(cid, "", "You cannot perform war action on your own guild.", TALKTYPE_CHANNEL_W, 0)
     return true
     end

     local enemyName, tmp = "", db.getResult("SELECT `name` FROM `guilds` WHERE `id` = " .. enemy)
     if(tmp:getID() ~= -1) then
     enemyName = tmp:getDataString("name")
     tmp:free()
     end

     if(isInArray({"accept", "reject", "cancel"}, t[1])) then
     local query = "`guild_id` = " .. enemy .. " AND `enemy_id` = " .. guild
     if(t[1] == "cancel") then
     query = "`guild_id` = " .. guild .. " AND `enemy_id` = " .. enemy
     end

     tmp = db.getResult("SELECT `id`, `begin`, `end`, `payment` FROM `guild_wars` WHERE " .. query .. " AND `status` = 0")
     if(tmp:getID() == -1) then
     doPlayerSendChannelMessage(cid, "", "Currently there's no pending invitation for a war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0)
     return true
     end

     if(t[1] == "accept") then
     local _tmp = db.getResult("SELECT `balance` FROM `guilds` WHERE `id` = " .. guild)
     local state = _tmp:getID() < 0 or _tmp:getDataInt("balance") < tmp:getDataInt("payment")

     _tmp:free()
     if(state) then
     doPlayerSendChannelMessage(cid, "", "Your guild balance is too low to accept this invitation.", TALKTYPE_CHANNEL_W, 0)
     return true
     end

     db.executeQuery("UPDATE `guilds` SET `balance` = `balance` - " .. tmp:getDataInt("payment") .. " WHERE `id` = " .. guild)
     end

     query = "UPDATE `guild_wars` SET "
     local msg = "accepted " .. enemyName .. " invitation to war."
     if(t[1] == "reject") then
     query = query .. "`end` = " .. os.time() .. ", `status` = 2"
     msg = "rejected " .. enemyName .. " invitation to war."
     elseif(t[1] == "cancel") then
     query = query .. "`end` = " .. os.time() .. ", `status` = 3"
     msg = "canceled invitation to a war with " .. enemyName .. "."
     else
     query = query .. "`begin` = " .. os.time() .. ", `end` = " .. (tmp:getDataInt("end") > 0 and (os.time() + ((tmp:getDataInt("begin") - tmp:getDataInt("end")) / 86400)) or 0) .. ", `status` = 1"
     end

     query = query .. " WHERE `id` = " .. tmp:getDataInt("id")
     if(t[1] == "accept") then
     doGuildAddEnemy(guild, enemy, tmp:getDataInt("id"), WAR_GUILD)
     doGuildAddEnemy(enemy, guild, tmp:getDataInt("id"), WAR_ENEMY)
     end

     tmp:free()
     db.executeQuery(query)
     doBroadcastMessage(getPlayerGuildName(cid) .. " has " .. msg, MESSAGE_EVENT_ADVANCE)
     return true
     end

     if(t[1] == "invite") then
     local str = ""
     tmp = db.getResult("SELECT `guild_id`, `status` FROM `guild_wars` WHERE `guild_id` IN (" .. guild .. "," .. enemy .. ") AND `enemy_id` IN (" .. enemy .. "," .. guild .. ") AND `status` IN (0, 1)")
     if(tmp:getID() ~= -1) then
     if(tmp:getDataInt("status") == 0) then
     if(tmp:getDataInt("guild_id") == guild) then
     str = "You have already invited " .. enemyName .. " to war."
     else
     str = enemyName .. " have already invited you to war."
     end
     else
     str = "You are already on a war with " .. enemyName .. "."
     end

     tmp:free()
     end

     if(str ~= "") then
     doPlayerSendChannelMessage(cid, "", str, TALKTYPE_CHANNEL_W, 0)
     return true
     end

     local frags = tonumber(t[3])
     if(frags ~= nil) then
     frags = math.max(10, math.min(1000, frags))
     else
     frags = 100
     end

     local payment = tonumber(t[4])
     if(payment ~= nil) then
     payment = math.max(100000, math.min(1000000000, payment))
     tmp = db.getResult("SELECT `balance` FROM `guilds` WHERE `id` = " .. guild)

     local state = tmp:getID() < 0 or tmp:getDataInt("balance") < payment
     tmp:free()
     if(state) then
     doPlayerSendChannelMessage(cid, "", "Your guild balance is too low for such payment.", TALKTYPE_CHANNEL_W, 0)
     return true
     end

     db.executeQuery("UPDATE `guilds` SET `balance` = `balance` - " .. payment .. " WHERE `id` = " .. guild)
     else
     payment = 0
     end

     local begining, ending = os.time(), tonumber(t[5])
     if(ending ~= nil and ending ~= 0) then
     ending = begining + (ending * 86400)
     else
     ending = 0
     end

     db.executeQuery("INSERT INTO `guild_wars` (`guild_id`, `enemy_id`, `begin`, `end`, `frags`, `payment`) VALUES (" .. guild .. ", " .. enemy .. ", " .. begining .. ", " .. ending .. ", " .. frags .. ", " .. payment .. ");")
     doBroadcastMessage(getPlayerGuildName(cid) .. " has invited " .. enemyName .. " to war till " .. frags .. " frags.", MESSAGE_EVENT_ADVANCE)
     return true
     end

     if(not isInArray({"end", "finish"}, t[1])) then
     return false
     end

     local status = (t[1] == "end" and 1 or 4)
     tmp = db.getResult("SELECT `id` FROM `guild_wars` WHERE `guild_id` = " .. guild .. " AND `enemy_id` = " .. enemy .. " AND `status` = " .. status)
     if(tmp:getID() ~= -1) then
     local query = "UPDATE `guild_wars` SET `end` = " .. os.time() .. ", `status` = 5 WHERE `id` = " .. tmp:getDataInt("id")
     tmp:free()
     doGuildRemoveEnemy(guild, enemy)
     doGuildRemoveEnemy(enemy, guild)

     db.executeQuery(query)
     doBroadcastMessage(getPlayerGuildName(cid) .. " has " .. (status == 4 and "mend fences" or "ended up a war") .. " with " .. enemyName .. ".", MESSAGE_EVENT_ADVANCE)
     return true
     end

     if(status == 4) then
     doPlayerSendChannelMessage(cid, "", "Currently there's no pending war truce from " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0)
     return true
     end

     tmp = db.getResult("SELECT `id`, `end` FROM `guild_wars` WHERE `guild_id` = " .. enemy .. " AND `enemy_id` = " .. guild .. " AND `status` = 1")
     if(tmp:getID() ~= -1) then
     if(tmp:getDataInt("end") > 0) then
     tmp:free()
     doPlayerSendChannelMessage(cid, "", "You cannot request ending for war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0)
     return true
     end

     local query = "UPDATE `guild_wars` SET `status` = 4, `end` = " .. os.time() .. " WHERE `id` = " .. tmp:getDataInt("id")
     tmp:free()

     db.executeQuery(query)
     doBroadcastMessage(getPlayerGuildName(cid) .. " has signed an armstice declaration on a war with " .. enemyName .. ".", MESSAGE_EVENT_ADVANCE)
     return true
     end

     doPlayerSendChannelMessage(cid, "", "Currently there's no active war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0)
     return true
    end

    y en talkactions.xml agregan esto:

    Código:
    <talkaction words="/war" channel="0" event="script" value="war.lua"/>

    en globalevents/scripts agregan un lua llamado init.lua y agregan lo siguiente:

    Código:
    local config = {
     creationTime = 7 * 86400,
     checkTime = 7 * 86400,
     viceCount = 4,
     memberCount = 10
    }

    function onStartup()
     local data, time, result = {}, os.time(), db.getResult("SELECT `id`, `ownerid`, `creationdata`, `checkdata` FROM `guilds` WHERE `world_id` = " .. getConfigValue('worldId') .. ";")
     if(result:getID() ~= -1) then
     repeat
     data[result:getDataInt("id")] = {result:getDataInt("ownerid"), result:getDataInt("creationdata"), result:getDataInt("checkdata")}
     until not(result:next())
     result:free()
     end

     for id, v in ipairs(data) do
     local owner, created, check = v[1], v[2], v[3]
     if(created < (time - config.creationTime)) then
     result = db.getResult("SELECT `id`, `level` FROM `guild_ranks` WHERE `guild_id` = " .. id .. ";")
     if(result:getID() ~= -1) then
     local rank, ranks = 0, {}
     repeat
     ranks[result:getDataInt("id")] = result:getDataInt("level")
     if(result:getDataInt("level") == 1) then
     rank = result:getDataInt("id")
     end
     until not(result:next())
     result:free()

     local members = {0, 0, 0, 0}
     for k, v in ipairs(ranks) do
     result = db.getResult("SELECT COUNT(`id`) AS `count` FROM `players` WHERE `rank_id` = " .. k .. ";")
     if(result:getID() ~= -1) then
     members[v] = members[v] + result:getDataInt("count")
     result:free()
     end

     if(v == 2) then
     result = db.getResult("SELECT `p`.`id` FROM `players` p LEFT JOIN `accounts` a ON `p`.`account_id` = `a`.`id` WHERE `p`.`rank_id` = " .. k .. " AND (`a`.`premdays` = 0 OR (`a`.`lastday` + (`a`.`premdays` * 86400) <= 0));")
     if(result:getID() ~= -1) then
     local demote = ""
     repeat
     demote = demote .. result:getDataInt("id") .. ","
     members[2] = members[2] - 1
     members[1] = members[1] + 1
     until not(result:next())
     result:free()

     if(demote ~= "" and rank ~= 0) then
     db.executeQuery("UPDATE `players` SET `rank_id` = " .. rank .. " WHERE `id` IN (" .. demote:sub(1, -2) .. ");")
     end
     end
     end
     end

     for i = 1, 3 do
     members[4] = members[4] + members[i]
     end

     if(members[2] < config.viceCount or members[4] < config.memberCount) then
     if(check == 0) then
     db.executeQuery("UPDATE `guilds` SET `checkdata` = " .. (time + config.checkTime) .. " WHERE `id` = " .. id .. ";")
     elseif(check < time) then
     local tmp = ""
     for rank, _ in ipairs(ranks) do
     tmp = tmp .. rank .. ","
     end

     db.executeQuery("UPDATE `players` SET `rank_id` = 0, `guildnick` = '', `guildjoin` = 0 WHERE `rank_id` IN (" .. tmp:sub(1, -2) .. ");")
     db.executeQuery("DELETE FROM `guilds` WHERE `id` = " .. id .. ";")
     end
     end
     end
     end
     end

     db.executeQuery("UPDATE `players` SET `online` = 0 WHERE `world_id` = " .. getConfigValue('worldId') .. " AND `online` > 0;")
     db.executeQuery("DELETE FROM `guild_wars` WHERE `status` = 0 AND `begin` < " .. (os.time() - 2 * 86400) .. ";")
     db.executeQuery("UPDATE `guild_wars` SET `status` = 5, `end` = " .. os.time() .. " WHERE `status` = 1 AND `end` > 0 AND `end` < " .. os.time() .. ";")
     return true
    end

    function onGlobalSave()
     if(getGameState() ~= GAMESTATE_CLOSING) then
     return onStartup()
     end

     return true
    end

    y en globalevents.xml agregan esto:

    Código:
    <globalevent name="init" type="startup" event="script" value="init.lua"/>

      Temas similares

      -

      Fecha y hora actual: Jue Nov 21, 2024 12:28 am