Пример #1
0
        private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); //

        public void InitByDB(MailManager _this, CharacterController character, DBMail_List mails)
        {
            List <DBMail_One> deleteList = new List <DBMail_One>();

            _this.mCharacter = character;
            _this.mDbData    = mails;
            var count = 0;

            foreach (var dbmail in _this.mDbData.mData)
            {
                if (DateTime.FromBinary(dbmail.OverTime) < DateTime.Now)
                {
                    deleteList.Add(dbmail);
                    continue;
                }
                var mail = new Mail(character, dbmail);
                _this.Mails.Add(dbmail.Guid, mail);
                _this.AddChild(mail);
                count++;
            }
            foreach (var dbmail in deleteList)
            {
                _this.mDbData.mData.Remove(dbmail);
            }
            _this.GetCanAcceptMail();
        }
Пример #2
0
        //领取邮件
        public ErrorCodes ReceiveMail(MailManager _this, ulong uId)
        {
            var mail = GetMail(_this, uId);

            if (mail == null)
            {
                return(ErrorCodes.Error_MailNotFind);
            }
            if (mail.State == (int)MailStateType.Receive)
            {
                return(ErrorCodes.Error_MailReceiveOver);
            }
            if (mail.Reward.Count > 0)
            {
                //有物品需要奖励
                ErrorCodes result;
                if (mail.Reward.Count == 1)
                {
                    //result = mCharacter.mBag.AddItem(mail.Reward[0].ItemId, mail.Reward[0].Count, eCreateItemType.Mail);
                    result = _this.mCharacter.mBag.AddItem(mail.Reward[0], eCreateItemType.Mail);
                    if (result == ErrorCodes.OK)
                    {
                        mail.State = (int)MailStateType.Receive;
                    }
                    return(result);
                }
                //多个物品需要奖励时
                var items = new Dictionary <int, int>();
                foreach (var i in mail.Reward)
                {
                    if (i.Count > 0)
                    {
                        items.modifyValue(i.ItemId, i.Count);
                    }
                }
                result = BagManager.CheckAddItemList(_this.mCharacter.mBag, items);
                if (result == ErrorCodes.OK)
                {
                    foreach (var i in mail.Reward)
                    {
                        if (i.Count > 0)
                        {
                            _this.mCharacter.mBag.AddItem(i, eCreateItemType.Mail);
                        }
                    }
                    mail.State = (int)MailStateType.Receive;
                }
                else
                {
                    return(result);
                }
            }
            else
            {
                mail.State = (int)MailStateType.OldMail;
            }
            return(ErrorCodes.OK);
        }
Пример #3
0
        //通知玩家被谁杀死
        public void PushMail(MailManager _this, int tableId, int ExtendType, string ExtendPara0, string ExtendPara1)
        {
            var tbMail = Table.GetMail(tableId);

            if (tbMail == null)
            {
                Logger.Fatal("null==Table.GetMail({0})", tableId);
                return;
            }
            //  if (tbMail.Flag < 0)
            //  {
            //      PlayerLog.WriteLog((int)LogType.MailConfigError, "PushMail tbMail[{0}] Flag is -1", tbMail.Id);
            //       return;
            //  }
            // if (_this.mCharacter.GetFlag(tbMail.Flag))
            //  {
            //     return;
            //  }
            if (_this.mCharacter.CheckCondition(tbMail.Condition) != -2)
            {
                return;
            }
            var nextId   = _this.GetNextId();
            var tempmail = new Mail(_this.mCharacter, nextId);

            tempmail.Name        = tbMail.Title;
            tempmail.Text        = tbMail.Text;
            tempmail.Send        = tbMail.Sender;
            tempmail.ExtendType  = ExtendType;
            tempmail.ExtendPara0 = ExtendPara0;
            tempmail.ExtendPara1 = ExtendPara1;

            for (var i = 0; i != 5; ++i)
            {
                if (tbMail.ItemId[i] < 0)
                {
                    continue;
                }
                if (tbMail.ItemCount[i] < 1)
                {
                    continue;
                }
                var itemDb = new ItemBaseData();
                ShareItemFactory.Create(tbMail.ItemId[i], itemDb);
                itemDb.Count = tbMail.ItemCount[i];
                tempmail.Reward.Add(itemDb);
                //tempmail.Reward.Add(tbMail.ItemId[i],tbMail.ItemCount[i]);
            }
            tempmail.OverTime = DateTime.Now.AddDays(15).ToBinary();
            _this.Mails.Add(tempmail.Guid, tempmail);
            _this.AddChild(tempmail);
            _this.mDbData.mData.Add(tempmail.mDbData);
            tempmail.MarkDirty();
            //  _this.mCharacter.SetFlag(tbMail.Flag);
        }
Пример #4
0
        //获取邮件
        public Mail GetMail(MailManager _this, ulong uId)
        {
            Mail mail;

            if (_this.Mails.TryGetValue(uId, out mail))
            {
                return(mail);
            }
            Logger.Warn("ReceiveMail not find uId={0}", uId);
            return(null);
        }
Пример #5
0
        //删除邮件
        public ErrorCodes DeleteMail(MailManager _this, ulong uId)
        {
            Mail mail;

            if (!_this.Mails.TryGetValue(uId, out mail))
            {
                Logger.Warn("DeleteMail not find uId={0}", uId);
                return(ErrorCodes.Unknow);
            }
            _this.Mails.Remove(uId);
            _this.mDbData.mData.Remove(mail.mDbData);
            return(ErrorCodes.OK);
        }
Пример #6
0
        //接收邮件
        public Mail PushMail(MailManager _this, string name, string text, List <ItemBaseData> datas, int type, string sender)
        {
            if (_this.Mails.Count >= StaticParam.MaxMailCount)
            {
                var minMail = GetTimeMin(_this);
                if (minMail == null)
                {
                    return(null);
                }
                minMail.Name      = name;
                minMail.Text      = text;
                minMail.StartTime = DateTime.Now.ToBinary();
                minMail.OverTime  = DateTime.Now.AddDays(15).ToBinary();
                minMail.State     = 0;
                minMail.Type      = type;
                minMail.Send      = sender;
                if (datas == null)
                {
                    minMail.Reward.Clear();
                }
                else
                {
                    minMail.Reward.Clear();
                    foreach (var data in datas)
                    {
                        minMail.Reward.Add(data);
                    }
                }
                minMail.MarkDirty();
                return(minMail);
            }
            var nextId   = _this.GetNextId();
            var tempmail = new Mail(_this.mCharacter, nextId);

            tempmail.Name = name;
            tempmail.Text = text;
            tempmail.Type = type;
            foreach (var data in datas)
            {
                tempmail.Reward.Add(data);
            }
            tempmail.OverTime = DateTime.Now.AddDays(15).ToBinary();
            _this.Mails.Add(tempmail.Guid, tempmail);
            _this.AddChild(tempmail);
            _this.mDbData.mData.Add(tempmail.mDbData);
            tempmail.MarkDirty();
            return(tempmail);
        }
Пример #7
0
        //获取时间最早的一份邮件
        public Mail GetTimeMin(MailManager _this)
        {
            Mail minOne      = null;
            var  overTimeMin = DateTime.Now.AddMonths(1);

            foreach (var mail in _this.Mails)
            {
                var ot = DateTime.FromBinary(mail.Value.OverTime);
                if (ot <= overTimeMin)
                {
                    overTimeMin = ot;
                    minOne      = mail.Value;
                }
            }
            return(minOne);
        }
Пример #8
0
        //分发邮件
        private Mail PushMail(MailManager _this,
                              string name,
                              string text,
                              List <KeyValuePair <int, int> > reward,
                              string sender             = "",
                              List <ItemBaseData> datas = null, int type = 0)
        {
            if (_this.Mails.Count >= StaticParam.MaxMailCount)
            {
                var minMail = GetTimeMin(_this);
                if (minMail == null)
                {
                    return(null);
                }
                minMail.Name      = name;
                minMail.Text      = text;
                minMail.Send      = sender;
                minMail.StartTime = DateTime.Now.ToBinary();
                minMail.OverTime  = DateTime.Now.AddDays(15).ToBinary();
                minMail.State     = 0;
                minMail.Type      = type;
                if (reward == null)
                {
                    minMail.Reward.Clear();
                }
                else
                {
                    minMail.Reward.Clear();
                    foreach (var i in reward)
                    {
                        var itemDb = new ItemBaseData();
                        ShareItemFactory.Create(i.Key, itemDb);
                        itemDb.Count = i.Value;
                        minMail.Reward.Add(itemDb);
                        if (datas != null)
                        {
                            datas.Add(itemDb);
                        }
                    }
                    //foreach (KeyValuePair<int, int> i in reward)
                    //{
                    //    ItemBaseData itemDb = new ItemBaseData();
                    //    ItemFactory.Create(i.Key, itemDb);
                    //    itemDb.Count = i.Value;
                    //    minMail.Reward.Clear();
                    //    minMail.Reward.Add(itemDb);
                    //}
                }
                minMail.MarkDirty();
                return(minMail);
            }
            var nextId   = _this.GetNextId();
            var tempmail = new Mail(_this.mCharacter, nextId);

            tempmail.Name = name;
            tempmail.Send = sender;
            tempmail.Text = text;
            tempmail.Type = type;
            if (reward != null)
            {
                foreach (var i in reward)
                {
                    var itemDb = new ItemBaseData();
                    ShareItemFactory.Create(i.Key, itemDb);
                    itemDb.Count = i.Value;
                    tempmail.Reward.Add(itemDb);
                    if (datas != null)
                    {
                        datas.Add(itemDb);
                    }
                }
                //foreach (KeyValuePair<int, int> i in reward)
                //{
                //    ItemBaseData itemDb = new ItemBaseData();
                //    ItemFactory.Create(i.Key, itemDb);
                //    itemDb.Count = i.Value;
                //    tempmail.Reward.Add(itemDb);
                //    if (datas != null)
                //    {
                //        datas.Add(itemDb);
                //    }
                //}
            }
            tempmail.OverTime = DateTime.Now.AddDays(15).ToBinary();
            //tempmail.OverTime = DateTime.Now.AddHours(15).ToBinary();
            _this.Mails.Add(tempmail.Guid, tempmail);
            _this.AddChild(tempmail);
            _this.mDbData.mData.Add(tempmail.mDbData);
            tempmail.MarkDirty();
            return(tempmail);
        }
Пример #9
0
        //接收邮件
        public Mail PushMail(MailManager _this,
                             string name,
                             string text,
                             Dictionary <int, int> reward,
                             string sender             = "",
                             List <ItemBaseData> datas = null, int type = 0)
        {
            // pushMailCount 记录邮件的发送次数
            var  pushMailCount = 0;
            Mail mail          = null;
            var  items         = new List <KeyValuePair <int, int> >();
            var  index         = 1;

            // 拆分邮件中的附件
            foreach (var i in reward)
            {
                var tbItem = Table.GetItemBase(i.Key);
                if (tbItem == null)
                {
                    Logger.Error("Get a error item ID=" + i.Key.ToString());
                    continue;
                }

                var count = i.Value;
                if (count < 1)
                {
                    continue;
                }
                if (tbItem.MaxCount == -1 || tbItem.MaxCount >= count)
                {
                    if (items.Count >= 5)
                    {
                        mail = PushMail(_this, string.Format("{0}{1}", name, string.Format("({0})", index)), text, items,
                                        sender, datas, type);
                        index++;
                        items = new List <KeyValuePair <int, int> >();
                        pushMailCount++;
                    }
                    items.Add(new KeyValuePair <int, int>(i.Key, count));
                    continue;
                }
                do
                {
                    if (items.Count >= 5)
                    {
                        mail = PushMail(_this, string.Format("{0}{1}", name, string.Format("({0})", index)), text, items,
                                        sender, datas, type);
                        index++;
                        items = new List <KeyValuePair <int, int> >();
                        pushMailCount++;
                    }
                    if (tbItem.MaxCount < count)
                    {
                        items.Add(new KeyValuePair <int, int>(i.Key, tbItem.MaxCount));
                        count -= tbItem.MaxCount;
                    }
                    else
                    {
                        items.Add(new KeyValuePair <int, int>(i.Key, count));
                        count = 0;
                    }
                } while (count > 0);
            }

            // 如果邮件的发送次数为0,应该发一封
            if (items.Count > 0 || pushMailCount == 0)
            {
                mail = PushMail(_this, string.Format("{0}{1}", name, index == 1 ? "" : string.Format("({0})", index)),
                                text, items, sender, datas, type);
            }
            return(mail);
            //if (Mails.Count >= StaticParam.MaxMailCount)
            //{
            //    Mail minMail = GetTimeMin();
            //    if (minMail == null) return null;
            //    minMail.Name = name;
            //    minMail.Text = text;
            //    minMail.StartTime = DateTime.Now.ToBinary();
            //    minMail.OverTime = DateTime.Now.AddDays(15).ToBinary();
            //    minMail.State = 0;
            //    if (reward == null)
            //    {
            //        minMail.Reward.Clear();
            //    }
            //    else
            //    {
            //        foreach (KeyValuePair<int, int> i in reward)
            //        {
            //            ItemBaseData itemDb = new ItemBaseData();
            //            ItemFactory.Create(i.Key, itemDb);
            //            itemDb.Count = i.Value;
            //            minMail.Reward.Clear();
            //            minMail.Reward.Add(itemDb);
            //        }
            //        //minMail.Reward = reward;
            //    }
            //    minMail.MarkDirty();
            //    return minMail;
            //}
            //ulong nextId = GetNextId();
            //Mail tempmail = new Mail(mCharacter, nextId);
            //tempmail.Name = name;
            //tempmail.Send = sender;
            //tempmail.Text = text;
            //if (reward != null)
            //{
            //    //tempmail.Reward = reward;
            //    foreach (KeyValuePair<int, int> i in reward)
            //    {
            //        ItemBaseData itemDb = new ItemBaseData();
            //        ItemFactory.Create(i.Key, itemDb);
            //        itemDb.Count = i.Value;
            //        tempmail.Reward.Add(itemDb);
            //        if (datas != null)
            //        {
            //            datas.Add(itemDb);
            //        }
            //    }
            //}
            //tempmail.OverTime = DateTime.Now.AddDays(15).ToBinary();
            ////tempmail.OverTime = DateTime.Now.AddHours(15).ToBinary();
            //Mails.Add(tempmail.Guid, tempmail);
            //AddChild(tempmail);
            //mDbData.mData.Add(tempmail.mDbData);
            //tempmail.MarkDirty();
            //return tempmail;
        }