示例#1
0
        private static GameUnit ReincarnateUnitName(string nextEntName, GameUnit unit, int maxLvl)
        {
            var pos = unit.CurrentPos;
            var origName = unit.OriginalName;
            var owner = unit.Owner;

            var lvlText = origName[origName.Length - 1].ToString();
            int lvl;
            if (!int.TryParse(lvlText, out lvl))
            {
                Debug.LogError("ReincarnateUnitName: " + origName + ". Cant parse lvl");
                return null;
            }

            if (nextEntName.Length == 0) return null;
            if (lvl > maxLvl) lvl = maxLvl;
            nextEntName = nextEntName + lvl;

            var unitChunkNumber = unit.ChunkNumber;

            unit.KillSelf();

            var chunk = ChunkManager.GetChunkByNum(unitChunkNumber);
            var nUnit = chunk.SetupUnit(nextEntName, pos, owner);
            UnitEvents.OnEvolution(nUnit);
            return nUnit;
        }
示例#2
0
        public void OnResearchRemove(Player owner)
        {
            if (!isHasOnResearchRemove)
            {
                return;
            }
            eventT["research"] = this;
            eventT["name"]     = OnResearchRemoveEventName;
            if (UnitEvents.isEventNotPreloaded(eventT, OnResearchRemoveEventName))
            {
                eventT["preset"] = _onResearchRemove;
            }

            LuaResearchGetter.OnResearchRemove(eventT);
        }
示例#3
0
        public GameUnit SetupUnit(GameEntity ent, string name, Vector3Int pos, Player owner)
        {
            var index = Loader.GetIndexByName(name);
            var npc   = LuaNpcGetter.GetNpcById(index);

            ent.Owner        = owner;
            ent.OriginalName = name;
            ent.name         = name;
            var unit = ent as GameUnit;

            var evoTo = LuaNpcGetter.GetEvolutionTo(npc);

            if (evoTo.Length > 0)
            {
                if (!UnitEvolution.IsHasSoloEvolution(name))
                {
                    UnitEvolution.AddToSoloDict(name, evoTo);
                }

                if (unit != null)
                {
                    unit.SoloEvolution = true;
                }
            }

            var evoCross = LuaNpcGetter.GetNpcEvoCrossing(npc);

            if (evoCross.Keys.Count > 0)
            {
                foreach (var pair in evoCross)
                {
                    UnitEvolution.AddToStackDict(name, pair.Key, pair.Value);

                    if (!string.Equals(pair.Key, name, StringComparison.OrdinalIgnoreCase))
                    {
                        UnitEvolution.AddToStackDict(pair.Key, name, pair.Value);
                    }
                }
            }

            ChunkManager.AddVision(ent);
            UnitEvents.OnUnitSpawned(unit);


            Coloring.RecolorObject(ChunkUtil.GetDovvner(ent.CurrentPos));

            return(unit);
        }
示例#4
0
        public void DealDamage(int dmg, AbstractGameObject from)
        {
            UpgradedStats.Hp -= dmg;
            GameSoundManager.PlayOnTakeDamage(PrefabIndex);

            UnitBar_HTML.UpdateInfo(this);
            if (UpgradedStats.Hp > 0)
            {
                return;
            }

            KillSelf();
            QuestManager.OnKilling(from, this);
            UnitEvents.OnKilling(from, this);
            PlayerEvents.OnKilling(from, this);
        }
示例#5
0
        public void OnUnitSpawned(GameUnit unit)
        {
            if (!isHasOnUnitSpawned)
            {
                return;
            }
            eventT["research"] = this;
            eventT["name"]     = onUnitSpawnedEventName;
            eventT["target"]   = unit;
            if (UnitEvents.isEventNotPreloaded(eventT, onUnitSpawnedEventName))
            {
                eventT["preset"] = _onUnitSpawned;
            }

            LuaResearchGetter.OnUnitSpawned(eventT);
        }
示例#6
0
        public void OnOwnerSpawned(AbstractGameObject caster)
        {
            if (!parentBigAbility.eventsPreset.ContainsKey("OnOwnerSpawned"))
            {
                return;
            }
            eventTable["caster"]  = caster;
            eventTable["target"]  = DynValue.Nil;
            eventTable["ability"] = this;
            eventTable["name"]    = onOwnerSpawnedEventName;
            if (UnitEvents.isEventNotPreloaded(eventTable, onOwnerSpawnedEventName))
            {
                eventTable["preset"] = parentBigAbility.eventsPreset["OnOwnerSpawned"];
            }

            LuaAbilitiesGetter.OnOwnerSpawned(eventTable);
        }
示例#7
0
        public bool OnSpellStart(AbstractGameObject caster, GameUnit target)
        {
            if (!parentBigAbility.eventsPreset.ContainsKey("OnSpellStart"))
            {
                return(true);
            }
            eventTable["caster"]  = caster;
            eventTable["target"]  = target;
            eventTable["ability"] = this;
            eventTable["name"]    = onSpellStartEventName;

            if (UnitEvents.isEventNotPreloaded(eventTable, onSpellStartEventName))
            {
                eventTable["preset"] = parentBigAbility.eventsPreset["OnSpellStart"];
            }

            return(LuaAbilitiesGetter.OnSpellStart(eventTable));
        }