Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

2 страниц V   1 2

Game Menu Modified

, Редактирование плагина, помогите!
Статус пользователя SivAnOl
сообщение 11.12.2012, 17:44
Сообщение #1


Стаж: 16 лет

Сообщений: 416
Благодарностей: 49
Полезность: 13

Итак, имеется 2 версии Game Menu плагина. Это 1.2.1 и 1.3.
В 1.2.1 сервер не выставляется в меню сразу, а запрашивает при входе на сервер (справедливо).
В 1.3 отсутствует вопрос при входе на сервер, но имеется возможность восстанавливать стандартное меню (очень хорошо).

Исходник 1.2.1
#include <amxmodx>
#include <amxmisc>

#define PLUGIN "Game Menu"
#define VERSION "1.2.1"
#define AUTHOR "-=eXclass=-"

#define GAMEMENU_FILE "resource/GameMenu.res"
#define MAX_SIZE 1012

new g_Text[MAX_SIZE]
new GameMenu[34]

new keysmenu = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9)

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)

register_clcmd("say /setmenu", "cmd_setmenu")
register_clcmd("say_team /setmenu", "cmd_setmenu")
register_clcmd("say /servers", "cmd_setmenu")
register_clcmd("say_team /servers", "cmd_setmenu")
register_menu("Menu", keysmenu, "Submenu")

register_dictionary("gm.txt")

set_task(0.1, "Read_GameMenu")
}

public Read_GameMenu()
{
new i_File, s_File[128], Len, i

// Получаем путь к директории с конфигами AMXX в s_File.
get_configsdir(s_File, charsmax(s_File))

// Формируем путь к gamemenu.txt файлу, используя путь к конфигам, и сохраняем в s_File.
format(s_File, charsmax(s_File), "%s/gamemenu.txt", s_File)

// Открываем файл для чтения
i_File = fopen(s_File, "r")

// Читаем содержимое файла в g_Text. Данная функция поддерживает чтение символов CR, LF.
fgets(i_File, g_Text, MAX_SIZE)

// Закрываем файл
fclose(i_File)

md5_file(s_File, GameMenu)
Len = strlen(GameMenu)
for (i = 4; i < Len-1; i++) GameMenu[i] = 0
}

public cmd_setmenu(id)
{
// Указываем путь к файлу resource/GameMenu.res
client_cmd(id, "motdfile %s", GAMEMENU_FILE)

// Записываем в файл содержимое g_Text
client_cmd(id, "motd_write %s", g_Text)

// Возвращаем значение команды по умолчанию
client_cmd(id, "motdfile motd.txt")

client_print(id, print_chat, "[AMXX] %L", id, "OK")
}

public client_authorized(id)
set_task(20.0, "info", id)

public info(id)
client_print(id, print_chat, "[AMXX] %L", id, "SETMENUCMD")

public plugin_precache()
{
precache_generic("resource/GameMenu.tga");
return PLUGIN_HANDLED
}

public client_putinserver(id)
{
set_task(2.0, "Menu", id)
}

public Menu(id)
{
static menu[500], len
len = 0

if(is_user_connected(id))
{
len += formatex(menu[len], charsmax(menu) - len, "\yДобавить наши сервера в меню^nдля быстрого подключения?^n^n")

len += formatex(menu[len], charsmax(menu) - len, "\r1. \wДобавить^n")

len += formatex(menu[len], charsmax(menu) - len, "\r2. \wНичего не делать^n^n")

show_menu(id, keysmenu, menu, -1, "Menu")
}

}

public Submenu(id, key)
{
switch(key)
{
case 0:
{
client_cmd(id, "say /setmenu")
}
case 1:
{
///
}
}
}

Исходник 1.3
/*
* Game Menu
* 10/12/2012
*
* It is unlikely that you are able to add more than 3 servers.
* Total allowed max game menu file size is 1010 bytes.
*
* Credits:
* - to DJ_WEST for original 'GameMenu' plugin
* - to PomanoB & UFPS.Team for 'Fix AutoBuy Bug' plugin. I used much code of it.
*/

#include <amxmodx>

#define PLUGIN "Game Menu"
#define VERSION "1.3"
#define AUTHOR "DJ_WEST / Safety1st"

#define GAMEMENU_FILE "resource/GameMenu.res"
#define MAX_SIZE 1011 // because we waste 1 additional byte for ";" later
#define MAX_CMD_SIZE 1024 // total null-terminated string size allowed for commands; it is needed to check file size

#define NEW 0
#define DEFAULT 1

new gszGMText[2][MAX_SIZE]
new gMenuId

public plugin_init() {
register_plugin( PLUGIN, VERSION, AUTHOR )
register_dictionary( "gamemenu.txt" )

register_clcmd( "say /setmenu", "PrintMenu" )
register_clcmd( "say_team /setmenu", "PrintMenu" )
}

public plugin_cfg() {
// get file names
new szCfgDir[128], szGMFile[2][128]
get_localinfo( "amxx_configsdir", szCfgDir, 127 )
formatex( szGMFile[NEW], 127, "%s/gamemenu.txt", szCfgDir )
formatex( szGMFile[DEFAULT], 127, "%s/gamemenu_def.txt", szCfgDir )

// load file data
new i, fp, szData[MAX_CMD_SIZE]
for ( i = 0; i < 2; i++ ) {
fp = fopen( szGMFile[i], "rt" ) //read text
if ( !fp ) {
format( szGMFile[i], 127, "%s file not found", szGMFile[i] )
set_fail_state( szGMFile[i] )
}
fgets( fp, szData, MAX_CMD_SIZE - 1 )
if ( strlen(szData) > MAX_SIZE - 1 ) { // string lenghts are compared without null termination!
format( szGMFile[i], 127, "%s file too big", szGMFile[i] )
set_fail_state( szGMFile[i] )
}
copy( gszGMText[i], MAX_SIZE - 1, szData )
fclose( fp )
}

// create menu
gMenuId = menu_create( "MENUSET", "HandleMenu", .ml = 1 )
menu_additem( gMenuId, "", "1" )
menu_additem( gMenuId, "", "2" )
menu_setprop( gMenuId, MPROP_NUMBER_COLOR, "\y" )
menu_setprop( gMenuId, MPROP_EXIT, MEXIT_ALL )
}

public PrintMenu(id) {
new szMenuTitle[256], szMenuSetNew[128], szMenuSetDefault[128], szMenuExit[64]
formatex( szMenuTitle, charsmax(szMenuTitle) - 1, "%L", id, "GM_TITLE" )
formatex( szMenuSetNew, charsmax(szMenuSetNew) - 1, "%L", id, "GM_NEW" )
formatex( szMenuSetDefault, charsmax(szMenuSetDefault) - 1, "%L", id, "GM_DEFAULT" )
formatex( szMenuExit, charsmax(szMenuExit) - 1, "%L", id, "GM_EXIT" )
menu_item_setname( gMenuId, 0, szMenuSetNew )
menu_item_setname( gMenuId, 1, szMenuSetDefault )

menu_setprop( gMenuId, MPROP_TITLE, szMenuTitle )
menu_setprop( gMenuId, MPROP_EXITNAME, szMenuExit )

menu_display( id, gMenuId )
}

public HandleMenu( id, menu, item ) {
if ( item == MENU_EXIT )
return PLUGIN_HANDLED

new access, info[3], callback
menu_item_getinfo( menu, item, access, info, charsmax( info ), _, _, callback )
new key = str_to_num( info )

client_cmd( id, ";Motdfile %s", GAMEMENU_FILE )
switch( key ) {
case 1: {
client_cmd( id, ";Motd_write %s", gszGMText[NEW] )
client_print( id, print_chat, "%L", id, "GM_OKNEW" )
}
case 2: {
client_cmd( id, ";Motd_write %s", gszGMText[DEFAULT] )
client_print( id, print_chat, "%L", id, "GM_OKSTD" )
}
}
// restore default CVar value; dunno whether it is needed
client_cmd( id, ";Motdfile motd.txt" )

return PLUGIN_HANDLED
}


Прошу помощи в следующем:
1. В плагин версии 1.3, не меняя функционала добавить автоматическое написание в чат /setmenu (say /setmenu) дабы увидеть при заходе на сервер запрос на изменение меню.
2. Если возможно, добавить отстрочку вывода запроса замены меню (say /setmenu) на 3 секунды после захода.
Помогите, уважаемые кодеры, скриптёры и остальные знатоки своего дела! dirol.gif

ПОМОГИТЕ С ПОСЛЕДНИМ, КАК СКРЫТЬ /SETMENU ИЗ ЧАТА?

Отредактировал: SivAnOl, - 11.12.2012, 20:16
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя cstriker
сообщение 11.12.2012, 17:53
Сообщение #2


Иконка группы

Стаж: 13 лет

Сообщений: 1233
Благодарностей: 586
Полезность: 869

Цитата(SivAnOl @ 11.12.2012, 18:44) *
Итак, имеется 2 версии Game Menu плагина. Это 1.2.1 и 1.3.
В 1.2.1 сервер не выставляется в меню сразу, а запрашивает при входе на сервер (справедливо).
В 1.3 отсутствует вопрос при входе на сервер, но имеется возможность восстанавливать стандартное меню (очень хорошо).

Исходник 1.2.1
#include <amxmodx>
#include <amxmisc>

#define PLUGIN "Game Menu"
#define VERSION "1.2.1"
#define AUTHOR "-=eXclass=-"

#define GAMEMENU_FILE "resource/GameMenu.res"
#define MAX_SIZE 1012

new g_Text[MAX_SIZE]
new GameMenu[34]

new keysmenu = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9)

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)

register_clcmd("say /setmenu", "cmd_setmenu")
register_clcmd("say_team /setmenu", "cmd_setmenu")
register_clcmd("say /servers", "cmd_setmenu")
register_clcmd("say_team /servers", "cmd_setmenu")
register_menu("Menu", keysmenu, "Submenu")

register_dictionary("gm.txt")

set_task(0.1, "Read_GameMenu")
}

public Read_GameMenu()
{
new i_File, s_File[128], Len, i

// Получаем путь к директории с конфигами AMXX в s_File.
get_configsdir(s_File, charsmax(s_File))

// Формируем путь к gamemenu.txt файлу, используя путь к конфигам, и сохраняем в s_File.
format(s_File, charsmax(s_File), "%s/gamemenu.txt", s_File)

// Открываем файл для чтения
i_File = fopen(s_File, "r")

// Читаем содержимое файла в g_Text. Данная функция поддерживает чтение символов CR, LF.
fgets(i_File, g_Text, MAX_SIZE)

// Закрываем файл
fclose(i_File)

md5_file(s_File, GameMenu)
Len = strlen(GameMenu)
for (i = 4; i < Len-1; i++) GameMenu[i] = 0
}

public cmd_setmenu(id)
{
// Указываем путь к файлу resource/GameMenu.res
client_cmd(id, "motdfile %s", GAMEMENU_FILE)

// Записываем в файл содержимое g_Text
client_cmd(id, "motd_write %s", g_Text)

// Возвращаем значение команды по умолчанию
client_cmd(id, "motdfile motd.txt")

client_print(id, print_chat, "[AMXX] %L", id, "OK")
}

public client_authorized(id)
set_task(20.0, "info", id)

public info(id)
client_print(id, print_chat, "[AMXX] %L", id, "SETMENUCMD")

public plugin_precache()
{
precache_generic("resource/GameMenu.tga");
return PLUGIN_HANDLED
}

public client_putinserver(id)
{
set_task(2.0, "Menu", id)
}

public Menu(id)
{
static menu[500], len
len = 0

if(is_user_connected(id))
{
len += formatex(menu[len], charsmax(menu) - len, "\yДобавить наши сервера в меню^nдля быстрого подключения?^n^n")

len += formatex(menu[len], charsmax(menu) - len, "\r1. \wДобавить^n")

len += formatex(menu[len], charsmax(menu) - len, "\r2. \wНичего не делать^n^n")

show_menu(id, keysmenu, menu, -1, "Menu")
}

}

public Submenu(id, key)
{
switch(key)
{
case 0:
{
client_cmd(id, "say /setmenu")
}
case 1:
{
///
}
}
}

Исходник 1.3
/*
* Game Menu
* 10/12/2012
*
* It is unlikely that you are able to add more than 3 servers.
* Total allowed max game menu file size is 1010 bytes.
*
* Credits:
* - to DJ_WEST for original 'GameMenu' plugin
* - to PomanoB & UFPS.Team for 'Fix AutoBuy Bug' plugin. I used much code of it.
*/

#include <amxmodx>

#define PLUGIN "Game Menu"
#define VERSION "1.3"
#define AUTHOR "DJ_WEST / Safety1st"

#define GAMEMENU_FILE "resource/GameMenu.res"
#define MAX_SIZE 1011 // because we waste 1 additional byte for ";" later
#define MAX_CMD_SIZE 1024 // total null-terminated string size allowed for commands; it is needed to check file size

#define NEW 0
#define DEFAULT 1

new gszGMText[2][MAX_SIZE]
new gMenuId

public plugin_init() {
register_plugin( PLUGIN, VERSION, AUTHOR )
register_dictionary( "gamemenu.txt" )

register_clcmd( "say /setmenu", "PrintMenu" )
register_clcmd( "say_team /setmenu", "PrintMenu" )
}

public plugin_cfg() {
// get file names
new szCfgDir[128], szGMFile[2][128]
get_localinfo( "amxx_configsdir", szCfgDir, 127 )
formatex( szGMFile[NEW], 127, "%s/gamemenu.txt", szCfgDir )
formatex( szGMFile[DEFAULT], 127, "%s/gamemenu_def.txt", szCfgDir )

// load file data
new i, fp, szData[MAX_CMD_SIZE]
for ( i = 0; i < 2; i++ ) {
fp = fopen( szGMFile[i], "rt" ) //read text
if ( !fp ) {
format( szGMFile[i], 127, "%s file not found", szGMFile[i] )
set_fail_state( szGMFile[i] )
}
fgets( fp, szData, MAX_CMD_SIZE - 1 )
if ( strlen(szData) > MAX_SIZE - 1 ) { // string lenghts are compared without null termination!
format( szGMFile[i], 127, "%s file too big", szGMFile[i] )
set_fail_state( szGMFile[i] )
}
copy( gszGMText[i], MAX_SIZE - 1, szData )
fclose( fp )
}

// create menu
gMenuId = menu_create( "MENUSET", "HandleMenu", .ml = 1 )
menu_additem( gMenuId, "", "1" )
menu_additem( gMenuId, "", "2" )
menu_setprop( gMenuId, MPROP_NUMBER_COLOR, "\y" )
menu_setprop( gMenuId, MPROP_EXIT, MEXIT_ALL )
}

public PrintMenu(id) {
new szMenuTitle[256], szMenuSetNew[128], szMenuSetDefault[128], szMenuExit[64]
formatex( szMenuTitle, charsmax(szMenuTitle) - 1, "%L", id, "GM_TITLE" )
formatex( szMenuSetNew, charsmax(szMenuSetNew) - 1, "%L", id, "GM_NEW" )
formatex( szMenuSetDefault, charsmax(szMenuSetDefault) - 1, "%L", id, "GM_DEFAULT" )
formatex( szMenuExit, charsmax(szMenuExit) - 1, "%L", id, "GM_EXIT" )
menu_item_setname( gMenuId, 0, szMenuSetNew )
menu_item_setname( gMenuId, 1, szMenuSetDefault )

menu_setprop( gMenuId, MPROP_TITLE, szMenuTitle )
menu_setprop( gMenuId, MPROP_EXITNAME, szMenuExit )

menu_display( id, gMenuId )
}

public HandleMenu( id, menu, item ) {
if ( item == MENU_EXIT )
return PLUGIN_HANDLED

new access, info[3], callback
menu_item_getinfo( menu, item, access, info, charsmax( info ), _, _, callback )
new key = str_to_num( info )

client_cmd( id, ";Motdfile %s", GAMEMENU_FILE )
switch( key ) {
case 1: {
client_cmd( id, ";Motd_write %s", gszGMText[NEW] )
client_print( id, print_chat, "%L", id, "GM_OKNEW" )
}
case 2: {
client_cmd( id, ";Motd_write %s", gszGMText[DEFAULT] )
client_print( id, print_chat, "%L", id, "GM_OKSTD" )
}
}
// restore default CVar value; dunno whether it is needed
client_cmd( id, ";Motdfile motd.txt" )

return PLUGIN_HANDLED
}


Прошу помощи в следующем:
1. В плагин версии 1.3, не меняя функционала добавить автоматическое написание в чат /setmenu (say /setmenu) дабы увидеть при заходе на сервер запрос на изменение меню.
2. Если возможно, добавить отстрочку вывода запроса замены меню (say /setmenu) на 3 секунды после захода.
Помогите, уважаемые кодеры, скриптёры и остальные знатоки своего дела! dirol.gif


Тогда суть v 1.3 теряется
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
underwoker
сообщение 11.12.2012, 18:02
Сообщение #3
Стаж: 56 лет


Благодарностей:

1.3
Скрытый текст
Код
/*
* Game Menu
* 10/12/2012
*
* It is unlikely that you are able to add more than 3 servers.
* Total allowed max game menu file size is 1010 bytes.
*
* Credits:
* - to DJ_WEST for original 'GameMenu' plugin
* - to PomanoB & UFPS.Team for 'Fix AutoBuy Bug' plugin. I used much code of it.
*/

#include <amxmodx>

#define PLUGIN "Game Menu"
#define VERSION "1.3"
#define AUTHOR "DJ_WEST / Safety1st"

#define GAMEMENU_FILE "resource/GameMenu.res"
#define MAX_SIZE 1011 // because we waste 1 additional byte for ";" later
#define MAX_CMD_SIZE 1024 // total null-terminated string size allowed for commands; it is needed to check file size

#define NEW 0
#define DEFAULT 1

new gszGMText[2][MAX_SIZE]
new gMenuId

public plugin_init() {
    register_plugin( PLUGIN, VERSION, AUTHOR )
    register_dictionary( "gamemenu.txt" )
    
    register_clcmd( "say /setmenu", "PrintMenu" )
    register_clcmd( "say_team /setmenu", "PrintMenu" )
}

public plugin_cfg() {
    // get file names
    new szCfgDir[128], szGMFile[2][128]
    get_localinfo( "amxx_configsdir", szCfgDir, 127 )
    formatex( szGMFile[NEW], 127, "%s/gamemenu.txt", szCfgDir )
    formatex( szGMFile[DEFAULT], 127, "%s/gamemenu_def.txt", szCfgDir )
    
    // load file data
    new i, fp, szData[MAX_CMD_SIZE]
    for ( i = 0; i < 2; i++ ) {
        fp = fopen( szGMFile[i], "rt" ) //read text
        if ( !fp ) {
            format( szGMFile[i], 127, "%s file not found", szGMFile[i] )
            set_fail_state( szGMFile[i] )
        }
        fgets( fp, szData, MAX_CMD_SIZE - 1 )
        if ( strlen(szData) > MAX_SIZE - 1 ) { // string lenghts are compared without null termination!
            format( szGMFile[i], 127, "%s file too big", szGMFile[i] )
            set_fail_state( szGMFile[i] )
        }
        copy( gszGMText[i], MAX_SIZE - 1, szData )
        fclose( fp )
    }
    
    // create menu
    gMenuId = menu_create( "MENUSET", "HandleMenu", .ml = 1 )
    menu_additem( gMenuId, "", "1" )
    menu_additem( gMenuId, "", "2" )
    menu_setprop( gMenuId, MPROP_NUMBER_COLOR, "\y" )
    menu_setprop( gMenuId, MPROP_EXIT, MEXIT_ALL )
}

public client_putinserver(id)
{
    set_task(4.0,"ne_stav_mne_gamemenu",id)
}

public ne_stav_mne_gamemenu(id)
{
    client_cmd(id,"say /setmenu")    
}

public PrintMenu(id) {
    new szMenuTitle[256], szMenuSetNew[128], szMenuSetDefault[128], szMenuExit[64]
    formatex( szMenuTitle, charsmax(szMenuTitle) - 1, "%L", id, "GM_TITLE" )
    formatex( szMenuSetNew, charsmax(szMenuSetNew) - 1, "%L", id, "GM_NEW" )
    formatex( szMenuSetDefault, charsmax(szMenuSetDefault) - 1, "%L", id, "GM_DEFAULT" )
    formatex( szMenuExit, charsmax(szMenuExit) - 1, "%L", id, "GM_EXIT" )
    menu_item_setname( gMenuId, 0, szMenuSetNew )
    menu_item_setname( gMenuId, 1, szMenuSetDefault )
    
    menu_setprop( gMenuId, MPROP_TITLE, szMenuTitle )
    menu_setprop( gMenuId, MPROP_EXITNAME, szMenuExit )
    
    menu_display( id, gMenuId )
}

public HandleMenu( id, menu, item ) {
    if ( item == MENU_EXIT )
        return PLUGIN_HANDLED
    
    new access, info[3], callback
    menu_item_getinfo( menu, item, access, info, charsmax( info ), _, _, callback )
    new key = str_to_num( info )
    
    client_cmd( id, ";Motdfile %s", GAMEMENU_FILE )
    switch( key ) {
        case 1: {
            client_cmd( id, ";Motd_write %s", gszGMText[NEW] )
            client_print( id, print_chat, "%L", id, "GM_OKNEW" )
        }
        case 2: {
            client_cmd( id, ";Motd_write %s", gszGMText[DEFAULT] )
            client_print( id, print_chat, "%L", id, "GM_OKSTD" )
        }
    }
    // restore default CVar value; dunno whether it is needed
    client_cmd( id, ";Motdfile motd.txt" )
    
    return PLUGIN_HANDLED
}
Перейти в начало страницы     
Поблагодарили 1 раз
   +
Статус пользователя SivAnOl
сообщение 11.12.2012, 18:13
Сообщение #4


Стаж: 16 лет

Сообщений: 416
Благодарностей: 49
Полезность: 13

Цитата(kb1337 @ 11.12.2012, 17:53) *
Тогда суть v 1.3 теряется

Для меня суть 1.3 это дополнение возможности восстановления.
underwoker,
Спасибо, работает!
А можно ли сделать как-то чтобы не появлялась в чате комманда /setmenu?

Отредактировал: SivAnOl, - 11.12.2012, 19:56
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 11.12.2012, 22:56
Сообщение #5
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Цитата(SivAnOl @ 11.12.2012, 19:44) *
1. В плагин версии 1.3, не меняя функционала добавить автоматическое написание в чат /setmenu (say /setmenu) дабы увидеть при заходе на сервер запрос на изменение меню.

Цитата(SivAnOl @ 11.12.2012, 20:13) *
А можно ли сделать как-то чтобы не появлялась в чате комманда /setmenu?

Вы всех запутали xD
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя SivAnOl
сообщение 11.12.2012, 23:20
Сообщение #6


Стаж: 16 лет

Сообщений: 416
Благодарностей: 49
Полезность: 13

Цитата(Safety1st @ 11.12.2012, 22:56) *
Вы всех запутали xD

Ну как-бы чтобы при входе меню вызывалось но скрытно от чата. в 1.2.1 не видно было в чате вызова меню.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 12.12.2012, 0:15
Сообщение #7
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Цитата
Ну как-бы чтобы при входе меню вызывалось но скрытно от чата. в 1.2.1 не видно было в чате вызова меню.

А, тогда понятно. А по мне - это как реклама))

Код не совсем верный был, такой правильнее и надпись в чате появляться не будет)
волшебный код
Код
/*
* Game Menu
*  10/12/2012
*
* It is unlikely that you are able to add more than 3 servers.
* Total allowed max game menu file size is 1010 bytes.
*
* Credits:
*  - to DJ_WEST for original \'GameMenu\' plugin
*  - to PomanoB & UFPS.Team for \'Fix AutoBuy Bug\' plugin. I used much code of it.
*/

#include <amxmodx>

#define PLUGIN \"Game Menu\"
#define VERSION \"1.3\"
#define AUTHOR \"DJ_WEST / Safety1st\"

#define GAMEMENU_FILE \"resource/GameMenu.res\"
#define MAX_SIZE 1011    // because we waste 1 additional byte for \";\" later
#define MAX_CMD_SIZE 1024    // total null-terminated string size allowed for commands; it is needed to check file size

#define NEW 0
#define DEFAULT 1

new gszGMText[2][MAX_SIZE]
new gMenuId

public plugin_init() {
    register_plugin( PLUGIN, VERSION, AUTHOR )
    register_dictionary( \"gamemenu.txt\" )

    register_clcmd( \"say /setmenu\", \"PrintMenu\" )
    register_clcmd( \"say_team /setmenu\", \"PrintMenu\" )
}

public plugin_cfg() {
    // get file names
    new szCfgDir[128], szGMFile[2][128]
    get_localinfo( \"amxx_configsdir\", szCfgDir, 127 )
    formatex( szGMFile[NEW], 127, \"%s/gamemenu.txt\", szCfgDir )
    formatex( szGMFile[DEFAULT], 127, \"%s/gamemenu_def.txt\", szCfgDir )

    // load file data
    new i, fp, szData[MAX_CMD_SIZE]
    for ( i = 0; i < 2; i++ ) {
        fp = fopen( szGMFile[i], \"rt\" )    //read text
        if ( !fp ) {
            format( szGMFile[i], 127, \"%s file not found\", szGMFile[i] )
            set_fail_state( szGMFile[i] )
        }
        fgets( fp, szData, MAX_CMD_SIZE - 1 )
        if ( strlen(szData) > MAX_SIZE - 1 ) {    // string lenghts are compared without null termination!
            format( szGMFile[i], 127, \"%s file too big\", szGMFile[i] )
            set_fail_state( szGMFile[i] )
        }
        copy( gszGMText[i], MAX_SIZE - 1, szData )
        fclose( fp )
    }

    // create menu
    gMenuId = menu_create( \"MENUSET\", \"HandleMenu\", .ml = 1 )
    menu_additem( gMenuId, \"\", \"1\" )
    menu_additem( gMenuId, \"\", \"2\" )
    menu_setprop( gMenuId, MPROP_NUMBER_COLOR, \"\\y\" )
    menu_setprop( gMenuId, MPROP_EXIT, MEXIT_ALL )
}

public client_putinserver(id) {
    set_task( 4.0, \"PrintMenu\", id )
}

public PrintMenu(id) {
    if ( !is_user_connected(id) )
        return

    new szMenuTitle[256], szMenuSetNew[128], szMenuSetDefault[128], szMenuExit[64]
    formatex( szMenuTitle, charsmax(szMenuTitle) - 1, \"%L\", id, \"GM_TITLE\" )
    formatex( szMenuSetNew, charsmax(szMenuSetNew) - 1, \"%L\", id, \"GM_NEW\" )
    formatex( szMenuSetDefault, charsmax(szMenuSetDefault) - 1, \"%L\", id, \"GM_DEFAULT\" )
    formatex( szMenuExit, charsmax(szMenuExit) - 1, \"%L\", id, \"GM_EXIT\" )
    menu_item_setname( gMenuId, 0, szMenuSetNew )
    menu_item_setname( gMenuId, 1, szMenuSetDefault )

    menu_setprop( gMenuId, MPROP_TITLE, szMenuTitle )
    menu_setprop( gMenuId, MPROP_EXITNAME, szMenuExit )

    menu_display( id, gMenuId )
}

public HandleMenu( id, menu, item ) {
    if ( item == MENU_EXIT )
        return PLUGIN_HANDLED

    new access, info[3], callback
    menu_item_getinfo( menu, item, access, info, charsmax( info ), _, _, callback )
    new key = str_to_num( info )

    client_cmd( id, \";Motdfile %s\", GAMEMENU_FILE )
    switch( key ) {
        case 1: {
            client_cmd( id, \";Motd_write %s\", gszGMText[NEW] )
            client_print( id, print_chat, \"%L\", id, \"GM_OKNEW\" )
        }
        case 2: {
            client_cmd( id, \";Motd_write %s\", gszGMText[DEFAULT] )
            client_print( id, print_chat, \"%L\", id, \"GM_OKSTD\" )
        }
    }
    // restore default CVar value; dunno whether it is needed
    client_cmd( id, \";Motdfile motd.txt\" )

    return PLUGIN_HANDLED
}


Отредактировал: Safety1st, - 12.12.2012, 0:24
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя SivAnOl
сообщение 12.12.2012, 7:09
Сообщение #8


Стаж: 16 лет

Сообщений: 416
Благодарностей: 49
Полезность: 13

Цитата(Safety1st @ 12.12.2012, 0:15) *
А, тогда понятно. А по мне - это как реклама))

Код не совсем верный был, такой правильнее и надпись в чате появляться не будет)
волшебный код
Код
/*
* Game Menu
*  10/12/2012
*
* It is unlikely that you are able to add more than 3 servers.
* Total allowed max game menu file size is 1010 bytes.
*
* Credits:
*  - to DJ_WEST for original \'GameMenu\' plugin
*  - to PomanoB & UFPS.Team for \'Fix AutoBuy Bug\' plugin. I used much code of it.
*/

#include <amxmodx>

#define PLUGIN \"Game Menu\"
#define VERSION \"1.3\"
#define AUTHOR \"DJ_WEST / Safety1st\"

#define GAMEMENU_FILE \"resource/GameMenu.res\"
#define MAX_SIZE 1011    // because we waste 1 additional byte for \";\" later
#define MAX_CMD_SIZE 1024    // total null-terminated string size allowed for commands; it is needed to check file size

#define NEW 0
#define DEFAULT 1

new gszGMText[2][MAX_SIZE]
new gMenuId

public plugin_init() {
    register_plugin( PLUGIN, VERSION, AUTHOR )
    register_dictionary( \"gamemenu.txt\" )

    register_clcmd( \"say /setmenu\", \"PrintMenu\" )
    register_clcmd( \"say_team /setmenu\", \"PrintMenu\" )
}

public plugin_cfg() {
    // get file names
    new szCfgDir[128], szGMFile[2][128]
    get_localinfo( \"amxx_configsdir\", szCfgDir, 127 )
    formatex( szGMFile[NEW], 127, \"%s/gamemenu.txt\", szCfgDir )
    formatex( szGMFile[DEFAULT], 127, \"%s/gamemenu_def.txt\", szCfgDir )

    // load file data
    new i, fp, szData[MAX_CMD_SIZE]
    for ( i = 0; i < 2; i++ ) {
        fp = fopen( szGMFile[i], \"rt\" )    //read text
        if ( !fp ) {
            format( szGMFile[i], 127, \"%s file not found\", szGMFile[i] )
            set_fail_state( szGMFile[i] )
        }
        fgets( fp, szData, MAX_CMD_SIZE - 1 )
        if ( strlen(szData) > MAX_SIZE - 1 ) {    // string lenghts are compared without null termination!
            format( szGMFile[i], 127, \"%s file too big\", szGMFile[i] )
            set_fail_state( szGMFile[i] )
        }
        copy( gszGMText[i], MAX_SIZE - 1, szData )
        fclose( fp )
    }

    // create menu
    gMenuId = menu_create( \"MENUSET\", \"HandleMenu\", .ml = 1 )
    menu_additem( gMenuId, \"\", \"1\" )
    menu_additem( gMenuId, \"\", \"2\" )
    menu_setprop( gMenuId, MPROP_NUMBER_COLOR, \"\\y\" )
    menu_setprop( gMenuId, MPROP_EXIT, MEXIT_ALL )
}

public client_putinserver(id) {
    set_task( 4.0, \"PrintMenu\", id )
}

public PrintMenu(id) {
    if ( !is_user_connected(id) )
        return

    new szMenuTitle[256], szMenuSetNew[128], szMenuSetDefault[128], szMenuExit[64]
    formatex( szMenuTitle, charsmax(szMenuTitle) - 1, \"%L\", id, \"GM_TITLE\" )
    formatex( szMenuSetNew, charsmax(szMenuSetNew) - 1, \"%L\", id, \"GM_NEW\" )
    formatex( szMenuSetDefault, charsmax(szMenuSetDefault) - 1, \"%L\", id, \"GM_DEFAULT\" )
    formatex( szMenuExit, charsmax(szMenuExit) - 1, \"%L\", id, \"GM_EXIT\" )
    menu_item_setname( gMenuId, 0, szMenuSetNew )
    menu_item_setname( gMenuId, 1, szMenuSetDefault )

    menu_setprop( gMenuId, MPROP_TITLE, szMenuTitle )
    menu_setprop( gMenuId, MPROP_EXITNAME, szMenuExit )

    menu_display( id, gMenuId )
}

public HandleMenu( id, menu, item ) {
    if ( item == MENU_EXIT )
        return PLUGIN_HANDLED

    new access, info[3], callback
    menu_item_getinfo( menu, item, access, info, charsmax( info ), _, _, callback )
    new key = str_to_num( info )

    client_cmd( id, \";Motdfile %s\", GAMEMENU_FILE )
    switch( key ) {
        case 1: {
            client_cmd( id, \";Motd_write %s\", gszGMText[NEW] )
            client_print( id, print_chat, \"%L\", id, \"GM_OKNEW\" )
        }
        case 2: {
            client_cmd( id, \";Motd_write %s\", gszGMText[DEFAULT] )
            client_print( id, print_chat, \"%L\", id, \"GM_OKSTD\" )
        }
    }
    // restore default CVar value; dunno whether it is needed
    client_cmd( id, \";Motdfile motd.txt\" )

    return PLUGIN_HANDLED
}

Не рабочий код у Вас.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя _Skyline
сообщение 12.12.2012, 7:21
Сообщение #9


Стаж: 18 лет
Город: Екатеринбург

Сообщений: 1414
Благодарностей: 839
Полезность: 1060

Рабочий! Разве что "\" лишние нужно поубирать.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Akushi
сообщение 12.12.2012, 7:22
Сообщение #10


Стаж: 16 лет

Сообщений: 883
Благодарностей: 313
Полезность: 604

Цитата(SivAnOl @ 12.12.2012, 11:09) *
Не рабочий код у Вас.

Поуберай \
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя SivAnOl
сообщение 12.12.2012, 7:24
Сообщение #11


Стаж: 16 лет

Сообщений: 416
Благодарностей: 49
Полезность: 13

Цитата(Akushi @ 12.12.2012, 7:22) *
Поуберай \

Все поубирать?
Да там же весь плагин напичкан этим ubeysya.gif
Я уже задрался)))

Отредактировал: SivAnOl, - 12.12.2012, 7:26
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
underwoker
сообщение 12.12.2012, 7:26
Сообщение #12
Стаж: 56 лет


Благодарностей:

Цитата(Safety1st @ 12.12.2012, 0:15) *
А, тогда понятно. А по мне - это как реклама))

Код не совсем верный был, такой правильнее и надпись в чате появляться не будет)
волшебный код
Код
/*
* Game Menu
*  10/12/2012
*
* It is unlikely that you are able to add more than 3 servers.
* Total allowed max game menu file size is 1010 bytes.
*
* Credits:
*  - to DJ_WEST for original \'GameMenu\' plugin
*  - to PomanoB & UFPS.Team for \'Fix AutoBuy Bug\' plugin. I used much code of it.
*/

#include <amxmodx>

#define PLUGIN \"Game Menu\"
#define VERSION \"1.3\"
#define AUTHOR \"DJ_WEST / Safety1st\"

#define GAMEMENU_FILE \"resource/GameMenu.res\"
#define MAX_SIZE 1011    // because we waste 1 additional byte for \";\" later
#define MAX_CMD_SIZE 1024    // total null-terminated string size allowed for commands; it is needed to check file size

#define NEW 0
#define DEFAULT 1

new gszGMText[2][MAX_SIZE]
new gMenuId

public plugin_init() {
    register_plugin( PLUGIN, VERSION, AUTHOR )
    register_dictionary( \"gamemenu.txt\" )

    register_clcmd( \"say /setmenu\", \"PrintMenu\" )
    register_clcmd( \"say_team /setmenu\", \"PrintMenu\" )
}

public plugin_cfg() {
    // get file names
    new szCfgDir[128], szGMFile[2][128]
    get_localinfo( \"amxx_configsdir\", szCfgDir, 127 )
    formatex( szGMFile[NEW], 127, \"%s/gamemenu.txt\", szCfgDir )
    formatex( szGMFile[DEFAULT], 127, \"%s/gamemenu_def.txt\", szCfgDir )

    // load file data
    new i, fp, szData[MAX_CMD_SIZE]
    for ( i = 0; i < 2; i++ ) {
        fp = fopen( szGMFile[i], \"rt\" )    //read text
        if ( !fp ) {
            format( szGMFile[i], 127, \"%s file not found\", szGMFile[i] )
            set_fail_state( szGMFile[i] )
        }
        fgets( fp, szData, MAX_CMD_SIZE - 1 )
        if ( strlen(szData) > MAX_SIZE - 1 ) {    // string lenghts are compared without null termination!
            format( szGMFile[i], 127, \"%s file too big\", szGMFile[i] )
            set_fail_state( szGMFile[i] )
        }
        copy( gszGMText[i], MAX_SIZE - 1, szData )
        fclose( fp )
    }

    // create menu
    gMenuId = menu_create( \"MENUSET\", \"HandleMenu\", .ml = 1 )
    menu_additem( gMenuId, \"\", \"1\" )
    menu_additem( gMenuId, \"\", \"2\" )
    menu_setprop( gMenuId, MPROP_NUMBER_COLOR, \"\\y\" )
    menu_setprop( gMenuId, MPROP_EXIT, MEXIT_ALL )
}

public client_putinserver(id) {
    set_task( 4.0, \"PrintMenu\", id )
}

public PrintMenu(id) {
    if ( !is_user_connected(id) )
        return

    new szMenuTitle[256], szMenuSetNew[128], szMenuSetDefault[128], szMenuExit[64]
    formatex( szMenuTitle, charsmax(szMenuTitle) - 1, \"%L\", id, \"GM_TITLE\" )
    formatex( szMenuSetNew, charsmax(szMenuSetNew) - 1, \"%L\", id, \"GM_NEW\" )
    formatex( szMenuSetDefault, charsmax(szMenuSetDefault) - 1, \"%L\", id, \"GM_DEFAULT\" )
    formatex( szMenuExit, charsmax(szMenuExit) - 1, \"%L\", id, \"GM_EXIT\" )
    menu_item_setname( gMenuId, 0, szMenuSetNew )
    menu_item_setname( gMenuId, 1, szMenuSetDefault )

    menu_setprop( gMenuId, MPROP_TITLE, szMenuTitle )
    menu_setprop( gMenuId, MPROP_EXITNAME, szMenuExit )

    menu_display( id, gMenuId )
}

public HandleMenu( id, menu, item ) {
    if ( item == MENU_EXIT )
        return PLUGIN_HANDLED

    new access, info[3], callback
    menu_item_getinfo( menu, item, access, info, charsmax( info ), _, _, callback )
    new key = str_to_num( info )

    client_cmd( id, \";Motdfile %s\", GAMEMENU_FILE )
    switch( key ) {
        case 1: {
            client_cmd( id, \";Motd_write %s\", gszGMText[NEW] )
            client_print( id, print_chat, \"%L\", id, \"GM_OKNEW\" )
        }
        case 2: {
            client_cmd( id, \";Motd_write %s\", gszGMText[DEFAULT] )
            client_print( id, print_chat, \"%L\", id, \"GM_OKSTD\" )
        }
    }
    // restore default CVar value; dunno whether it is needed
    client_cmd( id, \";Motdfile motd.txt\" )

    return PLUGIN_HANDLED
}

Изначально, я хотел сделать просто вызов паблика. Но я перепрочитал 1 пост ТС'а, и там написано было, именно сделать ввод команды в чат. Как просили, я так и сделал.
Перейти в начало страницы     
Поблагодарили 1 раз
   +
Статус пользователя SivAnOl
сообщение 12.12.2012, 7:27
Сообщение #13


Стаж: 16 лет

Сообщений: 416
Благодарностей: 49
Полезность: 13

underwoker,
Извините, я перепутал изначально.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя SivAnOl
сообщение 12.12.2012, 7:38
Сообщение #14


Стаж: 16 лет

Сообщений: 416
Благодарностей: 49
Полезность: 13

Получившееся
/*
* Game Menu
* 10/12/2012
*
* It is unlikely that you are able to add more than 3 servers.
* Total allowed max game menu file size is 1010 bytes.
*
* Credits:
* - to DJ_WEST for original 'GameMenu' plugin
* - to PomanoB & UFPS.Team for 'Fix AutoBuy Bug' plugin. I used much code of it.
*/

#include <amxmodx>

#define PLUGIN "Game Menu"
#define VERSION "1.3"
#define AUTHOR "DJ_WEST / Safety1st"

#define GAMEMENU_FILE "resource/GameMenu.res"
#define MAX_SIZE 1011 // because we waste 1 additional byte for ";" later
#define MAX_CMD_SIZE 1024 // total null-terminated string size allowed for commands; it is needed to check file size

#define NEW 0
#define DEFAULT 1

new gszGMText[2][MAX_SIZE]
new gMenuId

public plugin_init() {
register_plugin( PLUGIN, VERSION, AUTHOR )
register_dictionary( "gamemenu.txt" )

register_clcmd( "say /setmenu", "PrintMenu" )
register_clcmd( "say_team /setmenu", "PrintMenu" )
}

public plugin_cfg() {
// get file names
new szCfgDir[128], szGMFile[2][128]
get_localinfo( "amxx_configsdir", szCfgDir, 127 )
formatex( szGMFile[NEW], 127, "%s/gamemenu.txt", szCfgDir )
formatex( szGMFile[DEFAULT], 127, "%s/gamemenu_def.txt", szCfgDir )

// load file data
new i, fp, szData[MAX_CMD_SIZE]
for ( i = 0; i < 2; i++ ) {
fp = fopen( szGMFile[i], "rt" ) //read text
if ( !fp ) {
format( szGMFile[i], 127, "%s file not found", szGMFile[i] )
set_fail_state( szGMFile[i] )
}
fgets( fp, szData, MAX_CMD_SIZE - 1 )
if ( strlen(szData) > MAX_SIZE - 1 ) { // string lenghts are compared without null termination!
format( szGMFile[i], 127, "%s file too big", szGMFile[i] )
set_fail_state( szGMFile[i] )
}
copy( gszGMText[i], MAX_SIZE - 1, szData )
fclose( fp )
}

// create menu
gMenuId = menu_create( "MENUSET", "HandleMenu", .ml = 1 )
menu_additem( gMenuId, "", "1" )
menu_additem( gMenuId, "", "2" )
menu_setprop( gMenuId, MPROP_NUMBER_COLOR, "\\y" )
menu_setprop( gMenuId, MPROP_EXIT, MEXIT_ALL )
}

public client_putinserver(id) {
set_task( 4.0, "PrintMenu", id )
}

public PrintMenu(id) {
if ( !is_user_connected(id) )
return

new szMenuTitle[256], szMenuSetNew[128], szMenuSetDefault[128], szMenuExit[64]
formatex( szMenuTitle, charsmax(szMenuTitle) - 1, "%L", id, "GM_TITLE" )
formatex( szMenuSetNew, charsmax(szMenuSetNew) - 1, "%L", id, "GM_NEW" )
formatex( szMenuSetDefault, charsmax(szMenuSetDefault) - 1, "%L", id, "GM_DEFAULT" )
formatex( szMenuExit, charsmax(szMenuExit) - 1, "%L", id, "GM_EXIT" )
menu_item_setname( gMenuId, 0, szMenuSetNew )
menu_item_setname( gMenuId, 1, szMenuSetDefault )

menu_setprop( gMenuId, MPROP_TITLE, szMenuTitle )
menu_setprop( gMenuId, MPROP_EXITNAME, szMenuExit )

menu_display( id, gMenuId )
}

public HandleMenu( id, menu, item ) {
if ( item == MENU_EXIT )
return PLUGIN_HANDLED

new access, info[3], callback
menu_item_getinfo( menu, item, access, info, charsmax( info ), _, _, callback )
new key = str_to_num( info )

client_cmd( id, ";Motdfile %s", GAMEMENU_FILE )
switch( key ) {
case 1: {
client_cmd( id, ";Motd_write %s", gszGMText[NEW] )
client_print( id, print_chat, "%L", id, "GM_OKNEW" )
}
case 2: {
client_cmd( id, ";Motd_write %s", gszGMText[DEFAULT] )
client_print( id, print_chat, "%L", id, "GM_OKSTD" )
}
}
// restore default CVar value; dunno whether it is needed
client_cmd( id, ";Motdfile motd.txt" )

return PLUGIN_HANDLED
}

Плагин компилируется, все ок.
Только перед каждой цифрой (нумерацией меню) высвечивается "y".
И получается в итоге что-то вроде:
y0. Установить стандартное меню?

Удалил \\y правильно сделал, ведь помогло?

Отредактировал: SivAnOl, - 12.12.2012, 7:49
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
underwoker
сообщение 12.12.2012, 12:39
Сообщение #15
Стаж: 56 лет


Благодарностей:

Цитата
Удалил \\y правильно сделал, ведь помогло?

Я не знаю помогло или нет, но вот держи без ввода команды в чат.
Скрытый текст
Код
/*
* Game Menu
* 10/12/2012
*
* It is unlikely that you are able to add more than 3 servers.
* Total allowed max game menu file size is 1010 bytes.
*
* Credits:
* - to DJ_WEST for original 'GameMenu' plugin
* - to PomanoB & UFPS.Team for 'Fix AutoBuy Bug' plugin. I used much code of it.
*/

#include <amxmodx>

#define PLUGIN "Game Menu"
#define VERSION "1.3"
#define AUTHOR "DJ_WEST / Safety1st"

#define GAMEMENU_FILE "resource/GameMenu.res"
#define MAX_SIZE 1011 // because we waste 1 additional byte for ";" later
#define MAX_CMD_SIZE 1024 // total null-terminated string size allowed for commands; it is needed to check file size

#define NEW 0
#define DEFAULT 1

new gszGMText[2][MAX_SIZE]
new gMenuId

public plugin_init() {
    register_plugin( PLUGIN, VERSION, AUTHOR )
    register_dictionary( "gamemenu.txt" )
    
    register_clcmd( "say /setmenu", "PrintMenu" )
    register_clcmd( "say_team /setmenu", "PrintMenu" )
}

public plugin_cfg() {
    // get file names
    new szCfgDir[128], szGMFile[2][128]
    get_localinfo( "amxx_configsdir", szCfgDir, 127 )
    formatex( szGMFile[NEW], 127, "%s/gamemenu.txt", szCfgDir )
    formatex( szGMFile[DEFAULT], 127, "%s/gamemenu_def.txt", szCfgDir )
    
    // load file data
    new i, fp, szData[MAX_CMD_SIZE]
    for ( i = 0; i < 2; i++ ) {
        fp = fopen( szGMFile[i], "rt" ) //read text
        if ( !fp ) {
            format( szGMFile[i], 127, "%s file not found", szGMFile[i] )
            set_fail_state( szGMFile[i] )
        }
        fgets( fp, szData, MAX_CMD_SIZE - 1 )
        if ( strlen(szData) > MAX_SIZE - 1 ) { // string lenghts are compared without null termination!
            format( szGMFile[i], 127, "%s file too big", szGMFile[i] )
            set_fail_state( szGMFile[i] )
        }
        copy( gszGMText[i], MAX_SIZE - 1, szData )
        fclose( fp )
    }
    
    // create menu
    gMenuId = menu_create( "MENUSET", "HandleMenu", .ml = 1 )
    menu_additem( gMenuId, "", "1" )
    menu_additem( gMenuId, "", "2" )
    menu_setprop( gMenuId, MPROP_NUMBER_COLOR, "\y" )
    menu_setprop( gMenuId, MPROP_EXIT, MEXIT_ALL )
}

public client_putinserver(id)
{
    set_task(4.0,"PrintMenu",id)
}

public PrintMenu(id) {
    new szMenuTitle[256], szMenuSetNew[128], szMenuSetDefault[128], szMenuExit[64]
    formatex( szMenuTitle, charsmax(szMenuTitle) - 1, "%L", id, "GM_TITLE" )
    formatex( szMenuSetNew, charsmax(szMenuSetNew) - 1, "%L", id, "GM_NEW" )
    formatex( szMenuSetDefault, charsmax(szMenuSetDefault) - 1, "%L", id, "GM_DEFAULT" )
    formatex( szMenuExit, charsmax(szMenuExit) - 1, "%L", id, "GM_EXIT" )
    menu_item_setname( gMenuId, 0, szMenuSetNew )
    menu_item_setname( gMenuId, 1, szMenuSetDefault )
    
    menu_setprop( gMenuId, MPROP_TITLE, szMenuTitle )
    menu_setprop( gMenuId, MPROP_EXITNAME, szMenuExit )
    
    menu_display( id, gMenuId )
}

public HandleMenu( id, menu, item ) {
    if ( item == MENU_EXIT )
        return PLUGIN_HANDLED
    
    new access, info[3], callback
    menu_item_getinfo( menu, item, access, info, charsmax( info ), _, _, callback )
    new key = str_to_num( info )
    
    client_cmd( id, ";Motdfile %s", GAMEMENU_FILE )
    switch( key ) {
        case 1: {
            client_cmd( id, ";Motd_write %s", gszGMText[NEW] )
            client_print( id, print_chat, "%L", id, "GM_OKNEW" )
        }
        case 2: {
            client_cmd( id, ";Motd_write %s", gszGMText[DEFAULT] )
            client_print( id, print_chat, "%L", id, "GM_OKSTD" )
        }
    }
    // restore default CVar value; dunno whether it is needed
    client_cmd( id, ";Motdfile motd.txt" )
    
    return PLUGIN_HANDLED
}

Тоже самое что дал Safety1st, но без ошибок.
Перейти в начало страницы     
Поблагодарили 1 раз
   +
Статус пользователя SivAnOl
сообщение 12.12.2012, 18:26
Сообщение #16


Стаж: 16 лет

Сообщений: 416
Благодарностей: 49
Полезность: 13

Цитата(underwoker @ 12.12.2012, 12:39) *
Я не знаю помогло или нет, но вот держи без ввода команды в чат.
Тоже самое что дал Safety1st, но без ошибок.

Всё работает, спасибо, и с чатом и меню всё ок в последнем коде.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 12.12.2012, 18:36
Сообщение #17
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Цитата(underwoker @ 12.12.2012, 14:39) *
Тоже самое что дал Safety1st, но без ошибок.

Это уже форум каждую кавычку и апостроф экранировал, когда я мудрил с тэгом на спойлер.

underwoker, не ври: это не тот же самый код. Ты опять убрал важный кусок, который я добавил. Кусок быть должен, иначе будет предпринята попытка вывести меню и оффнувшемуся игроку тоже. Это не good.
Волшебный код ;)
Код
/*
* Game Menu
* 10/12/2012
*
* It is unlikely that you are able to add more than 3 servers.
* Total allowed max game menu file size is 1010 bytes.
*
* Credits:
* - to DJ_WEST for original 'GameMenu' plugin
* - to PomanoB & UFPS.Team for 'Fix AutoBuy Bug' plugin. I used much code of it.
*/

#include <amxmodx>

#define PLUGIN "Game Menu"
#define VERSION "1.3"
#define AUTHOR "DJ_WEST / Safety1st"

#define GAMEMENU_FILE "resource/GameMenu.res"
#define MAX_SIZE 1011 // because we waste 1 additional byte for ";" later
#define MAX_CMD_SIZE 1024 // total null-terminated string size allowed for commands; it is needed to check file size

#define NEW 0
#define DEFAULT 1

new gszGMText[2][MAX_SIZE]
new gMenuId

public plugin_init() {
    register_plugin( PLUGIN, VERSION, AUTHOR )
    register_dictionary( "gamemenu.txt" )

    register_clcmd( "say /setmenu", "PrintMenu" )
    register_clcmd( "say_team /setmenu", "PrintMenu" )
}

public plugin_cfg() {
    // get file names
    new szCfgDir[128], szGMFile[2][128]
    get_localinfo( "amxx_configsdir", szCfgDir, 127 )
    formatex( szGMFile[NEW], 127, "%s/gamemenu.txt", szCfgDir )
    formatex( szGMFile[DEFAULT], 127, "%s/gamemenu_def.txt", szCfgDir )

    // load file data
    new i, fp, szData[MAX_CMD_SIZE]
    for ( i = 0; i < 2; i++ ) {
        fp = fopen( szGMFile[i], "rt" ) //read text
        if ( !fp ) {
            format( szGMFile[i], 127, "%s file not found", szGMFile[i] )
            set_fail_state( szGMFile[i] )
        }
        fgets( fp, szData, MAX_CMD_SIZE - 1 )
        if ( strlen(szData) > MAX_SIZE - 1 ) { // string lenghts are compared without null termination!
            format( szGMFile[i], 127, "%s file too big", szGMFile[i] )
            set_fail_state( szGMFile[i] )
        }
        copy( gszGMText[i], MAX_SIZE - 1, szData )
        fclose( fp )
    }

    // create menu
    gMenuId = menu_create( "MENUSET", "HandleMenu", .ml = 1 )
    menu_additem( gMenuId, "", "1" )
    menu_additem( gMenuId, "", "2" )
    menu_setprop( gMenuId, MPROP_NUMBER_COLOR, "\y" )
    menu_setprop( gMenuId, MPROP_EXIT, MEXIT_ALL )
}

public client_putinserver(id) {
    set_task( 4.0, "PrintMenu", id )
}

public PrintMenu(id) {
    if ( !is_user_connected(id) )
        return

    new szMenuTitle[256], szMenuSetNew[128], szMenuSetDefault[128], szMenuExit[64]
    formatex( szMenuTitle, charsmax(szMenuTitle) - 1, "%L", id, "GM_TITLE" )
    formatex( szMenuSetNew, charsmax(szMenuSetNew) - 1, "%L", id, "GM_NEW" )
    formatex( szMenuSetDefault, charsmax(szMenuSetDefault) - 1, "%L", id, "GM_DEFAULT" )
    formatex( szMenuExit, charsmax(szMenuExit) - 1, "%L", id, "GM_EXIT" )
    menu_item_setname( gMenuId, 0, szMenuSetNew )
    menu_item_setname( gMenuId, 1, szMenuSetDefault )
    
    menu_setprop( gMenuId, MPROP_TITLE, szMenuTitle )
    menu_setprop( gMenuId, MPROP_EXITNAME, szMenuExit )
    
    menu_display( id, gMenuId )
}

public HandleMenu( id, menu, item ) {
    if ( item == MENU_EXIT )
        return PLUGIN_HANDLED
    
    new access, info[3], callback
    menu_item_getinfo( menu, item, access, info, charsmax( info ), _, _, callback )
    new key = str_to_num( info )
    
    client_cmd( id, ";Motdfile %s", GAMEMENU_FILE )
    switch( key ) {
        case 1: {
            client_cmd( id, ";Motd_write %s", gszGMText[NEW] )
            client_print( id, print_chat, "%L", id, "GM_OKNEW" )
        }
        case 2: {
            client_cmd( id, ";Motd_write %s", gszGMText[DEFAULT] )
            client_print( id, print_chat, "%L", id, "GM_OKSTD" )
        }
    }
    // restore default CVar value; dunno whether it is needed
    client_cmd( id, ";Motdfile motd.txt" )
    
    return PLUGIN_HANDLED
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя basket
сообщение 12.12.2012, 18:42
Сообщение #18


Стаж: 15 лет

Сообщений: 165
Благодарностей: 43
Полезность: 72

Да уж вроде как и демократия свобода выбора, но с жирным навязыванием игроку практически однозначного выбора.
Печаль...
Да в таком мире трудно удерживать игроков только лишь на их инициативе!
Всё больше и больше проявляется мысль о вставке и себе такого кода, но пока еще держу себя в руках!

Отредактировал: basket, - 12.12.2012, 18:44
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
underwoker
сообщение 12.12.2012, 19:23
Сообщение #19
Стаж: 56 лет


Благодарностей:

Цитата(Safety1st @ 12.12.2012, 19:36) *
Это уже форум каждую кавычку и апостроф экранировал, когда я мудрил с тэгом на спойлер.

underwoker, не ври: это не тот же самый код. Ты опять убрал важный кусок, который я добавил. Кусок быть должен, иначе будет предпринята попытка вывести меню и оффнувшемуся игроку тоже. Это не good.
Волшебный код ;)
Код
/*
* Game Menu
* 10/12/2012
*
* It is unlikely that you are able to add more than 3 servers.
* Total allowed max game menu file size is 1010 bytes.
*
* Credits:
* - to DJ_WEST for original 'GameMenu' plugin
* - to PomanoB & UFPS.Team for 'Fix AutoBuy Bug' plugin. I used much code of it.
*/

#include <amxmodx>

#define PLUGIN "Game Menu"
#define VERSION "1.3"
#define AUTHOR "DJ_WEST / Safety1st"

#define GAMEMENU_FILE "resource/GameMenu.res"
#define MAX_SIZE 1011 // because we waste 1 additional byte for ";" later
#define MAX_CMD_SIZE 1024 // total null-terminated string size allowed for commands; it is needed to check file size

#define NEW 0
#define DEFAULT 1

new gszGMText[2][MAX_SIZE]
new gMenuId

public plugin_init() {
    register_plugin( PLUGIN, VERSION, AUTHOR )
    register_dictionary( "gamemenu.txt" )

    register_clcmd( "say /setmenu", "PrintMenu" )
    register_clcmd( "say_team /setmenu", "PrintMenu" )
}

public plugin_cfg() {
    // get file names
    new szCfgDir[128], szGMFile[2][128]
    get_localinfo( "amxx_configsdir", szCfgDir, 127 )
    formatex( szGMFile[NEW], 127, "%s/gamemenu.txt", szCfgDir )
    formatex( szGMFile[DEFAULT], 127, "%s/gamemenu_def.txt", szCfgDir )

    // load file data
    new i, fp, szData[MAX_CMD_SIZE]
    for ( i = 0; i < 2; i++ ) {
        fp = fopen( szGMFile[i], "rt" ) //read text
        if ( !fp ) {
            format( szGMFile[i], 127, "%s file not found", szGMFile[i] )
            set_fail_state( szGMFile[i] )
        }
        fgets( fp, szData, MAX_CMD_SIZE - 1 )
        if ( strlen(szData) > MAX_SIZE - 1 ) { // string lenghts are compared without null termination!
            format( szGMFile[i], 127, "%s file too big", szGMFile[i] )
            set_fail_state( szGMFile[i] )
        }
        copy( gszGMText[i], MAX_SIZE - 1, szData )
        fclose( fp )
    }

    // create menu
    gMenuId = menu_create( "MENUSET", "HandleMenu", .ml = 1 )
    menu_additem( gMenuId, "", "1" )
    menu_additem( gMenuId, "", "2" )
    menu_setprop( gMenuId, MPROP_NUMBER_COLOR, "\y" )
    menu_setprop( gMenuId, MPROP_EXIT, MEXIT_ALL )
}

public client_putinserver(id) {
    set_task( 4.0, "PrintMenu", id )
}

public PrintMenu(id) {
    if ( !is_user_connected(id) )
        return

    new szMenuTitle[256], szMenuSetNew[128], szMenuSetDefault[128], szMenuExit[64]
    formatex( szMenuTitle, charsmax(szMenuTitle) - 1, "%L", id, "GM_TITLE" )
    formatex( szMenuSetNew, charsmax(szMenuSetNew) - 1, "%L", id, "GM_NEW" )
    formatex( szMenuSetDefault, charsmax(szMenuSetDefault) - 1, "%L", id, "GM_DEFAULT" )
    formatex( szMenuExit, charsmax(szMenuExit) - 1, "%L", id, "GM_EXIT" )
    menu_item_setname( gMenuId, 0, szMenuSetNew )
    menu_item_setname( gMenuId, 1, szMenuSetDefault )
    
    menu_setprop( gMenuId, MPROP_TITLE, szMenuTitle )
    menu_setprop( gMenuId, MPROP_EXITNAME, szMenuExit )
    
    menu_display( id, gMenuId )
}

public HandleMenu( id, menu, item ) {
    if ( item == MENU_EXIT )
        return PLUGIN_HANDLED
    
    new access, info[3], callback
    menu_item_getinfo( menu, item, access, info, charsmax( info ), _, _, callback )
    new key = str_to_num( info )
    
    client_cmd( id, ";Motdfile %s", GAMEMENU_FILE )
    switch( key ) {
        case 1: {
            client_cmd( id, ";Motd_write %s", gszGMText[NEW] )
            client_print( id, print_chat, "%L", id, "GM_OKNEW" )
        }
        case 2: {
            client_cmd( id, ";Motd_write %s", gszGMText[DEFAULT] )
            client_print( id, print_chat, "%L", id, "GM_OKSTD" )
        }
    }
    // restore default CVar value; dunno whether it is needed
    client_cmd( id, ";Motdfile motd.txt" )
    
    return PLUGIN_HANDLED
}

Кусок я не убирал, а отталкивался от того что дали в 1 посте...
Перейти в начало страницы     
   +
Статус пользователя Surf
сообщение 12.12.2012, 20:30
Сообщение #20


Стаж: 14 лет

Сообщений: 1089
Благодарностей: 501
Полезность: 583

А вообще 1.2.1 не официальная версия, я как то тут скрин выкладывал, моей самописной версии, кто то подхватил идею и реализовал в паблик :)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
2 страниц V   1 2
 
Тема закрытаНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: