Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 9 из 9
  1. #1
    Аватар для DmitriyVasilev
    Пользователь

    Статус
    Оффлайн
    Регистрация
    01.01.2019
    Сообщений
    79
    Репутация:
    0 ±

    Оптимизация команды

    Здравствуйте, форумчане. Подскажите как можно оптимизировать данную команду, пожалуйста.
    1. CMD:goverment(playerid, params[])
    2. {
    3. if(IsACop(playerid) || IsAArm(playerid) || IsAMayor(playerid) || IsAMedic(playerid) || IsALicenser(playerid))
    4. if(!GetPVarInt(playerid,"Fraction_Duty")) return 1;
    5. {
    6. new rtext[30];
    7. if(User[playerid][pMuted] > 0)
    8. {
    9. format(YCMDstr, sizeof(YCMDstr), "У Вас бан чата! До снятия: %i секунд(ы)",User[playerid][pMuted]);
    10. SCM(playerid, COLOR_LIGHTRED, YCMDstr);
    11. return 1;
    12. }
    13. if(sscanf(params, "s[128]", params[0])) return SCM(playerid, -1, "Введите: (/gov)erment [текст]");
    14. if(User[playerid][pMember] == 1 || User[playerid][pLeader] == 1)
    15. {
    16. if(User[playerid][pRank] < 14) return 1;
    17. if(User[playerid][pRank] == 14) rtext = "Новости:";
    18. else if(User[playerid][pRank] == 15) rtext = "Новости:";
    19. }
    20. else if(User[playerid][pMember] == 2 || User[playerid][pLeader] == 2)
    21. {
    22. if(User[playerid][pRank] < 8) return 1;
    23. if(User[playerid][pRank] == 8) rtext = "Новости:";
    24. else if(User[playerid][pRank] == 9) rtext = "Новости:";
    25. }
    26. else if(User[playerid][pMember] == 3 || User[playerid][pLeader] == 3)
    27. {
    28. if(User[playerid][pRank] < 15) return true;
    29. if(User[playerid][pRank] == 15) rtext = "Новости:";
    30. else if(User[playerid][pRank] == 16) rtext = "Новости:";
    31. }
    32. else if(User[playerid][pMember] == 4 || User[playerid][pLeader] == 4)
    33. {
    34. if(User[playerid][pRank] < 9) return 1;
    35. if(User[playerid][pRank] == 10) rtext = "Новости:";
    36. else if(User[playerid][pRank] == 9)
    37. {
    38. if(User[playerid][pJobHealLeader] == 1) rtext = "Новости:";
    39. else if(User[playerid][pJobHealLeader] == 2) rtext = "Новости:";
    40. else if(User[playerid][pJobHealLeader] == 3) rtext = "Новости:";
    41. }
    42. else SCM(playerid,COLOR_GREY,"Вам недоступна данная команда");
    43. }
    44. else if(User[playerid][pMember] == 7 || User[playerid][pLeader] == 7)
    45. {
    46. if(User[playerid][pRank] < 5) return 1;
    47. if(User[playerid][pRank] == 5) { rtext = "Новости:"; }
    48. else if(User[playerid][pRank] == 6) { rtext = "Новости:"; }
    49. }
    50. else if(User[playerid][pMember] == 10 || User[playerid][pLeader] == 10)
    51. {
    52. if(User[playerid][pRank] < 14) return 1;
    53. if(User[playerid][pRank] == 14) rtext = "Новости:";
    54. else if(User[playerid][pRank] == 15) rtext = "Новости:";
    55. }
    56. else if(User[playerid][pMember] == 11 || User[playerid][pLeader] == 11)
    57. {
    58. if(User[playerid][pRank] < 9) return 1;
    59. if(User[playerid][pRank] == 9) rtext = "Новости:";
    60. else if(User[playerid][pRank] == 10) rtext = "Новости:";
    61. }
    62. else if(User[playerid][pMember] == 19 || User[playerid][pLeader] == 19)
    63. {
    64. if(User[playerid][pRank] < 15) return 1;
    65. if(User[playerid][pRank] == 15) rtext = "Новости:";
    66. else if(User[playerid][pRank] == 16) rtext = "Новости:";
    67. }
    68. else if(User[playerid][pMember] == 21 || User[playerid][pLeader] == 21)
    69. {
    70. if(User[playerid][pRank] < 14) return 1;
    71. if(User[playerid][pRank] == 14) rtext = "Новости:";
    72. else if(User[playerid][pRank] == 15) rtext = "Новости:";
    73. }
    74. else if(User[playerid][pMember] == 22 || User[playerid][pLeader] == 7)
    75. {
    76. if(User[playerid][pRank] < 9) return 1;
    77. if(User[playerid][pRank] == 10) rtext = "Новости:";
    78. else if(User[playerid][pRank] == 9) rtext = "Новости:";
    79. }
    80. else if(User[playerid][pMember] == 33 || User[playerid][pLeader] == 7)
    81. {
    82. if(User[playerid][pRank] < 9) return 1;
    83. if(User[playerid][pRank] == 10) rtext = "Новости:";
    84. else if(User[playerid][pRank] == 9) rtext = "Новости:";
    85. }
    86. else return 1;
    87. SendClientMessageToAll(-1, "---========== Государственные Новости ==========---");
    88. format(YCMDstr, sizeof(YCMDstr), "{2641ED}%s %s: %s", rtext, User[playerid][pName], params[0]);
    89. SendClientMessageToAll(-1, YCMDstr);
    90. }
    91. return 1;
    92. }

  2. #2
    Аватар для UnO
    Пользователь

    Статус
    Оффлайн
    Регистрация
    20.01.2018
    Сообщений
    38
    Репутация:
    7 ±
    1. CMD:goverment(playerid, params[])
    2. {
    3. switch(User[playerid][pMember])
    4. {
    5. case 1,10,21:
    6. if(User[playerid][pRank] < 14) return 1;
    7. case 2:
    8. if(User[playerid][pRank] < 8) return 1;
    9. case 3,19:
    10. if(User[playerid][pRank] < 15) return 1;
    11. case 4,11,22,33:
    12. if(User[playerid][pRank] < 9) return 1;
    13. case 7:
    14. if(User[playerid][pRank] < 5) return 1;
    15. default:
    16. return 1;
    17. }
    18.  
    19. if(!GetPVarInt(playerid, "Fraction_Duty"))
    20. return 1;
    21.  
    22. if(User[playerid][pMuted] > 0)
    23. {
    24. format(YCMDstr, sizeof(YCMDstr), "У Вас бан чата! До снятия: %i секунд(ы)", User[playerid][pMuted]);
    25. return SCM(playerid, COLOR_LIGHTRED, YCMDstr);
    26. }
    27.  
    28. if(isnull(params))
    29. return SCM(playerid, -1, !"Введите: (/gov)erment [текст]");
    30.  
    31. SendClientMessageToAll(-1, !"---========== Государственные Новости ==========---");
    32. format(YCMDstr, sizeof(YCMDstr), "{2641ED}Новости %s: %s", User[playerid][pName], params);
    33. SendClientMessageToAll(-1, YCMDstr);
    34. return 1;
    35. }

    А вообще макс.ранг для фракций лучше в массив поместить, чтобы потом каждый раз не париться со свитчом.

  3. Пользователь сказал cпасибо:
    DmitriyVasilev (03.02.2019)
  4. #3
    Аватар для DmitriyVasilev
    Пользователь

    Статус
    Оффлайн
    Регистрация
    01.01.2019
    Сообщений
    79
    Репутация:
    0 ±
    а иснулл чем лучше парамса?

  5. #4
    Аватар для m1n1vv
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    447
    Репутация:
    64 ±
    Цитата Сообщение от DmitriyVasilev Посмотреть сообщение
    а иснулл чем лучше парамса?
    isnull - функция для проверки значения строки (введено что-то или нет), а params - строка.
    Если в параметрах команды нужно указать одно значение, то params можно указывать без массива. Если там текст, то указываем везде params, а если число, через strval присваиваем значение к какой-то переменной и уже ее дальше используем.
    Если больше одного параметра, то нужно использовать sscanf. И уже будут params[0], params[1] и так далее. Но есть директива extract params, через которую можно превращать строку в значения нужного типа. Например:
    PHP код:
    extract params -> new idFloat:healthstring:text[70]; 
    Последний раз редактировалось m1n1vv; 03.02.2019 в 14:15.

  6. Пользователь сказал cпасибо:
    DmitriyVasilev (03.02.2019)
  7. #5
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    1,936
    Репутация:
    2377 ±
    ИМХО, когда в вашем коде достаточно других проблем (беглым взглядом удалось найти форматирование в глобальный массив, неправильную табуляцию и лишнюю пару "{}" после 2-го if), оптимизация должна волновать в последнюю очередь.
    Индивидуально в PM и Skype по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
    SA-MP 0.4 is a lie

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

    Статус
    Оффлайн
    Регистрация
    20.05.2018
    Сообщений
    7
    Репутация:
    0 ±
    @Daniel_Cortez, чем «форматирование в глобальный массив» Вам не угодило?

  9. #7
    Аватар для Geebrox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.08.2015
    Адрес
    Ташкент
    Сообщений
    375
    Репутация:
    96 ±
    Цитата Сообщение от bullplex Посмотреть сообщение
    @Daniel_Cortez, чем «форматирование в глобальный массив» Вам не угодило?
    Вы с соседями едите из одной тарелки?
    Респект:
    @DeimoS
    @ziggi
    @Daniel_Cortez

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

    Статус
    Оффлайн
    Регистрация
    20.05.2018
    Сообщений
    7
    Репутация:
    0 ±
    Цитата Сообщение от Geebrox Посмотреть сообщение
    Вы с соседями едите из одной тарелки?
    Да, время на мытье посуды сокращается.

  11. #9
    Аватар для Geebrox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.08.2015
    Адрес
    Ташкент
    Сообщений
    375
    Репутация:
    96 ±
    Цитата Сообщение от bullplex Посмотреть сообщение
    Да, время на мытье посуды сокращается.
    Отлично, но нормальные люди предпочитают иметь свои посуды.
    Респект:
    @DeimoS
    @ziggi
    @Daniel_Cortez

 

 

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

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

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

Ваши права

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