private static void DOWNLOAD_CITIES_REPLY(byte[] bytes) { DownloadCitiesReply input = DownloadCitiesReply.Parser.ParseFrom(bytes); if (!input.Ret) { string msg = $"查询城市信息失败!"; GameRoomManager.Instance.Log("MSG: DOWNLOAD_CITIES_REPLY Error - " + msg); return; } GameRoomManager.Instance.Log($"MSG: DOWNLOAD_CITIES_REPLY OK - 城市个数:{input.MyCount}/{input.TotalCount}"); // 如果我一个城市都没有,则主动创建一个城市 if (input.MyCount == 0) { UrbanCity city = GameRoomManager.Instance.RoomLogic.UrbanManager.CreateRandomCity(); if (city == null) { string msg = "自动创建城市失败!"; UIManager.Instance.SystemTips(msg, PanelSystemTips.MessageType.Error); GameRoomManager.Instance.Log("MSG: DOWNLOAD_CITIES_REPLY - " + msg); } else { CityAdd output = new CityAdd() { RoomId = city.RoomId, OwnerId = city.OwnerId, CityId = city.CityId, PosX = city.PosX, PosZ = city.PosZ, CellIndex = city.CellIndex, CityName = city.CityName, CitySize = city.CitySize, }; GameRoomManager.Instance.SendMsg(ROOM.CityAdd, output.ToByteArray()); GameRoomManager.Instance.Log("MSG: DOWNLOAD_CITIES_REPLY OK - 申请创建城市..."); } } { string msg = $"查询城市信息成功!"; GameRoomManager.Instance.Log("MSG: DOWNLOAD_CITIES_REPLY OK - " + msg + $"City Count:{input.MyCount}/{input.TotalCount}"); } // 进入房间整体流程完成 UIManager.Instance.EndLoading(); }
private static void DOWNLOAD_ACTORS(byte[] bytes) { DownloadActors input = DownloadActors.Parser.ParseFrom(bytes); RoomLogic roomLogic = ServerRoomManager.Instance.GetRoomLogic(input.RoomId); if (roomLogic == null) { string msg = $"Battlefield is not found!"; // 战场没有找到 ServerRoomManager.Instance.Log("MSG: DOWNLOAD_ACTORS Error - " + msg + $" - {input.RoomId}"); DownloadCitiesReply output = new DownloadCitiesReply() { RoomId = input.RoomId, Ret = false, ErrMsg = msg, }; ServerRoomManager.Instance.SendMsg(_args, ROOM_REPLY.DownloadActorsReply, output.ToByteArray()); return; } // 把房间内已有的所有actor都发给本人 foreach (var keyValue in roomLogic.ActorManager.AllActors) { ActorBehaviour ab = keyValue.Value; if (ab.CellIndex == 0) { Debug.LogError("DOWNLOAD_ACTORS Erro - Actor position is lost!!!"); continue; } ActorAddReply output = new ActorAddReply() { RoomId = ab.RoomId, OwnerId = ab.OwnerId, ActorId = ab.ActorId, PosX = ab.PosX, PosZ = ab.PosZ, CellIndex = ab.CellIndex, Orientation = ab.Orientation, Species = ab.Species, ActorInfoId = ab.ActorInfoId, Name = ab.Name, Hp = ab.Hp, HpMax = ab.HpMax, AttackPower = ab.AttackPower, DefencePower = ab.DefencePower, Speed = ab.Speed, FieldOfVision = ab.FieldOfVision, ShootingRange = ab.ShootingRange, AttackDuration = ab.AttackDuration, AttackInterval = ab.AttackInterval, AmmoBase = ab.AmmoBase, AmmoBaseMax = ab.AmmoBaseMax, // High AI params HighAiState = ab.HighAiState, HighAiTargetId = ab.HighAiTargetId, HighAiCellIndexTo = ab.HighAiCellIndexTo, HighAiDurationTime = ab.HighAiDurationTime, HighAiTotalTime = ab.HighAiTotalTime, Ret = true, }; ServerRoomManager.Instance.SendMsg(_args, ROOM_REPLY.ActorAddReply, output.ToByteArray()); // 更新AI状态, 注: 尽管参数与ActorAiStateReply一样, 但是这里是高级AI状态 if (ab.HighAiDurationTime > 0) { ab.HighAiDurationTime -= (float)(DateTime.Now - ab.HighAiStartTime).TotalSeconds; if (ab.HighAiDurationTime < 0f) { ServerRoomManager.Instance.Log($"RoomMsgReply DOWNLOAD_ACTORS Error - HighAiDurationTime is less than 0 - Name:{ab.Name} - Time:{ab.HighAiDurationTime}"); ab.HighAiDurationTime = 0f; } } } { PlayerInfo pi = ServerRoomManager.Instance.GetPlayer(_args); if (pi == null) { string msg = $"当前玩家没有找到!"; ServerRoomManager.Instance.Log("MSG: DOWNLOAD_ACTORS Error - " + msg); DownloadCitiesReply output = new DownloadCitiesReply() { RoomId = input.RoomId, Ret = false, ErrMsg = msg, }; ServerRoomManager.Instance.SendMsg(_args, ROOM_REPLY.DownloadActorsReply, output.ToByteArray()); return; } pi.IsReady = true; // 客户端准备好了,可以检测心跳了 long OwnerId = pi.Enter.TokenId; { DownloadActorsReply output = new DownloadActorsReply() { RoomId = input.RoomId, TotalCount = roomLogic.UrbanManager.AllCities.Count, MyCount = roomLogic.UrbanManager.CountOfThePlayer(OwnerId), Ret = true, }; ServerRoomManager.Instance.SendMsg(_args, ROOM_REPLY.DownloadActorsReply, output.ToByteArray()); ServerRoomManager.Instance.Log($"MSG: DOWNLOAD_ACTORS OK - Player:{pi.Enter.Account} - City Count:{output.MyCount}/{output.TotalCount}"); } } }
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}"); } }