@zone - Zone Blocking!

Post Reply
User avatar
tagban
Posts: 352
Joined: Fri Dec 28, 2012 11:31 am
Location: Pennsylvania, USA

@zone - Zone Blocking!

Post by tagban » Wed Apr 29, 2015 2:18 pm

I had this on my server for a long time, but apparently broke the auto-translate. Thankfully, TeoTwaki helped me figure out what I did wrong. So here it is, your moment of zen. This is VERY good for servers that want to set permission to 0 so anyone can use it, as it lets you limit the zones the people use.

Code: Select all

---------------------------------------------------------------------------------------------------
-- func: zone
-- auth: <Unknown> :: Modded by atom0s. Blocked zones by Tagban with TONS of help from others! Fixed by Teotwaki!
-- desc: Teleports a player to the given zone. Allows admins to set banned zones. 
---------------------------------------------------------------------------------------------------

cmdprops =
{
    permission = 1,
    parameters = "s"
};

---------------------------------------------------------------------------------------------------
-- desc: List of zones with their auto-translated group and message id.
-- note: The format is as follows: groupId, messageId, zoneId
---------------------------------------------------------------------------------------------------
local zone_list =
{
    { 0x14, 0xA9, 1 }, -- Phanauet Channel
    { 0x14, 0xAA, 2 }, -- Carpenters' Landing
    { 0x14, 0x84, 3 }, -- Manaclipper
    { 0x14, 0x85, 4 }, -- Bibiki Bay
    { 0x14, 0x8A, 5 }, -- Uleguerand Range
    { 0x14, 0x8B, 6 }, -- Bearclaw Pinnacle
    { 0x14, 0x86, 7 }, -- Attohwa Chasm
    { 0x14, 0x87, 8 }, -- Boneyard Gully
    { 0x14, 0x88, 9 }, -- Pso'Xja
    { 0x14, 0x89, 10 }, -- The Shrouded Maw
    { 0x14, 0x8C, 11 }, -- Oldton Movalpolos
    { 0x14, 0x8D, 12 }, -- Newton Movalpolos
    { 0x14, 0x8E, 13 }, -- Mine Shaft #2716
    { 0x14, 0xDC, 13 }, -- Mine Shaft #2716
    { 0x14, 0xAB, 14 }, -- Hall of Transference
    { 0x14, 0x9B, 16 }, -- Promyvion - Holla
    { 0x14, 0x9A, 16 }, -- Promyvion - Holla
    { 0x14, 0x9C, 17 }, -- Spire of Holla
    { 0x14, 0x9E, 18 }, -- Promyvion - Dem
    { 0x14, 0x9D, 18 }, -- Promyvion - Dem
    { 0x14, 0x9F, 19 }, -- Spire of Dem
    { 0x14, 0xA0, 20 }, -- Promyvion - Mea
    { 0x14, 0xA1, 20 }, -- Promyvion - Mea
    { 0x14, 0xA2, 21 }, -- Spire of Mea
    { 0x14, 0xA3, 22 }, -- Promyvion - Vahzl
    { 0x14, 0xA4, 22 }, -- Promyvion - Vahzl
    { 0x14, 0xA5, 22 }, -- Promyvion - Vahzl
    { 0x14, 0xA6, 22 }, -- Promyvion - Vahzl
    { 0x14, 0xA7, 23 }, -- Spire of Vahzl
    { 0x14, 0xA8, 23 }, -- Spire of Vahzl
    { 0x14, 0x90, 24 }, -- Lufaise Meadows
    { 0x14, 0x91, 25 }, -- Misareaux Coast
    { 0x14, 0x8F, 26 }, -- Tavnazian Safehold
    { 0x14, 0x93, 27 }, -- Phomiuna Aqueducts
    { 0x14, 0x94, 28 }, -- Sacrarium
    { 0x14, 0x96, 29 }, -- Riverne - Site #B01
    { 0x14, 0x95, 29 }, -- Riverne - Site #B01
    { 0x14, 0x98, 30 }, -- Riverne - Site #A01
    { 0x14, 0x97, 30 }, -- Riverne - Site #A01
    { 0x14, 0x99, 31 }, -- Monarch Linn
    { 0x14, 0x92, 32 }, -- Sealion's Den
    { 0x14, 0xAC, 33 }, -- Al'Taieu
    { 0x14, 0xAD, 34 }, -- Grand Palace of Hu'Xzoi
    { 0x14, 0xAE, 35 }, -- The Garden of Ru'Hmet
    { 0x14, 0xB0, 36 }, -- Empyreal Paradox
    { 0x14, 0xB1, 37 }, -- Temenos
    { 0x14, 0xB2, 38 }, -- Apollyon
    { 0x14, 0xB4, 39 }, -- Dynamis - Valkurm
    { 0x14, 0xB5, 40 }, -- Dynamis - Buburimu
    { 0x14, 0xB6, 41 }, -- Dynamis - Qufim
    { 0x14, 0xB7, 42 }, -- Dynamis - Tavnazia
    { 0x14, 0xAF, 43 }, -- Diorama Abdhaljs-Ghelsba
    { 0x14, 0xB8, 44 }, -- Abdhaljs Isle-Purgonorgo
    { 0x14, 0xB9, 46 }, -- Open sea route to Al Zahbi
    { 0x14, 0xBA, 47 }, -- Open sea route to Mhaura
    { 0x14, 0xBB, 48 }, -- Al Zahbi
    { 0x14, 0xDB, 50 }, -- Aht Urhgan Whitegate
    { 0x14, 0xBC, 50 }, -- Aht Urhgan Whitegate
    { 0x14, 0xBD, 51 }, -- Wajaom Woodlands
    { 0x14, 0xBE, 52 }, -- Bhaflau Thickets
    { 0x14, 0xBF, 53 }, -- Nashmau
    { 0x14, 0xC0, 54 }, -- Arrapago Reef
    { 0x14, 0xC1, 55 }, -- Ilrusi Atoll
    { 0x14, 0xC2, 56 }, -- Periqia
    { 0x14, 0xC3, 57 }, -- Talacca Cove
    { 0x14, 0xC4, 58 }, -- Silver Sea route to Nashmau
    { 0x14, 0xC5, 59 }, -- Silver Sea route to Al Zahbi
    { 0x14, 0xC6, 60 }, -- The Ashu Talif
    { 0x14, 0xC7, 61 }, -- Mount Zhayolm
    { 0x14, 0xC8, 62 }, -- Halvung
    { 0x14, 0xC9, 63 }, -- Lebros Cavern
    { 0x14, 0xCA, 64 }, -- Navukgo Execution Chamber
    { 0x14, 0xCB, 65 }, -- Mamook
    { 0x14, 0xCC, 66 }, -- Mamool Ja Training Grounds
    { 0x14, 0xCD, 67 }, -- Jade Sepulcher
    { 0x14, 0xCE, 68 }, -- Aydeewa Subterrane
    { 0x14, 0xCF, 69 }, -- Leujaoam Sanctum
    { 0x27, 0x0F, 70 }, -- Chocobo Circuit
    { 0x27, 0x10, 71 }, -- The Colosseum
    { 0x14, 0xDD, 72 }, -- Alzadaal Undersea Ruins
    { 0x14, 0xDE, 73 }, -- Zhayolm Remnants
    { 0x14, 0xDF, 74 }, -- Arrapago Remnants
    { 0x14, 0xE0, 75 }, -- Bhaflau Remnants
    { 0x14, 0xE1, 76 }, -- Silver Sea Remnants
    { 0x14, 0xE2, 77 }, -- Nyzul Isle
    { 0x14, 0xDA, 78 }, -- Hazhalm Testing Grounds
    { 0x14, 0xD0, 79 }, -- Caedarva Mire
    { 0x27, 0x11, 80 }, -- Southern San d'Oria [S]
    { 0x27, 0x13, 81 }, -- East Ronfaure [S]
    { 0x27, 0x15, 82 }, -- Jugner Forest [S]
    { 0x27, 0x23, 83 }, -- Vunkerl Inlet [S]
    { 0x27, 0x17, 84 }, -- Batallia Downs [S]
    { 0x27, 0x3E, 85 }, -- La Vaule [S]
    { 0x27, 0x40, 85 }, -- La Vaule [S]
    { 0x27, 0x19, 86 }, -- Everbloom Hollow
    { 0x27, 0x1C, 87 }, -- Bastok Markets [S]
    { 0x27, 0x1E, 88 }, -- North Gustaberg [S]
    { 0x27, 0x20, 89 }, -- Grauberg [S]
    { 0x27, 0x25, 90 }, -- Pashhow Marshlands [S]
    { 0x27, 0x27, 91 }, -- Rolanberry Fields [S]
    { 0x27, 0x42, 92 }, -- Beadeaux [S]
    { 0x27, 0x22, 93 }, -- Ruhotz Silvermines
    { 0x27, 0x2B, 94 }, -- Windurst Waters [S]
    { 0x27, 0x2D, 95 }, -- West Sarutabaruta [S]
    { 0x27, 0x2F, 96 }, -- Fort Karugo-Narugo [S]
    { 0x27, 0x32, 97 }, -- Meriphataud Mountains [S]
    { 0x27, 0x34, 98 }, -- Sauromugue Champaign [S]
    { 0x27, 0x44, 99 }, -- Castle Oztroja [S]
    { 0x14, 0x11, 100 }, -- West Ronfaure
    { 0x14, 0x0F, 101 }, -- East Ronfaure
    { 0x14, 0x51, 102 }, -- La Theine Plateau
    { 0x14, 0x60, 103 }, -- Valkurm Dunes
    { 0x14, 0x01, 104 }, -- Jugner Forest
    { 0x14, 0x02, 105 }, -- Batallia Downs
    { 0x14, 0x64, 106 }, -- North Gustaberg
    { 0x14, 0x63, 107 }, -- South Gustaberg
    { 0x14, 0x69, 108 }, -- Konschtat Highlands
    { 0x14, 0x2B, 109 }, -- Pashhow Marshlands
    { 0x14, 0x07, 110 }, -- Rolanberry Fields
    { 0x14, 0x24, 111 }, -- Beaucedine Glacier
    { 0x14, 0x4D, 112 }, -- Xarcabard
    { 0x14, 0x3D, 113 }, -- Cape Teriggan
    { 0x14, 0x3E, 114 }, -- Eastern Altepa Desert
    { 0x14, 0x18, 115 }, -- West Sarutabaruta
    { 0x14, 0x27, 116 }, -- East Sarutabaruta
    { 0x14, 0x17, 117 }, -- Tahrongi Canyon
    { 0x14, 0x16, 118 }, -- Buburimu Peninsula
    { 0x14, 0x20, 119 }, -- Meriphataud Mountains
    { 0x14, 0x2E, 120 }, -- Sauromugue Champaign
    { 0x14, 0x3F, 121 }, -- The Sanctuary of Zi'Tah
    { 0x14, 0x7D, 122 }, -- Ro'Maeve
    { 0x14, 0x7C, 122 }, -- Ro'Maeve
    { 0x14, 0x40, 123 }, -- Yuhtunga Jungle
    { 0x14, 0x41, 124 }, -- Yhoator Jungle
    { 0x14, 0x42, 125 }, -- Western Altepa Desert
    { 0x14, 0x08, 126 }, -- Qufim Island
    { 0x14, 0x0A, 127 }, -- Behemoth's Dominion
    { 0x14, 0x43, 128 }, -- Valley of Sorrows
    { 0x27, 0x31, 129 }, -- Ghoyu's Reverie
    { 0x14, 0x6F, 130 }, -- Ru'Aun Gardens
    { 0x14, 0x82, 134 }, -- Dynamis - Beaucedine
    { 0x14, 0x83, 135 }, -- Dynamis - Xarcabard
    { 0x27, 0x46, 136 }, -- Beaucedine Glacier [S]
    { 0x27, 0x48, 137 }, -- Xarcabard [S]
    { 0x14, 0x65, 139 }, -- Horlais Peak
    { 0x14, 0x6C, 140 }, -- Ghelsba Outpost
    { 0x14, 0x1F, 141 }, -- Fort Ghelsba
    { 0x14, 0x5E, 142 }, -- Yughott Grotto
    { 0x14, 0x66, 143 }, -- Palborough Mines
    { 0x14, 0x1A, 144 }, -- Waughroon Shrine
    { 0x14, 0x21, 145 }, -- Giddeus
    { 0x14, 0x19, 146 }, -- Balga's Dais
    { 0x14, 0x2A, 147 }, -- Beadeaux
    { 0x14, 0x28, 148 }, -- Qulun Dome
    { 0x14, 0x68, 149 }, -- Davoi
    { 0x14, 0x6D, 150 }, -- Monastic Cavern
    { 0x14, 0x23, 151 }, -- Castle Oztroja
    { 0x14, 0x04, 152 }, -- Altar Room
    { 0x14, 0x44, 153 }, -- The Boyahda Tree
    { 0x14, 0x37, 154 }, -- Dragon's Aery
    { 0x14, 0x0C, 157 }, -- Middle Delkfutt's Tower
    { 0x14, 0x0B, 158 }, -- Upper Delkfutt's Tower
    { 0x14, 0x36, 159 }, -- Temple of Uggalepih
    { 0x14, 0x35, 160 }, -- Den of Rancor
    { 0x14, 0x26, 161 }, -- Castle Zvahl Baileys
    { 0x14, 0x25, 161 }, -- Castle Zvahl Baileys
    { 0x14, 0x50, 162 }, -- Castle Zvahl Keep
    { 0x14, 0x4F, 162 }, -- Castle Zvahl Keep
    { 0x14, 0x39, 163 }, -- Sacrificial Chamber
    { 0x27, 0x36, 164 }, -- Garlaige Citadel [S]
    { 0x14, 0x5D, 165 }, -- Throne Room
    { 0x14, 0x2D, 166 }, -- Ranguemont Pass
    { 0x14, 0x32, 167 }, -- Bostaunieux Oubliette
    { 0x14, 0x3B, 168 }, -- Chamber of Oracles
    { 0x14, 0x1D, 169 }, -- Toraimarai Canal
    { 0x14, 0x5C, 170 }, -- Full Moon Fountain
    { 0x27, 0x29, 171 }, -- Crawlers' Nest [S]
    { 0x14, 0x61, 172 }, -- Zeruhn Mines
    { 0x14, 0x5B, 173 }, -- Korroloka Tunnel
    { 0x14, 0x5A, 174 }, -- Kuftal Tunnel
    { 0x27, 0x1A, 175 }, -- The Eldieme Necropolis [S]
    { 0x14, 0x59, 176 }, -- Sea Serpent Grotto
    { 0x14, 0x71, 177 }, -- Ve'Lugannon Palace
    { 0x14, 0x70, 177 }, -- Ve'Lugannon Palace
    { 0x14, 0x72, 178 }, -- The Shrine of Ru'Avitau
    { 0x14, 0xB3, 179 }, -- Stellar Fulcrum
    { 0x14, 0x73, 180 }, -- La'Loff Amphitheater
    { 0x14, 0x74, 181 }, -- The Celestial Nexus
    { 0x14, 0x0D, 184 }, -- Lower Delkfutt's Tower
    { 0x14, 0x7E, 185 }, -- Dynamis - San d'Oria
    { 0x14, 0x7F, 186 }, -- Dynamis - Bastok
    { 0x14, 0x80, 187 }, -- Dynamis - Windurst
    { 0x14, 0x81, 188 }, -- Dynamis - Jeuno
    { 0x14, 0x6E, 190 }, -- King Ranperre's Tomb
    { 0x14, 0x62, 191 }, -- Dangruf Wadi
    { 0x14, 0x1C, 192 }, -- Inner Horutoto Ruins
    { 0x14, 0x03, 193 }, -- Ordelle's Caves
    { 0x14, 0x1B, 194 }, -- Outer Horutoto Ruins
    { 0x14, 0x6A, 195 }, -- The Eldieme Necropolis
    { 0x14, 0x67, 196 }, -- Gusgen Mines
    { 0x14, 0x2C, 197 }, -- Crawlers' Nest
    { 0x14, 0x15, 198 }, -- Maze of Shakhrami
    { 0x14, 0x14, 200 }, -- Garlaige Citadel
    { 0x14, 0x77, 201 }, -- Cloister of Gales
    { 0x14, 0x75, 202 }, -- Cloister of Storms
    { 0x14, 0x7A, 203 }, -- Cloister of Frost
    { 0x14, 0x4A, 204 }, -- Fei'Yin
    { 0x14, 0x58, 205 }, -- Ifrit's Cauldron
    { 0x14, 0x6B, 206 }, -- Qu'Bia Arena
    { 0x14, 0x78, 207 }, -- Cloister of Flames
    { 0x14, 0x57, 208 }, -- Quicksand Caves
    { 0x14, 0x76, 209 }, -- Cloister of Tremors
    { 0x14, 0x79, 211 }, -- Cloister of Tides
    { 0x14, 0x34, 212 }, -- Gustav Tunnel
    { 0x14, 0x33, 213 }, -- Labyrinth of Onzozo
    { 0x14, 0x4C, 230 }, -- Southern San d'Oria
    { 0x14, 0x30, 231 }, -- Northern San d'Oria
    { 0x14, 0x52, 232 }, -- Port San d'Oria
    { 0x14, 0x22, 233 }, -- Chateau d'Oraguille
    { 0x14, 0x46, 234 }, -- Bastok Mines
    { 0x14, 0x56, 235 }, -- Bastok Markets
    { 0x14, 0x3C, 236 }, -- Port Bastok
    { 0x14, 0x2F, 237 }, -- Metalworks
    { 0x14, 0x3A, 238 }, -- Windurst Waters
    { 0x14, 0x54, 239 }, -- Windurst Walls
    { 0x14, 0x45, 240 }, -- Port Windurst
    { 0x14, 0x38, 241 }, -- Windurst Woods
    { 0x14, 0x55, 242 }, -- Heavens Tower
    { 0x14, 0x13, 243 }, -- Ru'Lude Gardens
    { 0x14, 0x4E, 244 }, -- Upper Jeuno
    { 0x14, 0x0E, 245 }, -- Lower Jeuno
    { 0x14, 0x06, 246 }, -- Port Jeuno
    { 0x14, 0x31, 247 }, -- Rabao
    { 0x14, 0x5F, 248 }, -- Selbina
    { 0x14, 0x1E, 249 }, -- Mhaura
    { 0x14, 0x29, 250 }, -- Kazham
    { 0x14, 0x7B, 251 }, -- Hall of the Gods
    { 0x14, 0x09, 252 }, -- Norg
    { 0x27, 0x4C, 256 }, -- Western Adoulin
    { 0x27, 0x4D, 257 }, -- Eastern Adoulin
    { 0x27, 0x4E, 259 }, -- Rala Waterways [U]
    { 0x27, 0x4F, 260 }, -- Yahse Hunting Grounds
    { 0x27, 0x50, 261 }, -- Ceizak Battlegrounds
    { 0x27, 0x51, 262 }, -- Foret de Hennetiel
    { 0x27, 0x56, 264 }, -- Yorcia Weald [U]
    { 0x27, 0x52, 265 }, -- Morimar Basalt Fields
    { 0x27, 0x57, 266 }, -- Marjami Ravine
    { 0x27, 0x5C, 267 }, -- Kamihr Drifts
    { 0x27, 0x53, 268 }, -- Sih Gates
    { 0x27, 0x54, 269 }, -- Moh Gates
    { 0x27, 0x55, 271 }, -- Cirdas Caverns [U]
    { 0x27, 0x58, 272 }, -- Dho Gates
    { 0x27, 0x5D, 273 }, -- Woh Gates
    { 0x27, 0x12, 275 }, -- Outer Ra'Kaznar [U]
    { 0x27, 0x5A, 280 }, -- Mog Garden
    { 0x27, 0x59, 284 }, -- Celennia Memorial Library
    { 0x27, 0x5B, 285 }, -- Feretory
};

---------------------------------------------------------------------------------------------------
-- func: onTrigger
-- desc: Called when this command is invoked.
---------------------------------------------------------------------------------------------------
function onTrigger(player, zoneId)
    -- Blocked zones includes Abyssea, Dynamis, and ALL instances
    -- Can be modded for any set of zones.
    local blockedZones =
    {
	15,16,18,22,27,39,40,41,42,45,55,56,60,63,66,69,73,74,75,76,77,86,93,129,183,
	132,134,135,215,216,217,218,253,254,255,258,259,260,262,
	263,264,264,267,268,269,270,271,272,273,274,275,276,277,
	278,279,280,281,282,283,284,285,185,186,187,188

    }
    local word  = "";
    local i     = 0;
    local zone  = zoneId;
    local blocked = false;

    -- Ensure a zone was given..
    if (zoneId == nil) then
        player:PrintToPlayer("You must enter a VALID zone id. (MAX Zone ID is 285)");
        return;
    end

    for _, v in ipairs(blockedZones) do
        if(tonumber(zoneId) == v) then
            player:PrintToPlayer(string.format("You cannot enter this zone!"));
            blocked = true;
            return;
        end
    end

    -- Was the zone auto-translated..
    if (string.sub(zoneId, 1, 2) == '\253\02' and string.byte(zoneId, 5) ~= nil and string.byte(zoneId, 6) == 0xFD) then
        -- Pull the group and message id from the translated string..
        local groupId = string.byte(zoneId, 4);
        local messageId = string.byte(zoneId, 5);

        -- Attempt to lookup this zone..
        for k, v in pairs(zone_list) do
            if (v[1] == groupId and v[2] == messageId) then
                for _, id in ipairs(blockedZones) do
                    if (tonumber(v[3]) == id) then
                        player:PrintToPlayer(string.format("You cannot enter this zone!"));
                        blocked = true;
                        return;
                    end
                end
                if(not blocked) then
                    if (v[3] < 286) then
                        player:setPos(0, 0, 0, 0, v[3]);
                    end
                end;
                return;
            end
        end

        -- Zone was not found, allow the user to know..
        player:PrintToPlayer('Unknown zone, could not teleport.');
        return;
    end

    if(not blocked) then
        if (zoneId < "286") then
            player:setPos(0, 0, 0, 0, zoneId);
        end
    end
end
Last edited by tagban on Mon Jun 01, 2015 7:56 am, edited 1 time in total.

User avatar
tagban
Posts: 352
Joined: Fri Dec 28, 2012 11:31 am
Location: Pennsylvania, USA

Re: @zone - Zone Blocking!

Post by tagban » Wed Apr 29, 2015 9:02 pm

Sorry had to update the code, the second comparison was supposed to be a string value, not a number value. Fixed now, without that update zone ID's themselves wouldn't work but auto-translate did. Now both work.

User avatar
tagban
Posts: 352
Joined: Fri Dec 28, 2012 11:31 am
Location: Pennsylvania, USA

Re: @zone - Zone Blocking!

Post by tagban » Mon Jun 01, 2015 7:57 am

Updated again, this new version will prevent people getting into "blocked zones" by using a 'leading zero'. (IE @zone 18 -- Blocked/rejected, @zone 018 was working), this new method converts v[3] to 'number', which strips the leading zeroes. :)

Enjoy!

Post Reply