/// <summary> /// 领取奖励 /// </summary> /// <param name="note"></param> public static void BossAward(UserNote note) { string fid = note.Player.Family.Value.GetStringOrDefault("FamilyID"); if (string.IsNullOrEmpty(fid)) { note.Call(FamilyCommand.BossAwardR, false, TipManager.GetMessage(FamilyReturn.NoAddFamily)); return; } string bid = note.GetString(0); var p = GameConfigAccess.Instance.FindOneById(bid); if (p == null) { return; } string gid = note.GetString(1); //FamilyBossAccess.Instance.ViewAward(fid + bid, note.Player.ID); if (string.IsNullOrEmpty(gid)) { return; } string[] tt = gid.Split('$'); int number = 1; if (tt.Length != 2 || (!int.TryParse(tt[1], out number))) { number = 1; } string goodsid = tt[0]; //TODO:检查包袱 Dictionary<string, Variant> goods = new Dictionary<string, Variant>(); Variant tmp = new Variant(); tmp.Add("Number1", number); goods.Add(goodsid, tmp); if (BurdenManager.GetBurdenSpace(note.Player.B0.Value.GetValue<IList>("C")) == null) { note.Call(FamilyCommand.BossAwardR, false, TipManager.GetMessage(ActivityReturn.SignAward4)); return; } //if (BurdenManager.IsFullBurden(note.Player.B0, goods)) //{ // note.Call(FamilyCommand.BossAwardR, false, TipManager.GetMessage(ActivityReturn.SignAward4)); // return; //} if (FamilyBossAccess.Instance.GetAward(fid + bid, note.Player.ID, gid)) { //发放物品 note.Player.AddGoods(goods, GoodsSource.FamilyBoss); note.Call(FamilyCommand.BossAwardR, true, gid); } else { //已领取.. note.Call(FamilyCommand.BossAwardR, false, TipManager.GetMessage(FamilyReturn.CannotBossAward)); } }
/// <summary> /// 添加好友 /// </summary> /// <param name="note"></param> public static void AddFriends(UserNote note) { string name = note.GetString(0); if (note.Player.Name == name) { return; } PlayerEx social = note.Player.Social; if (social == null) { note.Call(SocialCommand.AddFriendsR, false, TipManager.GetMessage(SocialReturn.UserInfoError)); return; } PlayerBusiness player = PlayersProxy.FindPlayerByName(name); if (player == null) { note.Call(SocialCommand.AddFriendsR, false, TipManager.GetMessage(SocialReturn.UserInfoError)); return; } if (social.Value != null) { if (SocialBusiness.IsLet(social, player.ID, new List<string> { "Friends" })) { note.Call(SocialCommand.AddFriendsR, false, TipManager.GetMessage(SocialReturn.Friends)); return; } if (SocialBusiness.IsLet(social, player.ID, new List<string> { "Enemy" })) { note.Call(SocialCommand.AddFriendsR, false, TipManager.GetMessage(SocialReturn.Master)); return; } } Variant v = new Variant(); v.Add("PlayerID", player.ID); v.Add("Created", DateTime.UtcNow); IList list = social.Value.GetValue<IList>("Friends"); int num = 0; if (list == null) { social.Value["Friends"] = new List<Variant>() { v }; num = 1; } else { list.Add(v); num = list.Count; } social.Save(); note.Call(SocialCommand.AddFriendsR, true, new PlayerSimple(player, 3)); //添加好友 note.Player.FinishNote(FinishCommand.Friends, num); }
/// <summary> /// 申请交易 /// </summary> /// <param name="note"></param> public static void DealApply(UserNote note) { string playerid = note.GetString(0); if (note.Player.Value.ContainsKey("Deal")) { note.Call(DealCommand.DealApplyR, false, TipManager.GetMessage(DealReturn.DealOther)); return; } PlayerBusiness OnlineBusiness = PlayersProxy.FindPlayerByID(playerid); if (OnlineBusiness == null || (!OnlineBusiness.Online)) { note.Call(DealCommand.DealApplyR, false, TipManager.GetMessage(DealReturn.NoLine)); return; } if (OnlineBusiness.AState == ActionState.Fight) { note.Call(DealCommand.DealApplyR, false, TipManager.GetMessage(DealReturn.Fighting)); return; } if (OnlineBusiness.Value.ContainsKey("Deal")) { Variant dy = OnlineBusiness.Value.GetVariantOrDefault("Deal"); if (dy.GetIntOrDefault("Status") >= 0) { note.Call(DealCommand.DealApplyR, false, TipManager.GetMessage(DealReturn.DealOther)); return; } } Variant d0 = new Variant(); d0.Add("Status", 0); d0.Add("PlayerID", playerid);//被邀请者 d0.Add("Goods", null); if (!note.Player.Value.ContainsKey("Deal")) note.Player.Value.Add("Deal", d0); Variant d1 = new Variant(); d1.Add("Status", 0); d1.Add("PlayerID", note.PlayerID);//邀请者 d1.Add("Goods", null); if (!OnlineBusiness.Value.ContainsKey("Deal")) OnlineBusiness.Value.Add("Deal", d1); OnlineBusiness.Call(DealCommand.DealApplyR, true, note.PlayerID); note.Call(DealCommand.DealApplyR, true, note.PlayerID); }
void Execute(UserNote note) { //表示角色正在战斗中,客户端提交信息不进行处理 if (note.Player.AState == ActionState.Fight) { Variant msg = GoodsAccess.Instance.LiaoTianList(TipManager.GetMessage(DealReturn.SelfFighting)); note.Call(ClientCommand.SendMsgToAllPlayerR, string.Empty, msg); return; } switch (note.Name) { case DealCommand.DealApply: DealBusiness.DealApply(note); break; case DealCommand.DealApplyBack: DealBusiness.DealApplyBack(note); break; case DealCommand.LockDeal: DealBusiness.LockDeal(note); break; case DealCommand.EnterDeal: DealBusiness.EnterDeal(note); break; case DealCommand.ExitDeal: case ClientCommand.UserDisconnected: DealBusiness.ExitDeal(note); break; } }
/// <summary> /// 取得星阵星力值 /// </summary> /// <param name="note"></param> public static void GetStarTroops(UserNote note) { string soleid = note.PlayerID + "GetStarTroops"; if (!m_dic.TryAdd(soleid, soleid)) return; try { PlayerEx star = note.Player.Star; Variant v = star.Value; int sp = StarTroopsSettle(star); if (sp <= 0) { note.Call(StarCommand.GetStarTroopsR, false, TipManager.GetMessage(StarReturn.GetStarTroops2)); return; } int powerMax = PartAccess.Instance.PowerMax(); int addPower = 0; if (note.Player.StarPower + sp > powerMax) { addPower = powerMax - note.Player.StarPower; } else { addPower = sp; } v["StarPower"] = 0; //重新计算时间 v["StarTime"] = DateTime.UtcNow; if (addPower > 0) { note.Player.AddStarPower(addPower, FinanceType.GetStarTroops); } star.Save(); note.Call(ClientCommand.UpdateActorR, new PlayerExDetail(star)); note.Call(StarCommand.GetStarTroopsR, true, TipManager.GetMessage(StarReturn.GetStarTroops3)); } finally { m_dic.TryRemove(soleid, out soleid); } }
/// <summary> /// 得到宠物列表 /// </summary> /// <param name="note"></param> public void GetPetsList(UserNote note) { //表示没有家园不 //if (note.Player.SceneID != SceneHome.DefaultID) // return; //玩家ID string id = note.GetString(0); if (note.PlayerID == id) { note.Call(PetsCommand.GetPetsListR, PetAccess.Instance.GetPetList(note.Player.B2)); return; } PlayerBusiness pb = PlayersProxy.FindPlayerByID(id); if (pb == null) return; note.Call(PetsCommand.GetPetsListR, PetAccess.Instance.GetPetList(pb.B2)); }
/// <summary> /// 回复交易 /// </summary> /// <param name="note"></param> public static void DealApplyBack(UserNote note) { IList o = note[0] as IList; bool IsSame = false; PlayerBusiness OnlineBusiness = PlayersProxy.FindPlayerByID(o[1].ToString()); if (OnlineBusiness == null || (!OnlineBusiness.Online)) { note.Call(DealCommand.DealApplyBackR, false, TipManager.GetMessage(DealReturn.NoLine)); return; } if (!OnlineBusiness.Value.ContainsKey("Deal")) { note.Call(DealCommand.DealApplyBackR, false, TipManager.GetMessage(DealReturn.BackMsgError)); return; } Variant v0 = note.Player.Value.GetVariantOrDefault("Deal"); Variant v1 = OnlineBusiness.Value.GetVariantOrDefault("Deal"); if (!bool.TryParse(o[0].ToString(), out IsSame)) { if (OnlineBusiness.Value.ContainsKey("Deal")) OnlineBusiness.Value.Remove("Deal"); OnlineBusiness.Call(DealCommand.DealApplyBackR, false, TipManager.GetMessage(DealReturn.NoDeal)); //note.Call(DealCommand.DealApplyBackR, false, TipAccess.GetMessage(DealReturn.NoDeal)); return; } if (!note.Player.Value.ContainsKey("Deal")) { if (OnlineBusiness.Value.ContainsKey("Deal")) OnlineBusiness.Value.Remove("Deal"); OnlineBusiness.Call(DealCommand.DealApplyBackR, false, TipManager.GetMessage(DealReturn.NoDeal)); //note.Call(DealCommand.DealApplyBackR, false, TipAccess.GetMessage(DealReturn.NoDeal)); return; } if (!IsSame) { if (OnlineBusiness.Value.ContainsKey("Deal")) OnlineBusiness.Value.Remove("Deal"); OnlineBusiness.Call(DealCommand.DealApplyBackR, false, TipManager.GetMessage(DealReturn.NoDeal)); if (note.Player.Value.ContainsKey("Deal")) note.Player.Value.Remove("Deal"); //note.Call(DealCommand.DealApplyBackR, false, TipAccess.GetMessage(DealReturn.NoDeal)); return; } v0["Status"] = 1; v1["Status"] = 1; OnlineBusiness.Call(DealCommand.DealApplyBackR, true, DealReturn.AgreeDeal); note.Call(DealCommand.DealApplyBackR, true, DealReturn.AgreeDeal); }
/// <summary> /// 使用者等级限制 /// </summary> /// <param name="note"></param> /// <param name="limit"></param> /// <returns></returns> private static bool CheckLevel(UserNote note, Variant limit) { int needLev = limit.GetIntOrDefault("LevelRequire"); if (needLev > note.Player.Level) { note.Call(ArenaCommand.ArenaGoodsR, false, TipManager.GetMessage(GoodsReturn.NoLevel)); return false; } return true; }
/// <summary> /// 宠物奖励 /// </summary> public static void TaskAward112009(UserNote note, Dictionary<string, int> pets) { foreach (string ps in pets.Keys) { for (int i = 0; i < pets[ps]; i++) { PetAccess.Instance.CreatePet(note.Player.B3, ps, 0, 1); } } note.Call(ClientCommand.UpdateActorR, new PlayerExDetail(note.Player.B3)); }
/// <summary> /// 邮件删除 /// </summary> /// <param name="note"></param> public static void DelEmail(UserNote note) { IList id = note[0] as IList; if (id.Count > 0) { if (EmailAccess.Instance.RemoveEmail(id, note.PlayerID)) { note.Call(EmailCommand.DelEmailR, true); } else { note.Call(EmailCommand.DelEmailR, false, TipManager.GetMessage(EmailReturn.EmailFuJian)); } } else { note.Call(EmailCommand.DelEmailR, false, TipManager.GetMessage(EmailReturn.DataError)); } }
/// <summary> /// 骑乘或召回坐骑 /// </summary> /// <param name="note"></param> public static void InOutMounts(UserNote note) { Mounts m = note.Player.Mounts; if (m == null) { note.Call(MountsCommand.InOutMountsR, false, TipManager.GetMessage(MountsReturn.Mounts2)); return; } m.Status = m.Status == 0 ? 1 : 0; if (m.Save()) { PetAccess.PetReset(note.Player.Pet, note.Player.Skill, false, m); note.Call(PetsCommand.UpdatePetR, true, note.Player.Pet); note.Player.MountsUpdate(m, new List<string>() { "Status" }); note.Player.MountsInfo(); note.Call(MountsCommand.InOutMountsR, true, ""); } else { //操作失败 note.Call(MountsCommand.InOutMountsR, false,TipManager.GetMessage(MountsReturn.Mounts1)); } }
/// <summary> /// 获取所有技能信息 /// </summary> /// <param name="note"></param> private void GetSkills(UserNote note) { object[] ids = note[0] as object[]; if (ids == null || ids.Length == 0) { var skills = GameConfigAccess.Instance.Find(MainType.Skill, string.Empty); note.Call(SkillCommand.GetSkillsR, true, skills.Select(x => new SkillSimple(x))); } else { var skill = GameConfigAccess.Instance.FindByIDList(ids); note.Call(SkillCommand.GetSkillsR, true, skill.Select(x => new SkillSimple(x))); } }
/// <summary> /// 添加仇人 /// </summary> /// <param name="note"></param> public static void AddEnemy(UserNote note) { string name = note.GetString(0); PlayerEx Social = note.Player.Social; if (Social == null) { note.Call(SocialCommand.AddEnemyR, false, TipManager.GetMessage(SocialReturn.UserInfoError)); return; } PlayerBusiness player = PlayersProxy.FindPlayerByName(name); if (player == null) { note.Call(SocialCommand.AddEnemyR, false, TipManager.GetMessage(SocialReturn.UserInfoError)); return; } if (SocialBusiness.IsLet(Social, player.ID, new List<string> { "Enemy" })) { note.Call(SocialCommand.AddEnemyR, false, TipManager.GetMessage(SocialReturn.Enemy)); return; } if (SocialBusiness.IsLet(Social, player.ID, new List<string> { "Friends" })) { note.Call(SocialCommand.AddEnemyR, false, TipManager.GetMessage(SocialReturn.Friends)); return; } if (SocialBusiness.IsLet(Social, player.ID, new List<string> { "Apprentice" })) { note.Call(SocialCommand.AddEnemyR, false, TipManager.GetMessage(SocialReturn.Apprentice)); return; } if (SocialBusiness.IsLet(Social, player.ID, new List<string> { "Master" })) { note.Call(SocialCommand.AddEnemyR, false, TipManager.GetMessage(SocialReturn.Master)); return; } IList Enemy = Social.Value.GetValue<IList>("Enemy"); Variant v = new Variant(); v.Add("PlayerID", player.ID); v.Add("Created", DateTime.UtcNow); if (Enemy == null) { Social.Value["Enemy"] = new List<Variant> { v }; } else { Enemy.Add(v); } Social.Save(); note.Call(SocialCommand.AddEnemyR, true, new PlayerSimple(player, 3)); }
/// <summary> /// 学习技能 /// </summary> /// <param name="note"></param> private void StudySkill(UserNote note) { string skillID = note.GetString(0); GameConfig c = GameConfigAccess.Instance.FindOneById(skillID); if (c == null) return; PlayerEx skill = note.Player.Skill; int oldLev = skill.Value.GetIntOrDefault(skillID); if (oldLev == 0) //第一次学习检查职业限制 { //RoleLimit:职业限制 无限制""; 狂战士"1"; 魔弓手"2"; 神祭师"3" string roleID = c.UI.GetStringOrDefault("RoleLimit"); if (roleID == "1" || roleID == "2" || roleID == "3") { if (note.Player.RoleID != roleID) { note.Call(SkillCommand.StudySkillR, false, TipManager.GetMessage(SkillReturn.StudySkill1), oldLev); return; } } } //已达最大等级检查 int maxLev = c.UI.GetIntOrDefault("Level"); Variant studyLimit = c.UI.GetVariantOrDefault(oldLev.ToString()); if (studyLimit == null || oldLev >= maxLev) { note.Call(SkillCommand.StudySkillR, false, TipManager.GetMessage(SkillReturn.StudySkill3), oldLev); return; } //学习所需角色等级检查 int studyLev = studyLimit.GetIntOrDefault("StudyLev"); if (studyLev > note.Player.Level) { note.Call(SkillCommand.StudySkillR, false, string.Format(TipManager.GetMessage(SkillReturn.StudySkill4), studyLev), oldLev); return; } //前置技能检查 string preSkill = studyLimit.GetStringOrDefault("PreSkill"); if (!string.IsNullOrEmpty(preSkill)) { int preLev = studyLimit.GetIntOrDefault("PreLev"); if (preLev > 0) { GameConfig preConfig = GameConfigAccess.Instance.FindOneById(preSkill); if (preConfig != null) { int check = skill.Value.GetIntOrDefault(preSkill); if (preLev > check) { note.Call(SkillCommand.StudySkillR, false, string.Format(TipManager.GetMessage(SkillReturn.StudySkill5), preConfig.Name, preLev), oldLev); return; } } } } //学习消耗技能书检查 string book = c.UI.GetStringOrDefault("Book"); if (!string.IsNullOrEmpty(book)) { if (BurdenManager.GoodsCount(note.Player.Value["B0"] as PlayerEx, book) == 0) { note.Call(SkillCommand.StudySkillR, false, TipManager.GetMessage(SkillReturn.StudySkill2), oldLev); return; } } //积分消耗检查 int studyCost = studyLimit.GetIntOrDefault("StudyCost"); if (note.Player.Score < studyCost || (!note.Player.AddScore(-studyCost, FinanceType.SkillStudy))) { note.Call(SkillCommand.StudySkillR, false, string.Format(TipManager.GetMessage(SkillReturn.StudySkill6), studyCost), oldLev); return; } skill.Value[skillID] = oldLev + 1; skill.Save(); note.Call(SkillCommand.StudySkillR, true, skillID, oldLev + 1); //扣除技能书,每一级都要消耗一本 if (!string.IsNullOrEmpty(book)) { PlayerEx b0 = note.Player.Value.GetValueOrDefault<PlayerEx>("B0"); BurdenManager.Remove(b0, book); Variant v = new Variant(1); v["B0"] = b0; note.Call(BurdenCommand.BurdenListR, v); } note.Player.RefeshSkill(); }
private void MosaicNeed(UserNote note) { string goodsid = note.GetString(0); Goods g = GoodsAccess.Instance.GetGoodsByID(goodsid, note.PlayerID); if (g == null) { note.Call(MosaicCommand.MosaicNeedR, false, TipManager.GetMessage(MosaicReturn.MosaicEquipNo)); return; } if (g.Value.GetIntOrDefault("IsChange") == 0) { note.Call(ExchangeCommand.ExchangNeedR, false, TipManager.GetMessage(MosaicReturn.MosaicNoChange)); return; } Variant BaoShiInfo = g.Value.GetVariantOrDefault("BaoShiInfo"); bool IsLet = true; foreach (string d in BaoShiInfo.Keys) { if (BaoShiInfo[d].ToString() != "-1") { IsLet = false; break; } } if (IsLet) { note.Call(MosaicCommand.MosaicNeedR, false, TipManager.GetMessage(MosaicReturn.MosaicNoLet)); return; } List<GameConfig> mosaic = GameConfigAccess.Instance.Find("Mosaic"); GameConfig gc = null; foreach (GameConfig gcg in mosaic) { if (gcg.Value.GetStringOrDefault("Type") == g.Value.GetStringOrDefault("GoodsType")) { gc = gcg; break; } } if (gc == null) { note.Call(MosaicCommand.MosaicNeedR, false, TipManager.GetMessage(MosaicReturn.MosaicNoLet)); return; } string UpID = gc.Value.GetStringOrDefault("UpID"); int UpCount = 0; PlayerEx b = note.Player.B0; foreach (Variant con in b.Value.GetValueOrDefault<IList>("C")) { if (con.GetStringOrDefault("G") == UpID) UpCount += con.GetIntOrDefault("A"); } //可以镶嵌的宝石 IList MosaicNeed = gc.Value.GetValue<IList>("MosaicNeed"); List<string> bs = new List<string>(); foreach (string key in MosaicNeed) { GameConfig tmp = GameConfigAccess.Instance.FindOneById(key); if (tmp == null) continue; if (g.Value.GetIntOrDefault("Level") >= tmp.Value.GetIntOrDefault("Level")) { bs.Add(tmp.ID); } } if (bs.Count == 0) { note.Call(MosaicCommand.MosaicNeedR, false, TipManager.GetMessage(MosaicReturn.MosaicNoLet)); return; } Variant v = new Variant(); v.Add("BaoShiInfo", bs); v.Add("UpID", UpID); v.Add("UpCount", UpCount); note.Call(MosaicCommand.MosaicNeedR, true, v); }
/// <summary> /// 镶嵌,主要是将宝石镶嵌在装备上 /// </summary> /// <param name="note"></param> private void Mosaic(UserNote note) { //宝石等级不能超过装备等级,必须能够改造 string goodsid = note.GetString(0); //提升成功率的道具 int upcount = note.GetInt32(1); //镶在什么位置 string p = note.GetString(2); string baoshiid = note.GetString(3); int baoship = note.GetInt32(4);//宝石在包袱中的位置 string npcid = note.GetString(5); if (!note.Player.EffectActive(npcid, "")) return; Goods g = GoodsAccess.Instance.GetGoodsByID(goodsid, note.PlayerID); if (g == null) { note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicEquipNo)); return; } if (g.Value.GetIntOrDefault("IsChange") == 0) { note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicNoChange)); return; } List<GameConfig> mosaic = GameConfigAccess.Instance.Find("Mosaic"); GameConfig gc = null; foreach (GameConfig gcg in mosaic) { if (gcg.Value.GetStringOrDefault("Type") == g.Value.GetStringOrDefault("GoodsType")) { gc = gcg; break; } } if (gc == null) { note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicNoLet)); return; } //允许镶嵌的宝石列表 IList mosaicNeed = gc.Value.GetValue<IList>("MosaicNeed"); GameConfig baoshi = GameConfigAccess.Instance.FindOneById(baoshiid); if (baoshi == null) { note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicNoBaoShi)); return; } int baoShiLevel = baoshi.Value.GetIntOrDefault("Level"); //需用绑定游戏币数量 Variant price = g.Value.GetVariantOrDefault("Price"); Variant buy = price.GetVariantOrDefault("Buy"); if (!mosaicNeed.Contains(baoshi.ID)) { //不能够镶嵌该宝石 note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicNoLet)); return; } //得到物品所在孔的信息 Variant baoShiInfo = g.Value.GetVariantOrDefault("BaoShiInfo"); object o; if (!baoShiInfo.TryGetValueT(p, out o)) { note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicEquipNo)); return; } if ((string)o == "-1") { note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicNoPunch)); return; } GameConfig goods = null; if ((string)o != "0") { //表示想镶嵌的位置存在宝石 goods = GameConfigAccess.Instance.FindOneById((string)o); //表示该位置已经镶嵌宝石,但新宝石要求必须大于旧宝石 if (goods.Value.GetIntOrDefault("Level") >= baoShiLevel) { //新镶嵌的宝石等级要求大于旧宝石 note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicNewOrOld)); return; } } string upID = gc.Value.GetStringOrDefault("UpID"); GameConfig upGoods = GameConfigAccess.Instance.FindOneById(upID); if (upGoods == null) { note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicEquipNo)); return; } //GameConfig gcWin = ConfigAccess.Instance.FindOneById(g.GoodsID); //if (gcWin == null) // return; int score = Convert.ToInt32(baoShiLevel * GetPrice(g.GoodsID) * 0.2); if (note.Player.Score < score || (!note.Player.AddScore(-score, FinanceType.Mosaic))) { note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicNoScoreB)); return; } int upCount = 0; PlayerEx b = note.Player.B0; bool isBaoShi = false; IList c = b.Value.GetValue<IList>("C"); Variant vr = null; Variant zb = null; foreach (Variant con in c) { if (con.GetIntOrDefault("P") == baoship) { if (con.GetStringOrDefault("E") == baoshiid) { vr = con; //break; } else { note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicNoLet)); return; } } if (con.GetStringOrDefault("G") == upID) { upCount += con.GetIntOrDefault("A"); } if (zb == null) { if (con.GetStringOrDefault("E") == goodsid) { zb = con; } } } if (vr != null) { isBaoShi = true; } if (!isBaoShi) { note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicNoLet)); return; } if (upCount < upcount) { note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicNoLet)); return; } double lv = GetSuccessLv(baoShiLevel); if (upcount > 0) { lv += GoodsAccess.Instance.GetSuccess(upcount); } Variant us = new Variant(); if (upcount > 0) { //BurdenAccess.Remove(b, UpID, upcount); //移除提高成功率的道具 note.Player.RemoveGoods(upID, upcount, GoodsSource.Mosaic); us[upID] = upcount; } if (!note.Player.RemoveGoods(baoshiid, 1, GoodsSource.Mosaic)) { note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicNoBaoShi)); return; } //使用的宝石 us[baoshiid] = 1; bool isSuccess = NumberRandom.RandomHit(lv); if (isSuccess) { baoShiInfo[p] = baoshiid; b.Save(); g.Save(); note.Player.FinishNote(FinishCommand.XianQian, g.ID); note.Player.UpdateBurden(); note.Call(MosaicCommand.MosaicR, true, goodsid); } else { note.Player.UpdateBurden(); note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicFail)); } Variant os=new Variant(); os["IsSuccess"] = isSuccess; //装备唯一标识 os["ID"] = g.ID; os["GoodsID"] = g.GoodsID; os["Lv"] = lv; os["Score"] = -score; note.Player.AddLogVariant(Actiontype.Mosaic, us, null,os); }
/// <summary> /// 熔炼,主要是将装备销除得到新的道具和取下镶嵌的宝石,只能够选择一颗宝石 /// </summary> /// <param name="note"></param> private void Melt(UserNote note) { //熔练配置信息 //string id = note.GetString(0); //熔炼的道具 string goodsid = note.GetString(0); //选择宝石,-1表示没有选择 string baoshi = note.GetString(1); //熔炼的道具信息 Goods g = GoodsAccess.Instance.GetGoodsByID(goodsid, note.PlayerID); if (g == null) { note.Call(MeltCommand.MeltR, false, TipManager.GetMessage(MeltReturn.MeltEquipNo)); return; } //熔炼物品的绑定状态 int isBinding = g.Value.GetIntOrDefault("IsBinding"); if (g.Value.GetIntOrDefault("IsChange") == 0) { note.Call(MeltCommand.MeltR, false, TipManager.GetMessage(MeltReturn.MeltNoChange)); return; } if (g.Value.GetStringOrDefault("GoodsType").IndexOf("111") != 0) { note.Call(MeltCommand.MeltR, false, TipManager.GetMessage(MeltReturn.MeltEquipNo)); return; } Variant Price = g.Value.GetValueOrDefault<Variant>("Price"); Variant Buy = Price.GetValueOrDefault<Variant>("Buy"); double Score = Math.Round(Buy.GetIntOrDefault("Score") * 0.5); if (Score > note.Player.Score) { note.Call(MeltCommand.MeltR, false, TipManager.GetMessage(MeltReturn.MeltNoScoreB)); return; } string id = string.Empty; List<GameConfig> meltList = GameConfigAccess.Instance.Find("Split"); foreach (GameConfig gcs in meltList) { if ((int)gcs.Value["Level"] == g.Value.GetIntOrDefault("Level")) { //可以熔炼类型列表 IList ts = gcs.Value["Type"] as IList; foreach (Variant m in ts) { if (m.GetStringOrDefault("GoodsType") == g.Value.GetStringOrDefault("GoodsType")) { id = gcs.ID; break; } } } } //得到熔炼配置信息 GameConfig gc = GameConfigAccess.Instance.FindOneById(id); if (gc == null) { note.Call(MeltCommand.MeltR, false, TipManager.GetMessage(MeltReturn.MeltConfigError)); return; } //得到的道具 IList v = gc.Value.GetValue<IList>("GetGoods"); PlayerEx burden = note.Player.B0; IList c = burden.Value.GetValue<IList>("C"); //包袱空格数 int space = BurdenManager.BurdenSpace(c); //需要空格数 int count = baoshi == "-1" ? v.Count : v.Count + 1; if (count > space) { //表示包袱不能存放可得到的物品 note.Call(MeltCommand.MeltR, false, TipManager.GetMessage(MeltReturn.MeltBurdenFull)); return; } List<Variant> list = new List<Variant>(); Dictionary<string, PlayerEx> bus = new Dictionary<string, PlayerEx>(); Dictionary<string, int> numberList = new Dictionary<string, int>(); Dictionary<string, int> binds = new Dictionary<string, int>(); Variant tmp; foreach (Variant m in v) { //得到的物品 GameConfig getGoods = GameConfigAccess.Instance.FindOneById(m.GetStringOrDefault("GoodsID")); int a = BurdenManager.StactCount(getGoods); string name = "B0"; if (a == 0) { note.Call(MeltCommand.MeltR, false, TipManager.GetMessage(MeltReturn.MeltEquipError)); return; } PlayerEx b = note.Player.Value[name] as PlayerEx; if (!bus.ContainsKey(name)) bus.Add(name, b); if (!numberList.ContainsKey(getGoods.ID)) numberList.Add(getGoods.ID, m.GetIntOrDefault("Number")); else numberList[getGoods.ID] += m.GetIntOrDefault("Number"); if (!binds.ContainsKey(getGoods.ID)) binds.Add(getGoods.ID, isBinding); //TODO:得到的物品检查 tmp = new Variant(); tmp.Add("GoodsID", getGoods.ID); tmp.Add("Name", getGoods.Name); tmp.Add("Count", m.GetIntOrDefault("Number")); tmp.Add("IsGet", 1); list.Add(tmp); } if (baoshi != string.Empty) { GameConfig getBaoShi = GameConfigAccess.Instance.FindOneById(g.Value.GetVariantOrDefault("BaoShiInfo")[baoshi].ToString()); if (getBaoShi != null) { if (!bus.ContainsKey("B0")) { bus.Add("B0", note.Player.B0); } numberList.SetOrInc(getBaoShi.ID, 1); if (!binds.ContainsKey(getBaoShi.ID)) { binds.Add(getBaoShi.ID, isBinding); } } } if (BurdenManager.BurdenIsFull(bus, numberList, binds)) { note.Call(MeltCommand.MeltR, false, TipManager.GetMessage(MeltReturn.MeltBurdenFull)); return; } BurdenManager.TaskGoodsInsert(bus, numberList, binds, note.PlayerID); #region 移除熔炼的装备 foreach (Variant con in c) { if (con.GetStringOrDefault("E") == goodsid) { tmp = new Variant(); tmp.Add("GoodsID", g.GoodsID); tmp.Add("Name", g.Name); tmp.Add("Count", con.GetIntOrDefault("A")); tmp.Add("IsGet", 0);//0表示失去,1表示得到 list.Add(tmp); //g.Mode = 1; g.Save(); BurdenManager.BurdenClear(con); break; } } #endregion burden.Save(); note.Call(MeltCommand.MeltR, true, list); note.Player.UpdateBurden(); }
/// <summary> /// 得到道具熔炼配置信息[完成] /// </summary> /// <param name="note"></param> private void MeltInfo(UserNote note) { string goodsid = note.GetString(0); Goods g = GoodsAccess.Instance.FindOneById(goodsid); if (g == null) { note.Call(MeltCommand.MeltInfoR, false, TipManager.GetMessage(MeltReturn.MeltEquipNo)); return; } //不能改造 if (g.Value.GetIntOrDefault("IsChange") == 0) { note.Call(MeltCommand.MeltInfoR, false, TipManager.GetMessage(MeltReturn.MeltNoChange)); return; } //类型不正确 if (g.Value["GoodsType"].ToString().IndexOf("111") != 0) { note.Call(MeltCommand.MeltInfoR, false, TipManager.GetMessage(MeltReturn.MeltEquipNo)); return; } List<GameConfig> meltList = GameConfigAccess.Instance.Find("Split"); foreach (GameConfig gc in meltList) { if ((int)gc.Value["Level"] == (int)g.Value["Level"]) { //可以熔炼类型列表 IList ts = gc.Value["Type"] as IList; foreach (Variant m in ts) { if (m["GoodsType"].ToString() == g.Value["GoodsType"].ToString()) { Variant v = new Variant(); v.Add("ID", gc.ID); //得到当前装备宝石的信息-1表示没有打孔,0表示打孔没有镶嵌宝石,其它表示宝石ID v.Add("BaoShiInfo", g.Value.GetVariantOrDefault("BaoShiInfo")); //得到的可选道具列表 v.Add("GetGoods", gc.Value["GetGoods"]); //熔炼需要币=买价*0.5,绑定游戏币 Variant Price = g.Value["Price"] as Variant; Variant Buy = Price["Buy"] as Variant; v.Add("Score", Math.Round(Convert.ToInt32(Buy["Score"]) * 0.5)); note.Call(MeltCommand.MeltInfoR, true, v); return; } } } } note.Call(MeltCommand.MeltInfoR, false, TipManager.GetMessage(MeltReturn.MeltConfigError)); }
/// <summary> /// 得到社交用户列表信息 /// </summary> /// <param name="note"></param> public static void SocialList(UserNote note) { string name = note.GetString(0); PlayerEx soc = note.Player.Social; List<PlayerSimple> list = new List<PlayerSimple>(); if (soc != null && soc.Value != null) { IList ls = null; if (name == "Master" || name == "Apprentice") { Variant d = soc.Value.GetVariantOrDefault("Mentor"); if (d != null) ls = d[name] as IList; } else { ls = soc.Value[name] as IList; } if (ls != null && ls.Count != 0) { list = SocialBusiness.SocialInfo(ls); } } Variant tmp = new Variant(); tmp.Add(name, list); note.Call(SocialCommand.SocialListR, true, tmp); }
/// <summary> /// 好友分享 /// </summary> /// <param name="note"></param> public static void FriendShare(UserNote note) { string id = note.GetString(0); GameConfig gc = GameConfigAccess.Instance.FindOneById(id); if (gc == null) return; Variant v = gc.Value; if (v == null) return; PlayerEx effort = note.Player.Effort; IList share; if (effort.Value.TryGetValueT("Share", out share)) { //表示已经分享 if (share.Contains(gc.ID)) return; share.Add(gc.ID); } else { share = new List<string>() { gc.ID }; effort.Value.Add("Share", share); } if (!effort.Save()) return; int bond = v.GetIntOrDefault("Bond"); if (bond > 0) { note.Player.AddBond(bond, FinanceType.FriendShare, gc.ID); } note.Call(SocialCommand.FriendShareR, true, bond); }
/// <summary> /// 更新任务 /// </summary> /// <param name="note"></param> /// <param name="obj">要求更新的任务</param> public static void UpdateTask_1(UserNote note) { string id = note.GetString(0); Task task = TaskAccess.Instance.GetTaskInfo(id, note.PlayerID); if (task == null) { note.Call(TaskCommand.UpdateTaskR, false, TipManager.GetMessage(TaskReturn.TaskError)); return; } GameConfig gc = GameConfigAccess.Instance.FindTaskId(task.Value.GetStringOrDefault("TaskID")); if (gc == null) { note.Call(TaskCommand.UpdateTaskR, false, TipManager.GetMessage(TaskReturn.TaskError)); return; } FinishBusiness.UpdateFinishTask(note, gc, task); }
/// <summary> /// 登录成功得到任务列表 /// </summary> /// <param name="note"></param> public static void TaskList(UserNote note) { //新加载任务列表 TaskAccess.Instance.GetTaskList(note.PlayerID); //日常任务 TaskBusiness.DayTask(note.Player, false); //环式任务 TaskBusiness.LoopTask(note.Player, false, new List<int>() { 4, 6 }); //家族任务 TaskBusiness.FamilyTask(note.Player, false); //登录时不能发送给客户端 TaskBusiness.WeekTask(note.Player, "", false); List<Task> gs = TaskBusiness.TaskAPC(note); //得到角色任务列表 foreach (Task g in gs) { Variant v = g.Value; GameConfig gc = GameConfigAccess.Instance.FindTaskId(v.GetStringOrDefault("TaskID")); if (gc == null) continue; Variant d = TaskAccess.Instance.GetTaskInfo(g); if (d.GetIntOrDefault("Status") == 3) continue; note.Call(TaskCommand.PlayerTaskListR, d); } note.Call(TaskCommand.PlayerTaskListR, true); }
/// <summary> /// 采集任务 /// </summary> /// <param name="note"></param> public static void TaskCollect(UserNote note) { string taskid = note.GetString(0); string npcid = note.GetString(1); Npc npcinfo = NpcManager.Instance.FindOne(npcid); if (npcinfo == null) return; string goodsid = npcinfo.Value.GetStringOrDefault("GoodsID"); Task task = TaskAccess.Instance.GetTaskInfo(taskid, note.PlayerID); if (task == null) return; GameConfig gc = GameConfigAccess.Instance.FindTaskId(task.Value.GetStringOrDefault("TaskID")); if (gc == null) return; if (task.Value.GetIntOrDefault("Status") == 1) { IList finish = task.Value.GetValue<IList>("Finish"); //表示要已经接收 for (int i = 0; i < finish.Count; i++) { Variant v = finish[i] as Variant; if (v == null) continue; if (v.GetIntOrDefault("Type") != 10009) continue; if (FinishBusiness.TaskFinish10009(note, v, goodsid)) return; } for (int i = 0; i < finish.Count; i++) { Variant v = finish[i] as Variant; if (v == null) continue; if (v.GetIntOrDefault("Type") == 10004) { FinishBusiness.Task10004(note, v); } } bool ishave = true; foreach (Variant v in finish) { if (v.GetIntOrDefault("Total") != v.GetIntOrDefault("Cur")) { ishave = false; break; } } if (ishave) { task.Value["Status"] = 2; } task.Save(); note.Call(TaskCommand.UpdateTaskR, true, TaskAccess.Instance.GetTaskInfo(task)); TaskBusiness.TaskAPC(note); } }
/// <summary> /// 是否显示 /// </summary> /// <param name="note"></param> /// <param name="playerTaskID">任务ID</param> public static void IsShow(UserNote note, string playerTaskID) { Task task = TaskAccess.Instance.GetTaskInfo(playerTaskID, note.PlayerID); if (task == null) { note.Call(TaskCommand.IsShowR, false, TipManager.GetMessage(TaskReturn.TaskError)); return; } Variant v = task.Value; v["IsShow"] = v.GetIntOrDefault("IsShow") == 0 ? 1 : 0; note.Call(TaskCommand.IsShowR, true, task.ID, v.GetIntOrDefault("IsShow")); task.Save(); }
/// <summary> /// 任务奖励 /// </summary> /// <param name="note"></param> /// <param name="obj">任务奖励</param> public static void Award(UserNote note) { string soleid = note.PlayerID + "Award"; if (!m_dic.TryAdd(soleid, soleid)) { return; } try { string id = note.GetString(0); IList list = note[1] as IList; #region 奖励判断 //得到指定的任务 Task task = TaskAccess.Instance.GetTaskInfo(id, note.PlayerID); if (task == null) { note.Call(TaskCommand.AwardR, false, null, TipManager.GetMessage(TaskReturn.TaskError)); return; } //得到基本配置表 GameConfig gc = GameConfigAccess.Instance.FindTaskId(task.Value.GetStringOrDefault("TaskID")); if (gc == null) { note.Call(TaskCommand.AwardR, false, null, TipManager.GetMessage(TaskReturn.TaskError)); return; } IList npcInfo = gc.Value.GetValue<IList>("NPCBaseInfo"); if (npcInfo == null) return; Variant npc = null; foreach (Variant model in npcInfo) { if (model.GetIntOrDefault("Type") == 1) { npc = model; break; } } if (npc == null) { return; } string npcid = npc.GetStringOrDefault("NPCID"); if (!TaskBusiness.TaskNpcCheck(note.Player, TaskCommand.AwardR, npcid)) { note.Call(TaskCommand.AwardR, false, null, TipManager.GetMessage(TaskReturn.Npc3)); return; } //表示任务完成条件已经满足,可以领奖 if (task.Value.GetIntOrDefault("Status") != 2) { note.Call(TaskCommand.AwardR, false, null, TipManager.GetMessage(TaskReturn.TaskAwardFail)); return; } ///得到包袱列表 PlayerEx burden = note.Player.B0; ///物品绑定状态 Dictionary<string, int> isbinding = new Dictionary<string, int>(); IList finish = task.Value.GetValue<IList>("Finish"); bool isback = false; foreach (Variant f in finish) { if (f.GetStringOrDefault("Type") == "10004") { isback = true; break; } } //bool IsGoods = false; ///得到奖励条件 IList award = task.Value.GetValue<IList>("Award"); ///得到可选的奖励 List<Variant> fixAward = new List<Variant>(); List<string> select = new List<string>();//可选的奖励 int m = 0; int n = 0; foreach (Variant w in award) { int selectType = w.GetIntOrDefault("SelectType"); string awardID = w.GetStringOrDefault("AwardID"); if (selectType > 0) { //可选择奖励的数量 if (m == 0) m = selectType; select.Add(awardID); if (list.Contains(awardID)) { fixAward.Add(w); n++; } } else { fixAward.Add(w); } } if (m != n) { note.Call(TaskCommand.AwardR, false, null, TipManager.GetMessage(TaskReturn.SelectAwardError)); return; } bool noGoods = false;//非道具的情况 ///宠物 Dictionary<string, int> pets = new Dictionary<string, int>(); Dictionary<string, Variant> dic = new Dictionary<string, Variant>(); foreach (Variant fix in fixAward) { if (fix.GetStringOrDefault("Type") != "20002") { noGoods = true; continue; } string goodsid = fix.GetStringOrDefault("GoodsID"); int count = fix.GetIntOrDefault("Count"); if (fix.GetStringOrDefault("GoodsType") == "112009") { if (!pets.ContainsKey(goodsid)) { pets.Add(goodsid, count); } else { pets[goodsid] += count; } continue; } Variant tmp; if (dic.TryGetValue(goodsid, out tmp)) { tmp.SetOrInc("Number1", count); } else { tmp = new Variant(); tmp.Add("Number1", count); GameConfig gc1 = GameConfigAccess.Instance.FindOneById(goodsid); if (gc1 == null) continue; GoodsAccess.Instance.TimeLines(gc1, tmp); dic.Add(goodsid, tmp); } } if (dic.Count > 0) { if (BurdenManager.IsFullBurden(burden, dic)) { note.Call(TaskCommand.AwardR, false, null, TipManager.GetMessage(TaskReturn.BurdenFull)); return; } } #endregion #region 任务奖励处理 task.Value["Status"] = 3; if (!task.Save()) return; //领奖成功 note.Call(TaskCommand.AwardR, true, null, task.ID); int tasktype = task.Value.GetIntOrDefault("TaskType"); string taskid = task.Value.GetStringOrDefault("TaskID"); TaskType(note.Player, tasktype.ToString()); Variant gs = new Variant(); //得到物品奖励 if (dic.Count > 0) { Dictionary<string, int> info = note.Player.AddGoods(dic, GoodsSource.TaskAward); foreach (var item in info) { gs.SetOrInc(item.Key, item.Value); } } //得到宠物奖励 if (pets.Count > 0) { AwardBusiness.TaskAward112009(note, pets); } Variant us = new Variant(); //物品回收处理 if (isback) { us = FinishBusiness.TaskFinish10004(note, finish); } Variant os = new Variant(); //非道具的奖励 if (noGoods) { if (task.Value.GetIntOrDefault("TaskType") == 2) { os=AwardBusiness.TaskAward20001(note, award, true); } else { os=AwardBusiness.TaskAward20001(note, award); } } os["ID"] = task.ID; os["TaskID"] = taskid; os["TaskType"] = tasktype; string des = gc.Value.GetStringOrDefault("Description"); string[] msg = des.Split('|'); if (msg.Length > 3) AwardBusiness.TaskEmail(note, msg); #endregion #region 触发新的任务 switch (tasktype) { case 2: note.Player.AddAcivity(ActivityType.DayTask, 1); break; case 4: note.Player.AddAcivity(ActivityType.LoopTask, 1); break; } if (tasktype == 2) { TaskBusiness.DayTask(note.Player, true); } else if (tasktype == 7) { TaskBusiness.FamilyTask(note.Player, true); } else if (tasktype == 8) { TaskBusiness.WeekTask(note.Player, npcid, true); } else { List<string> reatTask = new List<string>(); string[] strs = gc.Value.GetStringOrDefault("RearTask").Split(','); for (int i = 0; i < strs.Length; i++) { if (string.IsNullOrEmpty(strs[i])) continue; reatTask.Add(strs[i]); } if (reatTask.Count > 0) { TaskFinishActivation(note, reatTask); } } #endregion #region 任务成就 note.Player.FinishNote(FinishCommand.TotalTask, taskid, tasktype); if (tasktype == 0 || tasktype == 1 || tasktype == 2 || tasktype == 8) { //移除主线任务,支线任务 TaskBusiness.MainTask(note.PlayerID, task.ID, tasktype); } #endregion note.Player.AddLogVariant(Actiontype.TaskAward, us, gs, os); } finally { m_dic.TryRemove(soleid, out soleid); } }
/// <summary> /// 放弃任务 /// </summary> /// <param name="note"></param> /// <param name="playerTaskID">放弃任务ID</param> public static void Giveup(UserNote note, string playerTaskID) { //得到指定的任务 Task task = TaskAccess.Instance.GetTaskInfo(playerTaskID, note.PlayerID); if (task == null) { note.Call(TaskCommand.GiveupR, false, TipManager.GetMessage(TaskReturn.TaskError)); return; } Variant v = task.Value; GameConfig gc = GameConfigAccess.Instance.FindTaskId(task.Value["TaskID"].ToString()); if (gc == null) { note.Call(TaskCommand.GiveupR, false, TipManager.GetMessage(TaskReturn.TaskError)); return; } Variant vc = gc.Value; int taskType = vc.GetIntOrDefault("TaskType"); if (taskType == 0 || taskType == 8) { note.Call(TaskCommand.GiveupR, false, TipManager.GetMessage(TaskReturn.TaskMainGiveup)); return; } if (v.GetIntOrDefault("Status") == 3) { note.Call(TaskCommand.GiveupR, false, TipManager.GetMessage(TaskReturn.TaskNoGiveup)); return; } if (FinishBusiness.TaskGiveup(note.Player, task)) return; TaskAccess.Instance.RemoveTask(note.PlayerID, task.ID); if (taskType != 2) { TaskFinishActivation(note, new List<string> { gc.ID }); TaskBusiness.TaskAPC(note); } else { //如果为日常任务,是否还可以接新的日常任务 TaskBusiness.DayTask(note.Player, true); } }
/// <summary> /// 获取单个技能的信息 /// </summary> /// <param name="note"></param> private void GetSkill(UserNote note) { string id = note.GetString(0); var skill = GameConfigAccess.Instance.FindOneById(id); note.Call(SkillCommand.GetSkillR, true, new GameConfigUI(skill)); }
private void PlayerLoginSuccess(UserNote note) { note.Call(PartCommand.PartsR, PartProxy.GetActiveParts()); }
/// <summary> /// 道具关联任务 /// </summary> /// <param name="note"></param> public static void GoodsTask(UserNote note) { List<Task> tasks = TaskAccess.Instance.GetTasks(note.PlayerID); //发生变化的道具 string goodsid = note.GetString(0); //得到指定道具的数量 int num = BurdenManager.GoodsCount(note.Player.B0, goodsid); for (int j = 0; j < tasks.Count; j++) { Task t = tasks[j] as Task; if (t == null) continue; IList finish = t.Value["Finish"] as IList; bool isChange = false; for (int i = 0; i < finish.Count; i++) { Variant f = finish[i] as Variant; int type = f.GetIntOrDefault("Type"); if (type == 10004 && f.GetStringOrDefault("GoodsID") == goodsid) { if (num >= f.GetIntOrDefault("Total")) { f["Cur"] = f.GetIntOrDefault("Total"); } else { f["Cur"] = num; } isChange = true; } if (type == 10003 && f.GetStringOrDefault("GoodsID") == goodsid) { if (num >= f.GetIntOrDefault("Total")) { f["Cur"] = f.GetIntOrDefault("Total"); } else { f["Cur"] = num; } isChange = true; } } //判断是否已经完成,true表示已经完成 if (isChange) { bool isfinish = true;//判断任务是否已经完成 foreach (Variant f in finish) { if (f.GetIntOrDefault("Total") != f.GetIntOrDefault("Cur")) { isfinish = false; break; } } t.Value["Status"] = isfinish ? 2 : 1; t.Save(); note.Call(TaskCommand.UpdateTaskR, true, TaskAccess.Instance.GetTaskInfo(t)); TaskBusiness.TaskAPC(note); } } }
/// <summary> /// 好友祝福 /// </summary> /// <param name="note"></param> public static void FriendsBless(UserNote note) { string soleid = note.PlayerID + "FriendsBless"; try { if (!m_dic.TryAdd(soleid, soleid)) return; string playerid = note.GetString(0); string goodsid = note.GetString(1); GameConfig gc = GameConfigAccess.Instance.FindOneById("BL_0001"); if (gc == null || gc.Value == null) { note.Call(SocialCommand.FriendsBlessR, false, TipManager.GetMessage(SocialReturn.FriendsBless1)); return; } Variant bless = gc.Value.GetValueOrDefault<Variant>("Bless"); Variant tmp = null; foreach (var k in bless) { string[] strs = k.Key.Split('-'); if (strs.Length < 2) { note.Call(SocialCommand.FriendsBlessR, false, TipManager.GetMessage(SocialReturn.FriendsBless1)); return; } int min = Convert.ToInt32(strs[0]); int max = Convert.ToInt32(strs[1]); if (note.Player.Level >= min && note.Player.Level <= max) { tmp = k.Value as Variant; break; } } if (tmp == null || (!tmp.ContainsKey(goodsid))) { note.Call(SocialCommand.FriendsBlessR, false, TipManager.GetMessage(SocialReturn.FriendsBless1)); return; } Variant goods = tmp.GetValueOrDefault<Variant>(goodsid); Dictionary<string, Variant> dic = new Dictionary<string, Variant>(); Variant vv = new Variant(); vv.Add("Number1", goods.GetIntOrDefault("Count")); dic.Add(goodsid, vv); if (BurdenManager.IsFullBurden(note.Player.B0, dic)) { note.Call(SocialCommand.FriendsBlessR, false, TipManager.GetMessage(SocialReturn.FriendsBless2)); return; } Variant beBless = gc.Value.GetValueOrDefault<Variant>("BeBless"); Variant beTmp = null; foreach (var k in beBless) { string[] strs = k.Key.Split('-'); if (strs.Length < 2) { note.Call(SocialCommand.FriendsBlessR, false, TipManager.GetMessage(SocialReturn.FriendsBless1)); return; } int min = Convert.ToInt32(strs[0]); int max = Convert.ToInt32(strs[1]); if (note.Player.Level >= min && note.Player.Level <= max) { beTmp = k.Value as Variant; break; } } if (beTmp == null) { note.Call(SocialCommand.FriendsBlessR, false, TipManager.GetMessage(SocialReturn.FriendsBless1)); return; } int mn = 0; string beGoods = BeBless(beTmp, out mn); if (string.IsNullOrEmpty(beGoods) || mn <= 0) { note.Call(SocialCommand.FriendsBlessR, false, TipManager.GetMessage(SocialReturn.FriendsBless1)); return; } GameConfig gc1 = GameConfigAccess.Instance.FindOneById(beGoods); if (gc1 == null) { note.Call(SocialCommand.FriendsBlessR, false, TipManager.GetMessage(SocialReturn.FriendsBless1)); return; } PlayerBusiness pb = PlayersProxy.FindPlayerByID(playerid); if (pb == null) { //"好友不存在"); note.Call(SocialCommand.FriendsBlessR, false, TipManager.GetMessage(SocialReturn.UserInfoError)); return; } PlayerEx ex; Variant v; if (!note.Player.Value.TryGetValueT("Bless", out ex)) { ex = new PlayerEx(note.PlayerID, "Bless"); v = new Variant(); v.Add("Total", 10);//允许祝福次数 v.Add("BlessList", null); ex.Value = v; //祝福时间 note.Player.Value.Add("Bless", ex); } v = ex.Value; Variant blessList = v.GetValueOrDefault<Variant>("BlessList"); if (blessList != null) { int count = 0;//今日祝福次数 foreach (DateTime k in blessList.Values) { if (k.ToLocalTime().Date == DateTime.Now.Date) count++; if (count >= v.GetIntOrDefault("Total")) { //"今日祝福次已经用完,每日最多能祝福好友10次" note.Call(SocialCommand.FriendsBlessR, false, TipManager.GetMessage(SocialReturn.FriendsBless3)); return; } } if (blessList.ContainsKey(playerid)) { DateTime blessDate = blessList.GetDateTimeOrDefault(playerid); if (blessDate.ToLocalTime().Date == DateTime.Now.Date) { //"每日同一好友只能祝福一次" note.Call(SocialCommand.FriendsBlessR, false, TipManager.GetMessage(SocialReturn.FriendsBless4)); return; } } } else { v["BlessList"] = new Variant(); blessList = v.GetValueOrDefault<Variant>("BlessList"); } string gid = "G_d000683"; if (!note.Player.RemoveGoods(gid, 1, GoodsSource.FriendsBless)) { //"你没有鲜花,无法祝福" note.Call(SocialCommand.FriendsBlessR, false, TipManager.GetMessage(SocialReturn.FriendsBless5)); return; } //更新祝福时间 blessList[playerid] = DateTime.UtcNow; ex.Save(); note.Player.AddGoods(dic, GoodsSource.FriendsBless); note.Player.AddAcivity(ActivityType.FriendsBless, 1); if (mn > 0) { Variant gs = new Variant(); gs.Add("G", beGoods); gs.Add("A", mn); gs.Add("E", beGoods); gs.Add("H", 1); List<Variant> goodsList = new List<Variant>(); goodsList.Add(gs); int reTime = Convert.ToInt32(TipManager.GetMessage(EmailReturn.HameDay)); //"因为你好友【" + note.Player.Name + "】对你的祝福,你获得了【" + gc1.Name+ "】,为了你们的友谊,你也快祝福祝福他吧!"; string msg = string.Format(TipManager.GetMessage(SocialReturn.FriendsBless6), note.Player.Name, gc1.Name); //if (EmailAccess.Instance.SendEmail("好友祝福", "系统邮件", pb.ID, pb.Name, msg, string.Empty, goodsList)) if (EmailAccess.Instance.SendEmail(TipManager.GetMessage(SocialReturn.FriendsBless7), TipManager.GetMessage(SocialReturn.FriendsBless8), pb.ID, pb.Name, msg, string.Empty, goodsList, reTime)) { if (pb.Online) { pb.Call(EmailCommand.NewEmailTotalR, EmailAccess.Instance.NewTotal(pb.ID)); pb.Call(SocialCommand.FriendsBlessR, true, note.Player.Name); } } } note.Call(ClientCommand.UpdateActorR, new PlayerExDetail(ex)); note.Call(SocialCommand.FriendsBlessR, true, TipManager.GetMessage(SocialReturn.FriendsBless9)); note.Player.FinishNote(FinishCommand.WishFriends); //日志记录 //note.Player.AddLog(Log.Actiontype.GoodsUse, gid, 1, GoodsSource.FriendsBless, "", 0); } finally { m_dic.TryRemove(soleid, out soleid); } }