Скриптование - Страница 142 - Скрипты / конфиги / движок - AMK Team
Перейти к контенту

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

Тема для обсуждения скриптов всего и всех в серии игр STALKER.


Задавая вопрос (!):
1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего;
2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме);
3. Изучите информацию которая может вам помочь:

 
 

Stalkerin. Там есть много хороших статей касательно данной темы.
Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения.

 

Справочное руководство по языку Lua 5.1
https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ru
Справочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены.

4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос;
5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе;
6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода;
7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины.
8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ.
9. И помните: «Правильно заданный вопрос – половина ответа».

 

Какие вопросы следует задавать, а какие нет...

 

Задавайте вопросы, которые касаются непосредственно скриптов и их работы, т.е. Вы что-то делаете, а у Вас что-то не получается, при этом у Вас на руках должен быть хотя бы какой-то код, свидетельствующий о Вашей причастности к вопросу.

 

Вопросы которые будут удалятся, следовательно их задавать не нужно:
-- Где находится та или иная функция?
Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;
-- Как сделать что-то/то-то?
С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;
-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.
-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.
Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов?
В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос.

И последнее: очень рекомендовано к прочтению Правила форума
 


  • Спасибо 1
  • Полезно 2
Ссылка на комментарий
https://www.amk-team.ru/forum/topic/6185-skriptovanie/
*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 пользователей

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