Líderes
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 11/15/11 em %
-
Tibia Som V. 1.0 (Lua)
Skymagnum e um outro reagiu a Demonbholder por um tópico no fórum
Opa galera, tudo bem? Nesses últimos dias eu vim trabalhando em um projeto que eu já tenho em mente faz um tempo: um tibia som usando apenas a linguagem lua e suas bibliotecas auxiliares. Primeiramente gostaria de dizer que lua é um linguagem limitada, mesmo contando com suas bibliotecas auxiliares em C não se compara a própria linguagem C, entre outras. Leia tudo! Como funciona: Tanto o hoster quanto o jogador devem baixar arquivos para que o sistema funcione, porém, cada um irá baixar arquivos diferentes. O jogador irá abrir o programa e depois deve ativar a talkaction no jogo que irá dar inicio a conexão entre as duas redes. Depois, o jogador deve digitar sua conta e senha para confirmar a conexão. A partir deste momento, o programa estará em funcionamento. Informações: O programa ainda está em fase de testes, não tive a oportunidade de testar com Tibia MC ou até mesmo com duas conexões simultâneas, ou seja, duas pessoas usando o sistema. Peço que reportem qualquer bug para que eu o corrija imediatamente. Por enquanto, o máximo são 10 sons. Bibliotecas auxiliares: Foram utilizadas as bibliotecas ProteaAudio para reproduzir os sons e a biblioteca Socket para conectar as duas redes e possibilitar o envio de dados (TCP). Instalação: A instalação é a parte mais difícil do processo, fique muito atento pois qualquer nome de pasta que não esteja igual ao indicado irá debilitar o funcionamento do programa. Instalação para o Jogador Se você estiver jogando um OtServer que possua este sistema, siga os seguintes passos: Baixe o seguinte aquivo: http://www.4shared.c...ibia_Som_P.html Feito isso, para ativar o sistema, abra o arquivo Tibia Som.bat e, no jogo, use as palavras que irão ativar a talkaction para inciar a conexão. Após o inicio da conexão, digite a sua conta e senha e assim o sistema irá funcionar. Instalação para o Hoster Se você estiver hosteando um OtServer e deseja implementar o sistema, siga os seguintes passos: Baixe o seguinte arquivo: http://www.4shared.com/rar/AuijQwyB/Tibia_Som_H.html Agora, selecione as seguintes pastas: lua, mime, socket e os seguintes arquivos: lua.exe, lua5.1.exe, lua5.1.dll, lua51.dll e coloque-os na mesma pasta onde se encontra o interpretador (executável) e as dlls do seu OtServer. Feito isso, vá em data/globalevents/scripts e cole o arquivo gbevt.lua, depois vá em data/globalevents, abra o arquivo globalevents.xml e, entre duas tags, cole esta: <globalevent name="tibiasom" interval="3" event="script" value="gbevt.lua"/> Depois, vá em data/lib e cole o arquivo changer.txt, não se assuste porque ele está vazio, server apenas para trocar informações entre o OtServer e o interpretador avulso. Vá em data/talkactions/scripts e cole os arquivos talk.lua e sender.lua, depois vá em data/talkactions, abra o arquivo talkactions.xml e, entre duas tags, cole esta: <talkaction words="talk" script="talk.lua" /> Edição Jogador Se você seguiu os passos de instalação do jogador, agora poderá editar algumas configurações. Você tem a opção de editar os sons, porém, não a quantidade. Para fazer isto, abra a pasta songs. Para editar cada um dos sons, você deve substitui-los por um arquivo de mesmo nome e formato. Edição Hoster Se você seguiu os passos de instalação do hoster, agora pode e deve editar as configurações. Para editar as posições onde os sons vão ser reproduzidos, você deve editar dois arquivos: vá em data/globalevents/scripts, e abra o arquivo gbevt.lua. Você irá ver isto: tabmatch = { [{{x=130, y=40, z=5}, {x=160, y=60, z=7}}] = "{x=150, y=50, z=7}", [{{x=161, y=40, z=5}, {x=165, y=80, z=7}}] = "{x=170, y=70, z=7}" } Perceba estas duas tabelas: {x=130, y=40, z=5}, {x=160, y=60, z=7} O primeiro x é o número mínimo de posição x que o jogador deve estar para tocar o som referente a posição {x=150, y=50, z=7}. O seguindo x é o número máximo de posição x que ele deve estar para tocar o som. Isso se aplica ao y e o z também. Para adicionar novas posições (até 10), apenas continue seguindo o padrão da tabela, inserindo uma virgula no final de todos index, com exceção do último index. Por exemplo: tabmatch = { [{{x=130, y=40, z=5}, {x=160, y=60, z=7}}] = "{x=150, y=50, z=7}", [{{x=161, y=40, z=5}, {x=165, y=80, z=7}}] = "{x=170, y=70, z=7}", [{{x=166, y=100, z=5}, {x=190, y=190, z=9}}] = "{x=180, y=120, z=7}" } Tenha muito cuidado para que duas posições nunca se encontrem, caso aconteça, o sistema irá ser debilitado. Sempre que você editar o gbevt.lua, você deve, também, editar o sender.lua, que se encontra em data/talkactions/scripts. Nele, você também encontrará uma tabela: tab = { ['{x=150, y=50, z=7}'] = 'songs/song1.ogg', ['{x=170, y=70, z=7}'] = 'songs/song2.ogg' } Perceba esta tabela: {x=150, y=50, z=7} Esta tabela deverá ser igual a tabela que se encontra depois do sinal de "=" na tabela do arquivo gbevt.lua. Para edita-la, deve continuar o padrão da tabela, inserindo uma virgula no final de todos index, com exceção do último index. Vamos inserir um novo index considerando aquele exemplo usado na explicação do gbevt.lua: tab = { ['{x=150, y=50, z=7}'] = 'songs/song1.ogg', ['{x=170, y=70, z=7}'] = 'songs/song2.ogg', ['{x=180, y=120, z=7}'] = 'songs/song3.ogg' } Perceba que o song deve ser seguir a ordem crescente. Não esqueça que o máximo são 10 sons, a menos que o jogador também adicione mais sons na pasta songs. Não esqueça, também, de editar a tag em talkactions.xml: <talkaction words="talk" script="talk.lua" /> Caso deseje, edite onde está escrito talk, por qualquer palavra para que o jogador possa iniciar a conexão. Isso é tudo pessoal, espero que tenham gostado. Não esqueçam de reportar os bugs. Até. Sistema em fase de testes2 pontos -
Usar Account Manager + Site Gesior
Nerival reagiu a williampasqualini por um tópico no fórum
Conteúdo exclusivo para o xtibia.com! Usar Account Manager + Site Gesior <p>Após instalar seu site Gesior e ele estar funcionando 100% , sem nenhum bug e o server estar online, suponho que você enfrente o seguinte problema: -[b] A preguiça dos players em acessarem seu site para criar um char.[/b] Principalmente os players que descobrem seu server através do otserverlist.org! Então vou explicar como utilizar o site e o account manager do server ao mesmo tempo! 1º - Vá até a pasta do seu server e abra o arquivo config.lua com o bloco de notas. Na linha do accountManager deixe como está abaixo: (caso esteja como ="no" ou ="false") accountManager = "true" Salve as alterações e fexe seu config.lua 2º - Agora que seu account manager esta ativado...vamos configura - lo para ser utilizado em conjunto com o site. Ao instalar o site gesior, você obteve sua conta de administrador. Se observar a conta de administrador é justamente a account 1, portanto você terá que altera - la. Abra o XAMPP Control Panell e acesse seu phpMyAdmin, clicando no botão Admin do lado do Mysql. Se preferir pode acessar através do endereço: http://localhost/phpmyadmin/ caso você utilize a porta :8090 utilize o seguinte... http://localhost:8090/ Digite o usuario: root e a senha que escolheu na hora de instalar o Xampp, clique no botão executar. Agora clique na database do seu servidor para ter acesso a ela. Clique em accounts Você vera uma tabela com id,name,password,etc... clique no lápis [Editar] do lado do X [Remover] em vermelho, para editar a conta que desejar, no caso é a account name = 1 de id = 1 (normalmente a primeira linha da tabela Accounts). Edite esta tabela da seguinte maneira: Clique em Executar após terminar de fazer as alterações. Agora clique na Tabela Players de sua database. Edite o Account Manager (Normalmente o Player com id=1) - Só clicar no lápis [Editar] no campo do lado esquerdo do Account Manager. Edite ele da seguinte maneira: Group_id = 1 Account_id = 1 Lookyype = pode por oque quiser, por exemplo o de um monstro ou god. "este numero é oque mudara a aparência de seu account manager". exemplos: Yeti = 110 GOD = 302 town_id; posx ; posy e posz são as coordenadas x,y,z que tem no config.lua na pasta do seu servidor. As do meu config.lua são: newPlayerSpawnPosX = 160 newPlayerSpawnPosY = 54 newPlayerSpawnPosZ = 7 newPlayerTownId = 1 então meu account manager do site fica assim: town_id = 1 posx= 160 posy= 54 posz = 7 obs: O account manager esta configurado para aparecer no templo, porém você pode escolher qualquer coordenada do mapa para ele aparecer. agora que você já configurou seu account manager, clique em executar. Para salvar as alterações. Você vera outros chars com os seguintes nomes: Rook Sample, Sorcerer Sample, Druid Sample, Paladin Sample, e Knight Sample. Edite cada um deles modificando a seguinte linha: deleted = 1 motivo? para que estes chars não apareçam na lista de chars quando os novos players entrarem na account 1/1 (account manager) para criar suas contas. Agora entre no seu site e crie uma conta para você administar seu site. Vá no phpmyadmin denovo, na database do seu servidor e entre em accounts. Clique no botão Procurar na parte superior e em Name, digite o nome de usuario escolhido ao criar a conta. Depois clique no botão Executar. Se você digitou o nome certo ira aparecer sua conta...é clicar em Editar [No lápis] e altere o seguinte campo: page_access = 0 para page_access = 5 E clique no botão Executar, para salvar as alterações. OBS: Se quiser pode fecha a pagina de seu phpmyadmin. Pronto, sua conta de administrador está prontinha! Seu account manager está pronto para ser usado, e também é possivel criar chars e contas pelo site. Porém não acabou ainda! 3º - Bloquiar o acesso do Account Manager pelo site, para evitar que alterem a senha ou excluam - lo. Abra a pasta: \xampp\htdocs E substitua o código de seu accountmanagement.php por este aqui que irei postar: http://www.4shared.com/file/l7-bobb8/accountmanagement.html Pronto, Ninguém ira conseguir entrar na conta 1/1 que no caso é a do account manager. Tornando impossivel deleta - lo ou usar esta conta para postar besteiras no fórum. Tutorial 100% criado por mim. Código do account management encontrado não me lembro aonde. Obrigado. Atualizado dia 13 de julho de 20121 ponto -
Galera Depois De Ter Postado Meu Primeiro Mapa Postei O Segundo Update !! Bom Galera Claro Que Fiz Varias Melhorias !! Tps Falantes Com Animações. Mudei As Walls Das Houses. Adicionei Nova City (Kakitz). Adicionei Uma Quest News. Adicionei Ultra Kill Sword,Ultra Kill Club,Ultra Kill Axe,Ultra Kill Bow,Ultra Kill Arrow. Lembrando Ultra Kill Arrow E Ultra Kill Bow é Vendida Npc !! Por 35kk Uma E A Outra 30kk !! News Monster Mystic Medusa. Adicionei Nova Vocation (Fesin e Test Fesin). Test Fesin Tbm Arma De Fesin (óbvio). News Magias (!spells Para Vêr). News Outfits (SkullHunter Apenas Premium). SS !! Kakitz City !! City Grande !! Download Clique aqui Scan Postem Para Mim Fazeno Favor !! Arrumar : News Vocation Não Está Pegando E Nem Arena !! Pretendo Arrumar Próximo Update Se Alguem Souber Me Mande Uma PM Que Colocarei Os Devidos Créditos. Créditos: Gean Riot (70%) Editar O Mapa Parecido Com Hero,Louco !! <--- Parabéns !! LukaszG (10%) Postar O Mapa Ao Xtibia !! Luiszin (15%) Editar O Mapa E Corrigir Algumas Coisas <--- Euu !! Xtibia (5%) Scripts Peguei Do Xtibia <--- Obrigado,Sempre Me Ajudano !! Obrigado !!1 ponto
-
Guild War System Com Escudos
Vilden reagiu a Leoprotons por um tópico no fórum
Bom vamos começar pelo site : Vá em Xampp/Htdocs e crie e um arquivo chamado wars.php,dentro add isto: <?php $main_content = "<h1 align=\"center\">Guild Wars</h1> <script type=\"text/javascript\"><!-- function show_hide(flip) { var tmp = document.getElementById(flip); if(tmp) tmp.style.display = tmp.style.display == 'none' ? '' : 'none'; } --></script> <a onclick=\"show_hide('information'); return false;\" style=\"cursor: pointer;\"><h1><center>» Click to se the commands «<center></h1></a> <table width=\"100%\" border=\"0\" cellspacing=\"1\" cellpadding=\"4\" id=\"information\" style=\"display: none;\";> <tr align=\"center\"><b>You must send this commands in GUILD CHAT.</tr> <tr style=\"background: #512e0b;\"><td align=\"center\" class=\"white\"><b>Command</b></td><td colspan=\"2\" align=\"center\" class=\"white\"><b>Description</b></td></tr> <tr style=\"background: #F1E0C6;\"><td><b>/war invite, guild name, fraglimit</b></td><td>Sends an invitation to start the war. Example: <font color=red><BR>/war invite, Chickens, 150<BR></font><B>(Invite a guild to war with 150 frags count.)</B></td></tr> <tr style=\"background: #D4C0A1;\"><td><b>/war invite, guild name, fraglimit, money</b></td><td>Send the invitation to start the war. Example: <font color=red><BR>/war invite, Chickens, 150, 10000</font><br><B> (Invite a guild to war with 150 frags count and payment of 10000 gold coins <- you need donate to guild to use it.)<B></td></tr> <tr style=\"background: #F1E0C6;\"><td><b>/war accept, guild name</b></td><td>Accepts the invitation to start a war. Example: <font color=red><BR>/war accept, Chickens</font><BR><B>(Accept the war against guild \"Chickens\".)</b></td></tr> <tr style=\"background: #D4C0A1;\"><td><b>/war reject, guild name</b></td><td>Rejects the invitation to start a war. Example: <font color=red><BR>/war reject, Chickens</font><BR><B>(Reject a invitation to war from Chickens.)</B></td></tr> <tr style=\"background: #F1E0C6;\"><td><b>/war cancel, guild name</b></td><td>Cancels the invitation. Example: <font color=red><BR>/war cancel, Chickens</font><br><b>(Cancel my guild invitation to war with Chickens.)</b></td></tr> <tr style=\"background: #D4C0A1;\"><td><b>/balance</b></td><td>See the guild balance - balance of money.</td></tr> <tr style=\"background: #F1E0C6;\"><td><b>/balance donate value</b></td><td>Deposits money on the guild's bank account. All players can donate. Example: <font color=red><BR>/balance donate 100000 </font><BR><B>(You will donate 100k to your guild balance.)</B></td></tr> <tr style=\"background: #D4C0A1;\"><td><b>/balance pick value</b></td><td>Withdraws money from the guild's bank account. Can be used only by the guild leader. Example: <font color=red><BR>/balance pick 100000 </font><BR><B>(You will withdraw 100k from your guild balance.)</B></td></tr> </table> <table width=\"100%\" border=\"0\" cellspacing=\"1\" cellpadding=\"4\"> <tr> <td style=\"background: #512e0b\" class=\"white\" width=\"150\"><b>Aggressor</b></td> <td style=\"background: #512e0b\" class=\"white\"><b>Information</b></td> <td style=\"background: #512e0b\" class=\"white\" width=\"150\"><b>Enemy</b></td> </tr><tr style=\"background: #F1E0C6;\">"; $count = 0; foreach($SQL->query('SELECT * FROM `guild_wars` WHERE `status` IN (1,4) OR ((`end` >= (UNIX_TIMESTAMP() - 604800) OR `end` = 0) AND `status` IN (0,5));') as $war) { $a = $ots->createObject('Guild'); $a->load($war['guild_id']); if(!$a->isLoaded()) continue; $e = $ots->createObject('Guild'); $e->load($war['enemy_id']); if(!$e->isLoaded()) continue; $alogo = $a->getCustomField('logo_gfx_name'); if(empty($alogo) || !file_exists('guilds/' . $alogo)) $alogo = 'default_logo.gif'; $elogo = $e->getCustomField('logo_gfx_name'); if(empty($elogo) || !file_exists('guilds/' . $elogo)) $elogo = 'default_logo.gif'; $count++; $main_content .= "<tr style=\"background: " . (is_int($count / 2) ? $config['site']['darkborder'] : $config['site']['lightborder']) . ";\"> <td align=\"center\"><a href=\"?subtopic=guilds&action=show&guild=".$a->getId()."\"><img src=\"guilds/".$alogo."\" width=\"64\" height=\"64\" border=\"0\"/><br />".$a->getName()."</a></td> <td align=\"center\">"; switch($war['status']) { case 0: { $main_content .= "<b>Pending acceptation</b><br />Invited on " . date("M d Y, H:i:s", $war['begin']) . " for " . ($war['end'] > 0 ? (($war['end'] - $war['begin']) / 86400) : "unspecified") . " days. The frag limit is set to " . $war['frags'] . " frags, " . ($war['payment'] > 0 ? "with payment of " . $war['payment'] . " bronze coins." : "without any payment.")."<br />Will expire in three days."; break; } case 3: { $main_content .= "<s>Canceled invitation</s><br />Sent invite on " . date("M d Y, H:i:s", $war['begin']) . ", canceled on " . date("M d Y, H:i:s", $war['end']) . "."; break; } case 2: { $main_content .= "Rejected invitation<br />Invited on " . date("M d Y, H:i:s", $war['begin']) . ", rejected on " . date("M d Y, H:i:s", $war['end']) . "."; break; } case 1: { $main_content .= "<font size=\"6\"><span style=\"color: red;\">" . $war['guild_kills'] . "</span> : <span style=\"color: lime;\">" . $war['enemy_kills'] . "</span></font><br /><br /><span style=\"color: darkred; font-weight: bold;\">On a brutal war</span><br />Began on " . date("M d Y, H:i:s", $war['begin']) . ($war['end'] > 0 ? ", will end up at " . date("M d Y, H:i:s", $war['end']) : "") . ".<br />The frag limit is set to " . $war['frags'] . " frags, " . ($war['payment'] > 0 ? "with payment of " . $war['payment'] . " bronze coins." : "without any payment."); break; } case 4: { $main_content .= "<font size=\"6\"><span style=\"color: red;\">" . $war['guild_kills'] . "</span> : <span style=\"color: lime;\">" . $war['enemy_kills'] . "</span></font><br /><br /><span style=\"color: darkred;\">Pending end</span><br />Began on " . date("M d Y, H:i:s", $war['begin']) . ", signed armstice on " . date("M d Y, H:i:s", $war['end']) . ".<br />Will expire after reaching " . $war['frags'] . " frags. ".($war['payment'] > 0 ? "The payment is set to " . $war['payment'] . " bronze coins." : "There's no payment set."); break; } case 5: { $main_content .= "<i>Ended</i><br />Began on " . date("M d Y, H:i:s", $war['begin']) . ", ended on " . date("M d Y, H:i:s", $war['end']) . ". Frag statistics: <span style=\"color: red;\">" . $war['guild_kills'] . "</span> to <span style=\"color: lime;\">" . $war['enemy_kills'] . "</span>."; break; } default: { $main_content .= "Unknown, please contact with gamemaster."; break; } } $main_content .= "<br /><br /><a onclick=\"show_hide('war-details:" . $war['id'] . "'); return false;\" style=\"cursor: pointer;\">» Details «</a></td> <td align=\"center\"><a href=\"?subtopic=guilds&action=show&guild=".$e->getId()."\"><img src=\"guilds/".$elogo."\" width=\"64\" height=\"64\" border=\"0\"/><br />".$e->getName()."</a></td> </tr> <tr id=\"war-details:" . $war['id'] . "\" style=\"display: none; background: " . (is_int($count / 2) ? $config['site']['darkborder'] : $config['site']['lightborder']) . ";\"> <td colspan=\"3\">"; if(in_array($war['status'], array(1,4,5))) { $deaths = $SQL->query('SELECT `pd`.`id`, `pd`.`date`, `gk`.`guild_id` AS `enemy`, `p`.`name`, `pd`.`level` FROM `guild_kills` gk LEFT JOIN `player_deaths` pd ON `gk`.`death_id` = `pd`.`id` LEFT JOIN `players` p ON `pd`.`player_id` = `p`.`id` WHERE `gk`.`war_id` = ' . $war['id'] . ' AND `p`.`deleted` = 0 ORDER BY `pd`.`date` DESC')->fetchAll(); if(!empty($deaths)) { foreach($deaths as $death) { $killers = $SQL->query('SELECT `p`.`name` AS `player_name`, `p`.`deleted` AS `player_exists`, `k`.`war` AS `is_war` FROM `killers` k LEFT JOIN `player_killers` pk ON `k`.`id` = `pk`.`kill_id` LEFT JOIN `players` p ON `p`.`id` = `pk`.`player_id` WHERE `k`.`death_id` = ' . $death['id'] . ' ORDER BY `k`.`final_hit` DESC, `k`.`id` ASC')->fetchAll(); $count = count($killers); $i = 0; $others = false; $main_content .= date("j M Y, H:i", $death['date']) . " <span style=\"font-weight: bold; color: " . ($death['enemy'] == $war['guild_id'] ? "red" : "lime") . ";\">+</span> <a href=\"index.php?subtopic=characters&name=" . urlencode($death['name']) . "\"><b>".$death['name']."</b></a> "; foreach($killers as $killer) { $i++; if($killer['is_war'] != 0) { if($i == 1) $main_content .= "killed at level <b>".$death['level']."</b> by "; else if($i == $count && $others == false) $main_content .= " and by "; else $main_content .= ", "; if($killer['player_exists'] == 0) $main_content .= "<a href=\"index.php?subtopic=characters&name=".urlencode($killer['player_name'])."\">"; $main_content .= $killer['player_name']; if($killer['player_exists'] == 0) $main_content .= "</a>"; } else $others = true; if($i == $count) { if($others == true) $main_content .= " and few others"; $main_content .= ".<br />"; } } } } else $main_content .= "<center>There were no frags on this war so far.</center>"; } else $main_content .= "<center>This war did not began yet.</center>"; $main_content .= "</td> </tr>"; } if($count == 0) $main_content .= "<tr style=\"background: ".$config['site']['darkborder'].";\"> <td colspan=\"3\">Currently there are no active wars.</td> </tr>"; $main_content .= "</table>"; $main_content .= '<div align="right"><small><b>Customized by: <a href="http://www.xtibia.com/forum/user/240289-walef-xavier">Walef Xavier</a></b></small></div><br />'; ?> Agora vá em Xampp/Htdocs/index.php e add o seguinte: case "wars"; $subtopic = "wars"; $topic = "Guild Wars"; include("wars.php"); break; Agora para finalizar a parte do site vá em Xampp/Htdocs/Layout/Tibiacom/layout.php e add o seguinte: <a href='?subtopic=wars'> <div id='submenu_wars' class='Submenuitem' onMouseOver='MouseOverSubmenuItem(this)' onMouseOut='MouseOutSubmenuItem(this)'> <div class='LeftChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div> <div id='ActiveSubmenuItemIcon_polls' class='ActiveSubmenuItemIcon' style='background-image:url(<?PHP echo $layout_name; ?>/images/menu/icon-activesubmenu.gif);'></div> <div class='SubmenuitemLabel'><font color=red>Guild Wars</font></div> <div class='RightChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div> </div> </a> Agora vamos para seu Ot: Va em GlobalEvents/scripts/start.lua e add o seguinte: executeQuery("DELETE FROM `guild_wars` WHERE `status` = 0 AND `begin` < " .. (os.time() - 2 * 86400) .. ";") db.executeQuery("UPDATE `guild_wars` SET `status` = 5, `end` = " .. os.time() .. " WHERE `status` = 1 AND `end` > 0 AND `end` < " .. os.time() .. ";") Agora vá em Lib e crie um arquivo .lua chamado 101-war,dentro add o seguinte: WAR_GUILD = 0 WAR_ENEMY = 1 Agora para finalizar vamos colocar os comandos em Talkactions ! Vá em Talkactions/scripts e crie dois arquivos chamados war.lua e balance.lua,dentro add o seguinte: War.lua function onSay(cid, words, param, channel) local guild = getPlayerGuildId(cid) if(not guild or getPlayerGuildLevel(cid) < GUILDLEVEL_LEADER) then doPlayerSendChannelMessage(cid, "", "You cannot execute this talkaction.", TALKTYPE_CHANNEL_W, 0) return true end local t = string.explode(param, ",") if(not t[2]) then doPlayerSendChannelMessage(cid, "", "Not enough param(s).", TALKTYPE_CHANNEL_W, 0) return true end local enemy = getGuildId(t[2]) if(not enemy) then doPlayerSendChannelMessage(cid, "", "Guild \"" .. t[2] .. "\" does not exists.", TALKTYPE_CHANNEL_W, 0) return true end if(enemy == guild) then doPlayerSendChannelMessage(cid, "", "You cannot perform war action on your own guild.", TALKTYPE_CHANNEL_W, 0) return true end local enemyName, tmp = "", db.getResult("SELECT `name` FROM `guilds` WHERE `id` = " .. enemy) if(tmp:getID() ~= -1) then enemyName = tmp:getDataString("name") tmp:free() end if(isInArray({"accept", "reject", "cancel"}, t[1])) then local query = "`guild_id` = " .. enemy .. " AND `enemy_id` = " .. guild if(t[1] == "cancel") then query = "`guild_id` = " .. guild .. " AND `enemy_id` = " .. enemy end tmp = db.getResult("SELECT `id`, `begin`, `end`, `payment` FROM `guild_wars` WHERE " .. query .. " AND `status` = 0") if(tmp:getID() == -1) then doPlayerSendChannelMessage(cid, "", "Currently there's no pending invitation for a war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0) return true end if(t[1] == "accept") then local _tmp = db.getResult("SELECT `balance` FROM `guilds` WHERE `id` = " .. guild) local state = _tmp:getID() < 0 or _tmp:getDataInt("balance") < tmp:getDataInt("payment") _tmp:free() if(state) then doPlayerSendChannelMessage(cid, "", "Your guild balance is too low to accept this invitation.", TALKTYPE_CHANNEL_W, 0) return true end db.query("UPDATE `guilds` SET `balance` = `balance` - " .. tmp:getDataInt("payment") .. " WHERE `id` = " .. guild) end query = "UPDATE `guild_wars` SET " local msg = "accepted " .. enemyName .. " invitation to war." if(t[1] == "reject") then query = query .. "`end` = " .. os.time() .. ", `status` = 2" msg = "rejected " .. enemyName .. " invitation to war." elseif(t[1] == "cancel") then query = query .. "`end` = " .. os.time() .. ", `status` = 3" msg = "canceled invitation to a war with " .. enemyName .. "." else query = query .. "`begin` = " .. os.time() .. ", `end` = " .. (tmp:getDataInt("end") > 0 and (os.time() + ((tmp:getDataInt("begin") - tmp:getDataInt("end")) / 86400)) or 0) .. ", `status` = 1" end query = query .. " WHERE `id` = " .. tmp:getDataInt("id") if(t[1] == "accept") then doGuildAddEnemy(guild, enemy, tmp:getDataInt("id"), WAR_GUILD) doGuildAddEnemy(enemy, guild, tmp:getDataInt("id"), WAR_ENEMY) end tmp:free() db.query(query) doBroadcastMessage(getPlayerGuildName(cid) .. " has " .. msg, MESSAGE_EVENT_ADVANCE) return true end if(t[1] == "invite") then local str = "" tmp = db.getResult("SELECT `guild_id`, `status` FROM `guild_wars` WHERE `guild_id` IN (" .. guild .. "," .. enemy .. ") AND `enemy_id` IN (" .. enemy .. "," .. guild .. ") AND `status` IN (0, 1)") if(tmp:getID() ~= -1) then if(tmp:getDataInt("status") == 0) then if(tmp:getDataInt("guild_id") == guild) then str = "You have already invited " .. enemyName .. " to war." else str = enemyName .. " have already invited you to war." end else str = "You are already on a war with " .. enemyName .. "." end tmp:free() end if(str ~= "") then doPlayerSendChannelMessage(cid, "", str, TALKTYPE_CHANNEL_W, 0) return true end local frags = tonumber(t[3]) if(frags ~= nil) then frags = math.max(10, math.min(1000, frags)) else frags = 100 end local payment = tonumber(t[4]) if(payment ~= nil) then payment = math.max(100000, math.min(1000000000, payment)) tmp = db.getResult("SELECT `balance` FROM `guilds` WHERE `id` = " .. guild) local state = tmp:getID() < 0 or tmp:getDataInt("balance") < payment tmp:free() if(state) then doPlayerSendChannelMessage(cid, "", "Your guild balance is too low for such payment.", TALKTYPE_CHANNEL_W, 0) return true end db.query("UPDATE `guilds` SET `balance` = `balance` - " .. payment .. " WHERE `id` = " .. guild) else payment = 0 end local begining, ending = os.time(), tonumber(t[5]) if(ending ~= nil and ending ~= 0) then ending = begining + (ending * 86400) else ending = 0 end db.query("INSERT INTO `guild_wars` (`guild_id`, `enemy_id`, `begin`, `end`, `frags`, `payment`) VALUES (" .. guild .. ", " .. enemy .. ", " .. begining .. ", " .. ending .. ", " .. frags .. ", " .. payment .. ");") doBroadcastMessage(getPlayerGuildName(cid) .. " has invited " .. enemyName .. " to war till " .. frags .. " frags.", MESSAGE_EVENT_ADVANCE) return true end if(not isInArray({"end", "finish"}, t[1])) then return false end local status = (t[1] == "end" and 1 or 4) tmp = db.getResult("SELECT `id` FROM `guild_wars` WHERE `guild_id` = " .. guild .. " AND `enemy_id` = " .. enemy .. " AND `status` = " .. status) if(tmp:getID() ~= -1) then local query = "UPDATE `guild_wars` SET `end` = " .. os.time() .. ", `status` = 5 WHERE `id` = " .. tmp:getDataInt("id") tmp:free() doGuildRemoveEnemy(guild, enemy) doGuildRemoveEnemy(enemy, guild) db.query(query) doBroadcastMessage(getPlayerGuildName(cid) .. " has " .. (status == 4 and "mend fences" or "ended up a war") .. " with " .. enemyName .. ".", MESSAGE_EVENT_ADVANCE) return true end if(status == 4) then doPlayerSendChannelMessage(cid, "", "Currently there's no pending war truce from " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0) return true end tmp = db.getResult("SELECT `id`, `end` FROM `guild_wars` WHERE `guild_id` = " .. enemy .. " AND `enemy_id` = " .. guild .. " AND `status` = 1") if(tmp:getID() ~= -1) then if(tmp:getDataInt("end") > 0) then tmp:free() doPlayerSendChannelMessage(cid, "", "You cannot request ending for war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0) return true end local query = "UPDATE `guild_wars` SET `status` = 4, `end` = " .. os.time() .. " WHERE `id` = " .. tmp:getDataInt("id") tmp:free() db.query(query) doBroadcastMessage(getPlayerGuildName(cid) .. " has signed an armstice declaration on a war with " .. enemyName .. ".", MESSAGE_EVENT_ADVANCE) return true end doPlayerSendChannelMessage(cid, "", "Currently there's no active war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0) return true balance.lua local function isValidMoney(value) if(value == nil) then return false end return (value > 0 and value <= 99999999999999) end function onSay(cid, words, param, channel) local guild = getPlayerGuildId(cid) if(guild == 0) then return false end local t = string.explode(param, ' ', 1) if(getPlayerGuildLevel(cid) == GUILDLEVEL_LEADER and isInArray({ 'pick' }, t[1])) then if(t[1] == 'pick') then local money = { tonumber(t[2]) } if(not isValidMoney(money[1])) then doPlayerSendChannelMessage(cid, '', 'Invalid amount of money specified.', TALKTYPE_CHANNEL_W, 0) return true end local result = db.getResult('SELECT `balance` FROM `guilds` WHERE `id` = ' .. guild) if(result:getID() == -1) then return false end money[2] = result:getDataLong('balance') result:free() if(money[1] > money[2]) then doPlayerSendChannelMessage(cid, '', 'The balance is too low for such amount.', TALKTYPE_CHANNEL_W, 0) return true end if(not db.query('UPDATE `guilds` SET `balance` = `balance` - ' .. money[1] .. ' WHERE `id` = ' .. guild .. ' LIMIT 1;')) then return false end doPlayerAddMoney(cid, money[1]) doPlayerSendChannelMessage(cid, '', 'You have just picked ' .. money[1] .. ' money from your guild balance.', TALKTYPE_CHANNEL_W, 0) else doPlayerSendChannelMessage(cid, '', 'Invalid sub-command.', TALKTYPE_CHANNEL_W, 0) end elseif(t[1] == 'donate') then local money = tonumber(t[2]) if(not isValidMoney(money)) then doPlayerSendChannelMessage(cid, '', 'Invalid amount of money specified.', TALKTYPE_CHANNEL_W, 0) return true end if(getPlayerMoney(cid) < money) then doPlayerSendChannelMessage(cid, '', 'You don\'t have enough money.', TALKTYPE_CHANNEL_W, 0) return true end if(not doPlayerRemoveMoney(cid, money)) then return false end db.query('UPDATE `guilds` SET `balance` = `balance` + ' .. money .. ' WHERE `id` = ' .. guild .. ' LIMIT 1;') doPlayerSendChannelMessage(cid, '', 'You have transfered ' .. money .. ' money to your guild balance.', TALKTYPE_CHANNEL_W, 0) else local result = db.getResult('SELECT `name`, `balance` FROM `guilds` WHERE `id` = ' .. guild) if(result:getID() == -1) then return false end doPlayerSendChannelMessage(cid, '', 'Current balance of guild ' .. result:getDataString('name') .. ' is: ' .. result:getDataLong('balance') .. ' bronze coins.', TALKTYPE_CHANNEL_W, 0) result:free() end return true end Agora vá em Talkactions/talkactions.xml e add as duas tags: <talkaction words="/war" channel="0" event="script" value="war.lua" desc="(Guild channel command) War management."/> <talkaction words="/balance" channel="0" event="script" value="balance.lua" desc="(Guild channel command) Balance management."/> Pronto,seu Guild War Systema está instalado...mas para funcionar necessitará das tabelas na sua database e do Tfs 0.4 .Vou posta-los abaixo,respectivamente. . Tabelas . Para quem ainda não sabe add tabelas a sua database,vou ensinar: Acesse seu phpmyadmin,digite sua senha (caso tenha),clique no nome da sua database a esquerda,assim que carregar a sua database clique em SQL lá em cima...Aparecerá um espaço em branco lá voce irá add as seguintes tabelas...e depois clicar em Executar. CREATE TABLE IF NOT EXISTS `guild_wars` ( `id` INT NOT NULL AUTO_INCREMENT, `guild_id` INT NOT NULL, `enemy_id` INT NOT NULL, `begin` BIGINT NOT NULL DEFAULT '0', `end` BIGINT NOT NULL DEFAULT '0', `frags` INT UNSIGNED NOT NULL DEFAULT '0', `payment` BIGINT UNSIGNED NOT NULL DEFAULT '0', `guild_kills` INT UNSIGNED NOT NULL DEFAULT '0', `enemy_kills` INT UNSIGNED NOT NULL DEFAULT '0', `status` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (`id`), KEY `status` (`status`), KEY `guild_id` (`guild_id`), KEY `enemy_id` (`enemy_id`) ) ENGINE=InnoDB; ALTER TABLE `guild_wars` ADD CONSTRAINT `guild_wars_ibfk_1` FOREIGN KEY (`guild_id`) REFERENCES `guilds` (`id`) ON DELETE CASCADE, ADD CONSTRAINT `guild_wars_ibfk_2` FOREIGN KEY (`enemy_id`) REFERENCES `guilds` (`id`) ON DELETE CASCADE; ALTER TABLE `guilds` ADD `balance` BIGINT UNSIGNED NOT NULL AFTER `motd`; CREATE TABLE IF NOT EXISTS `guild_kills` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, `guild_id` INT NOT NULL, `war_id` INT NOT NULL, `death_id` INT NOT NULL ) ENGINE = InnoDB; ALTER TABLE `guild_kills` ADD CONSTRAINT `guild_kills_ibfk_1` FOREIGN KEY (`war_id`) REFERENCES `guild_wars` (`id`) ON DELETE CASCADE, ADD CONSTRAINT `guild_kills_ibfk_2` FOREIGN KEY (`death_id`) REFERENCES `player_deaths` (`id`) ON DELETE CASCADE, ADD CONSTRAINT `guild_kills_ibfk_3` FOREIGN KEY (`guild_id`) REFERENCES `guilds` (`id`) ON DELETE CASCADE; ALTER TABLE `killers` ADD `war` INT NOT NULL DEFAULT 0; Para finalizar é necessário que o seu .exe tenha incluído na compilação o parâmetro, -D__WAR_SYSTEM__. Como adiciono? Para adicionar é necessário ter a source do otserver que você utiliza. Abra a source em um dev-cpp aperte alt+p na coluna paraments add -D__WAR_SYSTEM__ da ok e compila. Se você não souber compilar existem tutorias bem explicativas que tornam fácil aprender a compilar, veja abaixo: Compilando no Windows Compilando no Linux ubuntu Pronto o Guild Wars System está totalmente instalado! Para os preguiçosos Ocupados coloquei o download do sistema completo. Download Aqui Link do Scan Creditos: Walef Xavier - War System AgaSsI - Tópico original Gm Beckman - Completou o tópico1 ponto -
War System • Nome: Guild War System • Autor: Elf • Versão Testada: 0.4_SVN Bom, esse é meu primeiro post, então, deem um desconto aê. Vamos ao que interessa... Crie um arquivo chamado db.mysql e importe para sua database. DB.MYSQL 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; Adicionem essas tags em, data/talkactions/talkactions.xml Tag <!-- Guild War System --> <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."/> Abra o arquivo global.lua, copie as querys e cole no arquivo start.lua ou init.lua data/globalevents/scripts querys 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() .. ";") Crie um arquivo chamado 101-war.lua em data/lib 101-war.lua WAR_GUILD = 0 WAR_ENEMY = 1 Copie os arquivos balance.lua e war.lua para a pasta scripts data/talkactions/scripts 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.executeQuery('UPDATE `guilds` SET `balance` = `balance` - ' .. money[1] .. ' WHERE `id` = ' .. guild .. ' LIMIT 1;')) then return false end doPlayerAddMoney(cid, money[1]) doPlayerSendChannelMessage(cid, '', 'You have just picked ' .. money[1] .. ' money from your guild balance.', TALKTYPE_CHANNEL_W, 0) else doPlayerSendChannelMessage(cid, '', 'Invalid sub-command.', TALKTYPE_CHANNEL_W, 0) end elseif(t[1] == 'donate') then local money = tonumber(t[2]) if(not isValidMoney(money)) then doPlayerSendChannelMessage(cid, '', 'Invalid amount of money specified.', TALKTYPE_CHANNEL_W, 0) return true end if(getPlayerMoney(cid) < money) then doPlayerSendChannelMessage(cid, '', 'You don\'t have enough money.', TALKTYPE_CHANNEL_W, 0) return true end if(not doPlayerRemoveMoney(cid, money)) then return false end db.executeQuery('UPDATE `guilds` SET `balance` = `balance` + ' .. money .. ' WHERE `id` = ' .. guild .. ' LIMIT 1;') doPlayerSendChannelMessage(cid, '', 'You have transfered ' .. money .. ' money to your guild balance.', TALKTYPE_CHANNEL_W, 0) else local result = db.getResult('SELECT `name`, `balance` FROM `guilds` WHERE `id` = ' .. guild) if(result:getID() == -1) then return false end doPlayerSendChannelMessage(cid, '', 'Current balance of guild ' .. result:getDataString('name') .. ' is: ' .. result:getDataLong('balance') .. ' bronze coins.', TALKTYPE_CHANNEL_W, 0) result:free() end return true end war.lua local guild = getPlayerGuildId(cid) function onSay(cid, words, param, channel) if(not guild or getPlayerGuildLevel(cid) < GUILDLEVEL_LEADER) then doPlayerSendChannelMessage(cid, "", "You cannot execute this talkaction.", TALKTYPE_CHANNEL_W, 0) return true end local t = string.explode(param, ",") if(not t[2]) then doPlayerSendChannelMessage(cid, "", "Not enough param(s).", TALKTYPE_CHANNEL_W, 0) return true end local enemy = getGuildId(t[2]) if(not enemy) then doPlayerSendChannelMessage(cid, "", "Guild \"" .. t[2] .. "\" does not exists.", TALKTYPE_CHANNEL_W, 0) return true end if(enemy == guild) then doPlayerSendChannelMessage(cid, "", "You cannot perform war action on your own guild.", TALKTYPE_CHANNEL_W, 0) return true end local enemyName, tmp = "", db.getResult("SELECT `name` FROM `guilds` WHERE `id` = " .. enemy) if(tmp:getID() ~= -1) then enemyName = tmp:getDataString("name") tmp:free() end if(isInArray({"accept", "reject", "cancel"}, t[1])) then local query = "`guild_id` = " .. enemy .. " AND `enemy_id` = " .. guild if(t[1] == "cancel") then query = "`guild_id` = " .. guild .. " AND `enemy_id` = " .. enemy end tmp = db.getResult("SELECT `id`, `begin`, `end`, `payment` FROM `guild_wars` WHERE " .. query .. " AND `status` = 0") if(tmp:getID() == -1) then doPlayerSendChannelMessage(cid, "", "Currently there's no pending invitation for a war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0) return true end if(t[1] == "accept") then local _tmp = db.getResult("SELECT `balance` FROM `guilds` WHERE `id` = " .. guild) local state = _tmp:getID() < 0 or _tmp:getDataInt("balance") < tmp:getDataInt("payment") _tmp:free() if(state) then doPlayerSendChannelMessage(cid, "", "Your guild balance is too low to accept this invitation.", TALKTYPE_CHANNEL_W, 0) return true end db.executeQuery("UPDATE `guilds` SET `balance` = `balance` - " .. tmp:getDataInt("payment") .. " WHERE `id` = " .. guild) end query = "UPDATE `guild_wars` SET " local msg = "accepted " .. enemyName .. " invitation to war." if(t[1] == "reject") then query = query .. "`end` = " .. os.time() .. ", `status` = 2" msg = "rejected " .. enemyName .. " invitation to war." elseif(t[1] == "cancel") then query = query .. "`end` = " .. os.time() .. ", `status` = 3" msg = "canceled invitation to a war with " .. enemyName .. "." else query = query .. "`begin` = " .. os.time() .. ", `end` = " .. (tmp:getDataInt("end") > 0 and (os.time() + ((tmp:getDataInt("begin") - tmp:getDataInt("end")) / 86400)) or 0) .. ", `status` = 1" end query = query .. " WHERE `id` = " .. tmp:getDataInt("id") if(t[1] == "accept") then doGuildAddEnemy(guild, enemy, tmp:getDataInt("id"), WAR_GUILD) doGuildAddEnemy(enemy, guild, tmp:getDataInt("id"), WAR_ENEMY) end tmp:free() db.executeQuery(query) doBroadcastMessage(getPlayerGuildName(cid) .. " has " .. msg, MESSAGE_EVENT_ADVANCE) return true end if(t[1] == "invite") then local str = "" tmp = db.getResult("SELECT `guild_id`, `status` FROM `guild_wars` WHERE `guild_id` IN (" .. guild .. "," .. enemy .. ") AND `enemy_id` IN (" .. enemy .. "," .. guild .. ") AND `status` IN (0, 1)") if(tmp:getID() ~= -1) then if(tmp:getDataInt("status") == 0) then if(tmp:getDataInt("guild_id") == guild) then str = "You have already invited " .. enemyName .. " to war." else str = enemyName .. " have already invited you to war." end else str = "You are already on a war with " .. enemyName .. "." end tmp:free() end if(str ~= "") then doPlayerSendChannelMessage(cid, "", str, TALKTYPE_CHANNEL_W, 0) return true end local frags = tonumber(t[3]) if(frags ~= nil) then frags = math.max(10, math.min(1000, frags)) else frags = 100 end local payment = tonumber(t[4]) if(payment ~= nil) then payment = math.max(100000, math.min(1000000000, payment)) tmp = db.getResult("SELECT `balance` FROM `guilds` WHERE `id` = " .. guild) local state = tmp:getID() < 0 or tmp:getDataInt("balance") < payment tmp:free() if(state) then doPlayerSendChannelMessage(cid, "", "Your guild balance is too low for such payment.", TALKTYPE_CHANNEL_W, 0) return true end db.executeQuery("UPDATE `guilds` SET `balance` = `balance` - " .. payment .. " WHERE `id` = " .. guild) else payment = 0 end local begining, ending = os.time(), tonumber(t[5]) if(ending ~= nil and ending ~= 0) then ending = begining + (ending * 86400) else ending = 0 end db.executeQuery("INSERT INTO `guild_wars` (`guild_id`, `enemy_id`, `begin`, `end`, `frags`, `payment`) VALUES (" .. guild .. ", " .. enemy .. ", " .. begining .. ", " .. ending .. ", " .. frags .. ", " .. payment .. ");") doBroadcastMessage(getPlayerGuildName(cid) .. " has invited " .. enemyName .. " to war till " .. frags .. " frags.", MESSAGE_EVENT_ADVANCE) return true end if(not isInArray({"end", "finish"}, t[1])) then return false end local status = (t[1] == "end" and 1 or 4) tmp = db.getResult("SELECT `id` FROM `guild_wars` WHERE `guild_id` = " .. guild .. " AND `enemy_id` = " .. enemy .. " AND `status` = " .. status) if(tmp:getID() ~= -1) then local query = "UPDATE `guild_wars` SET `end` = " .. os.time() .. ", `status` = 5 WHERE `id` = " .. tmp:getDataInt("id") tmp:free() doGuildRemoveEnemy(guild, enemy) doGuildRemoveEnemy(enemy, guild) db.executeQuery(query) doBroadcastMessage(getPlayerGuildName(cid) .. " has " .. (status == 4 and "mend fences" or "ended up a war") .. " with " .. enemyName .. ".", MESSAGE_EVENT_ADVANCE) return true end if(status == 4) then doPlayerSendChannelMessage(cid, "", "Currently there's no pending war truce from " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0) return true end tmp = db.getResult("SELECT `id`, `end` FROM `guild_wars` WHERE `guild_id` = " .. enemy .. " AND `enemy_id` = " .. guild .. " AND `status` = 1") if(tmp:getID() ~= -1) then if(tmp:getDataInt("end") > 0) then tmp:free() doPlayerSendChannelMessage(cid, "", "You cannot request ending for war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0) return true end local query = "UPDATE `guild_wars` SET `status` = 4, `end` = " .. os.time() .. " WHERE `id` = " .. tmp:getDataInt("id") tmp:free() db.executeQuery(query) doBroadcastMessage(getPlayerGuildName(cid) .. " has signed an armstice declaration on a war with " .. enemyName .. ".", MESSAGE_EVENT_ADVANCE) return true end doPlayerSendChannelMessage(cid, "", "Currently there's no active war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0) return true end Crie um arquivo chamado war.php na pasta do seu Website war.php <?php $main_content = "<h1 align=\"center\">Guild Wars</h1> <script type=\"text/javascript\"><!-- function show_hide(flip) { var tmp = document.getElementById(flip); if(tmp) tmp.style.display = tmp.style.display == 'none' ? '' : 'none'; } --></script> <table width=\"100%\" border=\"0\" cellspacing=\"1\" cellpadding=\"4\"> <tr> <td style=\"background: " . $config['site']['vdarkborder'] . "\" class=\"white\" width=\"150\"><b>Aggressor</b></td> <td style=\"background: " . $config['site']['vdarkborder'] . "\" class=\"white\"><b>Information</b></td> <td style=\"background: " . $config['site']['vdarkborder'] . "\" class=\"white\" width=\"150\"><b>Enemy</b></td> </tr>"; $count = 0; foreach($SQL->query('SELECT * FROM `guild_wars` WHERE `status` IN (1,4) OR ((`end` >= (UNIX_TIMESTAMP() - 604800) OR `end` = 0) AND `status` IN (0,5));') as $war) { $a = $ots->createObject('Guild'); $a->load($war['guild_id']); if(!$a->isLoaded()) continue; $e = $ots->createObject('Guild'); $e->load($war['enemy_id']); if(!$e->isLoaded()) continue; $alogo = $a->getCustomField('logo_gfx_name'); if(empty($alogo) || !file_exists('guilds/' . $alogo)) $alogo = 'default_logo.gif'; $elogo = $e->getCustomField('logo_gfx_name'); if(empty($elogo) || !file_exists('guilds/' . $elogo)) $elogo = 'default_logo.gif'; $count++; $main_content .= "<tr style=\"background: " . (is_int($count / 2) ? $config['site']['darkborder'] : $config['site']['lightborder']) . ";\"> <td align=\"center\"><a href=\"?subtopic=guilds&action=show&guild=".$a->getId()."\"><img src=\"guilds/".$alogo."\" width=\"64\" height=\"64\" border=\"0\"/><br />".$a->getName()."</a></td> <td class=\"white\" align=\"center\">"; switch($war['status']) { case 0: { $main_content .= "<b>Pending acceptation</b><br />Invited on " . date("M d Y, H:i:s", $war['begin']) . " for " . ($war['end'] > 0 ? (($war['end'] - $war['begin']) / 86400) : "unspecified") . " days. The frag limit is set to " . $war['frags'] . " frags, " . ($war['payment'] > 0 ? "with payment of " . $war['payment'] . " bronze coins." : "without any payment.")."<br />Will expire in three days."; break; } case 3: { $main_content .= "<s>Canceled invitation</s><br />Sent invite on " . date("M d Y, H:i:s", $war['begin']) . ", canceled on " . date("M d Y, H:i:s", $war['end']) . "."; break; } case 2: { $main_content .= "Rejected invitation<br />Invited on " . date("M d Y, H:i:s", $war['begin']) . ", rejected on " . date("M d Y, H:i:s", $war['end']) . "."; break; } case 1: { $main_content .= "<font size=\"12\"><span style=\"color: red;\">" . $war['guild_kills'] . "</span> : <span style=\"color: lime;\">" . $war['enemy_kills'] . "</span></font><br /><br /><span style=\"color: darkred; font-weight: bold;\">On a brutal war</span><br />Began on " . date("M d Y, H:i:s", $war['begin']) . ($war['end'] > 0 ? ", will end up at " . date("M d Y, H:i:s", $war['end']) : "") . ".<br />The frag limit is set to " . $war['frags'] . " frags, " . ($war['payment'] > 0 ? "with payment of " . $war['payment'] . " bronze coins." : "without any payment."); break; } case 4: { $main_content .= "<font size=\"12\"><span style=\"color: red;\">" . $war['guild_kills'] . "</span> : <span style=\"color: lime;\">" . $war['enemy_kills'] . "</span></font><br /><br /><span style=\"color: darkred;\">Pending end</span><br />Began on " . date("M d Y, H:i:s", $war['begin']) . ", signed armstice on " . date("M d Y, H:i:s", $war['end']) . ".<br />Will expire after reaching " . $war['frags'] . " frags. ".($war['payment'] > 0 ? "The payment is set to " . $war['payment'] . " bronze coins." : "There's no payment set."); break; } case 5: { $main_content .= "<i>Ended</i><br />Began on " . date("M d Y, H:i:s", $war['begin']) . ", ended on " . date("M d Y, H:i:s", $war['end']) . ". Frag statistics: <span style=\"color: red;\">" . $war['guild_kills'] . "</span> to <span style=\"color: lime;\">" . $war['enemy_kills'] . "</span>."; break; } default: { $main_content .= "Unknown, please contact with gamemaster."; break; } } $main_content .= "<br /><br /><a onclick=\"show_hide('war-details:" . $war['id'] . "'); return false;\" style=\"cursor: pointer;\">» Details «</a></td> <td align=\"center\"><a href=\"?subtopic=guilds&action=show&guild=".$e->getId()."\"><img src=\"guilds/".$elogo."\" width=\"64\" height=\"64\" border=\"0\"/><br />".$e->getName()."</a></td> </tr> <tr id=\"war-details:" . $war['id'] . "\" style=\"display: none; background: " . (is_int($count / 2) ? $config['site']['darkborder'] : $config['site']['lightborder']) . ";\"> <td colspan=\"3\">"; if(in_array($war['status'], array(1,4,5))) { $deaths = $SQL->query('SELECT `pd`.`id`, `pd`.`date`, `gk`.`guild_id` AS `enemy`, `p`.`name`, `pd`.`level` FROM `guild_kills` gk LEFT JOIN `player_deaths` pd ON `gk`.`death_id` = `pd`.`id` LEFT JOIN `players` p ON `pd`.`player_id` = `p`.`id` WHERE `gk`.`war_id` = ' . $war['id'] . ' AND `p`.`deleted` = 0 ORDER BY `pd`.`date` DESC')->fetchAll(); if(!empty($deaths)) { foreach($deaths as $death) { $killers = $SQL->query('SELECT `p`.`name` AS `player_name`, `p`.`deleted` AS `player_exists`, `k`.`war` AS `is_war` FROM `killers` k LEFT JOIN `player_killers` pk ON `k`.`id` = `pk`.`kill_id` LEFT JOIN `players` p ON `p`.`id` = `pk`.`player_id` WHERE `k`.`death_id` = ' . $death['id'] . ' ORDER BY `k`.`final_hit` DESC, `k`.`id` ASC')->fetchAll(); $count = count($killers); $i = 0; $others = false; $main_content .= date("j M Y, H:i", $death['date']) . " <span style=\"font-weight: bold; color: " . ($death['enemy'] == $war['guild_id'] ? "red" : "lime") . ";\">+</span> <a href=\"/characters/" . urlencode($death['name']) . "\"><b>".$death['name']."</b></a> "; foreach($killers as $killer) { $i++; if($killer['is_war'] != 0) { if($i == 1) $main_content .= "killed at level <b>".$death['level']."</b> by "; else if($i == $count && $others == false) $main_content .= " and by "; else $main_content .= ", "; if($killer['player_exists'] == 0) $main_content .= "<a href=\"/characters/".urlencode($killer['player_name'])."\">"; $main_content .= $killer['player_name']; if($killer['player_exists'] == 0) $main_content .= "</a>"; } else $others = true; if($i == $count) { if($others == true) $main_content .= " and few others"; $main_content .= ".<br />"; } } } } else $main_content .= "<center>There were no frags on this war so far.</center>"; } else $main_content .= "<center>This war did not began yet.</center>"; $main_content .= "</td> </tr>"; } if($count == 0) $main_content .= "<tr style=\"background: ".$config['site']['darkborder'].";\"> <td colspan=\"3\">Currently there are no active wars.</td> </tr>"; $main_content .= "</table>"; ?> Creditos : •Elf/OTLand (Por fazer o Script) •Cakees (Por comprar e trazer ao XTibia)1 ponto
-
(Tutorial) Cliente Próprio Sem .spr
geovane456 reagiu a Tony por um tópico no fórum
Para fazer seu client você vai precisar: 1º Cliente (Pode ser qualquer Client Wodbo - Tibia - Naruto - Pokemon) 2º MoleBox (Download) Obs: NÂO TEM COMO BLOQUEAR PARA NINGUEM COPIAR SUAS SPRITES! Existem Vários programas que desfazem essa Compilação. Agora vou mostra um exemplo compilando o tíbia 8.6 Tutorial em Imagens! :star: CREDITOS :star: :star2: Jakiin :star2: :star2: ADM Babidy :star2:1 ponto -
Subwat® (02/04/2012) Atualizado 02/04/2012
Zeamparozil reagiu a Subwat por um tópico no fórum
Bem Vindo Ao Tópico Oficial Do Subwat Server! Download Direto : Aqui ChangeLog Todos: Paixao de cristo, Test, cabuloso dentre várias outras... todos:exori foxbr,exevo foxbr,morre fdp,morre fdp,utani vip Hur,utani sonic hur,utani fresno Hur,utevo maximus Lux,heal editeds,mana editeds; mana vip entre outros Mts e mts outros.... COmandos:.!buyvida,!buymana,!aol,!demonio,!blackteam,!whiteteam,!addon,!promotion,!spells entre outros digite /commands para saber. Cidades:Subwat city (propria) Behavior (propria) Vip city(propria) senja(global) Zero city (propria) new" enigma (propria) new" Absolute City (propria) new" Absolute Island (propria) new" MONSTROS PRÓPRIOS:Lord vampire,vampire crash,lord dracula,verminor,pilx,exp boss,lord boss,boss,subwat boss,master subwat boss,demona,putinha do serv,hellghost entre mts e mts outros todos criados por Mim. Itens Próprios:subwat itens atk 1000,speciais atk 400 (iniciais),special set(proteção elemental +addskill),foxbr itens atk 10k,supreme itens atk 5k,samurai set,samurai armas de atk 1500 entre outras.... VERSÃO ABSOLUTE! TUDO NOVO DE NOVO! Novos monstros,nova cidade VIP,nova absolute city,sistema de loteria sorteando vip coins,VIP coins podendo comprar tudo por comando! Mapa tá quase o dobro do tamanho de tantas coisas novas! o servidor ficou online durante 6 meses o absolute server,e agora acabou e por isso estou postando a atualizaçao espero que curtam ! DOWNLOAD: SUBWAT V21 SCAN: Scan.IMAGENS: Absolute City Area vip 2 Area vip 1 Arumha War 1 x 1 CRÉDITOS: Gean Riot (subwat) Por tudo,mapa spells itens talks absolutamente tudo. é isso ae pessoal quem gostar do servidor clique em REP+ no cantinho da tela,geanzinho agradece lembrando que eu fasso esse server pensando exclusivamente Nos fãs de Subwat xD e a todos que aprovam meu trabalho.! comentem ae1 ponto -
[8.60] Styller Yourots {Editado 2.0}
Hudsonlemos reagiu a mercenaryy por um tópico no fórum
Bom começando sou bem novo aki, e a pouco tempo peguei 1 mapa styller cheio de bugs. Entao resolvi editalo e compartilhar com vc's ! [Aviso] Esse mapa n é meu só resolvi tirar os bug's e posta-lo aki ! • Informações: Editado por Maycon 13/11/11 -- ADD TELEPORTS PRAS HUNTS E QUESTS. -- Novo Visual do Templo. -- Novo Visual do DP. -- ADDONS AGORA POR ITENS. -- Adicionado Comando Para Comprar VIP: !buyvip. -- Adicionado NPC Morpheu (que troca 100 Giant Spider Silk por 10 Spool of Yarn). -- Adicionado NPC A Sweaty Cyclops (que troca itens de addons que não caí de bichos por equipamento). -- Obsidian Knife e Blessed Wooden Stakeedit Funcionando. -- Canivete funcionando e Adicioando nNPC que o vende. -- Nargor Editado. -- VIP Quest (em Nargor). -- Adicionando VIP Itens. -- Novas Áreas adicionadas como: dwarf, lizard, minotaur, tortoise, quara, wasp, chicken, dwork, djins, entre outras... -- Editado itens.xml. -- Editado pasta npc. -- Editado loot dos bichos. -- Adicionado Poção que dobra sua xp por 30 minutos (vendido na área VIP). -- Ao usar uma potion o empty vial some. -- Adicionado camas nas casas. Editado por Maycon 11/11/11 -- NOVOS VIPS ITENS: E AGORA VENDIDOS NA NPC MAD -- Novo Templo. -- Cidades Editadas. -- Bugs das casas arrumados. -- Bug da grana arrumado -- Bug do Golden Helmet arrumado -- Bug da HOTA arrumado -- Bug do pz arrumado -- Bug da NPC A Sweaty Cyclops arrumado. -- ADD Quest Yalahar. -- Algumas edições no mapa. -- ADD Area vip 2 com novos teleport's e npc's -- ADD area pra open battle -- E muito mais... Bom Bugs ou qual quer outra coisa entrem em contato meu msn é : mayconloko_@hotmail.com vlw. ACC GOD god/god DOWNLOAD Download do server :http://www.4shared.c...ado_20_860.html Scan : http://www.virustotal.com/file-scan/report.html?id=c956eaeef270d10c581f7a0582bff540a0f6d89122bff78094e01218bab0134a-1321368285 • Créditos Quote LeozeraRox -- Rodrigo -- RenanSdc -- Robson Dias -- Comedinhasss -- Techloko -- TFS Team -- Gorno -- Vilden -- Pumah -- RubensBarrichelo -- Vodkart -- Doidin -- Maycon1 ponto -
(8.60) Global Mapa Com Npc Death Igual Ao 8.40
joaovitorjoia reagiu a devotti2 por um tópico no fórum
(8.60) mysql serv. :withstupidsmiley: rep+ por mim restaurar esse belo trabalho. |!buyvip uniqueid 13700 Ot igual ao 8.40 de bekman que atualizei para 8.60 e agora com armas vip. tah mto legal baixem ae. xtreme wand xtreme sword xtreme axe xtreme arrow xtreme bow InvaSOES POR COMANDO /mr. punish /dracola /massacre /handmaiden /orshabaal /demodras /necropharus /the old widow /zarabustor /xenia /yalchal /ferumbras /morgaroth /ghazbaran Cidades: ____________________ * Carlin * AB'Dendriel * Kazordoon * Port Hope * Edron * Ankrahmun * Venore * New Island * Svargrond * Ilha Dos Eventos * Thais * Yalahar ____________________ Quest's: ____________________ * Banshee Quest -- (LV 60) * Demon Helmet -- (LV 100) * Anihilator -- (LV 100) * Ancient Helmet -- (LV 100) * DSM -- (LV 95) * Demona Quest -- (LV 80) * RH -- (LV 30) * Behe Quest -- (LV 80) * Ring of the sky -- (LV 85) * Bright Sowrd -- (LV 45) * Banshee Quest -- (LV 60) * Crown Legs -- (LV 8) * Blue <> BOH <> SS -- (LV 60) * Warlock Quest -- (LV 70) * Knight Armor -- (LV 8) * Teddy Bear -- (LV 135) * Mms and Giant Sword -- (LV 100) * Fire Sowrd -- (LV 20) * Warrior Helmet -- (LV 8) * 4 Itens Raros -- (LV 210) <> Crystal Arrow <> Gold Ring <> Dragon Scale Legs <> Great Shield * 4 Itens Raros -- (LV 220) <> Magic Plate Armor <> Great Axe <> Horned Helmet <> Golden Boots * POI (Pits of Inferno) -- (LV 100) Descrição breve: A melhor quest do serv a mais demorada a mais aventurada a melhor =D. <> Avenger <> 100 platinum coins <> Frozen Starlight <> Boots of Waterwalking <> Stuffed Dragon <> Sprite Wand <> Arbalest * The Inquisition Quest. -- (LV 100) <> Royal Crossbow <> Warsinger Bow <> Spellbook of Dark Mysteries <> Emerald Sword <> Hellforged Axe <> Obsidian Truncheon <> Master Archer's Armor <> Fireborn Giant Armor <> Robe of The Underworld Credito: Natan beckman (90%) a mim(10%) a senha do god voce poem no sql studio. link para download: http://www.4shared.c...lobal_full.html :XTibia_smile: Nao sou obrigado a postar scans malz. Net lerda Para o bug das potions é só baixar este arquivo e por em scripts actions substituindo a que ja tem la >link > http://www.4shared.c...nE/Potions.html em actions.xml: <!-- Potions --> <action itemid="7439" script="liquids/berserk_potion.lua"/> <action itemid="7440" script="liquids/mastermind_potion.lua"/> <action itemid="7443" script="liquids/bullseye_potion.lua"/> <action itemid="7588" script="liquids/strong_health.lua" allowfaruse="1"/> <action itemid="7589" script="liquids/strong_mana.lua" allowfaruse="1"/> <action itemid="7590" script="liquids/great_mana.lua" allowfaruse="1"/> <action itemid="2281" script="liquids/mana rune.lua" allowfaruse="1"/> <action itemid="7591" script="liquids/great_health.lua" allowfaruse="1"/> <action itemid="8472" script="liquids/great_spirit.lua" allowfaruse="1"/> <action itemid="8473" script="liquids/ultimate_health.lua" allowfaruse="1"/> <action itemid="7618" script="liquids/health_potion.lua" allowfaruse="1"/> <action itemid="7620" script="liquids/mana_potion.lua" allowfaruse="1"/> <action itemid="8704" script="liquids/small_health.lua" allowfaruse="1"/> <action itemid="8474" script="liquids/antidote_potion.lua" allowfaruse="1"/> REP + AE E COMENTEM OQUE ACHRAM OU OQUE FLTA MUDAR.1 ponto -
Boa noite, Bom, quem me conhece sabe que eu era Spriter/Client Maker, e fiz ate 2 apostilas sobre o assunto. Derrepente me deu vontade de aprender script, e fiquei lendo tutoriais em varios Foruns. E hoje estou aqui pra mostrar meu primeiro trabalho medio divulgado! Nome do Script: Castle War 2.0 ultimate Versão testada: Tfs 0.3.6 ( deve funcionar em versões anteriores ) Descriçao: Um sistema de Guerra de castelos para guilds, deferente :]! Como funciona: O Player vai no castelo, e puxa uma lavanca, e automaticamente, todos da guild dele, tem acesso ao castelo ( porta ). Alem de contar pontos pra ganhar premios por vezes que ele conseguiu conquistar Castelos! ps: esse guarda é configurado para não atacar os ‘donos’ do castelo! :fail: Instalação Actions Va na pasta Data/action/action.xml e adicione isto: Agora vá em Data/actions/scripts , crie esses 4 arquivos abaixo: castlewar1.lua ----------------------------------- ---------SCRIPT por PC98------------ NAO REMOVA OS CREDITOS ----------------------------------- function onUse(cid, item, frompos, item2, topos) ------------------ Inicio das Config ------------ local castle_one_name = "Ratim Bum" -- Nome do castelo 1 local storages = {154154,54321,123123} -- Storages ( se vc eh iniciante, deixe como está...) -------PREMIOs I N D I V I D U A L --------- local premio_por_vezes = 1 -- Premio por vezes de conquista de castelo. (1) = Ativo (0) = Desativa. local premio_vezes = 13 -- Caso ativo, a quantidade de conquista que o player tem, para ganhar PREMIO. local premio = 2472 -- ID do Premio local premio_cont = 1 -- Quantidade do Premio local premio_reset = 1 -- Resetar o contador do premio depois que atingir a meta?? (1) = SIM (0) = NAO -------FIM PREMIOs I N D I V I D U A L --------- ----------------- FIM DAS CONFIG ----------------- local sto_ativ = getGlobalStorageValue(storages[2]) position = getCreaturePosition(cid) if isPlayerGuild(cid) == TRUE then if sto_ativ == 1 or sto_ativ == -1 then guildname = getPlayerGuildName(cid) guild = getPlayerGuildId(cid) guild_sto = getGlobalStorageValue(storages[3]) if guild ~= guild_sto then setPlayerStorageValue(cid,guild_sto,guild) if getPlayerStorageValue(cid,storages[1]) == -1 then setPlayerStorageValue(cid,storages[1],0) end sto_vezes = getPlayerStorageValue(cid,storages[1]) setGlobalStorageValue(storages[3],getPlayerGuildId(cid)) setPlayerStorageValue(cid,storages[1], sto_vezes + 1) sto_vezes_total = getPlayerStorageValue(cid,storages[1]) doBroadcastMessage("O(a) "..getCreatureName(cid).." acabou de conquistar o castelo "..castle_one_name.." para a guild \""..guildname.."\" pela "..sto_vezes_total.."ª vez(s).", 22) doSendMagicEffect(position, 39) if premio_por_vezes == 1 then if getPlayerStorageValue(cid,storages[1]) == premio_vezes then if getItemWeightById(premio,1) <= getPlayerFreeCap(cid) then doBroadcastMessage("O "..getCreatureName(cid).." ganhou uma(o) "..getItemNameById(premio).." como recompensa das suas "..premio_vezes.." conquistas!", 21) doPlayerAddItem(cid, premio,premio_cont) doPlayerSendTextMessage(cid, 18, "Voce recebeu o(a) "..getItemNameById(premio).." como recompensa das suas "..premio_vezes.." conquistas!") ----------------------------------------------- -- if premio_reset == 1 then -- setPlayerStorageValue(cid,storages[1],0) -- Resetar a contagem end -- ----------------------------------------------- -- else doPlayerSendTextMessage(cid, 18, "Voce nao tem capacidade para ganhar o item. Vamos verificar novamente em 10 segundos!") addEvent(additem,10000,cid,premio,premio_cont,premio_reset) end end end else doPlayerSendCancel(cid,"Este castelo ja foi conquistado pela sua guild!") doSendMagicEffect(position, 2) end else doPlayerSendCancel(cid,"O sistema está desativado") end else doPlayerSendCancel(cid,"É nescessario ter guild para dominar o castelo!") doSendMagicEffect(position, 2) end end ------------------------- por pc98 function additem(cid,premio,premio_cont,premio_reset) if getItemWeightById(premio,1) <= getPlayerFreeCap(cid) then doPlayerAddItem(cid, premio,premio_cont) doPlayerSendTextMessage(cid, 18, "Voce recebeu o(a) "..getItemNameById(premio).." como recompensa das suas "..premio_vezes.." conquistas!") if premio_reset == 1 then setPlayerStorageValue(cid,storages[1],0) end stopEvent(additem) else doPlayerSendTextMessage(cid, 18, "Voce nao tem capacidade para ganhar o item. Verificando novamente em 10 segundos!") addEvent(additem,10000,cid) end end ------------------------- por pc98 function isPlayerGuild(cid) if getPlayerGuildName(cid) ~= "" then return TRUE else return FALSE end end castlewar2.lua ----------------------------------- ---------SCRIPT por PC98------------ NAO REMOVA OS CREDITOS ----------------------------------- function onUse(cid, item, frompos, item2, topos) ------------------ Inicio das Config ------------ local castle_two_name = "do Dracula" -- Nome do castelo 2 local storages = {154154,54321,321321} -- Storages ( se vc eh iniciante, deixe como está...) -------PREMIOs I N D I V I D U A L --------- local premio_por_vezes = 1 -- Premio por vezes de conquista de castelo. (1) = Ativo (0) = Desativa. local premio_vezes = 13 -- Caso ativo, a quantidade de conquista que o player tem, para ganhar PREMIO. local premio = 2472 -- ID do Premio local premio_cont = 1 -- Quantidade do Premio local premio_reset = 0 -- Resetar o contador do premio depois que atingir a meta?? (1) = SIM (0) = NAO -------FIM PREMIOs I N D I V I D U A L --------- ----------------- FIM DAS CONFIG ----------------- local sto_ativ = getGlobalStorageValue(storages[2]) position = getCreaturePosition(cid) if isPlayerGuild(cid) == TRUE then if sto_ativ == 1 or sto_ativ == -1 then guildname = getPlayerGuildName(cid) guild = getPlayerGuildId(cid) guild_sto = getGlobalStorageValue(storages[3]) if guild ~= guild_sto then setPlayerStorageValue(cid,guild_sto,guild) ----------------------------------------------------- if getPlayerStorageValue(cid,storages[1]) == -1 then setPlayerStorageValue(cid,storages[1],0) end ----------------------------------------------------- sto_vezes = getPlayerStorageValue(cid,storages[1]) setGlobalStorageValue(storages[3],getPlayerGuildId(cid)) setPlayerStorageValue(cid,storages[1], sto_vezes + 1) sto_vezes_total = getPlayerStorageValue(cid,storages[1]) doBroadcastMessage("O(a) "..getCreatureName(cid).." acabou de conquistar o castelo "..castle_two_name.." para a guild \""..guildname.."\" pela "..sto_vezes_total.."ª vez(s).", 22) doSendMagicEffect(position, 39) if premio_por_vezes == 1 then if getPlayerStorageValue(cid,storages[1]) == premio_vezes then if getItemWeightById(premio,1) <= getPlayerFreeCap(cid) then doBroadcastMessage("O "..getCreatureName(cid).." ganhou uma(o) "..getItemNameById(premio).." como recompensa das suas "..premio_vezes.." conquistas!", 21) doPlayerAddItem(cid, premio,premio_cont) doPlayerSendTextMessage(cid, 18, "Voce recebeu o(a) "..getItemNameById(premio).." como recompensa das suas "..premio_vezes.." conquistas!") ----------------------------------------------- -- if premio_reset == 1 then -- setPlayerStorageValue(cid,storages[1],0) -- Resetar a contagem end -- ----------------------------------------------- -- else doPlayerSendTextMessage(cid, 18, "Voce nao tem capacidade para ganhar o item. Vamos verificar novamente em 10 segundos!") addEvent(additem,10000,cid,premio,premio_cont,premio_reset) end end end else doPlayerSendCancel(cid,"Este castelo ja foi conquistado pela sua guild!") doSendMagicEffect(position, 2) end else doPlayerSendCancel(cid,"O sistema está desativado") end else doPlayerSendCancel(cid,"É nescessario ter guild para dominar o castelo!") doSendMagicEffect(position, 2) end end ------------------------- Por PC98. function additem(cid,premio,premio_cont,premio_reset) if getItemWeightById(premio,1) <= getPlayerFreeCap(cid) then doPlayerAddItem(cid, premio,premio_cont) doPlayerSendTextMessage(cid, 18, "Voce recebeu o(a) "..getItemNameById(premio).." como recompensa das suas "..premio_vezes.." conquistas!") if premio_reset == 1 then setPlayerStorageValue(cid,storages[1],0) end stopEvent(additem) else doPlayerSendTextMessage(cid, 18, "Voce nao tem capacidade para ganhar o item. Verificando novamente em 10 segundos!") addEvent(additem,10000,cid) end end ------------------------- por pc98 function isPlayerGuild(cid) if getPlayerGuildName(cid) ~= "" then return TRUE else return FALSE end end castledoor1.lua --------------- -----BY PC98------- --------------- function onUse(cid, item, frompos, item2, topos) -------------------------Config----------------------------------------------------------------- door_opened = 1228 -- ID da porta aberta storage_guild = getGlobalStorageValue(123123) -- A 3ª storage configurada em Castle.lua guarda_ativ = 1 -- Caso um invasor tente abrir a porta, sumonar o Monstro "Guarda"?? | (1) = SIM (0) = NAO guarda_cont = 2 -- Caso ativo: a quantidade de guardas a sumonar guarda_pos = {x=123,y=123,y=7} -- Posiçao a ser sumonada os guardas! -------------------------Fim de Config----------------------------------------------------------- if getPlayerGuildId(cid) == storage_guild then doTeleportThing(cid,getThingPos(item.uid)) doTransformItem(item.uid, door_opened) doPlayerSendTextMessage(cid, 22, "Seja bem vindo a vosso castelo!") return TRUE else if guarda_ativ == 1 then doPlayerSendTextMessage(cid, 22, "Guaaaardas, tirem esses invasores daqui!!") for i=1, guarda_cont do doSummonCreature("Guarda", guarda_pos) end return FALSE else doPlayerSendTextMessage(cid, 22, "Este castelo nao pertence a sua guild") return FALSE end end end castledoor2.lua --------------- -----BY PC98------- --------------- function onUse(cid, item, frompos, item2, topos) -------------------------Config----------------------------------------------------------------- door_opened = 1228 -- ID da porta aberta storage_guild = getGlobalStorageValue(321321) -- A 3ª storage configurada ( ja esta configurada o PADRAO ) guarda_ativ = 1 -- Caso um invasor tente abrir a porta, sumonar o Monstro "Guarda"?? | (1) = SIM (0) = NAO guarda_cont = 4 -- Caso ativo: a quantidade de guardas a sumonar guarda_pos = {x=321,y=321,y=7} -- Posiçao a ser sumonada os guardas! -------------------------Fim de Config----------------------------------------------------------- if getPlayerGuildId(cid) == storage_guild then doTeleportThing(cid,getThingPos(item.uid)) doTransformItem(item.uid, door_opened) doPlayerSendTextMessage(cid, 22, "Seja bem vindo a vosso castelo!") return TRUE else if guarda_ativ == 1 then doPlayerSendTextMessage(cid, 22, "Guaaaardas, tirem esses invasores daqui!!") for i=1, guarda_cont do doSummonCreature("Guarda", guarda_pos) end return FALSE else doPlayerSendTextMessage(cid, 22, "Este castelo nao pertence a sua guild") return FALSE end end end Talkactions Va na pasta Data/talkaction/talkactions.xml , clique com o botao direito e depois editar. Adicione esta linha: <talkaction words="/war" event="script" value="castlesystem.lua"/> Agora va na pasta scripts , e crie um arquivo lua chamado castlesystem.lua. castlesystem.lua function onSay(cid, words, param) access = 4 -- Coloque aqui o access requirido para Ativar/Desativar o sistema if param == "start" then if getPlayerAccess(cid) == access then setGlobalStorageValue(54321,1) doPlayerSendTextMessage(cid, 20, "Voce ativou o Castle Wars com suscesso!") return TRUE end elseif param == "stop" then if getPlayerAccess(cid) == access then setGlobalStorageValue(54321,2) doPlayerSendTextMessage(cid, 20, "Voce desativou o Castle Wars com suscesso!") return TRUE end end end Monster O mostro Guarda... aquele que eu disse que pode ficar dentro do castelo :] Instalaçao: va na pasta data/monsters e edite o arquivo Monster.xml , adicionando esta linha: <monster name="Guarda" file="guarda.xml"/> e depois crie um arquivo na mesma pasta chamado guarda.xml guarda.xml <?xml version="1.0"?> <monster name="Guarda" nameDescription="the guard" experience="6000" speed="268" race="Blood"> <health now="20000" max="20000"/> <look type="73" corpse="6080"/> <strategy attack="200" defense="300"/> <targetchange speed="420" chance="1"/> <flags> <flag canpushitems="1"/> <flag canpushcreatures="1"/> <flag attackable="1"/> <flag pushable="0"/> <flag staticattack="90"/> <flag targetdistance="1"/> </flags> <attacks> <attack name="melee" interval="2000" chance="100" min="-400" max="-800" range="1"/> <attack name="physical" interval="4000" chance="25" min="-600" max="-700" range="7" radius="8" target="1"> <attribute key="shootEffect" value="arrow"/> </attack> </attacks> <defenses defense="45" armor="40"/> <immunities> <immunity name="paralyze"/> <immunity name="invisible"/> </immunities> <voices speed="2200" chance="75"> <voice sentence="Grrrrrrrrrr" yell="1"/> <voice sentence="Saia daqui intrusos!" yell="1"/> <voice sentence="Sua resistencia e inutil!" yell="1"/> <voice sentence="Voce vai ser preso!" yell="1"/> </voices> <script> <event name="guard"/> </script> <elements/> <loot/> </monster> Creatures Scripts Bom, agora a gente tem de configurar pra esse bixo nao atacar os donos do castelo neh, se nao ele vai sair porai matando GERAL :fuu:. Vamo nessa. Va na pasta data/creaturescripts e edite o arquivo creaturescripts.xml adicionando esta linha: <event type="combat" name="guard" script="guard.lua"/> agora abra a pasta scripts, que esta na mesma pasta e crie um arquivo chamado guard.lua. guard.lua function onCombat(cid, target) if(not isPlayer(target)) then return TRUE else targets = getMonsterTargetList(cid) if getPlayerGuildId(target) == getGlobalStorageValue(123123) then addEvent(check,1000,cid,targets) return FALSE else return TRUE end end end function check(cid,targets) for i=1, #targets do if getPlayerGuildId(targets[i]) == getGlobalStorageValue(123123) then addEvent(check,1000,cid,targets) return FALSE else stopEvent(check) return TRUE end end end Esta configurado o Monstro! Vamos pra proxima etapa! Instalaçao no MapaEditor Va ate no primeiro castelo, e adicione uma lavanca ( id recomendado: 1945 ) e coloque aonde voce quiser. Depois de colocado a lavanca, clique nela com o botao direito do mouse e va em property. No campo "ActionID:" coloque 9999. Faça a mesma coisa com o segundo castelo, crie la a lavanca, e coloque actionID 8888. Se voce quiser voce pode criar uma porta especial, por onde so os 'donos' do castelo pode entrar, afinal, ja ta instalado! :fail: Coloque ActionID 9998 na porta no primeiro castelo, e actionID 8887 na porta do segundo castelo. Comandos /war start - Para Ativar o sistema ( ja vem ativado por padrao) /war stop - Para desativar o sistema. Bom, eh isso ai. Eh meu primeiro Script ( de muitos ) pro forum XTibia, e espero ta ajudando o forum. Creditos: PC98 - Pelo script MonsterEditor - Pelo mosntro Guarda. ( blackdemon) obs: Esse mesmo script foi postado em outro forum, porem fui eu mesmo que postei ( PC98 - mesmo nick ). abraços!1 ponto
-
Sabe aquele negocio chato de quando vc tem que mudar level ou editar algum char que voçê tem que ir no phpmyadmin etc? poisé isso acabou! :b Crie uma pasta em C:\xampp\htdocs com o nome: adminpro.php e cole isso: <?PHP //README: if nick contain "'" use "\'". For example: nick = The'Knight so use in the form The\'Knight ,,,-WORKS! if($group_id_of_acc_logged >= $config['site']['access_admin_panel']) { $main_content .= 'Welcome to advanced admin panel! Mainly you can edit players. Coded by <a href="http://otland.net/members/turs0n/">turson</a>'; //admin panel menu (player+account) $main_content .= '<br /><br /><div style="width:100%;border:1px solid #c6c6c6;padding:3px 0 3px 0"> <b>EDIT PLAYER -></b> <a href="?subtopic=admin&action=namelock">Name</a> | <a href="?subtopic=admin&action=exp">Experience</a> | <a href="?subtopic=admin&action=level">Level</a> | <a href="?subtopic=admin&action=others">Others</a> | <a href="?subtopic=admin&action=position">Position</a> | <a href="?subtopic=admin&action=delete">Delete</a> <br> <b>EDIT ACCOUNT -></b> <a href="?subtopic=admin&action=acc">Account Number</a> | <a href="?subtopic=admin&action=pass">Password</a> | <a href="?subtopic=admin&action=mail">E-mail</a> | <a href="?subtopic=admin&action=access">Access</a> <br><center><font color="red"><b>PLAYER MUST BE OFFLINE!</b></font></center> </div><br>'; /////////////////////////////////CHARACTER//////////////////////////////////// //namelock if (isset($_POST['ok1'])){ $SQL->query("UPDATE `players` SET `name` = ".$SQL->quote( $_POST['newname'] )." WHERE name = ".$SQL->quote( $_POST['name0'] ).";"); $main_content .= "Player name has been changed.";} //exp if (isset($_POST['ok2'])){ $SQL->query("UPDATE `players` SET experience = experience + ".$SQL->quote( $_POST['exp'] )." WHERE name = ".$SQL->quote( $_POST['name1'] ).";"); $main_content .= "Experience has been added.";} //level if (isset($_POST['ok3'])){ $SQL->query("UPDATE `players` SET level = ".$SQL->quote( $_POST['level'] )." WHERE name = ".$SQL->quote( $_POST['name2'] ).";"); $main_content .= "Level has been set.";} //others if (isset($_POST['ok4'])){ $SQL->query("UPDATE `players` SET health=".$SQL->quote( $_POST['health'] ).",healthmax=".$SQL->quote( $_POST['health'] ).",mana=".$SQL->quote( $_POST['mana'] ).",manamax=".$SQL->quote( $_POST['mana'] ).",cap=".$SQL->quote( $_POST['cap'] ).",maglevel=".$SQL->quote( $_POST['maglevel'] )." WHERE name = ".$SQL->quote( $_POST['name3'] ).";"); $main_content .= "Informations has been changed.";} //delete if (isset($_POST['ok5'])){ $SQL->query("DELETE from `players` WHERE name = ".$SQL->quote( $_POST['name4'] ).";"); $main_content .= "Character has beed deleted.";} //pos if (isset($_POST['ok10'])){ $SQL->query("UPDATE `players` SET group_id = ".$SQL->quote( $_POST['newpos'] )." WHERE name = ".$SQL->quote( $_POST['name9'] ).";"); $main_content .= "Player position has been changed.";} /////////////////////////////////////////ACCOUNT/////////////////////////////////////// //acc if (isset($_POST['ok6'])){ $SQL->query("UPDATE `accounts` INNER JOIN `players` ON `accounts`.`id` = `players`.`account_id` SET accounts.name=".$SQL->quote( $_POST['newacc'] )." WHERE players.name = ".$SQL->quote( $_POST['name5'] ).";"); $main_content .= "Account number has beed changed.";} //password if (isset($_POST['ok7'])){ $SQL->query("UPDATE `accounts` INNER JOIN `players` ON `accounts`.`id` = `players`.`account_id` SET accounts.password=".$SQL->quote( $_POST['newpass'] )." WHERE players.name = ".$SQL->quote( $_POST['name6'] ).";"); $main_content .= "Password has beed changed.";} //mail if (isset($_POST['ok8'])){ $SQL->query("UPDATE `accounts` INNER JOIN `players` ON `accounts`.`id` = `players`.`account_id` SET accounts.email=".$SQL->quote( $_POST['newmail'] )." WHERE players.name = ".$SQL->quote( $_POST['name7'] ).";"); $main_content .= "E-Mail adress has beed changed.";} //mail if (isset($_POST['ok9'])){ $SQL->query("UPDATE `accounts` INNER JOIN `players` ON `accounts`.`id` = `players`.`account_id` SET accounts.page_access=".$SQL->quote( $_POST['newaccess'] )." WHERE players.name = ".$SQL->quote( $_POST['name8'] ).";"); $main_content .= "Page access has beed changed.";} ////////////CHARACTER FORM/////////// //namelock form if($_GET["action"]=="namelock"){ $main_content .= '<form action="?subtopic=admin" method="post"> New Player Name <input type="text" name="newname"><br> Old Player Name <input type="text" name="name0"><br><input type="submit" value="OK" name="ok1"></form>';} //exp form if($_GET["action"]=="exp"){ $main_content .= '<form action="?subtopic=admin" method="post"> Add experience <input type="text" name="exp"> (only numbers)<br> Player Name <input type="text" name="name1"><br><input type="submit" value="OK" name="ok2"></form>';} //level form if($_GET["action"]=="level"){ $main_content .= '<form action="?subtopic=admin" method="post"> Set player level <input type="text" name="level"> (only numbers)<br> Player Name <input type="text" name="name2"><br><input type="submit" value="OK" name="ok3"></form>';} //others form if($_GET["action"]=="others"){ $main_content .= '<form action="?subtopic=admin" method="post"> Health <input type="text" name="health"> (only numbers)<br> Mana <input type="text" name="mana"> (only numbers)<br> Cap <input type="text" name="cap"> (only numbers)<br> MagLevel <input type="text" name="maglevel"> (only numbers)<br> Player Name <input type="text" name="name3"><br><input type="submit" value="OK" name="ok4"></form>';} //delete form if($_GET["action"]=="delete"){ $main_content .= '<form action="?subtopic=admin" method="post"> Player Name <input type="text" name="name4"><br><b>ARE YOU SURE?</b> <input type="submit" value="YES" name="ok5"></form>';} //pos form if($_GET["action"]=="position"){ $main_content .= '<form action="?subtopic=admin" method="post"> Position <input type="text" name="newpos"><i>example(1-player,2-tutor,3-senior tutor,4-gamemaster,5-community manager,6-god)</i> <br> Player Name <input type="text" name="name9"><br><input type="submit" value="OK" name="ok10"></form>';} /////////////ACCOUNT FORM//////////////// //account number form if($_GET["action"]=="acc"){ $main_content .= '<form action="?subtopic=admin" method="post"> New account number <input type="text" name="newacc"> <br> Player Name <input type="text" name="name5"><br><input type="submit" value="OK" name="ok6"></form>';} //password form if($_GET["action"]=="pass"){ $main_content .= '<form action="?subtopic=admin" method="post"> New password <input type="text" name="newpass"> <br> Player Name <input type="text" name="name6"><br><input type="submit" value="OK" name="ok7"></form>';} //mail form if($_GET["action"]=="mail"){ $main_content .= '<form action="?subtopic=admin" method="post"> New e-mail adress <input type="text" name="newmail"> <br> Player Name <input type="text" name="name7"><br><input type="submit" value="OK" name="ok8"></form>';} //access form if($_GET["action"]=="access"){ $main_content .= '<form action="?subtopic=admin" method="post"> Page access <input type="text" name="newaccess">(3->admin) <br> Player Name <input type="text" name="name8"><br><input type="submit" value="OK" name="ok9"></form>';} } else $main_content .= "You don't have required access!"; ?> Salve e feixe. Agora va em: index.php Após case "adminpanel": $topic = "Admin Panel"; $subtopic = "adminpanel"; include("adminpanel.php"); break; Cole isso: case "admin"; $subtopic = "admin"; $topic = "Advanced Admin Panel"; include("adminpro.php"); break; Salve e feixe. Agora va em C:\xampp\htdocs\layouts\tibiacom abra o layout.php após: <a href='?subtopic=createaccount'> <div id='submenu_createaccount' 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_createaccount' class='ActiveSubmenuItemIcon' style='background-image:url(<?PHP echo $layout_name; ?>/images/menu/icon-activesubmenu.gif);'></div> <div class='SubmenuitemLabel'>Create Account</div> <div class='RightChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div> </div> </a> Cole isso: <a href='?subtopic=admin'> <div id='submenu_adminpanel' class='Submenuitem' onMouseOver='MouseOverSubmenuItem(this)' onMouseOut='MouseOutSubmenuItem(this)'> <div class='LeftChain' style='background-image:url(".$layout_name."/images/general/chain.gif);'></div> <div id='ActiveSubmenuItemIcon_adminpanel' class='ActiveSubmenuItemIcon' style='background-image:url(".$layout_name."/images/menu/icon-activesubmenu.gif);'></div> <div class='SubmenuitemLabel'><font color=\"blue\">~<u>Admin PRO</u>~</font></div> <div class='RightChain' style='background-image:url(".$layout_name."/images/general/chain.gif);'></div> </div> Ficaram assim: e sejam felizes :b Crédito: turson obs: Não se preocupem apenas o admin do site conseiguira acessar esta pagina ;p1 ponto
-
Pessoal do estou de volta com mas 1 baiak com vip4 super editado com comando de !save agr e retirados todos os bugs q me informaram o das vips forao retirados junto com o da grana! Templo Novo Buero Free Templo Vip1 Templo Vip2 Templo Vip3 Templo Vip4 Então Gostaram Jaja eu ponho scan pq to sem o virustotal ta afk se alguem baixar se consegui faz o scan pra mim plx se gosto do mapa + rep http://www.4shared.com/file/HW15X4h_/860_Baiak_Edited_By_Baiakzik_V.html Ip Do Meu Ot pra Qm qerer ver o mapa primeiro antes de baixar : baiak-zik.servegame.com Meus Trabalhos http://www.xtibia.com/forum/topic/170408-mapa-baiak-com-vip3/ http://www.xtibia.com/forum/topic/170732-mapa-baiak-com-vip4/ http://www.xtibia.com/forum/topic/170965-baiak-vip4/ http://www.xtibia.com/forum/topic/171823-baiakzik-com-vip5-agr/#entry1128624 Créditos Baiak Yurots 1 % Bryan 4 % Matheusalvez 10 % Baiakzik 85 % So Ponho os créditos pq eles fizeram partes do mapa mas muito poko oq mas fez foi o matheusalvez q fez até vip3 so isso ¬¬ Scan http://www.virustotal.com/file-scan/report.html?id=0c78bb92d104c3ca813d93826eedf2e6863fe4dfde1efbeeedab7c07e85914c2-13201965141 ponto
-
[Atualizado] O Mapa Ideal
Fortspoke reagiu a Renato Ribeiro por um tópico no fórum
Olá Ééékstibianos! (: [Atualizado: 16, julho de 2010] Pronto para começar a criar o seu mapa ideal? Estou trazendo aqui "o mapa ideal", com referências de tutoriais do próprio XTibia. No fim está os créditos, onde estão todos os autores dos tutoriais. Elaborado e escrito por min. O mapa ideal? O mapa ideal é aquele que é jogável, coerente e belo. E o XTibia tem conteúdo de sobra para você desenvolver seu mapa ideal! Muitos não acham, muitos não procuram e também muitos não conhecem muito de fóruns e não sabem procurar. Sim, sim, muitos não sabem. Por estes e mais motivos, muitos criam "listão" com tutoriais vários tutoriais. Porém este é diferente, pois quando o "listão" é simplesmente vários tutoriais aleatórios pegos na seção de tutoriais, este aqui contém conteúdo para todos os pontos principais para um bom mapa, seguindo uma espécia de organograma por tópicos de cada parte do mapa. O MAPA Dois pontos principais de um mapa, certamente é a Cidade e a Hunt. Isso não temos dúvidas. Certo? Porém para todos os tópicos, existem subtópicos, se é que me entendem. Como por exemplo as Cidades. Para cidades temos as casas, os formatos, os barcos etc. Para as hunts temos as montanhas, as cavernas, dicas etc. SEU EDITOR Primeiramente para que você possa começar a criar mapas bons é necessário você conhecer sobre seu editor. Em sua maioria existem muitas funções que você pode não conhecer. Então é bom começar lendo tutoriais sobre seu editor não é? • Aprenda a usar seu Remeres Map Editor (RME) antes de tudo. Clique aqui. TREINO • Em tudo para você se tornar craque, ou você nasce com o dom, ou você tem que treinar. Por isso, criei dicas, para que você possa aprender técnicas para treinar mais fácilmente, sem menores problemas e até podendo aprender mais rápido de que outras formas. Clique aqui. O NECESSÁRIO Sua cidade: • Casas, pois cidade sem casa não é cidade. Clique aqui. • Formatos continentais agradáveis e coerentes. Clique aqui. • Formatos de bordas sempre deixa o mapa belo, não só na cidade quanto em hunts principalmente. Clique aqui. • Construções em geral. Lojas principalmente, você precisa saber fazer também! Clique aqui. • Barcos... Hum, muitos se confundem com aquele monte de ids. "Onde poe aquilo? E isto?" Certamente. Mas aqui você aprende. Clique aqui. • O templo tem que ser muito bonito, pois é onde o jogador nasce, e como se diz, a primeira impressão é a que fica. Clique aqui. • Um bom mapa também tem que ter suas vilas. Vilas são pequenas cidades onde tem poucas casas e poucas construções que ficam em um lugar isolado em beira de mares mais precisamente perto de florestas (é o mais comum, porém nem todas são assim). Não puis tutorial porque é simplesmente uma cidade, faça tudo que você fez para criar a cidade, mas faça muuito menor. Outros de cidades: • Aprenda a criar cidade de dwarf. Clique aqui. • Crie uma cidade do zero. Tutorial em desenvolvimento por min. Breve atualizarei. • Aprenda aqui a criar um calabouço real. Clique aqui. RolePlaying Game: Sim, sim! Rpg em um mapa deveria ser mais importante do que tudo, o que normalmente não é Um mapa pode ser extremamente belo, coerente, jogável, pode ser maravilhoso, mas só se tornará fantástico a partir de um bom RPG. • Aprenda dicas de RPG para seu mapa. Clique aqui. Sua hunt: • É muito importante saber fazer suas caves! Formatos em geral é muito importante... Clique aqui. • Não só saber fazer sua cave, mas também saber detalhar ela, isto sim é o mais importante. Clique aqui. • Montanhas, concerteza. "Mas Renato, aqui só sai aquele wall reto, não sai a montanha" Ahá, solução: Clique aqui. • Para uma montanha bela, tem que saber detalhar ela, é fundamental. Clique aqui e aqui. • Cachoeiras? Sim, cachoeiras deixa seu mapa super bonito, porém muitos não sabem fazer e muitos fazem com bugs. Aprenda! Clique aqui. • Nature, huuum, uma parte muito importante. Confesso que não sou expert nesta área, mas para todo bom mapa, tem que ter uma boa nature. Concerteza é um elemento fundamental em qualquer mapa. Clique aqui. • Muitos criam montanhas de gelo com bugs. Olha, vou ser sincero, muitos não... a maioria! Então aprenda aqui técnicas e dicas para criar não só uma montanha de gelo mas sim um ambiente agradável de gelo para seu mapa. Clique aqui. Outras de hunts: • Crie área de lizards, estilo o de zao. Clique aqui. Breve atualizações com mais tutoriais. Link quebrado? Sugestão? Erros? Críticas? Comente! Um abração galera!1 ponto -
[Hunt] Ankrahmun Dragon Lairs
fsg reagiu a DexpironFox por um tópico no fórum
Olá, vim trazer outra hunt legal pra vocês galerinha do Xtibia. Dependendo da lair não é tão dificil, é só ter cuidado e levar potions, sempre! Cidade: Ankrahmun (Duurrr) Level Recomendado: 45+ (Para a lair pequena) - 50+ (Lair média) - 60+ (Lair grande) Mages e Paladins podem visitar essas lairs em leveis bem mais baixos, o recomendado é: 25+ (Pequena) - 35+ (Média) - 50~55+ (Grande) Skills Recomendados: 70/70 (Knights) 60 Distance (Paladins) ML 35+ (Mages) A Xp/h e Gp/h vão depender da sua vocação. Set recomendado: Knights: Um crown set está bom para Huntar Dragons. Mais é bem recomendado usar no minimo um Royal Helmet, Golden Armor, Zaoan Legs, Steel boots, Demon Shield e Arma do level. Mages: Mage set normal (HotM, Focus cape, Zaoan/Blue legs, Demon Shield, Boh e Wand/rod) Paladin: Crusader/Royal helmet, Paladin armor, Zaoan legs, Boh, demon shield, royal spear. .::Spoiler - Como Chegar::. Respawns das Lairs: Lair pequena: Lair Média: Lair Grande: (A dragon lair grande não tenho o respawn todo porque ainda não subi nos Dragon Lords, sorry ) Monstros: Dragon (Pontos Vermelhos) 1000 Hitpoints 700 Pontos de experiência Ataques: »Bola de fogo (60-110) »Onda de fogo (100-170) »Corpo a Corpo (0-50) Dragon Lord (Pontos Pretos) 1900 Hitpoints 2100 pontos de experiência »Bomba de fogo (Fire Fields) »Grande bola de fogo (100-200) »Onda de fogo (150-200) »Corpo a Corpo (0-220) De Loot teremos tudo o que está no Spoiler intencionalmente colocado para não deixar o topico imenso. Metodo de Hunt: Nunca fiquem de frente para os Dragons pois suas waves machucam bastante Knights: Usem utura quando ficarem no Yellow. A primitiva porrada já basta para eliminar eles. Usem exori para eliminar 2 ou mais Dragon Lords juntos. Mages: Usar Exori frigo/Icicle. Paladins: Nao correr tanto dos dragons para não lurarem muito, royal spear/enchanted spear altamente recomendada. Então é isso galera! Até o proximo! abraços!1 ponto -
Onde Eu Erreei?
gustavohenrikee reagiu a Demonbholder por uma questão
Tente usar outro storage, testa ai: local itens = { [3000] = {id = 7429, pref = "Wand"}, [3001] = {id = 7366, pref = "Star"}, [3002] = {id = 8926, pref = "Axe"} } function onUse(cid, item) if itens[item.uid] then if getPlayerStorageValue(cid, 30000) <= 0 then doPlayerAddItem(cid, itens[item.uid].id, 1) doPlayerSendTextMessage(cid, 22, "Anima " .. itens[item.uid].pref) setPlayerStorageValue(cid, 30000, 1) else doPlayerSendTextMessage(cid, 22, "O baú está vazio.") end end return true end1 ponto -
Ajuda Quests.xml
lucasquevedobr reagiu a SkyDangerous por um tópico no fórum
Leia esse tutorial http://www.xtibia.com/forum/topic/56683-80-colocando-quests-no-quest-log/ ensina tudo.1 ponto -
Começou bem,postando creditos,imagens certinho,mais o templo ranca aqueles itens de la,tente fazer um tp que leva a uma sala e coloca os itens lá para n ficar muito bagunsado o link de dowload tente colocar so para clica sem precisar colar Ranque esse azul claro arde o olho , tente colocar aonde ta "oque mudou" ,de outra cor para n ficar bagunçado e atrapalhado o resto da legalzinho,vamos ver na versão 2, acho que vai melhorar em belo começo Scan http://www.virustota...dafb-1321374574 Nome do arquivo: [8,60] Baiak RoX Editado por ChukiNowhis.rar Data de apresentação: 2011/11/15 16:29:34 (UTC) Andamento: terminado Resultado: 3/ 39 (7,7%) VT da Comunidade ~EDITED~ Agora sim ,sem muita cor para arder o olho..na versão 2 já sabe melhorar o tópico quem sou eu para falar mais so tentei dar dicas que me deram1 ponto
-
Vai em SuaPastaDoOT/Data/Global events/e procure algum script com nome de teleports , teleports falantes algo assim ,se nao achar abra um por um até encontrar algo +- como issu function onThink(interval, lastExecution) pos = {x = 89, y = 92, z = 7} pos1 = {x = 85, y = 95, z = 7} [b][font=comic sans ms,cursive]doSendAnimatedText(pos, 'Riick', 144) doSendAnimatedText(pos1,'Riick', 60) [b][font=comic sans ms,cursive] return TRUE end quando você achar algo PARECIDO com o script acima vai no globalevents.xml e prucure a tag dele e apague vai estar assim <globalevent name="SEUSCRIPT" interval="2" script="SEUSCRIPT.lua"/> ai você apaga essa tag do globalevents.xml que para de falar ^^ .1 ponto
-
[Pip] Estagiário
DaNDaNrOxX reagiu a SkyDangerous por um tópico no fórum
Estagiário na vida real seria mesma coisa que aqui no forum. Eles passam por um processo de aprendizado, até que seja aprovado por um coordenador(não posso afirmar) Gostei muito da pib e do nome roxo , porém não gostei muito dos estagiário acho que deveriam dar mais de si.1 ponto -
RenanSdc pedimos que post as Sources do Servidor no prazo de 48 horas ou estaremos reportando seu topico para moderação Obrigado por compartilhar seu trabalho conosco! o servidor fikou bom mais só falta as sources abraços.1 ponto
-
Galera foi só comigo que aconteceu isso ? O server roda perfeitamente aqui porem nenhuma quest funciona, e teve alguns bugs de tiles e paredes indevidas no mapa. Mas isso das quests nao funcionar foi só comigo ? Abraço !1 ponto
-
Em Busca da Solução: Capítulo 2 – Mentiras Geografia não era o forte de ninguém em sua cidade, na verdade, em praticamente toda sua província. A única coisa que o povo gostava era luta. Todo tipo de artes marciais podiam ser aprendidas em sua província. Mas Kenzo era diferente, ele estudava muito todas as matérias, com exceção de geografia, pois cria não ter a menor utilidade para sua vida. A seção de geografia da biblioteca era como o esperado. Empoeirada, cheia de teias de aranha e com vários livros mais antigos que as próprias prateleiras em que estavam. Kenzo tentou tocar em um livro, mas ele se desmanchou em poeira. Realmente a condição daquela seção era deplorável. Kenzo viu pregado na parede um mapa com três grandes ilhas, cada qual com um nome escrito em seu interior. Soph, a maior ilha daquele mapa, era seu continente. Juh era o uma ilha de tamanho médio no meio do mapa, parecia haver desenhado um vulcão em seu interior. Mas o que mais espantou Kenzo foi o nome da última ilha, Brunh. Era uma revelação para ele. - Então Kenzo, encontrou o que você queria. – Perguntou à bibliotecária. - Sim... Como você sabe o meu nome? - Seu amigo Ranz está aqui te procurando. Kenzo vai até a mesa da bibliotecária, levando consigo o mapa enrolado. Ranz estava o esperando ao lado. - O que é isso em sua mão? – Pergunta Ranz apontando para o mapa. - É o mapa que eu estava procurando. - Mapa? Você agora vai querer estudar geografia? Desse jeito os caras não vão parar de te irritar. - Estudar não faz mal. – Disse a bibliotecária. – Certo que ninguém aqui nessa província gosta disso. Você vai levar esse mapa? - Bem, na verdade eu gostaria. - Tudo bem, só não o rasgue, pois é o único. – Ela anota num papel o empréstimo do livro. Kenzo e Ranz saem da biblioteca e Kenzo faz um sinal com a mão para Ranz o seguir, Ranz entende o gesto e segue-o até sua casa. Os dois entram rapidamente para que a mãe de Kenzo não brigasse com eles. No seu quarto Kenzo abre o mapa na mesa e aponta o continente de seu sonho. - É para aqui que eu vou. – Disse ele. - Você vai sair da cidade? - Não. Do continente. - Mas como assim? Você nem sabe se existem mesmo outros continentes. Até onde eu sei isso pode ser muito bem um mapa falso. - Mesmo assim vou tentar, não custa nada. - Pode custar sua vida. E afinal porque você iria? - Você não vai entender meu motivo. - Mas claro que vou, sou praticamente seu único amigo. Ande, diga. - Eu tive um sonho, meio confuso, mas me lembro direito dessa palavra: “Brunh”. Quando descobri que era um continente, percebi que alguém está me chamando naquele continente. - Alguém... – disse Ranz fazendo gestos de dúvida com a mão. - Não sei, deus deve estar querendo me mostrar algo para melhorar a vida de nossa cidade. - Ai, ai! Lá vem você com toda essa história. Será que deus não poderia te falar essa mensagem aqui em no seu quarto? É preciso mesmo andar até o desconhecido para encontrar uma resposta tola? - Não sei, mas creio que seja verdade, por isso vou até o fim. Se você não quiser vir comigo eu entendo. - Eu vou com você, mas fique sabendo que se algo acontecer, algo ruim. Não diga que eu não te avisei. - Ótimo. Kenzo e Ranz pegam algumas mochilas que estavam guardadas no armário e preparam-nas com alguns suprimentos. Comida, equipamentos básicos e roupas. Tudo o que eles podem precisar durante a viagem. Kenzo pega o dinheiro de suas economias e guarda-os no bolso de sua jaqueta. - Onde você pensa que vai? – Pergunta a mãe de Kenzo - Eu vou viajar. - Para onde? - Para a capital. - Barmon? O que você quer lá? - Vai ter um congresso da igreja lá e eu e Ranz fomos convidados para irmos lá. - Isso é verdade Ranz? – Pergunta com um olhar bravo - Sim... – Responde Ranz com uma voz fraca. - Tá certo podem ir. Após saírem da casa de Kenzo, a dupla vai até os portões da cidade onde um guarda para-os. - Onde vocês vão? – Pergunta o guarda - Nós vamos até Barmon. – Responde Kenzo - Vocês só podem sair com autorização do príncipe da cidade. Vão lá buscar autorização. Nunca era preciso ter autorização para sair da cidade. Mas com o grande aumento da criminalidade da cidade, o príncipe dela viu que era preciso algum controle, nem que ele tivesse que julgar quem saía e quem entrava na cidade. Ao chegarem no “castelo” o príncipe já os indaga: - Por que querem sair da cidade? - Como você sabe – Disse Ranz surpreso - Não duvide do príncipe – Cochicha Kenzo para Ranz – Ele fica bravo quando alguém faz uma pergunta dessas. - Posso saber o que estão cochichando? - Nada, só estava explicando a meu amigo que vossa majestade é cheia de truques para descobrir o que os outros querem. - Certo. Digam-me qual o motivo. - Nós queremos realizar uma expedição ao mar, mas para isso precisamos da autorização do rei da província para sair dela. Nossa pesquisa pode trazer grandes méritos a vossa majestade. - Tudo bem podem ir. Mas um de meus guardas ira acompanhá-los durante essa tal expedição para que vocês não me enganem. - Certo. Os dois saem acompanhados de um guarda real. O nome dele era Tiko, vestia uma cota de malha feita com um metal especial e uma roupa vermelha por cima. Antes de chegarem aos portões da cidade, Kenzo decide parar na biblioteca para perguntar uma coisa a bibliotecária. - Qual é seu nome? – Pergunta ele. - Alessa, por quê? - Então... É que eu vou viajar entre os continentes e queria saber se gostaria de ir junto comigo? - Claro, quando você vai? - Hoje. - Mas já? - Sim, foi uma decisão de última hora... Mas se não puder ir tudo bem... Eu entendo... - Não, eu quero ir, só deixe-me preparar as minhas coisas. Alessa vai até sua casa e prepara suas coisas, quando encontra Kenzo, ele está no portão da cidade com Ranz e Tiko esperando-a. Após sua chegada todos partem rumo a Barmon.1 ponto
-
1 ponto
-
Não vi problemas no script, apenas o erro de criar uma função para colocar apenas uma função .-. tente assim: local config = { time = 60, -- tempo em segundos pos = {x=284,y=443,z=11}, -- posição da parede que ira sumir paredeid = 3608 -- id da parede } function onDeath(cid, corpse, killer) local parede = getTileItemById(config.pos, config.paredeid) if parede then doRemoveItem(parede.uid, 1) doCreatureSay(cid, "A pedra Será criada Novamente em "..config.time.." segundos.", TALKTYPE_ORANGE_1) addEvent(doCreateItem, config.time*1000, config.paredeid, 1, config.pos) end return true end1 ponto
-
Action
KennyConrad reagiu a Mutter03 por um tópico no fórum
Ae cara o meu potion.lua espero ter ajudado1 ponto -
[Ajuda] Preciso De Ajuda Para Arrumar Minha Quest
superbruno100 reagiu a Vodkart por um tópico no fórum
Erraram na mesma função,faltou identificar o cid: "getPlayerLevel" enquanto o certo é: getPlayerLevel(cid) function onUse(cid, item, frompos, item2, topos) local storage,level = 1011,50 if getPlayerLevel(cid) < level then return doPlayerSendTextMessage(cid,22,"Você precisa ter level "..level.." ou mais para abrir este baú.") elseif getPlayerStorageValue(cid,storage) >= 1 then return doPlayerSendTextMessage(cid,22,"O baú está vazio.") end doPlayerSendTextMessage(cid,22,"Você ganhou uma Fire Stone + 1TD!") doPlayerAddItem(cid,2283,1) doPlayerAddItem(cid,8777,1) setPlayerStorageValue(cid,storage,1) end1 ponto -
Abre o arquivo 050-function.lua que está dentro da pasta data/lib e adicione no fim do arquivo: function doPlayerCountItems(cid, items) -- by Vodka local items = type(items) == "table" and items or {items} for i = 1, table.maxn(items) do if getPlayerItemCount(cid, items[i]) <= 0 then return false end end return true end NPC: local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end local talkState = {} function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid local list = {111,222,333,444,555,666,777} -- id dos itens local pos = {x=160, y=54, z=7} -- para onde ele vai if(msgcontains(msg, 'TRAVEL') or msgcontains(msg, 'travel')) then selfSay("Para viajar comigo você ter os 7 items,você tem eles? {yes} ", cid) talkState[talkUser] = 1 elseif(msgcontains(msg, "yes") and talkState[talkUser] >= 1)then if doPlayerCountItems(cid, list) then selfSay("Boa viagem!.", cid) doTeleportThing(cid, pos) talkState[talkUser] = 0 npcHandler:releaseFocus(cid) else selfSay("desculpe,mas você não tem os itens!", cid) talkState[talkUser] = 0 npcHandler:releaseFocus(cid) end elseif msg == "no" and talkState[talkUser] >= 1 then selfSay("Then not", cid) talkState[talkUser] = 0 npcHandler:releaseFocus(cid) end return TRUE end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())1 ponto
-
lol as vips sao feitas pr a da emossao pra jogarem e conseguirem e hunts melhores q poucos tem ver se entede!1 ponto
-
[Encerrado] Bug !
GicoO reagiu a Jefferson19921992 por um tópico no fórum
Entaum, Fera!! E agora eu consegui a "solução". Vai na pasta do ot, abra data/items--- Copie os arquivos: items.xml e items.otbm vai no remere's Remere's Map Editor/data/--- no caso se for ot que a negativa é 8.54 (= no meu caso mapa global 8.60) e cole la dentro. Isso se for mapa global 8.60 como (se não poder mostrar, editem) Magnatas ots 8.60 obs: se vc ja disse isso, não leve a mal... Eu mal li o que foi respondido e ja fui amndando a "solução" =D Isso ae num eh parça? (resposta rapida)Vixi man... Vi la em cima sua resposta... Falo grego pra mim... Na verdade, eu me cadastrei aki, só pra ajudar o lek la em cima... Na real, eu fiquei muito tempo procurando uma solução pra isto ae... Aproximadamente umas 2 hrs ^^ Mais consegui!! Pelo menos pra mim deu certo... Mais vlw ae Alguem ae conhece uma talkaction que deleta player que n loga a "Y" dias menor que lvl "X"??1 ponto -
1 ponto
-
Mesmo Assim Obrigado Se Poder De Um + rep add msn ai splashotzik@hotmail.com descubri o bug do /additem irei conserta isso e n tera mas o comando no ot!! o download sera arrumado daki 5 minutos Risky1 ponto
-
Guuh Torres Vs 4.0
Deadpool reagiu a GuuhTorres por um tópico no fórum
Guuh Torres Vs 4.0 *Pessoal,me desculpem pela demora da atualização,pois tinha muitos bugs nesta base,e em pedidos de vários xtibianos,arrumei o "Pokemon Squadium" do brun123...Este server era um bom server,mais tinha muitos bugs,irei listar os que eu arrumei,ou acrescentei: -Catch -Goback -Portrait -Pokedex -Order -Talkactions -!lg para mudar a linguagem (English-Português) -Status sistema -Novos pokemons (Johto-Shinys) -Coloquei mais moves (Johto) -Npc Name (Que coloca um apelido ao pokemon) no ultimo andar do CP -Novo Mapa do Betinhowz666 -Novas quests -Novas Spawns (Eu não sei fazer muito bem,mais dá para usar) -PVP ZONE -Efeito ao upar level -Client na pasta (IP : 127.0.0.1) -Senha do GOD : guuh/torres DOWNLOAD do server: -Guuh Torres vs 4.0 Créditos : -GuuhTorres 25% -Brun123 40% (Caso você ler este tópico,peço que adicione ght-2-@hotmail.com) -Betinhowz666 15% -Xtibia 5% -Victorkta 5% -Ciffer 5% -Italo 5% QUE VENHAM OS REPS :button_ok: ------------------------------------------------------------- PRÓXIMA ATUALIZAÇÃO!!! Na próxima atualização irei fazer sem os BUGS,que vocês falarem...1 ponto -
Showoff - Resident Evil
gonorreiaswat reagiu a Crawzero por um tópico no fórum
olá gente, estou esperando pelo video tbm, as scripts estão perfeitas mais só não gostei do ghoul acho que ele é meio q sem graça no jogo pq vai a cidade inteira infesta só de ghoul(infected human ) e akeles da rdp os cotocos seria ruim seria legal tipo zombie criança o nemmesis como chefão de quests zombie mulher ,homen mais com roupas diferentes, ai q ia atrair bastante pessoas mais sem isto ou com isto vou chamar geral do meu ot flws espero q não tenha abandonado o projeto , pq tem uma par abandonado não kero q aconteca isto com este btm!!!!!! adc ai todos q verem e kiser (principalmente as ninas) msn :gabrieldicezare@hotmail.com vlws flws fuis1 ponto -
Script Para Fazer Potions Usadas Sumir 8.60?
Vladislave666 reagiu a Kuro o Shiniga por um tópico no fórum
Testa ae:1 ponto -
Ao Clicar No Chest Receber O Item Da Quest E Retirar X Item Do Seu Inventario
Dann123 reagiu a Demonbholder por uma questão
function onUse(cid, item) local itens = { [8710] = 300, [2679] = 10, [2151] = 5, [2123] = 1 } local reward = 2160 for id, quanti in pairs(itens) do if getPlayerItemCount(cid, id) < quanti then return doPlayerSendCancel(cid, "You dont have the itens.") end end for it, ty in pairs(itens) do doPlayerRemoveItem(cid, it, ty) end doPlayerAddItem(cid, reward, 1) doPlayerSendTextMessage(cid, 4, "Congratulations, you made your item.") return TRUE end Ai está o script.1 ponto -
Vá em \Otserver\data\creaturescripts\scripts e lá terá um arquivo chamado firstitems.lua , é ai que tem o ID dos items que o player vai iniciar. Exemplo: local firstItems = {} firstItems[0] = { 2173, 2525, 3965, 2124, 2457, 2647, 2643 } firstItems[1] = { 2173, 2525, 2190, 2124, 2457, 2647, 2643 } firstItems[2] = { 2173, 2525, 2182, 2124, 2457, 2647, 2643 } firstItems[3] = { 2173, 2525, 2399, 2124, 2457, 2647, 2643 } firstItems[4] = { 2173, 2525, 2428, 2124, 2457, 2647, 2643 } function onLogin(cid) if getPlayerStorageValue(cid, 30001) == -1 then for i = 1, table.maxn(firstItems[getPlayerVocation(cid)]) do doPlayerAddItem(cid, firstItems[getPlayerVocation(cid)][i], 1) end if getPlayerSex(cid) == 0 then doPlayerAddItem(cid, 2463, 1) else doPlayerAddItem(cid, 2463, 1) end local bag = doPlayerAddItem(cid, 11257, 1) doAddContainerItem(bag, 2160, 2) doAddContainerItem(bag, 2554, 1) doAddContainerItem(bag, 2120, 1) doAddContainerItem(bag, 7618, 1) setPlayerStorageValue(cid, 30001, 1) end return TRUE end firstItems[0] - A Vocação "0" irá iniciar com esses items. { 2173, 2525, 3965, 2124, 2457, 2647, 2643 } firstItems[1] - A Vocação "1" irá iniciar com esses items. { 2173, 2525, 2190, 2124, 2457, 2647, 2643 } Assim em diante... Já que você quer mudar quantas "Crystal Coin" o player iniciara aonde tem: doAddContainerItem(bag, 2160, 2) 2160 é o ID da "Crystal Coin" e o 2 é a quantidade, como você quer 5 mude o 2 para 5 Te ajudei ? dá um REP+1 ponto
-
Fechado: Alguem Saber Hakear Database
Gabriel Couto reagiu a EduardoRush por um tópico no fórum
Galera alguem poder mim ajuda a hakear 1 database de ot pq Quero Hakear 1 ot qe mim Ajuda Agradeço de smpre valel add msn :Eduardo_Rush@live.com-1 pontos