Beispiel #1
0
        public static void SpawnEntry(MegaSpawner megaSpawner, int index)
        {
            if (!(bool)megaSpawner.ActivatedList[index])
            {
                return;
            }

            Type spawnType = ScriptCompiler.FindTypeByName((string)megaSpawner.EntryList[index]);

            if (spawnType != null)
            {
                object check = null;

                try
                {
                    object o = Activator.CreateInstance(spawnType);
                    check = o;

                    if (o is Item)
                    {
                        Item item = (Item)o;

                        if (item.Stackable)
                        {
                            int min   = (int)megaSpawner.MinStackAmountList[index];
                            int max   = (int)megaSpawner.MaxStackAmountList[index];
                            int stack = Utility.Random(min, (max - min));

                            item.Amount = stack;
                        }

                        if (megaSpawner.RootParent is Container)
                        {
                            ((Container)megaSpawner.RootParent).DropItem(item);
                        }
                        else if (megaSpawner.ContainerSpawn != null)
                        {
                            megaSpawner.ContainerSpawn.DropItem(item);
                        }
                        else
                        {
                            item.MoveToWorld(GetSpawnPosition(megaSpawner), megaSpawner.Map);
                        }

                        item.Movable = (bool)megaSpawner.MovableList[index];

                        megaSpawner.OverrideSpawnedEntries.Add(item);
                        megaSpawner.OverrideLastMovedList.Add(item.LastMoved);
                        AddToRespawnEntries(megaSpawner, item);
                    }
                    else if (o is Mobile)
                    {
                        Mobile m = (Mobile)o;

                        Map     map = megaSpawner.Map;
                        Point3D loc = (m is BaseVendor ? megaSpawner.Location : GetSpawnPosition(megaSpawner));

                        m.Map      = map;
                        m.Location = loc;

                        if (m is BaseCreature)
                        {
                            BaseCreature creature = (BaseCreature)m;

                            creature.Location  = GetSpawnPosition(megaSpawner);
                            creature.Home      = megaSpawner.Location;
                            creature.RangeHome = megaSpawner.OverrideWalkRange;
                            creature.CantWalk  = !(bool)megaSpawner.MovableList[index];

                            // Genova: customização no sistema para traduzir nome da criatura.
                            TraducaoDeNomesMobiles.AplicarAlteracoesCriatura(creature, spawnType.ToString(), creature.Title);
                        }

                        megaSpawner.OverrideSpawnedEntries.Add(m);
                        megaSpawner.OverrideLastMovedList.Add(DateTime.Now);
                        AddToRespawnEntries(megaSpawner, m);
                    }

                    megaSpawner.CheckAddItem(index, o);
                }
                catch
                {
                    if (check is Item)
                    {
                        ((Item)check).Delete();
                    }
                    else if (check is Mobile)
                    {
                        ((Mobile)check).Delete();
                    }
                }
            }
        }
Beispiel #2
0
        public void Spawn(int index)
        {
            Map map = Map;
            int i   = 0;

            if (map == null || map == Map.Internal || m_CreaturesName.Count == 0 || index >= m_CreaturesName.Count)
            {
                return;
            }

            Defrag();

            if (m_Creatures.Count >= m_Count)
            {
                return;
            }

            Type type = ODBCSpawnerType.GetType((string)m_CreaturesName[index]);

            if (type != null)
            {
                try
                {
                    object o          = Activator.CreateInstance(type);
                    string objectName = type.ToString();

                    if (o is Mobile)
                    {
                        Mobile m = (Mobile)o;

                        m_Creatures.Add(m);
                        InvalidateProperties();

                        Point3D loc = (m is BaseVendor ? this.Location : GetSpawnPosition());

                        m.MoveToWorld(loc, map);

                        if (m is BaseCreature)
                        {
                            BaseCreature c = (BaseCreature)m;

                            string objectTitle = c.Title;

                            if (objectTitle == null || objectTitle.Length == 0)
                            {
                                objectTitle = "null";
                            }

                            c.RangeHome = m_HomeRange;

                            c.CurrentWayPoint = m_WayPoint;

                            if (m_Team > 0)
                            {
                                c.Team = m_Team;
                            }

                            c.Home = this.Location;

                            // Genova: customização no sistema para traduzir nome da criatura.
                            TraducaoDeNomesMobiles.AplicarAlteracoesCriatura(c, objectName, objectTitle, map, this.ChanceToParagon());
                        }
                    }
                    else if (o is Item)
                    {
                        Item item = (Item)o;

                        m_Creatures.Add(item);
                        InvalidateProperties();

                        item.MoveToWorld(GetSpawnPosition(), map);
                    }
                }
                catch
                {
                }
            }
        }