Город Мастеров
IPB

Здравствуйте, гость ( Вход | Регистрация )

 Правила этого форума ПРАВИЛА РАЗДЕЛА
> WalkWaypoints
denis0k
сообщение Apr 7 2008, 12:29
Сообщение #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 секунд (запуск только в хб остался).
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

Сообщений в этой теме


Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 19th April 2024 - 11:43