Tudo que Mor3nao postou
-
(Resolvido)script pra explorar 100% do mapa
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
-
(Resolvido)script pra explorar 100% do mapa
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?
-
Automap
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
-
[Source] Sistema Anti-PVP / Open PVP
Eu usei no otbr,, mas acho q qualquer tfs 1.x funciona xD Qualquer coisa faz o backup mkk
-
Contador de Monstros
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 ?
-
ElfBot - Bypass auto-target
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
- Contador de Monstros
-
Implementação PicPay-Didático
Podia lançar um ensinando no myaac xD
-
[AJUDA] Npc Cassino
.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.
-
(Resolvido)(PEDIDO) Script para doll sumonar um boss aleatorio
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
-
(Resolvido)(PEDIDO) Script para doll sumonar um boss aleatorio
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
-
entender formula
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
-
[NPC] Sistema Daily
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
-
[NPC] Sistema Daily
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
-
Contador de Monstros
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):
-
pot exaustio
Só pegar isso aqui: setConditionParam(exhaust, CONDITION_PARAM_TICKS, (getConfigInfo('timeBetweenExActions') - 400)) E mudar por isso: setConditionParam(exhaust, CONDITION_PARAM_TICKS, 4000)
-
[NPC] Daily Task com 4 opções diarias.
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)
-
[novo] » Mapas do Nolis
Eita, só tenho uma coisa a dizer: B A C A N A
-
Pedido script confusion que inverte movimentos do adversário
Mas isso que vc tá pedidno não é o Drunk? que ja tem no tibia? ?
-
Não ganha Exp - Pvp-enforced
Bom, se 0.9 representa 90% do level dele, só vc por 0.000001 no primeiro, e no segundo, poe 10000 xD
-
Ajuda no Remeres - Função "Live"
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
-
(Resolvido)Bug task 4.0 vodkart
O negocio que eu mandei tem que ficar logo depois do function, no caso, seria antes do level = 5
-
(Resolvido)Bug task 4.0 vodkart
na primeira linha depois da function, poe isso aqui if not isPlayer(cid) then return true end
- [CreatureScript] Sugestão de balanceamento
-
Janela Popup Ao logar
Poe return true antes do ultimo end, esqueci dessa parte xD