Ir para conteúdo

Guild War System Com Escudos


Leoprotons

Posts Recomendados

Bom vamos começar pelo site :

 

 

 

Vá em Xampp/Htdocs e crie e um arquivo chamado wars.php,dentro add isto:

<?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>

<a onclick=\"show_hide('information'); return false;\" style=\"cursor: pointer;\"><h1><center>» Click to se the commands «<center></h1></a>
<table width=\"100%\" border=\"0\" cellspacing=\"1\" cellpadding=\"4\" id=\"information\" style=\"display: none;\";>
<tr align=\"center\"><b>You must send this commands in GUILD CHAT.</tr>
<tr style=\"background: #512e0b;\"><td align=\"center\" class=\"white\"><b>Command</b></td><td colspan=\"2\" align=\"center\" class=\"white\"><b>Description</b></td></tr>
<tr style=\"background: #F1E0C6;\"><td><b>/war invite, guild name, fraglimit</b></td><td>Sends an invitation to start the war. Example: <font color=red><BR>/war invite, Chickens, 150<BR></font><B>(Invite a guild to war with 150 frags count.)</B></td></tr>
<tr style=\"background: #D4C0A1;\"><td><b>/war invite, guild name, fraglimit, money</b></td><td>Send the invitation to start the war. Example: <font color=red><BR>/war invite, Chickens, 150, 10000</font><br><B> (Invite a guild to war with 150 frags count and payment of 10000 gold coins <- you need donate to guild to use it.)<B></td></tr>
<tr style=\"background: #F1E0C6;\"><td><b>/war accept, guild name</b></td><td>Accepts the invitation to start a war. Example: <font color=red><BR>/war accept, Chickens</font><BR><B>(Accept the war against guild \"Chickens\".)</b></td></tr>

<tr style=\"background: #D4C0A1;\"><td><b>/war reject, guild name</b></td><td>Rejects the invitation to start a war. Example: <font color=red><BR>/war reject, Chickens</font><BR><B>(Reject a invitation to war from Chickens.)</B></td></tr>
<tr style=\"background: #F1E0C6;\"><td><b>/war cancel, guild name</b></td><td>Cancels the invitation. Example: <font color=red><BR>/war cancel, Chickens</font><br><b>(Cancel my guild invitation to war with Chickens.)</b></td></tr>
<tr style=\"background: #D4C0A1;\"><td><b>/balance</b></td><td>See the guild balance - balance of money.</td></tr>
<tr style=\"background: #F1E0C6;\"><td><b>/balance donate value</b></td><td>Deposits money on the guild's bank account. All players can donate. Example: <font color=red><BR>/balance donate 100000 </font><BR><B>(You will donate 100k to your guild balance.)</B></td></tr>
<tr style=\"background: #D4C0A1;\"><td><b>/balance pick value</b></td><td>Withdraws money from the guild's bank account. Can be used only by the guild leader. Example: <font color=red><BR>/balance pick 100000 </font><BR><B>(You will withdraw 100k from your guild balance.)</B></td></tr>
</table>

<table width=\"100%\" border=\"0\" cellspacing=\"1\" cellpadding=\"4\">
<tr>
<td style=\"background: #512e0b\" class=\"white\" width=\"150\"><b>Aggressor</b></td>

<td style=\"background: #512e0b\" class=\"white\"><b>Information</b></td>
<td style=\"background: #512e0b\" class=\"white\" width=\"150\"><b>Enemy</b></td>
</tr><tr style=\"background: #F1E0C6;\">";

$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 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=\"6\"><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=\"6\"><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=\"index.php?subtopic=characters&name=" . 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=\"index.php?subtopic=characters&name=".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>";
$main_content .= '<div align="right"><small><b>Customized by: <a href="http://www.xtibia.com/forum/user/240289-walef-xavier">Walef Xavier</a></b></small></div><br />';

?>

 

 

 

Agora vá em Xampp/Htdocs/index.php e add o seguinte:

        case "wars";
                               $subtopic = "wars";
                               $topic = "Guild Wars";
                               include("wars.php");
               break;

 

 

Agora para finalizar a parte do site vá em Xampp/Htdocs/Layout/Tibiacom/layout.php e add o seguinte:

<a href='?subtopic=wars'>
 <div id='submenu_wars' 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_polls' class='ActiveSubmenuItemIcon' style='background-image:url(<?PHP echo $layout_name; ?>/images/menu/icon-activesubmenu.gif);'></div>
       <div class='SubmenuitemLabel'><font color=red>Guild Wars</font></div>
       <div class='RightChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div>
 </div>
</a>

 

 

Agora vamos para seu Ot:

 

 

 

Va em GlobalEvents/scripts/start.lua e add o seguinte:

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() .. ";")

 

 

Agora vá em Lib e crie um arquivo .lua chamado 101-war,dentro add o seguinte:

WAR_GUILD = 0
WAR_ENEMY = 1

 

 

Agora para finalizar vamos colocar os comandos em Talkactions !

 

 

 

Vá em Talkactions/scripts e crie dois arquivos chamados war.lua e balance.lua,dentro add o seguinte:

 

War.lua

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.query("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.query(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.query("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.query("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.query(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.query(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

 

 

balance.lua

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.query('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.query('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

 

 

 

Agora vá em Talkactions/talkactions.xml e add as duas tags:

<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."/>

 

 

 

Pronto,seu Guild War Systema está instalado...mas para funcionar necessitará das tabelas na sua database e do Tfs 0.4 .Vou posta-los abaixo,respectivamente.

 

.:: Tabelas ::.

 

Para quem ainda não sabe add tabelas a sua database,vou ensinar:

 

Acesse seu phpmyadmin,digite sua senha (caso tenha),clique no nome da sua database a esquerda,assim que carregar a sua database clique em SQL lá em cima...Aparecerá um espaço em branco lá voce irá add as seguintes tabelas...e depois clicar em Executar.

 

 

 

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;

 

Para finalizar é necessário que o seu .exe tenha incluído na compilação o parâmetro, -D__WAR_SYSTEM__.

Como adiciono?

Para adicionar é necessário ter a source do otserver que você utiliza. Abra a source em um dev-cpp aperte alt+p na coluna paraments add -D__WAR_SYSTEM__ da ok e compila.

 

Se você não souber compilar existem tutorias bem explicativas que tornam fácil aprender a compilar, veja abaixo:

 

Compilando no Windows

Compilando no Linux ubuntu

 

 

Pronto o Guild Wars System está totalmente instalado!

 

Para os preguiçosos Ocupados coloquei o download do sistema completo.

 

Download Aqui

 

Link do Scan

 

Creditos: Walef Xavier - War System

AgaSsI - Tópico original

Gm Beckman - Completou o tópico

Editado por Leoprotons
Link para o comentário
Compartilhar em outros sites

Ta faltando o principal =p

 

-D__WAR_SYSTEM__

 

Ou caso o contrario o sistema de WAR não funciona fica só aparecendo isso no console:

 

[18/12/2010 18:46:18] [Error - TalkAction Interface]

[18/12/2010 18:46:18] data/talkactions/scripts/war.luanSay

[18/12/2010 18:46:18] Description:

[18/12/2010 18:46:18] data/talkactions/scripts/war.lua:70: attempt to call global 'doGuildAddEnemy' (a nil value)

[18/12/2010 18:46:18] stack traceback:

[18/12/2010 18:46:18] data/talkactions/scripts/war.lua:70: in function <data/talkactions/scripts/war.lua:1> Talkactions/scripts/war.lua

 

Junte os coder de phpmyadmin todos em uma quote só exemplo:

 

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;

 

O resto tudo ok, boa organização no tópico parabéns pela iniciativa.

Editado por GM Bekman
Link para o comentário
Compartilhar em outros sites

misaelzin: eu não tenho o pra Modern, malz não poder te ajudar, eu não fiz esse sistema só achei interessante trazer porque tem muita gente que procura por ele.

 

LukaszG Vlz..

 

GM Bekman hehe, fiz la a modificação do DB e do Exe, system 100% agora..

 

Vlz GM Bekman

Editado por Leoprotons
Link para o comentário
Compartilhar em outros sites

  • 2 weeks later...

Sim de fato e vdd, eu peguei em um lugar, e não sabia que o walef tinha postado aqui no xtibia, mais de toda forma os créditos estão certinhos, nada de ilegal. :smile_positivo:

Editado por Leoprotons
Link para o comentário
Compartilhar em outros sites

Te mandei uma pm explicando corretamente!

;D

Error

consulta SQL:

 

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;

 

 

 

MySQL ha dicho:

 

#1046 - No database selected

 

tengo este proplema ajuda plizzz

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...