# Admin Controlled Events

By: Brian Green Date: October 10, 2002

## Assassin's Game

Original Design Information
This is a PK minigame found in Meridian 59. The object is for players to "assassinate" the player they are assigned to while avoiding assassination by the player that has been assigned to them. The assassin's game is controlled by the NPC Roq. You can find Roq by going to RID_ASSHQ, which is a room in the Barloque sewers.

### Admin controls

This document is in English, but the commands can be localized through the resources found in assassin.rsc.

- dm accept mode - This makes the Assassin's Game accept new people for a new round of play before it would normally be scheduled.
- dm start game - This makes the Assassin's game start the game. There must be at least 2 combatants for the game to start properly
- dm reset game - This ends the current game with no winner.

Admins can also set prizes for the winner of the admin game. To do this, you must find the admin game object by enter send object 0 GetAssassinGame in the admin window. Then you can send object (assassin's game) SetPrize what object (prize). Enter the appropriate object numbers instead of the words in parentheses. The assassin's game will move the prize out of the container or character that had the prize previously and will automatically add it to the inventory of the last player in the assassin's game.

## Reign of Blood Frenzy

Also called simply "frenzy" is a free-for-all fight between all players with no consequences. Players take no penalties for attacking other players, and death carries none of the usual punishment (players keep all items and lose no skill or spell percents). The skies turn red to signfy this event in the game. Players enjoy frenzies because it is a chance to fight other people with no consequences.
Frenzies are strictly admin controlled. Before starting the frenzy, you are advised to saved the game twice. Double-check that the files were saved properly before kicking off the frenzy because you must restore the saved game after the frenzy is over. Copy the lastsave.txt file from the server's game directory to another location. At the end of the frenzy, you will copy this file back into the game directory before restarting the server so that the game restores to the proper pre-frenzy save.
In order to set off the frenzy, you must type send object 0 StartChaosNight. While the frenzy is going on, players will be free to kill each other practically anywhere. Normal restrictions for guild fighting in towns or angeled fighting no longer apply. Now would be a good time to give out items to the players so that they can have some extra fun!
During testing, you can end the frenzy by typing send object 0 EndChaosNight. Please note that you should not end the frenzy this way on the commercial servers! The only way to stop the frenzy properly is to shut down the server and copy the lastsave.txt file into the server's game directory and then restart the server.

### Giving out items during a frenzy:

You can give out items to everyone during a Frenzy. (You can also do this when the server is set to "Beta" state.) To do this, you type send object 0 ChaosNightLoot to give items to everyone. This will give a set number of items and reagents to all players.
The items given out are controlled by the variable plChaosNightLoot located in the system object (object 0). This list contains basic objects that will be given out. So, if a scimitar is in the list, all players will get a scimitar. Note that any special abilities (item attributes) on the objects will not be carried over into the objects given to players. Any stackable items will note the number when giving out items, so a stack of 50 inky-cap mushrooms in the list will result in every player being given 50 inky-caps. In order to reset the list, set plChaostNightLoot to $ 0 (NIL), and the list will recreate itself from default when the message is called.
At default, the list contains: 50 inky-cap mushrooms, 100 mints, scimitar, long sword, longbow, battle bow, 2 berzerker rings, 150 normal arrows, 150 nerudite arrows, 2 jewels of froz, and 1 gift (which contains a random godsgift).
Reagents are also given out based on a player's spells. Calling ChaosNightLoot also calls AddReagentsForSpells on each player.
There are two parameters to this message. The first, logged_on defaults to TRUE. If TRUE, then only players logged on at the time get the items. (Known bug: If you have too many player objects, the code will stop execution before all players have goten items if logged_on is set to FALSE.) In addition, you can set the parameter iNumCasts, which defaults to 100. This determines how many times you can cast all your spells. A value of 100 means that a player has enough reagents to cast every spell they have 100 times.
Important note: This will screw up the carrying capacity of all players it affects. ChaosNightLoot will add the items to a player's inventory without respect to their max carrying capacity. This means that if they drop item, they may not be able to pick up additional items, even if they drop all the items they got in this manner.

## War Event

The War event is a special event that can be run during a Frenzy. In basic terms, it allows players to divide into teams to fight against each other. Each kill scored against a member of an opposing team gives a point to the killer's team.
There are 3 different ways to organize the war: by faction, by hometown, and by generic teams. There are also 2 types of wars: restricted and unrestricted. Restricted wars mean that a player must meet the qualifications to join a side and can only join that side (IE, they must be in the Duke faction to join the Duke side of the war). Unrestricted wars mean that anyone can join any side; by definition, generic team wars should be unrestricted. In unrestricted wars, teams are limited by number; no team may have a 25% advantage in numbers over any other team. If a player tries to join a team with such a large advantage, they are told to wait until later to join the team.
During a war event, all players will automatically remove their shirts and robes. Every player's base shirt will change to grey to indicate neutrality. Each player will also receive a war pendant for each side they can join. Using the pendant will cause them to join that team and will force the player's basic shirt color to match that team's color. Players cannot wear any clothing that would cover their basic shirt; the only exception is disciple's robes, which will turn the color of the team the player has joined instead of the color indicating the player's proficiency at that school.
Note: There are some issues with Invisibility, Shadow Form, Illusionary Form, and Morph. These spells will hide a player's side from other players.

### Admin Commands

To find the war event object, you can type in send object 0 GetWarEvent. This will return the current war object.
To setup the war, there are 4 different commands to quickly set up a war..

- send object (war event) SetupFactionWar - This sets up a restricted faction war with all three sides.
- send object (war event) SetupTownWar - This sets up a restricted hometown war with all five towns.
- send object (war event) SetupTeamWar number int (sides) - This sets up an unrestricted war with the specified number of sides. There can be from two to four sides.
- send object (war event) Reset - This will reset the war to a neutral condition with no teams selected.

In addition, an administrator can set up a custom war.

- send object (war event) AddSide side int (side constant) - The "side constant" is either the faction constant (FACTION_PRINCESS, FACTION_DUKE, FACTION_REBEL), the hometown room ID (RID_BARLOQUE, RID_TOS, RID_CORNOTH, RID_MARION, RID_JASPER), or the generic team constant (WAR_TEAM_ALPHA, WAR_TEAM_BETA,WAR_ TEAM_GAMMA, WAR_TEAM_DELTA). These sides do not have to match, so you could have the Duke faction invading Barloque and Cor Noth, etc. Note that using the team constants in addition to faction or hometown constants could cause duplicate colors to be used, creating confusion.
- The variable pbRestricted indicates if the war is restricted or not. True (1) means it is, False (0) means it is not. Once again, note that you cannot restrict people from joining a generic team.

To start the war, simply enter send object (war event) StartWar. Note that there must be a frenzy active at the time for the war event to start properly.
To end the war, type send object (war event) EndWar [reporter object (admin)]. The optional paramter will specify an admin object to send a gmail to with final scores. This admin can download the gmail before restarting the servers to have a record of the scores to post afterwards. You can also specify an admin to report the final scores to by send object (war event) SetReporter who object (admin). This will set a default reporter to send the final score gmail to should the optional parameter for EndWar not be supplied.
During the event you can have the scores for the game printed to everyone by typing send object (war event) GetScores. This will simply print out the current scores for each side for all to see.

## Event Signs

These are signs that can be placed around the game to notify players about events. A DM with pbActor set to 1 can place these signs with the command dm event sign. Admins can customize the sign to give time/date information.

- piHour is the hour of the event, in 24 hour format. This gets translated into an AM/PM time on the sign. For example, if piHour is 15, the time shown willl be 3:00 PM.
- piDay is the day of the week. 1 is Sunday, 2 is Monday, etc.

These signs do not delete themselves. Sending the Delete message will clean them up properly.

## Monster Budget

An admin (or DM with say commands) can set a "monster budget" for a DM-level character. This allows the DM to create a limited number of monsters without giving them the unlimited creation ability of an Admin.
The DM is able to create a certain number of hit points worth of monsters as specified. This is determined by the base hit points of the monster defined in the game. For example, if a DM can make giant rats (base hit points of 30) and can make 210 hit points worth of monsters, he can make a total of 7 rats before his budget is used up. If the DM could also make ve'xeochicatl (150 base hit points), he could make one of those and have 60 points left to create 2 giant rats (or he create the 7 giant rats mentioned before without creating the ve'xeochicatl).
It is recommended that Admins give the DMs a small selection of monters appropriate to a pre-planned event since a high budget can allow the DMs to create a lot of high level monsters and create potential problems, especially those that are inexperienced.

### Admin Commands

Any DM level (or above) character with pbSay_commands and pbMonsterMaker set to TRUE can use these commands. These commands target any DM level (or higher) character who has the pbActor flag set to TRUE, even those offline.
dm monster authorize <DM name> - This command shows the monsters that the DM specified can create and how many hit points are in the budget.
dm monster authorize <DM name> <monster name> - This command authorizes the DM specified to create one monster of the indicated type, using the monster name resource.
dm monster authorize <DM name> none - This command clears the monster budget for the DM specified.

### DM Commands

The DM must have pbActor set to TRUE before these commands will work.
dm monster budget - Shows the DM's available monster budget. As the note says, this shows the maximum number of monsters of that type that can be created with the budget.
dm monster <monster name> - Works just like it does for admins, but it keeps track of monster created in the budget.

### Details

The monster budget works by storing the monster classes available to create in a list called plMonsterBudgetTypes. The total hit point budget is stored in the variable piMonsterBudgetTotalLevels.
As a suggestion: Admins can authorize the different types of monsters, then manually set the piMonsterBudgetTotalLevels variable directly to save time and avoid repeated dm commands.