员工列表排序优化(干货求加精)
本帖最后由 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,所以用了个免费压缩软件有水印,大家凑合看:)
很棒,感谢分享! 非常不错,请问要修改哪个文件? 添加的那一段要放哪里 完全找不到要添加在哪。无法编译 本帖最后由 lowieliang 于 2021-10-27 23:55 编辑
原文中有粗体提醒了, TH20.StaffMenuRowProvider 类
添加的变量和函数,随便加哪里,和原来的函数或者变量同级
就贴着 GetDefaultOrderStaffSortValue 这个函数下面加好了。在最后那个反花括号后面加个回车,然后把要加的东西黏贴上去
大佬的修改超级细菌奖励帖子,非常实用
这次这个修改,也是改TwoPointHospital\TPH_Data\Managed\Assembly-CSharp.dll 这个文件么? zwj_325200 发表于 2021-10-28 08:47
大佬的修改超级细菌奖励帖子,非常实用
这次这个修改,也是改TwoPointHospital\TPH_Data\Managed\Assembly ...
对的, 就是改 安装目录\TPH_Data\Managed\Assembly-CSharp.dll 这个文件
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
按照楼主的教程修改好的DLL,送给新手小白,直接替换到\Two Point Hospital A Stitch in Time\TPH_Data\Managed文件夹下替换即可,感谢楼主,如果能出个批量修改医生科室权限就好了,科室多了以后修改起来太麻烦了~~
下载:https://www.lanzouw.com/icNFtwfvqrg 密码:7xrq
本帖最后由 ILOVEYOU520 于 2022-2-15 14:31 编辑
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)哈哈哈哈哈哈 本帖最后由 ILOVEYOU520 于 2022-2-15 14:31 编辑
:):):):):):):):):)哈哈哈哈哈哈哈哈哈哈哈哈 dft2010 发表于 2021-11-13 00:20
按照楼主的教程修改好的DLL,送给新手小白,直接替换到\Two Point Hospital A Stitch in Time\ ...
我用了你的文件替换之后打开游戏就崩溃了:'(
不错,非常好用6666666666666
666,感谢楼主分享!{:3_110:} 这个好,不会乱七八糟的了,只是小白还没研究咋改
页:
[1]