![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
![]()
Сообщение
#1
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
У нас очень обширно используются посты и маршруты, решил это дело проверить профайлером. Ужаснулся - в первые минуты скрипт срабатывает 70к раз (IMG:style_emoticons/kolobok_light/wacko.gif) Точнее сразу 1.6к и дальше растет. Начал копать скрипты - там скажем так писец:
Neverwinter Script X0_I0_WALKWAY: void WalkWayPoints(int nRun = FALSE, float fPause = 1.0) { ... // Лечение рекурсии что называется серпом по яйцам - сначала 55 раз запустимся, // сделаем проверки, а потом выйдем, ибо нафик не надо было запускаться if (bIsFighting == TRUE || bIsInConversation == TRUE || bMoving == TRUE || bWaiting == TRUE) return; ... object oWay = GetNextWalkWayPoint(OBJECT_SELF); if (GetIsObjectValid(oWay) == TRUE) { ... // Даже если непись стоит на точке, действие в стек добавится. // Не знаю, как влияет на производительность, но лучше проверить расстояние до точки. ActionMoveToObject(oWay, nRun); if(GetLocalInt(oWay,"X2_L_WAYPOINT_SETFACING") == 1) { // Аналогично ActionDoCommand(SetFacing(GetFacing(oWay))); } // А вот и корень зла (IMG:style_emoticons/kolobok_light/smile.gif) Рекурсия с шагом 1 сек на всех неписях с точками. Сама функция еще // запускается из хертбита. Получается ужасный хаос с кучей ненужных срабатываний, // которые хоть и отрезаются в начале, но ресурсы кушают неслабо ActionWait(fPause); ActionDoCommand(WalkWayPoints(nRun,fPause)); ... } ... } У всех по-разному конечно получится с цифрами, зависит от кол-во неписей с точками, но самыми банальными проверками (описанные тут + проверка в хб на присутствие игрока вблизи) и отключением рекурсии мне удалось снизить кол-во запусков раз в 100 кажется (IMG:style_emoticons/kolobok_light/smile.gif) Причем цифра перестала расти со временем в геометрической прогрессии. Минус - неписи чуть тормозят - после прерывания возобновляют ходьбу не сразу, а через 1-6 секунд (запуск только в хб остался). |
![]() ![]() |
Текстовая версия | Сейчас: 26th April 2025 - 13:25 |