/// <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 DelEnemy(UserNote note) { string playerid = note.GetString(0); PlayerEx Social = note.Player.Social; IList Enemy = Social.Value.GetValue<IList>("Enemy"); if (Enemy != null) { Variant msg = null; foreach (Variant d in Enemy) { if (d.GetStringOrDefault("PlayerID") == playerid) { msg = d; break; } } if (msg != null) { ///移除成功 Enemy.Remove(msg); Social.Save(); } } Variant v = new Variant(); v.Add("ID",playerid); note.Call(SocialCommand.DelEnemyR, true, v); }
/// <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> private void IntoBattle(UserNote note) { List<PlayerBusiness> players = FightBase.GetPlayers(note.Player); FightObject[] teamA = FightBase.CreateFightPlayers(players); FightType fType = (FightType)(note.GetInt32(0)); FightObject[] teamB = FightBase.CreateApcTeam(players, fType, note[1]); string npcID = note.GetString(2); if (players.Count == 0 || teamB.Length == 0) { foreach (var v in players) { v.SetActionState(ActionState.Standing); } return; } bool isEctype = (note.Player.Scene is SceneEctype || note.Player.Scene is SceneSubEctype); FightBusiness fb; if (fType == FightType.SceneAPC) { //打明怪 SceneApc sab = note.GetValue<SceneApc>(3); int subID = note.GetInt32(4); fb = new FightSceneApc(teamA, teamB, players, npcID, isEctype, sab, subID); } else if (fType == FightType.RobAPC) { SceneApc sab = note.GetValue<SceneApc>(3); int subID = note.GetInt32(4); RobBusiness rb = note.GetValue<RobBusiness>(5); fb = new FightBusinessRobApc(teamA, teamB, players, npcID, isEctype, sab, subID, rb); } else if (fType == FightType.ProAPC) { //守护战争明怪 SceneApc sab = note.GetValue<SceneApc>(3); int subID = note.GetInt32(4); PartBusiness pb = note.GetValue<PartBusiness>(5); fb = new FightBusinessProApc(teamA, teamB, players, npcID, isEctype, sab, subID, pb); } else { fb = new FightBusiness(teamA, teamB, players, npcID, isEctype); } foreach (var player in players) { player.Fight = fb; } fb.SendToClinet(FightCommand.StartFight, (int)fType, teamA, teamB); fb.Start(); }
/// <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 bool CreateTeam(UserNote note) { PlayerBusiness player = note.Player; if (player.Team != null) { //已有队伍 player.Call(TeamCommand.CreateTeamR, false, TipManager.GetMessage(ClientReturn.TeamsMediator1)); return false; } PlayerTeam team = new PlayerTeam(player); if (team.Captain == player) { team.Icon = note.GetString(0); team.Explain = note.GetString(1); if (m_teams.TryAdd(team.TeamID, team)) { player.CallAll(TeamCommand.CreateTeamR, true, team); return true; } } return false; }
/// <summary> /// 移交队长 /// </summary> /// <param name="note"></param> /// <param name="team"></param> private void ChangeManager(UserNote note, PlayerTeam team) { string teamID = team.TeamID; string newCaptainID = note.GetString(0); PlayerBusiness newCaptain = team.TransferCaptain(newCaptainID); if (newCaptain != null) { //通知 var buffer = AmfCodec.Encode(TeamCommand.ChangeManagerR, new object[] { teamID, newCaptainID }); team.Captain.CallAll(buffer); team.CallAway(buffer, note.Player.SceneID); } }
/// <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); }
/// <summary> /// 请求切磋 /// </summary> /// <param name="note"></param> protected void FightCC(UserNote note) { PlayerBusiness player = note.Player; if (player.AState == ActionState.Fight || player.TeamJob == TeamJob.Member) { return; } string pkID = note.GetString(0); PlayerBusiness b; if (m_players.TryGetValue(pkID, out b)) { if (b.Fight != null) return; b.Call(FightCommand.FightCCR, note.PlayerID); } }
/// <summary> /// 强制PK /// </summary> /// <param name="note"></param> protected virtual void FightPK(UserNote note) { if (m_fightType == FightType.NotPK) { return; } PlayerBusiness player = note.Player; if (player.AState == ActionState.Fight || player.RedName || player.TeamJob == TeamJob.Member) { return; } string pkID = note.GetString(0); PlayerBusiness b; if (m_players.TryGetValue(pkID, out b)) { if (b.Fight != null) { return; } if (player.Team != null && player.Team == b.Team) { return; } DateTime now = DateTime.UtcNow; //PK保护时间 if (m_fightType == FightType.PK) { if (player.GetPKProtect() > now) { player.Call(ClientCommand.SendActivtyR, new object[] { "T01", TipManager.GetMessage(ClientReturn.PKProtect) }); return; } if (b.LastPK > now || b.GetPKProtect() > now) { player.Call(ClientCommand.SendActivtyR, new object[] { "T01", TipManager.GetMessage(ClientReturn.PKProtect) }); return; } } player.FightTime = DateTime.UtcNow; UserNote note2 = new UserNote(note, FightCommand.IntoBattlePK, new object[] { m_fightType, b }); Notifier.Instance.Publish(note2); } }
/// <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> /// <param name="team"></param> private void KillMember(UserNote note, PlayerTeam team) { string memberID = note.GetString(0); PlayerBusiness memeber = team.RemoveMember(memberID); if (memeber != null) { var buffer = AmfCodec.Encode(TeamCommand.OutTeamR, new object[] { true, team.TeamID, memberID, memeber.Name, null }); team.Captain.CallAll(buffer); //通知其它场景上的用户 team.CallAway(buffer, note.Player.SceneID); var t = memeber.TeamInstance; if (t != null) { t.Exit(memeber, true); } } }
void OpenBox(UserNote note) { BoxBusiness box; if (!BoxProxy.TryGetBox(note.GetString(0), out box)) { return; } PlayerBusiness player = note.Player; bool open = box.OpenBox(player); if (open) { //更新 box.Reset(); List<BoxBusiness> boxs = BoxProxy.GetSceneBox(player.SceneID); player.Scene.CallAll(player.ShowID, ClientCommand.RefreshBoxR, new object[] { player.SceneID, boxs }); //守护战争开启宝箱 ScenePro sp = player.Scene as ScenePro; if (sp != null) { PlayersProxy.CallAll(ActivityCommand.OpenChestR, new object[] { note.Player.Name }); } } }
/// <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> /// <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 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="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> 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 FriendsApply(UserNote note) { string name = note.GetString(0); PlayerBusiness player = PlayersProxy.FindPlayerByName(name); if (player == null) { note.Call(SocialCommand.FriendsApplyR, false, TipManager.GetMessage(SocialReturn.UserInfoError), string.Empty); return; } if (!CheckFriends(note.Player, player, SocialCommand.FriendsApplyR, 0)) { return; } //"等待【" + name + "】回复" note.Call(SocialCommand.FriendsApplyR, true, string.Format(TipManager.GetMessage(SocialReturn.FriendsApply), name), note.PlayerID); player.Call(SocialCommand.FriendsApplyR, true, note.Player.Name, note.PlayerID); }
/// <summary> /// 得到申请回应 /// </summary> /// <param name="note"></param> public static void FriendsBack(UserNote note) { string id = note.GetString(0); bool isagree = note.GetBoolean(1); PlayerBusiness pb = PlayersProxy.FindPlayerByID(id); if (!isagree) { pb.Call(SocialCommand.FriendsBackR, false, string.Format(TipManager.GetMessage(SocialReturn.FriendsBack1), note.Player.Name)); //"【" + note.Player.Name + "】拒绝加你为好友", ""); return; } if (!CheckFriends(note.Player, pb, SocialCommand.FriendsBackR, 1)) return; Variant v = new Variant(); v.Add("PlayerID", pb.ID); v.Add("Created", DateTime.UtcNow); PlayerEx social = note.Player.Social; IList enemy = social.Value.GetValue<IList>("Friends"); int m = 0; int n = 0; if (enemy != null) { enemy.Add(v); m = enemy.Count; } else { social.Value["Friends"] = new List<Variant>() { v }; m = 1; } Variant tmp = new Variant(); tmp.Add("PlayerID", note.PlayerID); tmp.Add("Created", DateTime.UtcNow); PlayerEx social1 = pb.Social; IList enemy1 = social1.Value.GetValue<IList>("Friends"); if (enemy1 != null) { enemy1.Add(tmp); n = enemy1.Count; } else { social1.Value["Friends"] = new List<Variant>() { tmp }; n = 1; } social.Save(); social1.Save(); //"【" + note.Player.Name + "】与你成为好友,愿你们友谊在石器宝贝中长存" pb.Call(SocialCommand.FriendsBackR, true, string.Format(TipManager.GetMessage(SocialReturn.FriendsBack2), note.Player.Name), string.Empty); //"【" + user.Name + "】与你成为好友,愿你们友谊在石器宝贝中长存" note.Call(SocialCommand.FriendsBackR, true, string.Format(TipManager.GetMessage(SocialReturn.FriendsBack3), pb.Name), string.Empty); note.Player.FinishNote(FinishCommand.Friends, m); pb.FinishNote(FinishCommand.Friends, n); }
/// <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 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> 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); } }
/// <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(); }
/// <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); }
private void LoadSkill(UserNote note) { try { string skillID = note.GetString(0); string path = System.AppDomain.CurrentDomain.BaseDirectory; path = Path.Combine(ConfigLoader.Config.DirGame, "Skill", skillID); if (File.Exists(path)) { using (FileStream fs = File.OpenRead(path)) { byte[] key = new byte[fs.Length]; fs.Read(key, 0, key.Length); note.Session.SendAsync(key); note.Session.Close(); } } } catch { } }
/// <summary> /// 队长返回请求结果 /// </summary> /// <param name="note"></param> private void ReplyApply(UserNote note, PlayerTeam team) { bool reply = note.GetBoolean(0); string memberID = note.GetString(1); int check = note.GetInt32(2); PlayerBusiness member; if (note.Player.Scene.TryGetPlayer(memberID, out member)) { if (member.GetHashCode() == check) { if (reply) { if (team.TryAddMember(member)) { var members = team.AllPlayerDetail; member.Call(TeamCommand.IntoTeamR, true, new object[] { team, members }); note.Player.CallAllExcludeOne(member, TeamCommand.NewMemberR, team.TeamID, new PlayerDetail(member)); return; } } else //不同意 { //对方拒绝了你的入队请求 member.Call(TeamCommand.IntoTeamR, false, TipManager.GetMessage(ClientReturn.ReplyApply1)); } } } }