Перейти к публикации
  • Рефакторинг определения разрешенных ближних оружек


    Electr0
    • Тестируется

    По сути эти данные хранятся в StringTables, тогда можно сильно укоротить толстый код, который выполняет каждый плагин которому нужно знать какие ближние оружки можно заспавнить на этой карте, и который пытается создать все ~15 типов оружия через создание пропа "weapon_melee".

     

    Вот тот самый толстый код:

    public Action CheckMelee(Handle Timer)
    {
    	int mCounter;
    	for(int i=0;i<MAX_MELEE_LENGTH;i++)
    	{
    		Format(sValidMeleeList[i], sizeof(sValidMeleeList[]), "");
    	}
    	for(int i=0;i<MAX_MELEE_LENGTH;i++)
    	{
    		int entity = CreateEntityByName("weapon_melee");
    		if (entity > 0)
    		{
    			DispatchKeyValue(entity, "melee_script_name", sMeleeList[i]);
    			DispatchSpawn(entity);
    			char modelname[256];
    			GetEntPropString(entity, Prop_Data, "m_ModelName", modelname, sizeof(modelname));
    			if(StrContains(modelname, "hunter", false) == -1)
    			{
    				Format(sValidMeleeList[mCounter++], sizeof(sValidMeleeList[]), sMeleeList[i]);
    			}
    			
    			AcceptEntityInput(entity, "Kill");
    		}
    	}
    }

     


    Отзывы пользователей

    Рекомендованные комментарии

    Тестовый плагин доказал работоспособность идеи:

    #include <sourcemod>
    #include <sdktools>
    
    public void OnMapStart()
    {
    	GetMeleeClasses();
    }
    
    void GetMeleeClasses()
    {
    	char sMeleeWeap[20];
    	int iTableIndex = FindStringTable("MeleeWeapons");
    	int iCountRows = GetStringTableNumStrings(iTableIndex);
    
    	LogError("Read %i melee classes:", iCountRows);
    	LogError("{");
    	for( int i = 0; i < iCountRows; i++ )
    	{
    		ReadStringTable(iTableIndex, i, sMeleeWeap, 20);
    		LogError("	[%i] %s", i, sMeleeWeap);
    	}
    	LogError("}");
    }

    Вывод на старте карты:

    L 08/12/2016 - 18:10:05: [ally_allowed_melee.smx] Read 15 melee classes:
    L 08/12/2016 - 18:10:05: [ally_allowed_melee.smx] {
    L 08/12/2016 - 18:10:05: [ally_allowed_melee.smx]     [0] fireaxe
    L 08/12/2016 - 18:10:05: [ally_allowed_melee.smx]     [1] frying_pan
    L 08/12/2016 - 18:10:05: [ally_allowed_melee.smx]     [2] machete
    L 08/12/2016 - 18:10:05: [ally_allowed_melee.smx]     [3] baseball_bat
    L 08/12/2016 - 18:10:05: [ally_allowed_melee.smx]     [4] crowbar
    L 08/12/2016 - 18:10:05: [ally_allowed_melee.smx]     [5] cricket_bat
    L 08/12/2016 - 18:10:05: [ally_allowed_melee.smx]     [6] tonfa
    L 08/12/2016 - 18:10:05: [ally_allowed_melee.smx]     [7] katana
    L 08/12/2016 - 18:10:05: [ally_allowed_melee.smx]     [8] electric_guitar
    L 08/12/2016 - 18:10:05: [ally_allowed_melee.smx]     [9] fubar
    L 08/12/2016 - 18:10:05: [ally_allowed_melee.smx]     [10] knife
    L 08/12/2016 - 18:10:05: [ally_allowed_melee.smx]     [11] golfclub
    L 08/12/2016 - 18:10:05: [ally_allowed_melee.smx]     [12] alliance_shield
    L 08/12/2016 - 18:10:05: [ally_allowed_melee.smx]     [13] nail_board
    L 08/12/2016 - 18:10:05: [ally_allowed_melee.smx]     [14] sledgehammer
    L 08/12/2016 - 18:10:05: [ally_allowed_melee.smx]  }
    Ссылка на комментарий
    Поделиться на других сайтах

    • Оптимизации подверглось 6 плагинов, оптимизировал так же меню выдачи ближних орудий. Тестирование на локальных копиях меги, супер коопа, альтера завершено.
    • Так же при тестировании второго слота заметил и исправил баг: если игрок ходил с включенным видом от третьего лица и сменилась карта то на следующей у него будет мелькать оружие со спины, которое не должно показываться после смены т.к. вид от третьего лица во время смены карты отключается.
    Ссылка на комментарий
    Поделиться на других сайтах



    Присоединяйтесь к обсуждению

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

    Гость
    Добавить комментарий...

    ×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

      Разрешено не более 75 эмодзи.

    ×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

    ×   Ваш предыдущий контент был восстановлен.   Очистить редактор

    ×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.


  • Обозначения статусов

    В обработке = Мы работаем над вашим отзывом.

    Будет сделано = Ваша идея добавлена к плану будущих изменений.

    Тестируется = Изменения внесены, но требуют тестирования.

    Сделано = Ваша идея реализована!

    Отклонено = Отзыв некорректный, бред, либо уже реализовано. Если у вас есть дополнительная информация напишите комментарий и мы снова откроем этот вопрос.

×
×
  • Создать...