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

Advanced Annihilator Script

Ritual Luster

New Member
Joined
Jul 23, 2008
Messages
4
Reaction score
0
Location
México
I've been working on a script simpler and comfortable for my eyes to read and this is what I came up with. You may add/remove as many players, just remove the position from variable playerPos; this way even someone with minimum lua knowledge can make the script fit for more then 4 players easily and just in a few seconds, same with monsters, just type in their name and positions, and they'll be summoned. Note that you can have different creatures summoned, not all as demons.

Lever should be unique id of 5000. Prizes are from unique id of 5001 to 5004; If that's not suitable for you, it can be easily edited too.

I'm pretty sure lots of people already have the annhilator script but most of them use GriZz~ version. I'm not saying that it's bad but the script is messy. By the time you change GriZz~ script to fit 20 players, it'll triple the size of the script. Using my script, all you need to do is add the positions and that'll be it; you won't need to add any checks!

Enjoy the script, hope you find it better then most annihilator scripts released till now.

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
 
I saw similar scripts, with this same functions (They are in the newests distros like tfs), but this script is realy easy to configure :)
Bu if you do Trash system in this script (if team die, then if another team wants to do this quest, then this script will delete the monsters from another team, and then summon new monsters for new team) it will be realy cool script.
 
Last edited:
Ritual Luster is an ripper who takes codes from other places and places them here.

I have allready deleted 2 threads which was allready placed here on otland by the real members. But dosn't look like this was posted before here on otland.

Will take and see who made this now.

edit:
<removed>

edit2:
@empty: oki.
 
Last edited:
It already gives credits to the makers..

-- 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.
 
Hmm.. in the treasure room i get walls as reward :D

05:27 You have found a marble wall.
05:27 You have found a light wall.
05:27 You have found a light wall.
05:27 You have found a exotic butterfly.

and i can open all the chests, only 1 reward should be obtainable?

TFS 0.2.13 REV. 906
 
Back
Top