Histórico de Curtidas
-
zLockey9 recebeu reputação de Faisca em [Narutibia] Jinchuuriki System - Distro 0.4No meu server esta dando o seguinte erro ( na foto acima ).
nessa parte do Script ,
return doAddCondition(cid, buff_bijuu) Se puder me ajudar Agradeço muito REP++
-
zLockey9 recebeu reputação de Gabrielx17 em (Resolvido)Spell IzanamiO Izanami do meu server está assim:
Creio que as posições no topo seja onde não será possível usar a spell
-
zLockey9 deu reputação a r0bert0lol em [8.60][OLD Client] Narutibia (NTO HARD) - Servidor CompletoOlá galera do TK !
Venho por meio deste tópico, publicar a ultima versão do meu servidor derivado de Tibia NTO Hard juntamente com todos os arquivos necessários para edições.
Confesso que não foi fácil tomar essa decisão, afinal de contas foram mais de 5 anos nessa vida de administrador de otserver e esses arquivos são de muita valia, tenho certeza de que muito do que conquistei e me tornei, é resultante dos servidores que pude administrar. Costumo dizer que não sou programador e que estou mais para um gerente de scripts, todos os meus servidores foram criados com base em arquivos disponibilizados em comunidades como esta, sendo assim, pensei comigo, seria interessante eu disponibilizar e de certa forma contribuir, acredito que esses arquivos ainda podem ser útil para muitos.
O que tem de diferente no NTO Hard ?
Foi feito com muito carinho ! Rs. Eu poderia fazer uma lista (BÍBLIA) do que tem no servidor porém estou sem tempo mas tenho certeza que esse é o servidor NTO mais completo, atual e disponível para ser baixado em qualquer comunidade de otserver.
Veja algumas Imagens !
O que tem nesse Pacote Full de Arquivos NTO Hard ?
Datapack mais recente e completa do servidor. Site Gesior com template própria + AntiDDOS. Client Descompilado + Estendido + DLL Manabar com ajuste na altura da Barra de Vida/Chakra + DLL Proteção para extensão.cab Source OTX compatível com o servidor CabCreator Item Editor que funciona com o item.otb do server Object Builder 0.4.1 Remeres Map Editor Estendido para funcionar com o client do server Pic Editor IP Changer
DOWNLOAD & SCAN
dbresetada.sql
-
zLockey9 deu reputação a Dwarfer em (Resolvido)como por numeros quebrados na stage?@guhcast Não fique com dúvidas, pergunte mesmo. Podem ter outras pessoas com a mesma dúvida que a sua.
<stage minlevel="1" maxlevel="7" multiplier="12" /> <stage minlevel="8" maxlevel="50" multiplier="10" /> <stage minlevel="51" maxlevel="80" multiplier="8" /> <stage minlevel="81" maxlevel="100" multiplier="6" /> <stage minlevel="101" maxlevel="140" multiplier="1.5" /> <stage minlevel="141" maxlevel="200" multiplier="0.5" /> <stage minlevel="201" multiplier="0.05" /> Exemplifiquei os três últimos.
-
zLockey9 deu reputação a GamerGoiano em (Resolvido)[OTC] Tela buga ao entrar em teleporte@zLockey9 Voce aumentou o tamanho da tela? se aumentou tamanho da tela tem que aumentar o network message max size no const.h da source
Também voce pode verificar no modulo game_things no things.lua, debaixo da function load abaixo de local version = g_game.getClientVersion()
Ve se tem:
g_game.enableFeature(GameMagicEffectU16)
g_game.enableFeature(GameDiagonalAnimatedText)
Se não tiver os 2 enable feature, adiciona la e me fala se resolveu
-
zLockey9 deu reputação a Jeanfersonsp em (Resolvido)bug no look e showvocDesativa o do Frag e o Jin look e dps apaga tudo do Showvoc e poe isso
-
zLockey9 deu reputação a Celulose em (Resolvido)[TFS-8.6] Erro no MysqlSET GLOBAL max_allowed_packet = 16776192;
@zLockey9
ALTER TABLE `accounts` ADD `creation` INT NOT NULL DEFAULT 0 AFTER `email`;
-
zLockey9 deu reputação a Celulose em (Resolvido)[TFS-8.6] Erro no MysqlMysql>
ALTER TABLE `killers` ADD `war` INT(11) NOT NULL DEFAULT 0; -
zLockey9 deu reputação a Azzus22 em [[ Sistema de PET TFS 0.4 ]]Fala galera do TK tudo belezura? Espero que sim com todo mundo...
Peço caridosamente a moderação que me mova para a área correta caso eu tenha feito o post no lugar errado. ??
Bom o que eu vim trazer na faixa para vocês é um sistema onde o jogador vai poder ter um PET que vai subindo até certo level e com isso vai ganhando mais força.
Eu me baseei no sistema desse amiguinho aqui:
@PsyMcKenzie
Link para o Post do amiguinho. Onde eu vi que tava muito legal mas estavam faltando algumas verificações.
Demorei para fazer esses scripts e toda a lógica mexendo apenas 2 horas por dia, por isso vou dar um alert:
<<<< -------------------- >>>>
"PAM: não me peça para mudar scripts ou adaptar de algum jeito pois eu não vou ter muito tempo para atender pedidos. Vou postar do jeito que está funcionando e se por acaso precisar de ajuste, peço para que outros scripters dêem a devida atenção. Obrigado pela compreensão amiguinhos ?"
<<<< -------------------- >>>>
Vamos lá, saiba que você vai ter que alterar várias partes de vários fontes, então deixa de preguiça e coloque a mão na massa...
Espero que esse script incentive a continuação e aperfeiçõamento de mais desenvolvedores a trabalhar com a nossa comunidade.
Na sua pasta de Movements Ex.: "Pasta do Ot Sever\data\movements" no arquivo movements.xml acrescente essas 2 tags:
Na pasta scripts dentro da pasta Movements Ex.: "Pasta do Ot Server\data\movements\scripts" crie um arquivo com nome equippet.lua e cole isso dentro do arquivo
Na pasta Actions Ex.: "Pasta do Ot Server\data\actions" no arquivo actions.xml cole a TAG:
Na pasta Scripts em Actions Ex.: "Pasta do Ot Server\data\actions\scripts" crie um arquivo chamado catchpet.lua e cole isso dentro:
Na pasta creaturescripts Ex.: "Pasta do Ot Server\data\creaturescripts" no arquivo creaturescripts.xml cole a TAG:
No arquivo dentro da pasta Scripts em CreatureScripts Ex.: "Pasta do Ot Server\data\creaturescripts\scripts" com o arquivo login.lua aberto, procure por "registerCreatureEvent" e adicione abaixo de qualquer um, a seguinte linha de comando:
Se o seu Ot server tiver o arquivo save.lua dentro da pasta de creaturescripts Ex.: "Pasta do Ot Server\creaturescripts\scripts\save.lua" você precisa adaptar o script abaixo para se adequar ao seu save.lua. caso seu ot server não tenha o arquivo save.lua apenas insira o script abaixo:
Na pasta Monster Ex.: "Pasta do Ot Server\data\monster" no arquivo monster.xml você vai precisar inserir as tags dos pets que for adicionando, por exemplo no meu caso eu criei 5 níveis de pet e você vai entender porque na explicação mais a frente.
Na pasta Scripts em Monster Ex.: "Pasta do Ot Server\data\monster\scripts" crie uma pasta chamada Pet e dentro dela o monstro deve ter o mesmo nome que está no arquivo "catchpet.lua" que criamos no começo do processo. Por exemplo no arquivo catchpet.lua que criamos o pet do Dragon Lord está definido como ["Dragon Lord Pet"] = {hp = 500, maxhp = 500, corpse = 7622, chance = 100, level = 0, experience = 0, basename = 'Dragon Lord Pet'} então o monstro deve ser Dragon Lord Pet seguido dos níveis: 0, 1, 2, 3, 4, 5, 6.
Por exemplo dentro da pasta "Pasta do Ot Server\data\monster\scripts\Pet" tem que ter os monstros DragonLord Pet0.xml, DragonLord Pet1.xml, DragonLord Pet2.xml, DragonLord Pet3.xml
----------------------------------
Na pasta lib Ex.: "Pasta do Ot Server\data\lib" acrescente no fim do arquivo 050-function.lua o script abaixo:
Obs.: Esse script foi feito pelo amiguinho @Orochi Elf e ficou espetacular, parabéns cara... eu só precisei remover o local da variável item pq quando o script verificava itens na BP e nos Slots estava fechando o servidor. Mas o crédito é todo dele, ótimo desenvolvedor sem dúvida.
Na pasta npc Ex.: "Pasta do Ot Server\data\npc" crie um arquivo com nome PetHealer.xml e acrescente o código abaixo:
Na pasta Scripts de npc Ex.: "Pasta do Ot Server\data\npc\scripts" crie um arquivo com nome pethealer.lua e acrescente o código abaixo:
Obs.: Esse script do TalkAlot não fui eu quem desenvolveu, foi alguém aqui do fórum mas tem muito tempo que eu peguei e uso e não lembro a quem devo os créditos, foi mal ai...
Execute essa query no seu banco de dados:
E agora finalmente a explicação do código:
Bom primeiramente o sistema inicial estava utilizando actions e não movements, mas eu resolvi colocar como movements para evitar um pouco de transtorno na lógica apesar de não ter evitado muito...
Bem, o sistema consiste em utilizar um item no corpse de um monstro morto para capturá-lo essa é a função do script: catchpet.lua
as definições de monstros que podem ser capturados estão no objeto
local mtrs = {
["Rat Pet"] = {hp = 500, maxhp = 1000, corpse = 2813, chance = 100, level = 0, experience = 0, basename = 'Rat Pet'},
["Dragon Lord Pet"] = {hp = 500, maxhp = 500, corpse = 7622, chance = 100, level = 0, experience = 0, basename = 'Dragon Lord Pet'}
}
Como podem ver o nome entre colchetes e o basename são iguais e tem que ser assim para não dar nenhum erro... o base name tem que ser o mesmo nome do monstro criado na pasta monster\Pet... na pasta como falei antes, o basename tem que ser acompanhado dos níveis no caso do Rat por exemplo, seria Rat Pet0.xml, Rat Pet1.xml, Rat Pet2.xml, até o nível que você determinar, esse sistema do jeito que está, habilita os pets até o nível 10.
Os pets são como summons, então coisas relacionadas a ATK, DEF, Magias que os pets tem, tem que ser configuradas no arquivo do monstro. Por exemplo se eu quiser que um Rat nível 2 use UE, vou configurar isso no XML Rat Pet2.xml
- hp e maxhp, são as configurações para o hp máximo e hp atual,
- chance é a chance em % que o player tem de capturar o monstro,
- corpse é o id do corpo que o player pode usar o item para capturar o monstro.
na linha de comando "local itemcatch = doPlayerAddItem(cid, 9980, 1, false, 1, 3) -- Cristal que contem o monstro." o id 9980 é o item que vai armazenar as informações do pet e isso você pode mudar sem a necessidade de mexer no items.xml.
Obs.: Lembrando que se esse id for alterado, você precisa verificar nos fontes onde mais ele faz referência para esse id, por exemplo no save.lua na pasta data\creaturescripts\scripts
Obs2.: não use itens stackáveis pois eles perdem a informação do pet quando você os movimenta, pelo menos nessa source que eu estou usando.
O itemid definido na tag actions.xml é o item que vai ser usado na captura do monstro.
No fonte do equippet.lua as informações cruciais são:
Toda vez que que o pet é equipado com sucesso, uma linha é gravada na database com o xp do player atualmente, e quando desequipado com sucesso, essa linha é removida, e a diferença de exp adiquirida é acrescentada no Pet.
Você pode alterar as condições de level do Pet dentro do método updateAttributes.
O arquivo save.lua só foi alterado para avaliar algumas condições antes do player deslogar caso ele esteja com o pet.
Para usar o pet, vc precisa estar com o item do pet capturado e colocar no slot da flecha, se as condições estiverem certas ele sumona o pet. Se o item for removido do slot e tiver com as condições corretas, ele remove o summon.
O sistema não tem muitos efeitos especiais pois acredito que isso é uma coisa particular de cada Host.
Se por acaso o pet for morto, o PetHealer pode trazê-lo de volta por uma quantia de 300k mas isso pode ser alterado no script é bem simples. Além disso o NPC PetHealer tem uma micro IA que explica como utilizar o Pet.
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Bom, espero que vocês gostem do sistema, testem e me avaliem nos comentários se tiverem algum problema e se for útil para você, da um REP++ ai ?
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
-
zLockey9 deu reputação a Beeny em Extraindo sprite (pokepro, otpoke, etc)eae, se n me engano esse rolê não funciona no gla/pxg. mas, tem outros jeitos de pegar lá tb
links:
ninjaripper - https://gamebanana.com/tools/download/5638
dds converter - http://www.softsea.com/download/DDS-Converter.html
scan:
ninja ripper - https://www.virustotal.com/gui/file/60541e6a43661f0ee2e70c0a7cedb86d44a874e5376949db7a2e1f604fa5cdf1/detection
dds - https://www.virustotal.com/gui/file/611d6bbb534b8a3210b2ca1e7954d6abc3055c6f2995833fbb04b6093f418263/detection
-
zLockey9 deu reputação a Patrick Jean em Removendo Account SaltNome do Script: Removendo Account Salt
Autor: Henke Rula
Servidor Testado: OTX Server 9.8x e outras versões também serve
Descrição: Mesmo tendo a opção no config.lua, não é retirado o salt do banco de dados.
Então modifiquei nas sources forçando não criar o Salt na tabela.
Requisitos: Sources do Servidor
Abrir "iologindata.cpp" e procure por :
query << "SELECT `name`, `password`, `salt`, `premdays`, `lastday`, `key`, `warnings` FROM `accounts` WHERE `id` = " << accountId << " LIMIT 1"; E Troque por:
query << "SELECT `name`, `password`, `premdays`, `lastday`, `key`, `warnings` FROM `accounts` WHERE `id` = " << accountId << " LIMIT 1"; Logo abaixo verá essa opção que você deve remover:
account.salt = result->getDataString("salt"); Procure por :
query << "SELECT `id`, `password`, `salt`, `premdays`, `lastday`, `key`, `warnings` FROM `accounts` WHERE `name` " << db->getStringComparer() << db->escapeString(name) << " LIMIT 1"; E troque por:
query << "SELECT `id`, `password`, `premdays`, `lastday`, `key`, `warnings` FROM `accounts` WHERE `name` " << db->getStringComparer() << db->escapeString(name) << " LIMIT 1"; Logo abaixo verá essa opção que você deve remover:
account.salt = result->getDataString("salt"); Como podem verificar, eu removi o salt da consulta sql e removi a função também.
O começo da consulta pode variar entre query e dbquery dependendo da sua distro.
Procure por:
password = salt + password; E troque por:
password = password; E logo abaixo procure por:
query << "INSERT INTO `accounts` (`id`, `name`, `password`, `salt`) VALUES (NULL, " << db->escapeString(name) << ", " << db->escapeString(password) << ", " << db->escapeString(salt) << ")"; E troque por:
query << "INSERT INTO `accounts` (`id`, `name`, `password`) VALUES (NULL, " << db->escapeString(name) << ", " << db->escapeString(password) << ")"; A modificação é muito simples e 100% funcional e livre de bugs. (Testei e funcionou)
Vale lembrar que essa modificação é muito útil para aqueles que querem ter seu servidor criando contas in-game ou por site.
Estou aberto a sugestões e críticas construtivas.
-
zLockey9 deu reputação a Cat em Tibia 8.60 v2 Map Editor Release (Corrige erro: Could not locate Tibia.dat and/or Tibia.spr, please navigate to your Tibia 8.60 installation folder)Em alguns casos, o tibia 8.60 comum não abre de jeito nenhum no map editor, mesmo desmarcando check file signatures e configurando o path corretamente.
Este é o client 8.60 adaptado para o Remere's Map Editor. Resolvi postar já que ele foi removido do site oficial do RME. (ficou apenas a versão para linux lá)
Se estiver tendo problemas para abrir a versão 8.60, tente utilizar este.
Baixar o Tibia Client 8.60 que funciona no Remere’s Map Editor
Essa versão do Tibia 8.60 client resolve o erro unsupported client version ou Could not locate tibia.dat and/or tibia.spr, please navigate to your tibia 8.60 installation folder.
Downloads
https://tibiaking.com/applications/core/interface/file/attachment.php?id=47333
Scan: https://www.virustotal.com/gui/file/333e172ac49ba2028db9eb5889994509e7d2de28ebccfa428c04e86defbe15cc
-
zLockey9 deu reputação a LeoTK em Códigos const.h,tools.cpp,000-constant prontos do 0 ao 700Versão 8.54
version 0.3.6 (Crying Damson)
Ae galera estou compartilhando com vocês o código para quem for aumentar o limite de magic effects no servidor é trabalhoso então para ajudar a galera a não ficar horas fazendo resolvi trazer os códigos prontos xD
Tópico atualizado 04/08/2018 as 23:57
# Atualização
Códigos atualizados do 427 para o 700
const.h
Tools.cpp
000-constant.lua
Espero que ajude alguém xD
-
zLockey9 deu reputação a Makhai Drakon em [TUTORIAL] Como adicionar pokemons com {Icon System}.Resolvi fazer este tutorial porque os que que encontrei estavam muito confusos e não entendi certas coisas.
Programas utilizados:
ObjectBuilder: http://www.4shared.com/rar/XsT3Kkgsba/ObjectBuilder034.html
ItemEditor: http://www.4shared.com/file/232461654/31f90261/otitemeditor037.html
[TUTORIAL] Como adicionar pokemons com {Icon System}.
1- Abra o seu ObjectBuilder.
2- Aperte Ctrl+O ou Clique em "File"/"Open".
3- Clique em Browse.
4- E abra a pasta onde fica seu tibia.spr e o tibia.dat.
5- Caso for estendido marque a caixa.
6- Após isto procure as outfit, corpse, ícone e portrait do pokemon desejado.
obs: aconselho escrever os números em um bloco de notas
7- Após isto abra o ItemEditor .
8- Aperte Ctr+P ou Clique em "File"/"Preferences".
9- Clique em Browse.
10- E abra a pasta onde fica seu tibia.spr e o tibia.dat.
11- Caso for estendido marque a caixa e confirme.
12- Aperte Ctr+N ou Clique em "File"/"Open...".
13- E abra a pasta onde fica seu item.otb.
14- Crie 5 itens.
15- Em Cliete ID coloque os IDs do portrait, corpse, 1 ícone on e 2 ícones off que você pegou no ObjectBuilder.
16- Deixe os atributos exatamente assim.
Portrait
Corpse
Icone On
Icone Use
Icone Off
obs: a partir daqui usara estes IDs
obs: aconselho escrever os números em um bloco de notas
17- Por fim de save.
.
18- Agora vá em Data/Items e abra items.xml.
Em algum local adicione isto!
<item id="AAAAA" article="a" name="Icone."> <attribute value="1" key="ispokeball"/> <attribute key="weight" value="100" /> <attribute key="slotType" value="feet" /> </item> <item id="BBBBB" article="a" name="Icone using"> <attribute value="1" key="ispokeball"/> <attribute key="weight" value="100" /> <attribute key="slotType" value="feet" /> </item> <item id="CCCCC" article="a" name="Icone dead"> <attribute value="1" key="ispokeball"/> <attribute key="weight" value="100" /> <attribute key="slotType" value="feet" /> </item> <item id="DDDDD" article="a" name="EEEEE"> <attribute key="containerSize" value="10" /> <attribute key="decayTo" value="0" /> <attribute key="duration" value="300" /> </item> <item id="FFFFF" article="a" name="portrait"> <attribute key="weight" value="0" /> <attribute key="slotType" value="legs" /> </item> Em "AAAAA" coloque o ID do ícone on
Em "BBBBB" coloque o ID do ícone use
Em "CCCCC" coloque o ID do ícone off
Em "DDDDD" coloque o ID do corpse
Em "EEEEE" coloque fainted "nome do poke"
Em "FFFFF" coloque o ID do portrait
Salve e feche
19- Agora vá em Data/Monster/Pokes
Copie alguma .xml e modifique o seu nome para o do pokemon desejado depois abra-a
<?xml version="1.0" encoding="UTF-8"?> <monster name="AAAAA" nameDescription="a BBBBB" race="CCCCC" experience="1500" speed="207" manacost="0"> <health now="270" max="270"/> <look type="DDDDD" head="90" body="100" legs="95" feet="113" corpse="EEEEE"/> <targetchange interval="2000" chance="0"/> <strategy attack="100" defense="0"/> <flags> <flag summonable="1"/> <flag attackable="1"/> <flag hostile="1"/> <flag illusionable="1"/> <flag convinceable="1"/> <flag pushable="1"/> <flag canpushitems="0"/> <flag canpushcreatures="0"/> <flag targetdistance="1"/> <flag staticattack="97"/> <flag runonhealth="0"/> </flags> <attacks> <attack name="melee" interval="2000" chance="100" range="1" min="-50" max="-100"/> <attack name="Aqua Tail" interval="2805" chance="29" range="1"/> <attack name="Headbutt" interval="2705" chance="29" range="1"/> <attack name="Dragon Breath" interval="3040" chance="28" range="6"/> <attack name="Hyper Beam" interval="2899" chance="29" range="5"/> <attack name="Thunder Wave" interval="2993" chance="28" range="6"/> <attack name="Twister" interval="2852" chance="29" range="3"/> <attack name="Wing Attack" interval="3040" chance="28" range="6"/> <attack name="Thunder Punch" interval="2752" chance="29" range="1"/> <attack name="Fire Punch" interval="2952" chance="29" range="1"/> <attack name="Dragon Claw" interval="2900" chance="29" range="1"/> </attacks> <defenses armor="0" defense="0"> </defenses> <voices interval="5000" chance="10"> <voice sentence="FFFFF!"/> </voices> <loot> <item id="11449" chance="150" count="1" countmax="1"/> <item id="12159" chance="3000" count="1" countmax="1"/> <item id="13794" chance="10000" countmax="80"/> --snowball <item id="12275" chance="3000" count="1" countmax="1"/> <item id="12244" chance="70" count="1" countmax="1"/> <item id="12338" chance="10" count="1"/> --bag box --bag box </loot> <script> <event name="Spawn"/> </script> </monster> Em "AAAAA" coloque o nome do pokemon
Em "BBBBB" coloque o ID da outfit do pokemon
Em "CCCCC" coloque o a raça do pokemon
Em "DDDDD" coloque o ID da outfit do pokemon obs: no meu caso e 2241
Em "EEEEE" coloque o ID corpse obs: no meu caso e 20758
Em "FFFFF" coloque a fala do pokemon
Lista de raças:
fighting, normal, water, ground, rock, dark, psychic, flying, electric, poison, fire, ice, grass, dragon, bug, steel, ghost Attacks Lembrando esses são os ataques que os pokemons selvagens soltara! E possível ver os attacks em data/spells/scripts/ps name = "Nome do attack" interval = "Intervalo para usar o attack" chance = Chance do attack ser acertado" obs: sempre deixe o melee 100 range = "Distancia mínima necessária para usar o attack"
Loot
item id = "ID do item que será dropado"
chance = "Chance do item ser dropado"
count = "Mínimo de itens a ser dropado"
countmax = "Máximo de itens a ser dropado"
salve e feche
20- Agora vá em Data/Monster e abra monster.xml
Adicione esta tag
1 - caso esteja em uma pasta
<monster name="AAAAA" file="pokes/BBBBB/CCCCC.xml"/> 2 - caso apenas esteja na pasta pokes
<monster name="AAAAA" file="pokes/CCCCC.xml"/> Em "AAAAA" coloque o nome do pokemon
Em "BBBBB" coloque o nome da pasta onde ele esta
Em "CCCCC" coloque o nome da .xml que você criou
salve e feche
21- Agora vá em Data/Lib e abra configuration.lua
1ª
desça um pouco e se ver algo deste género
Vá ate o ultimo e cole este código.
["AAAAA"] = {move1 = {name = "Aqua Tail", level = 10, cd = 12, dist = 1, target = 1, f = 50, t = "water"}, move2 = {name = "Thunder Wave", level = 12, cd = 16, dist = 1, target = 0, f = 70, t = "electric"}, move3 = {name = "Thunder Punch", level = 16, cd = 16, dist = 1, target = 1, f = 65, t = "electric"}, move4 = {name = "Fire Punch", level = 15, cd = 20, dist = 1, target = 1, f = 75, t = "electric"}, move5 = {name = "Dragon Claw", level = 22, cd = 16, dist = 1, target = 1, f = 60, t = "dragon"}, move6 = {name = "Dragon Breath", level = 40, cd = 20, dist = 1, target = 0, f = 80, t = "dragon"}, move7 = {name = "Twister", level = 46, cd = 24, dist = 1, target = 0, f = 80, t = "dragon"}, move8 = {name = "Wing Attack", level = 70, cd = 28, dist = 1, target = 0, f = 75, t = "flying"}, move9 = {name = "Hyper Beam", level = 70, cd = 24, dist = 1, target = 0, f = 190, t = "normal"}, move10 = {name = "Draco Meteor", level = 110, cd = 60, dist = 1, target = 0, f = 150, t = "dragon"}, }, Em "AAAAA" coloque o nome do pokemon
Moves
name = "Nome do attack"
level = "Level mínimo para usar o attack"
cd = "tempo para o attack recarregar"
dist = "distancia mínima para usar o attack"
target = "1 significa que precisa se alvo / 0 que não e necessário"
f = "força do attack"
t = "tipo do attack"
Lista de tipos
fighting, normal, water, ground, rock, dark, psychic, flying, electric, poison, fire, ice, grass, dragon, bug, steel, ghost
2ª
Desça mais um pouco encontrara o fly
caso seu pokemon tenha pegue o id da outfit do fly e subtraia 351 EX: 2242-351=1891
Vá ate o ultimo e cole este código.
["AAAAA"] = {BBBBB, CCCCC}, Em "AAAAA" coloque o nome do pokemon
Em "BBBBB" coloque o ID do fly subtraído por 351 EX: 2242-351=1891
Em "CCCCC" coloque a velocidade que dará
obs: Surf e ride mesma coisa
3ª
Desça mais um pouco encontrara o pokeballs
Vá ate o ultimo e cole este código.
["AAAAA"] = {effect = 188, on = BBBBB, use = CCCCC, off = DDDDD, all = {BBBBB, CCCCC, DDDDD}}, Em "AAAAA" coloque o nome do pokemon
Em "BBBBB" coloque o ID do icon on
Em "CCCCC" coloque o ID do icon use
Em "DDDDD" coloque o ID do icon off
4ª
Desça mais um pouco encontrara o icons
Vá ate o ultimo e cole este código.
["AAAAA"] = { on = BBBBB, off = CCCCC, use = DDDDD }, Em "AAAAA" coloque o nome do pokemon
Em "BBBBB" coloque o ID do icon on
Em "CCCCC" coloque o ID do icon off
Em "DDDDD" coloque o ID do icon use
5ª
Desça mais um pouco encontrara o effectiveness mais não mecha nele
Desça mais um pouco encontrara o pokes
Vá ate o ultimo e cole este código.
["AAAAA"] = {offense = 4.5, defense = 10, specialattack = 12.2, vitality = 11.8, agility = 350, exp = 800, level = 80, wildLvl = 150, type = "ice", type2 = "ghost"}, Em "AAAAA" coloque o nome do pokemon
offense = "offense que ganha por level"
defense = "defense por level"
specialattack = "special attack que ganha por level"
vitality = "vida que o poke ganha pra cada vitality que tem"
agility = "velocidade base dos pokes"
exp = "experiência que dá a cada level que tem (somada a exp base, no xml do poke)"
level = "level min pra usar o poke / offense base"
wildlevel = "level que o pokemon selvagem será"
type = "tipo do pokemon"
type2 = "segundo tipo do pokemon" obs caso não tenha coloque no type"
Lista de tipos
fighting, normal, water, ground, rock, dark, psychic, flying, electric, poison, fire, ice, grass, dragon, bug, steel, ghost
6ª
Desça mais um pouco encontrara o fotos
Vá ate o ultimo e cole este código.
["AAAAA"] = BBBBB, Em "AAAAA" coloque o nome do pokemon
Em "BBBBB" coloque o ID do portrait
7ª
Desça mais um pouco encontrara o pokecatches
Vá ate o ultimo e cole este código.
["AAAAA"] = {chance = BBBBB, corpse = CCCCC}, Em "AAAAA" coloque o nome do pokemon
Em "BBBBB" coloque a chance de capturar o pokemon obs quanto maior o numero mais difícil fica
Em "CCCCC" coloque o ID corpse
8ª
Desça mais um pouco encontrara o newpokedex
Vá ate o ultimo e cole este código.
["AAAAA"] = {gender = 500, level = 80, storage = 100, stoCatch = BBBBB}, Em "AAAAA" coloque o nome do pokemon
Em "BBBBB" coloque 1 e um numero depois do pokemon anterior Ex o anterior é 666456 então coloque 666457
gender = "género género do pokemon 500 = 50% de ser m ou f, 75 = 75% de ser f 25 = 25% de ser f, -1 = sem sexo " obs se o server não tiver gender system não faz diferença
level = "level min pra usar o poke " obs apenas afetará o pokedex
storage = "Não mexa!"
stoCatch = "coloque um numero depois do pokemon anterior Ex o anterior é 666456 então coloque 666457"
9ª
Desça mais um pouco encontrara o oldpokedex
Vá ate o ultimo e cole este código.
{"AAAAA", BBBBB, CCCCC}, Em "AAAAA" coloque o nome do pokemon
Em "BBBBB" coloque o level min pra usar o poke
Em "CCCCC" coloque o coloque um numero depois do pokemon anterior Ex o anterior é 1290 então coloque 1291
10ª
Desça mais um pouco encontrara o poevo
Caso o pokemon que será adicionado tenha uma anti evolução
Vá ate o ultimo e cole este código.
["AAAAA"] = {level = 150, evolution = "BBBBB", count = 1, stoneid = CCCCC, stoneid2 = DDDDD}, Em "AAAAA" coloque o nome da anti evolução pokemon
Em "BBBBB" coloque o nome da evolução do pokemon
Em "CCCCC" coloque o ID da stone que ira evoluir o pokemon
Em "DDDDD" coloque o ID do segundo tipo stone que ira evoluir o pokemon obs opcional deixe 0 se não tiver stone
Para saber o ID das stones desça um pouco o configuration.lua que terá uma lista
level = "level mínimo para evoluir o pokemon"
evolution = "nome do pokemon evoluído"
count = "quantidade de stones necessárias"
stoneid = "ID da stone que ira evoluir o pokemon"
stoneid2 = "ID do segundo tipo stone que ira evoluir o pokemon" obs opcional
11ª
Desça mais um pouco encontrara o spcevo
Caso o pokemon que será adicionado tenha uma evolução especial Ex gloom ele pode evoluir para vileplume ou bellossom
Vá ate o ultimo e cole este código.
["AAAAA"] = {[1] = {level = 65, evolution = "BBBBB", count = 1, stoneid = CCCCC, stoneid2 = DDDDD}, [2] = {level = 65, evolution = "EEEEE", count = 1, stoneid = FFFFF, stoneid2 = GGGGG}}, Em "AAAAA" coloque o nome da anti evolução pokemon
Em "BBBBB" coloque o nome da 1ª evolução do pokemon
Em "CCCCC" coloque o ID da stone que ira evoluir o 1º pokemon
Em "DDDDD" coloque o ID do segundo tipo stone que ira evoluir o 1º pokemon obs opcional deixe 0 se não tiver stone
Em "EEEEE" coloque o nome da 2ª evolução do pokemon
Em "FFFFF" coloque o ID da stone que ira evoluir o 2º pokemon
Em "GGGGG" coloque o ID do segundo tipo stone que ira evoluir o 2º pokemon obs opcional deixe 0 se não tiver stone
Para saber o ID das stones desça um pouco o configuration.lua que terá uma lista
level = "level mínimo para evoluir o pokemon"
evolution = "nome do pokemon evoluído"
count = "quantidade de stones necessárias"
stoneid = "ID da stone que ira evoluir o pokemon"
stoneid2 = "ID do segundo tipo stone que ira evoluir o pokemon" obs opcional
12ª
Desça mais um pouco encontrara o gobackmsgs mais não mecha nele
Desça mais um pouco encontrara o specialevo
Caso o pokemon que será adicionado tenha uma evolução especial Ex gloom ele pode evoluir para vileplume ou bellossom
specialevo = {"Poliwhirl", "Gloom", "Tyrogue", "Eevee", "AAAAA"} Em "AAAAA" coloque o nome da anti evolução pokemon
13ª
Desça mais um pouco encontrara o specialabilities
Caso queira colocar alguma habilidade no pokemon coloque
Em "AAAAA" coloque o nome da anti evolução pokemon
Coloque nas habilidades desejadas
14ª
Desça mais um pouco encontrara o auraSyst mais não mecha nele
Desça mais um pouco encontrara o hitmonchans mais não mecha nele
Desça mais um pouco encontrara o headbutt mais não mecha nele
Desça mais um pouco encontrara o lookClans mais não mecha nele
Desça mais um pouco encontrara o youAre mais não mecha nele
Desça mais um pouco encontrara o passivesChances
Caso queira colocar alguma especial no pokemon coloque
Em "AAAAA" coloque o nome do pokemon
Em "BBBBB" coloque a chance de sair a passiva
15ª
Desça mais um pouco encontrara o pokesPrice
Vá ate o ultimo e cole este código.
["AAAAA"] = BBBBB, Em "AAAAA" coloque o nome do pokemon
Em "BBBBB" coloque o preço que o pokemon será vendido no npc
salve e feche
22- Agora vá em Data/Movements/ e abra o movements.xml
1º
Logo no começo voçe vera o Icone System
Em <movevent type="Equip" itemid=
Va ate o final da lista coloque o id o ícone on-id do ícone off; Ex 20740-20742;
Ficara assim
2º
Em <movevent type="DeEquip
Va ate o final da lista coloque o id o ícone on-id do ícone off; Ex 20740-20742;
Ficara assim
23- Agora vá em Data/Actions/ e abra o actions.xml
Procure por Icone System
Em <action itemid=
Va ate o final da lista coloque o id o ícone on-id do ícone off; Ex 20740-20742;
Ficara assim
24- Caso tenha adicionado evolução vá em Data/Actions/Scripts e abra o evolution.lua
Em local types =
Vá ate o final da lista da stone que evolui o pokemon coloque o nome da anti evolução Ex , "Spearow" obs caso for 2 stones diferentes adicione nas 2
Ficara assim
25- Seja feliz
Obrigado pela atenção qualquer duvida comente
Caso ajudei REP+
Creditos: 100% Ckfox
-
zLockey9 recebeu reputação de LeoTK em NPC reconhecendo item por ITEMID e nao pela spriteSerá mais fácil você adicionar a mesma Sprite no client assim cada item pode usar um ID de Sprite diferente porém com a mesma imagem.
Um exemplo na imagem ( cada item usará 1 sprite e não a mesma ?
Ex: Item 1234 = sprite 10700 , item 1235 = sprite 10701 ...
-
zLockey9 deu reputação a Zoakly em Sprites do NTOLost e derivados!!Bom, vim aqui postar algumas sprites que tenho guardada aqui no PC elas iriam para meu projeto porem um AMIGO as vendeu para o Arkamed...
E pensei porque não ferrar com o Arkamed?
PRINTS
DOWNLOAD'S
PNG
Créditos
REP+ amigos
-
zLockey9 deu reputação a L3K0T em (Resolvido)[Pedido] Efeito no Corpofunction onDeath(cid) local efeitom = 614 local efeitof = 615 if getPlayerSex(cid) == 1 then doSendMagicEffect(getPlayerPosition(cid), efeitom) else doSendMagicEffect(getPlayerPosition(cid), efeitof) end doRemoveCreature(cid) return TRUE end male e female.
tag:
<event type="death" name="Death" event="script" value="morto.lua"/>
-
zLockey9 recebeu reputação de King Laker em (Resolvido)Spell Izanami@King Laker Ah claro .
data/creaturescript/script/izanami.lua
data/creaturescript/script/login.lua
data/creaturescript/creaturescript.xml
Se faltar algo é só me marcar e dizer
-
zLockey9 deu reputação a Gengo em (Resolvido)[Pedido] Skin SystemEai mano blz, vê se este script lhe atende suas necessidades ou pelo menos te de o caminho das pedras.
Na pasta do seu servidor data/talkactions/script crie um arquivo com um nome skin.lua e coloque o seguinte codigo:
Agora só registrar no talkactions.xml no arquivo data/talkactions/talkactions.xml coloque a seguinte tag:
Espero que lhe ajude.
OBS: Altere o itemId e outfitId de acordo com o seu servidor.
-
zLockey9 deu reputação a Absolute em [UP-LEVEL] Recompensa ao subir de levelFala TKZIANOS de plantão WTF? AUEHAUHEA Mas ok...
Venho hoje trazer a vocês um sistema de ganhar uma recompensa ao conquistar determinado nível (Configurável)
Como funciona?
Quando o jogador conquistar determinado level ele recebe como recompensa X item ou GOLD!
Mais Absolute, o cara vai ficar se matando e upando de novo para ficar pegando a recompensa... NÃO! Quando o player conquista o level ele recebe uma STORAGE, essa storage faz com que salve isto, ou seja faz com que marque que o jogador já recebeu, se ele tentar burlar o sistema ele não vai receber pelo fato da tal STORAGE já estar gravada nele =p
Em data/creaturescripts/scripts crie um arquivo chamado uplevelabsolute.lua e coloque o seguinte dentro:
function onAdvance(cid, skill, oldLevel, newLevel) local config = { [50] = {item = 2160, count = 5}, [100] = {item = 2160, count = 15}, [150] = {item = 2160, count = 20}, [200] = {item = 2160, count = 25}, [250] = {item = 2160, count = 30}, [300] = {item = 2160, count = 50}, [350] = {item = 4891, count = 1}, [400] = {item = 4892, count = 1}, } if skill == 8 then for level, info in pairs(config) do if newLevel >= level and (getPlayerStorageValue(cid, 30700) == -1 or not (string.find(getPlayerStorageValue(cid, 30700), "'" .. level .. "'"))) then doPlayerAddItem(cid, info.item, info.count) doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "Parabéns, você atingiu o level "..newLevel.." e ganhou "..info.count.." "..getItemNameById(info.item)..".") local sat = getPlayerStorageValue(cid, 30700) == -1 and "Values: '" .. level .. "'" or getPlayerStorageValue(cid, 30700) .. ",'" .. level .. "'" setPlayerStorageValue(cid, 30700, sat) end end end return TRUE end Em data/creaturescripts/creaturescripts.xml adicione a seguinte linha:
<event type="advance" name="UpAbsolute" event="script" value="uplevelabsolute.lua"/> Em data/creaturescripts/scripts/login.lua abaixo de registerCreatureEvent(cid, "Mail") adicione a seguinte linha:
registerCreatureEvent(cid, "UpAbsolute") Pronto, você implantou o sistema em seu servidor.
Como configurar:
[50] = {item = 2160, count = 5}, [50] = level que o player vai receber a tal recompensa
2160 = item que o player vai receber, no caso 2160 é o Crystal Coin
count = 5 = quantidade do item, no caso 5 Crystal Coins
Observação: Ao atingir o level o player receberá uma mensagem e o prêmio estará diretamente em sua backpack.
Qualquer dúvida peço que poste =D
Até o próximo sisteminha bb's.
-
zLockey9 deu reputação a DdJs em Dark Complex | Cave Hunt | 8.60Cave hunt - Dark Complex.
Download: Here
Scan: Here
Imagens:
-
zLockey9 deu reputação a MatheusVidaLoka em [Actions] Novo goldFala galera do Tibia King, hoje venho trazer um actions a vocês, queria dizer que essa action já é velha, mas dei uma olhada no TK e não vi nada a respeito da action, então decidi postar para vocês.
Qual a função da Action?
É um novo tipo de gold que cada um vale 1kk, funcionando normal nas compras e vendas de itens em npcs, e nas trocas de crystal coin para o golda nugget (novo gold).
Bom vamos ao script.
Vá em data/actions/scripts e abra o arquivo crystal.lua, apague tudo o que está dentro, logo em seguida cole o script abaixo:
Traduzindo:
Vermelho: É o id da crystal coin, e a quantidade a ser trocada por 1 gold nugget (Novo Gold).
Azul: É o id da gold nugget, e a quantidade de gold nugget.
Logo em seguida, vá novamente em data/actions/scripts copie qualquer arquivo.lua e cole, em seguida renomeie-o para "goldnuggets" sem aspas, abra-o, apague tudo, e cole o script abaixo.
Traduzindo:
Laranja: É o que vai dizer quando o player trocar 1 gold nugget por 100 crystal coins.
Verde: É o id da crystal coin, e a quantidade equivalente a 1 gold nugget.
Logo em seguida, abra data/actions/actions.xml e adicione a tag abaixo.
Traduzindo:
Rosa: É o id do gold nuggets.
Azul: O nome do arquivo.lua que você salvou.
Depois disso abra data/items/items.xml, aperte CTRL + F, e digite 2157, ai você vai achar o item Gold Nugget que vai estar assim:
Substitua tudo por isso:
<item id="2157" article="a" name="gold nugget" plural="gold nuggets">
<attribute key="weight" value="10"/>
<attribute key="worth" value="1000000" />
Traduzindo:
Vermelho: Peso do gold nugget.
Azul: Valor do item (como 1 crystal coin = 10k , 1 gold nugget = 1kk)
Logo depois vá data/actions/scripts/other e abra o arquivo changegold.lua, susbistitua tudo oque está la dentro por esse script a seguir, e salve:
-- By MatheusVidaLoka
local coins = {
[iTEM_GOLD_COIN] = {
to = ITEM_PLATINUM_COIN, effect = TEXTCOLOR_YELLOW
},
[iTEM_PLATINUM_COIN] = {
from = ITEM_GOLD_COIN, to = ITEM_CRYSTAL_COIN, effect = TEXTCOLOR_LIGHTBLUE
},
[iTEM_CRYSTAL_COIN] = {
from = ITEM_PLATINUM_COIN, to = 2157, effect = TEXTCOLOR_LIGHTBLUE
},
[2157] = {
from = ITEM_CRYSTAL_COIN, effect = TEXTCOLOR_TEAL
}
}
function onUse(cid, item, fromPosition, itemEx, toPosition)
if(getPlayerFlagValue(cid, PLAYERFLAG_CANNOTPICKUPITEM)) then
return false
end
local coin = coins[item.itemid]
if(not coin) then
return false
end
if(coin.to ~= nil and item.type == ITEMCOUNT_MAX) then
doChangeTypeItem(item.uid, item.type - item.type)
doPlayerAddItem(cid, coin.to, 1)
doSendAnimatedText(fromPosition, "$$$", coins[coin.to].effect)
elseif(coin.from ~= nil) then
doChangeTypeItem(item.uid, item.type - 1)
doPlayerAddItem(cid, coin.from, ITEMCOUNT_MAX)
doSendAnimatedText(fromPosition, "$$$", coins[coin.from].effect)
end
return true
end
Traduzindo:
Vermelho: É o id do Gold Nugget.
Por fim vá em data/actions/actions.xml, pule uma linha qualquer e cole isso, e salve:
<action itemid="2157" event="script" value="other/changegold.lua"/>
Traduzindo:
Azul: É o id do gold nugget.
Verde: O nome do arquivo que você salvou.
Server testado em Ot 8.60 e funcionou corretamente.
Creditos:
MatheusVidaLoka
JFLNT
Se enfringi alguma regra do TK por favor me reporte.
Desculpe-me pelos mal usos das ferramentas do TK (quotes,spoiler,CODES,etc) pois estou com certos problemas.
-
zLockey9 deu reputação a BrunoMaia em Old Tibia tirando limite de 255 efeitosFoi testado no TheForgottenServer 0.3.6 no Tibia 8.54
Como o client já está modificado, precisamos modificar a parte do servidor que envia os dados para o client.
Vamos modificar dois métodos, addMagicEffect e sendMagicEffect.
Entre na sua source 0.3.6
Encontre o arquivo protocolgamer.cpp
Você vai encontrar esse código
void ProtocolGame::AddMagicEffect(NetworkMessage_ptr msg,const Position& pos, uint8_t type) { msg->AddByte(0x83); msg->AddPosition(pos); msg->AddByte(type + 1); } Percebeu esse parametro uint8_t type?
Vamos modificar para uint16_t type.
Mas isso não vai adiantar nada se o msg->AddByte(type + 1) continuar desse jeito...
Modifique ele para msg->AddU16(type + 1).
O código modificado deve ficar desse jeito
void ProtocolGame::AddMagicEffect(NetworkMessage_ptr msg,const Position& pos, uint16_t type) { msg->AddByte(0x83); msg->AddPosition(pos); msg->AddU16(type + 1); } Você já deve ter pegado a lógica...
Onde tiver um método addMagicEffect com o parametro uint8_t type, tem que trocar por uint16_t type, o mesmo serve para sendMagicEffect.
Mas como sei que tem pessoas que não gostam de trabalhar um pouco, vamos continuar com os arquivos para modificar.
No mesmo arquivo procure por esse código
void ProtocolGame::sendMagicEffect(const Position& pos, uint8_t type) { if(type > MAGIC_EFFECT_LAST || !canSee(pos)) return; NetworkMessage_ptr msg = getOutputBuffer(); if(msg) { TRACK_MESSAGE(msg); AddMagicEffect(msg, pos, type); } } Temos alguém conhecido nos parametros, o uint8_t type, já sabemos o que devemos fazer, modifique ele para uint16_t type,
Código deve está desse jeito
void ProtocolGame::sendMagicEffect(const Position& pos, uint16_t type) { if(type > MAGIC_EFFECT_LAST || !canSee(pos)) return; NetworkMessage_ptr msg = getOutputBuffer(); if(msg) { TRACK_MESSAGE(msg); AddMagicEffect(msg, pos, type); } } As alterações desse arquivos terminaram, salva as alterações.
Vamos para outro arquivo, o protocolgamer.h
Procure por esse código
void AddMagicEffect(NetworkMessage_ptr msg, const Position& pos, uint8_t type); Novamente troque o uint8_t type por uint16_t type
Código devera ficar desse jeito
void AddMagicEffect(NetworkMessage_ptr msg, const Position& pos, uint16_t type); Procure por esse código
void sendMagicEffect(const Position& pos, uint8_t type); Troque o uint8_t type por uint16_t type
Código devera ficar desse jeito
void sendMagicEffect(const Position& pos, uint16_t type); Salve as alterações e vamos para o outro arquivo, está cançado de modificar os códigos? é assim mesmo, se quer alguma coisa tem que se esforçar por ela.
Vamos para o arquivo game.cpp
Procure por esses códigos
void Game::addMagicEffect(const Position& pos, uint8_t effect, bool ghostMode /* = false */) { if(ghostMode) return; const SpectatorVec& list = getSpectators(pos); addMagicEffect(list, pos, effect); } void Game::addMagicEffect(const SpectatorVec& list, const Position& pos, uint8_t effect, bool ghostMode/* = false*/) { if(ghostMode) return; Player* player = NULL; for(SpectatorVec::const_iterator it = list.begin(); it != list.end(); ++it) { if((player = (*it)->getPlayer())) player->sendMagicEffect(pos, effect); } } Troque os parametros uint8_t effect por uint16_t effect
Dexando-os assim
void Game::addMagicEffect(const Position& pos, uint16_t effect, bool ghostMode /* = false */) { if(ghostMode) return; const SpectatorVec& list = getSpectators(pos); addMagicEffect(list, pos, effect); } void Game::addMagicEffect(const SpectatorVec& list, const Position& pos, uint16_t effect, bool ghostMode/* = false*/) { if(ghostMode) return; Player* player = NULL; for(SpectatorVec::const_iterator it = list.begin(); it != list.end(); ++it) { if((player = (*it)->getPlayer())) player->sendMagicEffect(pos, effect); } } Salve as alterações e vamos para o outro arquivo, game.h
Procure por esse códigos, está ficando repetitivo, mas é assim mesmo
void addMagicEffect(const Position& pos, uint8_t effect, bool ghostMode = false); void addMagicEffect(const SpectatorVec& list, const Position& pos, uint8_t effect, bool ghostMode = false); Troque o uint8_t effect por uint16_t effect
Código tem que ficar desse jeito
void addMagicEffect(const Position& pos, uint16_t effect, bool ghostMode = false); void addMagicEffect(const SpectatorVec& list, const Position& pos, uint16_t effect, bool ghostMode = false); Essa foi rápido, salve as alterações e vamos para o outro arquivo, player.h
Procure por esse código
void sendMagicEffect(const Position& pos, uint8_t type) const Troque por esse código
void sendMagicEffect(const Position& pos, uint16_t type) const Salve as alterações, esse foi o último arquivo
Agora compile!
Uma coisa que você deve saber, se você tentar entrar com o client que não esteja esperando valores do tipo uint16 e algum efeito for executado, vai da um erro no client, não da para jogar...
Vamos baixar o client modificado.
Download cliente com as seguintes configurações.
Port: 7171
IP: 127.0.0.1
Version: 8.54
Clique aqui para baixar esse cliente
Virus total desse client
Download cliente com as seguintes configurações.
Port: 7272
IP: 127.0.0.1
Version: 8.54
Clique aqui para baixar esse cliente
Virus total desse client
Modificações dos clientes foram feitos por mim.
Reporte qualquer bug que ocorrer.
Esse tutorial ensina como tirar o limite de 255 efeitos do tibia, se você não tiver mais de 255 efeitos colocados em sua source, então coloque para testar, não precisa colocar agora, e se você quiser pode colocar depois e já deixar seu client preparado para suporta mais de 255 efeitos.
Tutorial para adicionar efeitos na sua source.
Não deixe de agradecer...
-
zLockey9 deu reputação a Garou em Account Manager - Opção ManagerNome: manager
Tipo: C++
Autor: Oneshot
Estas são edições nas sources para criação de uma nova opção no vocations.xml que ativa ou desativa a escolha de certas vocações no Account Manager integrado aos servidores.
Em vocations.h, procure por:
bool attackable, needPremium; Substitua por: bool attackable, needPremium, manager; Procure por: bool isPremiumNeeded() const {return needPremium;} void setNeedPremium(bool v) {needPremium = v;} Adicione logo abaixo: bool isManagerOption() const {return manager;} void setAsManagerOption(bool v) {manager = v;} Em vocations.cpp, procure por: if(readXMLString(p, "needpremium", strValue)) voc->setNeedPremium(booleanString(strValue)); Adicione logo abaixo: if(readXMLString(p, "accountmanager", strValue) || readXMLString(p, "manager", strValue)) voc->setAsManagerOption(booleanString(strValue)); Procure por: needPremium = false; Adicione abaixo: manager = true; Finalmente, em player.cpp, procure por: if(it->first == it->second->getFromVocation() && it->first != 0) Substitua: if(it->first == it->second->getFromVocation() && it->first != 0 && it->second->isManagerOption() == true) Ainda em player.cpp, procure por: if(checkText(text, tmp) && it != Vocations::getInstance()->getLastVocation() && it->first == it->second->getFromVocation() && it->first != 0) Substitua: if(checkText(text, tmp) && it != Vocations::getInstance()->getLastVocation() && it->first == it->second->getFromVocation() && it->first != 0 && it->second->isManagerOption() == true) Recompile e seja feliz. O modo de uso é simples, no vocations.xml, basta escolher a vocação que você quer que não apareça no Account Manager, por exemplo: <vocation id="9" name="Fighter" description="a fighter" needpremium="0" gaincap="25" gainhp="15" gainmana="5" gainhpticks="6" gainhpamount="1" gainmanaticks="6" gainmanaamount="2" manamultiplier="3.0" attackspeed="2000" soulmax="100" gainsoulticks="120" fromvoc="9"> <formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/> <skill fist="1.1" club="1.1" sword="1.1" axe="1.1" distance="1.4" shielding="1.1" fishing="1.1" experience="1.0"/> </vocation> E adicionar a opção manager com valor 0 ou 1 para não aparecer ou aparecer, respectivamente. <vocation id="9" name="Fighter" description="a fighter" needpremium="0" gaincap="25" gainhp="15" gainmana="5" gainhpticks="6" gainhpamount="1" gainmanaticks="6" gainmanaamount="2" manamultiplier="3.0" attackspeed="2000" soulmax="100" gainsoulticks="120" fromvoc="9" manager="0"> <formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/> <skill fist="1.1" club="1.1" sword="1.1" axe="1.1" distance="1.4" shielding="1.1" fishing="1.1" experience="1.0"/> </vocation>
-
zLockey9 deu reputação a Storm em (Resolvido)Salvar Vocation@zLockey9 Coloquei para relogar o player e evitar esse problema ;
function onUse(cid, item, frompos, item2, topos) if getVocationInfo(getPlayerVocation(cid)).name == "Madara" then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Voce ja é um madara!") return false else doPlayerSetVocation(cid, 14) doCreatureSay(cid, "Madara Owns!!", 19) doSendMagicEffect(getCreaturePosition(cid), 224) doRemoveCreature(cid) doCreatureChangeOutfit(cid, {lookType = 452}) setPlayerStorageValue(cid, 16200, 1) setPlayerStorageValue(cid, 300, (getPlayerVocation(cid))) doRemoveItem(item.uid) return true end return true end