Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "Header.h"
- #include "amxxmodule.h"
- static std::vector <Json::Reader *> g_readerHandlePtr;
- static std::vector <Json::Value *> g_rootHandlePtr;
- static int g_forwardIndex;
- CCStrPtr readFile(CCStrPtr fileNamePtr)
- {
- static FILE * fileHandlePtr;
- static std::string fileContent;
- static int fileCharacter;
- fileHandlePtr = fopen(fileNamePtr, "rb");
- fileContent.assign("");
- if (fileHandlePtr)
- {
- do
- {
- fileContent += (fileCharacter = fgetc(fileHandlePtr));
- }
- while (fileCharacter != EOF);
- fclose(fileHandlePtr);
- }
- return fileContent.c_str();
- }
- static cell AMX_NATIVE_CALL parserLoadFile(AMX * amxHandlePtr, cell * parameterHandlePtr)
- {
- static CCStrPtr fileNamePtr, fileContentPtr;
- static Json::Reader * readerHandlePtr;
- static Json::Value * rootHandlePtr;
- fileNamePtr = MF_GetAmxString(amxHandlePtr, parameterHandlePtr[1u], 0u, NULL);
- fileContentPtr = readFile(fileNamePtr);
- if (!fileContentPtr[0u])
- {
- MF_LogError(amxHandlePtr, AMX_ERR_NATIVE, "Can't get data from %s file!", fileNamePtr);
- return 0u;
- }
- readerHandlePtr = new Json::Reader;
- rootHandlePtr = new Json::Value;
- readerHandlePtr->parse(fileContentPtr, *rootHandlePtr);
- g_readerHandlePtr.push_back(readerHandlePtr);
- g_rootHandlePtr.push_back(rootHandlePtr);
- return g_readerHandlePtr.size();
- }
- static cell AMX_NATIVE_CALL parserGetString(AMX * amxHandlePtr, cell * parameterHandlePtr)
- {
- static int fileIndex, bufferSize;
- static CCStrPtr keyNamePtr;
- static Json::Value * rootHandlePtr;
- bufferSize = parameterHandlePtr[4u];
- fileIndex = parameterHandlePtr[1u];
- keyNamePtr = MF_GetAmxString(amxHandlePtr, parameterHandlePtr[2u], 0u, NULL);
- rootHandlePtr = g_rootHandlePtr.at(fileIndex - 1u);
- MF_SetAmxString(amxHandlePtr, parameterHandlePtr[3u], rootHandlePtr->get(keyNamePtr, "").asString().c_str(), bufferSize);
- return 1u;
- }
- static cell AMX_NATIVE_CALL parserGetFloat(AMX * amxHandlePtr, cell * parameterHandlePtr)
- {
- static int fileIndex;
- static CCStrPtr keyNamePtr;
- static Json::Value * rootHandlePtr;
- fileIndex = parameterHandlePtr[1u];
- keyNamePtr = MF_GetAmxString(amxHandlePtr, parameterHandlePtr[2u], 0u, NULL);
- rootHandlePtr = g_rootHandlePtr.at(fileIndex - 1u);
- return amx_ftoc(rootHandlePtr->get(keyNamePtr, 0.0f).asFloat());
- }
- static cell AMX_NATIVE_CALL parserGetInt(AMX * amxHandlePtr, cell * parameterHandlePtr)
- {
- static int fileIndex;
- static CCStrPtr keyNamePtr;
- static Json::Value * rootHandlePtr;
- fileIndex = parameterHandlePtr[1u];
- keyNamePtr = MF_GetAmxString(amxHandlePtr, parameterHandlePtr[2u], 0u, NULL);
- rootHandlePtr = g_rootHandlePtr.at(fileIndex - 1u);
- return rootHandlePtr->get(keyNamePtr, 0u).asInt();
- }
- static cell AMX_NATIVE_CALL parserEnumData(AMX * amxHandlePtr, cell * parameterHandlePtr)
- {
- static int fileIndex, iteratorVar;
- static CCStrPtr keyNamePtr;
- static Json::Value * rootHandlePtr;
- fileIndex = parameterHandlePtr[1u];
- keyNamePtr = MF_GetAmxString(amxHandlePtr, parameterHandlePtr[2u], 0u, NULL);
- rootHandlePtr = g_rootHandlePtr.at(fileIndex - 1u);
- for (iteratorVar = 0u; iteratorVar < (*rootHandlePtr)[keyNamePtr].size(); iteratorVar++)
- {
- MF_ExecuteForward(g_forwardIndex, static_cast <cell> (fileIndex), static_cast <CCStrPtr> (keyNamePtr), \
- static_cast <CCStrPtr> ((*rootHandlePtr)[keyNamePtr][iteratorVar].asCString()));
- }
- return 1u;
- }
- static const AMX_NATIVE_INFO g_parserFunctions[] =
- {
- { "parserLoadFile", parserLoadFile },
- { "parserGetString", parserGetString },
- { "parserGetFloat", parserGetFloat },
- { "parserGetInt", parserGetInt },
- { "parserEnumData", parserEnumData },
- { NULL, NULL }
- };
- void OnAmxxAttach(void)
- {
- MF_AddNatives(g_parserFunctions);
- }
- void OnAmxxDetach(void)
- {
- static int iteratorVar;
- for (iteratorVar = 0u; iteratorVar < g_readerHandlePtr.size(); iteratorVar++)
- {
- delete g_readerHandlePtr.at(iteratorVar);
- delete g_rootHandlePtr.at(iteratorVar);
- }
- }
- void OnPluginsLoaded(void)
- {
- g_forwardIndex = MF_RegisterForward("parserEnumForward", ET_IGNORE, FP_CELL, FP_STRING, FP_STRING, FP_DONE);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement