KD87 718 Опубликовано 14 Октября 2011 Поделиться Опубликовано 14 Октября 2011 Artos, upd:grenade_mode читается перед апдейт-пакетом cse_alife_item. Тогда num_items будет ненулевой и все нормально прочитается. Ссылка на комментарий
Artos 99 Опубликовано 14 Октября 2011 Поделиться Опубликовано 14 Октября 2011 (изменено) KD87 Вау! Оторвать бы кое-что тому, кто так извратился со структурой пакета ... Спасибо огромадное! Все встало на свои места. Теперь осталось чуток подправить читалку нет-пакетов ... P.S. Для *Shoker*-а: Проверяй с исправленным вариантом (на SHoC проверено): m_net_utils_111014 Изменено 14 Октября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
SkyLoader 53 Опубликовано 14 Октября 2011 Поделиться Опубликовано 14 Октября 2011 Приветствую всех. Можно ли убрать разаттачивание предметов при смерти непися? (убрал очистку инвентаря при смерти) Если можно, то как? Ссылка на комментарий
Darkscape 0 Опубликовано 14 Октября 2011 Поделиться Опубликовано 14 Октября 2011 Так как закрыть ПДА при вызове? Проверяем на инфопоршень "ui_pda", а дальше? Ссылка на комментарий
RvP 1 Опубликовано 14 Октября 2011 Поделиться Опубликовано 14 Октября 2011 Darkscape, local pda = level.main_input_receiver() level.start_stop_menu(pda, true) для ТЧ Vita sine libertate, nihil Vita sine litteris - mors est Ссылка на комментарий
FLUDMAN 7 Опубликовано 14 Октября 2011 Поделиться Опубликовано 14 Октября 2011 вот разбираюсь с респавном, начал тестировать: [116] ; cse_abstract properties section_name = respawn name = esc_dog_test position = -208,-20,-146 direction = 0,0,0 ; cse_alife_object properties game_vertex_id = 61 distance = 10 level_vertex_id = 44615 object_flags = 0xffffff3e custom_data = <<END [respawn] respawn_section = esc_dog_test max_count = 8 ;min_count = 2 max_spawn = 2 idle_spawn = 5,5 conditions = 100 END ; cse_shape properties shapes = shape0 shape0:type = sphere shape0:offset = 0,0,0 shape0:radius = 1 ; cse_alife_space_restrictor properties restrictor_type = 0 ; se_respawn properties респавнятся собачки в лагере новичков на кордоне (специально, чтоб не бегать).idle_spawn = 5,5 - вроде означает что переодичность 5 мин, сделал так специально, чтоб просто протестить. [esc_dog_test]:dog_strong custom_data = scripts\esc_dog_test.ltx [smart_terrains] respawn_check = false none = true по моей задумке раз в 5 минут должно спавниться по 2 собачки и свободно гулять по всей зоне, игнорируя гулаги. начинаю новую игру, бегу в лагерь новичков, вижу собак - всё правильно. потом убиваю их жду 5 минут, но новые не появляются, потом ещё 5 - ничего. Вопрос: почему они дальше не хотят спавниться? P.S. а перед тем как делать респавн надо самих собачек заспавнить или нет, а то я не спавнил? Ссылка на комментарий
Artos 99 Опубликовано 14 Октября 2011 Поделиться Опубликовано 14 Октября 2011 (изменено) FLUDMAN, по идее 'криминала' у тебя вроде нет, должны респавниться. 1. Убери из секции респавнера строку 'conditions = 100', она излишня. 2. Строка idle_spawn = 5,5 задает периодичность в 5,5 секунд, а не минут. Наверное стОит увеличить. 3. Самому спавнить не нужно, твой респавнер должен каждый запуск игры спавнить по две собаки и далее по тайм-ауту ... по 2 штуке ... пока их 'в живых' не будет 8 штук. Погибнут - опять доспавнит. Если не так - оригинальный ли у тебя 'se_respawn.script' или со сторонними правками? Изменено 14 Октября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Leshik 0 Опубликовано 14 Октября 2011 Поделиться Опубликовано 14 Октября 2011 (изменено) Всем привет! Попытался создать звук при использовании предмета при помощи скриптов, но при использовании предмета получаю не звук, а вылет: FATAL ERROR [error]Expression : fatal error [error]Function : CScriptEngine::lua_error [error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp [error]Line : 73 [error]Description : <no expression> [error]Arguments : LUA error: ...:\s.t.a.l.k.e.r\gamedata\scripts\bind_stalker.script:30: attempt to index global 'sound_eat' (a nil value) stack trace: ---------------------------------------------------------------------------------------------------------------------- function actor_binder:net_destroy() if(actor_stats.remove_from_ranking~=nil)then actor_stats.remove_from_ranking(self.object:id()) end -- game_stats.shutdown () db.del_actor(self.object) sr_light.clean_up () self.object:set_callback(callback.inventory_info, nil) self.object:set_callback(callback.article_info, nil) self.object:set_callback(callback.on_item_take, nil) self.object:set_callback(callback.on_item_drop, nil) -- self.object:set_callback(callback.use_object, nil) self.object:set_callback(callback.task_state, nil) self.object:set_callback(callback.level_border_enter, nil) self.object:set_callback(callback.level_border_exit, nil) self.object:set_callback(callback.take_item_from_box, nil) self.object:set_callback(callback.use_object, nil) if sr_psy_antenna.psy_antenna then sr_psy_antenna.psy_antenna:destroy() sr_psy_antenna.psy_antenna = false end xr_sound.stop_all_sound_object() object_binder.net_destroy(self) end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:reinit() object_binder.reinit(self) local npc_id = self.object:id() db.storage[npc_id] = { } self.st = db.storage[npc_id] self.st.pstor = nil self.next_restrictors_update_time = -10000 self.object:set_callback(callback.inventory_info, self.info_callback, self) self.object:set_callback(callback.article_info, self.article_callback, self) self.object:set_callback(callback.on_item_take, self.on_item_take, self) self.object:set_callback(callback.on_item_drop, self.on_item_drop, self) self.object:set_callback(callback.trade_sell_buy_item, self.on_trade, self) -- for game stats --self.object:set_callback(callback.actor_sleep, self.sleep_callback, self) self.object:set_callback(callback.task_state, self.task_callback, self) --self.object:set_callback(callback.map_location_added, self.map_location_added_callback, self) self.object:set_callback(callback.level_border_enter, self.level_border_enter, self) self.object:set_callback(callback.level_border_exit, self.level_border_exit, self) self.object:set_callback(callback.take_item_from_box, self.take_item_from_box, self) self.object:set_callback(callback.use_object, self.use_obj, self) self.object:set_callback(callback.use_object, self.use_object, self) end ---------------------------------------------------------------------------------------------------------------------- А вот сам файл sound_eat function use_snd(obj) local obj_sect = obj:section() local snd if obj_sect == 'medkit' then snd = interface\inv_medkit elseif obj_sect == 'kolbasa' then snd = interface\inv_food elseif obj_sect == 'bandage' then snd = interface\inv_bandage elseif obj_sect == 'vodka' then snd = interface\inv_vodka elseif obj_sect == 'antirad' then snd = interface\inv_pills elseif obj_sect == 'energy_drink' then snd = interface\inv_softdrink end if snd then local snd_obj = xr_sound.get_safe_sound_object(snd) snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0) end end З.Ы. Всё делал по уроку на сталкер инсайд. Изменено 14 Октября 2011 пользователем Leshik Ссылка на комментарий
RvP 1 Опубликовано 14 Октября 2011 Поделиться Опубликовано 14 Октября 2011 Leshik, if obj_sect == 'medkit' then snd = interface\inv_medkit elseif obj_sect == 'kolbasa' then snd = interface\inv_food elseif obj_sect == 'bandage' then snd = interface\inv_bandage elseif obj_sect == 'vodka' then snd = interface\inv_vodka elseif obj_sect == 'antirad' then snd = interface\inv_pills elseif obj_sect == 'energy_drink' then snd = interface\inv_softdrink в правой части должно везде быть по примеру if obj_sect == 'medkit' then snd = [[interface\inv_medkit]] Vita sine libertate, nihil Vita sine litteris - mors est Ссылка на комментарий
*Shoker* 322 Опубликовано 14 Октября 2011 Поделиться Опубликовано 14 Октября 2011 (изменено) Artos, KD87 Огромное спасибо за помощь С последней версией всё прекрасно работает. Никаких сдвигов (ЧН) я не заметил, все параметры отображаются корректно. Теперь попробую переделать колбек на выстрел, чтобы без кейлогера работал. RvP А твоя lua-библиотека с невырезанными функциями работает только в ТЧ? > в правой части должно везде быть по примеру Ещё можно так: if obj_sect == 'medkit' then snd = "interface\\inv_medkit" Добавлено через 7 мин.: И вообще, функцию use_object лучше так переделать, использовать таблицу: local snd_tbl = { --\\ Медикаменты medkit = "interface\\inv_medkit", medkit_army = "interface\\inv_medkit", medkit_scientic = "interface\\inv_medkit", bandage = "interface\\inv_bandage", antirad = "interface\\inv_pills", --\\ Еда bread = "interface\\inv_food", kolbasa = "interface\\inv_food", conserva = "interface\\inv_food", --\\ Напитки vodka = "interface\\inv_vodka", energy_drink = "interface\\inv_softdrink", } function use_snd(obj) local obj_sect = obj:section() if snd_tbl[obj_sect] then local snd_obj = xr_sound.get_safe_sound_object(snd_tbl[obj_sect]) snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0) end end Изменено 14 Октября 2011 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
KoRan 0 Опубликовано 14 Октября 2011 Поделиться Опубликовано 14 Октября 2011 Всем привет! Как сделать проверку на взятие предмета ГГ и выдачу инфопоршня?(Нужно несколько разных предметов, на разных этапах) function actor_binder:on_item_take (obj) level_tasks.proceed(self.object) --game_stats.update_take_item (obj, self.object) end if obj and obj:section() == "af_medusa" then db.actor:give_info_portion("find_art1") end if obj and obj:section() == "af_gravi" then db.actor:give_info_portion("find_art2") end Если делаю так, то выполняется проверка только для медузы, а проверка на грави(и на последующие предметы) не выполняется. Заранее спасибо... Ссылка на комментарий
*Shoker* 322 Опубликовано 14 Октября 2011 Поделиться Опубликовано 14 Октября 2011 (изменено) KoRan Вообще то "if obj and obj:section() == "af_medusa" then ..." и то что ниже, должно быть внутри функции actor_binder:on_item_take (obj), тоесть до end стоять. function actor_binder:on_item_take (obj) level_tasks.proceed(self.object) --game_stats.update_take_item (obj, self.object) if obj and obj:section() == "af_medusa" then db.actor:give_info_portion("find_art1") end if obj and obj:section() == "af_gravi" then db.actor:give_info_portion("find_art2") end end Но тебе проще будет сделать так: local my_info_table = { af_medusa = "find_art1", af_gravi = "find_art2", } function actor_binder:on_item_take (obj) level_tasks.proceed(self.object) --game_stats.update_take_item (obj, self.object) if my_info_table[obj:section()] then db.actor:give_info_portion( my_info_table[obj:section()]) end end Тогда тебе достаточно будет лишь заполнять таблицу my_info_table, секция предмета = имя инфы Artos Кажется нашёл в новой версии нет-пакетов ошибки. Я ещё не до конца досмотрел, буду писать по мере нахождения: 1) В функциях работы с нет-пакетами аномалий появилась проверка на аномалию, функция isAnomaly(), но она есть только в твоём моде (в _G скрипте), соответственно если кто то другой будет использовать твой скрипт, то при попытке разбора аномалии, игра будет вылетать. Функцию вставить не проблема, но имхо это уже лишняя осторожность. 2) В Fill_Packet_cse_ph_skeleton у тебя идёт запись updskeleton_flags, но в Parse_Packet_cse_ph_skeleton (и вообще во всём скрипте) ты её не считываешь. Причём в старой версии скрипта это считывание присутствует. 3) Не уверен что ошибка. но в Parse_Packet_se_zone_anom, у тебя идёт чтение last_spawn_time_present, читается 8 бит и если они есть, то вызывается функция utils.w_CTime(oPs, tT.ctime), проблема в том, что в чистой игре, эта функция вылетает с таким логом: [error]Arguments : LUA error: ...es\stalker - clear sky\gamedata\scripts\utils.script:595: attempt to index local 't' (a number value) В старой версии чтение и запись CTime я просто убрал, вылетов и глюков не было, хотя не могу стопроцентно ручаться. Всё это проверялось на ЧН. Больше вроде бы пока ничего не нашёл. ЗЫ: Некоторые вещи мог сказать не правильно, но ты суть поймёшь, если глянешь на скрипт. Изменено 14 Октября 2011 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Лёха_тц 3 Опубликовано 15 Октября 2011 Поделиться Опубликовано 15 Октября 2011 Кто знает что это означает Expression : no_assert Function : CALifeStoryRegistry::add File : E:\stalker\patch_1_0004\xr_3da\xrGame\alife_story_registry.cpp Line : 30 Description : Specified story object is already in the Story registry! по моему насколько я понял проблема в story_id но я уже все раз по сто проверил. Ссылка на комментарий
Капрал Хикс 524 Опубликовано 15 Октября 2011 Поделиться Опубликовано 15 Октября 2011 Лёха_тц, проверяй ещё раз, у тебя где-то совпадают айди. Ссылка на комментарий
*Shoker* 322 Опубликовано 15 Октября 2011 Поделиться Опубликовано 15 Октября 2011 Лёха_тц И новую игру не забывай начинать, если спавн меняешь. Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
7.9 174 Опубликовано 15 Октября 2011 Поделиться Опубликовано 15 Октября 2011 (изменено) Есть доступ к "инвентарному весу" инвентарных объектов через нет-пакеты? Вопрос хоть и не в тему, но всё-равно - уточни его, пожалуйста. Что значит "инвентарный вес"? ColR_iT Изменено 15 Октября 2011 пользователем ColR_iT всё легко Ссылка на комментарий
Darkscape 0 Опубликовано 15 Октября 2011 Поделиться Опубликовано 15 Октября 2011 RvP, спасибо. Как узнать скриптово расстояние до цели, которое под прицелом выводится? Пробовал level.get_target_dist(), но с ним вылетает и пишет attempt to call field 'get_target_dist' (a nil value) Ссылка на комментарий
7.9 174 Опубликовано 15 Октября 2011 Поделиться Опубликовано 15 Октября 2011 (изменено) "Инвентарный вес" - имеется в виду "вес предмета в инвентаре ГГ" в "кг" - например: "медуза 5кг". Есть "mass"-а у "cse_alife_object_physic"-а, но это, скорее всего, не то. Задача такая: Скриптом изменять "инвентарный вес" объекта(предмета). Потом, если получиться, физическую массу то-же надо попробовать. Добавлено через 1 мин.: Darkscape, тебе нужно заменить xrGame.dll на r15 и выше. http://www.amk-team.ru/forum/index.php?showtopic=10538 Изменено 15 Октября 2011 пользователем 7.9 всё легко Ссылка на комментарий
Darkscape 0 Опубликовано 15 Октября 2011 Поделиться Опубликовано 15 Октября 2011 Darkscape, тебе нужно заменить xrGame.dll на r15 и выше.Это на ТЧ идет? X-Ray Extension вроде на ЗП Ссылка на комментарий
Artos 99 Опубликовано 15 Октября 2011 Поделиться Опубликовано 15 Октября 2011 (изменено) *Shoker* Модуль нет-пакетов все же пишется не как универсальный для 'всего и вся', а в привязке и к конкретному моду и учитывая его применение с головою, а не методом тыка ... 1. Все пакеты для объектов можно получать конкртеным вызовом именно той функциии, которая предназначена для данного класса. То, что начал вводить в модуль обобщенные вызовы, которые сами по классу объекта выбирают соответствующие методы чтения/записи - это пока и а 'разработке' и предназначено в первую очередь для 'only Simbion'. Если модмейкеру не хочется каждый раз самому в кодах предварительно определять класс объекта, а хочет воспользоваться 'общим' вызовом - то и должен озаботиться портированием к 'себе' соответствующих доп.функций. Можно, конечно, и isAnomaly() встроить в модуль и еще не мало чего ... но это тупиковый путь. Всего и вся в один модуль не встроить, начнутся коллизии из-за различий как в конфигах, так и в добавленных классах и пр. Так что, считаю более правильным - дана основа и некоторые бонусы. Хочешь воспользоваться бонусами - потрудись под них подстроиться. 2. Параметр 'updskeleton_flags' остался с давних времен и он рудиментарен. Спасибо за подсказку - вычистил. 3. Действительно с utils.w_CTime для ЧН/ЗП упустил сей нюанс, что может возвоащать не юзердату а нолик иль ничего. Ранее просто считывал как 'остаток' (кстати этот вариант остался и достточно раскомментировать). Подправил сей момент под ЧН/ЗП, но пока не протестировал ... Если есть желание/полтребность - могу выложить подправленный вариант. Изменено 15 Октября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти