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

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

*Shoker*, интересно... Тоесть если мое значение должно быть 0.5 при любых значениях до этого, то одной строкой не обойтись... Но это не важно, да и не нужно пока мне. Меня интересует еще такой момент: если я поставлю db.actor.health = -0.5, то будет отниматься 0.5 от текущего значения, так?
Жду ли я Сталкер 2? Хм...
Ссылка на комментарий

Верно, причём проверку что меньше\больше 0\1 делать не надо.

Игра сама всё сделает.

Также не забывай что при смерти объекта, здоровье ставится -1

Кстати это работает со всеми остальными объектами.

 

Добавлено через 101 мин.:

Можете рассказать, какие ньюансы есть с удалением аномалий через release() во время игры?

Мне надо создавать и удалять через некоторое время аномалии. Раньше у меня из за простого удаления часто ломались сохранения. Игра ЧН, аномалии в рестрикторы для НПС не добавляю.

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

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

*Shoker*, чето оно не фурычит...

if uslovie then

db.actor.health равно -0.2.

end

Тоесть, в начале игры здоровье должно быть равно 0.8, но оно по-прежнему полное...

Что ж не так?

Жду ли я Сталкер 2? Хм...
Ссылка на комментарий

PavelSnork,для удержания уровня здоровья на уровне 0.8 напиши

if uslovie then
db.actor.health = 0.8 - db.actor.health
end

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

PavelSnork

Пока без понятия. Как в начале игры не знаю, но во время самой игры все параметры работают прекрасно.

Говорю с уверенностью, т.к сам с этим параметром последние дни работал :)

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

Здравствуйте мне вот в эту тему сказали обратится по моему вопросу. Вопрос такой.

1. Как создать респаун простых сталкеров. Вот моя ситуация, я заспаунил 4 Чистонебовцев на Болотах в ТЧ, а как создать респаун незнаю, вот и обратился к вам. Наверное нужно создать смарт терайн? Если не прав то поправьте. Мне надо создать респаун не квестовых нпс, а простых для заселения локации. Ну и попутно вот, что еще как создать респаун мутантов. Допустим заспаунил bloodsucker_strong, на болотах, а как создать ему респаун незнаю. Не могли бы вы господа знающие о респауне рассказать как и что и показать на примере по возможности.

Изменено пользователем Black Hunter
Ссылка на комментарий

На 6 патче ТЧ не при всех вылетах и вызовах функции abort игра крашится. Информация в лог идёт о том, что игра должна вылететь, но не вылетает. Кто-нибудь знает решение?

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

Привет всем, прошу помощи хотел сделать для соли и для огсе "звуки при использовании предметов" но что то не могу понять что делаю не так, за образец брал вот эту статью,

Создаете скрипт имя_файла.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

 

 

Вроде бы и сложного ничего нет, но итога тоже нет, подскажите, что не так.

Изменено пользователем ХЕМУЛЬ36RUS

Intrel Core i5 9400F, msi gtx 1660 super ventus, RAM 16g-DDR4, HD 2000g, Win 10x64, SSD 256g, SSD m2 500g.

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

Пишу скрипт, чтобы воспроизводился постэффект при падении выносливости, что нужно написать вместо health, чтобы прощитывалась выносливость?

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

ХЕМУЛЬ36RUS

До ЗП, у игры небыло колбека на использование вещи (self.object:set_callback(callback.use_object, nil))

Твоя функция просто не вызывается. Все модеры в ТЧ/ЧН используют колбек на потерю предмета из инвентаря и проверяют, что он был удалён (какбэ использован) Думаю в солянке его стоит искать в amk.script

 

Tris

power

Всё остальное можешь глянуть в скрипте lua_help.script

 

 

 

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

Ссылка на комментарий
До ЗП, у игры небыло колбека на использование вещи (self.object:set_callback(callback.use_object, nil))

Твоя функция просто не вызывается. Все модеры в ТЧ/ЧН используют колбек на потерю предмета из инвентаря и проверяют, что он был удалён (какбэ использован) Думаю в солянке его стоит искать в amk.script

Нее - нее, коллбек на использование вещи был всегда, начиная с ТЧ. И работал тоже. Просто его не использовали.

 

ХЕМУЛЬ36RUS,

Странный вызов функции

zvuki.script.use_snd(obj)

Надо

zvuki.use_snd(obj)

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

Black Hunter

Ты бы разобрался с тем что хочешь сделать и написал бы конкретно что и как.

Для создания респавнера никакой смарт-терайн создавать не требуется. Если респавнер предназначен для свободно-гуляющих, то вообще наличие гулагов для него по барабану.

Как создать - смотри примеры уже имеющихся в all.spawn'е, коих немало. Ничего сложного, только задавай потребные тебе параметры (секции объектов для спавна, их кол-ва, частоту и пр.).

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

Black Hunter: Допустим заспаунил bloodsucker_strong, на болотах, а как создать ему респаун незнаю
Ему (уже заспавненному) - никак. Респавнер спавнит те объекты, котирые ты ему прописал в конфигах и контролирует кол-во 'своих' заспавненных, а не кем-то.

Создай респавнер в нужном месте, пропиши ему своего кровососа в кол-ве 1шт. и время респавна - вот и будет у тебя твой кровосос респавниться там где захотелось.

 

*Shoker*, про нюансы удаления аномалий можно говорить и много и мало.

Перед удалением - обязательно отключай аномалию и чисть у неписей/монстров 'аномальные' рестрикторы, дабы не иметь битых сэйвов.

Оптимально, ИМХО, два этапа: отключение (деактивация) аномалии и чистка рестрикторов у объектов поблизости и после паузы - перепроверка и удаление аномалии.

 

Все модеры в ТЧ/ЧН используют колбек на потерю предмета из инвентаря и проверяют, что он был удалён (какбэ использован) Думаю в солянке его стоит искать в amk.script

Ну это ты всех оптом отправляешь в 2007-й год. :-)

В АМК-моде не было использовано для актора коллбэка на использование предмета (как и в оригинальной игре), но уже давным давно все нормальные моды его и добавили в коды успешно используют. И искать его (коллбэк на юзание актором) нужно не в сторонних скриптах, а в актор-биндере.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Artos не мог бы ты пожалуйтса написать мне как создать точку респауна с нужным мне монстром. Покажи пожалуста секцию и что там надо прописывать.

Да ты прав мне нужнен респаун для свободно гуляющих людей.

Изменено пользователем Black Hunter
Ссылка на комментарий

Подскажите как использовать функцию 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

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

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'.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

 

А можешь сказать за что отвечает вот эта строчка

;conditions
?

Может это значит, что после определенного действия на этой точки начинается респаун?

Вот полная строчка респауна бандитов на Кордоне ;conditions = {+esc_kill_bandits_quest_kill} 80, 0

И вот еще вопрос(извини если достал уже) Куда прописать respawn_check = false

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

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' - то необязательно, и без этого заспавнится и будет разгуливать.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

[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

 

 

Вот это правельный респаун плотей на Болотах в ТЧ. Может чё не правильно сделал?

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

Black Hunter, не задав max_count (и min_count), которые у тебя закомментированы - твой респавнер будет периодически выбрасывать по 3 штуки плоти. Указав, 'respawn_check = false' и при условии, что плотей некому будет истреблять, твоя зона будет переполняться ими. Хотя бы какой-то ограничитель, но должен быть.

 

Примечание: Указав вероятности спавна 19% и 14% - ты по сути растягиваешь периодичность спавна 'medium' и спавниться скорее всего будут не по три, а меньшим числом ...

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

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

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

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

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

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

Войти

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

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

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