private void OnCityAddReply(byte[] bytes) { CityAddReply input = CityAddReply.Parser.ParseFrom(bytes); if (!input.Ret) { string msg = $"创建城市失败!"; GameRoomManager.Instance.Log("MSG: CityAddReply Error - " + msg); return; } UrbanCity city = new UrbanCity() { RoomId = input.RoomId, OwnerId = input.OwnerId, CityId = input.CityId, PosX = input.PosX, PosZ = input.PosZ, CellIndex = input.CellIndex, CityName = input.CityName, CitySize = input.CitySize, IsCapital = input.IsCapital, }; bool isMyCity = input.OwnerId == GameRoomManager.Instance.CurrentPlayer.TokenId; UrbanManager.AddCity(city, isMyCity); if (city.OwnerId == GameRoomManager.Instance.CurrentPlayer.TokenId && city.IsCapital) { GameRoomManager.Instance.HexmapHelper.SetCameraPosition(input.CellIndex); } GameRoomManager.Instance.Log($"RoomLogic OnCityAddReply OK - 创建城市,坐标:{city.PosX}, {city.PosZ} - Index:{city.CellIndex} - CitySize:{city.CitySize} - IsCapital:{city.IsCapital}"); }
private void OnCityAdd(SocketAsyncEventArgs args, byte[] bytes) { CityAdd input = CityAdd.Parser.ParseFrom(bytes); if (input.RoomId != RoomId) { return; // 不是自己房间的消息,略过 } // 删除建造城市的开拓者 { bool ret = ActorManager.RemoveActor(input.CreatorId); ActorRemoveReply output = new ActorRemoveReply() { RoomId = input.RoomId, OwnerId = input.OwnerId, ActorId = input.CreatorId, Ret = ret, }; BroadcastMsg(ROOM_REPLY.ActorRemoveReply, output.ToByteArray()); } if (input.CellIndex == 0) { Debug.LogError("OnCityAdd F**k!!! City position is lost!!!"); } bool isCapiirtal = UrbanManager.CountOfThePlayer(input.OwnerId) == 0; // 第一座城市是都城 UrbanCity city = new UrbanCity() { RoomId = input.RoomId, OwnerId = input.OwnerId, CityId = input.CityId, PosX = input.PosX, PosZ = input.PosZ, CellIndex = input.CellIndex, CityName = input.CityName, CitySize = input.CitySize, IsCapital = isCapiirtal, }; UrbanManager.AddCity(city); { CityAddReply output = new CityAddReply() { RoomId = input.RoomId, OwnerId = input.OwnerId, CityId = input.CityId, PosX = input.PosX, PosZ = input.PosZ, CellIndex = input.CellIndex, CityName = input.CityName, CitySize = input.CitySize, IsCapital = isCapiirtal, Ret = true, }; BroadcastMsg(ROOM_REPLY.CityAddReply, output.ToByteArray()); } }
private static void DOWNLOAD_CITIES(byte [] bytes) { DownloadCities input = DownloadCities.Parser.ParseFrom(bytes); RoomLogic roomLogic = ServerRoomManager.Instance.GetRoomLogic(input.RoomId); if (roomLogic == null) { string msg = $"Battlefield is not found!"; // 战场没有找到 ServerRoomManager.Instance.Log("MSG: DOWNLOAD_CITIES Error - " + msg + $" - {input.RoomId}"); DownloadCitiesReply output = new DownloadCitiesReply() { RoomId = input.RoomId, Ret = false, ErrMsg = msg, }; ServerRoomManager.Instance.SendMsg(_args, ROOM_REPLY.DownloadCitiesReply, output.ToByteArray()); return; } PlayerInfo pi = ServerRoomManager.Instance.GetPlayer(_args); if (pi == null) { string msg = $"Current Player is not found!"; // 当前玩家没有找到 ServerRoomManager.Instance.Log("MSG: DOWNLOAD_CITIES Error - " + msg); DownloadCitiesReply output = new DownloadCitiesReply() { RoomId = input.RoomId, Ret = false, }; ServerRoomManager.Instance.SendMsg(_args, ROOM_REPLY.DownloadCitiesReply, output.ToByteArray()); return; } long OwnerId = pi.Enter.TokenId; long capitalCityId = 0; foreach (var keyValue in roomLogic.UrbanManager.AllCities) { UrbanCity city = keyValue.Value; if (city.IsCapital && city.OwnerId == OwnerId) { capitalCityId = city.CityId; } CityAddReply output = new CityAddReply() { RoomId = city.RoomId, OwnerId = city.OwnerId, CityId = city.CityId, PosX = city.PosX, PosZ = city.PosZ, CellIndex = city.CellIndex, CityName = city.CityName, CitySize = city.CitySize, IsCapital = city.IsCapital, Ret = true, }; ServerRoomManager.Instance.SendMsg(_args, ROOM_REPLY.CityAddReply, output.ToByteArray()); } { DownloadCitiesReply output = new DownloadCitiesReply() { RoomId = input.RoomId, TotalCount = roomLogic.UrbanManager.AllCities.Count, MyCount = roomLogic.UrbanManager.CountOfThePlayer(OwnerId), CapitalCityId = capitalCityId, Ret = true, }; ServerRoomManager.Instance.SendMsg(_args, ROOM_REPLY.DownloadCitiesReply, output.ToByteArray()); ServerRoomManager.Instance.Log($"MSG: DOWNLOAD_CITIES OK - Player:{pi.Enter.Account} - City Count:{output.MyCount}/{output.TotalCount}"); } }