struct ScriptInfo
{
AMX amx;
std::string Identifier;
bool Initialized;
ScriptInfo(std::string FileToLoad)
{
this->Initialized = false;
std::string loadit((current_path() / "libraries" / "pluginsa" / "scritps" / FileToLoad).string());
Identifier = FileToLoad;
FILE* f = fopen(loadit.c_str(), "rb");
if (!f)
{
this->Initialized = false;
}
else
{
fclose(f);
bool skip = false;
for(std::vector<ScriptInfo>::iterator it = scripts.begin(); it != scripts.end(); ++it)
{
if(lstrcmp(it->Identifier.c_str(),this->Identifier.c_str()) == 0)
{
skip = true;
break;
}
}
if(skip)
{
this->Initialized = false;
}
else
{
memset((void*)&this->amx, 0, sizeof(AMX));
int err = aux_LoadProgram(&amx,loadit.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);
}
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);
}
else
{
this->Initialized = true;
}
}
}
}
}
~ScriptInfo()
{
if(this->Initialized)
{
int tmp;
if (!amx_FindPublic(&this->amx, "OnScriptExit", &tmp))
amx_Exec(&this->amx, (cell*)&tmp, tmp);
aux_FreeProgram(&this->amx);
DoAmxUnload(&this->amx);
amx_TimeCleanup(&this->amx);
amx_FileCleanup(&this->amx);
amx_StringCleanup(&this->amx);
amx_FloatCleanup(&this->amx);
amx_CoreCleanup(&this->amx);
}
}
};
c3RydWN0IFNjcmlwdEluZm8KewogICAgQU1YIGFteDsKCXN0ZDo6c3RyaW5nIElkZW50aWZpZXI7Cglib29sIEluaXRpYWxpemVkOwoJU2NyaXB0SW5mbyhzdGQ6OnN0cmluZyBGaWxlVG9Mb2FkKQoJewoJCXRoaXMtPkluaXRpYWxpemVkID0gZmFsc2U7CgkJCgkJc3RkOjpzdHJpbmcgbG9hZGl0KChjdXJyZW50X3BhdGgoKSAvICJsaWJyYXJpZXMiIC8gInBsdWdpbnNhIiAvICJzY3JpdHBzIiAvIEZpbGVUb0xvYWQpLnN0cmluZygpKTsKCQlJZGVudGlmaWVyID0gRmlsZVRvTG9hZDsKCQlGSUxFKiBmID0gZm9wZW4obG9hZGl0LmNfc3RyKCksICJyYiIpOwoJCWlmICghZikKCQl7CgkJCXRoaXMtPkluaXRpYWxpemVkID0gZmFsc2U7CgkJfQoJCWVsc2UKCQl7CgkJCWZjbG9zZShmKTsKCQkJYm9vbCBza2lwID0gZmFsc2U7CgkJCWZvcihzdGQ6OnZlY3RvcjxTY3JpcHRJbmZvPjo6aXRlcmF0b3IgaXQgPSBzY3JpcHRzLmJlZ2luKCk7IGl0ICE9IHNjcmlwdHMuZW5kKCk7ICsraXQpIAoJCQl7CgkJCQlpZihsc3RyY21wKGl0LT5JZGVudGlmaWVyLmNfc3RyKCksdGhpcy0+SWRlbnRpZmllci5jX3N0cigpKSA9PSAwKQoJCQkJewoJCQkJCXNraXAgPSB0cnVlOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQl9CgkJCWlmKHNraXApCgkJCXsKCQkJCXRoaXMtPkluaXRpYWxpemVkID0gZmFsc2U7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQltZW1zZXQoKHZvaWQqKSZ0aGlzLT5hbXgsIDAsIHNpemVvZihBTVgpKTsKCQkJCWludCBlcnIgPSBhdXhfTG9hZFByb2dyYW0oJmFteCxsb2FkaXQuY19zdHIoKSk7CgkJCQlpZiAoZXJyICE9IEFNWF9FUlJfTk9ORSkKCQkJCXsKCQkJCQlsb2dwcmludGYoIlNjcmlwdFslc106IFJ1biB0aW1lIGVycm9yICVkOiBcIiVzXCIiLC8vIG9uIGxpbmUgJWxkXG4iLAoJCQkJCQl0aGlzLT5JZGVudGlmaWVyLCBlcnIsIGF1eF9TdHJFcnJvcihlcnIpKTsvLywgKGxvbmcpYW14LT5jdXJsaW5lKTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQlhbXhfQ29yZUluaXQoJmFteCk7CgkJCQkJYW14X0Zsb2F0SW5pdCgmYW14KTsKCQkJCQlhbXhfU3RyaW5nSW5pdCgmYW14KTsKCQkJCQlhbXhfRmlsZUluaXQoJmFteCk7CgkJCQkJYW14X1RpbWVJbml0KCZhbXgpOwoJCQkJCWFteF9DdXN0b21Jbml0KCZhbXgpOwoJCQkJCURvQW14TG9hZCgmYW14KTsKCgkJCQkJY2VsbCByZXQgPSAwOwoJCQkJCWVyciA9IGFteF9FeGVjKCZhbXgsICZyZXQsIEFNWF9FWEVDX01BSU4pOwoJCQkJCWlmIChlcnIgIT0gQU1YX0VSUl9OT05FKQoJCQkJCXsKCQkJCQkJbG9ncHJpbnRmKCJTY3JpcHRbJXNdOiBSdW4gdGltZSBlcnJvciAlZDogXCIlc1wiIiwvLyBvbiBsaW5lICVsZFxuIiwKCQkJCQkJCXRoaXMtPklkZW50aWZpZXIsIGVyciwgYXV4X1N0ckVycm9yKGVycikpOy8vLCAobG9uZylhbXgtPmN1cmxpbmUpOwoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQl0aGlzLT5Jbml0aWFsaXplZCA9IHRydWU7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJfQoJflNjcmlwdEluZm8oKQoJewoJCWlmKHRoaXMtPkluaXRpYWxpemVkKQoJCXsKCQkJaW50IHRtcDsKCQkJaWYgKCFhbXhfRmluZFB1YmxpYygmdGhpcy0+YW14LCAiT25TY3JpcHRFeGl0IiwgJnRtcCkpCgkJCQlhbXhfRXhlYygmdGhpcy0+YW14LCAoY2VsbCopJnRtcCwgdG1wKTsKCQkJYXV4X0ZyZWVQcm9ncmFtKCZ0aGlzLT5hbXgpOwoJCQlEb0FteFVubG9hZCgmdGhpcy0+YW14KTsKCQkJYW14X1RpbWVDbGVhbnVwKCZ0aGlzLT5hbXgpOwoJCQlhbXhfRmlsZUNsZWFudXAoJnRoaXMtPmFteCk7CgkJCWFteF9TdHJpbmdDbGVhbnVwKCZ0aGlzLT5hbXgpOwoJCQlhbXhfRmxvYXRDbGVhbnVwKCZ0aGlzLT5hbXgpOwoJCQlhbXhfQ29yZUNsZWFudXAoJnRoaXMtPmFteCk7CgkJfQoJfQp9Ow==