Ir para conteúdo

Yan Liima

Héroi
  • Registro em

  • Última visita

Tudo que Yan Liima postou

  1. Tente assim: A tag é aquela mesmo que te mandei, se funcionar qualquer coisa deixo a script mais bonitinha pra você, se quiser.
  2. Ué como assim o tempo todo? depois de passar no piso ele ainda continua healando?
  3. Vá em data/moveevents/scripts/ e adicione um arquivo.lua chamado healplayer.lua e cole o seguinte código dentro : function onStepIn(cid, item, position, lastPosition, fromPosition) local level = 100 -- Até que level pode healar function doHealPlayer(cid) local delay = 4 -- de quanto em quanto tempo irá adicionar (no caso, 1 segundo) local mana = 25 -- quanto de mana vai ser adicionado local vida = 25 -- quanto de health vai ser adicionado if getPlayerStorageValue(cid, 98910) == 1 then doCreatureAddHealth(cid, mana) doPlayerAddMana(cid,vida) addEvent(doHealPlayer, delay*1000, cid) doCreatureSay(cid, "Ai que delicia", TALKTYPE_ORANGE_1) doSendMagicEffect(getCreaturePosition(cid),13) end return TRUE end if getPlayerLevel(cid) >= level then doPlayerSendCancel(cid,"Você já é acima do level ".. level .."") else setPlayerStorageValue(cid, 98910, 1) doHealPlayer(cid) end function onStepOut(cid, item, position, lastPosition, fromPosition) setPlayerStorageValue(cid, 98910, -2) end end Agora em moveevents.xml adicione as seguintes tags : Depois é só colocar o uniqueid no piso pelo mapa editor (RME) xD
  4. Também fiquei procurando igual tonto kkkkk
  5. entendi kkk este ai esta funcionando 100% agora? porque qualquer coisa refaço e te mando. Qualquer coisa me procure, não frequento este fórum mais sempre dou umas olhadinha aqui. Se estiver funcionando perfeitamente REP + ai haha
  6. Cara coloca no RME a porta totalmente fechada em seu movements crie um arquivo chamado portautomatica.lua e cole isto dentro: local config = { delay = 150, --Intervalo de tempo entre as "transformações" da porta, em milésimos. door = {18532, 18531, 18519}, --{ID da porta fechada, ID da porta aberta pela metade, ID da porta aberta}, ids = { [2701] = { {x = 1056, y = 1055, z = 7}, --Posição da porta }, }, } function onStepIn(cid, item, position) if config.ids[item.actionid] then for _, pos in pairs(config.ids[item.actionid]) do if getTileItemById(pos, config.door[1]).uid > 0 then for i = 1, 2 do addEvent(function() doTransformItem(getTileItemById(pos, i == 1 and config.door[1] or config.door[2]).uid, config.door[i + 1]) end, i * config.delay) end end end end return true end function onStepOut(cid, item) if config.ids[item.actionid] then for _, pos in pairs(config.ids[item.actionid]) do local it = getTileItemById(pos, config.door[3]).uid if it > 0 then if getSpectators(pos, 1, 1) then return true end end end for _, pos in pairs(config.ids[item.actionid]) do if getTileItemById(pos, config.door[3]).uid > 0 then for i = 1, 2 do addEvent(function() doTransformItem(getTileItemById(pos, i == 1 and config.door[3] or config.door[2]).uid, config.door[i == 1 and 2 or 1]) end, i * config.delay) end end end end return true end no movements.xml adiciona essas TAG: <movevent type="StepIn" actionid="2701;2702" event="script" value="portautomatica.lua"/> <movevent type="StepOut" actionid="2701;2702" event="script" value="portautomatica.lua"/> Você é muito complicado cara...
  7. Yan Liima postou uma resposta no tópico em Suporte Tibia OTServer
    Mano troque tudo que estiver no seu stages.xml por este: <?xml version="1.0" encoding="UTF-8"?> <stages> <world id="0" multiplier="1"> <stage minlevel="1" maxlevel="20" multiplier="1"/> <stage minlevel="21" maxlevel="40" multiplier="1"/> <stage minlevel="41" maxlevel="60" multiplier="1"/> <stage minlevel="61" maxlevel="80" multiplier="1"/> <stage minlevel="81" maxlevel="249" multiplier="1"/> <stage minlevel="250" maxlevel="299" multiplier="1"/> <stage minlevel="300" maxlevel="349" multiplier="1"/> <stage minlevel="350" maxlevel="399" multiplier="1"/> <stage minlevel="400" multiplier="0"/> </world> </stages> no config.lua deixa assim mesmo: experienceStages = true Se funcionar, com este multiplier vai ser super dificil de upar, estarei deixando o meu multiplier multiplier="20"/> multiplier="15"/> multiplier="10"/> multiplier="8"/> multiplier="5"/> multiplier="3.75"/> multiplier="1.30"/> multiplier="1"/> multiplier="0"/>
  8. Aee como sempre xWhiteWolf mandando vê nos script, estava esperando mesmo você postar ele HAHA. Muito obrigado concerteza vai ajudar muitas pessoas com este belo script REP +
  9. Cara eu tinha feito esta script a muito tempo, para players AFK... Mais serve para treinar também. Dei uma editada aqui pra você mais se quiser mudar a mensagem fique avontade, so não mude os créditos... Em talkactions crie um arquivo .lua e renomeie para treiner.lua e cole isto dentro: -- Créditos para Yan Liima - Night criador da script. local time = 2 -- em segundos 1 = 1 segundo 2 = 2 segundos... local say_events = {} local function SayText(cid) if isPlayer(cid) == TRUE then if say_events[getPlayerGUID(cid)] ~= nil then if isPlayer(cid) == TRUE then doSendAnimatedText(getPlayerPosition(cid),"Treinando!", math.random(01,255)) end say_events[getPlayerGUID(cid)] = addEvent(SayText, time * 1000 / 2, cid) doCreatureSetNoMove(cid, true) end end return TRUE end function onSay(cid, words, param, channel) if(param == '') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Utilize '".. words .. " on' para ligar e '".. words .. " off' para desligar.") return true end if param == "on" then if isPlayer(cid) == TRUE then doSendAnimatedText(getPlayerPosition(cid),"Treinando", math.random(01,255)) end say_events[getPlayerGUID(cid)] = addEvent(SayText, time * 1000, cid) doPlayerSendTextMessage(cid,MESSAGE_STATUS_WARNING,"Você está em modo 'Training'.") doPlayerSendTextMessage(cid,20,"Para sair do modo 'training' diga ".. words .. " off") elseif param == "off" then stopEvent(say_events[getPlayerGUID(cid)]) say_events[getPlayerGUID(cid)] = nil doPlayerSendTextMessage(cid,MESSAGE_STATUS_WARNING,"Você não está mais em modo 'Training'.") doCreatureSetNoMove(cid, false) end return TRUE end --**********************************************************************************************-- --| Créditos | --| By Night | --| Contato: | --| Skype: yan.brendo | --| página no facebook: https://www.facebook.com/dbuoriginal | --| Grupo do facebook: https://www.facebook.com/groups/dbuoriginal/ | --| Perfil no Xtibia: http://www.xtibia.com/forum/user/381894-yan-liima/ | --| Perfil no TibiaKing: http://www.tibiaking.com/forum/profile/139561-yan-liima/ | --| Não retire os créditos caso a contrario você não ganhara nada | --***********************************************************************************************-- a TAG você pode por qualquer uma mais se quiser estarei deixando também: <talkaction log="yes" words="!treinar;!treinando;!training" event="script" value="treiner.lua"/> Ela usa a mesma função que o Anderson mandou (xWhiteWolf) que é doCreatureSetNoMove... Só que este ai já ta pronto para funcionar haha, com mensagens após usar o comando e doSendAnimatedText...
  10. Eae mano firmeza? Irei tentar te ajudar então preste bem atenção e siga os passos.. TUTORIAL DE COMO LIBERAR AS PORTAS CORRETAMENTE PARA INTERNET COMPARTILHADA 1º Mudando a porta do apache para 8090: Vá até na pasta do seu xampp e entre na pasta apache/conf >> C:\xampp\apache\conf Abra o arquivo httpd.conf Depois procure por Listen 80 troque para Listen 8090. Mais pra baixo vai ter isto: ServerName localhost:80 troque para: ServerName localhost:8090. Salva e fecha. PERGUNTA: Mais porque não posso usar a PORT 80? RESPOSTA: Bom geralmente em internet compartilhadas via wi-fi... não tem como usar a porta 80 no site e no servidor pois da conflito entre as portas. Então você tera que usar no site a port 8090 ou 8080 para você poder logar no servidor. Ficara assim: meusite.servegame.com:8090 Não entendeu? Se você tentar por o servidor online para a galera com a port 80 no site muitas vezes não funciona 100% Por exemplo: No site o cara consegue logar dboa meusite.servergame.com mais ele não consegue logar no servidor porcausa que da conflito nas portas, ou interferência não sei explicar direito... Então faça do jeito que estou te ensinando. 2º Liberando as portas no Modem, e também no Firewall do Windows: Primeiro vamos começar pelo Firewall do Windows: Vá até no seu Painel de Controle e abra o Firewall do Windows >> Painel de Controle\Sistema e Segurança\Firewall do Windows Depois vai em Configurações Avançadas, logo em seguida clique em Regras de Entrada e depois Nova Regra... Nela você marcara a opção "PORTA" Clique em 'avançar' depois seleciona a opção 'TCP' e coloca a porta: '7171' e clique em avançar, e vai clicando em avançar até chegar a hora de você por um nome. Coloque Tibia Depois você fara o mesmo procedimento mais no lugar da porta 7171 você agora colocara 7172,8090 e 443. AGORA VAMOS LIBERAR AS PORTAS DO MODEM: Entre no link do seu modem ou usando o IP seu... Na maioria dos modem vai tar escrito em baixo. Eu uso TPLINK então da pra mim entrar pelo tplinklogin.net ou pelo meu IP se não for igual não use este link... Login: Admin Senha: Admin Se não for recomendo que você fale com os caras da sua internet rsrs ou da reset no seu modem, so que ai você teria configurar a senha do seu wi-fi de novo. Após entrar no painel do seu modem procure por: Servidores Virtuais ou Virtual servers Basta clicar em adicionar... Em Porta de Serviço você coloca 7171 Em Porta Interna coloque também 7171 Em Endereço de IP você coloca o IP que estiver no seu IPCONFIG. Para saber é muito simples. Abra o executar do seu PC e digite: CMD depois irá abrir uma janela você digita: IPCONFIG depois você procura por Endereço IPv4. Geralmente é um Ip igual este: 192.168.0.100 , 192.168.0.101... Apos ter pego ele coloque lá no modem o Endereço de IP: Depois terá o protocolo você pode deixar em TODOS (all) ou em TCP Estado você coloca em Habilitar e salva. Depois faça o mesmo procedimento apenas mude as portas, que será >> 7171,7172,8090,443. Não precisa repetir. Pronto seu computador estará pronto para ter um servidor de TIBIA online xD Atenção: as vezes quando você reinicia seu PC o Ip pode mudar... Quaisquer duvida é so dizer, não frequento muito este fórum então se eu demorar para responder me desculpe. Espero que eu tenha te ajudado, demorou um pouquinho pra mim fazer esse texto hasuahsuahsa
  11. Não precisa retirar o 1 e a senha. assim não vai funcionar nem o login 1/1. Apenas faz o que o @Fir3element falou que irá pegar só apertando o enter e 1/1.
  12. Sim, todos os jogadores teria que baixar o SemLag para diminuir o leg. Mais so se o problema for com a conexão deles... No caso se for no seu servidor que esta causando este leg todo acho que não resolveria. Eu não frequento muito o TIBIAKING como pode ver, mais eu tenho uma equipe super avançada. Se precisar entre em contato conosco.
  13. Cara você usa alguma proteção na sua VPS? talvez seja alguém atacando e tals... Se for Windows é bom bloquear a porta 415 e usar o Kiwi Guard. Se for Linux tem que instalar Ip Tables. Esses programas já ajuda um pouquinho. Se ainda continua leg talvez seja sua distro que não esta muito estavel ou até mesmo uma script causando o leg, so sei vendo. kkk Não entendi muito bem... mais se for so com alguns players aconselho a você mandar eles usar isto: Os players pode usar o programa "SemLag" este é o Leatrix Latency Fix, um programa o qual "remove o lag" do seu computador... Com o "SemLag" instalado, voce vai notar que o jogo ficara mais rapido, o leatryFix(nolag) na verdade faz seu windows mandar mais pacotes de dados, o qual deixa o jogo mais liso para jogar. Download do KiwiGuard: http://www.mediafire.com/download/6b762vh9zxgc4ht/KiwiGuard+Firewall.rar Download do SemLag: http://www.mediafire.com/download/8r9oq295mo5as20/SemLag.zip Tutorial de como Instalar IPTables: Qualquer coisa so chamar.
  14. Hashuasha irei ajudar os dois skype: yan.brendo
  15. Se teu site for Modern ACC vai no seu config.php E procura: $config['restrictedAccounts'] Substitue para: $config['restrictedAccounts'] = array('1'); Se não tiver é so adicionar. Ali no lugar do 1 você coloca o login da conta para não poder logar no site.
  16. A minha TFS 0.4 8.60 rev3884 não tem estes tipos de problema... funciona normalmente rsrs eu deixava 12 horas ligado e com uma script reinicia para não dar muito uptime e tals, removi o maximo de bugs possiveis. Recomendo que use uma rev3884 mais não creio que podera ser igual a minha. VPS BOAS: LGV HOST (Um amigo meu usou e disse que é otima) ServerCore (Um amigo meu também usou e disse que é otima. com proteção e tals...) Vps Brasil (Eu usei e achei boa, não deu nenhum leg) https://www.lgvhost.com.br/ https://www.servercore.com.br/ http://vpsbrasil.com/
  17. Basta você baixar o DEV C++ para 32 bits DEV C++ CONFIGURADO PARA 32BITS DEV C++ CONFIGURADO PARA 64BITS
  18. Yan Liima postou uma resposta no tópico em Suporte Tibia OTServer
    Eu tenho a base, mais so a base... O mapa é igual porém bem antigão. Versão antiga de mais kkk
  19. problema com Cap amigo, vai na sua database vai em players e coloca o cap 400 ou mais...
  20. vai em \data\npc\lib\npcsystem abra o npchandler.lua e cole isto dentro -- Advanced NPC System (Created by Jiddo), -- Modificado por Yan Liima - Night if(NpcHandler == nil) then -- Constant talkdelay behaviors. TALKDELAY_NONE = 0 -- No talkdelay. Npc will reply immedeatly. TALKDELAY_ONTHINK = 1 -- Talkdelay handled through the onThink callback function. (Default) TALKDELAY_EVENT = 2 -- Not yet implemented -- Currently applied talkdelay behavior. TALKDELAY_ONTHINK is default. NPCHANDLER_TALKDELAY = TALKDELAY_ONTHINK -- Constant conversation behaviors. CONVERSATION_DEFAULT = 0 -- Conversation through default window, like it was before 8.2 update. CONVERSATION_PRIVATE = 1 -- Conversation through NPCs chat window, as of 8.2 update. (Default) --Small Note: Private conversations also means the NPC will use multi-focus system. -- Currently applied conversation behavior. CONVERSATION_PRIVATE is default. NPCHANDLER_CONVBEHAVIOR = CONVERSATION_PRIVATE -- Constant indexes for defining default messages. MESSAGE_GREET = 1 -- When the player greets the npc. MESSAGE_FAREWELL = 2 -- When the player unGreets the npc. MESSAGE_BUY = 3 -- When the npc asks the player if he wants to buy something. MESSAGE_ONBUY = 4 -- When the player successfully buys something via talk. MESSAGE_BOUGHT = 5 -- When the player bought something through the shop window. MESSAGE_SELL = 6 -- When the npc asks the player if he wants to sell something. MESSAGE_ONSELL = 7 -- When the player successfully sells something via talk. MESSAGE_SOLD = 8 -- When the player sold something through the shop window. MESSAGE_MISSINGMONEY = 9 -- When the player does not have enough money. MESSAGE_NEEDMONEY = 10 -- Same as above, used for shop window. MESSAGE_MISSINGITEM = 11 -- When the player is trying to sell an item he does not have. MESSAGE_NEEDITEM = 12 -- Same as above, used for shop window. MESSAGE_NEEDSPACE = 13 -- When the player don't have any space to buy an item MESSAGE_NEEDMORESPACE = 14 -- When the player has some space to buy an item, but not enough space MESSAGE_IDLETIMEOUT = 15 -- When the player has been idle for longer then idleTime allows. MESSAGE_WALKAWAY = 16 -- When the player walks out of the talkRadius of the npc. MESSAGE_DECLINE = 17 -- When the player says no to something. MESSAGE_SENDTRADE = 18 -- When the npc sends the trade window to the player MESSAGE_NOSHOP = 19 -- When the npc's shop is requested but he doesn't have any MESSAGE_ONCLOSESHOP = 20 -- When the player closes the npc's shop window MESSAGE_ALREADYFOCUSED = 21 -- When the player already has the focus of this npc. MESSAGE_PLACEDINQUEUE = 22 -- When the player has been placed in the costumer queue. -- Constant indexes for callback functions. These are also used for module callback ids. CALLBACK_CREATURE_APPEAR = 1 CALLBACK_CREATURE_DISAPPEAR = 2 CALLBACK_CREATURE_SAY = 3 CALLBACK_ONTHINK = 4 CALLBACK_GREET = 5 CALLBACK_FAREWELL = 6 CALLBACK_MESSAGE_DEFAULT = 7 CALLBACK_PLAYER_ENDTRADE = 8 CALLBACK_PLAYER_CLOSECHANNEL = 9 CALLBACK_ONBUY = 10 CALLBACK_ONSELL = 11 -- Addidional module callback ids CALLBACK_MODULE_INIT = 12 CALLBACK_MODULE_RESET = 13 -- Constant strings defining the keywords to replace in the default messages. TAG_PLAYERNAME = '|PLAYERNAME|' TAG_ITEMCOUNT = '|ITEMCOUNT|' TAG_TOTALCOST = '|TOTALCOST|' TAG_ITEMNAME = '|ITEMNAME|' TAG_QUEUESIZE = '|QUEUESIZE|' NpcHandler = { keywordHandler = nil, focuses = nil, talkStart = nil, idleTime = 300, talkRadius = 3, talkDelayTime = 1, -- Seconds to delay outgoing messages. queue = nil, talkDelay = nil, callbackFunctions = nil, modules = nil, shopItems = nil, -- They must be here since ShopModule uses "static" functions messages = { -- These are the default replies of all npcs. They can/should be changed individually for each npc. [MESSAGE_GREET] = 'Bem vindo, |PLAYERNAME|! Eu estive esperando voce!', [MESSAGE_FAREWELL] = 'Adeus, |PLAYERNAME|!', [MESSAGE_BUY] = 'Voce deseja comprar |ITEMCOUNT| |ITEMNAME| por |TOTALCOST| gold coins?', [MESSAGE_ONBUY] = 'Adeus, volte quando quiser.', [MESSAGE_BOUGHT] = 'Bought |ITEMCOUNT|x |ITEMNAME| for |TOTALCOST| gold.', [MESSAGE_SELL] = 'Voce deseja vender |ITEMCOUNT| |ITEMNAME| por |TOTALCOST| gold coins?', [MESSAGE_ONSELL] = 'Thank you for this |ITEMNAME|, |PLAYERNAME| gold.', [MESSAGE_SOLD] = 'Sold |ITEMCOUNT|x |ITEMNAME| for |TOTALCOST| gold.', [MESSAGE_MISSINGMONEY] = 'Desculpe, voce não tem nenhum dinheiro.', [MESSAGE_NEEDMONEY] = 'Voce não tem dinheiro suficiente.', [MESSAGE_MISSINGITEM] = 'You don\'t even have that item, |PLAYERNAME|!', [MESSAGE_NEEDITEM] = 'Voce não tem este objeto.', [MESSAGE_NEEDSPACE] = 'Voce não tem cap suficiente.', [MESSAGE_NEEDMORESPACE] = 'Voce não tem capacidade para todos os itens.', [MESSAGE_IDLETIMEOUT] = 'Próximo, por favor!', [MESSAGE_WALKAWAY] = 'Até mais!', [MESSAGE_DECLINE] = 'Not good enough, is it... ?', [MESSAGE_SENDTRADE] = 'Essa é minha oferta, |PLAYERNAME|. Deseja algo?', [MESSAGE_NOSHOP] = 'Desculpe, eu não comercializo nada.', [MESSAGE_ONCLOSESHOP] = 'Obrigado, volte sempre que precisar.', [MESSAGE_ALREADYFOCUSED]= '|PLAYERNAME|! Já estou falando com voce...', [MESSAGE_PLACEDINQUEUE] = '|PLAYERNAME|, please wait for your turn. There are |QUEUESIZE| customers before you.' } } -- Creates a new NpcHandler with an empty callbackFunction stack. function NpcHandler:new(keywordHandler) local obj = {} obj.callbackFunctions = {} obj.modules = {} if(NPCHANDLER_CONVBEHAVIOR ~= CONVERSATION_DEFAULT) then obj.focuses = {} obj.talkStart = {} else obj.queue = Queue:new(obj) obj.focuses = 0 obj.talkStart = 0 end obj.talkDelay = {} obj.keywordHandler = keywordHandler obj.messages = {} obj.shopItems = {} setmetatable(obj.messages, self.messages) self.messages.__index = self.messages setmetatable(obj, self) self.__index = self return obj end -- Re-defines the maximum idle time allowed for a player when talking to this npc. function NpcHandler:setMaxIdleTime(newTime) self.idleTime = newTime end -- Attackes a new keyword handler to this npchandler function NpcHandler:setKeywordHandler(newHandler) self.keywordHandler = newHandler end -- Function used to change the focus of this npc. function NpcHandler:addFocus(newFocus) if(NPCHANDLER_CONVBEHAVIOR ~= CONVERSATION_DEFAULT) then if(self:isFocused(newFocus)) then return end table.insert(self.focuses, newFocus) else self.focuses = newFocus end self:updateFocus() end NpcHandler.changeFocus = NpcHandler.addFocus --"changeFocus" looks better for CONVERSATION_DEFAULT -- Function used to verify if npc is focused to certain player function NpcHandler:isFocused(focus) if(NPCHANDLER_CONVBEHAVIOR ~= CONVERSATION_DEFAULT) then for k,v in pairs(self.focuses) do if v == focus then return true end end return false end return (self.focuses == focus) end -- This function should be called on each onThink and makes sure the npc faces the player it is talking to. -- Should also be called whenever a new player is focused. function NpcHandler:updateFocus() if(NPCHANDLER_CONVBEHAVIOR ~= CONVERSATION_DEFAULT) then for pos, focus in pairs(self.focuses) do if(focus ~= nil) then doNpcSetCreatureFocus(focus) return end end doNpcSetCreatureFocus(0) else doNpcSetCreatureFocus(self.focuses) end end -- Used when the npc should un-focus the player. function NpcHandler:releaseFocus(focus) if(NPCHANDLER_CONVBEHAVIOR ~= CONVERSATION_DEFAULT) then if(not self:isFocused(focus)) then return end local pos = nil for k,v in pairs(self.focuses) do if v == focus then pos = k end end table.remove(self.focuses, pos) self.talkStart[focus] = nil closeShopWindow(focus) --Even if it can not exist, we need to prevent it. self:updateFocus() else closeShopWindow(focus) self:changeFocus(0) end end -- Returns the callback function with the specified id or nil if no such callback function exists. function NpcHandler:getCallback(id) local ret = nil if(self.callbackFunctions ~= nil) then ret = self.callbackFunctions[id] end return ret end -- Changes the callback function for the given id to callback. function NpcHandler:setCallback(id, callback) if(self.callbackFunctions ~= nil) then self.callbackFunctions[id] = callback end end -- Adds a module to this npchandler and inits it. function NpcHandler:addModule(module) if(self.modules == nil or module == nil) then return false end module:init(self) if(module.parseParameters ~= nil) then module:parseParameters() end table.insert(self.modules, module) return true end -- Calls the callback function represented by id for all modules added to this npchandler with the given arguments. function NpcHandler:processModuleCallback(id, ...) local ret = true for i, module in pairs(self.modules) do local tmpRet = true if(id == CALLBACK_CREATURE_APPEAR and module.callbackOnCreatureAppear ~= nil) then tmpRet = module:callbackOnCreatureAppear(unpack(arg)) elseif(id == CALLBACK_CREATURE_DISAPPEAR and module.callbackOnCreatureDisappear ~= nil) then tmpRet = module:callbackOnCreatureDisappear(unpack(arg)) elseif(id == CALLBACK_CREATURE_SAY and module.callbackOnCreatureSay ~= nil) then tmpRet = module:callbackOnCreatureSay(unpack(arg)) elseif(id == CALLBACK_PLAYER_ENDTRADE and module.callbackOnPlayerEndTrade ~= nil) then tmpRet = module:callbackOnPlayerEndTrade(unpack(arg)) elseif(id == CALLBACK_PLAYER_CLOSECHANNEL and module.callbackOnPlayerCloseChannel ~= nil) then tmpRet = module:callbackOnPlayerCloseChannel(unpack(arg)) elseif(id == CALLBACK_ONBUY and module.callbackOnBuy ~= nil) then tmpRet = module:callbackOnBuy(unpack(arg)) elseif(id == CALLBACK_ONSELL and module.callbackOnSell ~= nil) then tmpRet = module:callbackOnSell(unpack(arg)) elseif(id == CALLBACK_ONTHINK and module.callbackOnThink ~= nil) then tmpRet = module:callbackOnThink(unpack(arg)) elseif(id == CALLBACK_GREET and module.callbackOnGreet ~= nil) then tmpRet = module:callbackOnGreet(unpack(arg)) elseif(id == CALLBACK_FAREWELL and module.callbackOnFarewell ~= nil) then tmpRet = module:callbackOnFarewell(unpack(arg)) elseif(id == CALLBACK_MESSAGE_DEFAULT and module.callbackOnMessageDefault ~= nil) then tmpRet = module:callbackOnMessageDefault(unpack(arg)) elseif(id == CALLBACK_MODULE_RESET and module.callbackOnModuleReset ~= nil) then tmpRet = module:callbackOnModuleReset(unpack(arg)) end if(not tmpRet) then ret = false break end end return ret end -- Returns the message represented by id. function NpcHandler:getMessage(id) local ret = nil if(self.messages ~= nil) then ret = self.messages[id] end return ret end -- Changes the default response message with the specified id to newMessage. function NpcHandler:setMessage(id, newMessage) if(self.messages ~= nil) then self.messages[id] = newMessage end end -- Translates all message tags found in msg using parseInfo function NpcHandler:parseMessage(msg, parseInfo) local ret = msg for search, replace in pairs(parseInfo) do ret = string.gsub(ret, search, replace) end return ret end -- Makes sure the npc un-focuses the currently focused player function NpcHandler:unGreet(cid) if(not self:isFocused(cid)) then return end local callback = self:getCallback(CALLBACK_FAREWELL) if(callback == nil or callback(cid)) then if(self:processModuleCallback(CALLBACK_FAREWELL)) then if(self.queue == nil or not self.queue:greetNext()) then local msg = self:getMessage(MESSAGE_FAREWELL) local parseInfo = { [TAG_PLAYERNAME] = getPlayerName(cid) } msg = self:parseMessage(msg, parseInfo) self:say(msg, cid) self:releaseFocus(cid) self:say(msg) end end end end -- Greets a new player. function NpcHandler:greet(cid) if(cid ~= 0) then local callback = self:getCallback(CALLBACK_GREET) if(callback == nil or callback(cid)) then if(self:processModuleCallback(CALLBACK_GREET, cid)) then local msg = self:getMessage(MESSAGE_GREET) local parseInfo = { [TAG_PLAYERNAME] = getCreatureName(cid) } msg = self:parseMessage(msg, parseInfo) self:say(msg) self:addFocus(cid) self:say(msg, cid) end end end end -- Handles onCreatureAppear events. If you with to handle this yourself, please use the CALLBACK_CREATURE_APPEAR callback. function NpcHandler:onCreatureAppear(cid) local callback = self:getCallback(CALLBACK_CREATURE_APPEAR) if(callback == nil or callback(cid)) then if(self:processModuleCallback(CALLBACK_CREATURE_APPEAR, cid)) then -- end end end -- Handles onCreatureDisappear events. If you with to handle this yourself, please use the CALLBACK_CREATURE_DISAPPEAR callback. function NpcHandler:onCreatureDisappear(cid) local callback = self:getCallback(CALLBACK_CREATURE_DISAPPEAR) if(callback == nil or callback(cid)) then if(self:processModuleCallback(CALLBACK_CREATURE_DISAPPEAR, cid)) then if(self:isFocused(cid)) then self:unGreet(cid) end end end end -- Handles onCreatureSay events. If you with to handle this yourself, please use the CALLBACK_CREATURE_SAY callback. function NpcHandler:onCreatureSay(cid, class, msg) local callback = self:getCallback(CALLBACK_CREATURE_SAY) if(callback == nil or callback(cid, class, msg)) then if(self:processModuleCallback(CALLBACK_CREATURE_SAY, cid, class, msg)) then if(not self:isInRange(cid)) then return end if(self.keywordHandler ~= nil) then if((self:isFocused(cid) and (class == TALKTYPE_PRIVATE_PN or NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT)) or not self:isFocused(cid)) then local ret = self.keywordHandler:processMessage(cid, msg) if(not ret) then local callback = self:getCallback(CALLBACK_MESSAGE_DEFAULT) if(callback ~= nil and callback(cid, class, msg)) then if(NPCHANDLER_CONVBEHAVIOR ~= CONVERSATION_DEFAULT) then self.talkStart[cid] = os.time() else self.talkStart = os.time() end end else if(NPCHANDLER_CONVBEHAVIOR ~= CONVERSATION_DEFAULT) then self.talkStart[cid] = os.time() else self.talkStart = os.time() end end end end end end end -- Handles onPlayerEndTrade events. If you wish to handle this yourself, use the CALLBACK_PLAYER_ENDTRADE callback. function NpcHandler:onPlayerEndTrade(cid) local callback = self:getCallback(CALLBACK_PLAYER_ENDTRADE) if(callback == nil or callback(cid)) then if(self:processModuleCallback(CALLBACK_PLAYER_ENDTRADE, cid, class, msg)) then if(self:isFocused(cid)) then local parseInfo = { [TAG_PLAYERNAME] = getPlayerName(cid) } local msg = self:parseMessage(self:getMessage(MESSAGE_ONCLOSESHOP), parseInfo) self:say(msg, cid) end end end end -- Handles onPlayerCloseChannel events. If you wish to handle this yourself, use the CALLBACK_PLAYER_CLOSECHANNEL callback. function NpcHandler:onPlayerCloseChannel(cid) local callback = self:getCallback(CALLBACK_PLAYER_CLOSECHANNEL) if(callback == nil or callback(cid)) then if(self:processModuleCallback(CALLBACK_PLAYER_CLOSECHANNEL, cid, class, msg)) then if(self:isFocused(cid)) then self:unGreet(cid) end end end end -- Handles onBuy events. If you wish to handle this yourself, use the CALLBACK_ONBUY callback. function NpcHandler:onBuy(cid, itemid, subType, amount, ignoreCap, inBackpacks) local callback = self:getCallback(CALLBACK_ONBUY) if(callback == nil or callback(cid, itemid, subType, amount, ignoreCap, inBackpacks)) then if(self:processModuleCallback(CALLBACK_ONBUY, cid, itemid, subType, amount, ignoreCap, inBackpacks)) then -- end end end -- Handles onSell events. If you wish to handle this yourself, use the CALLBACK_ONSELL callback. function NpcHandler:onSell(cid, itemid, subType, amount, ignoreCap, inBackpacks) local callback = self:getCallback(CALLBACK_ONSELL) if(callback == nil or callback(cid, itemid, subType, amount, ignoreCap, inBackpacks)) then if(self:processModuleCallback(CALLBACK_ONSELL, cid, itemid, subType, amount, ignoreCap, inBackpacks)) then -- end end end -- Handles onThink events. If you wish to handle this yourself, please use the CALLBACK_ONTHINK callback. function NpcHandler:onThink() local callback = self:getCallback(CALLBACK_ONTHINK) if(callback == nil or callback()) then if(NPCHANDLER_TALKDELAY == TALKDELAY_ONTHINK) then if(NPCHANDLER_CONVBEHAVIOR ~= CONVERSATION_DEFAULT) then for cid, talkDelay in pairs(self.talkDelay) do if(talkDelay.time ~= nil and talkDelay.message ~= nil and os.time() >= talkDelay.time) then selfSay(talkDelay.message, cid) self.talkDelay[cid] = nil end end elseif(self.talkDelay.time ~= nil and self.talkDelay.message ~= nil and os.time() >= self.talkDelay.time) then selfSay(self.talkDelay.message) self.talkDelay.time = nil self.talkDelay.message = nil end end if(self:processModuleCallback(CALLBACK_ONTHINK)) then if(NPCHANDLER_CONVBEHAVIOR ~= CONVERSATION_DEFAULT) then for pos, focus in pairs(self.focuses) do if(focus ~= nil) then if(not self:isInRange(focus)) then self:onWalkAway(focus) elseif((os.time() - self.talkStart[focus]) > self.idleTime) then self:unGreet(focus) else self:updateFocus() end end end elseif(self.focuses ~= 0) then if(not self:isInRange(self.focuses)) then self:onWalkAway(self.focuses) elseif(os.time()-self.talkStart > self.idleTime) then self:unGreet(self.focuses) else self:updateFocus() end end end end end -- Tries to greet the player with the given cid. function NpcHandler:onGreet(cid) if(self:isInRange(cid)) then if(NPCHANDLER_CONVBEHAVIOR == CONVERSATION_PRIVATE) then if(not self:isFocused(cid)) then self:greet(cid) return end elseif(NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT) then if(self.focuses == 0) then self:greet(cid) elseif(self.focuses == cid) then local msg = self:getMessage(MESSAGE_ALREADYFOCUSED) local parseInfo = { [TAG_PLAYERNAME] = getCreatureName(cid) } msg = self:parseMessage(msg, parseInfo) self:say(msg) else if(not self.queue:isInQueue(cid)) then self.queue:push(cid) end local msg = self:getMessage(MESSAGE_PLACEDINQUEUE) local parseInfo = { [TAG_PLAYERNAME] = getCreatureName(cid), [TAG_QUEUESIZE] = self.queue:getSize() } msg = self:parseMessage(msg, parseInfo) self:say(msg) end end end end -- Simply calls the underlying unGreet function. function NpcHandler:onFarewell(cid) self:unGreet(cid) end -- Should be called on this npc's focus if the distance to focus is greater then talkRadius. function NpcHandler:onWalkAway(cid) if(self:isFocused(cid)) then local callback = self:getCallback(CALLBACK_CREATURE_DISAPPEAR) if(callback == nil or callback(cid)) then if(self:processModuleCallback(CALLBACK_CREATURE_DISAPPEAR, cid)) then if(self.queue == nil or not self.queue:greetNext()) then local msg = self:getMessage(MESSAGE_WALKAWAY) local parseInfo = { [TAG_PLAYERNAME] = getPlayerName(cid) } msg = self:parseMessage(msg, parseInfo) self:say(msg, cid) self:releaseFocus(cid) self:say(msg) end end end end end -- Returns true if cid is within the talkRadius of this npc. function NpcHandler:isInRange(cid) local distance = getDistanceBetween(getCreaturePosition(getNpcCid()), getCreaturePosition(cid)) if(distance == -1) then return false end return (distance <= self.talkRadius) end -- Resets the npc into it's initial state (in regard of the keyrodhandler). -- All modules are also receiving a reset call through their callbackOnModuleReset function. function NpcHandler:resetNpc() if(self:processModuleCallback(CALLBACK_MODULE_RESET)) then self.keywordHandler:reset() end end -- Makes the npc represented by this instance of NpcHandler say something. -- This implements the currently set type of talkdelay. -- shallDelay is a boolean value. If it is false, the message is not delayed. Default value is false. function NpcHandler:say(message, focus, shallDelay) local shallDelay = shallDelay or false if(NPCHANDLER_TALKDELAY == TALKDELAY_NONE or not shallDelay) then if(NPCHANDLER_CONVBEHAVIOR ~= CONVERSATION_DEFAULT) then selfSay(message, focus) return else selfSay(message) return end end -- TODO: Add an event handling method for delayed messages if(NPCHANDLER_CONVBEHAVIOR ~= CONVERSATION_DEFAULT) then self.talkDelay[focus] = { message = message, time = os.time() + self.talkDelayTime, } else self.talkDelay = { message = message, time = os.time() + self.talkDelayTime } end end end Depois abra npcsystem.lua e cole isto: -- Advanced NPC System (Created by Jiddo), -- Modificado por Yan Liima - Night if(NpcSystem == nil) then -- Loads the underlying classes of the npcsystem. dofile(getDataDir() .. 'npc/lib/npcsystem/keywordhandler.lua') dofile(getDataDir() .. 'npc/lib/npcsystem/queue.lua') dofile(getDataDir() .. 'npc/lib/npcsystem/npchandler.lua') dofile(getDataDir() .. 'npc/lib/npcsystem/modules.lua') -- Global npc constants: -- Keyword nestling behavior. For more information look at the top of keywordhandler.lua KEYWORD_BEHAVIOR = BEHAVIOR_NORMAL_EXTENDED -- Greeting and unGreeting keywords. For more information look at the top of modules.lua FOCUS_GREETWORDS = {'hi', 'hello', 'hey'} FOCUS_FAREWELLWORDS = {'bye', 'farewell', 'cya'} -- The word for requesting trade window. For more information look at the top of modules.lua SHOP_TRADEREQUEST = {'offer', 'trade'} -- The word for accepting/declining an offer. CAN ONLY CONTAIN ONE FIELD! For more information look at the top of modules.lua SHOP_YESWORD = {'yes'} SHOP_NOWORD = {'no'} -- Pattern used to get the amount of an item a player wants to buy/sell. PATTERN_COUNT = '%d+' -- Talkdelay behavior. For more information, look at the top of npchandler.lua. NPCHANDLER_TALKDELAY = TALKDELAY_ONTHINK -- Conversation behavior. For more information, look at the top of npchandler.lua. NPCHANDLER_CONVBEHAVIOR = CONVERSATION_PRIVATE -- Constant strings defining the keywords to replace in the default messages. -- For more information, look at the top of npchandler.lua... TAG_PLAYERNAME = '|PLAYERNAME|' TAG_ITEMCOUNT = '|ITEMCOUNT|' TAG_TOTALCOST = '|TOTALCOST|' TAG_ITEMNAME = '|ITEMNAME|' TAG_QUEUESIZE = '|QUEUESIZE|' NpcSystem = {} -- Gets an npcparameter with the specified key. Returns nil if no such parameter is found. function NpcSystem.getParameter(key) local ret = getNpcParameter(tostring(key)) if((type(ret) == 'number' and ret == 0) or ret == nil) then return nil else return ret end end -- Parses all known parameters for the npc. Also parses parseable modules. function NpcSystem.parseParameters(npcHandler) local ret = NpcSystem.getParameter('idletime') if(ret ~= nil) then npcHandler.idleTime = tonumber(ret) end local ret = NpcSystem.getParameter('talkradius') if(ret ~= nil) then npcHandler.talkRadius = tonumber(ret) end local ret = NpcSystem.getParameter('message_greet') if(ret ~= nil) then npcHandler:setMessage(MESSAGE_GREET, ret) end local ret = NpcSystem.getParameter('message_farewell') if(ret ~= nil) then npcHandler:setMessage(MESSAGE_FAREWELL, ret) end local ret = NpcSystem.getParameter('message_decline') if(ret ~= nil) then npcHandler:setMessage(MESSAGE_DECLINE, ret) end local ret = NpcSystem.getParameter('message_needmorespace') if(ret ~= nil) then npcHandler:setMessage(MESSAGE_NEEDMORESPACE, ret) end local ret = NpcSystem.getParameter('message_needspace') if(ret ~= nil) then npcHandler:setMessage(MESSAGE_NEEDSPACE, ret) end local ret = NpcSystem.getParameter('message_sendtrade') if(ret ~= nil) then npcHandler:setMessage(MESSAGE_SENDTRADE, ret) end local ret = NpcSystem.getParameter('message_noshop') if(ret ~= nil) then npcHandler:setMessage(MESSAGE_NOSHOP, ret) end local ret = NpcSystem.getParameter('message_oncloseshop') if(ret ~= nil) then npcHandler:setMessage(MESSAGE_ONCLOSESHOP, ret) end local ret = NpcSystem.getParameter('message_onbuy') if(ret ~= nil) then npcHandler:setMessage(MESSAGE_ONBUY, ret) end local ret = NpcSystem.getParameter('message_onsell') if(ret ~= nil) then npcHandler:setMessage(MESSAGE_ONSELL, ret) end local ret = NpcSystem.getParameter('message_missingmoney') if(ret ~= nil) then npcHandler:setMessage(MESSAGE_MISSINGMONEY, ret) end local ret = NpcSystem.getParameter('message_needmoney') if(ret ~= nil) then npcHandler:setMessage(MESSAGE_NEEDMONEY, ret) end local ret = NpcSystem.getParameter('message_missingitem') if(ret ~= nil) then npcHandler:setMessage(MESSAGE_MISSINGITEM, ret) end local ret = NpcSystem.getParameter('message_needitem') if(ret ~= nil) then npcHandler:setMessage(MESSAGE_NEEDITEM, ret) end local ret = NpcSystem.getParameter('message_idletimeout') if(ret ~= nil) then npcHandler:setMessage(MESSAGE_IDLETIMEOUT, ret) end local ret = NpcSystem.getParameter('message_walkaway') if(ret ~= nil) then npcHandler:setMessage(MESSAGE_WALKAWAY, ret) end local ret = NpcSystem.getParameter('message_alreadyfocused') if(ret ~= nil) then npcHandler:setMessage(MESSAGE_ALREADYFOCUSED, ret) end local ret = NpcSystem.getParameter('message_placedinqueue') if(ret ~= nil) then npcHandler:setMessage(MESSAGE_PLACEDINQUEUE, ret) end local ret = NpcSystem.getParameter('message_buy') if(ret ~= nil) then npcHandler:setMessage(MESSAGE_BUY, ret) end local ret = NpcSystem.getParameter('message_sell') if(ret ~= nil) then npcHandler:setMessage(MESSAGE_SELL, ret) end local ret = NpcSystem.getParameter('message_bought') if(ret ~= nil) then npcHandler:setMessage(MESSAGE_BOUGHT, ret) end local ret = NpcSystem.getParameter('message_sold') if(ret ~= nil) then npcHandler:setMessage(MESSAGE_SOLD, ret) end -- Parse modules. for parameter, module in pairs(Modules.parseableModules) do local ret = NpcSystem.getParameter(parameter) if(ret ~= nil) then local number = tonumber(ret) if(number ~= nil and number ~= 0) then npcHandler:addModule(module:new()) end end end end end
  21. Procura no seu config.lua rateExperienceFromPlayers e coloque 0 rateExperienceFromPlayers = 0
  22. Verdade atrapalha muito cara apezar que nem uso o TK direito mais atrapalha muito, porém eles precisam por as propaganda para manter o fórum online. Acho que irei começar usar AdBlock também.
  23. Olá amigo desculpa a demora é que não frequento muito este fórum... Depois de ter feito os procedimento que te disse ali em cima e ter dado erro. Procure no player.cpp substitua a função citada acima por essa: Se o erro ainda persistir me manda suas source que arrumo para você. ou passa seu skype que te adiciono e te ajudo por la. Só avisando, caso esta source que tu mencionou que tem anti divulgação seja a tfs 0.4 ela ja vem com esse sistema de passar por cima do jogador...
  24. Você precisara de sua source para fazer isso... Em Player.cpp procure por: Substitua todo o código por: Depois vá em const.h e procure por: E em baixo coloque: E pronto xD Testado em Tfs 0.3.6. Em algumas sources da um erro/aviso qualquer coisa é so mandar o erro aqui...

Informação Importante

Confirmação de Termo