Update macros to support gamerules configs
This commit is contained in:
		@@ -75,20 +75,40 @@ static BaseFieldType GetBaseDataType(TypeDescription &data)
 | 
			
		||||
	return BaseFieldType::None;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define GET_TYPE_DESCRIPTION(position, data, baseType)                                     \
 | 
			
		||||
 | 
			
		||||
#define GET_TYPE_DESCRIPTION(position, data, baseType, list)  \
 | 
			
		||||
	GET_TYPE_DESCRIPTION_START(position, data, baseType)      \
 | 
			
		||||
	CHECK_##list##_OFFSET(className, memberName, data)        \
 | 
			
		||||
	CHECK_ERROR(className, memberName)                        \
 | 
			
		||||
	GET_TYPE_DESCRIPTION_END(memberName, data, baseType)
 | 
			
		||||
 | 
			
		||||
#define GET_TYPE_DESCRIPTION_START(position, data, baseType)                               \
 | 
			
		||||
	int classLength, memberLength;                                                         \
 | 
			
		||||
	const char *className  = MF_GetAmxString(amx, params[position], 0, &classLength);  \
 | 
			
		||||
	const char *className  = MF_GetAmxString(amx, params[position], 0, &classLength);      \
 | 
			
		||||
	const char *memberName = MF_GetAmxString(amx, params[position + 1], 1, &memberLength); \
 | 
			
		||||
	if (!classLength || !memberLength)                                                     \
 | 
			
		||||
	{                                                                                      \
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Either class (\"%s\") or member (\"%s\") is empty", className, memberName); \
 | 
			
		||||
		return 0;                                                                          \
 | 
			
		||||
	}                                                                                      \
 | 
			
		||||
	else if (!CommonConfig->GetOffsetByClass(className, memberName, &data))                \
 | 
			
		||||
	{                                                                                      \
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#define CHECK_ENTITY_OFFSET(className, memberName, data)                         \
 | 
			
		||||
	else if (!CommonConfig->GetOffsetByClass(className, memberName, &data))
 | 
			
		||||
 | 
			
		||||
#define CHECK_GAMERULES_OFFSET(className, memberName, data)                      \
 | 
			
		||||
	else if (!GamerulesConfig->GetOffsetByClass(className, memberName, &data))
 | 
			
		||||
 | 
			
		||||
#define CHECK_ALL_OFFSET(className, memberName, data)                            \
 | 
			
		||||
	else if (!CommonConfig->GetOffsetByClass(className, memberName, &data) &&    \
 | 
			
		||||
			 !GamerulesConfig->GetOffsetByClass(className, memberName, &data))
 | 
			
		||||
 | 
			
		||||
#define CHECK_ERROR(className, memberName)                                       \
 | 
			
		||||
	{                                                                            \
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Could not find class \"%s\" and/or member \"%s\" in gamedata", className, memberName); \
 | 
			
		||||
		return 0;                                                                          \
 | 
			
		||||
	}                                                                                      \
 | 
			
		||||
		return 0;                                                                \
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#define GET_TYPE_DESCRIPTION_END(memberName, data, baseType) \
 | 
			
		||||
	else if (data.fieldOffset < 0)                                                         \
 | 
			
		||||
	{                                                                                      \
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "Invalid offset %d retrieved from \"%s\" member", data.fieldOffset, memberName); \
 | 
			
		||||
@@ -112,6 +132,13 @@ static BaseFieldType GetBaseDataType(TypeDescription &data)
 | 
			
		||||
		return 0;                                                                          \
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#define CHECK_GAMERULES()                                                                  \
 | 
			
		||||
	if (!GameRulesAddress)                                                                 \
 | 
			
		||||
	{                                                                                      \
 | 
			
		||||
		MF_LogError(amx, AMX_ERR_NATIVE, "%s is disabled. Check your AMXX log.", __FUNCTION__);  \
 | 
			
		||||
		return 0;                                                                          \
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
cell GetData(void *pObject, TypeDescription &data, int element)
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user