Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 11/19/12 em %

  1. callstack overflow é significa que você realizou um loop infinito na mesma função, no caso a stats change, quando a criatura que tem esse evento registrado perde vida, a doTargetCombatHealth faz com que ela perca vida novamente ativando de novo o onstats change, que faz com que a doTargetCombatHealth seja executada de novo e assim vai até o servidor perceber que a mesma função não tem saída e indica o erro. o que o slicer falou está certo, mesmo que você tire esse erro, se deixar o return true, o monstro vai bater o dano normal, digamos que seja 100, mais o valor do doTargetCombatHealth, que seria 130, totalizando 230, colocando return false, você anula o dano de 100 e aí sim você vai ter a aparência de na verdade o monstro estar tirando 130. usa a script assim: local overflow_protection = {} function onStatsChange(cid, attacker, type, combat, value) if isSummon(attacker) and isMonster(cid) and getPlayerStorageValue(getCreatureMaster(attacker), 17823) >= 1 and type == STATSCHANGE_HEALTHLOSS and value >= 1 then if overflow_protection[attacker] then overflow_protection[attacker] = nil return true end local dmg = math.floor(value * 1.3) overflow_protection[attacker] = true doTargetCombatHealth(attacker, cid, COMBAT_PHYSICALDAMAGE, -dmg, -dmg, CONST_ME_NONE) doPlayerSendTextMessage(getCreatureMaster(attacker), MESSAGE_STATUS_CONSOLE_ORANGE, "Your "..getCreatureName(attacker).." deals "..dmg.." damage.") return false end return true end
    4 pontos
  2. rogeriocene

    Subwat Kamikaze v30

    Novo Lançamento!!!! < King Subwat Kamikaze> OMG Oque Ha de Novo no Server? -Sistem Pet /Pet noob,Pet normal,Pet Descente e Pet Foda -Shadow vip -Shadow vocaçao -Shadow coins e Demonic coins -Novos Sets: Brutal set,Demonic Set,Shadow set e o Melhor De todos King Set E Strike Set E Adicionado Apocalypse Set (19/07/2013) -Hard Quest - Dando Brutal Set -Novo Design Do Templo E Das Hunts Sistema De Refinamento de Set Removido o bug Do GOD -Demonic Quest - Dando demonic Set -Shop De Alavanca -Vocaçoes balanceadas -Novas Runas e armas -Comando !maxlvl -Novo Design -Trainer em cima do templo -Novos Monstros Adicionado Sistema De Cassino Nova Moeda De Jogo..Apocalypse Coin (Bugs De loot em monster Removidos) Imagens: Download : http://www.4shared.com/rar/JbURldl7/novo.html? GOSTOU ??/ + REP AE PLIZ !!!!!BUGS RETIRADOS!!!!!!
    1 ponto
  3. • Pokemon Dash Advanced + Tutorial de instalaçao de website • Eae Galera vou postar o server PDA (POKEMON DASH ADVANCED) Ele contem : •Systems •TV System: 100% •Pokemon With Gender: 100% •Pokemon With Stats: 100% •Catch System: 100% •Boost System: 100% •Go/Back System: 100% •Nick Name: 99% •Ride System: 100% •Surf System: 100% •Fly System: 100% •Evolution System: 100% •Level On Pokemon's ball System: 100% •Pokedex System: 80% •Pokemons Balanced: 90% •Blink System: 100% •Fishing System: 100% •M1-12 System: 00% •Npc Nurse Joy System: 100% •Portrait System: 95% •Order System: 99% •Cut System: 100% •Dig System: 100% •Rock Smash System: 100% •Teleport System: 100% •Flash System: 100% •Limit 6 Pokemons System: 100% •Poke-Look System: 100% •Pokemon Have Level: 100% •Pokemon Have Feelings: 100% Oque Foi Feito . Arrumado Bordas de Surf Retirei as bordas de surf do la na frente do templo Retirado bugs da quests da ball aumentei o cath das balls Nomal Ball Cath 2 Great Ball Cath 3 Super Ball Cath 4 Ultra Ball Cath 5 Foi colocado Bulba, Char e squirtle como poke iniciais Colocados Baus com Premio 50 Hd No templo So Isso . Conta do GOD : God/123456789 Ss Nao vou postar pq nao modifiquei nada Apenas fiz modificaçoes e arrumei umas coisas Download Mapa : http://www.mediafire...urqoaxp9vg7fkd1 Download website v2 : http://www.4shared.c...ketibia_20.html Download Cliente http://www.mediafire.com/?hs2ctw3cr8o1hfk Scan Creditos Mastercraft/brun123 Pelo Mapa Eu por Modificar algumas coisas TUTORIAL DE COMO COLOCAR WESITE EM SEU OT 1º passo aconselho versão mais nova do Xampp 1.7.7 pelo menos e a versão que estou usando mais segura e não tive neum problema com ele ate o momento. depois que instalou o Xampp entre no phpmyadmin do xampp Criar novo Banco de Dados com o nome que preferir de sua escolha carregue o arquivo mysql que geralmente vem com seu servidor de poketibia depois que carregar pegue o arquivo do web site poketibia 1.0 extrair dentro da pasta htdocs dentro do Xampp pronto o resto agora e facil. 2º passo va no navegador e coloque http://localhost automaticmente ele vai pra pagina de instalação do site 1*Imagem 2*Imagem pronto instação completa vamus configurar o restante abre o config.lua de dentro da pasta do web site poketibia 1.0 altere essa linha pois e a coordenada onde o char vai nascer Spoiler obs: o Web site Poketibia 1.0 so suporta ser a configuração do config.lua do seu servidor de poketibia tiver em versão criptografada Sha1 então altere para Sha1 e mysql alte tambem remova o as linhas do config.lua do seu servidor que contenha "--" na frente do nome pode remover não vai aver neum problema na remoção não esqueça de desativar o acc manager do config lua tb pois vai bugar os char e não vão poder entra no servidor a instalação não contem senha de administrador do site precisa mudar o acesso de pagina direto do banco de dados qualquer duvida podem pergunta Creditos Nibelins Pelo Site e Tutorial !
    1 ponto
  4. AlexandreKG

    [Modernacc] Como Editar Shop.

    Fala XTibianos,estou encinando a voces neste tutorial a como editar seu SHOP no ModernACC,bom vi muitas pessoas com este problema,mais em especial vim fazer este tutorial para meu querido amigo josegremista. Bom vamos começar Primeiramente,vá no banco de dados. Se voce esta usando um computador local,provavelmente será acessado por[url="http://localhost/phpmyadmin"] localhost/phpmyadmin.[/url] Se voce esta usando um dedicado/vps voce poderá usar tanto localhost/phpmyadmin quanto seuip.servegame.com/phpmyadmin. Depois de ter acessado o banco de dados vá em sua database e localize a tabela shop_offer.Conforme mostra a figura abaixo: Abra a tabela shop_offer e vc vai ver que vai ter alguns itens adicionados.Bom agora vamos ao que intereça. Para adicionar itens no SHOP voce segue a imagem abaicho. Depois embaixo desses ai. Description - Poem uma descrição do item. Name - Nome do item. OBS:esses dois itens vao aparecer junto no SHOP. Depois disso é so ir em executar e deu pessoal. Para quem nao intendeu muito bem no começo a parte do shop_offer Bom estou disponibilizando minhas 3 tabelas de shop. shop_offer shop_history shop_donation_story Bom é isso ai amigos.Se gostaram do tutorial nao esqueçam de dar um rep ai. Créditos: Mozark001
    1 ponto
  5. 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
  6. 1 ponto
  7. Olá, não sei se estou na área correta. Mas considero isso um script e um sistema. Estavam sempre brigando comigo, porque eu nunca posto nada... enfim esta ai uma utilidade. SISTEMA DE BACKUP DE DATABASE PERFEITO VIA DOS Nome: Sistema de Backup de Data Base Versão: 1.1 Autor: Victor8 Descrição: Através de um batch script (Comandos de DOS) ele faz um backup inteiro da sua data base. Ele cria uma pasta com o dia e a hora que foi feito o backup. Totalmente diferente e na minha opinião melhor que o feito através do php, porque com esse sistema você copia a data base em si, inteira. Agora você pode dormir tranquilo. Requerimentos para usar - Banco de dados MYSQL. - Sistema operacional Windows. Tutorial de como usar 1- Copie o código que esta no fim do tópico. 2- Abra o bloco de notas e cole o código lá. 3 - Altere as duas primeiras linhas do código com a sua configuração. set pasta_do_mysql_no_xampp=C:\xampp\mysql\data\itibia set pasta_aonde_vai_ir_os_arquivos_de_backup=C:\Documents and Settings\Administrador\Desktop\Backup mysql Atenção ao editar suas configurações! Na primeira linha coloque a pasta do banco de dados que você quer fazer backup. Normalmente ela esta em C:\xampp\mysql\data O nome do meu banco de dados é itibia. Então eu coloquei : C:\xampp\mysql\data\itibia Na segunda linha coloque o local que você quer que seja criado a pasta de backup. Eu coloquei: C:\Documents and Settings\Administrador\Desktop\Backup mysql Vamus dar um exemplo. Se o nome do meu banco de dados fosse The forgoten server E se eu quisesse que a pasta de backup fosse para o desktop ficaria assim: set pasta_do_mysql_no_xampp=C:\xampp\mysql\data\The forgoten server set pasta_aonde_vai_ir_os_arquivos_de_backup=C:\Documents and Settings\Administrador\Desktop 4 - Depois de configurado... Você salva o documento (control+s). E no nome do arquivo coloque: Backup da database.bat E pronto! Toda vez que você clicar nesse arquivo... Ele vai copiar a sua database para uma pasta. Ai se dar algum problema com o OT. Você já tem salvo ;D Dica Utilize esse programa com as tarefas agendadas do windows. Ai você escolhe um horário por dia.. que ele se executara automaticamente. No meu ot, ele esta para fazer o backup todo dia as 6 horas da manha e as 6 horas da noite. Fim. Resultado: Código : (Linguagem batch script CMD Command) set pasta_do_mysql_no_xampp=C:\xampp\mysql\data\itibia set pasta_aonde_vai_ir_os_arquivos_de_backup=C:\Documents and Settings\Administrador\Desktop\Backup mysql time /t>%temp%\# set /p hora=<%temp%\# set hora=%hora::=h%min for /f "tokens=2 delims= " %%a in ('date /t') do set data=%%a set data=%data:/=-% @echo off cls cd \ title Sistema de Backup de Data Base echo. Echo ----------- Sistema de backup de database ----------- echo. echo. echo Verificando as configuracoes das pastas que voce colocou... echo. msg/time:2 /w * "Aguarde..." if exist "%pasta_do_mysql_no_xampp%" (goto ok) else (goto naook) :ok if exist "%pasta_aonde_vai_ir_os_arquivos_de_backup%" (goto ok1) else (goto naook1) :naook cls echo. Echo ----------- Sistema de backup de database ----------- echo. echo. echo A pasta %pasta_do_mysql_no_xampp% echo Parece ser invalida, verifique o endereco. echo. msg/time:2 /w * "Fechando..." exit :naook1 cls echo. Echo ----------- Sistema de backup de database ----------- echo. echo. echo A pasta %pasta_aonde_vai_ir_os_arquivos_de_backup% echo Parece ser invalida, verifique o endereco. echo. msg/time:2 /w * "Fechando..." exit :ok1 cls echo. Echo ----------- Sistema de backup de database ----------- echo. echo. echo As suas configuracoes parecem estar corretas. echo Iniciando as tarefas.. echo. msg/time:2 /w * "Aguarde..." cls Echo ----------- Sistema de backup de database ----------- echo. echo. echo Fazendo o backup dos arquivos... echo. echo. md "%pasta_aonde_vai_ir_os_arquivos_de_backup%\backup" copy "%pasta_do_mysql_no_xampp%" "%pasta_aonde_vai_ir_os_arquivos_de_backup%\backup" ren "%pasta_aonde_vai_ir_os_arquivos_de_backup%\backup" "Backup(%data%)(%hora%)" msg/time:5 /w * "Fazendo o backup dos arquivos..." echo. echo. msg/time:2 /w * "Aguarde..." cls echo. Echo ----------- Sistema de backup de database ----------- echo. echo. echo Backup completado! echo. echo. msg/time:2 /w * "Fechando..."
    1 ponto
  8. • NARUTO SEVEN - DOWNLOAD • Tópico e Links atualizados: 27/02/17 • Menu: ├ Informações; ├ Jutsus; ├ Prints; ├ Download; └ Creditos. • Informações Basicas • • Jutsus Do Servidor • • PrintScreen • • Download's • Servidor 8.54 + Cliente (MediaFIRE) http://www.mediafire.com/file/99upszbnbb7aklb/Nrtao V.2.rar Senha Para Entrar No Server / (Do GOD): god / god • Creditos • Stigal, Avuenja.
    1 ponto
  9. comedinhasss

    Passando Um Otserv Para 8.60

    Fala ae galerinha do xtibia... Bom vejo que muitos programadores ainda estão em dúvida para passar o seu ot para 8.6 ... Bom então estou fazendo um tutorial... Testado em tfs 0.3.6pl1 Sources: Em House.cpp: Procure: std::string metachars = ".[{}()\\+|^{:content:}quot;; Substitua por: std::string metachars = ".[{}()\\+|^$*?"; Procure: if(metachars.find(*it) != std::string::npos) outExp += "\\"; Subistitua por: if(metachars.find(*it) != std::string::npos) outExp += ""; Procure: replaceString(outExp, "*", ".*"); replaceString(outExp, "?", ".?"); Subistitua por: replaceString(outExp, "*", ""); replaceString(outExp, "?", ""); Em resources.h: Procure: #define CLIENT_VERSION_MIN 854 #define CLIENT_VERSION_MAX 854 #define CLIENT_VERSION_STRING "Only clients with protocol 8.54 are allowed!" #define STATUS_SERVER_NAME "TheForgottenServer" #define STATUS_SERVER_VERSION "0.3.6" #define STATUS_SERVER_CODENAME "Crying Damson" #define STATUS_SERVER_PROTOCOL "8.54" Substitua por: #define CLIENT_VERSION_MIN 860 #define CLIENT_VERSION_MAX 860 #define CLIENT_VERSION_STRING "Only clients with protocol 8.60 are allowed!" #define STATUS_SERVER_NAME "TheForgottenServer" #define STATUS_SERVER_VERSION "0.3.6" #define STATUS_SERVER_CODENAME "Crying Damson" #define STATUS_SERVER_PROTOCOL "8.60" Em itemloader.h: Procure: CLIENT_VERSION_854 = 16 Substitua e adicione por: CLIENT_VERSION_854 = 16, CLIENT_VERSION_855 = 17, CLIENT_VERSION_856 = 18, CLIENT_VERSION_857 = 19, CLIENT_VERSION_860 = 20 Em items.cpp: Procure: else if(Items::dwMinorVersion != CLIENT_VERSION_854) Substitua e adicione por: else if(Items::dwMinorVersion != 19) Em protocolgame.cpp: Procure: void ProtocolGame::parseAttack(NetworkMessage& msg) { uint32_t creatureId = msg.GetU32(); addGameTask(&Game::playerSetAttackedCreature, player->getID(), creatureId); } Substitua por: void ProtocolGame::parseAttack(NetworkMessage& msg) { uint32_t creatureId = msg.GetU32(); msg.GetU32(); msg.GetU32(); addGameTask(&Game::playerSetAttackedCreature, player->getID(), creatureId); } Também procure: void ProtocolGame::sendCancelTarget() { NetworkMessage_ptr msg = getOutputBuffer(); if(msg) { TRACK_MESSAGE(msg); msg->AddByte(0xA3); } } Substitua por: void ProtocolGame::sendCancelTarget() { NetworkMessage_ptr msg = getOutputBuffer(); if(msg) { TRACK_MESSAGE(msg); msg->AddByte(0xA3); msg->AddU32(0); } } Em spells.cpp (somente em spells.cpp) Procure: g_game.transformItem(item, item->getID(), std::max((int32_t)0, ((int32_t)item->getCharges()) - 1)); Substitua por: g_game.transformItem(item, item->getID(), std::max((int32_t)0, ((int32_t)item->getItemCount()) - 1)); Em tools.cpp: Procure: {"insects", MAGIC_EFFECT_INSECTS} Substitua por: {"insects", MAGIC_EFFECT_INSECTS}, {"dragonhead", MAGIC_EFFECT_DRAGONHEAD} Em const.h: Procure: MAGIC_EFFECT_INSECTS = 0x44, //68 MAGIC_EFFECT_LAST = MAGIC_EFFECT_INSECTS, Substitua por: MAGIC_EFFECT_INSECTS = 0x44, //68, MAGIC_EFFECT_DRAGONHEAD = 0x45, //69 MAGIC_EFFECT_LAST = MAGIC_EFFECT_DRAGONHEAD, Em game.cpp: Procure: void Game::showHotkeyUseMessage(Player* player, Item* item) { int32_t subType = -1; if(item->hasSubType() && !item->hasCharges()) subType = item->getSubType(); const ItemType& it = Item::items[item->getID()]; uint32_t count = player->__getItemTypeCount(item->getID(), subType, false); char buffer[40 + it.name.size()]; if(count == 1) sprintf(buffer, "Using the last %s...", it.name.c_str()); else sprintf(buffer, "Using one of %d %s...", count, it.pluralName.c_str()); player->sendTextMessage(MSG_INFO_DESCR, buffer); } Substitua por: void Game::showHotkeyUseMessage(Player* player, Item* item) { const ItemType& it = Item::items[item->getID()]; uint32_t count = player->__getItemTypeCount(item->getID(), -1); char buffer[40 + it.name.size()]; if(count == 1) sprintf(buffer, "Using the last %s...", it.name.c_str()); else sprintf(buffer, "Using one of %d %s...", count, it.pluralName.c_str()); player->sendTextMessage(MSG_INFO_DESCR, buffer); } Em npc.cpp: Procure: li.itemId = intValue; Embaixo adicione: const ItemType& it = Item::items[li.itemId]; Também procure: if(readXMLInteger(tmpNode, "subtype", intValue)) li.subType = intValue; Embaixo adicione: else { if(it.stackable) li.subType = 1; else if(it.isFluidContainer() || it.isSplash()) li.subType = 0; } Em item.cpp: Procure: s << "("; if(!it.runeSpellName.empty()) s << "\"" << it.runeSpellName << "\", "; s << "Charges:" << subType <<")"; Embaixo adicione: if(!it.runeSpellName.empty()) s << "(\"" << it.runeSpellName << "\")"; Em luascript.cpp: Procure por: //getCreatureHealth(cid) lua_register(m_luaState, "getCreatureHealth", LuaScriptInterface::luaGetCreatureHealth); Embaixo adicione: //getItemParent(uid) lua_register(m_luaState, "getItemParent", LuaScriptInterface::luaGetItemParent); Também procure por: int32_t LuaScriptInterface::luaGetCreatureHealth(lua_State* L) { //getCreatureHealth(cid) ScriptEnviroment* env = getEnv(); if(Creature* creature = env->getCreatureByUID(popNumber(L))) lua_pushnumber(L, creature->getHealth()); else { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); } return 1; } Substitua por: int32_t LuaScriptInterface::luaGetItemParent(lua_State* L) { //getItemParent(uid) ScriptEnviroment* env = getEnv(); Item* item = env->getItemByUID(popNumber(L)); if(!item) { errorEx(getError(LUA_ERROR_ITEM_NOT_FOUND)); lua_pushnil(L); return 1; } Item* container = item->getParent()->getItem(); pushThing(L, container, env->addThing(container)); return 1; } Em luascript.h: Procure por: static int32_t luaDoRemoveItem(lua_State* L); Embaixo adicione: static int32_t luaGetItemParent(lua_State* L); Pasta Data: Na pasta data\actions\scripts\liquids\potions.lua: Delete tudo e adicione: local config = { removeOnUse = "no", usableOnTarget = "yes", -- can be used on target? (fe. healing friend) splashable = "no", realAnimation = "no", -- make text effect visible only for players in range 1x1 healthMultiplier = 1.0, manaMultiplier = 1.0 } config.removeOnUse = getBooleanFromString(config.removeOnUse) config.usableOnTarget = getBooleanFromString(config.usableOnTarget) config.splashable = getBooleanFromString(config.splashable) config.realAnimation = getBooleanFromString(config.realAnimation) local POTIONS = { [8704] = {empty = 7636, splash = 2, health = {50, 100}}, -- small health potion [7618] = {empty = 7636, splash = 2, health = {100, 200}}, -- health potion [7588] = {empty = 7634, splash = 2, health = {200, 400}, level = 50, vocations = {3, 4, 7, 8}, vocStr = "knights and paladins"}, -- strong health potion [7591] = {empty = 7635, splash = 2, health = {500, 700}, level = 80, vocations = {4, 8}, vocStr = "knights"}, -- great health potion [8473] = {empty = 7635, splash = 2, health = {800, 1000}, level = 130, vocations = {4, 8}, vocStr = "knights"}, -- ultimate health potion [7620] = {empty = 7636, splash = 7, mana = {70, 130}}, -- mana potion [7589] = {empty = 7634, splash = 7, mana = {110, 190}, level = 50, vocations = {1, 2, 3, 5, 6, 7}, vocStr = "sorcerers, druids and paladins"}, -- strong mana potion [7590] = {empty = 7635, splash = 7, mana = {200, 300}, level = 80, vocations = {1, 2, 5, 6}, vocStr = "sorcerers and druids"}, -- great mana potion [8472] = {empty = 7635, splash = 3, health = {200, 400}, mana = {110, 190}, level = 80, vocations = {3, 7}, vocStr = "paladins"} -- great spirit potion } local exhaust = createConditionObject(CONDITION_EXHAUST) setConditionParam(exhaust, CONDITION_PARAM_TICKS, (getConfigInfo('timeBetweenExActions') - 100)) function onUse(cid, item, fromPosition, itemEx, toPosition) local potion = POTIONS[item.itemid] if(not potion) then return false end if(not isPlayer(itemEx.uid) or (not config.usableOnTarget and cid ~= itemEx.uid)) then if(not config.splashable) then return false end if(toPosition.x == CONTAINER_POSITION) then toPosition = getThingPos(item.uid) end doDecayItem(doCreateItem(2016, potion.splash, toPosition)) doTransformItem(item.uid, potion.empty) return true end if(hasCondition(cid, CONDITION_EXHAUST_HEAL)) then doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED) return true end if(((potion.level and getPlayerLevel(cid) < potion.level) or (potion.vocations and not isInArray(potion.vocations, getPlayerVocation(cid)))) and not getPlayerCustomFlagValue(cid, PLAYERCUSTOMFLAG_GAMEMASTERPRIVILEGES)) then doCreatureSay(itemEx.uid, "Only " .. potion.vocStr .. (potion.level and (" of level " .. potion.level) or "") .. " or above may drink this fluid.", TALKTYPE_ORANGE_1) return true end local health = potion.health if(health and not doCreatureAddHealth(itemEx.uid, math.ceil(math.random(health[1], health[2]) * config.healthMultiplier))) then return false end local mana = potion.mana if(mana and not doPlayerAddMana(itemEx.uid, math.ceil(math.random(mana[1], mana[2]) * config.manaMultiplier))) then return false end doSendMagicEffect(getThingPos(itemEx.uid), CONST_ME_MAGIC_BLUE) if(not realAnimation) then doCreatureSay(itemEx.uid, "Aaaah...", TALKTYPE_ORANGE_1) else for i, tid in ipairs(getSpectators(getCreaturePosition(cid), 1, 1)) do if(isPlayer(tid)) then doCreatureSay(itemEx.uid, "Aaaah...", TALKTYPE_ORANGE_1, false, tid) end end end doAddCondition(cid, exhaust) local v = getItemParent(item.uid) if(not potion.empty or config.removeOnUse) then return true end if fromPosition.x == CONTAINER_POSITION then for _, slot in ipairs({CONST_SLOT_LEFT, CONST_SLOT_RIGHT, CONST_SLOT_AMMO}) do local tmp = getPlayerSlotItem(cid, slot) if tmp.itemid == potion.empty and tmp.type < 100 then doChangeTypeItem(item.uid, item.type - 1) return getPlayerFreeCap(cid) >= getItemInfo(potion.empty).weight and doChangeTypeItem(tmp.uid, tmp.type + 1) or doPlayerAddItem(cid, potion.empty, 1) end end else doChangeTypeItem(item.uid, item.type - 1) doCreateItem(potion.empty, 1, fromPosition) return true end if v.uid == 0 then if item.type == 1 and isInArray({CONST_SLOT_LEFT, CONST_SLOT_RIGHT, CONST_SLOT_AMMO}, fromPosition.y) then doTransformItem(item.uid, potion.empty) else -- serversided autostack should take care of this doPlayerAddItem(cid, potion.empty, 1) doChangeTypeItem(item.uid, item.type - 1) end return true else doChangeTypeItem(item.uid, item.type - 1) local size = getContainerSize(v.uid) for i = 0, size-1 do local tmp = getContainerItem(v.uid, i) if tmp.itemid == potion.empty and tmp.type < 100 then return getPlayerFreeCap(cid) >= getItemInfo(potion.empty).weight and doChangeTypeItem(tmp.uid, tmp.type + 1) or doPlayerAddItem(cid, potion.empty, 1) end end if getContainerSize(v.uid) < getContainerCap(v.uid) then doAddContainerItem(v.uid, potion.empty) else doPlayerAddItem(cid, potion.empty, 1) end end return true end Na pasta data\lib\000-constant.lua: Procure maleOutfits = {128, 129, 130, 131, 132, 133, 134, 143, 144, 145, 146, 151, 152, 153, 154, 251, 268, 273, 278, 289, 325, 328, 335} femaleOutfits = {136, 137, 138, 139, 140, 141, 142, 147, 148, 149, 150, 155, 156, 157, 158, 252, 269, 270, 279, 288, 324, 329, 336} Subistitua por: maleOutfits = {128, 129, 130, 131, 132, 133, 134, 143, 144, 145, 146, 151, 152, 153, 154, 251, 268, 273, 278, 289, 325, 328, 335, 367} femaleOutfits = {136, 137, 138, 139, 140, 141, 142, 147, 148, 149, 150, 155, 156, 157, 158, 252, 269, 270, 279, 288, 324, 329, 336, 366} Em Data\xml\outfit.xml: Delete tudo e Adicione <?xml version="1.0"?> <outfits> <outfit id="1"> <list gender="0" lookType="136" name="Citizen"/> <list gender="1" lookType="128" name="Citizen"/> </outfit> <outfit id="2"> <list gender="0" lookType="137" name="Hunter"/> <list gender="1" lookType="129" name="Hunter"/> </outfit> <outfit id="3"> <list gender="0" lookType="138" name="Mage"/> <list gender="1" lookType="130" name="Mage"/> </outfit> <outfit id="4"> <list gender="0" lookType="139" name="Knight"/> <list gender="1" lookType="131" name="Knight"/> </outfit> <outfit id="5" premium="yes"> <list gender="0" lookType="140" name="Noblewoman"/> <list gender="1" lookType="132" name="Nobleman"/> </outfit> <outfit id="6" premium="yes"> <list gender="0" lookType="141" name="Summoner"/> <list gender="1" lookType="133" name="Summoner"/> </outfit> <outfit id="7" premium="yes"> <list gender="0" lookType="142" name="Warrior"/> <list gender="1" lookType="134" name="Warrior"/> </outfit> <outfit id="8" premium="yes"> <list gender="0" lookType="147" name="Barbarian"/> <list gender="1" lookType="143" name="Barbarian"/> </outfit> <outfit id="9" premium="yes"> <list gender="0" lookType="148" name="Druid"/> <list gender="1" lookType="144" name="Druid"/> </outfit> <outfit id="10" premium="yes"> <list gender="0" lookType="149" name="Wizard"/> <list gender="1" lookType="145" name="Wizard"/> </outfit> <outfit id="11" premium="yes"> <list gender="0" lookType="150" name="Oriental"/> <list gender="1" lookType="146" name="Oriental"/> </outfit> <outfit id="12" premium="yes"> <list gender="0" lookType="155" name="Pirate"/> <list gender="1" lookType="151" name="Pirate"/> </outfit> <outfit id="13" premium="yes"> <list gender="0" lookType="156" name="Assassin"/> <list gender="1" lookType="152" name="Assassin"/> </outfit> <outfit id="14" premium="yes"> <list gender="0" lookType="157" name="Beggar"/> <list gender="1" lookType="153" name="Beggar"/> </outfit> <outfit id="15" premium="yes"> <list gender="0" lookType="158" name="Shaman"/> <list gender="1" lookType="154" name="Shaman"/> </outfit> <outfit id="16" premium="yes"> <list gender="0" lookType="252" name="Norsewoman"/> <list gender="1" lookType="251" name="Norseman"/> </outfit> <outfit id="17" premium="yes"> <list gender="0" lookType="269" name="Nightmare"/> <list gender="1" lookType="268" name="Nightmare"/> </outfit> <outfit id="18" premium="yes"> <list gender="0" lookType="270" name="Jester"/> <list gender="1" lookType="273" name="Jester"/> </outfit> <outfit id="19" premium="yes"> <list gender="0" lookType="279" name="Brotherhood"/> <list gender="1" lookType="278" name="Brotherhood"/> </outfit> <outfit id="20" premium="yes"> <list gender="0" lookType="288" name="Demonhunter"/> <list gender="1" lookType="289" name="Demonhunter"/> </outfit> <outfit id="21" premium="yes"> <list gender="0" lookType="324" name="Yalaharian"/> <list gender="1" lookType="325" name="Yalaharian"/> </outfit> <outfit id="22" premium="yes"> <list gender="0" lookType="336" name="Warmaster"/> <list gender="1" lookType="335" name="Warmaster"/> </outfit> <outfit id="23" default="0"> <list gender="0" lookType="329" name="Wife"/> <list gender="1" lookType="328" name="Husband"/> </outfit> <outfit id="24" premium="yes"> <list gender="0" lookType="366" name="Wayfarer"/> <list gender="1" lookType="367" name="Wayfarer"/> </outfit> </outfits> Em data\items\items.xml: Delete onde estão configurada as runas a seguinte linha (Em Todas) <attribute key="charges" value="x" /> X: Qualquer numero Arquivos para procurar e repassar: Bom gente eu não gravei como era o antigo desse então procure uma frase e repasse Em container.cpp: Procure e repasse: Cylinder* Container::__queryDestination(int32_t& index, const Thing* thing, Item** destItem, uint32_t&) { if(index == 254 /*move up*/) { index = INDEX_WHEREEVER; *destItem = NULL; Container* parentContainer = dynamic_cast<Container*>(getParent()); if(parentContainer) return parentContainer; return this; } else if(index == 255 /*add wherever*/){ index = INDEX_WHEREEVER; *destItem = NULL; } else if(index >= (int32_t)capacity()){ /* if you have a container, maximize it to show all 20 slots then you open a bag that is inside the container you will have a bag with 8 slots and a "grey" area where the other 12 slots where from the container if you drop the item on that grey area the client calculates the slot position as if the bag has 20 slots */ index = INDEX_WHEREEVER; *destItem = NULL; } const Item* item = thing->getItem(); if(item == NULL){ return this; } if(item->isStackable()){ if(item->getParent() != this){ //try find a suitable item to stack with uint32_t n = 0; for(ItemList::iterator cit = itemlist.begin(); cit != itemlist.end(); ++cit){ if((*cit) != item && (*cit)->getID() == item->getID() && (*cit)->getItemCount() < 100){ *destItem = (*cit); index = n; return this; } ++n; } } } if(index != INDEX_WHEREEVER){ Thing* destThing = __getThing(index); if(destThing) *destItem = destThing->getItem(); Cylinder* subCylinder = dynamic_cast<Cylinder*>(*destItem); if(subCylinder){ index = INDEX_WHEREEVER; *destItem = NULL; return subCylinder; } } return this; } Em item.cpp: Procure e repasse: void Item::setDefaultSubtype() { setItemCount(1); const ItemType& it = items[id]; if(it.charges) setCharges(it.charges); } Em player.cpp: Procure e repasse: Cylinder* Player::__queryDestination(int32_t& index, const Thing* thing, Item** destItem, uint32_t& flags) { if(index == 0 /*drop to capacity window*/ || index == INDEX_WHEREEVER){ *destItem = NULL; const Item* item = thing->getItem(); if(item == NULL){ return this; } //find an appropiate slot std::list<Container*> containerList; for(int i = SLOT_FIRST; i < SLOT_LAST; ++i){ Item* inventoryItem = inventory[i]; if(inventoryItem == tradeItem){ continue; } if(inventoryItem == tradeItem){ continue; } if(inventoryItem){ //try find an already existing item to stack with if(inventoryItem != item && item->isStackable() && inventoryItem->getID() == item->getID() && inventoryItem->getItemCount() < 100){ *destItem = inventoryItem; index = i; return this; } //check sub-containers else if(Container* subContainer = inventoryItem->getContainer()){ Cylinder* tmpCylinder = NULL; int32_t tmpIndex = INDEX_WHEREEVER; Item* tmpDestItem = NULL; tmpCylinder = subContainer->__queryDestination(tmpIndex, item, &tmpDestItem, flags); if(tmpCylinder && tmpCylinder->__queryAdd(tmpIndex, item, item->getItemCount(), flags) == RET_NOERROR){ index = tmpIndex; *destItem = tmpDestItem; return tmpCylinder; } containerList.push_back(subContainer); } } //empty slot else if(__queryAdd(i, item, item->getItemCount(), flags) == RET_NOERROR){ index = i; *destItem = NULL; return this; } } //check deeper in the containers for(std::list<Container*>::iterator it = containerList.begin(); it != containerList.end(); ++it){ for(ContainerIterator iit = (*it)->begin(); iit != (*it)->end(); ++iit){ if(Container* subContainer = (*iit)->getContainer()){ if(subContainer == tradeItem){ continue; } Cylinder* tmpCylinder = NULL; int32_t tmpIndex = INDEX_WHEREEVER; Item* tmpDestItem = NULL; tmpCylinder = subContainer->__queryDestination(tmpIndex, item, &tmpDestItem, flags); if(tmpCylinder && tmpCylinder->__queryAdd(tmpIndex, item, item->getItemCount(), flags) == RET_NOERROR){ index = tmpIndex; *destItem = tmpDestItem; return tmpCylinder; } } } } return this; } Thing* destThing = __getThing(index); if(destThing) *destItem = destThing->getItem(); Cylinder* subCylinder = dynamic_cast<Cylinder*>(destThing); if(subCylinder){ index = INDEX_WHEREEVER; *destItem = NULL; return subCylinder; } else return this; } Downloads: Items.otb (8.6): Clique Aqui Items.xml (8.6): Clique aqui Creditos á: darkhaos - Sources Tauku - Sources BlueSilver - Sources Doidin - Data Cykotitan (O do xtibia) - Sources/Data Eu - Data/Sources Outros - Data/Sources Tutorial atualizado: 24/09/2010 Agora Funciona 99,9% perfeito (deve estar faltando um detalhe ou outro) Recomendo fazer tudo o que está mandando para não ocorrer erros
    1 ponto
  10. Gpedro

    [Gesior Aac] Bug Reports

    Bug Records OU SIMPLESMENTE BUGPROGRESS Este sistema foi criado para auxiliar os criadores de servidores a gerenciar os problemas e bugs encontrados no servidor ou site. O objetivo desta página, é que você tenha uma gestão interna de progressos dos bugs, se já foi corrigido, esta sendo corrigido ou ainda não foi corrigido. A página é somente interna, somente para os administradores do site, porque se fosse aberto ao público e houvesse um bug grave de NPC, clone items, eles iriam visualizar a proveitar. VAMOS lá! Instalação em 5 passos Download bugreport by gpedro.zip Execute Z_BUG_LOGS.SQL em seu banco de dados Extraia BUGRECORDS.PHP E A PASTA IMAGES para a pasta www Abra o INDEX.PHP, procure por CHARACTERS.PHP e logo abaixo adicione: case "bugrecords"; $topic = "Bug Records"; $subtopic = "bugrecords"; include("bugrecords.php"); break; exemplo: case "characters"; $topic = "Characters"; $subtopic = "characters"; include("characters.php"); break; case "bugrecords"; $topic = "Bug Records"; $subtopic = "bugrecords"; include("bugrecords.php"); break; Se divirtam e aproveitem~ OBSERVAÇÕES: ESTE SISTEMA DEVE SER DISTRIBUÍDO GRATUITAMENTE. CASO FOR POSTAR EM OUTROS FORUMS, PEDIR AUTORIZAÇÃO DE DISTRIBUIÇÃO PARA MIM.
    1 ponto
  11. Eu gostaria de compartilhar com vocês como é interessante que Atlantida World servidor. Ao mesmo tempo o projeto nasce de um grande OTS . Atlantyda World tratou-se um super server que pertencia a uma equipa polaca, tive o prazer de jogar nele, mas ao final de algum tempo fechou. O server esteve online varios meses, no entanto, alguém nao se apercebeu que as más escolhas da administração resultou em uma grande queda. Pack Full contém literalmente tudo para gozar as suas Atlântida! Mapa, scripts, actions, monters,etc! O importante é tudo isso vem de uma fonte legal como era na administração.Pessoalmente, eu não tenho tempo para abrir de novo este OTS por isso quis compartilhar com vocês tudo o que qualquer um de vocês pode reconstruir o que foi acima no fumo! Esta imagem é reduzida. Clique nesta barra para ver a imagem completa. Imagem original: 2202x1392. Esta imagem é reduzida. Clique nesta barra para ver a imagem completa. Imagem original: 801x586. Esta imagem é reduzida. Clique nesta barra para ver a imagem completa. Imagem original: 801x586. Esta imagem é reduzida. Clique nesta barra para ver a imagem completa. Imagem original: 801x586. Esta imagem é reduzida. Clique nesta barra para ver a imagem completa. Imagem original: 801x586. Download ou Download ​ Vírus Total Depois de vários pedidos decidi colocar um executável compactivel com windows, mas aconselho a configurar os vossos itens aconselho a utilização de rook para um maior rpg, bom jogo não esqueçam de um comentário e do REP+. Download Com exe e dlls Se tiver alguma dificuldade reporte-me, server configurado para ligar um mysql.
    1 ponto
  12. LuckOake

    Vampire System

    Oi povo. Adivinha Sim, eu trouxe (novamente) mais um sistema que posso garantir que você vai gostar. Mas qualé né, povo. Só eu que posto coisa decente aqui? A última vez que vi alguém que não seja eu postando coisa útil na área de Scripting foi o Caotic com o Report System Beta. Tirando isso, tem semanas (ou até meses) que não vejo algo bom, divertido e original. Vamos lá, né, ficar lamentando aqui não vale a pena. O que é: Script: Instalando (Importantíssimo): Configurando: Imagens: Observações: - O MOD pode conflitar caso você use algum REP System ou Frag System que use onLook. Créditos: LuckOake -- Pelo sistema
    1 ponto
  13. Elrien

    [Tutorial] Área De Gelo

    Bom nesse tópico você irá aprender a fazer uma area de gelo , esse tutorial nao muito indicado para iniciantes, mais dá pra pegar boa parte dele como um exemplo para você conseguir subir na carreira de mapper. Parte #1 Parte#2 Parte#3 Parte#4 Parte#5
    1 ponto
  14. Jeffee90

    Uma Quest Legal Demaiis

    Uma QuesT Meio Diferente [ DESERT QUEST ] NAO SEI SE JA EXISTE UMA ASSIM AQUI NO XTIBIA [^.^] Vou Explicar Os Detalhes No Final. Crie Um Arquivo Na Pasta Actions Chamado [ desertquest.lua ] e Coloque Isso Dentro. <--------> Depois Va Em Action.Xml e Adicione a Seguinte Tag. Editem De Acordo Com Sua Vontade .. Meu Primeiro Topico Desculpe Se Poste Em Lgar Errado ou Qualquer Coisa .. GOSTOU ? REP+ :button_ok: Valeus ..
    1 ponto
  15. Vodkart

    Mensagem De Preço

    troca doPlayerSendTextMessage(cid,22,"você comprou um " .. getItemNameById(lever[item.actionid][2])) por doPlayerSendTextMessage(cid,22,"você comprou um "..getItemNameById(lever[item.actionid][2]).." por "..lever[item.actionid][1].." " ..getItemNameById(coin))
    1 ponto
  16. o teu script editado ali era pra da certo.. oq esta acontecendo? n cria o tp ou oq?
    1 ponto
  17. Deadpool

    Retirando Item

    Vai em data/item.xml abre aperta ctrl+f e procura pelo nome, dai voce tira exemplo: <item fromid="371" toid="382" article="a" name="stone wall" /> <item id="383" article="a" name="hole"> <attribute key="floorchange" value="down" /> </item> TIra até </item> e pronto
    1 ponto
  18. DiogoTemporario

    Duvida

    n sei, mas esse tópico no lixo
    1 ponto
  19. beto06

    [Show Off] Beto

    começando a segunda cidade do meu mapa: http://1.imgland.net/lR3mKM.png
    1 ponto
  20. Vodkart

    EKZ No LOL @

    teemo é bom no lvl baixo, ele tem um hit bom, mas se o teemo tiver farmado e o outro time tbm, qualquer um mata o teemo, pois ele é papel só jogo 5x5 tbm
    1 ponto
  21. Data/Lib Configuration.lua Aperta ctrl+f e Procura : PlayerSpeed = 200 No 200 é a velocidade
    1 ponto
  22. Deadpool

    Pokemon Portal Teleports!

    Amigo Isso É Flood, E Parabens A Equipe Do PPortal, OtServe Muito Bom!!
    1 ponto
  23. Verifique se o IP Changer é compatível com a versão do cliente ou se está configurado pra esta versão. Essa mensagem não deveria aparecer com ele realmente funcionando. Verifique também a área correta quando postar algo, você postou na área errada. Abraço.
    1 ponto
  24. AlexandreKG

    [Modernacc] Como Editar Shop.

    Aqui está normal amigo. Olhai
    1 ponto
  25. Fiz uma cagada bonita agora hueuheu: function onSay(cid, words, param) local str = "" str = "--[ Jogadores que tem promotion no servidor ]--\n\n" local qry = db.getResult("SELECT `name` FROM `players` WHERE `vocation` > 4 ORDER BY `level` DESC;") if (qry:getID() ~= -1) then while true do str = str .. "\n " .. qry:getDataString("name") .. "." if not(qry:next()) then break end end qry:free() end doPlayerSendTextMessage(cid, 27, str) return true end
    1 ponto
  26. creaturescripts.xml: <event type="login" name="Outfits" script="outfits.lua"/> outfits.lua: Configure aqui: a = { -- [iD da vocation] = Outfit [1] = 128, [2] = 129, [3] = 130, }
    1 ponto
  27. Olá usuario seu topico se encontra fora das regras. Leia as regras do forum antes de postar. Area Certa. Jogos Reportado para moverem. Obrigado,Mozark001.
    1 ponto
  28. LuckOake

    Caixa Eletrônico

    Rapaz, seguinte, tô vendo que MOD tá bugando no seu server. Vamo instalar por lua mesmo. actions.xml: <action itemid="xxxx" script="card.lua"/> Substitua o xxxx pelo id do cartão. card.lua: talkactions.xml: <talkaction words="!caixa" script="caixa.lua"/> caixa.lua: Você configura a pos do banco na talkaction, nessa linha: bank_pos = {x = 78, y = 39, z = 7} -- Position da entrada do banco E o ID do caixa eletrônico na action, nessa linha: caixa_id = 1354 -- Id do Caixa Eletrônico
    1 ponto
  29. vital900

    Subwat Kamikaze v30

    Isto não é um mapa, tópico movido para aprovação de downloads. vesão deste mapa: 8.60
    1 ponto
  30. SirMarrone

    2 Npcs Que Compram Armas E Armaduras

    Bom pessoal eu mesmo fiz ae n me do mt bem com area malz tentar prestar mais atenção aki vai meus npcs que criaei mo xatice se alguem quiser usar esta aqui Comprador de armas Comprador de Armaduras e o default.lua tds devem ter é o arquivo que vai em npc/script mas se n tiverem eu dexo aki tbm Não Copie Exclusividade Xtibia Se gostar da +++
    1 ponto
  31. vital900

    Apresentação Geral

    Cara, não tem como usar tal ideia, porque tudo esta inacabado.. Mapa em torno duns 55%, características em 70% assim vai.. Posso ver na possibilidade de criar um gráfico para vocês acompanharem (ideia a se discutir), caso gostem desta ideia dar +rep (favor não comentar algo tipo ideia aprovada e talz, por gerar spam) ou enviar uma PM com título Elysium, e escrever ideia aprovada. Atendendo a pedidos.. Adicionei um gráfico para melhor acompanhar o desenvolvimento do servidor. Tentarei atualiza-lo quinzenalmente.
    1 ponto
  32. Vodkart

    Pedido Script Rank Vodkart.

    local config = { MaxPlayer = 20, fight_skills = { ['fist'] = 0, ['club'] = 1, ['sword'] = 2, ['axe'] = 3, ['distance'] = 4, ['shielding'] = 5, ['fishing'] = 6, ['dist'] = 4, ['shield'] = 5, ['fish'] = 6, }, other_skills = { [''] = "level", ['level'] = "level", ['magic'] = "maglevel", ['health'] = "healthmax", ['mana'] = "manamax", ['reset'] = "reset" }, vocations = { ['sorcerer'] = {1,5}, ['druid'] = {2,6}, ['paladin'] = {3,7}, ['knight'] = {4,8} }, storages = { ['frags'] = 824544 } } function onSay(cid, words, param) local param,str = string.lower(param),"" if not config.fight_skills[param] and not config.other_skills[param] and not config.vocations[param] and not config.storages[param] then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "este rank não existe.") return true end str = "--[ RANK "..(param == "" and "LEVEL" or string.upper(param)).." ]--\n\n" query = config.fight_skills[param] and db.getResult("SELECT `player_id`, `value` FROM `player_skills` WHERE `skillid` = "..config.fight_skills[param].." ORDER BY `value` DESC;") or config.other_skills[param] and db.getResult("SELECT `name`, `"..config.other_skills[param].."` FROM `players` WHERE `id` > 6 AND `group_id` < 2 ORDER BY `"..config.other_skills[param].."` DESC, `name` ASC;") or config.storages[param] and db.getResult("SELECT `player_id`, `value` FROM `player_storage` WHERE `key` = "..config.storages[param].." ORDER BY cast(value as INTEGER) DESC;") or db.getResult("SELECT `name`, `level` FROM `players` WHERE `group_id` <= 2 AND `vocation` = "..config.vocations[param][1].." or `vocation` = "..config.vocations[param][2].." ORDER BY `level` DESC;") if (query:getID() ~= -1) then k = 1 while true do str = str .. "\n " .. k .. ". "..(config.fight_skills[param] and getPlayerNameByGUID(query:getDataString("player_id")) or config.storages[param] and getPlayerNameByGUID(query:getDataString("player_id")) or query:getDataString("name")).." - [" .. query:getDataInt((config.fight_skills[param] and "value" or config.storages[param] and "value" or config.vocations[param] and "level" or config.other_skills[param])) .. "]" k = k + 1 if not(query:next()) or k > config.MaxPlayer then break end end query:free() end doShowTextDialog(cid,6500, str) return true end
    1 ponto
  33. no começo do meu ot aconteceu mesma coisa so abrir porta 7272 igual abri a 7171
    1 ponto
  34. Ltkshow

    Revive System Ajuda Vodkart

    Que Nada Mano Eu Ajudei O Mlk Primeiro Dai Ele Chega E Troca A Parada Q Ele Postou Pra Primeiro E Coloca A Minha Como Segunda Porra Velho Vou Te Reputar Negativamente Tbm Bro Sem Problemas Rep -
    -1 pontos
  35. andrebeck

    [Encerrado] Player Nao Morre?

    Estou Com Um problem no meu ot server eu troquei o mapa dele com os scripts de outro server ja mudei tudo certinho mais só tem um problema (Os players n morrem ,eles apenas voltam com mana e vida cheia após morrerem ,e tambem n loga quando eles morre fica normal só volta mana e vida) se alguem puder ajudar agradeço.
    -1 pontos
  36. PLXXX O SCRIPTTT
    -1 pontos
Líderes está configurado para São Paulo/GMT-03:00
×
×
  • Criar Novo...