Half-Life и Adrenaline Gamer форум

Всё об игре в Халф-Лайф и АГ
Текущее время: 26 апр 2024, 23:28

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: KORD_12.7 прокомментируй ))
СообщениеДобавлено: 01 май 2011, 19:28 
Не в сети
Аватара пользователя
Зарегистрирован:
24 янв 2011, 03:32
Последнее посещение:
09 дек 2021, 03:04
Сообщения: 756
Откуда: Futurama
Вопросы касаются твоей оптимизации и оптимизации в общем. - почему ты переправил "static" на "new" в обозначениях "trail" (если не ошибаюсь для оптимизации кода, для переменных имеющих по сути не изменяемое значение, лучше использовать "static"). какой смысл "return PLUGIN_CONTINUE" ? "return HAM_IGNORED" ? если все работало норм )). Зачем обьявлять cvars через new ? если define пашет норм ( меньше переменных в памяти ) тут есть замечание по поводу работы плагина - на стрелу арбалета действует rendering хотя не должен ( нет в этом смысла стрела летит быстро и этого практически не заметно, за стрелой нету следа а так же нет следа за гранатами ) ... А насчет функции - set_rendering 5 баллов :oops: и еще насчет конечного размера: 4.88кб мой, 5.13кб твой )


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: KORD_12.7 прокомментируй ))
СообщениеДобавлено: 02 май 2011, 02:50 
Не в сети
Site Admin
Зарегистрирован:
01 июн 2010, 01:27
Последнее посещение:
22 апр 2024, 13:24
Сообщения: 6867
1.
Код:
static satchel_trail, grenade_trail, snark_trail, bolt_trail
Код:
new g_satchel_trail, g_grenade_trail, g_snark_trail, g_bolt_trail
Абсолютно ничем не различаются, т.к. объявление происходит на уровне файла (не в функции). Поэтому лучше использовать обычное "new".

Q: Что такое "static"?
A: Это глобальная переменная (т.е. время её жизни равняется времени жизни плагина), но имеющая область видимости равную блоку в котором она объявлена.
Примеры:
Код:
new g_i1;   // Глобальная переменная: время жизни = время жизни плагина; область видимости = весь файл.
static g_i2; // Глобальная переменная: время жизни = время жизни плагина; область видимости = весь файл.

Function()
{
   new i1; // Локальная переменная:
              // время жизни = время исполнения функции (создается каждый раз при входе в функцию);
              // область видимости = функция Function.
   static i2; // Локальная переменная:
                // время жизни = время жизни плагина (создается один раз раз при старте плагина);
                // область видимости = функция Function.
}
Т.е. разница, в том, что static создается один раз, а new каждый раз при входе в блок. И надо выбирать по критерию: иcпользуемая память / нагрузка на процессор от частоты создания. Если переменная часто используется (функция часто вызывается), то имеет смысл объявить её static.
Второе различие, вытекающее из разового создания: значение переменной сохраняется между вызовами функции. Т.е. по сути получается глобальная переменная с локальной областью видимости.
Имеет смысл изменить объявление
Код:
      new classname[32], sprite, lifetime, skip
на
Код:
      static classname[32], sprite, lifetime, skip
так как функция обработчик spawn будет использоваться часто.

2.
У каждой функции есть значение возврата по умолчанию - 0. Т.е. если не написать
Код:
return <value>;
или написать просто
Код:
return;
, то функция вернет ноль.
Если посмотреть инклюдники, то увидим:
Код:
#define PLUGIN_CONTINUE      0   /* Results returned by public functions */
Т.е. возврат равнозначен возвращению 0, использованию return без значения, или просто опусканию оператора return.
Код:
/**
 * Ham return types.
 * -
 * Return these from hooks to disable calling the target function.
 * Numbers match up with fakemeta's FMRES_* for clarity.  They are interchangable.
 * 0 (or no return) is also interpretted as HAM_IGNORED.
 */
#define HAM_IGNORED      1   /**< Calls target function, returns normal value */
Тоже самое и в случае Ham Sandwich. В его случае и 0 и 1 равнозначны. Т.е. их можно не писать.
Код:
public plugin_init() 
{
...
   return PLUGIN_CONTINUE   
}
Тут Корд развоевался просто. :)

Q: Бывают ли случаи когда надо в конце функции писать "return PLUGIN_CONTINUE"?
A: Ага:
Код:
public Function(id)
{
   if (id == 1)
      return PLUGIN_HANDLED;
   client_print(id, print_chat, "Your Id = %i", id);
   return PLUGIN_CONTINUE;
}
Если не написать в конце return со значением, то АМХХ не даст скомпилять плагин.

3.
Код:
#define trails_cvar      get_cvar_num("amx_HL_trails")
   register_cvar("amx_HL_trails", "1")
   if(trails_cvar) {trails(ent);}
В данном случае использовался доступ с получением адреса квара по названию квара (операции со списками строк в движке).
Код:
new g_cvarTrails;
   g_cvarTrails = register_cvar("amx_HL_trails", "1")
   if(get_pcvar_num(g_cvarTrails))
В этом случае, при регистрации квара, получается адрес значения квара в памяти, и, в последуещем, неспоредственное получение значения по адресу - в разы быстрее. Почитай про pcvars.

4.
Не понял что там работает и что нет. По коду, вроде бы, нет разницы между твоей и версией Корда.

Насчет размера плагина: лучше сохранять легко читаемое форматирование, чем экономить символы. Я ведь могу этот плагин ужать в 1 кб, но читать его будет, мягко говоря, нелегко. хД

PS А, и забыл: я же не Корд, но, вобщем, удалять уж не буду...


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: KORD_12.7 прокомментируй ))
СообщениеДобавлено: 02 май 2011, 06:42 
Не в сети
Аватара пользователя
Зарегистрирован:
06 июн 2010, 16:53
Последнее посещение:
09 апр 2024, 17:07
Сообщения: 1143
Откуда: Владивосток
По 1, 2 и 3 согласен во всем со Львом :)

4. My bad :oops:
Класснейм у стрелы арбалета не тот.
Код:
equali(classname, "crossbow_bolt") 
--->
Код:
equali(classname, "bolt")

И еще нужен post хук спауна.
Код:
RegisterHam(Ham_Spawn, g_classes[i], "fw_EntSpawn")
--->
Код:
RegisterHam(Ham_Spawn, g_classes[i], "fw_EntSpawn", 1)


Вложения:
Скачать плагин или Скачать исходник [HL_Trails+.sma - 2.54 КБ]
Скачиваний: 273

_________________
Изображение
Vi Veri Veniversum Vivus Vici
Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: KORD_12.7 прокомментируй ))
СообщениеДобавлено: 02 май 2011, 14:05 
Не в сети
Аватара пользователя
Зарегистрирован:
24 янв 2011, 03:32
Последнее посещение:
09 дек 2021, 03:04
Сообщения: 756
Откуда: Futurama
Огромное спасибо за развёрнутый ответ :Bravo: , просто горы нереально полезной информации. Меня сильно заинтересовали твои слова Lev:
Цитата:
Насчет размера плагина: лучше сохранять легко читаемое форматирование, чем экономить символы. Я ведь могу этот плагин ужать в 1 кб, но читать его будет, мягко говоря, нелегко. хД
Если появится возможность продемонстрировать - буду очень рад :roll:.
KORD_12.7 - теперь всё работает норм ))


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: KORD_12.7 прокомментируй ))
СообщениеДобавлено: 02 май 2011, 17:50 
Не в сети
Site Admin
Зарегистрирован:
01 июн 2010, 01:27
Последнее посещение:
22 апр 2024, 13:24
Сообщения: 6867
Turanga_Leela писал(а):
Lev, KORD_12.7
Используй тыкание на имя пользователя над аватаром - вставляет ник пользователя в текст сообщения в более привычном виде: Turanga_Leela

Turanga_Leela писал(а):
Если появится возможность продемонстрировать - буду очень рад
Никогда так не делайте. :D


Вложения:
Скачать плагин или Скачать исходник [HL_Trails+.sma - 1021 байт]
Скачиваний: 262
Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: KORD_12.7 прокомментируй ))
СообщениеДобавлено: 02 май 2011, 17:53 
Не в сети
Аватара пользователя
Зарегистрирован:
06 июн 2010, 16:53
Последнее посещение:
09 апр 2024, 17:07
Сообщения: 1143
Откуда: Владивосток
Lev писал(а):
Никогда так не делайте.
Не будем :lol:

_________________
Изображение
Vi Veri Veniversum Vivus Vici


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: KORD_12.7 прокомментируй ))
СообщениеДобавлено: 02 май 2011, 19:22 
Не в сети
Аватара пользователя
Зарегистрирован:
24 янв 2011, 03:32
Последнее посещение:
09 дек 2021, 03:04
Сообщения: 756
Откуда: Futurama
Про сжатие в 1кб я думал речь идет о amxx, но все же зачет :pardon:


Вернуться к началу
 Профиль 
  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11


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

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB