public FieldMob(MobTemplate template) { Template = template; HP = template.MaxHP; MP = template.MaxMP; }
public FieldMob(MobTemplate template, bool left = true) { Template = template; MoveAction = (byte)( Convert.ToByte(left) & 1 | 2 * (byte)(Template.MoveAbility switch { MoveAbilityType.Fly => MoveActionType.Fly, MoveAbilityType.Stop => MoveActionType.Stand, _ => MoveActionType.Move, }
private void UpdateWindowContents(MobTemplate mob) { txtAlignment.Text = mob.Alignment.ToString(); txtDescription.Text = mob.Description; txtFullDescription.Text = mob.FullDescription; txtKeywords.Text = mob.PlayerName; txtLevel.Text = mob.Level.ToString(); txtShortDescription.Text = mob.ShortDescription; txtIndexNumber.Text = mob.IndexNumber.ToString(); cbSex.SelectedIndex = (int)mob.Gender; //cbPosition.Text = StringConversion.position_string(mob._position); cbPosition.SelectedItem = Position.PositionString(mob.DefaultPosition); //cbClass.Text = mob._characterClass._name; cbClass.SelectedItem = CharClass.ClassList[(int)mob.CharacterClass.ClassNumber].Name; //cbRace.Text = Race.RaceList[mob._race]._name; cbRace.SelectedItem = Race.RaceList[mob.Race].Name; txtActFlags.Text = mob.ActionFlags[0].ToString(); txtActFlags2.Text = mob.ActionFlags[1].ToString(); txtAffectFlags1.Text = mob.AffectedBy[0].ToString(); txtAffectFlags2.Text = mob.AffectedBy[1].ToString(); txtAffectFlags3.Text = mob.AffectedBy[2].ToString(); txtAffectFlags4.Text = mob.AffectedBy[3].ToString(); txtAffectFlags5.Text = mob.AffectedBy[4].ToString(); btnEditShop.ForeColor = System.Drawing.Color.Gray; foreach (Shop shop in _area.Shops) { if (mob.IndexNumber == shop.Keeper) { btnEditShop.ForeColor = System.Drawing.Color.Black; break; } } btnEditQuests.ForeColor = System.Drawing.Color.Gray; foreach (QuestTemplate qst in _area.Quests) { if (mob.IndexNumber == qst.IndexNumber) { btnEditQuests.ForeColor = System.Drawing.Color.Black; break; } } if (mob.SpecFun.Count > 0) { btnEditSpecials.ForeColor = System.Drawing.Color.Black; } else { btnEditSpecials.ForeColor = System.Drawing.Color.Gray; } }
protected override Dictionary <string, string> ResolveCore(MobTemplate source) { var items = new Dictionary <string, string>(); foreach (var key in source.Inventory) { var item = Server.Current.Database.Get <Template>(key); var dupedItem = Mapper.Map <PlayerItem>(item); Server.Current.Database.Save(dupedItem); items[dupedItem.Key] = dupedItem.Name; } return(items); }
public override void Execute(Session session, CommandContext context) { if (string.IsNullOrEmpty(context.ArgumentString)) { PrintSyntax(session); return; } var template = Server.Current.Database.Get <MobTemplate>(context.Arguments[0].ToLower()); if (template != null) { session.WriteLine("{0} already exists...", context.Arguments[0]); } template = new MobTemplate() { Aggro = false, AllowedRooms = new List <string>() { session.Player.Location }, BaseArmor = 0, BaseCharisma = 0, BaseConstitution = 0, BaseDamRoll = 1, BaseDexterity = 0, BaseHitRoll = 1, BaseHp = 10, BaseIntelligence = 0, BaseLuck = 0, BaseStrength = 0, BaseWisdom = 0, Description = "fix this description", HitPoints = 10, IsShopkeeper = false, Location = session.Player.Location, MinimumTalkInterval = 0, Name = context.Arguments[0], RespawnRoom = new string[] { }, Status = GameStatus.Standing, }; Server.Current.Database.Save(template); session.WriteLine("Mob template saved. Please modify stats on disk"); }
private void btnNew_Click(object sender, EventArgs e) { ApplyWindowContents(); MobTemplate mob = new MobTemplate(); if (_area.HighMobIndexNumber >= 0) { mob.IndexNumber = _area.HighMobIndexNumber + 1; } _area.Mobs.Add(mob); _area.RebuildIndexes(); UpdateMobList(); SetControlAvailability(); mobList.SelectedIndex = mobList.Items.Count - 1; UpdateWindowContents(mob); _parent.UpdateStatusBar(); }
protected override Dictionary <Wearlocation, WearSlot> ResolveCore(MobTemplate source) { var items = new Dictionary <Wearlocation, WearSlot>(); foreach (var item in source.Equipped) { var template = Server.Current.Database.Get <Template>(item.Value); var dupedItem = Mapper.Map <PlayerItem>(template); Server.Current.Database.Save(dupedItem); items[item.Key] = new WearSlot() { Key = dupedItem.Key, Name = dupedItem.Name, }; } return(items); }
private void btnClone_Click(object sender, EventArgs e) { if (mobList.SelectedIndex == -1 || mobList.SelectedIndex > (mobList.Items.Count - 1)) { MessageBox.Show("Cannot clone a mob without a valid mob selected."); return; } ApplyWindowContents(); MobTemplate mob = new MobTemplate(_area.Mobs[mobList.SelectedIndex]); if (_area.HighMobIndexNumber >= 0) { mob.IndexNumber = _area.HighMobIndexNumber + 1; } _area.Mobs.Add(mob); _area.RebuildIndexes(); UpdateMobList(); SetControlAvailability(); mobList.SelectedIndex = mobList.Items.Count - 1; UpdateWindowContents(mob); _parent.UpdateStatusBar(); }
/// <summary> /// Parameterized constructor. /// </summary> /// <param name="specname"></param> /// <param name="specfun"></param> public MobSpecial( string specname, MobTemplate.MobFun specfun ) { _specName = specname; _specFunction = specfun; }
public FieldMobNormalGenerator( FieldLifeTemplate lifeTemplate, MobTemplate mobTemplate ) : base(lifeTemplate, mobTemplate) { }
private void btnNew_Click(object sender, EventArgs e) { ApplyWindowContents(); MobTemplate mob = new MobTemplate(); if( _area.HighMobIndexNumber >= 0 ) { mob.IndexNumber = _area.HighMobIndexNumber + 1; } _area.Mobs.Add( mob ); _area.RebuildIndexes(); UpdateMobList(); SetControlAvailability(); mobList.SelectedIndex = mobList.Items.Count - 1; UpdateWindowContents(mob); _parent.UpdateStatusBar(); }
public void HandleMobTemplateUpdate(Dictionary<string, object> props) { mobTemplates.Clear (); int numTemplates = (int)props ["numTemplates"]; for (int i = 0; i < numTemplates; i++) { MobTemplate template = new MobTemplate (); template.name = (string)props ["mob_" + i + "Name"]; template.ID = (int)props ["mob_" + i + "ID"]; template.subtitle = (string)props ["mob_" + i + "SubTitle"]; template.species = (string)props ["mob_" + i + "Species"]; template.subspecies = (string)props ["mob_" + i + "Subspecies"]; template.level = (int)props ["mob_" + i + "Level"]; template.attackable = (bool)props ["mob_" + i + "Attackable"]; template.faction = (int)props ["mob_" + i + "Faction"]; template.mobType = (int)props ["mob_" + i + "MobType"]; //template.gender = (string)props["mob_" + i + "Gender"]; template.scale = (float)props ["mob_" + i + "Scale"]; List<string> displays = new List<string> (); int numDisplays = (int)props ["mob_" + i + "NumDisplays"]; for (int j = 0; j < numDisplays; j++) { string display = (string)props ["mob_" + i + "Display" + j]; displays.Add (display); } template.displays = displays; /*for itemID in props["mob_%dEquipment" % i]: template.equippedItems.append(GetItemTemplateByID(itemID)) numLootTables = int(props["mob_%dNumLootTables" % i]) for j in range(0, numLootTables): lootTableID = int(props["mob_%dLootTable%d" % (i, j)]) lootTableChance = int(props["mob_%dLootTable%dChance" % (i, j)]) lootTable = LootTableDropEntry() lootTable.itemID = lootTableID lootTable.dropChance = lootTableChance template.lootTables.append(lootTable) //ClientAPI.Write("Loot table %s for mob %s has chance: %s" % (lootTableID, template.name, lootTableChance))*/ mobTemplates.Add (template); } ClientAPI.Write ("Number of mob templates added: " + mobTemplates.Count); //mobCreationState = MobCreationState.SelectTemplate; //selectedTemplate = -1; }
/// <summary> /// Create an instance of a mobile from the provided template. /// </summary> /// <param name="mobTemplate"></param> /// <returns></returns> public static CharData CreateMobile(MobTemplate mobTemplate) { int count; if (!mobTemplate) { Log.Error("CreateMobile: null MobTemplate.", 0); throw new NullReferenceException(); } CharData mob = new CharData(); mob.MobileTemplate = mobTemplate; mob.Followers = null; mob.Name = mobTemplate.PlayerName; mob.ShortDescription = mobTemplate.ShortDescription; mob.FullDescription = mobTemplate.FullDescription; mob.Description = mobTemplate.Description; mob.SpecialFunction = mobTemplate.SpecFun; mob.SpecialFunctionNames = mobTemplate.SpecFunNames; mob.CharacterClass = mobTemplate.CharacterClass; mob.Level = MUDMath.FuzzyNumber(mobTemplate.Level); mob.ActionFlags = mobTemplate.ActionFlags; mob.CurrentPosition = mobTemplate.DefaultPosition; mob.ChatterBotName = mobTemplate.ChatterBotName; // TODO: Look up the chatter bot name and load a runtime bot into the variable. mob.ChatBot = null; for (count = 0; count < Limits.NUM_AFFECT_VECTORS; ++count) { mob.AffectedBy[count] = mobTemplate.AffectedBy[count]; } mob.Alignment = mobTemplate.Alignment; mob.Gender = mobTemplate.Gender; mob.SetPermRace(mobTemplate.Race); mob.CurrentSize = Race.RaceList[mob.GetRace()].DefaultSize; if (mob.HasActionBit(MobTemplate.ACT_SIZEMINUS)) { mob.CurrentSize--; } if (mob.HasActionBit(MobTemplate.ACT_SIZEPLUS)) { mob.CurrentSize++; } mob.CastingSpell = 0; mob.CastingTime = 0; mob.PermStrength = MUDMath.Dice(2, 46) + 8; mob.PermIntelligence = MUDMath.Dice(2, 46) + 8; mob.PermWisdom = MUDMath.Dice(2, 46) + 8; mob.PermDexterity = MUDMath.Dice(2, 46) + 8; mob.PermConstitution = MUDMath.Dice(2, 46) + 7; mob.PermAgility = MUDMath.Dice(2, 46) + 8; mob.PermCharisma = MUDMath.Dice(2, 46) + 8; mob.PermPower = MUDMath.Dice(2, 46) + 8; mob.PermLuck = MUDMath.Dice(2, 46) + 8; mob.ModifiedStrength = 0; mob.ModifiedIntelligence = 0; mob.ModifiedWisdom = 0; mob.ModifiedDexterity = 0; mob.ModifiedConstitution = 0; mob.ModifiedAgility = 0; mob.ModifiedCharisma = 0; mob.ModifiedPower = 0; mob.ModifiedLuck = 0; mob.Resistant = mobTemplate.Resistant; mob.Immune = mobTemplate.Immune; mob.Susceptible = mobTemplate.Susceptible; mob.Vulnerable = mobTemplate.Vulnerable; mob.MaxMana = mob.Level * 10; if (Race.RaceList[mobTemplate.Race].Coins) { int level = mobTemplate.Level; mob.ReceiveCopper(MUDMath.Dice(12, level) / 32); mob.ReceiveSilver(MUDMath.Dice(9, level) / 32); mob.ReceiveGold(MUDMath.Dice(5, level) / 32); mob.ReceivePlatinum(MUDMath.Dice(2, level) / 32); } else { mob.SetCoins(0, 0, 0, 0); } mob.ArmorPoints = MUDMath.Interpolate(mob.Level, 100, -100); // * MOB HITPOINTS * // // Was level d 8, upped it to level d 13 // considering mobs *still* won't have as many hitpoints as some players until // at least level 10, this shouldn't be too big an upgrade. // // Mob hitpoints are not based on constitution *unless* they have a // constitution modifier from an item, spell, or other affect // In light of recent player dissatisfaction with the // mob hitpoints, I'm implementing a log curve, using // hp = exp( 2.15135 + level*0.151231) // This will will result in the following hp matrix: // Level Hitpoints // 20 175 // 30 803 // 40 3643 // 50 16528 // 55 35207 // 60 75000 mob.MaxHitpoints = MUDMath.Dice(mob.Level, 13) + 1; // Mob hps are non-linear above level 10. if (mob.Level > 20) { int upper = (int)Math.Exp(1.85 + mob.Level * 0.151231); int lower = (int)Math.Exp(1.80 + mob.Level * 0.151231); mob.MaxHitpoints += MUDMath.NumberRange(lower, upper); } else if (mob.Level > 10) { mob.MaxHitpoints += MUDMath.NumberRange(mob.Level * 2, ((mob.Level - 8) ^ 2 * mob.Level) / 2); } // Demons/devils/dragons gain an extra 30 hitpoints per level (+1500 at lvl 50). if (mob.GetRace() == Race.RACE_DEMON || mob.GetRace() == Race.RACE_DEVIL || mob.GetRace() == Race.RACE_DRAGON) { mob.MaxHitpoints += (mob.Level * 30); } mob.Hitpoints = mob.GetMaxHit(); // Horses get more moves, necessary for mounts. if (Race.RaceList[mob.GetRace()].Name.Equals("Horse", StringComparison.CurrentCultureIgnoreCase)) { mob.MaxMoves = 290 + MUDMath.Dice(4, 5); mob.CurrentMoves = mob.MaxMoves; } mob.LoadRoomIndexNumber = 0; // Insert in list. CharList.Add(mob); // Increment count of in-game instances of mob. mobTemplate.NumActive++; return(mob); }
public MobGenerator(MobTemplate _mobTemplate) { mobTemplate = _mobTemplate; }
public AbstractFieldMobGenerator(FieldLifeTemplate lifeTemplate, MobTemplate mobTemplate) { LifeTemplate = lifeTemplate; MobTemplate = mobTemplate; }
private void UpdateWindowContents(MobTemplate mob) { txtAlignment.Text = mob.Alignment.ToString(); txtDescription.Text = mob.Description; txtFullDescription.Text = mob.FullDescription; txtKeywords.Text = mob.PlayerName; txtLevel.Text = mob.Level.ToString(); txtShortDescription.Text = mob.ShortDescription; txtIndexNumber.Text = mob.IndexNumber.ToString(); cbSex.SelectedIndex = (int)mob.Gender; //cbPosition.Text = StringConversion.position_string(mob._position); cbPosition.SelectedItem = Position.PositionString( mob.DefaultPosition ); //cbClass.Text = mob._characterClass._name; cbClass.SelectedItem = CharClass.ClassList[(int)mob.CharacterClass.ClassNumber].Name; //cbRace.Text = Race.RaceList[mob._race]._name; cbRace.SelectedItem = Race.RaceList[ mob.Race ].Name; txtActFlags.Text = mob.ActionFlags[0].ToString(); txtActFlags2.Text = mob.ActionFlags[1].ToString(); txtAffectFlags1.Text = mob.AffectedBy[0].ToString(); txtAffectFlags2.Text = mob.AffectedBy[1].ToString(); txtAffectFlags3.Text = mob.AffectedBy[2].ToString(); txtAffectFlags4.Text = mob.AffectedBy[3].ToString(); txtAffectFlags5.Text = mob.AffectedBy[4].ToString(); btnEditShop.ForeColor = System.Drawing.Color.Gray; foreach (Shop shop in _area.Shops) { if (mob.IndexNumber == shop.Keeper) { btnEditShop.ForeColor = System.Drawing.Color.Black; break; } } btnEditQuests.ForeColor = System.Drawing.Color.Gray; foreach (QuestTemplate qst in _area.Quests) { if (mob.IndexNumber == qst.IndexNumber) { btnEditQuests.ForeColor = System.Drawing.Color.Black; break; } } if (mob.SpecFun.Count > 0) { btnEditSpecials.ForeColor = System.Drawing.Color.Black; } else { btnEditSpecials.ForeColor = System.Drawing.Color.Gray; } }
public MobFieldGenerator(FieldLifeTemplate lifeTemplate, MobTemplate mobTemplate) { _lifeTemplate = lifeTemplate; _mobTemplate = mobTemplate; }
/// <summary> /// Create an instance of a mobile from the provided template. /// </summary> /// <param name="mobTemplate"></param> /// <returns></returns> public static CharData CreateMobile( MobTemplate mobTemplate ) { int count; if( !mobTemplate ) { Log.Error("CreateMobile: null MobTemplate.", 0); throw new NullReferenceException(); } CharData mob = new CharData(); mob.MobileTemplate = mobTemplate; mob.Followers = null; mob.Name = mobTemplate.PlayerName; mob.ShortDescription = mobTemplate.ShortDescription; mob.FullDescription = mobTemplate.FullDescription; mob.Description = mobTemplate.Description; mob.SpecialFunction = mobTemplate.SpecFun; mob.SpecialFunctionNames = mobTemplate.SpecFunNames; mob.CharacterClass = mobTemplate.CharacterClass; mob.Level = MUDMath.FuzzyNumber( mobTemplate.Level ); mob.ActionFlags = mobTemplate.ActionFlags; mob.CurrentPosition = mobTemplate.DefaultPosition; mob.ChatterBotName = mobTemplate.ChatterBotName; // TODO: Look up the chatter bot name and load a runtime bot into the variable. mob.ChatBot = null; for( count = 0; count < Limits.NUM_AFFECT_VECTORS; ++count ) { mob.AffectedBy[ count ] = mobTemplate.AffectedBy[ count ]; } mob.Alignment = mobTemplate.Alignment; mob.Gender = mobTemplate.Gender; mob.SetPermRace( mobTemplate.Race ); mob.CurrentSize = Race.RaceList[ mob.GetRace() ].DefaultSize; if (mob.HasActionBit(MobTemplate.ACT_SIZEMINUS)) mob.CurrentSize--; if (mob.HasActionBit(MobTemplate.ACT_SIZEPLUS)) mob.CurrentSize++; mob.CastingSpell = 0; mob.CastingTime = 0; mob.PermStrength = MUDMath.Dice( 2, 46 ) + 8; mob.PermIntelligence = MUDMath.Dice( 2, 46 ) + 8; mob.PermWisdom = MUDMath.Dice( 2, 46 ) + 8; mob.PermDexterity = MUDMath.Dice( 2, 46 ) + 8; mob.PermConstitution = MUDMath.Dice( 2, 46 ) + 7; mob.PermAgility = MUDMath.Dice( 2, 46 ) + 8; mob.PermCharisma = MUDMath.Dice( 2, 46 ) + 8; mob.PermPower = MUDMath.Dice( 2, 46 ) + 8; mob.PermLuck = MUDMath.Dice( 2, 46 ) + 8; mob.ModifiedStrength = 0; mob.ModifiedIntelligence = 0; mob.ModifiedWisdom = 0; mob.ModifiedDexterity = 0; mob.ModifiedConstitution = 0; mob.ModifiedAgility = 0; mob.ModifiedCharisma = 0; mob.ModifiedPower = 0; mob.ModifiedLuck = 0; mob.Resistant = mobTemplate.Resistant; mob.Immune = mobTemplate.Immune; mob.Susceptible = mobTemplate.Susceptible; mob.Vulnerable = mobTemplate.Vulnerable; mob.MaxMana = mob.Level * 10; if( Race.RaceList[mobTemplate.Race].Coins ) { int level = mobTemplate.Level; mob.ReceiveCopper( MUDMath.Dice( 12, level ) / 32 ); mob.ReceiveSilver( MUDMath.Dice( 9, level ) / 32 ); mob.ReceiveGold( MUDMath.Dice( 5, level ) / 32 ); mob.ReceivePlatinum( MUDMath.Dice( 2, level ) / 32 ); } else { mob.SetCoins( 0, 0, 0, 0 ); } mob.ArmorPoints = MUDMath.Interpolate( mob.Level, 100, -100 ); // * MOB HITPOINTS * // // Was level d 8, upped it to level d 13 // considering mobs *still* won't have as many hitpoints as some players until // at least level 10, this shouldn't be too big an upgrade. // // Mob hitpoints are not based on constitution *unless* they have a // constitution modifier from an item, spell, or other affect // In light of recent player dissatisfaction with the // mob hitpoints, I'm implementing a log curve, using // hp = exp( 2.15135 + level*0.151231) // This will will result in the following hp matrix: // Level Hitpoints // 20 175 // 30 803 // 40 3643 // 50 16528 // 55 35207 // 60 75000 mob.MaxHitpoints = MUDMath.Dice( mob.Level, 13 ) + 1; // Mob hps are non-linear above level 10. if( mob.Level > 20 ) { int upper = (int)Math.Exp( 1.85 + mob.Level * 0.151231 ); int lower = (int)Math.Exp( 1.80 + mob.Level * 0.151231 ); mob.MaxHitpoints += MUDMath.NumberRange( lower, upper ); } else if (mob.Level > 10) { mob.MaxHitpoints += MUDMath.NumberRange(mob.Level * 2, ((mob.Level - 8) ^ 2 * mob.Level) / 2); } // Demons/devils/dragons gain an extra 30 hitpoints per level (+1500 at lvl 50). if (mob.GetRace() == Race.RACE_DEMON || mob.GetRace() == Race.RACE_DEVIL || mob.GetRace() == Race.RACE_DRAGON) { mob.MaxHitpoints += (mob.Level * 30); } mob.Hitpoints = mob.GetMaxHit(); // Horses get more moves, necessary for mounts. if(Race.RaceList[ mob.GetRace() ].Name.Equals( "Horse", StringComparison.CurrentCultureIgnoreCase )) { mob.MaxMoves = 290 + MUDMath.Dice( 4, 5 ); mob.CurrentMoves = mob.MaxMoves; } mob.LoadRoomIndexNumber = 0; // Insert in list. CharList.Add( mob ); // Increment count of in-game instances of mob. mobTemplate.NumActive++; return mob; }
public MobTemplate(MobTemplate tmpl) { ID = tmpl.ID; name = tmpl.name; subtitle = tmpl.subtitle; species = tmpl.species; subspecies = tmpl.subspecies; displayType = tmpl.displayType; gender = tmpl.gender; displays = tmpl.displays; scale = tmpl.scale; level = tmpl.level; attackable = tmpl.attackable; mobType = tmpl.mobType; faction = tmpl.faction; }