From 664e7b2e0608fa9a3f93ea408e01db37ef461f6e Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期四, 27 三月 2025 16:53:17 +0800
Subject: [PATCH] 0312 竞技场回合制,界面未处理
---
LogicProject/System/ArenaActivity/ArenaManagerModel.cs | 335 ++++++++++++++++++++++++++++---------------------------
1 files changed, 169 insertions(+), 166 deletions(-)
diff --git a/LogicProject/System/ArenaActivity/ArenaManagerModel.cs b/LogicProject/System/ArenaActivity/ArenaManagerModel.cs
index 93179f0..6fc30da 100644
--- a/LogicProject/System/ArenaActivity/ArenaManagerModel.cs
+++ b/LogicProject/System/ArenaActivity/ArenaManagerModel.cs
@@ -19,11 +19,9 @@
}
}
-
/// stage
- public static readonly Vector3 leftBornPoint = new Vector3(4.9f, 0.2f, 3.5f);
- static readonly Vector3 rightBornPoint = new Vector3(20f, 0.2f, 18.8f);
-
+ public static readonly Vector3 leftBornPoint = new Vector3(4f, 0.2f, 11.5f);
+ static readonly Vector3 rightBornPoint = new Vector3(11.5f, 0.2f, 4f);
static readonly Vector3 initPoint = new Vector3(30f, 0.2f, 30f);
public int[] s_StepTimes = null;
@@ -31,8 +29,6 @@
static ILPKStageType pkStageType;
public static GA_PlayerClient.PlayerInfo playerInfo;
static GA_ILClientPlayer opponentPlayer;
- static GA_Player mirrorPlayer;
- public static bool isMirrorFight { get; set; }
static uint roundWiner = 0;
static ILPKStage currentStage;
public DateTime dungeonEndTime;
@@ -77,7 +73,6 @@
HeroBehaviour.OnUserClickSkill += OnILUserClickSkill;
//鏄剧ずPK UI
ArenaManager.OnILPKWinShow += OnILPKWinShow;
-
}
protected override void UnInit()
{
@@ -131,28 +126,7 @@
recordDataMapId = dataMapId;
}
- //鍓湰缁撶畻鐣岄潰
- public void UpdateFBEnd()
- {
- if (dungeonModel.dungeonResult.isWin == 1)
- {
- roundWiner = PlayerDatas.Instance.baseData.PlayerID;
- }
- else
- {
- roundWiner = ArenaModel.Instance.OPPONENT_PLAYERID;
- }
- //ArenaModel.Instance.SendArenaBattle(ArenaModel.Instance.m_PlayerInfo[ArenaModel.Instance.SelectMatchPlayer].PlayerID,
- // (byte)(dungeonModel.dungeonResult.isWin == 1 ? 1 : 2));
-
- if (ArenaManager.IsArenaStage())
- WindowCenter.Instance.OpenIL<ArenaSettlementWin>();
- else
- PopupWindowsProcessor.Instance.Add("ArenaSettlementWin");
- //鏇存柊鎺掑悕
- ArenaRankModel.Instance.SetMyRank(ArenaModel.Instance.RankType, dungeonModel.dungeonResult.updOrder);
- }
void OnILPKWinShow(bool bShow)
{
if (bShow)
@@ -172,13 +146,13 @@
}
void OnILStopHandupAI()
{
- if (!ArenaManager.IsArenaClientNotMirrorFight)
+ if (!ArenaManager.isArenaClient)
return;
PlayerDatas.Instance.hero.SkillMgr.ResetAllCD();
}
void OnILCastSkill(int SkillID)
{
- if (!ArenaManager.IsArenaClientNotMirrorFight)
+ if (!ArenaManager.isArenaClient)
return;
Skill _skill = PlayerDatas.Instance.hero.SkillMgr.Get(SkillID);
if (!_skill.IsValid())
@@ -308,7 +282,7 @@
}
void OnILPlayerUpdateAI()
{
- if (!ArenaManager.IsArenaClientNotMirrorFight)
+ if (!ArenaManager.isArenaClient)
return;
if (Application.isEditor)
{
@@ -322,7 +296,8 @@
PlayerDatas.Instance.hero.ActorInfo.Hp = 0;
}
}
-
+ CameraController.Instance.rotationX = 45;
+ CameraController.Instance.Apply();
if (!ArenaModel.Instance.bILAI)
return;
if (dungeonModel.dungeonFightStage != DungeonFightStage.Normal)
@@ -632,7 +607,7 @@
}
//////////////////////////////////////////////////////////////////Arena Stage鎺у埗///////////////////////////////////////////////////////////////
void OnILStageInitialize()
- {
+ {
ArenaModel.Instance.FakeMatchOk();
fightInfo = default(ILFightInfo);
fightInfo.isOver = false;
@@ -651,6 +626,7 @@
opponentPlayer = null;
}
+ ArenaManager.isArenaClient = false;
ArenaManager.isArenaPK = false;
ArenaManagerModel.Instance.ReleasePlayer();
ClientDungeonStageUtility.SetClientDungeon(false, 0);
@@ -663,9 +639,9 @@
{
if (!ArenaManager.IsArenaStage())
return;
- ArenaManager.isArenaPK = true;
-
- ArenaManager.isArenaClient = true;
+ ArenaManager.isArenaPK = true;
+
+
ArenaModel.Instance.IsArenaWork = true;
recordDataMapId = ArenaManager.MapID;
ArenaModel.Instance.StartInit();
@@ -673,10 +649,7 @@
// B2 10 绔炴妧鍦烘寫鎴樼帺瀹� 閫氱煡鍚庣鐧昏鎸戞垬鐩爣ID
uint PlayerID = ArenaModel.Instance.m_PlayerInfo[ArenaModel.Instance.SelectMatchPlayer].PlayerID;
- if (PlayerID > 10000)
- isMirrorFight = true;
- ArenaModel.Instance.SendArenaBattle(PlayerID, 0);
-
+ ArenaModel.Instance.SendArenaBattle(ArenaModel.Instance.m_PlayerInfo[ArenaModel.Instance.SelectMatchPlayer].PlayerID, 0);
if (opponentPlayer != null)
{
@@ -710,70 +683,36 @@
}
else
{
- ArenaManager.isArenaRobot = false;
- //鍙戦�佸懡浠よ幏寰椾釜浜鸿缁嗕俊鎭�
- PersonalEnemy.OnMirrorPlayerAppear += OnPlayerAppear;
- //RoleParticularModel.OnRevPackage += OnRevA705;
- //ModelCenter.Instance.GetModel<RoleParticularModel>().ViewPlayerCacheData((int)PlayerID, (int)ViewPlayerType.viewPlayerDataArena);
+ ArenaManager.isArenaRobot = false;
+ //鍙戦�佸懡浠よ幏寰椾釜浜鸿缁嗕俊鎭�
+ CA212_tagCMViewPlayerInfo pak = new CA212_tagCMViewPlayerInfo();
+ pak.PlayerID = (uint)PlayerID;
+ GameNetSystem.Instance.SendInfo(pak);
+ //DTCA705_tagSCQueryPlayerCacheResult.OnRevPackage += OnRevA705;
}
}
- //private void OnRevA705(int viewType, int playerID, RoleParticularModel.ViewPlayerData data)
- //{
- // uint PlayerID = ArenaModel.Instance.m_PlayerInfo[ArenaModel.Instance.SelectMatchPlayer].PlayerID;
- // if (playerID != PlayerID)
- // return;
- // RoleParticularModel.OnRevPackage -= OnRevA705;
- // playerInfo = GetRealPlayerInfo(data.rolePropData);
- // playerInfo.playerID = PlayerID;
- // //PersonalEnemy.Create(30000, rightBornPoint, playerInfo,false);
- // PersonalEnemy.OnILPlayerAppear += OnPlayerAppear;
- // SnxxzGame.Instance.StartCoroutine(WaitForPlayerCreate());
- // ArenaModel.Instance.CallUpdatePKInfo(1);
-
- //}
+ private void OnRevA705(HA705_tagSCQueryPlayerCacheResult package)
+ {
+ uint PlayerID = ArenaModel.Instance.m_PlayerInfo[ArenaModel.Instance.SelectMatchPlayer].PlayerID;
+ if (package.PlayerID != PlayerID)
+ return;
+ //DTCA705_tagSCQueryPlayerCacheResult.OnRevPackage -= OnRevA705;
+ RoleParticularModel.RolePropData propData = LitJson.JsonMapper.ToObject<RoleParticularModel.RolePropData>(package.PropData);
+ playerInfo = GetRealPlayerInfo(propData);
+ playerInfo.playerID = PlayerID;
+ PersonalEnemy.Create(30000, rightBornPoint, playerInfo,false);
+ PersonalEnemy.OnILPlayerAppear += OnPlayerAppear;
+ SnxxzGame.Instance.StartCoroutine(WaitForPlayerCreate());
+
+ }
private void OnPlayerAppear(GA_ILClientPlayer player)
{
PersonalEnemy.OnILPlayerAppear -= OnPlayerAppear;
opponentPlayer = player;
- opponentPlayer.Pos = rightBornPoint;
- isMirrorFight = false;
+ opponentPlayer.Pos = ArenaModel.Instance.myPlace == 1 ? rightBornPoint : leftBornPoint;
dungeonModel.dungeonFightStage = DungeonFightStage.Normal;
- }
-
- private void OnPlayerAppear(GA_Player player)
- {
- if (pkStageType != ILPKStageType.Fight)
- {
- currentStage = new ILWaitStartStage();
- currentStage.Begin();
- }
- playerInfo = new GA_PlayerClient.PlayerInfo()
- {
- maxHp = player.ActorInfo.MaxHp,
- hp = player.ActorInfo.Hp,
- level = (ushort)player.ActorInfo.LV,
- job = (byte)player.ActorInfo.Job,
- face = AvatarHelper.GetAvatarDefaultID(player.ActorInfo.Job),
- facePic = AvatarHelper.GetAvatarFrameDefaultID(player.ActorInfo.Job),
- pos = Vector3.zero,
- name = player.ActorInfo.PlayerName,
- };
-
- playerInfo.playerID = player.ActorInfo.sid;
- ArenaModel.Instance.ArenaPKUpInfoData.MaxProDef = (int)player.ActorInfo.maxProDef;
- ArenaModel.Instance.ArenaPKUpInfoData.opponentMaxHp = playerInfo.maxHp;
- ArenaModel.Instance.ArenaPKUpInfoData.opponentShield = (int)player.ActorInfo.curProDef;
- ArenaModel.Instance.ArenaPKUpInfoData.opponentLevel = player.ActorInfo.LV;
- ArenaModel.Instance.ArenaPKUpInfoData.realmLV = (int)player.ActorInfo.realm;
-
- PersonalEnemy.OnMirrorPlayerAppear -= OnPlayerAppear;
- mirrorPlayer = player;
- ArenaModel.Instance.CallUpdatePKInfo(1);
- dungeonModel.dungeonFightStage = DungeonFightStage.Normal;
-
}
-
public void ReleasePlayer()
{
if (opponentPlayer != null && !opponentPlayer.ActorInfo.serverDie)
@@ -856,8 +795,6 @@
hp = maxHp,
level = (ushort)level,
job = (byte)job,
- face = AvatarHelper.GetAvatarDefaultID(job),
- facePic = AvatarHelper.GetAvatarFrameDefaultID(job),
pos = Vector3.zero,
name = playerName,
itemDatas = equipInfos,
@@ -894,8 +831,6 @@
hp = (ulong)propData.MaxHP,
level = (ushort)propData.LV,
job = (byte)propData.Job,
- face = (int)propData.Face,
- facePic = (int)propData.FacePic,
pos = Vector3.zero,
name = propData.Name,
itemDatas = equipInfos,
@@ -955,7 +890,7 @@
if (pkStageType != ILPKStageType.Fight)
{
- opponentPlayer.Pos = rightBornPoint;
+ opponentPlayer.Pos = ArenaModel.Instance.myPlace == 1 ? rightBornPoint : leftBornPoint;
currentStage = new ILWaitStartStage();
currentStage.Begin();
}
@@ -974,7 +909,17 @@
currentStage = new ILFightStage();
break;
case ILPKStageType.Fight:
- currentStage = new ILFightOverStage();
+ if (fightInfo.isOver)
+ {
+ currentStage = new ILFightOverStage();
+ }
+ else
+ {
+ currentStage = new ILRoundPrepareState();
+ }
+ break;
+ case ILPKStageType.RoundPrepare:
+ //currentStage = new ILFightStage();
break;
case ILPKStageType.FightOver:
currentStage = null;
@@ -1007,14 +952,10 @@
public override void Begin()
{
pkStageType = ILPKStageType.WaitStart;
- duration = ArenaManagerModel.Instance.s_StepTimes[1];
-
- if (opponentPlayer != null)
- {
- opponentPlayer.ActorInfo.serverDie = false;
- opponentPlayer.IdleImmediate();
- opponentPlayer.Pos = rightBornPoint;
- }
+ duration = ArenaManagerModel.Instance.s_StepTimes[1];
+
+ opponentPlayer.ActorInfo.serverDie = false;
+ opponentPlayer.IdleImmediate();
PlayerDatas.Instance.baseData.HP = PlayerDatas.Instance.extersion.MaxHP;
var maxHp = PlayerDatas.Instance.extersion.MaxHP;
@@ -1024,8 +965,8 @@
PlayerDatas.Instance.hero.Behaviour.StopHandupAI(true);
PlayerDatas.Instance.hero.StopPathFind();
-
- PlayerDatas.Instance.hero.Pos = leftBornPoint;
+ opponentPlayer.Pos = ArenaModel.Instance.myPlace == 1 ? rightBornPoint : leftBornPoint;
+ PlayerDatas.Instance.hero.Pos = ArenaModel.Instance.myPlace == 1 ? leftBornPoint : rightBornPoint;
ArenaModel.Instance.FakeWaitFight((int)duration);
ArenaModel.Instance.CallUpdatePKInfo(1);
@@ -1040,10 +981,7 @@
public override void Update()
{
timer += Time.deltaTime;
- if (isMirrorFight)
- completed = timer >= duration;
- else
- completed = timer >= duration && opponentPlayer != null;
+ completed = timer >= duration && opponentPlayer != null;
}
}
public class ILFightOverStage : ILPKStage
@@ -1052,14 +990,12 @@
{
if (ArenaModel.Instance.WinnerID != PlayerDatas.Instance.baseData.PlayerID)
{
- if (!isMirrorFight)
- ArenaModel.Instance.SendArenaBattle(ArenaModel.Instance.m_PlayerInfo[ArenaModel.Instance.SelectMatchPlayer].PlayerID, 2);
+ ArenaModel.Instance.SendArenaBattle(ArenaModel.Instance.m_PlayerInfo[ArenaModel.Instance.SelectMatchPlayer].PlayerID, 2);
LocalSave.SetString("MatchInfoPlayerFightNow" + PlayerDatas.Instance.PlayerId, "");
}
else
{
- if (!isMirrorFight)
- ArenaModel.Instance.SendArenaBattle(ArenaModel.Instance.m_PlayerInfo[ArenaModel.Instance.SelectMatchPlayer].PlayerID, 1);
+ ArenaModel.Instance.SendArenaBattle(ArenaModel.Instance.m_PlayerInfo[ArenaModel.Instance.SelectMatchPlayer].PlayerID, 1);
string MatchInfoPlayerFightNow = LocalSave.GetString("MatchInfoPlayerFightNow" + PlayerDatas.Instance.PlayerId);
if(MatchInfoPlayerFightNow != "")
{
@@ -1095,9 +1031,10 @@
public class ILFightStage : ILPKStage
{
bool figthCompleted = false;
- float restTime = 0.5f;
+ float restTime = 2f;
float restTimeTimer = 0f;
-
+
+
public override void Begin()
{
pkStageType = ILPKStageType.Fight;
@@ -1106,19 +1043,11 @@
figthCompleted = false;
restTimeTimer = 0f;
- if (isMirrorFight)
- {
- if (mirrorPlayer != null)
- PlayerDatas.Instance.hero.SelectTarget = mirrorPlayer;
- }
- else
- {
- opponentPlayer.Pos = rightBornPoint;
- opponentPlayer.SelectTarget = PlayerDatas.Instance.hero;
- PlayerDatas.Instance.hero.SelectTarget = opponentPlayer;
- }
- ArenaModel.Instance.bILAI = true;
+ opponentPlayer.Pos = ArenaModel.Instance.myPlace == 1 ? rightBornPoint : leftBornPoint;
PlayerDatas.Instance.hero.Behaviour.StartHandupAI();
+ ArenaModel.Instance.bILAI = true;
+ opponentPlayer.SelectTarget = PlayerDatas.Instance.hero;
+ PlayerDatas.Instance.hero.SelectTarget = opponentPlayer;
}
public override void End()
@@ -1132,11 +1061,8 @@
if (fightInfo.isOver)
{
- if (opponentPlayer != null)
- {
- PersonalEnemy.ReleaseILPlayer(opponentPlayer,false);
- opponentPlayer.Destroy();
- }
+ PersonalEnemy.ReleaseILPlayer(opponentPlayer,false);
+ opponentPlayer.Destroy();
}
ArenaModel.Instance.FakeRoundEnd(fightInfo.isOver, fightInfo.roundCount, fightInfo.roundWinnerIds.ToArray());
@@ -1148,32 +1074,24 @@
return;
if (PlayerDatas.Instance.hero == null)
return;
-
timer += Time.deltaTime;
-
-
- if (isMirrorFight)
+ if (PlayerDatas.Instance.hero.ActorInfo.Hp <= 0)
{
- if (roundWiner != 0)
- {
- figthCompleted = true;
- ArenaModel.Instance.WinnerID = roundWiner;
- }
+ figthCompleted = true;
+ PlayerDatas.Instance.hero.Behaviour.StopHandupAI(true);
+ PlayerDatas.Instance.hero.StopPathFind();
+ ArenaModel.Instance.bILAI = false;
+ roundWiner = ArenaModel.Instance.OPPONENT_PLAYERID;
+ ArenaModel.Instance.WinnerID = ArenaModel.Instance.OPPONENT_PLAYERID;
}
- else
- {
- if (PlayerDatas.Instance.hero.ActorInfo.Hp <= 0)
- {
- figthCompleted = true;
- roundWiner = ArenaModel.Instance.OPPONENT_PLAYERID;
- ArenaModel.Instance.WinnerID = ArenaModel.Instance.OPPONENT_PLAYERID;
- }
- if (opponentPlayer.ActorInfo.Hp <= 0)
- {
- figthCompleted = true;
- roundWiner = PlayerDatas.Instance.baseData.PlayerID;
- ArenaModel.Instance.WinnerID = PlayerDatas.Instance.baseData.PlayerID;
- }
+ if (opponentPlayer.ActorInfo.Hp <= 0)
+ {
+ figthCompleted = true;
+ PlayerDatas.Instance.hero.Behaviour.StopHandupAI(true);
+ PlayerDatas.Instance.hero.StopPathFind();
+ ArenaModel.Instance.bILAI = false;
+ roundWiner = PlayerDatas.Instance.baseData.PlayerID;
+ ArenaModel.Instance.WinnerID = PlayerDatas.Instance.baseData.PlayerID;
}
if (!figthCompleted)
{
@@ -1183,12 +1101,18 @@
if (roundWiner != 0)
{
figthCompleted = true;
+ PlayerDatas.Instance.hero.Behaviour.StopHandupAI(true);
+ PlayerDatas.Instance.hero.StopPathFind();
+ ArenaModel.Instance.bILAI = false;
}
else if (EndTime <= 0)
//else if (timer >= duration)
{
figthCompleted = true;
- if (!isMirrorFight && opponentPlayer.ActorInfo.RealHp <= 0)
+ PlayerDatas.Instance.hero.Behaviour.StopHandupAI(true);
+ PlayerDatas.Instance.hero.StopPathFind();
+ ArenaModel.Instance.bILAI = false;
+ if (opponentPlayer.ActorInfo.RealHp <= 0)
{
roundWiner = PlayerDatas.Instance.baseData.PlayerID;
}
@@ -1206,21 +1130,100 @@
if (figthCompleted)
{
- PlayerDatas.Instance.hero.StopAll();
- ArenaModel.Instance.bILAI = false;
restTimeTimer += Time.deltaTime;
- completed = restTimeTimer >= restTime;
+ completed = restTimeTimer >= restTime;
}
}
}
-
+ public class ILRoundPrepareState : ILPKStage
+ {
+ public override void Begin()
+ {
+ pkStageType = ILPKStageType.RoundPrepare;
+ GA_PVPClientPlayer.AutoAI(false);
+ duration = 3f;
+ Debug.LogFormat("杩涘叆闃舵锛歿0}", pkStageType);
+
+ if (fightInfo.roundWinnerIds[fightInfo.roundWinnerIds.Count - 1] == PlayerDatas.Instance.baseData.PlayerID)
+ {
+ if (!opponentPlayer.ActorInfo.serverDie)
+ {
+ PersonalEnemy.ReleaseILPlayer(opponentPlayer, false);
+ opponentPlayer = null;
+ }
+ playerInfo.hp = playerInfo.maxHp;
+ PersonalEnemy.Create(30000, ArenaModel.Instance.myPlace == 1 ? rightBornPoint : leftBornPoint, playerInfo,false);
+ PersonalEnemy.OnILPlayerAppear += OnPlayerAppear;
+ SnxxzGame.Instance.StartCoroutine(WaitForPlayerCreate());
+
+ if (PlayerDatas.Instance.hero.ActorInfo.RealHp <= 0)
+ {
+ PlayerDatas.Instance.baseData.HP = 1;
+ PlayerDatas.Instance.hero.ActorInfo.ResetHp(1, (long)PlayerDatas.Instance.extersion.MaxHP);
+ PlayerDatas.Instance.FightRefreshPlayerHp(1);
+ PlayerDatas.Instance.hero.IdleImmediate();
+ }
+ }
+ else
+ {
+ PlayerDatas.Instance.baseData.HP = PlayerDatas.Instance.extersion.MaxHP;
+ var maxHp = PlayerDatas.Instance.extersion.MaxHP;
+ PlayerDatas.Instance.hero.ActorInfo.ResetHp((long)maxHp, (long)maxHp);
+ PlayerDatas.Instance.FightRefreshPlayerHp(maxHp);
+ PlayerDatas.Instance.hero.IdleImmediate();
+
+ if (opponentPlayer.ActorInfo.RealHp <= 0)
+ {
+ opponentPlayer = null;
+ playerInfo.hp = 1;
+ PersonalEnemy.Create(30000, rightBornPoint, playerInfo,false);
+ PersonalEnemy.OnILPlayerAppear += OnPlayerAppear;
+ SnxxzGame.Instance.StartCoroutine(WaitForPlayerCreate());
+ }
+ }
+
+ PlayerDatas.Instance.hero.Pos = ArenaModel.Instance.myPlace == 1 ? leftBornPoint : rightBornPoint;
+
+ }
+
+ private void OnPlayerAppear(GA_ILClientPlayer player)
+ {
+ PersonalEnemy.OnILPlayerAppear -= OnPlayerAppear;
+ opponentPlayer = player;
+ opponentPlayer.Pos = ArenaModel.Instance.myPlace == 1 ? rightBornPoint : leftBornPoint;
+ }
+
+ private IEnumerator WaitForPlayerCreate()
+ {
+ while (opponentPlayer == null)
+ {
+ yield return null;
+ }
+
+ opponentPlayer.Pos = ArenaModel.Instance.myPlace == 1 ? rightBornPoint : leftBornPoint;
+ opponentPlayer.ActorInfo.ResetHp((long)playerInfo.maxHp, (long)playerInfo.maxHp);
+ }
+
+ public override void End()
+ {
+ fightInfo.roundCount++;
+ ArenaModel.Instance.FakeRoundBegin(fightInfo.roundCount, fightInfo.roundWinnerIds.ToArray());
+ }
+
+ public override void Update()
+ {
+ timer += Time.deltaTime;
+ completed = timer >= duration && opponentPlayer != null;
+ }
+ }
public enum ILPKStageType
{
WaitStart,
Fight,
+ RoundPrepare,
FightOver,
}
--
Gitblit v1.8.0