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

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

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

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

Требуется помощь в создании меню.

, Нужно дописать проверку игрока.
Статус пользователя Sonic2790
сообщение 26.7.2012, 21:23
Сообщение #1


Стаж: 18 лет

Сообщений: 236
Благодарностей: 38
Полезность: 142

Здравствуйте, ув. скриптеры.

Требуется помощь в создании меню, а точнее в дополнительной проверке игрока - жи ли он или нет.

Данное меню сделано для плагина amx_destroy - в народе "Ломалка кс". Суть проблемы такова, что плагин может ломать кс только тем игрокам, кто в данный момент жив и играет.

Просьба дописать в менюшку проверку на живучесть игрока, которому надо сломать КС. И если он мертв - вывести админу информацию в чат, например "Игрок %S мертв! Сломать CS можно только живому игроку!

Исходник меню:
Код
    #include <amxmodx>
    #include <fun>

    #define PLUGIN_NAME        "amx_destroy MENU"
    #define PLUGIN_VERSION    "1.0"
    #define PLUGIN_AUTHOR    "Sonic2790"

    public plugin_init()
    {
    register_plugin( PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR )
    register_clcmd("amx_destroymenu", "Destroy_Menu", ADMIN_CVAR, "- display destroy menu.")
    }

    public Destroy_Menu(id)
    {
        new i_Menu = menu_create("\rСломать CS:", "menu_handler")
        new s_Players[32], i_Num, i_Player
        new s_Name[32], s_Player[10]
        get_players(s_Players, i_Num)
        for (new i; i < i_Num; i++)
        {
            i_Player = s_Players[i]

            get_user_name(i_Player, s_Name, charsmax(s_Name))
            num_to_str(i_Player, s_Player, charsmax(s_Player))

            menu_additem(i_Menu, s_Name, s_Player, 0)

        }

        menu_display(id, i_Menu, 0)
    }
    
    public menu_handler(id, menu, item)
    {
        if (item == MENU_EXIT)
        {
            menu_destroy(menu)
            return PLUGIN_HANDLED
        }

        new s_Data[6], s_Name[64], i_Access, i_Callback
        menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
        client_cmd(id, "amx_destroy %s", s_Name)
        menu_destroy(menu)
        return PLUGIN_HANDLED
     }


Сам допереть что то не могу. Примерно понял что надо использовать функцию if (is_user_alive(id)). Но как именно - не понял(

Отредактировал: Sonic2790, - 26.7.2012, 21:24
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя GOOD FELLOW
сообщение 28.7.2012, 14:25
Сообщение #2


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

Стаж: 13 лет

Сообщений: 2294
Благодарностей: 1187
Полезность: 890

Код
#include <amxmodx>
#include <fun>
#include <color_print>

    #define PLUGIN_NAME        "amx_destroy MENU"
    #define PLUGIN_VERSION    "1.0"
    #define PLUGIN_AUTHOR    "Sonic2790"

    public plugin_init()
    {
    register_plugin( PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR )
    register_clcmd("amx_destroymenu", "Destroy_Menu", ADMIN_CVAR, "- display destroy menu.")
    }

    public Destroy_Menu(id)
    {
        new i_Menu = menu_create("\rСломать CS:", "menu_handler")
        new s_Players[32], i_Num, i_Player
        new s_Name[32], s_Player[10]
        get_players(s_Players, i_Num)
        for (new i; i < i_Num; i++)
        {
            i_Player = s_Players[i]

            get_user_name(i_Player, s_Name, charsmax(s_Name))
            num_to_str(i_Player, s_Player, charsmax(s_Player))

            menu_additem(i_Menu, s_Name, s_Player, 0)

        }

        menu_display(id, i_Menu, 0)
    }
    
    public menu_handler(id, menu, item)
    {
        if (item == MENU_EXIT)
        {
            menu_destroy(menu)
            return PLUGIN_HANDLED
        }

        new s_Data[6], s_Name[64], i_Access, i_Callback
        menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
        if(is_user_alive(id))
        {
        client_cmd(id, "amx_destroy %s", s_Name)
        menu_destroy(menu)
        }
        else
        {
        color_print(id, "^3Команда недоступна. Игрок ^4МЕРТВ")
        return PLUGIN_HANDLED
     }


Пробуй.

Отредактировал: GOOD FELLOW, - 28.7.2012, 14:26
Прикрепленные файлы:
Прикрепленный файл  color_print.rar ( 409 байт ) Кол-во скачиваний: 19
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Sonic2790
сообщение 28.7.2012, 22:59
Сообщение #3


Стаж: 18 лет

Сообщений: 236
Благодарностей: 38
Полезность: 142

Не. Не то =) id как раз в данном случае - это админ, который ХОЧЕТ сломать кс. А мне нужно узнать жив ли ИГРОК, КОТОРОМУ надо сломать кс :D В команде, которая отправляется в консоль админу этот игрок обозначен как s_Name. Пробовал if(is_user_alive(s_Name)), но чет компилятор ругается ((
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя AndrewZ
сообщение 29.7.2012, 0:15
Сообщение #4


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

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


Сообщений: 4700
Благодарностей: 2452
Полезность: 1018

на s_Name ругается потому что в него записан ник игрока а не его id..
Мне аж самому интересно стало, надо подождать пр@ скриптера. У меня есть пара рабочих идей, но засмеют же :D

:c
Такая мысль засунуть item как id (не знаю что в нем записано, но вдруг там номера пунктов от 1 до 32? :D)


Отредактировал: AndrewZ, - 29.7.2012, 0:33


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Rejiser
сообщение 29.7.2012, 1:54
Сообщение #5


Стаж: 15 лет

Сообщений: 2261
Благодарностей: 1068
Полезность: 870

Цитата(Sonic2790 @ 28.7.2012, 23:59) *
Не. Не то =) id как раз в данном случае - это админ, который ХОЧЕТ сломать кс. А мне нужно узнать жив ли ИГРОК, КОТОРОМУ надо сломать кс :D В команде, которая отправляется в консоль админу этот игрок обозначен как s_Name. Пробовал if(is_user_alive(s_Name)), но чет компилятор ругается ((

Как-то так:

Код
public menu_handler(id, menu, item)
{
    if (item == MENU_EXIT)
    {
        menu_destroy(menu)
        return PLUGIN_HANDLED
    }

    new s_Data[10], s_Name[64], i_Access, i_Callback, usrId
    menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
    
    usrId = str_to_num(s_Data)
    
    if(is_user_alive(usrId))
    {
        client_cmd(id, "amx_destroy %s", s_Name)
        menu_destroy(menu)
    }
    else
    {
        client_print(id, print_chat, "Игрок %s мертв!", s_Name)
    }
    return PLUGIN_HANDLED
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 4 раз
   + Цитировать сообщение
Статус пользователя Sonic2790
сообщение 29.7.2012, 5:31
Сообщение #6


Стаж: 18 лет

Сообщений: 236
Благодарностей: 38
Полезность: 142

Rejiser, от души! Все работает. Мего гигантское спасибо =)


Выкладываю готовый вариант меню для плагина Game Destroyer.
destroy_menu.sma
Код
    #include <amxmodx>
    #include <fun>
    #include <colorchat>
    
    #define PLUGIN_NAME        "amx_destroy MENU"
    #define PLUGIN_VERSION    "1.1"
    #define PLUGIN_AUTHOR    "Sonic2790"

    public plugin_init()
    {
    register_plugin( PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR )
    register_clcmd("amx_destroymenu", "Destroy_Menu", ADMIN_CVAR, "- display destroy menu.")
    }

    public Destroy_Menu(id)
    {
        new i_Menu = menu_create("\rСломать CS:", "menu_handler")
        new s_Players[32], i_Num, i_Player
        new s_Name[32], s_Player[10]
        get_players(s_Players, i_Num)
        for (new i; i < i_Num; i++)
        {
            i_Player = s_Players[i]

            get_user_name(i_Player, s_Name, charsmax(s_Name))
            num_to_str(i_Player, s_Player, charsmax(s_Player))

            menu_additem(i_Menu, s_Name, s_Player, 0)

        }

        menu_display(id, i_Menu, 0)
    }
    
    public menu_handler(id, menu, item)
    {
    if (item == MENU_EXIT)
    {
        menu_destroy(menu)
        return PLUGIN_HANDLED
    }

    new s_Data[10], s_Name[64], i_Access, i_Callback, usrId
    menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
    
    usrId = str_to_num(s_Data)
    
    if(is_user_alive(usrId))
    {
        client_cmd(id, "amx_destroy %s", s_Name)
        menu_destroy(menu)
    }
    else
    {
        ColorChat(id, RED, "[Сервер] ^x01Игрок ^x04 %s ^x01мертв! Сломать CS можно ^x04только живому ^x01игроку!", s_Name)                
    }
    return PLUGIN_HANDLED
    }
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя AndrewZ
сообщение 29.7.2012, 10:01
Сообщение #7


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

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


Сообщений: 4700
Благодарностей: 2452
Полезность: 1018

Rejiser,
Эм, можешь рассказать как работает? :D


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Rejiser
сообщение 29.7.2012, 13:12
Сообщение #8


Стаж: 15 лет

Сообщений: 2261
Благодарностей: 1068
Полезность: 870

Цитата(AndrewZ @ 29.7.2012, 11:01) *
Rejiser,
Эм, можешь рассказать как работает? :D

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