lowieliang 发表于 2021-10-12 18:01

员工列表排序优化(干货求加精)

本帖最后由 lowieliang 于 2021-10-12 18:07 编辑

   不知道大家玩的时候有没有这样的不良体验,员工列表一长,明明培养好可以相互接替工作的员工却分散在列表里。尤其是等级不同的时候。上图
   
   经过分析,默认排序的规则是 职业->等级->ID(和创建次序有关), 然后降序排列
   为了达到相同技能的员工就近替换,希望达到的结果,把相同技能的员工列在一起,那么就要求排序是 职业->技能->等级->ID
   
   不多说了,直接上修改
   TH20.StaffMenuRowProvider 类
   添加下列静态成员和函数
    private static Dictionary<int, int> QualificationIndexer = new Dictionary<int, int>();
    private static int GetStaffQualificationCode(Staff staff)
    {
      if(staff.Qualifications == null || staff.Qualifications.Count <= 0)
      {
            return 0;
      }
      string name = staff.Qualifications.Definition.ToString();
      if (name.EndsWith("II"))
      {
            name = name.Substring(0, name.Length - 2);
      }
      else if (name.EndsWith("III"))
      {
            name = name.Substring(0, name.Length - 3);
      }
      else if (name.EndsWith("IV"))
      {
            name = name.Substring(0, name.Length - 2);
      }
      else if (name.EndsWith("V"))
      {
            name = name.Substring(0, name.Length - 1);
      }
      return name.GetHashCode();
    }
    private static void PreserveStaffQualification(Staff staff)
    {
      int code = StaffMenuRowProvider.GetStaffQualificationCode(staff);
      if (code != 0 && !StaffMenuRowProvider.QualificationIndexer.ContainsKey(code))
      {
            StaffMenuRowProvider.QualificationIndexer.Add(code, StaffMenuRowProvider.QualificationIndexer.Count + 1);
      }
    }
   
   修改下列函数
   public void RebuildStaffList()
   {
       this._staff.Clear();
       foreach (Staff staff in this._characterManager.StaffMembers)
       {
         if ((this._staffFilter == StaffDefinition.Type.None || staff.Definition._type == this._staffFilter) && !staff.HasBeenFired() && !staff.HasResigned())
         {
               this.AddStaff(staff);
         }
         StaffMenuRowProvider.PreserveStaffQualification(staff);   // 加上这句
       }
       this._staff.Sort(this._defaultStaffOrderComparer);
       this.RefreshRowAssignment();
       if (this._table != null)
       {
         this._table.Refresh();
       }
   }


    private static int GetDefaultOrderStaffSortValue(Staff staff, int instanceID)
    {
      StaffDefinition.Type type = staff.Definition._type;
      int qualification = 0;
      int code = StaffMenuRowProvider.GetStaffQualificationCode(staff);
      if (StaffMenuRowProvider.QualificationIndexer.ContainsKey(code))
      {
            qualification = StaffMenuRowProvider.QualificationIndexer;
      }
      return (StaffDefinition.GetNumTypes() - (int)type << 28) + (qualification << 20) + (staff.Rank << 16) + (instanceID & 65535);
    }

   修改保存后进入游戏,打开员工列表,可以看到相同技能的员工是排在一起的,替换起来方便一些。看效果
   
   
   
   ps: 因为修改的代码是识别员工第一个技能,所以在培养同类员工是务必使第一个技能相同
      比如我将专门负责升级机械的勤杂工第一技能是机械学,负责修理的勤杂工第一技能是维护,其他负责打扫的第一技能都学工作激情
      
      每张图片有限制200K,所以用了个免费压缩软件有水印,大家凑合看:)




sayex 发表于 2021-10-24 09:19

很棒,感谢分享!

longyatc 发表于 2021-10-26 16:55

非常不错,请问要修改哪个文件?

程ゝ 发表于 2021-10-27 18:26

添加的那一段要放哪里

程ゝ 发表于 2021-10-27 19:11

完全找不到要添加在哪。无法编译

lowieliang 发表于 2021-10-27 23:53

本帖最后由 lowieliang 于 2021-10-27 23:55 编辑

    原文中有粗体提醒了, TH20.StaffMenuRowProvider 类
    添加的变量和函数,随便加哪里,和原来的函数或者变量同级
    就贴着 GetDefaultOrderStaffSortValue 这个函数下面加好了。在最后那个反花括号后面加个回车,然后把要加的东西黏贴上去

zwj_325200 发表于 2021-10-28 08:47

大佬的修改超级细菌奖励帖子,非常实用

这次这个修改,也是改TwoPointHospital\TPH_Data\Managed\Assembly-CSharp.dll 这个文件么?

lowieliang 发表于 2021-10-28 14:27

zwj_325200 发表于 2021-10-28 08:47
大佬的修改超级细菌奖励帖子,非常实用

这次这个修改,也是改TwoPointHospital\TPH_Data\Managed\Assembly ...

对的, 就是改 安装目录\TPH_Data\Managed\Assembly-CSharp.dll 这个文件

zwj_325200 发表于 2021-10-28 22:26

lowieliang 发表于 2021-10-28 14:27
对的, 就是改 安装目录\TPH_Data\Managed\Assembly-CSharp.dll 这个文件
鉴于论坛里有很多像我这样的小白
建议大佬在帖子里补充说明一下:
1、去github下载最新的dnSpy
2、先备份游戏目录\TPH_Data\Managed\Assembly-CSharp.dll 这个文件,再用dnSpy打开这个文件
3、按照楼主说的步骤修改

毕竟,小白很多 ;P



dft2010 发表于 2021-11-13 00:20

按照楼主的教程修改好的DLL,送给新手小白,直接替换到\Two Point Hospital A Stitch in Time\TPH_Data\Managed文件夹下替换即可,感谢楼主,如果能出个批量修改医生科室权限就好了,科室多了以后修改起来太麻烦了~~
下载:https://www.lanzouw.com/icNFtwfvqrg 密码:7xrq

ILOVEYOU520 发表于 2022-2-15 11:44

本帖最后由 ILOVEYOU520 于 2022-2-15 14:31 编辑

:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)哈哈哈哈哈哈

ILOVEYOU520 发表于 2022-2-15 11:45

本帖最后由 ILOVEYOU520 于 2022-2-15 14:31 编辑

:):):):):):):):):)哈哈哈哈哈哈哈哈哈哈哈哈

Lay-Zyx 发表于 2022-3-23 19:53

dft2010 发表于 2021-11-13 00:20
按照楼主的教程修改好的DLL,送给新手小白,直接替换到\Two Point Hospital A Stitch in Time\ ...

我用了你的文件替换之后打开游戏就崩溃了:'(

Lay-Zyx 发表于 2022-3-30 13:53

不错,非常好用6666666666666

ai974010976 发表于 2022-4-24 08:11

666,感谢楼主分享!{:3_110:}

andydnaywu 发表于 2023-1-10 11:07

这个好,不会乱七八糟的了,只是小白还没研究咋改
页: [1]
查看完整版本: 员工列表排序优化(干货求加精)