3DMGAME 3DM首页 新闻中心 前瞻 | 评测 游戏库 热门 | 最新 攻略中心 攻略 | 秘籍 下载中心 游戏 | 汉化 购买正版 论坛

注册 登录

QQ登录

只需一步,快速开始

查看: 5827|回复: 15
打印 上一主题 下一主题

[原创] 员工列表排序优化(干货求加精)

[复制链接]

11

主题

55

帖子

86

积分

初级玩家

Rank: 2

贡献度
6
金元
621
积分
86
精华
0
注册时间
2021-10-1
跳转到指定楼层
主题
发表于 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[0].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[code];
        }
        return (StaffDefinition.GetNumTypes() - (int)type << 28) + (qualification << 20) + (staff.Rank << 16) + (instanceID & 65535);
    }

   修改保存后进入游戏,打开员工列表,可以看到相同技能的员工是排在一起的,替换起来方便一些。看效果

   
   

   
   ps: 因为修改的代码是识别员工第一个技能,所以在培养同类员工是务必使第一个技能相同
      比如我将专门负责升级机械的勤杂工第一技能是机械学,负责修理的勤杂工第一技能是维护,其他负责打扫的第一技能都学工作激情

      
      每张图片有限制200K,所以用了个免费压缩软件有水印,大家凑合看




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

0

主题

272

帖子

313

积分

高级玩家

Rank: 4

贡献度
0
金元
3133
积分
313
精华
0
注册时间
2021-1-23
舒服的沙发
发表于 2021-10-24 09:19 来自手机 | 只看该作者
很棒,感谢分享!
回复 支持 反对

使用道具 举报

0

主题

249

帖子

342

积分

高级玩家

Rank: 4

贡献度
0
金元
3417
积分
342
精华
0
注册时间
2013-9-14
硬硬的板凳
发表于 2021-10-26 16:55 | 只看该作者
非常不错,请问要修改哪个文件?
回复 支持 反对

使用道具 举报

0

主题

101

帖子

143

积分

中级玩家

Rank: 3Rank: 3

贡献度
0
金元
1434
积分
143
精华
0
注册时间
2014-2-2
冰凉的地板
发表于 2021-10-27 18:26 | 只看该作者
添加的那一段要放哪里
回复 支持 反对

使用道具 举报

0

主题

101

帖子

143

积分

中级玩家

Rank: 3Rank: 3

贡献度
0
金元
1434
积分
143
精华
0
注册时间
2014-2-2
5#
发表于 2021-10-27 19:11 | 只看该作者
完全找不到要添加在哪。无法编译
回复 支持 反对

使用道具 举报

11

主题

55

帖子

86

积分

初级玩家

Rank: 2

贡献度
6
金元
621
积分
86
精华
0
注册时间
2021-10-1
6#
 楼主| 发表于 2021-10-27 23:53 | 只看该作者
本帖最后由 lowieliang 于 2021-10-27 23:55 编辑

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

使用道具 举报

9

主题

357

帖子

584

积分

高级玩家

Rank: 4

贡献度
1
金元
5795
积分
584
精华
0
注册时间
2012-3-25
7#
发表于 2021-10-28 08:47 | 只看该作者
大佬的修改超级细菌奖励帖子,非常实用

这次这个修改,也是改TwoPointHospital\TPH_Data\Managed\Assembly-CSharp.dll 这个文件么?
回复 支持 反对

使用道具 举报

11

主题

55

帖子

86

积分

初级玩家

Rank: 2

贡献度
6
金元
621
积分
86
精华
0
注册时间
2021-10-1
8#
 楼主| 发表于 2021-10-28 14:27 | 只看该作者
zwj_325200 发表于 2021-10-28 08:47
大佬的修改超级细菌奖励帖子,非常实用

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

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

使用道具 举报

9

主题

357

帖子

584

积分

高级玩家

Rank: 4

贡献度
1
金元
5795
积分
584
精华
0
注册时间
2012-3-25
9#
发表于 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、按照楼主说的步骤修改

毕竟,小白很多



回复 支持 反对

使用道具 举报

4

主题

32

帖子

99

积分

初级玩家

Rank: 2

贡献度
1
金元
950
积分
99
精华
0
注册时间
2010-2-18
10#
发表于 2021-11-13 00:20 | 只看该作者
按照楼主的教程修改好的DLL,送给新手小白,直接替换到\Two Point Hospital A Stitch in Time\TPH_Data\Managed文件夹下替换即可,感谢楼主,如果能出个批量修改医生科室权限就好了,科室多了以后修改起来太麻烦了~~
下载:https://www.lanzouw.com/icNFtwfvqrg 密码:7xrq
回复 支持 反对

使用道具 举报

0

主题

47

帖子

135

积分

中级玩家

Rank: 3Rank: 3

贡献度
1
金元
1309
积分
135
精华
0
注册时间
2016-4-2
11#
发表于 2022-2-15 11:44 | 只看该作者
本帖最后由 ILOVEYOU520 于 2022-2-15 14:31 编辑

:):):):):):):):):):):):):):):):):):):):):):):):):):):):):)哈哈哈哈哈哈
回复 支持 反对

使用道具 举报

0

主题

47

帖子

135

积分

中级玩家

Rank: 3Rank: 3

贡献度
1
金元
1309
积分
135
精华
0
注册时间
2016-4-2
12#
发表于 2022-2-15 11:45 | 只看该作者
本帖最后由 ILOVEYOU520 于 2022-2-15 14:31 编辑

哈哈哈哈哈哈哈哈哈哈哈哈
回复 支持 反对

使用道具 举报

0

主题

70

帖子

82

积分

初级玩家

Rank: 2

贡献度
0
金元
815
积分
82
精华
0
注册时间
2021-2-9
13#
发表于 2022-3-23 19:53 | 只看该作者
dft2010 发表于 2021-11-13 00:20
按照楼主的教程修改好的DLL,送给新手小白,直接替换到\Two Point Hospital A Stitch in Time\ ...

我用了你的文件替换之后打开游戏就崩溃了
回复 支持 反对

使用道具 举报

0

主题

70

帖子

82

积分

初级玩家

Rank: 2

贡献度
0
金元
815
积分
82
精华
0
注册时间
2021-2-9
14#
发表于 2022-3-30 13:53 | 只看该作者
不错,非常好用6666666666666
回复 支持 反对

使用道具 举报

16

主题

1027

帖子

3462

积分

游戏达人

Rank: 7Rank: 7Rank: 7

贡献度
24
金元
33661
积分
3462
精华
0
注册时间
2017-1-21
15#
发表于 2022-4-24 08:11 | 只看该作者
666,感谢楼主分享!
回复 支持 反对

使用道具 举报

0

主题

376

帖子

386

积分

高级玩家

Rank: 4

贡献度
0
金元
3863
积分
386
精华
0
注册时间
2010-5-29
16#
发表于 2023-1-10 11:07 | 只看该作者
这个好,不会乱七八糟的了,只是小白还没研究咋改
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|3DMGAME ( 京ICP备14006952号-1  沪公网安备 31011202006753号

GMT+8, 2025-2-15 00:51 , Processed in 0.236200 second(s), 15 queries , Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表