Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 06/17/11 em %

  1. O War.php foi eu que modifiquei...
    7 pontos
  2. PedroXtibiaaaa

    [8.6] Eternal Kingdoms Map

    Download: Clique aqui Scan: Clique aqui Remere's Map Editor 2.1 Créditos: Artii e o pessoal do Eternal Kingdoms (otland) Versão: 8.60/8.61, testei com 8.70 e funcionou também... O mapa possui o mínimo de bugs possíveis, talvez alguns pequenos bugs simples, todas as houses estão 100%. Cidades: Aleda Leafport Fallen Selroth Seldia Shadow Wood Screenshots
    2 pontos
  3. É Uma pagina que consiste em alertar os jogadores a não caírem na lábia de jogadores hackers e/ou em páginas falsas.As dicas foram tiradas do site do tibia global,mas voce pode muda-las de acordo com sua necessidade. Crie um arquivo chamado hacker.php em Xampp/htdocs... Dentro,cole isto : <?PHP $main_content .= '<center><br><div><center><font color ="#660000" face="chiller" size="16">Ant-Hackers</b></font></center><br> Siga as dicas de seguranca com cuidado para evitar perder o acesso a sua conta. Dicas para manter sua account e senha segura<br><br> Como escolher um email para registrar uma conta. Um dos metodos mais usados para roubar os jogadores atualmente, e atraves da recover key, ou seja do email. Por este motivo, ao criar uma conta, voce deve usar sempre um email que apenas voce conheca. Nunca informe para outros jogadores qual email esta registrado em sua conta.<br><br> Proteja seu email e sua pergunta secreta. Atualmente uma grande falha nos emails e a pergunta secreta. Criada para facilitar a recuperacao do email em casos de perca, tambem pode ser usada para roubar seu email. Alguns jogadores se aproveitam desta falha, para tentar conseguir seu email atraves da pergunta secreta. Essas pessoas agem da seguinte maneira. Apos se tornarem amigo da possivel vitima, buscam saber o maximo de dados sobre a mesma, para assim responder a pergunta secreta e roubar seu email. Com o email em maos esta pessoa tem total liberdade para conseguir sua conta, usando o sistema de recover key em nosso site. Por isso voce deve ter muito cuidado com sua pergunta secreta, sempre crie uma resposta dificil, e nunca comente sobre ela com ninguem. Se sua pergunta secreta e facil, pedimos que a altere imediatamente, para garantir sua seguranca.<br><br> Nunca entregue sua conta para ninguem! Cada dia surge pessoas dizendo ser gamemasters ou membros da equipe. A intencao deles e conseguir sua conta e senha. Alguns tendem a dizer que e para corrigir erros, ou que voce ganhara dias de premiuns. Isso e totalmente falso. Tenha sempre em mente que nem um gamemasters ou membros da equipe World of Trevours ira pedir-lhe o numero da sua conta ou sua senha. Nunca entregue seus dados de login para outras pessoas.<br><br> Memorize bem os dados sua conta! Nunca guarde sua conta ou senha em seu computador. Evitando assim que se alguem tiver acesso ao seu computador, ele nao ira encontrar a sua senha ou numero de conta. Se tiver problemas para memorizar a sua conta dados, escreva em um pedaco de papel e mantenha em um local seguro. Certifique-se de que ninguem pode encontra-la, nem mesmo os seus amigos!<br><br> Memorize bem os dados sua conta! Sua senha deve conter uma mistura de letras maiusculas e minusculas, numeros e caracteres especiais. Nunca use sua senha igual ao numero da conta. Alem disso evite palavras comuns porque hackers podem adivinhar-las facilmente<br><br> Nao entrem em outros sites alem do www.Servereasy.org Hoje em dia existe muitos sites falsos que prometem itens ou ferramentas pra facilitar seu jogo. Sao sites que geralmente pedem pra voce digitar sua senha, mas o real objetivo e roubar sua conta. Lembre-se apenas o endereco www.Servereasy.org o levara para o site oficial!<br><br> Emails oficiais. Muitos jogadores mal intencionados criam emails falsos ate parecidos com os nossos para pedir sua account e senha, lembre-se nossos emails e As-Farc@msn.com e As-Farc@msn.com e apenas por eles entraremos em contato com voces, sendo que nunca pediremos seus dados de login.<br><br> Nao utilizamos Menssengers Nao utilizamos Messengers ou qualquer outra forma de comunicacao instantanea para dar suporte aos jogadores. Se alguem tentar entrar em contato com voce, simplesmente ignore. Nosso unico metodo de comunicacao e pelo forum ou pelos e - mails citados anteriormente<br><br> Cuidado ao baixar arquivos eles podem conter programas maliciosos! Algumas pessoas estao distribuindo programas maliciosos com cavalos de troia, key loggers, atraves de sites como orkut ou e-mail. Por isso sempre antes de abrir algum e-mail desconhecido tenha cuidado.<br><br> Atualize os programas do seu computador, periodicamente! e extremamente aconselhavel manter seu sistema operacional e outros softwares de seguranca sempre atualizados. Ja que atualizacoes podem corrigir falhas antigas que podem ser exploradas por pessoas mal intencionadas.<br><br> Nao jogue tibia em locais publicos! Nao e aconselhavel voce digitar sua senha em locais publicos como lan houses, colegios entre outros locais onde outras pessoas possam usar deste mesmo computador. Ja que locais como este normalmente apresentam programas maliciosos.<br><br> Nao compartilhe ou comercialize contas! Existe uma razao pela qual compartilhar e comercializar contas e proibido no Tibia. Lembre-se que voce esta correndo um grande risco ao dar seus dados para outra pessoa. Ou mesmo comprando contas de alguem, ja que o verdadeiro pode vir a recupera-la. Sabemos por experiencia que, mesmo amigos intimos, podem a vir roubar e arruinar a conta dos outros. Lembre se que nao iremos fornecer apoio em caso de contas perdidas devido a comercio ou compartilhamento.<br><br> Cuidado com falsas promessas. Sempre que for passada alguma informacao importante, tal como eventos, promocoes e outros, voce precisa ir direto ao site oficial do Trevours Server para confirmar se foi postada alguma noticia sobre isto, caso contrario estao tentando tirar alguma vantagem sobre voce.<br><br> Cuidado ao comprar casas. Ao comprar uma casa de outro jogador, ele usara um comando para dar trade e aparecera no documento a casa da troca, porem antes de aceitar a troca, voce precisa verificar se no documento ha a descricao da casa, caso contrario recuse o compra pois o jogador esta tentando lhe enganar.<br><br><br> Recuperando sua conta Remova o problema de seguranca. A primeira coisa que voce tem a fazer e descobrir como alguem conseguiu sua conta. Lembre-se de remover o problema de seguranca, ja que se isso nao for feito o hacker pode obter novamente o acesso a conta.<br><br> Recuperando seus dados. Apos remover os problemas de seguranca voce deve usar a Lost Account interface. Apos isso siga as instrucoes oferecidas.<br><br> Interferencia da Equipe A equipe dificilmente responde emails de jogadores que foram roubados, pois como citamos acima, o jogador precisa se precaver antes e nao depois que ja foi enganado ou perdeu seus dados de acesso ao game. Ser for possivel tentaremos resolver seus caso, mas tenha em mente que isso nao vem a ser nossa obrigacao. Dynamic World</b></div> '; ?> Agora vá em Xampp/Htdocs/index.php e adicione o seguinte: case "hacker"; $subtopic = "Hacker"; $topic = "Ant-Hackers"; include("hacker.php"); break; Para Finalizar vá em Xampp/Htdocs/Layouts/tibiacom/layout.php e adicione o seguinte: <a href='?subtopic=hacker'> <div id='submenu_hacker' 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'>Ant Hackers</div> <div class='RightChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div> </div> </a> As Dicas contidas na pagina podem ser modificadas de acordo com sua necessidade...
    2 pontos
  4. Darker

    [8.54] Pokémon Dash V.6.0

    _________________________________________________ Retirado Motivo ATT No Servidor Aguardem o Prox Desculpas a Todos...
    2 pontos
  5. "Esta página consiste em voce deixar os jogadores do OTS atualizados com as modificações que vão ocorrendo no seu servidor." Em Htdocs/changelog.php abra ,apaque tudo e add isto dentro: <?PHP $page = $_REQUEST['page']; $action = $_REQUEST['action']; $id = $_REQUEST['id']; $limit = 30; $offset = $page * $limit; $change_data = $SQL->query('SELECT * FROM z_changelog ORDER BY id DESC LIMIT '.$limit.' OFFSET '.$offset.''); $change_data1 = $SQL->query('SELECT * FROM z_changelog'); $change = 0; $change1 = 0; if($group_id_of_acc_logged >= $config['site']['access_admin_panel']) { $description = trim($_POST['description']); $where = trim($_POST['where']); $type = trim($_POST['type']); if (!empty($action) AND !empty($id)) { $select = $SQL->query('SELECT * FROM z_changelog WHERE date = '.$id.'')->fetch(); $main_content .= '<div class="TableContainer" > <table class="Table1" cellpadding="0" cellspacing="0" > <div class="CaptionContainer" > <div class="CaptionInnerContainer" > <span class="CaptionEdgeLeftTop" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span> <span class="CaptionEdgeRightTop" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span> <span class="CaptionBorderTop" style="background-image:url('.$layout_name.'/images/content/table-headline-border.gif);" ></span> <span class="CaptionVerticalLeft" style="background-image:url('.$layout_name.'/images/content/box-frame-vertical.gif);" /></span> <div class="Text" >Change Log Removido</div> <span class="CaptionVerticalRight" style="background-image:url('.$layout_name.'/images/content/box-frame-vertical.gif);" /></span> <span class="CaptionBorderBottom" style="background-image:url('.$layout_name.'/images/content/table-headline-border.gif);" ></span> <span class="CaptionEdgeLeftBottom" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span> <span class="CaptionEdgeRightBottom" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span> </div> </div> <tr> <td> <div class="InnerTableContainer" > <table style="width:100%;" ><table border=0 cellspacing=1 cellpadding=4 width=100%><tr bgcolor="#505050"><td width="1%"><font class=white>ID</font></td><td width="21"><font class=white>Tipo</font></td><td width="21"><font class=white>Onde</font></td><td width="50"><font class=white>Data</font></td><td><font class=white>Descrição</font></td></tr> <tr bgcolor="#F1E0C6"><td align="center">'.$select['id'].'.</td><td align="center"><img src="changelog/'.$select['type'].'.png" title="added"/></td><td align="center"><img src="changelog/'.$select['where'].'.png" title="ots"/><td>'.date("j.m.Y",$select['date']).'</td><td>'.$select['description'].'</td></tr> '; $main_content .= '</td></tr> </table> </div> </table></div></td></tr><br/><center><table border="0" cellspacing="0" cellpadding="0" ><form action="index.php?subtopic=changelog" method="post" ><tr><td style="border:0px;" ><div class="BigButton" style="background-image:url('.$layout_name.'/images/buttons/sbutton.gif)" ><div onMouseOver="MouseOverBigButton(this);" onMouseOut="MouseOutBigButton(this);" ><div class="BigButtonOver" style="background-image:url('.$layout_name.'/images/buttons/sbutton_over.gif);" ></div><input class="ButtonText" type="image" name="Back" alt="Back" src="'.$layout_name.'/images/buttons/_sbutton_back.gif" ></div></div></td></tr></form></table></center>'; $SQL->query('DELETE FROM z_changelog WHERE date = '.$id.''); } if(empty($description) AND empty($where) AND empty($type)) { $main_content .= '<form action="index.php?subtopic=changelog" method="post" ><div class="TableContainer" ><table class="Table1" cellpadding="0" cellspacing="0" > <div class="CaptionContainer" ><div class="CaptionInnerContainer" ><span class="CaptionEdgeLeftTop" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span><span class="CaptionEdgeRightTop" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span><span class="CaptionBorderTop" style="background-image:url('.$layout_name.'/images/content/table-headline-border.gif);" ></span><span class="CaptionVerticalLeft" style="background-image:url('.$layout_name.'/images/content/box-frame-vertical.gif);" /></span><div class="Text" >Atualizações do Servidor</div><span class="CaptionVerticalRight" style="background-image:url('.$layout_name.'/images/content/box-frame-vertical.gif);" /></span><span class="CaptionBorderBottom" style="background-image:url('.$layout_name.'/images/content/table-headline-border.gif);" ></span><span class="CaptionEdgeLeftBottom" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span><span class="CaptionEdgeRightBottom" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span></div> </div> <tr> <td> <div class="InnerTableContainer" > <table style="width:100%;" > <tr> <td class="LabelV" ><span >Tipo:</span></td> <td style="width:90%;" > <SELECT NAME=type> <OPTION>Adicionado</OPTION> <OPTION>Removido</OPTION> </SELECT> </td> </tr> <tr> <td class="LabelV" ><span >Onde:</span></td> <td style="width:90%;" > <SELECT NAME=where> <OPTION>Servidor</OPTION> <OPTION>Siteite</OPTION> </SELECT> </td> </tr> <tr> <td class="LabelV" ><span >Descrição:</span></td> <td style="width:90%;" > <textarea type="text" name="description" size="50" maxlength="150" rows="5" cols="60"></textarea> </td> </tr> </table> </div> </table></div></td></tr><br/><table style="width:100%;" ><tr align="center"><td><table border="0" cellspacing="0" cellpadding="0" ><tr><td style="border:0px;" ><div class="BigButton" style="background-image:url('.$layout_name.'/images/buttons/sbutton.gif)" ><div onMouseOver="MouseOverBigButton(this);" onMouseOut="MouseOutBigButton(this);" ><div class="BigButtonOver" style="background-image:url('.$layout_name.'/images/buttons/sbutton_over.gif);" ></div><input class="ButtonText" type="image" name="Submit" alt="Submit" src="'.$layout_name.'/images/buttons/_sbutton_submit.gif" ></div></div></td><tr></form></table></td><td><table border="0" cellspacing="0" cellpadding="0" ><form action="index.php?subtopic=changelog" method="post" ><tr><td style="border:0px;" ><div class="BigButton" style="background-image:url('.$layout_name.'/images/buttons/sbutton.gif)" ><div onMouseOver="MouseOverBigButton(this);" onMouseOut="MouseOutBigButton(this);" ><div class="BigButtonOver" style="background-image:url('.$layout_name.'/images/buttons/sbutton_over.gif);" ></div><input class="ButtonText" type="image" name="Back" alt="Back" src="'.$layout_name.'/images/buttons/_sbutton_back.gif" ></div></div></td></tr></form></table></td></tr></table>'; } else { if(empty($description)){ $show_msgs[] = "Description field is empty!."; } if(!empty($show_msgs)){ //show errors $main_content .= '<div class="SmallBox" > <div class="MessageContainer" > <div class="BoxFrameHorizontal" style="background-image:url('.$layout_name.'/images/content/box-frame-horizontal.gif);" /></div> <div class="BoxFrameEdgeLeftTop" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></div> <div class="BoxFrameEdgeRightTop" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></div> <div class="ErrorMessage" > <div class="BoxFrameVerticalLeft" style="background-image:url('.$layout_name.'/images/content/box-frame-vertical.gif);" /></div> <div class="BoxFrameVerticalRight" style="background-image:url('.$layout_name.'/images/content/box-frame-vertical.gif);" /></div> <div class="AttentionSign" style="background-image:url('.$layout_name.'/images/content/attentionsign.gif);" /></div><b>The Following Errors Have Occurred:</b><br/>'; foreach($show_msgs as $show_msg) { $main_content .= '<li>'.$show_msg; } $main_content .= '</div> <div class="BoxFrameHorizontal" style="background-image:url('.$layout_name.'/images/content/box-frame-horizontal.gif);" /></div> <div class="BoxFrameEdgeRightBottom" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></div> <div class="BoxFrameEdgeLeftBottom" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></div> </div></div><br/>'; //show form $main_content .= '<form action="index.php?subtopic=changelog" method="post" ><div class="TableContainer" ><table class="Table1" cellpadding="0" cellspacing="0" > <div class="CaptionContainer" ><div class="CaptionInnerContainer" ><span class="CaptionEdgeLeftTop" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span><span class="CaptionEdgeRightTop" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span><span class="CaptionBorderTop" style="background-image:url('.$layout_name.'/images/content/table-headline-border.gif);" ></span><span class="CaptionVerticalLeft" style="background-image:url('.$layout_name.'/images/content/box-frame-vertical.gif);" /></span><div class="Text" >Atualizações do Servidor</div><span class="CaptionVerticalRight" style="background-image:url('.$layout_name.'/images/content/box-frame-vertical.gif);" /></span><span class="CaptionBorderBottom" style="background-image:url('.$layout_name.'/images/content/table-headline-border.gif);" ></span><span class="CaptionEdgeLeftBottom" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span><span class="CaptionEdgeRightBottom" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span></div> </div> <tr> <td> <div class="InnerTableContainer" > <table style="width:100%;" > <tr> <td class="LabelV" ><span >Tipo:</span></td> <td style="width:90%;" > <SELECT NAME=type> <OPTION>Adicionado</OPTION> <OPTION>Removido</OPTION> </SELECT> </td> </tr> <tr> <td class="LabelV" ><span >Onde:</span></td> <td style="width:90%;" > <SELECT NAME=where> <OPTION>Servidor</OPTION> <OPTION>Site</OPTION> </SELECT> </td> </tr> <tr> <td class="LabelV" ><span >Descrição:</span></td> <td style="width:90%;" > <textarea type="text" name="description" size="50" maxlength="150" rows="10" cols="60"></textarea> </td> </tr> </table> </div> </table></div></td></tr><br/><table style="width:100%;" ><tr align="center"><td><table border="0" cellspacing="0" cellpadding="0" ><tr><td style="border:0px;" ><div class="BigButton" style="background-image:url('.$layout_name.'/images/buttons/sbutton.gif)" ><div onMouseOver="MouseOverBigButton(this);" onMouseOut="MouseOutBigButton(this);" ><div class="BigButtonOver" style="background-image:url('.$layout_name.'/images/buttons/sbutton_over.gif);" ></div><input class="ButtonText" type="image" name="Submit" alt="Submit" src="'.$layout_name.'/images/buttons/_sbutton_submit.gif" ></div></div></td><tr></form></table></td><td><table border="0" cellspacing="0" cellpadding="0" ><form action="index.php?subtopic=changelog" method="post" ><tr><td style="border:0px;" ><div class="BigButton" style="background-image:url('.$layout_name.'/images/buttons/sbutton.gif)" ><div onMouseOver="MouseOverBigButton(this);" onMouseOut="MouseOutBigButton(this);" ><div class="BigButtonOver" style="background-image:url('.$layout_name.'/images/buttons/sbutton_over.gif);" ></div><input class="ButtonText" type="image" name="Back" alt="Back" src="'.$layout_name.'/images/buttons/_sbutton_back.gif" ></div></div></td></tr></form></table></td></tr></table>'; } else { $SQL->query('INSERT INTO `z_changelog` (`id`,`type`, `where`,`date`, `description`) VALUES (NULL, "'.$type.'", "'.$where.'", '.time().', "'.$description.'");'); $id = $SQL->query('SELECT * FROM z_changelog WHERE `description` = "'.$description.'";')->fetch(); $main_content .= '<div class="TableContainer" > <table class="Table1" cellpadding="0" cellspacing="0" > <div class="CaptionContainer" > <div class="CaptionInnerContainer" > <span class="CaptionEdgeLeftTop" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span> <span class="CaptionEdgeRightTop" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span> <span class="CaptionBorderTop" style="background-image:url('.$layout_name.'/images/content/table-headline-border.gif);" ></span> <span class="CaptionVerticalLeft" style="background-image:url('.$layout_name.'/images/content/box-frame-vertical.gif);" /></span> <div class="Text" >Change log added</div> <span class="CaptionVerticalRight" style="background-image:url('.$layout_name.'/images/content/box-frame-vertical.gif);" /></span> <span class="CaptionBorderBottom" style="background-image:url('.$layout_name.'/images/content/table-headline-border.gif);" ></span> <span class="CaptionEdgeLeftBottom" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span> <span class="CaptionEdgeRightBottom" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span> </div> </div> <tr> <td> <div class="InnerTableContainer" > <table style="width:100%;" ><table border=0 cellspacing=1 cellpadding=4 width=100%><tr bgcolor="#505050"><td width="1%"><font class=white>ID</font></td><td width="21"><font class=white>Type</font></td><td width="21"><font class=white>Where</font></td><td width="50"><font class=white>Date</font></td><td><font class=white>Descrição</font></td></tr> <tr bgcolor="#F1E0C6"><td align="center">'.$id['id'].'.</td><td align="center"><img src="changelog/'.$type.'.png" title="added"/></td><td align="center"><img src="changelog/'.$where.'.png" title="ots"/><td>'.date("j.m.Y",$id['date']).'</td><td>'.$description.'</td></tr> '; $main_content .= '</td></tr> </table> </div> </table></div></td></tr><br/><center><table border="0" cellspacing="0" cellpadding="0" ><form action="index.php?subtopic=changelog" method="post" ><tr><td style="border:0px;" ><div class="BigButton" style="background-image:url('.$layout_name.'/images/buttons/sbutton.gif)" ><div onMouseOver="MouseOverBigButton(this);" onMouseOut="MouseOutBigButton(this);" ><div class="BigButtonOver" style="background-image:url('.$layout_name.'/images/buttons/sbutton_over.gif);" ></div><input class="ButtonText" type="image" name="Back" alt="Back" src="'.$layout_name.'/images/buttons/_sbutton_back.gif" ></div></div></td></tr></form></table></center>'; } } } foreach($change_data1 as $log) { $change1++; } foreach($change_data as $log) { $change++; if(is_int($change / 2)) $bgcolor = $config['site']['darkborder']; else $bgcolor = $config['site']['lightborder']; $change_rows .= ' <tr bgcolor="'.$bgcolor.'"><td align="center">'.$log['id'].'.</td><td align="center"><img src="changelog/'.$log['type'].'.png" title="added"/></td><td align="center"><img src="changelog/'.$log['where'].'.png" title="ots"/><td>'.date("j.m.Y",$log['date']).'</td><td>'.$log['description'].''; if($group_id_of_acc_logged >= $config['site']['access_admin_panel']) { $change_rows .= '<a href="index.php?subtopic=changelog&action=delete&id='.$log['date'].'"><img src="'.$layout_name.'/images/news/delete.png" border="0"></a>'; } $change_rows .= '</td></tr>'; if ($change < $limit) { } else $show_link_to_next_page = TRUE; } if($change == 0) { $main_content .= '<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%><TR BGCOLOR="'.$config['site']['vdarkborder'].'"><TD CLASS=white><B>Status do Servidor</B></TD></TR><TR BGCOLOR='.$config['site']['darkborder'].'><TD><TABLE BORDER=0 CELLSPACING=1 CELLPADDING=1><TR><TD>Não há novas atualizações do servidor no momento.</TD></TR></TABLE></TD></TR></TABLE><BR>'; } else { $main_content .= '<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%><TR BGCOLOR="'.$config['site']['vdarkborder'].'"><TD CLASS=white><B>Change logs</B></TD></TR><TR BGCOLOR='.$config['site']['darkborder'].'><TD><TABLE BORDER=0 CELLSPACING=1 CELLPADDING=1><TR><TD>Há '.$change1.' atualizações no momento.</TD></TR></TABLE></TD></TR></TABLE><BR>'; $main_content .= '<table border=0 cellspacing=1 cellpadding=4 width=100%><tr bgcolor="#505050"><td width="1%"><font class=white>ID</font></td><td width="21"><font class=white>Tipo</font></td><td width="21"><font class=white>Onde</font></td><td width="50"><font class=white>Data</font></td><td><font class=white>Descrição</font></td></tr>'.$change_rows.'</table>'; if($page > 0) { $main_content .= '<TR><TD WIDTH=100% ALIGN=right VALIGN=bottom><A HREF="index.php?subtopic=changelog&page='.($page - 1).'" CLASS="size_xxs">Previous Page</A></TD></TR>'; } if($show_link_to_next_page) { $main_content .= ' | <TR><TD WIDTH=100% ALIGN=right VALIGN=bottom><A HREF="index.php?subtopic=changelog&page='.($page + 1).'" CLASS="size_xxs">Next Page</A></TD></TR>'; } } ?> Em Htdocs/Layouts/tibiacom/layout.php add a seguinte tag : <a href='?subtopic=changelog'> <div id='submenu_changelog' 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_archive' class='ActiveSubmenuItemIcon' style='background-image:url(<?PHP echo $layout_name; ?>/images/menu/icon-activesubmenu.gif);'></div> <div class='SubmenuitemLabel'>Change Log</div> <div class='RightChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div> </div> </a> Agora em Htdocs/index.php add outra tag: case "changelog"; $topic = "Changelog"; $subtopic = "changelog"; include("changelog.php"); break; A maioria dos gesior's já vem com essas tags no layout.php e no index.php ,então,talvez não seja necessário... E para os que não tenham ainda será necessário esta tabela no SQL Database: CREATE TABLE IF NOT EXISTS `z_changelog` ( `id` int(11) NOT NULL auto_increment, `type` varchar(255) NOT NULL default '', `where` varchar(255) NOT NULL default '', `date` int(11) NOT NULL default '0', `description` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=0 ; Para adicionar a tabela acesse o phpmyadmin ,clique na sua "Database" ,nas barras acima clique em SQL ,no espaço em branco coloque o código acima e clique em Executar.
    2 pontos
  6. joaohd

    Biblioteca Wxlua

    Introdução à biblioteca wxlua Antes de iniciarmos nosso aprendizado em wxlua, devemos ter em mente qual a finalidade dessa biblioteca. Bem, a biblioteca wxlua, juntamente com sua API C, implementa as funções essenciais para criarmos uma aplicação com interface gráfica. É uma biblioteca muito rica e, utilizando-se de outras bibliotecas lua, podemos criar aplicativos incríveis. Entendida a função, podemos começar a estudar a estrutura dos programas escritos com a biblioteca wxlua, que segue uma estrutura bem rígida quanto à organização. Para que possamos utilizar as funções disponíveis através da biblioteca wx, nosso programa deverá invocar esta, através da função require, da seguinte maneira: require("wx") Desta maneira, nosso programa terá conhecimento das funções e poderá utilizá-la. Obrigatoriamente, nosso aplicativo deve ter um frame, que seria como um "palco", onde nossos componentes serão inseridos. Este palco deve também ser repassado a uma variável, para que possa ser acessado quando formos "pendurar" nossos componentes. - "pendurar" seria a tradução de "append", termo que passaremos a utilizar mais adiante. Agora veremos nossa primeira função wx, a função wx.wxFrame: MeuPalco = wx.wxFrame(wx.NULL, wx.wxID_ANY, "Tutorial xtibia", wx.wxDefaultPosition, wx.wxSize(200,200), wx.wxDEFAULT_FRAME_STYLE) Onde : O primeiro argumento é o id do frame "pai". Quando quisermos criar um frame principal, deveremos utilizar no lugar desta variável, a constante wx.NULL O segundo argumento é o id do frame que está sendo criado. Comumente utiliza-se o wx.wxID_ANY, que irá criar um id para nosso frame. O terceiro argumento é o nome que será exibido no topo do nosso palco. O quarto argumento é a posição onde o palco será criado. Para tamanho padrão, utiliza-se a constante wx.wxDefaultPosition. O quinto argumento é o tamanho do palco O último argumento é o estilo do palco. Para criarmos um frame com estilo padrão, utilizamos a constante wx.wxDEFAULT_FRAME_STYLE. Então já sabemos criar um palco para que possamos colocar nossos componentes. Vamos criar um menu? Para criarmos um menu, devemos associá-lo também a uma variável, com o valor da função wx.wxMenu(). Veja: MeuMenu = wx.wxMenu() Vamos agora colocar uma opção neste menu. Esta opção nos mostrará uma mensagem informando que você conseguiu criar a opção. Criarei primeiro um id para associar à minha opção e em seguida, a criarei: MenuXtibia = 1 MeuMenu:Append(MenuXtibia, "&xtibia", "Clique para saber mais.") Os parâmetros do Append, são: Id, que é o id associado ao seu menu Texto, que é o texto que ficará escrito em sua opção no menu Mensagem, que é a mensagem que aparecerá no rodapé do nosso programa quando posicionarmos o cursor do mouse sobre a opção Você deve ter percebido que eu coloquei um "&" no meu texto. Bem, este é o modo de criar um atalho. Neste caso, meu atalho será "x". Quando eu estiver no menu e pressionar "x", esta opção será selecionada. Continuando, nós já criamos nosso menu. Entretanto, ele não está no palco ainda. Ou seja, não será exibido. Vamos colocá-lo lá? Primeiro criamos a barra de menus: MinhaBarra = wx.wxMenuBar() Depois, "penduro" meu menu na barra que criei: MinhaBarra:Append(MeuMenu, "&Menu") Por fim, coloco minha barra no meu palco: MeuPalco:SetMenuBar(MinhaBarra) Menu no lugar, que tal criarmos a barra inferior que exiba alguma mensagem para o usuário? MeuPalco:CreateStatusBar(1) Pronto. Vou colocar um texto nela que, quando o programa for aberto, estará escrito: MeuPalco:SetStatusText("Olá! Você está indo bem!") Feito. Lembra que eu disse que a nossa opção no menu exibiria uma mensagem? Então, agora é a hora: MeuPalco:Connect(MenuXtibia, wx.wxEVT_COMMAND_MENU_SELECTED, function(event) wx.wxMessageBox("Boa campeão. Você está seguindo corretamente o tutorial.", "Parabéns!", wx.wxOK + wx.wxICON_INFORMATION, MeuPalco) end) Ufa, está acabando. Tudo o que criamos até agora, não está visível. Então, devemos corrigir isto: MeuPalco:Show(true) E por fim, para que nosso programa seja exibido corretamente, utilizamos a função MainLoop: wx.wxGetApp():MainLoop() Pronto. Se conseguiu obter resultados positivos, parabéns. Caso contrário, procure entender onde estão seus erros e procure corrigí-los. Nosso código no fim deve estar parecido com este: require("wx") MeuPalco = wx.wxFrame(wx.NULL, wx.wxID_ANY, "Tutorial xtibia", wx.wxDefaultPosition, wx.wxSize(200,200), wx.wxDEFAULT_FRAME_STYLE) MeuMenu = wx.wxMenu() MenuXtibia = 1 MeuMenu:Append(MenuXtibia, "&xtibia", "Clique para saber mais.") MinhaBarra = wx.wxMenuBar() MinhaBarra:Append(MeuMenu, "&Menu") MeuPalco:SetMenuBar(MinhaBarra) MeuPalco:CreateStatusBar(1) MeuPalco:SetStatusText("Olá! Você está indo bem!") MeuPalco:Connect(MenuXtibia, wx.wxEVT_COMMAND_MENU_SELECTED, function(event) wx.wxMessageBox("Boa campeão. Você está seguindo corretamente o tutorial.", "Parabéns!", wx.wxOK + wx.wxICON_INFORMATION, MeuPalco) end) MeuPalco:Show(true) wx.wxGetApp():MainLoop() Lembrando: Para se executar este código, é necessária a biblioteca wxlua ou o scite instalados. flw
    2 pontos
  7. olhonoporco

    Mega Curso De Sprites

    Não sei se aqui é a área certa, se não for desculpe. Primeiramente queria dizer que não fiz esse tutorial. Botei os créditos no final, só estou trazendo para o xtibia. Tirei os erros de português, salvei imagem por imagem e hospedei um por uma porque meu Imageshack está com problema. São 59 imagens e tive que salvar, hospedar (uma por uma, pois o imageshack está com problema) e depois localizar e adicionar a imagem, todas elas... Espero que gostem... __________________________ •Artigo 1: Características Principais de um Sprite 1 - Tamanho 2 - Luz 3 - Perspectiva 4 - Edição •Artigo 2: Começando um sprite 1 - Introdução ao PAINT 2 - Criação de um sprite 3 - Pintura 4 - Aprimoramento •Artigo 3: Efeitos gerais - Módulo: Fireworks 1 - Magic Wand Tool 2 - Blur Tool 3 - Sharpen Tool 4 - Dodge Tool 5 - Burn Tool 6 - Smudge Tool •Artigo 4: Efeitos gerais - Módulo: PAINT 1 - Como colorir um sprite 2 - Oficina de pintura 3 - Anti-Aliasing e suas aplicações 4 - Lista de cores •Artigo 5: Efeitos particulares 1 – Jóias de enfeite 2 – Cavidades 3 – Rachaduras 4 – Sprites Envelhecidos 5 – Sprites brilhantes sem “Sharpen” Artigo 1: Características Principais de um Sprite 1- Tamanho Bom, para a galera que está começando agora a fazer sprites e não sabe por onde começar, aqui começaremos com o básico do básico, a dimensão dos sprites: De fato é bem simples: •Sprite pequeno porte (carregável) Todo sprite carregável deve possuir os padrões de sua Backpack e para isso, é preciso que ele tenha as dimensões 32x32 Pixels.. Veremos mais a frente como dimensionar sua página de edição.[Art2:1] •Sprites de médio porte Geralmente outfits, monstros humanóides, e pequenas estátuas seguem padrões com dimensão 32x32 Pixels no eixo de base(Chão) também, porém é preciso que eles se mantenham na perspectiva do Tibia •Sprites de grande porte A grande maioria dos sprites de grande porte segue um padrão de 64x64 Pixels no eixo de base(chão), é o caso de Pedras, Estátuas, Mesas, e grande parte dos itens que compõe o cenário: 2 - Luz •Direção da Luz Uma das regras mais importantes e obrigatórias: caso seu intuito em fazer sprites seja criar itens para o Tibia: A LUZ VEM DO NOROESTE, mas mesmo assim, ainda existe luz vinda das demais fontes naturais e refletida pelas superfícies. Como no esquema a seguir: Sendo assim, seu sprite recebe luz de todas as direções, mas preferencialmente pelo Noroeste. 3 - Perspectiva •A perspectiva é teoricamente bem simples também, basta você seguir os padrões de formato estabelecidos pela Cipsoft [Art1:1] e desenhar seguindo uma orientação diagonal: Como no esquema: Artigo 2: Características Principais de um Sprite 1- Introdução ao PAINT Bom galera, é fato que muitos de nós já abominaram o PAINT muitas vezes, mas uma prova de que ele é a chave para o sucesso de muitos é que, todo sprite é feito no paint, logo todos os itens mais belos bem desenhados que vocês já viram vieram do mesmo lugar, e esse lugar é o Paint. •Onde está o Paint? O primeiro de tudo é localizar o programa PAINT em seu computador, geralmente ele se encontra no seguinte endereço: Menu Iniciar/Todos os Programas/Acessórios/Paint. •Configurando as dimensões da página Assim que abrir o PAINT, é preciso configurar a página para os padrões do Tibia. Para configurar a página siga o exemplo: IMAGEM/ATRIBUTOS E configure em: 32x32 Pixels para Itens de pequeno e médio porte(carregáveis e outfits/humanóides): 64x64 Pixels Para itens de grande porte: •Principais ferramentas que utilizaremos no paint para fazer Sprites: - Lápis :Usaremos para desenhar e colorir. - Linha : Usaremos para dimensionar sprites(Perspectiva) e algumas vezes na pintura criando linhas. - Conta-gotas : Usaremos na pintura para captura de cores para o lápis. - Recorte Quadrado e Aleatório : Usaremos quando para movimentar o Sprite ou Parte dele ao longo da página - Lupa : Usaremos para aumentar seu sprite em duas, seis, oito e Doze vezes •Criação de um Sprite Certo, finalmente deixar de teorias e vamos colocar a mão na massa. Começaremos desenhando um formato apropriado, como este Tutorial foi feito para um nível Básico e Intermediário de Sprite Art, vamos começar com um formato simples, utilizando a Lupa de aumento em 8x ou 12x. Para ficar mais fácil desenhar os pixels simetricamente, o melhor é Quadricular a página apertando CTRL + G. 8x + [ Ctrl + G ] 12x + [ Ctrl + G ] Para configurar o aumento de 12x é preciso clicar exatamente na linha que limita o quadro de aumentos: Bom, vamos começar com uma espada. Veremos que até o formato mais simples pode ficar muito bom se for bem trabalhado: Formato externo - Sempre Preto - Sempre dentro do espaço exigido pela Cipsoft Formato interno - Sempre usar cores escuras mas Nunca Preto - Dividir bem as partes a serem detalhadas Pintura - A pintura inicial deve ser simples para visualizar como o sprite deve ficar - Feito isso, segue-se para Aprimoramento e Oficina de Pintura ou para o Fireworks. - Aproveite para corrigir os pixels pretos que esqueceu dentro do Sprite ;D Aprimoramento - Se preferir desenhe alguns detalhes, como a divisória da lamina e jóias de enfeite - Feito isso: Sigamos para a Oficina de Pintura! Ou para o Fireworks... Artigo 3: Efeitos gerais - Módulo: Fireworks Bom galera, pra ser sincero com vocês, eu não começaria a editar os efeitos pelo Fireworks, mas não se pode negar o fato de que muitos sprites ficam "bacanas" quando feitos no fireworks, mas na minha opinião, ele deve ser um programa de edições finais...como "escurecer isso aqui e ali" "clarear aqui", "deixar com cores mais vivas lá". Porém muitas vezes as pessoas preferem utilizar o Fireworks ou o Photoshop pra edição de efeitos então vou dar essa opção a vocês. Efeitos Gerais - Magic Wand Tool: Usada para extrair o fundo do sprite, muito usado em fakes e outras edições como efeito de "Transparência": - Blur Tool: Usada pra homogeneizar as cores, deixando-as com tons parecidos. Dando um efeito de Embaçado - Sharpen Tool: Usada principalmente para dar mais vida ao sprite, deixá-lo mais brilhante e com detalhes aparentes. O ruim é que em grande escala pode gerar riscos pretos indesejáveis. - Dodge Tool: Talvez, juntamente com a Burn Tool está seja a ferramenta mais utilizada no Fireworks. Utilizamos Dodge Tool sempre que quisermos clarear um sprite, tornando as cores mais próximas do branco: - Burn Tool: Usada para escurecer seu sprite, muito usado na porção direita dos escudos e outros equipamentos evidenciando a vinda da luz ao noroeste. Por fim, juntando todo nosso trabalho no FireWorks é visível a diferença entre o molde e o sprite final. Basta lembrar que se a luz vem do Noroeste a parte Sudeste fica mais escura em relação a parte voltada para luz porem não fica PRETA já que os raios são refletidos para todas as direções Processo de edição pelo Fireworks: - Dodge Tool para clarear a ponta da lâmina e a lateral voltada para o noroeste. - Burn Tool para escurecer a porção que mais se aproxima do cabo com mais enfoque na lateral direita do sprite - Sharpen Tool para dar vida aos pixels mais iluminados para torná-los conseqüentemente os mais brilhantes. Controle a transmissão da luz pensando nos reflexos da luz e na perda da força da luz ao longo da lâmina, já que onde a luz bate, ela é refletida aos olhos do observador, passando somente uma parte ao resto do sprite. Assim se segue em todos os pontos de luz: •Artigo 4: Efeitos gerais - Módulo: PAINT 1 - Como colorir um sprite Certo galera, acho que finalmente chegamos no meu método pessoal e mais esperado do tutorial(por mim) Daqui para frente abordaremos todo o verdadeiro trabalho de um Spriter de acordo com o meu pensamento, é um método trabalhoso, realmente trabalhoso; mas um método que torna o sprite realmente Tibiano. E realmente bonito. Pintura PAINT x Fireworks Tudo na pintura se baseia na escolha das cores e dos tons, em matéria de sprites não basta somente escolher uma ou duas cores diferentes, colorir um sprite como fizemos na pintura básica [Artigo 2:3] e depois disso apenas usar Blur Tool(Clarear) e Burn Tool(Escurecer) do Fireworks no Sprite. Para nós o Fireworks será uma ferramenta básica de edição. A escolha das cores Bom, como dito anteriormente o mais importante na pintura de um sprite é sua cor e os tons dessa cor. Geralmente usamos tons diferenciados de uma mesma cor para gerar a idéia de sombreamento e luminosidade. A utilização destes tons varia de acordo com três pontos importantes: Material a ser pintado: Metal, Bronze, Tecidos, Marfim, Ouro, Pele. Propagação de luz no material: Alguns materiais como pedras não polidas, troncos e materiais envelhecidos não propagam a luz muito bem devido a manchas e ao não polimento de suas superfícies. Reflexo da luz no Material: Tecidos, Peles, Materiais envelhecidos e pedras não polidas não devem refletir a luz como objetos polidos e bem trabalhados, essa diferença precisa existir. •Oficina de Pintura Bom a Oficina de Pintura foi um projeto meu, seguindo dicas de ótimos spriters do Mundo Fake como o Marcotonio e outros tutoriais, que continuo usando até hoje e que se baseia na reunião de várias cores e seus diferentes tons em volta do sprite a ser pintado. Sendo a pintura do sprite realizada pela captura das cores pré-definidas em Orbs coloridos com o conta-gotas. Tudo na pintura se baseia na escolha das cores e dos tons então Desenhei orbs coloridos para facilitar a captura de cores: Veremos mais pra frente como isso se aplica. •Como fazer um Orb colorido: Na verdade é bem simples quando se tem o Fireworks, basta usar a Dodge Tool para clarear e a Burn Tool para escurecer. Mas basicamente o que se deve fazer é: - Escolher uma cor e fazer um círculo - Clarear a porção noroeste e um pouco da sudeste (para dar idéia de esfera) - Escurecer o meio para intensificar o efeito de esfera e refração da luz. - Pode-se fazer isso pelo paint selecionando uma cor e escolhendo diferentes tons desta cor para colorir o círculo em forma de esfera, mas utilizando as Ferramentas do Fireworks vai lhe poupar muito trabalho. •Seguindo as etapas: Créditos: Redstrike •Como organizar minha Oficina de Pintura: - O primeiro de tudo é você desenhar seu sprite - Quando passar por todas as etapas abordadas no Artigo 2, copie seu sprite e cole em um arquivo PGN ou BPM que você chamará de Oficina de Pintura. - Lá você deve colar também suas cores pré-definidas e deixá-las em torno do sprite. - Se tiver itens antigos com uma boa distribuição de cores e tons copie-os e cole todos na Oficina Em resumo: Créditos ao Leomage pelo axe •Iniciando as etapas da pintura: Aproveitando que estamos trabalhando com uma espada, que é um sprite simples, vamos aproveitar para um mini tutorial de espadas =D Bom, pra começar vamos às regras básicas: Regra número 1 - Toda espada possui uma linha média que definirá o corte da lâmina Regra número 2 - A porção esquerda da linha média recebe mais luz do que a porção da direita. Regra número 3 - A luz não é estática, ela se propaga ao longo de todo sprite porém alguns pontos são menos iluminados como regiões de cavidades na guarda, cabo e principalmente na porção da lâmina que está voltada contra a luz, tendo o corte como barreira. Certo, vamos clarear a mente de vocês •Regra número 1: Linha média que define o corte •Selecionei as cores que usaremos na pintura desses sprite. Certo, a Linha média não é nada mais do que uma reta diagonal formada por 4 ou 5 tons diferentes da mesma cor, logo consultaremos o mesmo Orb colorido no caso...o azul-acinzentado. Também se pode capturar cores de seus antigos sprites ou imagens para possuir uma maior gama de opções. [ virei e pintei de marrom o fundo pra vocês poderem entender melhor com a lamina voltada pra luz ] -Depois pintaremos as laterais médias, lembrando sempre que a luz é dividida no local que eu chamo de Secção Transversal, ou simplesmente "ST" representado pela cor mais escura perto da ponta da linha média. Seguindo o Tutorial do Strad, podemos perceber a diferença das lâminas e saber como nossa linha média deve se comportar. - As laterais médias, são as laterais da linha média e geralmente seguem três regras: •Regra número 1: A ponta da espada recebe mais luz, logo todos os pixels devem ter tons mais claros na ponta caminhando para tons mais escuros conforme se aproximem do cabo. •Regra número 2: A lateral esquerda possui uma propagação maior da luz do que a lateral esquerda, logo os pixels são mais claros em relação a esquerda. •Regra número 3: A Secção Transversal(ST) é de extrema importância para o direcionamento do corte e da luz. No exemplo: E ao final da pintura das laterais médias: Certo, nosso Sprite está começando a ficar bonitinho hehe, agora o próximo passo é pintar as linhas das extremidades. Geralmente essa é a parte que entra o Anti Aliasing, um efeito usado muitas vezes para deixar o Sprite mais redondo( falaremos dele mais pra frente ) mas usaremos ele neste caso para deixar nosso sprite mais ponte agudo! Isso é feito utilizando Cores Escuras com Tons próximas do contorno, que no caso dos itens de Tibia é Preto. Faremos isso deixando alguns pixels mais claros perto do cabo para dar a idéia de uma superfície "Afiada". Como na imagem: - E ao acabar a lâmina partimos para a guarda. Seguindo mais três regras: •Regra número 1: A porção esquerda da guarda recebe mais luz do que a direita. Porém há pouca diferença. •Regra número 2: Cavidades, Jóias, Rachaduras e Cabos com guardas longas recebem sombreamentos à parte da guarda. •Regra número 3: A guarda não segue padrões de Secção transversal. ( pelo menos a maioria delas. ) Então vamos pintar a Guarda! Escolham cores também próximas do preto para o AA mas que mantenham a idéia dourada, reforce isso com cores mais vivas ao longo da guarda, utilizem para isso o Orb Colorido dourado. Exemplo: E por fim temos nosso Sprite totalmente feito pelo PAINT. Parabéns a todos que leram até aqui! •Vejamos uma comparação rápida entre o nosso Sprite inicial e suas edições pelo Paint e pelo Fireworks: 1 - Formato Externo 2 - Formato Interno 3 - Pintura básica 4 - Aprimoramento 5 - Rota pelo Paint 6 - Rota pelo Fireworks Façam seus julgamentos! =D Eu pessoalmente diria que a espada 100% paint ficou muito melhor, talvez clareasse mais a lâmina com o Fireworks ou usando uma técnica que vamos ver no tópico: Sprites brilhantes sem “Sharpen” [Art5:5] *OBS: Com laminas mais curtas em largura é mais fácil fazer AA •Anti-Aliasing e suas aplicações O Anti-Aliasing é uma técnica muito utilizada para "arredondar" o sprite, e quando digo arredondar eu me refiro a Diminuição dos acidentes nas armações dos pixels Isto é: Algo pra disfarçar o fato de todos serem mini-quadradinhos haha. Isso se dá com o clareamento gradual da cor que mais se assemelha ao contorno e ao sprite, muitas vezes cinza, marrom ou até mesmo azul...todos em seus tons mais próximos do preto. •Efeitos de Arredondamento Ao desenhar um círculo branco percebemos que existem muitos pontos brancos perto dos pixels pretos do contorno, isso faz com que o Sprite fique "quadrado" literalmente! haha. A correção desse efeito é fazer um pequeno degradê. •E que parta do preto do contorno até a cor do fundo. Como no nosso caso estamos utilizando a cor branca... Nada melhor do que fazer um degradê do preto para o branco usando a cor CINZA. •Efeitos de Ponta-afiada Para fazer ponta não precisamos desenhá-la no formato mas caso preferirem assim; fiz essa imagem, bem ilustrativa ao meu ver da influencia do AA no Efeito de ponta dos Sprites •Efeitos do AA na Pintura O Anti Aliasing é muito usado (e bem usado) na Alemanha e na Suécia para dar mais vida aos Sprites, evidenciando e enfatizando as cores vibrantes do interior ao invés de deixá-las soltas a mercê somente do contorno. A algum tempo fiz uma espada a qual dei o nome de Arectaris Fiz uma segunda versão dessa Sword utilizando duas técnicas de AA: •A Primeira: no cabo, utilizando um marrom bem escuro para escurecer e um marrom-acinzentado mais claro para manter a cor escura. •A Segunda: na lâmina, utilizando cores bem escuras na ponta, contrastando com a claridade dos últimos pixels e gradualmente escurecendo os pixels para formar uma ponta. Observem atentamente a Ponta dos Sprites: •OBS: Façam espadas com a largura da Arectaris no começo porque é muito complicado fazer AA de lâmina em espadas maiores a melhor que consegui acho que foi essa, preciso treinar e estudar mais isso haha •LISTA DE CORES Vou postar aqui uma série de Orbs de Pintura que estou fazendo, caso algum de vocês não tenha acesso ao Fireworks. •Artigo 5: Efeitos particulares •Jóias de enfeite Fazer jóias são realmente algo bem fácil! Na teoria, tudo que precisamos fazer é desenhar um Orb! Ou seja, uma pedra à esfera, que tenha um ponto luminoso vindo do Noroeste e que possua um ponto de claridade mediana a Sudeste, indicando que a luz passou por Refração e todos os pontos ao redor destes dois pontos de Luz são mais escuros •Refração da Luz •No exemplo Créditos - Redstrike •Cavidades A idéia de cavidades é fácil de ser entendida, vou me aproveitar novamente da Arectaris: Como todos podem ver, desenhei um ruby dentro de uma cavidade na guarda da Arectaris, essa mistura de pixels só foi capaz de passar a idéia de cavidade porque, como dito antes, a luz se propaga ao longo de todo o sprite, vindo do Noroeste. Quando chega à cavidade, a luz não consegue penetrar no buraco e chega até a borda dele ( a sudeste ) que por sua vez reflete a luz de volta à pedra, porém em menos quantidade. Por isso usei cores escuras para simbolizar as bordas internas da cavidade, e as claras, as borda externas: •Resumindo: •1 - A Luz vem do noroeste, atingindo a borda externa com grande intensidade •2 - A luz passa pela cavidade atingindo a segunda borda externa mais com menos intensidade •3 - A luz que ilumina a segunda borda externa é refletida por ela chegando a menor parte ao ruby encontrado na cavidade. Sigam o esquema •Rachaduras Rachaduras podem ser uma coisa bem complicada no começo, mas com o tempo se pega a prática e a coisa fica mais simples. Na verdade em teoria é mesmo muito simples... Basta você: Regra um: Escolher de onde e como será a rachadura Regra dois: Desenhar um risco PRETO na região da rachadura Regra três: De acordo com o fundo, escolher um tom bem claro e iluminar a porção Sudeste da rachadura e um tom bem escuro para iluminar a porção Noroeste <--- mesmo efeito que vimos em Cavidades Passo a passo temos: Créditos: CrazyMapper,Galiant e brenomadlan. Espero que tenham gostado, se gostaram Deem REP + e comentem...
    2 pontos
  8. Olá a todos, eu não achei nenhum tutorial nesta página de como colocar potions infinitas, então resolvi elaborar um: Primeiro Método: Na pasta do seu servidor, entrar na pasta "data", depois na pasta "actions" e por último na pasta "liquids" "Pasta do Servidor/data/actions/liquids/" Procure pelo arquivo "potions.lua" e abra ele com algum editor. (bloco de notas, etc..) (se não tiver esse arquivo veja o segundo método) Depois de ter aberto o arquivo procure por essa linha: (dica: Control + F) [8704] = {empty = 7636, splash = 2, health = {50, 100}}, -- small health potion Copie o primeiro ID da linha (no caso 8704) e coloque-o no lugar do ID que se encontra depois de "empty = " (no caso 7636) Ficará assim: [8704] = {empty = 8704, splash = 2, health = {50, 100}}, -- small health potion Depois faça isso com todas as outras linhas de potions. Segundo Método: O início é o mesmo do primeiro método: Na pasta do seu servidor, entrar na pasta "data", depois na pasta "actions" e por último na pasta "liquids" "Pasta do Servidor/data/actions/liquids/" Abra o arquivo de uma potion (exemplo: great_mana), e você terá isso: local MIN = 200 local MAX = 300 local EMPTY_POTION = 7635 local exhaust = createConditionObject(CONDITION_EXHAUST) setConditionParam(exhaust, CONDITION_PARAM_TICKS, (getConfigInfo('timeBetweenExActions') - 100)) function onUse(cid, item, fromPosition, itemEx, toPosition) if isPlayer(itemEx.uid) == FALSE then return FALSE end if hasCondition(cid, CONDITION_EXHAUST_HEAL) == TRUE then doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED) return TRUE end if((not(isSorcerer(itemEx.uid) or isDruid(itemEx.uid)) or getPlayerLevel(itemEx.uid) < 80) and getPlayerCustomFlagValue(itemEx.uid, PlayerCustomFlag_GamemasterPrivileges) == FALSE) then doCreatureSay(itemEx.uid, "Only sorcerers and druids of level 80 or above may drink this fluid.", TALKTYPE_ORANGE_1) return TRUE end if doPlayerAddMana(itemEx.uid, math.random(MIN, MAX)) == LUA_ERROR then return FALSE end doAddCondition(cid, exhaust) doSendMagicEffect(getThingPos(itemEx.uid), CONST_ME_MAGIC_BLUE) doCreatureSay(itemEx.uid, "Aaaah...", TALKTYPE_ORANGE_1) doRemoveItem(item.uid, 1) doPlayerAddItem(cid, EMPTY_POTION, 1) return TRUE end Remova essas 2 linhas: doRemoveItem(item.uid, 1) doPlayerAddItem(cid, EMPTY_POTION, 1) (Se você não encontrar essas 2 linhas, veja o terceiro método, MAS NÃO FECHE O SCRIPT DA POTION!) Pronto, depois é só fazer isso com as outras potions! Terceiro Método: Bom, continuando, depois de ter aberto o script da potion, procure por essa parte: (dica: Control + F) doTransformItem(item.uid, Essa mesma linha (completa) da health_potion é assim: doTransformItem(item.uid, 7618) Retire essa linha, pronto, depois é só fazer o mesmo com as outras potions! OBS:. No terceiro método usei como exemplo uma health_potion, então o "... 7618)" não terá nas outras potions! Obrigado, e tomara que resolva o seu problema! :positive:
    1 ponto
  9. Vodkart

    Simple Task 3.0

    Mods: NPC Como configurar?
    1 ponto
  10. Darker

    Real Global Map

    Para Todos Que Adoram o Global ai vai ele..; Real Global Map 8.70 Real Global Map: Versão do Tibia:8.70 Mapa global 95% full. Quase todos os NPC's do Tibia Global. Servidor com o mínimo de bugs possíveis. Scripts arrumados. Itens 8.70 Mount sistem Cidades: Yalahar Carlin Ab'Dendriel Kazordon Thais Venore Darashia Ankramun Edron Port Hope Liberty Bay Svargrond Cormaya Zao 100% (acesso por farmine) Farmine (acesso por cormaya) Quest's: Arena Quest Demon Oak Demon Helmet Inquisition anihilator Quest Pits of Inferno (POI) 95% global. HOTA Quest Banshee Quest Behemoth Quest Blue Legs BK Bright Sword Naginata Vamp Shield Fire Axe Mermaid Comb Orc Fortress Necro Quest Dark Shield Noble Armor Desert Quest Stealth Ring Zao arena /Features 8.6>>/8.7 Mount Igual o Tibia Global<> Mais Informaçoes vao serem postadas!... Fotos: Download: OT Donw Dll e exe Scan: Ot Scan Dll e exe Creditos: Nycholaszinzhu TFS *Darker(Trazer ao xtibia) Gostou ++++ Para min....! Obs:O OT Possui alguns bugs!..; 2 Hospeda-lo em um bom PC 3GB MEMORIA RAM+ E O PC TEM QUE TA RAPIDO OTIMO SE NAO Podera dar Lag..!
    1 ponto
  11. RadbrJaum

    Mapa Radbr [8.50]

    Maparadbr By Jaum V.1 [8.50] > Conteudo V.1 < - Mapa de wisland. 100% - Teleports para as hunts 100% - Treinadores 100% - Bixos igual do radbr (Gigante De Gelo,Abominavel,Lenda Do Mar ETC.) 100% - Items do radbr (Supers,Divines,King Items ETC) 100% - Compra de supers e divines por comando. 100% - 2 cidades Dorion (By Alissow) e Wisland (by DESCONHECIDO) 100% - Sistema De Resets ( reseta level 350) 100% - 2 novas vocations Drunou e Infernalist 100% - King Quests 80% - Novas Modificaçoes ( by jaum) 100% > Comandos Adicionais (Players) < - !online [Ver quantos players online] - !reset [Para voce resetar] - !superstaff [Compra uma super divine staff por 150 barras de ouro] - !superaxe [Compra um super divine axe por 150 barras de ouro] - !supersword [Compra uma super divine sword por 150 barras de ouro] - !superclub [Compra um super divine club por 150 barras de ouro] - !supercross [Compra um super divine crossbow por 150 barras de ouro] - !staff [Compra uma divine staff por 60 barras de ouro] - !club [Compra um divine club por 60 barras de ouro] - !axe [Compra um divine axe por 60 barras de ouro] - !sword [Compra uma divine sword por 60 barras de ouro] - !crossbow [Compra um divine crossbow por 60 barras de ouro] - !livronivel5 [Compra um livro nivel 5 usado por infernalists por 60 barras de ouro] - !livronivel6 [Compra um livro nivel 6 usado por infernalist por 150 barras de ouro] > Bom Saber (Drunous) < "DRUNOU" (promotion LORD DRUNOU). É uma vocação com atack 50% mais rápido que o das outras vocações. Regenera mana e vida na mesma velocidade do paladin, usa somente Club, tem o Gain Mana e Gain Healt igual ao do paladin e seu magic level sobe 20% mais lento do que do paladin. Magias: ÚNICAS; Cluber / marretadas-ja Morte Subta / Morra-ja Espiritos Divinos / Divinidade-ja Florestagem / Florestanegra-ja Cure Coult / Cura-ja For Friend / Vida-ja "(friend) Coult Haste / Correr-ja OUTRAS; Light / Utevo Lux Light Healing / Exura Find Person / Exiva "(emeny) Magic Rope / Exani Tera Levitate / Exani hur "(up/down) Great Light / Utevo Gran Lux Challenge / Exeta Res Ultimate Light / Utevo Vis Lux Invisibility / Utana Vid Strong Haste / Utani Gran hur Bom Saber (Infernalists) Infernalist (promotion Arcane Infernalist) Uma vocação parecida com os mage, manipula as magias infernais (fogo). Atack 100% mais lento que o das outras vocações, suas magias são fortes tem um forte poder na manipulação de Magia. Magias: ÚNICAS; Fogo Unico / fogo unico! Chama do Inferno / fogos do inferno! Inferno Negro / bolhas negras infernais! Chama Varrida / Chama longa! Cura Infernal / Cura me! OUTRAS; Light Heal / Exura Antidote / Exana Pox Intense Healing / Exura Gran Mass Healing / Exura Gran Mas Res Light / Utevo Lux Find Person / Exiva "(enemy) Magic Rope / Exani Tera Levitate / Exani Hur "(up/down) Great Light / Utevo Gran Lux Magic Shield / Utamo Vita Haste / Utani Hur Fotos Uploaded with ImageShack.us Uploaded with ImageShack.us Download Radbr Jaum [8.50].rar Proibido copiar esse topico,versao exclusiva para o xtibia
    1 ponto
  12. Olá pessoal, eu resolvi vir aqui mostrar pra vocês algumas attribute keys muito boas que funcionam (ou funcionavam) eu só testei em 7.92, e funciona MUITO bem! Eu não sabia onde postar, então postei aqui. Por favor movam. Vamos lá. Lista de Attribute Keys Vou colocar uma lista e explicar cada uma. <attribute key="healthGain" value="100"/>(Essa aqui é o seguinte, o número que você colocar aqui será o tanto de life que o player receberá por segundo) <attribute key="healthTicks" value="1"/> (essa aqui controla o tempo em que a vida irá subir. ex: 1 = a cada um segundo, assim por diante. <attribute key="manaGain" value="100"/>(esta é a mesma coisa que a de cima, mas é o tanto de mana e não de life) <attribute key="manaTicks" value="1"/>(essa aqui controla o tempo em que a mana irá subir. ex: 1 = a cada um segundo, assim por diante.) <attribute key="armor" value="20"/> (Aumenta 20 na defesa (pode ser alterado o número no value, quanto mais, mais defesa)) <attribute key="skillClub" value="20"/> (Aumenta em 20 o Skill de club (quanto mais, mais skill aumenta)) <attribute key="skillAxe" value="20"/> (Aumenta em 20 o Skill de axe (quanto mais, mais skill aumenta)) <attribute key="skillShield" value="20"/> (Aumenta em 20 o Skill de shield(quanto mais, mais skill aumenta)) <attribute key="skillSword" value="20"/> (Aumenta em 20 o Skill de sword(quanto mais, mais skill aumenta)) <attribute key="skillFist" value="20"/> (Aumenta em 20 o Skill de fist (quanto mais, mais skill aumenta)) <attribute key="speed" value="500"/> (adiciona 500 de velocidade (quanto mais, mais a velocidade aumenta)) <attribute key="increaseMagicPercent" value="10"/> (aumenta em 10% o ataque mágico (quanto mais, mais o ataque aumenta)) <attribute key="absorbPercentPhysical" value="55"/> (Absorve 55% dos danos físicos recebidos (quanto mais, mais absorve)) <attribute key="absorbPercentEnergy" value="55"/> (Absorve 55% dos danos de energia recebidos (quanto mais, mais absorve)) <attribute key="absorbPercentFire" value="55"/> (Absorve 55% dos danos de fogo recebidos (quanto mais, mais absorve)) <attribute key="absorbPercentPoison" value="55"/> (Absorve 55% dos danos de veneno recebidos (quanto mais, mais absorve)) <attribute key="absorbPercentLifeDrain" value="55"/> (Absorve 55% de life drain recebidos (quanto mais, mais absorve)) <attribute key="absorbPercentAll" value="35"/> (Absorve 35% de TODOS ataques recebidos (quanto mais, mais absorve)) <attribute key="description" value="O QUE QUER ESCRITO(Aqui vc coloca uma mensagem para aparecer quando der look. PS: não esqueçam de sempre colocar o item no Movements.xml! É isso ai, se eu achar mais alguns, atualizarei o tópico. Se souberem de outros, postem aqui. EDITADO eu expliquei a função do Mana e HealthTicks. Espero que aprovem! EDITADO² Eu tinha me esquecido do description. Agora acho que ta completo!
    1 ponto
  13. decosiqueira

    Compilar Distro Para 64 Bits

    Bom quem tem alguma dúvida de como compilar veja esse tutorial -> aprenda a compilar o distro agora vamos ver como fazer para passa para 64 bits. Se você não tem o dev-cpp aqui esta completo -> baixe primeiro agora siga esses passos: para quem ja tem atualize usando esse link aqui você encontra respositórios necessários para compilar em 64 bits libs e repositórios 64 bits 1. vá em Projetos 2. opções do projeto 3. Parâmetros 4. Em compilador Inclua "-m64" 5. salve e compile. Uploaded with ImageShack.us
    1 ponto
  14. Scizorgame

    Pokemon Ex 2.0

    Servidor Contém: Order 100%(Dig,Ride,Fly,Cut,RockSmash,Flash,Blink) Teleport 100% Surf 100% 9 Pokemons Shinys (Charizard,Rattata,Magikarp,Paras,Oddish,Zubat,EliteLee,EliteChan,Gyarados) Control Mind 90% (se você controlar um pokemon shiny ele vira normal) !cd [34/160] NPC que compra pokemon 100% Mapa uns 80-90% Svke 7 Quest (Pokeballs<Venom<Cerulean<Pewter<RockTunnel<Gengar<Charizard) Gym System BETA(So tem o Brock nao ganha nada depois de derrotar ele e depois que se ganha dele ele não fala mais com você , você pode editar mais e usar eles em evento quem ganhar receber um premio do GM...) 10 Cidades m1-m12(90%) Loot,Catch,Corpses(99%) Evolução(100%) Rare Candy Box1-4 Max 6 pokemons o resto vai DP Ja esta editado no items.otb , items.xml , portrait e corpse de 35 shinys em outros lugares vai se so preciso ageitar xml do monstro , moves , o lv necessario , a chance de catch o life e quanto ganha de life por level(cons) Download Server: http://www.4shared.com/file/q7RjOddX/Pokemon_EX_20.html Download Cliente: http://www.4shared.com/file/laL0J39V/Pokemon_EX_Cliente_020611.html
    1 ponto
  15. Trile

    Global 8.60 Beta Com Site

    Salve! Vim Trazer Um Global Full C/Site BeTa. Prints Ae Pro Seis ^^ HEHE MUITO LOKO!!! Site Muito Loko Tbm! Download Do Map http://www.4shared.c...Global_860.html] Download Do "Gesior" WebSite http://www.4shared.c...FbU/Gesior.html Para Deixar Site On Download Do Xampp ]http://www.baixaki.c...nload/xampp.html SCANS Scan Do Sitehttp://www.virustota...e556-1281479277 Xampp é Do Baixaki Então Nem Preisa De Scan Scan Do Global http://www.virustota...8d1a-1308007151 Creditos Death Core 26% Doidin 25 % Alissow 25% Masterlokinhon 25 % Ajudei? Da Rep+ , Não Vai Cair Sua Mão
    1 ponto
  16. Piabeta Kun

    The Explorer Society Quest

    The Explorer Society Quest Também conhecida como: Explorer Society Quest Recompensa: Ice Pick, Spectral Stone, 6 Orichalcum Pearls, 1 Crown Backpack, 50 platinum coins. Você pode usar os teleporters entre Port Hope e Northport, e entre Liberty Bay e Svargrond que funcionam com um Orichalcum Pearl. Você ganha a habilidade de viajar até Calassa e Frozen Trench. Você pode comprar Atlas e Crown Backpacks Localização: Começa em Port Hope ou Northport, mas precisa viajar por todo o Tibia Level requerido: 0 Premium requerida: sim Esteja preparado para enfrentar: Rats, Dwarves, todos os tipos de Orcs, todos os tipos de Minotaurs, todos os tipos de Lizards, todos os tipos de Apes, Priestesses, Demon Skeletons, Humanos, todos os tipos de Elves, e todos os tipos de Undead, como Banshees, Frost Dragons e todos os tipos de Quara. Legenda: A Explorer Society é uma ordem de nobres que exploram todos os lugares do continente Tibiano. Se você quiser provar que é capaz de entrar nessa sociedade, você precisa passar por vários testes. Veja mais Quests. Tabela de conteúdo [esconder] 1 Spoiler 2 Método 3 Entrando na Explorer Society 4 Rank: Novice 4.1 Entregando Gelo 4.2 Caçando Borboletas 4.3 Coletando Plantas [*]5 Rank: Journeyman 5.1 A Urna dos Lagartos 5.2 O Segredo dos Bonelords 5.3 O Pó dos Orcs [*]6 Rank: Relic Hunter 6.1 O Poeta Élfico 6.2 A Pedra da Memória 6.3 Descobrindo Escritas [*]7 Rank: Explorer 7.1 Ectoplasma 7.2 O Vestido Espectral 7.3 A Pedra Espectral 7.4 Os Portais Astrais 7.5 A Ilha dos Dragões 7.6 A Música de Gelo 7.7 Missões Adicionais 7.7.1 O Reino Submarino [*]7.8 A Frozen Trench [*]7.9 A Caveira de Ratha [*]7.10 A Giant Smith Hammer [*]8 Transcrições 8.1 Entrando na Explorer Society 8.2 Rank: Novice 8.2.1 Entregando Gelo 8.2.2 Caçando Borboletas 8.2.3 Coletando Plantas 8.2.4 A Urna dos Lagartos 8.2.5 O Segredo dos Bonelords 8.2.6 O Pó dos Orcs [*]8.3 Rank: Relic Hunter 8.3.1 O Poeta Élfico 8.3.2 A Pedra da Memória 8.3.3 Descobrindo Escritas [*]8.4 Rank: Explorer 8.4.1 Ectoplasma 8.4.2 O Vestido Espectral 8.4.3 The Spectral Stone 8.4.4 A Ilha dos Dragões 8.4.5 A Música de Gelo [*]8.5 Missões Adicionais 8.5.1 O Reino Submarino 8.5.2 A Frozen Trench 8.5.3 A Caveira de Ratha 8.5.4 A Giant Smith Hammer Spoiler Essa é uma quest longa e difícil. Algumas partes podem ser feitas em qualquer level, mas algumas missões requerem que você passe por lugares difíceis, como Dwacatra, Ulderek's Rock, profundezas de Banuta, Calassa e etc. Método Para começar essa quest, visite a Tibian Explorer Society em Port Hope (aqui) ou Northport (aqui), e fale join, depois volte para algumas das bases principais para receber as missões. Entrando na Explorer Society Após pedir para join na Explorer, sua primeira missão será conseguir um Dwarven Pickaxe. Vá para Kazordoon e fale com Uzgod, o vendedor de armas (embaixo do Depot). Peça a ele uma Dwarven Pickaxe. Ele vai dizer que já tem muitas encomendas, mas se você recuperar seu Family Brooch, ele te dará a Dwarven Pickaxe. O Family Brooch está em Dwacatra, a prisão de Kazordoon. Para entrar em Dwacatra, você precisa pegar uma chave. Mas para isso, você precisa de mais duas chaves que estão perto da sala do trono. A primeira (Key 3800) está no final do corredor secreto A segunda (Key 3801) está em um quarto trancado, abra a porta com a Key 3800 e pegue a chave na caixa (o local está indicado na imagem acima). A última (Key 3802) está em um quarto abaixo da sala do trono, próximo ao depósito de armas. Você precisa da Key 3801 para abrir essa porta. Desça dois andares e vá para Noroeste. Você verá uma cama com um baú próximo. Use a Key 3801 para abrir a porta caso esteja trancada. Quando tiver a Key 3802, você pode entrar em Dwacatra. A entrada da Prisão fica perto da entrada de Kazordoon. Entrada para a Prisão Em Dwacatra, desça o buraco (IMPORTANTE: Você precisa de shovel) próximo ao poço e abra a caixa atrás da porta. Você vai ter que enfrentar um grande número de Orcs, Orc Spearman, Minotauros, Minotaur Archers, Dwarves, Dwarf Soldiers, Dwarf Guards, alguns Cyclopes, e talvez um Minotaur Mage ou Orc Berserker. Vá devagar para não ser cercado. Vá até o círculo e desça o buraco Quando terminar, volte até Uzgod, e diga que encontrou seu brooch. Ele vai te entregar a Dwarven Pickaxe. Volte para a Explorer Society e entregue a Dwarven Pickaxe (pode ser em Northport ou Port Hope). Você é agora um membro oficial da Tibian Explorer Society. Rank: Novice As três missões seguintes são para os novatos da Explorer Society. Quando todas as três missões forem completadas com sucesso, você avançará no ranking. Entregando Gelo Essa missão requer que você use uma Ice Pick especial, e colete um pouco de gelo da ilha de Folda. O gelo está na forma de Icicle. O Icicle derrete rapidamente (em 10 minutos), então você deve se apressar quando pegá-lo. É recomendado que você pegue esta missão da Explorer Society em Northport, já que é mais próximo das Ice Islands. Pegue a Ice Pick pedindo mission, vá para Folda, e entre na caverna principal (aqui). Os mapas que seguem mostram o caminho mais curto para o gelo. Você enfrentará Frost Trolls, Rotworms, Minotaurs, Minotaur Archers, e talvez alguns Slimes. Mate tudo no seu caminho, e se você for rápido eles não renascerão e não irão atrasá-lo na volta. Logo que entrar na caverna desça a escada Vá até o fim da linha e use a pick no gelo Leve o Icicle de volta para a Explorer Society, e diga ice delivery. Se o Icicle derreter, fale com o NPC e ele te dará outra chance. Caçando Borboletas Para esta missão, a Explorer Society procura por espécimes frescas de certas borboletas. Para cada borboleta você receberá um Butterfly Conservation Kit para coletar um corpo morto recentemente das diferentes borboletas. Dicas: Você pode fazer a Butterfly Hunt (Caçando Borboletas) e a Plant Collection (Coletando Plantas) ao mesmo tempo, simplesmente peça por cada uma dessas missões. É recomendado que você encontre as borboletas roxas primeiro, e mantenha seus olhos abertos para as outras enquanto coleta as plantas. Se você ver uma borboleta azul ou vermelha antes de precisar delas, mate-as mesmo assim e pegue o corpo. Se você encontrar as outras borboletas rápido o suficiente, poderá usar o corpo, mesmo que não seja assim tão recente (claro que não pode ter apodrecido totalmente). Primeiro, você precisará achar uma borboleta roxa. Essas são as mais comuns, e podem ser vistas em toda a área de pântano ao Norte de Port Hope, a área gramada ao Sul de Port Hope, como em muitos outros lugares em todo o Tibia. Abaixo imagem no Jardim de Cormaya. Segundo, você precisará achar uma borboleta azul. Essas são mais difíceis de localizar, mas são encontradas perto de Port Hope, geralmente com borboletas roxas. Elas são vistas ao longo das costas Norte e Sul de Port Hope, nos arredores de Tiquanda, no mata ao Norte de Port Hope, e ao longo do rio dentro da floresta de Tiquanda. Há também uma borboleta azul na pequena montanha perto do barco em Cormaya, em Meriana e no Well of Life na Pits of Inferno. Abaixo imagem no Jardim de Cormaya. Terceiro, você precisará achar uma borboleta vermelha. A maioria das pessoas têm problemas com essa parte. Não parece ter um lugar "normal" para essas borboletas aparecerem, mas elas podem ser vistas nas bordas das florestas ao Norte e Sul de Port Hope, em Trapwood perto da cidade, Sudoeste de Banuta, e ao longo do rio em Tiquanda, em toda Vandura (em Liberty Bay e ao sul de Liberty Bay) nas Shattered Isles e no Well of Life na Pits of Inferno. Também, algumas podem ser encontradas na entrada de Chor e em Yalahar. Na imagem abaixo, uma borboleta vermelha ao Sul de Tiquanda. Nota: Todas as borboletas podem ser encontradas em Yalahar, dentro da cidade mesmo. No mapa abaixo, se você preferir matar as borboletas em Port Hope, veja a localização (apenas uma suposição já que elas obviamente mudam de lugar) das borboletas: Siga a legenda abaixo Borboleta Roxa: Número 1 Borboleta Azul: Número 2 Borboleta Vermelha: Número 3 Coletando Plantas Para esta missão você precisa coletar amostras de três tipos diferentes de plantas selvagens numa ordem específica. Para cada planta será lhe dado um Botanist's Container, para utilizar na coleta da amostra da planta. Primeiro, você precisa encontrar uma amostra de uma Jungle Bells Plant. Estas podem ser encontradas no solo ao longo do lado Sul de Port Hope muito próximo da cidade, e dentro de Tiquanda na Selva Norte de Port Hope. Alguns foram vistos aqui, aqui e aqui. Jungle bells também estão localizadas no Well of Life na Pits of Inferno. Você pode encontrar aqui, no Sul da cidade Ou aqui, próximo da Witches Cauldron Em segundo lugar, é preciso encontrar uma amostra de uma Witches Cauldron Plant. Estas encontram-se um pouco mais profundamente na selva de Tiquanda . O jeito mais fácil de se localizar é ao longo do rio. Vá para Leste de Port Hope no lado Norte do rio e siga o rio em direção ao Norte. Elas podem ser encontradas à Norte de um acampamento com Skeletons (aproximadamente aqui). Outro local, à Nordeste da Explorer Society em Port Hope, aqui. Também são encontradas no Well of Life na Pits of Inferno. Essa fica próxima da Jungle Bells Finalmente, é preciso encontrar uma amostra de Giant Jungle Rose. Uma pode ser encontrada perto do rio no caminho das witches cauldron descrito acima (aqui). Giant jungle rose também são encontradas no Well of Life na Pits of Inferno. Sul das outras duas Rank: Journeyman As três missões que se seguem são para o rank Journeyman da Tibian Explorer Society. Depois que todas as três missões forem concluídas com êxito, você avançará no ranking. A Urna dos Lagartos A Explorer está pedindo para você obter um Funeral Urn sagrado da vila de lagartos em Chor, para suas pesquisas. Vá para Chor. Lá, você tem que lutar contra todos os tipos de lizards para entrar no templo. Os lagartos não são difíceis, mas a quantidade presente no local é grande, então é bom levar algumas runas de GFB. Mate primeiro o Lizard Snakecharmer, porque eles podem ser uma verdadeira dor-de-cabeça com as suas cobras sumonadas. O melhor caminho para chegar em Chor é ir pelas montanhas em Ankrahmun. Quando você estiver na floresta, vá aqui, e então atravesse a passagem pela montanha aqui. Os mapas abaixo mostram o caminho desde Ankrahmun até o Funeral Urn. Outra boa opção é se você tiver o rank de Ranger no Grizzly Adams, assim você poderá pegar o barco ao oeste do mesmo, e pelo custo de 50 gp, ele o levará para Chor. Vá para Oeste de Ankrahmun e suba Mate algumas Hyaenas no caminho e suba Siga o caminho Siga o caminho Siga o caminho Vá pela linha vermelha e vá pela passagem na montanha Descendo a escada, siga a linha preta e desça a escada O Funeral Urn fica localizado num templo, bem no centro da vila (aqui). Desça a escada e mate alguns Lizard Snakecharmers. Quando pegar o Funeral Urn, volte até a Explorer Society e reporte sua missão. Passe pela porta e pegue a urna O Segredo dos Bonelords A Explorer Society acredita que a pirâmide à Noroeste de Darashia foi construída por Bonelords. Sua missão é ir até a Dark Pyramid e pegar um Wrinkled Parchment. Lá você enfrentará todos os tipos de minotauros, então é bom ter um pouco de cuidado se você é level baixo. Siga os mapas até o local: Vá para Noroeste de Darashia Mate a Mummy e desça a escada Pegue o documento atrás da porta Volte para a Explorer Society e fale para ele que você conseguiu o "Bonelord Secrets". O Pó dos Orcs A Explorer Society quer que você vá e pegue um pó usado pelos Orcs para fazer os Orc Berserkers e Orc Riders ficarem "loucos". Okay, vá para Ulderek's Rock, lutando contra todos os tipos de orcs. Quando estiver no fortress, vá até o círculo vermelho no mapa abaixo: Subindo a rampa você encontrará diversos orcs, na maior parte Orc Leaders e Orc Warlords. Após subir 5 andares você encontrará a porta. Abra o baú e você encontrará o Orc Powder. Volte até a Explorer para completar a missão. Rank: Journeyman completo! Rank: Relic Hunter Todo membro com o rank de Relic Hunter, ou maior, poderá comprar Atlas e alugar Helmet of the Deeps. Este rank consiste em três missões, após completar todas as três com sucesso, você avançará de rank. O Poeta Élfico A Explorer quer estudar os poetas élficos. Sua missão será pegar um livro no Hellgate. Você irá precisar da chave 3012. Vá pelo Hellgate seguindo o caminho nos mapas abaixo para chegar até o livro. Dentro do Hellgate, vá para Oeste Vá para Leste Siga até a flecha amarela e desça Quando descer, siga o mapinha abaixo, passe pela porta e pegue seu livro Songs of the Forest. Você enfrentará alguns Elfs e Elf Scouts. Assim que você tiver o livro, retorne para a Explorer Society. Se precisar de ajuda para encontrar a saída, veja aqui: Rota: Hellgate. A Pedra da Memória A Explorer quer algumas pedras mágicas usadas por povos antigos como uma maneira de escrita. O local fica no Norte de Edron, próximo do caminho para os demons. Vá para Edron, e entre na Hero Cave aqui. Enfrentando Demon Skeletons, Wild Warriors, Priestess e Bonelords, siga o mapa abaixo: Siga a linha amarela até encontrar as duas escadas, uma subindo e outra descendo, mas vá para BAIXO e a Memory Stone vai estar simplesmente à sua direita. Após pegá-la, simplesmente volte até a Explorer Society. Descobrindo Escritas A Explorer Society quer estudar antigas runas usadas pela sociedade dos lagartos. Vá para Banuta e desça aqui. Você encontrará durante todo o caminho apes. Vá da seta azul para a amarela. Siga a linha e use o pedaço de papel na atypical structure no Norte da sala. Volte até a Explorer Society e entregue a sua missão. Rank: Explorer As missões a seguir são para o rank de Explorer. Ectoplasma A Explorer Society está trabalhando na criação de portais astrais. Sua missão é simples. Você ganhará um Ectoplasm Container, e deverá usar em um ghost recentemente morto. Mate um ghost e então use o Ectoplasm Container. Retorne até a Explorer Society após concluir sua missão. O Vestido Espectral Os estudos da Explorer Society com portais astrais estão tendo progresso. Agora eles precisam de algum objeto astral. Um Spectral Dress será de grande utilidade, e você deverá pedir um para a The Queen Of The Banshees, que mora em Ghostlands. Siga o caminho abaixo até a The Queen Of The Banshees, e também o Spectral Dress. Primeiramente, vá até Ghostlands, e desça nesse buraco aqui. Vá para o Sul e desça noutro buraco. Você encontrará alguns Skeletons, Ghouls e algumas Poison Spiders. Vá para Sudeste e desça novamente. Vá para os Magic Walls à Leste do lugar que você desceu. Para abrir os Magic Walls, você precisa puxar 2 alavancas. Um alavanca fica à Oeste e um à Leste daqui (veja as setas vermelhas). A alavanca do Leste é guardada por uma Giant Spider. Depois de remover os Magic Walls, passe rapidamente, se você tiver com amigos, passem todos ao mesmo tempo, pois existe um botão escondido que fecha os Magic Walls. Então desça o buraco (o teleporter é para voltar quando os Magic Walls estiverem fechados). Vá para o Norte dessa sala. Aqui você encontrará Mummies, Ghouls, Stalkers e Ghosts. Vá pelo Teleporter. Agora você está num corredor longo e estreito. Vá pra o Sul. Em um ponto no meio desse corredor existe um teleporte escondido que te manda de volta para o começo. Encontre, usando uma pick, um buraco que te leve para o andar inferior (veja as setas vermelhas na foto), então vá pelo Teleporter. Vá até o final, sentido Sul, e suba novamente ao final do corredor. Continue andando na mesma direção e ao final suba uma rampa à Oeste, desça e você estará em uma sala arredondada. Nessa sala existem alguns Ghosts, Stalkers e uns 4 ou 5 Demon Skeletons. Vá pelas escadas. Desça pelas escadas à Nordeste daqui. Você passará por: Ghosts, Stalkers, Demon Skeletons e muitos Scorpions. Desça as escadas à Sudoeste daqui. No caminho você encontrará muitas Banshees. O Spectral Dress é localizado aqui, mas você precisa falar com a The Queen Of The Banshees antes de pegá-lo. Vá para as escadas ao Norte e suba para esta sala (aqui tem mais Banshees). Desça as escadas e siga o caminho para as outras escadas. Suba aqui. Vá para o Norte desta sala. Aqui você encontrará Ghosts e Demon Skeletons (talvez seja bom para Mages usarem Invisible). Desça as escadas. Daqui vá para Leste e siga este caminho. Desça as escadas. Aqui fica a The Queen Of The Banshees, guardada por: Banshees, Ghosts e Stalkers. Aqui existem muitas Banshees, Mummies e Ghosts. Tome cuidado pois é muito perigoso. Fale Hi, Spectral Dress. Depois de falar com a The Queen Of The Banshees, e ela dizer que você pode pegar o vestido, volte pelo mesmo caminho (veja as imagens). Depois de pegar o Spectral Dress, volte para a Explorer Society. A Pedra Espectral Okay, pegue a missão em Port Hope ou Northport. O NPC (Angus ou Mortimer) vai pedir para você viajar até a outra base (Northport ou Port Hope) e pegar as últimas notas de pesquisa falando mission. Quando fizer, volte até a base onde você pediu a missão. Os passos finais para ativar o portal astral estão no final. Voltando para a base, peça novamente uma mission. O NPC da base escolhida lhe entregará uma Spectral Stone. Sua missão será usar essa pedra no andar superior da base onde você está, e usar também na outra base. A imagem abaixo mostra o jogador usando a pedra em Northport e depois em Port Hope. Os Portais Astrais Desça e fale com o Angus ou Mortimer (dependendo da base escolhida) e fale mission. Agora você pode viajar entre Port Hope e Northport pela Explorer Society. Você só precisa ter uma Orichalcum Pearl na sua backpack. Você pode comprá-las nas bases da Explorer por 80 gps. A Ilha dos Dragões Note que para fazer as missões em Svargrond você precisa completar a The Ice Islands Quest até a missão "Formorgar Mines 3". A Explorer Society quer descobrir como surgiram os Frost Dragons em Okolnir. Encontre alguma prova que antes existiu Dragon Lords na ilha. Após pedir a missão para Lurik em Svargrond, vá para Okolnir. Siga o mapa abaixo: Quando chegar em Okolnir no barco, vá para o Sul e suba Enfrentando Frost Dragons e Frost Dragon Hatchlings, vá até a escada à Leste e desça Você encontrará mais Frost Dragons, vá para o Sul e desça no buraco No buraco haverá mais Frost Dragons, vá para o Sul e use a sua Pick no buraco escondido Vá até o final da sala, você verá um Dragon Lord congelado, clique nele e pegue a Dragon Scale Retorne até Lurik e entregue a Dragon Scale. Nota: Se você completou a missão para ir em Calassa, Lurik vai dar a missão para você ir até Frozen Trench. A Música de Gelo Em Hrodmir, existe uma cachoeira com várias stalagmites, e quando o vento bate nelas, produz um som. Sua mission é usar um Resonance Crystal para "gravar" esse som. Vá para as Barbarian Islands, e matando Mammoths no caminho, siga esse mapa abaixo: Do barco, vá pra o Norte e suba a escada Siga para Noroeste, desça a escada Vá um pouco para o Norte, e use o Resonance Crystal no Stalagmite Simplesmente retorne até Lurik e entregue a sua missão. Como recompensa pelo seu excelente trabalho, você poderá usar os teleporters astrais entre Svargrond e Liberty Bay com uma orichalcum pearl. Missões Adicionais O Reino Submarino Vá até Liberty Bay e fale com Berenice. Ela vai contar que um navio da Explorer estava investigando o lar das quaras, mas afundou, e o motivo não é conhecido. Sua missão será recuperar um livro no fundo do mar, com anotações sobre essa estranha raça. Você irá precisar de pick e 5,000 gps para alugar um Helmet of the Deep. Além disso, você precisa ter o rank de Relic Hunter para conseguir a missão com a Berenice. Quando pegar a missão, vá até o Capitão Max no cais, e peça para ir até Calassa por 200 gps. Chegando lá, você poderá alugar um Helmet of the Deep por 5,000 gps, caso você ainda não tenha um. Note que o capacete de mergulho pesa 210 oz., então não esqueça de reservar cap. Okay, coloque o capacete na cabeça e pule na água. Fique preparado para enfrentar todos os tipos de quaras e massive water elementals. Lembre-se que embaixo d'água, você anda muito devagar. Vá para o Sul, depois Leste. Você verá um navio destruído. Use a pick na escotilha de madeira, e então uma escada irá aparecer. Vá até o navio destruído, use a pick e desça, enfrentando 2 Quara Constrictors e 3 Quara Hydromancers Vá para o Norte, passe pela porta e pegue o Damaged Logbook Retorne até Berenice e entregue o Damaged Logbook. A Frozen Trench Para ganhar o direito de fazer essa missão, complete a missão acima (Reino Submarino). Além disso, complete até pelo menos a missão "Formorgar Mines 3" da Ice Islands Quest. Você precisará da magia levitate ou parcels, e um Helmet of the Deep. Vá até Lurik em Svargrond, e peça uma mission. Ele lhe mandará investigar o que aconteceu com um explorador que se perdeu em uma missão para explorar a Frozen Trench. Certo, fale com Buddel para levá-lo até Tyrsung. Uma vez em Tyrsung, siga para o Sul até um acampamento com smugglers. No ponto mais ao Sul da ilha, haverá um navio encalhado. Dirija-se para cima do navio, coloque seu Helmet of the Deep, e pule na água usando a prancha na parte Sul do navio. Você enfrentará Quara Constrictors e Quara Mantassins em volta do teleport. Dirija-se para o Sul até que você encontre um penhasco para usar levitate. Vá para o Oeste e use levitate até encontrar a caverna principal, ao Norte. Continue indo para o Norte até encontrar um frozen human e pare na frente dele. Isto fará uma mensagem aparecer dizendo que você encontrou um ser humano congelado e que você deve relatar isso ao Lurik. Após retornar ao Lurik, você será recompensado com o Sea Scout Badge, que não é um item, mas somente um título. A Caveira de Ratha Nota: Esta missão pode ser feita por jogadores free account. Esta quest não e muito complicada. A única dificuldade será derrotar as criaturas que guardam as recompensas. Levando em conta que as Witches podem jogar Fire Fields, pode ser uma boa idéia levar algumas Destroy Field caso seu trajeto seja obstruído. Viaje através do Green Claw Swamp até chegar no Amazon Acampment, Norte de Venore. A "Witch Hill" fica situado perto do centro do acampamento, aqui. No círculo rosa abaixo: Após derrotar duas Witches, uma Valkyrie, e um Lion, abra as duas boxes para obter 2 bags: uma com uma White Pearl, a Skull of Ratha e outra com um Wolf Tooth Chain e um Dwarven Ring. Volte até Mortimer ou Angus e entregue a skull por uma recompensa de 250 gps. A Giant Smith Hammer Nota: Esta missão pode ser feita por jogadores free account. Vá para o acampamento de Cyclops/Minotaur em PoH, e prepare-se para encarar muitos Cyclopes e vários tipos de Minotaurs. Vá para as escadas na estrutura ao Norte, (aqui). Assim que descer, você encontrará inúmeros Cyclopes, Minotaurs, Minotaur Guards, Minotaur Mages, e ainda alguns Orcs. A caixa da quest está na sala diretamente ao Sul. Volte até Mortimer ou Angus e entregue o Giant Smithhammer, recebendo 250 gps como recompensa. + uma vez espero q gostem!
    1 ponto
  17. O Host só entra pelo IP 127.0.0.1 mesmo. Você tem que desbloquea a porta do firewall e do modem também. Tente acessar : 192.168.1.1 na barra de endereços com o login: admin/admin Se não der certo, aperte iniciar>executar>CMD e na tela preta escreva: ipconfig irá aparecer varios ips, pegue o gateway padrão e acesse com o mesmo login e senha dito acima. Quando estiver na pagina do modem tente achar algo com ports. se nao acha poste uma SS na pagina do modem para eu te mandar os passos correto.
    1 ponto
  18. douguera

    System Vip

    n sei se eh issu mas tae coloque essa vip aki do Kydrai ele eh pra acc enteira Clique aqui e para o nome vip é axo q double exp é na vocations.xml ai sei la ;x
    1 ponto
  19. KamuiRunt

    Problema No Remeres

    Pegue o itens.xml da pasta do ot, e cole na pasta do editor, abraçs.
    1 ponto
  20. PokeStars

    Mapa De Poketibia 8.54 28/12/10

    Muito bom,tem alguns erros mais nada que uma editadinha nao resolva
    1 ponto
  21. Confira o novo Ktibiax® Tibia Launcher Update (Junho/2010) Uma nova e empolgante interface Suporte para as versões até 8.60 Melhorias e correções de bugs no Lag checker Melhorias no consumo de memória Não será mais necessário realizar nenhuma instalação, KTibiaX agora é portable Não confie em links do rapidshare, easyshare ou afins. Baixe o programa apenas do googlecode ou codeplex! [Download do Programa] KTibiaX® Launcher Setup 2.1.3 .Net 20 (Para quem possui o .Net Framework 2.0) KTibiaX® Launcher Setup 2.1.3 .Net 35+ (Para quem possui o .Net Framework 3.5 ou posterior) [Código Fonte / Suporte] KTibiaX® Launcher CodePlex KTibiaX® Tibia Launcher 2.1 [Modo de Distribuição] Open Source [Linguagem de Construção] C# 3.5 [suporte para as versões] 7.6 - 7.92 - 8.0 - 8.10 - 8.11 - 8.20 - 8.21 - 8.22 - 8.30 - 8.31 - 8.4 - 8.41 - 8.42 - 8.50 - 8.54 - 8.55 - 8.57 - 8.60 [iPChanger (Server / Port)] Funcionalidade conhecida. Permite que você altere o ip do login server, para que você se conecte em OTServers. Também funciona com o Tibia Oficial (apenas não selecione nenhum servidor). [status Checker & Lag Measurement] Essa funcionalidade permite que você cheque se um determinado servidor está online e o Lag deste servidor. Obtém informações completas sobre o OT. Medidor de lag 100% funcional. Você está correto, até 250 (ainda verde no medidor) o server é "jogável". Acima disso (parte vermelho/alaranjado no medidor) significa que o servidor não é recomendável ou simplesmente não suporta mais jogadores. Uma boa aplicação para esta funcionalidade seria medir o lag do servidor quando o cliente começar a travar ou "freezar" demais, dessa forma você poderia identificar se o problema está no servidor ou na sua internet. []'s [OTServer Maps Distinct] Mantenha separados os Mapas dos OTs que você joga. Evitando a substituição e a bagunça nos mapas, causada pela utilização de varios servidores. E manteha os mapas oficiais intactos. Não é necessário alterar nenhuma configuração para que o ktibiax separe os mapas. Em opções avançadas existe um campo com o diretório onde os mapas de ot serão salvos e uma outra opção (que já vem marcada) que permite que os mapas de ots sejam separados. Dessa forma o programa criará uma pasta para cada ot que vc jogar e salvará os mapas na pasta deste ot. Assim quando você jogar neste ot novamente, o programa irá dizer ao tibia que os mapas que precisam ser usados são os mapas já salvos na pasta do ot. []'s [safe Multi-Client] Permite que você utilize a função de Multi-Cliente para qualquer versão 8.* sem risco de ser banido. Esse MC é indetectável, pois eu não modifico o cliente! Apenas fique atento, não logue vários MC's ao mesmo tempo pois a CIP grava registros dos jogadores que fazem isso. Aguarde ao menos 2 minutos entre os logins de seus chars para não correr risco de ser banido. []'s [server Address Storage] Salve informações de seus servidores favoritos e recupere quando quiser. [Client & Version Managment] Salva os clientes e suas respectivas versões. E sempre que vc selecionar um servidor, o cliente será sugerido automaticamente. [Graphics and FrameRate] Permite que você defina um Graphics Engine e que vc personalize o Frame Rate antes de abrir o cliente. Disponível para versões 8.* [Tibia.cfg Managment] Você pode salvar diferentes versões do seu Tibia.cfg com suas definições favoritas (Hotkeys, configurações, gráficos, etc.) para cada vocação, e usá-los para abrir os clientes quando quiser. [RSA Key Writer] Possibilita a personalização da chave RSA de login para OTServers. [Advanced Options Managment] Você pode definir qualquer uma das opções avançadas do sistema, e suas preferências serão salvas. [Form Skins] Você pode escolher entre os vários skins disponíveis. Não confie em links do rapidshare, easyshare ou afins. Baixe o programa apenas do googlecode ou codeplex! [Download do Programa] KTibiaX® Launcher Setup 2.1.3 .Net 20 (Para quem possui o .Net Framework 2.0) KTibiaX® Launcher Setup 2.1.3 .Net 35+ (Para quem possui o .Net Framework 3.5 ou posterior) [Código Fonte / Suporte] KTibiaX® Launcher CodePlex []'s
    1 ponto
  22. joaohd

    Material De Apoio Vii

    Material de Apoio VII Funções e return Ao criarmos nossos códigos lua, às vezes precisamos de funções ou procedimentos para agilizar o trabalho ou resolver algum problema. Aprenderemos agora, como criar estas funções e também algumas técnicas para obter o máximo de desempenho delas. Por não ser uma linguagem fortemente tipada - apenas valores possuirem tipos -, as funções em lua podem ser escritas de diversas formas. Observe a estrutura básica delas: NomeDaFuncao = function(argumentos) function NomeDaFuncao(argumentos) function(argumentos) A segunda estrutura é o que chamamos de sintax sugar - açucar sintático -, que nada mais é que a primeira estrutura organizada da forma convencional a que estamos acostumados. Entretanto, se observarmos a terceira estrutura, nossa função não tem nome!! Mas como trabalharemos com ela então? Bom, neste tipo de função, trata-se de modo especial, passando-a como um argumento para outra função, assim: print(function() return "Isto será repassado como argumento." end) No exemplo acima, podemos observar tambem o uso do return, retornando uma string. Mas para quê serve esta estrutura?? O return não faz nada além de nos mostrar o resultado da função. Uma função sem return não apresentará um resultado. Podemos retornar qualquer valor em lua. Observe: function ab() -- Retorna uma string return "Esta retorna string" end function cd() -- Retorna um número return 123 end function ef() -- Retorna um booleano return true end function gh() -- Retorna uma tabela return {} end function ij() -- Retorna outra função return function ab() end Quando o return é encontrado, a função é encerrada e o valor é retornado. Entendido o return, passemos a uma nova fase: a recursividade. Em Ciência da computação, a recursividade é a definição de uma subrotina (função ou método) que pode invocar a si mesma. Trocando em miúdos, seria repetir a mesma instrução várias vezes com o resultado desta mesma instrução. Vejamos um exemplo: function fact(n) if n == 0 then return 1 else return n * fact(n - 1) end end Analisando passo a passo, a execução se daria assim: Suponhamos n = 5; No primeiro instante, teriamos um retorno 5*4 e nosso n passaria a ser 4. No segundo instante, teriamos um retorno de 5*4*3 e n passaria a ser 3. No terceiro instante, teriamos um retorno de 5*4*3*2 e n passaria a ser 2. No quarto instante, teriamos um retorno de 5*4*3*2*1 e n passaria a ser 0. Como temos um condicional dizendo que caso n seja igual a 0 retorne 1, teriamos: 5*4*3*2*1*1 = 120 Este é um exemplo do uso da recursividade. Créditos Função fact : Manual de referência lua 5.1 Definição recursividade : Wikipedia No mais, é isso. flw
    1 ponto
  23. É,o mais recomendável seria instalar um site mesmo,pois,sem o site os jogadores não irão saber os comandos e nem teriam como saber se foram invitados para WAR. Vai na ABA aqui do Xtibia sobre divulgação de projetos,lá voce encontra muitos Web Makers,eles fazem um site pra voce.
    1 ponto
  24. joaohd

    Material De Apoio Vi

    Material de Apoio VI Expressões Para que possamos trabalhar com a linguagem, esta nos oferece alguns recursos aritméticos, lógicos e relacionais, o que chamamos de operadores. Cada tipo de operador tem sua finalidade e sua precedência (privilégio) com relação aos outros. Operadores matemáticos ou aritméticos: São os operadores que possuem a função de realizar uma operação matemática entre os termos e seu retorno é em forma numérica. Em lua, temos suporte aos operadores matemáticos comuns, que podem ser divididos em dois tipos: binários ou unários. E a divisão é feita da seguinte maneira: Binários: "+" (Soma); "-" (Subtração); "*" (Multiplicação); "/" (Divisão) Unário: "-" (Negação) Mas qual a diferença entre eles? Os operadores binários, precisam de dois termos (operandos) para que possa ser utilizado, já o unário, somente 1 termo (operando). Veja um exemplo: Binários: a = 2+1 => a = 3 a = 2-1 => a = 1 a = 2*1 => a = 2 a = 2/1 => a = 2 Unário: a = -2 => a = -2 (dois negativo) Ou seja, o operador unário serve somente para indicar que o número se encontra abaixo de 0 na escala numérica. Lua também nos proporciona um suporte parcial ao operador "^" (Exponenciação) Operadores relacionais São os operadores cuja função é comparar dois termos e sempre retorna um valor booleano (true ou false). Em lua, os operadores que temos à disposição são os listados abaixo: "==" (Igual); "~=" (Diferente); ">" (Maior que); "<" (Menor que); ">=" (Maior ou igual a); "<=" (Menor ou igual a) Operadores lógicos São os operadores que tem como função, executar a lógica booleana entre os termos. A compreensão básica é bem simples, porém, conforme a necessidade do seu uso em conjunto com os outros operadores for aumentando, aumentará também seu nível de dificuldade. Em lua, possuimos apenas o AND e o OR. Observe: local a = 1 == 1 and "Verdadeiro" or "Falso" => a = "Verdadeiro" local a = 1 ~= 1 and "Verdadeiro" or "Falso" => a = "Falso" Concatenação O que é esse raio de "concatenação"? Nada mais é que juntar os elementos. Esta expressão possui seu operador especial que é representado em lua por dois pontos finais "..". Observe: local a = "Concatenei isso" .. " com isso" => a = "Concatenei isso com isso" local a = "Este é o exemplo número " .. 2 => a = "Este é o exemplo número 2" Precedência ou privilégios Como foi dito, cada operador tem seu privilégio sobre o outro, sendo executado primeiro. Abaixo você pode conferir a ordem de relevância dos operadores em ordem decrescente: "^" -- Primeiro a ser executado "not" "-" (Unário) -- Segundos a serem executados "*" "/" -- Terceiros a serem executados "+" "-" -- Quartos a serem executados ".." -- Quintos a serem executados "<" ">" "<=" ">=" "~=" "==" -- Sextos a serem executados "and" -- Sétimo a ser executado "or" -- Último a ser executado Caso se apresentem mais de um com o mesmo privilégio, o que aparece primeiro terá maior prioridade quanto aos demais da mesma relevância. Se precisar de aumentar a relevância de algum operador, deve-se usar parênteses entre os termos e o operador, e este será executado em primeira ordem. É isso. flw
    1 ponto
  25. Vodkart

    [Script] Npc De "forja"

    Pode cre foi móh chato fazer seu npc mais deu um tempo livre e eu fiz,se tiver algo trocado me fala que eu arrumo. NOME DO SEU NPC.XML <?xml version="1.0"?> <npc name="NOME DO SEU NPC" script="data/npc/scripts/forjaitems.lua" walkinterval="5000" floorchange="0"> <health now="100" max="100"/> <look type="134" head="78" body="88" legs="0" feet="88" addons="3"/> <parameters> <parameter key="message_greet" value="Ola |PLAYERNAME|.Eu posso te trocar alguns {items},acho que ira lhe ajudar..." /> </parameters> </npc> NPC/SCRIPT forjaitems.lua 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 -- configuracao do script addon items -- function DragonClaw(cid, message, keywords, parameters, node) if(not npcHandler:isFocused(cid)) then return false end if getPlayerItemCount(cid,5930) >= 10 and getPlayerItemCount(cid,5948) >= 500 then if doPlayerRemoveItem(cid,5930,10) and doPlayerRemoveItem(cid,5948,500) then npcHandler:say('Here is your item!', cid) doPlayerAddItem(cid,5919,1) end else npcHandler:say('Desculpe mais você não tem os itens!!', cid) end end function SoulStone(cid, message, keywords, parameters, node) if(not npcHandler:isFocused(cid)) then return false end if getPlayerItemCount(cid,12552) >= 40 then if doPlayerRemoveItem(cid,12552,40) then npcHandler:say('Here is your item!', cid) doPlayerAddItem(cid,5809,1) end else npcHandler:say('Desculpe mais você não tem os itens!!', cid) end end function YellowRose(cid, message, keywords, parameters, node) if(not npcHandler:isFocused(cid)) then return false end if getPlayerItemCount(cid,5922) >= 10 then if doPlayerRemoveItem(cid,5922,10) then npcHandler:say('Here is your item!', cid) doPlayerAddItem(cid,2746,1) end else npcHandler:say('Desculpe mais você não tem os itens!!', cid) end end function Mandrake(cid, message, keywords, parameters, node) if(not npcHandler:isFocused(cid)) then return false end if getPlayerItemCount(cid,2746) >= 1 and getPlayerItemCount(cid,10584) >= 100 and getPlayerItemCount(cid,8912) >= 1 then if doPlayerRemoveItem(cid,2746,1) and doPlayerRemoveItem(cid,10584,100) and doPlayerRemoveItem(cid,8912,1) then npcHandler:say('Here is your item!', cid) doPlayerAddItem(cid,5015,1) end else npcHandler:say('Desculpe mais você não tem os itens!!', cid) end end function NoseRing(cid, message, keywords, parameters, node) if(not npcHandler:isFocused(cid)) then return false end if getPlayerItemCount(cid,5878) >= 500 and getPlayerItemCount(cid,12729) >= 1 then if doPlayerRemoveItem(cid,5878,500) and doPlayerRemoveItem(cid,12729,1) then npcHandler:say('Here is your item!', cid) doPlayerAddItem(cid,5804,1) end else npcHandler:say('Desculpe mais você não tem os itens!!', cid) end end -- configuracao do script equipamentos -- function EarthbornTitanArmor(cid, message, keywords, parameters, node) if(not npcHandler:isFocused(cid)) then return false end if getPlayerItemCount(cid,7884) >= 1 and getPlayerItemCount(cid,6500) >= 100 and getPlayerItemCount(cid,2472) >= 1 then if doPlayerRemoveItem(cid,7884,1) and doPlayerRemoveItem(cid,6500,100) and doPlayerRemoveItem(cid,2472,1) then npcHandler:say('Here is your item!', cid) doPlayerAddItem(cid,8882,1) end else npcHandler:say('Desculpe mais você não tem os itens!!', cid) end end function WindbornColossusArmor(cid, message, keywords, parameters, node) if(not npcHandler:isFocused(cid)) then return false end if getPlayerItemCount(cid,7898) >= 1 and getPlayerItemCount(cid,6500) >= 100 and getPlayerItemCount(cid,2472) >= 1 then if doPlayerRemoveItem(cid,7898,1) and doPlayerRemoveItem(cid,6500,100) and doPlayerRemoveItem(cid,2472,1) then npcHandler:say('Here is your item!', cid) doPlayerAddItem(cid,8883,1) end else npcHandler:say('Desculpe mais você não tem os itens!!', cid) end end function OceanbornLeviathanArmor(cid, message, keywords, parameters, node) if(not npcHandler:isFocused(cid)) then return false end if getPlayerItemCount(cid,7897) >= 1 and getPlayerItemCount(cid,6500) >= 100 and getPlayerItemCount(cid,2472) >= 1 then if doPlayerRemoveItem(cid,7897,1) and doPlayerRemoveItem(cid,6500,100) and doPlayerRemoveItem(cid,2472,1) then npcHandler:say('Here is your item!', cid) doPlayerAddItem(cid,8884,1) end else npcHandler:say('Desculpe mais você não tem os itens!!', cid) end end function FirebornGiantArmor(cid, message, keywords, parameters, node) if(not npcHandler:isFocused(cid)) then return false end if getPlayerItemCount(cid,7899) >= 1 and getPlayerItemCount(cid,6500) >= 100 and getPlayerItemCount(cid,2472) >= 1 then if doPlayerRemoveItem(cid,7899,1) and doPlayerRemoveItem(cid,6500,100) and doPlayerRemoveItem(cid,2472,1) then npcHandler:say('Here is your item!', cid) doPlayerAddItem(cid,8881,1) end else npcHandler:say('Desculpe mais você não tem os itens!!', cid) end end function Witchhunter(cid, message, keywords, parameters, node) if(not npcHandler:isFocused(cid)) then return false end if getPlayerItemCount(cid,11237) >= 1 and getPlayerItemCount(cid,12552) >= 12 and getPlayerItemCount(cid,8910) >= 1 then if doPlayerRemoveItem(cid,11237,1) and doPlayerRemoveItem(cid,12552,12) and doPlayerRemoveItem(cid,8910,1) then npcHandler:say('Here is your item!', cid) doPlayerAddItem(cid,8821,1) end else npcHandler:say('Desculpe mais você não tem os itens!!', cid) end end function DarkLord(cid, message, keywords, parameters, node) if(not npcHandler:isFocused(cid)) then return false end if getPlayerItemCount(cid,8889) >= 1 and getPlayerItemCount(cid,6500) >= 100 and getPlayerItemCount(cid,12552) >= 1 then if doPlayerRemoveItem(cid,8889,1) and doPlayerRemoveItem(cid,6500,100) and doPlayerRemoveItem(cid,12552,1) then npcHandler:say('Here is your item!', cid) doPlayerAddItem(cid,8865,1) end else npcHandler:say('Desculpe mais você não tem os itens!!', cid) end end function DivinePlate(cid, message, keywords, parameters, node) if(not npcHandler:isFocused(cid)) then return false end if getPlayerItemCount(cid,8891) >= 1 and getPlayerItemCount(cid,6500) >= 100 and getPlayerItemCount(cid,8889) >= 1 then if doPlayerRemoveItem(cid,8891,1) and doPlayerRemoveItem(cid,6500,100) and doPlayerRemoveItem(cid,8889,1) then npcHandler:say('Here is your item!', cid) doPlayerAddItem(cid,8885,1) end else npcHandler:say('Desculpe mais você não tem os itens!!', cid) end end function PaladinArmor(cid, message, keywords, parameters, node) if(not npcHandler:isFocused(cid)) then return false end if getPlayerItemCount(cid,2476) >= 1 and getPlayerItemCount(cid,10584) >= 30 and getPlayerItemCount(cid,7367) >= 10 then if doPlayerRemoveItem(cid,2476,1) and doPlayerRemoveItem(cid,10584,30) and doPlayerRemoveItem(cid,7367,10) then npcHandler:say('Here is your item!', cid) doPlayerAddItem(cid,8891,1) end else npcHandler:say('Desculpe mais você não tem os itens!!', cid) end end function RoyalScaleRobe(cid, message, keywords, parameters, node) if(not npcHandler:isFocused(cid)) then return false end if getPlayerItemCount(cid,8871) >= 1 and getPlayerItemCount(cid,5904) >= 100 and getPlayerItemCount(cid,2466) >= 1 then if doPlayerRemoveItem(cid,8871,1) and doPlayerRemoveItem(cid,5904,100) and doPlayerRemoveItem(cid,2466,1) then npcHandler:say('Here is your item!', cid) doPlayerAddItem(cid,12643,1) end else npcHandler:say('Desculpe mais você não tem os itens!!', cid) end end function MagicPlateArmor(cid, message, keywords, parameters, node) if(not npcHandler:isFocused(cid)) then return false end if getPlayerItemCount(cid,2472) >= 1 and getPlayerItemCount(cid,5954) >= 45 and getPlayerItemCount(cid,5904) >= 1 then if doPlayerRemoveItem(cid,2472,1) and doPlayerRemoveItem(cid,5954,45) and doPlayerRemoveItem(cid,5904,1) then npcHandler:say('Here is your item!', cid) doPlayerAddItem(cid,2472,1) end else npcHandler:say('Desculpe mais você não tem os itens!!', cid) end end function EliteDrakenHelmet(cid, message, keywords, parameters, node) if(not npcHandler:isFocused(cid)) then return false end if getPlayerItemCount(cid,2493) >= 1 and getPlayerItemCount(cid,12735) >= 50 and getPlayerItemCount(cid,6529) >= 100 then if doPlayerRemoveItem(cid,2493,1) and doPlayerRemoveItem(cid,12735,50) and doPlayerRemoveItem(cid,6529,100) then npcHandler:say('Here is your item!', cid) doPlayerAddItem(cid,12766,1) end else npcHandler:say('Desculpe mais você não tem os itens!!', cid) end end -- end -- keywordHandler:addKeyword({'items'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Eu ofereço dois tipos de troca,são item para {equipamentos} e items para {addons} .'}) keywordHandler:addKeyword({'addons'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Eu ofereço {Dragon Claw},{Soul Stone},{Yellow Rose},{Mandrake},{Nose Ring}.'}) keywordHandler:addKeyword({'equipamentos'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Eu ofereço {earthborn titan armor},{windborn colossus armor},{oceanborn leviathan armor},{fireborn giant armor},{witchhunter’s coat},{dark lord’s cape},{divine plate},{paladin armor},{royal scale robe},{magic plate armor},{elite draken helmet} '}) local node1 = keywordHandler:addKeyword({'dragon claw'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Você quer trocar 10 Behemoth Claw + 500 red dragon leather por um dragon claw ?'}) node1:addChildKeyword({'yes'}, DragonClaw, {npcHandler = npcHandler, onlyFocus = true, reset = true}) node1:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Tudo bem,volte quando tiver os itens!.', reset = true}) local node2 = keywordHandler:addKeyword({'soul stone'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Você quer trocar 40 necromantic robe por um soul stone ?'}) node2:addChildKeyword({'yes'}, SoulStone, {npcHandler = npcHandler, onlyFocus = true, reset = true}) node2:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Tudo bem,volte quando tiver os itens!.', reset = true}) local node3 = keywordHandler:addKeyword({'yellow rose'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Você quer trocar 10 Holy Orchid por uma yellow rose ?'}) node3:addChildKeyword({'yes'}, YellowRose, {npcHandler = npcHandler, onlyFocus = true, reset = true}) node3:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Tudo bem,volte quando tiver os itens!.', reset = true}) local node4 = keywordHandler:addKeyword({'mandrake'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Você quer trocar 1 Yellow Rose + 100 Boggy Dreads + 1 springout rod por um mandrake ?'}) node4:addChildKeyword({'yes'}, Mandrake, {npcHandler = npcHandler, onlyFocus = true, reset = true}) node4:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Tudo bem,volte quando tiver os itens!.', reset = true}) local node5 = keywordHandler:addKeyword({'nose ring'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Você quer trocar 500 minotaur leather + 1 broken key ring por um nose ring ?'}) node5:addChildKeyword({'yes'}, NoseRing, {npcHandler = npcHandler, onlyFocus = true, reset = true}) node5:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Tudo bem,volte quando tiver os itens!.', reset = true}) local node6 = keywordHandler:addKeyword({'earthborn titan armor'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Você quer trocar 1 Terra Mantle + 100 Demonic Essence + 1 Magic plate Armor por uma Earthborn Titan Armor ?'}) node6:addChildKeyword({'yes'}, EarthbornTitanArmor, {npcHandler = npcHandler, onlyFocus = true, reset = true}) node6:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Tudo bem,volte quando tiver os itens!.', reset = true}) local node7 = keywordHandler:addKeyword({'windborn colossus armor'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Você quer trocar 1 Lightning Robe + 100 Demonic Essence + Magic plate Armor por uma Windborn Colossus Armor ?'}) node7:addChildKeyword({'yes'}, WindbornColossusArmor, {npcHandler = npcHandler, onlyFocus = true, reset = true}) node7:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Tudo bem,volte quando tiver os itens!.', reset = true}) local node8 = keywordHandler:addKeyword({'oceanborn leviathan armor'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Você quer trocar 1 Glacier Robe + 100 Demonic Essence + 1 Magic plate Armor por uma Oceanborn Leviathan Armor ?'}) node8:addChildKeyword({'yes'}, OceanbornLeviathanArmor, {npcHandler = npcHandler, onlyFocus = true, reset = true}) node8:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Tudo bem,volte quando tiver os itens!.', reset = true}) local node9 = keywordHandler:addKeyword({'fireborn giant armor'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Você quer trocar 1 Magma coat + 100 Demonic Essence + 1 Magic plate Armor por uma Fireborn Giant Armor ?'}) node9:addChildKeyword({'yes'}, FirebornGiantArmor, {npcHandler = npcHandler, onlyFocus = true, reset = true}) node9:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Tudo bem,volte quando tiver os itens!.', reset = true}) local node10 = keywordHandler:addKeyword({'witchhunter’s coat'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Você quer trocar 1 Book of Necromantic Rituals + 12 Necromantic Robe + 1 Underworld Rod por uma Witchhunter’s Coat ?'}) node10:addChildKeyword({'yes'}, Witchhunter, {npcHandler = npcHandler, onlyFocus = true, reset = true}) node10:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Tudo bem,volte quando tiver os itens!.', reset = true}) local node11 = keywordHandler:addKeyword({'dark Lord’s cape'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Você quer trocar 1 Skullcracker Armor + 100 Demonic Essence + 1 Necromantic Robe por uma Dark Lord’s Cape ?'}) node11:addChildKeyword({'yes'}, DarkLord, {npcHandler = npcHandler, onlyFocus = true, reset = true}) node11:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Tudo bem,volte quando tiver os itens!.', reset = true}) local node12 = keywordHandler:addKeyword({'divine plate'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Você quer trocar 1 Paladin Armor + 100 Demonic Essence + 1 Skullcracker Armor por uma Divine Plate ?'}) node12:addChildKeyword({'yes'}, DivinePlate, {npcHandler = npcHandler, onlyFocus = true, reset = true}) node12:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Tudo bem,volte quando tiver os itens!.', reset = true}) local node13 = keywordHandler:addKeyword({'paladin armor'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Você quer trocar 1 Knight Armor + 30 Boggy Dreads + 10 Enchanted Spears por uma Paladin Armor ?'}) node13:addChildKeyword({'yes'}, PaladinArmor, {npcHandler = npcHandler, onlyFocus = true, reset = true}) node13:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Tudo bem,volte quando tiver os itens!.', reset = true}) local node14 = keywordHandler:addKeyword({'royal scale robe'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Você quer trocar 1 Focus cape + 100 magic sulphur + 1 Golden Armor por uma Royal Scale Robe ?'}) node14:addChildKeyword({'yes'}, RoyalScaleRobe, {npcHandler = npcHandler, onlyFocus = true, reset = true}) node14:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Tudo bem,volte quando tiver os itens!.', reset = true}) local node15 = keywordHandler:addKeyword({'magic plate armor'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Você quer trocar 1 Plate Armor + 45 Demon Horn + 1 Magic Sulphur por uma Magic Plate Armor ?'}) node15:addChildKeyword({'yes'}, MagicPlateArmor, {npcHandler = npcHandler, onlyFocus = true, reset = true}) node15:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Tudo bem,volte quando tiver os itens!.', reset = true}) local node16 = keywordHandler:addKeyword({'elite draken helmet'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Você quer trocar 1 Demon Helmet + 50 Draken Sulphur + 100 Infernal Bolt por um Elite Draken Helmet ?'}) node16:addChildKeyword({'yes'}, EliteDrakenHelmet, {npcHandler = npcHandler, onlyFocus = true, reset = true}) node16:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Tudo bem,volte quando tiver os itens!.', reset = true}) npcHandler:addModule(FocusModule:new()) flw
    1 ponto
  26. joaohd

    Material De Apoio V

    Material de Apoio Loops Antes de começarmos, o que vem a ser um loop em programação? Um loop é a repetição de um bloco de código por diversas vezes, com a finalidade de verificar uma condição, economizar linhas e alterar estados de variáveis. Em lua, temos três estruturas capazes de realizar loops, o comando while, o comando repeat e o comando for veremos agora como proceder para fazer um loop usando o while. Compreendendo o WHILE: O comando while, pode ser entendido como "enquanto" e deve vir junto a uma condição. Ou seja, ele executa e testa a condição enquanto esta não for satisfeita. Vejamos um exemplo: i = 10 while i>0 do print(i) i = i-1 end Como podemos observar no exemplo acima, temos uma variável i com o valor 10 e a estrutura while comparando i a 0, mostrando o valor de i e decrementando seu valor em 1 (subtraindo 1 do valor). Logo, neste exemplo teremos uma contagem regressiva de 10 até 0, quando a condição será obedecida e o laço terminado. Podemos ainda fazer uso do comando break para terminar o laço em algum ponto de sua execução: a = 1 while true do print(a) a = a + 1 if a > 10 then break end end Neste segundo exemplo, o while está configurado para executar infinitamente, entretanto, dentro do bloco de execução, temos uma condição if que caso a seja maior que 10, ele encerra o laço. Neste segundo exemplo, nos será mostrado os números de 1 a 10 em ordem crescente. A estrutura REPEAT: O comando repeat, é a segunda estrutura que podemos usar para fazer loops. Sempre vem acompanhado de outro comando, o until. Pode ser compreendido como "repita até que". Sua sintaxe é parecida ao do while, e também obedece a uma condição. Enquanto falsa, ele executa. Quando verdadeira, o laço é interrompido. Observem um exemplo: i = 3 repeat print(i) i = i-1 until i==0 Como vemos, no início, definimos a variável que será usada para controlar o laço e colocamos um decremento. É importante ressaltar a condição que o until impõe: caso i seja igual a 0, interrompa. O comando acima, deverá mostrar-nos os números de 3 a 0 em ordem decrescente. O comando repeat também pode ser usado junto ao break: i = 1 repeat print(i) i = i+1 if i>10 then break end until false Caso não tivessemos o if para controlar o ponto de interrupção, o comando executaria infinitamente, pois no until, não temos condição, logo será sempre falsa. O todo poderoso FOR: Este comando, apesar de sua simplicidade, é complicado de se entender completamente, hoje darei apenas uma pincelada. Haverá outro tutorial somente usando o for. O for em lua, apresenta dois usos possíveis para fazermos laços. A primeira, é a forma numérica e a segunda, chama-se sequencial. Não explicarei a diferença funcional entre elas, somente mostrarei como fazer loops usando-as. A forma numérica é bem direta: for i = 1, 3 do print(i) end A variável i não precisa ser declarada anteriormente. No caso desta estrutura, a variável assume os valores de 1 a 3 e repete o bloco com estes valores. Em sua forma sequencial, precisamos fazer uso de tabelas. Observe: for i, x in pairs({"Indice 1", "Indice 2", "Indice 3"}) do print(i, x) end No caso acima, será mostrada uma estrutura mais ou menos assim: 1 Indice 1 2 Indice 2 3 Indice 3 Bom, acho que isso é tudo. flw
    1 ponto
  27. joaohd

    Material De Apoio Iv

    Material de Apoio IV Estruturas de controle Estruturas de controle: O que são: São estruturas capazes de controlar o fluxo e o acesso dos dados e aos dados, restringindo trechos do código, protegendo-o ou simplesmente separando-o. Em Lua, temos à nossa disposição as estruturas de controle if, while, repeat e for. Falaremos hoje das estruturas formadas especificamente com o if. O comando if: O comando if, em português "se", restringe o fluxo caso a expressão atribuída a ele seja falsa, ou seja, somente executa caso seja verdade. Lembrando que qualquer resultado diferente de 0, false ou nil, torna a expressão verdadeira. Sua lógica é bem simples: if [expressão] then logo, se [expressão] então Outra coisa que deve ser observada, é que a expressão sempre resulta em um valor booleano. Caso seja outra coisa qualquer, gerará um erro no código. Cada estrutura if que é aberta, tem de ser fechada com o uso da estrutura end. Observe: if [expressão] then Comandos end logo, se [expressão] então Comandos fim Agora você vira e diz: "Ah isso é muito fácil. Já sou scripter?" e eu te respondo: "Calma lá jovem aventureiro, o buraco é mais escuro." Após ler e entender bem a estrutura acima, podemos passar à estrutura if-else. Bom, mas o que é esta estrutura? Diferente da estrutura if simples, esta estrutura separa o fluxo de dados em dois caminhos distintos. O primeiro, é executado quando a expressão proposta é verdadeira, e o segundo só é executado quando a expressão não é verdadeira, ou seja, falsa. Podemos entendê-la em português como "se-senão". Como esta estrutura contém o if, ela deve também ser finalizada com o uso do end. Observe abaixo uma analogia: if [expressão] then Comandos verdadeiros else Comandos falsos end logo, se [expressão] então Comandos verdadeiros senão Comandos falsos fim Nesta estrutura citada acima, os "Comandos verdadeiros" serão executados quando a expressão for verdadeira e os "Comandos falsos", serão executados quando a expressão for falsa. "Que moleza hein!?" Ainda está bem fácil. Vamos esquentar um pouco mais. Agora vamos partir para a estrutura if-elseif, análoga a "se-mas se". A estrutura formada com if-elseif é largamente utilizada por termos a possibilidade de fazermos várias expressões ao mesmo tempo, cada uma tendo como um retorno um comando específico. Veja sua sintaxe: if [expressão] then Comandos elseif [expressão 2] then Comandos 2 elseif [expressão 3] then Comandos 3 end logo, se [expressão] então Comandos mas se [expressão 2] então Comandos 2 mas se [expressão 3] então Comandos 3 fim Como podemos perceber, eu fiz múltiplas suposições para que o meu código testasse e, caso alguma seja satisfeita, os comandos a ela relacionados, serão executados.A próxima e penúltima estrutura, é a estrutura if-elseif-else, traduzindo seria "se-mas se-senão". A estrutura if-elseif-else, apesar do nome, é bem fácil de ser compreendida. Na estrutura anterior, caso nenhuma das expressões resultasse em verdadeiro, nada seria executado. E essa é a diferença. Nesta nova estrutura, caso nenhuma expressão seja atendida, podemos ainda executar alguma coisa. Observe: if [expressão] then Comandos elseif [expressão 2] then Comandos 2 else Comandos falsos end logo, se [expressão] então Comandos mas se [expressão 2] então Comandos 2 senão Comandos falsos fim Nossa mas que tutorial gigante! Mas ainda não acabou! A última estrutura que veremos hoje é a que chamamos de aninhamento de if. É uma estrutura bem simples e sua função é a mesma que uma peneira. Ela vai refinando os dados e restringindo-os. Observe abaixo um exemplo: if [expressão] then if [expressão 2] then if [expressão 3] then Comandos end end end fazendo uma analogia ao português: se [expressão] então se [expressão 2] então se [expressão 3] então Comandos fim fim fim Fazendo uma análise mais criteriosa da estrutura, podemos ver que os comandos somente serão executados caso todas as expressões sejam verdadeiras. Todas as estruturas anteriores a esta, podem ser mescladas nesta última. Mas lembre-se de sempre obedecer as regras de finalização (end). Acho que é só. flw
    1 ponto
  28. J04ZAN Se tu baixar um server de Pokemon funcionando tudo de um outro site e tu disponibilizar aqui... quem vai está fazendo o "trabalho" de disponibilizar para o pessoal ?
    1 ponto
  29. joaohd

    Material De Apoio Iii

    Material De Apoio Variáveis O que é uma variável? Uma variável é um objeto (uma posição, freqüentemente localizada na memória) capaz de reter e representar um valor ou expressão. Enquanto as variáveis só "existem" em tempo de execução, elas são associadas a "nomes", chamados identificadores, durante o tempo de desenvolvimento. Em Lua, as variáveis podem ser locais ou globais, dependendo da necessidade que temos na hora de construir nosso script. Veremos agora a diferença entre elas e quando usar cada uma. Variáveis Globais: São variáveis que podem ser acessadas e modificadas por todo o script a qualquer momento da execução. É a mais indicada quando iremos usá-la várias vezes, necessitando de alterá-la. Para que possamos definir uma variável global, ela tem de estar fora de qualquer bloco de código e seguindo as regras para definição de variáveis: 1º: Não pode ser precedida por números, mas pode contê-los; 2º: O único caracter alfanumérico que pode ser usado é o subtraço (underline). Abaixo você pode verificar a existência de uma variável global: minhaVariavel = "Essa é uma variável global" Variáveis Locais: São variáveis reservadas a trechos do script ou apenas ao script que a contém. Caso esteja dentro de um bloco de script, esta não pode ser acessada ou alterada fora deste bloco. O uso é recomendado quando temos que restringir a alteração dela em apenas um bloco de código. Para defini-la, usamos o modificador "local" antes do identificador desta variável, seguindo sempre as regras para definições de variáveis. Observe: local minhaVariavel = "Essa é uma variável local." Abaixo você pode ver melhor uma interação entre as variáveis globais e locais: userName = "apocarai" if userName == "apocarai" then local userArea = "scripting" if userArea == "scripting" then print(userName .. userArea) else print(userName .. "outras areas") end end print(userName .. userArea) Caso alguém execute, verá que teremos um erro na última linha, onde a variável "userArea" é desconhecida. Porém, se observarmos o script, veremos que a variável global "userName" será exibida mesmo fora ou dentro do script. Essa é a diferença entre as variáveis globais e locais. Referência: Manual de Referência Lua 5.1 Por hoje é só. flw
    1 ponto
  30. joaohd

    Material De Apoio Ii

    Material de Apoio II Valores & Tipos Valores e tipos: Lua é uma linguagem dinamicamente tipada, ou seja, variáveis não possuem tipos. Não existe definição de tipos na linguagem. Todos os valores carregam seu próprio tipo. Observe abaixo a diferença entre um trecho de código em C e outro em Lua: int a = 1; float b = 1.25; char c[8] = "apocarai"; a = 1 b = 1.25 c = "apocarai" Todos os valores em Lua são valores de primeira classe. Isto significa que todos os valores podem ser armazenados em variáveis, passados como argumentos para outras funções e retornados como resultados. Existem oito tipos básicos em Lua: nil boolean number string function userdata thread table Cada tipo básico possui uma característica que o diferencia dos outros e também no modo de tratamento do valor. Abaixo você encontra uma detalhação dos tipos mais usados: nil: Nil é o tipo do valor nil, cuja propriedade principal é ser diferente de qualquer outro valor. Podemos entendê-lo também como uma ausência de valor útil. Não tem tratamento para este tipo. boolean: Boolean é o tipo dos valores true e false. Este nome se deve ao matemático George Boole, que elaborou a álgebra booleana, uma espécie de matemática que envolve somente os valores true e false e que só tem como resultado true ou false. number: Representa o tipo numérico e é tratado utilizando-se os operadores matemáticos e a biblioteca math. string: O tipo string representa cadeias de caracteres, ou seja, palavras, textos, letras e até mesmo números. É tratada utilizando-se a biblioteca string. table: O tipo table implementa matrizes associativas, isto é, matrizes que podem conter não apenas números, mas qualquer valor, excetuando-se nil. São o único mecanismo de estruturação de dados em Lua. Coerção: Diferentemente de outras linguagens, em Lua, há uma conversão automática entre valores do tipo string e do tipo number. Isto significa que qualquer operação matemática aplicada a uma string, tenta transformar o valor da string em número. O mesmo ocorre ao inverso, quando se usa um número para tentar representar uma cadeia de caracteres, este valor é automaticamente convertido em um valor do tipo string. Dito isto, podemos elaborar um resumo: 1º: Em Lua, variáveis não possuem tipos - somente valores possuem tipos; 2º: Existem oito tipos básicos em Lua; 3º: Lua é uma linguagem de tipagem dinâmica; 4º: Lua faz conversão entre os tipos string e number. Referências: Manual De Referência de Lua 5.1 Por hoje é só. flw
    1 ponto
Líderes está configurado para São Paulo/GMT-03:00
×
×
  • Criar Novo...