-- Credits to GrizZm0 for most of the script
-- Credits to Tworn for the cleanArea(), a bit modified by Ispiro
-- Credits to Ispiro for a more easier script to configurate and easier to read.
local starting= {x = XXX, y = XXX, z = X} -- edit this to the top left sqm of ur annhilator room
local ending= {x = XXX, y = XXX, z = X} -- edit this to the bottom right sqm of ur annhilator room
local playerPos = { -- oldPositions; positions of players before they get teleported.
{x = XXX, y = XXX, z = X},
{x = XXX, y = XXX, z = X},
{x = XXX, y = XXX, z = X},
{x = XXX, y = XXX, z = X}
}
local newPlayerPos = { -- Positions for where players should be teleported, make sure it's in the same order as oldPositions
{x = XXX, y = XXX, z = X},
{x = XXX, y = XXX, z = X},
{x = XXX, y = XXX, z = X},
{x = XXX, y = XXX, z = X}
}
local creaturePos = { -- Name and position of monsters to summon.
{"Demon", {x = XXX, y = XXX, z = X}},
{"Demon", {x = XXX, y = XXX, z = X}},
{"Demon", {x = XXX, y = XXX, z = X}},
{"Demon", {x = XXX, y = XXX, z = X}},
{"Demon", {x = XXX, y = XXX, z = X}},
{"Demon", {x = XXX, y = XXX, z = X}}
}
if(#playerPos ~= #newPlayerPos) then
error("Annhilator has not been properly configured.")
end
--- Preferably, do not edit anything below this line unless you know exactly what you are doing.
local player = {}
function onUse(cid, item, frompos, item2, topos)
if(item.uid == 5000) then --- change to different item.uid according to ur mapeditor
if(item.itemid == 1945) then
for currentPlayer = 1, table.getn(playerPos) do -- add player id's to table
playerPos[currentPlayer].stackpos = 253
player[currentPlayer] = getThingfromPos(playerPos[currentPlayer]).uid
end
if(checkPlayers()) then
local ret, player = checkLevel(100)
if(ret) then
local ret, player = checkStorage(100)
if(ret) then
summonCreatures(creaturePos)
teleportPlayers(2, 10) -- 2 stands for the effect on old pos, 10 for the effect on new pos.
doTransformItem(item.uid, 1946)
else
doPlayerSendCancel(cid, getPlayerName(player) .. " has already done this quest.")
end
else
doPlayerSendCancel(cid, getPlayerName(player) .. " is too low.")
end
else
doPlayerSendCancel(cid, "You need " .. #playerPos .. " players to do this quest.")
end
elseif(item.itemid == 1946) then -- preferably, to be the id of the lever added by mapeditor.
if(cleanArea()) then
doTransformItem(item.uid, 1945)
else
return FALSE
end
end
--- Chests.
elseif(item.uid == 5001) then -- demon armor
questChestPrize(cid, 2494, 1, 100)
elseif(item.uid == 5002) then -- magic sword
questChestPrize(cid, 2400, 1, 100)
elseif(item.uid == 5003) then -- stonecutter's axe
questChestPrize(cid, 2431, 1, 100)
elseif(item.uid == 5004) then -- thunder hammer
questChestPrize(cid, 2421, 1, 100)
end
return TRUE
end
function checkLevel(minLevel)
for currentPlayer = 1, table.getn(player) do
local playerLevel = getPlayerLevel(player[currentPlayer])
if(playerLevel < minLevel) then
if(getPlayerAccess(player[currentPlayer]) == 0) then
return false, player[currentPlayer]
end
end
end
return true
end
function checkStorage(storageValue)
for currentPlayer = 1, table.getn(player) do
local questStatus = getPlayerStorageValue(player[currentPlayer], storageValue)
if(questStatus == TRUE) then
if(getPlayerAccess(player[currentPlayer]) == 0) then
return false, player[currentPlayer]
end
end
end
return true
end
function cleanArea()
local checking= {x = starting.x, y = starting.y, z = starting.z, stackpos = 253}
local monster = {}
while(checking.y <= ending.y) do
local creature = getThingfromPos(checking)
if(isCreature(creature.uid) == TRUE) then
if(isPlayer(creature.uid) == TRUE) then
return false
else
table.insert(monster, creature.uid)
end
end
if(checking.x == ending.x) then
checking.x = starting.x
checking.y = checking.y + 1
end
checking.x = checking.x + 1
end
for i, c in pairs(monster) do
doRemoveCreature(c)
end
return true
end
function summonCreatures(parameters)
for currentMonster = 1, table.getn(parameters) do
local monster = parameters[currentMonster]
doSummonCreature(monster[1], monster[2])
end
end
function teleportPlayers(effect1, effect2)
for currentPlayer = 1, table.getn(player) do
doTeleportThing(player[currentPlayer], newPlayerPos[currentPlayer])
doSendMagicEffect(playerPos[currentPlayer], effect1) -- send animation after teleport, players teleported won't see it anyways
doSendMagicEffect(newPlayerPos[currentPlayer], effect2)
end
return 1
end
function checkPlayers()
for currentPlayer = 1, table.getn(player) do
local curPlayer = player[currentPlayer]
if(isPlayer(curPlayer) ~= TRUE) then
return false
end
end
return true
end
function questChestPrize(cid, prizeID, count, storagevalue)
-- Made By Ispiro
local doneQuest = getPlayerStorageValue(cid, storagevalue)
if(doneQuest == TRUE) then
doPlayerSendTextMessage(cid, 22, "It is empty.")
return FALSE
end
doPlayerSendTextMessage(cid, 22,"You have found a ".. getItemName(prizeID) ..".")
if(isItemStackable(prizeID) == TRUE) then
while count > 100 do
count = count - 100
doPlayerAddItem(cid, prizeID, 100)
end
else
while count > 1 do
count = count - 1
doPlayerAddItem(cid, prizeID, 1)
end
end
doPlayerAddItem(cid, prizeID, count) -- add left overs, always less than 100.
setPlayerStorageValue(cid, storagevalue, TRUE)
return TRUE
end