搜索
查看: 2283|回复: 6

Rulzy发布的1.76c暂停插件pausecfg不可以停止插件

[复制链接]
发表于 2007-2-16 04:29:23 | 显示全部楼层 |阅读模式 来自 中国–广东–深圳–南山区
以前用1.75A可以有3个选项..现在只能暂停..暂停的插件换图后会自动恢复使用.所以不怎么方便..
可以加入停止么?
[PHP]#include <amxmodx>
#include <amxmisc>

// Uncomment if you want to have two new commands
// amx_off - pause plugins not marked as unpauseable
// amx_on - enable plugins not marked as unpauseable
#define DIRECT_ONOFF

#define MAX_SYSTEM 32

new g_menuPos[33]
new g_fileToSave[64]
new g_coloredMenus
new g_Modified
new g_addCmd[] = "amx_pausecfg add ^"%s^""
new g_system[MAX_SYSTEM]
new g_systemNum

public plugin_init()
{
        register_plugin("Pause Plugins", AMXX_VERSION_STR, "AMXX Dev Team")
        register_dictionary("pausecfg.txt")
        register_dictionary("common.txt")
        register_dictionary("admincmd.txt")
       
        register_concmd("amx_pausecfg", "cmdPlugin", ADMIN_CFG, "- list commands for pause/unpause management")
        register_clcmd("amx_pausecfgmenu", "cmdMenu", ADMIN_CFG, "- pause/unpause plugins with menu")
#if defined DIRECT_ONOFF
        register_concmd("amx_off", "cmdOFF", ADMIN_CFG, "- pauses some plugins")
        register_concmd("amx_on", "cmdON", ADMIN_CFG, "- unpauses some plugins")
#endif
        register_menucmd(register_menuid("Pause/Unpause Plugins"), 1023, "actionMenu")
       
        g_coloredMenus = colored_menus()
        get_configsdir(g_fileToSave, 63);
        format(g_fileToSave, 63, "%s/pausecfg.ini", g_fileToSave);

        return PLUGIN_CONTINUE
}

#if defined DIRECT_ONOFF
public cmdOFF(id, level, cid)
{
        if (cmd_access(id, level, cid, 1))
                pausePlugins(id)
       
        return PLUGIN_HANDLED
}

public cmdON(id, level, cid)
{
        if (cmd_access(id, level, cid, 1))
                unpausePlugins(id)
       
        return PLUGIN_HANDLED
}
#endif

public plugin_cfg()
{
        loadSettings(g_fileToSave)

        // Put here titles of plugins which you don't want to pause
        server_cmd(g_addCmd, "Admin Base")
        server_cmd(g_addCmd, "Admin Base (SQL)")
        server_cmd(g_addCmd, "Pause Plugins")
        server_cmd(g_addCmd, "TimeLeft")
        server_cmd(g_addCmd, "NextMap")
        server_cmd(g_addCmd, "Slots Reservation")
}

public actionMenu(id, key)
{
        switch (key)
        {
                case 6:
                {
                        if (file_exists(g_fileToSave))
                        {
                                delete_file(g_fileToSave)
                                client_print(id, print_chat, "* %L", id, "PAUSE_CONF_CLEARED")
                        }
                        else
                                client_print(id, print_chat, "* %L", id, "PAUSE_ALR_CLEARED")
                       
                        displayMenu(id, g_menuPos[id])
                }
                case 7:
                {
                        if (saveSettings(g_fileToSave))
                        {
                                g_Modified = 0
                                client_print(id, print_chat, "* %L", id, "PAUSE_CONF_SAVED")
                        }
                        else
                                client_print(id, print_chat, "* %L", id, "PAUSE_SAVE_FAILED")
                       
                        displayMenu(id, g_menuPos[id])
                }
                case 8: displayMenu(id, ++g_menuPos[id])
                case 9: displayMenu(id, --g_menuPos[id])
                default:
                {
                        new option = g_menuPos[id] * 6 + key
                        new file[32], status[2]
                       
                        get_plugin(option, file, 31, status, 0, status, 0, status, 0, status, 1)
                       
                        switch (status[0])
                        {
                                case 'r': pause("ac", file)
                                case 'p':
                                {
                                        g_Modified = 1
                                        unpause("ac", file)
                                }
                        }
                       
                        displayMenu(id, g_menuPos[id])
                }
        }
       
        return PLUGIN_HANDLED
}

getStatus(id, code, &statusCode, lStatus[], lLen)
{
        switch (code)
        {
                case 'r':
                {
                        statusCode = 'O'
                        format(lStatus, lLen, "%L", id, "ON")
                }
                case 's':
                {
                        statusCode = 'S'
                        format(lStatus, lLen, "%L", id, "STOPPED")
                }       
                case 'p':
                {
                        statusCode = 'O'
                        format(lStatus, lLen, "%L", id, "OFF")
                }
                case 'b':
                {
                        statusCode = 'E'
                        format(lStatus, lLen, "%L", id, "ERROR")
                }
                default:
                {
                        statusCode = 'L'
                        format(lStatus, lLen, "%L", id, "LOCKED")
                }
        }
}

isSystem(id)
{
        for (new a = 0; a < g_systemNum; ++a)
                if (g_system[a] == id)
                        return 1
        return 0
}

displayMenu(id, pos)
{
        if (pos < 0) return

        new filename[32], title[32], status[8], statusCode
        new datanum = get_pluginsnum()
        new menu_body[512], start = pos * 6, k = 0
       
        if (start >= datanum)
                start = pos = g_menuPos[id] = 0
       
        new len = format(menu_body, 511, g_coloredMenus ? "\y%L\R%d/%d^n\w^n" : "%L %d/%d^n^n", id, "PAUSE_UNPAUSE", pos + 1, ((datanum / 6) + ((datanum % 6) ? 1 : 0)))
        new end = start + 6, keys = MENU_KEY_0|MENU_KEY_8|MENU_KEY_7
       
        if (end > datanum)
                end = datanum
       
        for (new a = start; a < end; ++a)
        {
                get_plugin(a, filename, 31, title, 31, status, 0, status, 0, status, 1)
                getStatus(id, status[0], statusCode, status, 7)
               
                if (isSystem(a) || (statusCode != 'O' && statusCode != 'S'))
                {
                        if (g_coloredMenus)
                        {
                                len += format(menu_body[len], 511-len, "\d%d. %s\R%s^n\w", ++k, title, status)
                        } else {
                                ++k
                                len += format(menu_body[len], 511-len, "#. %s %s^n", title, status)
                        }
                } else {
                        keys |= (1<<k)
                        len += format(menu_body[len], 511-len, g_coloredMenus ? "%d. %s\y\R%s^n\w" : "%d. %s %s^n", ++k, title, status)
                }
        }
       
        len += format(menu_body[len], 511-len, "^n7. %L^n", id, "CLEAR_STOPPED")
        len += format(menu_body[len], 511-len, g_coloredMenus ? "8. %L \y\R%s^n\w" : "8. %L %s^n", id, "SAVE_STOPPED", g_Modified ? "*" : "")

        if (end != datanum)
        {
                format(menu_body[len], 511-len, "^n9. %L...^n0. %L", id, "MORE", id, pos ? "BACK" : "EXIT")
                keys |= MENU_KEY_9
        }
        else
                format(menu_body[len], 511-len, "^n0. %L", id, pos ? "BACK" : "EXIT")
       
        show_menu(id, keys, menu_body, -1, "Pause/Unpause Plugins")
}

public cmdMenu(id, level, cid)
{
        if (cmd_access(id, level, cid, 1))
                displayMenu(id, g_menuPos[id] = 0)
       
        return PLUGIN_HANDLED
}

pausePlugins(id)
{
        new filename[32], title[32], status[2]
        new count = 0, imax = get_pluginsnum()
       
        for (new a = 0; a < imax; ++a)
        {
                get_plugin(a, filename, 31, title, 31, status, 0, status, 0, status, 1)
               
                if (!isSystem(a) && status[0] == 'r' && pause("ac", filename))
                {
                        //console_print(id, "Pausing %s (file ^"%s^")", title, filename)
                        ++count
                }
        }
       
        console_print(id, "%L", id, (count == 1) ? "PAUSED_PLUGIN" : "PAUSED_PLUGINS", count)
}

unpausePlugins(id)
{
        new filename[32], title[32], status[2]
        new count = 0, imax = get_pluginsnum()
       
        for (new a = 0; a < imax; ++a)
        {
                get_plugin(a, filename, 31, title, 31, status, 0, status, 0, status, 1)
               
                if (!isSystem(a) && status[0] == 'p' && unpause("ac", filename))
                {
                        //console_print(id, "Unpausing %s (file ^"%s^")", title, filename)
                        ++count
                }
        }
       
        console_print(id, "%L", id, (count == 1) ? "UNPAUSED_PLUGIN" : "UNPAUSED_PLUGINS", count)
}

findPluginByFile(arg[32], &len)
{
        new name[32], title[32], status[2]
        new inum = get_pluginsnum()
       
        for (new a = 0; a < inum; ++a)
        {
                get_plugin(a, name, 31, title, 31, status, 0, status, 0, status, 1)
               
                if (equali(name, arg, len) && (status[0] == 'r' || status[0] == 'p' || status[0] == 's'))
                {
                        len = copy(arg, 31, name)
                        return a
                }
        }
       
        return -1
}

findPluginByTitle(name[], file[], len)
{
        new title[32], status[2]
        new inum = get_pluginsnum()
       
        for (new a = 0; a < inum; ++a)
        {
                get_plugin(a, file, len, title, 31, status, 0, status, 0, status, 1)
               
                if (equali(title, name))
                        return a
        }
       
        return -1
}

public cmdPlugin(id, level, cid)
{
        if (!cmd_access(id, level, cid, 1))
                return PLUGIN_HANDLED
       
        new cmds[32]
        read_argv(1, cmds, 31)

        if (equal(cmds, "add") && read_argc() > 2)
        {
                read_argv(2, cmds, 31)
                new file[2]

                if ((g_system[g_systemNum] = findPluginByTitle(cmds, file, 0)) != -1)
                {
                        if (g_systemNum < MAX_SYSTEM)
                                g_systemNum++
                        else
                                console_print(id, "%L", id, "CANT_MARK_MORE")
                }
        }
        else if (equal(cmds, "off"))
        {
                pausePlugins(id)
        }
        else if (equal(cmds, "on"))
        {
                unpausePlugins(id)
        }
        else if (equal(cmds, "save"))
        {
                if (saveSettings(g_fileToSave))
                {
                        g_Modified = 0
                        console_print(id, "%L", id, "PAUSE_CONF_SAVED")
                }
                else
                        console_print(id, "%L", id, "PAUSE_SAVE_FAILED")
        }
        else if (equal(cmds, "clear"))
        {
                if (file_exists(g_fileToSave))
                {
                        delete_file(g_fileToSave)
                        console_print(id, "%L", id, "PAUSE_CONF_CLEARED")
                }
                else
                        console_print(id, "%L", id, "PAUSE_ALR_CLEARED")
        }
        else if (equal(cmds, "pause"))
        {
                new arg[32], a, len = read_argv(2, arg, 31)
               
                if (len && ((a = findPluginByFile(arg, len)) != -1) && !isSystem(a) && pause("ac", arg))
                        console_print(id, "%L %L", id, "PAUSE_PLUGIN_MATCH", arg, id, "PAUSED")
                else
                        console_print(id, "%L", id, "PAUSE_COULDNT_FIND", arg)
        }
        else if (equal(cmds, "enable"))
        {
                new arg[32], a, len = read_argv(2, arg, 31)
               
                if (len && (a = findPluginByFile(arg, len)) != -1 && !isSystem(a) && unpause("ac", arg))
                        console_print(id, "%L %L", id, "PAUSE_PLUGIN_MATCH", arg, id, "UNPAUSED")
                else
                        console_print(id, "%L", id, "PAUSE_COULDNT_FIND", arg)
        }
        else if (equal(cmds, "stop"))
        {
                new arg[32], a, len = read_argv(2, arg, 31)
               
                if (len && (a = findPluginByFile(arg, len)) != -1 && !isSystem(a) && pause("dc", arg))
                {
                        g_Modified = 1
                        console_print(id, "%L %L", id, "PAUSE_PLUGIN_MATCH", arg, id, "STOPPED")
                }
                else
                        console_print(id, "%L", id, "PAUSE_COULDNT_FIND", arg)
        }
        else if (equal(cmds, "list"))
        {
                new lName[32], lVersion[32], lAuthor[32], lFile[32], lStatus[32]
               
                format(lName, 31, "%L", id, "NAME")
                format(lVersion, 31, "%L", id, "VERSION")
                format(lAuthor, 31, "%L", id, "AUTHOR")
                format(lFile, 31, "%L", id, "FILE")
                format(lStatus, 31, "%L", id, "STATUS")
               
                new arg1[8], running = 0
                new start = read_argv(2, arg1, 7) ? str_to_num(arg1) : 1
               
                if (--start < 0)
                        start = 0
               
                new plgnum = get_pluginsnum()
               
                if (start >= plgnum)
                        start = plgnum - 1
               
                console_print(id, "^n----- %L -----", id, "PAUSE_LOADED")
                console_print(id, "       %-18.17s %-8.7s %-17.16s %-16.15s %-9.8s", lName, lVersion, lAuthor, lFile, lStatus)
               
                new        plugin[32], title[32], version[16], author[32], status[16]
                new end = start + 10
               
                if (end > plgnum) end = plgnum
               
                for (new a = start; a < end; ++a)
                {
                        get_plugin(a, plugin, 31, title, 31, version, 15, author, 31, status, 15)
                        if (status[0] == 'r') ++running
                        console_print(id, " [%3d] %-18.17s %-8.7s %-17.16s %-16.15s %-9.8s", a + 1, title, version, author, plugin, status)
                }
               
                console_print(id, "----- %L -----", id, "PAUSE_ENTRIES", start + 1, end, plgnum, running)
               
                if (end < plgnum)
                        console_print(id, "----- %L -----", id, "PAUSE_USE_MORE", end + 1)
                else
                        console_print(id, "----- %L -----", id, "PAUSE_USE_BEGIN")
        } else {
                console_print(id, "%L", id, "PAUSE_USAGE")
                console_print(id, "%L:", id, "PAUSE_COMMANDS")
                console_print(id, "%L", id, "COM_PAUSE_OFF")
                console_print(id, "%L", id, "COM_PAUSE_ON")
                console_print(id, "%L", id, "COM_PAUSE_STOP")
                console_print(id, "%L", id, "COM_PAUSE_PAUSE")
                console_print(id, "%L", id, "COM_PAUSE_ENABLE")
                console_print(id, "%L", id, "COM_PAUSE_SAVE")
                console_print(id, "%L", id, "COM_PAUSE_CLEAR")
                console_print(id, "%L", id, "COM_PAUSE_LIST")
                console_print(id, "%L", id, "COM_PAUSE_ADD")
        }
       
        return PLUGIN_HANDLED
}

saveSettings(filename[])
{
        if (file_exists(filename))
                delete_file(filename)

        new text[256], file[32], title[32], status[2]
        new inum = get_pluginsnum()

        if (!write_file(filename, ";Generated by Pause Plugins Plugin. Do not modify!^n;Title Filename"))
                return 0
       
        for (new a = 0; a < inum; ++a)
        {
                get_plugin(a, file, 31, title, 31, status, 0, status, 0, status, 1)
               
                if (status[0] == 's')
                {
                        format(text, 255, "^"%s^" ;%s", title, file)
                        write_file(filename, text)
                }
        }
       
        return 1
}

loadSettings(filename[])
{
        if (!file_exists(filename))
                return 0
       
        new name[256], file[32], i, pos = 0
       
        while (read_file(filename, pos++, name, 255, i))
        {
                if (name[0] != ';' && parse(name, name, 31) && (i = findPluginByTitle(name, file, 31) != -1))
                        pause("dc", file)
        }
       
        return 1
}
[/PHP]
发表于 2007-2-16 10:08:43 | 显示全部楼层 来自 中国–福建–泉州–晋江市

回复: Rulzy发布的1.76c暂停插件pausecfg不可以停止插件

写小说啊   写这么多  我看不明白
回复

使用道具 举报

发表于 2007-2-16 18:08:45 | 显示全部楼层 来自 中国–福建–漳州

回复: Rulzy发布的1.76c暂停插件pausecfg不可以停止插件

这个是官方在1.76c中修改的地方。1.76b以前的版本暂停插件存在一个问题,就是停止后,就再也启用不了了,可能就是这个原因,1.76c才把停止给去掉的吧。
回复

使用道具 举报

 楼主| 发表于 2007-2-17 01:58:18 | 显示全部楼层 来自 中国–广东–深圳–南山区

回复: Rulzy发布的1.76c暂停插件pausecfg不可以停止插件

Post by Rulzy
这个是官方在1.76c中修改的地方。1.76b以前的版本暂停插件存在一个问题,就是停止后,就再也启用不了了,可能就是这个原因,1.76c才把停止给去掉的吧。

原来是这样..明白..难怪我把之前的插件放进去停止了就不能启用了.
回复

使用道具 举报

发表于 2007-2-18 19:00:09 | 显示全部楼层 来自 中国–四川–宜宾

回复: Rulzy发布的1.76c暂停插件pausecfg不可以停止插件

对头,我都遇到过这种情况,停止了插件,就再也不能恢复
回复

使用道具 举报

发表于 2007-2-20 21:42:07 | 显示全部楼层 来自 中国–吉林–延边朝鲜族自治州–延吉市

回复: Rulzy发布的1.76c暂停插件pausecfg不可以停止插件

1.76c 可以的阿。你要保存插件的暂停状态!记得在你的configs目录下建立pausecfg.ini文件,这样你就可以保存插件的暂停状态了,换地图也不回再次启用。
回复

使用道具 举报

发表于 2007-3-21 21:30:51 | 显示全部楼层 来自 中国–河南–漯河

回复: Rulzy发布的1.76c暂停插件pausecfg不可以停止插件

Post by atu
1.76c 可以的阿。你要保存插件的暂停状态!记得在你的configs目录下建立pausecfg.ini文件,这样你就可以保存插件的暂停状态了,换地图也不回再次启用。
你是说在服务器的cstrike文件夹里面就可以了?里面是空白的?要不要写上什么?
回复

使用道具 举报

游客
回复
您需要登录后才可以回帖 登录 | 注个册吧

快速回复 返回顶部 返回列表