111 lines
3.6 KiB
Plaintext
111 lines
3.6 KiB
Plaintext
/************************************************************************
|
|
* script name : creature_inc
|
|
* created by : eyesolated
|
|
* date : 2018/8/28
|
|
*
|
|
* description : central include file for creature related functions
|
|
*
|
|
* changes : 2018/8/28 - eyesolated - Initial creation
|
|
* 2019/3/6 - eyesolated - Changed how creature_GetOriginalName works
|
|
************************************************************************/
|
|
|
|
#include "creature_cfg"
|
|
#include "color_inc"
|
|
|
|
void creature_SetOriginalName(object oCreature, string sName);
|
|
|
|
string creature_GetOriginalName(object oCreature);
|
|
|
|
void creature_SetName(object oCreature, int nDisplay = CREATURE_NAME_DISPLAY_ORIGINAL_HEALTH);
|
|
|
|
void creature_SetOriginalName(object oCreature, string sName)
|
|
{
|
|
SetLocalString(oCreature, CREATURE_VAR_NAME_BASE, sName);
|
|
}
|
|
|
|
// Retrieves the original Name of oCreature
|
|
string creature_GetOriginalName(object oCreature)
|
|
{
|
|
// Had to change the method of retrieving a creature's original name because of custom renaming in
|
|
// the onspawn process. The desired (possibly custom) base name is stored on first call of this
|
|
// method and then retrieved subsequently.
|
|
// return GetName(oCreature, TRUE);
|
|
|
|
string sBaseName = GetLocalString(oCreature, CREATURE_VAR_NAME_BASE);
|
|
if (sBaseName == "")
|
|
{
|
|
sBaseName = GetName(oCreature);
|
|
SetLocalString(oCreature, CREATURE_VAR_NAME_BASE, sBaseName);
|
|
}
|
|
|
|
return sBaseName;
|
|
}
|
|
|
|
void creature_SetName(object oCreature, int nDisplay = CREATURE_NAME_DISPLAY_ORIGINAL_HEALTH)
|
|
{
|
|
string sName = "";
|
|
|
|
// Original Name
|
|
if ((nDisplay & CREATURE_NAME_DISPLAY_ORIGINAL) != 0)
|
|
{
|
|
sName += creature_GetOriginalName(oCreature);
|
|
}
|
|
|
|
// Health Percentage
|
|
if ((nDisplay & CREATURE_NAME_DISPLAY_HEALTH) != 0)
|
|
{
|
|
int nMaxHitPoints = GetMaxHitPoints(oCreature);
|
|
int nCurrentHitPoints = GetCurrentHitPoints(oCreature);
|
|
|
|
float fPercentage = IntToFloat(nCurrentHitPoints) / IntToFloat(nMaxHitPoints) * 100;
|
|
int nPercentage = FloatToInt(fPercentage);
|
|
if (IntToFloat(nPercentage) < fPercentage)
|
|
nPercentage++;
|
|
|
|
// If the calculated Percentage is the same as before, return
|
|
string sColor;
|
|
if (nPercentage != GetLocalInt(oCreature, CREATURE_VAR_LAST_HEALTH_PERCENTAGE_SET))
|
|
{
|
|
if (nCurrentHitPoints > 0 &&
|
|
nPercentage > 0)
|
|
{
|
|
int nGreen;
|
|
int nRed;
|
|
|
|
if (nPercentage >= 50)
|
|
{
|
|
nGreen = 7;
|
|
nRed = FloatToInt(IntToFloat(100 - nPercentage) / 7);
|
|
}
|
|
else
|
|
{
|
|
nRed = 7;
|
|
nGreen = FloatToInt(IntToFloat(nPercentage) / 7);
|
|
}
|
|
string sColor = IntToString(nRed) + IntToString(nGreen) + "0";
|
|
|
|
if (sName != "")
|
|
sName += " - ";
|
|
|
|
sColor = color_ConvertString(IntToString(nPercentage) + "%", sColor);
|
|
sName += sColor;
|
|
SetLocalInt(oCreature, CREATURE_VAR_LAST_HEALTH_PERCENTAGE_SET, nPercentage);
|
|
SetLocalString(oCreature, CREATURE_VAR_LAST_HEALTH_PERCENTAGE_TEXT, sColor);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
sColor = GetLocalString(oCreature, CREATURE_VAR_LAST_HEALTH_PERCENTAGE_TEXT);
|
|
if (sColor != "")
|
|
{
|
|
if (sName != "")
|
|
sName += " - ";
|
|
|
|
sName += sColor;
|
|
}
|
|
}
|
|
}
|
|
|
|
SetName(oCreature, sName);
|
|
}
|