1
0
Fork 0

Added CustomName to cMonster.

This commit is contained in:
Howaner 2014-09-01 20:12:56 +02:00
parent 022f5f141d
commit 7c4cb9a385
4 changed files with 64 additions and 4 deletions

View File

@ -9,9 +9,9 @@
cPawn::cPawn(eEntityType a_EntityType, double a_Width, double a_Height):
super(a_EntityType, 0, 0, 0, a_Width, a_Height),
m_EntityEffects(tEffectMap())
cPawn::cPawn(eEntityType a_EntityType, double a_Width, double a_Height) :
super(a_EntityType, 0, 0, 0, a_Width, a_Height)
, m_EntityEffects(tEffectMap())
{
}
@ -111,3 +111,6 @@ void cPawn::ClearEntityEffects()
RemoveEntityEffect(EffectType);
}
}

View File

@ -75,6 +75,8 @@ cMonster::cMonster(const AString & a_ConfigName, eType a_MobType, const AString
, m_IdleInterval(0)
, m_DestroyTimer(0)
, m_MobType(a_MobType)
, m_CustomName("")
, m_CustomNameAlwaysVisible(false)
, m_SoundHurt(a_SoundHurt)
, m_SoundDeath(a_SoundDeath)
, m_AttackRate(3)
@ -679,6 +681,33 @@ void cMonster::InStateEscaping(float a_Dt)
void cMonster::SetCustomName(const AString & a_CustomName)
{
m_CustomName = a_CustomName;
// The maximal length is 64
if (a_CustomName.length() > 64)
{
m_CustomName = a_CustomName.substr(0, 64);
}
m_World->BroadcastEntityMetadata(*this);
}
void cMonster::SetCustomNameAlwaysVisible(bool a_CustomNameAlwaysVisible)
{
m_CustomNameAlwaysVisible = a_CustomNameAlwaysVisible;
m_World->BroadcastEntityMetadata(*this);
}
void cMonster::GetMonsterConfig(const AString & a_Name)
{
cRoot::Get()->GetMonsterConfig()->AssignAttributes(this, a_Name);

View File

@ -144,7 +144,23 @@ public:
virtual bool IsSitting (void) const { return false; }
// tolua_begin
/** Returns true if the monster has a custom name. */
bool HasCustomName(void) const { return !m_CustomName.empty(); }
/** Gets the custom name of the monster. If no custom name is set, the function returns a empty string. */
const AString & GetCustomName(void) const { return m_CustomName; }
/** Sets the custom name of the monster. You see the name over the monster. */
void SetCustomName(const AString & a_CustomName);
/** Is the custom name of this monster always visible? If not, you only see the name when you sight the mob. */
bool IsCustomNameAlwaysVisible(void) const { return m_CustomNameAlwaysVisible; }
/** Sets the custom name visiblity of this monster.
If false, you only see the name when you sight the mob. If true, you always see the custom name. */
void SetCustomNameAlwaysVisible(bool a_CustomNameAlwaysVisible);
/// Translates MobType enum to a string, empty string if unknown
static AString MobTypeToString(eType a_MobType);
@ -228,6 +244,8 @@ protected:
float m_DestroyTimer;
eType m_MobType;
AString m_CustomName;
bool m_CustomNameAlwaysVisible;
AString m_SoundHurt;
AString m_SoundDeath;

View File

@ -1,3 +1,4 @@
// Protocol17x.cpp
/*
@ -3021,6 +3022,15 @@ void cProtocol172::cPacketizer::WriteMobMetadata(const cMonster & a_Mob)
break;
}
} // switch (a_Mob.GetType())
// Custom name:
if (a_Mob.HasCustomName())
{
WriteByte(0x8a);
WriteString(a_Mob.GetCustomName());
WriteByte(0x0b);
WriteByte(a_Mob.IsCustomNameAlwaysVisible() ? 1 : 0);
}
}