Вопрос..
| |
Naykon
|
Дата: Понедельник, 05.03.2012, 03:08:01 | Сообщение # 1 |
|
Сообщений: 439
Репутация: -4 [ +/- ]
|
|
Code #include <sourcemod>
new Handle:h_Timer, timer_sec; new Handle:pMenu; new String:Otvet[55]; public OnPluginStart() { HookEvent("round_start", round_start); }
public round_start(Handle:event, const String:name[], bool:dontBroadcast) { new i = GetClientOfUserId(GetEventInt(event, "userid")); if (IsClientInGame(i) && GetClientTeam(i) == 3) DisplayMenu(Vote_Menu, i, 15); timer_sec = 15; h_Timer = CreateTimer(1.0, Timer_Func, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); }
Vote_Menu(i) { Otvet = "2x"; new Handle:pMenu = CreateMenu(Menu_Select); SetMenuTitle(pMenu, "Хочу Пить!\n \n"); AddMenuItem(pMenu, "1", "Напиток 1"); AddMenuItem(pMenu, "2x", "Напиток 2"); AddMenuItem(pMenu, "3", "Напиток 3"); SetMenuExitButton(pMenu, true); DisplayMenu(pMenu, i, 0); }
public Action:Timer_Func(Handle:timer, any:x) { timer_sec -= 1; if (timer_sec > 0) { PrintHintTextToAll("До завершения голосования:\n< %d сек >", timer_sec); return Plugin_Continue; } h_Timer = INVALID_HANDLE; if (pMenu != INVALID_HANDLE) { CloseHandle(pMenu); pMenu = INVALID_HANDLE; } return Plugin_Stop; }
public Menu_Select(Handle:pMenu, MenuAction:action, i, option) { if (action == MenuAction_End) { CloseHandle(pMenu); return; } if (action != MenuAction_Select) return;
decl String:Info[55]; GetMenuItem(pMenu, option, Info, sizeof(Info)); if (StrEqual(Info, "2x")) { return; } else { ChangeClientTeam(i, 2); } }
Что хочу получить: У Живых Ст высвечитвается вопрос. Если ст ответил правильно то все ок. если нет то валит за Т опров заканчивается через 15 секунд.Добавлено (05.03.2012, 03:08:01) --------------------------------------------- Компелируется но не работает...
|
|
| |
_wS_
|
Дата: Понедельник, 05.03.2012, 05:15:39 | Сообщение # 2 |
|
Разве в событии round_start есть переменная userid? http://wiki.alliedmods.net/Generic_Source_Events#round_start
И попробуй после старта раунда сделать mp_restartgame 1, увидишь что и прошлый и новый таймер будут работать = ошибка. В начале раунда надо проверить, если h_Timer != INVALID_HANDLE, то делаем KillTimer(h_Timer) и только после этого создаем новый таймер. А в самой функции таймера, перед тем, как делаешь return Plugin_Stop;, сделай h_Timer = INVALID_HANDLE, чтобы указать что активного таймера нет.
|
|
| |
Naykon
|
Дата: Понедельник, 05.03.2012, 12:39:50 | Сообщение # 3 |
|
Сообщений: 439
Репутация: -4 [ +/- ]
|
|
Code #include <sourcemod>
new Handle:h_Timer, timer_sec; new Handle:pMenu; new String:Otvet[55]; public OnPluginStart() { HookEvent("round_start", round_start); }
public round_start(Handle:event, const String:name[], bool:dontBroadcast) { if (h_Timer != INVALID_HANDLE) { KillTimer(h_Timer); } new i if (IsClientInGame(i) && GetClientTeam(i) == 3) DisplayMenu(Vote_Menu, i, 15); timer_sec = 15; h_Timer = CreateTimer(1.0, Timer_Func, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); }
Vote_Menu(i) { Otvet = "2x"; new Handle:pMenu = CreateMenu(Menu_Select); SetMenuTitle(pMenu, "Хочу Пить!\n \n"); AddMenuItem(pMenu, "1", "Напиток 1"); AddMenuItem(pMenu, "2x", "Напиток 2"); AddMenuItem(pMenu, "3", "Напиток 3"); SetMenuExitButton(pMenu, true); DisplayMenu(pMenu, i, 0); }
public Action:Timer_Func(Handle:timer, any:x) { timer_sec -= 1; if (timer_sec > 0) { PrintHintTextToAll("До завершения голосования:\n< %d сек >", timer_sec); return Plugin_Continue; } if (timer_sec == 0) { CloseHandle(pMenu); pMenu = INVALID_HANDLE; } h_Timer = INVALID_HANDLE return Plugin_Stop; }
public Menu_Select(Handle:pMenu, MenuAction:action, i, option) { if (action == MenuAction_End) { CloseHandle(pMenu); return; } if (action != MenuAction_Select) return;
decl String:Info[55]; GetMenuItem(pMenu, option, Info, sizeof(Info)); if (StrEqual(Info, "2x")) { return; } else { ChangeClientTeam(i, 2); } }
Тот же самый нулевой эффект.. немного видоизменил таймер... но побывал и по старому виду.Добавлено (05.03.2012, 12:39:50) --------------------------------------------- Если ошибка просто напишите как оно должно выглядеть.. И еще мне нужно чтоб СТ вопросы выпадали разные (рандомом)... - Для этого я думаю создать несколько меню с разными вопросами и вариантами ответов.. но я не знаю какой код можно использовать для Рандомного подбора Этих самых разных менюшек...
|
|
| |
_wS_
|
Дата: Понедельник, 05.03.2012, 18:25:00 | Сообщение # 4 |
|
Блин, ты опять пишешь код и не понимаешь его. Что это:
Quote new i; if (IsClientInGame(i) && GetClientTeam(i) == 3) DisplayMenu(Vote_Menu, i, 15);
Ты создал переменную i с значением 0 и почему-то думаешь, что в ней индекс игрока.
Quote (Naykon) нужно чтоб СТ вопросы выпадали разные (рандомом) Если бы ты знал, что такое массив и как с ним работать, ты бы легко мог это сделать.
Code new String:XZ[3][] = { "kot", "enot", "barsuk" };
PrintToServer("random otvet = %s", XZ[GetRandomInt(0, 2)]);
XZ[3][] - 3 это количество строк, во вторых скобках это максимальное количество символов в строке, в этом случае можно не указывать, определится само. Если бы в массиве были целые числа, то делали бы просто
Code new XZ[3] = { 3, 5, 7 };
Если количество строк 3, то индексы доступны от 0 до 2, XZ[0] = "kot", XZ[1] = "enot", XZ[2] = "barsuk". Ставь в нужные места кода PrintToChatAll или PrintToServer, чтобы узнать что чему равно и что когда было выполнено.
|
|
| |
Naykon
|
Дата: Понедельник, 02.04.2012, 12:31:46 | Сообщение # 5 |
|
Сообщений: 439
Репутация: -4 [ +/- ]
|
|
Code Menu_2(admin) { hMenu = CreateMenu(hSelect); SetMenuTitle(hMenu, "Убить:\n \n"); SetMenuExitButton(hMenu, true); DisplayMenu(hMenu, admin, 0); decl String:StR_Id[15], String:StR_Name[MAX_NAME_LENGTH]; new players = 0; for (new i = 1; i <= MaxClients; i++) { if (IsClientInGame(i)) { IntToString(GetClientUserId(i), StR_Id, sizeof(StR_Id)); GetClientName(i,StR_Name, sizeof(StR_Name)); AddMenuItem(hMenu, StR_Id, StR_Name); players += 1; } } }
Не показывает список игроков пробывал просто поставить пункты - заработало, а игроков не хочет((Добавлено (02.04.2012, 12:09:27) --------------------------------------------- + Дайте маленький пример. Только игроки с определеннмы стим id могут выполнять X команду... а сам список id в отдельном документе (для удобства) =) кроме этого игрок xid - гл.админ, может добавлять игроков id прям в игровом процессе (не перезагружая сервер) - полезное из примера в урок - "Присвоение прав id прям в игре" Добавлено (02.04.2012, 12:31:46) --------------------------------------------- 1 проблему решил сам.. Ошибка в том что я показал меню раньше чем добавил игроков =) На остальные жду ответа =)
|
|
| |
_wS_
|
Дата: Понедельник, 02.04.2012, 12:45:29 | Сообщение # 6 |
|
|
|
| |
|