初级玩家
![Rank: 2](static/image/common/star_level2.gif)
- 贡献度
- 6
- 金元
- 621
- 积分
- 86
- 精华
- 0
- 注册时间
- 2021-10-1
|
本帖最后由 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,所以用了个免费压缩软件有水印,大家凑合看![](static/image/smiley/default/smile.gif)
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|