From 98325757e2511dc3dfbb48aeb6ca61f63857cddb Mon Sep 17 00:00:00 2001 From: Alexander Gavrilov Date: Wed, 30 Apr 2014 20:44:22 +0400 Subject: [PATCH] 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. --- library/modules/Items.cpp | 41 +++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/library/modules/Items.cpp b/library/modules/Items.cpp index d766b4166..8a3d0e128 100644 --- a/library/modules/Items.cpp +++ b/library/modules/Items.cpp @@ -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; } \ No newline at end of file