public WorldObjects.Instances.BaseVobInstance CreateInstance(byte type) { BaseVobDef def; switch ((VobType)type) { case VobType.Vob: def = new VobDef(); break; case VobType.Mob: def = new MobDef(); break; case VobType.NPC: def = new NPCDef(); break; case VobType.Item: def = new ItemDef(); break; case VobType.Projectile: def = new ProjDef(); break; default: throw new Exception("Unsupported VobType: " + (VobType)type); } return(def.BaseDef); }
static NPCInst SpawnEnemy(HordeEnemy enemy, Vec3f spawnPoint, float spawnRange = 100) { NPCInst npc = new NPCInst(NPCDef.Get(enemy.NPCDef)); if (enemy.WeaponDef != null) { ItemInst item = new ItemInst(ItemDef.Get(enemy.WeaponDef)); npc.Inventory.AddItem(item); npc.EffectHandler.TryEquipItem(item); } if (enemy.ArmorDef != null) { ItemInst item = new ItemInst(ItemDef.Get(enemy.ArmorDef)); npc.Inventory.AddItem(item); npc.EffectHandler.TryEquipItem(item); } npc.SetHealth(enemy.Health, enemy.Health); Vec3f spawnPos = Randomizer.GetVec3fRad(spawnPoint, spawnRange); Angles spawnAng = Randomizer.GetYaw(); //npc.TeamID = 1; npc.BaseInst.SetNeedsClientGuide(true); npc.Spawn(activeWorld, spawnPos, spawnAng); return(npc); }
static void SpawnPlayer(ArenaClient client) { var charInfo = client.CharInfo; NPCInst npc = new NPCInst(NPCDef.Get(charInfo.BodyMesh == HumBodyMeshs.HUM_BODY_NAKED0 ? "maleplayer" : "femaleplayer")) { UseCustoms = true, CustomBodyTex = charInfo.BodyTex, CustomHeadMesh = charInfo.HeadMesh, CustomHeadTex = charInfo.HeadTex, CustomVoice = charInfo.Voice, CustomFatness = charInfo.Fatness, CustomScale = new Vec3f(charInfo.BodyWidth, 1.0f, charInfo.BodyWidth), CustomName = charInfo.Name }; foreach (string e in client.HordeClass.Equipment) { ItemInst item = new ItemInst(ItemDef.Get(e)); npc.Inventory.AddItem(item); npc.EffectHandler.TryEquipItem(item); } if (client.HordeClass.NeedsBolts) { } npc.Inventory.AddItem(new ItemInst(ItemDef.Get("hptrank"))); Vec3f spawnPos = Randomizer.GetVec3fRad(activeDef.SpawnPos, activeDef.SpawnRange); Angles spawnAng = Randomizer.GetYaw(); //npc.TeamID = 0; npc.Spawn(activeWorld, spawnPos, spawnAng); client.SetControl(npc); }
public static NPCDef CreateDummyDef(string name, Random random) { random = random ?? new Random(); NPCDef npcDef = null; Visuals.ModelDef model; if (Visuals.ModelDef.TryGetModel("human", out model)) { npcDef = new NPCDef(name); npcDef.Name = name; npcDef.Model = model; npcDef.BodyMesh = HumBodyMeshs.HUM_BODY_NAKED0.ToString(); //npcDef.BodyMesh = RandomEnumValue<Enumeration.HumBodyMeshs>().ToString(); npcDef.BodyTex = (int)RandomEnumValue <HumBodyTexs>(); npcDef.HeadMesh = RandomEnumValue <HumHeadMeshs>().ToString(); npcDef.HeadTex = (int)RandomEnumValue <HumHeadTexs>(); npcDef.Create(); //Log.Logger.Log(name); //Log.Logger.Log(npcDef.BodyTex); //Log.Logger.Log(npcDef.HeadMesh); //Log.Logger.Log(npcDef.HeadTex); } else { MakeLogWarningStatic(typeof(TestingAI), "Failed to generate dummy definition in ai tests!"); } return(npcDef); }
public void FMSpawn() { if (GameMode.IsActive) { GameMode.ActiveMode.Leave(this); } KillCharacter(); SetTeamID(TeamIdent.FFAPlayer); NPCDef def = NPCDef.Get(charInfo.BodyMesh == HumBodyMeshs.HUM_BODY_NAKED0 ? "maleplayer" : "femaleplayer"); NPCInst npc = new NPCInst(def) { UseCustoms = true, CustomBodyTex = charInfo.BodyTex, CustomHeadMesh = charInfo.HeadMesh, CustomHeadTex = charInfo.HeadTex, CustomVoice = charInfo.Voice, CustomFatness = charInfo.Fatness, CustomScale = new Vec3f(charInfo.BodyWidth, 1.0f, charInfo.BodyWidth), CustomName = charInfo.Name, DropUnconsciousOnDeath = true, UnconsciousDuration = 15 * TimeSpan.TicksPerSecond, }; ItemDef.ForEach(itemDef => { var item = new ItemInst(itemDef); npc.Inventory.AddItem(item); if (string.Equals(itemDef.CodeName, "ItMw_1h_Bau_Mace", StringComparison.OrdinalIgnoreCase) || string.Equals(itemDef.CodeName, "ITAR_Prisoner", StringComparison.OrdinalIgnoreCase)) { npc.EffectHandler.TryEquipItem(item); } else if (itemDef.ItemType == ItemTypes.AmmoBow || itemDef.ItemType == ItemTypes.AmmoXBow) { item.SetAmount(100); } }); if (npc.ModelDef.TryGetOverlay("1HST1", out ScriptOverlay ov)) { npc.ModelInst.ApplyOverlay(ov); } if (npc.ModelDef.TryGetOverlay("2HST1", out ov)) { npc.ModelInst.ApplyOverlay(ov); } var pair = spawnPositions.GetRandom(); npc.Spawn(WorldInst.List[0], pair.Item1, pair.Item2); this.SetControl(npc); npc.AllowHitAttacker.Add(DuelMode.CheckHitDetection); }
protected Character(int characterId, string name, NPCDef template) { if (string.IsNullOrWhiteSpace(name)) { throw new ArgumentException(@"Value cannot be null or whitespace.", nameof(name)); } CharacterId = characterId; Name = name; Template = template ?? throw new ArgumentNullException(nameof(template)); }
protected bool TryGenerateVobDef(Dictionary <int, VobDef> vobDefByID, IDAndEffectIDs idAndEffectIDs, Dictionary <int, Effect> effectByID) { Effect effect; List <Effect> effects = new List <Effect>(); foreach (var effectID in idAndEffectIDs.EffectIDs) { if (effectByID.TryGetValue(effectID, out effect)) { if (ContainsUnresolvedDependencies(effect)) { return(false); } effects.Add(effect); } } VobType vobType; if (!TryFindVobDefType(effectByID, idAndEffectIDs.EffectIDs, out vobType)) { MakeLogError("Couldn't find VobDefType for VobDef of id: " + idAndEffectIDs.ID); } VobDef vobDef = null; switch (vobType) { case VobType.Vob: vobDef = new VobDef(); break; case VobType.Item: vobDef = new ItemDef(); break; case VobType.NPC: vobDef = new NPCDef(); break; default: MakeLogError("The VobType " + vobType + " is not supported by the loading process!"); return(false); } // get the effectHander and hand all effects to it vobDef.EffectHandler.AddEffects(effects, true); return(true); }
static void SpawnNPC(WorldInst world, PosAng posAng) { var npc = BRScenario.NPCs.GetRandom(); NPCDef def = NPCDef.Get(npc.Definition); if (def == null) { return; } NPCInst inst = new NPCInst(def); inst.BaseInst.SetNeedsClientGuide(true); inst.TeamID = 1; posAng.Position.Y += 50; inst.Protection = npc.Protection; inst.Damage = npc.Damage; inst.Spawn(world, posAng.Position, posAng.Angles); var agent = CreateAgent(); agent.Add(inst); }
public bool TryGetByName(int id, out NPCDef npcDef) { return(BaseVobDef.TryGetDef(id, out npcDef)); }
static void AddNPC(string codeName, DDLNpc instance) { DDLString str; if (!instance.TryGetValue("visual", out str)) { return; } string modelName = Path.GetFileNameWithoutExtension(str.Value); ModelDef model; if (!ModelDef.TryGetModel(modelName, out model)) { model = new ModelDef(modelName, str.Value); model.Create(); } NPCDef npc = NPCDef.Get(codeName); if (npc == null) { npc = new NPCDef(codeName); } else { npc.Delete(); } npc.Model = model; if (instance.TryGetValue("name", out str)) { npc.Name = str.Value; } if (string.IsNullOrWhiteSpace(npc.Name)) { npc.Name = "no name (" + codeName + ")"; } if (instance.TryGetValue("bodymesh", out str)) { npc.BodyMesh = str.Value; } if (instance.TryGetValue("headmesh", out str)) { npc.HeadMesh = str.Value; } DDLInt dint; if (instance.TryGetValue("bodytex", out dint)) { npc.BodyTex = dint.Value; } if (instance.TryGetValue("headtex", out dint)) { npc.HeadTex = dint.Value; } npc.Create(); }
public HumanCharacter(int characterId, string name, HumanCharacterVisuals characterVisuals, NPCDef template) : base(characterId, name, template) { CharacterVisuals = characterVisuals ?? throw new ArgumentNullException(nameof(characterVisuals)); }
public NPCInst(NPCDef def) : this() { this.Definition = def; }
public NPCDefEffectHandler(string objName, List <Effect> effects, NPCDef host) : base(objName, effects, host) { }
public NPCDefEffectHandler(List <Effect> effects, NPCDef host) : this("NPCDefEffectHandler", effects, host) { }
protected NPCInst CreateNPC(NPCClass def, int teamID, CharCreationInfo cInfo = null) { if (def == null) { return(null); } NPCInst npc; if (def.Definition == null) { if (cInfo == null) { npc = new NPCInst(NPCDef.Get("maleplayer")); npc.RandomizeCustomVisuals(def.Name, true); } else { npc = new NPCInst(NPCDef.Get(cInfo.BodyMesh == HumBodyMeshs.HUM_BODY_NAKED0 ? "maleplayer" : "femaleplayer")) { UseCustoms = true, CustomBodyTex = cInfo.BodyTex, CustomHeadMesh = cInfo.HeadMesh, CustomHeadTex = cInfo.HeadTex, CustomVoice = cInfo.Voice, CustomFatness = cInfo.Fatness, CustomScale = new Vec3f(cInfo.BodyWidth, 1.0f, cInfo.BodyWidth), CustomName = cInfo.Name }; } } else { npc = new NPCInst(NPCDef.Get(def.Definition)); } // add inventory items if (def.ItemDefs != null) { foreach (var invItem in def.ItemDefs) { var item = new ItemInst(ItemDef.Get(invItem.DefName)); item.SetAmount(invItem.Amount); npc.Inventory.AddItem(item); npc.EffectHandler.TryEquipItem(item); } } // add overlays if (def.Overlays != null) { foreach (var overlay in def.Overlays) { if (npc.ModelDef.TryGetOverlay(overlay, out ScriptOverlay ov)) { npc.ModelInst.ApplyOverlay(ov); } } } npc.TeamID = teamID; npc.Protection = def.Protection; npc.Damage = def.Damage; npc.SetHealth(def.HP, def.HP); npc.Guild = def.Guild; return(npc); }
public static NPCInst CreateDummyInst(NPCDef npcDef, string name, Types.Vec3f spawnPosition, Random random) { random = random ?? new Random(); int guild = random.Next(0, 2); int armorType = random.Next(0, 4); int meleeType = random.Next(0, 4); int rangedType = random.Next(0, 2); NPCInst npcInst = null; npcInst = new NPCInst(npcDef); npcInst.SetObjName(name); npcInst.BaseInst.SetNeedsClientGuide(true); ItemInst armor = null, weapon = null, rangeWeapon = null, ammo = null; int ammoAmount; ScriptOverlay overlay = null; bool overlayExists = false; armor = new ItemInst(ItemDef.Get <ItemDef>(ArmorCodes[random.Next(0, ArmorCodes.Count)])); // melee weapon if (random.Next(0, 2) == 0) { // 1H-weapon weapon = new ItemInst(ItemDef.Get <ItemDef>(WeaponCodes_1H[random.Next(0, WeaponCodes_1H.Count)])); overlayExists = npcInst.ModelDef.TryGetOverlay("1HST2", out overlay); } else { // 2H-weapon weapon = new ItemInst(ItemDef.Get <ItemDef>(WeaponCodes_2H[random.Next(0, WeaponCodes_2H.Count)])); overlayExists = npcInst.ModelDef.TryGetOverlay("2HST1", out overlay); } // ranged weapon if (random.Next(0, 2) == 0) { // bow rangeWeapon = new ItemInst(ItemDef.Get <ItemDef>(WeaponCodes_Bow[random.Next(0, WeaponCodes_Bow.Count)])); ammo = new ItemInst(ItemDef.Get <ItemDef>(AmmoCodes_Bow[random.Next(0, AmmoCodes_Bow.Count)])); } else { // crossbow rangeWeapon = new ItemInst(ItemDef.Get <ItemDef>(WeaponCodes_Crossbow[random.Next(0, WeaponCodes_Crossbow.Count)])); ammo = new ItemInst(ItemDef.Get <ItemDef>(AmmoCodes_Crossbow[random.Next(0, AmmoCodes_Crossbow.Count)])); } ammoAmount = random.Next(10, 500 + 1); ammo.BaseInst.SetAmount(ammoAmount); npcInst.Inventory.AddItem(weapon); npcInst.EffectHandler.TryEquipItem(weapon); // 1 = DrawnWeapon npcInst.Inventory.AddItem(rangeWeapon); npcInst.EffectHandler.TryEquipItem(rangeWeapon); npcInst.Inventory.AddItem(ammo); npcInst.EffectHandler.TryEquipItem(ammo); npcInst.Inventory.AddItem(armor); npcInst.EffectHandler.TryEquipItem(armor); if (overlayExists) { npcInst.ModelInst.ApplyOverlay(overlay); } npcInst.Spawn(WorldSystem.WorldInst.List[0], spawnPosition, Types.Angles.Null); return(npcInst); }
public NonHumanCharacter(int characterId, string name, NPCDef template) : base(characterId, name, template) { }