Fix signed-unsigned mismatch warnings in the new item value code.

Unsigned comparison allows catching negatives in the same check too.
Also, it didn't check the values in getValue.
develop
Alexander Gavrilov 2014-04-30 20:44:22 +04:00
parent 0f4684f29d
commit 98325757e2
1 changed files with 22 additions and 19 deletions

@ -1097,49 +1097,49 @@ int Items::getItemBaseValue(int16_t item_type, int16_t item_subtype, int16_t mat
return 0;
case item_type::WEAPON:
if (item_subtype >= 0 && item_subtype < world->raws.itemdefs.weapons.size())
if (size_t(item_subtype) < world->raws.itemdefs.weapons.size())
value = world->raws.itemdefs.weapons[item_subtype]->value;
else
value = 10;
break;
case item_type::ARMOR:
if (item_subtype >= 0 && item_subtype < world->raws.itemdefs.armor.size())
if (size_t(item_subtype) < world->raws.itemdefs.armor.size())
value = world->raws.itemdefs.armor[item_subtype]->value;
else
value = 10;
break;
case item_type::SHOES:
if (item_subtype >= 0 && item_subtype < world->raws.itemdefs.shoes.size())
if (size_t(item_subtype) < world->raws.itemdefs.shoes.size())
value = world->raws.itemdefs.shoes[item_subtype]->value;
else
value = 5;
break;
case item_type::SHIELD:
if (item_subtype >= 0 && item_subtype < world->raws.itemdefs.shields.size())
if (size_t(item_subtype) < world->raws.itemdefs.shields.size())
value = world->raws.itemdefs.shields[item_subtype]->value;
else
value = 10;
break;
case item_type::HELM:
if (item_subtype >= 0 && item_subtype < world->raws.itemdefs.helms.size())
if (size_t(item_subtype) < world->raws.itemdefs.helms.size())
value = world->raws.itemdefs.helms[item_subtype]->value;
else
value = 10;
break;
case item_type::GLOVES:
if (item_subtype >= 0 && item_subtype < world->raws.itemdefs.gloves.size())
if (size_t(item_subtype) < world->raws.itemdefs.gloves.size())
value = world->raws.itemdefs.gloves[item_subtype]->value;
else
value = 5;
break;
case item_type::AMMO:
if (item_subtype >= 0 && item_subtype < world->raws.itemdefs.ammo.size())
if (size_t(item_subtype) < world->raws.itemdefs.ammo.size())
value = world->raws.itemdefs.ammo[item_subtype]->value;
else
value = 1;
@ -1156,10 +1156,10 @@ int Items::getItemBaseValue(int16_t item_type, int16_t item_subtype, int16_t mat
case item_type::FISH_RAW:
case item_type::EGG:
value = 2;
if (mat_type >= 0 && mat_type < world->raws.creatures.all.size())
if (size_t(mat_type) < world->raws.creatures.all.size())
{
auto creature = world->raws.creatures.all[mat_type];
if (mat_subtype >= 0 && mat_type < creature->caste.size())
if (size_t(mat_subtype) < creature->caste.size())
{
auto caste = creature->caste[mat_subtype];
mat_type = caste->misc.bone_mat;
@ -1170,10 +1170,10 @@ int Items::getItemBaseValue(int16_t item_type, int16_t item_subtype, int16_t mat
case item_type::VERMIN:
value = 0;
if (mat_type >= 0 && mat_type < world->raws.creatures.all.size())
if (size_t(mat_type) < world->raws.creatures.all.size())
{
auto creature = world->raws.creatures.all[mat_type];
if (mat_subtype >= 0 && mat_type < creature->caste.size())
if (size_t(mat_subtype) < creature->caste.size())
value = creature->caste[mat_subtype]->misc.petvalue;
}
value /= 2;
@ -1182,10 +1182,10 @@ int Items::getItemBaseValue(int16_t item_type, int16_t item_subtype, int16_t mat
return value;
case item_type::PET:
if (mat_type >= 0 && mat_type < world->raws.creatures.all.size())
if (size_t(mat_type) < world->raws.creatures.all.size())
{
auto creature = world->raws.creatures.all[mat_type];
if (mat_subtype >= 0 && mat_type < creature->caste.size())
if (size_t(mat_subtype) < creature->caste.size())
return creature->caste[mat_subtype]->misc.petvalue;
}
return 0;
@ -1209,7 +1209,7 @@ int Items::getItemBaseValue(int16_t item_type, int16_t item_subtype, int16_t mat
break;
case item_type::PANTS:
if (item_subtype >= 0 && item_subtype < world->raws.itemdefs.pants.size())
if (size_t(item_subtype) < world->raws.itemdefs.pants.size())
value = world->raws.itemdefs.pants[item_subtype]->value;
else
value = 10;
@ -1227,7 +1227,7 @@ int Items::getItemBaseValue(int16_t item_type, int16_t item_subtype, int16_t mat
break;
case item_type::TRAPCOMP:
if (item_subtype >= 0 && item_subtype < world->raws.itemdefs.trapcomps.size())
if (size_t(item_subtype) < world->raws.itemdefs.trapcomps.size())
value = world->raws.itemdefs.trapcomps[item_subtype]->value;
else
value = 10;
@ -1241,7 +1241,7 @@ int Items::getItemBaseValue(int16_t item_type, int16_t item_subtype, int16_t mat
return 0;
case item_type::TOOL:
if (item_subtype >= 0 && item_subtype < world->raws.itemdefs.tools.size())
if (size_t(item_subtype) < world->raws.itemdefs.tools.size())
value = world->raws.itemdefs.tools[item_subtype]->value;
else
value = 10;
@ -1313,9 +1313,12 @@ int Items::getValue(df::item *item)
// Handle vermin swarms
if (item_type == item_type::VERMIN || item_type == item_type::PET)
{
int divisor = world->raws.creatures.all[mat_type]->caste[mat_subtype]->misc.petvalue_divisor;
if (divisor > 1)
value /= divisor;
int divisor = 1;
auto creature = vector_get(world->raws.creatures.all, mat_type);
if (creature && size_t(mat_subtype) < creature->caste.size())
divisor = creature->caste[mat_subtype]->misc.petvalue_divisor;
if (divisor > 1)
value /= divisor;
}
return value;
}