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(); }
//领取邮件 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); }
//通知玩家被谁杀死 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); }
//获取邮件 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); }
//删除邮件 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); }
//接收邮件 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); }
//获取时间最早的一份邮件 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); }
//分发邮件 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); }
//接收邮件 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; }