Отловить сообщение игрока с условием что..
|
|
Geny
|
Дата: Суббота, 18.05.2013, 12:02:55 | Сообщение # 1 |
|
Сообщений: 110
Репутация: 0 [ +/- ]
|
|
Получаю сообщение игрока say (say_team). Но мне нужно сделать так чтоб он обязательно мог написать только сообщение в формате цвета, то есть примерно вот так - 0xFF490F. При чем если допустить что игрок ошибется и напишет НЕ цвет то сервер 100% рухнет... как можно это обеспечить, максимум что я могу это посчитать чтоб сообщение не превышало 8 символов. Условия которые нужно соблюдать - Чтоб были использованы только Англ буквы или цифры, чтобы не было пробелов, чтобы обязательно первые 2 символа были "0x" (Хотя это скрипт может и сам добавить к его сообщению), чтобы игрок не мог написать не больше не меньше 8 символов.
Вот мой план действий но не хватает знаний для их реализации...
Я ни в коем случае не сомневаюсь в умении пользователей форума, но я прекрасно понимаю что wS имеет больший опыт. Пожалуйста помогите в кратчайшие сроки. Благодарю.
|
|
| |
TEIN
|
Дата: Суббота, 18.05.2013, 12:09:47 | Сообщение # 2 |
|
Сообщений: 563
Репутация: 78 [ +/- ]
|
|
Цвет ставится на первое место? Или он может быть где угодно? Или сообщение состоит только из цвета?
|
|
| |
NANO_VIRUS
|
Дата: Воскресенье, 19.05.2013, 16:25:18 | Сообщение # 3 |
|
Сообщений: 41
Репутация: 0 [ +/- ]
|
|
Цвет только в начале:
Код #include <sourcemod>
new String:sz_color[3];
public OnPluginStart() { AddCommandListener(CommandSay, "say"); Format(sz_color, 2, "\x7%06X", 0x000000); }
public Action:CommandSay(client, const String:command[], args) { decl String:text[128]; GetCmdArgString(text, sizeof(text)); StripQuotes(text); TrimString(text); if (text[6] != 0) { Format(text, 20, "%s%s", sz_color, text); new Handle:hBf; hBf = StartMessageOne("SayText2", client); if (hBf != INVALID_HANDLE) { BfWriteByte(hBf, client); BfWriteByte(hBf, 0); BfWriteString(hBf, text); EndMessage(); } } return Plugin_Handled; }
Пишешь в чат например "00ff00 Зеленый лист". _______________________________________ Условия самому можно составить).
|
|
| |
TEIN
|
Дата: Воскресенье, 19.05.2013, 17:02:13 | Сообщение # 4 |
|
Сообщений: 563
Репутация: 78 [ +/- ]
|
|
Получаешь первый аргумент и разбираешь его по циклу strlen - Узнать длину IsCharSpace - True, если символ пробел IsCharNumeric - True, если символ число IsCharAlpha - True, если символ символ (По-моему так, #$*(*^ и т.д.) На счет первых двух символов if (message[0] == '0' && message[1] == 'x') Пробуй вообщем
|
|
| |
Geny
|
Дата: Вторник, 25.06.2013, 16:07:58 | Сообщение # 5 |
|
Сообщений: 110
Репутация: 0 [ +/- ]
|
|
Спс за помошь. Возник еще 1 вопрос. Я получаю значение цвета из KeyValve записываю его в СТРОКУ вот в таком виде 0x21VC2 (к примеру). Далее у меня не получаеться применить эту строку в качестве определителя цвета. Если СТОКА - text1 и text2 полученый из KV, тогда сообщение PrintToChatAll("\x07%06X%N: \x07%06X%s", text1, client, text2, message); - темносинее!!!!!!, хотя цвет там зеленый и красный!!!!
Если сделать new Q1 = StringToInt(text1); new Q2 = StringToInt(text2); PrintToChatAll("\x07%06X%N: \x07%06X%s", Q1, client, Q2, message); - тогда цвет тупо ЧЕРНЫЙ.
Как мне быть?
|
|
| |
TEIN
|
Дата: Вторник, 25.06.2013, 16:15:54 | Сообщение # 6 |
|
Сообщений: 563
Репутация: 78 [ +/- ]
|
|
Если text = FFFFFF, то PrintToChatAll("\x07%s%N", text, client)
|
|
| |