Перейти к контенту

Рекомендуемые сообщения

Tris

Инициализируй функции перед выполнением проверок.

function random_time()
    function function_start_1()
        ...
    end

    -- и т.д.

    if random_table_function == 1 then
      function_start_1()
    end
    -- и т.д.
end

 

Изменено пользователем Gun12
Ссылка на комментарий

Artos, в том то и дело что сделал логику почти точ в точ как у той учебной плоти, а всё равно никак.

Уже даже укоротил... Сделал самую простейшую.

[logic]

active = mob_walker1

 

[mob_walker1]

path_walk = dog_walk_1

path_look = dog_look_1

 

Изменено пользователем Boofer
Ссылка на комментарий

Что за запись? function function_start_1(). Один раз function

Сорри. Зарапортовался.

P.S. Ну ты и назвал. Назови просто start_1, дабы не вводить людей в заблуждение :)

Изменено пользователем Gun12
Ссылка на комментарий

Tris

Да и вообще, зачем эти громоздкие конструкции с if ... end? Вот тебе твой же код, только гораздо проще и легче:

function object_eat(obj)
    local sect = obj:section()
    if db.actor:has_info("wpn_porshein") then
        db.actor:disable_info_portion("wpn_porshein")
        iTimer = nil
        db.actor:restore_weapon()
    end
    if  sect == "medkit" or sect == "medkit_army" or sect == "medkit_scientic" then
        db.actor:hide_weapon()
        random_time()
    end
end  
          
function random_time()
    local random_table_function = math.random(1,5)
    iTimer = time_global() + (3+2*random_table_function)*1000
    db.actor:give_info_portion("wpn_porshein")
end



function Timer_N_minutes()
    if iTimer and iTimer < time_global() then 
        iTimer = nil 
        db.actor:disable_info_portion("wpn_porshein")
        db.actor:restore_weapon()
    end
end

Нету кучи проверок, не нужно никаких инициализаций, переменная iTimer принимает нужное тебе значение, в зависимости от того, что тебе выдаст random.

Ссылка на комментарий

Все чуть дополню ответ Gun12 по вопросу Tris'a:

Многие забывают (или не знают) про такое понятие как "область видимости". Очень советую начинающим скриптерам почитать это в мануале по Lua повнимательнее. И, какой бы оптимальный код ни был, не следует обращаться к функциям/переменным или не объявленным или объявленным ниже по коду. Ошибка Tris'а в том, что вначале он пытается выбрать одну из функций, которые определяются ниже по коду этой же (основной) функции - в результате ошибка по отсутствию выбранной функции. Или эти функции должны быть выше по коду данной функции (random_time) или же быть в корне скрипт-файла.

 

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

Доброе время всем!

Потихоньку ковыряю ЗП Подключил несколько лок, расставил переходы. Есть необходимость отследить момент первого по времени захода на локу без привязки к конкретному переходу. Подскажите как сделать или направте на мануал по нужному адресу

ЗОНА ДОЛЖНА БЫТЬ НЕПРЕДСКАЗУЕМОЙ !!! НЕТ ТАМ ЛОГИКИ И НЕ НУЖНА ОНА ТАМ !!!
Ссылка на комментарий

strong

Ну это можно сделать либо через логику, прописав какому нибудь объекту следить за появлением ГГ, или например сделать напрямую в скриптах.

В bind_stalker есть функция function actor_binder:net_spawn(data), она вызывается каждый раз при загрузке карты\сохранения.

В самом её конце перед end напиши например проверку вида:

 

if level.name() == "имя_твоей_локации" then
  if xr_logic.pstor_retrieve(db.actor, "first_visit", false) == false then
     <тут делаешь что те надо>
     xr_logic.pstor_store(db.actor, "first_visit", true)
  end
end

 

Этот вариант удобен, если тебе в скриптах надо что то сделать. Если в логике то там скорее всего с инфопоршнями придётся работать, я точно не знаю есть ли легче метод там.

 

И это, у меня скриптов ЗП под рукой щас нету, если там перед последним в функции end-ом есть что то типа return true или просто return, то пиши перед ним, иначе твой код не вызовется.

 

 

Artos

По поводу этого кода:

http://www.amk-team.ru/forum/index.php?sho...st&p=675950

Сразу хочу сказать что сейчас я работаю тока с той частью кода, которая отвечает за удаление рестриктора у онлайн объекта (часть с нет пакетами я отключил, т.к у меня она сейчас вызывает вылеты + я использую твою старую версию m_net_utils, а не xStream-овскую, мож из за этого)

 

Щас ковыряю его и назрела пара вопросов:

1) При удалении рестрикторов у онлайн объекта у тебя есть проверка вида:

            local oRestr = sim:object(sRest) --/#!# only for SHOC|CS
            if oRestr and Is_ZoneAnom(oRestr) then
              table.insert(tToRemove,sRest)
            end

 

Но тут такой недочёт (ли?), может так случится что в момент вызова чистки рестрикторов, один из рестрикторов (как в моём случае) уже удалён из игры, и поэтому oRestr-а не существует и он (по крайнем мере в части что за онлайн отвечает) не удаляется у объекта. Исправил (ли?) это тем, что при отсутствии oRestr добавляю рестриктор в список удаления, даже если это не аномалия.

 

2) Зачем после удаления рестриктора у клиентского объекта у тебя всё равно вызывается код удаления рестриктора у серверного, так и должно быть?

 

3) Зачем ты в части, что отвечает за удаление рестриктора у серверного объекта, перезаписываешь нет-пакет если можно (ли?) просто удалить рестриктор через sim:remove_in_restriction(soNPC, idRestr)? В чём смысл записывать оставшиеся рестрикторы, если по идее они и так останутся у НПС?

 

4) Насколько критичен этот код:

              tRestrRemoved[idRestr] = true
              if tAnomsRemove[idRestr] then
                tAnomsRemove[idRestr] = false --/#?#
              end

В твоей функции он нигде не вызывается, я посчитал что мне он не нужен.

 

5) Как я упомянул в начале - сейчас я пока удаляю рестрикторы только первой частью кода (где работа с онлайн объектом), и щас после последнего теста рестриктор у клиентского объекта удалился (по крайнем мере проверял на 1 объекте, у него он пропал из списка), хотя вылет пока остался (возможно я не у всех удалил), так вот, в данном случае можно обойтись без чистки рестриктора у серверного объекта или это тоже необходимо?

 

6) Твою функцию удаления рестрикторов аномалий вызываю из меню\на колбеке спавна аномалии. Я так понял место вызова значения не имеет для моего случая? А то ты что то про скриптовые схемы упоминал.

 

Пример использования в твоём моде (SoC версия) посмотреть не могу, т.к не получается его распаковать :D

 

ЗЫ: А вообще насколько сильный на практике прирост идёт от паковки мода в db-архив.

Изменено пользователем *Shoker*

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

Ссылка на комментарий

Как сделать так чтобы после определенного диалога нпс пошел в определенную точку?

 

Тебе сюда: >>Click Me<<

ColR_iT

Изменено пользователем ColR_iT
Ссылка на комментарий

Ребята, поймал ступор...

На Волке проверяю простенький диалог актора из последовательности фраз, без ветвления и каких либо условий на появление диалога/фразы. Собственно вот такой:

<dialog id="test_dialog">
    <phrase_list>
        <phrase id="0">
            <text>Hello, Wolf!</text>
            <next>1</next>
        </phrase>
        <phrase id="1">
            <text>Hello, Shooter! What do you want?</text>
            <next>2</next>
        </phrase>
        <phrase id="2">
            <text>I conduct an experiment.</text>
            <next>3</next>
        </phrase>
        <phrase id="3">
            <text>Ok! What we do?</text>
            <next>4</next>
        </phrase>
        <phrase id="4">
            <text>Now I call the function, then    you. I'm, now    you!</text>
            <action>escape_dialog.my_phrase</action>
            <next>5</next>
        </phrase>
        <phrase id="5">
            <text>Ok, calling.</text>
            <action>escape_dialog.my_phrase</action>
            <next>6</next>
        </phrase>
        <phrase id="6">
            <text>Nice, thank you.</text>
            <next>7</next>
        </phrase>
        <phrase id="7">
            <text>Not at all! Come on, if that.</text>
            <action>dialogs.break_dialog</action>
        </phrase>
    </phrase_list>
</dialog>

В двух фразах ставлю простенькие проверки:

function my_phrase(first_speaker, second_speaker)
    log1("my_phrase function")
    local obj_npc
    if first_speaker:id() == -1 then
        obj_npc = second_speaker
        log1("Actor is first_speaker.")
    else
        obj_npc = first_speaker
        log1("Actor is second_speaker.")
    end
end

function wolf_phrase(first_speaker, second_speaker)
    log1("wolf_phrase function")
    local obj_npc
    if first_speaker:id() == -1 then
        obj_npc = second_speaker
        log1("Actor is first_speaker.")
    else
        obj_npc = first_speaker
        log1("Actor is second_speaker.")
    end
end

Т.е. как видно функции идентичны, разное лишь название. Обратите внимание, что первую функцию я вызываю из реплики ГГ, вторую из реплики Волка. Вопрос: почему у меня в консоле вот такое:

my_phrase function
Actor is second_speaker.

wolf_phrase function
Actor is second_speaker.

Почему в обоих случаях, актор является second_speaker?

P.S. log1 использую из X-Ray extension, в качестве нормального вывода в лог.

 

-------------

To strong...

Загляни вот в этот пост: пост #100, думаю тебя заинтересует.

Изменено пользователем ColR_iT
Ссылка на комментарий

ColR_iT

id в двигателе обозначается чилом типа unsigned short int (2 байта), которое ну никак не может быть равно -1. id у актора = 0

Freedom

Ссылка на комментарий

ColR_iT, уже _Призрак_ подсказал ошибку в условиях проверок, но добавлю:

Зачем проверять на некие сторонние идентификаторы? Диалог возможен только между актором и кем-то - значит условие if first_speaker:id() == db.actor:id() всегда возможно и вернет однозначный результат, от которого и плясать далее ...

 

Добавлено через 21 мин.:

*Shoker*, начну с конца и кратко:

Упаковка файлов мода выполнена стандартно движковым конвертером (by bardak) и только "нестандартное" длинное расширение мешает распаковке различными батниками и гуишниками. Научи их распознавать расширение и исчезнут проблемы с распаковками.

Собственно на какую-либо скорость в игре упаковка в пак-файлы влияет по-разному. Может и ускорить, а может и замедлить, все зависит от конфигурации твоего железа и OC, но это тема иного топика ... Ну а собственно цель упаковки в ином, это удобство установки и моддинга установленного мода.

По пунктам (хотя ты так и не оазобрался в сути):

Приведенный код НЕ удаляет рестрикторы (в контексте скрипта - аномалии), а чистит упоминания о рестрикторах в параметрах неписей, занося их в таблицу для последующего возможного удаления.

1. Упомянутый кусок кода требует адаптации под ЗП, т.к. в таком виде работает только для ТЧ и ЧН. Т.к. речь идет не про удаление собственно рестриктора а о его записи в параметрах непися - то и чистится в любом случае (существует иль нет).

2. Код был написан в три этапа. Вначале только для онлайн объектов, чего оказалось мало. Потом был написан для всех (через нет-пакеты), но ... изредка появлявшиеся "рельсы" из-за некорректностей старых писалок нет-пакетов, первичная чистка в онлайне осталась (что снизило кол-во ошибок с "рельсами"). вероятно сейчас откажусь от онлайн чисток, оставив тлько через нет-пакеты. Но это уже вопрос излишеств ...

3. Повторю, этот код чистит записи а н удаляет рестрикторы. Удаление рестрикторов происходит уже ПОСЛЕ чистки записей, что и является залогом отсутствия ошибок при удалении аномалий.

4. Данный фрагмент кода (таблица) используется при удалении рестрикторов/аномалий в дальнейшем.

5. Читаем п.2. Чистить нужно все записи рестикторов у всех объектов - если рестриктор/аномалия удаляются. Для моментов записи сэйвов - это залог их "не битья".

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

 

Добавлено через 18 мин.:

strong, врядл существуют "уроки" по подобным вопросам.

Собственно а в чем загвоздка? Например я, при каждом старте игры считываю из сэйва запомненную табличку о "уже известных для ГГ локациях" и, если там нет текущей (или нет таблицы при начале НИ) - значит ГГ попал на локацию впервые. Запомиаем локацию в табличку для последдующего и сохраняем ее при записи в сэйв. Все это стандартные движковые и Lua операции.

Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

как сделать проигрования звука при использовании предмета? Эта статья не работает.

 

С чего это вдруг? У других работает, а у тебя нет!?

Посмотри ещё вот это: Звук при использовании предмета

ColR_iT

Изменено пользователем ColR_iT
Ссылка на комментарий

Artos

Спасибо :)

Распаковку делал как раз и обычным конвертором. Расширение менял просто на .db

Буду ещё пробовать.

О том что код не удаляет рестрикторы физически, это я знаю, просто неправильно выразился - под рестрикторами подразумеваю сами записи о них (рестрикторах) у НПС, а не физ. объект (аномалию и прочее)

 

1) С ЗП не работаю с апреля, давно как вернулся на ЧН, в ЗП с этой ошибкой посчастливилось не столкнутся.

2) А если ты очистишь рестриктор у серверного объекта через нет-пакет, он ведь может остаться у клиентского (если не перегнать его в оффлайн\онлайн, что тоже затратно)

3) Вопрос остался. В качестве рестрикторов подразумеваю сами записи о рестрикторах у НПС.

По идее: sim:remove_in_restriction(soNPC, idRestr) удалит из списка НПС нужный рестриктор, оставив другие. Так зачем ещё перезаписывать нет-пакет и вносить туда "оставшиеся" рестрикторы?

4) Но в контексте чистки просто записей о них у НПС (что и является причиной вылета) это ведь не критично и я могу код этот удалить?

5) -

6) -

 

> Запомиаем локацию в табличку для последдующего и сохраняем ее при записи в сэйв. Все это стандартные движковые и Lua операции.

Ну ну, сохраняем таблицу в сейв :)

Без доп. кодов (Как у АМК например) этого не сделать. А я сомневаюсь что он хотя бы с пстором на текущий момент умеет работать, куда уж таблицы писать.

 

Изменено пользователем *Shoker*

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

Ссылка на комментарий

*Shoker*

Ну не думал, что у модмейкера со стажем возникнут заморочки с распаковкой обычного *.db файла, тренируйся ... ;-)

Программирование не терпит двузначностей, поэтому старайся излагать мысли/вопросы однозначно, а не тек, как "удобно". Даже в этом посту продолжаешь талдычить про удаление именно рестриктора, а не о его записи ... Ведь и смысл совершенно иной и не вводи ни себя ни других в заблуждение.

1. Чтобы заработал этот кусок кода в ЗП нужно заменить получение объекта по имени на поиск в списке онлайновых рестрикторов/аномалий по имени, но его нужно организовать (если еще не сделано) или же сканировать все объекты в игре (что конечно же накладно).

2. Ты до сих пор не понял, для чего же удаляется запись о рестрикторе. В отличии от логики работы схем, где до(у)бавление изменяет поведение объекта, в данном случае требуется отсутствие ошибки при появлении объекта в онлайне и попытке сервера инициализировать для него все записи по рестрикторам. Именно не найденный в игре НО прописанный объекту рестриктор и вызывает фатальную ошибку.

Ну а для объектов в онлайне не требуется собственно контроль валидности записей "руками", это делает движек автоматически. Если останется запись удаленного - объект будет вести себя как и при наличии. Важно это для тебя - тогда и по факту делай такие чистки, но ставить это на общие коллбэки - ИМХО затратно и неоптимально.

3. Удаление alife():remove_in_restriction(soNPC, idRestr) удалит только одну запись конкретного рестриктора. В данном случае убиваются оба зайца, т.е. и удаляется (гарантированно!) конкретная запись и за тот же цикла чистятся все остальные невалидные, если они имеются. Как говорил ранее, вероятно потестировав, оставлю только общую чистку нет-пакетом, ну а ты - выбирай сам. ;-)

4. Конечно можешь удалить ... Хотя уже давал ремарку: А нафига чистить то, что не будет удалено из игры? Чистка записей предваряет собственно удаление самих рестрикторов из игры и заведомо иметь список рестрикторов, которые можно удалять - и есть одна из основных целей данного кода. Например, если в данном списке нет рестриктора, который я собрался удалять - то я откладываю такое удаление на следующий цикл.

(в общем пока ты своих шишек не набьешь этот вопрос для тебя будет открыт).

 

По запоминанию "таблички": А где то написано, что в сэйв таблица 'как есть' пишется? ;-) Если нет нужных кодов - ничего не мешает запоминать в отдельные переменные "key" = "value". Если модмейкер в таких простых вопросах не может разобраться - то и не нужно сувать нос в сложности ... на каждом шагу нет мамок-нянек и расписанных уроков-туторов.

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

Удаляются рестрикторы, не удаляются... Переведите название функции remove_in_restriction. Речь не о рестрикторах (restrictor), а об ограничениях (restriction). Удаляются ограничения (задаваемые естественно именем рестриктора).

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Ссылка на комментарий

Мля, достали уже.

demover123, да и многие другие.

Когда-то написал этот скрипт - ДА!. Но только не для тех кто в бронепоезде.

Неужели трудно понять что

[[Путь_до_звука_относительно_папки_sounds]]
, да и другое, это...

Э-э-х. Чего бисер метать?

Изменено пользователем Gun12
Ссылка на комментарий

malandrinus

Не обращал внимание - спасибо. Так будет легче объяснять :D

 

Artos

> Ну не думал, что у модмейкера со стажем возникнут заморочки с распаковкой обычного *.db файла, тренируйся ... ;-)

Наверно потому что распаковкой раз в пол года занимаюсь, по праздникам :)

На харде до сих пор распакованный ТЧ, который я распаковывал ещё в начале 2008 года.

_____________________________________________

1) Если дело только в этом, то это не проблема.

2) Ну вот так понятней. В таком случае чистка для онлайн объекта и в прям не особо нужна.

3) И всё таки я шутки дня не понял. Судя по коду:

        for idx,idRestr in ipairs(data.dynamic_in_restrictions) do
          local soRestr = idRestr and sim:object(idRestr)
          if soRestr then
            if Is_ZoneAnom(soRestr) then --/ проверка: аномалия?
              tRestrRemoved[idRestr] = true
              if tAnomsRemove[idRestr] then
                tAnomsRemove[idRestr] = false --/#?#
              end
              sim:remove_in_restriction(soNPC, idRestr)
            else --/ не удаляемый рестриктор
              table.insert(tRestrLeft, idRestr)
            end
          end

 

в этой части у тебя удаляются все "ограничения" от аномалий, все остальные "валидные" ограничения просто заносятся в табличку и занаво записываются объекту через нет-пакет, хотя они у него уже записаны. Где здесь два зайца я не заметил, единственный плюс что более надёжно, хотя вероятность сбоя alife():remove_in_restriction() мне кажется (надеюсь) довольно низкой. А вот лишний раз трогать такую хрупкую вещь как пакеты тоже не хочется.

4) А где я говорил что не удаляю потом этот рестриктор из игры? Удаление ограничений вызывается сразу после удаления аномалий\рестрикторов и до спавна новых. Я ведь не на твоём моде работаю, у меня по своему всё сделано. А значит этот кусок кода для меня является бесполезным.

_____________________________

И вообще, раз удаление "ограничения" у клиентского объекта по сути не так уж и нужно (для лечения вылета)

Что мешает весь код вообще упростить и пересадить на одну тока alife():remove_in_restriction() как например тут:

 

--/#+# чистка рестрикторов
function Clear_Restriction(idNPC,soNPC)
  local sim = alife()
  if not soNPC then
    soNPC = idNPC and sim:object(idNPC)
  end
  if soNPC and IsNPC(soNPC) then
     --/ для всех (т.е. и оффлайновых) объектов
    local pk = get_netpk(soNPC,1) --/ запрос нет-пакета ('state')
    if pk:isOk() then --/ получен доступ к нет-пакету объекта?
      local data = pk:get() --/ читаем данные из нет-пакета
      --------
      if next(data.dynamic_in_restrictions) then --/ таблица рестрикторов не пуста?
        local idRestr = nil
        for idx,idRestr in ipairs(data.dynamic_in_restrictions) do
          local soRestr = idRestr and sim:object(idRestr)
          if soRestr then
            if Is_ZoneAnom(soRestr) then --/ проверка: аномалия?
              sim:remove_in_restriction(soNPC, idRestr)
            end
          end
        end
      end
      --------
    end
  end
end

 

 

Интересуют конкретные причины, подкреплённые фактами и тестами.

ЗЫ: А если есть способ получить список "ограничений" без нет-пакета от серверного объекта, тогда нет-пакеты вообще можно выкинуть.

 

Используй, пожалуйста, теги для отделения цитаты от своего ответа.

ColR_iT

Изменено пользователем *Shoker*

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

Ссылка на комментарий

*Shoker*, пора заканчивать мусолить одно и то же, тем более разбирать детально "сторонний" код с целью портировать под "свои" частности ...

Тобою была поднята тема по ошибкам при удалении аномалий(рестрикторов). Дан был ответ, что нужно чистить записи о них ... Были даны всевозможные варианты, которые вполне стабильно работают в конкретном моде и уже более года. Последние нововведения в писалки нет-пакетов сняли последнюю заморочку связанную "рельсами".

Бери, если считаешь нужным то, что требуется для твоей задачи. А уж оптимизация имеющегося или твоего - это уже дело и субъективное и конкретное, а не погадалки по вырванному контексту или еще не написанному тобою коду.

 

По п.3: Для меня гораздо проще работать именно с такой "хрупкой вещью" как нет-пакеты, т.к. при правильной работе с ними все делается гораздо проще и предсказуемее. sim:remove_in_restriction(soNPC, idRestr) - как уже ранее говорил, остался пока как рудимент, который дублирует то, что делаю нет-пакетами. Учитывая, что мод изменяется мною "по ходу игры", то даже мои ошибки/эксперименты при изменениях в модуле нет-пакетов в этой части не приведут в данном коде к последствиям ...

 

Ну и по п.4: Ты все же не понял, что в отличии от твоего стремления в-первую очередь удалить собственно рестриктор/аномалию, а потом почистить о ней записи, у меня иной алгоритм. Строка tAnomsRemove[idRestr] = false --/#?# - как раз исключает аномалию/рестриктор из списка удаляемых, если она присутствует в записях объекта по ограничениям ... Т.о. мною аномалия НЕ удаляется сразу, а только тогда, когда записей о ней уже нет у объектов. Попробуй понять разницу ...

*Shoker*: Интересуют конкретные причины, подкреплённые фактами и тестами.
Вам как отчетом или на слово поверите? :crazy:

Помнится с проблемой удаления аномалий возились одновременно с kamikazze (перед OGSE 0692, там тоже были аналогичные проблемы) ... C тех пор проблема была решена и "аномальные" вылеты в модах исчезли. Тебе почти пара лет тестирования игроками в мод о чем-то говорит, или еще какие-то факты нужны? Ну а причина - потребность удалять аномалии/рестрикторы тогда, когда потребно и без ошибок. :-)

Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

Подскажите пожайлуста что в этих скриптах не правельно.На ЗП 1.6.00 работает,а на 1.6.02 не работает.

function wpn_proverka()

if db.actor:has_info("inventory_wpn_proverka") then

db.actor:hide_weapon()

else

db.actor:restore_weapon()

end

end

 

 

-- actor_menu_mode -----

 

-- int mode:

-- 0 = Undefined = закрыто

-- 1 = Inventory

-- 2 = Trade

-- 3 = Upgrade

-- 4 = DeadBodySearch

-- 10 = Talk dialog show

-- 11 = Talk dialog hide

local last_mode = 0

xr_meet_dialog_closed = false

xr_meet_trade_closed = false

xr_meet_upgrade_closed = false

dead_body_searching = false

 

function actor_menu_mode(mode)

if(mode==0) then

if(last_mode==1) then

inventory_wnd_closed()

elseif(last_mode==2) then

trade_wnd_closed()

elseif(last_mode==3) then

upgrade_wnd_closed()

elseif(last_mode==4) then

dead_body_search_wnd_closed()

end

last_mode = 0

elseif(mode==1) then

last_mode = 1

inventory_wnd_opened()

elseif(mode==2) then

last_mode = 2

trade_wnd_opened()

elseif(mode==3) then

last_mode = 3

upgrade_wnd_opened()

elseif(mode==4) then

last_mode = 4

dead_body_search_wnd_opened()

elseif(mode==10) then

dialog_wnd_showed()

elseif(mode==11) then

dialog_wnd_closed()

end

end

 

function inventory_wnd_opened()

give_info("inventory_wpn_proverka")

printf("---:>Inventory opened")

end

 

function inventory_wnd_closed()

disable_info("inventory_wpn_proverka")

printf("---:>Inventory closed")

end

 

function trade_wnd_opened()

give_info("inventory_wpn_proverka")

xr_meet_dialog_closed = false

printf("---:>Trade opened")

end

 

function trade_wnd_closed()

disable_info("inventory_wpn_proverka")

printf("---:>Trade closed")

xr_meet_trade_closed = true

end

 

function upgrade_wnd_opened()

give_info("inventory_wpn_proverka")

xr_meet_dialog_closed = false

printf("---:>Upgrade opened")

end

 

function upgrade_wnd_closed()

disable_info("inventory_wpn_proverka")

printf("---:>Upgrade closed")

xr_meet_upgrade_closed = true

end

 

function dead_body_search_wnd_opened()

give_info("inventory_wpn_proverka")

printf("---:>DeadBodySearch opened")

dead_body_searching = true

end

 

function dead_body_search_wnd_closed()

disable_info("inventory_wpn_proverka")

printf("---:>DeadBodySearch closed")

dead_body_searching = false

end

 

function dialog_wnd_showed()

printf("---:>Talk Dialog show")

end

 

function dialog_wnd_closed()

printf("---:>Talk Dialog hide")

xr_meet_dialog_closed = true

end

 

 

 

Изменено пользователем student91122
Ссылка на комментарий

Здрасте, у меня такой вопрос, как прописать переход в один конец скрипом? Я освоил как сделать простой переход по известным точкам туда и обратно, но мне нужно в один конец! Плиз подскажите функцию!

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...