Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Пожертвовать Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 1
  • 1
Отловить сообщение игрока с условием что..
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)
 
  • Страница 1 из 1
  • 1
Поиск: