PavelSnork 3 Опубликовано 1 Октября 2011 Поделиться Опубликовано 1 Октября 2011 *Shoker*, интересно... Тоесть если мое значение должно быть 0.5 при любых значениях до этого, то одной строкой не обойтись... Но это не важно, да и не нужно пока мне. Меня интересует еще такой момент: если я поставлю db.actor.health = -0.5, то будет отниматься 0.5 от текущего значения, так? Жду ли я Сталкер 2? Хм... Ссылка на комментарий
*Shoker* 322 Опубликовано 1 Октября 2011 Поделиться Опубликовано 1 Октября 2011 (изменено) Верно, причём проверку что меньше\больше 0\1 делать не надо. Игра сама всё сделает. Также не забывай что при смерти объекта, здоровье ставится -1 Кстати это работает со всеми остальными объектами. Добавлено через 101 мин.: Можете рассказать, какие ньюансы есть с удалением аномалий через release() во время игры? Мне надо создавать и удалять через некоторое время аномалии. Раньше у меня из за простого удаления часто ломались сохранения. Игра ЧН, аномалии в рестрикторы для НПС не добавляю. Изменено 1 Октября 2011 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
PavelSnork 3 Опубликовано 1 Октября 2011 Поделиться Опубликовано 1 Октября 2011 *Shoker*, чето оно не фурычит... if uslovie then db.actor.health равно -0.2. end Тоесть, в начале игры здоровье должно быть равно 0.8, но оно по-прежнему полное... Что ж не так? Жду ли я Сталкер 2? Хм... Ссылка на комментарий
Charsi 440 Опубликовано 1 Октября 2011 Поделиться Опубликовано 1 Октября 2011 PavelSnork,для удержания уровня здоровья на уровне 0.8 напиши if uslovie then db.actor.health = 0.8 - db.actor.health end Lua и LuaJIT плагины для Notepad++ SciTE-RU 3.5.5 плагины для MilkShape3D Ссылка на комментарий
*Shoker* 322 Опубликовано 1 Октября 2011 Поделиться Опубликовано 1 Октября 2011 PavelSnork Пока без понятия. Как в начале игры не знаю, но во время самой игры все параметры работают прекрасно. Говорю с уверенностью, т.к сам с этим параметром последние дни работал Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Black Hunter 3 Опубликовано 2 Октября 2011 Поделиться Опубликовано 2 Октября 2011 (изменено) Здравствуйте мне вот в эту тему сказали обратится по моему вопросу. Вопрос такой. 1. Как создать респаун простых сталкеров. Вот моя ситуация, я заспаунил 4 Чистонебовцев на Болотах в ТЧ, а как создать респаун незнаю, вот и обратился к вам. Наверное нужно создать смарт терайн? Если не прав то поправьте. Мне надо создать респаун не квестовых нпс, а простых для заселения локации. Ну и попутно вот, что еще как создать респаун мутантов. Допустим заспаунил bloodsucker_strong, на болотах, а как создать ему респаун незнаю. Не могли бы вы господа знающие о респауне рассказать как и что и показать на примере по возможности. Изменено 2 Октября 2011 пользователем Black Hunter Ссылка на комментарий
Real Wolf 34 Опубликовано 2 Октября 2011 Поделиться Опубликовано 2 Октября 2011 На 6 патче ТЧ не при всех вылетах и вызовах функции abort игра крашится. Информация в лог идёт о том, что игра должна вылететь, но не вылетает. Кто-нибудь знает решение? Ссылка на комментарий
KD87 718 Опубликовано 2 Октября 2011 Поделиться Опубликовано 2 Октября 2011 Real Wolf, это, видимо, assert() так работает. Перепиши abort() в _g.script, добавив туда exit(). Ссылка на комментарий
Хемуль36рус 1 789 Опубликовано 2 Октября 2011 Поделиться Опубликовано 2 Октября 2011 (изменено) Привет всем, прошу помощи хотел сделать для соли и для огсе "звуки при использовании предметов" но что то не могу понять что делаю не так, за образец брал вот эту статью, Создаете скрипт имя_файла.script, туда пишете: function use_snd(obj) local obj_sect = obj:section() local snd if obj_sect == 'ваш предмет' then snd = [[Путь_до_звука_относительно_папки_sounds]] elseif obj_sect == 'ваш предмет' then snd = [[Путь_до_звука_относительно_папки_sounds]] elseif obj_sect == 'ваш предмет' then snd = [[Путь_до_звука_относительно_папки_sounds]] elseif obj_sect == 'ваш предмет' then snd = [[Путь_до_звука_относительно_папки_sounds]] 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 Более компактный вариант: (да простит меня Gun12, но я уверен, что он и сам бы сделал именно так: local tSound ={ medkit = "interface\\inv_medkit", kolbasa = "interface\\inv_food", vodka = "interface\\inv_vodka", energy_drink = "interface\\inv_softdrink", bandage = "interface\\inv_bandage", antirad = "interface\\inv_pills" } (вместо указанных в таблице предметов и звуков разумеется можно указать свои) function use_snd(obj) if obj and tSound[obj:section()] then local snd = xr_sound.get_safe_sound_object(tSound[obj:section()]) if snd then snd:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 2.0) end end end Сохраняем. Открываем bind_stalker.script и в функцию function actor_binder:net_destroy() пишем: self.object:set_callback(callback.use_object, nil) и в функцию actor_binder:reinit() пишем: self.object:set_callback(callback.use_object, self.use_object, self) и в этом же файле создаем функцию: function actor_binder:use_object(obj) имя_вашего_скрипта.use_snd(obj) end Как написано сделал скрипт, назвал его zvuki local tSound ={ medkit = "zwuk\\inv_medic", kolbasa = "zwuk\\inv_food", vodka = "zwuk\\inv_vodka", energy_drink = "zwuk\\inv_softdrink", bandage = "zwuk\\inv_bandage", antirad = "zwuk\\inv_pills" } function use_snd(obj) if obj and tSound[obj:section()] then local snd = xr_sound.get_safe_sound_object(tSound[obj:section()]) if snd then snd:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 2.0) end end end в бинд-сталекер прописал строки как в статье написано, в папке соунд создал папку zwuk в неё кинул файлы звуковые типа inv_bandage и подобные, создал секцию в бинд-сталкер function actor_binder:use_object(obj) zvuki.script.use_snd(obj) end, но звуков как не было так и нет, вчера вылетал, но вроде ошибку в скрипте нашёл, кавычки пропустил, теперь и не вылетает, но и звук не меняет. -- файл из мода "Народной солянки 2009" от 14.06. -- Адаптирован для Менеджера оружия. Rulix aka Bak от 2.07.09 -- Адатировал: Idler. local upd_time local upd_time1 local upd_time2 local upd_time3 local upd_time4 local table_sort = table.sort local math_ceil = math.ceil function init(obj) xr_motivator.AddToMotivator(obj) end function actor_init(npc) npc:bind_object(actor_binder(npc)) -- level_tasks.add_location(707,"blue_location","Лукаш") -- level_tasks.add_location(702,"blue_location","Макс") -- level_tasks.add_location(728,"blue_location","Повар") end local det_suit_id = nil 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 -- local arts = 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() self.is_saved = false end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:net_spawn(data) --amk.updateGameTime() spawn_level_changer.remove_old_teleport() printf("actor net spawn") -- skunk.dbglog("actor net spawn") zamok.restore() babah.collectBombs() level.show_indicators() self.bCheckStart = true self.weapon_hide = false -- спрятано или нет оружие при разговоре. weapon_hide = false -- устанавливаем глобальный дефолтовый флаг. if object_binder.net_spawn(self,data) == false then -- skunk.dbglog("actor net spawn 1") return false end -- skunk.dbglog("actor net spawn 2") 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 --' Загружаем настройки дропа death_manager.init_drop_settings() -- added by xStream for AMK miniSDK if xrs_ai then xrs_ai.actor_net_spawn(self) end if rx_ai then rx_ai.actor_net_spawn() end amk.on_game_load(obj) --=============================== --[[local bad_object_names = {"wpn_lr30053522", "wpn_lr30058409" } --"wpn_lr30025601", "wpn_lr30028817","wpn_lr30033589" local i, se_name, se_obj for i, se_name in ipairs(bad_object_names) do se_obj = alife():object(se_name) if se_obj then news_manager.send_tip(db.actor,"Удалили глючный ствол:"..se_name,nil,nil,1000) alife():release(se_obj, true) end end]] --=============================== sak.add_tail() braad_test.false_info() -- end of addition meceniy_work.main() meceniy_utils.net_spawn_callback() -- kostya_level -- spawn_teleport.spawn_teleport_exit() spawn_teleport.spawn_teleport_hospital() bind_det_arts.start_update() netpacket_pda_id = netpacket_pda_create.create_pda() return true end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:net_destroy() -- added by xStream for AMK miniSDK amk.on_game_save(obj) -- end of addition 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.use_object, nil) 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() if iniStatistic then get_console():execute("load ~~~ amk.dump_table(iniLines):") amk.dump_table(iniLines) get_console():execute("load ~~~ amk.dump_table(iniOtherLines):") amk.dump_table(iniOtherLines) get_console():execute("load ~~~ amk.dump_table(iniStat):") local t = {} for sect, count in pairs(iniStat) do table.insert(t, {sect, count}) end table_sort(t, sortStat) amk.dump_table(t) end object_binder.net_destroy(self) end function sortStat(t1, t2) return t1[2] > t2[2] 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.use_object, self.use_object, self) 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.on_use_object, self) self.object:set_callback(callback.death, self.death_callback, self) end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:death_callback(victim, who) if victim:id() == db.actor:id() then difficulty_manager.deathStatCollect() end 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) zamok.remove(box, item) --AMK UTILS-- amk.on_item_take_from_box(box,item) amk_utils.actor_item_from_box(box, item) --AMK UTILS-- end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:level_border_enter(npc, info_id) self.actor_detector:actor_enter() --AMK UTILS-- amk_utils.actor_level_border_enter(npc, info_id) --AMK UTILS-- end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:level_border_exit(npc, info_id) self.actor_detector:actor_exit() --AMK UTILS-- amk_utils.actor_level_border_exit(npc, info_id) --AMK UTILS-- 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) --AMK UTILS-- amk.on_info(npc,info_id) amk_utils.actor_info(npc, info_id) inventory.on_inventory_info(info_id) --AMK UTILS-- if npc:id() == db.actor:id() then meceniy_spawn.respawn(info_id) end 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 --AMK UTILS-- amk.on_info(npc,info_id) amk_utils.actor_article(npc, group, name) --AMK UTILS-- end -------------------------------------------------------------------------------------------------- function actor_binder:on_item_take (obj) level_tasks.proceed(self.object) --game_stats.update_take_item (obj, self.object) local item = obj --AMK UTILS-- amk.on_item_take(obj) amk_utils.actor_item_take(obj) if obj:clsid() == clsid.wpn_ammo then dunin_ammo.on_take(obj) end sak.check_used_item(obj) braad_test.checking_use_item(obj) if xrs_ai then xrs_ai.actor_item_take(obj) end --AMK UTILS-- babah.on_item_take(obj) inventory.on_item_take(item) spawn_zombi.checking_taken_item(obj) spawn_zombi.checking_taken_item2(obj) spawn_zombi.checking_taken_item3(obj) spawn_zombi.checking_taken_item4(obj) spawn_zombi.checking_taken_item5(obj) spawn_zombi.checking_taken_item6(obj) spawn_zombi.checking_taken_item7(obj) spawn_zombi.checking_taken_item8(obj) spawn_zombi.checking_taken_item9(obj) spawn_zombi.checking_taken_item10(obj) spawn_zombi.checking_taken_item11(obj) spawn_zombi.checking_taken_item12(obj) spawn_zombi.checking_taken_item13(obj) spawn_zombi.checking_taken_item14(obj) spawn_zombi.checking_taken_item15(obj) spawn_zombi.checking_taken_item16(obj) spawn_zombi.checking_taken_item17(obj) spawn_zombi.checking_taken_item18(obj) spawn_teleport.checking_taken_item19(obj) spawn_teleport.checking_taken_item20(obj) spawn_teleport.checking_taken_item21(obj) spawn_teleport.checking_taken_item22(obj) new_spawn.checking_taken_item23(obj) spawn_teleport.checking_taken_item24(obj) spawn_teleport.checking_taken_item25(obj) spawn_teleport.checking_taken_item26(obj) spawn_teleport.checking_taken_item27(obj) spawn_teleport.checking_taken_item28(obj) spawn_restrictor.checking_taken_item29(obj) spawn_restrictor.checking_taken_item30(obj) spawn_teleport.checking_taken_item31(obj) spawn_restrictor.checking_taken_item32(obj) spawn_teleport.checking_taken_item33(obj) spawn_teleport.checking_taken_item34(obj) spawn_teleport.checking_taken_item35(obj) spawn_teleport.checking_taken_item36(obj) new_spawn.checking_taken_item37(obj) arhara_dialog.checking_taken_item38(obj) spawn_zombi.checking_taken_item39(obj) spawn_zombi.checking_taken_item40(obj) meceniy_utils.on_item_take_callback(obj) spawn_zombi.checking_taken_item41(obj) spawn_zombi.checking_taken_item42(obj) spawn_zombi.checking_taken_item43(obj) arhara_dialog.checking_taken_item44(obj) arhara_dialog.checking_taken_item45(obj) arhara_dialog.checking_taken_item46(obj) arhara_dialog.checking_taken_item47(obj) arhara_dialog.checking_taken_item48(obj) arhara_dialog.checking_taken_item49(obj) arhara_dialog.checking_taken_item50(obj) arhara_dialog.checking_taken_item51(obj) arhara_dialog.checking_taken_item52(obj) arhara_dialog.checking_taken_item53(obj) arhara_dialog.checking_taken_item54(obj) arhara_dialog.checking_taken_item55(obj) arhara_dialog.checking_taken_item56(obj) arhara_dialog.checking_taken_item57(obj) arhara_dialog.checking_taken_item58(obj) if rx_ai then rx_ai.actor_item_take(obj) end end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:on_item_drop (obj) babah.li(obj) -- Vergas ogg-player player_ogg.lose_item(obj) level_tasks.proceed(self.object) --game_stats.update_drop_item (obj, self.object) -- if level.vertex_position(db.actor:level_vertex_id()):distance_to(db.actor:position( ))>1 then -- amk.mylog("Здесь нет вертексов") -- else -- amk.mylog("Вертекс "..db.actor:level_vertex_id().." "..db.actor:game_vertex_id()) -- end --AMK UTILS-- amk.on_item_drop(obj) amk_utils.actor_item_drop(obj) --AMK UTILS-- inventory.on_item_drop(obj) sak.check_droped_item(obj) braad_test.drop_actor(obj) braad_test.drop_lim(obj) --Избавляемся от Зомбирования-- meceniy_work.on_item_use(obj) meceniy_utils.on_item_drop_callback(obj) ------------------------------- spawn_level_changer.checking_droped_obj(obj) --[[spawn_level_changer.checking_droped_item(obj) spawn_level_changer.checking_droped_item2(obj) spawn_level_changer.checking_droped_item3(obj) spawn_level_changer.checking_droped_item4(obj) spawn_level_changer.checking_droped_item5(obj) spawn_level_changer.checking_droped_item6(obj) spawn_level_changer.checking_droped_item7(obj) spawn_level_changer.checking_droped_item8(obj) spawn_level_changer.checking_droped_item11(obj) spawn_level_changer.checking_droped_item12(obj) spawn_level_changer.checking_droped_item13(obj) spawn_level_changer.checking_droped_item14(obj)]] --spawn_level_changer.checking_droped_item10(obj) zamok.add(obj) 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 --AMK UTILS-- amk_utils.actor_task(_task, _objective, _state) --AMK UTILS-- 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 ---------------------------------------------------------------------------------------------------------------------- -- malandrinus --watch_value = 0 -- malandrinus scopeUsed = false function actor_binder:update(delta) -- malandrinus -- watch_value = game.time() -- /malandrinus amk.oau_watchdog=200 amk.oau_reason="actor_binder:update" --amk.updateGameTime() amk.oau_watchdog=2001 object_binder.update(self, delta) amk.oau_watchdog=199 local time = time_global() game_stats.update (delta, self.object) if db.actor:item_in_slot(6) and db.actor:item_in_slot(6):section() == "exo_doktor_outfit" then if not det_suit_id then if db.actor:object("detector_suit") then det_suit_id = db.actor:object("detector_suit"):id() else det_suit_id = (alife():create("detector_suit",db.actor:position(), db.actor:level_vertex_id(),db.actor:game_vertex_id(), db.actor:id())).id end end else if det_suit_id and alife():object(det_suit_id) then alife():release(alife():object(det_suit_id),true) det_suit_id = nil end end local fov = device().fov local wpn if fov < 35 and xr_logic.pstor_retrieve(db.actor, "use_scope", 0) == 0 then wpn = db.actor:item_in_slot(db.actor:active_slot()) if wpn and wpn:section() == "wpn_crossbow" then level.add_pp_effector("bast.ppe", 1034, true) get_console():execute ("r2_sun_lumscale_amb 3") get_console():execute ("r2_mblur 0.6") xr_logic.pstor_store(db.actor, "use_scope", 1) end elseif fov > 35 and xr_logic.pstor_retrieve(db.actor, "use_scope", 0) == 1 then xr_logic.pstor_store(db.actor, "use_scope", 0) level.remove_pp_effector(1034) get_console():execute ("r2_sun_lumscale_amb 1") get_console():execute ("r2_mblur 0.") end if upd_time3 == nil then upd_time3 = time + 500 elseif upd_time3 < time then upd_time3 = time + 500 local accuracy = math_ceil(db.actor:accuracy()*1000) if accuracy == 1 then if not scopeUsed then local item = db.actor:active_item() if item then --get_console():execute("load ~#I#: db.actor:active_item():section()="..tostring(item:section())) if item:section() == "wpn_binoc" then scopeUsed = true elseif IAmAWeapon[item:clsid()] then local t = amk.get_weapon_data(alife():object(item:id())) scopeUsed = (bit_and(t.addon_flags, 1) == 1 or rx_utils.get_addon_status(item, "sc") == 1) --amk.dump_table(t) end end end else scopeUsed = false end end -- $DreamMod апдейт схемы сна if sleep_manager.is_sleep_active() and xr_conditions.actor_dead() then xr_logic.issue_event(db.actor, db.storage[db.actor:id()]["ar_sleep"], "update") end amk.oau_watchdog=198 -- апдейт погоды self.weather_manager:update() amk.oau_watchdog=197 -- апдейт схемы детектора self.actor_detector:update() amk.oau_watchdog=196 --ms_ai.sleep_manager() amk.oau_watchdog=195 -- апдейт звуковой схемы актера xr_sound.update_actor() amk.oau_watchdog=194 meceniy_work.set_invisible() amk.oau_watchdog=193 -- meceniy_utils.on_actor_update_callback() -- by Monnoroch if upd_time == nil then upd_time = time + 10000 elseif upd_time < time then upd_time = time + 10000 monnoroch.upd_time(time) end amk.oau_watchdog=1931 if upd_time1 == nil then upd_time1 = time + 1000 elseif upd_time1 < time then upd_time1 = time + 1000 -- meceniy_work.set_invisible() meceniy_utils.on_actor_update_callback() amk.oau_watchdog=1932 sak.show_time() amk.oau_watchdog=1933 arc_main.actor_update() amk.oau_watchdog=1934 meceniy_work.mainw() end amk.oau_watchdog=1935 -- sak.out_teleport() --в net_spawn() этому место! if upd_time2 == nil then upd_time2 = time + 5000 elseif upd_time2 < time then upd_time2 = time + 5000 if not self.object:is_talking() then dunin_ammo.on_update() end amk.oau_watchdog=1936 sak.nepis_umer() amk.oau_watchdog=1937 braad_test.dead_npc() amk.oau_watchdog=1938 braad_test.check_info() amk.oau_watchdog=1939 braad_test.new_info() amk.oau_watchdog=19391 braad_test.kot_info() amk.oau_watchdog=19392 braad_test.forest_info() amk.oau_watchdog=19393 braad_test.grib_respawn() amk.oau_watchdog=19394 braad_test.update_new() amk.oau_watchdog=19395 braad_test.kot_update() end amk.oau_watchdog=192 -- ----------------------------------------------------- ARENA_EXTENSION_MOD-------------------------------------------------------- aem_manager.get_aem():update() -- ----------------------------------------------------- ARENA_EXTENSION_MOD-------------------------------------------------------- amk.oau_watchdog=191 --' Проверка потери жизни --[[ 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 amk.oau_watchdog=191 -- обновление рестрикторов, которые под логикой, срабатывает через интервалы времени if self.next_restrictors_update_time < time then bind_restrictor.actor_update(delta) -- Апдейтим наш телепорт (Kostya_level) bind_mteleport.actor_update(delta) self.next_restrictors_update_time = time + 200 task_manager.actor_update() end amk.oau_watchdog=190 -- обновление постпроцессов 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 --[[ local hud_demo = get_hud() local custom_static_demo = hud_demo:GetCustomStatic("cs_demo_play") if custom_static_demo == nil then hud_demo:AddCustomStatic("cs_demo_play", true) hud_demo:GetCustomStatic("cs_demo_play"):wnd():SetTextST("st_demo_play") end ]] inventory.update() --' Вывод сообщения о большой радиации 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 amk.oau_watchdog=189 -- if not self.object:is_talking() then -- dunin_ammo.on_update() -- end amk.oau_watchdog=188 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 amk.oau_watchdog=187 --AMK UTILS-- amk.on_actor_upade(delta) -- amk_utils.actor_update(delta) --AMK UTILS-- amk.oau_watchdog=186 -- amk.oau_reason="actor_binder:update" -- sak.out_teleport() -- amk.oau_watchdog=185 -- sak.nepis_umer() -- amk.oau_watchdog=184 -- braad_test.dead_npc() -- braad_test.check_info() -- braad_test.new_info() -- braad_test.kot_info() -- braad_test.forest_info() -- braad_test.grib_respawn() -- braad_test.update_new() -- braad_test.kot_update() -- amk.oau_watchdog=183 -- added by Red75. Контроль за переполнением if self.warning then self.warning=nil get_hud():AddCustomStatic("hud_save_warning") local wnd=get_hud():GetCustomStatic("hud_save_warning"):wnd() if self.critical==1 then wnd:SetTextST(game.translate_string("amk_warn_trans")) self.critical=nil elseif self.critical==2 then wnd:SetTextST(game.translate_string("amk_warn_trans_critical")) self.critical=nil else wnd:SetTextST(game.translate_string("amk_warn_attention")) end elseif self.wt and self.wt<time_global() then self.wt=nil if get_hud():GetCustomStatic("hud_save_warning") then get_hud():RemoveCustomStatic("hud_save_warning") end end amk.oau_watchdog=182 if xrs_ai then xrs_ai.actor_update(delta) end if rx_ai then rx_ai.actor_update() end amk.oau_watchdog=181 -- end of addition if biodetector then biodetector.update() end amk.oau_watchdog=180 ------- -- meceniy_work.mains() --/обьекты -- amk.oau_watchdog=179 -- meceniy_work.mainw() --/Зомбирование -- amk.oau_watchdog=179 -- by Monnoroch -- if upd_time == nil then -- upd_time = time + 10000 -- elseif upd_time < time then -- upd_time = time + 10000 -- monnoroch.upd_time(time) -- end -- by Monnoroch --проверка зависания биндеров НПЦ и мобов раз в 0,5сек --закомментировано на случай разбора полётов --[[ if upd_time3 == nil then upd_time3 = time + 500 elseif upd_time3 < time then upd_time3 = time + 500 if db and db.storage then for k,v in pairs(db.storage) do if v.us ~= nil and v.us ~= 0 then abort("binder(%s) zavis(%s)", db.creatures[k]:name(), v.us) v.us = nil break end end self.is_saved = false end end]] -- drrr.dropgg() if upd_time4 == nil then upd_time4 = time + 500 elseif upd_time4 < time then upd_time4 = time + 500 doc_viewer.update() amk.oau_watchdog=181 babah.update(delta) amk.oau_watchdog=182 stco.update() -- if upd_time5 == nil then -- upd_time5 = time + 1500 -- elseif upd_time5 < time then -- upd_time5 = time + 1500 --он и так вешается на быстрый вызов с помощью db.actor:set_fastcall(update, db.actor) --bind_det_arts.update() amk.oau_watchdog=183 end --[[тестовый спавн детекторов в инвентаре актора alife():create('det_artefact_indy', db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) alife():create('detektor_amorf', db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) alife():create('det_artefact_super', db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) end]] amk.oau_watchdog=0 amk.oau_reason="" end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:save(packet) if rx_ai then rx_ai.actor_save(packet) end local pk1=fake_net_packet.fake_net_packet() self:save_old(pk1) amk.mylog("Packet size is "..pk1:w_tell()) if pk1:w_tell()>7500 then self.warning=true self.critical=1 self.wt=time_global()+60000 amk.emergency_cleanup() self:save_old(packet) amk.mylog("Actor packet size is "..packet:w_tell().."!") -- amk.send_tip("Actor packet size critical=2 >7500 ","Размер нетпакета ГГ критический:"..pk1:w_tell(),0,15,"gen_info") -- это добавляем amk.emergency_restore() elseif pk1:w_tell()>6000 then self.warning=true self.wt=time_global()+60000 self:save_old(packet) -- amk.send_tip("Actor packet size critical=1 >6000 ","Размер нетпакета ГГ допустимый:"..pk1:w_tell(),0,15,"gen_info") -- это добавляем else self:save_old(packet) self.wt=time_global() -- amk.send_tip("Actor packet size <6000 ","Размер нетпакета ГГ мал. Всё ОК:"..pk1:w_tell(),0,15,"gen_info") -- это добавляем end self.is_saved = true end function actor_binder:save_old(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 packet:w_bool(true) utils.w_CTime(packet, self.st.disable_input_time) end amk.oAmkLauncher:SaveData(self.object) 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:use_object(obj) zvuki.script.use_snd(obj) 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 actor_binder:load "..self.object:name().." завис актор - сушите весла!") 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) amk.oAmkLauncher:LoadData(self.object) 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) if xr_logic.pstor_retrieve(self.object,"emerg",false) then -- нельзя использовать amk.load_varible(), так как db.actor ещё не определён self.warning=true self.critical=2 self.wt=time_global()+60000 end 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") --/**/ function actor_binder:on_use_object(obj) --medkit_use.lose_item(obj) meceniy_outfit.on_item_drop(obj) end Вроде бы и сложного ничего нет, но итога тоже нет, подскажите, что не так. Изменено 2 Октября 2011 пользователем ХЕМУЛЬ36RUS Intrel Core i5 9400F, msi gtx 1660 super ventus, RAM 16g-DDR4, HD 2000g, Win 10x64, SSD 256g, SSD m2 500g. Ссылка на комментарий
Tris 9 Опубликовано 2 Октября 2011 Поделиться Опубликовано 2 Октября 2011 Пишу скрипт, чтобы воспроизводился постэффект при падении выносливости, что нужно написать вместо health, чтобы прощитывалась выносливость? • Dead Forgetting Zone • Мои работы. Обновление: 24.08.2012 Ссылка на комментарий
*Shoker* 322 Опубликовано 2 Октября 2011 Поделиться Опубликовано 2 Октября 2011 ХЕМУЛЬ36RUS До ЗП, у игры небыло колбека на использование вещи (self.object:set_callback(callback.use_object, nil)) Твоя функция просто не вызывается. Все модеры в ТЧ/ЧН используют колбек на потерю предмета из инвентаря и проверяют, что он был удалён (какбэ использован) Думаю в солянке его стоит искать в amk.script Tris power Всё остальное можешь глянуть в скрипте lua_help.script Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
abramcumner 1 159 Опубликовано 2 Октября 2011 Поделиться Опубликовано 2 Октября 2011 До ЗП, у игры небыло колбека на использование вещи (self.object:set_callback(callback.use_object, nil)) Твоя функция просто не вызывается. Все модеры в ТЧ/ЧН используют колбек на потерю предмета из инвентаря и проверяют, что он был удалён (какбэ использован) Думаю в солянке его стоит искать в amk.script Нее - нее, коллбек на использование вещи был всегда, начиная с ТЧ. И работал тоже. Просто его не использовали. ХЕМУЛЬ36RUS, Странный вызов функции zvuki.script.use_snd(obj) Надо zvuki.use_snd(obj) Ссылка на комментарий
Artos 99 Опубликовано 3 Октября 2011 Поделиться Опубликовано 3 Октября 2011 (изменено) Black Hunter Ты бы разобрался с тем что хочешь сделать и написал бы конкретно что и как. Для создания респавнера никакой смарт-терайн создавать не требуется. Если респавнер предназначен для свободно-гуляющих, то вообще наличие гулагов для него по барабану. Как создать - смотри примеры уже имеющихся в all.spawn'е, коих немало. Ничего сложного, только задавай потребные тебе параметры (секции объектов для спавна, их кол-ва, частоту и пр.). Можно и скриптом - смотри в АМК-моде и аналогичных, но тут несколько посложнее и потребуется скрипт респавнеров поковырять. Black Hunter: Допустим заспаунил bloodsucker_strong, на болотах, а как создать ему респаун незнаюЕму (уже заспавненному) - никак. Респавнер спавнит те объекты, котирые ты ему прописал в конфигах и контролирует кол-во 'своих' заспавненных, а не кем-то. Создай респавнер в нужном месте, пропиши ему своего кровососа в кол-ве 1шт. и время респавна - вот и будет у тебя твой кровосос респавниться там где захотелось. *Shoker*, про нюансы удаления аномалий можно говорить и много и мало. Перед удалением - обязательно отключай аномалию и чисть у неписей/монстров 'аномальные' рестрикторы, дабы не иметь битых сэйвов. Оптимально, ИМХО, два этапа: отключение (деактивация) аномалии и чистка рестрикторов у объектов поблизости и после паузы - перепроверка и удаление аномалии. Все модеры в ТЧ/ЧН используют колбек на потерю предмета из инвентаря и проверяют, что он был удалён (какбэ использован) Думаю в солянке его стоит искать в amk.script Ну это ты всех оптом отправляешь в 2007-й год. :-) В АМК-моде не было использовано для актора коллбэка на использование предмета (как и в оригинальной игре), но уже давным давно все нормальные моды его и добавили в коды успешно используют. И искать его (коллбэк на юзание актором) нужно не в сторонних скриптах, а в актор-биндере. Изменено 3 Октября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Black Hunter 3 Опубликовано 3 Октября 2011 Поделиться Опубликовано 3 Октября 2011 (изменено) Artos не мог бы ты пожалуйтса написать мне как создать точку респауна с нужным мне монстром. Покажи пожалуста секцию и что там надо прописывать. Да ты прав мне нужнен респаун для свободно гуляющих людей. Изменено 3 Октября 2011 пользователем Black Hunter Ссылка на комментарий
Rolan 22 Опубликовано 3 Октября 2011 Поделиться Опубликовано 3 Октября 2011 Подскажите как использовать функцию printf в ЗП? Юзал интсрукцию по восстановлению этой функции от Призрака http://www.amk-team.ru/forum/index.php?sho...520#entry537135 Правильно ли такое использование: function to_log() printf("test") end и вешанье его на апдейт актора function actor_binder:update(delta) test.to_log Ссылка на комментарий
Artos 99 Опубликовано 3 Октября 2011 Поделиться Опубликовано 3 Октября 2011 (изменено) Black Hunter, я не занимаюсь гаданиями на кофейной гуще и даром кашпировского не обладаю. Откуда я знаю какой тебе понадобился монстр? Как можно понять и совместить "создать с нужным монстром" и "да, мне нужен для свободно гуляющих людей". Ты даже не уточняешь, достаточно создание в all.spawn'е или захотелось со скриптами побаловаться? Даю 'рыбу': 1. находишь в all.spawn'е подходящую секцию со строкою 'section_name = respawn', в которой есть параметр 'respawn_section = ...' в котором перечислен(ы) люди или монстры. 2. Создаешь дубль этой секции (вспоминаем/смотрим как работать с all.spawn'ом), задав свое имя (name) респавнеру. 3. Меняешь нужные тебе параметры, т.е. задаешь секцию(ии), кого спавнить, вероятности, количества и периодичность. Для того, чтобы 'свободно' гуляли - добавь в [respawn] - параметр 'respawn_check = false'. Не забудь в 'position' прописать свои координаты для точки спавна. Добавлено через 13 мин.: Rolan, советую почитать основы Lua, т.к. метод 'тыка' при употреблении функций/переменных отнимет и у тебя и у других немало времени в пустую. В твоем случае printf - это уже функция, а запись 'printf("test")' - ни что иное, как команда:"Вызвать функцию printf с передачей ей в качестве аргумента строки 'test'". В результате, если 'printf' будет у тебя разблогирована - в лог запишется твое сообщение. Вот тут #50 - готовый комплект для разблогирования 'printf'. Изменено 3 Октября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Black Hunter 3 Опубликовано 3 Октября 2011 Поделиться Опубликовано 3 Октября 2011 А можешь сказать за что отвечает вот эта строчка ;conditions? Может это значит, что после определенного действия на этой точки начинается респаун? Вот полная строчка респауна бандитов на Кордоне ;conditions = {+esc_kill_bandits_quest_kill} 80, 0 И вот еще вопрос(извини если достал уже) Куда прописать respawn_check = false Ссылка на комментарий
Artos 99 Опубликовано 3 Октября 2011 Поделиться Опубликовано 3 Октября 2011 (изменено) Black Hunter Указанная строка с ';conditions' - во первых, закомментрирована (симфолом точка с запятою) и игнорируется. Если же была бы активна - то тут задаются условия, при которых респавнер активен или пассивен. Условия могут быть самыми разнообразными. Параметр 'respawn_check = false' прописывается, как уже написал выше в секцию [respawn], типа: custom_data = <<END [respawn] respawn_section = my_section max_count = 1;--/ макс. кол-во заспавненных объектов min_count = 1;--/ мин. кол-во заспавненных объектов max_spawn = 1;--/ кол-во попыток спавна ('за раз') idle_spawn = medium;--/ периодичность респавна respawn_check = false;--/< вот тут, например (разрешено спавнить без связи с работами в гулагах) END Хотя, если в секции твоего монстро-непися имеется запись о 'smart_terrain = none' - то необязательно, и без этого заспавнится и будет разгуливать. Изменено 3 Октября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Black Hunter 3 Опубликовано 3 Октября 2011 Поделиться Опубликовано 3 Октября 2011 [10327] ; cse_abstract properties section_name = respawn name = mar_flesh_respawn_01 position = 448.96615600586,0.78080213069916,-174.79156494141 direction = 0,0,0 ; cse_alife_object properties game_vertex_id = 167 distance = 4.90000009536743 level_vertex_id = 109559 object_flags = 0xffffff3e custom_data = <<END [respawn] respawn_section = flesh_weak,19, flesh_normal,14 ;max_count = 8 ;min_count = 3 max_spawn = 3 respawn_check = false idle_spawn = medium 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 Вот это правельный респаун плотей на Болотах в ТЧ. Может чё не правильно сделал? Ссылка на комментарий
Artos 99 Опубликовано 3 Октября 2011 Поделиться Опубликовано 3 Октября 2011 (изменено) Black Hunter, не задав max_count (и min_count), которые у тебя закомментированы - твой респавнер будет периодически выбрасывать по 3 штуки плоти. Указав, 'respawn_check = false' и при условии, что плотей некому будет истреблять, твоя зона будет переполняться ими. Хотя бы какой-то ограничитель, но должен быть. Примечание: Указав вероятности спавна 19% и 14% - ты по сути растягиваешь периодичность спавна 'medium' и спавниться скорее всего будут не по три, а меньшим числом ... Изменено 3 Октября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти