// 请求快速升级士兵 public void RequestQuickTrainSoldier(int soldierCfgID, bool costRes) { PCMInt data = new PCMInt(); data.arg = soldierCfgID; Net.Send(eCommand.TRAIN_SOLIDER_RIGHT_NOW, data, (buffer) => { PBuildInfo ret = Net.Deserialize <PBuildInfo>(buffer); if (!Net.CheckErrorCode(ret.errorCode, eCommand.TRAIN_SOLIDER_RIGHT_NOW)) { return; } TrainBuildingInfo tbinfo = GetBuildingByType(CityBuildingType.TRAIN) as TrainBuildingInfo; if (tbinfo != null) { if (costRes) { // 扣去相应资源(先减再升级) UserManager.Instance.CostMoney(tbinfo.GetTrainCost(soldierCfgID), PriceType.MONEY); } // 无论哪种情况都要把黄金扣了 UserManager.Instance.CostMoney(tbinfo.GetQuickTrainCost(), PriceType.GOLD); tbinfo.Deserialize(ret); RefreshUI(tbinfo.EntityID); UIManager.Instance.RefreshWindow <UICityTrainSelectView>(); } }); }
public void RequestQuickProduceSoldier(long buildingID, int soldierID) { TroopBuildingInfo infoSend = GetBuilding(buildingID) as TroopBuildingInfo; if (infoSend == null) { return; } PCMLongInt data = new PCMLongInt(); data.arg1 = buildingID; data.arg2 = soldierID; Net.Send(eCommand.PRODUCT_SOLIDER_RIGHT_NOW, data, (buffer) => { PBuildInfo ret = Net.Deserialize <PBuildInfo>(buffer); if (!Net.CheckErrorCode(ret.errorCode, eCommand.PRODUCT_SOLIDER_RIGHT_NOW)) { return; } UserManager.Instance.CostMoney(infoSend.GetQuickProducingCost(), PriceType.GOLD); infoSend.Deserialize(ret); RefreshUI(buildingID); UIManager.Instance.CloseWindow <UICitySoldierSelectView>(); UIManager.Instance.CloseWindow <UICitySoldierSwitchView>(); }); }
// 请求取消生产士兵 public void RequestCancelProduceSoldier(long buildingID, int soldierID) { TroopBuildingInfo infoSend = GetBuilding(buildingID) as TroopBuildingInfo; if (infoSend == null) { return; } PCMLongInt data = new PCMLongInt(); data.arg1 = buildingID; data.arg2 = soldierID; Net.Send(eCommand.CANCLE_PRODUCT_SOLIDER, data, (buffer) => { PBuildInfo ret = Net.Deserialize <PBuildInfo>(buffer); if (!Net.CheckErrorCode(ret.errorCode, eCommand.CANCLE_PRODUCT_SOLIDER)) { return; } infoSend.Deserialize(ret); // 请求同步数据(因为士兵有生产过程,所以客户端很难去计算正确的结果) UserManager.Instance.RequestSyncRes(); RefreshUI(buildingID); }); }
// 请求补充士兵 public void RequestProduceSoldier(long buildingID, int soldierID, int cost) { PProductSolider data = new PProductSolider(); data.buildId = buildingID; data.soliderCfgId = soldierID; Net.Send(eCommand.PRODUCT_SOLIDERS, data, (buffer) => { PBuildInfo ret = Net.Deserialize <PBuildInfo>(buffer); if (!Net.CheckErrorCode(ret.errorCode, eCommand.PRODUCT_SOLIDERS)) { return; } TroopBuildingInfo info = GetBuilding(ret.buildId) as TroopBuildingInfo; if (info != null) { // 扣去相应资源 UserManager.Instance.CostMoney(cost, PriceType.MONEY); info.Deserialize(ret); RefreshUI(buildingID); UIManager.Instance.CloseWindow <UICitySoldierSelectView>(); UIManager.Instance.RefreshWindow <UICitySoldierSwitchView>(); } }); }
// 请求取消升级士兵 public void RequestCancelTrainSoldier(int soldierCfgID) { PCMInt data = new PCMInt(); data.arg = soldierCfgID; Net.Send(eCommand.CANCLE_TRAIN_SOLIDER, data, (buffer) => { PBuildInfo ret = Net.Deserialize <PBuildInfo>(buffer); if (!Net.CheckErrorCode(ret.errorCode, eCommand.CANCLE_TRAIN_SOLIDER)) { return; } TrainBuildingInfo tbinfo = GetBuildingByType(CityBuildingType.TRAIN) as TrainBuildingInfo; if (tbinfo != null) { int cost = tbinfo.GetTrainCost(tbinfo.TrainSoldierCfgID); // 返还资源 UserManager.Instance.AddMoney(Mathf.FloorToInt(cost * GameConfig.CITY_BUILDING_CANCEL_BACK), PriceType.MONEY); tbinfo.TrainSoldierCfgID = 0; tbinfo.TrainRemainTime = 0; tbinfo.TrainSyncTime = 0; RefreshUI(tbinfo.EntityID); } }); }
// 请求收获 public void RequestHarvest(long buildingID) { BuildingInfo infoSend = GetBuilding(buildingID); if (infoSend == null) { return; } PCMLongInt data = new PCMLongInt(); data.arg1 = buildingID; data.arg2 = infoSend.Cfg.BuildingType; Net.Send(eCommand.COLLECT_RESOURCE, data, (byte[] buffer) => { PBuildInfo ret = Net.Deserialize <PBuildInfo>(buffer); if (!Net.CheckErrorCode(ret.errorCode, eCommand.COLLECT_RESOURCE)) { return; } DoHarvest(buildingID, ret.addNum); // 刷新城池 EventDispatcher.TriggerEvent(EventID.EVENT_CITY_BUILDING_REFRESH, buildingID); // 刷新主界面的数据 EventDispatcher.TriggerEvent(EventID.EVENT_UI_MAIN_REFRESH_VALUE); }); }
public virtual void Deserialize(PBuildInfo data) { EntityID = data.buildId; ConfigID = data.cfgId; Level = data.level; LevelUpRemainTime.SetTimeMilliseconds(data.nextStatusTime); }
private void OnMsgPushBuildStatus(byte[] buffer) { PBuildInfo ret = Net.Deserialize <PBuildInfo>(buffer); if (!Net.CheckErrorCode(ret.errorCode, eCommand.PUSH_BUILD_STATUS)) { return; } BuildingInfo info = GetBuildingByConfigID(ret.cfgId); if (info == null) { return; } info.Deserialize(ret); info.OnLevelUpFinish(); if (info.BuildingType == CityBuildingType.PALACE) { // 如果是主城升级完毕,重新取建筑列表,可能会解锁建筑 RequestBuildingList(); } }
public override void Deserialize(PBuildInfo data) { base.Deserialize(data); // 兵营只有一个士兵数据 if (data.soliders.soliderList.Count > 0) { PSolider sdata = data.soliders.soliderList[0]; SoldierConfigID = sdata.soliderCfgId; SoldierCount = sdata.curNum; SoldierProduceRemainTime = Utils.GetSeconds(sdata.elpaseTime); SoldierTotalCount = sdata.trainNum; if (sdata.elpaseTime > 0) { SoldierProduceSyncTime = Time.realtimeSinceStartup; } else { SoldierProduceSyncTime = 0; } } else { SoldierConfigID = 0; SoldierCount = 0; SoldierProduceRemainTime = 0; SoldierProduceSyncTime = 0; SoldierTotalCount = 0; } }
// 请求立即升级建筑 public void RequestQuickUpgradeBuilding(long buildingID, bool costRes) { BuildingInfo infoSend = GetBuilding(buildingID); if (infoSend == null) { return; } PCMLongInt data = new PCMLongInt(); data.arg1 = buildingID; data.arg2 = infoSend.Cfg.BuildingType; Net.Send(eCommand.UPGRADE_BUILD_RIGHT_NOW, data, (buffer) => { PBuildInfo ret = Net.Deserialize <PBuildInfo>(buffer); if (!Net.CheckErrorCode(ret.errorCode, eCommand.UPGRADE_BUILD_RIGHT_NOW)) { return; } BuildingInfo info = GetBuilding(buildingID); if (info != null) { if (costRes) { // 扣除资源(如果是在升级过程中点击快速升级,则不扣除资源) UserManager.Instance.CostMoney(info.CfgLevel.CostStone, PriceType.STONE); UserManager.Instance.CostMoney(info.CfgLevel.CostWood, PriceType.WOOD); } UserManager.Instance.CostMoney(info.GetQuickLevelUpCost(false), PriceType.GOLD); info.Deserialize(ret); info.OnLevelUpFinish(); if (info.BuildingType == CityBuildingType.PALACE) { // 如果是主城升级完毕,重新取建筑列表,可能会解锁建筑 RequestBuildingList(); } } // 升级成功,更新建筑物的最大储量 UpdateMaxStorage(); RefreshUI(buildingID); }); }
// 请求升级建筑 public void RequestUpgradeBuilding(long buildingID) { if (IsInBuilding()) { return; } BuildingInfo infoSend = GetBuilding(buildingID); if (infoSend == null) { return; } PCMLongInt data = new PCMLongInt(); data.arg1 = buildingID; data.arg2 = infoSend.Cfg.BuildingType; Net.Send(eCommand.UPGRADE_BUILD_LEVEL, data, (byte[] buffer) => { PBuildInfo ret = Net.Deserialize <PBuildInfo>(buffer); if (!Net.CheckErrorCode(ret.errorCode, eCommand.UPGRADE_BUILD_LEVEL)) { return; } BuildingInfo info = GetBuilding(buildingID); if (info != null) { // 扣除相应资源 UserManager.Instance.CostMoney(info.CfgLevel.CostStone, PriceType.STONE); UserManager.Instance.CostMoney(info.CfgLevel.CostWood, PriceType.WOOD); info.Deserialize(ret); } // 升级的时候有增加的资源(当资源满的特殊情况) if (ret.addNum > 0) { DoHarvest(buildingID, ret.addNum); } RefreshUI(buildingID); EventDispatcher.TriggerEvent(EventID.EVENT_CITY_BUILDING_LEVELUP, buildingID); }); }
// 请求升级士兵 public void RequestTrainSoldier(int soldierID, int cost) { PCMInt data = new PCMInt(); data.arg = soldierID; Net.Send(eCommand.TRAIN_SOLIDERS, data, (buffer) => { PBuildInfo ret = Net.Deserialize <PBuildInfo>(buffer); if (!Net.CheckErrorCode(ret.errorCode, eCommand.TRAIN_SOLIDERS)) { return; } TrainBuildingInfo info = GetBuilding(ret.buildId) as TrainBuildingInfo; if (info != null) { UserManager.Instance.CostMoney(cost, PriceType.MONEY); info.Deserialize(ret); RefreshUI(info.EntityID); } }); }
public override void Deserialize(PBuildInfo data) { base.Deserialize(data); TrainRemainTime = 0; TrainSyncTime = 0; TrainSoldierCfgID = 0; // 处理兵种等级数据 CityManager.Instance.SoldierLevelList.Clear(); foreach (var item in data.soliders.soliderList) { if (item.elpaseTime > 0) { // 如果有士兵正在升级 TrainRemainTime = Utils.GetSeconds(item.elpaseTime); TrainSyncTime = Time.realtimeSinceStartup; TrainSoldierCfgID = item.soliderCfgId; } CityManager.Instance.SoldierLevelList[item.soliderCfgId] = item.level; } }
public ElapseTime ProduceRewardElapseTime; // 距离上次收获的经过的时间 public override void Deserialize(PBuildInfo data) { base.Deserialize(data); ProduceRewardElapseTime.SetTimeMilliseconds(data.elapseTime); }