Added DamageType translation to API

git-svn-id: http://mc-server.googlecode.com/svn/trunk@1639 0a769ca7-a7f5-676a-18bf-c427514a06d6
master
madmaxoft@gmail.com 2013-07-01 18:46:45 +00:00
parent 2e9cf0ae28
commit 37f6c78404
6 changed files with 244 additions and 77 deletions

View File

@ -438,7 +438,7 @@ function OnTakeDamage(Receiver, TDI)
-- Receiver is cPawn
-- TDI is TakeDamageInfo
LOG(Receiver:GetClass() .. " was dealt RawDamage " .. TDI.RawDamage .. ", FinalDamage " .. TDI.FinalDamage .. " (that is, " .. (TDI.RawDamage - TDI.FinalDamage) .. " HPs covered by armor)");
LOG(Receiver:GetClass() .. " was dealt " .. DamageTypeToString(TDI.DamageType) .. " damage: Raw " .. TDI.RawDamage .. ", Final " .. TDI.FinalDamage .. " (" .. (TDI.RawDamage - TDI.FinalDamage) .. " covered by armor)");
return false;
end

View File

@ -1,6 +1,6 @@
/*
** Lua binding: AllToLua
** Generated automatically by tolua++-1.0.92 on 07/01/13 09:49:28.
** Generated automatically by tolua++-1.0.92 on 07/01/13 20:42:05.
*/
#ifndef __cplusplus
@ -2590,6 +2590,65 @@ static int tolua_AllToLua_StringToDimension00(lua_State* tolua_S)
}
#endif //#ifndef TOLUA_DISABLE
/* function: DamageTypeToString */
#ifndef TOLUA_DISABLE_tolua_AllToLua_DamageTypeToString00
static int tolua_AllToLua_DamageTypeToString00(lua_State* tolua_S)
{
#ifndef TOLUA_RELEASE
tolua_Error tolua_err;
if (
!tolua_isnumber(tolua_S,1,0,&tolua_err) ||
!tolua_isnoobj(tolua_S,2,&tolua_err)
)
goto tolua_lerror;
else
#endif
{
eDamageType a_DamageType = ((eDamageType) (int) tolua_tonumber(tolua_S,1,0));
{
AString tolua_ret = (AString) DamageTypeToString(a_DamageType);
tolua_pushcppstring(tolua_S,(const char*)tolua_ret);
}
}
return 1;
#ifndef TOLUA_RELEASE
tolua_lerror:
tolua_error(tolua_S,"#ferror in function 'DamageTypeToString'.",&tolua_err);
return 0;
#endif
}
#endif //#ifndef TOLUA_DISABLE
/* function: StringToDamageType */
#ifndef TOLUA_DISABLE_tolua_AllToLua_StringToDamageType00
static int tolua_AllToLua_StringToDamageType00(lua_State* tolua_S)
{
#ifndef TOLUA_RELEASE
tolua_Error tolua_err;
if (
!tolua_iscppstring(tolua_S,1,0,&tolua_err) ||
!tolua_isnoobj(tolua_S,2,&tolua_err)
)
goto tolua_lerror;
else
#endif
{
const AString a_DamageString = ((const AString) tolua_tocppstring(tolua_S,1,0));
{
eDamageType tolua_ret = (eDamageType) StringToDamageType(a_DamageString);
tolua_pushnumber(tolua_S,(lua_Number)tolua_ret);
tolua_pushcppstring(tolua_S,(const char*)a_DamageString);
}
}
return 2;
#ifndef TOLUA_RELEASE
tolua_lerror:
tolua_error(tolua_S,"#ferror in function 'StringToDamageType'.",&tolua_err);
return 0;
#endif
}
#endif //#ifndef TOLUA_DISABLE
/* get function: g_BlockLightValue */
#ifndef TOLUA_DISABLE_tolua_get_AllToLua_g_BlockLightValue
static int tolua_get_AllToLua_g_BlockLightValue(lua_State* tolua_S)
@ -27784,6 +27843,37 @@ TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S)
tolua_constant(tolua_S,"dimNether",dimNether);
tolua_constant(tolua_S,"dimOverworld",dimOverworld);
tolua_constant(tolua_S,"dimEnd",dimEnd);
tolua_constant(tolua_S,"dtAttack",dtAttack);
tolua_constant(tolua_S,"dtLightning",dtLightning);
tolua_constant(tolua_S,"dtFalling",dtFalling);
tolua_constant(tolua_S,"dtDrowning",dtDrowning);
tolua_constant(tolua_S,"dtSuffocating",dtSuffocating);
tolua_constant(tolua_S,"dtStarving",dtStarving);
tolua_constant(tolua_S,"dtCactusContact",dtCactusContact);
tolua_constant(tolua_S,"dtLavaContact",dtLavaContact);
tolua_constant(tolua_S,"dtPoisoning",dtPoisoning);
tolua_constant(tolua_S,"dtOnFire",dtOnFire);
tolua_constant(tolua_S,"dtFireContact",dtFireContact);
tolua_constant(tolua_S,"dtInVoid",dtInVoid);
tolua_constant(tolua_S,"dtPotionOfHarming",dtPotionOfHarming);
tolua_constant(tolua_S,"dtAdmin",dtAdmin);
tolua_constant(tolua_S,"dtPawnAttack",dtPawnAttack);
tolua_constant(tolua_S,"dtEntityAttack",dtEntityAttack);
tolua_constant(tolua_S,"dtMob",dtMob);
tolua_constant(tolua_S,"dtMobAttack",dtMobAttack);
tolua_constant(tolua_S,"dtFall",dtFall);
tolua_constant(tolua_S,"dtDrown",dtDrown);
tolua_constant(tolua_S,"dtSuffocation",dtSuffocation);
tolua_constant(tolua_S,"dtStarvation",dtStarvation);
tolua_constant(tolua_S,"dtHunger",dtHunger);
tolua_constant(tolua_S,"dtCactus",dtCactus);
tolua_constant(tolua_S,"dtCactuses",dtCactuses);
tolua_constant(tolua_S,"dtCacti",dtCacti);
tolua_constant(tolua_S,"dtLava",dtLava);
tolua_constant(tolua_S,"dtPoison",dtPoison);
tolua_constant(tolua_S,"dtBurning",dtBurning);
tolua_constant(tolua_S,"dtInFire",dtInFire);
tolua_constant(tolua_S,"dtPlugin",dtPlugin);
tolua_function(tolua_S,"BlockStringToType",tolua_AllToLua_BlockStringToType00);
tolua_function(tolua_S,"StringToItem",tolua_AllToLua_StringToItem00);
tolua_function(tolua_S,"ItemToString",tolua_AllToLua_ItemToString00);
@ -27791,6 +27881,8 @@ TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S)
tolua_function(tolua_S,"ItemToFullString",tolua_AllToLua_ItemToFullString00);
tolua_function(tolua_S,"StringToBiome",tolua_AllToLua_StringToBiome00);
tolua_function(tolua_S,"StringToDimension",tolua_AllToLua_StringToDimension00);
tolua_function(tolua_S,"DamageTypeToString",tolua_AllToLua_DamageTypeToString00);
tolua_function(tolua_S,"StringToDamageType",tolua_AllToLua_StringToDamageType00);
tolua_array(tolua_S,"g_BlockLightValue",tolua_get_AllToLua_g_BlockLightValue,tolua_set_AllToLua_g_BlockLightValue);
tolua_array(tolua_S,"g_BlockSpreadLightFalloff",tolua_get_AllToLua_g_BlockSpreadLightFalloff,tolua_set_AllToLua_g_BlockSpreadLightFalloff);
tolua_array(tolua_S,"g_BlockTransparent",tolua_get_AllToLua_g_BlockTransparent,tolua_set_AllToLua_g_BlockTransparent);
@ -27916,37 +28008,6 @@ TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S)
tolua_function(tolua_S,"GetViewDistance",tolua_AllToLua_cClientHandle_GetViewDistance00);
tolua_function(tolua_S,"GetUniqueID",tolua_AllToLua_cClientHandle_GetUniqueID00);
tolua_endmodule(tolua_S);
tolua_constant(tolua_S,"dtAttack",dtAttack);
tolua_constant(tolua_S,"dtLightning",dtLightning);
tolua_constant(tolua_S,"dtFalling",dtFalling);
tolua_constant(tolua_S,"dtDrowning",dtDrowning);
tolua_constant(tolua_S,"dtSuffocating",dtSuffocating);
tolua_constant(tolua_S,"dtStarving",dtStarving);
tolua_constant(tolua_S,"dtCactusContact",dtCactusContact);
tolua_constant(tolua_S,"dtLavaContact",dtLavaContact);
tolua_constant(tolua_S,"dtPoisoning",dtPoisoning);
tolua_constant(tolua_S,"dtOnFire",dtOnFire);
tolua_constant(tolua_S,"dtFireContact",dtFireContact);
tolua_constant(tolua_S,"dtInVoid",dtInVoid);
tolua_constant(tolua_S,"dtPotionOfHarming",dtPotionOfHarming);
tolua_constant(tolua_S,"dtAdmin",dtAdmin);
tolua_constant(tolua_S,"dtPawnAttack",dtPawnAttack);
tolua_constant(tolua_S,"dtEntityAttack",dtEntityAttack);
tolua_constant(tolua_S,"dtMob",dtMob);
tolua_constant(tolua_S,"dtMobAttack",dtMobAttack);
tolua_constant(tolua_S,"dtFall",dtFall);
tolua_constant(tolua_S,"dtDrown",dtDrown);
tolua_constant(tolua_S,"dtSuffocation",dtSuffocation);
tolua_constant(tolua_S,"dtStarvation",dtStarvation);
tolua_constant(tolua_S,"dtHunger",dtHunger);
tolua_constant(tolua_S,"dtCactus",dtCactus);
tolua_constant(tolua_S,"dtCactuses",dtCactuses);
tolua_constant(tolua_S,"dtCacti",dtCacti);
tolua_constant(tolua_S,"dtLava",dtLava);
tolua_constant(tolua_S,"dtPoison",dtPoison);
tolua_constant(tolua_S,"dtBurning",dtBurning);
tolua_constant(tolua_S,"dtInFire",dtInFire);
tolua_constant(tolua_S,"dtPlugin",dtPlugin);
tolua_cclass(tolua_S,"TakeDamageInfo","TakeDamageInfo","",NULL);
tolua_beginmodule(tolua_S,"TakeDamageInfo");
tolua_variable(tolua_S,"DamageType",tolua_get_TakeDamageInfo_DamageType,tolua_set_TakeDamageInfo_DamageType);

View File

@ -1,6 +1,6 @@
/*
** Lua binding: AllToLua
** Generated automatically by tolua++-1.0.92 on 07/01/13 09:49:29.
** Generated automatically by tolua++-1.0.92 on 07/01/13 20:42:05.
*/
/* Exported function */

View File

@ -323,6 +323,7 @@ EMCSBiome StringToBiome(const AString & a_BiomeString)
eDimension StringToDimension(const AString & a_DimensionString)
{
// First try decoding as a number
int res = atoi(a_DimensionString.c_str());
if ((res != 0) || (a_DimensionString == "0"))
{
@ -330,7 +331,7 @@ eDimension StringToDimension(const AString & a_DimensionString)
return (eDimension)res;
}
// Convert using a built-in map:
// Decode using a built-in map:
static struct
{
eDimension m_Dimension;
@ -361,6 +362,105 @@ eDimension StringToDimension(const AString & a_DimensionString)
/// Translates damage type constant to a string representation (built-in).
AString DamageTypeToString(eDamageType a_DamageType)
{
switch (a_DamageType)
{
case dtAttack: return "dtAttack";
case dtLightning: return "dtLightning";
case dtFalling: return "dtFalling";
case dtDrowning: return "dtDrowning";
case dtSuffocating: return "dtSuffocation";
case dtStarving: return "dtStarving";
case dtCactusContact: return "dtCactusContact";
case dtLavaContact: return "dtLavaContact";
case dtPoisoning: return "dtPoisoning";
case dtOnFire: return "dtOnFire";
case dtFireContact: return "dtFireContact";
case dtInVoid: return "dtInVoid";
case dtPotionOfHarming: return "dtPotionOfHarming";
case dtAdmin: return "dtAdmin";
}
// Unknown damage type:
ASSERT(!"Unknown DamageType");
return Printf("dtUnknown_%d", (int)a_DamageType);
}
/// Translates a damage type string to damage type. Takes either a number or a damage type alias (built-in). Returns -1 on failure
eDamageType StringToDamageType(const AString & a_DamageTypeString)
{
// First try decoding as a number:
int res = atoi(a_DamageTypeString.c_str());
if ((res != 0) || (a_DamageTypeString == "0"))
{
// It was a valid number
return (eDamageType)res;
}
// Decode using a built-in map:
static struct
{
eDamageType m_DamageType;
const char * m_String;
} DamageTypeMap [] =
{
// Cannonical names:
{ dtAttack, "dtAttack"},
{ dtLightning, "dtLightning"},
{ dtFalling, "dtFalling"},
{ dtDrowning, "dtDrowning"},
{ dtSuffocating, "dtSuffocation"},
{ dtStarving, "dtStarving"},
{ dtCactusContact, "dtCactusContact"},
{ dtLavaContact, "dtLavaContact"},
{ dtPoisoning, "dtPoisoning"},
{ dtOnFire, "dtOnFire"},
{ dtFireContact, "dtFireContact"},
{ dtInVoid, "dtInVoid"},
{ dtPotionOfHarming, "dtPotionOfHarming"},
{ dtAdmin, "dtAdmin"},
// Common synonyms:
{ dtPawnAttack, "dtAttack"},
{ dtEntityAttack, "dtAttack"},
{ dtMob, "dtAttack"},
{ dtMobAttack, "dtAttack"},
{ dtFall, "dtFalling"},
{ dtDrown, "dtDrowning"},
{ dtSuffocation, "dtSuffocating"},
{ dtStarvation, "dtStarving"},
{ dtHunger, "dtStarving"},
{ dtCactus, "dtCactusContact"},
{ dtCactuses, "dtCactusContact"},
{ dtCacti, "dtCactusContact"},
{ dtLava, "dtLavaContact"},
{ dtPoison, "dtPoisoning"},
{ dtBurning, "dtOnFire"},
{ dtInFire, "dtFireContact"},
{ dtPlugin, "dtAdmin"},
} ;
for (int i = 0; i < ARRAYCOUNT(DamageTypeMap); i++)
{
if (NoCaseCompare(DamageTypeMap[i].m_String, a_DamageTypeString) == 0)
{
return DamageTypeMap[i].m_DamageType;
}
} // for i - DamageTypeMap[]
// Not found:
return (eDamageType)-1;
}
// This is actually just some code that needs to run at program startup, so it is wrapped into a global var's constructor:
class cBlockPropertiesInitializer
{

View File

@ -614,6 +614,48 @@ enum eDimension
} ;
/// Damage type, used in the TakeDamageInfo structure and related functions
enum eDamageType
{
// Canonical names for the types (as documented in the plugin wiki):
dtAttack, // Being attacked by a mob
dtLightning, // Hit by a lightning strike
dtFalling, // Falling down; dealt when hitting the ground
dtDrowning, // Drowning in water / lava
dtSuffocating, // Suffocating inside a block
dtStarving, // Hunger
dtCactusContact, // Contact with a cactus block
dtLavaContact, // Contact with a lava block
dtPoisoning, // Having the poison effect
dtOnFire, // Being on fire
dtFireContact, // Standing inside a fire block
dtInVoid, // Falling into the Void (Y < 0)
dtPotionOfHarming,
dtAdmin, // Damage applied by an admin command
// Some common synonyms:
dtPawnAttack = dtAttack,
dtEntityAttack = dtAttack,
dtMob = dtAttack,
dtMobAttack = dtAttack,
dtFall = dtFalling,
dtDrown = dtDrowning,
dtSuffocation = dtSuffocating,
dtStarvation = dtStarving,
dtHunger = dtStarving,
dtCactus = dtCactusContact,
dtCactuses = dtCactusContact,
dtCacti = dtCactusContact,
dtLava = dtLavaContact,
dtPoison = dtPoisoning,
dtBurning = dtOnFire,
dtInFire = dtFireContact,
dtPlugin = dtAdmin,
} ;
// tolua_end
@ -649,6 +691,12 @@ extern EMCSBiome StringToBiome(const AString & a_BiomeString);
/// Translates a dimension string to dimension enum. Takes either a number or a dimension alias (built-in). Returns -1000 on failure
extern eDimension StringToDimension(const AString & a_DimensionString);
/// Translates damage type constant to a string representation (built-in).
extern AString DamageTypeToString(eDamageType a_DamageType);
/// Translates a damage type string to damage type. Takes either a number or a damage type alias (built-in). Returns -1 on failure
extern eDamageType StringToDamageType(const AString & a_DamageString);
// tolua_end

View File

@ -43,48 +43,6 @@ class cChunk;
// tolua_begin
enum eDamageType
{
// Canonical names for the types (as documented in the plugin wiki):
dtAttack, // Being attacked by a mob
dtLightning, // Hit by a lightning strike
dtFalling, // Falling down; dealt when hitting the ground
dtDrowning, // Drowning in water / lava
dtSuffocating, // Suffocating inside a block
dtStarving, // Hunger
dtCactusContact, // Contact with a cactus block
dtLavaContact, // Contact with a lava block
dtPoisoning, // Having the poison effect
dtOnFire, // Being on fire
dtFireContact, // Standing inside a fire block
dtInVoid, // Falling into the Void (Y < 0)
dtPotionOfHarming,
dtAdmin, // Damage applied by an admin command
// Some common synonyms:
dtPawnAttack = dtAttack,
dtEntityAttack = dtAttack,
dtMob = dtAttack,
dtMobAttack = dtAttack,
dtFall = dtFalling,
dtDrown = dtDrowning,
dtSuffocation = dtSuffocating,
dtStarvation = dtStarving,
dtHunger = dtStarving,
dtCactus = dtCactusContact,
dtCactuses = dtCactusContact,
dtCacti = dtCactusContact,
dtLava = dtLavaContact,
dtPoison = dtPoisoning,
dtBurning = dtOnFire,
dtInFire = dtFireContact,
dtPlugin = dtAdmin,
} ;
struct TakeDamageInfo
{
eDamageType DamageType; // Where does the damage come from? Being hit / on fire / contact with cactus / ...