endziu2222
Well-Known Member
- Joined
- Nov 2, 2010
- Messages
- 197
- Solutions
- 1
- Reaction score
- 57
I am trying to understand what has been done wrong here. So my first screen shows you my problem, I can enter with multiple players and monsters just keep spawning but cooldown works fine.
Am I forgetting something? Do I need to add anything else except adding storages?
2nd screen how it is on map editor.
And now code.
I was trying editing this to many times... thanks to @Mateus Robeerto for helping me out with this.
I am using canary based engine on 13.20 client.
Thanks in advance.
edit: or I just do not understand this option and how to add it properly.
Am I forgetting something? Do I need to add anything else except adding storages?
2nd screen how it is on map editor.
And now code.
LUA:
local config = {
cooldown = 60 * 60 * 10, -- in seconds - (Make it 'seconds * minutes * hours' - its will be '60 * 60 * 20' for 20 hours) (player cooldown)
cooldown_storage = 650025,
duration = 10, -- time till reset, in minutes (lever cooldown)
level_req = 100, -- minimum level to do quest
min_players = 1, -- minimum players to join quest
lever_id = 2772, -- id of lever before pulled
pulled_id = 2773, -- id of lever after pulled
}
local player_positions = {
[1] = {fromPos = Position(2441, 2599, 7), toPos = Position(2429, 2606, 7)},
[2] = {fromPos = Position(2442, 2599, 7), toPos = Position(2429, 2606, 7)},
[3] = {fromPos = Position(2443, 2599, 7), toPos = Position(2429, 2606, 7)},
[4] = {fromPos = Position(2444, 2599, 7), toPos = Position(2429, 2606, 7)}
}
local monsters = {
[1] = {pos = Position(2431, 2605, 7), name = "Angry Demon"},
[2] = {pos = Position(2431, 2606, 7), name = "Angry Demon"}
}
local quest_range = {fromPos = Position(2429, 2605, 7), toPos = Position(2433, 2608, 7)} -- see image in thread for explanation
local exit_position = Position(2441, 2600, 7) -- Position completely outside the quest area
local lever = Action()
function doResetTheBossDukeKrule(position, cid_array)
local tile = Tile(position)
local item = tile and tile:getItemById(config.pulled_id)
if not item then
return
end
local monster_names = {}
for key, value in pairs(monsters) do
if not isInArray(monster_names, value.name) then
monster_names[#monster_names + 1] = value.name
end
end
for i = 1, #monsters do
local creatures = Tile(monsters[i].pos):getCreatures()
for key, creature in pairs(creatures) do
if isInArray(monster_names, creature:getName()) then
creature:remove()
end
end
end
for i = 1, #player_positions do
local creatures = Tile(player_positions[i].toPos):getCreatures()
for key, creature in pairs(creatures) do
if isInArray(monster_names, creature:getName()) then
creature:remove()
end
end
end
for key, cid in pairs(cid_array) do
local participant = Player(cid)
if participant and isInRange(participant:getPosition(), quest_range.fromPos, quest_range.toPos) then
participant:teleportTo(exit_position)
exit_position:sendMagicEffect(CONST_ME_TELEPORT)
end
end
item:transform(config.lever_id)
end
local function removeBoss()
local specs, spec = Game.getSpectators(Position(2431, 2607, 97, false, false, 3, 3, 3, 3)
for j = 1, #specs do
spec = specs[j]
if spec:getName():lower() == 'Angry Demon' then
spec:remove()
end
end
end
function lever.onUse(player, item, fromPosition, target, toPosition, isHotkey)
if player:getStorageValue(config.cooldown_storage) >= os.time() then
player:sendTextMessage(MESSAGE_INFO_DESCR, "Try Again in 4 Hours.")
return true
end
local participants, pull_player = {}, false
for i = 1, #player_positions do
local fromPos = player_positions[i].fromPos
local tile = Tile(fromPos)
if not tile then
print(">> ERROR: Earl Osam tile does not exist for Position(" .. fromPos.x .. ", " .. fromPos.y .. ", " .. fromPos.z .. ").")
return player:sendCancelMessage("There is an issue with this quest. Please contact an administrator.")
end
local creature = tile:getBottomCreature()
if creature then
local participant = creature:getPlayer()
if not participant then
return player:sendCancelMessage(participant:getName() .. " is not a valid participant.")
end
if participant:getLevel() < config.level_req then
return player:sendCancelMessage(participant:getName() .. " is not the required level.")
end
if participant.uid == player.uid then
pull_player = true
end
participants[#participants + 1] = {participant = participant, toPos = player_positions[i].toPos}
end
end
if #participants < config.min_players then
return player:sendCancelMessage("You do not have the required amount of participants.")
end
if not pull_player then
return player:sendCancelMessage("You are in the wrong position.")
end
for i = 1, #monsters do
local toPos = monsters[i].pos
if not Tile(toPos) then
print(">> ERROR: Earl Osam tile does not exist for Position(" .. toPos.x .. ", " .. toPos.y .. ", " .. toPos.z .. ").")
return player:sendCancelMessage("There is an issue with this quest. Please contact an administrator.")
end
removeBoss()
Game.createMonster(monsters[i].name, monsters[i].pos, false, true)
end
local cid_array = {}
for i = 1, #participants do
participants[i].participant:teleportTo(participants[i].toPos)
participants[i].toPos:sendMagicEffect(CONST_ME_TELEPORT)
cid_array[#cid_array + 1] = participants[i].participant.uid
player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You have 20 minutes to kill and loot this boss. Otherwise you will lose that chance and will be kicked out.")
end
item:transform(config.pulled_id)
player:setStorageValue(config.cooldown_storage, os.time() + config.cooldown)
addEvent(doResetTheBossDukeKrule, config.duration * 60 * 2000, toPosition, cid_array)
return true
end
lever:uid(31033)
lever:register()
I was trying editing this to many times... thanks to @Mateus Robeerto for helping me out with this.
I am using canary based engine on 13.20 client.
Thanks in advance.
edit: or I just do not understand this option and how to add it properly.
LUA:
local function removeBoss()
local specs, spec = Game.getSpectators(Position(2431, 2607, 97, false, false, 3, 3, 3, 3)
for j = 1, #specs do
spec = specs[j]
if spec:getName():lower() == 'Angry Demon' then
spec:remove()
end
end
end
Attachments
-
1695059916504.png506.8 KB · Views: 2 · VirusTotal
Last edited: