/// <summary> /// 系统邮件 /// </summary> public static Email SendAuctionEmail( Dictionary<string, object> dic, string type, string auctionid, string receiveID, string receiveName, int Score, int Coin, List<Variant> GoodsList ) { Email email = new Email(); email.ID = ObjectId.GenerateNewId().ToString(); email.Status = 0;//0表示未读取过,1已读取 email.Ver = 1; email.MainType = EmailCommand.System; email.Created = DateTime.UtcNow; GameConfig gc = GameConfigAccess.Instance.FindOneById(type); Variant d = new Variant(16); string Title = gc.Value.GetStringOrDefault("Title"); string Source = gc.Value.GetStringOrDefault("Source"); string Content = gc.Value.GetStringOrDefault("Content"); foreach (string k in dic.Keys) { Title = Title.Replace(k, dic[k].ToString()); Content = Content.Replace(k, dic[k].ToString()); } email.Name = Title; d.Add("Title", Title); d.Add("Source", Source); d.Add("Content", Content); d.Add("SendID", EmailCommand.System); d.Add("SendName", Source); d.Add("ReceiveID", receiveID); d.Add("ReceiveName", receiveName); //d.Add("Take", string.Empty); DateTime dt = DateTime.UtcNow; d.Add("UpdateDate", dt); d.Add("EndDate", dt.AddDays(30)); d.Add("AuctionID", auctionid); d.Add("Score", Score); d.Add("Coin", Coin); d.Add("GoodsList", GoodsList); if (d.GetIntOrDefault("Score") > 0 || d.GetIntOrDefault("Coin") > 0 || (GoodsList!=null && GoodsList.Count > 0)) { d.Add("IsHave", 1); } else { d.Add("IsHave", 0); } email.Value = d; email.Save(); return email; }
/// <summary> /// 家族的创建 /// </summary> /// <param name="note"></param> public static void FamilyCreate(UserNote note) { //家族名称 string name = note.GetString(0).Trim(); string npcid = note.GetString(1);//NPC if (!note.Player.EffectActive(npcid, "")) return; string checkmsg = NameManager.Instance.CheckName(name); if (!string.IsNullOrEmpty(checkmsg)) { note.Call(FamilyCommand.FamilyCreateR, false, checkmsg); return; } //得到玩家家族信息 PlayerEx family = note.Player.Family; if (family.Value.GetStringOrDefault("FamilyID") != string.Empty) { note.Call(FamilyCommand.FamilyCreateR, false, TipManager.GetMessage(FamilyReturn.FamilyExist)); return; } if (family.Value.GetStringOrDefault("FreezeDate") != string.Empty) { DateTime FreezeDate = family.Value.GetDateTimeOrDefault("FreezeDate"); if (FreezeDate.ToLocalTime() > DateTime.Now) { note.Call(FamilyCommand.FamilyCreateR, false, string.Format(TipManager.GetMessage(FamilyReturn.FreezeDate), FreezeDate.ToLocalTime().ToString())); return; } } if (name.Length > 7) { note.Call(FamilyCommand.FamilyCreateR, false, TipManager.GetMessage(FamilyReturn.NameOutLength)); return; } if (FamilyAccess.Instance.FamilyIsExist(name)) { note.Call(FamilyCommand.FamilyCreateR, false, TipManager.GetMessage(FamilyReturn.FamilyNameExist)); return; } if (note.Player.Level < 10) { //玩家等级不足 note.Call(FamilyCommand.FamilyCreateR, false, TipManager.GetMessage(FamilyReturn.NoLevel)); return; } if (family.Value.GetStringOrDefault("FamilyID") != string.Empty) { note.Call(FamilyCommand.FamilyCreateR, false, TipManager.GetMessage(FamilyReturn.ExistFamily)); return; } //创建家族需要2000000石币 if (note.Player.Score < 400000 || (!note.Player.AddScore(-400000, FinanceType.FamilyCreate))) { note.Call(FamilyCommand.FamilyCreateR, false, TipManager.GetMessage(FamilyReturn.NoScore)); return; } string[] msg = TipManager.GetMessage(FamilyReturn.CreateFamilyEmail).Split('|'); if (msg.Length < 3) return; WordAccess.Instance.SetUsed(name); Family model = Family.Create(FamilyBase.FamilyValue(note)); model.ID = ObjectId.GenerateNewId().ToString(); model.Name = name; model.Created = DateTime.UtcNow; model.Modified = DateTime.UtcNow; //model.Save(); FamilyAccess.Instance.Insert(model); //更新用户家族信息 family.Value["FamilyID"] = model.ID; family.Value["FamilyName"] = name; //是否在冻结期 family.Value["FreezeDate"] = DateTime.UtcNow; family.Value["FamilyRoleID"] = 0; family.Value["Devote"] = 0;//当前对家族的贡献值 family.Save(); Email email = new Email(); email.ID = ObjectId.GenerateNewId().ToString(); email.Name = string.Format(msg[1], model.Name);//msg[1].Replace("FamilyName", model.Name); email.Status = 0; email.Ver = 1; email.MainType = EmailCommand.System; email.Created = DateTime.UtcNow; Variant v = new Variant(); v.Add("mailMess", string.Format(msg[2], model.Name)); v.Add("reTime", 30); email.Value = EmailAccess.Instance.CreateEmailValue(EmailCommand.System, msg[0], note.PlayerID, note.Player.Name, v); email.Save(); Variant self = new Variant(); self.Add("Family", note.Player.Family); note.Call(FamilyCommand.FamilyCreateR, true, self); note.Player.SetFamilyName(name, StrsRole[0]); note.Call(EmailCommand.NewEmailTotalR, EmailAccess.Instance.NewTotal(note.PlayerID)); UserNote note1 = new UserNote(note.Player, FamilyCommand.AddFamily, new object[] { 0 }); Notifier.Instance.Publish(note1); Variant os = new Variant(); os["ID"] = model.ID; os["Name"] = model.Name; os["TargetID"] = note.PlayerID; os["TargetName"] = note.Player.Name; os["Status"] = 0; note.Player.AddLogVariant(Actiontype.FamilyLog, null, null, os); }
/// <summary> /// 发送邮件 /// </summary> /// <param name="note"></param> public static void SendEmail(UserNote note) { Variant d = note.GetVariant(0); //标题 string title = d.GetStringOrDefault("mailtitle"); if (title.Length > 20) { note.Call(EmailCommand.SendEmailR, false, TipManager.GetMessage(EmailReturn.EmailTitalLength)); return; } if (d.GetStringOrEmpty("mailMess").Length > 300) { note.Call(EmailCommand.SendEmailR, false, TipManager.GetMessage(EmailReturn.EmailContent)); return; } //mailMess IList goodsList = d.GetValue<IList>("goodsList"); int fee = 5;//要扣除的邮费 int score = 0; if (d.ContainsKey("moneyGoods")) { Variant mg = d.GetVariantOrDefault("moneyGoods"); score = mg.GetIntOrDefault("Score"); if (mg != null) { fee += Convert.ToInt32(Math.Ceiling(score * 0.01)); } } if (goodsList.Count > 0) { fee += goodsList.Count * 10; } //发送物品物数量 if (note.Player.Score < (fee + score)) { //游戏币不足 note.Call(EmailCommand.SendEmailR, false, TipManager.GetMessage(EmailReturn.NoScore)); return; } PlayerEx b0 = note.Player.B0; IList c = b0.Value.GetValue<IList>("C"); if (!IsCheck(note.Player, goodsList, c)) return; string name = d.GetStringOrDefault("playerName"); if (note.Player.Name == name) { note.Call(EmailCommand.SendEmailR, false, TipManager.GetMessage(EmailReturn.NoSelf)); return; } PlayerBusiness pb = PlayersProxy.FindPlayerByName(name); if (pb == null) { note.Call(EmailCommand.SendEmailR, false, TipManager.GetMessage(EmailReturn.NoExists)); return; } if (!note.Player.AddScore(-(fee + score), FinanceType.EmailFee, string.Format("{0},{1},{2}", fee, score, pb.ID))) { note.Call(EmailCommand.SendEmailR, false, TipManager.GetMessage(EmailReturn.NoScore)); return; } Variant dic = new Variant(); //bool isChange = false; foreach (Variant gs in goodsList) { foreach (Variant con in c) { if (con.GetIntOrDefault("P") != gs.GetIntOrDefault("P")) continue; //如果道具非绑定不能发送 string goodsid = con.GetStringOrDefault("G"); int num = con.GetIntOrDefault("A"); BurdenManager.BurdenClear(con); note.Player.UpdateTaskGoods(goodsid); //记录邮寄道具情况 dic.SetOrInc(goodsid, num); } } string mid = ""; if (b0.Save()) { Email model = new Email(); model.ID = ObjectId.GenerateNewId().ToString(); model.Name = string.IsNullOrEmpty(title) ? string.Format(TipManager.GetMessage(EmailReturn.SendEmail1), note.Player.Name) : title; model.Status = 0; model.Ver = 1; model.MainType = EmailCommand.Personal; model.Created = DateTime.UtcNow; model.Value = EmailBase.CreateEmailValue(note.PlayerID, note.Player.Name, pb.ID, pb.Name, d); model.Save(); if (pb.Online) { //得到新邮件请查收 pb.Call(EmailCommand.NewEmailTotalR, EmailAccess.Instance.NewTotal(pb.ID)); } if (goodsList != null && goodsList.Count > 0) { note.Player.UpdateBurden(); } note.Call(EmailCommand.SendEmailR, true, EmailReturn.SendEmailSuccess); mid = model.ID; } if (dic.Count > 0) { foreach (var item in dic) { note.Player.AddLog(Actiontype.GoodsUse, item.Key, Convert.ToInt32(item.Value), GoodsSource.SendEmail, pb.Name, 0); } } }
/// <summary> /// 邮件物品提取 /// </summary> /// <param name="note"></param> public static void ExtractGoods(UserNote note) { if (!m_dic.TryAdd(note.PlayerID, note.PlayerID)) return; try { string EmailID = note.GetString(0); string GoodsID = note.GetString(1); Email email = EmailAccess.Instance.FindOneById(EmailID); if (email == null) { note.Call(EmailCommand.ExtractGoodsR, false, TipManager.GetMessage(EmailReturn.NoEmail)); return; } if (note.PlayerID != email.Value.GetStringOrDefault("ReceiveID")) { note.Call(EmailCommand.ExtractGoodsR, false, TipManager.GetMessage(EmailReturn.NoReceiveID)); return; } //得到邮件的物品列表 IList GoodsList = email.Value.GetValue<IList>("GoodsList"); if (GoodsID == string.Empty) { int s0 = email.Value.GetIntOrDefault("Score");//石币 if (s0 <= 0) { return; } email.Value["Coin"] = 0; email.Value["Score"] = 0; if (GoodsList != null) { if (GoodsList.Count == 0) { email.Value["IsHave"] = 0; } } else { email.Value["IsHave"] = 0; } email.Save(); note.Player.AddScore(s0, FinanceType.ExtractGoods); note.Call(EmailCommand.ExtractGoodsR, true, GoodsID); return; } Variant v = null; foreach (Variant d in GoodsList) { if (d.GetStringOrDefault("SoleID") == GoodsID) { v = d; break; } } if (v == null) { note.Call(EmailCommand.ExtractGoodsR, false, TipManager.GetMessage(EmailReturn.NoReceiveID)); return; } //int Coin = v.GetIntOrDefault("Coin"); int Score = v.GetIntOrDefault("Score"); string SoleID = v.GetStringOrDefault("SoleID"); //if (note.Player.Coin < Coin) //{ // //晶币不足 // note.Call(EmailCommand.ExtractGoodsR, false, TipManager.GetMessage(EmailReturn.NoCoin)); // return; //} if (note.Player.Score < Score) { //游戏币不足 note.Call(EmailCommand.ExtractGoodsR, false, TipManager.GetMessage(EmailReturn.NoScore)); return; } //货物提取后, Email ev = new Email(); ev.ID = ObjectId.GenerateNewId().ToString(); ev.Name = email.Name; ev.Status = 0; ev.Ver = 1; ev.MainType = EmailCommand.System; ev.Created = DateTime.UtcNow; Variant gs = new Variant(); Variant moneyGoods = new Variant(); //moneyGoods.Add("Coin", Coin); moneyGoods.Add("Score", Score); gs.Add("moneyGoods", moneyGoods); gs.Add("GoodsList", new List<Variant>()); gs.Add("mailMess", ""); gs.Add("reTime", 15); ev.Value = EmailBase.CreateEmailValue(EmailCommand.System, TipManager.GetMessage(EmailReturn.ExtractGoods1), email.Value.GetStringOrDefault("SendID"), email.Value.GetStringOrDefault("SendName"), gs); Goods g = GoodsAccess.Instance.FindOneById(GoodsID); //普通包袱 PlayerEx burden = note.Player.B0; IList c = burden.Value.GetValue<IList>("C"); if (g != null) { Variant n = BurdenManager.GetBurdenSpace(c); if (n == null) { note.Call(EmailCommand.ExtractGoodsR, false, TipManager.GetMessage(EmailReturn.BurdenFull)); return; } if (!note.Player.AddScore(-Score, FinanceType.ExtractGoods)) { note.Call(EmailCommand.ExtractGoodsR, false, TipManager.GetMessage(EmailReturn.NoScore)); return; } n["E"] = g.ID; n["G"] = g.GoodsID; n["A"] = 1; n["S"] = g.Value.GetIntOrDefault("Sort"); n["H"] = 0; n["D"] = 0; Variant tmp = new Variant(); if (g.Value.ContainsKey("BaoShiInfo")) { tmp.Add("BaoShiInfo", g.Value.GetValue<object>("BaoShiInfo")); } if (g.Value.ContainsKey("Stamina")) { Variant Stamina = g.Value.GetVariantOrDefault("Stamina"); tmp.Add("Stamina", Stamina.GetIntOrDefault("V")); } if (g.Value.ContainsKey("PetsWild")) { tmp.Add("PetsWild", g.Value.GetIntOrDefault("PetsWild")); } n["T"] = tmp; g.PlayerID = note.PlayerID; g.Save(); burden.Save(); GoodsList.Remove(v); if (email.Value.GetIntOrDefault("Coin") <= 0 && email.Value.GetIntOrDefault("Score") <= 0 && GoodsList.Count == 0) { email.Value["IsHave"] = 0; } email.Save(); note.Call(EmailCommand.ExtractGoodsR, true, GoodsID); if (Score != 0) { ev.Save(); PlayerBusiness OnLineBusiness = PlayersProxy.FindPlayerByID(email.Value.GetStringOrDefault("SendID")); if (OnLineBusiness != null && OnLineBusiness.Online) { OnLineBusiness.Call(EmailCommand.NewEmailTotalR, EmailAccess.Instance.NewTotal(note.PlayerID)); } } note.Player.UpdateTaskGoods(g.GoodsID); //Variant list = new Variant(); //list.Add("B0", burden); //note.Call(BurdenCommand.BurdenListR, list); note.Player.UpdateBurden(); return; } GameConfig gc = GameConfigAccess.Instance.FindOneById(SoleID); if (gc != null) { //道具数量 int num = v.GetIntOrDefault("Number"); //是否绑定 int h = v.GetIntOrDefault("H"); Dictionary<string, Variant> dic = new Dictionary<string, Variant>(); Variant mv = new Variant(); if (h == 0) { mv.Add("Number0", num); } else { mv.Add("Number1", num); } dic.Add(SoleID, mv); //得到堆叠数 if (BurdenManager.IsFullBurden(note.Player.B0, dic)) { note.Call(EmailCommand.ExtractGoodsR, false, TipManager.GetMessage(EmailReturn.BurdenFull)); return; } if (Score > 0) { if (!note.Player.AddScore(-Score, FinanceType.ExtractGoods)) { note.Call(EmailCommand.ExtractGoodsR, false, TipManager.GetMessage(EmailReturn.NoScore)); return; } } GoodsList.Remove(v); if (email.Value.GetIntOrDefault("Coin") <= 0 && email.Value.GetIntOrDefault("Score") <= 0 && GoodsList.Count == 0) { email.Value["IsHave"] = 0; } email.Save(); note.Call(EmailCommand.ExtractGoodsR, true, GoodsID); note.Player.AddGoods(dic, GoodsSource.GM); return; } note.Call(EmailCommand.ExtractGoodsR, false, TipManager.GetMessage(EmailReturn.DataError)); } finally { string n; m_dic.TryRemove(note.PlayerID, out n); } }