Sfoglia il codice sorgente

读表时等级上限有提示且不再升级&新增升级加蓝耗

SZAND\msx_2 5 mesi fa
parent
commit
e3604cf8a7

+ 5 - 1
ActionTowerDefense/Assets/Gen/SingleSoldierLevel.cs

@@ -25,10 +25,11 @@ public sealed partial class SingleSoldierLevel :  Bright.Config.BeanBase
         { if(!_json["MarchAttack"].IsNumber) { throw new SerializationException(); }  MarchAttack = _json["MarchAttack"]; }
         { if(!_json["HP"].IsNumber) { throw new SerializationException(); }  HP = _json["HP"]; }
         { if(!_json["armor"].IsNumber) { throw new SerializationException(); }  Armor = _json["armor"]; }
+        { if(!_json["MP"].IsNumber) { throw new SerializationException(); }  MP = _json["MP"]; }
         PostInit();
     }
 
-    public SingleSoldierLevel(int Level, string Soldier, int EXP, int SummonAttack, int MarchAttack, int HP, int armor ) 
+    public SingleSoldierLevel(int Level, string Soldier, int EXP, int SummonAttack, int MarchAttack, int HP, int armor, int MP ) 
     {
         this.Level = Level;
         this.Soldier = Soldier;
@@ -37,6 +38,7 @@ public sealed partial class SingleSoldierLevel :  Bright.Config.BeanBase
         this.MarchAttack = MarchAttack;
         this.HP = HP;
         this.Armor = armor;
+        this.MP = MP;
         PostInit();
     }
 
@@ -52,6 +54,7 @@ public sealed partial class SingleSoldierLevel :  Bright.Config.BeanBase
     public int MarchAttack { get; private set; }
     public int HP { get; private set; }
     public int Armor { get; private set; }
+    public int MP { get; private set; }
 
     public const int __ID__ = -1866386518;
     public override int GetTypeId() => __ID__;
@@ -75,6 +78,7 @@ public sealed partial class SingleSoldierLevel :  Bright.Config.BeanBase
         + "MarchAttack:" + MarchAttack + ","
         + "HP:" + HP + ","
         + "Armor:" + Armor + ","
+        + "MP:" + MP + ","
         + "}";
     }
     

+ 7 - 3
ActionTowerDefense/Assets/Scenes/Game.unity

@@ -20452,7 +20452,6 @@ MonoBehaviour:
   - {fileID: 1464883273}
   - {fileID: 1934719935}
   text: {fileID: 1634269188}
-  curSoldiers: 000000000100000002000000
 --- !u!4 &1714821086
 Transform:
   m_ObjectHideFlags: 0
@@ -20482,6 +20481,8 @@ MonoBehaviour:
   m_EditorClassIdentifier: 
   createdEnemy: 
   idRange: {x: 0, y: 0}
+  createdEnemyTower: []
+  createdEnemyTowerHp: []
 --- !u!114 &1714821088
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -20495,10 +20496,10 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   curLevel: {fileID: 741372831}
-  curLevelID: 2
+  curLevelID: 1
   levels:
   - "1:\u54C8\u54C8\u54C8"
-  - "2:\u54C8\u54C8\u54C8 (2)"
+  - 2:Sheet1
 --- !u!114 &1714821089
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -20565,16 +20566,19 @@ MonoBehaviour:
     marchAttack: 0
     hp: 0
     armor: 0
+    mp: 0
   - st: 0
     summonAttack: 0
     marchAttack: 0
     hp: 0
     armor: 0
+    mp: 0
   - st: 0
     summonAttack: 0
     marchAttack: 0
     hp: 0
     armor: 0
+    mp: 0
 --- !u!1 &1729202001
 GameObject:
   m_ObjectHideFlags: 0

+ 20 - 2
ActionTowerDefense/Assets/Scripts/Characters/PlayerController.cs

@@ -1673,7 +1673,16 @@ public class PlayerController : MoveCharacter
         }
         ChangeState(CharacterState.Summon);
         summonTime = totalSummonTime;
-        float costMp = prefab.GetComponent<Demonic>().costMp;
+        Demonic dem = prefab.GetComponent<Demonic>();
+        float costMp = dem.costMp;
+        for (int i = 0; i < 3; i++)
+        {
+            if (GameManager.curSoldiers[i] == dem.soldierType)
+            {
+                costMp += slr.seb[i].mp;
+                break;
+            }
+        }
         mp -= costMp;
         uiMp.Show(mp, totalMp);
         GameObject demonicObj = PoolManager.Instantiate(prefab);
@@ -1759,7 +1768,16 @@ public class PlayerController : MoveCharacter
         GameObject prefab;
         prefab = demonicPrefabs[id];
 
-        float costMp = prefab.GetComponent<Demonic>().costMp;
+        Demonic dem = prefab.GetComponent<Demonic>();
+        float costMp = dem.costMp;
+        for (int i = 0; i < 3; i++)
+        {
+            if (GameManager.curSoldiers[i] == dem.soldierType)
+            {
+                costMp += slr.seb[i].mp;
+                break;
+            }
+        }
         if (id < 3)
         {
             costMp += addCostMp[id] * demonicDic[id].Count;

+ 7 - 1
ActionTowerDefense/Assets/Scripts/GameManager.cs

@@ -22,7 +22,7 @@ public class GameManager : MonoBehaviour
     public UIHP p1uiMP;
     public GameObject[] demonicNum;
     public TextMeshProUGUI text;
-    public SoldierType[] curSoldiers;   //本局游戏选择的三个士兵
+    static public SoldierType[] curSoldiers;   //本局游戏选择的三个士兵
 
     private JSONNode Loader(string fileName)
     {
@@ -36,6 +36,12 @@ public class GameManager : MonoBehaviour
 
     private void Awake()
     {
+        //选定本局游戏有哪些士兵,后面兵多了这里要改
+        curSoldiers = new SoldierType[3];
+        curSoldiers[0] = SoldierType.spear;
+        curSoldiers[1] = SoldierType.shield;
+        curSoldiers[2] = SoldierType.sword;
+
         if (!instance)
         {
             instance = this;

+ 39 - 16
ActionTowerDefense/Assets/Scripts/Rougue/SoldierEXP.cs

@@ -28,14 +28,10 @@ public class SoldierEXP : MonoBehaviour
     public SingleSoldierEXP[] ssexp = new SingleSoldierEXP[3];
     [LabelText("升到下一级所需的经验值")]
     public SingleSoldierEXP[] needEXP = new SingleSoldierEXP[3];
-    private SingleSoldierLevel[] infos = new SingleSoldierLevel[3];
 
-    //等级文本
+    [Header("等级文本(临时)")]
     public TextMeshProUGUI[] levels=new TextMeshProUGUI[3];
 
-    //表
-    private List<SingleSoldierLevel> expList;
-
     //读升级数据的脚本
     private SoldierLevelRecord slr;
 
@@ -47,24 +43,28 @@ public class SoldierEXP : MonoBehaviour
 
     private void Start()
     {
-        expList = GameManager.instance.allCfgData.CfgSoldierLevel.DataList;
-        SoldierType[] sts = GameManager.instance.curSoldiers;
+        SoldierType[] sts = GameManager.curSoldiers;
         for (int i = 0; i < 3; i++)
         {
             ssexp[i].st = sts[i];
             ssexp[i].level = 1;
             needEXP[i].st = sts[i];
             needEXP[i].level = 1;
-            SetNextEXP(sts[i]);
         }
     }
 
+    //经验不断加加加加到厌倦~
     public void AddEXP(SoldierType st, int exp)
     {
         for(int i = 0; i < 3; i++)
         {
             if (ssexp[i].st == st)
             {
+                //满级了就不加了
+                if (ssexp[i].level == SoldierLevelRecord.maxLevels[i])
+                {
+                    return;
+                }
                 ssexp[i].curEXP += exp;
                 JudgeEXP(st);
                 break;
@@ -72,6 +72,7 @@ public class SoldierEXP : MonoBehaviour
         }
     }
 
+    //判定某种士兵的经验值是否足以升级
     private void JudgeEXP(SoldierType st)
     {
         for(int i = 0; i < 3; i++)
@@ -84,15 +85,30 @@ public class SoldierEXP : MonoBehaviour
                     ssexp[i].level += 1;
                     levels[i].text = "LV" + ssexp[i].level.ToString();
                     SingleSoldierLevel s = null;
-                    foreach (SingleSoldierLevel ssl in expList)
+                    foreach (SoldierLevelRecord.SoldierEXPList sel in SoldierLevelRecord.soldierEXPlists)
                     {
-                        if (ssl.Level == ssexp[i].level && ssl.Soldier == st.ToString())
+                        if (sel.st == st)
                         {
-                            s = ssl;
+                            foreach(SingleSoldierLevel ssl in sel.ssl)
+                            {
+                                if (ssl.Level == ssexp[i].level)
+                                {
+                                    s = ssl;
+                                }
+                            }
                             break;
                         }
                     }
+                    //读取升级后该士兵的增益
                     slr.ReadSoldierBuff(st, s);
+                    //满了就先试一下
+                    if (ssexp[i].level == SoldierLevelRecord.maxLevels[i])
+                    {
+                        levels[i].text = "LV" + ssexp[i].level.ToString() + "(满)";
+                        levels[i].color = Color.red;
+                        return;
+                    }
+                    //设置下一级所需的经验值
                     SetNextEXP(st);
                 }
                 break;
@@ -100,19 +116,26 @@ public class SoldierEXP : MonoBehaviour
         }
     }
 
-    private void SetNextEXP(SoldierType st)
+    //设置下一级所需的经验值
+    public void SetNextEXP(SoldierType st)
     {
         for(int i = 0; i < 3; i++)
         {
             if (needEXP[i].st == st)
             {
                 needEXP[i].level += 1;
-                foreach(SingleSoldierLevel ssl in expList)
+                foreach(SoldierLevelRecord.SoldierEXPList sel in SoldierLevelRecord.soldierEXPlists)
                 {
-                    if (ssl.Level == needEXP[i].level && ssl.Soldier == st.ToString())
+                    if (sel.st == st)
                     {
-                        needEXP[i].curEXP += ssl.EXP;
-                        infos[i] = ssl;
+                        foreach (SingleSoldierLevel ssl in sel.ssl)
+                        {
+                            if (ssl.Level == needEXP[i].level)
+                            {
+                                needEXP[i].curEXP += ssl.EXP;
+                                break;
+                            }
+                        }
                         break;
                     }
                 }

+ 79 - 2
ActionTowerDefense/Assets/Scripts/Rougue/SoldierLevelRecord.cs

@@ -13,20 +13,96 @@ public class SoldierLevelRecord : MonoBehaviour
         public int marchAttack;
         public int hp;
         public int armor;
+        public int mp;
+    }
+
+    public struct SoldierEXPList
+    {
+        public SoldierType st;
+        public List<SingleSoldierLevel> ssl;
     }
 
     [DisplayOnly]
     public SoldierExtraBuff[] seb = new SoldierExtraBuff[3];
     private SoldierBuff sb;
 
+    //本局游戏的士兵表
+    static public SoldierEXPList[] soldierEXPlists = new SoldierEXPList[3];
+    //本局游戏三个士兵的等级上限
+    static public int[] maxLevels = new int[3];
+    //excel表
+    private List<SingleSoldierLevel> expList;
+    //把整个表按照士兵种类分出来
+    static public List<SoldierEXPList> allSoldierEXPLists;
+
     private void Start()
     {
-        for(int i = 0; i < 3; i++)
+        expList = GameManager.instance.allCfgData.CfgSoldierLevel.DataList;
+        for (int i = 0; i < 3; i++)
         {
-            seb[i].st = GameManager.instance.curSoldiers[i];
+            seb[i].st = GameManager.curSoldiers[i];
+            soldierEXPlists[i].st = seb[i].st;
+        }
+        allSoldierEXPLists = new List<SoldierEXPList>();
+        RecordLevelLists();
+        CurGameSoldierEXPList();
+    }
+    
+    private SoldierType TranStringToSoldierType(string sname)
+    {
+        return (SoldierType)System.Enum.Parse(typeof(SoldierType), sname);
+    }
+
+    //读取本局游戏的几个士兵表
+    public void CurGameSoldierEXPList()
+    {
+        int id = 0;
+        foreach(SoldierType st in GameManager.curSoldiers)
+        {
+            foreach (SoldierEXPList sel in allSoldierEXPLists)
+            {
+                if (sel.st == st)
+                {
+                    soldierEXPlists[id].ssl = sel.ssl;
+                    maxLevels[id] = sel.ssl.Count + 1;
+                    GetComponent<SoldierEXP>().SetNextEXP(st);
+                    id++;
+                    break;
+                }
+            }
+        }
+    }
+
+    //把升级表按士兵种类分放
+    private void RecordLevelLists()
+    {
+        string sname = expList[0].Soldier;
+        SoldierType st = TranStringToSoldierType(sname);
+        SoldierEXPList sel;
+        sel.st = st;
+        List<SingleSoldierLevel> curSSL = new List<SingleSoldierLevel>();
+        foreach(SingleSoldierLevel ssl in expList)
+        {
+            if (ssl.Soldier == sname)
+            {
+                curSSL.Add(ssl);
+            }
+            else
+            {
+                sel.ssl = curSSL;
+                allSoldierEXPLists.Add(sel);
+                curSSL = new List<SingleSoldierLevel>();
+                sname = ssl.Soldier;
+                st = TranStringToSoldierType(sname);
+                sel.st = st;
+                curSSL.Add(ssl);
+            }
         }
+        sel.ssl = curSSL;
+        allSoldierEXPLists.Add(sel);
     }
 
+    //士兵当前的加成
     public void ReadSoldierBuff(SoldierType st, SingleSoldierLevel ssl)
     {
         for(int i = 0; i < 3; i++)
@@ -37,6 +113,7 @@ public class SoldierLevelRecord : MonoBehaviour
                 seb[i].marchAttack += ssl.MarchAttack;
                 seb[i].hp += ssl.HP;
                 seb[i].armor += ssl.Armor;
+                seb[i].mp += ssl.MP;
                 break;
             }
         }

+ 1 - 1
ActionTowerDefense/Assets/Scripts/Rougue/deadBaGua/GuaProbablityPool.cs

@@ -25,7 +25,7 @@ public class GuaProbablityPool : MonoBehaviour
     private void Start()
     {
         //guaProbabilities = GameManager.instance.allCfgData.CfgGuaProbability.DataList;
-        curSoldiers = GameManager.instance.curSoldiers;
+        curSoldiers = GameManager.curSoldiers;
         //SetGuaPoolList();
         origPool = new List<SoldierGuaPool>(guaPool);
     }

+ 30 - 15
ActionTowerDefense/GenerateDatas/json/cfgsoldierlevel.json

@@ -6,7 +6,8 @@
     "SummonAttack": 0,
     "MarchAttack": 0,
     "HP": 10,
-    "armor": 0
+    "armor": 0,
+    "MP": 100
   },
   {
     "Level": 3,
@@ -15,7 +16,8 @@
     "SummonAttack": 10,
     "MarchAttack": 0,
     "HP": 0,
-    "armor": 0
+    "armor": 0,
+    "MP": 1
   },
   {
     "Level": 4,
@@ -24,7 +26,8 @@
     "SummonAttack": 0,
     "MarchAttack": 10,
     "HP": 0,
-    "armor": 0
+    "armor": 0,
+    "MP": 1
   },
   {
     "Level": 5,
@@ -33,7 +36,8 @@
     "SummonAttack": 0,
     "MarchAttack": 0,
     "HP": 0,
-    "armor": 10
+    "armor": 10,
+    "MP": 1
   },
   {
     "Level": 6,
@@ -42,7 +46,8 @@
     "SummonAttack": 0,
     "MarchAttack": 0,
     "HP": 20,
-    "armor": 0
+    "armor": 0,
+    "MP": 1
   },
   {
     "Level": 2,
@@ -51,7 +56,8 @@
     "SummonAttack": 0,
     "MarchAttack": 0,
     "HP": 10,
-    "armor": 0
+    "armor": 0,
+    "MP": 1
   },
   {
     "Level": 3,
@@ -60,7 +66,8 @@
     "SummonAttack": 10,
     "MarchAttack": 0,
     "HP": 0,
-    "armor": 0
+    "armor": 0,
+    "MP": 1
   },
   {
     "Level": 4,
@@ -69,7 +76,8 @@
     "SummonAttack": 0,
     "MarchAttack": 10,
     "HP": 0,
-    "armor": 0
+    "armor": 0,
+    "MP": 1
   },
   {
     "Level": 5,
@@ -78,7 +86,8 @@
     "SummonAttack": 0,
     "MarchAttack": 0,
     "HP": 0,
-    "armor": 10
+    "armor": 10,
+    "MP": 1
   },
   {
     "Level": 6,
@@ -87,7 +96,8 @@
     "SummonAttack": 0,
     "MarchAttack": 0,
     "HP": 20,
-    "armor": 0
+    "armor": 0,
+    "MP": 1
   },
   {
     "Level": 2,
@@ -96,7 +106,8 @@
     "SummonAttack": 0,
     "MarchAttack": 0,
     "HP": 10,
-    "armor": 0
+    "armor": 0,
+    "MP": 1
   },
   {
     "Level": 3,
@@ -105,7 +116,8 @@
     "SummonAttack": 10,
     "MarchAttack": 0,
     "HP": 0,
-    "armor": 0
+    "armor": 0,
+    "MP": 1
   },
   {
     "Level": 4,
@@ -114,7 +126,8 @@
     "SummonAttack": 0,
     "MarchAttack": 10,
     "HP": 0,
-    "armor": 0
+    "armor": 0,
+    "MP": 1
   },
   {
     "Level": 5,
@@ -123,7 +136,8 @@
     "SummonAttack": 0,
     "MarchAttack": 0,
     "HP": 0,
-    "armor": 10
+    "armor": 10,
+    "MP": 1
   },
   {
     "Level": 6,
@@ -132,6 +146,7 @@
     "SummonAttack": 0,
     "MarchAttack": 0,
     "HP": 20,
-    "armor": 0
+    "armor": 0,
+    "MP": 1
   }
 ]

+ 8 - 8
ActionTowerDefense/Luban/.cache.meta

@@ -5,20 +5,20 @@ C:/works_Szand/ActionTowerDefense/ActionTowerDefense/Assets/Gen/CfgEnemy.cs,AA55
 C:/works_Szand/ActionTowerDefense/ActionTowerDefense/Assets/Gen/CfgSoldierLevel.cs,A08CC235369146A3251A76BCCA2B9E,1381,1747122184570
 C:/works_Szand/ActionTowerDefense/ActionTowerDefense/Assets/Gen/SingleBuildingConfig.cs,E5CE78694DF91B719BA63E763E9F43B8,2416,1732401186765
 C:/works_Szand/ActionTowerDefense/ActionTowerDefense/Assets/Gen/SingleCreateBuildingConfig.cs,579EDD7478123FC56C428118FC3B6CC,7233,1732415326448
-C:/works_Szand/ActionTowerDefense/ActionTowerDefense/Assets/Gen/SingleCreateEnemyConfig.cs,9218A87BEE9DC5194F881BDE72B49CB3,5272,1747389694171
+C:/works_Szand/ActionTowerDefense/ActionTowerDefense/Assets/Gen/SingleCreateEnemyConfig.cs,13EF44C8F2389B06BCEE312F6D9EBCF,5070,1747882799383
 C:/works_Szand/ActionTowerDefense/ActionTowerDefense/Assets/Gen/SingleEnemyConfig.cs,B959AABD6E72533BB8F544E6A69E145,4518,1747122184570
-C:/works_Szand/ActionTowerDefense/ActionTowerDefense/Assets/Gen/SingleSoldierLevel.cs,77E750CE27B4127A763BD984A8DFAE,2897,1747361934858
+C:/works_Szand/ActionTowerDefense/ActionTowerDefense/Assets/Gen/SingleSoldierLevel.cs,72E7258D91359E0D5AFC253BB051DA,3091,1747887163132
 C:/works_Szand/ActionTowerDefense/ActionTowerDefense/Assets/Gen/Tables.cs,44F5C895116C91B4662FE298D1145C25,2106,1747122184570
 C:/works_Szand/ActionTowerDefense/ActionTowerDefense/GenerateDatas/json/cfgbuilding.json,AF3B22476CACCDADACF8AC7C7D3E1594,446,1742267809190
 C:/works_Szand/ActionTowerDefense/ActionTowerDefense/GenerateDatas/json/cfgcreatebuilding.json,96C5CE210B1AAAE686AF51DFFE8A0,5047,1741161232156
-C:/works_Szand/ActionTowerDefense/ActionTowerDefense/GenerateDatas/json/cfgcreateenemy.json,693B7C4817D6B05CF58A83D9B4A32CF,9002,1747389591745
-C:/works_Szand/ActionTowerDefense/ActionTowerDefense/GenerateDatas/json/cfgenemy.json,ADB17763C631C6F3F82987884374E90,2763,1747389591745
-C:/works_Szand/ActionTowerDefense/ActionTowerDefense/GenerateDatas/json/cfgsoldierlevel.json,2ACE1CA72E898A03F10504F1FA891DF,2228,1747361934858
+C:/works_Szand/ActionTowerDefense/ActionTowerDefense/GenerateDatas/json/cfgcreateenemy.json,7C6049F24C7D9C9A2434E3379C9378D,10274,1747727436891
+C:/works_Szand/ActionTowerDefense/ActionTowerDefense/GenerateDatas/json/cfgenemy.json,ADB17763C631C6F3F82987884374E90,2763,1747713933641
+C:/works_Szand/ActionTowerDefense/ActionTowerDefense/GenerateDatas/json/cfgsoldierlevel.json,AFE35FD49F0D79895B393FD036D6B7,2440,1747905609772
 C:/works_Szand/ActionTowerDefense/ActionTowerDefense/Luban/Config/Datas/__beans__.xlsx,98987DA7288FEE34BCD08EA883D425E,9603,1719819495252
 C:/works_Szand/ActionTowerDefense/ActionTowerDefense/Luban/Config/Datas/__enums__.xlsx,D95915E233EB1E4EB87BE0557A2BFDD,9879,1732405824089
 C:/works_Szand/ActionTowerDefense/ActionTowerDefense/Luban/Config/Datas/__tables__.xlsx,73191AB2DEBAFD4D21DA7ABF2F7F725,10283,1747122174507
-C:/works_Szand/ActionTowerDefense/ActionTowerDefense/Luban/Config/Datas/出怪表.xlsx,D932797C40C7F627BC42F42E6EB73D,13658,1747389591748
-C:/works_Szand/ActionTowerDefense/ActionTowerDefense/Luban/Config/Datas/怪物表.xlsx,A49182DEDE2D373A1D0328091D9DF49,10148,1747389591749
+C:/works_Szand/ActionTowerDefense/ActionTowerDefense/Luban/Config/Datas/出怪表.xlsx,E1FB832F6FFE56C4E78DC1B1896D6ED2,15269,1747727436892
+C:/works_Szand/ActionTowerDefense/ActionTowerDefense/Luban/Config/Datas/怪物表.xlsx,AE5D299779B9735D27578E9EC93EF,10148,1747727436893
 C:/works_Szand/ActionTowerDefense/ActionTowerDefense/Luban/Config/Datas/建筑表.xlsx,9ED27CF7DE3417811979E297BF30B64,9615,1742267302330
 C:/works_Szand/ActionTowerDefense/ActionTowerDefense/Luban/Config/Datas/建筑生成表.xlsx,9C4EC1B178B1C62A9927C281845B5AB9,17054,1737060324755
-C:/works_Szand/ActionTowerDefense/ActionTowerDefense/Luban/Config/Datas/士兵等级属性表.xlsx,9D4984E3E7B927D5359BE52DB26040,12473,1747361922297
+C:/works_Szand/ActionTowerDefense/ActionTowerDefense/Luban/Config/Datas/士兵等级属性表.xlsx,AF4FBFAF7A9FB441CECE94E17934D4BB,12574,1747905606096

BIN
ActionTowerDefense/Luban/Config/Datas/士兵等级属性表.xlsx