/// <summary> /// Parameterized constructor that lets us set the visible to mortals flag. /// </summary> /// <param name="nam"></param> /// <param name="bitv"></param> /// <param name="set"></param> /// <param name="visible"></param> public BitvectorFlagType(string nam, Bitvector bitv, bool set, bool visible) { _name = nam; _bitvector = bitv; Settable = set; VisibleToMortals = visible; }
/// <summary> /// Checks for an action flag on this mobile type. /// </summary> /// <param name="bvect"></param> /// <returns></returns> public bool HasActBit(Bitvector bvect) { if ((_actionFlags[bvect.Group] & bvect.Vector) != 0) { return(true); } return(false); }
/// <summary> /// Checks to see whether a bitvector is set. /// </summary> /// <param name="bvect"></param> /// <returns></returns> public bool HasBitvector(Bitvector bvect) { if ((_bitVectors[bvect.Group] & bvect.Vector) != 0) { return(true); } return(false); }
/// <summary> /// Checks whether an area has a specific flag set. /// </summary> /// <param name="bvect"></param> /// <returns></returns> public bool HasFlag(Bitvector bvect) { // Protect against index out of range exceptions. if (_areaFlags.Length <= bvect.Group) { return(false); } if ((_areaFlags[bvect.Group] & bvect.Vector) != 0) { return(true); } return(false); }
/// <summary> /// Checks a race for a specific innate ability. /// </summary> /// <param name="bit"></param> /// <returns></returns> public bool HasInnate(Bitvector bit) { if (_innateAbilities == null || _innateAbilities.Length < 1) { return(false); } if ((_innateAbilities[bit.Group] & bit.Vector) != 0) { return(true); } return(false); }
/// <summary> /// Sets which bitvector is active on an affect. Only allows one bitvector /// per affect data and sets everything else to 0. /// </summary> /// <param name="bvect"></param> public void SetBitvector(Bitvector bvect) { int count; for (count = 0; count < Limits.NUM_AFFECT_VECTORS; ++count) { if (count == bvect.Group) { _bitVectors[count] = bvect.Vector; } else { _bitVectors[count] = 0; } } return; }
public WearData( Bitvector wearflag, int wearloc1, int wearloc2, int wearloc3, string wearmsg1, string wearmsg2, int partneeded, int racenotallowed ) { WearFlag = wearflag; WearLocations = new List<int>(); if (wearloc1 != 0) { WearLocations.Add(wearloc1); } if (wearloc2 != 0) { WearLocations.Add(wearloc2); } if (wearloc3 != 0) { WearLocations.Add(wearloc3); } WearMessageToWearer = wearmsg1; WearMessageToRoom = wearmsg2; BodyPartNeeded = partneeded; RacesNotAllowed = racenotallowed; }
/// <summary> /// Toggles an affect bit on the character. /// </summary> /// <param name="bvect"></param> public void ToggleAffectBit( Bitvector bvect ) { AffectedBy[ bvect.Group ] ^= bvect.Vector; return; }
/// <summary> /// Constructor that takes a spell argument to create an affect and set its paramters. /// </summary> /// <param name="type"></param> /// <param name="name"></param> /// <param name="duration"></param> /// <param name="location"></param> /// <param name="modifier"></param> /// <param name="bitvector"></param> public Affect(AffectType type, string name, int duration, Apply location, int modifier, Bitvector bitvector) { _modifiers = new List<AffectApplyType>(); _value = name; _type = type; _duration = duration; AffectApplyType apply = new AffectApplyType(); apply.Amount = modifier; apply.Location = location; _modifiers.Add(apply); SetBitvector(bitvector); }
/// <summary> /// Toggles an action bit on the character. /// </summary> /// <param name="bvect"></param> public void ToggleActionBit(Bitvector bvect) { ActionFlags[bvect.Group] ^= bvect.Vector; return; }
/// <summary> /// Adds an affect to an object based on its bitvector. /// </summary> /// <param name="bvect"></param> public void AddAffect( Bitvector bvect ) { Macros.SetBit( ref _affectedBy[ bvect.Group ], bvect.Vector ); return; }
/// <summary> /// Parameterized constructor that lets us set the visible to mortals flag. /// </summary> /// <param name="nam"></param> /// <param name="bitv"></param> /// <param name="set"></param> /// <param name="visible"></param> public BitvectorFlagType(string nam, Bitvector bitv, bool set, bool visible) { _name = nam; _bitvector = bitv; Settable = set; VisibleToMortals = visible; }
/// <summary> /// Checks whether a room has a particular flag set. /// </summary> /// <param name="bvect"></param> /// <returns></returns> public bool HasFlag( Bitvector bvect ) { if( Macros.IsSet( CurrentRoomFlags[ bvect.Group ], bvect.Vector ) ) { return true; } return false; }
/// <summary> /// Checks a race for a specific innate ability. /// </summary> /// <param name="bit"></param> /// <returns></returns> public bool HasInnate( Bitvector bit ) { if (_innateAbilities == null || _innateAbilities.Length < 1) { return false; } if( ( _innateAbilities[ bit.Group ] & bit.Vector ) != 0 ) { return true; } return false; }
/// <summary> /// Immortal command to set or display game-wide configuration settings. /// </summary> /// <param name="ch"></param> /// <param name="str"></param> public static void MudConfig(CharData ch, string[] str) { if( ch == null ) return; CharData realChar = ch.GetChar(); if (!realChar.Authorized("world")) return; if (str.Length == 0) { ch.SendText("&+L+--------------+----------------------------------------------------------+&n\r\n"); ch.SendText("&+L|&n&+m Option&+L |&n&+r Description&n &+L|&n\r\n"); ch.SendText("&+L+--------------+----------------------------------------------------------+&n\r\n"); ch.SendText(Macros.IsSet((int)Database.SystemData.ActFlags, (int)Sysdata.MudFlags.newlock) ? "&+L[&+WX&+L]&n Newlock &+L|&+c The mud is locked to new players. &+L|&n\r\n" : "&+L[ ]&n Newlock &+L|&+c The mud allows new players. &+L|&n\r\n" ); ch.SendText(Macros.IsSet((int)Database.SystemData.ActFlags, (int)Sysdata.MudFlags.turbolevel) ? "&+L[&+WX&+L]&n Turbolevel &+L|&+c Players get up to 10 levels at a time. &+L|&n\r\n" : "&+L[ ]&n Turbolevel &+L|&+c Players level as normal. &+L|&n\r\n" ); ch.SendText(Macros.IsSet((int)Database.SystemData.ActFlags, (int)Sysdata.MudFlags.equipmentdamage) ? "&+L[&+WX&+L]&n Eqdamage &+L|&+c Equipment will take damage. &+L|&n\r\n" : "&+L[ ]&n Eqdamage &+L|&+c Equipment is practically indestructible. &+L|&n\r\n"); ch.SendText(Macros.IsSet((int)Database.SystemData.ActFlags, (int)Sysdata.MudFlags.capturetheflag) ? "&+L[&+WX&+L]&n CTF &+L|&+c Capture the flag is enabled. &+L|&n\r\n" : "&+L[ ]&n CTF &+L|&+c Capture the flag is not enabled. &+L|&n\r\n"); ch.SendText(Macros.IsSet((int)Database.SystemData.ActFlags, (int)Sysdata.MudFlags.equipmentpvp) ? "&+L[&+WX&+L]&n EqPVP &+L|&+c Equipment effects ability in PvP and stealing (NYI). &+L|&n\r\n" : "&+L[ ]&n EqPVP &+L|&+c Equipment doesn't effect PvP and stealing (NYI). &+L|&n\r\n"); ch.SendText(Macros.IsSet((int)Database.SystemData.ActFlags, (int)Sysdata.MudFlags.stricteqpvp) ? "&+L[&+WX&+L]&n StrictEQ &+L|&+c Strict equipment PvP requirements. &+L|&n\r\n" : "&+L[ ]&n StrictEQ &+L|&+c Lenient equipment PvP requirements. &+L|&n\r\n"); ch.SendText(Macros.IsSet((int)Database.SystemData.ActFlags, (int)Sysdata.MudFlags.mobcastslots) ? "&+L[&+WX&+L]&n Mobcast &+L|&+c Mobs use slots for spellcasting. &+L|&n\r\n" : "&+L[ ]&n Mobcast &+L|&+c Mobs have unlimited spells. &+L|&n\r\n"); ch.SendText(Macros.IsSet((int)Database.SystemData.ActFlags, (int)Sysdata.MudFlags.mobslootplayers) ? "&+L[&+WX&+L]&n Mobloot &+L|&+c Mobs will loot PC corpses. &+L|&n\r\n" : "&+L[ ]&n Mobloot &+L|&+c Mobs will not loot PC corpses. &+L|&n\r\n"); ch.SendText(Macros.IsSet((int)Database.SystemData.ActFlags, (int)Sysdata.MudFlags.autoprice) ? "&+L[&+WX&+L]&n Autoprice &+L|&+c The MUD overrides prices set on EQ in the area file. &+L|&n\r\n" : "&+L[ ]&n Autoprice &+L|&+c The MUD doesn't override EQ prices in the area file. &+L|&n\r\n"); ch.SendText(Macros.IsSet((int)Database.SystemData.ActFlags, (int)Sysdata.MudFlags.walkableocean) ? "&+L[&+WX&+L]&n Walkocean &+L|&+c Players can walk on the ocean. (NYI) &+L|&n\r\n" : "&+L[ ]&n Walkocean &+L|&+c Players can't travel the ocean without a boat. (NYI). &+L|&n\r\n"); ch.SendText(Macros.IsSet((int)Database.SystemData.ActFlags, (int)Sysdata.MudFlags.powerlevel) ? "&+L[&+WX&+L]&n Plevel &+L|&+c Power leveling is enabled. &+L|&n\r\n" : "&+L[ ]&n Plevel &+L|&+c Power leveling is disabled. &+L|&n\r\n"); ch.SendText(CommandType.fLogAll ? "&+L[&+WX&+L]&n Logall &+L|&+c The MUD logs every command. &+L|&n\r\n" : "&+L[ ]&n Logall &+L|&+c The MUD does not log all commands. &+L|&n\r\n"); ch.SendText(Macros.IsSet((int)Database.SystemData.ActFlags, (int)Sysdata.MudFlags.candelete) ? "&+L[&+WX&+L]&n Candelete &+L|&+c Players can delete their characters. &+L|&n\r\n" : "&+L[ ]&n Candelete &+L|&+c Players cannot delete their characters. &+L|&n\r\n"); ch.SendText(Macros.IsSet((int)Database.SystemData.ActFlags, (int)Sysdata.MudFlags.levelrestrictedeq) ? "&+L[&+WX&+L]&n Eqrestrict &+L|&+c Players cannot use equipment 25+ levels above them. &+L|&n\r\n" : "&+L[ ]&n Eqrestrict &+L|&+c Players can use equipment of any level. &+L|&n\r\n"); ch.SendText(Macros.IsSet((int)Database.SystemData.ActFlags, (int)Sysdata.MudFlags.nameapproval) ? "&+L[&+WX&+L]&n Nameapprove&+L|&+c Players have to wait for name approval. &+L|&n\r\n" : "&+L[ ]&n Nameapprove&+L|&+c Players don't have to wait for name approval. &+L|&n\r\n"); ch.SendText(Macros.IsSet((int)Database.SystemData.ActFlags, (int)Sysdata.MudFlags.disablemccp) ? "&+L[&+WX&+L]&n DisableMCCP&+L|&+c MCCP is disabled MUD-wide. &+L|&n\r\n" : "&+L[ ]&n DisableMCCP&+L|&+c The MUD supports MCCP. &+L|&n\r\n"); ch.SendText(Macros.IsSet((int)Database.SystemData.ActFlags, (int)Sysdata.MudFlags.disablemsp) ? "&+L[&+WX&+L]&n DisableMSP &+L|&+c The MUD Sound Protocol (MSP) is disabled MUD-wide. &+L|&n\r\n" : "&+L[ ]&n DisableMSP &+L|&+c The MUD supports MSP. &+L|&n\r\n"); ch.SendText(Macros.IsSet((int)Database.SystemData.ActFlags, (int)Sysdata.MudFlags.disablefaction) ? "&+L[&+WX&+L]&n Faction &+L|&+c Faction is disabled. &+L|&n\r\n" : "&+L[ ]&n Faction &+L|&+c Faction is enabled. &+L|&n\r\n"); ch.SendText(Macros.IsSet((int)Database.SystemData.ActFlags, (int)Sysdata.MudFlags.checkfactionbit) ? "&+L[&+WX&+L]&n Factionbit &+L|&+c Checking of faction bit on mobs is enabled. &+L|&n\r\n" : "&+L[ ]&n Factionbit &+L|&+c Checking of faction bit on mobs is disabled. &+L|&n\r\n"); ch.SendText(Macros.IsSet((int)Database.SystemData.ActFlags, (int)Sysdata.MudFlags.alwaysequip) ? "&+L[&+WX&+L]&n Alwaysequip&+L|&+c Players always get newbie equipment when they die. &+L|&n\r\n" : "&+L[ ]&n Alwaysequip&+L|&+c Players over lvl 5 don't get newbie eq after death. &+L|&n\r\n"); ch.SendText("&+L+--------------+----------------------------------------------------------+&n\r\n"); ch.SendText("World save to save sysdata, the fraglist, corpses, and crimes.\r\n"); ch.SendText("World stat to show mud stats.\r\n"); } else { string text; Sysdata.MudFlags bit; bool setting; if (str[0][0] == '+') { setting = true; } else if (str[0][0] == '-') { setting = false; } else { if (!MUDString.StringsNotEqual(str[0], "save")) { Sysdata.Save(); FraglistData.Fraglist.Save(); Database.CorpseList.Save(); Crime.Save(); ch.SendText("Sysdata, Fraglist, Corpses, and Crimes saved.\r\n"); return; } if (!MUDString.StringsNotEqual(str[0], "stat")) { ch.SendText(String.Format("Players: {0} MaxPlayers: {1}\r\n", MUDString.PadInt(Database.SystemData.NumPlayers, 5), MUDString.PadInt(Database.SystemData.MaxPlayers, 5))); ch.SendText(String.Format("MaxEver: {0} Recorded at: {1}\r\n", MUDString.PadInt(Database.SystemData.MaxPlayersEver, 5), Database.SystemData.MaxPlayersTime)); ch.SendText(String.Format("Mobs: {0} MobTemplates: {1}\r\n", MUDString.PadInt(CharData.Count, 5), MUDString.PadInt(MobTemplate.Count, 5))); ch.SendText(String.Format("Rooms: {0}\r\n", MUDString.PadInt(RoomTemplate.Count, 5))); ch.SendText(String.Format("Objects: {0} ObjTemplates: {1}\r\n", MUDString.PadInt(Object.Count, 5), MUDString.PadInt(ObjTemplate.Count, 5))); ch.SendText(String.Format("Shops: {0}\r\n", MUDString.PadInt(Shop.Count, 5))); ch.SendText(String.Format("Traps: {0}\r\n", MUDString.PadInt(Trap.Count, 5))); ch.SendText(String.Format("Skills: {0}\r\n", MUDString.PadInt(Skill.Count, 5))); ch.SendText(String.Format("Spells: {0}\r\n", MUDString.PadInt(Spell.Count, 5))); ch.SendText(String.Format("Resets: {0}\r\n", MUDString.PadInt(Reset.Count, 5))); ch.SendText(String.Format("Races: {0}\r\n", MUDString.PadInt(Race.Count, 5))); ch.SendText(String.Format("Exits: {0}\r\n", MUDString.PadInt(Exit.Count, 5))); ch.SendText(String.Format("Classes: {0}\r\n", MUDString.PadInt(CharClass.Count, 5))); ch.SendText(String.Format("Areas: {0}\r\n", MUDString.PadInt(Area.Count, 5))); ch.SendText(String.Format("Affects: {0}\r\n", MUDString.PadInt(Affect.Count, 5))); ch.SendText(String.Format("Bounties:{0}\r\n", MUDString.PadInt(Bounty.Count, 5))); ch.SendText(String.Format("QuestTemplates: {0}\r\n", MUDString.PadInt(QuestTemplate.Count, 5))); ch.SendText(String.Format("QuestItems: {0}\r\n", MUDString.PadInt(QuestItem.Count, 5))); ch.SendText(String.Format("QuestData: {0}\r\n", MUDString.PadInt(QuestData.Count, 5))); Assembly assembly = Assembly.GetExecutingAssembly(); AssemblyCopyrightAttribute copyright = (AssemblyCopyrightAttribute)AssemblyCopyrightAttribute.GetCustomAttribute( assembly, typeof(AssemblyCopyrightAttribute)); AssemblyTitleAttribute title = (AssemblyTitleAttribute)AssemblyTitleAttribute.GetCustomAttribute( assembly, typeof(AssemblyTitleAttribute)); FileInfo info = new FileInfo(assembly.Location); DateTime date = info.LastWriteTime; // Create a bitvector class just so we can get info about the base assembly. Bitvector bv = new Bitvector(); string baseName = bv.GetType().Assembly.GetName().Name; string baseVersion = bv.GetType().Assembly.GetName().Version.ToString(); FileInfo baseInfo = new FileInfo(bv.GetType().Assembly.Location); DateTime baseDate = baseInfo.LastWriteTime; Spell spell = new Spell(); string baseName2 = spell.GetType().Assembly.GetName().Name; string baseVersion2 = spell.GetType().Assembly.GetName().Version.ToString(); FileInfo baseInfo2 = new FileInfo(spell.GetType().Assembly.Location); DateTime baseDate2 = baseInfo2.LastWriteTime; string version = title.Title + " version " + assembly.GetName().Version + " built on " + date.ToShortDateString() + ".\r\nBased on version " + baseVersion + " of " + baseName + " built on " + baseDate.ToShortDateString() + ".\r\nBased on version " + baseVersion2 + " of " + baseName2 + " built on " + baseDate2.ToShortDateString() + "\r\n"; ch.SendText(version); return; } ch.SendText("World -option or +option?\r\n"); ch.SendText("or: save \r\n"); ch.SendText("or: stat \r\n"); return; } string tmparg = str[0]; if ("newlock".StartsWith(tmparg.Substring(1), StringComparison.CurrentCultureIgnoreCase)) bit = Sysdata.MudFlags.newlock; else if ("turbolevel".StartsWith(tmparg.Substring(1), StringComparison.CurrentCultureIgnoreCase)) bit = Sysdata.MudFlags.turbolevel; else if ("eqdamage".StartsWith(tmparg.Substring(1), StringComparison.CurrentCultureIgnoreCase)) bit = Sysdata.MudFlags.equipmentdamage; else if ("ctf".StartsWith(tmparg.Substring(1), StringComparison.CurrentCultureIgnoreCase)) bit = Sysdata.MudFlags.capturetheflag; else if ("eqpvp".StartsWith(tmparg.Substring(1), StringComparison.CurrentCultureIgnoreCase)) bit = Sysdata.MudFlags.equipmentpvp; else if ("mobloot".StartsWith(tmparg.Substring(1), StringComparison.CurrentCultureIgnoreCase)) bit = Sysdata.MudFlags.mobslootplayers; else if ("walkocean".StartsWith(tmparg.Substring(1), StringComparison.CurrentCultureIgnoreCase)) bit = Sysdata.MudFlags.walkableocean; else if ("autoprice".StartsWith(tmparg.Substring(1), StringComparison.CurrentCultureIgnoreCase)) bit = Sysdata.MudFlags.autoprice; else if ("stricteq".StartsWith(tmparg.Substring(1), StringComparison.CurrentCultureIgnoreCase)) bit = Sysdata.MudFlags.stricteqpvp; else if ("mobcast".StartsWith(tmparg.Substring(1), StringComparison.CurrentCultureIgnoreCase)) bit = Sysdata.MudFlags.mobcastslots; else if ("plevel".StartsWith(tmparg.Substring(1), StringComparison.CurrentCultureIgnoreCase)) bit = Sysdata.MudFlags.powerlevel; else if ("eqrestrict".StartsWith(tmparg.Substring(1), StringComparison.CurrentCultureIgnoreCase)) bit = Sysdata.MudFlags.levelrestrictedeq; else if ("nameapprove".StartsWith(tmparg.Substring(1), StringComparison.CurrentCultureIgnoreCase)) bit = Sysdata.MudFlags.nameapproval; else if ("candelete".StartsWith(tmparg.Substring(1), StringComparison.CurrentCultureIgnoreCase)) bit = Sysdata.MudFlags.candelete; else if ("disablemccp".StartsWith(tmparg.Substring(1), StringComparison.CurrentCultureIgnoreCase)) bit = Sysdata.MudFlags.disablemccp; else if ("disablemsp".StartsWith(tmparg.Substring(1), StringComparison.CurrentCultureIgnoreCase)) bit = Sysdata.MudFlags.disablemsp; else if ("faction".StartsWith(tmparg.Substring(1), StringComparison.CurrentCultureIgnoreCase)) bit = Sysdata.MudFlags.disablefaction; else if ("factionbit".StartsWith(tmparg.Substring(1), StringComparison.CurrentCultureIgnoreCase)) bit = Sysdata.MudFlags.checkfactionbit; else if ("alwaysequip".StartsWith(tmparg.Substring(1), StringComparison.CurrentCultureIgnoreCase)) bit = Sysdata.MudFlags.alwaysequip; else { ch.SendText("World which option?\r\n"); return; } // Convert to int so we can use SET_BIT. int flags = (int)Database.SystemData.ActFlags; if (setting) { Macros.SetBit(ref flags, (int)bit); text = String.Format("{0} is now ON.\r\n", tmparg); ch.SendText(text.ToUpper()); } else { Macros.RemoveBit(ref flags, (int)bit); text = String.Format("{0} is now OFF.\r\n", tmparg); ch.SendText(text.ToUpper()); } // Store modified value in our act flags. Database.SystemData.ActFlags = (Sysdata.MudFlags)flags; } return; }
/// <summary> /// Check whether an exit flag is set. Currently only handles a single set /// of bitvectors, which is fine since we haven't filled it even halfway yet. /// </summary> /// <param name="bvect"></param> /// <returns></returns> public bool HasFlag(Bitvector bvect) { return(HasFlag(bvect.Vector)); }
/// <summary> /// Removes an affect from an object based on its bitvector. /// </summary> /// <param name="bvect"></param> public void RemoveAffect( Bitvector bvect ) { Macros.RemoveBit( ref _affectedBy[ bvect.Group ], bvect.Vector ); return; }
/// <summary> /// Removes a flag from an item. /// </summary> /// <param name="bvect"></param> public void RemoveFlag( Bitvector bvect ) { Macros.RemoveBit( ref _extraFlags[ bvect.Group ], bvect.Vector ); return; }
/// <summary> /// Checks an object for a specific wear flag. /// </summary> /// <param name="bvect"></param> /// <returns></returns> public bool HasWearFlag(Bitvector bvect) { if ((_wearFlags.Length - 1) < bvect.Group) { Log.Error("HasWearFlag: Called on object with too few wear flags. BV: " + bvect + ", Object: " + this, ", NumFlags: " + _wearFlags.Length); return false; } if (Macros.IsSet(_wearFlags[bvect.Group], bvect.Vector)) { return true; } return false; }
/// <summary> /// Checks for an affect on an object based on its bitvector. /// </summary> /// <param name="bvect"></param> /// <returns></returns> public bool HasAffect( Bitvector bvect ) { if( Macros.IsSet( _affectedBy[ bvect.Group ], bvect.Vector ) ) return true; return false; }
public void AddFlag( Bitvector bvect ) { Macros.SetBit( ref _extraFlags[ bvect.Group ], bvect.Vector ); return; }
/// <summary> /// Called by RemoveAffect() method. If you want to remove an affect bit, do so /// through RemoveAffect(). /// </summary> /// <param name="bvect"></param> private void RemoveAffectBit( Bitvector bvect ) { AffectedBy[ bvect.Group ] &= ~( bvect.Vector ); return; }
/// <summary> /// Removes an action flag from this mobile type. /// </summary> /// <param name="bvect"></param> public void RemoveActBit(Bitvector bvect) { _actionFlags[bvect.Group] &= ~(bvect.Vector); return; }
/// <summary> /// Add a bitvector flag to a room. /// </summary> /// <param name="bvect"></param> public void AddFlag( Bitvector bvect ) { Macros.SetBit( ref CurrentRoomFlags[ bvect.Group ], bvect.Vector ); return; }
/// <summary> /// Check whether an exit flag is set. Currently only handles a single set /// of bitvectors, which is fine since we haven't filled it even halfway yet. /// </summary> /// <param name="bvect"></param> /// <returns></returns> public bool HasFlag(Bitvector bvect) { return HasFlag(bvect.Vector); }
/// <summary> /// Remove a bitvector flag from a room. /// </summary> /// <param name="bvect"></param> public void RemoveFlag( Bitvector bvect ) { Macros.RemoveBit( ref CurrentRoomFlags[ bvect.Group ], bvect.Vector ); return; }
/// <summary> /// Parameterized constructor. /// </summary> /// <param name="loc"></param> /// <param name="bit"></param> public WearInfo(ObjTemplate.WearLocation loc, Bitvector bit) { WornLocation = loc; WearBit = bit; }
/// <summary> /// Checks whether the character has an action bit set. /// </summary> /// <param name="bvect"></param> /// <returns></returns> public bool HasActionBit(Bitvector bvect) { if( Macros.IsSet( ActionFlags[ bvect.Group ], bvect.Vector ) ) { return true; } return false; }
/// <summary> /// Checks whether an area has a specific flag set. /// </summary> /// <param name="bvect"></param> /// <returns></returns> public bool HasFlag(Bitvector bvect) { // Protect against index out of range exceptions. if (_areaFlags.Length <= bvect.Group) return false; if ((_areaFlags[bvect.Group] & bvect.Vector) != 0) { return true; } return false; }
/// <summary> /// Immortal command to look up an object template. /// </summary> /// <param name="ch"></param> /// <param name="str"></param> public static void FindObject(CharData ch, string[] str) { if( ch == null ) return; ObjTemplate objTemplate; string text; int indexNumber, bottom, top; ObjTemplate.ObjectType type = 0; Bitvector bvect = new Bitvector(); int total = 0; Affect.Apply stat = Affect.Apply.none; ch.GetChar(); if (str.Length < 2) { ch.SendText("Syntax: find o world <object>\r\n"); ch.SendText("or: find o area <object>\r\n"); ch.SendText("or: find o bitvector <bitvector name>\r\n"); ch.SendText("or: find o type <type number>\r\n"); ch.SendText("or: find o stat <stat name> (optional: area)\r\n"); return; } if (MUDString.StringsNotEqual(str[0], "world") && MUDString.StringsNotEqual(str[0], "area") && MUDString.StringsNotEqual(str[0], "bitvector") && MUDString.StringsNotEqual(str[0], "type") && MUDString.StringsNotEqual(str[0], "stat")) { } if (String.IsNullOrEmpty(str[1])) { ch.SendText("Find what object?\r\n"); return; } bool all = !MUDString.StringsNotEqual(str[1], "all"); bool found = false; Area area = ch.InRoom.Area; bool bit = !MUDString.StringsNotEqual(str[0], "bit"); bool fType = !MUDString.StringsNotEqual(str[0], "type"); bool fArea = !MUDString.StringsNotEqual(str[0], "area"); bool fArea2 = (str.Length > 2 && !MUDString.StringsNotEqual(str[2], "area")); if (fArea2) { fArea = true; } bool fStat = !MUDString.StringsNotEqual(str[0], "stat"); if (fStat) { if (!MUDString.StringsNotEqual(str[1], "maxstr")) stat = Affect.Apply.max_strength; else if (!MUDString.StringsNotEqual(str[1], "maxint")) stat = Affect.Apply.max_intelligence; else if (!MUDString.StringsNotEqual(str[1], "maxwis")) stat = Affect.Apply.max_wisdom; else if (!MUDString.StringsNotEqual(str[1], "maxdex")) stat = Affect.Apply.max_dexterity; else if (!MUDString.StringsNotEqual(str[1], "maxagi")) stat = Affect.Apply.max_agility; else if (!MUDString.StringsNotEqual(str[1], "maxcon")) stat = Affect.Apply.max_constitution; else if (!MUDString.StringsNotEqual(str[1], "maxcha")) stat = Affect.Apply.max_charisma; else if (!MUDString.StringsNotEqual(str[1], "maxpow")) stat = Affect.Apply.max_power; else if (!MUDString.StringsNotEqual(str[1], "maxluck")) stat = Affect.Apply.max_luck; else if (!MUDString.StringsNotEqual(str[1], "racestr")) stat = Affect.Apply.race_strength; else if (!MUDString.StringsNotEqual(str[1], "raceint")) stat = Affect.Apply.race_intelligence; else if (!MUDString.StringsNotEqual(str[1], "racewis")) stat = Affect.Apply.race_wisdom; else if (!MUDString.StringsNotEqual(str[1], "racedex")) stat = Affect.Apply.race_dexterity; else if (!MUDString.StringsNotEqual(str[1], "raceagi")) stat = Affect.Apply.race_agility; else if (!MUDString.StringsNotEqual(str[1], "racecon")) stat = Affect.Apply.race_constitution; else if (!MUDString.StringsNotEqual(str[1], "racecha")) stat = Affect.Apply.race_charisma; else if (!MUDString.StringsNotEqual(str[1], "racepow")) stat = Affect.Apply.race_power; else if (!MUDString.StringsNotEqual(str[1], "raceluck")) stat = Affect.Apply.race_luck; else if (!MUDString.StringsNotEqual(str[1], "str")) stat = Affect.Apply.strength; else if (!MUDString.StringsNotEqual(str[1], "int")) stat = Affect.Apply.intelligence; else if (!MUDString.StringsNotEqual(str[1], "wis")) stat = Affect.Apply.wisdom; else if (!MUDString.StringsNotEqual(str[1], "dex")) stat = Affect.Apply.dexterity; else if (!MUDString.StringsNotEqual(str[1], "agi")) stat = Affect.Apply.agility; else if (!MUDString.StringsNotEqual(str[1], "con")) stat = Affect.Apply.constitution; else if (!MUDString.StringsNotEqual(str[1], "cha")) stat = Affect.Apply.charisma; else if (!MUDString.StringsNotEqual(str[1], "pow")) stat = Affect.Apply.power; else if (!MUDString.StringsNotEqual(str[1], "luck")) stat = Affect.Apply.luck; else if (!MUDString.StringsNotEqual(str[1], "svpara")) stat = Affect.Apply.save_paralysis; else if (!MUDString.StringsNotEqual(str[1], "svpoi")) stat = Affect.Apply.save_poison; else if (!MUDString.StringsNotEqual(str[1], "svdis")) stat = Affect.Apply.save_petrification; else if (!MUDString.StringsNotEqual(str[1], "svbreath")) stat = Affect.Apply.save_breath; else if (!MUDString.StringsNotEqual(str[1], "svspell")) stat = Affect.Apply.save_spell; else if (!MUDString.StringsNotEqual(str[1], "mana")) stat = Affect.Apply.mana; else if (!MUDString.StringsNotEqual(str[1], "hitpoints")) stat = Affect.Apply.hitpoints; else if (!MUDString.StringsNotEqual(str[1], "move")) stat = Affect.Apply.move; else if (!MUDString.StringsNotEqual(str[1], "hitroll")) stat = Affect.Apply.hitroll; else if (!MUDString.StringsNotEqual(str[1], "damroll")) stat = Affect.Apply.damroll; else { ch.SendText("Valid stats for a stat lookup are: str, int, wis, dex, agi, con, cha, pow, luck,\r\n" + " maxstr, maxint, maxwis, maxdex, maxagi, maxcon, maxcha, maxpow, maxluck, svpara,\r\n" + " svpoi, svdis, svbreath, svspell, mana, hitpoints, move, hitroll, damroll, bit.\r\n"); return; } } if (bit) { int count; for (count = 0; BitvectorFlagType.ItemFlags[count].BitvectorData; ++count) { if (!MUDString.StringsNotEqual(str[1], BitvectorFlagType.ItemFlags[count].Name)) { bvect = BitvectorFlagType.ItemFlags[count].BitvectorData; break; } } if (bvect == null) { ch.SendText("No such item flag.\r\n"); return; } } if (fType) { try { type = (ObjTemplate.ObjectType)Enum.Parse(typeof(ObjTemplate.ObjectType), str[2], false); text = String.Format("Looking for object type {0}:\r\n", type); ch.SendText(text); } catch (Exception) { ch.SendText("Invalid object type."); return; } } if (fArea) { bottom = area.LowObjIndexNumber; top = area.HighObjIndexNumber + 1; } else { bottom = 0; top = Database.HighestObjIndexNumber; } for (indexNumber = bottom; indexNumber < top; indexNumber++) { if (total > 5000) { ch.SendText("Greater than 5000 items found. List truncated.\r\n"); break; } if (!(objTemplate = Database.GetObjTemplate(indexNumber))) { continue; } if (fArea && area != objTemplate.Area) { continue; } if (bit) { if (Macros.IsSet(objTemplate.ExtraFlags[bvect.Group], bvect.Vector)) { found = true; text = String.Format("[{0}]:{1} of {2}: {3} &n({4}&+yc&n)\r\n", MUDString.PadInt(objTemplate.IndexNumber, 5), MUDString.PadInt(objTemplate.QuantityLoaded, 5), MUDString.PadInt(objTemplate.MaxNumber, 5), objTemplate.ShortDescription.ToUpper(), objTemplate.Cost); ch.SendText(text); total++; } } else if (fType) { if (objTemplate.ItemType == type) { found = true; text = String.Format("[{0}]:{1} of {2}: {3} &n({4}&+yc&n)\r\n", MUDString.PadInt(objTemplate.IndexNumber, 5), MUDString.PadInt(objTemplate.QuantityLoaded, 5), MUDString.PadInt(objTemplate.MaxNumber, 5), objTemplate.ShortDescription.ToUpper(), objTemplate.Cost); ch.SendText(text); total++; } } else if (fStat) { foreach (Affect affect in objTemplate.Affected) { foreach (AffectApplyType apply in affect.Modifiers) { if (apply.Location == stat) { found = true; text = String.Format("[{0}] {1}&n (modifier {2})\r\n", MUDString.PadInt(objTemplate.IndexNumber, 5), objTemplate.ShortDescription.ToUpper(), apply.Amount); ch.SendText(text); total++; break; } } } } else { if (all || MUDString.NameContainedIn(str[1], objTemplate.Name)) { found = true; text = String.Format("[{0}]:{1} of {2}: {3} &n({4}&+yc&n)\r\n", MUDString.PadInt(objTemplate.IndexNumber, 5), MUDString.PadInt(objTemplate.QuantityLoaded, 5), MUDString.PadInt(objTemplate.MaxNumber, 5), objTemplate.ShortDescription.ToUpper(), objTemplate.Cost); ch.SendText(text); total++; } } } if (!found) { ch.SendText("Nothing like that in this universe.\r\n"); return; } return; }
public bool HasInnate( Bitvector bit ) { int race = GetRace(); if( Macros.IsSet( Race.RaceList[ race ].InnateAbilities[ bit.Group ], bit.Vector ) ) { return true; } return false; }
/// <summary> /// Sets an action flag on this mobile type. /// </summary> /// <param name="bvect"></param> public void SetActBit(Bitvector bvect) { _actionFlags[bvect.Group] |= bvect.Vector; return; }
/// <summary> /// Check whether a character is affected by a particular affect vector. /// </summary> /// <param name="bvect"></param> /// <returns></returns> public bool IsAffected(Bitvector bvect) { if (Macros.IsSet(AffectedBy[bvect.Group], bvect.Vector)) { return true; } foreach (Affect affect in Affected) { if (affect.HasBitvector(bvect)) { return true; } } return false; }
/// <summary> /// Toggles an action bit for this mobile type. /// </summary> /// <param name="bvect"></param> public void ToggleActBit(Bitvector bvect) { _actionFlags[bvect.Group] ^= bvect.Vector; return; }
/// <summary> /// Removes an action bit from the character. /// </summary> /// <param name="bvect"></param> public void RemoveActionBit(Bitvector bvect) { ActionFlags[bvect.Group] &= ~(bvect.Vector); return; }
/// <summary> /// Gets a bitvector's string values. /// </summary> /// <param name="bvect"></param> /// <param name="flags"></param> /// <returns></returns> public static string BitvectorString( ref Bitvector bvect, BitvectorFlagType[] flags ) { int i; for( i = 0; flags[ i ].BitvectorData.Vector > 0; i++ ) { if( flags[ i ].BitvectorData.Group == bvect.Group && flags[ i ].BitvectorData.Vector == bvect.Vector ) return flags[ i ].Name; } return null; }
/// <summary> /// Utility function to remove all affects from a char based on type. /// </summary> /// <param name="bvect"></param> public void RemoveAffect( Bitvector bvect ) { for (int i = (Affected.Count - 1); i >= 0; i--) { if( Affected[i].HasBitvector( bvect ) ) { RemoveAffect( Affected[i] ); } } RemoveAffectBit(bvect); }
/// <summary> /// Sets an action bit on the character. /// </summary> /// <param name="bvect"></param> public void SetActionBit(Bitvector bvect) { ActionFlags[bvect.Group] |= bvect.Vector; return; }
/// <summary> /// Sets an affect bit on the character. /// </summary> /// <param name="bvect"></param> public void SetAffectBit(Bitvector bvect) { AffectedBy[ bvect.Group ] |= bvect.Vector; return; }
/// <summary> /// Constructor that takes a spell argument to create an affect and set its paramters. /// </summary> /// <param name="type"></param> /// <param name="name"></param> /// <param name="duration"></param> /// <param name="location"></param> /// <param name="modifier"></param> /// <param name="bitvector"></param> public Affect(AffectType type, string name, int duration, Apply location, int modifier, Bitvector bitvector) { _modifiers = new List <AffectApplyType>(); _value = name; _type = type; _duration = duration; AffectApplyType apply = new AffectApplyType(); apply.Amount = modifier; apply.Location = location; _modifiers.Add(apply); SetBitvector(bitvector); }
/// <summary> /// Sets which bitvector is active on an affect. Only allows one bitvector /// per affect data and sets everything else to 0. /// </summary> /// <param name="bvect"></param> public void SetBitvector( Bitvector bvect ) { int count; for( count = 0; count < Limits.NUM_AFFECT_VECTORS; ++count ) { if( count == bvect.Group ) { _bitVectors[ count ] = bvect.Vector; } else { _bitVectors[ count ] = 0; } } return; }