Ir para conteúdo

Weslley Kiyo

Membro
  • Registro em

  • Última visita

Tudo que Weslley Kiyo postou

  1. Não queremos lucros mas queremos ter um servidor com players online, sendo assim vamos anunciar de todas as formas possíveis para ter um servidor com uma quantidade de players significativamente dentro dos padrões de um Global (100~300). Possuem jogadores que preferem servidores easy e outros que preferem hard. Se não o medivia, megatibia, underwar estavam todos vazios. Se um servidor for bem feito, mostrar confiabilidade, ele pode sim ir para frente e fazer sucesso Obrigado!
  2. Global Tracked Tibia Map (v8.60) - Edited by Subyth Mapa sendo editado pelo nosso querido Mapper, Subyth! Equipe: Subyth - Mapper Raniere - Rpz, faz nada ele EHUEHUEHUE Weslley Estamos a procura de Scripter para ajudar com os npcs de quests do global. Eu estou trabalhando nos scripts sozinho e para um servidor global, fazer tudo isso do zero é cansativo Conseguiram me ajudar com o npc Oracle e agora o NPC oracle, ao sair de rook envia aos players um parcel com kit inicial (apenas arma) para ajudar no começo de sua jornada OBS: Nosso amigo Subyth levou cerca de 5 dias para adicionar as houses no global. O motivo disso é que no tracked, as houses não existiam portanto ele teve que adicionar 1 por 1 hEUHEUHEU O problema que o RME que ele usa seta uma door ID para janela fazendo o servidor achar que as janelas também eram portas, isso fez com que ele tivesse que refazer tudo. Ele já estava na 6/13 cidade HEUHEUHEUHEUHEUHE Mas já está tudo concluído, faltam apenas as quests
  3. WTFFF? Oia os pedidos dos cara vey hEUIHWEUIHWIUEHWIUEHIUWEHIUWEhEUIHWEUIHWIUEHWIUEHIUWEHIUWEhEUIHWEUIHWIUEHWIUEHIUWEHIUWEhEUIHWEUIHWIUEHWIUEHIUWEHIUWEhEUIHWEUIHWIUEHWIUEHIUWEHIUWEhEUIHWEUIHWIUEHWIUEHIUWEHIUWE
  4. Bem, estou desenvolvendo um global do 'zero', tanto o mapa quanto npcs e quests. Servidor já está 50%, porém estou com uma dúvida quanto ao cliente e gostaria que a comunidade pudesse me ajudar. Por favor, votem e comentem, obrigado. Lembrando: O Otclient haverá um launcher e spriters próprias para melhoria. E muitas coisas próprias também mas sem fugir da ideia de um servidor global. Exemplo: Se usarmos Otclient, vou fazer um update para 870 e se você estiver usando uma montaria, ao sofrer qualquer dano, vc automaticamente sai da montaria. (Para evitar PvPs em cima de montarias, que é algo estranho. Com otclient, podemos adicionar todas as montarias do tibia, monstros e outfits que tenham suporte para o mapa global da versão 8.60
  5. Weslley Kiyo postou uma resposta no tópico em Playground (Off-topic)
    EOQ
  6. Weslley Kiyo postou uma resposta no tópico em Playground (Off-topic)
    Estão roubando emoticons do Whats né HUEHEUHEUHEUHEUE
  7. Weslley Kiyo postou uma resposta no tópico em Playground (Off-topic)
    Xv... Procurar: Zw '-' só vai linda
  8. Weslley Kiyo postou uma resposta no tópico em Playground (Off-topic)
    Vão dormir e pensem em mim na cama quando abraçarem seus travesseiros '-'
  9. Apenas no que estou testando (rat). Todos os outros nos quais não adicionei ficam com level 1. Coloquei a tag em baixo de HP
  10. Sim... Ao iniciar o servidor, todos os monstros, podem ser leveis diferentes, eles ficam com o mesmo hp de um level 1. Porém ao matar ele que começa a funcionar normal o script =/ OBS: Você também duplicou o std::string name, nameDescription; em monster.h
  11. Até funcionou. Porém mesmo ele sendo lvl 1 ou 10000, o hp dele é como se fosse level 1, após matar ele pela primeira vez, ao resurgir que ele vem com hp/dano/def modificados pelo level.
  12. Ainnn adoro cabra machoo *-* HEUEHUE Acho que tamo violando as regras, mas é por amor
  13. Nudes? HEUEHUEHUE
  14. Troca if type == STATSCHANGE_HEALTHLOSS and isPlayer(cid) and isCreature(attacker) then Por essa if type == STATSCHANGE_HEALTHLOSS or STATSCHANGE_MANALOSS and isPlayer(cid) and isCreature(attacker) then
  15. Versão testada: OtX 8.60 (tfs 0.3.7) - Funciona facilmente em tfs 0.4 Você clica em um item (pode ser placa, bau ou qualquer outra coisa) e ganha x.quant de y.item. E só pode clicar novamente depois de z.tempo. OBS: O script não usa Ontimer, portanto está livre de erros, lags ou qualquer outro problema relacionado a kick~logout! function onUse(cid, item, item2, topos, frompos) local config = { time = 30, -- Tempo em minutos para usar novamente level = 2, -- Level minimo para dar USE e receber o item storage = 42007, -- Não Altere Isso (storage, apenas se souber) efeito = 28 -- Efeito que vai sair } if getPlayerLevel(cid) <= config.level then return doPlayerSendCancel(cid, "You do not have enough level to use this.") end if getPlayerStorageValue(cid, config.storage) > os.time() then local minutes = (math.ceil((getPlayerStorageValue(cid, config.storage) - os.time())/60)) local s = (math.ceil(((getPlayerStorageValue(cid, config.storage) - os.time())/60)) == 1 and "" or "s") return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Wait ".. minutes .." minute".. s .." to use again.") end pos = getThingPos(cid) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You received 5 spear.") doSendMagicEffect(pos, config.efeito) setPlayerStorageValue(cid, config.storage, config.time * 60 + os.time()) doPlayerAddItem(cid, 2389, 5) return true end Agora em action.xml <action actionid="42007" event="script" value="EOQQ.lua"/> Acho que não preciso explicar como configura né rsrs
  16. Fiquei com vontade de tomar SUCO ?! HEUHEUHEU VODK, será que da para colocar pra ele se transformar sem precisar matar ele? Tipo, ter uma chance de 10% para ele se transformar em outro bixo caso seja atacado apenas? Ex: Ao tirar 1 de dano, ele vai ter chance de se transformar, caso não se transforme, ele não pode mais se transformar. Nesse caso, o script só roda 1x por monstro atacado, se é que me entende k
  17. Versão é 0.4 né?! Então, que tal um sistema de Endless Tower, ou como preferir chamar, monster's arena! The Endless Tower é basicamente uma torre com um conjunto cada vez mais difícil de desafios. As partes participantes fazem o seu caminho até a torre de 100 andares, com um encontro de chefes especiais a cada 10 andares e um boss épico no 100° andar. Essas batalhas funcionam com os jogadores sendo obrigados a derrotar todos os monstros em um determinado andar antes de passar para o próxima WAVE. Uma vez na sala, os jogadores são incapazes de retroceder; Assim, as únicas maneiras de deixar a torre são morrer ou finalizar. OBS: Se morrer, não perde nada, apenas é teleportado para fora do evento. Não há limitações de uso de item! Você pode entrar no evento SOLO ou com seus amigos. Para entrar com amigos, eles precisam estar na mesma PT que você e na sala de partida - Limite máximo de players dentro do evento configurável. - Para entrar no evento, basta falar com o NPC (apenas o líder da PT pode falar com o NPC para todos serem teleportados para dentro) - Se outro player/time já estiver fazendo, o NPC avisa que já possui players fazendo o evento. - O player só poderá fazer o evento 1x por dia (se tentar novamente, o NPC avisa que X player não pode entrar pois já fez no dia) As recompensas variam por wave. Como são 100 waves então fiz como exemplo: 1 à 10 = 1k grana 11 à 20 = 2k grana 21 à 30 = 3k grana .... 91 à 100 = 100k grana + troféu O npc terá as seguintes funções: - Poder teleportar 1 player ou time com PT para a torre - NPC pode informar o jogador quanto tempo falta para ele poder entrar no evento - NPC pode mostrar um ranking em janela com uma lista de top players que chegaram mais longe (Se possível, caso seja um TIME em PT, você pode setar um nome para esse time no npc. Assim ficaria mais fácil para mostrar uma lista de Times no ranking onde foram mais longe e a galera iria curtir) O evento precisa ter as seguintes funções: - Da wave 1 à 10, player tem apenas 1 minuto para finalizar cada wave, ou será posto para fora do evento. - Da wave 11 à 30, player tem apenas 3 minutos para finalizar cada wave, ou será posto para fora do evento. .... - Cada wave, os players tem 15 segundos para se prepararem, após isso a wave começa. - A próxima wave só começa quando todos os monstros estiverem mortos da wave em andamento. - A cada wave, maiores quantidades de monstros podem vir (se possível, pode ser até aleatório a quantidade de monstros EX: wave 1 à 10, pode variar entre 20 à 40 monstros) - Os monstros na wave aparecem todos ao mesmo tempo ou se preferir, 5 a cada segundo até completar o ciclo Bem, acho que é isso, creio que pode melhorar muito mais, fiz nas presas rsrs
  18. Bem, se conseguirem arrumar este npc. Creio que seria um ótimo The Oracle pois ele pode enviar os itens iniciais para o dp: Um outro dia enviei uma MsG para o vodka com uma ideia... Ele não respondeu mais deve ter visto Também dei uma ideia de deixar a Task 4.0 apenas como uma diária, com pontos para ganhar bônus ou resetar a lista de monstro Ele disse que poderia fazer porém estava sem tempo por conta de projetos.
  19. Weslley Kiyo postou uma resposta no tópico em Suporte Tibia OTServer
    Versão: Otx 2.8 (8.60 tfs 0.3.7) Está dando erro no executável porém não sei como resolver =/ [Warning - The Oracle] NpcSystem: oracle - Call without any npcHandler instance. O Npc não teleporta o player e fica repetindo a cidade para escolher. Estou utilizando esse script (pois pelas config, ele envia os itens para o Depot do personagem):
  20. Testa esse aqui OBS: é um mod! <?xml version="1.0" encoding="UTF-8"?> <mod name="Paintball event" version="1.0" author="Bogart" contact="otland.net" enabled="yes"> <description> </description> <config name="config"><![CDATA[ t = { main = { tfs_version = "0.3", --0.3 or 0.4 positions = { paintball_spawn_area = { top_left = {x = 970, y = 1040, z = 4}, --Top left pos of spawning area bottom_right = {x = 975, y = 1046, z = 7}--bottom right pos of spawning area }, waiting_room_area = { top_left = {x = 970, y = 1040, z = 7}, --Top left pos of the waiting room bottom_right = {x = 975, y = 1046, z = 7}--bottom right pos of the waiting room }, tp_to_paintball = {x = 985, y = 1052, z = 7}, --pos where the tp will be created event_ending_pos = {x = 985, y = 1052, z = 7} --pos players will be sent after event ending }, storages = { exhaust = 2455, is_in_event = 2460, score = 2465 }, misc = { status = 'on' }, messages = { event_started = "Paintball event has started! there's a teleport near Thais temple!",--Message that will be broadcasted after the event has started event_ended = "Paintball event has ended!" --same but when event ends }, event_config = { event_duration = 15, --minutes, 0 if it's an always-open event infinite_ammo = false, winner_gets_item = true, prize_item_id = 3051, decrease_score_on_death = true, points_per_kill = 1, randomize_player_start_pos = true, ammo_per_point = 100, reset_bullets_on_death = true, min_bullets_on_spawn = 100, start_automatically = false, use_waiting_room = false, waiting_time = 3 --minutes } }, onShoot = { storages = { ammo = 2400 }, misc = { walls_id = {1115,1111,1112,5258,1385,1113}, bullets_exhaust = 500, --in ms bullet_speed = 150 }, vars = { shootdir = 0 } } } ]]></config> <movevent type="StepIn" actionid ="2880" event="script"><![CDATA[ domodlib('config') function onStepIn(cid, item, pos) local t_l = t.main.positions.paintball_spawn_area.top_left local b_r = t.main.positions.paintball_spawn_area.bottom_right doTeleportThing(cid, {x=math.random(t_l.x,b_r.x), y=math.random(t_l.y, b_r.y), z=math.random(t_l.z, b_r.z)}) doPlayerSetStorageValue(cid, t.main.storages.is_in_event,1) doPlayerSetStorageValue(cid, t.onShoot.storages.ammo, t.main.event_config.min_bullets_on_spawn) doPlayerSetStorageValue(cid, t.main.storages.score, 0) doPlayerSendTextMessage(cid,27,"Welcome to paintball, here are the commands:\n!shoot bullet --This will shot a bullet.\n!shoot ammo --This will give you "..t.main.event_config.ammo_per_point.." bullets and take 1 point from your current score (you need at least 1 point to use this command).\n!shoot info --This will show you your current score and ammo, it'll also show the current high score of the event.\nIt is strongly recommended that you bind these commands to your hotkeys.") end ]]></movevent> <globalevent name="StartPaintBall" interval="3600" event="script"><![CDATA[ domodlib('config') function onThink(interval, lastExecution, thinkInterval) if t.main.event_config.start_automatically then doBroadcastMessage(t.main.messages.event_started, MESSAGE_STATUS_WARNING) if t.main.event_config.use_waiting_room then addEvent(moveToEvent, t.main.event_config.waiting_time*1000*60) doCreateTeleport(1387,t.main.positions.waiting_room_area.top_left, t.main.positions.tp_to_paintball) else if t.main.tfs_version == "0.3" then doItemSetAttribute(doCreateItem(1387, t.main.positions.tp_to_paintball), "aid", 2880) else doSetItemActionId(doCreateItem(1387, t.main.positions.tp_to_paintball),2880) end if(t.main.event_config.event_duration > 0) then addEvent(endPaintball, t.main.event_config.event_duration*1000*60) end end end return true end function endPaintball() local score = {} if not t.main.event_config.use_waiting_room then doRemoveItem(getTileItemById(t.main.positions.tp_to_paintball,1387).uid) end for _, pid in ipairs(getPlayersOnline()) do if getPlayerStorageValue(pid, t.main.storages.is_in_event) > 0 then table.insert(score, {getCreatureName(pid), getPlayerStorageValue(pid, t.main.storages.score)}) doPlayerSetStorageValue(pid, t.main.storages.is_in_event, 0) doPlayerSetStorageValue(pid, t.main.storages.score, 0) doPlayerSetStorageValue(pid, t.onShoot.storages.ammo, 0) doTeleportThing(pid, t.main.positions.event_ending_pos) end end table.sort(score, function(a, b) return a[2] > b[2] end) if table.getn(score) > 0 then if t.main.event_config.winner_gets_item then for _, pid in ipairs(getPlayersOnline()) do if getCreatureName(pid) == score[1][1] then doPlayerAddItem(pid, t.main.event_config.prize_item_id) break end end end doBroadcastMessage("Paintball event has ended, "..score[1][1].." won paintball event with "..score[1][2].." points", MESSAGE_STATUS_WARNING) end end local t_l = t.main.positions.paintball_spawn_area.top_left local b_r = t.main.positions.paintball_spawn_area.bottom_right function moveToEvent() for _, pid in ipairs(getPlayersOnline()) do if isInRange(getCreaturePosition(pid), t.main.positions.waiting_room_area.top_left, t.main.positions.waiting_room_area.bottom_right) then doTeleportThing(pid, {x=math.random(t_l.x,b_r.x), y=math.random(t_l.y, b_r.y), z=math.random(t_l.z, b_r.z)}) doPlayerSetStorageValue(pid, t.main.storages.is_in_event,1) doPlayerSetStorageValue(pid, t.onShoot.storages.ammo, t.main.event_config.min_bullets_on_spawn) doPlayerSetStorageValue(pid, t.main.storages.score, 0) doPlayerSendTextMessage(pid,27,"Welcome to paintball, here are the commands:\n!shoot bullet --This will shot a bullet.\n!shoot ammo --This will give you "..t.main.event_config.ammo_per_point.." bullets and take 1 point from your current score (you need at least 1 point to use this command).\n!shoot info --This will show you your current score and ammo, it'll also show the current high score of the event.\nIt is strongly recommended that you bind these commands to your hotkeys.") end end doRemoveItem(getTileItemById(t.main.positions.tp_to_paintball,1387).uid) addEvent(endPaintball, t.main.event_config.event_duration*1000*60) end ]]></globalevent> <talkaction words="!shoot" event="script"><![CDATA[ domodlib('config') function onSay(cid, words, param, channel) local k = string.explode(param, ",") if(k[1] ~= nil) then if(string.upper(k[1]) == 'END') and getPlayerGroupId(cid) >= 3 then endPaintball() end if(string.upper(k[1]) == 'START') and getPlayerGroupId(cid) >= 3 then doBroadcastMessage(t.main.messages.event_started, MESSAGE_STATUS_WARNING) if t.main.event_config.use_waiting_room then addEvent(moveToEvent, t.main.event_config.waiting_time*1000*60) doCreateTeleport(1387,t.main.positions.waiting_room_area.top_left, t.main.positions.tp_to_paintball) else if t.main.tfs_version == "0.3" then doItemSetAttribute(doCreateItem(1387, t.main.positions.tp_to_paintball), "aid", 2880) else doSetItemActionId(doCreateItem(1387, t.main.positions.tp_to_paintball),2880) end if(t.main.event_config.event_duration > 0) then addEvent(endPaintball, t.main.event_config.event_duration*1000*60) end end end if(string.upper(k[1]) == 'INFO') then local score = {} local output = "You have " .. getPlayerStorageValue(cid, t.main.storages.score) .. " points.\nYou have "..getPlayerStorageValue(cid, t.onShoot.storages.ammo).." ammo left.\n------------------\nThe current high score in paintball is:\n" for _, pid in ipairs(getPlayersOnline()) do if getPlayerStorageValue(pid, t.main.storages.is_in_event) then table.insert(score, {getCreatureName(pid), getPlayerStorageValue(pid, t.main.storages.score)}) end end local lx = table.getn(score) if(lx > 3) then lx = 3 end table.sort(score, function(a, b) return a[2] > b[2] end) for k = 1,lx do output = output .. k..". "..score[k][1] .." [".. score[k][2] .."].\n" end doPlayerPopupFYI(cid, output) end if (string.upper(k[1]) == 'AMMO') then if(t.main.event_config.infinite_ammo) then doPlayerSendTextMessage(cid, 27, "Ammo is infinite, there's no need to buy more.") else if getPlayerStorageValue(cid, t.main.storages.score) > 0 then doPlayerSetStorageValue(cid, t.main.storages.score, getPlayerStorageValue(cid, t.main.storages.score)-1) doPlayerSetStorageValue(cid, t.onShoot.storages.ammo, getPlayerStorageValue(cid,t.onShoot.storages.ammo)+t.main.event_config.ammo_per_point) doPlayerSendTextMessage(cid, 27, "You have received " .. t.main.event_config.ammo_per_point .. " bullets and you have lost 1 score point.") doSendMagicEffect(getCreaturePosition(cid),4) else doPlayerSendTextMessage(cid, 27, "You do not have enough score points to buy ammo, you need ".. 1-(getPlayerStorageValue(cid, t.main.storages.score)).. " more.") end end end if (string.upper(k[1]) == 'BULLET') then if(getPlayerStorageValue(cid, t.main.storages.is_in_event) == 1) then if getPlayerStorageValue(cid, t.main.storages.exhaust) <= 1 then if(getPlayerStorageValue(cid, t.onShoot.storages.ammo) > 0) then if t.main.misc.status == 'on' then if(t.main.event_config.infinite_ammo == false) then doPlayerSetStorageValue(cid, t.onShoot.storages.ammo, getPlayerStorageValue(cid, t.onShoot.storages.ammo)-1) end doPlayerSetStorageValue(cid, t.main.storages.exhaust, 2) lineAnimation(getPlayerLookDirection(cid),getCreaturePosition(cid),12,cid,1,0,1,0,0,0,1,0) addEvent(doPlayerSetStorageValue,t.onShoot.misc.bullets_exhaust, cid, t.main.storages.exhaust,1) end else doPlayerSendCancel(cid, "You're out of ammo, exchange ammo for points with !shoot ammo or get killed for a recharge.") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) end else doPlayerSendCancel(cid, "Gun is on cooldown") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) end else doPlayerSendCancel(cid, "You need to be in the event.") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) end end end return true end function lineAnimation(lookDir,playerPos,effect,cid,fvar,fpos,ffound,fposV,fcheck,fvcid,floopCounter,fvpid, name) local var = fvar local pos = fpos local found = ffound local posV = fposV local check = fcheck local vcid = fvcid local loopCounter = floopCounter local vpid = fvpid local storage = t.main.storages.exhaust if var < 2 then vcid = cid end pos = playerPos if not isInWallArray(convert(lookDir,pos)) then--isInWallArray({x=convert(lookDir,pos).x, y=convert(lookDir,pos).y,z=convert(lookDir,pos).z}) then --isInArray(t.onShoot.misc.walls_id, getThingfromPos({x=convert(lookDir,pos).x, y=convert(lookDir,pos).y,z=convert(lookDir,pos).z, stackpos=0}).itemid) then doSendDistanceShoot(pos, convert(lookDir,pos),effect) pos = convert(lookDir,pos) var=var+1 posV = convertV(lookDir,playerPos) for _, pid in ipairs(getPlayersOnline()) do if (getCreaturePosition(pid).x == pos.x and getCreaturePosition(pid).y == pos.y and getCreaturePosition(pid).z == pos.z) then --if loopCounter > 2 then vpid = pid --end if (vpid ~= vcid) then if var > 2 then if (getCreaturePosition(pid).x == posV.x and getCreaturePosition(pid).y == posV.y and getCreaturePosition(pid).z == posV.z) then killPlayer(pid,pos,getCreatureName(vcid)) if (lookDir == 0) or (lookDir == 2) then var = 6 else var = 8 end end end killPlayer(pid,pos,vcid) if (lookDir == 0) or (lookDir == 2) then var = 6 else var = 8 end end end loopCounter = loopCounter +1 end if (lookDir == 0) or (lookDir == 2) then if var ~= 6 then addEvent(lineAnimation, t.onShoot.misc.bullet_speed, lookDir,pos,effect,nil,var,pos,found,posV,check,vcid,loopCounter,vpid) else var = 1 end else if var ~= 8 then addEvent(lineAnimation, t.onShoot.misc.bullet_speed, lookDir,pos,effect,nil,var,pos,found,posV,check,vcid,loopCounter,vpid) else var = 1 end end else doSendMagicEffect(convert(lookDir,pos),2) var = 1 end end local ret = {} function convert(lookDir,pos) local positions = { [0] = {x = pos.x, y = pos.y-1, z = pos.z}, [1] = {x = pos.x+1, y = pos.y, z = pos.z}, [2] = {x = pos.x, y = pos.y+1, z = pos.z}, [3] = {x = pos.x-1, y = pos.y, z = pos.z} } ret = positions[lookDir] return ret end local ret = {} function convertV(lookDir,pos) local positions = { [0] = {x = pos.x, y = pos.y+1, z = pos.z}, [1] = {x = pos.x-1, y = pos.y, z = pos.z}, [2] = {x = pos.x, y = pos.y-1, z = pos.z}, [3] = {x = pos.x+1, y = pos.y, z = pos.z} } ret = positions[lookDir] return ret end function killPlayer(cid,pos, killer) local t_l = t.main.positions.paintball_spawn_area.top_left local b_r = t.main.positions.paintball_spawn_area.bottom_right doTeleportThing(cid, {x=math.random(t_l.x,b_r.x), y=math.random(t_l.y, b_r.y), z=math.random(t_l.z, b_r.z)}) doSendMagicEffect(pos,2) doPlayerSendTextMessage(cid, 27, "You've been killed by "..getCreatureName(killer)..".") doPlayerSetStorageValue(killer, t.main.storages.score, getPlayerStorageValue(killer, t.main.storages.score)+t.main.event_config.points_per_kill) doPlayerSendTextMessage(killer, 27, "You've killed "..getCreatureName(cid)..".") doBroadcastMessage("[Event] Paintball: "..getCreatureName(killer).." has killed "..getCreatureName(cid)..".", MESSAGE_STATUS_WARNING) if t.main.event_config.decrease_score_on_death then doPlayerSetStorageValue(cid, t.main.storages.score, getPlayerStorageValue(cid, t.main.storages.score)-1) end if t.main.event_config.reset_bullets_on_death then doPlayerSetStorageValue(cid, t.onShoot.storages.ammo, t.main.event_config.min_bullets_on_spawn) end end function isInWallArray(pos) for k = 0, table.getn(t.onShoot.misc.walls_id) do if getTileItemById(pos, t.onShoot.misc.walls_id[k]).itemid == t.onShoot.misc.walls_id[k] then --this doesn't even make sense but tried other ways and it gave errors, so meh 2lazy2search return true end end return false end function endPaintball() local score = {} if not t.main.event_config.use_waiting_room then doRemoveItem(getTileItemById(t.main.positions.tp_to_paintball,1387).uid) end for _, pid in ipairs(getPlayersOnline()) do if getPlayerStorageValue(pid, t.main.storages.is_in_event) > 0 then table.insert(score, {getCreatureName(pid), getPlayerStorageValue(pid, t.main.storages.score)}) doPlayerSetStorageValue(pid, t.main.storages.is_in_event, 0) doPlayerSetStorageValue(pid, t.main.storages.score, 0) doPlayerSetStorageValue(pid, t.onShoot.storages.ammo, 0) doTeleportThing(pid, t.main.positions.event_ending_pos) end end table.sort(score, function(a, b) return a[2] > b[2] end) if table.getn(score) > 0 then if t.main.event_config.winner_gets_item then for _, pid in ipairs(getPlayersOnline()) do if getCreatureName(pid) == score[1][1] then doPlayerAddItem(pid, t.main.event_config.prize_item_id) break end end end doBroadcastMessage("Painball event has ended, "..score[1][1].." won paintball event with "..score[1][2].." points", MESSAGE_STATUS_WARNING) end end local t_l = t.main.positions.paintball_spawn_area.top_left local b_r = t.main.positions.paintball_spawn_area.bottom_right function moveToEvent() for _, pid in ipairs(getPlayersOnline()) do if isInRange(getCreaturePosition(pid), t.main.positions.waiting_room_area.top_left, t.main.positions.waiting_room_area.bottom_right) then doTeleportThing(pid, {x=math.random(t_l.x,b_r.x), y=math.random(t_l.y, b_r.y), z=math.random(t_l.z, b_r.z)}) doPlayerSetStorageValue(pid, t.main.storages.is_in_event,1) doPlayerSetStorageValue(pid, t.onShoot.storages.ammo, t.main.event_config.min_bullets_on_spawn) doPlayerSetStorageValue(pid, t.main.storages.score, 0) doPlayerSendTextMessage(pid,27,"Welcome to paintball, here are the commands:\n!shoot bullet --This will shot a bullet.\n!shoot ammo --This will give you "..t.main.event_config.ammo_per_point.." bullets and take 1 point from your current score (you need at least 1 point to use this command).\n!shoot info --This will show you your current score and ammo, it'll also show the current high score of the event.\nIt is strongly recommended that you bind these commands to your hotkeys.") end end doRemoveItem(getTileItemById(t.main.positions.tp_to_paintball,1387).uid) addEvent(endPaintball, t.main.event_config.event_duration*1000*60) end ]]></talkaction> </mod>
  21. http://www.tibiaking.com/forum/forums/topic/77967-servidor-global-o-mais-atual-de-verdade/
  22. Rookgaard já está completa. Mas hoje fiz uma última atualização pois acabei deixando passar despercebida. NPC Amber, ao digitar 'salmon', ela fala algumas palavras da língua orc aleatória e o significado de cada palavra. Servidor está na versão 8.60 Quero deixar este servidor o mais Global RPG possível. Tudo oq a cipsoft não foi ou não fez! RookGaard possui todas as missões e quests disponíveis nesta versão. Tudo retirado do TibiaWiki. Servidor vai ser XP 2x (1x ao atingir lvl 100+), com regen hp/mana 2x do global. E para ajudar no começo, ao ir para main você cairá em uma pequena ilha 'custom' onde poderá pegar sua arma inicial. (apenas a arma/wand/ammo vai estar disponível). OBS: Por favor, caso achem melhor colocar para o player começar com um setzinho newbie para ajudar, comentem. O meu objetivo neste servidor é voltar a época antiga do tibia. Onde você brincava com seus amigos no Ts, faziam hunts juntos. Caçar Frost Dragon, Demon, hydra sozinho era complicado pois dava waste, e com os amigos ficava muito melhor e divertido. Servidor não vai visar lucros pois o mesmo só haverá Premium no Shop onde da acesso a um devasto continente 'custom'. (no continente VIP só haverá hunts e cidades para os npcs. Nada de quests, para deixar balanceado igualmente aos free account). Free account terá acesso a todo o continente tibiano (yalahar, farmine, edron, darashia e todos os outros....) Por favor, deixem suas opiniões, em breve criarei um tópico mais reformulado sobre meu projeto, o mesmo terá como objetivo mostrar atualizações do servidor e o andamento do mesmo. Estou pensando também em liberar algumas contas para um Beta fechado. Gostaria de testar toda a RookGaard. Lembrando que todos os participantes de Beta fechado receberá prêmios e VIP account no lançamento do servidor. Vou criar um present bag(custom) com vários items para dar no servidor oficial, para cada bug reportado pelo jogador. Comentem oq acham do servidor Por favor, jogadores de Baiak, OT 999x e servidores 400x~100x -- Este servidor não foi criado para ser fácil, o mesmo é HC e não haverá 'ajuda', tais como scripts de recompença em X level ou eventos de castelo 24~48hrs sem noção e cheio de teleports... Tenham em mente que o servidor é para parecer o mais próximo do Global porém com melhor jogabilidade. A Xp deste servidor poderá ser muito mais complicada que da própria cipsoft (a dificuldade será a mesma que naquela época do 7.6~8.60, onde level 100 se tornam os 'poderosos').
  23. Uê, vc colocou no pastebin, o mesmo expira. Porque não usou o CODE que o próprio fórum possui? E coloquei seus créditos...
  24. local raids = { ["Monday"] = { ["21:34"] = { name= "Demon", -- Nome do monstro a ser sumonado pos = {toPos= {x= 649, y= 1021, z= 7}, fromPos= {x= 654, y=1027, z= 7}}, --Vai ser sumonado de toPos e até fromPos quantidade = 5, -- Quantidade a ser sumonada time = 2, -- Se no tempo determinado em time= x, os monstros não forem mortos eles são removidos automaticamente }, ["22:45"] = { name= "Hydra", -- Nome do monstro a ser sumonado pos = {toPos= {x= 649, y= 1021, z= 7}, fromPos= {x= 654, y=1027, z= 7}}, --Vai ser sumonado de toPos e até fromPos quantidade = 5, -- Quantidade a ser sumonada time = 2, -- Se no tempo determinado em time= x, os monstros não forem mortos eles são removidos automaticamente } }, ["Tuesday"] = { ["11:10"] = { name= "Troll", -- Nome do monstro a ser sumonado pos = {toPos= {x= 649, y= 1021, z= 7}, fromPos= {x= 654, y=1027, z= 7}}, --Vai ser sumonado de toPos e até fromPos quantidade = 5, -- Quantidade a ser sumonada time = 2, -- Se no tempo determinado em time= x, os monstros não forem mortos eles são removidos automaticamente }, }, } function doRemoveMonster(toPos, fromPos) for x = toPos.x, fromPos.x do for y = toPos.y , fromPos.y do local creature = getTopCreature({x=x, y= y, z= fromPos.z}).uid; if creature ~= 0 and isMonster(creature) then doRemoveCreature(creature) end end end return true end function onThink(interval, lastExecution) local hours = tostring(os.date("%X")):sub(1, 5); local days = raids[os.date("%A")][hours]; local raids_storage = 99997; if days then if getGlobalStorageValue(raids_storage) <= os.time() then doBroadcastMessage("The invasion of " .. days.name .. " started") pos = {x= math.random(days.pos.toPos.x, days.pos.fromPos.x), y= math.random(days.pos.toPos.y, days.pos.fromPos.y), z= days.pos.fromPos.z}; monster = 0; repeat doSummonCreature(days.name, pos) monster = monster + 1; until monster == days.quantidade; addEvent(function() doRemoveMonster(days.pos.toPos, days.pos.fromPos) end, days.time*1000*60) setGlobalStorageValue(raids_storage, os.time()+60) end end return true end Postado por @gobr Você coloca o script em Globalevents.

Informação Importante

Confirmação de Termo