using ProtoCSStruct; using Sog; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Game { public static class PlayerPresetSvc { public static void PlayerBorn(PlayerOnGame player) { for(int i = 0; i < player.RoleData.Preset.Sets.GetMaxCount(); i++) { player.RoleData.Preset.Sets.Add(new DBPresetOne() {Saved=false }); } } public static void PresetSave(PlayerOnGame player, StructPacket packet) { ref var req = ref packet.GetMessage(); int index = req.PresetIndex; if(index < 0 || index >= player.RoleData.Preset.Sets.Count) { return; } ref var setOne = ref player.RoleData.Preset.Sets[index]; //旧预设的装备和宝石要清除预设索引 //for (int i = 0; i < setOne.WearEquip.Count; i++) //{ // int serialNum = setOne.WearEquip[i].Id; // //遍历全部预设,判断是否存在 // bool exist = false; // for(int j = 0; j < player.RoleData.Preset.Sets.Count; j++) // { // if(j != index) // { // for(int k = 0; k < player.RoleData.Preset.Sets[j].WearEquip.Count; k++) // { // if (player.RoleData.Preset.Sets[j].WearEquip[k].Id == serialNum) // { // exist = true; // break; // } // } // if (exist) break; // } // } // if (!exist) // { // exist = false; // for (int j = 0; j < player.RoleData.PandoraBag.EquipList.Count; j++) // { // ref var eq = ref player.RoleData.PandoraBag.EquipList[j]; // if (eq.SerialNum == serialNum) // { // eq.PreSetIndex = 0; // exist = true; // break; // } // } // if (!exist) // { // for (int j = 0; j < player.RoleData.PandoraBag.EquipDepot.Count; j++) // { // ref var eq = ref player.RoleData.PandoraBag.EquipDepot[j]; // if (eq.SerialNum == serialNum) // { // eq.PreSetIndex = 0; // break; // } // } // } // } //} setOne.WearEquip.Clear(); for (int i = 0; i < player.RoleData.Knight.DbHero.WearEquip.Count; i++) { setOne.WearEquip.Add( new IDValue32() { Id = player.RoleData.Knight.DbHero.WearEquip[i].SerialNum, Value = player.RoleData.Knight.DbHero.WearEquip[i].Pos } ); } ////旧预设的装备和宝石要清除预设索引 //for (int i = 0; i < setOne.WearGem.Count; i++) //{ // int serialNum = setOne.WearGem[i].Id; // //遍历全部预设,判断是否存在 // bool exist = false; // for (int j = 0; j < player.RoleData.Preset.Sets.Count; j++) // { // if (j != index) // { // for (int k = 0; k < player.RoleData.Preset.Sets[j].WearGem.Count; k++) // { // if (player.RoleData.Preset.Sets[j].WearGem[k].Id == serialNum) // { // exist = true; // break; // } // } // if (exist) break; // } // } // if (!exist) // { // for (int j = 0; j < player.RoleData.PandoraBag.GemList.Count; j++) // { // ref var eq = ref player.RoleData.PandoraBag.GemList[j]; // if (eq.ConfId == serialNum) // { // eq.PreSetIndex = 0; // break; // } // } // } //} setOne.WearGem.Clear(); for (int i = 0; i < player.RoleData.Knight.DbHero.WearGem.Count; i++) { setOne.WearGem.Add(new IDValue32 { Id = player.RoleData.Knight.DbHero.WearGem[i].ConfId, Value = player.RoleData.Knight.DbHero.WearGem[i].Pos }); } setOne.Talents.CopyFrom(ref player.RoleData.Talent); setOne.WingskinId = player.RoleData.WingData.Wing.SkinId; setOne.WingrefitId = player.RoleData.WingData.Wing.RefitId; setOne.WingwearId = player.RoleData.WingData.Wing.WearId; setOne.PropView.CopyFrom(ref player.RoleData.Knight.PropView); setOne.Saved = true; var res = new CSPresetSaveRes(); res.PresetIndex = index; res.Ret = CSErrCode.None; res.Preset.CopyFrom(ref player.RoleData.Preset); player.SendToClient((int)CSGameMsgID.PresetSaveRes, ref res); } public static void PresetApplyReq(PlayerOnGame player, StructPacket packet) { ref var req = ref packet.GetMessage(); int index = req.PresetIndex; if (index < 0 || index >= player.RoleData.Preset.Sets.Count) { return; } ref var setOne = ref player.RoleData.Preset.Sets[index]; if(!setOne.Saved) { return; } //先卸下所有的装备 for (var i = EquipmentPos.Helmet; i < EquipmentPos.Max; i++ ) { if (!(i == EquipmentPos.LeftGun || i == EquipmentPos.RightGun)) { EquipmentSvc.UnWearEquip(player, (int)i); } } for (int i = 0; i < setOne.WearEquip.Count; i++) { var equipId = setOne.WearEquip[i]; //不存在的装备要卸下当前的,武器不卸下 int idx = -1; for (int j = 0; j < player.RoleData.PandoraBag.EquipList.Count; j++) { ref var eq = ref player.RoleData.PandoraBag.EquipList[j]; if (eq.SerialNum == equipId.Id) { idx = i; break; } } if (idx == -1) { } else { EquipmentSvc.WearEquip(player, equipId.Id, -1, false, false); } } //宝石先全部卸下 var gemList = new List(); for (int j = 0; j < player.RoleData.Knight.DbHero.WearGem.Count; j++) { ref var gem = ref player.RoleData.Knight.DbHero.WearGem[j]; gemList.Add(gem.ConfId); } foreach (var gemId in gemList) { GemSvc.GemUnWear(player, gemId, false); } for (int i = 0; i < setOne.WearGem.Count; i++) { var gemId = setOne.WearGem[i]; //不存在的宝石要卸下当前的 int idx = -1; for (int j = 0; j < player.RoleData.PandoraBag.GemList.Count; j++) { ref var gem = ref player.RoleData.PandoraBag.GemList[j]; if (gem.ConfId == gemId.Id) { idx = i; break; } } if (idx == -1) { } else { GemSvc.GemWearOn(player, gemId.Id, gemId.Value, false, false); } } player.RoleData.Talent.TalentPage.Items.CopyFrom(ref setOne.Talents.TalentPage.Items); player.RoleData.Talent.PeakData.Items.CopyFrom(ref setOne.Talents.PeakData.Items); player.RoleData.WingData.Wing.SkinId = setOne.WingskinId; player.RoleData.WingData.Wing.RefitId = setOne.WingrefitId; player.RoleData.WingData.Wing.WearId = setOne.WingwearId; WingSvc.SyncData(player); RolePropUtil.RecalRoleProp(player); PlayerDataSvc.SendHeroInfoSync(player); PlayerDataSvc.SendBagInfoSync(player); TalentSvc.SyncData(player); var res = new CSPresetApplyRes(); res.Ret = CSErrCode.None; res.PresetIndex = index; player.SendToClient((int)CSGameMsgID.PresetApplyRes, ref res); } public static void PresetBuyOneReq(PlayerOnGame player, StructPacket packet) { var req = packet.GetMessage(); int buyCount = player.RoleData.Preset.BuyCount; int free = 0; int maxBuy = 0; for(int i = 0; i < CommParamDescMgr.Instance.SchemeCostNum.int_list.Length; i++) { if (CommParamDescMgr.Instance.SchemeCostNum.int_list[i] == 0) { free++; } else { maxBuy++; } } if(buyCount >= maxBuy) { return; } int cost = CommParamDescMgr.Instance.SchemeCostNum.int_list[free + buyCount]; UnifyOp bagOp = new UnifyOp(player, BillChangeItemReason.Preset, "PresetBuyOneReq"); bagOp.CostItem(CommParamDescMgr.Instance.SchemeCostId.str_val, cost); var ret = bagOp.DoOp(); var res = new CSPresetBuyOneRes(); if (ret == CSErrCode.None) { player.RoleData.Preset.BuyCount++; res.Ret = CSErrCode.None; } else { res.Ret = ret; } res.Preset.CopyFrom(ref player.RoleData.Preset); player.SendToClient((int)CSGameMsgID.PresetBuyOneRes, ref res); } public static void PresetRenameReq(PlayerOnGame player, StructPacket packet) { var req = packet.GetMessage(); int index = req.PresetIndex; if (index < 0 || index >= player.RoleData.Preset.Sets.Count) { return; } int iRet = PlayerUtils.CheckRenameValid(req.Name.GetString()); if (iRet != 0) { var res = new CSPresetRenameRes(); res.Ret = CSErrCode.IncludeIllegalWord; player.SendToClient((int)CSGameMsgID.PresetRenameRes, ref res); return; } DirtyStringSvc.DealDirtyStringCheck(player, DirtyStringCheckType.CSPresetRenameReq, ref req, req.Name.GetString()); } public static void DealCSPresetRenameReq(PlayerOnGame player, DirtyStringCheckObj checkObj, ref SSCheckDirtyStringRes checkRes) { CSPresetRenameReq req = (CSPresetRenameReq)checkObj.obj; CSErrCode ret = 0; if (checkRes.Result == 0) { player.RoleData.Preset.Sets[req.PresetIndex].Name.SetString(req.Name.GetString()); CSPresetRenameRes res = new CSPresetRenameRes(); res.Ret = ret; res.PresetIndex = req.PresetIndex; res.Preset.CopyFrom(ref player.RoleData.Preset); player.SendToClient((int)CSGameMsgID.PresetRenameRes, ref res); return; } else if (checkRes.Result == 1) { ret = CSErrCode.IncludeIllegalWord; } else { ret = CSErrCode.SysFailure; } if (ret != 0) { CSPresetRenameRes res = new CSPresetRenameRes(); res.Ret = ret; player.SendToClient((int)CSGameMsgID.PresetRenameRes, ref res); } } } }