Example #1
0
 public DamageInfo(IInfinityObject inflicter, int amount, string damageType, bool isMelee)
 {
     Inflicter  = inflicter;
     Amount     = amount;
     DamageType = damageType;
     IsMelee    = isMelee;
 }
Example #2
0
 public TriggerEvent(string modifierName, TriggerEventType type, ScriptFunctionDelegate f,
                     IInfinityObject target, int adderObjectId, int priority)
 {
     _modifierName  = modifierName;
     _type          = type;
     _f             = f;
     _target        = target;
     _adderObjectId = adderObjectId;
     Priority       = priority;
 }
Example #3
0
        public void RegisterInfinityObject(IInfinityObject obj, bool isRegistering, int?id = null)
        {
            lock (Mutex)
            {
                if (isRegistering)
                {
                    int newId;

                    if (id == null)
                    {
                        newId = _r.Next();

                        while (_guidObjectMap.ContainsKey(newId))
                        {
                            newId = _r.Next();
                        }
                    }
                    else
                    {
                        newId = id.Value;

                        // Should check duplicate key when the id is explicit
                        if (_guidObjectMap.ContainsKey(newId))
                        {
                            return;
                        }
                    }

                    obj.Id = newId;
                    _guidObjectMap[newId] = obj;
                }
                else
                {
                    _guidObjectMap.Remove(obj.Id);
                }
            }
        }
Example #4
0
        private void AddModifier(string targetPlayerName, string modifierName, IInfinityObject adder, int leftWeek, bool isFromSaveData)
        {
            var core = ModifierData.Instance.GetModifierDirectly(modifierName);

            if (!CommonCheckModifierCoreAddable(core, targetPlayerName))
            {
                return;
            }

            if (core.IsTileLimited)
            {
                Logger.Log(LogType.Warning, $"{nameof(StarSystem)}.{nameof(AddModifier)}",
                           $"Modifier \"{core.Name}\" is a tile limited modifier but tried to use as a tile unlimited modifier, so it will be ignored.");
                return;
            }

            // Make one if nothing exist.
            if (!_playerModifierMap.TryGetValue(targetPlayerName, out var modifiers))
            {
                modifiers = new Dictionary <string, Modifier>();
                _playerModifierMap[targetPlayerName] = modifiers;
            }

            if (modifiers.ContainsKey(modifierName))
            {
                Logger.Log(LogType.Warning, $"{nameof(StarSystem)}.{nameof(AddModifier)}",
                           $"Trying to add modifier \"{modifierName}\" which already exists for {targetPlayerName}, so it will be ignored.");
                return;
            }

            var m = new Modifier(core, adder.Id, leftWeek);

            modifiers[modifierName] = m;

            ApplyModifierChangeToDownward(targetPlayerName, m, false, isFromSaveData);
        }
Example #5
0
        private void AddTiledModifierRange(string targetPlayerName, string modifierName, IInfinityObject adder,
                                           string rangeKeyName, HashSet <HexTileCoord> tiles, int leftWeek, bool isFromSaveData)
        {
            var core = ModifierData.Instance.GetModifierDirectly(modifierName);

            if (!CommonCheckModifierCoreAddable(core, targetPlayerName))
            {
                return;
            }

            if (!core.IsTileLimited)
            {
                Logger.Log(LogType.Warning, $"{nameof(StarSystem)}.{nameof(AddTiledModifierRange)}",
                           $"Modifier \"{modifierName}\" is not a tile limited modifier, but tried to use as a tile limited modifier, so it will be ignored.");
                return;
            }

            if (!_playerTiledModifierMap.TryGetValue(targetPlayerName, out var modifiers))
            {
                modifiers = new Dictionary <string, TiledModifier>();
                _playerTiledModifierMap[modifierName] = modifiers;
            }

            if (!modifiers.TryGetValue(modifierName, out var m))
            {
                m = new TiledModifier(core, adder.Id, rangeKeyName, tiles, leftWeek);
                TileMap.ApplyModifierChangeToTileObjects(targetPlayerName, m, false, isFromSaveData, tiles);
                return;
            }

            if (m.AdderObjectId != adder.Id)
            {
                Logger.Log(LogType.Warning, $"{nameof(StarSystem)}.{nameof(AddTiledModifierRange)}",
                           $"Modifier \"{modifierName}\" has already added by different object : \"{m.AdderObjectId}\" for {targetPlayerName}, so it will be ignored.");
                return;
            }

            if (m.Infos.ContainsKey(rangeKeyName))
            {
                Logger.Log(LogType.Warning, $"{nameof(StarSystem)}.{nameof(AddTiledModifierRange)}",
                           $"Range key name \"{rangeKeyName}\" already exists in modifier \"{m.Name}\" for {targetPlayerName}, so it will be ignored.");
                return;
            }

            var pureAdd = m.AddTileInfo(rangeKeyName, tiles, leftWeek);

            TileMap.ApplyModifierChangeToTileObjects(targetPlayerName, m, false, isFromSaveData, pureAdd);
        }
Example #6
0
 public void AddTiledModifierRange(string targetPlayerName, string modifierName, IInfinityObject adder,
                                   string rangeKeyName, HashSet <HexTileCoord> tiles, int leftWeek)
 => AddTiledModifierRange(targetPlayerName, modifierName, adder, rangeKeyName, tiles, leftWeek, false);
Example #7
0
 public void AddModifier(string targetPlayerName, string modifierName, IInfinityObject adder, int leftWeek)
 => AddModifier(targetPlayerName, modifierName, adder, leftWeek, false);