Postado Fevereiro 25, 2016 9 anos Este é um post popular. Olá meus caros do Tibia King, hoje vim trazer pra vocês um sistema que bolei pra um concurso em outro fórum mas acabei ficando descontente e nunca cheguei a disponibilizar. Eu gostaria de agradecer inicialmente à três acontecimentos que sem eles não seriam possíveis a criação desse sistema. - A otlist obrigar que os servidores utilizem anti idle - Os mages do meu servidor reclamarem que não dava pra treinar ml nos trainers - Ao @Storm Night, que embora tenha me irritado muito nesse tópico aqui , botou a sementinha dessa idéia na minha cabeça. Explicação É a combinação de dois sistemas que eu ja havia feito, o primeiro escolhe entre todas as salas de treiner aquela que está vazia pra te alocar e o segundo te mantém alimentado e rodando pra simular o anti idle. (Nota: ele não impede o anti idle de fato, se vc quiser fazer isso vc vai precisar editar o script de anti idle que vc utiliza pra ignorar players com determinado storage e adicionar o storage no player quando ele entrar na sala e tirar ao sair.. mas não sei até que ponto isso pode provocar ban da OTservlist por isso decidi não ensinar isso aqui.) Sem mais delongas, talk is cheap, show me the code. Idéia Basicamente dá pra reduzir toda a idéia do código nessa foto aqui: Spoiler Você tem diversas salas com trainers nesse formato (pode ser em linha reta horizontal ou vertical tb, mas assim fica melhor distribuído). Você inclusive pode criar salas no meio do void de forma que a distancia de uma vc nao consiga ver a outra e vai ser uma experiencia muito amigável para o player ver que está treinando sozinho na paz. Ao entrar no tp ele te aloca na primeira sala vazia, se não houverem salas vazias ele retorna que não tem posições livres Instalação Você precisa criar as salinhas dos trainers equidistantemente, ou seja, tendo a mesma distância A em X e mesma distância B em Y. Sério, se vc errar nessa parte é porque vc não sabe oque significa equidistante. Vai pesquisar preguiçoso!! Já aviso que não vou dar suporte quanto à isso. Você vai precisar criar salas parecidas com isso daqui: Spoiler Perceba que não tem como ter acesso a essa sala, não tem como ser puxado pra fora do trainer, não tem dor de cabeça nenhuma e quando o player quiser sair ele só entra no tp e volta pro templo ou pra onde vc definir.Nesse teleport da sala vc adiciona o actionid 14877 e não bota nenhuma posição nele. Naquele tile que o player irá ficar que inclusive tem id diferente vc bota actionid 14878. Agora seleciona a area dessa sala no rme e vai copiando e colando percebendo sempre se vc tá criando as salas com mesma distância em X. Se o ponto inicial de uma sala é 140 e vc quer que todas tenham 12 sqm de distancia vc cria em 152, 164, 178.. por aí vai. Quando terminar as salas que quiser e tiver montado as linhas e colunas da forma que desejou, vc vai criar um tp principal pra alocar os players nessa sala: Lembrando que ele não deve ter posição no rme, vc só bota o actionID 14876 e deixa a toPos dele 0, 0, 0. Ele não tem q te teleportar pra nenhum lugar pois a posição será decidida por script. Se você fez tudo certo até agora vc deve ter algo +- assim: Spoiler O importante é manter a distancia certinha entre cada sala. Aí no caso eu fiz rX = 11 e rY = 8 (é a terceira ou quarta vez q eu to falando isso, se vcs errarem pqp eu vou ficar muito irritado); Vc não bota os trainers, e ali embaixo do spawn vc tem que botar um outro obstáculo pra impedir que o player ande pra baixo e dê a sala como livre. Feito isso só adicionar os scripts abaixo: movements.xml <movevent type="StepIn" actionid="14876" event="script" value="trainertp.lua"/> <movevent type="StepIn" actionid="14877" event="script" value="trainertp2.lua"/> <movevent type="StepIn" actionid="14878" event="script" value="foodtrainer.lua"/> movements/scripts/trainertp.lua: Spoiler local position = {x = 156, y = 45, z = 6} -- posicao da primeira pos (linha 1 coluna 1) local config = { distX= 12, -- distancia em X entre cada sala (de uma mesma linha) distY= 9, -- distancia em Y entre cada sala (de uma mesma coluna) rX= 2, -- numero de colunas rY= 2 -- numero de linhas } local storage = 18481 -- storage que salva a ultima vez que o player entrou (pra evitar spams) local function isWalkable(pos, creature, proj, pz)-- by Nord -- só adicione se vc já não tiver ela if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end if getTopCreature(pos).uid > 0 and creature then return false end if getTileInfo(pos).protection and pz then return false, true end local n = not proj and 3 or 2 for i = 0, 255 do pos.stackpos = i local tile = getTileThingByPos(pos) if tile.itemid ~= 0 and not isCreature(tile.uid) then if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then return false end end end return true end local function check_disponivel(npos) if isWalkable(npos, true, true) then return true end return false end local function countdown(pos, Arraypos) if not check_disponivel(pos) then for lugares = 1, #Arraypos do creature = getTopCreature(Arraypos[lugares]).uid if not isCreature(creature)then doCreateMonster("Trainer", Arraypos[lugares]) doSendAnimatedText(Arraypos[lugares], "GO!!", TEXTCOLOR_ORANGE) doSendMagicEffect(Arraypos[lugares], 10) end end end end local function fazQualquerCoisa(cid, pos, i, j) -- isso é o coração do nosso script, nao mexa nisso j = j or 0 p = i or 0 if p >= config.rX then p = 0 j = j < config.rY -1 and j + 1 or false end if j then posi = {x = pos.x + ( p * config.distX), y = pos.y + (j * config.distY), z = pos.z} if check_disponivel(posi) then doTeleportThing(cid, posi) doSendMagicEffect(posi, 10) countdown(posi, {{x = posi.x - 1, y = posi.y + 1, z = posi.z}, {x = posi.x + 1 , y = posi.y + 1, z = posi.z}}) else fazQualquerCoisa(cid, pos, p + 1, j) end else doPlayerSendCancel(cid, "Couldn't find any position for you right now.") end end function onStepIn(cid, item, pos, lastPos, fromPos, toPos, actor) if getPlayerStorageValue(cid, storage) - os.time() <= 0 then fazQualquerCoisa(cid, position) else doTeleportThing(cid, fromPos) doPlayerSendCancel(cid, "You gotta wait a few seconds before you can enter trainning room again") end return true end movements/scripts/trainertp2.lua: Spoiler local npos = {x = 161, y = 50, z = 6} -- posição que ele vai ao sair da sala local storage = 18481 -- storage que salva a ultima vez que o player entrou (pra evitar spams) function onStepIn(cid, item, pos, lastPos, fromPos, toPos, actor) ArrayPos = {{x = fromPos.x - 1, y = fromPos.y + 1, z = fromPos.z}, {x = fromPos.x + 1 , y = fromPos.y + 1, z = fromPos.z}} for _, pos in ipairs(ArrayPos) do creature = getTopCreature(pos).uid if isMonster(creature)then doSendMagicEffect(getThingPos(creature), 14) doRemoveCreature(creature) end end doTeleportThing(cid, npos) doPlayerSetStorageValue(cid, storage, os.time() + 5) return true end movements/scripts/foodtrainer.lua: Spoiler local config = { eff = 12, -- efeito que sai food = 100, -- quanto de food vai dar (use 100 no maximo) timespin = 10 -- tempo pra dar uma volta (quanto menor mais checagens a função vai fazer e mais pesado vai ficar o sistema) } function helpTrainer(uid, pos) if not isPlayer(uid) then return false end look = getCreatureLookDirection(uid) look = look < 3 and look + 1 or 0 doCreatureSetLookDirection(uid, look) doSendMagicEffect(pos, config.eff) if getPlayerFood(uid) < config.food then doPlayerFeed(uid, config.food) doCreatureSay(uid, "+ Food", TALKTYPE_MONSTER) end addEvent(function() if isPlayer(uid) and getCreaturePosition(uid).x == pos.x and getCreaturePosition(uid).y == pos.y and getCreaturePosition(uid).z == pos.z then helpTrainer(uid, pos) end end, config.timespin * 1000) return true end function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor) helpTrainer(cid, position) return true end FIM, qualquer dúvida ou comentário ou sugestão coloquem abaixo. Se gostou REP+, se não gostou REP+ pq deu trabalho e vai ser útil pra alguém, mesmo que de estudo. Abraços do Lobo. E ao cara do outro fórum que ficou falando que ia dar erro e quis ficar me corrigindo e mandando scripts sem noção pra "mostrar" que sabia de lua: Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá! "Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda (obg ao @Beeny por fazer essa linda sign <3)
Postado Fevereiro 25, 2016 9 anos já vi algo parecido mas não era bem um script, e sim tudo feito a mao ai a pessoa só ia dandando > ate achar algum que não tinha gente, era meio cansativo mas foi uma boa ideia... sobre o script, to meio ocupado ultimamente mas achei bem interessante e pretendo testar/usar, obrigado por contribuir. Otimo trabalho :D Scriptszinhos: Spoiler [CREATURESCRIPT] Auto TP depois de matar boss [ACTION] Clean Area [TALKACTION] !FelizAnoNovo [ACTION + MOVEMENT] Cartas ao GOD [CREATURESCRIPT] Always Emblem System [ACTION] Anihi simples [TALKACTIONS] Urinar / fazer xixi Não abandone seu tópico, quando você tiver a dúvida resolvida sozinho tente ensinar aos outros como resolve-la (você pode não ser o único com o problema) e quando ela for resolvida por outra pessoa não se esqueça de marcar como melhor resposta e deixar o gostei.
Postado Fevereiro 25, 2016 9 anos 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 + ╔══════════════════════════ҳ̸Ҳ̸ҳஜ۩۞۩ஜҳ̸Ҳ̸ҳ══════════════════════════╗ Te Ajudei? Rep + e ficamos Quits Precisando de ajuda? Discord: Yan Liima #3702 Programador Júnior de LUA, PHP e JavaScript Juntos somos lendas, separados somos Mitos! ╚══════════════════════════ҳ̸Ҳ̸ҳஜ۩۞۩ஜҳ̸Ҳ̸ҳ═════════════════════════════╝
Postado Fevereiro 25, 2016 9 anos Autor eu tinha feito ele com algumas features a mais, antes qnd vc entrava no tp ele fazia um countdown pra te teleportar até a sala e ao entrar ele fazia um countdown de 3 segundos pra criar os npcs, ficou bem bonito esteticamente mas depois de alguns usos o player ficava de saco cheio de ter que esperar. Aí fiz assim, acabou que ficou bem legal e decidi compartilhar Fico feliz que vcs tenham curtido Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá! "Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda (obg ao @Beeny por fazer essa linda sign <3)
Postado Fevereiro 26, 2016 9 anos Iae Wolf u.u então o scrip ficou sensacional, é obvio q eu pretendo utilizá-lo (mesmo tendo uma gambiarra no meu ot q adiciona e tira o trainer quando entra e sai da sala).. Vc fez minha gambiarra parecer um brinquedo infantil '-' Enfim, logo menos eu volto pra dar umas ideias loucas pra esse script ai t.t
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.