Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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));
        }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
        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);
        }
Esempio n. 9
0
 public bool TryGetByName(int id, out NPCDef npcDef)
 {
     return(BaseVobDef.TryGetDef(id, out npcDef));
 }
Esempio n. 10
0
        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();
        }
Esempio n. 11
0
 public HumanCharacter(int characterId, string name, HumanCharacterVisuals characterVisuals, NPCDef template) : base(characterId, name, template)
 {
     CharacterVisuals = characterVisuals ?? throw new ArgumentNullException(nameof(characterVisuals));
 }
Esempio n. 12
0
 public NPCInst(NPCDef def) : this()
 {
     this.Definition = def;
 }
Esempio n. 13
0
 public NPCDefEffectHandler(string objName, List <Effect> effects, NPCDef host)
     : base(objName, effects, host)
 {
 }
Esempio n. 14
0
 public NPCDefEffectHandler(List <Effect> effects, NPCDef host)
     : this("NPCDefEffectHandler", effects, host)
 {
 }
Esempio n. 15
0
        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);
        }
Esempio n. 16
0
        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);
        }
Esempio n. 17
0
 public NonHumanCharacter(int characterId, string name, NPCDef template) : base(characterId, name, template)
 {
 }