[FUN] MobArena v0.96.8 - Become a mob-fighting gladiator! [1.7.x, 1.8.x]

Discussion in 'Archived: Plugin Releases' started by garbagemule, May 30, 2011.

  1. Offline

    garbagemule

    [​IMG]

    MobArena - Become a mob-fighting gladiator!
    [​IMG] Latest build: v0.96.7 (1.7.x)
    [​IMG] Wiki
    [​IMG] IRC Channel
    [​IMG] Source

    BukkitDev Project Page - Find MobArena on dev.bukkit.org here: LINK.

    ------------------------------

    Old description (open)
    If you enjoy fighting monsters for glorious prizes or just the sheer thrill of battle, you and your friends can now join forces against hordes of Minecraft evils in the exciting gladiator-style survival mini-game MobArena!

    Heavily inspired by Deminetix' Fight-plugin, MobArena is a PvE-take on arena-gameplay, with a similar class-based system. Instead of fighting other players, you team up with them to beat oncoming waves of monsters, earning rewards in the process. MobArena can be played alone, or with as many friends as you like!


    Features:
    • Fight oncoming waves of monsters
    • Play alone or team up with friends
    • Earn glorious prizes
    • Customizable classes, rewards and waves
    • Easy to set up
    • Extremely easy to use
    • Very few user commands
    • Supports Permissions and all major economies
    • Supports Spout
    • Supports Heroes
    Note: When you post a bug report, please provide a stacktrace/error from the server log/console window. Post this stacktrace in either a pastebin, a pastie, or a CODE-block! The same applies for config-files, permissions-files, etc! Please don't put them directly in your posts, as they become gigantic and annoying to read. If you don't follow this guideline, I might ignore your post!


    Wiki - Instructions, commands, FAQ, etc.
    I have set up a Wiki for MobArena. It contains a bunch of information and guides on how to set up and customize arenas, an overview of all the commands, how to set up Permissions, as well as frequently asked questions.

    New: MobArena now has its own IRC channel (#mobarena @ EsperNet). Click here for a web-based IRC client. Feel free to stop by to get help setting everything up if you really don't understand the Wiki and the instructional video, or to have a chat about MobArena (or anything else, for that matter) :)

    Relevant links:
    Videos:
    Getting started with MobArena, by Flamers
    Flamers made this really easy-to-follow, simple video of how to get started with MobArena. It covers installing the plugin, defining an arena region and setting up basic leaderboards, as well as a few pointers for arena design.
    Old instructional video (open)
    Instructional video for setting up MobArena:

    Note: This video was made for v0.67, but all the in-game instructions still work the same for the latest versions. The config-file has changed, so make sure to read the Wiki on how to set it up.
    More Videos (open)
    Review of MobArena by plugin reviewer jamescosten (v0.84):

    Note: My nickname "garbagemule" is pronounced "garbage mule", as in "trash donkey" ;)

    Hilarious showcase of MobArena by Daniel James and Daniel Cherry (v0.92.3):


    Delios showing off his beautiful arena setup:


    slowmonkey1227 in his interesting "island" arena: YouTube
    French video by avalondrey (v0.87.3): YouTube
    German video by blutherz and his friends (v0.91.2): YouTube



    Troubleshooting:
    To avoid wasting not only your own time, but mine as well, I expect everyone to do some extensive troubleshooting before posting bug reports. What does this mean?

    Try MobArena on a fresh server.
    MobArena works perfectly fine when I release it. Sure, there are a few bugs, but it works. If it doesn't work for you, something is most likely wrong on your end. Set up a local test-server, and verify that MobArena works before claiming that it doesn't. When you have verified that MobArena does indeed work, you can start adding other plugins and settings until something conflicts.

    Disable other plugins.
    The first thing you need to do is disable all other plugins. If you can't reproduce the bug with other plugins disabled, you know that you have a conflicting plugin. Now perform a binary search on the other plugins, or if you don't know how to do that, just add a couple of plugins back to the plugins-folder, try to reproduce the bug, and if you can't, the conflicting plugin must be in the remaining set of plugins.

    Write down reproduction steps.
    Figure out the exact steps to reproduce/trigger the bug. I need precise steps, and as much information as possible, because there are often many things that could be going on. An example of reproduction steps could be:
    1. Type /ma join
    2. Punch the Archer class sign
    3. Wait for someone else to join
    4. Punch the iron block
    5. Type /ma leave before the other player picks a class

    Check the console window/server.log
    Make sure you check the server.log file for any MobArena errors or exceptions. If you find any, copy the ENTIRE exception (including all the lines that say "at com.garbagemule.MobArena...") and paste it (with the other information) in a CODE-tag here in the thread.


    Donations:
    I develop MobArena for the fun of it and the positive feedback is all it takes to make me happy, but a few people have asked for a link, so if you're one of them, here's a link: Donate - You can donate as much as you want, even down to a few cents! If I get enough donations, I will spend the money on an extra Minecraft account to aid me in developing/testing/debugging MobArena :)


    Changelog:

    Version 0.94.3.24
    • Updated for CB 1337.
    • The repair-delay node is now unused! The reason for this is that it is now possible (with the release of 1317) to cancel block damage in explosions, and still retain the animation and sound! This also means that arenas should be fully pistons-compatible (for arenas that don't use soft-restore or force-restore)! I'm hoping to see some screenshots and videos of shifting arenas! :)
    • You can now right-click signs in the lobby! I finally found a super easy solution to the improperly updating inventory issue with right-clicking class signs. The result is that players can now left- or right-click as they please. This should solve all issues related to players not being able to choose classes, due to spawn region and WorldGuard/Factions/whatever conflicts.
    • It is no longer possible to warp out of the lobby.
    • New per-arena setting: final-wave - Allows for setting a final wave, meaning on that wave, the arena will end, regardless of how many players are alive.
    Version 0.94.3.11 (open)

    • v0.94.3.11 - Updated Register, built against CB 1240.
    • v0.94.3.8 - Added basic leaderboards.
    • v0.94.3.6 - Fixed MagicSpells support - MobArena no longer supports MagicSpells pre-v1.1!
    • v0.94.3.5 - Fixed a bunch of bugs introduced with CB 1185, as well as a couple of minor MobArena bugs.
    • Updated for CraftBukkit #1185
    • Updated economy support (now supports iConomy 6).
    • Added the three new mob types, Enderman/Endermen, CaveSpider/CaveSpiders, Silverfish. They can be used just like the other mob types in the waves.
    • Endermen cannot pick up arena blocks (this is why).
    • Endermen cannot place blocks in arena regions.
    • The per-class permission syntax has been fixed and changed slightly. The Wiki has been updated (clicky).
    • Fixed MagicSpells issues.
    Version 0.94.2 (open)

    • Redstone circuits now work properly in arenas.
    • Lightning now properly strikes on spawnpoints on special waves.
    • Fixed an issue where players somehow warping/cheating out of the arena world get kicked from the server when discovered.
    • Added MagicSpells support. Use the magicspells.yml file to ban certain spells from the arena either for the whole session, or only during boss waves.
    • Fixed the Heroes death conflict. MobArena and Heroes should now play nice together. Further Heroes support is planned for upcoming releases.
    • [COLOR=#1000000]MobArena will no longer support the discontinued Permissions 2.x and 3.x permission systems.[/COLOR] Recommended permissions systems include PermissionsBukkit (defacto standard) or PermissionsEX.
    Version 0.94.1 (open)

    • Added two new boss abilities: 'shuffle-positions' and 'flood'. Try them out!
    • Players disconnecting/crashing during an arena session no longer get corrupted data files due to economy rewards.
    • Weapon durability is now correctly set to "unlimited".
    • Item sub-types (cocoa beans, bonemeal, colored wool, etc.) now work again.
    • Players can no longer join the arena without first picking a class.
    • MobArena now works with spawn-monsters=false again.
    Version 0.94 (open)

    • Completely revamped the waves system! Undeniably the biggest feature in MobArena since multiple arenas in v0.92, the new customizable waves are guaranteed to bring much more awesomeness to your MobArenas. The waves system brings two new wave types, swarm waves and boss waves. The latter is a very elaborate feature, and the whole waves system has been given its own page on the Wiki. Note: MobArena will ignore all old wave settings, but use sane defaults.
    • Revamped the logging system. Instead of logging: true, you can now use logging: yml/xml. The logging system will now keep track of the last session only, but also maintain a collection of 'totals' for each arena. The idea behind these easy-to-parse files is making the stats available on server web pages.
    • Added SuperPerms/PermissionsBukkit support. Note that specifying mobarena.arenas.* and mobarena.classes.* probably won't work, but these nodes are given to everyone by default.
    • Added Spout support. Currently, the only Spouty thing MobArena does is print (some) announcements as notifications/achievements. This should limit the amount of "chat spam" that MobArena produces. Other Spout-features are planned, but don't expect something crazy. Note that MobArena does NOT require Spout!
    • Monsters will no longer target pet wolves. This is a major nerf to pet classes, but they were very overpowered as it was.
    • Fixed item amounts greater than 64 sometimes bugging out. You should now be able to put arrow:1024 for your Archer classes :)
    • Fixed players losing their stored items and/or earned rewards upon disconnecting from the arena.
    • Fixed blocks not restoring when burned by fire.
    • Fixed an issue with entry fees. They should no longer cause any problems.
    • Fixed slimes. That's right! Slimes that spawn as a result of bigger slimes splitting upon death are now considered arena monsters. This also means that Slimes no longer drop slime balls; as intended.
    • Revamped the repairing algorithm. It is now MUCH more sophisticated, and is capable of repairing not only signs and containers, but also torches, doors and beds. Redstone -should- repair properly as well, but it is still slightly buggy.
    • Added support for restorable containers. Registered chests, dispensers, and furnaces will have their contents stored upon arena start, and restored at arena end. This is useful for providing the arena players with chests with e.g. upgrades or food.
    • Added new commands (for the feature above) - /ma addcontainer <name>, /ma delcontainer <name>, /ma containers. These commands work much like the the spawnpoint commands. To add a container, simply look at the container and type /ma addcontainer <name>.
    Changelog (continued)
     
    apes, chakyl, Steffion and 64 others like this.
  2. Offline

    garbagemule

    Bobcat00
    Sounds like a good idea. Good luck with it, and happy hacking :) Oh, and I know all about the troubles of starting in a new paradigm. My first encounter with functional programming was frustrating, because I kept wanting to do things like I was used to from imperative programming. Knowing what you want to do, but not being able to properly express it in the language you're using is extremely frustrating - just like with spoken languages and asking for the location of a bathroom when you've had a very bean-filled chili the day before.

    Thanks for the ticket. I'll look into it after exams.
     
  3. Offline

    Bobcat00

    I finally got to test this. It works, except that players don't see their own death messages.

    Tested with:
    isolated-chat: false
    global-join-announce: true
    global-end-announce: true
    show-death-messages: true
     
  4. Offline

    garbagemule

    Bobcat00
    Turns out all the arena logic was done before the messaging (meaning the player was no longer considered "in the arena" during messaging). Switched things around, so it ought to work just fine now. Same link as before.
     
  5. Offline

    Bobcat00

    Tested this today. Works fine AFAICT. Tested it within one arena, and across two different arenas. Death messages are local to an arena, and the player sees his own death messages.

    I got my plugin basically working with the status of the arena. Now I need the ArenaPlayerReadyEvent. :cool:
     
  6. Offline

    garbagemule

    Yep, it's still alive...

    MobArena v0.96.4 is out!

    Grab it here: Click

    Unlike v0.96.3, the fourth "minor update" of v0.96 truly is a minor update. However, it fixes a problematic and somewhat dire bug with arena containers, which means the aforementioned planned changes for v0.96.4 will have to be pushed to v0.96.5 (sorry). Besides this important bug fix, v0.96.4 also fixes a harmless bug with the start-delay-timer, and tries to keep uninterested players calm by limiting the death message spam to arena players at all times. Aside from that, a new event was added to the API for when players ready up (this should keep Bobcat00 happy for a while).

    If you don't use arena containers, or if you are 100% certain that your players never Shift-click items out of them, you can ignore this update. Otherwise, go ahead and grab it.
     
  7. Offline

    Bobcat00

    Cool. I actually got my plugin working by using the player join event to schedule a repeating task, and canceling it when all players have left the lobby. But the new event will make it a lot cleaner, so I'll switch over in a couple days.
     
  8. Offline

    Bobcat00

    OK, the new event works. Thanks!
     
    garbagemule likes this.
  9. garbagemule

    Please add support for worldguard, I want to have an arena under spawn but the spawn is flagged as mob-spawning deny
     
  10. Offline

    garbagemule

    CreepersControlU
    How is "support for WorldGuard" going to help if you're denying mob spawning? I'm not adding more unnecessary dependencies to the project - WorldGuard and MobArena have coexisted for 3 years with all related issues being self-induced and solvable by proper WorldGuard configuration.
     
  11. Offline

    garbagemule

    Here's another one, guys...

    MobArena v0.96.5 is out!

    Grab yourself a copy here: Clicky

    Another "minor" minor update. This one fixes a couple of minor (major to some people) bugs, including, but not limited to:
    • an apparently long-standing bug where splash potions of harming and poison would damage other players despite PvP being disabled.
    • a silly bug with the auto-start-timer complaining in the console (harmless, but annoyingly spammy)
    • a somewhat dire bug with Setup Mode where MobArena commands were still accessible (resulting in a buggy state if /ma setup was entered twice)
    • an issue with "special" helmets (e.g. wool blocks and skulls), where they would reset to the "default" block on hit, if unbreakable-armor was set to true
    Outside of bug fixes, this build also introduces gray-colored names of dead players on the scoreboards. Wooo! As always, read the changelog on the download page (link at the top), take a backup of your config-file(s), and have fun :)

    Let's talk current plans...

    This build will most likely be the last build before the dreaded UUID update, which will not affect MobArena at all. MobArena does not persist any information (aside from inventories when the occasional crash occurs, which in most cases end up solving themselves) based on player names, so you don't have to worry about it. As always, unless the Bukkit API is released for 1.8 with breaking changes, MobArena will continue to work, even if the build number on DBO says 1.7.2 - that's the beauty of programming to an interface.

    On to something more interesting!

    I've been working on support for arbitrary "grantables". A grantable is anything that can be given to and/or taken from a player, and checked if the player has. The most obvious grantable is an item - they can be added to or removed from the player inventory, and we can figure out if the player has a given item. Economy plugin money is another grantable, and so are permissions and potion effects. All of these are currently supported by the framework I've been working on (developers, you can check it out here - I'd love some feedback), but the cool thing about it is that it will make it possible to support very specific things from other plugins or mods via simple plugin extensions.

    So why does this matter? It matters because a lot of you (or at least a lot of people) have been asking for the possibility of rewarding players with permissions and giving classes potion effects. Both of these will be trivial with this framework, but since I don't run a server myself, I would love to have some guinea pigs :) If you want to help test out this framework, please send me a PM either here or on DBO (I prefer DBO) with the subject "MobArena Grantables" (so I can find it again once I have a build ready for testing).

    In other (lame) news, my exams are approaching very quickly, and I'm currently taking three project courses at uni, with code freezes, presentations and reports coming up even sooner, so I will most likely not be working on MobArena for the next month or so (aside from dire bug fixes or breaking changes, i.e. no new features will be worked on).

    Enough with the wall-of-text. Go download v0.96.5 already!
     
  12. Offline

    Bobcat00

    I wonder if that was related to my leave the lobby, go back, and the player join event was flakey?
     
  13. Offline

    garbagemule

    Bobcat00
    I'm not sure exactly what you mean by flakey. Are you talking about the API event (as in ArenaPlayerJoinEvent) or the announcement when a player first joins? I think the auto-start-timer bug was just a matter of the timer getting an extra tick that it shouldn't have gotten (in which case it would stop itself), so unless you went back in before the message was printed, I'm not sure there's any causal link between the two issues (depending on what you mean by flakey).
     
  14. Offline

    garbagemule

    Guys, I made a boo boo...

    MobArena v0.96.6 is out!

    Grab it while it's hot: Cookies

    Probably the most minor update MobArena has ever had, this version fixes a dire bug for those of you who have 'use-scoreboards: false' in your config-files. With the wonderful new grayed out player names, I refactored a bit of the scoreboard code and introduced a new method - a method that was not overridden for the no-scoreboards case; whoops. I'll be using this issue as learning material for my students next year when I'm teaching software design :p

    Anyway, update if you're not using scoreboards. Otherwise, you don't have to yet. But do it anyway, because a higher version number automatically means a better plugin, right? ;)

    *slides back into the shadows of eternal exam preparations*
     
  15. Offline

    JosephMA

    How do I make custom abilities for my bosses?
     
  16. Offline

    garbagemule

    JosephMA
    You have to know your way around Java and the Bukkit API, but you simply have to have a JDK on the computer running your server, and then place your source files in the plugins/MobArena/abilities/src folder (create it if it doesn't exist). You can find inspiration in the source code for the core abilities.
     
  17. Offline

    Bobcat00

    Hey, on that topic, is there any way to remove the log entries for the default abilities? They just get a little annoying.
    Code:
    2014-06-08 12:26:10 [INFO] [MobArena] Enabling MobArena v0.96.6
    2014-06-08 12:26:10 [INFO] [MobArena] Loaded custom ability 'Chain Lightning'
    2014-06-08 12:26:10 [INFO] [MobArena] Loaded custom ability 'Disorient Distant'
    2014-06-08 12:26:10 [INFO] [MobArena] Loaded custom ability 'Disorient Nearby'
    2014-06-08 12:26:10 [INFO] [MobArena] Loaded custom ability 'Disorient Target'
    2014-06-08 12:26:10 [INFO] [MobArena] Loaded custom ability 'Fetch Distant'
    2014-06-08 12:26:10 [INFO] [MobArena] Loaded custom ability 'Fetch Nearby'
    2014-06-08 12:26:10 [INFO] [MobArena] Loaded custom ability 'Fetch Target'
    2014-06-08 12:26:10 [INFO] [MobArena] Loaded custom ability 'Fire Aura'
    2014-06-08 12:26:10 [INFO] [MobArena] Loaded custom ability 'Flood'
    2014-06-08 12:26:10 [INFO] [MobArena] Loaded custom ability 'Lightning Aura'
    2014-06-08 12:26:10 [INFO] [MobArena] Loaded custom ability 'Living Bomb'
    2014-06-08 12:26:10 [INFO] [MobArena] Loaded custom ability 'Obsidian Bomb'
    2014-06-08 12:26:10 [INFO] [MobArena] Loaded custom ability 'Pull Distant'
    2014-06-08 12:26:10 [INFO] [MobArena] Loaded custom ability 'Pull Nearby'
    2014-06-08 12:26:10 [INFO] [MobArena] Loaded custom ability 'Pull Target'
    2014-06-08 12:26:10 [INFO] [MobArena] Loaded custom ability 'Root Target'
    2014-06-08 12:26:10 [INFO] [MobArena] Loaded custom ability 'Shoot Arrow'
    2014-06-08 12:26:10 [INFO] [MobArena] Loaded custom ability 'Shoot Fireball'
    2014-06-08 12:26:10 [INFO] [MobArena] Loaded custom ability 'Shuffle Positions'
    2014-06-08 12:26:10 [INFO] [MobArena] Loaded custom ability 'Throw Distant'
    2014-06-08 12:26:10 [INFO] [MobArena] Loaded custom ability 'Throw Nearby'
    2014-06-08 12:26:10 [INFO] [MobArena] Loaded custom ability 'Throw Target'
    2014-06-08 12:26:10 [INFO] [MobArena] Loaded custom ability 'Warp'
    
     
  18. Offline

    garbagemule

    Bobcat00
    The core abilities are included in the plugin and loaded silently before the custom abilities are loaded. If you haven't tinkered with the abilities or added any new ones, simply removing the entire abilities-folder ought to do the trick. Chances are you've got the core abilities lying around from an earlier version of MobArena that extracted them for the sake of easier customization. Nowadays, the abilities-folder is empty by default.
     
  19. Offline

    Bobcat00

    Ah, I was looking at the code and the default value of false for announce, and couldn't figure out out why I was getting those log entries.

    So should I delete the abilities folder, or leave the folder but delete the files in it? (I suspect it doesn't matter. What does a new installation do?)
     
  20. Offline

    garbagemule

    Bobcat00
    If the abilities-folder doesn't exist, MobArena will just create it, so no harm done in deleting it. You can do either :)
     
  21. This plugin is awesome!
     
    garbagemule likes this.
  22. As I posted on the Waves & Bosses thread, I've got a problem with the waves being repeated over and over.

     
  23. Offline

    garbagemule

    XXLuigiMario
    The waves are chosen in a completely deterministic way, as it says in the wiki.
     
  24. Ik, but does that mean I can't have more than 1 variant of each wave type?
    (1 default wave, 1 special wave, 1 upgrades wave and 1 swarm)
     
  25. Offline

    garbagemule

    XXLuigiMario
    I strongly suggest that you read the wiki. Especially the waves page, because while it doesn't explicitly answer your question, you should be able to find the answer yourself from the information on the page (hint: the note at the top of the page in bold letters is there for a reason) :)
     
  26. Offline

    Bobcat00

    What happens if two or more recurrent waves with the same priority are eligible to spawn on a particular wave number?
     
  27. Offline

    garbagemule

    Bobcat00
    The algorithm is completely deterministic, but I don't recall if it's the insertion order or wave hash code that breaks ties. If it's the former, you should be able to control the "sub-priority" by ordering the waves in the config file, but if it's the latter, it's a bit more complicated and a lot harder to control. Either way, scaling all priorities up to make room for more fine-grained control is recommended.
     
  28. I already read that page, but I still can't make them spawn randomly :/
    Could you add something like "Priority: random"?
     
  29. Offline

    garbagemule

    XXLuigiMario
    Random priorities don't really make a lot of sense, but randomized waves are planned for v1.0. Feel free to fork the project and implement it yourself though.
     

  30. Thanks, I will do that.
     
  31. Offline

    garbagemule

    Just came by to say that...

    MobArena v0.96.7 is out!

    Link for the lazies: POW!

    I know it's been a while, and I hate to admit that some of these changes were implemented over a month ago, but hey, better late than never, right? Here's the lowdown:
    • The config-file reset glitch has finally been fixed! That's right, you will no longer worry about config-file resets when you mess something up in the config-file, weeee! Turns out the problem was that MobArena used some of Bukkit's nice convenience methods for loading and saving config-files - methods that print errors instead of throwing them at MobArena, which resulted in MobArena not knowing something was wrong, continuing on its merry way. It's all good now, though!
    • Boss waves now have an optional drops node. This should make it possible to create arenas where advancing to a different part of the arena requires a drop from a boss. The syntax is the same as the one for supply waves, but the wiki has of course been updated with the necessary information.
    • MobArena should no longer throw errors regarding health ranges for players and/or bosses.
    • Mobs no longer spawn with random equipment, so no more overpowered tank zombies.
    • Witch potions actually hurt players again.
    So aside from the config-file reset fix, not really much super exciting. However, I want to talk about something pretty cool that I'm sure will be interesting for a lot of you. I present a v0.97 teaser!

    The Grantable API
    As I mentioned in the v0.96.5 update post, I have been working on a system to allow some pretty neat things with regards to classes, entry-fees, and rewards. The Grantable API is nearing completion, and has already been tested with quite a few different things. I am happy to report that I have successfully created an arena where the final boss wave grants a permission as a reward, as well as an arena where the entry-fee is a potion effect. Oh, and classes can of course also have permanent potion effects :)

    What's left to work on in the Grantable API? Item metadata. I want to finally allow you guys to set item names/lore, special per-type metadata like leather armor colors, etc. I'm not sure if it'll be implemented for v0.97, but I'll try!

    Custom mobs from mods (and more)
    Oh snap! MobArena has always used its own "wrapper" for Bukkit's entity types, which basically means MobArena has always been limited to what stock Bukkit supports. Thanks to the blood of the Cauldron project (previously known as MCPC), it is now possible for me to somewhat easily implement support for modded servers. While this isn't a huge thing for a lot of the server owners running non-modded servers, it does bring a full rewrite of the internal monster parsing and monster wrappers in MobArena, which is going to make jockeys easy to implement, so definitely something to look forward to for everyone :)

    Setup Mode revisited
    When I wrote Setup Mode for v0.96, the main goal was to make an intuitive, commandless interface to setting up arena warps and points. Now that it has had some time to ferment, I've come to the conclusion that it needs to be revisited to make it more flexible. Most importantly, I want to finally implement support for cylindrical arena regions (and possibly spherical and/or polygonal regions as well).

    What about v1.0?
    MobArena v1.0 is still as mythical as it has ever been. Some people claim to have seen preliminary work somewhere on the internet, others claim it's just rumors and that we'll never see it. I'm a firm believer that v1.0 is real, and that some of these changes are part of a step in the right direction, but who knows for sure?


    Alright, enough spam. Go download v0.96.7! Shoo!
     

Share This Page