Меню выбора игроков
| |
Naykon
|
Дата: Пятница, 24.02.2012, 17:07:59 | Сообщение # 31 |
|
Сообщений: 439
Репутация: -4 [ +/- ]
|
|
Та молодой, еще не опытный в pawn меня нужно носом пока что тыкать))))))))
В качестве примера Format(String:buffer[], maxlength, const String:format[], any:...);
Напиши правильно составленный код под Format желательно с пояснением
я это представляю так.... Code new String:g[32] new Handle:h = StartMessageAll("SayText2"); if (h != INVALID_HANDLE) { BfWriteByte(h, ct_client); BfWriteByte(h, true); Format(g, h, "\x03Цветное %N \x04сообщение", ct_client); EndMessage(); }
Результат - скомпилировалось НО ничего не произошло.
|
|
| |
_wS_
|
Дата: Пятница, 24.02.2012, 18:34:46 | Сообщение # 32 |
|
Code new Handle:h = StartMessageAll("SayText2"); if (h != INVALID_HANDLE) { BfWriteByte(h, ct_client); BfWriteByte(h, true); decl String:xStR[75]; Format(xStR, sizeof(xStR), "\x03Цветное %N \x04сообщение", ct_client);
PrintToServer("xStR = %s", xStR); PrintToChatAll("xStR = %s", xStR);
BfWriteString(h, xStR); EndMessage(); }
|
|
| |
Naykon
|
Дата: Пятница, 24.02.2012, 23:00:59 | Сообщение # 33 |
|
Сообщений: 439
Репутация: -4 [ +/- ]
|
|
Протестил вышла ошибка (сервер вылетел в тот момент когда должно было высветится цветное сообщение)
Ошибка в консоле: Code xStR = ***РРіСЂРѕРє Ian выбран Командиром!*** L 02/24/2012 - 21:57:02: [SM] Native "PrintToChat" reported: Could not send a usermessage L 02/24/2012 - 21:57:02: [SM] Displaying call stack trace for plugin "test.smx": L 02/24/2012 - 21:57:02: [SM] [0] Line 287, E:\test\css\cstrike\addons\sourcemod\scripting\include\halflife.inc::PrintToChatAll() L 02/24/2012 - 21:57:02: [SM] [1] Line 146, E:\test\css\cstrike\addons\sourcemod\scripting\test.sp::Timer_Func()
Ошибка вылетившая в винде: Code UserMessageBegin: New message started betore matching coll to EndMessage
|
|
| |
_wS_
|
Дата: Пятница, 24.02.2012, 23:14:23 | Сообщение # 34 |
|
Ну видимо PrintToChat неправильно использовал, код то покажи весь.
|
|
| |
Naykon
|
Дата: Суббота, 25.02.2012, 00:56:55 | Сообщение # 35 |
|
Сообщений: 439
Репутация: -4 [ +/- ]
|
|
Code 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 (h_Menu != INVALID_HANDLE) { CloseHandle(h_Menu); h_Menu = INVALID_HANDLE; } PrintHintTextToAll("Голосование завершено (%d голосов)", all_votes); if (all_votes < 1) { new random_client = GetRandomClient(); if (random_client > 0) { ct_client = random_client PrintToChatAll("Игрок %N избран синим", ct_client); SetEntityModel(ct_client, "models/player/sourcegaming.ru/public_d2/ment1/ct_gsg9.mdl"); } return Plugin_Stop; } // Находим игрока, за которого больше всего проголосовали new vots = 0, target_index = 0; for (new i = 1; i <= MaxClients; i++) { if (votes[i] > vots) { vots = votes[i]; target_index = i; } } if (target_index > 0 && IsClientInGame(target_index)) { ct_client = target_index; new Handle:h = StartMessageAll("SayText2"); if (h != INVALID_HANDLE) { BfWriteByte(h, ct_client); BfWriteByte(h, true); decl String:xStR[75]; Format(xStR, sizeof(xStR), "\x03***\x04Игрок\x03 %N \x04выбран синим!\x03***", ct_client); PrintToServer("xStR = %s", xStR); PrintToChatAll("xStR = %s", xStR); BfWriteString(h, xStR); EndMessage(); } SetEntityModel(ct_client, "models/player/sourcegaming.ru/public_d2/ment1/ct_gsg9.mdl"); } else PrintToChatAll("Игрок не найден"); return Plugin_Stop; }
|
|
| |
_wS_
|
Дата: Суббота, 25.02.2012, 10:00:20 | Сообщение # 36 |
|
Да, ошибка есть, видимо из-за того, что мы делаем PrintToChatAll до EndMessage. Вот так работает:
Code #include <sourcemod>
public OnPluginStart() { HookEvent("round_start", round_start, EventHookMode_PostNoCopy); }
public round_start(Handle:event, const String:name[], bool:dontBroadcast) { new i = GetRandomClient(); PrintToChatAll("i = %d", i); if (i > 0) { SetEntityRenderMode(i, RENDER_TRANSCOLOR); SetEntityRenderColor(i, 0, 0, 255, 150);
decl Handle:h; if ((h = StartMessageAll("SayText2")) != INVALID_HANDLE) { BfWriteByte(h, i); BfWriteByte(h, true);
decl String:xStR[75]; Format(xStR, sizeof(xStR), "\x03***\x04Игрок \x03%N \x04выбран синим!\x03***", i); BfWriteString(h, xStR);
EndMessage();
PrintToChatAll("xStR = %s", xStR); } } }
GetRandomClient() { new indexes[MaxClients], players = 0; for (new i = 1; i <= MaxClients; i++) { if (IsClientInGame(i) && GetClientTeam(i) == 3 && IsPlayerAlive(i)) { indexes[players++] = i; } } if (players > 0) return indexes[GetRandomInt(0, players-1)]; return 0; }
|
|
| |
Naykon
|
Дата: Суббота, 25.02.2012, 11:20:43 | Сообщение # 37 |
|
Сообщений: 439
Репутация: -4 [ +/- ]
|
|
А как на счет Розового цвета желтого и т д в мани точно помню рекламму настраивал так =)
|
|
| |
_wS_
|
Дата: Суббота, 25.02.2012, 13:48:22 | Сообщение # 38 |
|
Это только если вверху слева. Попробуй так:
Code new Handle:h = CreateKeyValues("Stuff", "title", "текст сообщения"); KvSetColor(h, "color", 255, 0, 0, 255); KvSetNum(h, "level", 1); KvSetNum(h, "time", 10); CreateDialog(client, h, DialogType_Msg); CloseHandle(h);
|
|
| |
Naykon
|
Дата: Пятница, 02.03.2012, 12:16:56 | Сообщение # 39 |
|
Сообщений: 439
Репутация: -4 [ +/- ]
|
|
Code if (action == MenuAction_Select) { decl String:StR_Id[15]; GetMenuItem(menu, option, StR_Id, sizeof(StR_Id)); new target_index = GetClientOfUserId(StringToInt(StR_Id)); if (target_index > 0) { all_votes += 1; votes[target_index] += 1; decl Handle:h; if ((h = StartMessageAll("SayText2")) != INVALID_HANDLE) { BfWriteByte(h, client); BfWriteByte(h, true); decl String:xStR[75]; Format(xStR, sizeof(xStR), "\x03Игрок %N проголосовал за\x04 %N", i, target_index); BfWriteString(h, xStR); EndMessage(); } } else PrintToChat(i, "Игрок не найден"); } }
Такая ситуация . Я Т. когда Голосую за СТ в меню фраза "Игрок %N проголосовал за" должна быть Красстного цвета т.к я за Т но она почему-то светло-зеленая))))) И через фраг синяя.. VTF???
|
|
| |
_wS_
|
Дата: Пятница, 02.03.2012, 12:20:41 | Сообщение # 40 |
|
Попробуй вначале строки \x01 указать.
|
|
| |
Naykon
|
Дата: Пятница, 02.03.2012, 19:50:57 | Сообщение # 41 |
|
Сообщений: 439
Репутация: -4 [ +/- ]
|
|
толку 0 =)Добавлено (02.03.2012, 19:50:57) --------------------------------------------- Начал писать плагин. ни как не доходит как сделать чтоб у Т в каждом раунде высвечивалось меню в виде теста ( с 1 правильным ответом) и в случет неправильного ответа его кикало.
|
|
| |
_wS_
|
Дата: Пятница, 02.03.2012, 22:12:45 | Сообщение # 42 |
|
Опять же, с помощью глобальной переменной (строки String). В ней сохраняешь (когда тебе надо) правильный вариант ответа, и когда игрок выбирает опцию (CreateMenu), просто сравниваешь.. Или можно в качестве правильного ответа сохранить номер опции, просто же все. Когда в следующий раз будет вопрос, попробуй его хотя бы сначала сам решить =)
|
|
| |
Naykon
|
Дата: Суббота, 03.03.2012, 11:17:45 | Сообщение # 43 |
|
Сообщений: 439
Репутация: -4 [ +/- ]
|
|
пробывал но не понял как обозначить правильный ответ и как обозначить неправильный
|
|
| |
_wS_
|
Дата: Суббота, 03.03.2012, 12:31:28 | Сообщение # 44 |
|
Зачем обозначать неправильный ответ? запоминать надо только правильный, если будет выбран не он, значит ясно, что он неправильный..
Code new String:Otvet[55];
round_start { Otvet = "kot"; new Handle:menu = CreateMenu(select_menu); SetMenuTitle(menu, "Найди правильный ответ\n \n"); AddMenuItem(menu, "sobak", "1"); AddMenuItem(menu, "kot", "2"); AddMenuItem(menu, "lemur", "3"); DisplayMenu(menu, client, 30); }
public select_menu(Handle:menu, MenuAction:action, i, option) { if (action == MenuAction_End) { CloseHandle(menu); return; } if (action != MenuAction_Select) return;
decl String:Info[55]; GetMenuItem(menu, option, Info, sizeof(Info)); if (StrEqual(Info, "kot")) { // правильный ответ } else { // неправильный } }
Очень легко же
|
|
| |
Naykon
|
Дата: Четверг, 19.04.2012, 02:01:26 | Сообщение # 45 |
|
Сообщений: 439
Репутация: -4 [ +/- ]
|
|
вот что я хотел узнать спасиб=) Добавте пож урок на статистику по возможностиДобавлено (19.04.2012, 02:01:26) ---------------------------------------------
Code public BanMenuClientSelect(Handle:menu, MenuAction:action, admin, i) { if (action == MenuAction_Select) { decl String:Back[25]; if (StrEqual(Back, "2")) { AdminMenu(admin); } else { decl String:SteamID[25]; decl String:UserName[65]; GetMenuItem(menu, i, SteamID, sizeof(SteamID), _, UserName, sizeof(UserName)); new BanUser = GetClientOfUserId(StringToInt(SteamID)); if (BanUser > 0) { GetMenuItem(menu, i, SteamID, sizeof(SteamID)); PrintToChat(admin, "\x03Баним: %s", UserName); } } } }
Видел пример из БАНА от wS но тут немного другая структура.... подскажите как выйти из ситуации.. нужно чтоб игрок мог нажать "Назад" (2) и вернуться в AdminMenu(admin);
PS. В одной из попыток получилось так сделать но Когда нажимаешь "назад" в чат пишит Баним: Назад.... а нужно чтоб молча вернулось назад и все
|
|
| |
|