public void SetMissionBonus(MissionBonus missionBonus)
        {
            missionBonus.SaveToDb();

            Transaction.Current.OnCommited(() =>
            {
                if (missionBonus.Bonus == 0)
                {
                    MissionBonusCollector collector;
                    if (_missionBonuses.TryGetValue(missionBonus.character.Id, out collector))
                    {
                        collector.RemoveBonus(missionBonus);

                        if (collector.IsEmpty)
                        {
                            RemoveCollector(missionBonus.character);
                        }
                    }
                }
                else
                {
                    var collector =
                        GetOrAddBonusCollector(missionBonus.character);

                    collector.AddBonus(missionBonus);
                }

                missionBonus.SendUpdateToClient();
            });
        }
        private void LoadMissionBonuses()
        {
            var records = Db.Query().CommandText("select characterid,missioncategory,missionlevel,agentid,bonus from missionbonus").Execute();

            foreach (var record in records)
            {
                var mb = MissionBonus.FromRecrod(record);

                var collector = GetOrAddBonusCollector(mb.character);

                collector.AddBonus(mb);
            }

            Logger.Info(_missionBonuses.Count + " mission bonuses loaded.");
        }