From bae41593e19d32046f77ed1f036089e015380b99 Mon Sep 17 00:00:00 2001 From: hch <305670599@qq.com> Date: 星期三, 30 七月 2025 22:25:18 +0800 Subject: [PATCH] 117 【武将】武将系统 - 布阵临时版 --- Main/System/Team/TeamBase.cs | 68 +++++++++++++++++++++++++--------- 1 files changed, 50 insertions(+), 18 deletions(-) diff --git a/Main/System/Team/TeamBase.cs b/Main/System/Team/TeamBase.cs index e0f4653..14622c7 100644 --- a/Main/System/Team/TeamBase.cs +++ b/Main/System/Team/TeamBase.cs @@ -28,7 +28,7 @@ private int ShapeType; public int ServerShapeType { get; private set; } - public TeamHero[] tempHeroes = new TeamHero[TeamConst.MaxTeamHeroCount]; + public TeamHero[] tempHeroes { get; private set; } = new TeamHero[TeamConst.MaxTeamHeroCount]; public TeamHero[] serverHeroes { get; private set; } = new TeamHero[TeamConst.MaxTeamHeroCount]; @@ -99,7 +99,7 @@ { if (IsEmpty()) { - Debug.LogError("Cannot save an empty team. You should at least have one hero in the team."); + SysNotifyMgr.Instance.ShowTip("HeroFunc3"); return; } @@ -109,6 +109,7 @@ savePack.PosCnt = (byte)GetTeamHeroCount(); savePack.HeroPosList = new CB412_tagCSHeroLineupSave.tagCSHeroLineupPos[savePack.PosCnt]; + int index = 0; foreach (var hero in tempHeroes) { if (hero != null) @@ -122,15 +123,17 @@ continue; } - savePack.HeroPosList[posNum] = new CB412_tagCSHeroLineupSave.tagCSHeroLineupPos + savePack.HeroPosList[index] = new CB412_tagCSHeroLineupSave.tagCSHeroLineupPos { ItemIndex = (ushort)heroInfo.itemHero.gridIndex, - PosNum = (byte)posNum + PosNum = (byte)(posNum + 1) }; + index++; } } - GameNetSystem.Instance.SendInfo(savePack); + SysNotifyMgr.Instance.ShowTip("HeroFunc4"); + //闈炰富绾块樀瀹瑰鎴风鑷繁鍋氭垬鍔涘彉鍖栵紝涓荤嚎闃靛鏈嶅姟绔垬鍔涘彉鏇翠細鍚屾鎺ㄩ�� } public void OnChangeShapeType(int newShapeType) @@ -144,7 +147,7 @@ ShapeType = newShapeType; } - // hero info could be null if the hero is removed from the team + public void RefreshServerData(int shapeType, int positionIndex, HeroInfo heroInfo) { TeamHero teamHero = heroInfo == null ? null : new TeamHero(heroInfo, positionIndex, this); @@ -185,6 +188,19 @@ return null; } + public TeamHero GetHeroByHeroID(int heroId) + { + foreach (var hero in tempHeroes) + { + if (hero != null && hero.heroId == heroId) + { + return hero; + } + } + return null; + } + + public TeamHero GetServerHero(string guid) { foreach (var hero in serverHeroes) @@ -210,6 +226,7 @@ return false; } + //瀹㈡埛绔粠0寮�濮嬶紝鏈嶅姟绔粠1寮�濮� public int GetEmptyPosition() { for (int i = 0; i < tempHeroes.Length; i++) @@ -223,13 +240,13 @@ } // 甯冮樀鎺ュ彛 - public void SetTeamHero(int posNum, TeamHero hero) + private void SetTeamHero(int posNum, TeamHero hero) { tempHeroes[posNum] = hero; } // 甯冮樀鎺ュ彛 - public void SetServerTeamHero(int posNum, TeamHero hero) + private void SetServerTeamHero(int posNum, TeamHero hero) { serverHeroes[posNum] = hero; tempHeroes[posNum] = hero; @@ -259,41 +276,44 @@ // add鍙彲鑳芥槸鐐逛笅闈㈠崱鐗� - public bool AddHero(HeroInfo heroInfo) + public bool AddHero(HeroInfo heroInfo, out int pos) { + pos = -1; if (heroInfo == null || heroInfo.itemHero == null) return false; - - // 濡傛灉褰撳墠鑻遍泟宸茬粡鍦ㄩ槦浼嶉噷浜� 灏变笉澶勭悊浜� - if (GetHero(heroInfo.itemHero.guid) != null) + // 鍚屼竴鑻遍泟 鍙兘涓婇樀涓�涓� + if (GetHeroByHeroID(heroInfo.heroId) != null) { - return false; // Hero already in team + SysNotifyMgr.Instance.ShowTip("HeroFunc2"); + return false; } else { - int emptyPosition = GetEmptyPosition(); + pos = GetEmptyPosition(); - if (emptyPosition < 0) + if (pos < 0) { - Debug.LogError("No empty position available in the team."); + SysNotifyMgr.Instance.ShowTip("HeroFunc1"); return false; // No empty position available } - TeamHero teamHero = new TeamHero(heroInfo, GetEmptyPosition(), this); + TeamHero teamHero = new TeamHero(heroInfo, pos, this); SetTeamHero(teamHero.positionNum, teamHero); return true; } } - public bool RemoveHero(HeroInfo heroInfo) + public bool RemoveHero(HeroInfo heroInfo, out int pos) { + pos = -1; if (heroInfo == null || heroInfo.itemHero == null) return false; TeamHero teamHero = GetHero(heroInfo.itemHero.guid); if (teamHero != null) { + pos = teamHero.positionNum; // 浠庡綋鍓嶉槦浼嶉噷绉婚櫎璇ヨ嫳闆� SetTeamHero(teamHero.positionNum, null); return true; @@ -319,6 +339,18 @@ return false; // Hero not found } + public bool RemoveHero(int pos) + { + SetTeamHero(pos, null); + return true; + } + + public void RemoveAllHeroes() + { + tempHeroes = new TeamHero[TeamConst.MaxTeamHeroCount]; + } + + public void SwapPosition(int index1, int index2) { if (index1 < 0 || index1 >= tempHeroes.Length || index2 < 0 || index2 >= tempHeroes.Length) -- Gitblit v1.8.0