private void DoMove(CharacterData character, string argument, int command, SubCommands subcommand) { DirectionTypes direction = DirectionTypes.Index; switch (subcommand) { case SubCommands.North: direction = DirectionTypes.North; break; case SubCommands.South: direction = DirectionTypes.South; break; case SubCommands.East: direction = DirectionTypes.East; break; case SubCommands.West: direction = DirectionTypes.West; break; case SubCommands.Up: direction = DirectionTypes.Up; break; case SubCommands.Down: direction = DirectionTypes.Down; break; } PerformMove(character, direction, false); }
internal bool RemovePlayer(CharacterData character) { int toRemove = -1; foreach (int key in _players.Keys) { PlayerData player = _players[key]; if (player.Name.CompareTo(character.Player.Name) == 0) { Log("PCLEAN: " + player.Name + " Lev: " + player.Level + " Last: " + player.Last.ToLongDateString()); toRemove = key; break; } } if (toRemove > -1) { _players.Remove(toRemove); SavePlayerIndex(); return true; } Log("ERROR: Unable to find player index to remove for: " + character.GetName()); return false; }
internal string HeShe(CharacterData character) { switch (character.Player.Sex) { case SexTypes.Male: return "he"; case SexTypes.Female: return "she"; case SexTypes.Neutral: return "it"; } return "<ERROR>"; }
internal string HisHer(CharacterData character) { switch (character.Player.Sex) { case SexTypes.Male: return "his"; case SexTypes.Female: return "her"; case SexTypes.Neutral: return "it's"; } return "<ERROR>"; }
private WearTypes FindEquipmentPosition(CharacterData character, ObjectData obj, string arg) { WearTypes where = WearTypes.Index; string[] keywords = new string[] { "!RESERVED!", "finger", "!RESERVED!", "neck", "!RESERVED!", "body", "head", "legs", "feet", "hands", "arms", "shield", "about", "waist", "wrist", "!RESERVED!", "!RESERVED!", "!RESERVED!", "\n" }; if (String.IsNullOrEmpty (arg)) { if (obj.WearFlagged (ObjectWearFlags.Finger)) where = WearTypes.RightFinger; if (obj.WearFlagged (ObjectWearFlags.Neck)) where = WearTypes.Neck1; if (obj.WearFlagged (ObjectWearFlags.Body)) where = WearTypes.Body; if (obj.WearFlagged (ObjectWearFlags.Head)) where = WearTypes.Head; if (obj.WearFlagged (ObjectWearFlags.Legs)) where = WearTypes.Legs; if (obj.WearFlagged (ObjectWearFlags.Feet)) where = WearTypes.Feet; if (obj.WearFlagged (ObjectWearFlags.Hands)) where = WearTypes.Hands; if (obj.WearFlagged (ObjectWearFlags.Arms)) where = WearTypes.Arms; if (obj.WearFlagged (ObjectWearFlags.Shield)) where = WearTypes.Shield; if (obj.WearFlagged (ObjectWearFlags.About)) where = WearTypes.About; if (obj.WearFlagged (ObjectWearFlags.Waist)) where = WearTypes.Waist; if (obj.WearFlagged (ObjectWearFlags.Wrist)) where = WearTypes.RightWrist; } else if (((where = (WearTypes)GlobalUtilities.SearchBlock(arg, keywords, false)) < 0) || (String.IsNullOrEmpty(arg) && arg[0] == '!')) { SendToCharacter (character, "'%s'? What part of your body is THAT?\r\n", arg); return WearTypes.None; } return (where); }
private void CharacterFromRoom(CharacterData character) { if (character == null || character.InRoom == GlobalConstants.NOWHERE) { Log ("SYSERR: Null character or NOWHERE in CharacterFromRoom()"); return; } //if (character.Fighting != null) //StopFighting (character); if (character.Equipment[(int)WearTypes.Light] != null) if (character.Equipment[(int)WearTypes.Light].Type == ObjectTypes.Light) if (character.Equipment[(int)WearTypes.Light].Flags.Values[2] > 0) _rooms[character.InRoom].Light--; _rooms[character.InRoom].People.Remove (character); character.InRoom = GlobalConstants.NOWHERE; }
private void DoReturn(CharacterData character, string argument, int command, SubCommands subcommand) { if (character.Descriptor != null && character.Descriptor.Original != null) { SendToCharacter(character, "You return to your original body.\r\n"); if (character.Descriptor.Original.Descriptor != null) { character.Descriptor.Original.Descriptor.Character = null; character.Descriptor.Original.Descriptor.ConnectState = ConnectState.Disconnect; } character.Descriptor.Character = character.Descriptor.Original; character.Descriptor.Original = null; character.Descriptor.Character.Descriptor = character.Descriptor; character.Descriptor = null; } }
private bool HouseCanEnter (CharacterData character, int house) { int houseNumber = FindHouse(house); if (character.Level >= GlobalConstants.LVL_GRGOD || houseNumber == GlobalConstants.NOWHERE) return true; switch (_houses[houseNumber].Type) { case HouseTypes.Private: if (character.IDNumber == _houses[houseNumber].Owner) return true; for (int i = 0; i < _houses[houseNumber].NumberOfGuests; i++) if (character.IDNumber == _houses[houseNumber].Guests[i]) return true; break; } return false; }
private void CharacterToRoom(CharacterData character, int number) { if (character == null || number == GlobalConstants.NOWHERE || number > _topOfRoomTable) { Log ("SYSERR: Illegal values passed to CharacterToRoom."); return; } _rooms[number].People.Add(character); character.InRoom = number; if (character.Equipment[(int)WearTypes.Light] != null) if (character.Equipment[(int)WearTypes.Light].Type == ObjectTypes.Light) if (character.Equipment[(int)WearTypes.Light].Flags.Values[2] > 0) _rooms[number].Light++; if (character.Fighting != null && character.InRoom != character.Fighting.InRoom) { //StopFighting (character.Fighting); //StopFighting (character); } }
public static string ColorYellow(CharacterData data, int level) { return Color(data, level) ? GlobalConstants.KYEL : GlobalConstants.KNUL; }
public static string ColorWhite(CharacterData data, int level) { return Color(data, level) ? GlobalConstants.KWHT : GlobalConstants.KNUL; }
public static string ColorRed(CharacterData data, int level) { return Color(data, level) ? GlobalConstants.KRED : GlobalConstants.KNUL; }
public static string ColorNormal(CharacterData data, int level) { return Color(data, level) ? GlobalConstants.KNRM : GlobalConstants.KNUL; }
public static string ColorMagenta(CharacterData data, int level) { return Color(data, level) ? GlobalConstants.KMAG : GlobalConstants.KNUL; }
void PerformAct(string text, CharacterData character, ObjectData obj, object victimObject, CharacterData to) { string str = ""; CharacterData scriptVictim = null; ObjectData scriptTarget = null; string buffer = String.Empty; for (int i = 0; i < text.Length; i++) { if (text[i] == '$') { switch (text[++i]) { case 'n': str = PersonString(character, to); break; case 'N': scriptVictim = victimObject as CharacterData; if (scriptVictim == null) str = "<NULL>"; else str = PersonString(scriptVictim, to); break; case 'm': str = HimHer(character); break; case 'M': scriptVictim = victimObject as CharacterData; if (scriptVictim == null) str = "<NULL>"; else str = HimHer(scriptVictim); break; case 's': str = HisHer(character); break; case 'S': scriptVictim = victimObject as CharacterData; if (scriptVictim == null) str = "<NULL>"; else str = HisHer(scriptVictim); break; case 'e': str = HeShe(character); break; case 'E': scriptVictim = victimObject as CharacterData; if (scriptVictim == null) str = "<NULL>"; else str = HeShe(scriptVictim); break; case 'o': if (obj == null) str = "<NULL>"; else str = ObjectName(obj, to); break; case 'O': scriptTarget = victimObject as ObjectData; if (scriptTarget == null) str = "<NULL>"; else str = ObjectName(scriptTarget, to); break; case 'p': if (obj == null) str = "<NULL>"; else str = ObjectString(obj, to); break; case 'P': scriptTarget = victimObject as ObjectData; if (scriptTarget == null) str = "<NULL>"; else str = ObjectString(scriptTarget, to); break; case 'a': if (obj == null) str = "<NULL>"; else str = SAnA(obj); break; case 'A': scriptTarget = victimObject as ObjectData; if (scriptTarget == null) str = "<NULL>"; else str = SAnA(scriptTarget); break; case 't': if (obj == null) str = "<NULL>"; else str = obj.Name; break; case 'T': scriptTarget = victimObject as ObjectData; if (scriptTarget == null) str = "<NULL>"; else str = scriptTarget.Name; break; case 'F': if (obj == null) str = "<NULL>"; else str = GlobalUtilities.FirstName(obj.Name); break; case 'u': //for (j=buf; j > lbuf && !isspace((int) *(j-1)); j--); //if (j != buf) // *j = UPPER(*j); //i = ""; break; case 'U': //uppercasenext = TRUE; //i = ""; break; case '$': str = "$"; break; default: Log("SYSERR: Illegal $-code to act(): " + text[i]); Log("SYSERR: " + text); str = ""; break; } buffer += str; } else { buffer += text[i]; } //else if (!(*(buf++) = *(orig++))) //{ // break; //} //else if (uppercasenext && !isspace((int) *(buf-1))) //{ // *(buf-1) = UPPER(*(buf-1)); //uppercasenext = FALSE; //} } buffer += "r\n\0"; if (to.Descriptor != null) WriteToOutput(to.Descriptor, buffer); //if ((to.IsNPC && scriptActTrigger > 0) && (to != character)) //act_mtrigger(to, lbuf, ch, dg_victim, obj, dg_target, dg_arg); }
private bool PerformMove(CharacterData character, DirectionTypes direction, bool needSpecialsCheck) { int wasInRoom = 0; if (character == null || character.Fighting != null) return false; else if (GetExit(character, direction) == null || GetExit(character, direction).ToRoom == GlobalConstants.NOWHERE) SendToCharacter (character, "Alas, you cannot go that way...\r\n"); else if (GetExit(character, direction).ExitFlagged(DirectionOptionFlags.Closed)) { if (!String.IsNullOrEmpty(GetExit(character, direction).Keyword)) SendToCharacter (character, "The " + GlobalUtilities.FirstName(GetExit(character, direction).Keyword) + " seems to be closed.\r\n"); else SendToCharacter (character, "It seems to be closed.\r\n"); } else { if (!character.HasFollowers) return (DoSimpleMove (character, direction, needSpecialsCheck)); wasInRoom = character.InRoom; if (!DoSimpleMove (character, direction, needSpecialsCheck)) return false; foreach (CharacterData follower in character.Followers) { if ((follower.InRoom == wasInRoom) && follower.Position >= PositionTypes.Standing) { Act("You follow $N.\r\n", false, follower, null, character, GlobalConstants.TO_CHAR); PerformMove (follower, direction, true); } } return true; } return false; }
public static string ColorBlue(CharacterData data, int level) { return Color(data, level) ? GlobalConstants.KBLU : GlobalConstants.KNUL; }
internal bool SaveCharacter(CharacterData character) { return true; }
private void CommandInterpreter(CharacterData character, string command) { Console.WriteLine("CommandInterpreter"); }
private bool DoSimpleMove(CharacterData character, DirectionTypes direction, bool needsSpecialsCheck) { int needMovement; if (needsSpecialsCheck && Special (character, (int)direction + 1, String.Empty)) return false; /* blocked by a leave trigger ? */ //if (!leave_mtrigger (ch, dir)) // return 0; //if (!leave_wtrigger (&world[IN_ROOM (ch)], ch, dir)) // return 0; if (character.AffectFlagged (AffectFlags.Charm) && character.Master != null && character.InRoom == character.Master.InRoom) { SendToCharacter (character, "The thought of leaving your master makes you weep.\r\n"); Act("$n bursts into tears.", false, character, null, null, GlobalConstants.TO_ROOM); return false; } if ((GetRoomSector (character.InRoom) == SectorTypes.WaterNoSwim) || GetRoomSector (GetExit (character, direction).ToRoom) == SectorTypes.WaterNoSwim) { if (!HasBoat (character)) { SendToCharacter (character, "You need a boat to go there.\r\n"); return false; } } needMovement = (MovementLoss[(int)GetRoomSector (character.InRoom)] + MovementLoss[(int)GetRoomSector (GetExit (character, direction).ToRoom)]) / 2; if (character.Points.Move < needMovement && !character.IsNPC) { if (needsSpecialsCheck && character.Master != null) SendToCharacter (character, "You are too exhausted to follow.\r\n"); else SendToCharacter (character, "You are too exhausted.\r\n"); return false; } if (_rooms[character.InRoom].RoomFlagged (RoomFlags.Atrium)) { if (!HouseCanEnter (character, GetRoomVirtualNumber (GetExit (character, direction).ToRoom))) { SendToCharacter (character, "That's private property -- no trespassing!\r\n"); return false; } } if (_rooms[GetExit (character, direction).ToRoom].RoomFlagged (RoomFlags.Tunnel) && NumberOfPCInRoom (_rooms[GetExit (character, direction).ToRoom]) >= GlobalSettings.TunnelSize) { if (GlobalSettings.TunnelSize > 1) SendToCharacter (character, "There isn't enough room for you to go there!\r\n"); else SendToCharacter (character, "There isn't enough room there for more than one person!\r\n"); return false; } if (_rooms[GetExit (character, direction).ToRoom].RoomFlagged (RoomFlags.GodRoom) && character.Level < GlobalConstants.LVL_GRGOD) { SendToCharacter (character, "You aren't godly enough to use that room!\r\n"); return false; } if (character.Level < GlobalConstants.LVL_IMMORT && !character.IsNPC) character.Points.Move -= needMovement; if (!character.AffectFlagged (AffectFlags.Sneak)) { Act("$n leaves "+GlobalConstants.Directions[(int)direction], true, character, null, null, GlobalConstants.TO_ROOM); } int wasInRoom = character.InRoom; CharacterFromRoom (character); CharacterToRoom (character, _rooms[wasInRoom].DirectionOptions[(int)direction].ToRoom); // Trigger Stuff /* move them first, then move them back if they aren't allowed to go. */ /* see if an entry trigger disallows the move */ //if (!entry_mtrigger(ch) || !enter_wtrigger(&world[IN_ROOM(ch)], ch, dir)) //{ //char_from_room(ch); //char_to_room(ch, was_in); //return 0; //} if (!character.AffectFlagged (AffectFlags.Sneak)) Act ("$n has arrived.", true, character, null, null, GlobalConstants.TO_ROOM); if (character.Descriptor != null) //LookAtRoom (character, 0); if (_rooms[character.InRoom].RoomFlagged (RoomFlags.Death) && character.Level < GlobalConstants.LVL_IMMORT) { //LogDeathTrap (character); //DeathCry (character); //ExtractCharacter (character); return false; } //entry_memory_mtrigger (ch); //if (!greet_mtrigger (ch, dir)) //{ // char_from_room (ch); // char_to_room (ch, was_in); // look_at_room (ch, 0); //} //else // greet_memory_mtrigger (ch); return true; }
internal bool LoadCharacter(string name, CharacterData character) { return false; }
private bool SendToCharacter(CharacterData character, string message, params object[] vars) { if (character.Descriptor != null && !String.IsNullOrEmpty(message)) { string text = String.Format(message, vars); WriteToOutput(character.Descriptor, text); return true; } return false; }
private bool DumpSpecial (CharacterData character, object me, int command, string argument) { return false; }
public static string ColorGreen(CharacterData data, int level) { return Color(data, level) ? GlobalConstants.KGRN : GlobalConstants.KNUL; }
private bool HasBoat(CharacterData character) { if (character.Level > GlobalConstants.LVL_IMMORT) return true; if (character.AffectFlagged (AffectFlags.Waterwalk)) return true; foreach (ObjectData obj in character.Inventory) { if (obj.Type == ObjectTypes.Boat && FindEquipmentPosition (character, obj, null) < WearTypes.None) return true; } for (int i = 0; i < (int)WearTypes.Index; i++) if (character.Equipment[i] != null && character.Equipment[i].Type == ObjectTypes.Boat) return true; return false; }
public static int ColorLevel(CharacterData data) { return !data.IsNPC ? (data.PreferenceFlagged(PreferenceFlags.Color1) ? 1 : 0) + (data.PreferenceFlagged(PreferenceFlags.Color2) ? 2 : 0) : 0; }
private void ExtractCharacterFinal(CharacterData character) { if (character.InRoom == GlobalConstants.NOWHERE) { //Log("SYSERR: NOWHERE extracting char %s. (ExtractCharFinal)", character.GetName()); return; } if (!character.IsNPC && character.Descriptor == null) { foreach (DescriptorData descriptor in _descriptors) { if (descriptor.Original == character) { //DoReturn(descriptor.Character, null, 0, 0); break; } } } if (character.Descriptor != null) { //if (character.Descriptor.Original != null) //DoReturn(character, null, 0, 0); //else { foreach (DescriptorData descriptor in _descriptors) { if (descriptor == character.Descriptor) continue; if (descriptor.Character != null && character.IDNumber == descriptor.Character.IDNumber) descriptor.ConnectState = ConnectState.Close; } character.Descriptor.ConnectState = ConnectState.Menu; WriteToOutput(character.Descriptor, _textMenu); } } // On with the character's assets. //if (character.Followers.Count > 0 || character.Master != null) //DieFollower(character); // Transfer objects to room, if any. foreach (ObjectData obj in character.Inventory) { //ObjectFromCharacter(obj); //ObjectToRoom(obj, character.InRoom); } // Transfer equipment to room, if any. //for (int i = 0; i < GlobalConstants.NUM_WEARS; i++) //if (character.GetEQ(i) != null) //ObjectToRoom(UnEquipCharacter(character, i), character.InRoom); //if (character.Fighting != null) //StopFighting(character); //foreach (CharacterData fighter in _combatters) //if (fighter.Fighting == character) //StopFighting(fighter); foreach (CharacterData hunter in _characters) if (hunter.Hunting == character) hunter.Hunting = null; //CharacterFromRoom(character); if (character.IsNPC) { //if (character.MobileRealNumber != GlobalConstants.NOTHING) //_mobileIndex[character.MobileRealNumber].Number--; //ClearMemory(character); //if (character.Script != null) //ExtractScript(character.Script); //if (character.ScriptMemory != null) //ExtractScriptMemory(character.ScriptMemory); } else { //SaveCharacter(character); //CrashDeleteCrashFile(character); } //if (character.IsNPC || character.Descriptor != null) //FreeCharacter(character); }
private void Act(string text, bool hideInvisible, CharacterData character, ObjectData obj, object victim, int type) { int toSleeping; if (String.IsNullOrEmpty(text)) return; if ((toSleeping = (type & GlobalConstants.TO_SLEEP)) != 0) type &= ~GlobalConstants.TO_SLEEP; /* this is a hack as well - DG_NO_TRIG is 256 -- Welcor */ if ((_actCheck = (type & GlobalConstants.DG_NO_TRIG)) != 0) type &= ~GlobalConstants.DG_NO_TRIG; if (type == GlobalConstants.TO_CHAR) { if (character != null && SendOK(character, toSleeping)) PerformAct(text, character, obj, victim, character); return; } if (type == GlobalConstants.TO_VICT) { CharacterData to = victim as CharacterData; if (to != null && SendOK(to, toSleeping)) { PerformAct(text, character, obj, victim, to); } return; } if (type == GlobalConstants.TO_GMOTE) { DescriptorData i; foreach (DescriptorData data in _descriptors) { if (data.Character != null && data.Character.PreferenceFlagged(PreferenceFlags.NoGossip) && data.Character.PlayerFlagged(PlayerFlags.Writing) && _rooms[data.Character.InRoom].RoomFlagged(RoomFlags.Soundproof)) { SendToCharacter(data.Character, "%s", CharacterData.ColorYellow(data.Character, GlobalConstants.C_NRM)); PerformAct(text, character, obj, victim, data.Character); SendToCharacter(data.Character, "%s", CharacterData.ColorNormal(data.Character, GlobalConstants.C_NRM)); } } return; } List<CharacterData> people = null; if (character != null && character.InRoom != GlobalConstants.NOWHERE) people = _rooms[character.InRoom].People; else if (obj != null && obj.InRoom != GlobalConstants.NOWHERE) people = _rooms[obj.InRoom].People; else { Log("SYSERR: no valid target to Act()!"); return; } foreach (CharacterData person in people) { if (!SendOK(person, toSleeping) || person == character) continue; if (hideInvisible && character != null && !CanSee(person, character)) continue; if (type != GlobalConstants.TO_ROOM && person == victim) continue; PerformAct(text, character, obj, victim, person); } }
private bool Special(CharacterData character, int command, string arg) { if (GetRoomSpecial(character.InRoom) != null) if (GetRoomSpecial(character.InRoom)(character, _rooms[character.InRoom], command, arg)) return true; for (int j = 0; j < (int)WearTypes.Index; j++) if (character.Equipment[j] != null && GetObjectSpecial(character.Equipment[j]) != null) if (GetObjectSpecial(character.Equipment[j])(character, character.Equipment[j], command, arg)) return true; foreach (ObjectData obj in character.Inventory) if (GetObjectSpecial(obj) != null) if (GetObjectSpecial(obj)(character, obj, command, arg)) return true; foreach (CharacterData person in _rooms[character.InRoom].People) if (!person.MobileFlagged(MobileFlags.NotDeadYet)) if (GetMobileSpecial(person) != null) if (GetMobileSpecial(person)(character, person, command, arg)) return true; foreach (ObjectData obj in _rooms[character.InRoom].Contents) if (GetObjectSpecial(obj) != null) if (GetObjectSpecial(obj)(character, obj, command, arg)) return true; return false; }
public static bool Color(CharacterData data, int level) { return ColorLevel(data) >= level; }