PDA

Просмотр полной версии : [Мануал] Исправление команды, если забыл сменить раскладку (из .рудз в /help)



KakbeYura
22.12.2013, 05:08
В начало public OnPlayerText(playerid, text[])

if(text[0] == '.')
{
text[0] = '/';
FixCommand(text[1]);
CallRemoteFunction("OnPlayerCommandText", "ds" playerid, text);
return 0;
}

В конце мода вставляем:

FixCommand(input[])
{
for(new i = 0; ; )
{
switch(input[++i])
{
case EOS: break;
case 'А', 'а': input[i] = 'f';
case 'Б', 'б': input[i] = ',';
case 'В', 'в': input[i] = 'd';
case 'Г', 'г': input[i] = 'u';
case 'Д', 'д': input[i] = 'l';
case 'Е', 'е': input[i] = 't';
case 'Ё', 'ё': input[i] = '`';
case 'Ж', 'ж': input[i] = ';';
case 'З', 'з': input[i] = 'p';
case 'И', 'и': input[i] = 'b';
case 'Й', 'й': input[i] = 'q';
case 'К', 'к': input[i] = 'r';
case 'Л', 'л': input[i] = 'k';
case 'М', 'м': input[i] = 'v';
case 'Н', 'н': input[i] = 'y';
case 'О', 'о': input[i] = 'j';
case 'П', 'п': input[i] = 'g';
case 'Р', 'р': input[i] = 'h';
case 'С', 'с': input[i] = 'c';
case 'Т', 'т': input[i] = 'n';
case 'У', 'у': input[i] = 'e';
case 'Ф', 'ф': input[i] = 'a';
case 'Х', 'х': input[i] = '[';
case 'Ц', 'ц': input[i] = 'w';
case 'Ч', 'ч': input[i] = 'x';
case 'Ш', 'ш': input[i] = 'i';
case 'Щ', 'щ': input[i] = 'o';
case 'Ъ', 'ъ': input[i] = ']';
case 'Ы', 'ы': input[i] = 's';
case 'Ь', 'ь': input[i] = 'm';
case 'Э', 'э': input[i] = '\'';
case 'Ю', 'ю': input[i] = '.';
case 'Я', 'я': input[i] = 'z';
}
}
return 1;
}

Автор: KakbeYura (http://pro-pawn.ru/member.php?2232). Специально для Pro-Pawn.Ru

[ForD]
22.12.2013, 11:29
Древне как китай,но в принципе полезно для игроков склерозников.

KakbeYura
22.12.2013, 14:06
Старое? Нигде не видел, видел только ".помощь" в "/помощь" и на стандартный.

Stanley
22.12.2013, 14:14
норм так то

[ForD]
22.12.2013, 18:24
Ну не знаю как ты,но я где-то в прошлом году такое видел,ставил на свой старый серв,на п.ру или на п-и это было не помню уже

L0ndl3m
22.12.2013, 19:08
Уже было в разделе стандартные функции, тык (http://pro-pawn.ru/showthread.php?4263-%D0%90%D0%B2%D1%82%D0%BE%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%B0).

Для чего создавать массив, да ещё с таким большим размером? Ведь максимальная длина строки в чате: 145.


new text[256];
for(new i = 0; i < 256; i++)


Этого достаточно:


for(new i = 0, l = strlen(textx); i != l; i++)

Daniel_Cortez
16.03.2014, 11:04
Обновил мануал (см. 1 пост).
Теперь один и тот же код должен работать на любом командном процессоре.

Exclusive
29.03.2014, 23:11
Понравилось.:blush2:

DeimoS
04.04.2014, 12:29
Самым удачным вариантом, по моему, будет замена точки на слэш в OnPlayerText, а остальной текст не трогаем. Теперь даём OnPlayerCommandText возможность найти команду среди существующих (ведь командный процессор поддерживает русские команды, а данный код преобразует такую команду в кашу) и если команда не найдена, смотрим какой символ стоит после слэша. Если русские буквы, конвертируем их в английские, как бы меняя раскладку (как делаете вы) и вновь заставляем паблик пробежаться по всем командам. Если же английские, конвертируем их в русские и делаем то же самое. Такой метод будет поддерживать команды с различными раскладками и мир станет чуточку лучше :3
Хотя такой подход будет оправдан только если у вас в моде присутствуют команды с русскими символами (для других языков конвертацию придётся переписать под нужные символы соответственно)