wmaker 发表于 2020-2-17 09:53

根据士兵职业设定个人7技能

本帖最后由 wmaker 于 2020-2-17 10:08 编辑

好久没来,刚发现这个游戏.看各位大佬的mod都是固定7技能,我这种强迫症晚期的用起来总感觉差点什么.
参考各位大佬的mod,自己大致改了下,感觉舒服不少.分享给大家,请大家批判下.

public CharacterProgression(SpecializationDef specializationDef, LevelProgressionDef levelProgression, BaseStatSheetDef baseStatSheetDef, CharacterGenerationParams generationParams = null)
{
      this._baseStats.Clear();
      int num = (generationParams != null) ? generationParams.EnduranceBonus : 0;
      this._baseStats.Add(baseStatSheetDef.Strength + num);
      int num2 = (generationParams != null) ? generationParams.WillBonus : 0;
      this._baseStats.Add(baseStatSheetDef.Will + num2);
      int num3 = (generationParams != null) ? generationParams.SpeedBonus : 0;
      this._baseStats.Add(baseStatSheetDef.Speed + num3);
      this.BaseStatSheet = baseStatSheetDef;
      this.SkillPoints = levelProgression.InitialSkillpoints;
      this.LevelProgression = new LevelProgression(levelProgression, 0);
      this.MainSpecDef = specializationDef;
      AbilityTrack track = new AbilityTrack(specializationDef.AbilityTrack, AbilityTrackSource.PrimaryClass);
      this.AddNewAbilityTrack(track, true);
      
      //------------------------------------------------------------------------------------------------------
      
      List<AbilityTrackSlot> list = new List<AbilityTrackSlot>();
      string classtag = this.GetClassTags().name;
      List<string> learns;
      if (!(classtag == "Priest_ClassTagDef") && !(classtag == "Technician_ClassTagDef"))
      {
                learns = new List<string>
                {
                        "ExpertShooter_AbilityDef",
                        "ExpertHeavyWeapons_AbilityDef",
                        "Strongman_AbilityDef",
                        "Reckless_AbilityDef",
                        "HeavyLifter_AbilityDef",
                        "RageBurst_ShootAbilityDef"
                };
                if (!(classtag == "Infiltrator_ClassTagDef"))
                {
                        if (!(classtag == "Assault_ClassTagDef"))
                        {
                              if (!(classtag == "Sniper_ClassTagDef"))
                              {
                                        learns.Add("Crafty_AbilityDef");
                              }
                              else
                              {
                                        learns.Add("Gunslinger_AbilityDef");
                              }
                        }
                        else
                        {
                              learns.Add("CloseQuartersSpecialist_AbilityDef");
                        }
                }
                else
                {
                        learns.Add("StealthSpecialist_AbilityDef");
                }
      }
      else
      {
                learns = new List<string>
                {
                        "Brainiac_AbilityDef",
                        "Helpful_AbilityDef",
                        "RadiantHope_AbilityDef",
                        "HeavyLifter_AbilityDef",
                        "Priest_InstilFrenzy_AbilityDef"
                };
                if (!(classtag == "Priest_ClassTagDef"))
                {
                        learns.Add("PsychicWard_AbilityDef");
                        learns.Add("MindCrush_AbilityDef");
                }
                else
                {
                        learns.Add("Inspire_AbilityDef");
                        learns.Add("ElectricReinforcement_AbilityDef");
                }
      }
      AbilityTrackSlot abilityTrackSlot;
      (from itDef in GameUtl.GameComponent<DefRepository>().GetAllDefs<TacticalAbilityDef>()
      where learns.Contains(itDef.name)
      select itDef).ToList<TacticalAbilityDef>().ForEach(delegate(TacticalAbilityDef itDef)
      {
                this.AddAbility(itDef);                                    //可注释掉,技能就需要升级慢慢学
                abilityTrackSlot = new AbilityTrackSlot();
                abilityTrackSlot.Ability = itDef;
                list.Add(abilityTrackSlot);
      });
      this.AddNewAbilityTrack(new AbilityTrack(list.ToArray(), AbilityTrackSource.Personal), false);
      
      //------------------------------------------------------------------------------------------------------
      
      this.Init();
}
只需要用2条线中间的部分替换掉原来的随机技能生成语句,如下2条线之间的部分
public CharacterProgression(SpecializationDef specializationDef, LevelProgressionDef levelProgression, BaseStatSheetDef baseStatSheetDef, CharacterGenerationParams generationParams = null)
{
      this._baseStats.Clear();
      int num = (generationParams != null) ? generationParams.EnduranceBonus : 0;
      this._baseStats.Add(baseStatSheetDef.Strength + num);
      int num2 = (generationParams != null) ? generationParams.WillBonus : 0;
      this._baseStats.Add(baseStatSheetDef.Will + num2);
      int num3 = (generationParams != null) ? generationParams.SpeedBonus : 0;
      this._baseStats.Add(baseStatSheetDef.Speed + num3);
      this.BaseStatSheet = baseStatSheetDef;
      this.SkillPoints = levelProgression.InitialSkillpoints;
      this.LevelProgression = new LevelProgression(levelProgression, 0);
      this.MainSpecDef = specializationDef;
      AbilityTrack track = new AbilityTrack(specializationDef.AbilityTrack, AbilityTrackSource.PrimaryClass);
      this.AddNewAbilityTrack(track, true);
      
      //------------------------------------------------------------------------------------------------------
      
      AbilityTrack track2 = AbilityTrack.CreatePersonalAbilityTrack(new GameTagDef, levelProgression.MaxLevel, baseStatSheetDef.PersonalAbilitiesCount);
      this.AddNewAbilityTrack(track2, false);
      
      //------------------------------------------------------------------------------------------------------
      
      this.Init();
}

技能在learns后面的list表里,可以随意修改成你喜欢的
因为兵生成的时候并不区分阵营,所以修改后电脑刷出的也都是超级兵.
可以用控制台的give_soldier 命令来招兵,招完兵就替换会原来的就行.
下面是give_soldier的命令参数:
give_soldier SY_Assault

PX_Assault
PX_Heavy
PX_Sniper

ANU_Assault
ANU_Berserker
ANU_Heavy
ANU_Priest
ANU_Shooter
ANU_Watcher

SY_Assault
SY_Infiltrator
SY_Sniper
SY_Leader

NJ_Assault
NJ_Heavy
NJ_Sniper
NJ_Technician


独立势力

IN_Assault
IN_Heavy

技能名可以参考https://bbs.3dmgame.com/thread-5978422-1-1.html
修改工具dnSpy可以参考https://bbs.3dmgame.com/thread-5977651-1-1.html
打开控制台参考https://bbs.3dmgame.com/thread-5976935-1-1.html

最后还要感谢本版各位大佬作出的巨大贡献.

Ps:显示全据点命令:reveal_sites,你值得拥有.(还有一条命令:visit_all_px_bases,但是没有效果)
忘了,程序位置:PhoenixPoint.Common.Entities.Characters.CharacterProgre,并且要在程序开头加
using Base.Core;
using Base.Defs;




xwyk 发表于 2026-5-25 17:22

5555555555555555
页: [1]
查看完整版本: 根据士兵职业设定个人7技能