Esempio n. 1
0
        public Mob FindOrCreateMob(int objectId, int mobType)
        {
            if (objectToMobMap.ContainsKey(objectId))
            {
                return(objectToMobMap[objectId]);
            }

            if (mobDictionary.ContainsKey(mobType))
            {
                MobDef resType = mobDictionary[mobType];
                Mob    newMob  = new Mob()
                {
                    MobId = objectId, Name = resType.Name, HarvestableTier = resType.HarvestableTier, HarvestableType = resType.HarvestableType == null ? null : resType.HarvestableType.Type
                };
                objectToMobMap.Add(objectId, newMob);

                if (MobRemoved != null)
                {
                    MobEventArgs m = new MobEventArgs(newMob);
                    foreach (System.EventHandler <MobEventArgs> e in MobAdded?.GetInvocationList())
                    {
                        e.BeginInvoke(this, m, e.EndInvoke, null);
                    }
                }
                return(newMob);
            }

            return(null);
        }
Esempio n. 2
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. 3
0
        public override void _Ready()
        {
            if (mobDef == null)
            {
                Console.WriteLine($"EntMob had no mob type set - getting default");
                mobDef = Main.i.factory.GetMobType(GameFactory.MobType_Humanoid);
            }
            _health = mobDef.defaultHealth;
            // find Godot scene nodes
            body = GetNode <KinematicWrapper>("actor_base");
            body.SetCallbacks(OnHealthChange, OnDeath);
            body.InitHealth(mobDef.defaultHealth, mobDef.defaultHealth);
            body.actor = this;

            if (_entId == 0)
            {
                // no id previous set, request one
                Console.WriteLine($"EntMob - no id set - registering self");
                _entId = Main.i.game.ReserveActorId(1);
                Main.i.game.RegisterActor(this);
            }
            prjDef                = new ProjectileDef();
            prjDef.damage         = 10;
            prjDef.launchSpeed    = 100;
            prjDef.prefabPath     = GameFactory.Path_PointProjectile;
            prjDef.speedMode      = ProjectileDef.SpeedMode.Accel;
            prjDef.maxSpeed       = 100;
            prjDef.minSpeed       = 10;
            prjDef.accelPerSecond = -300;

            _debugSb.Clear();
            _debugSb.Append($"EntMob Id {_entId}");
        }
Esempio n. 4
0
        private MobDB()
        {
            log.Info("Loading Mobs into memory");

            var assembly     = Assembly.GetExecutingAssembly();
            var resourceName = "AlbionMarshaller.Resources.mobs.xml";

            using (Stream stream = assembly.GetManifestResourceStream(resourceName))
                using (StreamReader reader = new StreamReader(stream))
                {
                    XDocument mobDoc = XDocument.Parse(reader.ReadToEnd());

                    int index = 0;
                    foreach (XElement mob in mobDoc.Root.Elements())
                    {
                        String mobName    = mob.Attribute("uniquename").Value;
                        String localeName = $"@MOB_{mobName}";
                        if (mob.Attribute("namelocatag") != null)
                        {
                            localeName = mob.Attribute("namelocatag").Value;
                        }
                        MobDef def = new MobDef()
                        {
                            UniqueName = mobName, Name = Localization.Instance.Find(localeName)
                        };

                        XElement lootNode = mob.Element("Loot");
                        if (lootNode != null)
                        {
                            XElement harvestable = lootNode.Element("Harvestable");
                            if (harvestable != null)
                            {
                                int    tier = int.Parse(harvestable.Attribute("tier").Value);
                                String type = harvestable.Attribute("type").Value;
                                def.HarvestableType = ResourceDB.Instance.FindResourceTypeByName(type);
                                def.HarvestableTier = tier;
                            }
                        }

                        if (def.HarvestableType != null && def.HarvestableType.Type != null && def.HarvestableTier > 1)
                        {
                            if (harvestableToMob.ContainsKey(def.HarvestableType.Type))
                            {
                                harvestableToMob[def.HarvestableType.Type].Add(def.Name);
                            }
                            else
                            {
                                harvestableToMob.Add(def.HarvestableType.Type, new HashSet <string>()
                                {
                                    def.Name
                                });
                            }
                        }
                        mobDictionary.Add(index++, def);
                    }
                }
            log.Info("Finished loading Mobs into memory");
        }
Esempio n. 5
0
    public EntMob SpawnMob(string mobTypeName = "")
    {
        MobDef mobType = GetMobType(mobTypeName);
        // Pass a null parent as we need to init the mob before adding it to the tree
        // which will invoke _ready
        EntMob mob = ZqfGodotUtils.CreateInstance <EntMob>(mobType.prefabPath, null);

        mob.SetMobType(mobType);
        _root.AddChild(mob);
        return(mob);
    }
Esempio n. 6
0
        private MobDB()
        {
            log.Info("Loading Mobs into memory");

            XDocument mobDoc = ResourceLoader.LoadResource("mobs");

            int index = 0;

            foreach (XElement mob in mobDoc.Root.Elements())
            {
                String mobName    = mob.Attribute("uniquename").Value;
                String localeName = $"@MOB_{mobName}";
                if (mob.Attribute("namelocatag") != null)
                {
                    localeName = mob.Attribute("namelocatag").Value;
                }
                MobDef def = new MobDef()
                {
                    UniqueName = mobName, Name = Localization.Instance.Find(localeName)
                };

                XElement lootNode = mob.Element("Loot");
                if (lootNode != null)
                {
                    XElement harvestable = lootNode.Element("Harvestable");
                    if (harvestable != null)
                    {
                        int    tier = int.Parse(harvestable.Attribute("tier").Value);
                        String type = harvestable.Attribute("type").Value;
                        def.HarvestableType = ResourceDB.Instance.FindResourceTypeByName(type);
                        def.HarvestableTier = tier;
                    }
                }

                if (def.HarvestableType != null && def.HarvestableType.Type != null && def.HarvestableTier > 1)
                {
                    if (harvestableToMob.ContainsKey(def.HarvestableType.Type))
                    {
                        harvestableToMob[def.HarvestableType.Type].Add(def.Name);
                    }
                    else
                    {
                        harvestableToMob.Add(def.HarvestableType.Type, new HashSet <string>()
                        {
                            def.Name
                        });
                    }
                }
                mobDictionary.Add(index++, def);
            }
            log.Info("Finished loading Mobs into memory");
        }
Esempio n. 7
0
        public Mob FindOrCreateMob(int objectId, int mobType)
        {
            if (objectToMobMap.ContainsKey(objectId))
            {
                return(objectToMobMap[objectId]);
            }

            if (mobDictionary.ContainsKey(mobType))
            {
                MobDef resType = mobDictionary[mobType];
                Mob    newMob  = new Mob()
                {
                    MobId = objectId, Name = resType.Name, HarvestableTier = resType.HarvestableTier, HarvestableType = resType.HarvestableType == null ? null : resType.HarvestableType.Type
                };
                objectToMobMap.Add(objectId, newMob);
                MobAdded?.Invoke(this, new MobEventArgs(newMob));
                return(newMob);
            }

            return(null);
        }
Esempio n. 8
0
 public MobInst(MobDef def) : this()
 {
     this.Definition = def;
 }
Esempio n. 9
0
 public void SetMobType(MobDef mobType)
 {
     mobDef = mobType;
 }