Участник
Пользователь
- Сообщения
- 78
- Реакции
- 65
Есть ли решения чтобы автоматически перезагружать сервер(через restart чтобы игрока не выкидывало) когда файл amxx изменяется?
А может есть способ применить изменения плагина иным образом?
Надоело постоянно:
1. Развернул hlds
2. Нажал (вставился ранее написанный restart)
3. Нажал Enter
В инете не нашел готового.
Идеи такие: через отдельный плагин с server_cmd("restart") или инжектить dll в hlds или через модуль для сервера (как fakemeta и т.п.)
UPDATE:
Сделал простой плагин который решает эту проблему
А может есть способ применить изменения плагина иным образом?
Надоело постоянно:
1. Развернул hlds
2. Нажал (вставился ранее написанный restart)
3. Нажал Enter
В инете не нашел готового.
Идеи такие: через отдельный плагин с server_cmd("restart") или инжектить dll в hlds или через модуль для сервера (как fakemeta и т.п.)
UPDATE:
Сделал простой плагин который решает эту проблему
Код:
/*
Simple helper for plugin developers.
It will auto-restart server once file change detected in pluigns folder.
*/
#include <amxmodx>
#include <amxmisc>
#define PLUGIN "Restart On File Change"
#define VERSION "1.0"
#define AUTHOR "Lopol2010"
#define DIRECTORY_WATCH "addons/amxmodx/plugins/"
#define FREQUENCY 1.0
new Trie:g_files
public plugin_init(){
register_plugin(PLUGIN,VERSION,AUTHOR);
watch_files()
}
public ensure_trie_created(&Trie:trie)
{
if(!trie)
{
trie = TrieCreate()
}
}
public watching_task()
{
new TrieIter:it = TrieIterCreate(g_files)
do {
static filename[256]
new oldLastChange, lastChange
TrieIterGetKey(it, filename, charsmax(filename))
TrieIterGetCell(it, oldLastChange)
lastChange = GetFileTime(filename, FileTime_LastChange)
if(oldLastChange != lastChange)
{
server_cmd("restart")
}
TrieIterNext(it)
} while(!TrieIterEnded(it))
}
public watch_files()
{
new dir[256]
dir = DIRECTORY_WATCH
ensure_trie_created(g_files)
if(!dir_exists(dir))
{
server_print("ERROR: couldn't find directory %s", dir)
return
}
if(!task_exists(0))
{
set_task_ex(FREQUENCY, "watching_task", 0, _, _, SetTask_Repeat)
}
new filename[50]
new FileType:filetype
new hdir = open_dir(dir, filename, charsmax(filename))
if(hdir == 0)
{
server_print("ERROR: couldn't open directory %s", dir)
return
}
do {
if(filetype == FileType_File)
{
new fullPath[100]
formatex(fullPath, strlen(dir) + strlen(filename), "%s%s", dir, filename)
TrieSetCell(g_files, fullPath, GetFileTime(fullPath, FileTime_LastChange))
}
} while (next_file(hdir, filename, charsmax(filename), filetype))
close_dir(hdir)
}
Последнее редактирование: