Líderes
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 06/29/15 em todas áreas
-
Maurolkit é deletado!
Administrador e um outro reagiu a Piabeta Kun por um tópico no fórum
O Mass Ban da CipSoft desta vez pegou pesado com um dos tops do Tibia. Maurolkit, Elite Knight level 797 de Nerana e top 4 do Tibia foi a vítima desta vez, mas uma vítima possivelmente nada inocente! Para aqueles que não se recordam, Maurolkit foi o primeiro jogador a alcançar a marca do level 600 no jogo e assim como seus precursores Lord'Paulistinha (Primeiro level 400) e Tomurka (Primeiro level 500) acabou também sendo deletado do Tibia pelo uso de programas ilegais. Seria o desaparecimento das contas de "grande jogadores" um sinal da decadência do Tibia ou, ao contrário, um símbolo de sua redenção? Afinal não é todo dia que se vê um top sendo deletado, ainda mais considerando todas as críticas ao sistema automático da CipSoft. E então, o que você acha de situações como esta, de Tops sendo deletados?2 pontos -
Fala galera tava há um tempo sem trazer conteúdo ao fórum então decidi trazer o client 2.8 do wono com as sprites do shisui e dos novos monstros etc... DOWNLOAD SCAN Algumas Print's Obs: Object Builder não funciona neste client precisa usar o Dat Editor Obs²: Para fazer funcionar no Object Builder mude a signatures da spr e da dat para a da versao que você quer e que tenha no Object builder ai é só salvar no Dat editor e abrir no Object builder. Créditos Obs²: Gabrieltxu1 ponto
-
Aumentar Limite De Efeitos
NiCaDo reagiu a gabrielbsales por um tópico no fórum
Bom, todos acham 255 efeitos muito pouco, né? Então tá aí, pra quem quiser aumentar esse limite pra 65,535. Mas como nem tudo é perfeito, pra fazer isso você precisará estar usando OTClient e também ter as sources do seu servidor. PS: Só testei em 8.54 Vamos ás edições do servidor: No protocolgame.cpp: No protocolgame.h: No game.cpp: No game.h: No player.h: Bom, agora falta editar no const.h: Está quase pronto, agora, falta fazer o client aceitar esses dados, pra isso, em otclient/modules/game_things/things.lua, em baixo de: local version = g_game.getClientVersion() Adicine: g_game.enableFeature(GameMagicEffectU16) Pronto, se fizer tudo corretamente, funcionará \o Bom, Lordbaxx disponibilizou a sua source(de poketibia) com o limite estendido: Créditos: Featzen(100%)1 ponto -
OTChecker - Notificações de players e servers
Silveira Crtba reagiu a Wo11ven por um tópico no fórum
OTChecker é uma ferramenta para jogadores e OT admins. O sistema coleta informações de jogadores e OT Servers e as utiliza para enviar notificações. Para jogadores: Encontre os melhores servidores e veja informações legais sobre eles. Você pode receber notificações quando um jogador for visto online ou avançar de level. Além disso, você pode seguir seus servers favoritos e saber quando eles estiverem offline, dentre outras opções. Para admins: Dê ao seu OT uma página bonita, mais visibilidade e veja informações úteis. Configure canais de notificação e aumente a competitividade entre seus jogadores. Diversas opções estão disponíveis. Beta test liberado! Lembre-se de selecionar o pacote Beta Tester ao criar sua conta. Site: https://otchecker.net Alguns guias: Como adicionar um server na OT List/Grid Aumentando o tamanho máximo das Network Messages Configurando notificações de OTServers e Players1 ponto -
Como Editar Magias [Novo Update]
bielwayne reagiu a MatheusGlad por um tópico no fórum
Versao 0.1b Tutorial Voce nao Sabe nada sobre scripts e nem mesmo como funcionao e quer criar uma magia Voce pode ir no classico copy/paste: Primeiro Passo: Copie uma tag no spells.xml Exemplo: E cole logo a baixo uma identica. Agora edite certos campos: Vermelho Palavras a serem ditas para a magia sair Verde Level para Usar a magia Amarelo Mana pra Usar a magia Negrito Voce deve mudar para o nome do seu script, no caso usaremos eternal extreme winter Procure na pasta scripts/attack o bloco de notas chamado eternal winter copieo e cole renomeie-o para eternal extreme winter, abaixo ensino como editar. Em seguida voce pode editar certas coisas Azul Minimo Dano -- Leve em base que dakele geito que esta 2.7 ira dar 500 de dano se voce multiplicar por 2 o 2.7 ira ficar 5.4 e ira dar 1000 de dano Rosa Maximo Dano -- mesmo conceito de cima Laranja se voce nao conhece o comando pode ser !z 1,2,3...66 ou /z 1,2,3...66 useo no seu ot e veja um bem legal e apague toda a parte laranja e bote o efeito que voce quer no meu caso irei botar 61 Conclusao a magia ira ficar com a forma do exevo gran mas frigo com otro dano e com otro efeito ___________ Update 0.2a Usando tambem o comando !x ou /x 1,2,3...41 Na linha da sua magia vai estar assim: Para usar os efeitos do /x ou !x voce deve botar antes do EFFECT a palavra DISTANCE e ficara assim: Negrito Como devera ficar para utilizar o comando !x ou /x Listinha de efeitos e seus devidos nomes: ___________________ Update 0.2b Mudando a area da sua spell: Repare a linha da nossa primeira spell la em cima Neste local voce edita a area da sua magia vamos começar: Apague toda akela linha acima em negrito e bote isto: Legenda dos numeros: 0 = nao vai acertar a magia 1 = aonde a magia vai acertar 2 = centro que eh o player (nao acertara tambem) Agora voce pode fazer uma area que voce queira de qualquer forma ___________________ Update 0.3a Como Trocar o Dano da sua Magia: Para trocar o tipo de dano repare a linha da magia: Vermelho Eh o tipo de dano que ira dar eh so mudalo para outro tipo Listinha de Danos: COMBAT_PHYSICALDAMAGE - 1COMBAT_ENERGYDAMAGE - 2COMBAT_EARTHDAMAGE - 4COMBAT_POISONDAMAGE - 4COMBAT_FIREDAMAGE - 8COMBAT_UNDEFINEDDAMAGE - 16COMBAT_LIFEDRAIN - 32COMBAT_MANADRAIN - 64COMBAT_HEALING - 128COMBAT_DROWNDAMAGE - 256COMBAT_ICEDAMAGE - 512COMBAT_HOLYDAMAGE - 1024COMBAT_DEATHDAMAGE - 2048PS:Voce pode usar os numeros no lugar das palavras ___________________ Update 0.3b Botando em pratica tudo que aprendemos! Neste update nos iremos usar todo o conteudo do tutorial para fazer uma magia com varios efeitos,danos e areas diferentes Aqui esta o script que criei para trabalharmos em cima dele: Legenda: Azul Dano de cada wave (onda) da sua magia Negrito Area das magias (arr) Vermelho Pausa de uma wave para outra, se quizer aumente bote 100,300,500... Pronto agora se voce viu os outros updates sabera mudar dano efeito e fazer uma otima magia bem louca Video de Demonstraçao: __________ Fim dos Updates (Se voce tiver alguma opniao de update MP para mim que eu faço mais updates)1 ponto -
Melhor resposta, Nome no rep.
AdilsonHacker reagiu a RigBy por um tópico no fórum
Seria uma boa amostrar a quantidade de melhores respostas que uma pessoa tem no perfil que nem a reputação e não apenas no top 5 (se isso já existir eu não sei onde fica). E também volta com aqueles nomezinho que tinha antigamente na reputação, tipo ao atingir 1000 rep ficaria la em baixo da reputação "Sou o Deus do XTibia".1 ponto -
Maurolkit Ressurge de Deletera!
RigBy reagiu a Piabeta Kun por um tópico no fórum
Eis que volta Maurolkit de DELETERA (level 797), que havia sido deletado ontem, talvez por um equivoco da CIP, não sabemos ao certo, mas pode ter acontecido falha no sistema de detecção de ferramentas de software ilegais. hoje sim, hoje sim, hoje não....1 ponto -
Melhor resposta, Nome no rep.
RigBy reagiu a AdilsonHacker por um tópico no fórum
Eu concordo totalmente com você, meu amigo.1 ponto -
Dominios .com -- HELP !
sourock reagiu a Piabeta Kun por um tópico no fórum
cara isso é muito relativo, pq tem haver com as circunstancias, modem, router, modem rotiado, provedor de internet, tudo isso ai é uma dor de cabeça, se seu provedor nao bloqueia as portas, o mais simples é achar um roteador que libere as funçoes de portas que voce precise de boa, mais cada modelo tem seu jeito de configurar, logo entao é um bixo de 7 cabeças, so fuçando na net e descobrindo o que da ou nao! acaba saindo mais pratico pagar um host!1 ponto -
Imagem Tutorial Primeiro você precisa abrir o arquivo " config.php " e encontrar // If useDB is false, this array list will be used for shop offers. $config['shop_offers'] = array( // offer 1 1 => array( 'type' => 1, // 1 = item id offers, 2 = premium days [itemid ignored], 3 = sex change[itemid & count ignored], 4+ = custom. 'itemid' => 2160, // item to get in-game 'count' => 5, //if type is 2, this represents premium days 'description' => "Crystal coin.", // Description shown on website 'points' => 100, // How many points this offer costs ), // offer 2 2 => array( 'type' => 1, 'itemid' => 2392, 'count' => 1, 'description' => "Fire sword.", 'points' => 10, ), // offer 3 3 => array( 'type' => 2, 'itemid' => 12466, // Item to display on page 'count' => 7, 'description' => "Premium membership.", 'points' => 25, ), // offer 4 4 => array( 'type' => 3, 'itemid' => 12666, 'count' => 3, 'description' => "Change character gender.", 'points' => 10, ), 5 => array( 'type' => 3, 'itemid' => 12666, 'count' => 0, 'description' => "Change character gender.", 'points' => 20, ), 5 => array( 'type' => 4, 'itemid' => 12666, 'count' => 1, 'description' => "Change character name.", 'points' => 20, ), ); ?> E Substituir com um simples include // If useDB is false, this array list will be used for shop offers. include 'shopitems.php'; ?> Agora precisamos fazer algumas mudanças no " Shop.php " para torná-lo o principal responsável principal para a seleção categoria Você deve encontrar esta tabela <table> <tr class="yellow"> <td>Description:</td> <?php if ($config['shop']['showImage']) { ?><td>Image:</td><?php } ?> <td>Count/duration:</td> <td>Points:</td> <td>Action:</td> </tr> <?php foreach ($shop_list as $key => $offers) { echo '<tr class="special">'; echo '<td>'. $offers['description'] .'</td>'; if ($config['shop']['showImage']) echo '<td><img src="http://'. $config['shop']['imageServer'] .'/'. $offers['itemid'] .'.'. $config['shop']['imageType'] .'" alt="img"></td>'; if ($offers['type'] == 2) echo '<td>'. $offers['count'] .' Days</td>'; else if ($offers['type'] == 3 && $offers['count'] == 0) echo '<td>Unlimited</td>'; else echo '<td>'. $offers['count'] .'x</td>'; echo '<td>'. $offers['points'] .'</td>'; echo '<td>'; ?> <form action="" method="POST"> <input type="hidden" name="buy" value="<?php echo (int)$key; ?>"> <input type="submit" value=" PURCHASE " class="needconfirmation" data-item-name="<?php echo $offers['description']; ?>" data-item-cost="<?php echo $offers['points']; ?>"> </form> <?php echo '</td>'; echo '</tr>'; } ?> </table> E substituir todos com este include <table> <?php include 'layout/overall/menu.php'; ?> </table> Agora para adicionar o Estilo você deve ir em "/layout/overall/head.php" e adicione esta linha após a linha Style.css <link rel="stylesheet" type="text/css" href="layout/css/menu.css" /> Anexos e por final importe esses arquivos http://www.mediafire.com/download/2jeo81flw9adifc/WWW.rar Créditos Kushovu ( Criador ) Mudrock ( traduzir e trazer para o fórum )1 ponto
-
[Resolvido] [Pedido] Heavy Slam e Passiva Iron Body
jeanflamengo reagiu a zipter98 por uma questão
Já terminei faz tempo, só estou esperando você avisar que criou o item. Certamente não ficou igual a PxG, porque, caso tenham usado esse método, deve ter demorado um bom tempo para achar o tempo ideal para representar um pulo "perfeito" (como o da gif). E, sinceramente, não estava com paciência de ficar procurando tal tempo. Função de pulo: function jump(cid, rounds) doChangeSpeed(cid, -getCreatureSpeed(cid)) doCreatureSetNoMove(cid, true) for i = 1, rounds do addEvent(function() if isCreature(cid) then local pos = getThingPos(cid) local item = doCreateItem(ITEM_INVISIVEL, 1, pos) addEvent(function() local it = getTileItemById(pos, ITEM_INVISIVEL).uid if it > 0 then doRemoveItem(it) end if i == rounds then doRegainSpeed(cid) doCreatureSetNoMove(cid, false) end end, rounds == 1 and 200 or (i + 2) * 100) end end, i * (rounds == 1 and 200 or 100)) end end Use jump(cid, 1) para um pulo de altura "1" (como o causado pelo Earthquake), e jump(cid, 2) para pulos como do Heavy Slam. Código do Heavy Slam: local config = { areas = {area1, area2}, --Áreas, em ordem de execução. effect = 160, --Efeito. combat = NORMALDAMAGE, --Elemento. } local function doPushCreature(target, cid) if target > 0 then if not isNpc(target) then local position = getThingPosition(cid) local fromPosition = getThingPosition(target) local x = ((fromPosition.x - position.x) < 0 and -1 or ((fromPosition.x - position.x) == 0 and 0 or 1)) local y = ((fromPosition.y - position.y) < 0 and -1 or ((fromPosition.y - position.y) == 0 and 0 or 1)) local toPosition = {x = fromPosition.x + x, y = fromPosition.y + y, z = fromPosition.z} if doTileQueryAdd(target, toPosition) == 1 and getTileInfo(toPosition).house == false then doTeleportThing(target, toPosition, true) end end end end jump(cid, 2) addEvent(function() for i = 0, #config.areas - 1 do addEvent(function() local pos = getPosfromArea(cid, config.areas[i + 1]) doMoveInArea2(cid, config.effect, config.areas[i + 1], config.combat, min, max) for j = 1, #pos do local pid = getTopCreature(pos[j]).uid if ehMonstro(pid) then doPushCreature(pid, cid) elseif isSummon(pid) then local master = getCreatureMaster(pid) if isSummon(cid) then if getPlayerStorageValue(master, 52480) >= 1 and getPlayerStorageValue(master, 52481) >= 0 then local masterCid = getCreatureMaster(cid) if isDuelingAgainst(masterCid, master) then doPushCreature(pid, cid) end end else doPushCreature(pid, cid) end end end end, i * 230) end end, 650)1 ponto -
Dominios .com -- HELP !
VictorWEBMaster reagiu a Piabeta Kun por um tópico no fórum
basicamente quando voce contrata um dominio .com voce tem acesso ao painel de controle do dominio, la voce tem a opção de redirecionar para o ip que voce deseja mudar, lembrando qe o ip numerico de um pc padrão pode variar ao reiniciar o modem,ou seja, isso pode deixar o redirecionamento do ip .com sem funcionar, tendo que alterar novamente no site e demora um cado pra entrar em vigor o redirecionamento! bjs!1 ponto -
Mais pra frente vou disponilizar um gesior bacana pra galera, não posso prometer agora pois estou em uma tremenda correria. Mas postar ferramentas assim separadas, infelizmente eu não me sujeito a isso. Como muitos gesiors são modificados, não há algo padrão e isso vai dar muita manutenção. Tópico movido para área de dúvidas resolvidas.1 ponto
-
Tem sim, Basta usar a condição WHERE id = getPlayerGUID(cid)1 ponto
-
[X] Abstract Smudge SPEEDART
Administrador reagiu a Benny por um tópico no fórum
Bem, o @moskitinho tinha pedido a "técnica" Isso não é muito bem um tutorial, mas a ideia é essa hauhau Enfim, abraços ~1 ponto -
Aumentar Limite De Efeitos
Bualeq reagiu a gabrielbsales por um tópico no fórum
Bom, está no tutorial, haha Pra isso, usem algum sitem de conversão de Decimal para Hexadecimal(Usei este).Basta pegar o resultado, e adicionar 0x0 antes. No caso, 256 é 0x1001 ponto -
1 ponto
-
1 ponto
-
@ Não tenho certeza, mais tenta ai: local config = { segundos = 5, lerIP = true } function sleep(n) local t = os.clock() while os.clock() - t <= n do end end function onLogout(cid) local timeNow, playerIP, m_lastLogin, m_lastIP, seg = os.time(), getPlayerIp(cid), 0, 0, config.segundos if m_lastLogin + config.segundos >= timeNow and (not config.lerIP or m_lastIP == playerIP) then for i = 1, config.segundos do doPlayerSendTextMessage(cid, 19, "[Pokémon X Timer] Aguarde "..seg.." segundo(s) Para Poder Deslogar!.") sleep(1) seg = seg - 1 end return false end m_lastIP = playerIP m_lastLogin = timeNow return true end1 ponto
-
Nova foto adicionada!1 ponto
-
System Anti-Luramento
Soulviling reagiu a zipter98 por uma questão
<globalevent name="monster1" type="start" event="script" value="nome_do_arquivo.lua"/> <globalevent name="monster2" interval="3600" event="script" value="nome_do_arquivo.lua"/>1 ponto -
System Anti-Luramento
Soulviling reagiu a zipter98 por uma questão
Tem a maneira mais prática, que envolve apenas o onSpawn. Entretanto, você precisaria registrar o evento no arquivo XML de todos os monstros do jogo. (creaturescript) function backToPos(cid, pos) if isCreature(cid) then doTeleportThing(cid, pos) addEvent(backToPos, 60 * 60 * 1000, cid, pos) end end function onSpawn(cid) backToPos(cid, getThingPos(cid)) return true end Se achar muito cansativo, há uma outra maneira, que apesar de gastar muita memória no processo, você só precisará registrar 2 tags. (globalevent) function onStartup() for _, m in pairs(getMonstersOnline()) do local value = ":"..getThingPos(m).x.."/"..getThingPos(m).y.."/"..getThingPos(m).z setPlayerStorageValue(m, 9182, value) end return true end function onThink() for _, m in pairs(getMonstersOnline()) do local t = getPlayerStorageValue(m, 9182):sub(2):explode("/") doTeleportThing(m, {x = tonumber(t[1]), y = tonumber(t[2]), z = tonumber(t[3])}) end return true end1 ponto -
[FLCast] Tarantulas Task + Hide
Administrador reagiu a moskitinho por um tópico no fórum
E ai manolos, Terminei a task essa semana e acho que pode ajudar muitos low level. Deixem seus comentários e inscreva-se!1 ponto -
Sim, ao salvar ele sempre cria o arquivo de spawn e houses1 ponto
-
Resetar Spawns
Danihcv reagiu a SkyDarkyes por uma questão
Sim excluir todos do mapa, mas, e depois pra criar outro arquivo spawn, o remeres cria automaticamente?1 ponto -
[Resolvido] [Pedido] Heavy Slam e Passiva Iron Body
Soulviling reagiu a zipter98 por uma questão
Iron Body: exp2.0.lua: Em baixo de: if damageCombat == GROUNDDAMAGE then if isInArray(specialabilities["levitate"], getCreatureName(cid)) then valor = 0 end end coloque: if getCreatureName(cid) == ironBody.name and getPlayerStorageValue(cid, 2818) < os.time() and math.random(1, 100) <= ironBody.chance then doSetCreatureOutfit(cid, {lookType = ironBody.outfit}, ironBody.duration * 1000) setPlayerStorageValue(cid, 9658783, 1) setPlayerStorageValue(cid, 2818, os.time() + ironBody.cooldown) addEvent(function() if isCreature(cid) then doRemoveCondition(cid, CONDITION_OUTFIT) setPlayerStorageValue(cid, 9658783, -1) end end, ironBody.duration * 1000) end Em goback.lua (actions), abaixo de: doCreatureSay(cid, mgo, TALKTYPE_SAY) coloque: if pokename == ironBody.name then doSetCreatureOutfit(pk, {lookType = ironBody.outfit}, ironBody.duration * 1000) setPlayerStorageValue(pk, 9658783, 1) setPlayerStorageValue(pk, 2818, os.time() + ironBody.cooldown) addEvent(function() if isCreature(pk) then doRemoveCondition(pk, CONDITION_OUTFIT) setPlayerStorageValue(pk, 9658783, -1) end end, ironBody.duration * 1000) end Depois, em configuration.lua: ironBody = { name = "Bronzong", --Nome do pokémon. outfit = xxx, --Outfit. duration = 5, --Duração. chance = 35, --Chance, em %, de ativar a passiva. cooldown = 15, --Cooldown para usá-la novamente. } E você tem certeza absoluta que o pulo do Bronzong não é um efeito? Conferiu no client da PxG? Se for literalmente um salto, já imagino como foi feito. E, assim, adianto: será necessária a criação de um item invisível, com a propriedade do jogador poder passar por cima dele e sofrer uma elevação (como os bancos e parcels, sabe?).1 ponto -
NPC que troca vocation
MonsterB0SS reagiu a roriscrave por uma questão
tente Aqui, vá em npcs/script e crie um arquivo chamado vocacao.lua e coloque isso dentro local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end local choose = {} local cancel = {} local available = {} function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_PRIVATE and 0 or cid if(msgcontains(msg, "info")) then selfSay("Olá "..getCreatureName(cid)..", Você quer trocar de vocação, digite o nome da sua proxima vocação. Temos Sorcerer, Druid, Knight e Paladin.", cid) talkState[talkUser] = 1 elseif msgcontains(msg, "sorcerer") or msgcontains(msg, "SORCERER") and talk_state == 1 then doPlayerSetVocation(cid, 1) selfSay("Parabéns, você virou um Sorcerer", cid) broadcastMessage("O jogador "..getCreatureName(cid).." virou um Sorcerer") elseif msgcontains(msg, "druid") or msgcontains(msg, "DRUID") and talk_state == 1 then doPlayerSetVocation(cid, 2) selfSay("Parabéns, você virou um Druid", cid) broadcastMessage("O jogador "..getCreatureName(cid).." virou um Druid") elseif msgcontains(msg, "paladin") or msgcontains(msg, "PALADIN") and talk_state == 1 then doPlayerSetVocation(cid, 3) selfSay("Parabéns, você virou um Paladin", cid) broadcastMessage("O jogador "..getCreatureName(cid).." virou um Paladin") elseif msgcontains(msg, "KNIGHT") or msgcontains(msg, "KNIGHT") and talk_state == 1 then doPlayerSetVocation(cid, 4) selfSay("Parabéns, você virou um Knight", cid) broadcastMessage("O jogador "..getCreatureName(cid).." virou um Knight") elseif(msgcontains(msg, "bye") or msgcontains(msg, "goodbye") or msgcontains(msg, "cya")) then selfSay("cya!", cid, TRUE) closeShopWindow(cid) removeFocus(cid) end end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) e depois volte uma pasta, onde fica os xmls dos npc e crie um novo arquivo chamado vocacao.xml e coloque isso dentro <?xml version="1.0" encoding="UTF-8"?> <npc name="Vocation Changer" script="data/npc/scripts/vocacao.lua" walkinterval="0" floorchange="0"> <health now="150" max="150"/> <look type="131" head="95" body="95" legs="95" feet="95" corpse="6080"/> </npc>1 ponto -
Global 10/11.5 + OtherWorld + Hearth of Destruction Quest+ Eventos
Administrador reagiu a GOD Bon por um tópico no fórum
Amigo compilei para você e deixei já pronto para rodar. Funcionou normalmente aqui. Um REP+ como feedback. Link do Global 32 Bits no servidor mega https://mega.co.nz/#!Q0oEHS6S!-T3qgSbFFBxC6-DJBxDKSyiz5g8YklqbnR5sfCBuswE @MitSuig Se desejar anexar ao tópico deixo aqui minha contribuição. Atenciosamente, Bon1 ponto -
Versão testada pelo Autor do post: TFS 0.4 rev 4395 Provavelmente pode ser usada em outras versões Versão testada por mim: TFS 0.3.6 pl1 Nome do code: setCreatureName(cid, newName, newNameDescription) Pra quem não sabe nameDescription é o nomezinho que aparecerá quando você der look. Exemplo: You see a troll. a parte do "troll" é a descrição do nome. esse codigo ja exist aki no xtibia mas so copie e postei no xtibia Vamos começar. Bom, primeiramente queria dizer que este code não fui eu que fiz, e foi retirado da otland com autorização. Primeiramente vá em monster.h E procure por: class Monster : public Creature feito isso você verá isto: class Monster : public Creature{ private: Monster(MonsterType* _mType); public:#ifdef __ENABLE_SERVER_DIAGNOSTIC__ static uint32_t monsterCount;#endif Na parte de: #ifdef __ENABLE_SERVER_DIAGNOSTIC__ Você adicionara em cima: std::string name, nameDescription; Ficando assim: class Monster : public Creature{ private: Monster(MonsterType* _mType); public:std::string name, nameDescription;#ifdef __ENABLE_SERVER_DIAGNOSTIC__ static uint32_t monsterCount;#endif Agora você irá procurar por: virtual const std::string& getName() const {return mType->name;} e substituir por: virtual const std::string& getName() const {return name;} Depois procure por: virtual const std::string& getNameDescription() const {return mType->nameDescription;} substitua por: virtual const std::string& getNameDescription() const {return nameDescription;} novamente procure por: virtual std::string getDescription(int32_t) const {return mType->nameDescription + ".";} e substitua por: virtual std::string getDescription(int32_t) const {return nameDescription + ".";} Feito este você irá em monster.cpp e procure por: Monster::Monster(MonsterType* _mType): provavelmente você verá: Monster::Monster(MonsterType* _mType): Creature(){isIdle = true; isMasterInRange = false; teleportToMaster = false; mType = _mType; spawn = NULL; raid = NULL;defaultOutfit = mType->outfit; currentOutfit = mType->outfit; e embaixo de raid = NULL; você adicionará: name = mType->name;nameDescription = mType->nameDescription; feito isso você ira em luascript.h e procure por: static int32_t luaDoPlayerSendCancel(lua_State* L); logo abaixo você adicionará: static int32_t luaSetCreatureName(lua_State* L); feito isso vá em luascript.cpp e procure por: lua_register(m_luaState, "doPlayerSendCancel", LuaScriptInterface::luaDoPlayerSendCancel); e adicione abaixo: //setCreatureName(cid, name, description)lua_register(m_luaState, "setCreatureName", LuaInterface::luaSetCreatureName); depois procure por: int32_t LuaScriptInterface::luaDoSendDefaultCancel(lua_State* L) e adicione acima: int32_t LuaInterface::luaSetCreatureName(lua_State* L){ //setCreatureName(cid, newName, newDescription) std::string newDesc = popString(L); std::string newName = popString(L); ScriptEnviroment* env = getEnv(); Creature* creature; if(creature = env->getCreatureByUID(popNumber(L))){Monster* monster = (Monster*)creature;monster->name = newName;monster->nameDescription = newDesc; lua_pushboolean(L, true);} else{ errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); } return 1;} Feito tudo o que foi pedido tecle Ctrl+F11 e bom proveito. agora em Seu mapa Wolrd Procure por uma position bem distante do mapa e crie uma areá pequena assim1 ponto