private void AllUseGoods(UserNote note) { //商品的使用 Variant package = BurdenManager.BurdenPlace(note.Player.B0, note.GetInt32(0)); if (package == null) return; string goodsid = package.GetStringOrDefault("E"); if (goodsid == null) return; GameConfig gc = GameConfigAccess.Instance.FindOneById(goodsid); if (gc == null) return; UseGoods(note, package, gc, true); }
/// <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> private void FightEctypeApc(UserNote note) { PlayerBusiness player = note.Player; TeamInstanceBusiness eb = player.TeamInstance; if (eb == null || player.AState == ActionState.Fight || (player.TeamJob == TeamJob.Member)) { return; } int index = note.GetInt32(0); if (!eb.CheckBatch(index)) { //提示 return; } const FightType ft = FightType.EctypeApc; EctypeApc apc = eb.CurrentApcs[index]; List<PlayerBusiness> players = FightBase.GetPlayers(note.Player); FightObject[] teamA = FightBase.CreateFightPlayers(players); FightObject[] teamB = FightBase.CreateApcTeam(players, ft, apc.Apc); if (teamB.Length == 0 || eb.Astate != ActionState.Standing) { foreach (var v in players) { v.SetActionState(ActionState.Standing); } return; } FightBusinessEctype fb = new FightBusinessEctype(teamA, teamB, players, eb, apc); foreach (var item in players) { item.Fight = fb; } fb.SendToClinet(FightCommand.StartFight, (int)ft, teamA, teamB); fb.Start(); }
/// <summary> /// 竞价 /// </summary> public static void AuctionBid(UserNote note) { string auctionid = note.GetString(0); int BidPrice = note.GetInt32(1);//竞价 string npcid = note.GetString(2);//NPC if (!note.Player.EffectActive(npcid, "")) return; if (note.Player.Score < BidPrice) { note.Call(AuctionCommand.AuctionBidR, false, TipManager.GetMessage(AuctionReturn.NoScore)); //游戏不足 return; } Auction auction = AuctionAccess.Instance.FindOne(auctionid); if (auction == null) { //物口不存在 note.Call(AuctionCommand.AuctionBidR, false, TipManager.GetMessage(AuctionReturn.NoGoods)); return; } string soleid = auctionid + note.Name; if (!m_dic.TryAdd(soleid, soleid)) return; try { if (auction.Value.GetIntOrDefault("Status") != 0) { note.Call(AuctionCommand.AuctionBidR, false, TipManager.GetMessage(AuctionReturn.IsSell)); return; } DateTime dt = DateTime.UtcNow; DateTime EndTime; if (!DateTime.TryParse(auction.Value.GetStringOrEmpty("EndTime"), out EndTime)) { note.Call(AuctionCommand.AuctionBidR, false, TipManager.GetMessage(AuctionReturn.Expired)); return; } if (EndTime < dt) { //过期物品不能竞拍 note.Call(AuctionCommand.AuctionBidR, false, TipManager.GetMessage(AuctionReturn.Expired)); return; } int price = auction.Value.GetIntOrDefault("Price");//一口价 if (price > 0 && BidPrice > price) { note.Call(AuctionCommand.AuctionBidR, false, TipManager.GetMessage(AuctionReturn.MorePrice)); return; } else if (price > 0 && BidPrice == price) { //一口价操作 UserNote n = new UserNote(note, AuctionCommand.AuctionBuy, new object[] { auction.ID }); Notifier.Instance.Publish(n); return; } int bidPrice = auction.Value.GetIntOrDefault("BidPrice"); if (string.IsNullOrEmpty(auction.Value.GetStringOrEmpty("BidderID"))) { if (bidPrice > BidPrice) { note.Call(AuctionCommand.AuctionBidR, false, TipManager.GetMessage(AuctionReturn.LossStartPrice)); return; } } else { if (bidPrice >= BidPrice) { //竞拍价格太底 note.Call(AuctionCommand.AuctionBidR, false, TipManager.GetMessage(AuctionReturn.NoBidPrice)); return; } } if (!note.Player.AddScore(-BidPrice, FinanceType.AuctionBid)) { note.Call(AuctionCommand.AuctionBidR, false, TipManager.GetMessage(AuctionReturn.MorePrice)); return; } if (auction.Value.GetStringOrEmpty("BidderID") != string.Empty) { //竞购失败 Dictionary<string, object> bidFail = new Dictionary<string, object>(); bidFail.Add("GoodsName", auction.Name); bidFail.Add("Name", auction.Value.GetStringOrDefault("BidName")); bidFail.Add("Score", bidPrice.ToString()); PlayerBusiness BidOnLine = PlayersProxy.FindPlayerByID(auction.Value.GetStringOrDefault("BidderID")); AuctionEmail.SendAuctionEmail(bidFail, AuctionEmail.BidFail, auction.ID, BidOnLine.ID, BidOnLine.Name, bidPrice, 0, null); if (BidOnLine != null && BidOnLine.Online) { BidOnLine.Call(EmailCommand.NewEmailTotalR, EmailAccess.Instance.NewTotal(auction.Value.GetStringOrDefault("BidderID"))); } } auction.Value["BidderID"] = note.PlayerID; auction.Value["BidPrice"] = BidPrice; auction.Value["BidName"] = note.Player.Name; auction.Value["BidTime"] = dt; auction.Save(); note.Call(AuctionCommand.AuctionBidR, true, TipManager.GetMessage(AuctionReturn.BidSuccess)); } finally { string n; m_dic.TryRemove(soleid, out n); } }
/// <summary> /// 购买商城产品 /// </summary> /// <param name="note"></param> private void BuyMallGoods(UserNote note) { //买的道具ID string id = note.GetString(0); //数量 int number = note.GetInt32(1); //货币类型 string cointype = note.GetString(2); //是否通过GM上下架检查 if (ServerManager.IsMall) { //物品没有上架 if (!MallAccess.HS.Contains(id)) { note.Call(MallCommand.BuyMallGoodsR, false, TipManager.GetMessage(MallReturn.MallDown)); return; } } GameConfig gc = GameConfigAccess.Instance.FindOneById(id); if (gc == null) { note.Call(MallCommand.BuyMallGoodsR, false, TipManager.GetMessage(MallReturn.MallGoodsNo)); return; } Variant v = gc.Value; DateTime dt = DateTime.UtcNow; string upDate = v.GetStringOrDefault("UpDate"); //上架时间 if (!string.IsNullOrEmpty(upDate)) { DateTime update = v.GetDateTimeOrDefault("UpDate").ToUniversalTime(); if (dt < update) { note.Call(MallCommand.BuyMallGoodsR, false, TipManager.GetMessage(MallReturn.MallUp)); return; } } string downDate = v.GetStringOrDefault("DownDate"); //下架时间 if (!string.IsNullOrEmpty(downDate)) { DateTime endDate = v.GetDateTimeOrDefault("DownDate").ToUniversalTime(); if (endDate < dt) { note.Call(MallCommand.BuyMallGoodsR, false, TipManager.GetMessage(MallReturn.MallDown)); return; } } string goodsid = v.GetStringOrDefault("GoodsID"); int count = v.GetIntOrDefault("Number"); GameConfig gid = GameConfigAccess.Instance.FindOneById(goodsid); if (gid == null) { note.Call(MallCommand.BuyMallGoodsR, false, TipManager.GetMessage(MallReturn.MallGoodsNo)); return; } if (gc.SubType == "ShiZhuang") { PlayerEx wx = note.Player.Wardrobe; Variant wv = wx.Value; IList wl = wv.GetValue<IList>("WardrobeList"); if (wl != null) { if (wl.Contains(goodsid)) { note.Call(MallCommand.BuyMallGoodsR, false, TipManager.GetMessage(MallReturn.NoRepeat)); return; } } Variant limit = gid.Value.GetVariantOrDefault("UserLimit"); if (limit != null) { if (limit.ContainsKey("Sex")) { int sex = Convert.ToInt32(limit["Sex"]); if (sex != 2 && sex != note.Player.Sex) { note.Call(MallCommand.BuyMallGoodsR, false, TipManager.GetMessage(MallReturn.NoSex)); return; } } } //需要晶币 int coin = gc.Value.GetIntOrDefault("ZCoin"); if (note.Player.Coin < coin) { note.Call(MallCommand.BuyMallGoodsR, false, TipManager.GetMessage(MallReturn.MallCoinNo)); return; } if (!note.Player.AddCoin(-coin, FinanceType.MallBuy, id)) { note.Call(MallCommand.BuyMallGoodsR, false, TipManager.GetMessage(MallReturn.MallCoinNo)); return; } int n = 0; if (wl != null) { wl.Add(goodsid); n = wl.Count; } else { wv["WardrobeList"] = new List<string>() { goodsid }; n = 1; } if (!wx.Save()) { note.Call(MallCommand.BuyMallGoodsR, false, TipManager.GetMessage(MallReturn.MallSuccess)); return; } note.Call(ClientCommand.UpdateActorR, new PlayerExDetail(wx)); note.Call(MallCommand.BuyMallGoodsR, true, TipManager.GetMessage(MallReturn.MallSuccess)); //购买时装日志 Variant os = new Variant(); os["IsMode"] = 0; os["ShiZhuang"] = goodsid; os["Coin"] = -coin; note.Player.AddLogVariant(Actiontype.MallShiZhuang, null, null, os); note.Player.FinishNote(FinishCommand.Wardrobe, n); note.Player.AddLog(Actiontype.MallShiZhuang, goodsid, 1, GoodsSource.MallCoin, id, coin); return; } int sc = BurdenManager.StactCount(gid); if (sc <= 0) { note.Call(MallCommand.BuyMallGoodsR, false, TipManager.GetMessage(MallReturn.MallGoodsNo)); return; } int isbinding = gc.Value.GetIntOrDefault("IsBinding"); int zcoin = 0; PlayerEx burden = note.Player.B0; Dictionary<string, Variant> dic = new Dictionary<string, Variant>(); Variant t = new Variant(); if (cointype == "Coin") { //拆扣晶币 zcoin = gc.Value.GetIntOrDefault("ZCoin"); t.Add("Number" + isbinding, number * count); } else if (cointype == "Bond") { zcoin = gc.Value.GetIntOrDefault("ZBond"); t.Add("Number" + isbinding, number * count); } else if (cointype == "FightValue") { zcoin = gc.Value.GetIntOrDefault("ZFightValue"); t.Add("Number" + isbinding, number * count); } //需要晶币/点券的总量 int cost = zcoin * number; if (cost <= 0 || number <= 0 || zcoin <= 0) { note.Call(MallCommand.BuyMallGoodsR, false, TipManager.GetMessage(MallReturn.MallCoinTypeNo)); return; } GoodsAccess.Instance.TimeLines(gid, t); dic.Add(goodsid, t); if (BurdenManager.IsFullBurden(burden, dic)) { note.Call(MallCommand.BuyMallGoodsR, false, TipManager.GetMessage(MallReturn.BurdenFull)); return; } GoodsSource gs; if (cointype == "Coin") { if (note.Player.Coin < cost || (!note.Player.AddCoin(-cost, FinanceType.MallBuy, id))) { note.Call(MallCommand.BuyMallGoodsR, false, TipManager.GetMessage(MallReturn.MallCoinNo)); return; } gs = GoodsSource.MallCoin; } else if (cointype == "Bond") { if (note.Player.Bond < cost || (!note.Player.AddBond(-cost, FinanceType.MallBuy, id))) { note.Call(MallCommand.BuyMallGoodsR, false, TipManager.GetMessage(MallReturn.MallBondNo)); return; } gs = GoodsSource.MallBond; } else if (cointype == "FightValue") { if (note.Player.FightValue < cost || (!note.Player.AddFightValue(-cost, true, FinanceType.MallBuy, id))) { note.Call(MallCommand.BuyMallGoodsR, false, TipManager.GetMessage(MallReturn.MallCoinNo)); return; } gs = GoodsSource.MallFightValue; } else { note.Call(MallCommand.BuyMallGoodsR, false, TipManager.GetMessage(MallReturn.MallGoodsNo)); return; } //购买成功,发送道具 note.Player.AddGoods(dic, gs, gc.ID, cost); note.Call(MallCommand.BuyMallGoodsR, true, TipManager.GetMessage(MallReturn.MallSuccess)); }
/// <summary> /// 更新显示信息 /// </summary> /// <param name="note"></param> private void SaveShowInfo(UserNote note) { int showInfo = note.GetInt32(0); note.Player.ShowInfo = showInfo; PlayerAccess.Instance.SaveValue(note.Player.PID, "ShowInfo", showInfo); }
/// <summary> /// 晶币变化 /// </summary> /// <param name="note"></param> public static void ConsumeCoin(UserNote note) { PlayerEx ex = note.Player.Social; if (ex == null) return; Variant m = ex.Value.GetValueOrDefault<Variant>("Mentor"); if (m == null) return; IList master = m.GetValue<IList>("Master"); if (master == null || master.Count <= 0) return; Variant v = master[0] as Variant; if (v == null) return; PlayerBusiness pb = PlayersProxy.FindPlayerByID(v.GetStringOrDefault("PlayerID")); if (pb == null) return; int coin = note.GetInt32(0); FinanceType ft = note.GetValue<FinanceType>(1); int bond = 0;//得到 int owe = 0; if (coin < 0) { if (note.Player.Level > 39) { //高徒 bond = Convert.ToInt32(Math.Ceiling(-coin * 0.05)); } else { //学徒 bond = Convert.ToInt32(Math.Ceiling(-coin * 0.1)); } owe = Convert.ToInt32(Math.Ceiling(-coin * 0.5)); } int reTime = Convert.ToInt32(TipManager.GetMessage(EmailReturn.HameDay)); if (bond > 0) { if (pb.AddBond(bond, FinanceType.ConsumeCoin)) { string msg = string.Format(TipManager.GetMessage(SocialReturn.ConsumeCoin1), note.Player.Name, bond); //"你的徒弟【" + note.Player.Name + "】消费晶币,为感谢师傅的栽培,为师傅送上了【" + bond + "】点劵"; //徒弟消费奖励点劵 if (EmailAccess.Instance.SendEmail(TipManager.GetMessage(SocialReturn.ConsumeCoin2), TipManager.GetMessage(SocialReturn.FriendsBless8), pb.ID, pb.Name, msg, string.Empty, null, reTime)) { if (pb.Online) { pb.Call(EmailCommand.NewEmailTotalR, EmailAccess.Instance.NewTotal(pb.ID)); } } } } if (owe > 0) { if (pb.AddOwe(owe, FinanceType.ConsumeCoin)) { string msg = string.Format(TipManager.GetMessage(SocialReturn.ConsumeCoin3), owe); // "你获得了【" + owe + "】点感恩值"; //徒弟消费奖励感恩值 if (EmailAccess.Instance.SendEmail(TipManager.GetMessage(SocialReturn.ConsumeCoin4), TipManager.GetMessage(SocialReturn.FriendsBless8), pb.ID, pb.Name, msg, string.Empty, null, reTime)) { if (pb.Online) { pb.Call(EmailCommand.NewEmailTotalR, EmailAccess.Instance.NewTotal(pb.ID)); pb.Call(ClientCommand.SendActivtyR, new object[] { "T02", msg }); } } } } //晶币消费总量 //long gce = note.Player.GCE; }
/// <summary> /// 家园生产 /// </summary> /// <param name="note"></param> public static void HomeProduce(UserNote note) { string soleid = note.PlayerID + "HomeProduce"; if (!m_dic.TryAdd(soleid, soleid)) return; try { string id = note.GetString(0); int number = note.GetInt32(1); string npcid = note.GetString(2);//NPC if (!note.Player.EffectActive(npcid, "")) return; //要生产的道具数量 GameConfig gc = GameConfigAccess.Instance.FindOneById(id); if (gc == null) { note.Call(HomeCommand.HomeProduceR, false, TipManager.GetMessage(HomeReturn.PareError)); return; } string subType = gc.SubType; PlayerEx home = note.Player.Home; if (home == null) { note.Call(HomeCommand.HomeProduceR, false, TipManager.GetMessage(HomeReturn.NoHome)); return; } Variant hv = home.Value; //得到需要的道具数量,计算出当前可以生产道具的数量 Variant produces = hv.GetValueOrDefault<Variant>("Produces"); if (produces == null) { note.Call(HomeCommand.HomeProduceR, false, TipManager.GetMessage(HomeReturn.PareError)); return; } Variant v = produces.GetValueOrDefault<Variant>(subType); if (v == null) { note.Call(HomeCommand.HomeProduceR, false, TipManager.GetMessage(HomeReturn.PareError)); return; } IList petList = v.GetValue<IList>("PetList"); if (petList.Count == 0) { note.Call(HomeCommand.HomeProduceR, false, TipManager.GetMessage(HomeReturn.InPet)); return; } int yaoJi = 0; int juanZhou = 0; int sheJi = 0; int jiaGong = 0; int caiJi = 0; int jiazhengtotal = 0;//宠物家政值总数 Dictionary<string, Pet> producePet = new Dictionary<string, Pet>(); foreach (Variant d in petList) { yaoJi += d.GetIntOrDefault("YaoJi"); juanZhou += d.GetIntOrDefault("JuanZhou"); sheJi += d.GetIntOrDefault("SheJi"); jiaGong += d.GetIntOrDefault("JiaGong"); caiJi += d.GetIntOrDefault("CaiJi"); } jiazhengtotal = yaoJi + juanZhou + jiaGong + caiJi; Dictionary<string, int> dic = new Dictionary<string, int>(); dic.Add("YaoJi", yaoJi); dic.Add("JuanZhou", juanZhou); dic.Add("SheJi", sheJi); dic.Add("JiaGong", jiaGong); dic.Add("CaiJi", caiJi); //目标道具 string goodsid = gc.Value.GetStringOrDefault("GoodsID"); //生产所需时间,秒钟 int produceTime = gc.Value.GetIntOrDefault("ProduceTime"); //所需家政信息 Variant homeInfo = gc.Value.GetValueOrDefault<Variant>("HomeValue"); //所需家政信息 DateTime dt = DateTime.UtcNow; DateTime endTime = dt.AddSeconds(number * produceTime); Variant mv = MemberAccess.MemberInfo(note.Player.MLevel); //生产队列数 int qc = 3 + mv.GetIntOrDefault("Produce"); IList list; if (v.TryGetValueT("QueueList", out list)) { //生产对列 for (int i = 0; i < list.Count; i++) { } } else { //表示可以生产 v.Add("QueueList", new List<DateTime> { endTime }); } } finally { m_dic.TryRemove(soleid, out soleid); } }
/// <summary> /// 包袱或仓库扩展[还要求判断是否要求晶币消费] /// </summary> /// <param name="note"></param> /// <param name="exname">包袱或仓库名</param> /// <param name="count">扩展数量</param> private void BurdenExtend(UserNote note) { PlayerEx burden = note.Player.B1; if (burden != null) { Variant v = burden.Value; //最大值 int max = v.GetIntOrDefault("Max"); //当前数量 int cur = v.GetIntOrDefault("Cur"); if (cur >= max) { note.Call(BurdenCommand.BurdenExtendR, false, TipManager.GetMessage(BurdenReturn.BurdenMaxEx)); return; } int number = note.GetInt32(0); string goodsid = ""; double lv = GameConfigAccess.Instance.FindExtend(ExtendType.B1, cur.ToString(), out number, out goodsid); if (string.IsNullOrEmpty(goodsid) || number <= 0) { note.Call(PetsCommand.ShockSkillR, false, TipManager.GetMessage(ExtendReturn.B12)); return; } if (!note.Player.RemoveGoods(goodsid, number, GoodsSource.BurdenExtend)) { note.Call(PetsCommand.ShockSkillR, false, TipManager.GetMessage(ExtendReturn.B12)); return; } note.Player.UpdateBurden(); if (NumberRandom.RandomHit(lv)) { v["Cur"] = cur + 7; IList c = v.GetValue<IList>("C"); for (int i = cur; i < cur + 7; i++) { Variant d = new Variant(); d["P"] = i; d["E"] = ""; d["G"] = ""; d["A"] = 0; d["S"] = 0; d["H"] = 0; d["D"] = 0; d["T"] = null; c.Add(d); } burden.Save(); note.Call(BurdenCommand.BurdenExtendR, true, TipManager.GetMessage(BurdenReturn.Success)); note.Player.FinishNote(FinishCommand.ExtendLib); } else { note.Call(PetsCommand.ShockSkillR, false, TipManager.GetMessage(ExtendReturn.B13)); } } }
/// <summary> /// 合成操作,将多个道具或装备合成新的道具[完成] /// </summary> /// <param name="note"></param> private void Fuse(UserNote note) { //合成配置的ID string mixid = note.GetString(0); //合成数量 int number = note.GetInt32(1); //提升成功率的数量 int upCount = note.GetInt32(2); string npcid = note.GetString(3); if (!note.Player.EffectActive(npcid, "")) return; GameConfig gc = GameConfigAccess.Instance.FindOneById(mixid); if (gc == null) { note.Call(FuseCommand.FuseR, false, TipManager.GetMessage(FuseReturn.FuseEquipNo)); return; } #region 目标道具基本信息,判断包袱是否满和角色游戏币是否满足 string upid = gc.Value.GetStringOrDefault("UpID"); string fuseGoodsID = gc.Value.GetStringOrDefault("GoodsID"); GameConfig fuseGC = GameConfigAccess.Instance.FindOneById(fuseGoodsID); int m = BurdenManager.StactCount(fuseGC); if (m == 0) { note.Call(FuseCommand.FuseR, false, TipManager.GetMessage(FuseReturn.FuseEquipError)); return; } int y = 0; int s = Math.DivRem(number, m, out y); //需要空格子的数量 int n = (y == 0) ? s : s + 1; PlayerEx burden = note.Player.B0; IList c = burden.Value.GetValue<IList>("C"); int grid = 0; int upNumber = 0; foreach (Variant d in c) { if (string.IsNullOrEmpty(d.GetStringOrDefault("E"))) grid++; //提升成功率的道具 if (upid == d.GetStringOrDefault("G")) { upNumber += d.GetIntOrDefault("A"); } } if (grid < n) { //表示包袱格子数不足 note.Call(FuseCommand.FuseR, false, TipManager.GetMessage(FuseReturn.FuseBurdenFull)); return; } if (upNumber < upCount) { note.Call(FuseCommand.FuseR, false, TipManager.GetMessage(FuseReturn.FuseGoodsLv)); return; } int score = 0;//合成所需游戏币 Variant price = fuseGC.Value.GetValueOrDefault<Variant>("Price"); Variant buy = price.GetValueOrDefault<Variant>("Buy"); score = buy.GetIntOrDefault("Score") * number; #endregion #region 判断合成所需材料是否够 IList mixNeed = gc.Value.GetValue<IList>("MixNeed"); int isBinding = 0; foreach (Variant d in mixNeed) { int total = 0; int numCount = d.GetIntOrDefault("Number") * number; foreach (Variant con in c) { if (con.GetStringOrDefault("G") == d.GetStringOrDefault("GoodsID")) { if (total < numCount && con.GetIntOrDefault("H") == 1) { //判断目标道具是否为绑定状态 isBinding = 1; } total += con.GetIntOrDefault("A"); } } if (total < numCount) { note.Call(FuseCommand.FuseR, false, TipManager.GetMessage(FuseReturn.FuseLessNo)); return; } } #endregion if (note.Player.Score < score || (!note.Player.AddScore(-score, FinanceType.Fuse))) { note.Call(FuseCommand.FuseR, false, TipManager.GetMessage(FuseReturn.FuseScore)); return; } #region 得到当前成功率 double lv = gc.Value.GetDoubleOrDefault("ChengGongLv"); if (upCount != 0) { lv = lv + GoodsAccess.Instance.GetSuccess(upCount); } int ml = note.Player.MLevel; Variant mv = MemberAccess.MemberInfo(ml); if (mv != null) { lv *= (1 + mv.GetDoubleOrDefault("FuseLv")); } //表示成功 bool isSuccess = NumberRandom.RandomHit(lv); #endregion //消耗道具数量 Variant us = new Variant(); #region 移除道具 foreach (Variant d in mixNeed) { int count = d.GetIntOrDefault("Number") * number; string gid = d.GetStringOrDefault("GoodsID"); if (!note.Player.RemoveGoods(gid, count,GoodsSource.Fuse)) { note.Call(FuseCommand.FuseR, false, TipManager.GetMessage(FuseReturn.FuseLessNo)); return; } us.SetOrInc(gid, count); } #endregion if (upCount > 0) { if (!note.Player.RemoveGoods(upid, upCount,GoodsSource.Fuse)) { note.Call(FuseCommand.FuseR, false, TipManager.GetMessage(FuseReturn.FuseGoodsLv)); return; } us.SetOrInc(upid, upCount); } //取得的物品 Variant gs = new Variant(); if (isSuccess) { Variant doc = new Variant(); doc.Add("Number" + isBinding, number); Dictionary<string, Variant> goods = new Dictionary<string, Variant>(); goods.Add(fuseGC.ID, doc); note.Player.AddGoods(goods, GoodsSource.Fuse); gs.SetOrInc(fuseGC.ID, number); } note.Player.UpdateBurden(); if (isSuccess) { note.Player.FinishNote(FinishCommand.HeChen, 1); string str = string.Format(TipManager.GetMessage(FuseReturn.FuseSuccess), fuseGC.Name, number); note.Call(FuseCommand.FuseR, true, str); } else { note.Call(FuseCommand.FuseR, false, TipManager.GetMessage(FuseReturn.FuseFail)); } Variant os = new Variant(); os["IsSuccess"] = isSuccess; os["Lv"] = lv; os["Score"] = -score; note.Player.AddLogVariant(Actiontype.Fuse, us, gs, os); }
/// <summary> /// 得到所有家族列表 /// </summary> /// <param name="note"></param> public static void FamilyList(UserNote note) { int pageSize = note.GetInt32(0); int pageIndex = note.GetInt32(1); string familName = note.GetString(2); int totalCount = 0; int currCount = 0; List<Family> list = FamilyAccess.Instance.FamilyPage(pageSize, pageIndex, familName, out totalCount, out currCount); List<Variant> tmp = new List<Variant>(); int a = 0; foreach (Family model in list) { a++; Variant v = new Variant(); v.Add("ID", model.ID); v.Add("Name", model.Name); v.Add("Level", model.Value.GetIntOrDefault("Level")); IList persons = model.Value.GetValue<IList>("Persons"); string bossName = string.Empty; foreach (Variant dy in persons) { if (dy.GetIntOrDefault("RoleID") == 0) { //PlayerBusiness pb = PlayersProxy.FindPlayerByID(dy.GetStringOrDefault("PlayerID")); ////族长名称 //if (pb != null) //{ // ;// pb.Name; //} bossName = PlayerAccess.Instance.GetPlayerName(Convert.ToInt32(dy.GetStringOrDefault("PlayerID"), 16)); break; } } Variant number = new Variant(); number.Add("V", persons.Count); Variant max = FamilyBase.FamilyCount(model.Value.GetIntOrDefault("Level")); number.Add("M", max == number ? 20 : max.GetIntOrDefault("Persons")); v.Add("Number", number); v.Add("BossName", bossName); v.Add("Notice", model.Value.GetStringOrDefault("Notice")); v.Add("Sort", (currCount * pageSize) + a); tmp.Add(v); } note.Call(FamilyCommand.FamilyListR, totalCount, tmp); }
/// <summary> /// 物品使用 /// </summary> /// <param name="note"></param> public static void ArenaGoodsPet(UserNote note) { string sole = note.PlayerID + "ArenaGoodsPet"; if (!m_dic.TryAdd(sole, sole)) return; try { string petid = note.GetString(0); //使用格子物品的位置 int position = note.GetInt32(1); ArenaBase model; if (!ArenaBusiness.ArenaList.TryGetValue(note.Player.SoleID, out model)) { //请先选择竞技场 note.Call(ArenaCommand.ArenaGoodsR, false, TipManager.GetMessage(ArenaReturn.ArenaGoodsPet1)); return; } Variant v = BurdenManager.BurdenPlace(note.Player.B0, position); if (v == null) { //输入参数不对 note.Call(ArenaCommand.ArenaGoodsR, false, TipManager.GetMessage(ArenaReturn.ArenaGoodsPet2)); return; } string goodsid = v.GetStringOrDefault("G"); if (string.IsNullOrEmpty(goodsid)) { //物品不存在 note.Call(ArenaCommand.ArenaGoodsR, false, TipManager.GetMessage(ArenaReturn.ArenaGoodsPet3)); return; } GameConfig gc = GameConfigAccess.Instance.FindOneById(goodsid); if (gc == null) { //物品不存在 note.Call(ArenaCommand.ArenaGoodsR, false, TipManager.GetMessage(ArenaReturn.ArenaGoodsPet3)); return; } if (gc.SubType != GoodsSub.Supply) { //该物品不能在战斗中使用 note.Call(ArenaCommand.ArenaGoodsR, false, TipManager.GetMessage(ArenaReturn.ArenaGoodsPet4)); return; } if (!ArenaGoods.SupplyLimit(note, gc)) return; Pet p; if (model.Pets.TryGetValue(petid, out p)) { if (!SupplyPet(gc.Value, p, model, note.Player.Name)) { //不需要补充 note.Call(ArenaCommand.ArenaGoodsR, false, TipManager.GetMessage(ArenaReturn.ArenaGoodsPet5)); return; } //作用成功移除物品 if (note.Player.RemoveGoods(position, GoodsSource.ArenaGoodsPet)) { //Variant tmp = new Variant(); //tmp.Add("B0", note.Player.B0); //note.Call(BurdenCommand.BurdenListR, tmp); note.Player.UpdateBurden(); } } } finally { m_dic.TryRemove(sole, out sole); } }
/// <summary> /// 宠物进入参战 /// </summary> /// <param name="note"></param> public static void PetInArena(UserNote note) { string petid = note.GetString(0); string groupname = note.GetString(1); int x = note.GetInt32(2); int y = note.GetInt32(3); if (string.IsNullOrEmpty(note.Player.SoleID)) { //请选择要参战的竞技场 note.Call(ArenaCommand.PetInArenaR, false, TipManager.GetMessage(ArenaReturn.ArenaGroupName1)); return; } ArenaBase model; if (!ArenaBusiness.ArenaList.TryGetValue(note.Player.SoleID, out model)) { //请选择要参战的竞技场 note.Call(ArenaCommand.PetInArenaR, false, TipManager.GetMessage(ArenaReturn.PetInArena1)); return; } if (model.StartTime < DateTime.UtcNow) { //竞技场已经开始,不能再参战 note.Call(ArenaCommand.PetInArenaR, false, TipManager.GetMessage(ArenaReturn.PetInArena2)); return; } if (!model.GroupName.Contains(groupname)) { //请选择分组 note.Call(ArenaCommand.PetInArenaR, false, TipManager.GetMessage(ArenaReturn.PetInArena3)); return; } if (!string.IsNullOrEmpty(note.Player.GroupName)) { if (note.Player.GroupName != groupname) { //你已经加入【" + note.Player.GroupName + "】组,不能再选择其它组 note.Call(ArenaCommand.PetInArenaR, false, string.Format(TipManager.GetMessage(ArenaReturn.PetInArena4), note.Player.GroupName)); return; } } PlayerEx b3 = note.Player.B3; IList c = b3.Value.GetValue<IList>("C"); Variant tmp = null; foreach (Variant v in c) { if (v.GetStringOrDefault("E") == petid) { tmp = v; break; } } if (tmp == null) { //宠物不存在 note.Call(ArenaCommand.PetInArenaR, false, TipManager.GetMessage(ArenaReturn.PetInArena5)); return; } Pet p = PetAccess.Instance.FindOneById(petid); if (p == null || p.PlayerID != note.PlayerID) { note.Call(ArenaCommand.PetInArenaR, false, TipManager.GetMessage(ArenaReturn.PetInArena5)); return; } if (PetAccess.Instance.IsFatigue(p)) { //宠物过度疲劳,不能参加竞技场 note.Call(ArenaCommand.PetInArenaR, false, TipManager.GetMessage(ArenaReturn.PetInArena6)); return; } if (Math.Abs(note.Player.FightValue - model.FightValue) > model.FightPoor) { //战绩差距太大,不能参加 note.Call(ArenaCommand.PetInArenaR, false, TipManager.GetMessage(ArenaReturn.PetInArena7)); return; } int count = 0;//已经放入的宠物数量 int groupcount = 0;//得到选组宠物总数 foreach (Pet pk in model.Pets.Values) { if (pk.PlayerID == note.PlayerID) { count++; } if (pk.GroupName == groupname) { groupcount++; } } if (model.UserPets <= count) { //每人只能【" + model.UserPets + "】只宠物参战 note.Call(ArenaCommand.PetInArenaR, false, string.Format(TipManager.GetMessage(ArenaReturn.PetInArena8), model.UserPets)); return; } if (model.PetNumber <= groupcount) { //每组只能【" + model.PetNumber + "】只宠物参战 note.Call(ArenaCommand.PetInArenaR, false, string.Format(TipManager.GetMessage(ArenaReturn.PetInArena9), model.PetNumber)); return; } if (!model.Pets.TryAdd(p.ID, p)) { //宠物已经参战 note.Call(ArenaCommand.PetInArenaR, false, TipManager.GetMessage(ArenaReturn.PetInArena10)); return; } note.Player.GroupName = groupname; p.GroupName = groupname; p.X = x; p.Y = y; p.BeginPoint = new Point(x, y); p.EndPoint = new Point(x, y); p.CurPoint = new Point(x, y); p.RangePet = string.Empty; p.PetStatus = 0; p.Range = 100; List<PetDetail> list = new List<PetDetail>(); PetDetail detail = new PetDetail(p, note.Player.Name); list.Add(detail); model.CallAll(ArenaCommand.PetInArenaR, true, list); model.ArenaUserCount(); }
/// <summary> /// 行走坐标中转 /// </summary> /// <param name="note"></param> public static void ArenaWalk(UserNote note) { string petid = note.GetString(0); Int64 point = note.GetInt64(1); ArenaBase model; if (!ArenaBusiness.ArenaList.TryGetValue(note.Player.SoleID, out model)) return; //开始坐标 Point begin = new Point(); begin.X = Convert.ToInt32(point >> 24); begin.Y = Convert.ToInt32(point >> 16 & 0xff); //结束坐标 Point end = new Point(); end.X = Convert.ToInt32(point >> 8 & 0xff); end.Y = Convert.ToInt32(point & 0xff); Pet p; if (model.Pets.TryGetValue(petid, out p)) { p.StartTime = DateTime.UtcNow; p.BeginPoint = model.SceneSession.ToScreen(begin); p.EndPoint = model.SceneSession.ToScreen(end); p.RangePet = note.GetString(2); p.PetStatus = note.GetInt32(3); } if (p != null) { if (p.PetStatus != 0) { model.CallAll(ArenaCommand.ArenaWalkR, true, petid, point); } } }
/// <summary> /// 得到邮件列表 /// </summary> /// <param name="note"></param> public static void EmailList(UserNote note) { int pageIndex = note.GetInt32(0); int pageSize = 6;//note.GetInt32(1); //0所有按时间,1未读,2有附件,3到期时间 int number = note.GetInt32(2); if (pageIndex < 0 || pageSize < 1) { note.Call(EmailCommand.EmailListR, 0, new List<Variant>()); return; } int total = 0; List<Email> emailList = EmailAccess.Instance.EmailPage(note.PlayerID, pageSize, pageIndex, number, out total); List<Variant> list = new List<Variant>(); foreach (Email model in emailList) { Variant mv = model.Value; if (mv == null) continue; Variant v = new Variant(); foreach (var item in mv) { v.Add(item.Key, item.Value); } v.Add("ID", model.ID); v.Add("Name", model.Name); v.Add("MainType", model.MainType); v.Add("Status", model.Status); list.Add(v); } note.Call(EmailCommand.EmailListR, total, list); }
/// <summary> /// 成功进入场景 /// </summary> /// <param name="note"></param> protected void IntoSceneSuccess(UserNote note) { PlayerBusiness player = note.Player; player.Point = 0; player.X = note.GetInt32(0); player.Y = note.GetInt32(1); Variant sceneinfo = CreateSceneInfo(player, false); IntoSceneSuccess(player, sceneinfo); }
/// <summary> /// ShuFang养殖,JiaGongFang挖掘,GuoYuan采集 /// </summary> /// <param name="note"></param> public static void HomePluck(UserNote note) { string soleid = note.PlayerID + "HomePluck"; if (!m_dic.TryAdd(soleid, soleid)) return; try { //G_d000015成长果实,G_d000016潜力果实 Minute; int minute = note.GetInt32(0); string name = note.GetString(1); string npcid = note.GetString(2);//NPC if (!note.Player.EffectActive(npcid, "")) return; if (minute < 1) { note.Call(HomeCommand.HomePluckR, false, TipManager.GetMessage(HomeReturn.PareError)); return; } GameConfig gc = null; if (name == "GuoYuan") { gc = GameConfigAccess.Instance.FindOneById("Home_CJ00002"); } else if (name == "ShuFang") { gc = GameConfigAccess.Instance.FindOneById("Home_CJ00001"); } else if (name == "JiaGongFang") { gc = GameConfigAccess.Instance.FindOneById("Home_CJ00003"); } else { note.Call(HomeCommand.HomePluckR, false, TipManager.GetMessage(HomeReturn.PareError)); return; } List<string> list = new List<string>() { "GuoYuan", "ShuFang", "JiaGongFang" }; if (!list.Contains(gc.SubType)) { note.Call(HomeCommand.HomePluckR, false, TipManager.GetMessage(HomeReturn.PareError)); return; } string goodsID = gc.Value.GetStringOrDefault("GoodsID"); int produceTime = gc.Value.GetIntOrDefault("ProduceTime"); //int score = gc.Value.GetIntOrDefault("Score"); //采集需要石币 //int scoreT = ((minute * 60) / produceTime) * score; PlayerEx home = note.Player.Home; if (home == null) { note.Call(HomeCommand.HomePluckR, false, TipManager.GetMessage(HomeReturn.NoHome)); return; } Variant produces = home.Value.GetValueOrDefault<Variant>("Produces"); Variant v = produces.GetValueOrDefault<Variant>(gc.SubType); IList petList = v.GetValue<IList>("PetList"); if (petList == null || petList.Count == 0) { note.Call(HomeCommand.HomePluckR, false, TipManager.GetMessage(HomeReturn.InPet)); return; } Variant mv = MemberAccess.MemberInfo(note.Player.MLevel); if (mv == null) { note.Call(HomeCommand.HomePluckR, false, TipManager.GetMessage(HomeReturn.ConfigError)); return; } int homeHour = mv.GetIntOrDefault("HomeHour"); DateTime dt = DateTime.UtcNow; DateTime endtime = dt.AddHours(homeHour); //v["GoodsID"] = goodsID; //v["Number"] = 0; v["StartTime"] = dt; v["EndTime"] = endtime; //v["IsBinding"] = 1; home.Save(); note.Call(HomeCommand.HomePluckR, true, TipManager.GetMessage(HomeReturn.Plucking)); } finally { string str; m_dic.TryRemove(soleid, out str); } }
/// <summary> /// 激活兽栏 /// </summary> /// <param name="note"></param> private void ShockPetGroove(UserNote note) { //得到道具数量 int number = note.GetInt32(0); PlayerEx pg = note.Player.B3; Variant v = null; IList pc = pg.Value.GetValue<IList>("C"); int n = 0; foreach (Variant k in pc) { if (k.GetStringOrDefault("E") == "-1") { n++; if (v == null) { v = k; } else if (v.GetIntOrDefault("P") > k.GetIntOrDefault("P")) { v = k; } } } if (v == null) { note.Call(PetsCommand.ShockPetGrooveR, false, TipManager.GetMessage(PetsReturn.ShockFinish)); return; } int p = v.GetIntOrDefault("P"); string goodsid = ""; number=0; double lv = GameConfigAccess.Instance.FindExtend(ExtendType.B3, p.ToString(),out number, out goodsid); if (string.IsNullOrEmpty(goodsid) || number <= 0) { note.Call(PetsCommand.ShockPetGrooveR, false, TipManager.GetMessage(ExtendReturn.B32)); return; } if (note.Player.RemoveGoods(goodsid, number, GoodsSource.ShockPetGroove)) { note.Player.UpdateBurden(); if (NumberRandom.RandomHit(lv)) { v["E"] = ""; if (pg.Save()) { note.Call(ClientCommand.UpdateActorR, new PlayerExDetail(pg)); note.Call(PetsCommand.ShockPetGrooveR, true, string.Empty); note.Player.FinishNote(FinishCommand.ExtendStables); } } else { note.Call(PetsCommand.ShockPetGrooveR, false, TipManager.GetMessage(ExtendReturn.B33)); } } else { note.Call(PetsCommand.ShockPetGrooveR, false, TipManager.GetMessage(ExtendReturn.B32)); } }
/// <summary> /// 家园生产 /// </summary> /// <param name="note"></param> public static void HomeProduce(UserNote note) { string soleid = note.PlayerID + "HomeProduce"; if (!m_dic.TryAdd(soleid, soleid)) return; try { string id = note.GetString(0); int number = note.GetInt32(1); string npcid = note.GetString(2);//NPC if (!note.Player.EffectActive(npcid, "")) return; if (number <= 0) { note.Call(HomeCommand.HomeProduceR, false, TipManager.GetMessage(HomeReturn.PareError)); return; } //生产数量 GameConfig gc = GameConfigAccess.Instance.FindOneById(id); if (gc == null) { note.Call(HomeCommand.HomeProduceR, false, TipManager.GetMessage(HomeReturn.PareError)); return; } string subType = gc.SubType; PlayerEx home = note.Player.Home; if (home == null) { note.Call(HomeCommand.HomeProduceR, false, TipManager.GetMessage(HomeReturn.NoHome)); return; } //得到需要的道具数量,计算出当前可以生产道具的数量 Variant produces = home.Value.GetValueOrDefault<Variant>("Produces"); if (produces == null) { note.Call(HomeCommand.HomeProduceR, false, TipManager.GetMessage(HomeReturn.PareError)); return; } Variant v = produces.GetValueOrDefault<Variant>(subType); if (v == null) { note.Call(HomeCommand.HomeProduceR, false, TipManager.GetMessage(HomeReturn.PareError)); return; } IList petList = v.GetValue<IList>("PetList"); if (petList.Count == 0) { note.Call(HomeCommand.HomeProduceR, false, TipManager.GetMessage(HomeReturn.InPet)); return; } int yaoJi = 0; int juanZhou = 0; int sheJi = 0; int jiaGong = 0; int caiJi = 0; int jiazhengtotal = 0;//宠物家政值总数 Dictionary<string, Pet> producePet = new Dictionary<string, Pet>(); foreach (Variant d in petList) { yaoJi = yaoJi + d.GetIntOrDefault("YaoJi"); juanZhou = juanZhou + d.GetIntOrDefault("JuanZhou"); sheJi = sheJi + d.GetIntOrDefault("SheJi"); jiaGong = jiaGong + d.GetIntOrDefault("JiaGong"); caiJi = caiJi + d.GetIntOrDefault("CaiJi"); } jiazhengtotal = yaoJi + juanZhou + jiaGong + caiJi; Dictionary<string, int> dic = new Dictionary<string, int>(); dic.Add("YaoJi", yaoJi); dic.Add("JuanZhou", juanZhou); dic.Add("SheJi", sheJi); dic.Add("JiaGong", jiaGong); dic.Add("CaiJi", caiJi); //目标道具 string goodsid = gc.Value.GetStringOrDefault("GoodsID"); //生产所需时间,秒钟 int producetime = gc.Value.GetIntOrDefault("ProduceTime"); //所需家政信息 Variant homeInfo = gc.Value.GetValueOrDefault<Variant>("HomeValue"); //一条生产线可生产最大数量 int produceMax = gc.Value.GetIntOrDefault("Number"); if (number > produceMax) { note.Call(HomeCommand.HomeProduceR, false, string.Format(TipManager.GetMessage(HomeReturn.HomeProduce5),produceMax)); return; } int need = 0; foreach (var item in homeInfo) { if (!dic.ContainsKey(item.Key)) { note.Call(HomeCommand.HomeProduceR, false, TipManager.GetMessage(HomeReturn.ConfigError)); return; } if (dic[item.Key] < (int)item.Value) { note.Call(HomeCommand.HomeProduceR, false, TipManager.GetMessage(HomeReturn.PetHomeNo)); return; } need += Convert.ToInt32(item.Value); } //所需物品 IList needGoods = gc.Value.GetValue<IList>("NeedGoods"); PlayerEx b0 = note.Player.B0; //需要的物品数量 Dictionary<string, int> goods = new Dictionary<string, int>(); int goodsTotal = 0; foreach (Variant ng in needGoods) { int total = ng.GetIntOrDefault("Number") * number; string gs = ng.GetStringOrDefault("GoodsID"); if (BurdenManager.GoodsCount(b0, gs) < total) { note.Call(HomeCommand.HomeProduceR, false, TipManager.GetMessage(HomeReturn.GoodsNumberNo)); return; } if (goods.ContainsKey(gs)) { goods[gs] += total; } else { goods.Add(gs, total); } if (gs == "G_d000389" || gs == "G_d000390" || gs == "G_d000391") { goodsTotal += total; } } int isbinding = 0; foreach (var item in goods) { isbinding=BurdenManager.IsBinding(b0, item.Key, (int)item.Value); if (isbinding == 1) break; } Dictionary<string, Variant> info = new Dictionary<string, Variant>(); Variant vg = new Variant(); vg.Add("Number" + isbinding, number); info.Add(goodsid, vg); if (BurdenManager.IsFullBurden(b0, info)) { note.Call(HomeCommand.HomeProduceR, false, TipManager.GetMessage(HomeReturn.BurdenFull)); return; } DateTime dt=DateTime.UtcNow; if (v.ContainsKey("ProduceList")) { Variant mv = MemberAccess.MemberInfo(note.Player.MLevel); int produce = mv.GetIntOrDefault("Produce");//生产对列数 IList r = v.GetValue<IList>("ProduceList"); if (r.Count > 0) { for (int i = r.Count - 1; i >=0; i--) { DateTime t = ((DateTime)r[i]).ToUniversalTime(); if (t < dt) { //移除过期对列 r.Remove(r[i]); } } } if (r.Count >= produce) { note.Call(HomeCommand.HomeProduceR, false, TipManager.GetMessage(HomeReturn.HomeProduce2)); return; } } int totaltime = producetime * number; if (v.ContainsKey("ProduceList")) { IList pl = v.GetValue<IList>("ProduceList"); pl.Add(dt.AddSeconds(totaltime)); } else { v.Add("ProduceList", new List<DateTime>() { dt.AddSeconds(totaltime) }); } int b = 0; BurdenManager.Remove(b0, goods, out b); Variant us = new Variant(); foreach (var item in goods) { us.SetOrInc(item.Key,Convert.ToInt32(item.Value)); //生产消耗 note.Player.AddLog(Actiontype.GoodsUse, item.Key, Convert.ToInt32(item.Value), GoodsSource.HomeProduce, goodsid, number); note.Player.UpdateTaskGoods(item.Key); } //判断以前是否正在生产 //string gid = v.GetStringOrDefault("GoodsID"); //int num = v.GetIntOrDefault("Number"); //if (num > 0) //{ // GameConfig gcm = GameConfigAccess.Instance.FindOneById(gid); // if (gcm != null) // { // string title = TipManager.GetMessage(HomeReturn.HomeProduce3); // string content = string.Format(TipManager.GetMessage(HomeReturn.HomeProduce4), gcm.Name, num); // Variant gs = new Variant(); // gs.Add("G", gcm.ID); // gs.Add("A", num); // gs.Add("E", gcm.ID); // gs.Add("H", v.GetIntOrDefault("IsBinding")); // List<Variant> goodsList = new List<Variant>(); // if (number > 0) // { // goodsList.Add(gs); // } // else // { // goodsList = null; // } // int reTime = Convert.ToInt32(TipManager.GetMessage(EmailReturn.HameDay)); // if (EmailAccess.Instance.SendEmail(title, TipManager.GetMessage(PetsReturn.StealPet12), note.PlayerID, note.Player.Name, content, string.Empty, goodsList, reTime)) // { // note.Call(EmailCommand.NewEmailTotalR, EmailAccess.Instance.NewTotal(note.PlayerID)); // } // v["GoodsID"] = ""; // v["Number"] = 0; // } //} Variant gs1 = new Variant(); if (home.Save()) { gs1[goodsid] = number; note.Player.AddGoods(info, GoodsSource.HomeProduce); Variant tmp = new Variant(); tmp.Add(subType, v); note.Call(HomeCommand.HomeProduceR, true, tmp); Variant os=new Variant(); os["TotalTime"] = totaltime; note.Player.AddLogVariant(Actiontype.HomeProduce, us, gs1, os); } else { note.Call(HomeCommand.HomeProduceR, false, ""); } } finally { m_dic.TryRemove(soleid, out soleid); } }
/// <summary> /// 放养 /// </summary> /// <param name="note"></param> public void Stocking(UserNote note) { //宠物 string id = note.GetString(0); bool isStocking = note.GetBoolean(1); if (note.Player.SceneID != SceneHome.DefaultID) { //不能在【{0}】场景{1} string str = string.Format(TipManager.GetMessage(PetsReturn.NoSceneID), note.Player.Scene.Name); note.Call(PetsCommand.StockingR, false, isStocking, str); return; } #region 家园驯化完成的宠物直接放养 if (note.GetInt32(2) == 1) { PlayerEx home = note.Player.Home; Variant pk = home.Value["PetKeep"] as Variant; if (pk.GetIntOrDefault("PetsWild") != -1) { note.Call(PetsCommand.StockingR, false, isStocking, TipManager.GetMessage(PetsReturn.NoExists)); //还不能放养 return; } if (pk.GetStringOrDefault("ID") != id) { note.Call(PetsCommand.StockingR, false, isStocking, TipManager.GetMessage(PetsReturn.NoExists)); return; } Pet px = PetAccess.Instance.FindOneById(id); PlayerEx b2 = note.Player.B2; IList c2 = b2.Value.GetValue<IList>("C"); Variant v2 = null; foreach (Variant v in c2) { if (v.GetStringOrDefault("E") == string.Empty) { v2 = v; break; } } if (v2 == null) { note.Call(PetsCommand.StockingR, false, isStocking, TipManager.GetMessage(PetsReturn.PetBurdenB2)); return; } v2["E"] = px.ID; v2["G"] = px.Value.GetStringOrDefault("PetsID"); v2["S"] = px.Value.GetIntOrDefault("Sort"); v2["H"] = px.Value.GetIntOrDefault("IsBinding"); v2["A"] = 1; v2["D"] = 0; v2["R"] = px.Value.GetIntOrDefault("PetsRank"); v2["I"] = 0; pk["ID"] = string.Empty; pk["PetID"] = string.Empty; pk["StartTime"] = string.Empty; pk["EndTime"] = string.Empty; pk["PetsWild"] = 0; pk["PetName"] = string.Empty; pk["PetsRank"] = 0; v2["T"] = PetAccess.Instance.CreateAward(note.Player.Level, id, note.PlayerID, note.Player.Pet); home.Save(); b2.Save(); note.Call(PetsCommand.StockingR, true, isStocking, PetAccess.Instance.GetPetModel(v2)); Variant mn = new Variant(); mn.Add("B2", note.Player.B2); note.Call(BurdenCommand.BurdenListR, mn); return; } #endregion #region 家园与宠物背包宠物交换 //宠物所在位置 PlayerEx burden0 = isStocking ? note.Player.B3 : note.Player.B2; //放入位置 PlayerEx burden1 = isStocking ? note.Player.B2 : note.Player.B3; IList c0 = burden0.Value.GetValue<IList>("C"); Variant v0 = null; foreach (Variant v in c0) { if (v.GetStringOrDefault("E") == id) { v0 = v; break; } } if (v0 == null) { note.Call(PetsCommand.StockingR, false, isStocking, TipManager.GetMessage(PetsReturn.NoExists)); return; } IList c1 = burden1.Value.GetValue<IList>("C"); Variant v1 = BurdenManager.GetBurdenSpace(c1); if (v1 == null) { string str = isStocking ? TipManager.GetMessage(PetsReturn.PetBurdenB2) : TipManager.GetMessage(PetsReturn.PetBurdenB3); note.Call(PetsCommand.StockingR, false, isStocking, str); return; } if (burden1.Name == "B2") { Variant ct = PetAccess.Instance.CreateAward(note.Player.Level, id, note.PlayerID, note.Player.Pet); //PetBusiness.CreateAward(note.Player, ct, id, note.PlayerID); Variant t = v0["T"] as Variant; if (t != null) { if (t.ContainsKey("ProtectionTime")) { if (ct == null) ct = new Variant(); ct.Add("ProtectionTime", t.GetDateTimeOrDefault("ProtectionTime")); } } v1["T"] = ct; } else { Variant t = v0.GetValueOrDefault<Variant>("T"); Variant ct = new Variant(); if (t != null) { if (t.ContainsKey("ProtectionTime")) { ct.Add("ProtectionTime", t.GetDateTimeOrDefault("ProtectionTime")); } } v1["T"] = ct; } v1["E"] = v0["E"]; v1["G"] = v0["G"]; v1["S"] = v0["S"]; v1["H"] = v0["H"]; v1["A"] = v0["A"]; v1["D"] = v0["D"]; v1["R"] = v0["R"]; if (v0.GetIntOrDefault("I") == 1) { note.Player.ResetPet(null); } BurdenManager.BurdenClear(v0); burden0.Save(); burden1.Save(); //Variant ve = new Variant(); //ve.Add("B2", note.Player.B2); //ve.Add("B3", note.Player.B3); //note.Call(BurdenCommand.BurdenListR, ve); note.Player.UpdateBurden("B2", "B3"); if (isStocking) { note.Call(PetsCommand.StockingR, true, isStocking, PetAccess.Instance.GetPetModel(v1)); } else { note.Call(PetsCommand.StockingR, true, isStocking, id); } bool isslip = false; if (isStocking) { if (v0.GetIntOrDefault("P") > 3) { isslip = true; } } else { if (v1.GetIntOrDefault("P") > 3) { isslip = true; } } if (isslip) { List<Variant> ps = PlayerExAccess.Instance.SlipPets(note.Player.B3); note.Player.GetSlipPets(ps); } #endregion }
/// <summary> /// 家园采集 /// </summary> /// <param name="note"></param> public static void HomePluck(UserNote note) { string soleid = note.PlayerID + "HomePluck"; if (!m_dic.TryAdd(soleid, soleid)) return; try { //G_d000015成长果实,G_d000016潜力果实 Minute; int minute = note.GetInt32(0); string name = note.GetString(1); string npcid = note.GetString(2);//NPC if (!note.Player.EffectActive(npcid, "")) return; if (minute < 1) { note.Call(HomeCommand.HomePluckR, false, TipManager.GetMessage(HomeReturn.PareError)); return; } GameConfig gc = null; if (name == "GuoYuan") gc = GameConfigAccess.Instance.FindOneById("Home_CJ00002"); if (name == "ShuFang") gc = GameConfigAccess.Instance.FindOneById("Home_CJ00001"); if (name == "JiaGongFang") gc = GameConfigAccess.Instance.FindOneById("Home_CJ00003"); if (gc == null) { note.Call(HomeCommand.HomePluckR, false, TipManager.GetMessage(HomeReturn.PareError)); return; } List<string> list = new List<string>() { "GuoYuan", "ShuFang", "JiaGongFang" }; if (!list.Contains(gc.SubType)) { note.Call(HomeCommand.HomePluckR, false, TipManager.GetMessage(HomeReturn.PareError)); return; } string GoodsID = gc.Value.GetStringOrDefault("GoodsID"); int ProduceTime = gc.Value.GetIntOrDefault("ProduceTime"); int Score = gc.Value.GetIntOrDefault("Score"); //采集需要石器币 int ScoreT = ((minute * 60) / ProduceTime) * Score; PlayerEx home = note.Player.Home; if (home == null) { note.Call(HomeCommand.HomePluckR, false, TipManager.GetMessage(HomeReturn.NoHome)); return; } Variant Produces = home.Value.GetValueOrDefault<Variant>("Produces"); Variant v = Produces.GetValueOrDefault<Variant>(gc.SubType); IList PetList = v.GetValue<IList>("PetList"); if (PetList.Count == 0) { note.Call(HomeCommand.HomePluckR, false, TipManager.GetMessage(HomeReturn.InPet)); return; } Dictionary<string, Pet> pluckPet = new Dictionary<string, Pet>(); foreach (Variant k in PetList) { string pid = k.GetStringOrDefault("ID"); if (!string.IsNullOrEmpty(pid)) { Pet p = PetAccess.Instance.FindOneById(pid); if (p != null) { if (PetAccess.Instance.IsFatigue(p)) { note.Call(HomeCommand.HomePluckR, false, TipManager.GetMessage(HomeReturn.HomeProduce1)); return; } if (!pluckPet.ContainsKey(p.ID)) { pluckPet.Add(p.ID, p); } } } } if (note.Player.Score < ScoreT || (!note.Player.AddScore(-ScoreT, FinanceType.HomePluck))) { note.Call(HomeCommand.HomePluckR, false, TipManager.GetMessage(HomeReturn.HomePluckNoScore)); return; } foreach (Pet p in pluckPet.Values) { int m = 0; if (gc.SubType == "GuoYuan") { m = p.Value.GetIntOrDefault("CaiJi"); } else if (gc.SubType == "ShuFang") { m = p.Value.GetIntOrDefault("JuanZhou"); } else if (gc.SubType == "JiaGongFang") { m = p.Value.GetIntOrDefault("JiaGong"); } if (m > 0) { //增加疲劳点 int fatigue = PetAccess.Instance.HomeFatigue(m); PetAccess.Instance.FatigueAdd(p, fatigue); } } int n = 0; foreach (Variant dy in PetList) { if (gc.SubType == "GuoYuan") { n = n + dy.GetIntOrDefault("CaiJi");//采集 } else if (gc.SubType == "ShuFang") { n = n + dy.GetIntOrDefault("JuanZhou");//卷轴,养殖 } else if (gc.SubType == "JiaGongFang") { n = n + dy.GetIntOrDefault("JiaGong");//加工,挖掘 } } int Number = HomeNumber(n); //可生产道具数量 if (Number == 0) return; DateTime dt = DateTime.UtcNow; DateTime endtime = dt.AddMinutes(minute); v["GoodsID"] = GoodsID; v["Number"] = Number; v["StartTime"] = dt; v["EndTime"] = endtime; v["IsBinding"] = 1; home.Save(); note.Call(HomeCommand.HomePluckR, true, TipManager.GetMessage(HomeReturn.Plucking)); } finally { string str; m_dic.TryRemove(soleid, out str); } }
/// <summary> /// 宠物仓库拖动操作 /// </summary> /// <param name="note"></param> private void PetBurdenDrag(UserNote note) { string b0 = note.GetString(0); int p0 = note.GetInt32(1); string b1 = note.GetString(2); int p1 = note.GetInt32(3); PlayerEx burden0 = note.Player.Value[b0] as PlayerEx; PlayerEx burden1 = note.Player.Value[b1] as PlayerEx; IList c0 = burden0.Value.GetValue<IList>("C"); IList c1 = burden1.Value.GetValue<IList>("C"); Variant v0 = null; Variant v1 = null; foreach (Variant k in c0) { if (k.GetIntOrDefault("P") == p0) { v0 = k; break; } } foreach (Variant k in c1) { if (k.GetIntOrDefault("P") == p1) { v1 = k; break; } } if (v0 == null || v0.GetIntOrDefault("I") == 1) { note.Call(PetsCommand.PetBurdenDragR, false, TipManager.GetMessage(PetsReturn.NoRelease)); return; } if (v0.GetStringOrDefault("E") == "-1") { note.Call(PetsCommand.PetBurdenDragR, false, TipManager.GetMessage(PetsReturn.NoShock)); return; } if (v1 == null || v1.GetIntOrDefault("I") == 1) { note.Call(PetsCommand.PetBurdenDragR, false, TipManager.GetMessage(PetsReturn.NoRelease)); return; } if (v1.GetStringOrDefault("E") == "-1") { note.Call(PetsCommand.PetBurdenDragR, false, TipManager.GetMessage(PetsReturn.NoShock)); return; } if (Swap(v0, v1)) { List<Variant> ps = PlayerExAccess.Instance.SlipPets(note.Player.B3); note.Player.GetSlipPets(ps); } burden0.Save(); burden1.Save(); Variant list = new Variant(); list.Add(b0, burden0); if (b0 != b1) { list.Add(b1, burden1); } note.Call(BurdenCommand.BurdenListR, list); }
/// <summary> /// 取回宠物 /// </summary> /// <param name="note"></param> public static void PetRetrieve(UserNote note) { string soleid = note.PlayerID + "PetRetrieve"; if (!m_dic.TryAdd(soleid, soleid)) { return; } try { IList boby = note.Body as IList; if (boby == null) return; string id = note.GetString(0); //0表示产生宠物,1表示采集,生产取出宠物,2表示训化完成后取回宠物 int goodsType = note.GetInt32(1); string bType = "B3"; if (boby.Count > 2) { bType = note.GetString(2); } if (bType != "B2" && bType != "B3") return; string npcid = note.GetString(3);//NPC if (!note.Player.EffectActive(npcid, "")) return; //驯化取回 PlayerEx home = note.Player.Home; if (goodsType == 0) { #region 将道具变成宠物的过程 Variant pk = home.Value.GetValueOrDefault<Variant>("PetKeep"); string goodsid = pk.GetStringOrDefault("ID"); Goods g = GoodsAccess.Instance.FindOneById(goodsid); if (g == null) { note.Call(HomeCommand.PetRetrieveR, false, goodsType, TipManager.GetMessage(HomeReturn.ConfigError)); return; } if (goodsid == id) { if (pk.GetStringOrDefault("EndTime") != string.Empty) { DateTime endTime; if (!DateTime.TryParse(pk.GetStringOrDefault("EndTime"), out endTime)) { note.Call(HomeCommand.PetRetrieveR, false, goodsType, TipManager.GetMessage(HomeReturn.HomeKeeping)); return; } if (endTime > DateTime.UtcNow) { note.Call(HomeCommand.PetRetrieveR, false, goodsType, TipManager.GetMessage(HomeReturn.HomeKeeping)); return; } } if (pk.GetIntOrDefault("PetsWild") == -1) { //宠物已经产生,不能重复产生 return; } string petid = g.Value.GetStringOrDefault("PetID"); // 得到宠物基本信息 GameConfig gc = GameConfigAccess.Instance.FindOneById(petid); if (gc == null || gc.Value == null) { note.Call(HomeCommand.PetRetrieveR, false, goodsType, TipManager.GetMessage(HomeReturn.PetError)); return; } Variant model = gc.Value; string petType = model.GetStringOrDefault("PetsType"); int petLevel = model.GetIntOrDefault("PetsLevel"); //宠物已经产生 Variant petInfo = PetAccess.CreateBase(gc, 0, g.Value.GetIntOrDefault("IsBinding")); Pet p = new Pet(); p.ID = ObjectId.GenerateNewId().ToString(); p.Name = gc.Name; p.Value = petInfo; p.Modified = DateTime.UtcNow; p.PlayerID = note.PlayerID; p.Created = DateTime.UtcNow; p.Save(); pk["ID"] = p.ID; pk["PetID"] = petid; pk["StartTime"] = string.Empty; pk["EndTime"] = string.Empty; pk["PetsWild"] = -1; pk["PetName"] = gc.Name; pk["PetsRank"] = gc.Value.GetIntOrDefault("PetsRank"); home.Save(); note.Call(HomeCommand.PetRetrieveR, true, goodsType, id); //表示宠物驯化成功 note.Player.FinishNote(FinishCommand.PetJobFuHua, gc.Value.GetStringOrDefault("PetsType")); //移除道具 GoodsAccess.Instance.Remove(g.ID, note.PlayerID); } return; #endregion } else if (goodsType == 2) { #region 表示取出训化成功的宠物 Variant pk = home.Value.GetValueOrDefault<Variant>("PetKeep"); if (pk.GetStringOrDefault("ID") != id) { //宠物ID不正确 note.Call(HomeCommand.PetRetrieveR, false, goodsType, TipManager.GetMessage(HomeReturn.PetError)); return; } Pet px = PetAccess.Instance.FindOneById(id); if (px == null) { note.Call(HomeCommand.PetRetrieveR, false, goodsType, TipManager.GetMessage(HomeReturn.PetError)); return; } //宠物槽 PlayerEx pgx = bType == "B3" ? note.Player.B3 : note.Player.B2; IList pcx = pgx.Value.GetValue<IList>("C"); Variant vx = null; foreach (Variant k in pcx) { if (k.GetStringOrDefault("E") == string.Empty) { vx = k; break; } } if (vx == null) { note.Call(HomeCommand.PetRetrieveR, false, goodsType, TipManager.GetMessage(HomeReturn.PetBurdenFull)); return; } vx["E"] = px.ID; vx["G"] = px.Value.GetStringOrDefault("PetsID"); vx["S"] = px.Value.GetIntOrDefault("Sort"); vx["H"] = px.Value.GetIntOrDefault("IsBinding"); vx["A"] = 1; vx["D"] = 0; vx["R"] = px.Value.GetIntOrDefault("PetsRank"); vx["I"] = 0; if (bType == "B2") { Variant ct = PetAccess.Instance.CreateAward(note.Player.Level, id, note.PlayerID, note.Player.Pet); vx["T"] = ct; } //宠物背包保存 pgx.Save(); pk["ID"] = string.Empty; pk["PetID"] = string.Empty; pk["StartTime"] = string.Empty; pk["EndTime"] = string.Empty; pk["PetsWild"] = 0; pk["PetName"] = string.Empty; pk["PetsRank"] = 0; home.Save(); //更新宠物背包 //note.Call(ClientCommand.UpdateActorR, new PlayerExDetail(note.Player.B3)); note.Player.UpdateBurden(bType); note.Call(HomeCommand.PetRetrieveR, true, goodsType, id); if (bType == "B3") { //溜宠格子内,宠物将给随 if (vx.GetIntOrDefault("P") > 3) { List<Variant> ps = PlayerExAccess.Instance.SlipPets(note.Player.B3); note.Player.GetSlipPets(ps); } } else { note.Call(PetsCommand.StockingR, true, true, PetAccess.Instance.GetPetModel(vx)); } return; #endregion } #region 取回采集,生产,合成的宠物 Pet pet = PetAccess.Instance.FindOneById(id); if (pet == null) { note.Call(HomeCommand.PetRetrieveR, false, goodsType, TipManager.GetMessage(HomeReturn.PetError)); return; } //宠物槽 PlayerEx pg = bType == "B3" ? note.Player.B3 : note.Player.B2; IList pc = pg.Value.GetValue<IList>("C"); Variant v = null; foreach (Variant k in pc) { if (string.IsNullOrEmpty(k.GetStringOrDefault("E"))) { v = k; break; } } if (v == null) { note.Call(HomeCommand.PetRetrieveR, false, goodsType, TipManager.GetMessage(HomeReturn.PetBurdenFull)); return; } Variant produces = home.Value.GetValueOrDefault<Variant>("Produces"); foreach (string k in produces.Keys) { Variant p = produces[k] as Variant; IList petList = p.GetValue<IList>("PetList"); for (int i = 0; i < petList.Count; i++) { Variant m = petList[i] as Variant; if (m.GetStringOrDefault("ID") == id) { if (!string.IsNullOrEmpty(p.GetStringOrDefault("GoodsID"))) { note.Call(HomeCommand.PetRetrieveR, false, goodsType, TipManager.GetMessage(HomeReturn.Produceing)); return; } v["E"] = pet.ID; v["G"] = pet.Value.GetStringOrDefault("PetsID"); v["S"] = pet.Value.GetIntOrDefault("Sort"); v["D"] = 0; v["R"] = pet.Value.GetIntOrDefault("PetsRank"); v["I"] = 0; v["A"] = 1; v["H"] = pet.Value.GetIntOrDefault("IsBinding"); if (bType == "B2") { v["T"] = PetAccess.Instance.CreateAward(note.Player.Level, id, note.PlayerID, note.Player.Pet); } petList.Remove(m); home.Save(); pet.Save(); pg.Save(); if (bType == "B3") { //溜宠格子内,宠物将给随 if (v.GetIntOrDefault("P") > 3) { List<Variant> ps = PlayerExAccess.Instance.SlipPets(note.Player.B3); note.Player.GetSlipPets(ps); } } else { note.Call(PetsCommand.StockingR, true, true, PetAccess.Instance.GetPetModel(v)); } note.Player.UpdateBurden(bType); note.Call(HomeCommand.PetRetrieveR, true, goodsType, id); return; } } } note.Call(HomeCommand.PetRetrieveR, false, TipManager.GetMessage(HomeReturn.PetError)); #endregion } finally { string str; m_dic.TryRemove(soleid, out str); } }
/// <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)); } } } }
/// <summary> /// 将仓库中取出道具 /// </summary> /// <param name="note"></param> private void BurdenOut(UserNote note) { string soleid = note.PlayerID + "BurdenOut"; if (!m_dic.TryAdd(soleid, soleid)) return; try { int p = note.GetInt32(0); string name = note.GetString(1); if (string.IsNullOrEmpty(name)) { note.Call(BurdenCommand.BurdenOutR, false, TipManager.GetMessage(BurdenReturn.BurdenOut1)); return; } List<string> ls = new List<string>() { "B0", "B1" }; if (!ls.Contains(name)) { note.Call(BurdenCommand.BurdenOutR, false, TipManager.GetMessage(BurdenReturn.BurdenOut1)); return; } //源 PlayerEx b1 = name == "B0" ? note.Player.B0 : note.Player.B1; Variant v = BurdenManager.BurdenPlace(b1, p); if (v == null) { note.Call(BurdenCommand.BurdenOutR, false, TipManager.GetMessage(BurdenReturn.BurdenOut1)); return; } string goodsid = v.GetStringOrDefault("E"); if (string.IsNullOrEmpty(goodsid)) { note.Call(BurdenCommand.BurdenOutR, false, TipManager.GetMessage(BurdenReturn.BurdenOut2)); return; } //目标 PlayerEx b0 = name == "B0" ? note.Player.B1 : note.Player.B0; IList c = b0.Value.GetValue<IList>("C"); Variant m = BurdenManager.GetBurdenSpace(c); if (m == null) { note.Call(BurdenCommand.BurdenOutR, false, TipManager.GetMessage(BurdenReturn.BurdenOut3)); return; } m["E"] = v["E"]; m["G"] = v["G"]; m["A"] = v["A"]; m["S"] = v["S"]; m["D"] = v["D"]; m["H"] = v["H"]; m["T"] = v["T"]; BurdenManager.BurdenClear(v); b0.Save(); b1.Save(); Variant tmp = new Variant(); tmp.Add("B0", note.Player.B0); tmp.Add("B1", note.Player.B1); note.Player.UpdateTaskGoods(m.GetStringOrDefault("G")); note.Call(BurdenCommand.BurdenListR, tmp); note.Call(BurdenCommand.BurdenOutR, true, string.Empty); } finally { m_dic.TryRemove(soleid, out soleid); } }
/// <summary> /// 购买列表 /// </summary> /// <param name="note"></param> public static void AuctionBuyList(UserNote note) { string soleid = note.PlayerID + string.Empty + note.Name; if (!m_dic.TryAdd(soleid, soleid)) return; try { int pageSize = note.GetInt32(0); int pageIndex = note.GetInt32(1); string goodsType = note.GetString(2); bool isName = note.GetBoolean(3); string npcid = note.GetString(4);//NPC if (!note.Player.EffectActive(npcid, "")) return; int total = 0; int currIndex = 0; List<Auction> list = AuctionAccess.Instance.AuctionBuyList(note.PlayerID, goodsType, isName, pageSize, pageIndex, out total, out currIndex); List<Variant> msg = new List<Variant>(); if (list != null) { foreach (Auction a in list) { Variant v = new Variant(); v.Add("ID", a.ID); v.Add("Name", a.Name); foreach (var k in a.Value) { v.Add(k.Key, k.Value); } msg.Add(v); } } note.Call(AuctionCommand.AuctionBuyListR, total, currIndex, msg); } finally { m_dic.TryRemove(soleid, out soleid); } }
/// <summary> /// 拖动拆分操作 /// </summary> /// <param name="note"></param> private void BurdenDrag(UserNote note) { string soleid = note.PlayerID + "BurdenDrag"; if (!m_dic.TryAdd(soleid, soleid)) { return; } try { string b0 = note.GetString(0); string b1 = note.GetString(2); if (string.IsNullOrEmpty(b0) || string.IsNullOrEmpty(b1)) { note.Call(BurdenCommand.BurdenDragR, false, TipManager.GetMessage(BurdenReturn.BurdenDrag1)); return; } List<string> lt = new List<string>() { "B0", "B1" }; if (!lt.Contains(b0)) return; if (!lt.Contains(b1)) return; int p0 = note.GetInt32(1); int p1 = note.GetInt32(3); int num = note.GetInt32(4); if (num <= 0) return; Variant v0 = null; Variant v1 = null; PlayerEx burden0 = note.Player.Value[b0] as PlayerEx; PlayerEx burden1 = note.Player.Value[b1] as PlayerEx; if (burden0 == null || burden1 == null) { note.Call(BurdenCommand.BurdenDragR, false, TipManager.GetMessage(BurdenReturn.BurdenDrag1)); return; } IList c0 = burden0.Value.GetValue<IList>("C"); foreach (Variant d in c0) { if (d.GetIntOrDefault("P") == p0) { v0 = d; break; } } if (v0 == null) { note.Call(BurdenCommand.BurdenDragR, false, TipManager.GetMessage(BurdenReturn.BurdenDrag2)); return; } IList c1 = burden1.Value.GetValue<IList>("C"); foreach (Variant d in c1) { if (d.GetIntOrDefault("P") == p1) { v1 = d; break; } } if (v1 == null) { note.Call(BurdenCommand.BurdenDragR, false, TipManager.GetMessage(BurdenReturn.BurdenDrag2)); return; } if (b0 == b1 && p0 == p1) { note.Call(BurdenCommand.BurdenDragR, false, TipManager.GetMessage(BurdenReturn.NoSame)); return; } if (b0 == "B0" && b1 == "B1") { GameConfig m_gc = GameConfigAccess.Instance.FindOneById(v0.GetStringOrDefault("G")); if (m_gc != null) { //任务道具不能放入仓库中 if (m_gc.Value.GetStringOrDefault("GoodsType") == "112006") { note.Call(BurdenCommand.BurdenDragR, false, TipManager.GetMessage(BurdenReturn.TaskGoods)); return; } } } string pid0 = v0.GetStringOrDefault("E"); string pid1 = v1.GetStringOrDefault("E"); if (string.IsNullOrEmpty(pid0)) { //起始格子数据不正确 note.Call(BurdenCommand.BurdenDragR, false, TipManager.GetMessage(BurdenReturn.NoStartGrid)); return; } int n = v0.GetIntOrDefault("A"); if (num > n) { //起始格子数量小于想折分数量,数据不正确 note.Call(BurdenCommand.BurdenDragR, false, TipManager.GetMessage(BurdenReturn.NoNumber)); return; } if (!string.IsNullOrEmpty(pid1)) return; if (b0 == b1) { //if (string.IsNullOrEmpty(pid1)) //{ if (num == n) { v1["E"] = v0["E"]; v1["G"] = v0["G"]; v1["S"] = v0["S"]; v1["A"] = v0["A"]; v1["H"] = v0["H"]; v1["D"] = v0["D"]; v1["T"] = v0["T"]; BurdenManager.BurdenClear(v0); } else if (num < n) { //分拆包袱中的道具数量 v0["A"] = (n - num); v1["E"] = v0["E"]; v1["G"] = v0["G"]; v1["S"] = v0["S"]; v1["A"] = num; v1["H"] = v0["H"]; v1["D"] = v0["D"]; v1["T"] = v0["T"]; } else { note.Call(BurdenCommand.BurdenDragR, false, TipManager.GetMessage(BurdenReturn.NoNumber)); return; } //} //else //{ // return; // //不相同就交换位置 // //BurdenJiaoHuan(v0, v1); //} } else { //必须目标格子为空 //if (!string.IsNullOrEmpty(pid1)) //{ // note.Call(BurdenCommand.BurdenDragR, false, TipManager.GetMessage(BurdenReturn.NoNumber)); // return; //} v1["E"] = v0["E"]; v1["G"] = v0["G"]; v1["S"] = v0["S"]; v1["A"] = v0["A"]; v1["H"] = v0["H"]; v1["D"] = v0["D"]; v1["T"] = v0["T"]; BurdenManager.BurdenClear(v0); } burden0.Save(); burden1.Save(); Variant list = new Variant(); if (b0 == b1) { list.Add(b0, burden0); } else { list.Add(b0, burden0); list.Add(b1, burden1); } note.Call(BurdenCommand.BurdenListR, list); string goodsid = string.Empty; if ((b0 == "B0" || b1 == "B0") && v1 != null) { //表示普通包袱减少 goodsid = v1.GetStringOrDefault("G"); } if (!string.IsNullOrEmpty(goodsid) && note.Player.TaskGoods.Contains(goodsid)) { //通知任务系统 note.Player.UpdateTaskGoods(goodsid); } } finally { m_dic.TryRemove(soleid, out soleid); } }
/// <summary> /// 得到自己出售和竞标的列表 /// </summary> /// <param name="note"></param> public static void AuctionSellOrBidList(UserNote note) { string soleid = note.PlayerID + "AuctionSellOrBidList"; if (!m_dic.TryAdd(soleid, soleid)) return; try { int total = 0; int curIndex = 0; string optionType = note.GetString(0); int pageSize = 6;//note.GetInt32(1) int pageIndex = note.GetInt32(2); string npcid = note.GetString(3);//NPC if (!note.Player.EffectActive(npcid, "")) return; List<Variant> list = AuctionBase.GetAuctionSellList(note.PlayerID, optionType, pageSize, pageIndex, out total, out curIndex); note.Call(AuctionCommand.AuctionSellOrBidListR, note.GetString(0), list, total, curIndex); } finally { m_dic.TryRemove(soleid, out soleid); } }
/// <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 IntoBattlePK(UserNote note) { if (note.Player.Fight != null) return; PlayerBusiness playerB = note[1] as PlayerBusiness; if (playerB.Fight != null) return; List<PlayerBusiness> players = FightBase.GetPlayers(note.Player); FightObject[] teamA = FightBase.CreateFightPlayers(players); List<PlayerBusiness> playersB = FightBase.GetPlayers(playerB); FightObject[] teamB = FightBase.CreateFightPlayers(playersB); players.AddRange(playersB); FightBase fb = null; FightType ft = (FightType)(note.GetInt32(0)); if (ft == FightType.PK) { //PK fb = new FightBusinessPK(teamA, teamB, players); } else if (ft == FightType.RobPK) { fb = new FightBusinessRob(teamA, teamB, players); } else if (ft == FightType.ProPK) { fb = new FightBusinessPro(teamA, teamB, players); } else if (ft == FightType.CC) { //切磋 fb = new FightBusinessCC(teamB, teamA, players); } else { return; } foreach (var player in players) { player.Fight = fb; } fb.SendToClinet(FightCommand.StartFight, (int)ft, teamA, teamB); fb.Start(); }