Exemple #1
0
    // 请求快速升级士兵
    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>();
            }
        });
    }
Exemple #2
0
    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>();
        });
    }
Exemple #3
0
    // 请求取消生产士兵
    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);
        });
    }
Exemple #4
0
    // 请求补充士兵
    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>();
            }
        });
    }
Exemple #5
0
    // 请求取消升级士兵
    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);
            }
        });
    }
Exemple #6
0
    // 请求收获
    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);
        });
    }
Exemple #7
0
 public virtual void Deserialize(PBuildInfo data)
 {
     EntityID = data.buildId;
     ConfigID = data.cfgId;
     Level    = data.level;
     LevelUpRemainTime.SetTimeMilliseconds(data.nextStatusTime);
 }
Exemple #8
0
    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;
        }
    }
Exemple #10
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);
        });
    }
Exemple #11
0
    // 请求升级建筑
    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);
        });
    }
Exemple #12
0
    // 请求升级士兵
    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);
            }
        });
    }
Exemple #13
0
    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);
    }