Histórico de Curtidas
-
carlos420 deu reputação a DdJs em [10.98] Castle 24h Revamp.Castle 24h
V 10.98
Download:
Castle24h + Monsters.zip
Position: {x = 1028, y = 1034, z = 7}
Caso queiram o script desse mapa, podem botar pressão no @Breno Alves pra ele postar ?
Pics:
Criaturas do Mapa:
Energythrower
The Bridge Guardian
Dark Energy
Lord Noryb (protetor do trono)
Observações:
Aconselhável a edição da quantidade de health e attack power das criaturas de acordo com os stats do seu server.
O monstro Dark Energy é apenas um "trap" que dispara paralyze, não é possivel mata-lo.
-
carlos420 deu reputação a Heyron em [8.60] The Forgotten Server 0.4 By Fir3Element (SQL and MYSQL)@Fir3element man, encontrei um probleminha chato nesse datapack.
Não tem como correr e atacar com magia sem travar, como o exori vis por exemplo. Se pressionar a hotquey o char para de andar.
É só saber procurar, tá aí:
-
carlos420 deu reputação a WooX em Zombie Event [DIFERENCIADO]Zombie Event
Zombie Event é um evento já muito conhecido em que os participantes são jogados em uma arena e zombies são invocados até que reste apenas um jogador, quando um jogador é tocado por um zombie ele é teleportado para o templo, o ultimo jogador a ficar na arena é definido como vencedor e o evento é finalizado ai. Já faz um bom tempo que tive a ideia de mudar o funcionamento deste tradicional evento e finalmente decidi por a mão na massa, irei explicar melhor o que foi alterado abaixo.
Sobre o sistema
O sistema foi testado apenas em OTX2, mas provavelmente também funcione em TFS 0.4
Pra quem quiser esse evento funcional para TFS 1.x, o @Movie se comprometeu a fazer a adaptação, então podem mandar mensagem privada pra ele cobrando que ele gosta.
Quem é familiar com filmes e séries de zombies sabe que quando um zombie morde alguém a pessoa que foi mordida não simplesmente morre, mas ela se torna um zombie, é isso que torna a ideia de um apocalipse zombie tão aterrorizante. Pensando nisso eu tive a ideia de alterar o sistema pra que quando algum player fosse pego por um zombie ele também se transformasse em um e não fosse simplesmente teleportado para o templo. Essa alteração deixa a interação entre os jogadores no evento mais dinâmica pois eventualmente se torna um jogo de Player vs Player ao invés de Player vs Maquina, embora no fim continue sendo uma batalha entre vivos e mortos.
Irei listar abaixo mais algumas características do evento.
É possivel configurar para que seja permitido ou não o uso de MCs. Todos os jogadores ao entrar na arena ficam com a mesma velocidade. Para tornar mais competitivo e divertido, não é permitido utilizar a função Follow dentro do evento. O jogador que foi transformado em zombie que mais contaminar outros jogadores também recebe uma recompensa. Os jogadores que forem transformados em zombies podem subir de rank conforme forem contaminando outros jogadores, alterando assim sua aparência e velocidade na arena.
Vídeozinho
Instalação
Este sistema utiliza de funções contidas na lib do link abaixo, então antes de mais nada é necessário adicionar esta lib no servidor.
Todos os arquivos necessários para instalação do evento estão anexados no tópico, irei apenas mostrar como deve ser configurado.
Toda configuração do sistema se encontra na lib do mesmo, segue abaixo explicação de como configurar.
startTime: configuração de horários para inicio do evento a depender do dia da semana (para cada horário diferente definido aqui um registro extra é necessário no globalevents.xml) announcement: mensagem a ser exibida quando o teleporte para o evento for aberto. startEvent: mensagem a ser exibida quando o teleporte para o evento for fechado e o evento iniciado. playerBitten: mensagem a ser exibida quando um jogador for mordido por um zombie. endEvent: mensagem a ser exibida quando o evento for finalizado. notEnoughPlayers: mensagem a ser exibida quando não houver players suficiente para o evento. zombiesRant: falas que serão randomicamente selecionadas para um jogador que foi transformado em zombie falar.
minOnlinePlayers: define a quantidade minima de jogadores online para o teleporte do evento ser aberto. minPlayers: define a quantidade minima de jogadores na arena para o evento ser iniciado. closeTeleportTime: tempo para fechar o teleporte após o anuncio (o valor deve ser definido em minutos). countDownTime: tempo para iniciar o evento após o fechamento do teleporte (o valor deve ser definido em segundos).
zombieRatio: define a quantidade inicial de zombies baseado na quantidade de jogadores participando do evento. playerSpeed: define a velocidade que o jogador terá durante o evento (valido apenas para jogadores que não foram transformados em zombies). delayToTransform: define o intervalo para um jogador que foi mordido se transformar em um zombie (o valor deve ser definido em segundos). allowMultiClient: pode ser definido como true ou false, se definido como falso não irá permitir a entrada de jogadores com o mesmo IP no evento.
rewards: define as recompensas a serem entregues tanto para o ultimo sobrevivente na arena como para o zombie que mais contaminar outros jogadores. zombiesRank: define os ranks dos zombies, a quantidade de pontos necessária para avançar de rank, aparência e velocidade (valido apenas para jogadores que foram transformados em zombies). area: define a área onde ocorrerá o evento, deve ser preenchido as coordenadas do ponto superior-esquerdo, ponto inferior-direito e o andar do local. teleportAid: define a actionID a ser adicionado no teleporte de entrada do evento (este valor deve ser o mesmo a ser registrado na tag XML do script de movements). teleportPos: define as coordenadas onde deve ser criado o teleporte de entrada para o evento.
Créditos
@LeandroRissa por testar todo o sistema.
event zombie.xml lib_zombie.lua zombieEvent.lua zombieEvent_creature.lua zombieEvent_movement.lua
-
carlos420 deu reputação a ramses82 em [pedido] Npc Cassinolocal 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 function delayMoneyRemoval(item, pos)
doRemoveItem(getTileItemById(pos, item).uid)
return true
end
local function placeMoney(amount, table_middle_pos)
local remain = amount
local crystal_coins = 0
local platinum_coins = 0
if (math.floor(amount / 10000) >= 1) then
crystal_coins = math.floor(amount / 10000)
remain = remain - crystal_coins * 10000
end
if ((remain / 100) >= 1) then
platinum_coins = remain / 100
end
addEvent(doCreateItem, 550, 2152, platinum_coins, table_middle_pos)
addEvent(doCreateItem, 600, 2160, crystal_coins, table_middle_pos)
end
local function rollDice(roll, cc_count, pc_count, table_left_pos, table_middle_pos, npc)
local dice_ids = {5792, 5793, 5794, 5795, 5796, 5797}
local random_rollval = math.random(1,6)
local total_g = (10000 * cc_count) + (100 * pc_count)
local prize_percent = 0.8 -- 80%
if ((total_g) <= 300000 and (total_g) >= 5000) then
doSendMagicEffect(table_left_pos, CONST_ME_CRAPS)
for _, itemId in pairs(dice_ids) do
if(getTileItemById(table_left_pos, itemId).uid > 0) then
doTransformItem(getTileItemById(table_left_pos, itemId).uid, dice_ids[random_rollval])
end
end
if (roll == 1 and random_rollval <= 3) then
placeMoney(total_g + (total_g * prize_percent), table_middle_pos)
addEvent(doSendMagicEffect, 400, table_left_pos, CONST_ME_SOUND_GREEN)
addEvent(doSendMagicEffect, 700, table_left_pos, CONST_ME_SOUND_GREEN)
addEvent(doCreatureSay, 500, npc, "You win!", TALKTYPE_SAY, false, 0)
elseif (roll == 2 and random_rollval >= 4) then
placeMoney(total_g + (total_g * prize_percent), table_middle_pos)
addEvent(doSendMagicEffect, 400, table_left_pos, CONST_ME_SOUND_GREEN)
addEvent(doSendMagicEffect, 700, table_left_pos, CONST_ME_SOUND_GREEN)
addEvent(doCreatureSay, 500, npc, "You win!", TALKTYPE_SAY, false, 0)
else
addEvent(doSendMagicEffect, 400, table_left_pos, CONST_ME_BLOCKHIT)
addEvent(doSendMagicEffect, 700, table_left_pos, CONST_ME_BLOCKHIT)
addEvent(doCreatureSay, 500, npc, "Better luck next time.", TALKTYPE_SAY, false, 0)
end
doCreatureSay(npc, string.format("%s rolled a %d.", getCreatureName(npc), random_rollval), TALKTYPE_ORANGE_1, false, 0, table_left_pos)
else
addEvent(doCreateItem, 100, 2160, cc_count, table_middle_pos)
addEvent(doCreateItem, 150, 2152, pc_count, table_middle_pos)
doCreatureSay(npc, "The minimum wager is 5K and the maximum wager is 300K.", TALKTYPE_SAY, false, 0)
end
return true
end
function creatureSayCallback(cid, type, msg)
-- NPC userdata instance
local npc = getNpcCid()
-- Game table position userdata instances
local table_left_pos = {x = 32228, y = 32190, z = 15} -- Pos da frente do Npc onde gira o dado
local table_middle_pos = {x = 32228, y = 32191, z = 15} -- Pos do meio onde vai o dinheiro
-- Search for coins on the left and middle tables and create item userdata instances
local table_middle_cc = getTileItemById(table_middle_pos, 2160)
local table_middle_pc = getTileItemById(table_middle_pos, 2152)
-- Other variables
local cc_count = 0
local pc_count = 0
local ROLL, LOW, HIGH = 0, 1, 2
posplayer = {x=32229, y=32192, z=15} -- Pos onde o player precisa estar
local ppos = getPlayerPosition(cid)
if ppos.x == posplayer.x and ppos.y == posplayer.y then
if isInArray({"H", "HIGH", "high", "h"}, msg) then
ROLL = HIGH
elseif isInArray({"L", "LOW", "l", "low"}, msg) then
ROLL = LOW
else
return false
end
if (table_middle_cc.uid ~= 0) then
cc_count = table_middle_cc.type
doTeleportThing(table_middle_cc.uid, table_left_pos)
addEvent(delayMoneyRemoval, 300, 2160, table_left_pos)
end
if (table_middle_pc.uid ~= 0) then
pc_count = table_middle_pc.type
doTeleportThing(table_middle_pc.uid, table_left_pos)
addEvent(delayMoneyRemoval, 300, 2152, table_left_pos)
end
addEvent(rollDice, 500, ROLL, cc_count, pc_count, table_left_pos, table_middle_pos, npc)
else
return false
end
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
this is only h / l choose your own npc with this file vegas.lua on npc Then on scripts
o<?xml version="1.0" encoding="UTF-8"?>
<npc name="Vegas" script="Vegas.lua" walkinterval="0" floorchange="0">
<health now="100" max="100"/>
<look type="132" head="114" body="0" legs="0" feet="114" addons="3"/>
<parameters>
<parameter key="message_greet" value="Hello, |PLAYERNAME|. You can bet speaking {H} or {L}, the minimum wager is 5K and the maximum wager is 300K." />
</parameters>
</npc>n this npc folder vegas
from Absolute
-
carlos420 deu reputação a Fir3element em [8.60] The Forgotten Server 0.4 By Fir3Element (SQL and MYSQL)Reporte qualquer bug encontrado.
- Mudanças:
* opcode adicionado
* Monstros andando em cima de corpos
* War system arrumado
* Anti-divulgação melhorado
* Cast system arrumado
* Crash bugs arrumados
* Adicionado exhaust ao comprar/vender items
* Account manager com opção para cidades
* /ghost stacking arrumado
* !disband arrumado
* Erros no linux arrumado
* Aleta som arrumado
* Bug nos rings arrumado
* Adicionado suporte para Visual Studio
* Remover battle ao entrar em PZ
* Não pode jogar lixo em casas
* Salt removido
- Downloads:
* Distro (x32): https://github.com/Fir3element/binaries/raw/master/x32-windows.zip
* Distro (x64): https://github.com/Fir3element/binaries/raw/master/x64-windows.zip
* Requisitos: Microsoft Visual C++ Redistributable Package
* Source + datapack: https://github.com/Fir3element/3777/archive/refs/heads/main.zip
- Scans:
* Distro (x32): https://virustotal.com/pt/file/6683a91273b848a39ac21288da9d3abde341436744d6846e35a477c8e7c8f5f7/analysis/1480675335/
* Distro (x64): https://virustotal.com/pt/file/21028857bb1124f19e0353e7f5775c8f66afc4f87f29df9cf4ab8ca1a046b816/analysis/1480675394/
* Source + datapack: https://virustotal.com/pt/file/3761b48ee19f3f540d4c4a48c35c73c89a85615876307073494b1dcfed464d36/analysis/1480675473/
-
carlos420 deu reputação a 139 em Online Bonus SystemFiz este script inspirado no sistema de Online Bônus do antigo servidor FoxWorld.
Consiste em dar dias de Premium Account esporadicamente para aqueles jogadores que são ativos no servidor, estimulando todos a permanecerem o máximo de tempo conectados, especialmente os jogadores Free Account, que não podem contribuir com o servidor através de doações.
Explicação:
A cada uma hora initerrupta que o personagem ficar online, o mesmo irá ganhar 1 Online Bônus.
Acumulando 30 Online Bônus, o personagem ganha 1 dia de Premium Account, e a sua quantidade de Online Bônus recomeçará a ser contada a partir do zero.
Para deixar bem claro, se dentro dessa uma hora o personagem deslogar por qualquer motivo, o contador da tal uma hora para.
Exemplo:
Zezinho entrou no servidor 15:00, então às 16:00 ele ganharia 1 Online Bônus. Mas Zezinho precisou ir na padaria, portanto deslogou às 15:20 (antes de 16:00).
Digamos que ele tenha voltado às 15:30, sendo assim ele precisaria ficar online até 16:30, e de fato fica, ganhando o seu primeiro Online Bônus.
Conforme os dias se passam, Zezinho vai ganhando alguns Online Bônus todos os dias, e finalmente consegue acumular 30 Online Bônus, ganhando então 1 dia de Premium Account, e zerando os seus 30 Online Bônus para que possa ganhar outro dia de Premium Account, quando acumular 30 novamente.
Agora vamos ao código:
Em data\creaturescripts\scripts crie um arquivo LUA com o nome de de "onlinebonus" e cole dentro:
function addOnlineBonus(cid, horas, bonus_contador, bonus_max) if not isPlayer(cid) then return false end setPlayerStorageValue(cid, bonus_contador, getPlayerStorageValue(cid, bonus_contador) + 1) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Por completar uma hora online sem deslogar, você ganhou 1 Online Bônus. Total: ".. getPlayerStorageValue(cid,bonus_contador) .. ".") if getPlayerStorageValue(cid, bonus_contador) >= bonus_max then doPlayerSendTextMessage(cid, 19, "Seus ".. bonus_max .." Online Bônus foram convertidos em 1 dia de Premium Account!") doPlayerAddPremiumDays(cid, 1) setPlayerStorageValue(cid, bonus_contador, 0) end addEvent(addOnlineBonus, horas * 3600 * 1000, cid, horas, bonus_contador, bonus_max) end function onLogin(cid) local bonus_contador = 72702 -- Storage que vai guardar quantos online bonus o char possui. local horas = 1 -- Quantidade de horas o char precisa ficar logado pra receber cada online bonus. local bonus_max = 30 -- Quantidade de bonus que o char precisa atingir para ganhar 1 dia de premium account, zerando o contador. if getPlayerStorageValue(cid, bonus_contador) > 0 then doPlayerSendTextMessage(cid,22,"Você está com: " .. getPlayerStorageValue(cid,bonus_contador) .. " Online Bônus.") else setPlayerStorageValue(cid, bonus_contador, 0) doPlayerSendTextMessage(cid,22,"Você está com: 0 Online Bônus.") end addEvent(addOnlineBonus, horas * 3600 * 1000, cid, horas, bonus_contador, bonus_max) return true end
Agora em data\creaturescripts\creaturescripts.xml adicione a tag:
<event type="login" name="onlinebonus" event="script" value="onlinebonus.lua"/>
E por último vá em data\creaturescripts\scripts\login.lua e adicione esta linha:
registerCreatureEvent(cid, "onlinebonus")
Pronto
-
carlos420 recebeu reputação de Cat em Meu Super OtObrigado Por Visitar Meu Topico Venho Mostrar Meu Projeto E Se Tiver Alguem Que Possa Me Ajudar Em Algumas Coisas , Dicas , Criticas , Opinião , Etc... Sera Bem Vindo !
Templo Mais Dp
Nas Imagens Acima Tem O Templo Com A Dp Primeiro E Segundo Andar
Castle 24h
Evento Zumbie
Tem Muito Mais Coisas Que Eu Ja Fiz Espero Que Gostem
-
carlos420 deu reputação a Vodkart em Event BOSSlocal config = { name = "Shuryu Boss", pos = {x = 60, y = 63, z = 3}, time = 20 } function onThink(interval, lastExecution) doCreateMonster(config.name, config.pos) broadcastMessage("O "..config.name.." apareceu, voce tem "..config.time.." para mata-lo", MESSAGE_STATUS_CONSOLE_ORANGE) addEvent(function() local creature = getCreatureByName(config.name) if creature ~= nil and not isPlayer(creature) then doRemoveCreature(getTopCreature(getCreaturePosition(creature)).uid) end end, config.time*60*1000) return true end
-
carlos420 recebeu reputação de Cat em O que é o item.UID?Parece Um Tutorial Bem Inútil Para Os Que Tem Mente Fechada , Mais Acabei De Saber O Porque De Alguns Erros Quando Abro Meu Servidor E Ja Sei Como Resolve-los , Aqueles Famosos (Duplicate IDs) , Provavelmente O Script Está Usando itemUID e o correto seria usar actionID , Mais Tarde Irei Verificar Isso , Obrigado Pelo Conhecimento Divulgado.
-
carlos420 recebeu reputação de thiagobji em [PEDIDO] Cada 2 dias online (48h) player ganhar 1 DIA VIP.n testei ainda , espero que pegue certinho , qualquer problema postarei REP+
-
carlos420 deu reputação a Vodkart em [PEDIDO] Cada 2 dias online (48h) player ganhar 1 DIA VIP.eu já desenvolvi o sistema, coloquei uma talkactions extra que mostra em tempo real quanto tempo falta para receber a reward por exemplo:
Remaining time to receive a reward: 1 day, 23 hours, 46 minutes and 17 seconds
Remaining time to receive a reward: 1 hour, 48 minutes and 16 seconds
Remaining time to receive a reward: 32 minutes and 28 seconds
e poderá adicionar premios diferentes como itens, premium days(vip no seu caso) e premium points:
config_won_hours = { need_hour = 48, block_mc = {true, 1}, -- se bloqueia MC de ganhar premios, true e a quantidade maxima de IP permitida storages = {789872, 789871} } rewards = {items = {2160,2}, points = 2, p_days = 1}
tbm bloqueia o tempo se o jogador estiver com mais de 1(configuravel) chars logado(, para evitar que MC recebam a recompensa.
não pretendo postar agora porque vou editar o sistema para adicionar premiações conforte uma tabela de horários programada, exemplo
hours = { [1] = {items = {{2160,1},{2173,1}}, points = 0, p_days = 1}, [5] = {items = {{2160,3},{2173,1}}, points = 1, p_days = 0}, [10] = {items = {{2160,5},{2173,1}}, points = 0, p_days = 1}, [24] = {items = {{2160,7},{2173,1}}, points = 0, p_days = 0}, [48] = {items = {{2160,9},{2173,1}}, points = 1, p_days = 1} }
quando o MC entra e já tem 1 online(configuravel esse 1)
[Reward Time System] Your Reward Time is blocked because you are using MC.
digamos que já tem o Player A(1°) logado e eu logo com o player B(2°)
aparece a mensagem para o player B
[Reward Time System] Your Reward Time is blocked because you are using MC.
mas depois de um tempo o Player A resolve deslogar ficando só o player B no serve(ele entrou depois do player A e teve seu tempo bloqueado)
automaticamente o sistema reconhece que ele não é mais um MC e voltar a contar o tempo dele
[Reward Time System] Your time has begun to be counted, avoid MC.
-
carlos420 deu reputação a kenbaue em Tutorial MageBot! [Completo]Tutorial MageBot!
Não sabe usar o MageBot? Não? Não tem problema, com este tutorial você vai aprender rapidinho!
Antes disso, se você ainda não tem o MageBot, clique aqui e visite o tópico de download.
Antes, vejamos uma imagem da interface do MageBot:
Ok, agora vamos para a parte de Healing:
Aqui temos:
Light: Aqui será uma magia (de healing) usada quando você tiver com bastante life (vida). No caso, quase sempre é utilizado magias mais fracas como o "Exura", mas você pode modificar. Você pode escolher a porcentagem ao lado para que quando sua vida tiver em por exemplo "80%" ele usará a magia selecionada e também tem o MP, que se encontra ao lado da porcentagem e ali você terá que indicar o quanto de mana será usado, como o "Exura" é usado "20" de mana.
Heavy: Aqui será a magia (de healing) usada quando você tiver com menos life (vida). No caso, quase sempre é utilizado magias mais fortes como o "Exura Gran" ou então até mesmo o "Exura Vita". Você pode escolher a porcentagem ao lado para que quando sua vida tiver em por exemplo "60%" ele usará a magia selecionada e também tem o MP, que se encontra ao lado da porcentagem e ali você terá que indicar o quanto de mana será usado, como o "Exura Gran" é usado "70" de mana.
Mana Potion: Primeiramente você colocará a porcentagem, no caso da mana, para usar a "Potion" e depois o "tipo de potion".
Health Potion: Primeiramente você colocará a porcentagem, no caso da life (vida), para usar a "Potion" e depois o "tipo de potion" ou então uma runa, como a "UH".
Depois de configurar do seu jeito, aperte em "Save Settings".
Passamos agora para a parte das Hotkeys, que são as teclas/botões que ativam um comando.
Abaixo, qual é a função de cada hotkey:
O que ta entre aspas (".") é o que você poderá modificar... Terão "idaqui" que significa que você terá que colocar o ID de tal coisa que você irá usar, ali, entre outros.
Você usa o que estiver em negrito, nas barras brancas das hotkeys, como você quiser configurar.
Passamos agora para a parte de CaveBot:
Como fazer um script para a Cave?
Bem fácil e simples, apenas clique em RECORD, que localiza-se na parte superior esquerda, depois disso, faça seu "circuito", quando finalizar o mesmo, aperte em SAVE, salve arquivo como nome.sav, onde "nome" será o nome que você quiser, exemplo o nome da cave/lugar, como você quiser e achar melhor. Existe alguns atalhos para facilitar um pouco que são o "Alt" que começa a gravar seu percurso/circuito e o "Home" que salva seu percurso/circuito.
Como usar o script feito?
Bom, simplesmente você terá que apertar o LOAD, escolher o arquivo nome.sav e apertar no START, para então ele começar o percurso/circuito.
O que significa?
Agora, passamos para o Loot Manager:
Auto-Loot: Pega automaticamente o loot, que foi usado na sua lista de itens.
AutoOpenCorpse: Abre automaticamente os corpos dos monstros para pegar o loot de cada um.
AutoAtack: Ataca automaticamente os monstros.
Refill Arrow: Coloca automaticamente, munições (para paladins) para uso.
Agora, Team Server:
Passamos agora para Enemy Target ou Heal Friend:
Enemy Target:
Caso você queira atacar um team inimigo, um inimigo, alguém de outfit diferente, etc..
Heal Friend:
Caso você queira healar um amigo.
Agora, Rune Maker:
Caso você queira que seu personagem fique runando, você poderá também colocar para ele comer automaticamente e além de não deixa-lo deslogar.
Passamos agora para, Specialty:
Caso queira que seu personagem use uma magia automaticamente como o "Utamo Vita" ou então "Utani Hur", entre outras.
Última parte é o Remote Control:
Aqui você colocará o nome de algum personagem, e o mesmo receberá as mensagens que te mandarem, além disso poderá controlar o que o char deve fazer. Isso é apenas uma breve explicação, pois me recordo muito bem disso também.
Peço desculpas, por não saber tudo, pois não foi eu que criei.. Espero que gostem e aproveitem.
Agradeço ao fórum Tibia Brasil, tive uma ajuda de lá, na parte de Team Server!