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

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

4 минуты назад, abramcumner сказал:

Модифицировать не надо, надо следить за стори_ид

В смысле ?

Если что, я не вносил никаких изменений в db.script от Бардака.

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

@DMT, добавь в db.script после строки "local story_id = packet:r_u32()" вывод story_id в лог, в функции create_anom и create_heli.

 

Попробуй заменить "local story_id = packet:r_u32()" на "local story_id = packet:r_s32()" и "packet:w_u32(story_id)" на "packet:w_s32(story_id)", тоже в двух функциях. Меняется u32 на s32. Битый сейв удали.

Изменено пользователем abramcumner
  • Спасибо 1

Подарки

  • Ссылка на комментарий
    24 минуты назад, abramcumner сказал:

    Попробуй заменить "local story_id = packet:r_u32()" на "local story_id = packet:r_s32()" и "packet:w_u32(story_id)" на "packet:w_s32(story_id)", тоже в двух функциях. Меняется u32 на s32. Битый сейв удали.

    Спасибо, сработало!

    Интересный момент: при каждом сохранении-загрузке спавнится ещё одна аномалия и ещё один вертолёт помимо тех, которые уже были заспавнены в прошлые разы. Так можно делать сколько угодно или после некоторого критического количества спавнов начнутся вылеты?

     

    А есть какие-то уроки с детальным разбором нет-пакетов и как ими пользоваться? Да, я читал коммент Malandrinus в справочнике по функциям и классам https://www.amk-team.ru/forum/topic/7450-spravochnik-po-funkciyam-i-klassam/?do=findComment&comment=258470

    и даже кое-что понял, но этот коммент всё же вряд ли можно назвать уроком.

    Ссылка на комментарий
    4 минуты назад, DMT сказал:

    при каждом сохранении-загрузке спавнится ещё одна аномалия и ещё один вертолёт помимо тех, которые уже были заспавнены в прошлые разы.

    Это плохо. Игроки начинают часто загружаться, когда игра уже слишком сложная. А ты спавном вертолоетов и аномалия делаешь ее еще сложнее. Лучше перенеси вызов спавна в другое место или добавь каких-нибудь условий.

     

    7 минут назад, DMT сказал:

    Так можно делать сколько угодно или после некоторого критического количества спавнов начнутся вылеты?

    Если объектов станет больше 65535.

     

    8 минут назад, DMT сказал:

    А есть какие-то уроки с детальным разбором нет-пакетов и как ими пользоваться?

    По ссылке разбор класса net-packet, он простой. Тебе же нужно, что входит в нет-пакеты разных классов. Уроков не знаю, все нет-пакеты есть в acdc. Возможно в модулях Artos`a расписано какое поле, что значит.

    • Спасибо 1

    Подарки

  • Ссылка на комментарий
    2 часа назад, abramcumner сказал:

    каждом сохранении-загрузке

    Ну это перебор, конечно. Если спаун нужен постоянно, надо его хотя бы ограничивать таймером или инфопорциями, выдающимися постепенно и в определённый момент. 

    • Согласен 1

    Здесь могла быть ваша реклама.


    Подарки

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

    Привет братья - сталкеры.

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

     Моя нычкаНычка в арендованном у Опричника холодильнике  

    Мы хорошие ребята, жаль патронов маловато:):ukostra:

    UriZzz.gif

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

    @DMT, Если хочешь чтобы спавн был один, то просто сделай через инфопоршень, самый простой подход. Пример под спойлером.

     

    Скрытый текст

    function fix_recept()

      if (not db.actor:has_info( "info_amk_recipt_drop_souls" )) and db.actor:has_info( "info_amk_recipt_souls" ) then
        db.actor:give_info_portion( "info_amk_recipt_soul_drops" )
        db.actor:give_info_portion( "info_amk_recipt_soul_fire" )
        db.actor:give_info_portion( "info_amk_recipt_soul_cristal" )
        db.actor:give_info_portion( "info_amk_recipt_soul_bengal" )
    end

    end

     


    Подарки

  • 2
  • Ссылка на комментарий
    4 часа назад, UriZzz сказал:

    мне бы примерчик пользования модуля se_stor

    Тебе какого рода примерчик-то нужен? В сборочном цехе смотрел? Там всё максимально подробно расписано - и автором, и я от себя добавил, даны примеры подключения для всех частей игры и даже подготовлены скрипты для оригиналов.

    А использование... что может быть банальней трёх добавленных глобальных функций SetVar, GetVar и DelVar, тоже описанных? Ведь работа модуля и сводится как раз к сохранению, чтению и удалению переменных.

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

    @Kirgudu, да, я знаю, просто хочу увидеть реализацию в коде, именно в ТЧ. Прописка функций записи, чтения, удаления конкретной переменной...

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

     Моя нычкаНычка в арендованном у Опричника холодильнике  

    Мы хорошие ребята, жаль патронов маловато:):ukostra:

    UriZzz.gif

    Ссылка на комментарий
    4 часа назад, Kirgudu сказал:

    что может быть банальней трёх добавленных глобальных функций SetVar, GetVar и DelVar

    ...которыми я, кстати, почти нигде не пользовался, делая вместо этого повсеместно
     

    se_stor.set(key, value)
    
    se_stor.get(key, value, default)

    Что кстати удобнее. имхо. Позволяет потом легко и безболезненно заменить модуль на другой... но впрочем, это лирика.

    3 часа назад, UriZzz сказал:

    просто хочу увидеть реализацию в коде, именно в ТЧ.

    Вот парой строк выше, собственно, она и есть. Ну или через SetVar, GetVar... кому какие фломастеры ближе.

    Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

    Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

    AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

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

    Выше, кстати, есть опечатка: должно быть "se_stor.get(key, default)"

     

    9 часов назад, UriZzz сказал:

    просто хочу увидеть реализацию в коде

    Вызовы глобальных функций будут выглядеть так:

    SetVar(key, value) -- установить значение переменной
    GetVar(key, default_value) -- получить значение переменной (default_value - значение по умолчанию для переменных типа таблица)
    DelVar(key) -- удалить переменную
    HasVar(key) -- проверить наличие переменной в хранилище

    Для всех частей игры работает одинаково.

    Изменено пользователем Kirgudu
    • Спасибо 1
    • Нравится 1
    Ссылка на комментарий
    9 часов назад, Kirgudu сказал:

    Выше, кстати, есть опечатка: должно быть "se_stor.get(key, default)"

    Да, виноват-с... :blush: вы правы.

    9 часов назад, Kirgudu сказал:

    проще, чем выискивать по всем скриптам

    Так я же и не выискивал. Вообще понятия не имею, где у меня se_stor дергается. Не помню)

    Просто сам se_stor заменил на такой.

    -----------------------------------------------------------------------------------------------------------
    -- Заглушка для подключения всех скриптов, использующих se_stor Артоса, к SCRIPT_VARS_STORAGE движка OGSR
    -----------------------------------------------------------------------------------------------------------
    
    function get(var_name, default)
    	local s = get_stored_vars()
    	if s[var_name] ~= nil then return s[var_name] end
    	return default
    end
    function set(var_name, value, f_check)
    	local s = get_stored_vars()
    	s[var_name] = value
    end
    --~

    Для движка OGSR, se_stor выглядит вот так :) Это на всякий случай, если кто-то будет заморачиваться зачем-то установкой модуля se_stor на моды на этом движке.

    Глобальные GetVar, SetVar, etc... на основе этих двух функций тоже дописать можно, при желании.

    Изменено пользователем Zander_driver
    • Нравится 1

    Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

    Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

    AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

    Ссылка на комментарий
    В 12.12.2019 в 23:47, mole venomous сказал:

    вылет "...gamedata\scripts\amk.script:1403: attempt to perform arithmetic on local 'st' (a string value)"

    Цитирую сам себя. Методом исключения нашёл объект проблемы. В реварде за квест был ремкит. Одно только наличие его у ГГ приводит к вылету при загрузке любого сейва. Тут понятно, почему жучинная ссылка на amk.script - кривая адаптация соляночных таймеров. Если попробовать загрузить сейв после вылета, он загрузится, но при очередном лоаде с игры - снова вылет. Мне теперь уже просто интересно, а почему вылетает при загрузке даже более раннего сохранения, где ремкомплект ещё не заспаунен у актёра?

    Здесь могла быть ваша реклама.


    Подарки

  • 4
  • 2
  • 5
  • 3
  • Ссылка на комментарий

    @mole venomous, а что у тебя находится в amk.script, в строке 1403? Гадалки и телепаты в отпуске все.

    Изменено пользователем naxac
    • Согласен 1

    Аддон для ОП-2.09.2: Яндекс/Google/GitHub

    naxac.gif


    Подарки

    Ссылка на комментарий
    1 час назад, naxac сказал:

    а что у тебя находится

    Я думал не потребуется весь код, ибо я мог криво адаптировать (или не до конца) таймеры. А вообще это ф-ия get_num(str,idx), она одинакова и в оригинальном АМК, и в Солянке. А менял там коды работы с таймерами, начиная с ф-ии start_timer. Если уж вылет получаем, имея лишь ремкит в инвентаре, видимо, проверка начинается уже с кондиции самого repbox (они вроде рассчитаны на 5-кратное использование, из IMM). Ну чёрт с ним, это наверное, ещё возможно отследить и исправить. Я вот не пойму, почему вылетает при лоаде сейва, на котором никакой речи о присутствии ремкита нет.

    Здесь могла быть ваша реклама.


    Подарки

  • 3
  • 4
  • 5
  • 5
  • Ссылка на комментарий

    @mole venomous, чекни измененные тобой скрипты луа-плагином (если в npp работаешь) или синтакс-чекером. Вернее всего, где-то ошибка и просто напросто бъётся сохранение.

    Аддон для ОП-2.09.2: Яндекс/Google/GitHub

    naxac.gif


    Подарки

    Ссылка на комментарий
    3 часа назад, naxac сказал:

    где-то ошибка

    С синтаксисом точно порядок, я за этим слежу (чекером всё равно проверил, на всякий).

    https://yadi.sk/d/Y1lcpjRHV9kt8w  

    Старый код далеко не всегда удаляю, а тот код, что не меняю, привожу с приятному глазу виду. Там вероятно, "цепная" реакция и ф-ии вызываются одна за другой. Буду по тихому "подменять". Я подумал, может кто сталкивался с подобными вылетами при правке служебных АМК-шных ф-ий, а то заниматься тупой копи-пастой неохота, лучше понять, где ошибся и не менять лишнего.

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

    Здесь могла быть ваша реклама.


    Подарки

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

    https://www.dropbox.com/s/wvub0j4ix30gecy/trade_manager.script?dl=0

    Надо разбораться и понять, как работает функция update из этого скрипта. Имеются внешние локалы:

    Цитата

    local h24 = 24

    local s24 = 3600 * h24

    local c_time = game.CTime()

    local actor = db.actor

    local t_data = {}

    local t_ini = {}

    Имеется функция:

    Скрытый текст
    
    function update( npc )
    	local tt = t_data[npc:id()]
    	if ( tt.update_time or 0 ) >= time_global() then return end
    
    	tt.update_time = time_global() + 60000 + npc:id()	-- хреновая, но рандомизация
    
    	local str = pick_section( actor, npc, tt.buy_condition )
    	if tt.current_buy_condition ~= str then
    		npc:buy_condition( tt.config, str )
    		tt.current_buy_condition = str
    	end
    
    	str = pick_section( actor, npc, tt.sell_condition )
    	if tt.current_sell_condition ~= str then
    		npc:sell_condition( tt.config, str )
    		tt.current_sell_condition = str
    	end
    
    	if not tt.buy_supplies then return end
    
    	str = pick_section( actor, npc, tt.buy_supplies )
    	if ( tt.current_buy_supplies ~= str ) or ( not tt.resuply_time ) or tt.resuply_time < game.get_game_time() then
    
    		npc:buy_supplies( tt.config, str )
    		tt.current_buy_supplies = str
    		c_time:setHMS( h24, 0, 0 )
    		tt.resuply_time = game.get_game_time() + c_time
    	end	
    end

    Из всех внешних локалов в теле этой функции используется только c_time. Но этот c_time нигде больше за пределами этой функции не используется, следовательно никакая информация через него не передаётся вовне.

     

    А что тогда вообще делает эта функция? Она принимает аргумент npc, ничего не возвращает и ничего не пишет во внешние локалы. Как тогда вызов этой функции может на что-то повлиять в игре? Тем не менее влияние на игровой процесс есть. Например если модифицировать строчку 

    Цитата

    tt.update_time = time_global() + 60000 + npc:id()

    эффект может быть весьма заметным и ощутимым.

     

    Я не понимаю, каким образом вышеупомянутая функция может передать информацию (например update_time) за пределы себя. Кто может объяснить, помочь или хотя бы посочувствовать?

    • Сочувствую 2
    Ссылка на комментарий

    @DMT, функция не обязана что-то возвращать, чтобы проделать какую-либо работу. Вот здесь

    local tt = t_data[npc:id()]

    из массива менеджеров торговли (не знаю, из какого мода взят код, но это именно переделанный относительно оригинала trade_manager) читается экземпляр, соответствующий конкретному NPC. Далее происходит изменение свойств этого экземпляра (списков покупки/продажи) в зависимости от условий. При этом массив менеджеров торговли наполняется другой функцией (trade_init или её аналог), а результаты изменений, сделанных внутри функции update, доступны также и за её пределами.

     

    Для общего понимания рекомендую почитать, что такое ссылочные типы данных и типы значений (reference type и value type).

    • Нравится 1
    Ссылка на комментарий
    12 часов назад, DMT сказал:

    А что тогда вообще делает эта функция? Она принимает аргумент npc, ничего не возвращает и ничего не пишет во внешние локалы. Как тогда вызов этой функции может на что-то повлиять в игре?

    Это не чистая функция, у нее есть побочные эффекты в виде вызовов npc:buy_condition и аналогичных функций.

    • Согласен 1

    Подарки

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

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

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

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

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

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

    Войти

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

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

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

    AMK-Team.ru

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