MOD perfect Svargrond Arena System!

Discussion in 'Mods & Lua Functions' started by TomCrusher, Jan 20, 2010.

  1. jonasu

    jonasu New Member

    Joined:
    Nov 3, 2009
    Messages:
    73
    Been trying to figure this one out.. I removed all the old scripts and changed locations etc. However the doors worked at first but they stopped working after i removed the old script. I changed the ids of the doors in config but the teleportal is still not working. It says you have been kicked. The portals have action id 42300. I'm using the real map released by frankFarmer. Help would be strongly appreciated!
     
  2. Dankoo

    Dankoo Well-Known Member

    Joined:
    Sep 4, 2010
    Messages:
    1,006
    Great script, thank you!!

    PS: NPC could be as good as the mod, ehn? :]
     
  3. BeniS

    BeniS Well-Known Member

    Joined:
    Aug 8, 2009
    Messages:
    1,849
    Cheers man :)
     
  4. Sweddy

    Sweddy Well-Known Member

    Joined:
    Feb 14, 2009
    Messages:
    2,907
    Please Rehost Map...
     
  5. Sweddy

    Sweddy Well-Known Member

    Joined:
    Feb 14, 2009
    Messages:
    2,907
    Please? :p
     
  6. Gryffian

    Gryffian ununderstandable

    Joined:
    Aug 10, 2010
    Messages:
    203
    Damn. So needed script. Thanks!
     
  7. orejon

    orejon New Member

    Joined:
    Jun 24, 2008
    Messages:
    1
    The download is not erased it already :S
     
  8. Sir MoX

    Sir MoX New Member

    Joined:
    Jan 14, 2009
    Messages:
    285
    the link of the map its wrong =/
     
  9. Kudzu

    Kudzu Active Member

    Joined:
    Apr 9, 2008
    Messages:
    512
    Work great on DEV 0.4 Thanks! :*
     
  10. Knight God

    Knight God Active Member

    Joined:
    Oct 19, 2008
    Messages:
    1,182
    tfs 0.4

     
  11. Knight God

    Knight God Active Member

    Joined:
    Oct 19, 2008
    Messages:
    1,182
  12. Cykotitan

    Cykotitan Experienced G'

    Joined:
    Nov 4, 2008
    Messages:
    16,897
  13. venom1012

    venom1012 New Member

    Joined:
    Apr 24, 2008
    Messages:
    2
    hello, I got the following error, I pay the npc it says it already can do just that when the arena will open the door the following message appears It is locked. and the doors have the following script ID 42357, thanks.
     
  14. szeos

    szeos Member

    Joined:
    Sep 16, 2010
    Messages:
    190
    to everyone who have this same problem like this.

    Edit NPC Arener not Halvar or make new npc in map Editor
     
  15. cinuslca

    cinuslca New Member

    Joined:
    Jan 29, 2010
    Messages:
    45
    When i killing monster Frostfur , my server its crashed don't know with what i have problem.



    [​IMG]

    PHP:
    <?xml version="1.0" encoding="UTF-8"?>
    <mod name="Arena Svargrond"

    version="1.0" author="Tommy" contact="[email protected]" enabled="yes">

    <config name="arenaFunctions"><![CDATA[
    KickPosition = {x=32310, y=31149, z=7} --if the player leave the arena or time is over, where he go.
    RewardsRoom = {x=32312, y=31134, z=6} --rewards room position.
    arenaRoomMaxTime = 240 --max time for each room 240 = 4 min.
    OpenDoorsID = 5127 --if you change doors item ids, change me =D


    TimeStor = 42350 --here will be saved the time.
    myArenaLevel = 45450 --here will be saved the arena level.
    talkNPC = 45451 --Storage to check if the player have paid to the npc and can enter to the arena.
    RewardsStor = {42361, 42371, 42381} --Storage for greenshore, scrapper, warlord.
    isIN = 42352 --to check if the player is in the arena.
    myRoom = 46000 --here will be saved the current room.
    MonStor = 47000 --here will be saved the monster uid.


    DoorsActID = 42357 --Doors near the npc.
    LeavePortals = 42321 --The action id of the portal to leave the rooms (south portals).
    GobletTiles = {42360, 42370, 42380} --Action ids of the tiles for Bronze, Silver and Gold Goblets.

    Cancel = {
        --message when use door and have not paid to the npc.
        [1] = "You have not paid NPC yet.",
        --message when leave arena.
        [2] = "You have been kicked.!",
        --message when the player can't get the reward.
        [3] = "You can\'t get this item",
        --message when already got any reward.
        [4] = "It is empty.",
        --when try to open a reward door and haven't completed the level.
        [5] = "You have not finished this arena level.",
        --NPC answer if the player completed all arena levels.
        [6] = "You already did all the arena levels.",
        --message when time is over
        [7] = "The time is over.",
        --message when you can go to the next room, LoL >_> this is not a cancel btw.
        [8] = "You can go to the next room.",
        --when try to go to the next room and not killed the monster yet.
        [9] = "Kill the monster first",
        --when try to go to the next room but there is a player yet...this text will be PLAYERNAME + this text
        [10] = "is in the room yet."
        }

    Completed = {
        [1] = "Congatulations! you have completed the arena in",
        --HERE WILL BE THE ARENA NAME.
        [2] = "difficulty!, now go and take your reward."}
        --then the message will be "Congatulations! you have completed the arena in greenshore/scrapper/warlord difficulty!, now go and take your reward."
        

    Arena = {
        --greenshore
        [0] = {
            Cost = 10000, 
            LevelName = 'greenshore', 
            LevelNeeded = 30,
            Goblet = 5807
            },
        --scrapper
        [1] = {
            Cost = 50000,
            LevelName = 'scrapper',
            LevelNeeded = 50,
            Goblet = 5806
            },
        --warlord
        [2] = {
            Cost = 100000, 
            LevelName = 'warlord',    
            LevelNeeded = 80,
            Goblet = 5805
            }
        }


    Rewards = {
        --greenshore
        --present with items.
        [42361] = {
            Stor = RewardsStor[1], 
            Cont = 1990,
            items = {7372, 6569, 6574, 2114},
            count = {1, 10, 1, 1}
            },
        --blacksteel sword.
        [42362] = {
            Stor = RewardsStor[1], 
            Cont = nil,
            item = 7406
            },
        --headchopper.
        [42363] = {
            Stor = RewardsStor[1], 
            Cont = nil,
            item = 7380
            },
        --orcish maul.
        [42364] = {
            Stor = RewardsStor[1], 
            Cont = nil,
            item = 7392
            },
        --backpack with items.
        [42365] = {
            Stor = RewardsStor[1], 
            Cont = 7342,
            items = {7365, 7364},
            count = {100, 100}
            },
        --scrapper
        --present with items.
        [42371] = {
            Stor = RewardsStor[2], 
            Cont = 1990,
            items = {7372, 6569, 6574, 7183},
            count = {1, 10, 1, 1}
            },
        --mystic blade.
        [42372] = {
            Stor = RewardsStor[2], 
            Cont = nil,
            item = 7384
            },
        --heroic axe.
        [42373] = {
            Stor = RewardsStor[2], 
            Cont = nil,
            item = 7389
            },
        --cranial basher
        [42374] = {
            Stor = RewardsStor[2], 
            Cont = nil,
            item = 7415
            },
        --backpack with items.
        [42375] = {
            Stor = RewardsStor[2], 
            Cont = 7342,
            items = {7365, 2547, 2547, 2311, 2304},
            count = {100, 100, 100, 50, 50}
            },
        --warlord
        --present with items.
        [42381] = {
            Stor = RewardsStor[3], 
            Cont = 1990,
            items = {7372, 6569, 6574, 6568},
            count = {1, 10, 1, 1}
            },
        --justice seeker
        [42382] = {
            Stor = RewardsStor[3], 
            Cont = nil,
            item = 7390
            },
        --royal axe.
        [42383] = {
            Stor = RewardsStor[3], 
            Cont = nil,
            item = 7434
            },
        --blessed sceptre.
        [42384] = {
            Stor = RewardsStor[3], 
            Cont = nil,
            item = 7429
            },
        --backpack with items.
        [42385] = {
            Stor = RewardsStor[3], 
            Cont = 7342,
            items = {2273, 2268, 7443, 7440, 7529},
            count = {50, 50, 1, 1, 100}
            }
        }

    arena_monsters = {
        --greenshore                            -scrapper                            --warlord
        [45300] = "Frostfur",                [45310] = "Avalanche",            [45320] = "Webster",
        [45301] = "Bloodpaw",                [45311] = "Kreebosh the Exile",    [45321] = "Darakan the Executioner",
        [45302] = "Bovinus",                [45312] = "The Dark Dancer",    [45322] = "Norgle Glacierbeard",
        [45303] = "Achad",                    [45313] = "The Hag",            [45323] = "The Pit Lord",
        [45304] = "Colerian The Barbarian",    [45314] = "Slim",                [45324] = "Svoren the Mad",
        [45305] = "The Hairy One",            [45315] = "Grimgor Guteater",    [45325] = "The Masked Marauder",
        [45306] = "Axeitus Headbanger",        [45316] = "Drasilla",            [45326] = "Gnorre Chyllson",
        [45307] = "Rocky",                    [45317] = "Spirit of Earth",    [45327] = "Fallen Mooh'tah Master Ghar",
        [45308] = "Cursed Gladiator",        [45318] = "Spirit of Water",    [45328] = "Deathbringer",
        [45309] = "Orcus the Cruel",        [45319] = "Spirit of Fire",        [45329] = "The Obliverator"}

    Checking = false

    RoomsACT = {42301, 42302, 42303, 42304, 42305, 42306, 42307, 42308, 42309}

    Goblets = {
        [42360] = {Id=Arena[0].Goblet, txt="It is given to the courageous victor of the barbarian arena "..Arena[0].LevelName.." difficulty."},
        [42370] = {Id=Arena[1].Goblet, txt="It is given to the courageous victor of the barbarian arena "..Arena[1].LevelName.." difficulty."},
        [42380] = {Id=Arena[2].Goblet, txt="It is given to the courageous victor of the barbarian arena "..Arena[2].LevelName.." difficulty."}}

    RewardsDoors = {[42366] = 1, [42376] = 2, [42386] = 3}

    ArenaAdding = {[0] = 3000, [1] = 3010, [2] = 3020}

    function myArenaLevelIs(cid)
        Stor = getPlayerStorageValue(cid, myArenaLevel)
        if Stor == -1 then
            setPlayerStorageValue(cid, myArenaLevel, 0)
            Stor = 0
        elseif Stor == 3 then Stor = 2
        end
        return {
            RC = Arena[Stor].Cost, 
            LN = Arena[Stor].LevelName, 
            RLV = Arena[Stor].LevelNeeded,
            LV = getPlayerStorageValue(cid, myArenaLevel)
        }
    end

    function getDirectionMove(cid, itempos)
        --function by Nahruto
        p = getCreaturePosition(cid)
        i = itempos
        if p.x > i.x then
            if p.y > i.y then
                ret = NORTHWEST
            elseif p.y < i.y then
                ret = SOUTHWEST
            else
                ret = WEST
            end
        elseif p.x < i.x then
            if p.y > i.y then
                ret = NORTHEAST
            elseif p.y < i.y then
                ret = SOUTHEAST
            else
                ret = EAST
            end
        else
            if p.y > i.y then
                ret = NORTH
            elseif p.y < i.y then
                ret = SOUTH
            else
                ret = nil
            end
        end
        return ret
    end

    function LeaveArena(cid)
        for i = 45300, 45329 do
            setPlayerStorageValue(cid, i, 0)
        end
        if isCreature(getPlayerStorageValue(cid, MonStor)) == TRUE then
            doRemoveCreature(getPlayerStorageValue(cid, MonStor))
        end
        setGlobalStorageValue(getPlayerStorageValue(cid, myRoom), 0)
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, Cancel[2])
        doTeleportThing(cid, KickPosition, FALSE)
        setPlayerStorageValue(cid, TimeStor, 0)
        setPlayerStorageValue(cid, isIN, 0)
    end

    function CheckRooms()
        addEvent(CheckRooms, 1000)
        for i = 42300, 42309 do
            local Player = getGlobalStorageValue(i)
            if isPlayer(Player) == TRUE then
                local PlayerTime = getPlayerStorageValue(Player, TimeStor)
                if PlayerTime <= os.time() then
                    doTeleportThing(Player, KickPosition, FALSE)
                    setPlayerStorageValue(Player, TimeStor, 0)
                    setGlobalStorageValue(i, 0)
                    doPlayerSendTextMessage(Player,MESSAGE_STATUS_CONSOLE_ORANGE, Cancel[7])
                    if isCreature(getPlayerStorageValue(Player, MonStor)) == TRUE then
                        doRemoveCreature(getPlayerStorageValue(Player, MonStor))
                    end
                elseif PlayerTime - 10 <= os.time() then
                    doPlayerSendTextMessage(Player, MESSAGE_EVENT_DEFAULT, "you have "..PlayerTime - os.time().." seconds left.!")
                end
            else
                setGlobalStorageValue(i, 0)
            end
        end
    end

    function getArenaMonsterIdByName(name)
        for i = 45300, 45329 do
            if tostring(arena_monsters[i]) == string.lower(tostring(name)) then
                return i
            end
        end
        return false
    end]]></config>
            <event type="login" name="arenaRegister" event="script"><![CDATA[
            domodlib('arenaFunctions')
            function onLogin(cid)
        registerCreatureEvent(cid, "PlayerArena")
        registerCreatureEvent(cid, "ArenaKill")
            return true
    end]]></event>

    <event type="death" name="PlayerArena" event="script"><![CDATA[
        domodlib('arenaFunctions')
        function onDeath(cid, corpse, deathList)
            if getPlayerStorageValue(cid, isIN) == 1 then
                I = 0        
                for i = 45300, 45329 do
                    if getPlayerStorageValue(cid, i) == 1 then
                        I = i
                    end
                end
                GlobalStor = I - ArenaAdding[myArenaLevelIs(cid).LV]
                setGlobalStorageValue(GlobalStor, 0)
                setPlayerStorageValue(cid, isIN, 0)
                if isCreature(getPlayerStorageValue(cid, MonStor)) then
                    doRemoveCreature(getPlayerStorageValue(cid, MonStor))
                end
            end
            return true
        end
    ]]></event> 

            <event type="kill" name="ArenaKill" event="script"><![CDATA[
            domodlib('arenaFunctions')
    function onKill(cid, target, lastHit)
        if getPlayerStorageValue(cid, isIN) == 1 then
            local Room = getArenaMonsterIdByName(getCreatureName(target))
            if Room ~= 0 then
                setPlayerStorageValue(cid, Room, 1)
                doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, Cancel[8])
            end
           end
            return true
    end]]></event>

            <action fromaid="42357" toaid="42386" event="script"><![CDATA[
            domodlib('arenaFunctions')
    function onUse(cid, item, fromPosition, itemEx, toPosition)
        local myMove = getDirectionMove(cid, fromPosition)

        if myMove == nil then

            return FALSE

        end

        local Reward = Rewards[item.actionid]

        if Reward then

            if getPlayerStorageValue(cid, Reward.Stor) ~= 1 then

                local reward = nil

                if Reward.Cont ~= nil then

                    reward = doCreateItemEx(Reward.Cont, 1)

                    for i = 1, #Reward.items do

                        doAddContainerItem(reward, Reward.items[i], Reward.count[i])

                    end

                else

                    reward = doCreateItemEx(Reward.item, 1)

                end

                if reward ~= nil then

                    if doPlayerAddItemEx(cid, reward, FALSE) == RETURNVALUE_NOERROR then

                        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR,'You have found a '..getItemNameById(getThing(reward).itemid)..'.')

                        setPlayerStorageValue(cid, Reward.Stor, 1)

                                    addPlayerRep(cid, 5, TEXTCOLOR_LIGHTBLUE)

                    else

                        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, Cancel[3])

                    end

                end

            else

                doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, Cancel[4])

            end

        elseif RewardsDoors[item.actionid] then

            if myArenaLevelIs(cid).LV >= RewardsDoors[item.actionid] then

                doTransformItem(item.uid, OpenDoorsID)

                doMoveCreature(cid, myMove)

            else

                doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, Cancel[5])

            end

        elseif item.actionid == DoorsActID and getPlayerStorageValue(cid, talkNPC) == 1 then

            doTransformItem(item.uid, OpenDoorsID)

            doMoveCreature(cid, myMove)

        else

            doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, Cancel[1])
    end

        return TRUE

    end]]></action>

        <movevent type="StepIn" fromaid="42300" toaid="42380" event="script"><![CDATA[
            domodlib('arenaFunctions')
    function onStepIn(cid, item, position, fromPosition)
        local ArenaRoom = item.actionid

        if item.actionid == LeavePortals then

            LeaveArena(cid)

        elseif isInArray(GobletTiles, item.actionid) == TRUE then

            local gobletPos = getThingPos(item.uid)

            if getPlayerStorageValue(cid, item.actionid) ~= 1 then

                setPlayerStorageValue(cid, item.actionid, 1)

                local Goblet = doCreateItemEx(Goblets[item.actionid].Id, 1)

                doItemSetAttribute(Goblet, "description", ""..Goblets[item.actionid].txt.."\nAwarded to "..getCreatureName(cid)..".")

                gobletPos.y = gobletPos.y - 1

                doTileAddItemEx(gobletPos, Goblet)

            end

            doTransformItem(item.uid, item.itemid - 1)

        elseif isInArray(RoomsACT, ArenaRoom) == TRUE or ArenaRoom == 42300 then

            if Checking == FALSE then Checking = TRUE CheckRooms() end

            local myLevelArena = myArenaLevelIs(cid).LV

            if ArenaAdding[myLevelArena] then

                Mons = ArenaRoom + ArenaAdding[myLevelArena]

            end

            if getGlobalStorageValue(ArenaRoom) == 0 then

                if isCreature(getPlayerStorageValue(cid, MonStor)) == FALSE then

                    if ArenaRoom == 42300 and getPlayerStorageValue(cid, talkNPC) == 1 then

                        setPlayerStorageValue(cid, talkNPC, 0)

                        setPlayerStorageValue(cid, isIN, 1)

                        P = 1

                    elseif ArenaRoom ~= 42300 and getPlayerStorageValue(cid, isIN) == 1 then

                        P = 1

                    else 

                        P = nil

                    end        

                    if P ~= nil then

                        local SpawnPos = getThingPos(ArenaRoom)

                        doTeleportThing(cid, SpawnPos, FALSE)

                        SpawnPos.x = SpawnPos.x - 1

                        SpawnPos.y = SpawnPos.y - 1

                        local Monster = doSummonCreature(arena_monsters[Mons], SpawnPos)

                        setGlobalStorageValue(ArenaRoom, cid)

                        setGlobalStorageValue(ArenaRoom - 1, 0)

                        setPlayerStorageValue(cid, TimeStor, os.time()+arenaRoomMaxTime)

                        setPlayerStorageValue(cid, MonStor, Monster)

                        setPlayerStorageValue(cid, myRoom, ArenaRoom)

                    else

                        LeaveArena(cid)

                    end

                else

                    doTeleportThing(cid, fromPosition, TRUE)

                    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, Cancel[9])

                end

            else

                doTeleportThing(cid, fromPosition, TRUE)

                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, ""..getCreatureName(getGlobalStorageValue(cid, ArenaRoom)).." "..Cancel[10].."")

            end

        elseif ArenaRoom == 42310 then

            if isCreature(getPlayerStorageValue(cid, MonStor)) == FALSE then

                doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_BLUE,""..Completed[1].." "..myArenaLevelIs(cid).LN.." "..Completed[2].."")

                setPlayerStorageValue(cid, myArenaLevel, getPlayerStorageValue(cid, myArenaLevel) + 1)

                setGlobalStorageValue(ArenaRoom - 1, 0)

                setPlayerStorageValue(cid, TimeStor, 0)

                setPlayerStorageValue(cid, isIN, 0)

                doTeleportThing(cid, RewardsRoom, TRUE)

            else

                doTeleportThing(cid, fromPosition, TRUE)

                doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_ORANGE,'Najpierw zabij potwora!')

            end

        end

        return TRUE

    end]]></movevent>

        <movevent type="StepOut" fromaid="42357" toaid="42387" event="script"><![CDATA[
            domodlib('arenaFunctions')
    function onStepOut(cid, item, position, fromPosition)

        if item.actionid == DoorsActID or RewardsDoors[item.actionid] then

            doTransformItem(item.uid, item.itemid - 2)

        elseif isInArray(GobletTiles, item.actionid) == TRUE then

            doTransformItem(item.uid, item.itemid + 1)
            end

        return TRUE

    end]]></movevent>

    </mod>
     
  16. TomCrusher

    TomCrusher Jeg er ingenting

    Joined:
    Dec 31, 2008
    Messages:
    655
    which version TFS what show you on console after killed monster?
     
  17. cinuslca

    cinuslca New Member

    Joined:
    Jan 29, 2010
    Messages:
    45
    Tfs 0.4 svn , dont have anyone msg on console
     
  18. cinuslca

    cinuslca New Member

    Joined:
    Jan 29, 2010
    Messages:
    45
    Code:
    [20:22:08.078] [Error - Action Interface]
    [20:22:08.078] domodlib('arenaFunctions')
    [20:22:08.078] function onUse(cid, item, fromPosition, itemEx, toPosition)
    [20:22:08.078]     local myMove = getDirectionMove(cid, fromPosition)
    
    [20:22:08.078]     if myMove == nil then
    
    [20:22:08.078]         return FALSE
    
    [20:22:08.078]     end
    
    [20:22:08.078]     local Reward = Rewards[item.actionid]
    
    [20:22:08.078]     if Reward then
    
    [20:22:08.078]         if getPlayerStorageValue(cid, Reward.Stor) ~= 1 then
    
    [20:22:08.078]             local reward = nil
    
    [20:22:08.078]             if Reward.Cont ~= nil then
    
    [20:22:08.078]                 reward = doCreateItemEx(Reward.Cont, 1)
    
    [20:22:08.078]                 for i = 1, #Reward.items do
    
    [20:22:08.078]                     doAddContainerItem(reward, Reward.items[i], R
    eward.count[i])
    
    [20:22:08.078]                 end
    
    [20:22:08.078]             else
    
    [20:22:08.078]                 reward = doCreateItemEx(Reward.item, 1)
    
    [20:22:08.078]             end
    
    [20:22:08.093]             if reward ~= nil then
    
    [20:22:08.093]                 if doPlayerAddItemEx(cid, reward, FALSE) == RETUR
    NVALUE_NOERROR then
    
    [20:22:08.093]                     doPlayerSendTextMessage(cid, MESSAGE_INFO_DES
    CR,'You have found a '..getItemNameById(getThing(reward).itemid)..'.')
    
    [20:22:08.093]                     setPlayerStorageValue(cid, Reward.Stor, 1)
    
    [20:22:08.093]                                 addPlayerRep(cid, 5, TEXTCOLOR_LI
    GHTBLUE)
    
    [20:22:08.093]                 else
    
    [20:22:08.093]                     doPlayerSendTextMessage(cid, MESSAGE_INFO_DES
    CR, Cancel[3])
    
    [20:22:08.093]                 end
    
    [20:22:08.093]             end
    
    [20:22:08.093]         else
    
    [20:22:08.093]             doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, Canc
    el[4])
    
    [20:22:08.093]         end
    
    [20:22:08.093]     elseif RewardsDoors[item.actionid] then
    
    [20:22:08.093]         if myArenaLevelIs(cid).LV >= RewardsDoors[item.actionid]
    then
    
    [20:22:08.093]             doTransformItem(item.uid, OpenDoorsID)
    
    [20:22:08.093]             doMoveCreature(cid, myMove)
    
    [20:22:08.093]         else
    
    [20:22:08.093]             doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, Canc
    el[5])
    
    [20:22:08.093]         end
    
    [20:22:08.093]     elseif item.actionid == DoorsActID and getPlayerStorageValue(
    cid, talkNPC) == 1 then
    
    [20:22:08.093]         doTransformItem(item.uid, OpenDoorsID)
    
    [20:22:08.093]         doMoveCreature(cid, myMove)
    
    [20:22:08.093]     else
    
    [20:22:08.093]         doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, Cancel[1
    ])
    [20:22:08.093] end
    
    [20:22:08.093]     return TRUE
    
    [20:22:08.093] end:onUse
    [20:22:08.093] Description:
    [20:22:08.093] [string "LuaInterface::loadBuffer"]:43: attempt to call global 'a
    ddPlayerRep' (a nil value)
    [20:22:08.093] stack traceback:
    [20:22:08.093]  [string "LuaInterface::loadBuffer"]:43: in function <[string "Lu
    aInterface::loadBuffer"]:2>
    and

    Code:
    [20:34:53.468] [Error - Action Interface]
    [20:34:53.468] data/actions/scripts/other/doors.lua:onUse
    [20:34:53.468] Description:
    [20:34:53.468] (luaDoTransformItem) Item not found
    
    [20:34:58.109] [Error - Action Interface]
    [20:34:58.109] data/actions/scripts/other/doors.lua:onUse
    [20:34:58.109] Description:
    [20:34:58.109] (luaDoTransformItem) Item not found
     
  19. Dankoo

    Dankoo Well-Known Member

    Joined:
    Sep 4, 2010
    Messages:
    1,006
    Yeah, this is ridiculous, I just fuc*** can't make an arena quest log work <_<

    Here's my quests.xml arena part:

    [lua] <quest name="The Arena" startstorageid="45450" startstoragevalue="0" endvalue="1">
    <mission name="Arena Combatant" storageid="45450" startvalue="-1" endvalue="10">
    <missionstate id="0" description="You've entered the arena as combatant."/>
    </mission>
    <mission name="Greenshore difficulty" storageid="51345" startvalue="0" endvalue="1">
    <missionstate id="0" description="You've completed the arena in the Greenshore difficulty"/>
    </mission>
    <mission name="Scrapper difficulty" storageid="51346" startvalue="0" endvalue="1">
    <missionstate id="0" description="You've completed the arena in the Scrapper difficulty"/>
    </mission>
    <mission name="Warlord difficulty" storageid="51347" startvalue="0" endvalue="1">
    <missionstate id="0" description="You've completed the arena in the Warlord difficulty"/>
    </mission>
    <mission name="Arena Master" storageid="51348" startvalue="0" endvalue="1">
    <missionstate id="0" description="You've mastered all difficulty levels in the arena, congratulations!"/>
    </mission>
    </quest>[/lua]

    And my little bit modified arena mod:

    [lua]<?xml version="1.0" encoding="UTF-8"?>
    <mod name="Arena Svargrond"

    version="1.0" author="Tommy" contact="[email protected]" enabled="yes">

    <config name="arenaFunctions"><![CDATA[
    KickPosition = {x=32222, y=31080, z=6} --if the player leave the arena or time is over, where he go.
    RewardsRoom = {x=32222, y=31080, z=6} --rewards room position.
    arenaRoomMaxTime = 240 --max time for each room 240 = 4 min.
    OpenDoorsID = 5133 --if you change doors item ids, change me =D


    TimeStor = 42350 --here will be saved the time.
    myArenaLevel = 45450 --here will be saved the arena level.
    talkNPC = 45451 --Storage to check if the player have paid to the npc and can enter to the arena.
    RewardsStor = {42361, 42371, 42381} --Storage for greenshore, scrapper, warlord.
    isIN = 42352 --to check if the player is in the arena.
    myRoom = 46000 --here will be saved the current room.
    MonStor = 47000 --here will be saved the monster uid.


    DoorsActID = 42357 --Doors near the npc.
    LeavePortals = 42321 --The action id of the portal to leave the rooms (south portals).
    GobletTiles = {42360, 42370, 42380} --Action ids of the tiles for Bronze, Silver and Gold Goblets.

    Cancel = {
    --message when use door and have not paid to the npc.
    [1] = "You have not paid NPC yet.",
    --message when leave arena.
    [2] = "You have been kicked.!",
    --message when the player can't get the reward.
    [3] = "You can\'t get this item",
    --message when already got any reward.
    [4] = "It is empty.",
    --when try to open a reward door and haven't completed the level.
    [5] = "You have not finished this arena level.",
    --NPC answer if the player completed all arena levels.
    [6] = "You already did all the arena levels.",
    --message when time is over
    [7] = "The time is over.",
    --message when you can go to the next room, LoL >_> this is not a cancel btw.
    [8] = "You can go to the next room.",
    --when try to go to the next room and not killed the monster yet.
    [9] = "Kill the monster first",
    --when try to go to the next room but there is a player yet...this text will be PLAYERNAME + this text
    [10] = "is in the room yet."
    }

    Completed = {
    [1] = "Congatulations! you have completed the arena in",
    --HERE WILL BE THE ARENA NAME.
    [2] = "difficulty!, now go and take your reward."}
    --then the message will be "Congatulations! you have completed the arena in greenshore/scrapper/warlord difficulty!, now go and take your reward."


    Arena = {
    --greenshore
    [0] = {
    Cost = 1000,
    LevelName = 'greenshore',
    LevelNeeded = 30,
    Goblet = 5807
    },
    --scrapper
    [1] = {
    Cost = 5000,
    LevelName = 'scrapper',
    LevelNeeded = 50,
    Goblet = 5806
    },
    --warlord
    [2] = {
    Cost = 10000,
    LevelName = 'warlord',
    LevelNeeded = 80,
    Goblet = 5805
    }
    }

    greenshore_storage = 51345
    scrapper_storage = 51346
    warlord_storage = 51347
    final_storage = 51348


    Rewards = {
    --greenshore
    --present with items.
    [42361] = {
    Stor = RewardsStor[1],
    Cont = 1990,
    items = {7372, 6569, 6574, 2114},
    count = {1, 10, 1, 1}
    },
    --blacksteel sword.
    [42362] = {
    Stor = RewardsStor[1],
    Cont = nil,
    item = 7406
    },
    --headchopper.
    [42363] = {
    Stor = RewardsStor[1],
    Cont = nil,
    item = 7380
    },
    --orcish maul.
    [42364] = {
    Stor = RewardsStor[1],
    Cont = nil,
    item = 7392
    },
    --backpack with items.
    [42365] = {
    Stor = RewardsStor[1],
    Cont = 7342,
    items = {7365, 7364},
    count = {100, 100}
    },
    --scrapper
    --present with items.
    [42371] = {
    Stor = RewardsStor[2],
    Cont = 1990,
    items = {7372, 6569, 6574, 7183},
    count = {1, 10, 1, 1}
    },
    --mystic blade.
    [42372] = {
    Stor = RewardsStor[2],
    Cont = nil,
    item = 7384
    },
    --heroic axe.
    [42373] = {
    Stor = RewardsStor[2],
    Cont = nil,
    item = 7389
    },
    --cranial basher
    [42374] = {
    Stor = RewardsStor[2],
    Cont = nil,
    item = 7415
    },
    --backpack with items.
    [42375] = {
    Stor = RewardsStor[2],
    Cont = 7342,
    items = {7365, 2547, 2547, 2311, 2304},
    count = {100, 100, 100, 50, 50}
    },
    --warlord
    --present with items.
    [42381] = {
    Stor = RewardsStor[3],
    Cont = 1990,
    items = {7372, 6569, 6574, 6568},
    count = {1, 10, 1, 1}
    },
    --justice seeker
    [42382] = {
    Stor = RewardsStor[3],
    Cont = nil,
    item = 7390
    },
    --royal axe.
    [42383] = {
    Stor = RewardsStor[3],
    Cont = nil,
    item = 7434
    },
    --blessed sceptre.
    [42384] = {
    Stor = RewardsStor[3],
    Cont = nil,
    item = 7429
    },
    --backpack with items.
    [42385] = {
    Stor = RewardsStor[3],
    Cont = 7342,
    items = {2273, 2268, 7443, 7440, 7529},
    count = {50, 50, 1, 1, 100}
    }
    }

    arena_monsters = {
    --greenshore -scrapper --warlord
    [45300] = "Frostfur", [45310] = "Avalanche", [45320] = "Webster",
    [45301] = "Bloodpaw", [45311] = "Kreebosh the Exile", [45321] = "Darakan the Executioner",
    [45302] = "Bovinus", [45312] = "The Dark Dancer", [45322] = "Norgle Glacierbeard",
    [45303] = "Achad", [45313] = "The Hag", [45323] = "The Pit Lord",
    [45304] = "Colerian The Barbarian", [45314] = "Slim", [45324] = "Svoren the Mad",
    [45305] = "The Hairy One", [45315] = "Grimgor Guteater", [45325] = "The Masked Marauder",
    [45306] = "Axeitus Headbanger", [45316] = "Drasilla", [45326] = "Gnorre Chyllson",
    [45307] = "Rocky", [45317] = "Spirit of Earth", [45327] = "Fallen Mooh'tah Master Ghar",
    [45308] = "Cursed Gladiator", [45318] = "Spirit of Water", [45328] = "Deathbringer",
    [45309] = "Orcus the Cruel", [45319] = "Spirit of Fire", [45329] = "The Obliverator"}

    Checking = false

    RoomsACT = {42301, 42302, 42303, 42304, 42305, 42306, 42307, 42308, 42309}

    Goblets = {
    [42360] = {Id=Arena[0].Goblet, txt="It is given to the courageous victor of the barbarian arena "..Arena[0].LevelName.." difficulty."},
    [42370] = {Id=Arena[1].Goblet, txt="It is given to the courageous victor of the barbarian arena "..Arena[1].LevelName.." difficulty."},
    [42380] = {Id=Arena[2].Goblet, txt="It is given to the courageous victor of the barbarian arena "..Arena[2].LevelName.." difficulty."}}

    RewardsDoors = {[42366] = 1, [42376] = 2, [42386] = 3}

    ArenaAdding = {[0] = 3000, [1] = 3010, [2] = 3020}

    function myArenaLevelIs(cid)
    Stor = getPlayerStorageValue(cid, myArenaLevel)
    if Stor == -1 then
    setPlayerStorageValue(cid, myArenaLevel, 0)
    Stor = 0
    elseif Stor == 3 then Stor = 2
    end
    return {
    RC = Arena[Stor].Cost,
    LN = Arena[Stor].LevelName,
    RLV = Arena[Stor].LevelNeeded,
    LV = getPlayerStorageValue(cid, myArenaLevel)
    }
    end

    function getDirectionMove(cid, itempos)
    --function by Nahruto
    p = getCreaturePosition(cid)
    i = itempos
    if p.x > i.x then
    if p.y > i.y then
    ret = NORTHWEST
    elseif p.y < i.y then
    ret = SOUTHWEST
    else
    ret = WEST
    end
    elseif p.x < i.x then
    if p.y > i.y then
    ret = NORTHEAST
    elseif p.y < i.y then
    ret = SOUTHEAST
    else
    ret = EAST
    end
    else
    if p.y > i.y then
    ret = NORTH
    elseif p.y < i.y then
    ret = SOUTH
    else
    ret = nil
    end
    end
    return ret
    end

    function LeaveArena(cid)
    for i = 45300, 45329 do
    setPlayerStorageValue(cid, i, 0)
    end
    if isCreature(getPlayerStorageValue(cid, MonStor)) == TRUE then
    doRemoveCreature(getPlayerStorageValue(cid, MonStor))
    end
    setGlobalStorageValue(getPlayerStorageValue(cid, myRoom), 0)
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, Cancel[2])
    doTeleportThing(cid, KickPosition, FALSE)
    setPlayerStorageValue(cid, TimeStor, 0)
    setPlayerStorageValue(cid, isIN, 0)
    end

    function CheckRooms()
    addEvent(CheckRooms, 1000)
    for i = 42300, 42309 do
    local Player = getGlobalStorageValue(i)
    if isPlayer(Player) == TRUE then
    local PlayerTime = getPlayerStorageValue(Player, TimeStor)
    if PlayerTime <= os.time() then
    doTeleportThing(Player, KickPosition, FALSE)
    setPlayerStorageValue(Player, TimeStor, 0)
    setGlobalStorageValue(i, 0)
    doPlayerSendTextMessage(Player,MESSAGE_STATUS_CONSOLE_ORANGE, Cancel[7])
    if isCreature(getPlayerStorageValue(Player, MonStor)) == TRUE then
    doRemoveCreature(getPlayerStorageValue(Player, MonStor))
    end
    elseif PlayerTime - 10 <= os.time() then
    doPlayerSendTextMessage(Player, MESSAGE_EVENT_DEFAULT, "you have "..PlayerTime - os.time().." seconds left.!")
    end
    else
    setGlobalStorageValue(i, 0)
    end
    end
    end

    function getArenaMonsterIdByName(name)
    for i = 45300, 45329 do
    if tostring(arena_monsters) == string.lower(tostring(name)) then
    return i
    end
    end
    return false
    end]]></config>
    <event type="login" name="arenaRegister" event="script"><![CDATA[
    domodlib('arenaFunctions')
    function onLogin(cid)
    registerCreatureEvent(cid, "PlayerArena")
    registerCreatureEvent(cid, "ArenaKill")
    return true
    end]]></event>

    <event type="death" name="PlayerArena" event="script"><![CDATA[
    domodlib('arenaFunctions')
    function onDeath(cid, corpse, deathList)
    if getPlayerStorageValue(cid, isIN) == 1 then
    I = 0
    for i = 45300, 45329 do
    if getPlayerStorageValue(cid, i) == 1 then
    I = i
    end
    end
    GlobalStor = I - ArenaAdding[myArenaLevelIs(cid).LV]
    setGlobalStorageValue(GlobalStor, 0)
    setPlayerStorageValue(cid, isIN, 0)
    if isCreature(getPlayerStorageValue(cid, MonStor)) then
    doRemoveCreature(getPlayerStorageValue(cid, MonStor))
    end
    end
    return true
    end
    ]]></event>

    <event type="kill" name="ArenaKill" event="script"><![CDATA[
    domodlib('arenaFunctions')
    function onKill(cid, target, lastHit)
    if getPlayerStorageValue(cid, isIN) == 1 then
    local Room = getArenaMonsterIdByName(getCreatureName(target))
    if Room ~= 0 then
    setPlayerStorageValue(cid, Room, 1)
    doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, Cancel[8])
    end
    end
    return true
    end]]></event>

    <action fromaid="42357" toaid="42386" event="script"><![CDATA[
    domodlib('arenaFunctions')
    function onUse(cid, item, fromPosition, itemEx, toPosition)
    local myMove = getDirectionMove(cid, fromPosition)

    if myMove == nil then

    return FALSE

    end

    local Reward = Rewards[item.actionid]

    if Reward then

    if getPlayerStorageValue(cid, Reward.Stor) ~= 1 then

    local reward = nil

    if Reward.Cont ~= nil then

    reward = doCreateItemEx(Reward.Cont, 1)

    for i = 1, #Reward.items do

    doAddContainerItem(reward, Reward.items, Reward.count)

    end

    else

    reward = doCreateItemEx(Reward.item, 1)

    end

    if reward ~= nil then

    if doPlayerAddItemEx(cid, reward, FALSE) == RETURNVALUE_NOERROR then

    doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR,'You have found a '..getItemNameById(getThing(reward).itemid)..'.')

    setPlayerStorageValue(cid, Reward.Stor, 1)

    else

    doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, Cancel[3])

    end

    end

    else

    doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, Cancel[4])

    end

    elseif RewardsDoors[item.actionid] then

    if myArenaLevelIs(cid).LV >= RewardsDoors[item.actionid] then

    doTransformItem(item.uid, OpenDoorsID)

    doMoveCreature(cid, myMove)

    else

    doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, Cancel[5])

    end

    elseif item.actionid == DoorsActID and getPlayerStorageValue(cid, talkNPC) == 1 then

    doTransformItem(item.uid, OpenDoorsID)

    doMoveCreature(cid, myMove)

    else

    doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, Cancel[1])
    end

    return TRUE

    end]]></action>

    <movevent type="StepIn" fromaid="42300" toaid="42380" event="script"><![CDATA[
    domodlib('arenaFunctions')
    function onStepIn(cid, item, position, fromPosition)
    local ArenaRoom = item.actionid

    if item.actionid == LeavePortals then

    LeaveArena(cid)

    elseif isInArray(GobletTiles, item.actionid) == TRUE then

    local gobletPos = getThingPos(item.uid)

    if getPlayerStorageValue(cid, item.actionid) ~= 1 then

    setPlayerStorageValue(cid, item.actionid, 1)

    local Goblet = doCreateItemEx(Goblets[item.actionid].Id, 1)

    doItemSetAttribute(Goblet, "description", ""..Goblets[item.actionid].txt.."\nAwarded to "..getCreatureName(cid)..".")

    gobletPos.y = gobletPos.y - 1

    doTileAddItemEx(gobletPos, Goblet)

    end

    doTransformItem(item.uid, item.itemid - 1)

    elseif isInArray(RoomsACT, ArenaRoom) == TRUE or ArenaRoom == 42300 then

    if Checking == FALSE then Checking = TRUE CheckRooms() end

    local myLevelArena = myArenaLevelIs(cid).LV

    if ArenaAdding[myLevelArena] then

    Mons = ArenaRoom + ArenaAdding[myLevelArena]

    end

    if getGlobalStorageValue(ArenaRoom) == 0 then

    if isCreature(getPlayerStorageValue(cid, MonStor)) == FALSE then

    if ArenaRoom == 42300 and getPlayerStorageValue(cid, talkNPC) == 1 then

    setPlayerStorageValue(cid, talkNPC, 0)

    setPlayerStorageValue(cid, isIN, 1)

    P = 1

    elseif ArenaRoom ~= 42300 and getPlayerStorageValue(cid, isIN) == 1 then

    P = 1

    else

    P = nil

    end

    if P ~= nil then

    local SpawnPos = getThingPos(ArenaRoom)

    doTeleportThing(cid, SpawnPos, FALSE)

    SpawnPos.x = SpawnPos.x - 1

    SpawnPos.y = SpawnPos.y - 1

    local Monster = doSummonCreature(arena_monsters[Mons], SpawnPos)

    setGlobalStorageValue(ArenaRoom, cid)

    setGlobalStorageValue(ArenaRoom - 1, 0)

    setPlayerStorageValue(cid, TimeStor, os.time()+arenaRoomMaxTime)

    setPlayerStorageValue(cid, MonStor, Monster)

    setPlayerStorageValue(cid, myRoom, ArenaRoom)

    else

    LeaveArena(cid)

    end

    else

    doTeleportThing(cid, fromPosition, TRUE)

    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, Cancel[9])

    end

    else

    doTeleportThing(cid, fromPosition, TRUE)

    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, ""..getCreatureName(getGlobalStorageValue(cid, ArenaRoom)).." "..Cancel[10].."")

    end

    elseif ArenaRoom == 42310 then

    if isCreature(getPlayerStorageValue(cid, MonStor)) == FALSE then

    doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_BLUE,""..Completed[1].." "..myArenaLevelIs(cid).LN.." "..Completed[2].."")

    setPlayerStorageValue(cid, myArenaLevel, getPlayerStorageValue(cid, myArenaLevel) + 1)

    if getPlayerStorageValue(cid, myArenaLevel == 0) then
    setPlayerStorageValue(cid, greenshore_storage,1)
    end
    if getPlayerStorageValue(cid, myArenaLevel == 1) then
    setPlayerStorageValue(cid, scrapper_storage,1)
    end
    if getPlayerStorageValue(cid, myArenaLevel == 2) then
    setPlayerStorageValue(cid, warlord_storage,1)
    end
    if getPlayerStorageValue(cid, myArenaLevel == 3) then
    setPlayerStorageValue(cid, final_storage,1)
    end

    setGlobalStorageValue(ArenaRoom - 1, 0)

    setPlayerStorageValue(cid, TimeStor, 0)

    setPlayerStorageValue(cid, isIN, 0)

    doTeleportThing(cid, RewardsRoom, TRUE)

    else

    doTeleportThing(cid, fromPosition, TRUE)

    doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_ORANGE,'Najpierw zabij potwora!')

    end

    end

    return TRUE

    end]]></movevent>

    <movevent type="StepOut" fromaid="42357" toaid="42387" event="script"><![CDATA[
    domodlib('arenaFunctions')
    function onStepOut(cid, item, position, fromPosition)

    if item.actionid == DoorsActID or RewardsDoors[item.actionid] then

    doTransformItem(item.uid, item.itemid - 1)

    elseif isInArray(GobletTiles, item.actionid) == TRUE then

    doTransformItem(item.uid, item.itemid + 1)
    end

    return TRUE

    end]]></movevent>

    </mod>[/lua]

    I've added this to try to make the quest log:

    [lua]
    greenshore_storage = 51345
    scrapper_storage = 51346
    warlord_storage = 51347
    final_storage = 51348

    if getPlayerStorageValue(cid, myArenaLevel == 0) then
    setPlayerStorageValue(cid, greenshore_storage,1)
    end
    if getPlayerStorageValue(cid, myArenaLevel == 1) then
    setPlayerStorageValue(cid, scrapper_storage,1)
    end
    if getPlayerStorageValue(cid, myArenaLevel == 2) then
    setPlayerStorageValue(cid, warlord_storage,1)
    end
    if getPlayerStorageValue(cid, myArenaLevel == 3) then
    setPlayerStorageValue(cid, final_storage,1)
    end[/lua]

    And here's an part of the NPC script that might be useful:

    [lua]if getPlayerStorageValue(cid, myArenaLevel) < 3 and getPlayerLevel(cid) >= enterArena.RLV and getPlayerMoney(cid) >= enterArena.RC then[/lua]

    getPlayerStorageValue(cid, myArenaLevel) < 3

    :3

    Greenshore level works like a charm, but when I complete Scrapper it completes all storages! Like this:

    [​IMG]

    Any ideas to modify the quests.xml, or arena.lua mod?
     
  20. Dragonas1

    Dragonas1 Member

    Joined:
    Jul 1, 2009
    Messages:
    33
    Has anyone of you have a map? All links have expired.
     

Share This Page