Меню когда админ умер[CS:GO].
andrey50390
Дата: Воскресенье, 14.12.2014, 16:33:05 | Сообщение # 1
Сообщений: 62
Репутация: 0 [ +/- ]
Подскажите код когда админ умирает ему выходит сообщение "Использовать возврождение?" 1.Да 2.Нет. И если он жмет "Да" то прописывается команда в консоль sm_respawn.
TEIN
Дата: Воскресенье, 14.12.2014, 17:08:15 | Сообщение # 2
Сообщений: 563
Репутация: 78 [ +/- ]
Создал меню (CreateMenu), при входе клиента проверил, что он является администратором (GetUserAdmin), при смерти игрока (HookEvent("player_death", Event_OnPlayerDeath) показал меню (DisplayMenu), затем в MenuHandler получил значение ответа (GetMenuItem), если да - то FakeClientCommand(param1, "sm_respawn")
andrey50390
Дата: Воскресенье, 14.12.2014, 18:16:57 | Сообщение # 3
Сообщений: 62
Репутация: 0 [ +/- ]
Можно пожалуйста полный код?=( буду благодарен
«SeReGa»☆
Дата: Понедельник, 15.12.2014, 03:00:01 | Сообщение # 4
Сообщений: 395
Репутация: 37 [ +/- ]
andrey50390 , присмотревшись на сообщение TEIN , можно увидеть сам код ничего тяжелого далее как по ступенькам))
andrey50390
Дата: Понедельник, 15.12.2014, 15:35:00 | Сообщение # 5
Сообщений: 62
Репутация: 0 [ +/- ]
Так? Код
#include <sourcemod> #include <sdktools> #include <cstrike> new Handle:g_Menu; public OnPluginStart() { g_Menu = CreateMenu(Select_Menu); SetMenuTitle(g_Menu,"Использовать возврождение?\n \n"); AddMenuItem(g_Menu, "sm_arespawn", "Да"); AddMenuItem(g_Menu, "", "Нет"); HookEvent("player_death", Event_OnPlayerDeath); } public Action:Event_OnPlayerDeath(Handle:event, const String:name[], bool:dB) { for (new i = 1; i <= MaxClients; i++) if(IsClientInGame(i) && (GetUserFlagBits(i) & ADMFLAG_GENERIC)) DisplayMenu(g_Menu, i, 7); } public Select_Menu(Handle:menu, MenuAction:action, client, item) { if (action != MenuAction_Select) return; decl String:cmd[50]; if (!GetMenuItem(menu, item, cmd, 50)) return; FakeClientCommand(client, cmd); DisplayMenuAtItem(menu, client, GetMenuSelectionPosition(), 7); }
volodya
Дата: Понедельник, 15.12.2014, 20:17:21 | Сообщение # 6
Сообщений: 14
Репутация: 0 [ +/- ]
правильно ? Код
#include <sourcemod> public OnPluginStart() { HookEvent ("player_death",player_death); } public player_death (Handle:event, const String:name[], bool:dontBroadcast) { new client = GetClientOfUserId (GetEventInt (event, "userid")); if (IsClientInGame(client) && (GetUserFlagBits(client) & ADMFLAG_GENERIC)) { Menu (client); } } public Menu (client) { new Handle: menu = CreateMenu (cmd_menu); SetMenuTitle (menu,"Использовать возврождение?\n \n"); AddMenuItem (menu, "0", "Да"); AddMenuItem (menu, "1", "Нет"); DisplayMenu (menu, client, 0); } public cmd_menu (Handle:menu, MenuAction:action, client, option) { if (action == MenuAction_Select) { if (option == 0) { FakeClientCommand(client, "sm_respawn"); } if (option == 1) { CloseHandle (menu); } } else if (action == MenuAction_End) { CloseHandle (menu); } }
BarD
Дата: Вторник, 16.12.2014, 09:46:24 | Сообщение # 7
Сообщений: 943
Репутация: 137 [ +/- ]
У всех вас код рабочий, но, volodya, я бы в твоем коде кое-что поправил. Цитата volodya (
)
public player_death (Handle:event, const String:name[], bool:dontBroadcast)
Надо делать Цитата
public Action: player_death(Handle:event, const String:name[], bool:dontBroadcast)
Сообщение отредактировал BarD - Вторник, 16.12.2014, 09:46:43
TEIN
Дата: Вторник, 16.12.2014, 11:06:04 | Сообщение # 8
Сообщений: 563
Репутация: 78 [ +/- ]
BarD Необязательно так делать, а их код требуют оптимизации, я считаю
andrey50390
Дата: Вторник, 16.12.2014, 13:11:57 | Сообщение # 9
Сообщений: 62
Репутация: 0 [ +/- ]
Знаю что рабочий, но меню не убирается..
pro-health
Дата: Вторник, 16.12.2014, 16:07:15 | Сообщение # 10
Сообщений: 188
Репутация: 5 [ +/- ]
Можно и так: Код
#include <sourcemod> public OnPluginStart() { HookEvent ("player_death",player_death); } public Action:player_death (Handle:event, const String:name[], bool:dontBroadcast) { new client = GetClientOfUserId (GetEventInt (event, "userid")); if (IsClientInGame(client) && (GetUserFlagBits(client) & ADMFLAG_GENERIC)) { new Handle: menu = CreateMenu (cmd_menu); SetMenuTitle (menu,"Использовать возврождение?\n \n"); AddMenuItem (menu, "0", "Да"); AddMenuItem (menu, "1", "Нет"); DisplayMenu (menu, client, 0); } } public cmd_menu (Handle:menu, MenuAction:action, client, option) { if (action == MenuAction_Select) { if (option == 0) { FakeClientCommand(client, "sm_respawn"); } if (option == 1) { CloseHandle (menu); } } else if (action == MenuAction_End) { CloseHandle (menu); } }
Хз оптимизация это или нет, но всё же.
«SeReGa»☆
Дата: Вторник, 16.12.2014, 18:04:49 | Сообщение # 11
Сообщений: 395
Репутация: 37 [ +/- ]
Цитата pro-health (
)
Хз оптимизация это или нет, но всё же.
если оптимизировать то я думаю так))
Код
#include <sourcemod> new Handle:ResAdminMenu = INVALID_HANDLE; public OnPluginStart() { HookEvent ("player_death",player_death); ResAdminMenu = CreateMenu (cmd_menu); SetMenuTitle (ResAdminMenu,"Использовать возврождение?\n \n"); AddMenuItem(ResAdminMenu, "0", "Да"); AddMenuItem (ResAdminMenu, "1", "Нет"); SetMenuExitButton(ResAdminMenu, true); } public player_death (Handle:event, const String:name[], bool:dontBroadcast) { new client = GetClientOfUserId (GetEventInt (event, "userid")); if (IsClientInGame(client) && (GetUserFlagBits(client) & ADMFLAG_GENERIC)) { DisplayMenu(ResAdminMenu, client, MENU_TIME_FOREVER); } } public cmd_menu (Handle:menu, MenuAction:action, client, option) { if (action == MenuAction_Select) { if (option == 0) { FakeClientCommand(client, "sm_respawn"); } if (option == 1) { } } else if (action == MenuAction_End) { } }
Сообщение отредактировал «SeReGa»☆ - Вторник, 16.12.2014, 18:05:18
TEIN
Дата: Среда, 17.12.2014, 13:36:45 | Сообщение # 12
Сообщений: 563
Репутация: 78 [ +/- ]
«SeReGa»☆ еще
BarD
Дата: Среда, 17.12.2014, 16:45:46 | Сообщение # 13
Сообщений: 943
Репутация: 137 [ +/- ]
andrey50390 , меню у тебя не убирается, потому что ты его заново вызываешь после FakeClientCommand. Убери DisplayMenuAtItem после вышеуказанной строчки, и будет убираться.Добавлено (17.12.2014, 16:45:46) ---------------------------------------------«SeReGa»☆, ты не оптимизировал. Если принебречь CloseHandle, то можно и так:
Код
public cmd_menu (Handle:menu, MenuAction:action, client, option) if (action == MenuAction_Select && option == 0) FakeClientCommand(client,"sm_respawn");
TEIN
Дата: Среда, 17.12.2014, 17:20:26 | Сообщение # 14
Сообщений: 563
Репутация: 78 [ +/- ]
BarD А если еще..?
BarD
Дата: Среда, 17.12.2014, 17:41:21 | Сообщение # 15
Сообщений: 943
Репутация: 137 [ +/- ]
А куда уж короче? если только все, что я написал, в одну строчку запихать :)