public override void Execute(IImpactChangeMoney data)
        {
            var value = (int)_logic.Calculate(data.Value);
            var data1 = _scorers.Static.MoneyTypes[data.MoneyTypeId];
            var id    = _scorers.Static.MoneyTypes[data.MoneyTypeId].ScorerId;
            var dict  = _scorers.State.Values;

            dict.TryGetValue(id, out var oldValue);
            var delta = 0;

            switch (data.Operator)
            {
            case OperationType.Add:
                dict[id] = oldValue + value;
                delta    = value;
                break;

            case OperationType.Set:
                delta    = value - (int)oldValue;
                dict[id] = value;
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            if (delta > 0)
            {
                if (data1.AchievScorerId != 0)
                {
                    if (!dict.ContainsKey(data1.AchievScorerId))
                    {
                        dict[data1.AchievScorerId] = 0;
                    }
                    dict[data1.AchievScorerId] += delta;
                }
            }
            if (dict[id] <= 0)
            {
                dict.Remove(id);
            }
            LogicLog.ChangeMoneyType(data.MoneyTypeId, data.Operator, value);
        }