• 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!

1 ANNIH / DAY or CLEAN DEMONS when pull lever!

Rollern

Intermediate OT User
Joined
Sep 8, 2010
Messages
409
Reaction score
130
I have a problem which is as following:

When Someone makes annih, and kill the two demons -->, its fine etc.

But after that, when another team comes, demons spawns on their positions. So demons are standing on top of players in annih, and all dies.

So is it possible to CLEAN all the demons OR make so you can only make 1 annih each day, and only do it again after server restart?

I'm using Avesta 7.6.

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.
 --5001 = Demon Armor chest.
 --5002 = Magic Sword chest.
 --5003 = Stonecutter Axe chest.
 --5004 = Present chest.


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 = 100

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

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

	  if queststatus1 == -1 and queststatus2 == -1 and queststatus3 == -1 and queststatus4 == -1 then
	--if 1==1 then
	demon1pos = {x=33219, y=31657, z=13}
	demon2pos = {x=33221, y=31657, z=13}
	demon3pos = {x=33220, y=31661, z=13}
	demon4pos = {x=33222, 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)
   doSummonCreature("Demon", demon6pos)

	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,"Someone has already done this quest")
	end
   else
	doPlayerSendCancel(cid,"Your level is too low")
   end
  else
  doPlayerSendCancel(cid,"You need 4 players in your team.")
  end
 end
 if item.itemid == 1945 then
-- Here is the code start:
starting={x=1632, y=423, z=14, stackpos=253}
checking={x=starting.x, y=starting.y, z=starting.z, stackpos=starting.stackpos}
ending={x=1638, y=428, z=14, stackpos=253}
players=0
totalmonsters=0
monster = {}
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=32520, y=32464, 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
if item.uid == 5001 then
 queststatus = getPlayerStorageValue(cid,100)
 if queststatus == -1 then
  doPlayerSendTextMessage(cid,22,"You have found a demon armor.")
  doPlayerAddItem(cid,2494,1)
  setPlayerStorageValue(cid,100,1)
 else
  doPlayerSendTextMessage(cid,22,"It is empty.")
 end
end
if item.uid == 5002 then
 queststatus = getPlayerStorageValue(cid,100)
 if queststatus ~= 1 then
  doPlayerSendTextMessage(cid,22,"You have found a magic sword.")
  doPlayerAddItem(cid,2400,1)
  setPlayerStorageValue(cid,100,1)
 else
  doPlayerSendTextMessage(cid,22,"It is empty.")
 end
end
if item.uid == 5003 then
 queststatus = getPlayerStorageValue(cid,100)
 if queststatus ~= 1 then
  doPlayerSendTextMessage(cid,22,"You have found a stonecutter axe.")
  doPlayerAddItem(cid,2431,1)
  setPlayerStorageValue(cid,100,1)
 else
  doPlayerSendTextMessage(cid,22,"It is empty.")
 end
end
if item.uid == 5004 then
 queststatus = getPlayerStorageValue(cid,100)
 if queststatus ~= 1 then
  doPlayerSendTextMessage(cid,22,"You have found a present.")
  doPlayerAddItem(cid,2326,1)
  setPlayerStorageValue(cid,100,1)
 else
  doPlayerSendTextMessage(cid,22,"It is empty.")
 end
 end
 return 1
end
 
If you want too only do 1 annih/day

The easiest way would be too do it like this:

If teleport successfull -> Remove the Lever or transform it to something.
 
In real tibia players can only make the quest once server save.

Why it doesn't clean monsters is because you failed to set these positions correct:

Lua:
starting={x=1632, y=423, z=14, stackpos=253}
checking={x=starting.x, y=starting.y, z=starting.z, stackpos=starting.stackpos}
ending={x=1638, y=428, z=14, stackpos=253}

This script can only be used once server save

Lua:
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 = 100

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

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

				if queststatus1 == -1 and queststatus2 == -1 and queststatus3 == -1 and queststatus4 == -1 then
					--if 1==1 then
					demon1pos = {x=33219, y=31657, z=13}
					demon2pos = {x=33221, y=31657, z=13}
					demon3pos = {x=33220, y=31661, z=13}
					demon4pos = {x=33222, 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)
					doSummonCreature("Demon", demon6pos)

					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,"Someone has already done this quest")
				end
			else
				doPlayerSendCancel(cid,"Your level is too low")
			end
		else
			doPlayerSendCancel(cid,"You need 4 players in your team.")
		end
	elseif item.itemid == 1945 then
		doPlayerSendCancel(cid, "Sorry, not possible.")
	end
end

if item.uid == 5001 then
queststatus = getPlayerStorageValue(cid,100)
	if queststatus == -1 then
		doPlayerSendTextMessage(cid,22,"You have found a demon armor.")
		doPlayerAddItem(cid,2494,1)
		setPlayerStorageValue(cid,100,1)
	else
		doPlayerSendTextMessage(cid,22,"It is empty.")
	end
end
if item.uid == 5002 then
queststatus = getPlayerStorageValue(cid,100)
	if queststatus ~= 1 then
		doPlayerSendTextMessage(cid,22,"You have found a magic sword.")
		doPlayerAddItem(cid,2400,1)
		setPlayerStorageValue(cid,100,1)
	else
		doPlayerSendTextMessage(cid,22,"It is empty.")
	end
end
if item.uid == 5003 then
queststatus = getPlayerStorageValue(cid,100)
	if queststatus ~= 1 then
		doPlayerSendTextMessage(cid,22,"You have found a stonecutter axe.")
		doPlayerAddItem(cid,2431,1)
		setPlayerStorageValue(cid,100,1)
	else
		doPlayerSendTextMessage(cid,22,"It is empty.")
	end
end
if item.uid == 5004 then
	queststatus = getPlayerStorageValue(cid,100)
	if queststatus ~= 1 then
		doPlayerSendTextMessage(cid,22,"You have found a present.")
		doPlayerAddItem(cid,2326,1)
		setPlayerStorageValue(cid,100,1)
	else
		doPlayerSendTextMessage(cid,22,"It is empty.")
	end
end

	return 1
end
 
It is possible to do this quest as many times as you want
Simply change this:
PHP:
doSummonCreature("Demon", demon1pos)
doSummonCreature("Demon", demon2pos)
doSummonCreature("Demon", demon3pos)
doSummonCreature("Demon", demon4pos)
doSummonCreature("Demon", demon5pos)
doSummonCreature("Demon", demon6pos)

to:
PHP:
local demon1 = doSummonCreature("Demon", demon1pos)
local demon2 = doSummonCreature("Demon", demon2pos)
local demon3 = doSummonCreature("Demon", demon3pos)
local demon4 = doSummonCreature("Demon", demon4pos)
local demon5 = doSummonCreature("Demon", demon5pos)
local demon6 = doSummonCreature("Demon", demon6pos)

Now you can move these demons when you pull the switch again you can move the demon by doing this:
PHP:
				if isCreature(demon1) == TRUE then
					demon1newpos = {x=..., y=..., z=...}
					doTeleportThing(demon1,demon1newpos)
				else
				end

It checkes or that specific demon is alive and when it is, it will be moved.
If you have lua funcion doremovecreature you can use that better :)

- - - Updated - - -

Heres a script I wrote for you.
Note that yous till have to change the data

PHP:
function onUse(cid, item, frompos, item2, topos)

----YOU CAN EDIT
player1pos = {x=599, y=764, z=14, stackpos=253}
player2pos = {x=598, y=764, z=14, stackpos=253}
player3pos = {x=597, y=764, z=14, stackpos=253}
player4pos = {x=596, y=764, z=14, stackpos=253}

nplayer1pos = {x=599, y=764, z=15}
nplayer2pos = {x=598, y=764, z=15}
nplayer3pos = {x=597, y=764, z=15}
nplayer4pos = {x=596, y=764, z=15}

questlevel = 100 -- Level 100+

demon1pos = {x=596, y=762, z=15}
demon2pos = {x=598, y=762, z=15}
demon3pos = {x=597, y=766, z=15}
demon4pos = {x=599, y=766, z=15}
demon5pos = {x=600, y=764, z=15}
demon6pos = {x=601, y=764, z=15}

demon1newpos = {x=581, y=763, z=15}
demon2newpos = {x=581, y=763, z=15}
demon3newpos = {x=581, y=763, z=15}
demon4newpos = {x=581, y=763, z=15}
demon5newpos = {x=581, y=763, z=15}
demon6newpos = {x=581, y=763, z=15}

waittime = 10*60 -- 10 minutes

--------------------------------------------

 if item.itemid == 1945 then

 	player1 = getThingfromPos(player1pos)
 	player2 = getThingfromPos(player2pos)
 	player3 = getThingfromPos(player3pos)
 	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)

  if player1level >= questlevel and player2level >= questlevel and player3level >= questlevel and player4level >= questlevel then
	 
   demon1 = doSummonCreature("Demon", demon1pos)
   demon2 = doSummonCreature("Demon", demon2pos)
   demon3 = doSummonCreature("Demon", demon3pos)
   demon4 = doSummonCreature("Demon", demon4pos)
   demon5 = doSummonCreature("Demon", demon5pos)
   demon6 = doSummonCreature("Demon", demon6pos)  

   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,1946)
    
   nexttime = os.time()+ waittime
  else
  	doPlayerSendCancel(cid,"Sorry, not possible.")
  end
 	else
  doPlayerSendCancel(cid,"Sorry, not possible.")
 	end
 elseif item.itemid == 1946 then
	if os.time() >= nexttime then
  doTransformItem(item.uid,1945)
	if isCreature(demon1) == TRUE then
                    doTeleportThing(demon1,demon1newpos)
                else
                end
	if isCreature(demon2) == TRUE then
                    doTeleportThing(demon2,demon2newpos)
                else
                end
	if isCreature(demon3) == TRUE then
                    doTeleportThing(demon3,demon3newpos)
                else
                end 
	if isCreature(demon4) == TRUE then
                    doTeleportThing(demon4,demon4newpos)
                else
                end
	if isCreature(demon5) == TRUE then
                    doTeleportThing(demon5,demon5newpos)
                else
                end 
	if isCreature(demon6) == TRUE then
                    doTeleportThing(demon6,demon6newpos)
                else
                end 
	else
		waittime = nexttime - os.time()
		doPlayerSendCancel(cid,"Sorry, you need to wait " ..waittime.. ".")
 	end
 	else
  doPlayerSendCancel(cid,"Sorry, not possible.")
 	end
return 1
end

Credits for me
 
@Vanisto
Nice try, but there is much better function - getSpectators

@topic:

Lua:
local posAnni = {x=100, y=100, z=7}    --tank position in your anni quest room
local demons = getSpectators(posAnni, 5, 5, false)
if #demons > 0 then
	for i = 1, #demons do
		if isMonster(demons[i]) then
			doRemoveCreature(demons[i])
		end
	end
end

Just add this somewhere in the start of your script. This little part will remove all Monsters in your anni room, but remember to set correct tank position.

Aslo, you have to add a thing what will check for players in quest room. They may blocks monster spawn by staying on demon tiles.
 
Last edited:
Back
Top