Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 4 из 4 ПерваяПервая ... 2 3 4
Показано с 31 по 39 из 39
  1. #31
    Аватар для Kovshevoy
    Пользователь

    Статус
    Оффлайн
    Регистрация
    11.07.2015
    Сообщений
    190
    Репутация:
    25 ±
    А как сделать так, чтобы после слэша можно было юзать две заглавные? По типу, Marty_McFly

  2. #32
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от NichWell Посмотреть сообщение
    А как сделать так, чтобы после слэша можно было юзать две заглавные? По типу, Marty_McFly
    Ну то, найден ли нижний слеш или нет, отображается в переменной "__". Соответственно, нужно добавить проверку на количество заглавных букв в "default", приписав проверку на нижний слэш, а так же в "case '_':".

    Как-то так, короче:
    1. stock bool:IsRPNick(const name[])
    2. { // http://pro-pawn.ru/showthread.php?7528
    3. static i, __, bs;
    4. if (('A' <= name[0] <= 'Z' && ('a' <= name[1] <= 'z')))
    5. {
    6. for (i = 1, __ = 0, bs = 0;;)
    7. {
    8. switch (name[++i])
    9. {
    10. case 'a'..'z':
    11. continue;
    12. case '_':
    13. if (__++, 'A' <= name[++i] <= 'Z' && 'a' <= name[++i] <= 'z')
    14. continue;
    15. else if ('A' <= name[i-1] <= 'Z' && 'A' <= name[i] <= 'Z' && 'a' <= name[++i] <= 'z')
    16. {
    17. bs++;
    18. continue;
    19. }
    20. else
    21. break;
    22. case '\0':
    23. return (i >= 4 && __ == 1);
    24. default:
    25. {
    26. if(__ == 1 && bs == 0 && 'A' <= name[i] <= 'Z')
    27. {
    28. bs++;
    29. continue;
    30. }
    31. return false;
    32. }
    33. }
    34. }
    35. }
    36. return false;
    37. }

    Это если минимально изменять алгоритм (собственно, что первое в голову пришло). И это явно не самый оптимальный вариант реализации, ибо он будет трудно масштабируемым в текущем виде.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  3. #33
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Сходу получилось вспомнить следующие префиксы для фамилий:
    • "Mc" - ирландско-шотландский патроним; также встречается вариант "Mac" (примеры: "McSmith", "MacDonald");
    • "O'" - ирландский патроним (примеры: "O'Brian", "O'Connor");
    • "al-" - определённый артикль в арабском языке, нечто вроде "the" из английского, который в фамилиях обозначает принадлежность человека к какому-либо месту или профессии (пример: "al-Kufi" (от "Kufa" - название города в Ираке)).
    • "Al" - тоже из арабского языка, означает принадлежность человека к определённой семье, клану или династии (пример: "Al Saud").

    Если я забыл какие-то ещё часто встречающиеся префиксы - дайте знать, добавлю в этот пост.

    И вот вариант функции, который учитывает только префиксы из списка, не позволяя делать рандомные фамилии с двумя заглавными буквами:
    1. stock bool:IsRPNick(const name[])
    2. { // http://pro-pawn.ru/showthread.php?7528&p=95478&viewfull=1#post95478
    3. static i, j, __;
    4. if ('A' <= name[0] <= 'Z' && 'a' <= name[1] <= 'z')
    5. {
    6. for (i = 1, __ = 0;;)
    7. {
    8. switch (name[++i])
    9. {
    10. case 'a'..'z':
    11. continue;
    12. case '_':
    13. {
    14. static const prefixes[][] = { "Mc", "Mac", "O", "von_", "van_", "al_", "Al_" };
    15. static const prefix_lengths[] = { 2, 3, 1, 4, 4, 3, 3 };
    16. for (++__, ++i, j = 0; j < sizeof(prefixes); ++j)
    17. {
    18. if (0 != strcmp(name[i], prefixes[j], false, prefix_lengths[j]))
    19. continue;
    20. if ('A' <= name[i + prefix_lengths[j]] <= 'Z')
    21. i += prefix_lengths[j];
    22. break;
    23. }
    24. if ('A' <= name[i] <= 'Z' && 'a' <= name[++i] <= 'z')
    25. continue;
    26. else
    27. break;
    28. }
    29. case '\0':
    30. return (i >= 4 && __ == 1);
    31. default:
    32. return false;
    33. }
    34. }
    35. }
    36. return false;
    37. }

    Примеры никнеймов с префиксами для фамилий, которые эта функция пропускает:
    Код:
    John_McSmith
    Gerald_MacDonald
    Charles_OConnor
    Mohammad_al_Kufi
    Mohammad_Al_Saud
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  4. 2 пользователя(ей) сказали cпасибо:
    Kovshevoy (11.11.2019) oukibt (14.07.2020)
  5. #34
    Аватар для Kovshevoy
    Пользователь

    Статус
    Оффлайн
    Регистрация
    11.07.2015
    Сообщений
    190
    Репутация:
    25 ±

  6. #35
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    На счёт многих приставок из этой статьи не уверен, что их можно часто встретить на RP-серверах. Пока что добавил только германо-австрийскую праставку "von" и голландскую "van".
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  7. #36
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    На счёт многих приставкой из этой статьи не уверен, что их можно часто встретить на RP-серверах. Пока что добавил только германо-австрийскую праставку "von" и голландскую "van".
    Добавь в основной пост ссылку на этот пост. А то затеряется среди других сообщений.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  8. #37
    Аватар для SteveStage
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.10.2019
    Адрес
    Планета Земля
    Сообщений
    318
    Репутация:
    7 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    На счёт многих приставкой из этой статьи не уверен, что их можно часто встретить на RP-серверах.
    Добавь приставку El (Эль) в начале фамилии (Испания)

  9. #38
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Steve_Stage Посмотреть сообщение
    Добавь приставку El (Эль) в начале фамилии (Испания)
    Мне кажется, подразумевалось то, что любой желающий вставит в функцию свои префиксы. Не обязательно об этом просить Daniel_Cortez
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  10. #39
    Аватар для SteveStage
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.10.2019
    Адрес
    Планета Земля
    Сообщений
    318
    Репутация:
    7 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Мне кажется, подразумевалось то, что любой желающий вставит в функцию свои префиксы. Не обязательно об этом просить Daniel_Cortez
    Понятно

 

 
Страница 4 из 4 ПерваяПервая ... 2 3 4

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •