public override G2B_BattleReward DoResponse(B2G_BattleReward request, Client client) { //check ? Managers.UserData data; if (!MonitorPool.S.Get <UserDataManager>().TryToGetUserData(request.UserID, out data)) { return(new G2B_BattleReward { Code = ErrorCode.NoGamePlayerData }); } var diff = new Dictionary <int, Proto.PlayerItem>(); foreach (var i in request.DropItems) { if (diff.ContainsKey(i.ItemID)) { diff[i.ItemID].Num += i.Num; } else { diff.Add(i.ItemID, i); } } foreach (var i in request.ConsumeItems) { if (diff.ContainsKey(i.ItemID)) { diff[i.ItemID].Num -= i.Num; } else { diff.Add(i.ItemID, i); } } ErrorCode code = ErrorCode.OK; foreach (var i in diff) { if (i.Value.Num == 0) { continue; } if (i.Value.Num > 0) { if (!data.AddItem(i.Value)) { code = ErrorCode.Error; } } else { if (!data.ConsumeItem(i.Value)) { code = ErrorCode.Error; } } } data.AddGold(request.Gold); var userClient = Appliaction.Current.GetClientByUserID(request.UserID); if (userClient != null) { var syncHero = new Task_G2C_SyncHero { Hero = data.GetHero() }; var syncPackage = new Task_G2C_SyncPackage { Package = data.GetPackage(), Gold = data.Gold, Coin = data.Coin }; NetProtoTool.SendTask(userClient, syncHero); NetProtoTool.SendTask(userClient, syncPackage); } return(new G2B_BattleReward { Code = code }); }
public override G2C_GMTool DoResponse(C2G_GMTool request, Client client) { #if USEGM if (!Appliaction.Current.EnableGM) { return new G2C_GMTool() { Code = ErrorCode.Error } } ; var args = request.GMCommand.Split(' '); if (args.Length == 0) { return new G2C_GMTool { Code = ErrorCode.Error } } ; var userid = (long)client.UserState; UserData userData; if (!MonitorPool.S.Get <UserDataManager>().TryToGetUserData(userid, out userData)) { return(new G2C_GMTool { Code = ErrorCode.NoGamePlayerData }); } switch (args[0].ToLower()) { case "level": { var level = 0; if (int.TryParse(args[1], out level)) { userData.HeroLevelTo(level); } } break; case "make": { int id = int.Parse(args[1]); var num = 1; if (args.Length > 2) { num = int.Parse(args[2]); } var playerItem = new PlayerItem { ItemID = id, Num = num }; userData.AddItem(playerItem); } break; case "addgold": { userData.AddGold(int.Parse(args[1])); } break; case "addcoin": { userData.AddCoin(int.Parse(args[1])); } break; case "addexp": { int level = 0; userData.AddExp(int.Parse(args[1]), out level); } break; } //sync var syncHero = new Task_G2C_SyncHero { Hero = userData.GetHero() }; var syncPackage = new Task_G2C_SyncPackage { Package = userData.GetPackage(), Gold = userData.Gold, Coin = userData.Coin }; NetProtoTool.SendTask(client, syncHero); NetProtoTool.SendTask(client, syncPackage); return(new G2C_GMTool { Code = ErrorCode.OK }); #else return(new G2C_GMTool { Code = ErrorCode.Error }); #endif } } }