1
This commit is contained in:
@@ -453,31 +453,20 @@ namespace Assets.MyGame.Scripts.Net
|
||||
break;
|
||||
case "ChangeControllerUser":
|
||||
{
|
||||
// ⭐ 房主控制权移交:仅维护 roomOwnerSit,不再设置 fangzhu
|
||||
// (鱼创建已由服务端 OnFishSpawn 统一下发,客户端无需房主出鱼)
|
||||
var userId = JsonConvert.DeserializeObject<WebSocketResponseBase<string>>(msg).arguments[0];
|
||||
if (userId == GameManager.Instance.user.id)
|
||||
{
|
||||
// 本地玩家成为房主:开启出鱼 + 同步本地房主引用
|
||||
CreateFishManager.Instance.fangzhu = true;
|
||||
if (SitPosData.localPlayerSit != null)
|
||||
SitPosData.roomOwnerSit = SitPosData.localPlayerSit;
|
||||
}
|
||||
else if (userId != null && userId.StartsWith("bot_"))
|
||||
{
|
||||
// 房主是人机:人机无法真正发包,由本地首个非人机玩家代发
|
||||
// 房主是人机:由本地首个非人机玩家代行房主显示职责
|
||||
SitPosData.TransferRoomOwner();
|
||||
CreateFishManager.Instance.fangzhu =
|
||||
SitPosData.roomOwnerSit != null &&
|
||||
SitPosData.roomOwnerSit.user == GameManager.Instance.user.id;
|
||||
}
|
||||
else
|
||||
{
|
||||
// ⭐ 只在 userId 非空且确实是真人玩家时才停止本地出鱼
|
||||
// userId 为空(异常情况)时保持原状,避免误关出鱼导致 bot 退出后不出鱼
|
||||
if (!string.IsNullOrEmpty(userId))
|
||||
CreateFishManager.Instance.fangzhu = false;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
case "Exception":
|
||||
{
|
||||
@@ -590,18 +579,8 @@ namespace Assets.MyGame.Scripts.Net
|
||||
break;
|
||||
|
||||
case "KillNotice":
|
||||
{
|
||||
var data = JsonConvert.DeserializeObject<WebSocketResponseBase<Dictionary<string, object>>>(msg).arguments[0];
|
||||
if (data == null) break;
|
||||
// { FishId, userName, gold }
|
||||
string userName = data.TryGetValue("userName", out var un) ? un?.ToString() : "";
|
||||
string fishId = data.TryGetValue("FishId", out var fi) ? fi?.ToString() : "";
|
||||
long gold = data.TryGetValue("gold", out var g) ? Convert.ToInt64(g) : 0;
|
||||
string roomName = GameManager.Instance.gameData.currRoomData?.roomName ?? "";
|
||||
string roomLevel = GameManager.Instance.gameData.currRoomData?.roomLevel.ToString() ?? "";
|
||||
string msgText = $"恭喜用户{userName} 在 {roomName} {roomLevel}场 捕获了{fishId}*{gold}倍";
|
||||
//UIManager.Instance.ShowBoardGongGao(msgText);
|
||||
}
|
||||
// 全局击杀公告(真人击杀/机器人模拟)
|
||||
WebSocketReponseList.KillNotice(msg);
|
||||
break;
|
||||
|
||||
case "OnFishExpired":
|
||||
@@ -612,49 +591,48 @@ namespace Assets.MyGame.Scripts.Net
|
||||
break;
|
||||
|
||||
case "OnFishList":
|
||||
{
|
||||
var fishList = JsonConvert.DeserializeObject<WebSocketResponseBase<object[]>>(msg).arguments[0];
|
||||
Debug.Log($"[FishGameHub] 鱼列表刷新, 数量={fishList?.Length}");
|
||||
}
|
||||
// 鱼列表刷新
|
||||
WebSocketReponseList.OnFishList(msg);
|
||||
break;
|
||||
|
||||
// ======== FishGameHub / FishRoomHub 补充事件 ========
|
||||
|
||||
case "BotLeaveRoomNotice":
|
||||
{
|
||||
// 机器人退出房间,数据 { userId }
|
||||
var data = JsonConvert.DeserializeObject<WebSocketResponseBase<Dictionary<string, object>>>(msg).arguments[0];
|
||||
string botUserId = data != null && data.TryGetValue("userId", out var buid) ? buid?.ToString() : "";
|
||||
Debug.Log($"[FishGameHub] 机器人退出: {botUserId}");
|
||||
WebSocketReponseList.BotLeaveRoom(botUserId);
|
||||
}
|
||||
// 机器人退出房间,数据 { userId }
|
||||
WebSocketReponseList.BotLeaveRoomNotice(msg);
|
||||
break;
|
||||
|
||||
case "HostDisconnect":
|
||||
{
|
||||
// 房主断线,其他玩家可接受机器人控制权
|
||||
Debug.Log("[FishGameHub] 房主断线,可接受机器人控制权");
|
||||
WebSocketReponseList.HostDisconnect();
|
||||
}
|
||||
// 房主断线,其他玩家可接受机器人控制权
|
||||
WebSocketReponseList.HostDisconnectNotice(msg);
|
||||
break;
|
||||
|
||||
case "OnSeatChange":
|
||||
{
|
||||
// 座位变更 { type, userId, position, showWaiting? }
|
||||
var data = JsonConvert.DeserializeObject<WebSocketResponseBase<Dictionary<string, object>>>(msg).arguments[0];
|
||||
if (data != null)
|
||||
{
|
||||
// 注意:JSON 字段可能是 long/double/string/bool 等任意类型,
|
||||
// 直接 Convert.ToInt32(object) 对字符串会走 int.Parse 抛 FormatException。
|
||||
// 这里统一通过 ToString() + TryParse 容错。
|
||||
int seatType = data.TryGetValue("type", out var t) && int.TryParse(t?.ToString(), out var st) ? st : 0;
|
||||
string userId = data.TryGetValue("userId", out var u) ? u?.ToString() : "";
|
||||
int position = data.TryGetValue("position", out var p) && int.TryParse(p?.ToString(), out var pos) ? pos : -1;
|
||||
bool showWaiting = data.TryGetValue("showWaiting", out var sw) && (sw is bool b ? b : (sw != null && bool.TryParse(sw.ToString(), out var bv) && bv));
|
||||
Debug.Log($"[FishGameHub] 座位变更: type={seatType}, userId={userId}, position={position}, showWaiting={showWaiting}");
|
||||
WebSocketReponseList.SeatChange(seatType, userId, position, showWaiting);
|
||||
}
|
||||
}
|
||||
// 座位变更 { type, userId, position, showWaiting? }
|
||||
WebSocketReponseList.OnSeatChange(msg);
|
||||
break;
|
||||
|
||||
// ======== 新协议事件 ========
|
||||
|
||||
case "OnFishSpawn":
|
||||
// ⭐ 服务端出鱼事件(破坏性替代 createFish 帧同步)
|
||||
// type: "init"=首次出鱼 / "spawn"=定时出鱼 / "sync"=重连或取消挂机同步
|
||||
WebSocketReponseList.OnFishSpawn(msg);
|
||||
break;
|
||||
|
||||
case "FishFrozen":
|
||||
// ⭐ 冰冻道具(40003)生效:鱼存活时间延长 15 秒,客户端写死 15s 倒计时
|
||||
WebSocketReponseList.FishFrozen(msg);
|
||||
break;
|
||||
|
||||
case "PlayerAfkNotice":
|
||||
// 玩家挂机通知 { userId }
|
||||
WebSocketReponseList.PlayerAfkNotice(msg);
|
||||
break;
|
||||
|
||||
case "PlayerCancelAfkNotice":
|
||||
// 玩家取消挂机通知 { userId }
|
||||
WebSocketReponseList.PlayerCancelAfkNotice(msg);
|
||||
break;
|
||||
|
||||
case "RoomChange":
|
||||
|
||||
Reference in New Issue
Block a user