Гость Greh921 Опубликовано 1 Марта 2010 Поделиться Опубликовано 1 Марта 2010 Влад, а чем возможно, мне нужно во время игры! Ссылка на комментарий
Влад 9 Опубликовано 1 Марта 2010 Поделиться Опубликовано 1 Марта 2010 Greh921 во время игры - невозможно. хотя..дизассемблер в руки и погнал движок ковырять Мои работы Не бойтесь совершенства. Вам его не достичь. C. Дали Ссылка на комментарий
Kirag 39 Опубликовано 1 Марта 2010 Поделиться Опубликовано 1 Марта 2010 (изменено) Подскажите, пожалуйста, как можно сделать так ,что при каждом заходе на локацию, на ней автоматически спавнилось человек 15 бандюков. Понадобится bind_stalker.script 1) В функции actor_binder:save(packet) допиши в самое начало примерно следующее: function actor_binder:save(packet) if utils.level_changing() then xr_logic.pstor_store(db.actor, "changing_level", 1) end ... и т.д. Это нужно для того, чтобы сохранить информацию о том, какой это сейв - автосейв при смене локации или любой другой. 2) В функции actor_binder:net_spawn(data) допиши в конец перед return true вот такое: if xr_logic.pstor_retrieve(db.actor, "changing_level", 0) == 1 then -- Здесь производим нужные действия xr_logic.pstor_store(db.actor, "changing_level", 0) end Здесь мы читаем сохраненную инфу о сейве. Если это автосейв при смене локи, производим нужные нам действия и сбрасываем инфу о сейве. Причем сколько бы раз мы не грузили автосейв, действия будут выполняться, как в первый раз (но при загрузке автосейва действия еще не выполнены, так что все честно, сколько бы не грузился сейв, эффект все равно однократный. В случае с бандитами единственная разница будет в случайном выборе профиля). При загрузке любого другого сейва, не связанного со сменой лок, действия не выполняются. Ну, как заспавнить нужное количество нужных персонажей, ты, я думаю, знаешь P.S. Писалось для ТЧ и проверялось на ТЧ, в других версиях не знаю, но что-то наподобие. Изменено 1 Марта 2010 пользователем Kirag Мои работы: Ночные прицелы + смена ножевого слота AI вертолетов + ПЗРК Soul Cube Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем. Ссылка на комментарий
Monnoroch 6 Опубликовано 2 Марта 2010 Поделиться Опубликовано 2 Марта 2010 Kirag, Я делал по-другому.Я в net_spawn() сохранял имя текущего левела.До того сравнивая с предыдущим сохраненным и по необходимости вызывая новопрописанный коллбэк level_change(old,new). Ссылка на комментарий
Struck 61 Опубликовано 3 Марта 2010 Поделиться Опубликовано 3 Марта 2010 а я делал вообще вот так... if level:name() == "l05_bar" then -- спавнил end по памяти так, может метод как ни так написал, но смысл такой Добавлено через 1 мин.: Влад, можно дфиг раскомпилить и перегнать на делфи, там удобней править Ссылка на комментарий
Влад 9 Опубликовано 3 Марта 2010 Поделиться Опубликовано 3 Марта 2010 (изменено) [b]Struck[/b] можно дфиг раскомпилить и перегнать на делфи, там удобней править и зачем ты мне "это" говоришь? if level[b][u].[/u][/b]name() == "l05_bar" then ошибка была. Изменено 3 Марта 2010 пользователем Влад Мои работы Не бойтесь совершенства. Вам его не достичь. C. Дали Ссылка на комментарий
DiXares 1 Опубликовано 3 Марта 2010 Поделиться Опубликовано 3 Марта 2010 (изменено) Каким методом, скриптом добавить диалог нпс? Что бы, вроде: local push = true local item = db.actor:object("wpn_pm") function test() if item and push then добавить диалог... Выдать мессагу... push = false end end Мессагу знаю как сделать. Но как про диалог? И не подскажете чтение ini файла и запись, посредством Lua? Изменено 3 Марта 2010 пользователем TREWKO Ссылка на комментарий
Влад 9 Опубликовано 3 Марта 2010 Поделиться Опубликовано 3 Марта 2010 TREWKO с диалогом: сделай выдачу поршня "my_info" в твоей функции,а в диалоге сделай <has_info>my_info</has_info> -------------------- Описание "class ini_file" от меченый(стрелок): C++ class ini_file { ini_file (string); --создать объект класса ini_file/за место string прописываем путь до файла function line_count(string); --возвращает количество ключей в секции string/ return ini:line_count("my_section") function r_bool(string, string); --возвращает логическое(булево) значение/(секция,ключ) function section_exist(string); --"проверка" существует ли секция string/if ini:section_exist("my_section") function r_float(string, string); --возвращает значение с плавающей точкой function r_clsid(string, string);********************* function r_s32(string, string); --возвращает целое число function r_line(ini_file*, string, number, string&, string&); --возвращает полностью "линию" т.е. key1 = value1 function r_token(string, string, const token_list&); ********** function r_vector(string, string);******** function r_u32(string, string);--возвращает целое число(чуть-чуть медленне чем s32) function r_string_wq(string, string);--возвращает строку function r_string(string, string);--возвращает строку function line_exist(string, string);--"проверка" существует ли ключ /if ini:line_exist("my_section","key1") }; Примеры работы с ним: ... local ini = ini_file("my_folder\my.ltx") if ini:section_exist("my_section") then ... end ---------------------------------------- local ini = ini_file("my_folder\my.ltx") ini:r_float("my_section", "my_line") --возвращает значение с плавающей точкой ... ---------------------------------------- local ini = ini_file("my_folder\my.ltx") ini:r_s32("my_section", "my_line") --возвращает целое число ... ---------------------------------------- local ini = ini_file("my_folder\my.ltx") ini:r_u32("my_section", "my_line") --возвращает целое число ... Мои работы Не бойтесь совершенства. Вам его не достичь. C. Дали Ссылка на комментарий
iDreD 5 Опубликовано 3 Марта 2010 Поделиться Опубликовано 3 Марта 2010 function wpn_class() local active_item=db.actor:active_item() if active_item ~= nil then active_item:section() == "wpn_vintorez" or active_item:section() == "wpn_svu" or active_item:section() == "wpn_svd" and if math.ceil(db.actor:accuracy()*1000) == 1 then get_hud():AddCustomStatic("din_pric", true) end end end end он верный? И ещё, в какой апдейтер его присоединить? Пробывал в дельту - вылет без лога. Работа в Sculptris 3D [туториал] Страничка на Проза.ру Ссылка на комментарий
Влад 9 Опубликовано 3 Марта 2010 Поделиться Опубликовано 3 Марта 2010 (изменено) кровоSTALKER юзай так: function wpn_class() local hud = get_hud() local custom_static = hud:GetCustomStatic("din_pric") local active_item=db.actor:active_item() if active_item then if (active_item:section() == "wpn_vintorez" or active_item:section() == "wpn_svu" or active_item:section() == "wpn_svd") and math.ceil(db.actor:accuracy()*1000) == 1 then if custom_static == nil then hud:AddCustomStatic("din_pric", true) end end end end апдейт в bind_stalker.script - function actor_binder:update(delta) Изменено 3 Марта 2010 пользователем Влад Мои работы Не бойтесь совершенства. Вам его не достичь. C. Дали Ссылка на комментарий
Kirag 39 Опубликовано 4 Марта 2010 Поделиться Опубликовано 4 Марта 2010 Kirag, Я делал по-другому.Я в net_spawn() сохранял имя текущего левела.До того сравнивая с предыдущим сохраненным и по необходимости вызывая новопрописанный коллбэк level_change(old,new). Кстати, да, этот метод даже толковее. Он и проще, и позволяет выполнять действия с учетом того, откуда перешли. Век живи, век учись а я делал вообще вот так... if level:name() == "l05_bar" then -- спавнил end по памяти так, может метод как ни так написал, но смысл такой Если это (и только это) в net_spawn актора, то у метода есть большой недостаток - он будет срабатывать не только при переходе на бар, но и при каждом Сейв/Лоаде, причем эффект будет накапливаться каждый С/Л. Вся возня с сохранением имени левелов или факта перехода как раз и нужна, чтобы от этого момента избавиться. Хотя, смотря когда и что нужно. Мои работы: Ночные прицелы + смена ножевого слота AI вертолетов + ПЗРК Soul Cube Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем. Ссылка на комментарий
Monnoroch 6 Опубликовано 4 Марта 2010 Поделиться Опубликовано 4 Марта 2010 Kirag, тем более level.name() насколько я помню... Ссылка на комментарий
iDreD 5 Опубликовано 5 Марта 2010 Поделиться Опубликовано 5 Марта 2010 Влад, заюзал, вылет такой: Expression : !m_error_code Function : raii_guard::~raii_guard File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp Line : 748 Description : .... - Çîâ Ïðèïÿòè\gamedata\scripts\bind_stalker.script:322: attempt to index global 'chimera_mod' (a nil value) В bind_stalker апдейтер был таков: chimera_mod.din_scope() Работа в Sculptris 3D [туториал] Страничка на Проза.ру Ссылка на комментарий
Push85 4 Опубликовано 5 Марта 2010 Поделиться Опубликовано 5 Марта 2010 кровоSTALKER, синтаксическая ошибка в chimera_mod.script, если конечно этот файл вообще существует... Возможно всё, ну или почти всё. Ссылка на комментарий
iDreD 5 Опубликовано 5 Марта 2010 Поделиться Опубликовано 5 Марта 2010 Обижаешь. Поправил ошибку синтаксиса, получил вылет: Expression : !m_error_code Function : raii_guard::~raii_guard File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp Line : 748 Description : .... - Çîâ Ïðèïÿòè\gamedata\scripts\bind_stalker.script:322: attempt to call field 'din_scope' (a nil value) Кастом статик тоже сделал. Работа в Sculptris 3D [туториал] Страничка на Проза.ру Ссылка на комментарий
Push85 4 Опубликовано 5 Марта 2010 Поделиться Опубликовано 5 Марта 2010 (изменено) кровоSTALKER, покажи код, в слепую ничего не понятно. ============================ на первый взгляд все нормально, ругань идет на саму функцию, странно, попробуй закоментировать все внутри функции и проверь, потом раскоментируй немного и еще раз проверь и так пока все не раскоментиш, проще будет поймать косяк. Изменено 5 Марта 2010 пользователем 8push5 Возможно всё, ну или почти всё. Ссылка на комментарий
iDreD 5 Опубликовано 5 Марта 2010 Поделиться Опубликовано 5 Марта 2010 (изменено) Содержание chimera_mod: snd_obj = {} --это нужно для воспроизведеня звука, должен быть в каждом скрипте где будет использоватся команда "s_play" snd_obj = xr_sound.get_safe_sound_object([[$no_sound]]) function s_stop() if snd_obj:playing()==true then snd_obj:stop() end end function s_play(path) --сюда передается путь файла, и он ево играет s_stop() snd_obj = xr_sound.get_safe_sound_object(path) snd_obj:play_at_pos(db.actor, vector ():set (0, 0, 0), 0, sound_object.s2d) end ------Copyright DEXXX------- -- device\pda\pda_tip --это путь до файла без расширения .ogg local sound_types = {"([[device\pda\pda_tip]])", "([[device\pda\pda_tip]])", "[device\pda\pda_news]", "[[device\pda\pda_objective]]"} --со скобками нада поэксперементировать, function name_script() --твой скрипт s_play(sound_types[math.random(4)]) --четыре это максимальное значение, от 1 до 4. скока файлов стока и максимальное значение end function add_new_lc(levch,levchn,levchm,info) --спауним левел ченджер local objt = alife():story_object(levch) if not objt then alife():create(levchn) end local obj = alife():story_object(levch) if obj then level.map_add_object_spot(obj.id, "level_changer",levchm) db.actor:give_info_portion(info) info_received() end end -- Апдейтер динамических прицелов function din_scope() local hud = get_hud() local custom_static = hud:GetCustomStatic("din_pric") local active_item=db.actor:active_item() if active_item then if (active_item:section() == "wpn_vintorez" or active_item:section() == "wpn_svu" or active_item:section() == "wpn_svd") and math.ceil(db.actor:accuracy()*1000) == 1 then if custom_static == nil then hud:AddCustomStatic("din_pric", true) end end end end Строка апдейтера в bind_stalker: function actor_binder:update(delta) object_binder.update(self, delta) if string.find(command_line(), "-designer") then return end if self.already_jumped==false and jump_level.need_jump==true and (device().frame > self.spawn_frame+2000) then -- jump_level.try_to_jump() self.already_jumped = true return end -- Вызов апдейта переноса игрока проводником if travel_func ~= nil then travel_func() end -- DEBUG slowdown local time = time_global() game_stats.update (delta, self.object) -- апдейт погоды self.weather_manager:update() --' Апдейт саундменеджера xr_sound.update(self.object:id()) -- Обновление отключения ввода с клавиатуры. 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.object:is_talking() then if self.weapon_hide_in_dialog == false then self.object:hide_weapon() printf("hiding weapon!!!") self.weapon_hide_in_dialog = true end else if self.weapon_hide_in_dialog == true then printf("restoring weapon!!!") self.object:restore_weapon() self.weapon_hide_in_dialog = false end end -- Апдейт прятание оружия игрока в зоне sr_no_weapon if check_for_weapon_hide_by_zones()==true then if self.weapon_hide == false then printf("hiding weapon!!!") self.object:hide_weapon() self.weapon_hide = true end else if self.weapon_hide == true then printf("restoring weapon!!!") self.object:restore_weapon() self.weapon_hide = false end end -- обновление пси-антенны if sr_psy_antenna.psy_antenna then sr_psy_antenna.psy_antenna:update(delta) end if self.bCheckStart then printf("SET DEFAULT INFOS") 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 self.bCheckStart = false end if not self.loaded_slot_applied then self.object:activate_slot(self.loaded_active_slot) self.loaded_slot_applied = true end xr_s.on_actor_update(delta) -- ARS MOD -------------------------- ars.on_actor_update(self) -- обработчик всяческих менеджеров четыре раза в секунду. if TimeTrigger1<time then TimeTrigger1=time+250 self:check_detective_achievement() self:check_mutant_hunter_achievement() if(level_anomaly)then self.anomaly_manager:update() end end -- ARS MOD -------------------------- -- Chimera addon. Dinamic scopes update chimera_mod.din_scope() if(self.surge_manager) then if(self.f_surge_manager_loaded ~= true) then self.surge_manager:initialize() self.f_surge_manager_loaded = true end if(self.surge_manager.levels_respawn[level.name()]) then self.surge_manager:respawn_artefacts_and_replace_anomaly_zone() end self.surge_manager:update() end -- Апдейт доступности для симуляции. simulation_objects.get_sim_obj_registry():update_avaliability(alife():actor()) if not self.loaded then get_console():execute("dump_infos") self.loaded = true end treasure_manager.get_treasure_manager():update() if not(primary_objects_filled) then pda.fill_primary_objects() primary_objects_filled = true end pda.fill_sleep_zones() end Содержание ui_custom_msgs: <!--Chimera addon to ARS CoP--> <din_pric x="640" y="512" stretch="1"> <texture>chimera\anim_cube</texture> </din_pric> anim_cube тестовая, файл .seq. Изменено 5 Марта 2010 пользователем кровоSTALKER Работа в Sculptris 3D [туториал] Страничка на Проза.ру Ссылка на комментарий
Влад 9 Опубликовано 5 Марта 2010 Поделиться Опубликовано 5 Марта 2010 function din_scope() local hud = get_hud() local custom_static = hud:GetCustomStatic("din_pric") local active_item=db.actor:active_item() if active_item then if active_item:section() == "wpn_vintorez" or active_item:section() == "wpn_svu" or active_item:section() == "wpn_svd" then if math.ceil(db.actor:accuracy()*1000) == 1 then if custom_static == nil then hud:AddCustomStatic("din_pric", true) end end end end end Мои работы Не бойтесь совершенства. Вам его не достичь. C. Дали Ссылка на комментарий
iDreD 5 Опубликовано 5 Марта 2010 Поделиться Опубликовано 5 Марта 2010 Влад, тоже Expression : !m_error_code Function : raii_guard::~raii_guard File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp Line : 748 Description : .... - Çîâ Ïðèïÿòè\gamedata\scripts\bind_stalker.script:322: attempt to call field 'din_scope' (a nil value) Работа в Sculptris 3D [туториал] Страничка на Проза.ру Ссылка на комментарий
Влад 9 Опубликовано 5 Марта 2010 Поделиться Опубликовано 5 Марта 2010 кровоSTALKER не ври!я проверил - всё работает! Мои работы Не бойтесь совершенства. Вам его не достичь. C. Дали Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти