// Ryzom - MMORPG Framework
// 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 .
#ifndef CL_CHARACTER_SHEET_H
#define CL_CHARACTER_SHEET_H
/////////////
// INCLUDE //
/////////////
#include "client_sheets.h"
#include "nel/misc/types_nl.h"
#include "nel/misc/rgba.h"
//
#include "entity_sheet.h"
#include "ground_fx_sheet.h"
#include "body_to_bone_sheet.h"
// Game Share
#include "game_share/loot_harvest_state.h"
#include "game_share/people.h"
#include
#include
///////////
// USING //
///////////
///////////
// CLASS //
///////////
namespace NLGEORGES
{
class UFormElm;
class UFormLoader;
}
/**
* Class to manage the character sheet.
* \author Guillaume PUZIN
* \author Nevrax France
* \date 2001
*/
class CCharacterSheet : public CEntitySheet
{
public:
enum { NumAttackLists = 8 };
public:
class CEquipment
{
public:
NLMISC::TSStringId IdItem;
NLMISC::TSStringId IdBindPoint;
sint8 Texture;
sint8 Color;
CEquipment()
{
IdItem= NLMISC::CStaticStringMapper::emptyId();
IdBindPoint= NLMISC::CStaticStringMapper::emptyId();
Texture= 0;
Color= 0;
}
std::string getItem() const { return ClientSheetsStrings.get(IdItem); }
std::string getBindPoint() const { return ClientSheetsStrings.get(IdBindPoint); }
/// Serialize character sheet into binary data file.
virtual void serial(class NLMISC::IStream &f) throw(NLMISC::EStream)
{
ClientSheetsStrings.serial(f, IdItem);
f.serial(Texture);
f.serial(Color);
ClientSheetsStrings.serial(f, IdBindPoint);
}
};
// Character Gender.
uint8 Gender;
// Character Race
EGSPD::CPeople::TPeople Race;
// Character's skeleton.
NLMISC::TSStringId IdSkelFilename;
// Base Name of the animation set.
NLMISC::TSStringId IdAnimSetBaseName;
// Automaton Type
NLMISC::TSStringId IdAutomaton;
float Scale;
// The sound familly (used for sound context var 2)
uint32 SoundFamily;
// The sound variation (used for sound context var 3)
uint32 SoundVariation;
// Lod Character.
NLMISC::TSStringId IdLodCharacterName;
float LodCharacterDistance;
// value to scale the "pos" channel of the animation of the creature.
float CharacterScalePos;
// The name of the faction the creature belongs to
NLMISC::TSStringId IdFame;
// Possible(impossible) Actions.
bool Selectable;
bool Talkable;
bool Attackable;
bool Givable;
bool Mountable;
bool Turn;
bool SelectableBySpace;
//character harvest/loot state
LHSTATE::TLHState HLState;
// Equipment worm or creature body.
CEquipment Body;
CEquipment Legs;
CEquipment Arms;
CEquipment Hands;
CEquipment Feet;
CEquipment Head;
CEquipment Face;
CEquipment ObjectInRightHand;
CEquipment ObjectInLeftHand;
// Yoyo: if you add some, modify getWholeEquipmentList()
sint8 HairColor;
sint8 Skin;
sint8 EyesColor;
// NLMISC::TSStringId IdFirstName;
// NLMISC::TSStringId IdLastName;
float DistToFront;
float DistToBack;
float DistToSide;
float ColRadius;
float ColHeight;
float ColLength;
float ColWidth;
float ClipRadius;
float ClipHeight;
float MaxSpeed;
bool DisplayOSD;
// New flags created for bot objects
bool DisplayInRadar; // display the entity in the radar
bool DisplayOSDName; // name is displayed if (DisplayOSD && DisplayName)
bool DisplayOSDBars; // bars are displayed if (DisplayOSD && DisplayBars)
bool DisplayOSDForceOver; // even if ClientCfg.ShowNameUnderCursor==false, force OSD to display when under cursor (DisplayOSD must be true)
bool Traversable; // the client can traverse this entity after some force time
// Name positions on Z axis
float NamePosZLow;
float NamePosZNormal;
float NamePosZHigh;
// Alternative Look
std::vector IdAlternativeClothes;
// Hair Item List
std::vector HairItemList;
// list of fx for some ground type (step fxs)
std::vector GroundFX;
// name of static FX played on entity (empty if none)
NLMISC::TSStringId IdStaticFX;
// body to bone
CBodyToBoneSheet BodyToBone;
// spell casting prefix. This prefix is used to see which sheet contains datas about spell casting
NLMISC::TSStringId SpellCastingPrefix;
// attack lists filenames
std::vector AttackLists;
// consider
sint8 RegionForce; // Force depending on the region the creature belongs
sint8 ForceLevel; // Level of creature inside the same region
uint16 Level; // Precise level of the creature
bool R2Npc;
class CCastRay
{
public:
NLMISC::CVector Origin;
NLMISC::CVector Pos;
void serial(class NLMISC::IStream &f) throw(NLMISC::EStream)
{
f.serial(Origin);
f.serial(Pos);
}
};
// offset for projectile casting (useful for watchtowers as they got no bones)
std::vector ProjectileCastRay;
/// Constructor
CCharacterSheet();
std::string getSkelFilename() const { return ClientSheetsStrings.get(IdSkelFilename); }
std::string getAnimSetBaseName() const { return ClientSheetsStrings.get(IdAnimSetBaseName); }
std::string getAutomaton() const { return ClientSheetsStrings.get(IdAutomaton); }
std::string getLodCharacterName() const { return ClientSheetsStrings.get(IdLodCharacterName); }
std::string getFame() const { return ClientSheetsStrings.get(IdFame); }
// std::string getFirstName() const { return ClientSheetsStrings.get(IdFirstName); }
// std::string getLastName() const { return ClientSheetsStrings.get(IdLastName); }
std::string getAlternativeClothes(uint i) const { return ClientSheetsStrings.get(IdAlternativeClothes[i]); }
std::string getStaticFX() const { return ClientSheetsStrings.get(IdStaticFX); }
/// Build the sheet from an external script.
virtual void build(const NLGEORGES::UFormElm &item);
/// Serialize character sheet into binary data file.
virtual void serial(class NLMISC::IStream &f) throw(NLMISC::EStream);
/// Return the list of all equipement possibles (body... + HairList). Pointers should be used localy
void getWholeEquipmentList(std::vector &equipList) const;
private:
/// Read an equipment slot.
void readEquipment(const NLGEORGES::UFormElm &form, const std::string &key, CEquipment &slot);
};
#endif // CL_CHARACTER_SHEET_H
/* End of character_sheet.h */