struct ScriptInfo
{
AMX amx;
std::string Identifier;
bool Initialized;
ScriptInfo(std::string FileToLoad)
{
this->Initialized = false;
char string[MAX_PATH];
GetCurrentDirectory(MAX_PATH,string);
lstrcat(string,"\\libraries\\pluginsa\\scripts\\");
std::stringstream stream;
stream << string;
stream << FileToLoad;
Identifier = FileToLoad;
FILE* f = fopen(stream.str().c_str(), "rb");
if (!f)
{
for(std::vector<ScriptInfo>::iterator it = scripts.begin(); it != scripts.end(); ++it)
{
if(lstrcmp(it->Identifier.c_str(),this->Identifier.c_str()) == 0)
{
scripts.erase(it);
break;
}
}
}
else
{
fclose(f);
for(std::vector<ScriptInfo>::iterator it = scripts.begin(); it != scripts.end(); ++it)
{
if(lstrcmp(it->Identifier.c_str(),this->Identifier.c_str()) == 0)
{
scripts.erase(it);
break;
}
}
memset((void*)&this->amx, 0, sizeof(AMX));
int err = aux_LoadProgram(&amx,this->Identifier.c_str());
if (err != AMX_ERR_NONE)
{
logprintf("Script[%s]: Run time error %d: \"%s\"",// on line %ld\n",
this->Identifier, err, aux_StrError(err));//, (long)amx->curline);
for(std::vector<ScriptInfo>::iterator it = scripts.begin(); it != scripts.end(); ++it)
{
if(lstrcmp(it->Identifier.c_str(),this->Identifier.c_str()) == 0)
{
scripts.erase(it);
break;
}
}
}
else
{
amx_CoreInit(&amx);
amx_FloatInit(&amx);
amx_StringInit(&amx);
amx_FileInit(&amx);
amx_TimeInit(&amx);
amx_CustomInit(&amx);
DoAmxLoad(&amx);
cell ret = 0;
err = amx_Exec(&amx, &ret, AMX_EXEC_MAIN);
if (err != AMX_ERR_NONE)
{
logprintf("Script[%s]: Run time error %d: \"%s\"",// on line %ld\n",
this->Identifier, err, aux_StrError(err));//, (long)amx->curline);
for(std::vector<ScriptInfo>::iterator it = scripts.begin(); it != scripts.end(); ++it)
{
if(lstrcmp(it->Identifier.c_str(),this->Identifier.c_str()) == 0)
{
scripts.erase(it);
break;
}
}
}
else
{
this->Initialized = true;
}
}
}
}
~ScriptInfo()
{
if(this->Initialized)
{
int tmp;
if (!amx_FindPublic(&this->amx, "OnScriptExit", &tmp))
amx_Exec(&this->amx, (cell*)&tmp, tmp);
}
}
};
c3RydWN0IFNjcmlwdEluZm8KewogICAgQU1YIGFteDsKCXN0ZDo6c3RyaW5nIElkZW50aWZpZXI7Cglib29sIEluaXRpYWxpemVkOwoJU2NyaXB0SW5mbyhzdGQ6OnN0cmluZyBGaWxlVG9Mb2FkKQoJewoJCXRoaXMtPkluaXRpYWxpemVkID0gZmFsc2U7CgkJY2hhciBzdHJpbmdbTUFYX1BBVEhdOwoJCUdldEN1cnJlbnREaXJlY3RvcnkoTUFYX1BBVEgsc3RyaW5nKTsKCQlsc3RyY2F0KHN0cmluZywiXFxsaWJyYXJpZXNcXHBsdWdpbnNhXFxzY3JpcHRzXFwiKTsKCQlzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07CgkJc3RyZWFtIDw8IHN0cmluZzsKCQlzdHJlYW0gPDwgRmlsZVRvTG9hZDsKCQlJZGVudGlmaWVyID0gRmlsZVRvTG9hZDsKCQlGSUxFKiBmID0gZm9wZW4oc3RyZWFtLnN0cigpLmNfc3RyKCksICJyYiIpOwoJCWlmICghZikKCQl7CgkJCWZvcihzdGQ6OnZlY3RvcjxTY3JpcHRJbmZvPjo6aXRlcmF0b3IgaXQgPSBzY3JpcHRzLmJlZ2luKCk7IGl0ICE9IHNjcmlwdHMuZW5kKCk7ICsraXQpIAoJCQl7CgkJCQlpZihsc3RyY21wKGl0LT5JZGVudGlmaWVyLmNfc3RyKCksdGhpcy0+SWRlbnRpZmllci5jX3N0cigpKSA9PSAwKQoJCQkJewoJCQkJCXNjcmlwdHMuZXJhc2UoaXQpOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQl9CgkJfQoJCWVsc2UKCQl7CgkJCWZjbG9zZShmKTsKCQkJZm9yKHN0ZDo6dmVjdG9yPFNjcmlwdEluZm8+OjppdGVyYXRvciBpdCA9IHNjcmlwdHMuYmVnaW4oKTsgaXQgIT0gc2NyaXB0cy5lbmQoKTsgKytpdCkgCgkJCXsKCQkJCWlmKGxzdHJjbXAoaXQtPklkZW50aWZpZXIuY19zdHIoKSx0aGlzLT5JZGVudGlmaWVyLmNfc3RyKCkpID09IDApCgkJCQl7CgkJCQkJc2NyaXB0cy5lcmFzZShpdCk7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCX0KCQkJbWVtc2V0KCh2b2lkKikmdGhpcy0+YW14LCAwLCBzaXplb2YoQU1YKSk7CgkJCWludCBlcnIgPSBhdXhfTG9hZFByb2dyYW0oJmFteCx0aGlzLT5JZGVudGlmaWVyLmNfc3RyKCkpOwoJCQlpZiAoZXJyICE9IEFNWF9FUlJfTk9ORSkKCQkJewoJCQkJbG9ncHJpbnRmKCJTY3JpcHRbJXNdOiBSdW4gdGltZSBlcnJvciAlZDogXCIlc1wiIiwvLyBvbiBsaW5lICVsZFxuIiwKCQkJCQl0aGlzLT5JZGVudGlmaWVyLCBlcnIsIGF1eF9TdHJFcnJvcihlcnIpKTsvLywgKGxvbmcpYW14LT5jdXJsaW5lKTsKCQkJCWZvcihzdGQ6OnZlY3RvcjxTY3JpcHRJbmZvPjo6aXRlcmF0b3IgaXQgPSBzY3JpcHRzLmJlZ2luKCk7IGl0ICE9IHNjcmlwdHMuZW5kKCk7ICsraXQpIAoJCQkJewoJCQkJCWlmKGxzdHJjbXAoaXQtPklkZW50aWZpZXIuY19zdHIoKSx0aGlzLT5JZGVudGlmaWVyLmNfc3RyKCkpID09IDApCgkJCQkJewoJCQkJCQlzY3JpcHRzLmVyYXNlKGl0KTsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJfQoJCQl9CgkJCWVsc2UKCQkJewoJCQkJYW14X0NvcmVJbml0KCZhbXgpOwoJCQkJYW14X0Zsb2F0SW5pdCgmYW14KTsKCQkJCWFteF9TdHJpbmdJbml0KCZhbXgpOwoJCQkJYW14X0ZpbGVJbml0KCZhbXgpOwoJCQkJYW14X1RpbWVJbml0KCZhbXgpOwoJCQkJYW14X0N1c3RvbUluaXQoJmFteCk7CgkJCQlEb0FteExvYWQoJmFteCk7CgoJCQkJY2VsbCByZXQgPSAwOwoJCQkJZXJyID0gYW14X0V4ZWMoJmFteCwgJnJldCwgQU1YX0VYRUNfTUFJTik7CgkJCQkgaWYgKGVyciAhPSBBTVhfRVJSX05PTkUpCgkJCQl7CgkJCQkJbG9ncHJpbnRmKCJTY3JpcHRbJXNdOiBSdW4gdGltZSBlcnJvciAlZDogXCIlc1wiIiwvLyBvbiBsaW5lICVsZFxuIiwKCQkJCQkJdGhpcy0+SWRlbnRpZmllciwgZXJyLCBhdXhfU3RyRXJyb3IoZXJyKSk7Ly8sIChsb25nKWFteC0+Y3VybGluZSk7CgkJCQkJZm9yKHN0ZDo6dmVjdG9yPFNjcmlwdEluZm8+OjppdGVyYXRvciBpdCA9IHNjcmlwdHMuYmVnaW4oKTsgaXQgIT0gc2NyaXB0cy5lbmQoKTsgKytpdCkgCgkJCQkJewoJCQkJCQlpZihsc3RyY21wKGl0LT5JZGVudGlmaWVyLmNfc3RyKCksdGhpcy0+SWRlbnRpZmllci5jX3N0cigpKSA9PSAwKQoJCQkJCQl7CgkJCQkJCQlzY3JpcHRzLmVyYXNlKGl0KTsKCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCXRoaXMtPkluaXRpYWxpemVkID0gdHJ1ZTsKCQkJCX0KCQkJfQoJCX0KCX0KCX5TY3JpcHRJbmZvKCkKCXsKCQlpZih0aGlzLT5Jbml0aWFsaXplZCkKCQl7CgkJCWludCB0bXA7CgkJCWlmICghYW14X0ZpbmRQdWJsaWMoJnRoaXMtPmFteCwgIk9uU2NyaXB0RXhpdCIsICZ0bXApKQoJCQkJYW14X0V4ZWMoJnRoaXMtPmFteCwgKGNlbGwqKSZ0bXAsIHRtcCk7CgkJfQoJfQp9Ow==