Forum nie tylko o Tibii i OTS...

Nie tylko o Tibii i OTS...

  • Nie jesteś zalogowany.
  • Polecamy: Gry

#1 2007-11-15 18:06:22

 Rici

Sułtan łechtaczek

Skąd: Ełk
Zarejestrowany: 2007-05-15
Posty: 1753
Nick: Vineium Doron
Profesja: Paladyn
Server: Guardia
Level: 64

Svargrond Arena - Skrypty,mapa,potwory

Credits:
NPC dialog - Tien Storm Irk
Monsters - Tien Storm Irk
Script - Umby, Szuwar, Noxitu
Map - Eithel

Tworzymy:
data\movements\scripts\Svargrond.lua

Kod:

 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=325, y=98, 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-5, y = masterpos.y-2, z = masterpos.z, stackpos = 1}
local stone2pos = {x = masterpos.x-19, y = masterpos.y-2, z = masterpos.z, stackpos = 1}
local stone3pos = {x = masterpos.x-33, y = masterpos.y-2, z = masterpos.z, stackpos = 1}
local stone4pos = {x = masterpos.x-47, y = masterpos.y-2, z = masterpos.z, stackpos = 1}
local stone5pos = {x = masterpos.x-41, y = masterpos.y-15, z = masterpos.z, stackpos = 1}
local stone6pos = {x = masterpos.x-27, y = masterpos.y-15, z = masterpos.z, stackpos = 1}
local stone7pos = {x = masterpos.x-13, y = masterpos.y-15, z = masterpos.z, stackpos = 1}
local stone8pos = {x = masterpos.x-21, y = masterpos.y-28, z = masterpos.z, stackpos = 1}
local stone9pos = {x = masterpos.x-35, y = masterpos.y-28, z = masterpos.z, stackpos = 1}
local stone10pos = {x = masterpos.x-29, y = masterpos.y-41, 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(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)
                              doPlayerSay(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(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})
          doSendAnimatedText(npos,"Fight!",198)          
          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(passArgs.monster,-10000)
end

Nastepnie
data\movements\scripts\Svargrond login.lua

Kod:

-- 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=325, y=98, 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-5, y = masterpos.y-2, z = masterpos.z, stackpos = 1}
local stone2pos = {x = masterpos.x-19, y = masterpos.y-2, z = masterpos.z, stackpos = 1}
local stone3pos = {x = masterpos.x-33, y = masterpos.y-2, z = masterpos.z, stackpos = 1}
local stone4pos = {x = masterpos.x-47, y = masterpos.y-2, z = masterpos.z, stackpos = 1}
local stone5pos = {x = masterpos.x-41, y = masterpos.y-15, z = masterpos.z, stackpos = 1}
local stone6pos = {x = masterpos.x-27, y = masterpos.y-15, z = masterpos.z, stackpos = 1}
local stone7pos = {x = masterpos.x-13, y = masterpos.y-15, z = masterpos.z, stackpos = 1}
local stone8pos = {x = masterpos.x-21, y = masterpos.y-28, z = masterpos.z, stackpos = 1}
local stone9pos = {x = masterpos.x-35, y = masterpos.y-28, z = masterpos.z, stackpos = 1}
local stone10pos = {x = masterpos.x-29, y = masterpos.y-41, 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

Potem dodajemy do:
data\movements\movements.xml

Kod:

<movevent event="AddItem" tileitem="1" actionid="3003" script="Svargrond.lua" />
<movevent event="AddItem" tileitem="1" actionid="3004" script="Svargrond.lua" />
<movevent event="AddItem" tileitem="1" actionid="3005" script="Svargrond.lua" />
<movevent event="AddItem" tileitem="1" actionid="3006" script="Svargrond.lua" />
<movevent event="AddItem" tileitem="1" actionid="3007" script="Svargrond.lua" />
<movevent event="AddItem" tileitem="1" actionid="3008" script="Svargrond.lua" />
<movevent event="AddItem" tileitem="1" actionid="3009" script="Svargrond.lua" />
<movevent event="AddItem" tileitem="1" actionid="3010" script="Svargrond.lua" /> -- room ten
<movevent event="StepIn" actionid="2002" script="Svargrond.lua" />
<movevent event="StepIn" actionid="2003" script="Svargrond.lua" />
<movevent event="StepIn" actionid="2004" script="Svargrond.lua" />
<movevent event="StepIn" actionid="2005" script="Svargrond.lua" />
<movevent event="StepIn" actionid="2006" script="Svargrond.lua" />
<movevent event="StepIn" actionid="2004" script="Svargrond.lua" />
<movevent event="StepIn" actionid="2007" script="Svargrond.lua" />
<movevent event="StepIn" actionid="2008" script="Svargrond.lua" />
<movevent event="StepIn" actionid="2009" script="Svargrond.lua" />
<movevent event="StepIn" actionid="2010" script="Svargrond.lua" />
<movevent event="StepIn" actionid="2011" script="Svargrond.lua" />
<movevent event="StepIn" actionid="2012" script="Svargrond.lua" />
<movevent event="StepIn" actionid="2013" script="Svargrond.lua" />
<movevent event="StepIn" actionid="2014" script="Svargrond.lua" />
<movevent event="StepIn" actionid="3011" script="Svargrond.lua" />
<movevent event="StepIn" actionid="3001" script="Svargrond login.lua" />
<movevent event="StepIn" actionid="3002" script="Svargrond login.lua" />
<movevent event="StepIn" actionid="3003" script="Svargrond login.lua" />
<movevent event="StepIn" actionid="3004" script="Svargrond login.lua" />
<movevent event="StepIn" actionid="3005" script="Svargrond login.lua" />
<movevent event="StepIn" actionid="3006" script="Svargrond login.lua" />
<movevent event="StepIn" actionid="3007" script="Svargrond login.lua" />
<movevent event="StepIn" actionid="3008" script="Svargrond login.lua" />
<movevent event="StepIn" actionid="3009" script="Svargrond login.lua" />
<movevent event="StepIn" actionid="3010" script="Svargrond login.lua" />
<!-- Svargrond storages

player storages

5029  =  this tells the arena which monsters to use  - which "level" the player has choosen to attempt.
5030  =  if this value is 1, and you are supposed to be in the arnea, it will teleport you into the first room.   (it is set to 1 by the begining teleport - causing the half second delay)
3002  =  this says if the player should be in the arena or not, might be unnecessary.
2998  =  this will make sure that addEvent will only happen once
2999  =  this will make sure that the player wont end up with 2 monsters in the first room.
9000  =  since we cant store names as values we use a random number between 1-15000 to make each player unique to the arena.  (this will match the global 9000)
3001  =  this tells the NPC which arena difficulties the player has completed.   if the player completes level 1, the storage is 2.   if the player completes level 3, the storage is 4.    also tells the reward room what room to let the player in.

global storages

3000  =  if the arena is in use or not - if this is not == 1, monsters and players will be removed from the arena (excluding GM's)
3001  =  this is basically the same as  player 5030  it makes the NPC teleport you into the arnea rather the tile  (that way no one gets in without the NPC's focus).
9000  =  playerID - this tells the script which player is supposed to be in the arena (if someone were to logout in the arena, and wait until someone else started the arena to login, they would be identified by this value)

tile action IDs

3001 - 3010  =  these are the 10 arena rooms.   every tile in the room should have the according action ID.   (first = 3001, last = 3010)  it is what tells the arena to remove the stone when the monster's corpse touches the ground.
2005 - 2014  =  these tiles are the teleports behind the stones in each 10 rooms.  the last one takes you into the reward room and the first one takes you to the second room.
3011  =  the room to the right of the NPC should have this action ID on every walkable tile.
2002  =  this is the action ID of the tile UNDER the teleports that allow you to leave the arena by will.  (teleports to the south)
2003  =   this is the action ID of the tile UNDER the teleport which takes the player from the reward room back into the NPC area when they have finished the arena and taken their reward(this is so that you dont have to set any co ords to match your map).
2004  =  this is the action ID of the tile UNDER the teleports which teleport you into the arena (which should be set to 0,0,0 co ords.)

-->

Teraz npc
data\npc\Arena NPC.xml

Kod:

<npc name="Halvar" script="data/npc/scripts/arena NPC.lua" autowalk="25" 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>

No i już prawie koniec
data\npc\scripts\Arena NPC.lua

Kod:

-- 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=325, y=98, 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-5, y = masterpos.y-2, z = masterpos.z, stackpos = 1}
local stone2pos = {x = masterpos.x-19, y = masterpos.y-2, z = masterpos.z, stackpos = 1}
local stone3pos = {x = masterpos.x-33, y = masterpos.y-2, z = masterpos.z, stackpos = 1}
local stone4pos = {x = masterpos.x-47, y = masterpos.y-2, z = masterpos.z, stackpos = 1}
local stone5pos = {x = masterpos.x-41, y = masterpos.y-15, z = masterpos.z, stackpos = 1}
local stone6pos = {x = masterpos.x-27, y = masterpos.y-15, z = masterpos.z, stackpos = 1}
local stone7pos = {x = masterpos.x-13, y = masterpos.y-15, z = masterpos.z, stackpos = 1}
local stone8pos = {x = masterpos.x-21, y = masterpos.y-28, z = masterpos.z, stackpos = 1}
local stone9pos = {x = masterpos.x-35, y = masterpos.y-28, z = masterpos.z, stackpos = 1}
local stone10pos = {x = masterpos.x-29, y = masterpos.y-41, 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 = creatureGetName(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

POTWORY
Razem

Ostatnio edytowany przez rici (2007-11-15 18:08:44)


http://img13.imageshack.us/img13/8466/ovoj.jpg

Offline

 

#2 2007-11-15 18:23:33

Ustii

http://i33.tinypic.com/2v2gq5x.gif

2619571
Skąd: Łódź
Zarejestrowany: 2007-07-23
Posty: 287

Re: Svargrond Arena - Skrypty,mapa,potwory

Świetne! To powinno się pojawić na otsie forum!


zajonczek ^^
http://img403.imageshack.us/img403/5179/lofl7.gifNie pomagam na gg! Tylko na forum.
http://foteka.pl/full/b158563aa4113c86316e221fcc653a62.jpg

Offline

 

#3 2007-11-16 19:26:52

Bartii

Zbanowany

Zarejestrowany: 2007-01-14
Posty: 10

Re: Svargrond Arena - Skrypty,mapa,potwory

Mam pytanie czy to bedzie dzialac?

Offline

 

#4 2007-11-18 00:11:43

 Ufek

Zbanowany

Zarejestrowany: 2007-07-02
Posty: 1155
Nick: Ufek Ghoul
Profesja: Aurea (Rookgaard)
Server: 24

Re: Svargrond Arena - Skrypty,mapa,potwory

Po 1 nie spamuj! A po 2 scrypter zadecyduje czy arena się znajdzie na OTS'ie forum. Oby...


http://img202.imageshack.us/img202/9260/stalkerd22.jpg

Offline

 

Stopka forum

RSS
Powered by PunBB
© Copyright 2002–2008 PunBB
Polityka cookies - Wersja Lo-Fi


Darmowe Forum | Ciekawe Fora | Darmowe Fora
http://consulere-kancelaria-podatkowa24hat.eu Walindi Plantation Resort