sk0rpi0n 0 Опубликовано 12 Мая 2010 Поделиться Опубликовано 12 Мая 2010 А можно ли один раз написать скрипт и далее использовать его? Ссылка на комментарий
Darien 0 Опубликовано 12 Мая 2010 Поделиться Опубликовано 12 Мая 2010 (изменено) sk0rpi0n Да, ты один раз занесёшь в скриптовый файл функцию, а потом в любое время можешь вызывать её вот так - имя_файла.имя_функции(). Или, если вызов находится в этом же файле, то можно и так - this.имя_функции(). Изменено 12 Мая 2010 пользователем Darien Ссылка на комментарий
sk0rpi0n 0 Опубликовано 12 Мая 2010 Поделиться Опубликовано 12 Мая 2010 (изменено) Можно по подробний, как ставить этот скрипт И спавн потом чтобы был в одну или в две строки че то типо этого - spawn_anom(anom_mine, radius, pos, get_lv, get_gv, power) ну я 2 месяца не делал вообще моды и забыл вообще все( Можете рассказать, как после создания этого скрипта его юзать для спавна аномалий Изменено 12 Мая 2010 пользователем sk0rpi0n Ссылка на комментарий
Darien 0 Опубликовано 12 Мая 2010 Поделиться Опубликовано 12 Мая 2010 (изменено) sk0rpi0n Для начала нужно знать, что проводя различные операци над аномалиями, нужно быть осторожным. От одной аномалии проблем возникнуть не должно, а вот при спавне штук ста - проблемы будут наверняка. А теперь как спавнить. Создаёшь файл anoms.script в scripts, копируешь туда весь код. Бежишь в нужное место снимать координаты. Подставляешь сюда название аномалии, радиус, нужные координаты и мощность соответственно: local var = spawn_anom(anom_mine, radius, pos, get_lv, get_gv, power) Например(координаты взяты от балды): local var = spawn_anom("zone_mine_electric", 4, vector():set(193.31, -21.36, 316.53), 11459, 109, 1) Ну и осталось только вызвать. Самый простой способ - через диалог. Думаю знаешь как. А если незнаешь, то ищешь нужную фразу в dialogs_***.xml (*** - имя уровня) и после тегов <text>...</text> пишешь <action>anoms.spawn</action>. Надеюсь понятно объяснил. sk0rpi0n Способов вызвать при старте игры - масса. Можно и в бинд_сталкере. Но подобными вещами захламлять его не стоит. Нафига тебе 2 последние функции? Лишние вызовы. Всё что надо - уже есть. Вызывать надо spawn(), и всё. Изменено 12 Мая 2010 пользователем Darien Ссылка на комментарий
sk0rpi0n 0 Опубликовано 12 Мая 2010 Поделиться Опубликовано 12 Мая 2010 (изменено) Как бы этот вопрос смешно не выглядел, но как сделать чтобы сначала уровня они спавнились?xD В bind_stalker.script МБ прописать? Кстати, если в скрипт это, то какой функцией вызывать спавн?Например через диалог.(в конце кода добавил что-то на подобе стартера спавна) function spawn() local var = spawn_anom(anom_mine, radius, pos, get_lv, get_gv, power) -- название аномалии, радиус её действия, позиция, лв, гв, мощность end function spawn_anom(anom_name,plosh,position,level_vertex_id,game_vertex_id,powers_a,tim e_danger os) -- последний параметр не передаём local obj = alife():create(anom_name,position,level_vertex_id,game_vertex_id) local pac = net_packet() obj:STATE_Write(pac) local game_vertex_id = pac:r_u16() local distance = pac:r_float() local direction = pac:r_u32() local level_vertex_id = pac:r_u32() local object_flags = pac:r_s32() local custom_data = pac:r_stringZ() local story_id = pac:r_s32() local spawn_story_id = pac:r_s32() local shape_count = pac:r_u8() for i=1,shape_count do local shape_type = pac:r_u8() if shape_type == 0 then local center = pac:r_vec3() local plosh = pac:r_float() else local box = pac:r_matrix() end end local restrikror_type = pac:r_u8() local powers = pac:r_float() local owner_id = pac:r_s32() local on_off_mode_enabled_time = pac:r_u32() local on_off_mode_disabled_time = pac:r_u32() local on_off_mode_shift_time = pac:r_u32() local offline_interactive_radius = pac:r_float() local artefact_spawn_places_count = pac:r_u16() local artefact_position_offset = pac:r_s32() local last_spawn_time_present = pac:r_u8() if pac:r_elapsed()~= 0 then abort("left=%d",pac:r_elapsed()) end pac:w_begin(game_vertex_id) pac:w_float(distance) pac:w_u32(direction) pac:w_u32(level_vertex_id) pac:w_u32(object_flags) pac:w_stringZ(custom_data) pac:w_s32(story_id) pac:w_s32(spawn_story_id) pac:w_u8(1) pac:w_u8(0) local sphere_center = vector() sphere_center:set(0,0,0) pac:w_vec3(sphere_center) pac:w_float(plosh) pac:w_u8(restrikror_type) if powers_a ~= nil then powers = powers_a end pac:w_float(powers) if time_dangeros == nil then owner_id = bit_not(0) else owner_id = time_dangeros end pac:w_u32(owner_id) pac:w_u32(on_off_mode_enabled_time) pac:w_u32(on_off_mode_disabled_time) pac:w_u32(on_off_mode_shift_time) pac:w_float(offline_interactive_radius) pac:w_u16(artefact_spawn_places_count) pac:w_u32(artefact_position_offset) pac:w_u8(last_spawn_time_present) pac:r_seek(0) obj:STATE_Read(pac,pac:w_tell()) return obj end local var = spawn_anom("zone_mine_electric", 4, vector():set(-10.034901, 0.225154, 40.438499), 134451, 0, 1) end Так чтоль?) <censored>, ошибся, тут надо второй раз писать function_spawn() или нет? Строгое предупреждение от модератора Shader Давай без мата с вуалью. ОК? Изменено 12 Мая 2010 пользователем Shader Ссылка на комментарий
Darien 0 Опубликовано 12 Мая 2010 Поделиться Опубликовано 12 Мая 2010 sk0rpi0n Убери всё, что ты добавил после второй функции. Всё, что нужно я тебе уже дал, тебе остаётся только вызвать в нужный момент (как вызывать тоже писал). Теперь понятно? Ссылка на комментарий
stalker19965 0 Опубликовано 12 Мая 2010 Поделиться Опубликовано 12 Мая 2010 Здравствуйте,я создал снайпера в тч,что ему прописать в логике,чтоб когда он увидит кого нить,не уходил,а стрелял с одного места,заранее спасибо.. Ссылка на комментарий
DiXares 1 Опубликовано 12 Мая 2010 Поделиться Опубликовано 12 Мая 2010 (изменено) Сталкеры! А EditBox может распознавать русскую кирилицу? А ввод в него русского текста? Возможен поиск русского слова из текста по типу: if string.find("Оружие") содержится в EditBox:GetText then end? Изменено 12 Мая 2010 пользователем TREWKO Ссылка на комментарий
sk0rpi0n 0 Опубликовано 13 Мая 2010 Поделиться Опубликовано 13 Мая 2010 Сделал все правильно, через диалог все добавил, не появляется аномка. Как тока не пробовал. Чертов спавн Ссылка на комментарий
AKKK1 6 Опубликовано 14 Мая 2010 Поделиться Опубликовано 14 Мая 2010 Возможно он стоит там где нет аи сетки хотя не факт Ссылка на комментарий
DiXares 1 Опубликовано 14 Мая 2010 Поделиться Опубликовано 14 Мая 2010 Товарищи! Чё то я не понял: Мне надо проверить, есть ли в слоте с артефактами предмет... Я так понимаю надо сделать: local xf_table = db.actor:item_in_slot(Какой слот у артефактов?(Посмотрел, у артов в конфигах вообще нет слота, но они ссылаются на af_base, но у него slot закомментирован, есть animation_slot)) if xf_table = "item_test"(вот как записать наличие одно предмета из таблицы(string.find? Но как?)?) Ссылка на комментарий
Vano_Santuri 33 Опубликовано 14 Мая 2010 Поделиться Опубликовано 14 Мая 2010 TREWKO, в файле system.ltx есть некоторое упоминание для всех слотов slot_persistent_11 = false;artefact slot_active_11 = true Думаю слот под номером 11 , для шлемов со слотом 12 все отлично проверялось.... Что-то кончается, что-то начинается... Ссылка на комментарий
DiXares 1 Опубликовано 14 Мая 2010 Поделиться Опубликовано 14 Мая 2010 (изменено) Ага, понятно, спасибо! Вот ещё, сделал новый параметр ГГ, и хочу вывести прогресс бар на ухд. Вот что сделал: function progress_bar_oxy() if DiXaresCounterOxy == 0 then local texture_fds = "progress_bar_oxy_0" local hud = get_hud() local cs = hud:GetCustomStatic(texture_fds) if cs == nil then hud:AddCustomStatic(texture_fds, true) end hud:RemoveCustomStatic("progress_bar_oxy_10", true) hud:RemoveCustomStatic("progress_bar_oxy_20", true) hud:RemoveCustomStatic("progress_bar_oxy_30", true) hud:RemoveCustomStatic("progress_bar_oxy_40", true) hud:RemoveCustomStatic("progress_bar_oxy_50", true) hud:RemoveCustomStatic("progress_bar_oxy_60", true) hud:RemoveCustomStatic("progress_bar_oxy_70", true) hud:RemoveCustomStatic("progress_bar_oxy_80", true) hud:RemoveCustomStatic("progress_bar_oxy_90", true) hud:RemoveCustomStatic("progress_bar_oxy_100", true) end if DiXaresCounterOxy < 0.1 and DiXaresCounterOxy > 0.0 then local texture_fds = "progress_bar_oxy_10" local hud = get_hud() local cs = hud:GetCustomStatic(texture_fds) if cs == nil then hud:AddCustomStatic(texture_fds, true) end hud:RemoveCustomStatic("progress_bar_oxy_0", true) hud:RemoveCustomStatic("progress_bar_oxy_20", true) hud:RemoveCustomStatic("progress_bar_oxy_30", true) hud:RemoveCustomStatic("progress_bar_oxy_40", true) hud:RemoveCustomStatic("progress_bar_oxy_50", true) hud:RemoveCustomStatic("progress_bar_oxy_60", true) hud:RemoveCustomStatic("progress_bar_oxy_70", true) hud:RemoveCustomStatic("progress_bar_oxy_80", true) hud:RemoveCustomStatic("progress_bar_oxy_90", true) hud:RemoveCustomStatic("progress_bar_oxy_100", true) end if DiXaresCounterOxy < 0.2 and DiXaresCounterOxy > 0.1 then local texture_fds = "progress_bar_oxy_20" local hud = get_hud() local cs = hud:GetCustomStatic(texture_fds) if cs == nil then hud:AddCustomStatic(texture_fds, true) end hud:RemoveCustomStatic("progress_bar_oxy_10", true) hud:RemoveCustomStatic("progress_bar_oxy_0", true) hud:RemoveCustomStatic("progress_bar_oxy_30", true) hud:RemoveCustomStatic("progress_bar_oxy_40", true) hud:RemoveCustomStatic("progress_bar_oxy_50", true) hud:RemoveCustomStatic("progress_bar_oxy_60", true) hud:RemoveCustomStatic("progress_bar_oxy_70", true) hud:RemoveCustomStatic("progress_bar_oxy_80", true) hud:RemoveCustomStatic("progress_bar_oxy_90", true) hud:RemoveCustomStatic("progress_bar_oxy_100", true) end if DiXaresCounterOxy < 0.3 and DiXaresCounterOxy > 0.2 then local texture_fds = "progress_bar_oxy_30" local hud = get_hud() local cs = hud:GetCustomStatic(texture_fds) if cs == nil then hud:AddCustomStatic(texture_fds, true) end hud:RemoveCustomStatic("progress_bar_oxy_10", true) hud:RemoveCustomStatic("progress_bar_oxy_20", true) hud:RemoveCustomStatic("progress_bar_oxy_0", true) hud:RemoveCustomStatic("progress_bar_oxy_40", true) hud:RemoveCustomStatic("progress_bar_oxy_50", true) hud:RemoveCustomStatic("progress_bar_oxy_60", true) hud:RemoveCustomStatic("progress_bar_oxy_70", true) hud:RemoveCustomStatic("progress_bar_oxy_80", true) hud:RemoveCustomStatic("progress_bar_oxy_90", true) hud:RemoveCustomStatic("progress_bar_oxy_100", true) end if DiXaresCounterOxy < 0.4 and DiXaresCounterOxy > 0.3 then local texture_fds = "progress_bar_oxy_40" local hud = get_hud() local cs = hud:GetCustomStatic(texture_fds) if cs == nil then hud:AddCustomStatic(texture_fds, true) end hud:RemoveCustomStatic("progress_bar_oxy_10", true) hud:RemoveCustomStatic("progress_bar_oxy_20", true) hud:RemoveCustomStatic("progress_bar_oxy_30", true) hud:RemoveCustomStatic("progress_bar_oxy_0", true) hud:RemoveCustomStatic("progress_bar_oxy_50", true) hud:RemoveCustomStatic("progress_bar_oxy_60", true) hud:RemoveCustomStatic("progress_bar_oxy_70", true) hud:RemoveCustomStatic("progress_bar_oxy_80", true) hud:RemoveCustomStatic("progress_bar_oxy_90", true) hud:RemoveCustomStatic("progress_bar_oxy_100", true) end if DiXaresCounterOxy < 0.5 and DiXaresCounterOxy > 0.4 then local texture_fds = "progress_bar_oxy_50" local hud = get_hud() local cs = hud:GetCustomStatic(texture_fds) if cs == nil then hud:AddCustomStatic(texture_fds, true) end hud:RemoveCustomStatic("progress_bar_oxy_10", true) hud:RemoveCustomStatic("progress_bar_oxy_20", true) hud:RemoveCustomStatic("progress_bar_oxy_30", true) hud:RemoveCustomStatic("progress_bar_oxy_40", true) hud:RemoveCustomStatic("progress_bar_oxy_0", true) hud:RemoveCustomStatic("progress_bar_oxy_60", true) hud:RemoveCustomStatic("progress_bar_oxy_70", true) hud:RemoveCustomStatic("progress_bar_oxy_80", true) hud:RemoveCustomStatic("progress_bar_oxy_90", true) hud:RemoveCustomStatic("progress_bar_oxy_100", true) end if DiXaresCounterOxy < 0.6 and DiXaresCounterOxy > 0.5 then local texture_fds = "progress_bar_oxy_60" local hud = get_hud() local cs = hud:GetCustomStatic(texture_fds) if cs == nil then hud:AddCustomStatic(texture_fds, true) end hud:RemoveCustomStatic("progress_bar_oxy_10", true) hud:RemoveCustomStatic("progress_bar_oxy_20", true) hud:RemoveCustomStatic("progress_bar_oxy_30", true) hud:RemoveCustomStatic("progress_bar_oxy_40", true) hud:RemoveCustomStatic("progress_bar_oxy_50", true) hud:RemoveCustomStatic("progress_bar_oxy_0", true) hud:RemoveCustomStatic("progress_bar_oxy_70", true) hud:RemoveCustomStatic("progress_bar_oxy_80", true) hud:RemoveCustomStatic("progress_bar_oxy_90", true) hud:RemoveCustomStatic("progress_bar_oxy_100", true) end if DiXaresCounterOxy < 0.7 and DiXaresCounterOxy > 0.6 then local texture_fds = "progress_bar_oxy_70" local hud = get_hud() local cs = hud:GetCustomStatic(texture_fds) if cs == nil then hud:AddCustomStatic(texture_fds, true) end hud:RemoveCustomStatic("progress_bar_oxy_10", true) hud:RemoveCustomStatic("progress_bar_oxy_20", true) hud:RemoveCustomStatic("progress_bar_oxy_30", true) hud:RemoveCustomStatic("progress_bar_oxy_40", true) hud:RemoveCustomStatic("progress_bar_oxy_50", true) hud:RemoveCustomStatic("progress_bar_oxy_60", true) hud:RemoveCustomStatic("progress_bar_oxy_0", true) hud:RemoveCustomStatic("progress_bar_oxy_80", true) hud:RemoveCustomStatic("progress_bar_oxy_90", true) hud:RemoveCustomStatic("progress_bar_oxy_100", true) end if DiXaresCounterOxy < 0.8 and DiXaresCounterOxy > 0.7 then local texture_fds = "progress_bar_oxy_80" local hud = get_hud() local cs = hud:GetCustomStatic(texture_fds) if cs == nil then hud:AddCustomStatic(texture_fds, true) end hud:RemoveCustomStatic("progress_bar_oxy_10", true) hud:RemoveCustomStatic("progress_bar_oxy_20", true) hud:RemoveCustomStatic("progress_bar_oxy_30", true) hud:RemoveCustomStatic("progress_bar_oxy_40", true) hud:RemoveCustomStatic("progress_bar_oxy_50", true) hud:RemoveCustomStatic("progress_bar_oxy_60", true) hud:RemoveCustomStatic("progress_bar_oxy_70", true) hud:RemoveCustomStatic("progress_bar_oxy_0", true) hud:RemoveCustomStatic("progress_bar_oxy_90", true) hud:RemoveCustomStatic("progress_bar_oxy_100", true) end if DiXaresCounterOxy < 0.9 and DiXaresCounterOxy > 0.8 then local texture_fds = "progress_bar_oxy_90" local hud = get_hud() local cs = hud:GetCustomStatic(texture_fds) if cs == nil then hud:AddCustomStatic(texture_fds, true) end hud:RemoveCustomStatic("progress_bar_oxy_10", true) hud:RemoveCustomStatic("progress_bar_oxy_20", true) hud:RemoveCustomStatic("progress_bar_oxy_30", true) hud:RemoveCustomStatic("progress_bar_oxy_40", true) hud:RemoveCustomStatic("progress_bar_oxy_50", true) hud:RemoveCustomStatic("progress_bar_oxy_60", true) hud:RemoveCustomStatic("progress_bar_oxy_70", true) hud:RemoveCustomStatic("progress_bar_oxy_80", true) hud:RemoveCustomStatic("progress_bar_oxy_0", true) hud:RemoveCustomStatic("progress_bar_oxy_100", true) end if DiXaresCounterOxy < 1.0 and DiXaresCounterOxy > 0.9 then local texture_fds = "progress_bar_oxy_100" local hud = get_hud() local cs = hud:GetCustomStatic(texture_fds) if cs == nil then hud:AddCustomStatic(texture_fds, true) end hud:RemoveCustomStatic("progress_bar_oxy_10", true) hud:RemoveCustomStatic("progress_bar_oxy_20", true) hud:RemoveCustomStatic("progress_bar_oxy_30", true) hud:RemoveCustomStatic("progress_bar_oxy_40", true) hud:RemoveCustomStatic("progress_bar_oxy_50", true) hud:RemoveCustomStatic("progress_bar_oxy_60", true) hud:RemoveCustomStatic("progress_bar_oxy_70", true) hud:RemoveCustomStatic("progress_bar_oxy_80", true) hud:RemoveCustomStatic("progress_bar_oxy_90", true) hud:RemoveCustomStatic("progress_bar_oxy_0", true) end end Сделал виртуальную шкалу от 0.0 до 1.0. Дак вот, при вычитании из 1.0 числа 0.1 получаю дробь большую, примерно такую: 9.9882327382 Но бар не работает. Есть ли другой способ создания прогресс бара? И вот ещё, ни как не могу прочитать лампочку: function desfunctions_lights_1() for i=1,65535 do local obj = alife():object(i) if obj and obj:name()=="level_prefix_lights_hanging_lamp" then ds = obj:get_hanging_lamp() ds:turn_off() end end end Получаю вылет: dixarxights.script:46: attempt to call method 'get_hanging_lamp' (a nil value) Изменено 14 Мая 2010 пользователем TREWKO Ссылка на комментарий
stalker19965 0 Опубликовано 15 Мая 2010 Поделиться Опубликовано 15 Мая 2010 Я скачал АИ вертолётов,хочу заспавнить бтр. В самом файле spawn нужно подставлять координаты или создавать копию с координатами? И как его заставить появиться,я в bind_stalker вписал вот это: В секции function actor_binder:net_spawn(data),добавил это: -- БТР function spawn() spawn.btr(-86.21,-9.43,-152.87,179600,107,"test" ) end А вот сам файл spawn ------------------------------------------------------------------------------------------------------------- -- Спавн вертолета. На основе АМК --Параметры вызова: --позиция x, --позиция y, --позиция z, --левел вертекс, --гейм вертекс, --файл логики без расширения .ltx. !!!ДОЛЖЕН находиться в config\scripts\heli!!! ------------------------------------------------------------------------------------------------------------- function heli(section,posx,posy,posz,lvid,gvid,logic) local obj = alife():create(section,vector():set(posx,posy,posz),lvid,gvid) local packet = net_packet() obj:STATE_Write(packet) -- свойства cse_alife_object local game_vertex_id = packet:r_u16() local cse_alife_object__unk1_f32 = packet:r_float() local cse_alife_object__unk2_s32 = packet:r_s32() local level_vertex_id = packet:r_s32() local object_flags = packet:r_s32() local custom_data = packet:r_stringZ() local story_id = packet:r_s32() local cse_alife_object__unk3_s32 = packet:r_s32() -- свойства cse_visual local model_visual = packet:r_stringZ() local cse_visual__unk1_u8 = packet:r_u8() -- свойства cse_motion local motion_name = packet:r_stringZ() -- свойства cse_ph_skeleton local skeleton_name = packet:r_stringZ() local cse_ph_skeleton__unk1_u8 = packet:r_u8() local cse_ph_skeleton__unk2_u16 = packet:r_u16() -- свойства cse_alife_helicopter local cse_alife_helicopter__unk1_sz = packet:r_stringZ() local engine_sound = packet:r_stringZ() --устанавливаем логику custom_data = "[logic]\ncfg = scripts\\heli\\"..logic..".ltx" -- теперь заполняем нужные параметры -- свойства cse_alife_object packet:w_begin(game_vertex_id) packet:w_float(cse_alife_object__unk1_f32) packet:w_s32(cse_alife_object__unk2_s32) packet:w_s32(level_vertex_id) object_flags = bit_not(5) -- ~5 = 0xfffffffa packet:w_s32(object_flags) packet:w_stringZ(custom_data) packet:w_s32(-1) packet:w_s32(cse_alife_object__unk3_s32) -- свойства cse_visual packet:w_stringZ(model_visual) packet:w_u8(cse_visual__unk1_u8) -- свойства cse_motion packet:w_stringZ(motion_name) -- свойства cse_ph_skeleton skeleton_name = "idle" packet:w_stringZ(skeleton_name) packet:w_u8(cse_ph_skeleton__unk1_u8) packet:w_u16(cse_ph_skeleton__unk2_u16) -- свойства cse_alife_helicopter cse_alife_helicopter__unk1_sz = "idle" engine_sound = "alexmx\\helicopter" packet:w_stringZ(cse_alife_helicopter__unk1_sz) packet:w_stringZ(engine_sound) -- считываем скорректированные параметры packet:r_seek(0) obj:STATE_Read(packet, packet:w_tell()) return obj end ------------------------------------------------------------------------------------------------------------- -- Спавн БТР. На основе АМК --Параметры вызова: --позиция x, --позиция y, --позиция z, --левел вертекс, --гейм вертекс, --файл логики без расширения .ltx. !!!ДОЛЖЕН находиться в config\scripts\btr!!! ------------------------------------------------------------------------------------------------------------- function btr(posx,posy,posz,lvid,gvid,logic) local obj = alife():create("btr",vector():set(posx,posy,posz),lvid,gvid) local packet = net_packet() obj:STATE_Write(packet) -- свойства cse_alife_object local game_vertex_id = packet:r_u16() local cse_alife_object__unk1_f32 = packet:r_float() local cse_alife_object__unk2_s32 = packet:r_s32() local level_vertex_id = packet:r_s32() local object_flags = packet:r_s32() local custom_data = packet:r_stringZ() local story_id = packet:r_s32() local cse_alife_object__unk3_s32 = packet:r_s32() -- свойства cse_visual local model_visual = packet:r_stringZ() local cse_visual__unk1_u8 = packet:r_u8() -- свойства cse_ph_skeleton local skeleton_name = packet:r_stringZ() local cse_ph_skeleton__unk1_u8 = packet:r_u8() local cse_ph_skeleton__unk2_u16 = packet:r_u16() local health = packet:r_float() --устанавливаем логику custom_data = "[logic]\ncfg = scripts\\btr\\"..logic..".ltx" -- теперь заполняем нужные параметры -- свойства cse_alife_object packet:w_begin(game_vertex_id) packet:w_float(cse_alife_object__unk1_f32) packet:w_s32(cse_alife_object__unk2_s32) packet:w_s32(level_vertex_id) object_flags = bit_not(5) -- ~5 = 0xfffffffa packet:w_s32(object_flags) packet:w_stringZ(custom_data) packet:w_s32(-1) packet:w_s32(cse_alife_object__unk3_s32) -- свойства cse_visual packet:w_stringZ(model_visual) packet:w_u8(cse_visual__unk1_u8) -- свойства cse_ph_skeleton skeleton_name = "idle" packet:w_stringZ(skeleton_name) packet:w_u8(cse_ph_skeleton__unk1_u8) packet:w_u16(cse_ph_skeleton__unk2_u16) health = 1 packet:w_float(health) -- считываем скорректированные параметры packet:r_seek(0) obj:STATE_Read(packet, packet:w_tell()) return obj end function item(item,posx,posy,posz,lvid,gvid) local obj = alife():create(item,vector():set(posx,posy,posz),lvid,gvid) return obj end function inv(item,npc_id) if npc_id == nil then npc_id = db.actor:id() end local obj = alife():create(item,vector():set(0,0,0),1,1,npc_id) return obj end function heli_pair(posx,posy,posz,lvid,gvid,logic) local heli_a = heli(posx,posy,posz,lvid,gvid,logic) local heli_b = heli_copy(vector():set(posx+25,posy,posz),lvid,gvid,heli_a.id) heli_target.add_heli_pair(heli_a,heli_ end function heli_pair2(posx,posy,posz,lvid,gvid,logic) local heli_a = heli(posx,posy,posz,lvid,gvid,logic) local heli_b = heli(posx+25,posy,posz,lvid,gvid,"test_heli2") heli_target.add_heli_pair(heli_a,heli_ end function heli_copy(section,pos,lvid,gvid,id,logic) --читаем данные из прототипа local prototype = alife():object(id) local packet1 = net_packet() prototype:STATE_Write(packet1) -- свойства cse_alife_object local game_vertex_id1 = packet1:r_u16() local cse_alife_object1__unk1_f32 = packet1:r_float() local cse_alife_object1__unk2_s32 = packet1:r_s32() local level_vertex_id1 = packet1:r_s32() local object_flags1 = packet1:r_s32() local custom_data1 = packet1:r_stringZ() local obj = alife():create(section,pos,lvid,gvid) local packet = net_packet() obj:STATE_Write(packet) -- свойства cse_alife_object local game_vertex_id = packet:r_u16() local cse_alife_object__unk1_f32 = packet:r_float() local cse_alife_object__unk2_s32 = packet:r_s32() local level_vertex_id = packet:r_s32() local object_flags = packet:r_s32() local custom_data = packet:r_stringZ() local story_id = packet:r_s32() local cse_alife_object__unk3_s32 = packet:r_s32() -- свойства cse_visual local model_visual = packet:r_stringZ() local cse_visual__unk1_u8 = packet:r_u8() -- свойства cse_motion local motion_name = packet:r_stringZ() -- свойства cse_ph_skeleton local skeleton_name = packet:r_stringZ() local cse_ph_skeleton__unk1_u8 = packet:r_u8() local cse_ph_skeleton__unk2_u16 = packet:r_u16() -- свойства cse_alife_helicopter local cse_alife_helicopter__unk1_sz = packet:r_stringZ() local engine_sound = packet:r_stringZ() --устанавливаем логику game_vertex_id = game_vertex_id1 level_vertex_id = level_vertex_id1 object_flags = object_flags1 if not logic then custom_data = custom_data1 else custom_data = "[logic]\ncfg = scripts\\heli\\"..logic..".ltx" end -- теперь заполняем нужные параметры -- свойства cse_alife_object packet:w_begin(game_vertex_id) packet:w_float(cse_alife_object__unk1_f32) packet:w_s32(cse_alife_object__unk2_s32) packet:w_s32(level_vertex_id) object_flags = bit_not(5) -- ~5 = 0xfffffffa packet:w_s32(object_flags) packet:w_stringZ(custom_data) packet:w_s32(-1) packet:w_s32(cse_alife_object__unk3_s32) -- свойства cse_visual packet:w_stringZ(model_visual) packet:w_u8(cse_visual__unk1_u8) -- свойства cse_motion packet:w_stringZ(motion_name) -- свойства cse_ph_skeleton skeleton_name = "idle" packet:w_stringZ(skeleton_name) packet:w_u8(cse_ph_skeleton__unk1_u8) packet:w_u16(cse_ph_skeleton__unk2_u16) -- свойства cse_alife_helicopter cse_alife_helicopter__unk1_sz = "idle" engine_sound = "alexmx\\helicopter" packet:w_stringZ(cse_alife_helicopter__unk1_sz) packet:w_stringZ(engine_sound) -- считываем скорректированные параметры packet:r_seek(0) obj:STATE_Read(packet, packet:w_tell()) return obj end function missile(lncpos,lvid,gvid,target,launcher,trgpos,lncdir,sundir) --lncpos - позиция запуска, в ней спавнится ракета. Нужна для спавна и в биндере --lvid - левел вертекс запуска. Только для спавна --gvid - гейм вертекс запуска. Только для спавна --target - строка с ИД цели. Задает цель в биндере --launcher - строка с ИД объекта, запустившего ракету. Для оповещения цели, кто стрелял. Может отсутствовать при старте ракеты из недоступной области --trgpos - позиция цели. --lncdir - направление запуска. нужно для задания траектории, особенно без launcher-а --sundir - направление на Солнце. Считаем во время полета постоянным, чтобы не грузить комп. -- local particle = particles_object([[explosions\group_items\expl_10_smoke00]]) -- для стандартного particles.xr local particle = particles_object([[weapons\group_items\missile_smoke_launch]]) particle:play_at_pos(lncpos) local obj = alife():create("missile",lncpos,lvid,gvid) local packet = net_packet() obj:STATE_Write(packet) -- свойства cse_alife_object local game_vertex_id = packet:r_u16() local cse_alife_object__unk1_f32 = packet:r_float() local cse_alife_object__unk2_s32 = packet:r_s32() local level_vertex_id = packet:r_s32() local object_flags = packet:r_s32() local custom_data = packet:r_stringZ() local story_id = packet:r_s32() local cse_alife_object__unk3_s32 = packet:r_s32() -- свойства cse_visual local model_visual = packet:r_stringZ() local cse_visual__unk1_u8 = packet:r_u8() -- свойства cse_motion local motion_name = packet:r_stringZ() -- свойства cse_ph_skeleton local skeleton_name = packet:r_stringZ() local cse_ph_skeleton__unk1_u8 = packet:r_u8() local cse_ph_skeleton__unk2_u16 = packet:r_u16() -- свойства cse_alife_helicopter local cse_alife_helicopter__unk1_sz = packet:r_stringZ() local engine_sound = packet:r_stringZ() --устанавливаем логику --if launcher == nil then launcher = 0 end custom_data = "[logic]\ntarget = "..tostring(target).. "\ntrgposx = "..tostring(trgpos.x).. "\ntrgposy = "..tostring(trgpos.y).. "\ntrgposz = "..tostring(trgpos.z).. "\nlauncher = "..tostring(launcher).. "\nlncposx = "..tostring(lncpos.x).. "\nlncposy = "..tostring(lncpos.y).. "\nlncposz = "..tostring(lncpos.z).. "\nlncdirx = "..tostring(lncdir.x).. "\nlncdiry = "..tostring(lncdir.y).. "\nlncdirz = "..tostring(lncdir.z).. "\nsundirx = "..tostring(sundir.x).. "\nsundiry = "..tostring(sundir.y).. "\nsundirz = "..tostring(sundir.z).. "\nactive = heli_move@missile".. "\n[heli_move@missile]".. "\npath_move = missile_path" -- теперь заполняем нужные параметры -- свойства cse_alife_object packet:w_begin(game_vertex_id) packet:w_float(cse_alife_object__unk1_f32) packet:w_s32(cse_alife_object__unk2_s32) packet:w_s32(level_vertex_id) object_flags = bit_not(5) -- ~5 = 0xfffffffa packet:w_s32(object_flags) packet:w_stringZ(custom_data) packet:w_s32(-1) packet:w_s32(cse_alife_object__unk3_s32) -- свойства cse_visual packet:w_stringZ(model_visual) packet:w_u8(cse_visual__unk1_u8) -- свойства cse_motion packet:w_stringZ(motion_name) -- свойства cse_ph_skeleton skeleton_name = "idle" packet:w_stringZ(skeleton_name) packet:w_u8(cse_ph_skeleton__unk1_u8) packet:w_u16(cse_ph_skeleton__unk2_u16) -- свойства cse_alife_helicopter cse_alife_helicopter__unk1_sz = "idle" engine_sound = "weapons\\rocket_fly" packet:w_stringZ(cse_alife_helicopter__unk1_sz) packet:w_stringZ(engine_sound) -- считываем скорректированные параметры packet:r_seek(0) obj:STATE_Read(packet, packet:w_tell()) return obj end Подскажите пожалуйста,что делать...Заренее спасибо. Ссылка на комментарий
Darien 0 Опубликовано 15 Мая 2010 Поделиться Опубликовано 15 Мая 2010 stalker19965 Убери функцию в нет_спавне, оставь только вызов (т.к. сама она вызываться не будет). function actor_binder:net_spawn(data) ... spawn.btr(-86.21,-9.43,-152.87,179600,107,"test" ) ... Ссылка на комментарий
raf100 0 Опубликовано 15 Мая 2010 Поделиться Опубликовано 15 Мая 2010 А кто нить знает как проводников создать? Дедушка Ленин. Ссылка на комментарий
stalker19965 0 Опубликовано 15 Мая 2010 Поделиться Опубликовано 15 Мая 2010 Строгое предупреждение от модератора Halford Цитирования правил не забываем. Убрал,получилось вот что: function init (obj) xr_motivator.AddToMotivator(obj) end function actor_init (npc) npc:bind_object(actor_binder(npc)) end local game_difficulty_by_num = { [0] = "gd_novice", [1] = "gd_stalker", [2] = "gd_veteran", [3] = "gd_master" } lasthealth = 0 lasttime = 0 post_process = 0 local weapon_hide = false ---------------------------------------------------------------------------------------------------------------------- class "actor_binder" (object_binder) ---------------------------------------------------------------------------------------------------------------------- function actor_binder:__init (obj) super(obj) self.bCheckStart = false self.weather_manager = level_weathers.WeatherManager() self.actor_detector = xr_detector.actor_detector() end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:net_spawn(data) printf("actor net spawn") level.show_indicators() self.bCheckStart = true self.weapon_hide = false -- спрятано или нет оружие при разговоре. weapon_hide = false -- устанавливаем глобальный дефолтовый флаг. if object_binder.net_spawn(self,data) == false then return false end db.add_actor(self.object) if self.st.disable_input_time == nil then level.enable_input() end self.weather_manager:reset() -- game_stats.initialize () if(actor_stats.add_to_ranking~=nil)then actor_stats.add_to_ranking(self.object:id()) end if xr_logic.pstor_retrieve(db.actor, "first_run", 0)==0 then -- тест ПЗРК spawn.inv("wpn_igla") for i = 1,3 do -- СЛИШКОМ тяжело, но можно сбросить у Сидоровича, жрать не просит. Больше взять негде. spawn.inv("ammo_igla") end -- Вертушки на кордоне spawn.heli("mi24",-356.30456542969,15.556171417236,231.61962890625,613,66,"esc_railroad_patrol" ) xr_logic.pstor_store(db.actor, "first_run", 1) end spawn.btr(-86.21,-9.43,-152.87,179600,107,"test_btr" ) end --' Загружаем настройки дропа death_manager.init_drop_settings() new_stalkers.spawn_pochti_vsex_mudil() return true end ---------------------------------------------------------------------------------------------------------------------- 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.actor_sleep, 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) 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) end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:take_item_from_box(box, item) local story_id = box:story_id() if story_id == nil then return end treasure_manager.take_item_from_box(box, story_id) --[[ local respawner = se_respawn.get_respawner_by_parent(story_id) if respawner == nil then return end --' Необходимо уменьшить счетчик в респавнере respawner:remove_spawned(item:id()) local smart_terrain = db.strn_by_respawn[respawner:name()] if smart_terrain == nil then return end local npc = smart_terrain.gulag:get_nearest_online_obj(db.actor:position()) if npc ~= nil then xr_sound.set_sound_play(npc, "reac_box") xr_gulag.setGulagEnemy(smart_terrain:name() , db.actor) end ]] end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:level_border_enter(npc, info_id) self.actor_detector:actor_enter() end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:level_border_exit(npc, info_id) self.actor_detector:actor_exit() end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:info_callback(npc, info_id) printf("*INFO*: npc='%s' id='%s'", npc:name(), info_id) --' Сюжет level_tasks.proceed(self.object) -- Отметки на карте level_tasks.process_info_portion(info_id) end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:on_trade (item, sell_bye, money) if sell_bye == true then game_stats.money_trade_update (money) else game_stats.money_trade_update (-money) end end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:article_callback(npc, group, name) --printf("article_callback [%s][%s]", group, name) if device().precache_frame >1 then return end if group == "Diary" then news_manager.send_encyclopedy("diary", group) else news_manager.send_encyclopedy("encyclopedy", group) end end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:on_item_take (obj) level_tasks.proceed(self.object) --game_stats.update_take_item (obj, self.object) end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:on_item_drop (obj) level_tasks.proceed(self.object) --game_stats.update_drop_item (obj, self.object) end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:task_callback(_task, _objective, _state) task_manager.task_callback(_task:get_id(), _objective:get_idx(), _state) if _objective:get_idx() == 0 then if _state == task.fail then news_manager.send_task(db.actor, "fail", _task, _objective) elseif _state == task.completed then task_manager.reward_by_task(_task) news_manager.send_task(db.actor, "complete", _task, _objective) else news_manager.send_task(db.actor, "new", _task, _objective) end else if _task:get_objective(0):get_state() == task.in_progress then news_manager.send_task(db.actor, "update", _task, _objective) end end end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:map_location_added_callback(spot_type_str, object_id) if (false==app_ready()) or (device().precache_frame>1) then return end --'news_manager.send_task(db.actor, "new") end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:update(delta) object_binder.update(self, delta) -- DEBUG slowdown -- slowdown.update() local time = time_global() game_stats.update (delta, self.object) pzrk.update() -- апдейт погоды self.weather_manager:update() -- апдейт схемы детектора self.actor_detector:update() -- апдейт звуковой схемы актера xr_sound.update_actor() --' Проверка потери жизни --[[ if self.object.health - lasthealth > 0.001 or self.object.health - lasthealth < -0.001 then printf("%f | %f", self.object.health, self.object.health - lasthealth, game.time() - lasttime) lasthealth = self.object.health lasttime = game.time() end ]] -- Обновление отключения ввода с клавиатуры. if self.st.disable_input_time ~= nil and game.get_game_time():diffSec(self.st.disable_input_time) >= self.st.disable_input_idle then level.enable_input() self.st.disable_input_time = nil end -- Обновление сна с переносом чувака в указанную позицию if self.st.sleep_relocate_time ~= nil and game.get_game_time():diffSec(self.st.sleep_relocate_time) >= self.st.sleep_relocate_idle then self.object:set_actor_position(self.st.sleep_relocate_point) local dir = self.st.sleep_relocate_point:sub(self.st.sleep_relocate_look) self.object:set_actor_direction(dir:getH()) self.st.sleep_relocate_time = nil end -- Апдейт прятание оружия игрока во время диалога if weapon_hide == true or self.object:is_talking() then if self.weapon_hide == false then self.object:hide_weapon() self.weapon_hide = true end else if self.weapon_hide == true then self.object:restore_weapon() self.weapon_hide = false end end -- обновление рестрикторов, которые под логикой, срабатывает через интервалы времени if self.next_restrictors_update_time < time then bind_restrictor.actor_update(delta) self.next_restrictors_update_time = time + 200 task_manager.actor_update() end -- обновление постпроцессов if post_process ~= 0 then if post_process:update () == true then post_process = 0 end end -- обновление пси-антенны if sr_psy_antenna.psy_antenna then sr_psy_antenna.psy_antenna:update(delta) end --' Вывод сообщения о большой радиации if self.object.radiation >= 0.7 then local hud = get_hud() local custom_static = hud:GetCustomStatic("cs_radiation_danger") if custom_static == nil then hud:AddCustomStatic("cs_radiation_danger", true) hud:GetCustomStatic("cs_radiation_danger"):wnd():SetTextST("st_radiation_danger") end else local hud = get_hud() local custom_static = hud:GetCustomStatic("cs_radiation_danger") if custom_static ~= nil then hud:RemoveCustomStatic("cs_radiation_danger") end end if self.bCheckStart then printf("SET DEFAULT INFOS") if not has_alife_info("storyline_actor_start") and (level.name() == "l01_escape") then self.object:give_info_portion("storyline_actor_start") _G.g_start_avi = true printf("*AVI* RUN START AVI") end -- if not has_alife_info("encyclopedy") then -- self.object:give_info_portion("encyclopedy") -- end if not has_alife_info("global_dialogs") then self.object:give_info_portion("global_dialogs") end if not has_alife_info("level_changer_icons") then self.object:give_info_portion("level_changer_icons") end level_tasks.add_lchanger_location() self.bCheckStart = false end if sniper_add.load_variable("spawn_sniper",false)==false then sniper_add.start_add_spawn() sniper_add.save_variable("spawn_sniper",true) end end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:save(packet) local save_treasure_manager = true printf("actor_binder:save(): self.object:name()='%s'", self.object:name()) object_binder.save(self, packet) --' Сохраняем уровень сложности if save_treasure_manager == true then packet:w_u8(level.get_game_difficulty() + 128) else packet:w_u8(level.get_game_difficulty()) end --' Сохраняем данные об отключенном вводе if self.st.disable_input_time == nil then packet:w_bool(false) else packer:w_bool(true) utils.w_CTime(packet, self.st.disable_input_time) end xr_logic.pstor_save_all(self.object, packet) self.weather_manager:save(packet) sr_psy_antenna.save( packet ) if save_treasure_manager == true then treasure_manager.save(packet) end task_manager.save(packet) self.actor_detector:save(packet) end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:load(reader) printf("actor_binder:load(): self.object:name()='%s'", self.object:name()) object_binder.load(self, reader) printf("actor_binder:object_binder.load(): self.object:name()='%s'", self.object:name()) --' Загружаем уровень сложности local game_difficulty = reader:r_u8() local load_treasure_manager = false if game_difficulty >= 128 then game_difficulty = game_difficulty - 128 load_treasure_manager = true end get_console():execute("g_game_difficulty "..game_difficulty_by_num[game_difficulty]) if reader:r_eof() then abort("SAVE FILE IS CORRUPT") end local stored_input_time = reader:r_u8() if stored_input_time == true then self.st.disable_input_time = utils.r_CTime(reader) end xr_logic.pstor_load_all(self.object, reader) self.weather_manager:load(reader) sr_psy_antenna.load(reader) if load_treasure_manager == true then treasure_manager.load(reader) end task_manager.load(reader) self.actor_detector:load(reader) end ---------------------------------------------------------------------------------------------------------------------- --старт префетча звуков --if string.find(command_line(), "-noprefetch") == nil then -- sound_prefetch.prefetch_sounds() --end -- Weapon functions function hide_weapon() weapon_hide = true end function restore_weapon() weapon_hide = false end // this is test for section iteration /** local function test_section_iteration(file_name, section_name) printf ("file : %s",file_name) printf ("section : %s",section_name) local file = ini_file(file_name) local n = file:line_count(section_name) printf ("lines : %d",n) local id, value = "", "", result for i=0,n-1 do result, id, value = file:r_line(section_name,i,"","") printf ("line %d : %s = %s",i,id,value) end end test_section_iteration("system.ltx","space_restrictor") /**/ Но вылетает(( Expression : fatal error Function : CScriptEngine::lua_error File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp Line : 73 Description : <no expression> Arguments : LUA error: ....r. - shadow of chernobyl\gamedata\scripts\_g.script:20: bad argument #2 to 'format' (string expected, got no value) В чём ошибка то,какие файлы нужны для этого бтра,у бтр какой файл-конфиг? p.s Делаю на чистой игре. Ссылка на комментарий
Darien 0 Опубликовано 15 Мая 2010 Поделиться Опубликовано 15 Мая 2010 stalker19965 В самый конец функции, перед return true делай вызов. Конфиг можно в любом глоб. моде найти. Ссылка на комментарий
Vano_Santuri 33 Опубликовано 15 Мая 2010 Поделиться Опубликовано 15 Мая 2010 TREWKO, меня этот метод немного раздражает method 'get_hanging_lamp' возможно не метод, а параметр ? т.е ds = obj.get_hanging_lamp У меня такое было с id , похоже что метод пока не может быть применен, попробуй параметром. Или может метода такого нет? Что-то кончается, что-то начинается... Ссылка на комментарий
Malandrinus 615 Опубликовано 15 Мая 2010 Поделиться Опубликовано 15 Мая 2010 Vano_Santuri, Это однозначно метод. Возвращает ссылку на объект типа hanging_lamp, если это конечно hanging_lamp. Применим только к лампочкам. В справочнике я его упоминал в связи с описанием системы регистрации классов. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти