Ir para conteúdo

Mor3nao

Membro
  • Registro em

  • Última visita

Tudo que Mor3nao postou

  1. Quando eu vi seu post, ja tinha deitado pra dormir, qd acordei o meu tinha terminado, entao nao cheguei a testar esse que vc mandou, mas futuramente eu devo voltar a explorar o mapa pra atualizar e vejo, mas lendo aqui o script, nao sei se é tão vantajoso, esse meu tá meio que dividindo o mapa em colunas de 56 sqms, e vai explorando de y=0 até y = 15k, isso verificando todos os 16 andares, esse do cara parece q olha 1 andar por vez, talvez seja aí que a velocidade dá dferença kk
  2. Eu to montando um server, criei map proprio e tals aí queria q os clients ja viessem com o map full, se fosse ot client eu sei q ia ser facil, mas uso o tibia12, então a unica maneira q eu vi pra resolver seria explorar o mapa todo e guardar os arquivos do appdata. Aí fui ver maneiras de explorar todo o mapa, e fiz esse script: function onUse(player, item, fromPosition, target, toPosition, isHotkey) player:setStorageValue(7412589, (player:getStorageValue(7412589)+1)) local j = 1 addEvent(tpp, 1, j) end function tpp(j) local x = Creature("Morenao") i = x:getStorageValue(7412589) j = 1+j local b = Position(0, 0, 0) for k = 1, 16 do b = Position((i*7), (j*5), k-1) x:teleportTo(b) end for t = 1, 16 do b = Position((i*7)+14, (j*5), t-1) x:teleportTo(b) end for u = 1, 16 do b = Position((i*7)+28, (j*5), u-1) x:teleportTo(b) end for o = 1, 16 do b = Position((i*7)+42, (j*5), o-1) x:teleportTo(b) end for h = 1, 16 do b = Position((i*7)+56, (j*5), h-1) x:teleportTo(b) end if j >= 3000 then x:setStorageValue(7412589, (x:getStorageValue(7412589)+5)) j = 1 addEvent(tpp, 1, j) else addEvent(tpp, 1, j) end end A ideia dele é simples, ele vai teleportando meu boneco em todos os sqms possiveis, porém, ele explora em colunas, de 56sqms cada, meu mapa tá 15x20k, e isso tá demorando uma eternidade, 3:30h explorei uns 13% só, será q tem algum método mais "inteligente" de fazer isso?
  3. Você pode explorar seu mapa inteiro, pegar sua pasta do mini map e criar um instalador pra instalar ela.. na net tem muito tutorial de como criar o instalador xD
  4. Mor3nao postou uma resposta no tópico em Códigos C++
    Eu usei no otbr,, mas acho q qualquer tfs 1.x funciona xD Qualquer coisa faz o backup mkk
  5. Eu "adaptei" de uma talkaction, q provavelmente foi copiada desse ai, pq é MUITO parecido kk Quanto a essa questao de fazer levar mais tempo pra abrir, eu nao tinha parado pra pensar nisso, tipo, meu map é pequeno, tem 12k de respawn, entao n pesa muito, ñ consigo ver diferente, mas um bom ponto, vou avaliar e mudar ?
  6. Mor3nao postou uma resposta no tópico em ElfBot NG
    kkk o bom é q tá o seu post de como burlar o anti auto target do lado de um post ensinando como colocar o anti auto target haha
  7. Então, eu comecei a contar 1 a 1, mas ficava um trabalho inviavel kk ai fiz o sistema de task bem "restrito", poucos monstros, dps q fiz esse sistema, automatizei, e agora TODOS os monstros do server estão no meu sistema de task, e proporcional a quantidade disponiveis no sv xD
  8. Podia lançar um ensinando no myaac xD
  9. .Qual servidor ou website você utiliza como base? Qual o motivo deste tópico? Eu tenho um npc cassino, e queria saber se tem como colocar pra ele atender o player pelo default, e nao pelo npc chat, só pra dar uma emoção.. plateia e tal Você tem o código disponível? Se tiver publique-o aqui: local config = { bet = { min = 10, win = 160, -- 160% high/low winNum = 500, -- 300% numbers }, playerPosition = Position(5021, 5017, 7), -- player must stay on this position to talk with npc dicerCounter = Position(5022, 5018, 7), -- counter position } local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) 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() local tile = Tile(config.playerPosition) if tile then local player = tile:getTopCreature() if not player then npcHandler.focuses = {} npcHandler:updateFocus() end end end local function getCoinValue(id) if id == 2160 then return 10000 elseif id == 2152 then return 100 elseif id == 2148 then return 1 end return 0 end local function getBetValue() local value = 0 local tile = Tile(config.dicerCounter) if tile then local items = tile:getItems() if not items or #items == 0 then return 0 end local tempMoney = {} for _, item in pairs(items) do if table.contains({2160, 2152, 2148}, item:getId()) then value = value + getCoinValue(item:getId()) * item:getCount() tempMoney[#tempMoney + 1] = item end end if value >= config.bet.min then -- valid bet for _, item in pairs(tempMoney) do item:remove() end return value end end return nil end local function createMoney(money) local table = {} local currentMoney = money local crystals = math.floor(currentMoney / 10000) currentMoney = currentMoney - crystals * 10000 while crystals > 0 do local count = math.min(100, crystals) table[#table + 1] = {2160, count} crystals = crystals - count end local platinums = math.floor(currentMoney / 100) if platinums ~= 0 then table[#table + 1] = {2152, platinums} currentMoney = currentMoney - platinums * 100 end if currentMoney ~= 0 then table[#table + 1] = {2148, currentMoney} end return table end local function greetCallback(cid) local player = Player(cid) if player:getPosition() ~= config.playerPosition then npcHandler:say("If you want to play with me please come near me.", cid) return false end return true end local function creatureSayCallback(cid, type, msg) if not npcHandler:isFocused(cid) then return false end local player = Player(cid) if player:getPosition() ~= config.playerPosition then npcHandler:unGreet(cid) return false end local thisNpc = Npc(getNpcCid()) if table.contains({"low", "high", "h", "l", "1", "2", "3", "4", "5", "6"}, msg) then local bet = getBetValue() if not bet then npcHandler:say("Your bet is lower than the min {".. config.bet.min .."} bet.", cid) npcHandler.topic[cid] = 0 return true end local number = math.random(1, 6) thisNpc:say(thisNpc:getName() .. " rolled a ".. number .. ".", TALKTYPE_MONSTER_SAY) thisNpc:getPosition():sendMagicEffect(CONST_ME_CRAPS) if table.contains({"low", "l"}, msg) then if table.contains({1, 2, 3}, number) then local wonMoney = bet * (config.bet.win / 100) npcHandler:say("Congratulations, you won! Here's your (".. wonMoney ..") gold coins.", cid) config.dicerCounter:sendMagicEffect(math.random(29, 31)) for _, coin in pairs(createMoney(wonMoney)) do Game.createItem(coin[1], coin[2], config.dicerCounter) end else npcHandler:say("No luck this time, you lost.", cid) end elseif table.contains({"high", "h"}, msg) then if table.contains({4, 5, 6}, number) then local wonMoney = bet * (config.bet.win / 100) npcHandler:say("Congratulations, you won! Here's your (".. wonMoney ..") gold coins.", cid) config.dicerCounter:sendMagicEffect(math.random(29, 31)) for _, coin in pairs(createMoney(wonMoney)) do Game.createItem(coin[1], coin[2], config.dicerCounter) end else npcHandler:say("No luck this time, you lost.", cid) end elseif table.contains({"1", "2", "3", "4", "5", "6"}, msg) then if number == tonumber(msg) then local wonMoney = bet * (config.bet.winNum / 100) npcHandler:say("Congratulations, you won! Here's your (".. wonMoney ..") gold coins.", cid) config.dicerCounter:sendMagicEffect(math.random(29, 31)) for _, coin in pairs(createMoney(wonMoney)) do Game.createItem(coin[1], coin[2], config.dicerCounter) end else npcHandler:say("No luck this time, you lost.", cid) end end end return true end npcHandler:setMessage(MESSAGE_GREET, "Welcome to my cassino! I'm offering {high/low} and {numbers}, to start just put your {money} on {counter} and say {number} or {high/low}.") npcHandler:setMessage(MESSAGE_FAREWELL, 'Good bye.') npcHandler:setMessage(MESSAGE_WALKAWAY, 'Good bye.') npcHandler:setCallback(CALLBACK_GREET, greetCallback) npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui.
  10. Deu use em qual doll? o do id certo né? 2110 e reabriu o server/deu reload? se não, é pq seu tfs nao é 1.x, e esse só vai pra eles
  11. No actions.xml poe isso: <action itemid="2110" script="bossdoll.lua" /> No actions/scripts/bossdoll.lua poe: local bosses = { "Morgaroth", "Ferumbras", "Ghazbaran"} function onUse(player, item, fromPosition, target, toPosition, isHotkey) local boss = math.random(#bosses) local chosenBoss = bosses[boss] local bossSpawn = player:getPosition() -- Se quer q ele aparece em um lugar certo, só por a posição, se quer q aparece no lugar q tá o player, tira esse player:getPosition() e poe Position(0,0,0) player:say("O Boss "..chosenBoss.." vai aparecer em 3 segundos.", TALKTYPE_MONSTER_SAY) addEvent(spawnBooss, 3 * 1000, chosenBoss, bossSpawn) item:remove() end function spawnBooss(chosenBoss, bossSpawn) Game.createMonster(chosenBoss, bossSpawn, true, true) end E sobre otmanager, lê isso aqui >>>> LINK
  12. isso é muito simples kk nao deve ter prestado atenção tem o dano min e max, se o player tem lvl 22 e ml 30, o dano minimo é: min = -(level * 7.28 + maglevel * 7.48) * 7.4 = -(22 * 7.28 + 30* 7.48) * 7.4 = -(160.16+224.4)*7.4 = - (384.56)*7.4 = -2845,7 = -2846 e o dano max é : max = -(level * 8.34 + maglevel * 8.34) * 8.4 = -(22*8.34 + 30*8.34)*8.4 = -(183.48 + 250.2)*8.4 = -(433.68)*8.4 = -3642,912 = -3643 Então a média de dano desse player com essa magia vai ser (-2846-3643)/2 = 6489/2 = 3244 Basicamente, o level*8.34 significa que a cada lvl q vc tiver, vc aumenta o dano em 8,34. e o maglevel*7.48 significa que pra cada 1 de ml q vc iver vai aumentar o dano em 7.48 Mas, se vc quer balancear, muda o *7.4 e o *8.4 do final, aument se vc quer mais dano, e diminui se quer menos xD @joaovitorbk9 Esse negocio do magmultiplier, multiplica TODO dano vindo de magias tudo tudo, nao é bom mexer por lá nao, fica mais facil de vc padroniazr pela propria spell
  13. Bom, vi pelo que eu vi, o problema tá aqui setPlayerStorageValue(cid, 5019, -1) exhaustion.set(cid, storage, 86402) Tipo, pra vc dar outra task, a storage 5019 tem q valer exatamente -1, aqui: if getPlayerStorageValue(cid, storage) == -1 then selfSay("Otimo, so volte quando voce matar o Bowser 35x.", cid) Aí se vc seta ele com um "temporizador" ele n vai parar em -1 entao vai ter q declarar uma storage difente pra ser o timer xD Vou tentar editar esse negocio do Exahustion, mas nao sei se vai dar certo, pq nao entendo de 0.4 kk mas pelo menos o problema eu ja te contei ? -- Edited Thony -- 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 storage = 5019 local exauststorage = 49382472 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, "sim") then if exhaustion.check(cid, exauststorage) > 0 then local time = exhaustion.get(cid, exauststorage) local hours, minutes, seconds = math.floor (time / 3600), math.floor ((time - ((math.floor (time / 3600)) * 3600))/ 60), time - ((math.floor (time/60)) * 60) if time >= 3600 then text = hours.." "..(hours > 1 and "horas" or "hora")..", "..minutes.." "..(minutes > 1 and "minutos" or "minuto").." e "..seconds.." "..(seconds > 1 and "segundos" or "segundo") elseif time >= 120 then text = minutes.." "..(minutes > 1 and "minutos" or "minuto").." and "..seconds.." "..(seconds > 1 and "segundos" or "segundo") else text = seconds.." "..(seconds > 1 and "segundos" or "segundo") end selfSay("Voce Ja Fez A Missao De Hoje Espere "..text.." Completa Denovo.", cid) elseif getPlayerStorageValue(cid, storage) ~= 1 then selfSay("Voce Tem Um Missao Diaria De Matar 35x Bowser, voce aceita?", cid) talkState[talkUser] = 1 elseif getPlayerStorageValue(cid, storage) == 1 then selfSay("Voce matou os 35x o Bowser?", cid) talkState[talkUser] = 1 end elseif msgcontains(msg, "yes") and talkState[talkUser] == 1 then if getPlayerStorageValue(cid, storage) == -1 then selfSay("Otimo, so volte quando voce matar o Bowser 35x.", cid) setPlayerStorageValue(cid, storage, 1) else if getPlayerStorageValue(cid, 19019) == 35 then selfSay("Obrigado, aqui esta sua recompensa.", cid) doPlayerAddItem(cid, 13539, 300) doPlayerAddExp(cid, 200000000) setPlayerStorageValue(cid, 19019, -1) setPlayerStorageValue(cid, 5019, -1) exhaustion.set(cid, exauststorage, 86402) else selfSay("Voce ainda nao matou os Bowsers.", cid) end end talkState[talkUser] = 0 elseif msgcontains(msg, "no") and talkState[talkUser] == 1 then selfSay("Ok then.", cid) talkState[talkUser] = 0 end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) E só me conta, vc tem um PokeMario? pra ter o Bowser? ahahha
  14. Eu acho que o erro não tá nessa parte do npc, deve estar em algo do creaturescript, posta ai que a gente vê, mas, se preferir, postei ontem um sistema de daily task, as vezes fica até melhor que esse ? link > [NPC] Daily Task ~~ Daily Task com 4 opções diarias
  15. Isso aqui eu to postando como uma extensão de um sistema de daily task que postei ontem, você pode ver ele aqui --> LINK É um script simples, q tem como função contar quantos de cada monstro tem no servidor, bem util pra quem vai fazer algum sistema de tasks, afinal, é bem complicado vc escolher quantos monstros alguém vai ter q matar, se vc nao sabe quantos tem, fica dificil mensurar a dificuldade de determinada task, então fiz esse script que cria um arquivo contando exatamente quantos de cada monstro tem xD Vou ensinar colocar ele, focando no meu sistema de daily tasks, mas caso queira usar pra outra finalidade, a vontade :} Como "instalar" o script: 1 - Vá em /data/globalevents/globalevents.xml e adicione a tag: <globalevent name="MonsterCount" type="startup" script="MonsterCount.lua" /> 2 - Em /data/globalevents/scripts crie o arquivo MonsterCount.lua e dentro dele escreva: E pronto! Com isso sempre que vc abrir o server ele vai contar quantos monstros tem, e atualiza-los se for o caso. Não precisa criar o arquivo .lua mas é preciso que o caminho(com as pastas) esteja feito, se quiser, pode mudar o diretorio tb, sem problemas. OBS: Mude o caminho pro seu spawn.xml!! +-+-+-+-+-+-+-+-+-+-+-+-+-+-+ DAQUI PRA BAIXO É SÓ PRA APLICAR NO MEU SISTEMA DE DAILY TASKS +-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Agora vou ensinar como aplicar isso no sistema de tasks que eu disse no inicio(Leia-o primeiro), é bem simples, vamos alterar o esquema, ao invés de escolhermos o numero maximo e minimo de cada task, vamos escolher a % max e minima, ex, as tasks easy que vao de 50 a 300 monstros, vai ficar como 50% e 300% da quantidade do monstro tal, Para entender: Se vc só tem 10 orcs no server, a task pode vir de 5 a 30 orcs, assim como se vc tiver 200, a task vem de 100 a 600 1. Pra colocar: Depois de vc ter colocado os scripts que mandei aí em cima, vc vai em /data/lib/lib.lua, e acrescente a linha: dofile('data/lib/task/monster_count.lua') *** Lembre-se de colocar essa linha ANTES dessa »»» dofile('data/lib/task/dailytask.lua') 2. Depois vá em data/lib/task/dailytask.lua e troque o arquivo por esse: Imagens de amostra: Na distrô: O arquivo criado, (note q ja vem em tabela, prontinho pra usar):
  16. Só pegar isso aqui: setConditionParam(exhaust, CONDITION_PARAM_TICKS, (getConfigInfo('timeBetweenExActions') - 400)) E mudar por isso: setConditionParam(exhaust, CONDITION_PARAM_TICKS, 4000)
  17. Introdução: Eu estava procurando um sistema de tasks diarias funcional, achei alguns, mas nenhum do jeito que eu queria, então eu fiz esse. Ele tá bem simples, porém funcional, aí vou postar uma "melhoria" dele e linkar AQUI << tá linkado, dá uma olhada lá ? Como funciona? Bom, eu me baseei no sistema de tasks do PxG onde você pode escolher entre tasks de diferentes niveis/dificuldades, no caso, este é possivel que vc escolha entre 4 opções, sendo elas de nivel "easy", "medium", "hard" e "expert", e tem até o server save para entregar. Como prêmios, coloquei: Quantidade aleatoria de XP, Quantidade fixa de um Item fixo e quantidade aleatoria de um(ou mais) item aleatorio. Como "instalar" o script: 1.1 Vá até /data/npc e crie o arquivo daily.xml, abra-o e coloque tudo isso lá dentro: 1.2 Vá até /data/npc/scripts e adicione o arquivo dailyTask.lua, e dentro dele coloque: 2.1 Em /data/lib/lib.lua, acrescente a linha: dofile('data/lib/task/dailytask.lua') 2.2 Crie o arquivo dailytask.lua em /data/lib/task/, e dentro coloque: 3.1 Em /data/creaturescript/creaturescripts.xml adicione a tag: <event type="kill" name="dailyTasks" script="dailyTasks.lua"/> 3.2 Registre o "dailyTasks" no seu login.lua 3.3 Crie o arquivo dailyTasks.lua em /data/creaturescript/scripts e coloque tudo isso dentro: Configurando o Script: Essas configurações estão no: /data/lib/task/dailytasks.lua Imagens de amostra: Escolhendo as tasks(A da direita é antes de save, e a da esquerda depois). Server Log contando quantos monstros foram mortos. Na bp normal os premios da primeira vez que eu fiz, na azul os premios da segunda (só pra mostrar que é aleatorio, um player não pode repetir a task)
  18. Mor3nao postou uma resposta no tópico em Mapping Show Off
    Eita, só tenho uma coisa a dizer: B A C A N A
  19. Mas isso que vc tá pedidno não é o Drunk? que ja tem no tibia? ?
  20. Bom, se 0.9 representa 90% do level dele, só vc por 0.000001 no primeiro, e no segundo, poe 10000 xD
  21. usa o site canyousee.me e vê se as portas estão realmente abertas.. Mesmo vc tendo aberto no teu roteador e no teu pc, tem algumas empresas de internet q tem portas no modem, aí pra vc abrir precisa ligar e falar com o suporte
  22. O negocio que eu mandei tem que ficar logo depois do function, no caso, seria antes do level = 5
  23. na primeira linha depois da function, poe isso aqui if not isPlayer(cid) then return true end
  24. É, esse final é pra fazer funcionar nos monstros, sem ele, só funciona pvp xD
  25. Poe return true antes do ultimo end, esqueci dessa parte xD

Informação Importante

Confirmação de Termo