• logo_cipsoft
    Nowe serwery zostały otwarte 19 Lut 2025:
    Noctalia (Open PvP) Ignitera (Open PvP) us_logo Xybra (Open PvP)

Lua Functions TFS 0.4 Elf War System (With Emblems)

Status
Zamknięty.

Mag Egzorcysta

Advanced User
Dołączył
Kwiecień 17, 2010
Posty
248
Liczba reakcji
39
Siema,

Znalaz?em fajny War Systemik, dzia?a on tylko z TFS'em 0.4 :-)
Aby to zadzia?a?o b?dziesz musia? skompilowa? sw?j silnik z dodatkowym parametrem. Je?eli nie wiesz jak to zrobi? to zapoznaj si? z tymi tematami:
Kompilacja TFS 0.4 pod Windows'a
Kompilacja TFS 0.4 pod Linuxem

Reupload:
[video=youtube;n7gADS-dWds]http://www.youtube.com/watch?v=n7gADS-dWds[/video]

W najnowszych trunkach nie trzeba poprawia? Kodu C++ z wyj?tkiem configure.ac​

Je?eli jeste? niedo?wiadczony i masz problemy z kompilacj? tego pod "niskiego" trunka to spr?buj na nowszym, przyk?adowo r.3884​


Pierwszym Krokiem b?dzie dodanie parametru do configure.ac

Kod:
OPTIONAL_FLAGS=""

zamieniamy na:

Kod:
OPTIONAL_FLAGS="-D__WAR_SYSTEM__"


Drugim Krokiem b?dzie edycja kodu C++ w ioguild.cpp :-)

Kod:
channel->talk("", SPEAK_CHANNEL_RA, s.str());

zamieniamy na:

Kod:
channel->talk("", SPEAK_CHANNEL_W, s.str());

W tym samym pliku zamieniamy kod pomi?dzy (w??cznie z #ifdefem)
Kod:
#ifdef __WAR_SYSTEM__
#endif

na:

Kod:
#ifdef __WAR_SYSTEM__

void IOGuild::checkWars()
{
    Database* db = Database::getInstance();
    DBResult* result;

    DBQuery query;
    query << "SELECT `id`, `guild_id`, `enemy_id` FROM `guild_wars` WHERE `status` IN (1,4) AND `end` > 0 AND `end` < " << time(NULL);
    if(!(result = db->storeQuery(query.str())))
        return;

    War_t tmp;
    do
    {
        tmp.war = result->getDataInt("id");
        tmp.ids[WAR_GUILD] = result->getDataInt("guild_id");
        tmp.ids[WAR_ENEMY] = result->getDataInt("enemy_id");
        finishWar(tmp, false);
    }
    while(result->next());
    result->free();
}

bool IOGuild::updateWar(War_t& war)
{
    Database* db = Database::getInstance();
    DBResult* result;

    DBQuery query;
    query << "SELECT `g`.`name` AS `guild_name`, `e`.`name` AS `enemy_name`, `w`.* FROM `guild_wars` w INNER JOIN `guilds` g ON `w`.`guild_id` = `g`.`id` INNER JOIN `guilds` e ON `w`.`enemy_id` = `e`.`id` WHERE `w`.`id` = " << war.war;
    if(!(result = db->storeQuery(query.str())))
        return false;

    war.ids[WAR_GUILD] = result->getDataInt("guild_id");
    war.ids[WAR_ENEMY] = result->getDataInt("enemy_id");
    war.names[WAR_GUILD] = result->getDataString("guild_name");
    war.names[WAR_ENEMY] = result->getDataString("enemy_name");

    war.frags[WAR_GUILD] = result->getDataInt("guild_kills");
    war.frags[WAR_ENEMY] = result->getDataInt("enemy_kills");
    war.frags[war.type]++;

    war.limit = result->getDataInt("frags");
    war.payment = result->getDataInt("payment");

    result->free();
    if(war.frags[WAR_GUILD] >= war.limit || war.frags[WAR_ENEMY] >= war.limit)
    {
        Scheduler::getInstance().addEvent(createSchedulerT  ask(3000,
            boost::bind(&IOGuild::finishWar, this, war, true)));
        return true;
    }

    query.str("");
    query << "UPDATE `guild_wars` SET `guild_kills` = " << war.frags[WAR_GUILD] << ", `enemy_kills` = " << war.frags[WAR_ENEMY] << " WHERE `id` = " << war.war;
    return db->query(query.str());
}

void IOGuild::finishWar(War_t war, bool finished)
{
    Database* db = Database::getInstance();
    DBQuery query;
    if(finished)
    {
        query << "UPDATE `guilds` SET `balance` = `balance` + " << (war.payment * 2) << " WHERE `id` = " << war.ids[war.type];
        if(!db->query(query.str()))
            return;

        query.str("");
    }

    query << "UPDATE `guild_wars` SET ";
    if(finished)
        query << "`guild_kills` = " << war.frags[WAR_GUILD] << ", `enemy_kills` = " << war.frags[WAR_ENEMY] << ",";

    query << "`end` = " << time(NULL) << ", `status` = 5 WHERE `id` = " << war.war;
    if(!db->query(query.str()))
        return;

    for(AutoList<Player>::iterator it = Player::autoList.begin(); it != Player::autoList.end(); ++it)
    {
        if(it->second->isRemoved())
            continue;

        bool update = false;
        if(it->second->getGuildId() == war.ids[WAR_GUILD])
        {
            it->second->removeEnemy(war.ids[WAR_ENEMY]);
            update = true;
        }
        else if(it->second->getGuildId() == war.ids[WAR_ENEMY])
        {
            it->second->removeEnemy(war.ids[WAR_GUILD]);
            update = true;
        }

        if(update)
            g_game.updateCreatureEmblem(it->second);
    }

    if(finished)
    {
        std::stringstream s;
        s << war.names[war.type] << " has just won the war against " << war.names[war.type == WAR_GUILD] << ".";
        g_game.broadcastMessage(s.str().c_str(), MSG_EVENT_ADVANCE);
    }
}

void IOGuild::frag(Player* player, uint64_t deathId, const DeathList& list, bool score)
{
    War_t war;
    std::stringstream s;
    for(DeathList::const_iterator it = list.begin(); it != list.end(); )
    {
        if(score)
        {
            if(it->isLast())
                war = it->getWar();
        }
        else if(!war.war)
            war = it->getWar();

        Creature* creature = it->getKillerCreature();
        if(it != list.begin())
        {
            ++it;
            if(it == list.end())
                s << " and ";
            else
                s << ", ";
        }
        else
            ++it;

        s << creature->getName();
    }

    std::string killers = s.str();
    s.str("");

    ChatChannel* channel = NULL;
    if((channel = g_chat.getChannel(player, CHANNEL_GUILD)))
    {
        s << "Guild member " << player->getName() << " was killed by " << killers << ".";
        if(score)
            s << " The new score is " << war.frags[war.type == WAR_GUILD] << ":"
                << war.frags[war.type] << " frags (limit " << war.limit << ").";

        channel->talk("", SPEAK_CHANNEL_W, s.str());
    }

    s.str("");
    if((channel = g_chat.getChannel(list[0].getKillerCreature()->getPlayer(), CHANNEL_GUILD)))
    {
        s << "Opponent " << player->getName() << " was killed by " << killers << ".";
        if(score)
            s << " The new score is " << war.frags[war.type] << ":"
                << war.frags[war.type == WAR_GUILD] << " frags (limit " << war.limit << ").";

        channel->talk("", SPEAK_CHANNEL_W, s.str());
    }

    Database* db = Database::getInstance();
    DBQuery query;

    query << "INSERT INTO `guild_kills` (`guild_id`, `war_id`, `death_id`) VALUES ("
        << war.ids[war.type] << ", " << war.war << ", " << deathId << ");";
    db->query(query.str());
}
#endif

Nast?pnym Krokiem b?dzie dodanie/edycja tabeli w Bazie Danych poprzez zapytanie SQL:
Kod:
CREATE TABLE IF NOT EXISTS `guild_wars` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `guild_id` INT NOT NULL,
  `enemy_id` INT NOT NULL,
  `begin` BIGINT NOT NULL DEFAULT '0',
  `end` BIGINT NOT NULL DEFAULT '0',
  `frags` INT UNSIGNED NOT NULL DEFAULT '0',
  `payment` BIGINT UNSIGNED NOT NULL DEFAULT '0',
  `guild_kills` INT UNSIGNED NOT NULL DEFAULT '0',
  `enemy_kills` INT UNSIGNED NOT NULL DEFAULT '0',
  `status` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `status` (`status`),
  KEY `guild_id` (`guild_id`),
  KEY `enemy_id` (`enemy_id`)
) ENGINE=InnoDB;
 
ALTER TABLE `guild_wars`
  ADD CONSTRAINT `guild_wars_ibfk_1` FOREIGN KEY (`guild_id`) REFERENCES `guilds` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `guild_wars_ibfk_2` FOREIGN KEY (`enemy_id`) REFERENCES `guilds` (`id`) ON DELETE CASCADE;
 
ALTER TABLE `guilds` ADD `balance` BIGINT UNSIGNED NOT NULL AFTER `motd`;
 
CREATE TABLE IF NOT EXISTS `guild_kills` (
  `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `guild_id` INT NOT NULL,
  `war_id` INT NOT NULL,
  `death_id` INT NOT NULL
) ENGINE = InnoDB;
 
ALTER TABLE `guild_kills`
  ADD CONSTRAINT `guild_kills_ibfk_1` FOREIGN KEY (`war_id`) REFERENCES `guild_wars` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `guild_kills_ibfk_2` FOREIGN KEY (`death_id`) REFERENCES `player_deaths` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `guild_kills_ibfk_3` FOREIGN KEY (`guild_id`) REFERENCES `guilds` (`id`) ON DELETE CASCADE;
 
ALTER TABLE `killers` ADD `war` INT NOT NULL DEFAULT 0;

Do pliku data/talkactions/talkactions.xml dodaj:
Kod:
<talkaction words="/war" channel="0" event="script" value="war.lua" desc="(Guild channel command) War management."/>
<talkaction words="/balance" channel="0" event="script" value="balance.lua" desc="(Guild channel command) Balance management."/>

W data/talkactions/scripts/ utw?rz plik war.lua i wklej to niego:
Kod:
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

W data/talkactions/scripts/ utw?rz plik balance.lua i wklej do niego:
Kod:
local function isValidMoney(value)
    if(value == nil) then
        return false
    end
 
    return (value > 0 and value <= 99999999999999)
end
 
function onSay(cid, words, param, channel)
    local guild = getPlayerGuildId(cid)
    if(guild == 0) then
        return false
    end
 
    local t = string.explode(param, ' ', 1)
    if(getPlayerGuildLevel(cid) == GUILDLEVEL_LEADER and isInArray({ 'pick' }, t[1])) then
        if(t[1] == 'pick') then
            local money = { tonumber(t[2]) }
            if(not isValidMoney(money[1])) then
                doPlayerSendChannelMessage(cid, '', 'Invalid amount of money specified.', TALKTYPE_CHANNEL_W, 0)
                return true
            end
 
            local result = db.getResult('SELECT `balance` FROM `guilds` WHERE `id` = ' .. guild)
            if(result:getID() == -1) then
                return false
            end
 
            money[2] = result:getDataLong('balance')
            result:free()
 
            if(money[1] > money[2]) then
                doPlayerSendChannelMessage(cid, '', 'The balance is too low for such amount.', TALKTYPE_CHANNEL_W, 0)
                return true
            end
 
            if(not db.executeQuery('UPDATE `guilds` SET `balance` = `balance` - ' .. money[1] .. ' WHERE `id` = ' .. guild .. ' LIMIT 1;')) then
                return false
            end
 
            doPlayerAddMoney(cid, money[1])
            doPlayerSendChannelMessage(cid, '', 'You have just picked ' .. money[1] .. ' money from your guild balance.', TALKTYPE_CHANNEL_W, 0)
        else
            doPlayerSendChannelMessage(cid, '', 'Invalid sub-command.', TALKTYPE_CHANNEL_W, 0)
        end
    elseif(t[1] == 'donate') then
        local money = tonumber(t[2])
        if(not isValidMoney(money)) then
            doPlayerSendChannelMessage(cid, '', 'Invalid amount of money specified.', TALKTYPE_CHANNEL_W, 0)
            return true
        end
 
        if(getPlayerMoney(cid) < money) then
            doPlayerSendChannelMessage(cid, '', 'You don\'t have enough money.', TALKTYPE_CHANNEL_W, 0)
            return true
        end
 
        if(not doPlayerRemoveMoney(cid, money)) then
            return false
        end
 
        db.executeQuery('UPDATE `guilds` SET `balance` = `balance` + ' .. money .. ' WHERE `id` = ' .. guild .. ' LIMIT 1;')
        doPlayerSendChannelMessage(cid, '', 'You have transfered ' .. money .. ' money to your guild balance.', TALKTYPE_CHANNEL_W, 0)
    else
        local result = db.getResult('SELECT `name`, `balance` FROM `guilds` WHERE `id` = ' .. guild)
        if(result:getID() == -1) then
            return false
        end
 
        doPlayerSendChannelMessage(cid, '', 'Current balance of guild ' .. result:getDataString('name') .. ' is: ' .. result:getDataLong('balance') .. ' bronze coins.', TALKTYPE_CHANNEL_W, 0)
        result:free()
    end
 
    return true
end

Nast?pnym bardzo wa?nym krokiem b?dzie utworzenie pliku 101-war.lua w folderze data/lib/
Wklej do niego:
Kod:
WAR_GUILD = 0
WAR_ENEMY = 1

Do pliku data/globalevents/scripts/init.lua lub start.lua dodaj nast?puj?cy kod:
Kod:
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() .. ";")

Teraz cz??? zwi?zana z ACC Makerem.

war.php
PHP:
<?php
$main_content = "<h1 align=\"center\">Guild Wars</h1>
<script type=\"text/javascript\"><!--
function show_hide(flip)
{
    var tmp = document.getElementById(flip);
    if(tmp)
        tmp.style.display = tmp.style.display == 'none' ? '' : 'none';
}
--></script>
<table width=\"100%\" border=\"0\" cellspacing=\"1\" cellpadding=\"4\">
<tr>
<td style=\"background: " . $config['site']['vdarkborder'] . "\" class=\"white\" width=\"150\"><b>Aggressor</b></td>
<td style=\"background: " . $config['site']['vdarkborder'] . "\" class=\"white\"><b>Information</b></td>
<td style=\"background: " . $config['site']['vdarkborder'] . "\" class=\"white\" width=\"150\"><b>Enemy</b></td>
</tr>";
 
$count = 0;
foreach($SQL->query('SELECT * FROM `guild_wars` WHERE `status` IN (1,4) OR ((`end` >= (UNIX_TIMESTAMP() - 604800) OR `end` = 0) AND `status` IN (0,5));') as $war)
{
    $a = $ots->createObject('Guild');
    $a->load($war['guild_id']);
    if(!$a->isLoaded())
        continue;
 
    $e = $ots->createObject('Guild');
    $e->load($war['enemy_id']);
    if(!$e->isLoaded())
        continue;
 
    $alogo = $a->getCustomField('logo_gfx_name');
    if(empty($alogo) || !file_exists('guilds/' . $alogo))
        $alogo = 'default_logo.gif';
 
    $elogo = $e->getCustomField('logo_gfx_name');
    if(empty($elogo) || !file_exists('guilds/' . $elogo))
        $elogo = 'default_logo.gif';
 
    $count++;
    $main_content .= "<tr style=\"background: " . (is_int($count / 2) ? $config['site']['darkborder'] : $config['site']['lightborder']) . ";\">
<td align=\"center\"><a href=\"?subtopic=guilds&action=show&guild=".$a->getId()."\"><img src=\"guilds/".$alogo."\" width=\"64\" height=\"64\" border=\"0\"/><br />".$a->getName()."</a></td>
<td class=\"white\" align=\"center\">";
    switch($war['status'])
    {
        case 0:
        {
            $main_content .= "<b>Pending acceptation</b><br />Invited on " . date("M d Y, H:i:s", $war['begin']) . " for " . ($war['end'] > 0 ? (($war['end'] - $war['begin']) / 86400) : "unspecified") . " days. The frag limit is set to " . $war['frags'] . " frags, " . ($war['payment'] > 0 ? "with payment of " . $war['payment'] . " bronze coins." : "without any payment.")."<br />Will expire in three days.";
            break;
        }
 
        case 3:
        {
            $main_content .= "<s>Canceled invitation</s><br />Sent invite on " . date("M d Y, H:i:s", $war['begin']) . ", canceled on " . date("M d Y, H:i:s", $war['end']) . ".";
            break;
        }
 
        case 2:
        {
            $main_content .= "Rejected invitation<br />Invited on " . date("M d Y, H:i:s", $war['begin']) . ", rejected on " . date("M d Y, H:i:s", $war['end']) . ".";
            break;
        }
 
        case 1:
        {
            $main_content .= "<font size=\"12\"><span style=\"color: red;\">" . $war['guild_kills'] . "</span> : <span style=\"color: lime;\">" . $war['enemy_kills'] . "</span></font><br /><br /><span style=\"color: darkred; font-weight: bold;\">On a brutal war</span><br />Began on " . date("M d Y, H:i:s", $war['begin']) . ($war['end'] > 0 ? ", will end up at " . date("M d Y, H:i:s", $war['end']) : "") . ".<br />The frag limit is set to " . $war['frags'] . " frags, " . ($war['payment'] > 0 ? "with payment of " . $war['payment'] . " bronze coins." : "without any payment.");
            break;
        }
 
        case 4:
        {
            $main_content .= "<font size=\"12\"><span style=\"color: red;\">" . $war['guild_kills'] . "</span> : <span style=\"color: lime;\">" . $war['enemy_kills'] . "</span></font><br /><br /><span style=\"color: darkred;\">Pending end</span><br />Began on " . date("M d Y, H:i:s", $war['begin']) . ", signed armstice on " . date("M d Y, H:i:s", $war['end']) . ".<br />Will expire after reaching " . $war['frags'] . " frags. ".($war['payment'] > 0 ? "The payment is set to " . $war['payment'] . " bronze coins." : "There's no payment set.");
            break;
        }
 
        case 5:
        {
            $main_content .= "<i>Ended</i><br />Began on " . date("M d Y, H:i:s", $war['begin']) . ", ended on " . date("M d Y, H:i:s", $war['end']) . ". Frag statistics: <span style=\"color: red;\">" . $war['guild_kills'] . "</span> to <span style=\"color: lime;\">" . $war['enemy_kills'] . "</span>.";
            break;
        }
 
        default:
        {
            $main_content .= "Unknown, please contact with gamemaster.";
            break;
        }
    }
 
    $main_content .= "<br /><br /><a onclick=\"show_hide('war-details:" . $war['id'] . "'); return false;\" style=\"cursor: pointer;\">» Details «</a></td>
<td align=\"center\"><a href=\"?subtopic=guilds&action=show&guild=".$e->getId()."\"><img src=\"guilds/".$elogo."\" width=\"64\" height=\"64\" border=\"0\"/><br />".$e->getName()."</a></td>
</tr>
<tr id=\"war-details:" . $war['id'] . "\" style=\"display: none; background: " . (is_int($count / 2) ? $config['site']['darkborder'] : $config['site']['lightborder']) . ";\">
<td colspan=\"3\">";
    if(in_array($war['status'], array(1,4,5)))
    {
        $deaths = $SQL->query('SELECT `pd`.`id`, `pd`.`date`, `gk`.`guild_id` AS `enemy`, `p`.`name`, `pd`.`level`
FROM `guild_kills` gk
    LEFT JOIN `player_deaths` pd ON `gk`.`death_id` = `pd`.`id`
    LEFT JOIN `players` p ON `pd`.`player_id` = `p`.`id`
WHERE `gk`.`war_id` = ' . $war['id'] . ' AND `p`.`deleted` = 0
    ORDER BY `pd`.`date` DESC')->fetchAll();
        if(!empty($deaths))
        {
            foreach($deaths as $death)
            {
                $killers = $SQL->query('SELECT `p`.`name` AS `player_name`, `p`.`deleted` AS `player_exists`, `k`.`war` AS `is_war`
FROM `killers` k
    LEFT JOIN `player_killers` pk ON `k`.`id` = `pk`.`kill_id`
    LEFT JOIN `players` p ON `p`.`id` = `pk`.`player_id`
WHERE `k`.`death_id` = ' . $death['id'] . '
    ORDER BY `k`.`final_hit` DESC, `k`.`id` ASC')->fetchAll();
                $count = count($killers); $i = 0;
 
                $others = false;
                $main_content .= date("j M Y, H:i", $death['date']) . " <span style=\"font-weight: bold; color: " . ($death['enemy'] == $war['guild_id'] ? "red" : "lime") . ";\">+</span>
<a href=\"/characters/" . urlencode($death['name']) . "\"><b>".$death['name']."</b></a> ";
                foreach($killers as $killer)
                {
                    $i++;
                    if($killer['is_war'] != 0)
                    {
                        if($i == 1)
                            $main_content .= "killed at level <b>".$death['level']."</b> by ";
                        else if($i == $count && $others == false)
                            $main_content .= " and by ";
                        else
                            $main_content .= ", ";
 
                        if($killer['player_exists'] == 0)
                            $main_content .= "<a href=\"/characters/".urlencode($killer['player_name'])."\">";
 
                        $main_content .= $killer['player_name'];
                        if($killer['player_exists'] == 0)
                            $main_content .= "</a>";
                    }
                    else
                        $others = true;
 
                    if($i == $count)
                    {
                        if($others == true)
                            $main_content .= " and few others";
 
                        $main_content .= ".<br />";
                    }
                }
            }
        }
        else
            $main_content .= "<center>There were no frags on this war so far.</center>";
    }
    else
        $main_content .= "<center>This war did not began yet.</center>";
 
    $main_content .= "</td>
</tr>";
}
 
if($count == 0)
    $main_content .= "<tr style=\"background: ".$config['site']['darkborder'].";\">
<td colspan=\"3\">Currently there are no active wars.</td>
</tr>";
 
$main_content .= "</table>";
?>

W index.php dodaj:
PHP:
case "wars": 
$topic = "Wars"; 
$subtopic = "wars"; 
include("war.php"); 
break;

Je?eli masz oryginalny layout "tibiacom" (standardowy w g?siorze) to doklej do niego:
(layouts/tibiacom/layout.php)
PHP:
<a href='?subtopic=wars'>
  <div id='submenu_war' class='Submenuitem' onMouseOver='MouseOverSubmenuItem(this)' onMouseOut='MouseOutSubmenuItem(this)'>
    <div class='LeftChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div>
    <div id='ActiveSubmenuItemIcon_spells' class='ActiveSubmenuItemIcon' style='background-image:url(<?PHP echo $layout_name; ?>/images/menu/icon-activesubmenu.gif);'></div>
    <div class='SubmenuitemLabel'>War</div>
    <div class='RightChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div>
  </div>
</a>


DLA MODERN ACC'a:
PHP:
<table cellpadding="4" cellspacing="1" width="100%"> 
<tr bgcolor="#505050"><td class="white" colspan="5"><b><font color="white"> In-game Commands</font></b></td></tr> 
 
<tr><td><table border="0" cellpadding="2" cellspacing="1" width="100%"> 
<tr bgcolor="#f1e0c6"><td><b> <font color="black">Command</font></b></td><td><b><font color="black">Action</font></b></td></tr> 
<tr bgcolor="#f1e0c6"><td> <font color="black">/war invite,guild name,fraglimit </font></td><td> <font color="black">Send an invitation to start a war.
Example: war invite,Black Ninjas,150</font></td></tr> 
<tr bgcolor="#f1e0c6"><td> <font color="black">/war invite,guild name,fraglimit,money,time </font></td><td> <font color="black">Send an invitation to start a war.
Example: war invite,Black Ninjas,150,10000,3 day's</font></td></tr> 
<tr bgcolor="#f1e0c6"><td> <font color="black">/war accept,guild name </font></td><td> <font color="black">Accept the invitation to start a war.</font></td></tr> 
<tr bgcolor="#f1e0c6"><td> <font color="black">/war reject,guild name </font></td><td> <font color="black">Reject the invitation to start a war.</font></td></tr> 
 
<tr bgcolor="#f1e0c6"><td> <font color="black">/war cancel,guild name</font></td><td> <font color="black">This will cancel the invitation to the guild Black Ninjas</font></td></tr> 
 
</table></td></tr></table> 
<br /> 
<div align='center'> 
<font color='red'>*Guild War commands must be written in your guild channel in order for them to work</font> 
 <TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH=90%> 
  <TR> 
   <TD align='center'><img src='http://elminera.net//public/images/green.gif' width='10px' height='10px'/> Guild Members | 
   <img src='http://elminera.net//public/images/red.gif' width='10px' height='10px'/> Guild Enemies | 
   <img src='http://elminera.net//public/images/blue.gif' width='10px' height='10px'/> Allies or other active wars</TD> 
  </TR> 
 </TABLE> 
</div> 
<br /> 
<table width="100%" border="0" cellspacing="1" cellpadding="4"> 
<tr> 
<td style="background: #505050" width="150"><font color="white"><b><center>Aggressor</center></b><br /></font></td> 
<td style="background: #505050"><font color="white"><b><center>Information</center><br /></b></font></td> 
<td style="background: #505050" width="150"><font color="white"><b><center>Enemy</center></b><br /></font></td> 
</tr><tr style="background: #D4C0A1;"> 
<td colspan="3" style="color:black;"><center>Currently there are no active wars.</center></td> 
</tr></table>

Mam nadziej?, ?e sobie poradzicie. :-)
Pozdrawiam, Leon Zawodowiec.
 
Status
Zamknięty.
Do góry