private void OnMsgLoginServerList(byte[] buffer) { PRServerList ret = Net.Deserialize <PRServerList>(buffer); if (!Net.CheckErrorCode(ret.errorCode, eCommand.LOGIN_SERVER_LIST)) { return; } ServerManager.Instance.LoginServerList.Clear(); foreach (var item in ret.servers) { Log.Info("登录服务器: " + item.ip); ServerInfo info = new ServerInfo(); info.id = item.id; info.name = item.name; info.ip = item.ip; info.port = item.port; info.url = item.url; info.statusType = (ServerStatusType)item.type; ServerManager.Instance.LoginServerList.Add(info); } Log.Info("获取登陆服列表成功"); // 获取登陆服列表成功,登录 ServerManager.Instance.ConnectToLoginServer(); }
// 请求攻打城池 public void RequestAttack(int mapPos, long playerID, bool isNpc, int cost) { PAttack data = new PAttack(); data.pos = new PVector(); data.pos.x = mapPos; data.pos.y = (int)(isNpc ? eWorldMapType.NPC_CITY_MAP : eWorldMapType.PLAYER_CITY_MAP); data.defenserId = playerID; NetworkManager.Instance.Send(eCommand.READY_BT_OCCUPY_CITY, data, (buffer) => { PBattlVerify ret = Net.Deserialize <PBattlVerify>(buffer); if (!Net.CheckErrorCode(ret.errorCode, eCommand.READY_BT_OCCUPY_CITY)) { return; } BattleManager.Instance.StartBattle(ret.battleId, LogicBattleType.WORLD); UserManager.Instance.CostMoney(cost, PriceType.MONEY); EventDispatcher.TriggerEvent(EventID.EVENT_UI_MAIN_REFRESH_VALUE); // 刷新地图 // UIManager.Instance.RefreshWindow<UIWorldView>(); }); }
private void OnMsgAthteclicList(byte[] buffer) { PAthleticsList ret = Net.Deserialize <PAthleticsList>(buffer); if (!Net.CheckErrorCode(ret.errorCode, eCommand.ATHTECLIC_LIST)) { return; } PVPManager.Instance.AttackCount = ret.freeTimes; // 剩余次数 PVPManager.Instance.AttackRemainTime.SetTimeMilliseconds(ret.nextAthlecticTime); // 攻击冷却时间 PVPManager.Instance.MyRank = ret.rank; // 我的排名 PVPManager.Instance.MyHighRank = ret.maxRank; // 我的最高排名 // 对手 PVPManager.Instance.PlayerList.Clear(); foreach (var item in ret.athletics) { PVPPlayerInfo info = new PVPPlayerInfo(); info.Deserialize(item); PVPManager.Instance.PlayerList.Add(info); } PVPManager.Instance.SortPlayer(); // 刷新ui UIManager.Instance.RefreshWindow <UIPVPView>(); }
// 请求取消生产士兵 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); }); }
private void OnMsgGetBuildInfo(byte[] buffer) { PBuildList ret = Net.Deserialize <PBuildList>(buffer); if (!Net.CheckErrorCode(ret.errorCode, eCommand.GET_BUILD_INFO)) { return; } foreach (var item in ret.buildList) { BuildingInfo info = GetBuilding(item.buildId); if (info == null) { // 新增建筑 info = CreateBuilding(item.cfgId); BuildingList.Add(info); } info.Deserialize(item); } // 更新最大储量 UpdateMaxStorage(); // 刷新地图 UIManager.Instance.RefreshWindow <UICityView>(); }
private void OnRoleLevelUpgrade(byte[] buffer) { PRoleList ret = Net.Deserialize <PRoleList>(buffer); if (!Net.CheckErrorCode(ret.errorCode, eCommand.PUSH_ROLELEVEL_UPGRADE)) { return; } if (ret.roleAttr != null) { Deserialize(ret.roleAttr); } if (ret.heroAttr != null) { HeroInfo heroInfo = GetHeroInfo(ret.heroAttr.heroId); if (heroInfo != null) { heroInfo.Deserialize(ret.heroAttr, false); } } UIManager.Instance.RefreshWindow <UINewHeroView>(); EventDispatcher.TriggerEvent(EventID.EVENT_UI_MAIN_REFRESH_VALUE); }
// 请求快速升级士兵 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 RequestCancelUpgradeBuilding(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.CANCLE_UPGRADE_BUILD, data, (buffer) => { CommonAnswer ret = Net.Deserialize <CommonAnswer>(buffer); if (!Net.CheckErrorCode(ret.err_code, eCommand.CANCLE_UPGRADE_BUILD)) { return; } // 返还资源 UserManager.Instance.AddMoney(Mathf.FloorToInt(infoSend.CfgLevel.CostStone * GameConfig.CITY_BUILDING_CANCEL_BACK), PriceType.STONE); UserManager.Instance.AddMoney(Mathf.FloorToInt(infoSend.CfgLevel.CostWood * GameConfig.CITY_BUILDING_CANCEL_BACK), PriceType.WOOD); infoSend.LevelUpRemainTime.Reset(); // TODO 返还资源由服务器推送 RefreshUI(buildingID); }); }
// 请求锻造装备 public void RequestCombineEquip(int destCfgID, List <ItemInfo> itemList, bool isLuck, SmithyCost cost) { List <long> list = new List <long>(); foreach (var item in itemList) { list.Add(item.EntityID); } PCombineEquip data = new PCombineEquip(); data.destId = destCfgID; data.modelId.AddRange(list); data.type = isLuck ? eCombineType.COMBINE_LUCK : eCombineType.COMBINE_GOLD; Net.Send(eCommand.COMBINE_EQUIP, data, (buffer) => { PComItem ret = Net.Deserialize <PComItem>(buffer); if (!Net.CheckErrorCode(ret.errorCode, eCommand.COMBINE_EQUIP)) { return; } ItemInfo info = new ItemInfo(); info.Deserialize(ret); UserManager.Instance.AddItem(info, true); // 刷新锻造铺 UIManager.Instance.RefreshWindow <UISmithyView>(); UIManager.Instance.OpenWindow <UISmithyGetArmsView>(info); UserManager.Instance.Money -= cost.Money; UserManager.Instance.Gold -= cost.Gold; foreach (var item in cost.Mold) { ItemInfo old = UserManager.Instance.GetItem(item.EntityID); if (old != null) { UserManager.Instance.RemoveItem(old); } } foreach (var item in cost.Material) { if (item.CfgID == GameConfig.ITEM_CONFIG_ID_WOOD) { UserManager.Instance.Wood -= item.Count; } else if (item.CfgID == GameConfig.ITEM_CONFIG_ID_STONE) { UserManager.Instance.Stone -= item.Count; } else { UserManager.Instance.UseItemByConfigID(item.CfgID, item.Count); } } EventDispatcher.TriggerEvent(EventID.EVENT_UI_MAIN_REFRESH_VALUE); }); }
// 请求收获 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 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 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>(); }); }
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(); } }
private void OnMsgGetPlayerInfo(byte[] buffer) { PPlayerInfo ret = Net.Deserialize <PPlayerInfo>(buffer); if (ret.errorCode != 0) { // 创建新的角色 if (ret.errorCode == (int)eErrorCode.NO_PLAYER_ERROR) { UIManager.Instance.OpenWindow <UICreateRoleView>(); return; } } if (!Net.CheckErrorCode(ret.errorCode, eCommand.GET_PLAYER_INFO)) { return; } UserManager.Instance.Deserialize(ret); if (!Game.Instance.IsInGame) { // 加入游戏 UserManager.Instance.JoinGame(); } }
// 请求取消升级士兵 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 ReqSellItem(long itemID, int count) { PUseCommonItem data = new PUseCommonItem(); data.comItem.Add(new PComItem { id = itemID, num = count, }); Net.Send(eCommand.SALE_GOOD_TOSYS, data, (buffer) => { CommonAnswer ret = Net.Deserialize <CommonAnswer>(buffer); if (!Net.CheckErrorCode(ret.err_code, eCommand.SALE_GOOD_TOSYS)) { return; } ItemInfo info = GetItem(itemID); if (info != null) { AddMoney(info.Cfg.Price * count, PriceType.MONEY); } UseItem(itemID, count); UIManager.Instance.RefreshWindow <UINewBagView>(); }); }
// 设置阵型 public void ReqSetFormation() { PSetLineUp data = new PSetLineUp(); data.lineType = eLineUpType.BT_PVE; int index = 0; foreach (var item in PVEHeroList) { ++index; data.positionHero.Add(new PPosionInfo { pos = index, arg = item.EntityID, }); } Net.Send(eCommand.SET_LINE_UP, data, (buffer) => { CommonAnswer ret = Net.Deserialize <CommonAnswer>(buffer); if (!Net.CheckErrorCode(ret.err_code, eCommand.SET_LINE_UP)) { return; } }); }
private bool Recv() { if (!IsConnected()) { return(false); } // 检查消息头(小于HEADER_SIZE,则无法获取到实际消息数据) if (_recvSize < HEADER_SIZE) { return(false); } // 计算要拷贝的消息的消息头 int startIndex = _recvStartIndex; int msgLength = NetUtil.ReadIntFromRing(_recieveBuffer, startIndex, RECIEVE_BUFFER_SIZE); startIndex = (startIndex + sizeof(int)) % RECIEVE_BUFFER_SIZE; // 检查是否有一个消息(小于实际消息长度,则无法获取到实际消息数据) if (_recvSize < msgLength) { return(false); } // 读取实际消息数据(protobuf数据) byte[] buffer = new byte[msgLength]; NetUtil.ReadByteFromRing(_recieveBuffer, startIndex, RECIEVE_BUFFER_SIZE, buffer, msgLength); // 当成功接收完一个消息,则修改缓冲区头的位置 _recvStartIndex = (startIndex + msgLength) % RECIEVE_BUFFER_SIZE; _recvSize -= (HEADER_SIZE + msgLength); // 解析消息为rpc结构 MemoryStream stream = new MemoryStream(buffer); RPCResponse msgResponse = ProtoBuf.Serializer.Deserialize <RPCResponse>(stream); try { // 消息信息提示 Net.CheckErrorCode(msgResponse.ErrCode, msgResponse.MsgID); ProcessMsg(msgResponse); Action <RPCResponse> callback; if (_messageResponseCallback.TryGetValue(msgResponse.MsgIdentifier, out callback)) { if (callback != null) { callback(msgResponse); } _messageResponseCallback.Remove(msgResponse.MsgIdentifier); } } catch (Exception e) { Log.Exception(e); } return(true); }
private void OnGetSomeHerosInfo(byte[] buffer) { PPlayerInfo ret = Net.Deserialize <PPlayerInfo>(buffer); if (!Net.CheckErrorCode(ret.errorCode, eCommand.GET_SOME_HEROS_INFO)) { return; } UserManager.Instance.Deserialize(ret); }
private void OnMsgOtherHeroInfo(byte[] buffer) { PPlayerInfo ret = Net.Deserialize <PPlayerInfo>(buffer); if (!Net.CheckErrorCode(ret.errorCode, eCommand.OTHER_HERO_INF0)) { return; } UserManager.Instance.Deserialize(ret); }
private void OnGetRoleInfo(byte[] buffer) { PPlayerInfo ret = Net.Deserialize <PPlayerInfo>(buffer); if (!Net.CheckErrorCode(ret.errorCode, eCommand.GET_ROLE_INFO)) { return; } Deserialize(ret); }
private void OnMsgGetAssetInfo(byte[] buffer) { PAssertAttr ret = Net.Deserialize <PAssertAttr>(buffer); if (!Net.CheckErrorCode(ret.errorCode, eCommand.GET_ASSERT_INFO)) { return; } Deserialize(ret); }
// 请求购买资源 public void RequestBuyRes(ResourceType retType, int cost, int resValue) { PChance data = new PChance(); data.num = cost; data.priceType = ePriceType.DIAMOND; switch (retType) { case ResourceType.MONEY: data.chance = eChance.CHAN_GOLD; break; case ResourceType.WOOD: data.chance = eChance.CHAN_WOOD; break; case ResourceType.STONE: data.chance = eChance.CHAN_STONE; break; } NetworkManager.Instance.Send(eCommand.BUY_CHANCE, data, (buffer) => { PChance ret = Net.Deserialize <PChance>(buffer); if (!Net.CheckErrorCode(ret.errorCode, eCommand.BUY_CHANCE)) { return; } switch (ret.chance) { case eChance.CHAN_GOLD: // 购买银两 Money += ret.num; CostMoney(cost, PriceType.GOLD); break; case eChance.CHAN_WOOD: // 购买木材 Wood += ret.num; CostMoney(cost, PriceType.GOLD); break; case eChance.CHAN_STONE: // 购买石材 Stone += ret.num; CostMoney(cost, PriceType.GOLD); break; } EventDispatcher.TriggerEvent(EventID.EVENT_UI_MAIN_REFRESH_VALUE); }); }
private void OnMsgReadyAthteclicChallenge(byte[] buffer) { PBattlVerify ret = Net.Deserialize <PBattlVerify>(buffer); if (!Net.CheckErrorCode(ret.errorCode, eCommand.READY_ATHTECLIC_CHALLENGE)) { return; } BattleManager.Instance.StartBattle(ret.battleId, LogicBattleType.PVP); }
private void OnMsgRegister(byte[] buffer) { AccountAnswer ret = Net.Deserialize <AccountAnswer>(buffer); if (!Net.CheckErrorCode(ret.errorCode, eCommand.REGISTER)) { return; } // 注册成功 ServerManager.Instance.Login(); }
// 请求自己的公会数据 public void RequestGuildInfo() { Net.Send(eCommand.ADJUST_PLAYER_LEVEL, (buffer) => { PComItemList ret = Net.Deserialize <PComItemList>(buffer); if (!Net.CheckErrorCode(ret.errorCode, eCommand.ADJUST_PLAYER_LEVEL)) { return; } UIManager.Instance.RefreshWindow <UIGuildInfoView>(); }); }
private void OnMsgBuyEnergy(byte[] buffer) { PRoleEnergy ret = Net.Deserialize <PRoleEnergy>(buffer); if (!Net.CheckErrorCode(ret.errorCode, eCommand.BUYE_ENERGY)) { return; } UserManager.Instance.SP += GameConfig.BUY_SP_GET; UserManager.Instance.CostMoney(GameConfig.BUY_SP_COST, PriceType.GOLD); EventDispatcher.TriggerEvent(EventID.EVENT_UI_REFRESH_SP); }
private void OnMsgSysAddGood(byte[] buffer) { PComItemList ret = Net.Deserialize <PComItemList>(buffer); if (!Net.CheckErrorCode(ret.errorCode, eCommand.SYS_ADD_GOOD)) { return; } UserManager.Instance.AddItem(ret, false); // 刷新ui UIManager.Instance.RefreshWindow <UINewBagView>(); EventDispatcher.TriggerEvent(EventID.EVENT_UI_MAIN_REFRESH_VALUE); }
private void OnGetSkillPoint(byte[] buffer) { PSkillPoint ret = Net.Deserialize <PSkillPoint>(buffer); if (!Net.CheckErrorCode(ret.errorCode, eCommand.GET_SKILL_POINT)) { return; } Log.Info("获取玩家技能点信息成功: {0} {1}", ret.skillPoint, ret.nextTime / 1000.0f); UserManager.Instance.SetSkillPoint(ret.skillPoint, ret.nextTime); EventDispatcher.TriggerEvent(EventID.EVENT_UI_REFRESH_SKILL_POINT); }
// 酒馆抽卡,元宝10次 public void RequestTavernGoldBuy10() { NetworkManager.Instance.Send(eCommand.TEN_CONTINUE_DIAMOND_LUCK_DRAW, (buffer) => { PComItemList ret = Net.Deserialize <PComItemList>(buffer); if (!Net.CheckErrorCode(ret.errorCode, eCommand.TEN_CONTINUE_DIAMOND_LUCK_DRAW)) { return; } OnTavernBuyOK(ret, GameConfig.LUCK_DRAW_GOLD_ITEM_ID, 10, TavernBuyAction.BUY_GOLD_10); UserManager.Instance.CostMoney(GameConfig.LUCK_DRAW_GOLD_10_COST, PriceType.GOLD); RefreshUI(); }); }