Postado Maio 7, 2024 1 ano Bom dia pessoal, será q alguem pode me ajudar? tenho esse script onde é um boss ao puxar a alavanca porém, mesmo quando já tem gente fazendo o boss, qualquer outra pessoa consegue adentrar a sala tb Queria que apenas 1 por vez, conseguisse entrar na sala -- CONFIG -- local playersOnly = "no" local questLevel = 1 local STORAGE_BOSS_CD = 22497 local cdtime = 20 * 60 * 60 -- exhaust in seconds local room = { -- room with demons fromX = 1032, fromY = 1014, fromZ = 7, toX = 1044, toY = 1020, toZ = 7 } local monster_pos = { [1] = {pos = {1042, 1017, 7}, monster = "Tibia bug"} } local players_pos = { {x = 1033, y = 1010, z = 7, stackpos = 253} } local new_player_pos = { {x = 1035, y = 1017, z = 7} } -- CONFIG END -- function onUse(cid, item, fromPosition, itemEx, toPosition) local all_ready, monsters, player, level = 0, 0, {}, 0 if item.itemid == 1946 then for i = 1, #players_pos do table.insert(player, 0) end for i = 1, #players_pos do player[i] = getThingfromPos(players_pos[i]) if player[i].itemid > 0 then if string.lower(playersOnly) == "yes" then if isPlayer(player[i].uid) == true then all_ready = all_ready+1 else monsters = monsters+1 end else all_ready = all_ready+1 end end end if all_ready == #players_pos then for i = 1, #players_pos do player[i] = getThingfromPos(players_pos[i]) if isPlayer(player[i].uid) == true then if getPlayerStorageValue(player[i].uid,STORAGE_BOSS_CD) > os.time() then doPlayerSendCancel(cid,"Voce já fez o boss hoje, tente amanhã !!! .") return false end if getPlayerLevel(player[i].uid) >= questLevel then level = level+1 end else level = level+1 end end if level == #players_pos then if string.lower(playersOnly) == "yes" and monsters == 0 or string.lower(playersOnly) == "no" then for _, area in pairs(monster_pos) do doSummonCreature(area.monster,{x=area.pos[1],y=area.pos[2],z=area.pos[3]}) end for i = 1, #players_pos do doSendMagicEffect(players_pos[i], CONST_ME_POFF) doTeleportThing(player[i].uid, new_player_pos[i]) doSendMagicEffect(new_player_pos[i], CONST_ME_ENERGYAREA) setPlayerStorageValue(player[i].uid,STORAGE_BOSS_CD,os.time() + cdtime) end doTransformItem(item.uid,1945) else doPlayerSendTextMessage(cid,19,"Apenas players tem acesso.") return false end else doPlayerSendTextMessage(cid,19,"Voce tem que estar no level: "..questLevel.." p.") return false end else doPlayerSendCancel(cid,"Fique em cima do SQM correto para ter acesso a sala.") return false end elseif item.itemid == 1945 then local player_room = 0 for x = room.fromX, room.toX do for y = room.fromY, room.toY do for z = room.fromZ, room.toZ do local pos = {x=x, y=y, z=z,stackpos = 253} local thing = getThingfromPos(pos) if thing.itemid > 0 then if isPlayer(thing.uid) == true then player_room = player_room+1 end end end end end if player_room >= 1 then doPlayerSendTextMessage(cid,19,"Time fazendo o boss, aguarde.") return false elseif player_room == 0 then for x = room.fromX, room.toX do for y = room.fromY, room.toY do for z = room.fromZ, room.toZ do local pos = {x=x, y=y, z=z,stackpos = 253} local thing = getThingfromPos(pos) if thing.itemid > 0 then doRemoveCreature(thing.uid) end end end end doTransformItem(item.uid,1946) end end return true end
Postado Maio 9, 2024 1 ano Diretor 1 hora atrás, bottacini disse: @UP use o botão para UP, evite comentar pra subir a publicação. eu uso esse no meu servidor, vc pode usar como base function onUse(cid, item, fromPosition, itemEx, toPosition, Position) local leverItemId = 1945 local leverActionId = 5281 local monsterName = "Grindelgroth" local monsterPosition = {x = 1014, y = 1002, z = 7} local radiusX = 4 -- Raio X = 8 / 2 local radiusY = 6 -- Raio Y = 12 / 2 local teleportPosition = {x = 1023, y = 1002, z = 7} local townId = 1 -- Defina o ID da cidade local numbersala = "1" if (item.itemid == leverItemId or item.itemid == 1946) and item.actionid == leverActionId then local centerX = monsterPosition.x local centerY = monsterPosition.y for x = -radiusX, radiusX do for y = -radiusY, radiusY do local pos = {x = centerX + x, y = centerY + y, z = monsterPosition.z} local creature = getTopCreature(pos).uid if creature ~= 0 and isCreature(creature) then if isPlayer(creature) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "Há um jogador bloqueando a alavanca. Você não pode ativá-la agora.") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "Há uma criatura bloqueando a alavanca. Você não pode ativá-la agora.") end return true end end end if getPlayerStorageValue(cid, item.actionid) == 1 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "Você já completou esta Sala. Continue sua jornada e busque pela próxima Sala do Perigo no mapa.") doSendMagicEffect(getCreaturePosition(cid), 2) return true end -- Verificar se o jogador tem um summon local playerSummon = getCreatureSummons(cid)[1] if playerSummon then doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "Você não pode ativar a alavanca enquanto tiver um summon.") return true end -- Verificar se a criatura já está presente local existingCreature = getTopCreature(monsterPosition).uid if existingCreature ~= 0 and isCreature(existingCreature) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "Já há uma criatura presente. Você não pode ativar a alavanca agora.") return true end if item.itemid == leverItemId then doTransformItem(item.uid, 1946) end -- Invocar a criatura com efeito visual local monster = doSummonCreature(monsterName, monsterPosition) if monster then doSendMagicEffect(monsterPosition, EFFECT_TELEPORT_DOWN) end -- Teleportar o jogador para a posição especificada com efeito visual if isPlayer(cid) then doTeleportThing(cid, teleportPosition) doSendMagicEffect(teleportPosition, EFFECT_TELEPORT_UP) -- Anunciar que um jogador está na Sala do Perigo 1 doBroadcastMessage("O jogador " .. getCreatureName(cid) .. " está na Sala do Perigo ".. numbersala..".", 20) doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Você entrou na arena, cuidado!") end -- Agendar a remoção da criatura após 5 segundos addEvent(function() if isCreature(monster) then doRemoveCreature(monster) -- Teleportar o jogador para o templo da cidade após a remoção do monstro local templePos = getTownTemplePosition(townId) doTeleportThing(cid, templePos) doSendMagicEffect(templePos, EFFECT_TELEPORT) doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "Você foi expulso Sala do Perigo, você está muito fraco.") end end, 100000) return true end return false end quantos sqm tem a sala aonde nasce o montro? posso fazer uma verificação se há players naqueles spms se tiver ninguem entra Editado Maio 9, 2024 1 ano por L3K0T (veja o histórico de edições) Eu sou um entusiasta da programação apaixonado por ajudar a comunidade open source a crescer. Sempre em busca de novos desafios e oportunidades para contribuir com meu código. #OpenSource #Programação #Contribuição
Postado Maio 9, 2024 1 ano Autor 8 horas atrás, L3K0T disse: use o botão para UP, evite comentar pra subir a publicação. eu uso esse no meu servidor, vc pode usar como base quantos sqm tem a sala aonde nasce o montro? posso fazer uma verificação se há players naqueles spms se tiver ninguem entra Bom dia a area do boss é essa da foto enviei uma foto O esquema é que apenas 1 player consiga acessar ela por vez e tenha um coldown de 20 horas @L3K0T
Postado Maio 11, 2024 1 ano Diretor Em 09/05/2024 em 08:34, bottacini disse: Bom dia a area do boss é essa da foto enviei uma foto O esquema é que apenas 1 player consiga acessar ela por vez e tenha um coldown de 20 horas @L3K0T Preciso do nome do monstro Preciso das posição do sqm aonde ele nasce Preciso a Acion ID da alavanca que você colocou nela e Preciso saber que storage você quer usar pra contagem do tempo??? Eu sou um entusiasta da programação apaixonado por ajudar a comunidade open source a crescer. Sempre em busca de novos desafios e oportunidades para contribuir com meu código. #OpenSource #Programação #Contribuição
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.