Jump to content

Leaderboard


Popular Content

Showing content with the highest reputation on 09/10/20 in all areas

  1. 1 point
    Fala pessoal, como vocês estão? Na academia de codding um usuário pediu ajuda para montar um "gerenciador" de quests, para que todas ficassem no mesmo arquivo sem ficar com aquele "spam" de quests nas actions. Esse script foi feito para a TFS 1.X mas, usando a lib do @Mathias Kenfi, você consegue utilizar para TFS 0.X também. O link para as libs: https://github.com/kenfi2/KenfiLib Na pasta actions/scripts crie um arquivo chamado quests.lua config = { quests = { [7172] = { -- ActionID que será colocado no baú name = "dos Crystal Coins", -- Nome da quest rewards = { {id = 2160, count = 100}, -- Prêmio: ID - Count }, level = { active = true, -- Level minimo para pegar? min = 150, -- Se true, qual o minimo }, storage = { active = true, -- Player poderá pegar somente uma vez? key = 91143, -- Apenas uma key por quest }, effectWin = 30, -- Efeito que vai aparecer quando fizer a quest }, [7171] = { -- ActionID que será colocado no baú name = "dos Coins", -- Nome da quest rewards = { {id = 2160, count = 100}, -- Prêmio: ID - Count {id = 2152, count = 100}, -- Prêmio: ID - Count }, level = { active = true, -- Level minimo para pegar? min = 150, -- Se true, qual o minimo }, storage = { active = true, -- Player poderá pegar somente uma vez? key = 91140, -- Apenas uma key por quest }, effectWin = 29, -- Efeito que vai aparecer quando fizer a quest }, }, messages = { notExist = "Essa quest não existe.", win = "Você fez a quest %s.", notWin = "Você já fez a quest %s.", level = "Você precisa de level %d ou maior para fazer a quest %s.", }, } function onUse(cid, item, fromPosition, target, toPosition, isHotkey) local player = Player(cid) local choose = config.quests[item.actionid] if not choose then player:sendCancelMessage(config.messages.notExist) player:getPosition():sendMagicEffect(CONST_ME_POFF) return true end if choose.level.active and player:getLevel() < choose.level.min then player:sendCancelMessage(config.messages.level:format(choose.level.min, choose.name)) player:getPosition():sendMagicEffect(CONST_ME_POFF) return true end if choose.storage.active and player:getStorageValue(choose.storage.key) >= 0 then player:sendCancelMessage(config.messages.notWin:format(choose.name)) player:getPosition():sendMagicEffect(CONST_ME_POFF) return true end for i = 1, #choose.rewards do player:addItem(choose.rewards[i].id, choose.rewards[i].count) end player:setStorageValue(choose.storage.key, 1) player:sendCancelMessage(config.messages.win:format(choose.name)) player:getPosition():sendMagicEffect(choose.effectWin) return true end Para configurar é só utilizar ler os comentários deixados e para adicionar mais quests apenas use o mesmo padrão que deixei aí Utilize a tag no actions.xml desse forma <action fromaid="7171" toaid="7172" script="quests.lua" /> Sendo que o "fromaid" é a actionid inicial, e o "toaid" é a última actionid registrada no arquivo. Qualquer problema, relate nesse tópico.
  2. 1 point
    Rogex Joyz

    Ferumbras Ascendant [ENTRADA FULL]

    Para quem quiser, ai está a entrada toda da Ferumbras Ascendant do global, (desde o teleport de entrada até os teleports de entrada para cada Seal) com mais ou menos 90% de igualdade ao original. Adaptei para a versão 8.60, as escadas estão funcionando conforme deveriam, é composto por 3 andares e possui o hur up/down ao sul (que não tem no global, porém vários ots gostam de ter, então é optativo). Quando eu tiver tempo eu faço as seals. Imagens do mapa O círculo vermelho é a entrada de tudo. Na imagem 1 o círculo em amarelo é o hur up/down / Na imagem 2 o mesmo círculo amarelo é o local de destino dos players após dar hur down na imagem 1. Na imagem 1 o círculo em azul é a escada de acesso ao resto da quest (caso opte por retirar o hur up/hur down, os player terão que fazer todo o caminho até essa escada / Na imagem 2 o mesmo círculo azul é o destino em que a escada na imagem 1 leva. SCAN Ferumbras Ascendant (entrada).otbm
  3. 1 point
    Nolis

    Sistema de Medalhões! Solicite aqui!

    Tópico Atualizado.
  4. 1 point
    doItemSetDuration(uid, duration) getItemDurationTime(uid) A primeira função adiciona ou altera a duração de um item, a segunda retorna o valor em segundos da duração de um item. Instalação No arquivo luascript.cpp da source procure por: //getItemWeight(uid[, precise = true]) lua_register(m_luaState, "getItemWeight", LuaInterface::luaGetItemWeight); Acima adicione: //doItemSetDuration(uid, duration) lua_register(m_luaState, "doItemSetDuration", LuaInterface::luaDoItemSetDuration); //getItemDurationTime(uid) lua_register(m_luaState, "getItemDurationTime", LuaInterface::luaGetItemDurationTime); Depois procure por: int32_t LuaInterface::luaGetItemWeight(lua_State* L) E adicione acima: int32_t LuaInterface::luaDoItemSetDuration(lua_State* L) { //doItemSetDuration(uid, duration) uint32_t duration = (popNumber(L) * 1000); ScriptEnviroment* env = getEnv(); Item* item = env->getItemByUID(popNumber(L)); if(!item) { errorEx(getError(LUA_ERROR_ITEM_NOT_FOUND)); lua_pushboolean(L, false); return 1; } item->setDuration(duration); return 1; } int32_t LuaInterface::luaGetItemDurationTime(lua_State* L) { //getItemDurationTime(uid) ScriptEnviroment* env = getEnv(); Item* item = env->getItemByUID(popNumber(L)); if(!item) { errorEx(getError(LUA_ERROR_ITEM_NOT_FOUND)); lua_pushboolean(L, false); return 1; } uint32_t duration = (item->getDuration() / 1000); lua_pushnumber(L, duration); return 1; } Agora no arquivo luascript.h da source procure por: static int32_t luaGetItemWeight(lua_State* L); E adicione acima: static int32_t luaDoItemSetDuration(lua_State* L); static int32_t luaGetItemDurationTime(lua_State* L); Pronto, agora basta compilar e ambas as funções irão estar prontas para serem usadas.
  5. 1 point
    Nolis

    Gerenciador de Quests [TFS 0.X e TFS 1.X]

    Obrigado @Movie O tópico ficou tão bonito e organizado que eu consegui ler o código e entender 👍
  6. 1 point
    KevinLuzetti

    NPC Cassino

    Oi gente, eu estava procurando aqui um npc de aposta de 21 e achei no meio das minhas coisas vou disponibilizar pra vcs. Testado em 0.3.6 e 0.4 XML <?xml version="1.0"?> <npc name="Brian O'Conner" script="data/npc/scripts/dicer.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="Ola |PLAYERNAME|, quer {apostar} comigo? " /> </parameters> </npc> LUA price_21 = 1000 -- 1k ou 1000gold price_jogo6 = 5000 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 function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid if(msgcontains(msg, 'apostar')) then selfSay('Eu faco 2 jogos: {21}, e jogo do {6}, escolha um deles!', cid) talkState[talkUser] = 5 elseif (msgcontains(msg, '6') and talkState[talkUser] == 5) then selfSay('O Jogo do 6 funciona assim: Eu vou rodar um dado, e se cair no numero 6 voce ganha o sextuplo (6 vezes) do valor apostado.', cid) selfSay('Caso nao caia no 6, voce perde apenas o dinheiro da aposta.', cid) selfSay('Esta pronto para {comecar}?.', cid) talkState[talkUser] = 3 elseif(msgcontains(msg, 'comecar') and talkState[talkUser] == 3) then selfSay('Voce possui o {dinheiro} da aposta ('..price_jogo6..')golds ?', cid) if doPlayerRemoveMoney(cid, price_jogo6) == TRUE then talkState[talkUser] = 2 else selfSay('Desculpe, mais voce nao tem dinheiro para apostar comigo.',cid) end elseif(msgcontains(msg, 'dinheiro') and talkState[talkUser] == 2) then sorteio6 = math.random(1,6) if sorteio6 == 6 then talkState[talkUser] = 3 selfSay('Parabens, o numero sorteado foi 6 e voce acaba de ganhar '..(price_jogo6*6) ..'golds, mais o dinheiro que voce pagou da aposta.',cid) doPlayerAddMoney(cid,price_jogo6*6) else talkState[talkUser] = 2 selfSay('Que azar, o numero sorteado foi '..sorteio6..', mais sorte na proxima.',cid) end elseif(msgcontains(msg, '21') and talkState[talkUser] == 5) then selfSay('O 21 funciona assim: Voce ira ganhar 1 numero e o numero tem quer ser 21, ou chegar o mais proximo possivel sem ultrapassar esse valor.', cid) selfSay('E a mesma coisa sera feita comigo, ganharei 1 numero.', cid) selfSay('Voce pode ir comprando mais numeros dizendo {comprar} e se quiser parar e so dizer {parar}.', cid) selfSay('Se voce ganhar de mim, voce leva o triplo do dinheiro apostado.', cid) selfSay('Esta pronto para {comecar}?.', cid) talkState[talkUser] = 0 elseif(msgcontains(msg, 'comecar') and talkState[talkUser] == 0) then selfSay('Voce possui o {dinheiro} da aposta ('..price_21..')golds ?', cid) talkState[talkUser] = 1 elseif(msgcontains(msg, 'dinheiro') and talkState[talkUser] == 1) then if doPlayerRemoveMoney(cid, price_21) == TRUE then talkState[talkUser] = 0 local mpn = math.random(1,21) setPlayerStorageValue(cid, 55411,mpn) local pn = getPlayerStorageValue(cid, 55411) selfSay('Seu numero e '..pn..', quer comprar mais ou parar?',cid) else selfSay('Desculpe, mais voce nao tem dinheiro para apostar comigo.',cid) end elseif(msgcontains(msg, 'comprar') and talkState[talkUser] == 0) then local cp = math.random(1,10) setPlayerStorageValue(cid, 55411, (getPlayerStorageValue(cid, 55411))+cp) selfSay('Seu numero e '..getPlayerStorageValue(cid, 55411)..', quer comprar mais ou parar?',cid) talkState[talkUser] = 0 elseif(msgcontains(msg, 'parar') and talkState[talkUser] == 0) then local npcn = math.random(1,21) setPlayerStorageValue(cid, 2224, npcn) if getPlayerStorageValue(cid, 55411) < getPlayerStorageValue(cid, 2224) then selfSay('Meu numero e '..getPlayerStorageValue(cid, 2224)..'.',cid) selfSay('Seu numero final e '..getPlayerStorageValue(cid, 55411)..'.',cid) selfSay('Ganhei, mais sorte na proxima vez.',cid) talkState[talkUser] = 1 elseif getPlayerStorageValue(cid, 55411) == getPlayerStorageValue(cid, 2224) then selfSay('Meu numero e '..getPlayerStorageValue(cid, 2224)..'.',cid) selfSay('Seu numero final e '..getPlayerStorageValue(cid, 55411)..'.',cid) selfSay('Empato, portanto ninguem ganha nada.',cid) talkState[talkUser] = 1 elseif getPlayerStorageValue(cid, 55411) > getPlayerStorageValue(cid, 2224) and getPlayerStorageValue(cid, 55411) <= 21 then selfSay('Meu numero e '..getPlayerStorageValue(cid, 2224)..'.',cid) selfSay('Seu numero final e '..getPlayerStorageValue(cid, 55411)..'.',cid) local somag = (price_21*3) selfSay('Voce ganhou '..somag..'golds, mais os seus '..price_21..'golds de volta. Parabens !!!',cid) doPlayerAddMoney(cid, somag) doPlayerAddMoney(cid, price_21) talkState[talkUser] = 1 else selfSay('Você tirou um numero maior que 21, então você perdeu.',cid) end end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
  7. 1 point
    Cjaker

    Anti Map-Tracker [8.54 & 8.60]

    Heyo, desenvolvi uma proteção básica pra evitar que roubem seu mapa em servidores 8.54 e 8.60. Lembrando que é bastante simples e pessoas com conhecimento médio à avançado conseguem entender a lógica e atualizar um map tracker. Se caso muitos precisarem e/ou gostarem deste conteúdo, irei trazer uma versão com proteção mais forte, mas será incluso uma .dll [Tudo foi testado em cima do 8.54 e 8.60 usando as sources do OTX2] [Download] TibiaAntiMapTrackPatcher.exe [Scan] https://www.virustotal.com/gui/file/316f854a845705ec10be8b148e400e593602d697c836479bfa65cd5839387a42/detection [Tutorial] => Cliente: baixe o software no tópico, arraste o seu executável do Tibia (8.6 ou 8.54) no .exe do software, quando der a mensagem 'Done.' será gerado um arquivo na mesma pasta chamado 'Tibia_output.exe' ele é seu novo Cliente 'protegido'. => Servidor (OTX2 8.60) (https://github.com/mattyx14/otxserver/blob/otxserv2/sources/protocolgame.cpp) Abra o arquivo protocolgame.cpp na source do seu servidor, procure por: msg->addByte(0x6D); Abaixo terá essa linha: msg->addPosition(oldPos); Substitua por: msg->add<uint32_t>(oldPos.x); msg->add<uint16_t>(oldPos.y); msg->addByte(oldPos.z); Obs: vai pesquisando e substituindo todos que encontrar! Procure por: msg->addByte(0x64); msg->addPosition(player->getPosition()); Substitua por: msg->addByte(0x64); Position playerPosition = player->getPosition(); msg->add<uint32_t>(playerPosition.x); msg->add<uint16_t>(playerPosition.y); msg->addByte(playerPosition.z); Bom, após tudo isso compile o servidor e estará com um 'anti-track' ativo, assim o map tracker padrão não conseguirá interpretar o mapa evitando que possa ser 'trackeado'.
  8. 1 point
    Kevin Araujo

    [COMPRO] BASE NTO

    Salve galerinha, vim aqui hoje pra perguntar se tem alguém que tenha uma base boa pra vender, algo já formado que já dê pra por online, sem bugs ou erros. Caso tenha e queira negociar, entra em contato comigo aqui no privado que iremos desenrolar! E ainda darei REP+ (OBS: Não sei se está no local certo, caso não, mova por favor, obrigado!)
  9. 1 point
    Witchmaker

    [DOAÇÃO] Client Nto Infinity

    Fala galera do TK, como vão? Então, estou compartilhando com vocês o acervo de clients que tenho salvo no meu PC. Desse modo, encontrei o client antigo do Nto Infinity, que como de costume está sendo vendido e anunciado por mau caráteres. Bom uso, pessoal! Scan: https://www.virustotal.com/gui/file/0205e7820bfaa8e870a3b49e1892c0f83daf12d2ae8a35a536940b0506285352 Client Sprites:NTOInfinity.rar
  10. 1 point
    usa assim: https://pastebin.com/raw/zLdgfNNK
This leaderboard is set to Sao Paulo/GMT-03:00

Open Tibia Server

Quer aprender a criar seu próprio servidor de Tibia? Então está no lugar certo, aqui você encontrará milhares de tutorias, scripts, códigos, mapas e utilitários para que você possa fazer o seu próprio servidor de Tibia começando do zero.

Redes Sociais

Anuncie no Tibia King

Precisa de mais visibilidade em seus projetos? Quer fazer um plano publicitário para o seu servidor? Anuncie no Tibia King e faça sua divulgação, possuímos centenas de acessos simultâneos e milhares diários, com certeza será a sua solução!

Tibia King Recomenda

DokeHost - Soluções em Hospedagem

VPS Windows
VPS Linux
Servidor VPS
×
×
  • Create New...