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

[Tip?] Svargrond Arena

Serginov

Onkonkoronkonk
Joined
Jun 28, 2008
Messages
1,321
Reaction score
18
Location
Sweden - Dalarna
Hello. It's said that Svargrond Arena doesn't work for TFS, right? The stones doesn't moves. So aint it possible to make doors instead of the stones and then when you killed an arena boss then you get a StorageValue for the door so you can open it? One for every room.
 
Hello. It's said that Svargrond Arena doesn't work for TFS, right? The stones doesn't moves. So aint it possible to make doors instead of the stones and then when you killed an arena boss then you get a StorageValue for the door so you can open it? One for every room.

The problems are not the stones i think (Correct me if i'm wrong) the problem it's beucase on TFS theres no "OnKill" event... so you can't really know if you killed the boss...
 
There's an onKill even on TFS as well. I don't know what the problem is, but I guess an error message would be nice... And a script.
 
I'm using this script;

stone.lua
Code:
local stone1pos = {x=32204,y=31098,z=7,stackpos=1}
local stone2pos = {x=32190,y=31098,z=7,stackpos=1}
local stone3pos = {x=32176,y=31098,z=7,stackpos=1}
local stone4pos = {x=32162,y=31098,z=7,stackpos=1}
local stone5pos = {x=32169,y=31084,z=7,stackpos=1}
local stone6pos = {x=32183,y=31084,z=7,stackpos=1}
local stone7pos = {x=32197,y=31084,z=7,stackpos=1}
local stone8pos = {x=32190,y=31070,z=7,stackpos=1}
local stone9pos = {x=32176,y=31070,z=7,stackpos=1}
local stone10pos = {x=32183,y=31057,z=7,stackpos=1}

function onStepIn(cid, item, pos)


local function doCheckLvl(cid, storage)



	if getPlayerStorageValue(cid, storage) == 1 then -- Greenhorn
		monsters = {"Frostfur", "Bloodpaw", "Bovinus", "Achad", "The Hairy One", "Colerian The Barbarian", "Axeitus Headbanger", "Rocky", "Cursed Gladiator", "Orcus The Cruel"} 




	elseif getPlayerStorageValue(cid, storage) == 2 then -- Scrapper
		monsters = {"Avalanche", "Kreebosh the Exile", "The Dark Dancer", "The Hag",  "Slim", "Grimgor Guteater", "Drasilla", "Spirit of Earth", "Spirit of Water", "Spirit of Fire"} 




	elseif getPlayerStorageValue(cid, storage) == 3 then -- Warlord
		monsters = {"Webster", "Darakan the Executioner", "Norgle Glacierbeard", "The Pit Lord", "Svoren the Mad", "The Masked Marauder", "Gnorre Chyllson", "Fallen Mooh'tah Master Ghar", "Deathbringer", "The Obliverator"}

	end
end





local function doChange(cid, pos, creature, tpos)
	local stone = getThingfromPos(pos)
	doSetItemActionId(stone.uid,6000)
	doTeleportThing(cid,tpos)
	doSendMagicEffect(pos,10)
	local pos = getThingPos(stone.uid)
	monster = doSummonCreature(creature, pos)
	doSendAnimatedText(tpos,"Fight!",198)
end

local function doCheckStone(stonepos)
	local stone = getThingfromPos(stonepos)
	if stone.actionid ~= 6000 and stone.itemid == 1304 then
		return 0
	elseif stone.actionid == 6000 or stone.itemid ~= 1304 then
		return 1
	end
end

local function roomBusy(cid, pos)
	pos.x = pos.x + 1 
	doTeleportThing(cid, pos)
	doPlayerSendTextMessage(cid, 22, "Stand in the line!")
end
	doCheckLvl(cid, 5029)
	if item.actionid == 2004 and doCheckStone(stone1pos) == 0 then
		local npos = {x=32303,y=31153,z=7}
		doChange(cid, stone1pos, monsters[1], npos)

	elseif item.actionid == 2005 and doCheckStone(stone2pos) == 0 then
		local npos = {x=32289,y=31153,z=7}
		doChange(cid, stone2pos, monsters[2], npos)
		doCreateItem(1304,1,stone1pos)

	elseif item.actionid == 2006 and doCheckStone(stone3pos) == 0 then
		local npos = {x=32275,y=31153,z=7}
		doChange(cid, stone3pos, monsters[3], npos)
		doCreateItem(1304,1,stone2pos)

	elseif item.actionid == 2007 and doCheckStone(stone4pos) == 0 then
		local npos = {x=32261,y=31153,z=7}
		doChange(cid, stone4pos, monsters[4], npos)
		doCreateItem(1304,1,stone3pos)

	elseif item.actionid == 2008 and doCheckStone(stone5pos) == 0 then
		local npos = {x=32268,y=31138,z=7}
		doChange(cid, stone5pos, monsters[5], npos)
		doCreateItem(1304,1,stone4pos)

	elseif item.actionid == 2009 and doCheckStone(stone6pos) == 0 then
		local npos = {x=32282,y=31138,z=7}
		doChange(cid, stone6pos, monsters[6], npos)
		doCreateItem(1304,1,stone5pos)

	elseif item.actionid == 2010 and doCheckStone(stone7pos) == 0 then
		local npos = {x=32296,y=31138,z=7}
		doChange(cid, stone7pos, monsters[7], npos)
		doCreateItem(1304,1,stone6pos)

	elseif item.actionid == 2011 and doCheckStone(stone8pos) == 0 then
		local npos = {x=32289,y=31124,z=7}
		doChange(cid, stone8pos, monsters[8], npos)
		doCreateItem(1304,1,stone7pos)

	elseif item.actionid == 2012 and doCheckStone(stone9pos) == 0 then
		local npos = {x=32275,y=31124,z=7}
		doChange(cid, stone9pos, monsters[9], npos)
		doCreateItem(1304,1,stone8pos)

	elseif item.actionid == 2013 and doCheckStone(stone10pos) == 0 then
		local npos = {x=32282,y=31110,z=7}
		doChange(cid, stone10pos, monsters[10], npos)
		doCreateItem(1304,1,stone9pos)

	elseif item.actionid == 2014 then
		doCreateItem(1304,1,stone10pos)
		local npos = {x=32314,y=31120,z=7}
		doTeleportThing(cid, npos)
		doSendMagicEffect(npos,10)





	elseif doCheckStone(stone10pos) == 1 then
		roomBusy(cid, pos)
	elseif doCheckStone(stone9pos) == 1 then
		roomBusy(cid, pos)
	elseif doCheckStone(stone8pos) == 1 then
		roomBusy(cid, pos)
	elseif doCheckStone(stone7pos) == 1 then
		roomBusy(cid, pos)
	elseif doCheckStone(stone6pos) == 1 then
		roomBusy(cid, pos)
	elseif doCheckStone(stone5pos) == 1 then
		roomBusy(cid, pos)
	elseif doCheckStone(stone4pos) == 1 then
		roomBusy(cid, pos)
	elseif doCheckStone(stone3pos) == 1 then
		roomBusy(cid, pos)
	elseif doCheckStone(stone2pos) == 1 then
		roomBusy(cid, pos)
	elseif doCheckStone(stone1pos) == 1 then
		roomBusy(cid, pos)
	end
end

function onAddItem(moveitem, tileitem, pos)

local function doCheckBody(moveitem, stonepos, monster)

	local stone = getThingfromPos(stonepos)
	if moveitem.itemid == 6325 and stone.itemid ~= 0  then
		doRemoveItem(stone.uid,1)
		doRemoveItem(moveitem.uid,1)
		doSendMagicEffect(stonepos,2)
	elseif moveitem.itemid == 3058 or moveitem.itemid == 3065 then
		doCreatureAddHealth(monster,-100000)
		doCreateItem(1304,1,stonepos)
		doSetItemActionId(stone.uid,5999)
		npos = {x=345,y=91,z=7}
		doTeleportThing(moveitem.uid,npos)
	end
end

	if tileitem.actionid == 3001 then 
		doCheckBody(moveitem, stone1pos, monster)
	elseif tileitem.actionid == 3002 then
		doCheckBody(moveitem, stone2pos, monster)
	elseif tileitem.actionid == 3003 then
		doCheckBody(moveitem, stone3pos, monster)
	elseif tileitem.actionid == 3004 then
		doCheckBody(moveitem, stone4pos, monster)
	elseif tileitem.actionid == 3005 then
		doCheckBody(moveitem, stone5pos, monster)
	elseif tileitem.actionid == 3006 then
		doCheckBody(moveitem, stone6pos, monster)
	elseif tileitem.actionid == 3007 then
		doCheckBody(moveitem, stone7pos, monster)
	elseif tileitem.actionid == 3008 then
		doCheckBody(moveitem, stone8pos, monster)
	elseif tileitem.actionid == 3009 then
		doCheckBody(moveitem, stone9pos, monster)
	elseif tileitem.actionid == 3010 then
		doCheckBody(moveitem, stone10pos, monster)
	end
end

and the npc
Code:
local focus = 0
local talk_start = 0
local target = 0
local following = false
local attacking = false

function onThingMove(creature, thing, oldpos, oldstackpos)

end


function onCreatureAppear(creature)

end


function onCreatureDisappear(cid, pos)
  	if focus == cid then
          selfSay('Good bye then.')
          focus = 0
          talk_start = 0
  	end
end


function onCreatureTurn(creature)

end


function msgcontains(txt, str)
  	return (string.find(txt, str) and not string.find(txt, '(%w+)' .. str) and not string.find(txt, str .. '(%w+)'))
end


function onCreatureSay(cid, type, msg)
  	local msg = string.lower(msg)

  	if msgcontains(msg, 'hi') and focus == 0 and getDistanceToCreature(cid) < 4 then
  		selfSay('Hello ' .. creatureGetName(cid) .. '! I am halvar!.')
  		focus = cid
  		talk_start = os.clock()

  	elseif msgcontains(msg, 'hi') and focus ~= cid and getDistanceToCreature(cid) < 4 then
  		selfSay('Sorry, ' .. creatureGetName(cid) .. '! I talk to you in a minute.')

	elseif focus == cid then
		talk_start = os.clock()

		if msgcontains(msg, 'arena') then
			selfSay('1000 gp for the first arena (Greenhorn). 5000gp for the second arena (Scrapper). (Warlord) the last arena 15000 gp.')

		elseif msgcontains(msg, 'greenhorn') then
			selfSay('Do you have 1000 gp?')
      			talk_state = 1

		elseif msgcontains(msg, 'scrapper') then
			selfSay('Do you have 5000 gp?')
      			talk_state = 2

		elseif msgcontains(msg, 'warlord') then
			selfSay('Do you have 15000 gp?')
      			talk_state = 3
-- --------------------------------- confirm yes ---------------------- 
		elseif msgcontains(msg, 'yes') then
			if talk_state == 1 then
				doPlayerRemoveMoney(cid,1000)
				setPlayerStorageValue(cid, 5029, 1)
				selfSay('Here you go.')

			elseif talk_state == 2 then
				doPlayerRemoveMoney(cid,5000)
				setPlayerStorageValue(cid, 5029, 2)
				selfSay('Here you go.')

			elseif talk_state == 3 then
				doPlayerRemoveMoney(cid,15000)
				setPlayerStorageValue(cid, 5029, 3)
				selfSay('Here you go.')
			end
-- -----------------------------------confirm no ---------------------------
		elseif msgcontains(msg, 'no') then
			selfSay('Then not.')

		elseif string.find(msg, '(%a*)bye(%a*)') and getDistanceToCreature(cid) < 4 then
			selfSay('Good bye, ' .. creatureGetName(cid) .. '!')
			focus = 0
			talk_start = 0
		end
	end
end

function onCreatureChangeOutfit(creature)

end


function onThink()
  	if (os.clock() - talk_start) > 30 then
  		if focus > 0 then
  			selfSay('Next Please...')
  		end
			focus = 0
  	end
 	if focus ~= 0 then
 		if getDistanceToCreature(focus) > 5 then
 			selfSay('Good bye then.')
 			focus = 0
 		end
 	end
end
 
I'm selling a script, creates 0 lags, doesn't use the npc loop thingy~.

gimmie a good offer :)

Ontopic-
Try to creat an error in the script, mostly it will give more error's that you dident get before


offtopic-
Your not the only one who has an Svarground script fully working :eek: Why sell it keep it privet
 
well u have do sth bad i have got all works perfectly only when u kill monster the stone is not dissapere i have made the switch some sqm more then the area when u use switch the stone is dissapere here is my scripts:
Svargrond login.lua
Code:
-- Umby

--  masterpos is the location that the player will first be teleported to.   It is TWO squares south of the MIDDLE of the FIRST room       (see screen shot)
local masterpos = {x=32210, y=31100, z=7, stackpos=1}  -- this must match the position in the NPC script
--  you shouldnt need to edit any more of the script.  

local stone1pos = {x = masterpos.x-6, y = masterpos.y-2, z = masterpos.z, stackpos = 1}
local stone2pos = {x = masterpos.x-20, y = masterpos.y-2, z = masterpos.z, stackpos = 1}
local stone3pos = {x = masterpos.x-34, y = masterpos.y-2, z = masterpos.z, stackpos = 1}
local stone4pos = {x = masterpos.x-48, y = masterpos.y-2, z = masterpos.z, stackpos = 1}
local stone5pos = {x = masterpos.x-41, y = masterpos.y-16, z = masterpos.z, stackpos = 1}
local stone6pos = {x = masterpos.x-27, y = masterpos.y-16, z = masterpos.z, stackpos = 1}
local stone7pos = {x = masterpos.x-13, y = masterpos.y-16, z = masterpos.z, stackpos = 1}
local stone8pos = {x = masterpos.x-20, y = masterpos.y-30, z = masterpos.z, stackpos = 1}
local stone9pos = {x = masterpos.x-34, y = masterpos.y-30, z = masterpos.z, stackpos = 1}
local stone10pos = {x = masterpos.x-27, y = masterpos.y-43, z = masterpos.z, stackpos = 1}

function onStepIn(cid, item, pos)
playerID = getGlobalStorageValue(9000)
	local function doCheckStoneId(stonepos)
		local stone = getThingfromPos(stonepos)
			if stone.itemid ~= 1354 then
				doCreateItem(1354,1,stonepos)
			end
				if stone.actionid == 6000 then
					doSetItemActionId(stone.uid,5999)
				end
	end

	local function arenaOver(cid)        --  if the player leaves, dies, logs out, wins, or is teleported out:	
		setPlayerStorageValue(cid,5029,-1)   -- reset the player arena status (hard med easy) 
		setPlayerStorageValue(cid,3002,-1)   -- player should be in the arena or not
		setPlayerStorageValue(cid,2999,-1)   -- dont mind this (addEvent)
	end
	if  (item.actionid >= 3001 and item.actionid <= 3010) then
			if isPlayer(cid) == TRUE then  --make more efficient with (and) later
				if getPlayerAccess(cid) < 3 then -- makes sure the player is not a monster/GM
					if (getPlayerStorageValue(cid, 3002) ~= 1 or getGlobalStorageValue(3000) ~= 1) then  -- player is not supposed to be in arena and must have logged in
						doTeleportThing(cid, {x = masterpos.x+21, y = masterpos.y-2, z = masterpos.z})
						doSendMagicEffect({x = masterpos.x+21, y = masterpos.y-2, z = masterpos.z},10)
						doPlayerSendTextMessage(cid, 22, "You may not log into the arena.")
						arenaOver(cid)		
					elseif (getPlayerStorageValue(cid, 9000) ~= playerID) then -- this means the player probably logged off and waited for someone else to start the arena, then logged in.   (its gotta be flawless!)
						doTeleportThing(cid, {x = masterpos.x+21, y = masterpos.y-2, z = masterpos.z})
						doSendMagicEffect({x = masterpos.x+21, y = masterpos.y-2, z = masterpos.z},10)
						doPlayerSendTextMessage(cid, 22, "You are not supposed to be in the arena at the moment.")
						arenaOver(cid)						
					end
				end
			elseif (isCreature(cid) == TRUE and getGlobalStorageValue(3000) ~= 1) then	-- if the timer runs out this will remove the creature
						doCreatureAddHealth(cid,-10000)
						doCheckStoneId(stone1pos)
						doCheckStoneId(stone2pos)
						doCheckStoneId(stone3pos)
						doCheckStoneId(stone4pos)
						doCheckStoneId(stone5pos)
						doCheckStoneId(stone6pos)
						doCheckStoneId(stone7pos)
						doCheckStoneId(stone8pos)
						doCheckStoneId(stone9pos)
						doCheckStoneId(stone10pos)
			end	
	end
end
Svargrond.lua
Code:
 -- Svargrond Arena by Szuwar
-- Thanks to Noxitu for help
-- Umby

--  masterpos is the location that the player will first be teleported to.   It is TWO squares south of the MIDDLE of the FIRST room       (see screen shot)
local masterpos = {x=32210, y=31100, z=7, stackpos=1}  -- this must match the position in the NPC script
local timeLimit = 600   						  -- this is the time limit in seconds  (600 = 10 minutes)       this has to match the timeLimit in the arenaNPC.lua script aswell.
--  you shouldnt need to edit any more of the script.  

local stone1pos = {x = masterpos.x-6, y = masterpos.y-2, z = masterpos.z, stackpos = 1}
local stone2pos = {x = masterpos.x-20, y = masterpos.y-2, z = masterpos.z, stackpos = 1}
local stone3pos = {x = masterpos.x-34, y = masterpos.y-2, z = masterpos.z, stackpos = 1}
local stone4pos = {x = masterpos.x-48, y = masterpos.y-2, z = masterpos.z, stackpos = 1}
local stone5pos = {x = masterpos.x-41, y = masterpos.y-16, z = masterpos.z, stackpos = 1}
local stone6pos = {x = masterpos.x-27, y = masterpos.y-16, z = masterpos.z, stackpos = 1}
local stone7pos = {x = masterpos.x-13, y = masterpos.y-16, z = masterpos.z, stackpos = 1}
local stone8pos = {x = masterpos.x-20, y = masterpos.y-30, z = masterpos.z, stackpos = 1}
local stone9pos = {x = masterpos.x-34, y = masterpos.y-30, z = masterpos.z, stackpos = 1}
local stone10pos = {x = masterpos.x-27, y = masterpos.y-43, z = masterpos.z, stackpos = 1}

local function doCheckStoneId(stonepos)
	local stone = getThingfromPos(stonepos)
		if stone.itemid ~= 1354 then
			doCreateItem(1354,1,stonepos)
		end
			if stone.actionid == 6000 then
				doSetItemActionId(stone.uid,5999)
			end
end
local function doChange(cid, pos, creature, tpos)
	local stone = getThingfromPos(pos)
	doSetItemActionId(stone.uid,6000)
	local pos = getThingPos(stone.uid)
	monster = doSummonCreature(creature, pos)
	doTeleportThing(cid,tpos)
	doSendAnimatedText(tpos,"Fight!",198)	
	doSendMagicEffect(pos,10)
end
function onStepIn(cid, item, pos)
playerID = getGlobalStorageValue(9000)

local function arenaOver(cid)        --  if the player leaves, dies, logs out, wins, or is teleported out:
	setGlobalStorageValue(3000,-1)       --  if the arena is in use or not
	setPlayerStorageValue(cid,5029,-1)   -- reset the player arena status (hard med easy) 
	setPlayerStorageValue(cid,3002,-1)   -- if the player is still in the arena or not
	setPlayerStorageValue(cid,2999,-1)   -- dont mind this (addEvent)
end
local function doCheckLvl(cid, storage)
	if getPlayerStorageValue(cid, storage) == 1 then      -- easy
		monsters = {"Frostfur", "Bloodpaw", "Bovinus", "Achad", "Colerian the Barbarian", "The Hairy One", "Axeitus Headbanger", "Rocky", "Cursed Gladiator", "Orcus the Cruel"}
	elseif getPlayerStorageValue(cid, storage) == 2 then  -- medium
		monsters = {"Avalanche", "Kreebosh the Exile", "The Dark Dancer", "The Hag", "Slim", "Grimgor Guteater", "Drasilla", "Spirit of Earth", "Spirit of Water", "Spirit of Fire"}
	elseif getPlayerStorageValue(cid, storage) == 3 then  -- hard
		monsters = {"Webster", "Darakan the Executioner", "Norgle Glacierbeard", "The Pit Lord", "Svoren The Mad", "The Masked Marauder", "Gnorre Chyllson", "Fallen Mooh'Tah Master Ghar", "Deathbringer", "The Obliverator"}
	end
end
local function doCheckStone(stonepos)
	local stone = getThingfromPos(stonepos)
		if stone.actionid ~= 6000 and stone.itemid == 1354 then
			return 0
		elseif stone.actionid == 6000 or stone.itemid ~= 1354 then
			return 1
		end
end
local function roomBusy(cid, pos)	
		doTeleportThing(cid, {x = masterpos.x+21, y = masterpos.y-2, z = masterpos.z})
		doSendMagicEffect({x = masterpos.x+21, y = masterpos.y-2, z = masterpos.z},10)
		doSendMagicEffect(pos,10)
		doPlayerSendTextMessage(cid, 22, "The arena is in use right now, wait your turn!")
end
	
doCheckLvl(cid, 5029)

if item.actionid == 2002 then  
		doTeleportThing(cid, {x = masterpos.x+21, y = masterpos.y-2, z = masterpos.z})
		doSendMagicEffect({x = masterpos.x+21, y = masterpos.y-2, z = masterpos.z},10)
		doCheckStoneId(stone1pos)
		doCheckStoneId(stone2pos)
		doCheckStoneId(stone3pos)
		doCheckStoneId(stone4pos)
		doCheckStoneId(stone5pos)
		doCheckStoneId(stone6pos)
		doCheckStoneId(stone7pos)
		doCheckStoneId(stone8pos)
		doCheckStoneId(stone9pos)
		doCheckStoneId(stone10pos)
		arenaOver(cid)		
		doCreatureAddHealth(cid, monster,-10000)  -- might give an error if someone leaves after the monster is dead
elseif item.actionid == 2003 then  -- tp leading from the reward room to the NPC area
		doTeleportThing(cid, {x = masterpos.x+21, y = masterpos.y-2, z = masterpos.z})
		doSendMagicEffect({x = masterpos.x+21, y = masterpos.y-2, z = masterpos.z},10)
elseif item.actionid == 2004 and doCheckStone(stone1pos) == 0 then       -- from the npc room, teleports you to room one
	if 	(getGlobalStorageValue(3000) == 1 and hasAddedEvent ~= 1) then
		local passArgs = {cid=cid, npos=npos}
		setPlayerStorageValue(cid,5030,1)  
		setGlobalStorageValue(3001,1)   
		local npos = masterpos  
		if getPlayerStorageValue(cid,2999) == -1 then
			addEvent(after1second,1000,passArgs)		
			setPlayerStorageValue(cid,2999,1)  
		end
	else  -- player was tped past the exp doors or logged in there or something
		doTeleportThing(cid, {x = masterpos.x+21, y = masterpos.y-2, z = masterpos.z})
		doSendMagicEffect({x = masterpos.x+21, y = masterpos.y-2, z = masterpos.z},10)
		doPlayerSendTextMessage(cid, 22, "Please talk to the NPC before entering the arena.")	
		setPlayerStorageValue(cid,5029,-1)   -- reset the player arena status (hard med easy) 
		setPlayerStorageValue(cid,3002,-1)   -- if the player is still in the arena or not	
	end		
elseif item.actionid == 2005 and doCheckStone(stone2pos) == 0 then       -- this takes you to room 2
	if getPlayerStorageValue(cid,9000) == playerID then
		local npos = {x = masterpos.x-14, y = masterpos.y, z = masterpos.z}
		local mpos = {x=npos.x, y=npos.y-4, z=npos.z}
		doChange(cid, mpos, monsters[2], npos)	
			if getThingfromPos(stone1pos) ~= 1354 then
				doCreateItem(1354,1,stone1pos)
			end
	else
		doTeleportThing(cid, {x = masterpos.x+21, y = masterpos.y-2, z = masterpos.z})
		doSendMagicEffect({x = masterpos.x+21, y = masterpos.y-2, z = masterpos.z},10)	
		setPlayerStorageValue(cid,5029,-1) 
		setPlayerStorageValue(cid,3002,-1)   
		setPlayerStorageValue(cid,2999,-1)  
		doPlayerSendTextMessage(cid, 22, "You may not log into the arena.")		
	end
elseif item.actionid == 2006 and doCheckStone(stone3pos) == 0 then
	if getPlayerStorageValue(cid,9000) == playerID then
		local npos = {x = masterpos.x-28, y = masterpos.y, z = masterpos.z}
		local mpos = {x=npos.x, y=npos.y-4, z=npos.z}
		doChange(cid, mpos, monsters[3], npos)
			if getThingfromPos(stone2pos) ~= 1354 then
				doCreateItem(1354,1,stone2pos)
			end
	else
		doTeleportThing(cid, {x = masterpos.x+21, y = masterpos.y-2, z = masterpos.z})
		doSendMagicEffect({x = masterpos.x+21, y = masterpos.y-2, z = masterpos.z},10)	
		setPlayerStorageValue(cid,5029,-1) 
		setPlayerStorageValue(cid,3002,-1)   
		setPlayerStorageValue(cid,2999,-1)  
		doPlayerSendTextMessage(cid, 22, "You may not log into the arena.")		
	end
elseif item.actionid == 2007 and doCheckStone(stone4pos) == 0 then
	if getPlayerStorageValue(cid,9000) == playerID then
		local npos = {x = masterpos.x-42, y = masterpos.y, z = masterpos.z}
		local mpos = {x=npos.x, y=npos.y-4, z=npos.z}
		doChange(cid, mpos, monsters[4], npos)
			if getThingfromPos(stone3pos) ~= 1354 then
				doCreateItem(1354,1,stone3pos)
			end
	else
		doTeleportThing(cid, {x = masterpos.x+21, y = masterpos.y-2, z = masterpos.z})
		doSendMagicEffect({x = masterpos.x+21, y = masterpos.y-2, z = masterpos.z},10)	
		setPlayerStorageValue(cid,5029,-1) 
		setPlayerStorageValue(cid,3002,-1)   
		setPlayerStorageValue(cid,2999,-1)  
		doPlayerSendTextMessage(cid, 22, "You may not log into the arena.")		
	end
elseif item.actionid == 2008 and doCheckStone(stone5pos) == 0 then
	if getPlayerStorageValue(cid,9000) == playerID then
		local npos = {x = masterpos.x-36, y = masterpos.y-13, z = masterpos.z}
		local mpos = {x=npos.x, y=npos.y-4, z=npos.z}
		doChange(cid, mpos, monsters[5], npos)
			if getThingfromPos(stone4pos) ~= 1354 then
				doCreateItem(1354,1,stone4pos)
			end
	else
		doTeleportThing(cid, {x = masterpos.x+21, y = masterpos.y-2, z = masterpos.z})
		doSendMagicEffect({x = masterpos.x+21, y = masterpos.y-2, z = masterpos.z},10)	
		setPlayerStorageValue(cid,5029,-1) 
		setPlayerStorageValue(cid,3002,-1)   
		setPlayerStorageValue(cid,2999,-1)  
		doPlayerSendTextMessage(cid, 22, "You may not log into the arena.")		
	end
elseif item.actionid == 2009 and doCheckStone(stone6pos) == 0 then
	if getPlayerStorageValue(cid,9000) == playerID then
		local npos = {x = masterpos.x-22, y = masterpos.y-13, z = masterpos.z}
		local mpos = {x=npos.x, y=npos.y-4, z=npos.z}
		doChange(cid, mpos, monsters[6], npos)
			if getThingfromPos(stone5pos) ~= 1354 then
				doCreateItem(1354,1,stone5pos)
			end
	else
		doTeleportThing(cid, {x = masterpos.x+21, y = masterpos.y-2, z = masterpos.z})
		doSendMagicEffect({x = masterpos.x+21, y = masterpos.y-2, z = masterpos.z},10)	
		setPlayerStorageValue(cid,5029,-1) 
		setPlayerStorageValue(cid,3002,-1)   
		setPlayerStorageValue(cid,2999,-1)  
		doPlayerSendTextMessage(cid, 22, "You may not log into the arena.")		
	end
elseif item.actionid == 2010 and doCheckStone(stone7pos) == 0 then
	if getPlayerStorageValue(cid,9000) == playerID then
		local npos = {x = masterpos.x-8, y = masterpos.y-13, z = masterpos.z}
		local mpos = {x=npos.x, y=npos.y-4, z=npos.z}
		doChange(cid, mpos, monsters[7], npos)
			if getThingfromPos(stone6pos) ~= 1354 then
				doCreateItem(1354,1,stone6pos)
			end
	else
		doTeleportThing(cid, {x = masterpos.x+21, y = masterpos.y-2, z = masterpos.z})
		doSendMagicEffect({x = masterpos.x+21, y = masterpos.y-2, z = masterpos.z},10)	
		setPlayerStorageValue(cid,5029,-1) 
		setPlayerStorageValue(cid,3002,-1)   
		setPlayerStorageValue(cid,2999,-1)  
		doPlayerSendTextMessage(cid, 22, "You may not log into the arena.")		
	end
elseif item.actionid == 2011 and doCheckStone(stone8pos) == 0 then
	if getPlayerStorageValue(cid,9000) == playerID then
		local npos = {x = masterpos.x-16, y = masterpos.y-26, z = masterpos.z}
		local mpos = {x=npos.x, y=npos.y-4, z=npos.z}
		doChange(cid, mpos, monsters[8], npos)
			if getThingfromPos(stone7pos) ~= 1354 then
				doCreateItem(1354,1,stone7pos)
			end
	else
		doTeleportThing(cid, {x = masterpos.x+21, y = masterpos.y-2, z = masterpos.z})
		doSendMagicEffect({x = masterpos.x+21, y = masterpos.y-2, z = masterpos.z},10)	
		setPlayerStorageValue(cid,5029,-1) 
		setPlayerStorageValue(cid,3002,-1)   
		setPlayerStorageValue(cid,2999,-1)  
		doPlayerSendTextMessage(cid, 22, "You may not log into the arena.")		
	end
elseif item.actionid == 2012 and doCheckStone(stone9pos) == 0 then
	if getPlayerStorageValue(cid,9000) == playerID then
		local npos = {x = masterpos.x-30, y = masterpos.y-26, z = masterpos.z}
		local mpos = {x=npos.x, y=npos.y-4, z=npos.z}
		doChange(cid, mpos, monsters[9], npos)
			if getThingfromPos(stone8pos) ~= 1354 then
				doCreateItem(1354,1,stone8pos)
			end
	else
		doTeleportThing(cid, {x = masterpos.x+21, y = masterpos.y-2, z = masterpos.z})
		doSendMagicEffect({x = masterpos.x+21, y = masterpos.y-2, z = masterpos.z},10)	
		setPlayerStorageValue(cid,5029,-1) 
		setPlayerStorageValue(cid,3002,-1)   
		setPlayerStorageValue(cid,2999,-1) 
		doPlayerSendTextMessage(cid, 22, "You may not log into the arena.")		 
	end
elseif item.actionid == 2013 and doCheckStone(stone10pos) == 0 then   -- leads to room ten
	if getPlayerStorageValue(cid,9000) == playerID then
		local npos = {x = masterpos.x-24, y = masterpos.y-39, z = masterpos.z}
		local mpos = {x = npos.x, y = npos.y-4, z = npos.z}
		doChange(cid, mpos, monsters[10], npos)
			if getThingfromPos(stone9pos) ~= 1354 then
				doCreateItem(1354,1,stone9pos)
			end
	else
		doTeleportThing(cid, {x = masterpos.x+21, y = masterpos.y-2, z = masterpos.z})
		doSendMagicEffect({x = masterpos.x+21, y = masterpos.y-2, z = masterpos.z},10)	
		setPlayerStorageValue(cid,5029,-1) 
		setPlayerStorageValue(cid,3002,-1)   
		setPlayerStorageValue(cid,2999,-1)  
		doPlayerSendTextMessage(cid, 22, "You may not log into the arena.")					
	end
elseif item.actionid == 2014 then
	local npos = {x = masterpos.x+12, y = masterpos.y-20, z = masterpos.z-1} -- exit
		if getThingfromPos(stone10pos) ~= 1354 then
			doCreateItem(1354,1,stone10pos)
		end
		if getPlayerStorageValue(cid,5029) == 1 then  -- easy mode
			setPlayerStorageValue(cid,3001,2)
		elseif getPlayerStorageValue(cid,5029) == 2 then  -- medium mode
			setPlayerStorageValue(cid,3001,3)
		elseif getPlayerStorageValue(cid,5029) == 3 then  -- hard mode
			setPlayerStorageValue(cid,3001,4)
		end
			doTeleportThing(cid, npos)
			doCreatureSay(cid, "Respect and honor to you, champion!", 16)
			doSendMagicEffect(npos,10)
			arenaOver(cid)
elseif item.actionid == 3011 then  -- room to the right of the NPC    this will start the time limit
	if isPlayer(cid) == TRUE then  --make more efficient with (and) later
		if getPlayerAccess(cid) < 3 then -- makes sure the player is not a monster/GM	
			if getPlayerStorageValue(cid, 3002) ~= 1 or getGlobalStorageValue(3000) ~= 1 then 
				doTeleportThing(cid, {x = masterpos.x+21, y = masterpos.y-2, z = masterpos.z})
				doSendMagicEffect({x = masterpos.x+21, y = masterpos.y-2, z = masterpos.z},10)	
				doPlayerSendTextMessage(cid, 22, "You may not log into the arena.")						
				arenaOver(cid)
			elseif getPlayerStorageValue(cid, 2998) ~= 1 then
				uniqueID = getGlobalStorageValue(9000) 
				local passArgs = {cid = cid, monster = monster, uniqueID = uniqueID}
				addEvent(afterTimeLimit,timeLimit,passArgs)
				setPlayerStorageValue(cid,2998,1)
			end
		end
	end		
				
elseif doCheckStone(stone10pos) == 1 then -- confused yet?
	roomBusy(cid, pos)
elseif doCheckStone(stone9pos) == 1 then
	roomBusy(cid, pos)
elseif doCheckStone(stone8pos) == 1 then
	roomBusy(cid, pos)
elseif doCheckStone(stone7pos) == 1 then
	roomBusy(cid, pos)
elseif doCheckStone(stone6pos) == 1 then
	roomBusy(cid, pos)
elseif doCheckStone(stone5pos) == 1 then
	roomBusy(cid, pos)
elseif doCheckStone(stone4pos) == 1 then
	roomBusy(cid, pos)
elseif doCheckStone(stone3pos) == 1 then
	roomBusy(cid, pos)
elseif doCheckStone(stone2pos) == 1 then
	roomBusy(cid, pos)
elseif doCheckStone(stone1pos) == 1 then
	roomBusy(cid, pos)
end
end
function onAddItem(moveitem, tileitem, pos)

local function doRemoveStone(stonepos)  
	repeat
		local stone1 = getThingfromPos(stonepos)
			if stone1.itemid == 1354 then
				doRemoveItem(stone1.uid,1)
			end
	until stone1.itemid ~= 1354
end

local function doCheckBody(moveitem, stonepos, monster)
local stone = getThingfromPos(stonepos)
	if (moveitem.itemid == 6324 and stone.itemid == 1354) then   
		doRemoveStone(stonepos)
		doRemoveItem(moveitem.uid,1)
		doSendMagicEffect(stonepos,2)	
		if getGlobalStorageValue(3000) == 1 then
			doSendAnimatedText(pos,"Victory!",198)
		else		
			doCheckStoneId(stone1pos)
			doCheckStoneId(stone2pos)
			doCheckStoneId(stone3pos)
			doCheckStoneId(stone4pos)
			doCheckStoneId(stone5pos)
			doCheckStoneId(stone6pos)
			doCheckStoneId(stone7pos)
			doCheckStoneId(stone8pos)
			doCheckStoneId(stone9pos)
			doCheckStoneId(stone10pos)
		end
	elseif moveitem.itemid == 3058 or moveitem.itemid == 3065 then   
			--doRemoveItem(moveitem.uid,1)     -- server needs time to add the bp and shit (i guess)  to the body so we use addEvent to do it 1 second later       otherwise - crash
			local dPos = getThingPos(moveitem.uid)
			local passArgs = {dPos = dPos}
			addEvent(removeCorpse,1000,passArgs)
			doCreatureAddHealth(cid, monster,-10000)
			--local pos = getThingPos(monster)
			doCheckStoneId(stone1pos)
			doCheckStoneId(stone2pos)
			doCheckStoneId(stone3pos)
			doCheckStoneId(stone4pos)
			doCheckStoneId(stone5pos)
			doCheckStoneId(stone6pos)
			doCheckStoneId(stone7pos)
			doCheckStoneId(stone8pos)
			doCheckStoneId(stone9pos)
			doCheckStoneId(stone10pos)
			setGlobalStorageValue(3000,-1)       --  if the arena is in use or not
			doSetItemActionId(stone.uid,5999)    
	end
end
	if tileitem.actionid == 3001 then
		doCheckBody(moveitem, stone1pos, monster)
	elseif tileitem.actionid == 3002 then
		doCheckBody(moveitem, stone2pos, monster)
	elseif tileitem.actionid == 3003 then
		doCheckBody(moveitem, stone3pos, monster)
	elseif tileitem.actionid == 3004 then
		doCheckBody(moveitem, stone4pos, monster)
	elseif tileitem.actionid == 3005 then
		doCheckBody(moveitem, stone5pos, monster)
	elseif tileitem.actionid == 3006 then
		doCheckBody(moveitem, stone6pos, monster)
	elseif tileitem.actionid == 3007 then
		doCheckBody(moveitem, stone7pos, monster)
	elseif tileitem.actionid == 3008 then
		doCheckBody(moveitem, stone8pos, monster)
	elseif tileitem.actionid == 3009 then
		doCheckBody(moveitem, stone9pos, monster)
	elseif tileitem.actionid == 3010 then
		doCheckBody(moveitem, stone10pos, monster)
	end
end

function after1second(passArgs) -- this will check the players position after the NPC has checked its storages and decided to tp it or not   (i know its inefficient but it works and is flawless)
local Ppos = getPlayerPosition(passArgs.cid)
if (Ppos.x > masterpos.x+22) then -- player was not teleported by the NPC and doesnt need to be in that area.
	doTeleportThing(passArgs.cid,{x = masterpos.x+21, y = masterpos.y-2, z = masterpos.z})
	doSendMagicEffect({x = masterpos.x+21, y = masterpos.y-2, z = masterpos.z},10)
	doPlayerSendTextMessage(passArgs.cid, 22, "Please talk to the NPC before entering the arena.")	
else
	local stone = getThingfromPos(stone1pos)
	doSetItemActionId(stone.uid,6000)
	local pos = getThingPos(stone.uid)
	monster = doSummonCreature(monsters[1], {x=pos.x+5, y=pos.y-2, z=pos.z})
	doSendMagicEffect({x=pos.x+5, y=pos.y-2, z=pos.z},10)
end
end

function removeCorpse(passArgs)
local dPos = passArgs.dPos
local body = getThingfromPos({x=dPos.x, y=dPos.y, z=dPos.z, stackpos=255}) -- FINALLY
doRemoveItem(body.uid,1)
end

function afterTimeLimit(passArgs)
doCreatureAddHealth(cid, passArgs.monster,-10000)
end
Arena NPC.xml
Code:
<npc name="Arena NPC" script="data/npc/scripts/arena NPC.lua" WALKINTERVAL="1500" floorchange="0" access="3" level="1" maglevel="1">
	<health now="150" max="150"/>
	<look type="143" head="3" body="77" legs="97" feet="116" addons="1" corpse="2212"/>
	<parameters>		
	</parameters>
</npc>
arena NPC.lua
Code:
-- Umby

local focus = 0
local talk_start = 0
local target = 0
local following = false
local attacking = false

--  	      masterpos is the location that the player will first be teleported to.   It is TWO squares south of the MIDDLE of the FIRST room       (see screen shot)
local masterpos = {x=32210, y=31100, z=7, stackpos=1}   -- this must match the position in the movement script
local timeLimit = 600   							-- this is the time limit in seconds  (600 = 10 minutes)       this has to match the timeLimit in the Svargrond.lua script aswell.
local arenaCost = {1000, 5000, 10000} 				-- this is the ammount of gp it costs to start the arena  (first, second, third.)
--  you shouldnt need to edit any more of the script.


local stone1pos = {x = masterpos.x-6, y = masterpos.y-2, z = masterpos.z, stackpos = 1}
local stone2pos = {x = masterpos.x-20, y = masterpos.y-2, z = masterpos.z, stackpos = 1}
local stone3pos = {x = masterpos.x-34, y = masterpos.y-2, z = masterpos.z, stackpos = 1}
local stone4pos = {x = masterpos.x-48, y = masterpos.y-2, z = masterpos.z, stackpos = 1}
local stone5pos = {x = masterpos.x-41, y = masterpos.y-16, z = masterpos.z, stackpos = 1}
local stone6pos = {x = masterpos.x-27, y = masterpos.y-16, z = masterpos.z, stackpos = 1}
local stone7pos = {x = masterpos.x-13, y = masterpos.y-16, z = masterpos.z, stackpos = 1}
local stone8pos = {x = masterpos.x-20, y = masterpos.y-30, z = masterpos.z, stackpos = 1}
local stone9pos = {x = masterpos.x-34, y = masterpos.y-30, z = masterpos.z, stackpos = 1}
local stone10pos = {x = masterpos.x-27, y = masterpos.y-43, z = masterpos.z, stackpos = 1}
local npcpos = {x = masterpos.x+21, y = masterpos.y-2, z = masterpos.z}
local playerID = getGlobalStorageValue(9000)

function msgcontains(txt, str)
  	return (string.find(txt, str) and not string.find(txt, '(%w+)' .. str) and not string.find(txt, str .. '(%w+)'))
end
function onThingMove(creature, thing, oldpos, oldstackpos)
end
function onCreatureAppear(creature)
end
function onCreatureTurn(creature)
end
local function arenaOver(cid)        --  if the player leaves, dies, logs out, wins, or is teleported out:
	setGlobalStorageValue(3000,-1)       --  if the arena is in use or not
	setGlobalStorageValue(9000,-1)       --  if the arena is in use or not
	arenaStatus = 0
	arenaStatus1 = 0
	setPlayerStorageValue(cid,5029,-1)   -- reset the player arena status (hard med easy) 
	setPlayerStorageValue(cid,3002,-1)   -- if the player is still in the arena or not
	setPlayerStorageValue(cid,9000,-1)   -- reset the player ID
	focus = 0
	talk_start = 0
end
local function arenaStartFirstLvl(cid)
	setGlobalStorageValue(3000,1)      --  if the arena is in use or not  
	setPlayerStorageValue(cid,5029,1)      -- set the player arena status (hard med easy) 
	setPlayerStorageValue(cid,3002,1)      -- if the player is still in the arena or not
	doTeleportThing(cid, {x=masterpos.x+24,y=masterpos.y-1,z=masterpos.z})
	arenaStatus = arenaStatus1
end
local function arenaStartSecondLvl(cid)    
	setGlobalStorageValue(3000,1)      --  if the arena is in use or not  
	setPlayerStorageValue(cid,5029,2)      -- set the player arena status (hard med easy) 
	setPlayerStorageValue(cid,3002,1)      -- if the player is still in the arena or not
	doTeleportThing(cid, {x = masterpos.x+24, y = masterpos.y-1, z = masterpos.z})  
	arenaStatus = arenaStatus1
end
local function arenaStartThirdLvl(cid)   
	setGlobalStorageValue(3000,1)      --  if the arena is in use or not  
	setPlayerStorageValue(cid,5029,3)      -- set the player arena status (hard med easy) 
	setPlayerStorageValue(cid,3002,1)      -- if the player is still in the arena or not 
	doTeleportThing(cid, {x = masterpos.x+24, y = masterpos.y-1, z = masterpos.z})
	arenaStatus = arenaStatus1
end
local function doCheckStone(stonepos)
	local stone = getThingfromPos(stonepos)
		if stone.itemid ~= 1354 then
			doCreateItem(1354,1,stonepos)
		end
			if stone.actionid == 6000 then
				doSetItemActionId(stone.uid,5999)
			end
end
function onCreatureDisappear(cid, pos)
if getGlobalStorageValue(3000) ~= 1 then
	arenaStatus = 0
	arenaStatus1 = 0
	setPlayerStorageValue(cid,5029,-1)   -- reset the player arena status (hard med easy) 
	setPlayerStorageValue(cid,3002,-1)   -- if the player is still in the arena or not
	focus = 0
end
end
function onCreatureSay(cid, type, msg)

msg = string.lower(msg)
cname = getCreatureName(cid)

  	if (msgcontains(msg, 'hi') and (focus == 0) and getDistanceToCreature(cid) < 4 and getGlobalStorageValue(3000) ~= 1) then
			selfSay('Hello competitor! Do you want to fight in the arena or shall I explain the rules first?')
			talk_state = 0
			arenaStatus = 0
			focus = cid	
			talk_start = os.clock()
			setGlobalStorageValue(3000,-1)
			setPlayerStorageValue(cid,5030,-1)  
			setPlayerStorageValue(cid,5029,-1)   -- reset the player arena status (hard med easy) 
			setPlayerStorageValue(cid,3002,-1)   -- if the player is still in the arena or not
			setPlayerStorageValue(cid,2998,-1)    -- resets so that the time limit will start
			setPlayerStorageValue(cid,9000,-1)   -- playerID reset so no one has the same one when they start (unless you win the lottery often)
			setPlayerStorageValue(cid,2999,-1)   -- this makes sure the player isnt tped into the arena twice by being an idiot and stepping on the start teleport more then once in 0.5 seconds  (might sound confusing)
  	elseif (msgcontains(msg, 'hi') and (focus ~= cid) and getDistanceToCreature(cid) < 4 and getGlobalStorageValue(3000) == 1 and getPlayerStorageValue(cid,5029) == 1 and getPlayerStorageValue(cid,3002) > 0) then
	  	setPlayerStorageValue(cid,5029,-1)   -- reset the player arena status (hard med easy) 
		setPlayerStorageValue(cid,3002,-1)   -- if the player is still in the arena or not
		selfSay('Someone is currently participating in the arena.  Please wait your turn.')	
	elseif (msgcontains(msg, 'hi') and (focus ~= cid) and getDistanceToCreature(cid) < 4 and getGlobalStorageValue(3000) == 1) then
		selfSay('Someone is currently participating in the arena.  Please wait your turn.')	
	elseif (focus == cid and getPlayerStorageValue(cid,3002) < 0) then
		talk_start = os.clock()	
		if msgcontains(msg, 'rules') or msgcontains(msg, 'rule') or msgcontains(msg, 'first') then	
			selfSay('What do you want to know? Something about the three different difficulties, the general rules or the prices? Maybe you also want to know what happens when you die?')			
		elseif msgcontains(msg, 'die') or msgcontains(msg, 'death') then	
			selfSay('It would be better not to die! In every pit there is an emergency exit to the south. If you die in a pit... well... your corpse and backpack are gone, so enter at your own risk.')			
		elseif msgcontains(msg, 'different') or msgcontains(msg, 'difficulties') or msgcontains(msg, 'level') or msgcontains(msg, 'lvl') then	
			selfSay('There are three difficulties: Greenhorn, Scrapper and Warlord. On each challenge you will be confronted with ten monsters increasing in strength.')			
		elseif talk_state == 0 and (msgcontains(msg, 'greenhorn') or msgcontains(msg, 'green') or msgcontains(msg, 'horn')) then	
			selfSay('That is the easiest way in our arena. The fee is 1000 gold. We were setting this up for of our children to challenge some easy monsters and train them for the future.')			
		elseif talk_state == 0 and (msgcontains(msg, 'scrapper') or msgcontains(msg, 'scrap')) then	
			selfSay('The most common difficulty for us. The fee is 5000 gold. So if you are experienced in fighting middle class monsters this is your challenge!')			
		elseif talk_state == 0 and (msgcontains(msg, 'warlord') or msgcontains(msg, 'war') or msgcontains(msg, 'lord')) then	
			selfSay('Only the strongest among us will take this challenge. The fee is 10000 gold. If you pass that I promise you the respect of all citizens here. You will be a hero!')			
		elseif msgcontains(msg, 'price') or msgcontains(msg, 'prices') or msgcontains(msg, 'cost') or msgcontains(msg, 'offer') then	
			selfSay('The fee is 1,000/5,000/10,000 gold for one try. Remember that if you die, it is YOUR problem and you won\'t be able to get back to your corpse and your backpack.')			
		elseif msgcontains(msg, 'general') then	
			selfSay('Basically you pay me a fee, and you are sent into an arena with 10 different stages.  If you succeed you will be rewarded accordingly.')	
		elseif talk_state == 1 and (msgcontains(msg, 'greenhorn') or msgcontains(msg, 'green') or msgcontains(msg, 'horn')) then
			if getPlayerStorageValue(cid,3001) < 2 then	
				selfSay('The fee is 1,000 gold for one try. Remember that if you die, it is YOUR problem and you won\'t be able to get back to your corpse and your backpack. Do you really want to participate in the arena in the low difficulty?')				
				arenaStatus1 = 1				
				doCheckStone(stone1pos)
				doCheckStone(stone2pos)
				doCheckStone(stone3pos)
				doCheckStone(stone4pos)
				doCheckStone(stone5pos)
				doCheckStone(stone6pos)
				doCheckStone(stone7pos)
				doCheckStone(stone8pos)
				doCheckStone(stone9pos)
				doCheckStone(stone10pos)		
			elseif getPlayerStorageValue(cid,3001) == 2 or getPlayerStorageValue(cid,3001) == 3 then
				selfSay('You have already completed the arena on this difficulty.')		
			elseif getPlayerStorageValue(cid,3001) == 4 then
				selfSay('You may not enter the arena after finishing it.')
			end			
		elseif talk_state == 1 and (msgcontains(msg, 'scrapper') or msgcontains(msg, 'scrap')) then	
			if getPlayerStorageValue(cid,3001) == -1 then
				selfSay('You have to complete the \'Greenhorn\' difficulty before you may attempt the \'Scrapper\' difficulty.')
			elseif getPlayerStorageValue(cid,3001) == 3 then
				selfSay('You have already completed the arena on this difficulty.')		
			elseif getPlayerStorageValue(cid,3001) == 4 then
				selfSay('You may not enter the arena after finishing it.')
			elseif getPlayerStorageValue(cid,3001) == 2 then	
				selfSay('The fee is 5,000 gold for one try. Remember that if you die, it is YOUR problem and you won\'t be able to get back to your corpse and your backpack. Do you really want to participate in the arena in the medium difficulty?')				
				arenaStatus1 = 2				
				doCheckStone(stone1pos)
				doCheckStone(stone2pos)
				doCheckStone(stone3pos)
				doCheckStone(stone4pos)
				doCheckStone(stone5pos)
				doCheckStone(stone6pos)
				doCheckStone(stone7pos)
				doCheckStone(stone8pos)
				doCheckStone(stone9pos)
				doCheckStone(stone10pos)					
			end			
		elseif talk_state == 1 and (msgcontains(msg, 'warlord') or msgcontains(msg, 'war') or msgcontains(msg, 'lord')) then
			if getPlayerStorageValue(cid,3001) == -1 then
				selfSay('You have to complete the \'Greenhorn\' difficulty before you may attempt the \'Warlord\' difficulty.')
			elseif getPlayerStorageValue(cid,3001) == 2 then
				selfSay('You have to complete the \'Scrapper\' difficulty before you may attempt the \'Warlord\' difficulty.')	
			elseif getPlayerStorageValue(cid,3001) == 4 then
				selfSay('You may not enter the arena after finishing it.')
			elseif getPlayerStorageValue(cid,3001) == 3 then	
				selfSay('The fee is 10,000 gold for one try. Remember that if you die, it is YOUR problem and you won\'t be able to get back to your corpse and your backpack. Do you really want to participate in the arena in the high difficulty?')				
				arenaStatus1 = 3				
				doCheckStone(stone1pos)
				doCheckStone(stone2pos)
				doCheckStone(stone3pos)
				doCheckStone(stone4pos)
				doCheckStone(stone5pos)
				doCheckStone(stone6pos)
				doCheckStone(stone7pos)
				doCheckStone(stone8pos)
				doCheckStone(stone9pos)
				doCheckStone(stone10pos)						
			end		
		elseif msgcontains(msg, 'fight') or msgcontains(msg, 'start') or msgcontains(msg, 'begin') then	
				selfSay('So you agree to the rules and want to participate in the challenge? Which difficulty do you choose, Greenhorn, Scrapper or Warlord?')	
				talk_state = 1
		elseif msgcontains(msg, 'no') then	
			selfSay('Well get back to me when you\'d like to attempt the arena.')		
			talk_state = 0
		elseif msgcontains(msg, 'bye') then	
			selfSay('See ya next time.')		
			focus = 0
			talk_state = 0
			talk_start = 0
		elseif talk_state == 1 and msgcontains(msg, 'yes') then	
			if arenaStatus1 == 1 then  --first
				if (doPlayerRemoveMoney(focus, arenaCost[1]) == TRUE) then	
					selfSay('As you wish!')	
					talk_state = 0						
					arenaStartFirstLvl(focus) 						
					setGlobalStorageValue(3001,-1) -- this will turn to 1 and make the NPC tp the player in when they step on the entrance TP					
					local rand = math.random(1, 15000)  -- this will make the player unique hopefully
					setGlobalStorageValue(9000,rand) 
					setPlayerStorageValue(cid,9000,(getGlobalStorageValue(9000))) -- i cant believe it was so easy and i wasted 3 days
				else
					selfSay('You dont have enough gold to attempt this difficulty.')
					talk_state = 0				
				end		
			elseif arenaStatus1 == 2 then  --second
				if (doPlayerRemoveMoney(focus, arenaCost[2]) == TRUE) then
					selfSay('As you wish!')	
					talk_state = 0		
					arenaStartSecondLvl(focus) 
					setGlobalStorageValue(3001,-1) -- this will turn to 1 and make the NPC tp the player in when they step on the entrance TP			
					local rand = math.random(1, 15000)  -- this will make the player unique hopefully
					setGlobalStorageValue(9000,rand) 
					setPlayerStorageValue(cid,9000,(getGlobalStorageValue(9000))) -- i cant believe it was so easy and i wasted 3 days
				else
					selfSay('You dont have enough gold to attempt this difficulty.')
					talk_state = 0				
				end		
			elseif arenaStatus1 == 3 then  --third
				if (doPlayerRemoveMoney(focus, arenaCost[3]) == TRUE) then
					selfSay('As you wish!')	
					talk_state = 0		
					arenaStartThirdLvl(focus)
					setGlobalStorageValue(3001,-1) -- this will turn to 1 and make the NPC tp the player in when they step on the entrance TP			
					local rand = math.random(1, 15000)  -- this will make the player unique hopefully
					setGlobalStorageValue(9000,rand) 
					setPlayerStorageValue(cid,9000,(getGlobalStorageValue(9000))) -- i cant believe it was so easy and i wasted 3 days
				else
					selfSay('You dont have enough gold to attempt this difficulty.')	
					talk_state = 0			
				end				
			end		
		end
	end
end
function onThink()
	doNpcSetCreatureFocus(focus)
	  if focus > 0 then
		if (getGlobalStorageValue(3001) == 1 and getPlayerStorageValue(focus,5030) == 1) then  -- this is going to be what teleports the player into the arena to make sure that no one gets in without the NPC's focus      also makes sure the player stepped on the teleport and not someone else
			doTeleportThing(focus, {x = masterpos.x, y = masterpos.y, z = masterpos.z})
			doSendMagicEffect({x = masterpos.x, y = masterpos.y, z = masterpos.z},10)	
			setGlobalStorageValue(3001,-1)  
			setPlayerStorageValue(focus,5030,-1)  				
	
		elseif (getPlayerStorageValue(focus,3002) == 1 and (os.clock() - talk_start) > timeLimit) then -- player ran out of time while in the arena 
			doTeleportThing(focus, {x = masterpos.x+21, y = masterpos.y-2, z = masterpos.z})
			doSendMagicEffect({x = masterpos.x+21, y = masterpos.y-2, z = masterpos.z},10)
			doCheckStone(stone1pos)
			doCheckStone(stone2pos)
			doCheckStone(stone3pos)
			doCheckStone(stone4pos)
			doCheckStone(stone5pos)
			doCheckStone(stone6pos)
			doCheckStone(stone7pos)
			doCheckStone(stone8pos)
			doCheckStone(stone9pos)
			doCheckStone(stone10pos)
			doPlayerSendTextMessage(focus, 22, "Time is up!  Sorry, you took too long.  Thanks and Good luck next time!")
			arenaOver(focus)
		elseif (getGlobalStorageValue(3000) ~= 1 and arenaStatus ~= nil and arenaStatus > 0) then		-- this is a backup and will make sure to set the focus to 0 after the player completes the arena.
			doCheckStone(stone1pos)
			doCheckStone(stone2pos)
			doCheckStone(stone3pos)
			doCheckStone(stone4pos)
			doCheckStone(stone5pos)
			doCheckStone(stone6pos)
			doCheckStone(stone7pos)

			doCheckStone(stone8pos)
			doCheckStone(stone9pos)
			doCheckStone(stone10pos)
			arenaOver(focus)
		elseif (getGlobalStorageValue(3000) == 1 and getPlayerByName(getPlayerName(focus)) == 0) then  -- player must have logged out while in the arena
			doCheckStone(stone1pos)
			doCheckStone(stone2pos)
			doCheckStone(stone3pos)
			doCheckStone(stone4pos)
			doCheckStone(stone5pos)
			doCheckStone(stone6pos)
			doCheckStone(stone7pos)
			doCheckStone(stone8pos)
			doCheckStone(stone9pos)
			doCheckStone(stone10pos)
			setGlobalStorageValue(3000,-1)       --  if the arena is in use or not
			arenaStatus = 0
			arenaStatus1 = 0
			focus = 0
		elseif (arenaStatus > 0 and getPlayerStorageValue(focus, 3002) == -1) then	-- this is a backup		
			doCheckStone(stone1pos)
			doCheckStone(stone2pos)
			doCheckStone(stone3pos)
			doCheckStone(stone4pos)
			doCheckStone(stone5pos)
			doCheckStone(stone6pos)
			doCheckStone(stone7pos)
			doCheckStone(stone8pos)
			doCheckStone(stone9pos)
			doCheckStone(stone10pos)
			arenaOver(focus)
		elseif (getGlobalStorageValue(3000) == 1 and (((npcpos.x-getPlayerPosition(focus).x) > 85) or ((npcpos.x-getPlayerPosition(focus).x) < -30) or ((npcpos.y-getPlayerPosition(focus).y) > 50) or ((npcpos.y-getPlayerPosition(focus).y) < -13) or (getPlayerPosition(focus).z ~= npcpos.z))) then    --  player must have been teleported out ( will not remove the monster if u tp the player out so dont)
			doCheckStone(stone1pos)
			doCheckStone(stone2pos)
			doCheckStone(stone3pos)
			doCheckStone(stone4pos)
			doCheckStone(stone5pos)
			doCheckStone(stone6pos)
			doCheckStone(stone7pos)
			doCheckStone(stone8pos)
			doCheckStone(stone9pos)
			doCheckStone(stone10pos)
		end  
	end
end
but my problem is when u finish the arena u cant go throught the door and get the prices when i'm on gm when i say hi fight greenhorn yes and go to arena prices it works ... so what is the problem ?also better for all will be function "ondie" because my solution is bad because players can go throught switch and the stone is dissapere... so u dont need to kill the monster ...
 
Just an easy fix,why dont you make the corpse of the monster a item example, a footbal. When u kill it you will take the footbal put it on a goal basin and pull a switch and voila the rock get's removed then. After that make an onStep script when you enter the new room the rock will apear again (so you cant enter with an team)

Just a small idea

//Mokerhamer
 
morkerhammer is there a function on kill in tfs ?when u kill monsters in arena like frostfur ... etc the stone will dissapere?
 
function onKill(cid, target)
script here
end

function onLogin(cid)
registerCreatureEvent(cid, "Arena")
return 1
end

<event type="kill" name="Arena" script="kill.lua" />
 
Back
Top