Skip to content

Party

A party is a group of up to ten players who see each other in the client’s party window and talk together. It is made in game with the client’s own party buttons, with no command: the client turns them into the packets of the party (extended command 0xBF, subcommand 0x06).

  1. A player opens the party window and presses Add; the client asks for a target, and the player picks another player. The invitation creates the party when the inviter has none, and the inviter leads it.
  2. The invited player’s client shows its own invitation (cliloc 1008089, after a line with the name of the inviter) and its accept and decline buttons. An invitation not answered in invite_timeout_seconds (30) is declined, and the leader reads that it expired.
  3. Accepting adds the player: everybody gets the new list of members and reads who joined.

An invitation is refused, with a line that says why, when the target is an NPC, the player itself, someone who is in a party or has an invitation already, stands farther than invite_range tiles (8) or on another map, or when the members and the invitations already fill the party (max_members, 10). Only the leader invites, once the party exists.

  • A member leaves with the Leave button; the leader removes a member with the Remove button and a target. The leader cannot remove themselves: they leave.
  • When the leader leaves, the next member in the order they joined takes the lead, everybody reads who it is and the invitations waiting are cancelled.
  • A character leaves its party when its session closes, so a leader who logs out hands the party on and a member who logs out is simply gone. A party is not saved: a restart ends every party.
  • A party of one is no party: when fewer than two members remain it is disbanded, and the last member gets the empty list.

The client sends what a player types in the party chat (/p text, or the window’s chat line) to the whole party, and a private message (/tell-style, with a member picked) to that member only. A message is trimmed and cut at chat_max_length (128) characters, an empty one is dropped, and a prisoner of the jail cannot use the party chat. Dead players can. The guild and the alliance have their own chats, see Guilds.

  • When a player joins, the members and the newcomer see each other’s status bar, wherever they stand.
  • The hit points of a member who is out of your view (farther than the view range, or on another map) reach your party window; the mana and the stamina of every other member do. A bar is a share of 100: you never read the real numbers of another player.
  • ClassicUO asks for the places of the members while the world map is open (the protocol extension 0xF0), and the server answers with the members out of view: they are drawn on the map. The Enhanced Client’s own pins (waypoints 0xE5 and 0xE6) are not built, since the server cannot yet tell the Enhanced Client from the classic one.

The spells that hit a place (Chain Lightning, Meteor Swarm, Earthquake, Mass Curse, Wither, the poison and paralyze fields, and the ones beside the target of Poison Strike) leave the members of the caster’s party alone, and the creatures a member owns: magic.valid_indirect asks the party module, party.are_friends(player, other). It holds for a murderer too, who may hit a blue stranger. The fire field does not burn them and Mass Dispel does not dispel their summoned creatures (magic.is_party_friend). The spells that help (Arch Cure, Arch Protection) are not changed: they help every member and everybody else as before. The damage of a potion that explodes and the area attacks of monsters are not changed either.

The client’s “members may loot my corpse” checkbox is kept for each member (party.CanLoot), and nothing reads it yet.

[ultima.party]
max_members = 10 # Players a party holds, invitations waiting included, from 2 to 10.
invite_timeout_seconds = 30 # Seconds an invitation waits for an answer.
invite_range = 8 # Tiles away the invited player may stand.
chat_max_length = 128 # Characters of a chat message; a longer one is cut.

The party module answers party.of(player), the party a player belongs to as { id, leader, members }, party.is_member(a, b), whether two players share one, and party.are_friends(player, other), whether the other is a member of the player’s party or a creature one of them owns. Four events tell what happens to the parties: party_invite, party_joined, party_left (with the reason left, kicked or logout) and party_disbanded (too_small or emptied).

The map pins of the Enhanced Client come when the server can tell that client from the classic one. Sharing loot, fame and karma, and the party in duels and quests, are not planned yet.

Made with ❤️ by Tom

Buy me a coffee