Add checks to avoid crashing if we encounter a soulless unit

develop
Quietust 2012-11-02 16:28:48 -05:00
parent 69bdb0f8b8
commit 3257eb80a1
1 changed files with 10 additions and 2 deletions

@ -298,6 +298,10 @@ bool sortBySkill (const UnitInfo *d1, const UnitInfo *d2)
{ {
if (sort_skill != job_skill::NONE) if (sort_skill != job_skill::NONE)
{ {
if (!d1->unit->status.current_soul)
return !descending;
if (!d2->unit->status.current_soul)
return descending;
df::unit_skill *s1 = binsearch_in_vector<df::unit_skill,df::job_skill>(d1->unit->status.current_soul->skills, &df::unit_skill::id, sort_skill); df::unit_skill *s1 = binsearch_in_vector<df::unit_skill,df::job_skill>(d1->unit->status.current_soul->skills, &df::unit_skill::id, sort_skill);
df::unit_skill *s2 = binsearch_in_vector<df::unit_skill,df::job_skill>(d2->unit->status.current_soul->skills, &df::unit_skill::id, sort_skill); df::unit_skill *s2 = binsearch_in_vector<df::unit_skill,df::job_skill>(d2->unit->status.current_soul->skills, &df::unit_skill::id, sort_skill);
int l1 = s1 ? s1->rating : 0; int l1 = s1 ? s1->rating : 0;
@ -1030,7 +1034,9 @@ void viewscreen_unitlaborsst::render()
fg = 9; fg = 9;
if (columns[col_offset].skill != job_skill::NONE) if (columns[col_offset].skill != job_skill::NONE)
{ {
df::unit_skill *skill = binsearch_in_vector<df::unit_skill,df::job_skill>(unit->status.current_soul->skills, &df::unit_skill::id, columns[col_offset].skill); df::unit_skill *skill = NULL;
if (unit->status.current_soul)
skill = binsearch_in_vector<df::unit_skill,df::job_skill>(unit->status.current_soul->skills, &df::unit_skill::id, columns[col_offset].skill);
if ((skill != NULL) && (skill->rating || skill->experience)) if ((skill != NULL) && (skill->rating || skill->experience))
{ {
int level = skill->rating; int level = skill->rating;
@ -1086,7 +1092,9 @@ void viewscreen_unitlaborsst::render()
} }
else else
{ {
df::unit_skill *skill = binsearch_in_vector<df::unit_skill,df::job_skill>(unit->status.current_soul->skills, &df::unit_skill::id, columns[sel_column].skill); df::unit_skill *skill = NULL;
if (unit->status.current_soul)
skill = binsearch_in_vector<df::unit_skill,df::job_skill>(unit->status.current_soul->skills, &df::unit_skill::id, columns[sel_column].skill);
if (skill) if (skill)
{ {
int level = skill->rating; int level = skill->rating;