• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!
  • New resources must be posted under Resources tab. A discussion thread will be created automatically, you can't open threads manually anymore.

annihilator - Help

Teddy

SweStream.se
Joined
Oct 2, 2008
Messages
3,797
Reaction score
10
Location
Sweden 172
How can i make so the player can make this all the time not only 1 time .. ? But can only loot the quest chest 1 time .. ?

Code:
 -- Annihilator script by GriZzm0
 -- Room check and monster removal by Tworn
 
 --Variables used:

 -- player?pos  = The position of the players before teleport.
 -- player?  = Get the thing from playerpos.
 --player?level = Get the players levels.
 --questslevel  = The level you have to be to do this quest.
 --questtatus?  = Get the quest status of the players.
 --demon?pos  = The position of the demons.
 --nplayer?pos  = The position where the players should be teleported too.
 --trash= position to send the demons to when clearing, 1 sqm in middle of nowhere is enough
 -- starting = Upper left point of the annihilator room area.
 -- ending = Bottom right point of the annihilator room area.
 
 --UniqueIDs used:

 --5000 = The switch.


function onUse(cid, item, frompos, item2, topos)
if item.uid == 5000 then
 if item.itemid == 1946 then

 player1pos = {x=33225, y=31671, z=13, stackpos=253}
 player1 = getThingfromPos(player1pos)

 player2pos = {x=33224, y=31671, z=13, stackpos=253}
 player2 = getThingfromPos(player2pos)

 player3pos = {x=33223, y=31671, z=13, stackpos=253}
 player3 = getThingfromPos(player3pos)

 player4pos = {x=33222, y=31671, z=13, stackpos=253}
 player4 = getThingfromPos(player4pos)


	 if player1.itemid > 0 and player2.itemid > 0 and player3.itemid > 0 and player4.itemid > 0 then

  player1level = getPlayerLevel(player1.uid)
  player2level = getPlayerLevel(player2.uid)
  player3level = getPlayerLevel(player3.uid)
  player4level = getPlayerLevel(player4.uid)

  questlevel = 40

  if player1level >= questlevel and player2level >= questlevel and player3level >= questlevel and player4level >= questlevel then

	  queststatus1 = getPlayerStorageValue(player1.uid,7000)
	  queststatus2 = getPlayerStorageValue(player2.uid,7000)
	  queststatus3 = getPlayerStorageValue(player3.uid,7000)
	  queststatus4 = getPlayerStorageValue(player4.uid,7000)

	  if queststatus1 == -1 and queststatus2 == -1 and queststatus3 == -1 and queststatus4 == -1 then

	--if 1==1 then
	demon1pos = {x=33220, y=31657, z=13}
	demon2pos = {x=33222, y=31657, z=13}
	demon3pos = {x=33219, y=31661, z=13}
	demon4pos = {x=33221, y=31661, z=13}
	demon5pos = {x=33223, y=31659, z=13}
	demon6pos = {x=33224, y=31659, z=13}
	
 
   doSummonCreature("Demon", demon1pos)
   doSummonCreature("Demon", demon2pos)
   doSummonCreature("Demon", demon3pos)
   doSummonCreature("Demon", demon4pos)
   doSummonCreature("Demon", demon5pos)
  

	nplayer1pos = {x=33222, y=31659, z=13}
	nplayer2pos = {x=33221, y=31659, z=13}
	nplayer3pos = {x=33220, y=31659, z=13}
	nplayer4pos = {x=33219, y=31659, z=13}

   doSendMagicEffect(player1pos,2)
   doSendMagicEffect(player2pos,2)
   doSendMagicEffect(player3pos,2)
   doSendMagicEffect(player4pos,2)

   doTeleportThing(player1.uid,nplayer1pos)
   doTeleportThing(player2.uid,nplayer2pos)
   doTeleportThing(player3.uid,nplayer3pos)
   doTeleportThing(player4.uid,nplayer4pos)

	 doSendMagicEffect(nplayer1pos,10)
	 doSendMagicEffect(nplayer2pos,10)
	 doSendMagicEffect(nplayer3pos,10)
	 doSendMagicEffect(nplayer4pos,10)

	 doTransformItem(item.uid,1945)

	else
	 doPlayerSendCancel(cid,"Sorry, not possible.")
	end
   else
	doPlayerSendCancel(cid,"Sorry, not possible.")
   end
  else
  doPlayerSendCancel(cid,"Sorry, not possible.")
  end
  end
 if item.itemid == 1945 then
-- Here is the code start:
starting={x=33219, y=31657, z=13, stackpos=253}
checking={x=starting.x, y=starting.y, z=starting.z, stackpos=starting.stackpos}
ending={x=33225, y=31662, z=13, stackpos=253}
players=4
totalmonsters=6
monster = {Demon}
repeat
creature= getThingfromPos(checking)
 if creature.itemid > 0 then
 if getPlayerAccess(creature.uid) == 0 then
 players=players+1
 end
  if getPlayerAccess(creature.uid) ~= 0 and getPlayerAccess(creature.uid) ~= 3 then
 totalmonsters=totalmonsters+1
  monster[totalmonsters]=creature.uid
   end
 end
checking.x=checking.x+1
  if checking.x>ending.x then
  checking.x=starting.x
  checking.y=checking.y+1
 end
until checking.y>ending.y
if players==0 then
trash= {x=32080, y=32427, z=13}
current=0
repeat
current=current+1
doTeleportThing(monster[current],trash)
until current>=totalmonsters
doTransformItem(item.uid,1946)
end
-- Here is the end of it

end
end
 return 1
end
 
Code:
 -- Annihilator script by GriZzm0
 -- Room check and monster removal by Tworn
 
 --Variables used:

 -- player?pos  = The position of the players before teleport.
 -- player?  = Get the thing from playerpos.
 --player?level = Get the players levels.
 --questslevel  = The level you have to be to do this quest.
 --questtatus?  = Get the quest status of the players.
 --demon?pos  = The position of the demons.
 --nplayer?pos  = The position where the players should be teleported too.
 --trash= position to send the demons to when clearing, 1 sqm in middle of nowhere is enough
 -- starting = Upper left point of the annihilator room area.
 -- ending = Bottom right point of the annihilator room area.
 
 --UniqueIDs used:

 --5000 = The switch.


function onUse(cid, item, frompos, item2, topos)
if item.uid == 5000 then
 if item.itemid == 1946 then

 player1pos = {x=33225, y=31671, z=13, stackpos=253}
 player1 = getThingfromPos(player1pos)

 player2pos = {x=33224, y=31671, z=13, stackpos=253}
 player2 = getThingfromPos(player2pos)

 player3pos = {x=33223, y=31671, z=13, stackpos=253}
 player3 = getThingfromPos(player3pos)

 player4pos = {x=33222, y=31671, z=13, stackpos=253}
 player4 = getThingfromPos(player4pos)


	 if player1.itemid > 0 and player2.itemid > 0 and player3.itemid > 0 and player4.itemid > 0 then

  player1level = getPlayerLevel(player1.uid)
  player2level = getPlayerLevel(player2.uid)
  player3level = getPlayerLevel(player3.uid)
  player4level = getPlayerLevel(player4.uid)

  questlevel = 40

  if player1level >= questlevel and player2level >= questlevel and player3level >= questlevel and player4level >= questlevel then

	  queststatus1 = getPlayerStorageValue(player1.uid,7001)
	  queststatus2 = getPlayerStorageValue(player2.uid,7001)
	  queststatus3 = getPlayerStorageValue(player3.uid,7001)
	  queststatus4 = getPlayerStorageValue(player4.uid,7001)

	  if queststatus1 == -1 and queststatus2 == -1 and queststatus3 == -1 and queststatus4 == -1 then

	--if 1==1 then
	demon1pos = {x=33220, y=31657, z=13}
	demon2pos = {x=33222, y=31657, z=13}
	demon3pos = {x=33219, y=31661, z=13}
	demon4pos = {x=33221, y=31661, z=13}
	demon5pos = {x=33223, y=31659, z=13}
	demon6pos = {x=33224, y=31659, z=13}
	
 
   doSummonCreature("Demon", demon1pos)
   doSummonCreature("Demon", demon2pos)
   doSummonCreature("Demon", demon3pos)
   doSummonCreature("Demon", demon4pos)
   doSummonCreature("Demon", demon5pos)
  

	nplayer1pos = {x=33222, y=31659, z=13}
	nplayer2pos = {x=33221, y=31659, z=13}
	nplayer3pos = {x=33220, y=31659, z=13}
	nplayer4pos = {x=33219, y=31659, z=13}

   doSendMagicEffect(player1pos,2)
   doSendMagicEffect(player2pos,2)
   doSendMagicEffect(player3pos,2)
   doSendMagicEffect(player4pos,2)

   doTeleportThing(player1.uid,nplayer1pos)
   doTeleportThing(player2.uid,nplayer2pos)
   doTeleportThing(player3.uid,nplayer3pos)
   doTeleportThing(player4.uid,nplayer4pos)

	 doSendMagicEffect(nplayer1pos,10)
	 doSendMagicEffect(nplayer2pos,10)
	 doSendMagicEffect(nplayer3pos,10)
	 doSendMagicEffect(nplayer4pos,10)

	 doTransformItem(item.uid,1945)

	else
	 doPlayerSendCancel(cid,"Sorry, not possible.")
	end
   else
	doPlayerSendCancel(cid,"Sorry, not possible.")
   end
  else
  doPlayerSendCancel(cid,"Sorry, not possible.")
  end
  end
 if item.itemid == 1945 then
-- Here is the code start:
starting={x=33219, y=31657, z=13, stackpos=253}
checking={x=starting.x, y=starting.y, z=starting.z, stackpos=starting.stackpos}
ending={x=33225, y=31662, z=13, stackpos=253}
players=4
totalmonsters=6
monster = {Demon}
repeat
creature= getThingfromPos(checking)
 if creature.itemid > 0 then
 if getPlayerAccess(creature.uid) == 0 then
 players=players+1
 end
  if getPlayerAccess(creature.uid) ~= 0 and getPlayerAccess(creature.uid) ~= 3 then
 totalmonsters=totalmonsters+1
  monster[totalmonsters]=creature.uid
   end
 end
checking.x=checking.x+1
  if checking.x>ending.x then
  checking.x=starting.x
  checking.y=checking.y+1
 end
until checking.y>ending.y
if players==0 then
trash= {x=32080, y=32427, z=13}
current=0
repeat
current=current+1
doTeleportThing(monster[current],trash)
until current>=totalmonsters
doTransformItem(item.uid,1946)
end
-- Here is the end of it

end
end
 return 1
end
try it
 
can you do that but whit this (a) plz man xD
Code:
 -- Annihilator script by GriZzm0
 -- Room check and monster removal by Tworn
 
 --Variables used:

 -- player?pos  = The position of the players before teleport.
 -- player?  = Get the thing from playerpos.
 --player?level = Get the players levels.
 --questslevel  = The level you have to be to do this quest.
 --questtatus?  = Get the quest status of the players.
 --demon?pos  = The position of the demons.
 --nplayer?pos  = The position where the players should be teleported too.
 --trash= position to send the demons to when clearing, 1 sqm in middle of nowhere is enough
 -- starting = Upper left point of the annihilator room area.
 -- ending = Bottom right point of the annihilator room area.
 
 --UniqueIDs used:

 --5000 = The switch.


function onUse(cid, item, frompos, item2, topos)
if item.uid == 5000 then
 if item.itemid == 1946 then

 player1pos = {x=105, y=366, z=6, stackpos=253}
 player1 = getThingfromPos(player1pos)

 player2pos = {x=106, y=366, z=6, stackpos=253}
 player2 = getThingfromPos(player2pos)

 player3pos = {x=107, y=366, z=6, stackpos=253}
 player3 = getThingfromPos(player3pos)

 player4pos = {x=108, y=366, z=6, stackpos=253}
 player4 = getThingfromPos(player4pos)


	 if player1.itemid > 0 and player2.itemid > 0 and player3.itemid > 0 and player4.itemid > 0 then

  player1level = getPlayerLevel(player1.uid)
  player2level = getPlayerLevel(player2.uid)
  player3level = getPlayerLevel(player3.uid)
  player4level = getPlayerLevel(player4.uid)

  questlevel = 60

  if player1level >= questlevel and player2level >= questlevel and player3level >= questlevel and player4level >= questlevel then

	  queststatus1 = getPlayerStorageValue(player1.uid,7000)
	  queststatus2 = getPlayerStorageValue(player2.uid,7000)
	  queststatus3 = getPlayerStorageValue(player3.uid,7000)
	  queststatus4 = getPlayerStorageValue(player4.uid,7000)

	  if queststatus1 == -1 and queststatus2 == -1 and queststatus3 == -1 and queststatus4 == -1 then

	--if 1==1 then
	demon1pos = {x=61, y=406, z=8}
	demon2pos = {x=63, y=406, z=8}
	demon3pos = {x=65, y=408, z=8}
	demon4pos = {x=66, y=408, z=8}
	demon5pos = {x=62, y=410, z=8}
	demon6pos = {x=64, y=410, z=8}
	
 
   doSummonCreature("Demon", demon1pos)
   doSummonCreature("Demon", demon2pos)
   doSummonCreature("Demon", demon3pos)
   doSummonCreature("Demon", demon4pos)
   doSummonCreature("Demon", demon5pos)
  

	nplayer1pos = {x=61, y=408, z=8}
	nplayer2pos = {x=62, y=408, z=8}
	nplayer3pos = {x=63, y=408, z=8}
	nplayer4pos = {x=64, y=408, z=8}

   doSendMagicEffect(player1pos,2)
   doSendMagicEffect(player2pos,2)
   doSendMagicEffect(player3pos,2)
   doSendMagicEffect(player4pos,2)

   doTeleportThing(player1.uid,nplayer1pos)
   doTeleportThing(player2.uid,nplayer2pos)
   doTeleportThing(player3.uid,nplayer3pos)
   doTeleportThing(player4.uid,nplayer4pos)

	 doSendMagicEffect(nplayer1pos,10)
	 doSendMagicEffect(nplayer2pos,10)
	 doSendMagicEffect(nplayer3pos,10)
	 doSendMagicEffect(nplayer4pos,10)

	 doTransformItem(item.uid,1945)

	else
	 doPlayerSendCancel(cid,"Somthing Is Wrong : Some in your team are to low,you most be 4 player")
	end
   else
	doPlayerSendCancel(cid,"Somthing Is Wrong : Some in your team are to low,you most be 4 player"")
   end
  else
  doPlayerSendCancel(cid,"Somthing Is Wrong : Some in your team are to low,you most be 4 player"")
  end
  end
 if item.itemid == 1945 then
-- Here is the code start:
starting={x=60, y=405, z=8, stackpos=253}
checking={x=starting.x, y=starting.y, z=starting.z, stackpos=starting.stackpos}
ending={x=66, y=411, z=8, stackpos=253}
players=4
totalmonsters=6
monster = {Demon}
repeat
creature= getThingfromPos(checking)
 if creature.itemid > 0 then
 if getPlayerAccess(creature.uid) == 0 then
 players=players+1
 end
  if getPlayerAccess(creature.uid) ~= 0 and getPlayerAccess(creature.uid) ~= 3 then
 totalmonsters=totalmonsters+1
  monster[totalmonsters]=creature.uid
   end
 end
checking.x=checking.x+1
  if checking.x>ending.x then
  checking.x=starting.x
  checking.y=checking.y+1
 end
until checking.y>ending.y
if players==0 then
trash= {x=15, y=15, z=7}
current=0
repeat
current=current+1
doTeleportThing(monster[current],trash)
until current>=totalmonsters
doTransformItem(item.uid,1946)
end
-- Here is the end of it

end
end
 return 1
end
and do it works , i cant test so ..
cant find waht you changed :S ?
 
Last edited:
The code you have there should work fine, its the exact same code I am using in my server. This code does not prevent you from doing the Anni multiple times due to the fact that no there in the code does it change the players 7000 storage ID.

Also, the chests are not part of this code. You will have to use some other code for the chests, just make it so that when you open any of the four chests a certain storage value is changed so that they cannot open the other chests.
 
Code:
-- 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 = YYY, z = ZZZ} -- edit this to the top left sqm of ur annhilator room
local ending= {x = XXX, y = YYY, z = ZZZ} -- edit this to the bottom right sqm of ur annhilator room
 
local playerPos = { -- oldPositions; positions of players before they get teleported.
	{x = XXX, y = YYY, z = ZZZ},
	{x = XXX, y = YYY, z = ZZZ},
	{x = XXX, y = YYY, z = ZZZ},
	{x = XXX, y = YYY, z = ZZZ}
}
 
local newPlayerPos = { -- Positions for where players should be teleported, make sure it's in the same order as oldPositions
	{x = XXX, y = YYY, z = ZZZ},
	{x = XXX, y = YYY, z = ZZZ},
	{x = XXX, y = YYY, z = ZZZ},
	{x = XXX, y = YYY, z = ZZZ}
}
 
local creaturePos = { -- Name and position of monsters to summon.
	{"Demon", {x = XXX, y = YYY, z = ZZZ}},
	{"Demon", {x = XXX, y = YYY, z = ZZZ}},
	{"Demon", {x = XXX, y = YYY, z = ZZZ}},
	{"Demon", {x = XXX, y = YYY, z = ZZZ}},
	{"Demon", {x = XXX, y = YYY, z = ZZZ}},
	{"Demon", {x = XXX, y = YYY, z = ZZZ}}
}
 
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 i, pos in ipairs(playerPos) do -- add player id's to table
				player[i] = getTopCreature(pos)
			end
			local ret, players = checkPlayers(cid)
			if(ret) 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
						sendPlayersText(players, getPlayerName(player) .. " has already done this quest.")
					end
				else
					sendPlayersText(players, getPlayerName(player) .. " is too low.")
				end	
			else
				sendPlayersText(players, "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
		return TRUE
	--- Chests.
	elseif(item.uid == 5001) then -- demon armor
		return questChestPrize(cid, 2494, 100)
	elseif(item.uid == 5002) then -- magic sword
		return questChestPrize(cid, 2400, 100)
	elseif(item.uid == 5003) then -- stonecutter's axe
		return questChestPrize(cid, 2431, 100)
	elseif(item.uid == 5004) then -- present box
		return questChestPrize(cid, 1990, 100)				
	end
end
 
function sendPlayersText(players, text)
	for _, player in ipairs(players) do 
		doPlayerSendCancel(player, text)
	end
end
 
function questChestPrize(cid, itemid, storage)
	if(getPlayerStorageValue(cid, storage) < TRUE) then
		doPlayerAddItem(cid, itemid, 1)
		setPlayerStorageValue(cid, storage, TRUE)
		local item = getItemDescriptions(itemid)
		doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have found " .. item.article .. " " .. item.name .. "")
	else
		doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is empty.")
	end
	return TRUE
end
 
function checkLevel(minLevel)
	for _, player in ipairs(player) do
		if(getPlayerLevel(player) < minLevel) then
			return false, player
		end
	end	
	return true
end
 
function checkStorage(storageValue)
	for _, player in ipairs(player) do
		if(getPlayerStorageValue(player, storageValue) ~= TRUE) then
			return false, player
		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 = getTopCreature(checking)
		if(isCreature(creature) == TRUE) then
			if(isPlayer(creature) == TRUE) then
				return false
			else
				table.insert(monster, creature)
			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 ipairs(monster) do 
		doRemoveCreature(c)
	end	
	return true
end
 
function summonCreatures(parameters)
	for _, monster in ipairs(parameters) do
		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
end
 
function checkPlayers(cid)
	local ret = {}
	table.insert(ret, cid)
	for _, curPlayer in ipairs(player) do
		if(isPlayer(curPlayer) == TRUE) then
			if(curPlayer ~= cid) then 
				table.insert(ret, curPlayer)
			end
		else	
			return false, ret
		end
	end	
	return true, ret
end
 

Similar threads

Back
Top