Líderes
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 04/29/11 em %
-
[Gesior Acc] Guild War System Com Escudos
guiduarteee reagiu a walefxavier por um tópico no fórum
Vou postar o tão famoso Guild War System Com Escudos. Vou 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: 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() .. ";") 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 end 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; Pronto o Guild Wars System está totalmente instalado...falta apenas o Tfs 0.4 ! O meu The Forggoten Server 0.4 também comprei do mesmo cara que me vendeu o GWS,tenho um também que comprei na ChaitoSoft,mais conversei com eles por Msn e não permitirão que eu postasse pra ninguem,rsrs. Então vou postar o link do download e o scan: TFS 0.4 DEV Scan Ai está a DEV.... Também será necessario usar o items.xml e items.otb , a não ser que o que vc tenha seja compativel com o distro. Item.xml e otb Scan Obs: Este distro não carrega scripts que tenha a função "dbExecute.query",sempre que tiver mude para "db.query" .Todo o script ja está configurado para funcionar assim,não se preucupe. Só isso,obrigado a todos...que Deus Abençoe voces sempre !1 ponto -
1 ponto
-
Criando Novos Pokes Ou Monsters (Tibia) Em Geral..
luizrafael reagiu a shardjeff por um tópico no fórum
Olá :XTibia_smile: quando eu era novo em ot (adimito, não faz muito tempo) eu queria aprender a CRIAR novos pokes com novas sprites e tudo, e eu num achava como... Eu fucei em uns negócios e consegui!! Então como eu sei que tem muitas pessoas com esse mesmo problema, decidi criar esse tuto. Então, vamos ao trabalho. Parte 1: Sprites Faça o download desse dat editor: DAT EDITOR DOWNLOAD Gente até aqui utilizamos o dat editor com imagens... a partir de agora é com XML só de poketibia e com spoiler, ou seja, sem fotos. Observações: Obs1: Todos os sprites devem ser em 32x32 píxels e salvos em formato ou PNG (aconselho) ou em BPM... Obs2: Para pokemon/monsters de 4 sqm, Width:2, Height:2, precisam de 4 sprites de 32x32 para cada parte... Obs3: A Animation pode ter quantas forem necessárias.. 1=não tem animção, 2, 3, 4, 5, etc... Obs4: Eu estou disponibilizando um site com sprites de pokemon só para recortar: http://www.spriters-resource.com/ds/pkmndungeon2/index.html Parte 2: XML 1º passo: Abra a pasta Data/Monsters/Pokes copie e cole um pokemon qualquer e mude o nome por fora. monster name: nome do monstro. nameDescription: como fica o nome quando da look no poke. race: Sempre será undead.. Não mude. experience: experiência que o pokemon dá ao derrotá-lo. speed: velocidade do monstro. health now: vida atual (ao ver ele em local de spawn). max: vida real dele, quando estiver totalmente curado. look type: quando vc estiver no dat editor ainda, lá tem itemtype em Extras nas barrinhas de baixo.. coloque o itemtype que está lá, aqui. attacks: os attacks que ele irá utilizar se for selvagem... se não for, não coloque nada e sim apague. defenses: Que tipo de defesa ele utiliza por exemplo: a cada 4000 interval ele se cura. voices: as vozes que ele fala (aquelas em laranja). loot: o item que cai do poke em id. Legal, daí vc abre Data/Monsters/Monsters.xml e lá fassa a mesma coisa, copie qualquer uma linha e cole ali mesmo: monster name: nome do monstro. file="pokes/.xml": onde estaria escrito "pidgey" coloque o nome do arquivo XML que vc colocou no seu poke. EX.: Se eu criei um agron, e coloquei o nome do xml de agron, teria que colocar: file="pokes/agron.xml" Ajudas: 1ª ajuda: Para passar as sprites para 32x32 tem que ser assim: Imagem Só dá para ser feito isso pelo paint. Créditos: 99% BlueshardXD 01% GustavoFire (por achar o link de download ^-^) Bom gente é isso.. qualquer dúvida pode postar (ñ sei se irei resolver mas...) e postem comentários por favor.. Por que eu fasso um tutorial desse tamanho e nem ligam... Pelo amor de Deus em... MEU PRIMEIRO POST DE TUTORIAL.. ENTÃO DÊEM COMENTÁRIOS CONSTRUTIVOS... E NÃO AQUELES QUE SÓ JOGA AGENTE NO FUNDO DO POÇO VIU... MAS VALEU! DESCOBRI UMA DICA!!! Eu descobri uma coisa que será muito útil para todos os que aprenderam e estão fazendo seus servers com monsters ou pokes novos... aqui vamaos à dica... Após fazer seu monster ou poke no Dat Editor clique em Export/Export Item... e salve am algum canto... (aconselho em uma pasta separada) o arquivo será salvo no formato .idc IREI EXPLICAR PRA QUE ISSO SERVE: se vc perder os dados ou fizer outro server ou sei lah o que vc queira.. ao abrir o dat editor clique em New/Monster... e quando aparecer o novo monstro pra vc criar as sprites e adionar vc, ao envés de clicar em Import/Sprites, clica em Import/Import Itens e seleciona o Monster/Pokemon que vc salvou no formato .idc e ele aparecerá com as sprites todas jah adicionadas e alteradas.. Ex: jah estará com a sequencia <,^,>,\/, e se for um poke ou monster de 4 sqm (height2, weight2) jah estará tudo correto... Se for de 9 sqm, 16 sqm, etc... vai estar tudo certo.. VANTAGEM: vc num vai perder tempo fazendo sprite por sprite Novamente !!! Espero ter ajudaddo novamente!!!1 ponto -
Cidades: Snowz City Non-pvp city Fire Fortress Frozen City Jungle City >Vip City< Quest's: Demon Helmet. Pits Of Inferno. Inquisition Remix. Demon Legs Entre outras.. Novas Quest's YalaharSet Quest Weapons Quest SnowzSet Quest O que à de Novo! Snowz city reformulada Outfit Wayfarer Novos Itens 8.60 Novos Monstros 8.60 Novo Executavel Sistema VIP Amulet of Loss Arrumado Sistema De Noticia Novas Casas Adicionadas Debug nos Teleports consertado Rainbow Shield Quest No Templo Adicionado Novos NPC Cara Do Buff, Soft Boots Seller Fotos: Outfit Wayfarer Templo Deposito NPCs Em Baixo Do Deposito Teleports Free e Teleports VIP Senha Do GOD: god/god Download: Aqui Scan: Aqui Crédito's: Snowz Comedinha Myself Alissow Lucas0007 Kako_loko Carnavotu1 ponto
-
Ola Xtibianos, mais uma vez eu aqui trazendo script inuteis para vocês. Oque ele faz: Quando o jogador vip usar o item ele é teleportado para uma posição 'x' Quando o player (nao-vip) usar ele vai mandar uma mensagem Script: Links Uteis: Vip System por Account1 ponto
-
Técnicas De Marketing Para O Sucesso
Secular reagiu a Henrique Moura por um tópico no fórum
Dicas de Marketing para Administradores! Como manter jogadores no seu servidor, sua estabilidade e etc. 1. Como conseguir jogadores Em primeiro lugar você deve ter em mente que o sucesso não vem da noite para o dia e muitos menos de um servidor que pouca se importa para o que o jogador pensa ou deixa pensar, por isso preste bem atenção nos seus atos e nos atos de seus gms. Fazer um servidor é muito mas do que só diversão, isto é, se for realmente um servidor que visa o interesse do jogador e o entretenimento dos mesmos. Saiba também que um servidor com rates altas não duram muito, você terá de "resetá-lo" e assim de pouco em pouco ele se acabará. Fazer um servidor hoje em dia está acessível para qualquer um que tenha pelo menos uma conexão com a Internet, mas poucos conseguem fazer estes servidores irem para frente, evoluir. O planejamento também é um ponto crucial para obtermos um bom resultado. Você precisa ter em mente que um servidor que não há planejamento acabará no máximo em um prazo de uma semana. Planejar as "rates" e adápta-las ao mapa é um dos pontos de maior importância para um bom planejamento. As "rates" devem se balancear de acordo com a força de cada profissão e de cada local do mapa."Rates" altas são os maiores inimigos do Roleplaying, portanto se você quiser um servidor que realmente faça valer a pena o seu esforço e sacrifício de construí-lo, evite elevar absurdamente essas "rates". Planeje bem sua equipe e qualifique-a para todo tipo de situações, lembre-se também que a comunicação é base de um bom servidor. Seguindo os conselhos citados acima, é provável que consiga obter um número um tanto considerável de jogadores online em seu servidor. 2. Mantendo os jogadores no seu servidor O que importa não é só consegui-los, mas também como mante-los. Faça "upgrades" constantes no mapa, nas funções, no roleplaying em geral e sempre inove tirando a "mesmice" do seu servidor. Afinal, o que realmente emociona o jogador é andar por aí sem saber o que lhe espera. Elabore quests com seus amigos, escrevendo-as num papel quando sobrar um tempinho após a escola ou do expediente de trabalho. Toda idéia é bem-vinda, saiba aceitar critícas construtivas em relações à suas idéias e as idéias de seus amigos. Faça uma enquete no site de seu servidor, se for preciso. Relacione essas quests com lendas da vida real, como a mitologia grega, greco-romana, nórdica, chinesa, fenícia, russa, romana, hindu, maia, céltica, germânica e a mitologia inca. Claro, essas mitologias podem variar, mas estas são as que tem as histórias mais interessantes. Faça também quests relacionadas aos deuses dessas mitologias. No mapa não faça das caçadas repetitivas e enjoativas, tente sempre melhorar em algum ponto e evite produzir aqueles mapas ditos "quadrados". Em fim, inovar é o que realmente mantém a estabilidade e vontade de jogar deste jogador. 3. Estabilidade e Aumento Não pense que acabou, pois ainda faltam outros pontos especificos para melhorar cada vez mais seu servidor. Ninguém fará doações em um servidor lento, que trava toda hora e que fazem rollbacks semanais. Se quiser hospedar seu servidor num "host" pago, saiba que terá de investir. Comece com um "host" fraco, que suportem pelo menos 70 jogadores online sem nenhum tipo de interferência. Avance este número conforme as doações de seu servidor forem aumentando, e quando sobrar dinheiro, não gaste-o em bobagens, ele pode ser útil no próximo mês caso falte doações ou aconteça algum imprevisto. Nunca "resete" seu servidor, fazendo isso com certeza o número de jogadores ativos irá abaixar bruscamente. Conforme seu servidor for crescendo e consecutivamente o número das doações forem aumentando, invista cada vez mais na melhora do mesmo. Você estará no rumo certeiro ao grande sucesso desejado por todos os administradores. Siga sempre as opiniões dos jogadores, realize enquetes semanais, discuta entre a equipe o que pode ser melhorado e sempre tome cuidado com cada ação que lhe pareça ser brusca, pense sempre como um tipo de pessoa e incorpore o espiríto de jogador para chegar a uma conclusão final do que pode ser feito. Nunca permita que um GM tenha um personagem, os mesmos podem gerar conflito na comunidade e até dentro da sua equipe. Todos os princípios básicos para o sucesso foram citados neste artigo, porém há outros pontos estratégicos que também não podem faltar, mas isso é por sua conta! Artigo cem porcento escrito e revisado por Henrique Moura - Cópias não autorizadas de maneira alguma - Exclusivo XTibia.com Abraços e rumo ao sucesso!1 ponto -
Baiak Editadaoo Por:[Adm]Gouvea
renanmazu14 reagiu a guilhermego por um tópico no fórum
Por ser o meu 1º oque você achou ?1 ponto -
Ajuda Rme
pedroca80 reagiu a Henrique Moura por um tópico no fórum
Baixa um mapa completo. Qual mapa você usa? Precisa prestar atenção, depende da versão que você usa né rapaz, não tem como colocar Zao numa versão antiga por que não tem os items nas sprites que são utilizados como ground. Abraços.1 ponto -
Poste o config.lua todo, por favor. flw1 ponto
-
Dúvida Para Criar Site
Tedescoo reagiu a vinny160600 por um tópico no fórum
dá mas... tem que ser via hamachi dai os cara vai precisa hamachi pra entra no seu server! e no site!, mas da sim para criar site... pois ja testei... ajudei +REP pra mim ^^1 ponto -
[Encerrado] Como Funciona
Secular reagiu a UnderWalter por um tópico no fórum
Servidor dedicado é um equipamento com determinadas características que foi configurado para executar funções específicas como por exemplo de servidor de arquivos, de páginas web, de e-mail. Pode estar localizado em um Data Center, ambiente de uma rede local. Servidor dedicado, nada mais é que um equipamento ligado 24 horas por dia em um link de internet de alta velocidade em uma empresa ou em um internet data center. É a preferida entre sites de alto tráfego, portais de conteúdo muito visitados ou por empresas que queiram hospedar suas aplicações aliando máxima performance com maior segurança e sigilo da informação hospedada. A hospedagem em servidores dedicado é uma opção raramente selecionada principalmente pelo seu alto custo de manutenção. Mas este não é o maior impasse na hora da contratação, o maior peso realmente fica por conta da administração deste servidor. Poucas pessoas hoje são capazes de gerenciar um servidor para web. Muitos fatores devem ser observados, tais como, escolha e instalação do sistema operacional, compilação dos pacotes de softwares web (o famoso LAMP) e configuração dos aspectos de segurança do mesmo. É por isso que a maioria das empresas ou pessoas que contratam um servidor dedicado optam por também contratar o gerenciamento e monitoramento de dedicados de empresas especializadas. Virtual Private Server (VPS) VPS (Virtual Private Server) é um servidor em ambiente compartilhado que possui acesso root (administrador) e processos independentes para cada conta VPS criada, funciona assim como todo computador, cada conta VPS no servidor possui seu sistema independente, ou seja você pode configurá-lo de acordo com a sua real necessidade (instalar novos programas, etc…). Um servidor virtual privado (VPS) divide um servidor dedicado robusto e potente em múltiplos pequenos servidores dedicados utilizando um software especial denominado Virtuozzo. Pense que VPS é um mini servidor dedicado. Este plano permite que se tenha um ambiente dedicado com completo acesso privilegiado (root) e sua própria partição privada segura. Recomenda-se este serviço a pequenas empresas de hospedagem, empresas que buscam maior segurança e estabilidade em suas aplicações e a empresas que precisam hospedar sites com grande quantidade de e-mails, maior limite na quantidade de envio de e-mail e/ou com muitos recursos não suportados por um plano de servidor compartilhado. Ou seja, Dedicado concerteza é melhor que um VPS. A diferença de preço concerteza é muito grande pois um VPS hoje em dia de 512MB você encontra por 35/25 reais e 1GB por 40R$ e um Dedicado é 8GB 300R$ lembrando que é Mensalmente, VEJA MAIS PREÇOS CLICANDO AQUI !. Eu já vi um cara por um Server Global em casa mais so deu 60 Players, ele colocou Donations para os Players ajudarem a pagar um Semi e assim foi so que hoje em dia ele não existe mais. Recomendo a você que começe com um Semi Dedicado se for um Server Global use um VPS de 4GB para rodar legal outros servers use 2GB. Eu prefiro DEDICADO pois tem muitas diferenças que um VPS.1 ponto -
1 ponto
-
[Aula#6] Rpg
guilhermego reagiu a DretiDemon por um tópico no fórum
Aprovado, movido para a área correta.1 ponto -
Script Vip Name
omegariuzin reagiu a Caronte por um tópico no fórum
Adicione Em Pastadoot/data/action/actions.xml Depois vá em Action/scripts E Adicione um Arquivo .lua Nomeado = vipname Coloque Um Bau E Ponha O Id Da Action E Quando O Player : Viadin Clickar Ele Ficara Com O Nome [Vip] Viadin E Iria Ficar 10:47 You see [Vip] PLAYER(Level 8). He is a sorcerer. He is Unknown (======|======). Serve Esse Script? Add +Rep Ae1 ponto -
Material de Apoio Loops Antes de começarmos, o que vem a ser um loop em programação? Um loop é a repetição de um bloco de código por diversas vezes, com a finalidade de verificar uma condição, economizar linhas e alterar estados de variáveis. Em lua, temos três estruturas capazes de realizar loops, o comando while, o comando repeat e o comando for veremos agora como proceder para fazer um loop usando o while. Compreendendo o WHILE: O comando while, pode ser entendido como "enquanto" e deve vir junto a uma condição. Ou seja, ele executa e testa a condição enquanto esta não for satisfeita. Vejamos um exemplo: i = 10 while i>0 do print(i) i = i-1 end Como podemos observar no exemplo acima, temos uma variável i com o valor 10 e a estrutura while comparando i a 0, mostrando o valor de i e decrementando seu valor em 1 (subtraindo 1 do valor). Logo, neste exemplo teremos uma contagem regressiva de 10 até 0, quando a condição será obedecida e o laço terminado. Podemos ainda fazer uso do comando break para terminar o laço em algum ponto de sua execução: a = 1 while true do print(a) a = a + 1 if a > 10 then break end end Neste segundo exemplo, o while está configurado para executar infinitamente, entretanto, dentro do bloco de execução, temos uma condição if que caso a seja maior que 10, ele encerra o laço. Neste segundo exemplo, nos será mostrado os números de 1 a 10 em ordem crescente. A estrutura REPEAT: O comando repeat, é a segunda estrutura que podemos usar para fazer loops. Sempre vem acompanhado de outro comando, o until. Pode ser compreendido como "repita até que". Sua sintaxe é parecida ao do while, e também obedece a uma condição. Enquanto falsa, ele executa. Quando verdadeira, o laço é interrompido. Observem um exemplo: i = 3 repeat print(i) i = i-1 until i==0 Como vemos, no início, definimos a variável que será usada para controlar o laço e colocamos um decremento. É importante ressaltar a condição que o until impõe: caso i seja igual a 0, interrompa. O comando acima, deverá mostrar-nos os números de 3 a 0 em ordem decrescente. O comando repeat também pode ser usado junto ao break: i = 1 repeat print(i) i = i+1 if i>10 then break end until false Caso não tivessemos o if para controlar o ponto de interrupção, o comando executaria infinitamente, pois no until, não temos condição, logo será sempre falsa. O todo poderoso FOR: Este comando, apesar de sua simplicidade, é complicado de se entender completamente, hoje darei apenas uma pincelada. Haverá outro tutorial somente usando o for. O for em lua, apresenta dois usos possíveis para fazermos laços. A primeira, é a forma numérica e a segunda, chama-se sequencial. Não explicarei a diferença funcional entre elas, somente mostrarei como fazer loops usando-as. A forma numérica é bem direta: for i = 1, 3 do print(i) end A variável i não precisa ser declarada anteriormente. No caso desta estrutura, a variável assume os valores de 1 a 3 e repete o bloco com estes valores. Em sua forma sequencial, precisamos fazer uso de tabelas. Observe: for i, x in pairs({"Indice 1", "Indice 2", "Indice 3"}) do print(i, x) end No caso acima, será mostrada uma estrutura mais ou menos assim: 1 Indice 1 2 Indice 2 3 Indice 3 Bom, acho que isso é tudo. flw1 ponto
-
Npc De Comprar Itens Vip
desire_bad reagiu a Vodkart por um tópico no fórum
precisando de alguma ajuda da um toque brother boa sorte abraços1 ponto -
Novas Pips
Fernandinand reagiu a Yamohray por um tópico no fórum
contra-produtivos belas palavras, eu até ri por um minuto por isso mesmo que a seção de design ta parada façam o que quiser flw-1 pontos -
-1 pontos
-
Como Criar "npc"
Demonbholder reagiu a rafafinhaa por um tópico no fórum
Ola ... alguem poderia me dar 1 exemplo de npc seller ... que vende as coisas . ex: que nen os de rook... que vende sword,club essas coisas. E tambem gostaria de saber como tirar alguns itens de venda de alguns npcs tipo tirar wand,runa,potion... Obg.-1 pontos