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

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    541
    Репутация:
    78 ±

    Что можно изменить в системе

    Привет. Делаю систему по покупке оружия не используя куча диалогов. Интересны пожелания по упрощению/улучшению кода. Сама система на начальном этапе разработки. Код не маленький, так что через github...

    https://github.com/m1n1vv/Pawn/blob/...eapons_0.2.inc

    P.S. Пожалуйста без ассемблера
    Последний раз редактировалось m1n1vv; 22.06.2016 в 10:41.

  2. #2
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Отделяй блоки кода друг от друга, а то читать не приятно :)

      Открыть/закрыть

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

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    541
    Репутация:
    78 ±
    Цитата Сообщение от Anton Styazhkin Посмотреть сообщение
    Отделяй блоки кода друг от друга, а то читать не приятно :)

      Открыть/закрыть
    Ну тут на вкус и цвет товарищей нет. Но на время сделаю.

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Провёл беглый аудит кода, вот что удалось найти:

    1. Массив weapons можно разбить на два массива... Скажем, на player_weapons и player_ammo. Во-первых, доступ к одномерному массиву быстрее, чем к двухмерному. Во-вторых, в массиве player_weapons будут храниться только числа меньше 256, а значит можно упаковать его и сэкономить память. Двойной профит.

    2. Упаковать строки в BuyWeapons.

    3. Что заставило ваc хранить названия оружий в массиве, но использовать switch в mn_PlayerWeapon?

    4. В BuyWeapons можно кэшировать "weaponid-22" вместо того, чтобы 3 раза подряд вычислять одно и то же.
      PHP код:
      mn_weaponid{playerid} = weaponid;
      weaponid -= 22;
      // ...
      format(stringsizeof stringstr
          
      mn_buystat_weap_name[weaponid], 
          
      mn_buystat_caliber[weaponid],
      // ... 
    5. Кстати об оружии, что это за "22", "25", "33", "34", разбросанные по всему скрипту? Под всё это есть константы:
      PHP код:
      // Из a_samp.inc
      #define WEAPON_COLT45                    (22)
      #define WEAPON_SILENCED                    (23)
      #define WEAPON_DEAGLE                    (24)
      #define WEAPON_SHOTGUN                    (25)
      #define WEAPON_SAWEDOFF                    (26)
      #define WEAPON_SHOTGSPA                    (27)
      #define WEAPON_UZI                        (28)
      #define WEAPON_MP5                        (29)
      #define WEAPON_AK47                        (30)
      #define WEAPON_M4                        (31)
      #define WEAPON_TEC9                        (32)
      #define WEAPON_RIFLE                    (33)
      #define WEAPON_SNIPER                    (34)
      #define WEAPON_ROCKETLAUNCHER            (35) 
    6. Подсчёт размера строки в BuyWeapons оставляет желать лучшего. И да, там в формуле ошибка.
      Чтобы наглядно продемонстрировать недостаток вашего метода подсчёта, я не стану говорить, где эта ошибка (или даже ошибки?) - пусть этот пункт аудита будет таким же информативным, как ваша формула.
      Если будет время, загляните сюда: http://pro-pawn.ru/showthread.php?13388
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

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

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    PHP код:
    #define WEAPON_ROCKETLAUNCHER            (35) 
    А зачем берутся цифры в скобки если можно и без них или это очередной элемент удобства?
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

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

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    541
    Репутация:
    78 ±
    1. PHP код:
      static
          
      mn_player_weapons[7],
          
      mn_player_ammo[7]; 
      PHP код:
      GetPlayerWeaponData(playeridimn_player_weapons[i], mn_player_ammo[i]); 
    2. Не до конца понял
    3. Осталось от первой версии https://github.com/m1n1vv/Pawn/blob/master/buy_weapons
    4. Сделал
    5. Подумаю над этим
    6. Он был точный, но оформлен не красиво. Сейчас более-менее сделал:
      PHP код:
      sizeof fmt_str+(15+18+2+12+5)-(2*5+14+5
    Последний раз редактировалось m1n1vv; 18.06.2016 в 00:04.

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от m1n1vv Посмотреть сообщение
    PHP код:
    static
        
    mn_player_weapons[7],
        
    mn_player_ammo[7]; 
    PHP код:
    GetPlayerWeaponData(playeridimn_player_weapons[i], mn_player_ammo[i]); 
    Ок, половина работы сделана. Теперь прочитайте ещё раз 1-й пункт в моём предыдущем посте (на этот раз до конца).


    Цитата Сообщение от m1n1vv Посмотреть сообщение
    Не до конца понял
    http://pro-pawn.ru/showthread.php?13962


    Цитата Сообщение от m1n1vv Посмотреть сообщение
    Он был точный, но оформлен не красиво. Сейчас более-менее сделал:
    PHP код:
    sizeof fmt_str+(15+18+2+12+5)-(2*5+14+5
    Не угадали. Предложение прочитать ту статью про подсчёт всё ещё в силе.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

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

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Вместо вот этого:
    Код:
    mn_buystat_weap_name[][] =
    	{
    		"9mm",
    		"Silenced 9mm",
    		"Desert Eagle",
    		"Shotgun",
    		"Sawnoff Shotgun",
    		"Combat Shotgun",
    		"Micro SMG/Uzi",
    		"MP5",
    		"AK-47",
    		"M4",
    		"Tec-9",
    		"Country Rif le",
    		"Sniper Rif le"
    	},
    я бы использовал "GetWeaponName".

    А так всё очень даже неплохо :)

    И да, стиль написания конечно, вроде
    Код:
    if (0 == response)
    читать мягко говоря сложновато. Хотя тут, как уже говорилось, кому как удобнее.
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

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

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    541
    Репутация:
    78 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Ок, половина работы сделана. Теперь прочитайте ещё раз 1-й пункт в моём предыдущем посте (на этот раз до конца).
    Если ты про mn_player_weapons[7] и mn_player_ammo[7] с char, то CrashDetect ругается ну и само действие не выполняется.
      Открыть/закрыть
    Run time error 4: "Array index out of bounds"
    [debug] Accessing element at index 2 past array upper bound 1


    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Там же format



    - - - Добавлено - - -

    Цитата Сообщение от Nexius_Tailer Посмотреть сообщение
    Вместо вот этого:
    Код:
    mn_buystat_weap_name[][] =
    	{
    		"9mm",
    		"Silenced 9mm",
    		"Desert Eagle",
    		"Shotgun",
    		"Sawnoff Shotgun",
    		"Combat Shotgun",
    		"Micro SMG/Uzi",
    		"MP5",
    		"AK-47",
    		"M4",
    		"Tec-9",
    		"Country Rif le",
    		"Sniper Rif le"
    	},
    я бы использовал "GetWeaponName".

    А так всё очень даже неплохо :)

    И да, стиль написания конечно, вроде
    Код:
    if (0 == response)
    читать мягко говоря сложновато. Хотя тут, как уже говорилось, кому как удобнее.
    Но там же надо обращаться к playerid или killerid
    Последний раз редактировалось m1n1vv; 20.06.2016 в 18:54.

  10. #10
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от m1n1vv Посмотреть сообщение
    Но там же надо обращаться к playerid или killerid
    В смысле? Там нет ничего подобного: http://wiki.sa-mp.com/wiki/GetWeaponName

 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

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

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

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

Ваши права

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