khanat-opennel-code/code/ryzom/common/src/game_share/item_family.cpp

146 lines
3.8 KiB
C++

// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010 Winch Gate Property Limited
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "stdpch.h"
// nel
#include "nel/misc/i18n.h"
#include "nel/misc/string_conversion.h"
#include "item_family.h"
using namespace std;
using namespace NLMISC;
namespace ITEMFAMILY
{
// The conversion table
const CStringConversion<EItemFamily>::CPair stringTable [] =
{
{ "UNDEFINED", UNDEFINED },
{ "SERVICE", SERVICE },
{ "ARMOR", ARMOR },
{ "MELEE_WEAPON", MELEE_WEAPON },
{ "RANGE_WEAPON", RANGE_WEAPON },
{ "AMMO", AMMO },
{ "RAW_MATERIAL", RAW_MATERIAL },
{ "SHIELD", SHIELD },
{ "CRAFTING_TOOL", CRAFTING_TOOL },
{ "HARVEST_TOOL", HARVEST_TOOL },
{ "TAMING_TOOL", TAMING_TOOL },
{ "TRAINING_TOOL", TRAINING_TOOL },
{ "AI", AI },
{ "BRICK", BRICK },
{ "FOOD", FOOD },
{ "JEWELRY", JEWELRY },
{ "CORPSE", CORPSE },
{ "CARRION", CARRION },
{ "BAG", BAG },
{ "STACK", STACK },
{ "DEAD_SEED", DEAD_SEED },
{ "TELEPORT", TELEPORT },
{ "GUILD_FLAG", GUILD_FLAG },
{ "LIVING_SEED", LIVING_SEED },
{ "LITTLE_SEED", LITTLE_SEED },
{ "MEDIUM_SEED", MEDIUM_SEED },
{ "BIG_SEED", BIG_SEED },
{ "VERY_BIG_SEED", VERY_BIG_SEED },
{ "MISSION_ITEM", MISSION_ITEM },
{ "CRYSTALLIZED_SPELL", CRYSTALLIZED_SPELL },
{ "ITEM_SAP_RECHARGE", ITEM_SAP_RECHARGE },
{ "PET_ANIMAL_TICKET", PET_ANIMAL_TICKET },
{ "GUILD_OPTION", GUILD_OPTION },
{ "COSMETIC", COSMETIC },
{ "HANDLED_ITEM", HANDLED_ITEM },
{ "CONSUMABLE", CONSUMABLE },
{ "XP_CATALYSER", XP_CATALYSER },
{ "SCROLL", SCROLL },
{ "SCROLL_R2", SCROLL_R2 },
{ "COMMAND_TICKET", COMMAND_TICKET },
{ "GENERIC_ITEM", GENERIC_ITEM },
};
CStringConversion<EItemFamily> conversion(stringTable, sizeof(stringTable) / sizeof(stringTable[0]), UNDEFINED);
// convert item family id to item family name string
const std::string& toString( EItemFamily itemFamily )
{
return conversion.toString(itemFamily);
}
// convert item family name to item family enum value
EItemFamily stringToItemFamily( const std::string& str )
{
return conversion.fromString(str);
}
bool isSellableByPlayer( EItemFamily fam )
{
return fam!=FOOD;
}
bool isResellable( EItemFamily fam )
{
return
fam == ARMOR ||
fam == MELEE_WEAPON ||
fam == RANGE_WEAPON ||
fam == AMMO ||
fam == RAW_MATERIAL ||
fam == SHIELD ||
fam == JEWELRY ||
fam == CRYSTALLIZED_SPELL ||
fam == CONSUMABLE ||
fam == ITEM_SAP_RECHARGE;
}
bool isTextCustomizable( EItemFamily fam )
{
return
fam == ARMOR ||
fam == MELEE_WEAPON ||
fam == RANGE_WEAPON ||
fam == SHIELD ||
fam == JEWELRY ||
fam == SCROLL;
}
/**
* returns true if items of this family are destroyed when they are completely worned out
*/
bool destroyedWhenWorned(EItemFamily family)
{
switch(family)
{
case ITEMFAMILY::MELEE_WEAPON:
case ITEMFAMILY::RANGE_WEAPON:
case ITEMFAMILY::ARMOR:
case ITEMFAMILY::SHIELD:
return true;
default:
return false;
}
}
}; // ITEMFAMILY