Все посты %s в %S - AMK Team
Перейти к контенту

[SoC] Ковыряемся в файлах


Halford

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

Отличная статья, если не ошибаюсь singapur22 писал, прекрасно работает, что тебе не нравится???

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

Жизнь следует измерять поступками, а не временем...

Поделиться этим сообщением


Ссылка на сообщение

Добрый день!!!

Уже долгое время мучаюсь вопросом и не могу закончить мод. В игре существует 2 класса это группа сталкеров и монстры, соответственно в файле game_relations регулируются их взаимоотношения по типу: "друг" - "враг" - "нейтрал".

 

Для актора и сталкеров


[communities_relations]
; |actor |act_dol|act_fre|stalker|monolit|militar|killer |ecolog |dolg |freedom|bandit |zombied|strange|trader |arena_enemy|zone|
;=================================================================================================================================
actor = 0, 0, 0, 100, -5000, -5000, -5000, 600, 0, 0, -5000, -5000, 0, 5000, -5000, 0
actor_dolg = 0, 0, 0, 0, -5000, -500, -5000, 5000, 600, -5000, -5000, -5000, 0, 0, -5000, 0
actor_freedom = 0, 0, 0, 0, -5000, -5000, -5000, -1500, -5000, 5000, 0, -5000, 0, 0, -5000, 0

stalker = 100, 0, 0, 0, -5000, -5000, -5000, 0, 0, 0, -5000, -5000, 0, 0, -5000, 100
monolith = -5000, -5000, -5000, -5000, 5000, -5000, -5000, -5000, -5000, -5000, 5000, 5000, -5000, 0, -5000, -5000
military = -5000, -5000, -5000, -5000, -5000, 5000, -5000, 0, -5000, -5000, -5000, -5000, 0, 0, -5000, 0
killer = -5000, -5000, 0, -5000, -5000, -5000, 5000, -5000, -5000, -5000, 600, -5000, -5000, 0, -5000, -5000
ecolog = 600, 600, -5000, 0, -5000, 1000, -5000, 5000, 500, -5000, -500, -5000, 0, 0, 0, 600
dolg = 0, 600, -5000, 0, -5000, -500, -5000, 5000, 5000, -5000, -5000, -5000, 0, 0, 0, 0
freedom = 0, -5000, 600, 0, -5000, -5000, -5000, -1500, -5000, 5000, 0, -5000, 0, 0, 0, 0
bandit = -5000, -5000, 0, -5000, 0, -500, 600, -5000, -5000, 0, 0, -5000, -5000, 0, -5000, -5000
zombied = -5000, -5000, -5000, -5000, 5000, -5000, -5000, -5000, -5000, -5000, -5000, 5000, -5000, 0, -5000, -5000
stranger = 0, 0, 0, 0, -5000, -5000, -5000, 0, 0, 0, -500, -5000, 0, 0, 0, 0
trader = 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5000
arena_enemy = -5000, -5000, -5000, -5000, -5000, -5000, 0, 0, 0, -5000, -5000, 0, 0, 0, 0, -5000
zone = 100, 0, 0, 0, -5000, 0, -5000, 5000, 0, 0, -5000, -5000, 0, 0, -5000, 0

Для актора и монстров
[monster_relations]
; [1] друг, [0] нейтрал, [-1] враг, [-2] злейший враг
; actor,human,arena_monstr, boar, bloodsucker, flesh, dog, pseudodog, cat, chimera, giant, zombie, burer, controller, poltergeist, snork, fracture, bird, rat, tushkano
;==========================================================================================================================================================================
actor = 1, 1, -2, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1
human = 0 1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1
arena_monstr = -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
boar = -2, -2, 0, 1, -1, 0, -1, -1, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0
bloodsucker = -2, -2, 0, -1, 1, -1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0
flesh = -2, -1, 0, 0, -1, 1, -1, -1, 0, 0, -1, -1, 0, -1, -1, 0, 0, 0, 0, 0
dog = -2, -1, 0, -1, 0, -1, 1, 0, -1, 0, -1, 0, -1, -1, -1, 0, 0, 0, 0, 0
pseudodog = -2, -1, 0, -1, 0, -1, 0, 1, 0, 0, -1, 0, -1, 0, -1, 0, 0, 0, 0, 0
cat = 0, 1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
chimera = -2, -1, 0, 0, 0, 0, 0, 0, 0, 1, 0, -2, -1, 0, 0, 0, 0, 0, 0, 0
giant = -2, -1, 0, -1, 0, -1, -1, -1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0
zombie = -2, -1, 0, 0, -1, -1, 0, 0, 0, -2, 0, 1, 0, 0, 0, 0, 0, 0, 0, -1
burer = -2, -2, 0, 0, 0, -1, -1, -1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0
controller = -2, -2, 0, -1, 0, -1, -1, 0, 0, 0, 0, 0, 0, 1, 0, -1, 0, 0, 0, 0
poltergeist = -2, -1, 0, -1, 0, -1, -1, -1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0
snork = -2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 1, 0, 0, 0, 0
fracture = -2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0
bird = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0
rat = -2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0
tushkano = -2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 1


 

Согласно этим таблицам имеется возможность регулировать взаимоотношения между сталкерами и ГГ, а также между монстрами и ГГ, однако, отсутствует возможность напрямую регулировать взаимоотношения между сталкерами и монстрами, данная возможность не была предусмотрена разработчиком.

Отсюда и вопрос, возможно ли и каким образом менять взаимодействие между например гражданским зомби (класс монстров) и сталкером зомбированным (класс сталкеров), таким образом, что бы они в игре не нападали друг на друга? Поскольку конфигурационное изменение данного файла не дает результатов подозреваю, что необходимы скриптовые правки, но где, в каких файлах и какова направленность этих изменений понять не могу. Посему прошу помочь по возможности в каком направлении двигаться! 

Заранее благодарю кто откликнется.

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

Жизнь следует измерять поступками, а не временем...

Поделиться этим сообщением


Ссылка на сообщение

 Капрал Хикс

Такого параметра в монстрячих конфигах "m_.....ltx" я не обнаружил.

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

Жизнь следует измерять поступками, а не временем...

Поделиться этим сообщением


Ссылка на сообщение

ColR_iT

Благодарю, это не совсем тот вариант, так как гражданские зомби у меня во многих сценках воюют со сталкерами.

Еще один вопрос, в каком скриптовом файле регулируются эти отношения (monster_relations), посмотрю, возможно удастся что нибудь придумать...

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

Жизнь следует измерять поступками, а не временем...

Поделиться этим сообщением


Ссылка на сообщение

ColR_iT

Отыскал, вставил и без толку, не знаю как на контроллерах, но на гр. зомби не распространяется... Продолжают атаковать друг друга... А надежда была.

 

 

Artos

Есть такой хитрый скрипт.

А какова возможность добавить вариант дружелюбности сталкеров к монстрам??? В скрипте же речь только о монстрячих схемах??? По идее, даже добавив параметр назовем его условно "дружен_со_сталкерами", сталкеры все равно будут вести стрельбу против монстров не смотря на то, что последние не сопротивляются или я ошибаюсь??? 

---------------------------------------------------------------------------------

-- Mob alife manager

---------------------------------------------------------------------------------

 

disable_scheme = 1

reset_scheme = 2

continue_execution = 3

 

function cfg_get_mode(ini, section, npc)

local alife = {}

alife.actor_friendly = utils.cfg_get_bool(ini, section, "actor_friendly", npc, false)

alife.npc_friendly = utils.cfg_get_bool(ini, section, "npc_friendly", npc, false)

alife.friendly = utils.cfg_get_bool(ini, section, "friendly", npc, false)

alife.braindead = utils.cfg_get_bool(ini, section, "braindead", npc, false)

alife.zombie_friendly = utils.cfg_get_bool(ini, section, "zombie_friendly", npc, false)

return alife

end

 

function issue_combat_event(obj)

--printf("_bp: issue_combat_event?")

local st = db.storage[obj:id()]

if st.mob_combat then

printf("_bp: alife_control: issuing event combat_callback")

xr_logic.issue_event(obj, st.mob_combat, "combat_callback")

end

end

 

function alife_control(obj, actor, mode)

-- Мертвые монстры сразу отпускаются под alife

if not obj:alive() then

xr_logic.mob_release(obj)

return true

end

 

-- Монстры, у которых есть враг - также должны работать в alife

local enemy = obj:get_enemy()

if enemy then

--printf("_bp: got enemy")

if not mode.braindead and

not mode.friendly and

(not mode.actor_friendly or enemy:id () ~= actor:id ()) and

(not mode.npc_friendly or enemy:id() == actor:id()) then

issue_combat_event(obj)

xr_logic.mob_release(obj)

return true

end

end

 

-- Отпускать в alife монстров, которых обстреляли

local h = obj:get_monster_hit_info()

if h.who and h.time ~= 0 then

if mode.braindead then

-- Braindead монстры не уходят из под скрипта даже если их обстрелять

return false

end

if h.who:id() == actor:id() and mode.actor_friendly then

-- Если хотя бы раз был атакован actor-ом, то больше не дружественен к нему

mode.actor_friendly = false

if h.who:id() == actor:id() and mode.zombie_friendly then

mode.zombie_friendly = true

end

--printf("_bp [%s]: h.who:name() = %s", obj:name(), h.who:name())

issue_combat_event(obj)

xr_logic.mob_release(obj)

return true

end

 

-- Остальные монстры работают под схемой

return false

end

 

 

Прошу простить, но времени на редактирование поста не хватило...

 

disable_scheme = 1

reset_scheme = 2

continue_execution = 3

 

function cfg_get_mode(ini, section, npc)

local alife = {}

alife.actor_friendly = utils.cfg_get_bool(ini, section, "actor_friendly", npc, false)

alife.npc_friendly = utils.cfg_get_bool(ini, section, "npc_friendly", npc, false)

alife.friendly = utils.cfg_get_bool(ini, section, "friendly", npc, false)

alife.braindead = utils.cfg_get_bool(ini, section, "braindead", npc, false)

alife.zombie_friendly = utils.cfg_get_bool(ini, section, "zombie_friendly", npc, false)

return alife

end

 

function issue_combat_event(obj)

--printf("_bp: issue_combat_event?")

local st = db.storage[obj:id()]

if st.mob_combat then

printf("_bp: alife_control: issuing event combat_callback")

xr_logic.issue_event(obj, st.mob_combat, "combat_callback")

end

end

 

function alife_control(obj, actor, mode)

-- Мертвые монстры сразу отпускаются под alife

if not obj:alive() then

xr_logic.mob_release(obj)

return true

end

 

-- Монстры, у которых есть враг - также должны работать в alife

local enemy = obj:get_enemy()

if enemy then

--printf("_bp: got enemy")

if not mode.braindead and

not mode.friendly and

not mode.zombie_friendly and

(not mode.actor_friendly or enemy:id () ~= actor:id ()) and

(not mode.npc_friendly or enemy:id() == actor:id()) then

issue_combat_event(obj)

xr_logic.mob_release(obj)

return true

end

end

 

-- Отпускать в alife монстров, которых обстреляли

local h = obj:get_monster_hit_info()

if h.who and h.time ~= 0 then

if mode.braindead then

-- Braindead монстры не уходят из под скрипта даже если их обстрелять

return false

end

if h.who:id() == actor:id() and mode.actor_friendly then

-- Если хотя бы раз был атакован actor-ом, то больше не дружественен к нему

mode.actor_friendly = false

if h.who:id() == actor:id() and mode.zombie_friendly then

mode.zombie_friendly = true

end

--printf("_bp [%s]: h.who:name() = %s", obj:name(), h.who:name())

issue_combat_event(obj)

xr_logic.mob_release(obj)

return true

end

 

-- Остальные монстры работают под схемой

return false

end

 

 

 

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

Жизнь следует измерять поступками, а не временем...

Поделиться этим сообщением


Ссылка на сообщение

Melo, наверное никто тебе не ответит, потому что муссировалось уже не раз, вот здесь посмотри: 

 

http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%A1%D0%BC%D0%B0%D1%80%D1%82%D0%B5%D1%80%D1%80%D0%B5%D0%B9%D0%BD%D1%8B_%D0%B8_%D0%B3%D1%83%D0%BB%D0%B0%D0%B3%D0%B8

 

Вот кусок кода, человек как раз поясняет где и что находится.

 

if type == "esc_bandits_smart_terrain" then


t = {}
;-- "соеденительная секция" для логики, определяем ltx фаилом
t.section = "logic@esc_bandits_smart_terrain_bandit1_walker"
;-- no idea, probably describes after what time
;-- npc will use this job again (?)
t.idle = 0
;-- no idea but i guess it's optional
t.timeout = 0
;-- пріоритет
t.prior = 100
;-- нпс будет использовать эту логику,
;-- если ST переключится в это состояние
;-- в этом случае - состояние 0 (день)
t.state = {0}
;-- Какой squad и group назначится персонажу принявшему эту работу.
t.squad = squad
t.group = groups[1]
;-- no idea what means position_threshold
t.position_threshold = 100
;-- описывает нпс в этом состоянии: онлайн или офлайн
;-- онлайн = истина по дефолту
t.online = true
;-- описывает рестрикторы (куда нпс могут/не могут пойти)
t.in_rest = ""
t.out_rest = ""
;-- ввиду особого способа присвоения работ в
;-- smart_terrain.script вы никогда не знаете, какая работа
;-- будет использоваться каждым нпсом; если вы хотите быть уверенным
;-- что конкретный нпс взял конкретную работу, тогда
;-- вам нужно заюзать предикатную функцию; в этом слуае
;-- мы хотим чтобы эта работа присвоилась мастеру бандиту
t.predicate = function(obj_info) return obj_info.rank >= 900 end
table.insert(sj, t)

 

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

Жизнь следует измерять поступками, а не временем...

Поделиться этим сообщением


Ссылка на сообщение

-AZOT- имеется ввиду вот это в логике у неписей:

meet_dialog        = esc_lager_no_talk

meet_dialog        = escape_lager_guard_start_dialog

Фактически это активация стартового диалога который прописан у них в логике!!! Достаточно просто удалить соот. строки и все...

Жизнь следует измерять поступками, а не временем...

Поделиться этим сообщением


Ссылка на сообщение

 Карлан вот здесь посмотри:

 

 

 

[esc_lager_squash_camp]


points = p0
p0:name = wp00
p0:flags = 0x1              ;этот флаг с чем связан???
p0:position = -170.06298828125,-20.014019012451,-136.57836914063
p0:game_vertex_id = 55
p0:level_vertex_id = 79998




[esc_lager_squash_camp_look]
points = p0
p0:name = wp00
p1:position = -170.23962402344,-20.173686981201,-153.82247924805
p1:game_vertex_id = 45
p1:level_vertex_id = 79973

 

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

Жизнь следует измерять поступками, а не временем...

Поделиться этим сообщением


Ссылка на сообщение

AndreySol прописал верно, все должно работать!!!

Жизнь следует измерять поступками, а не временем...

Поделиться этим сообщением


Ссылка на сообщение

VVV32768

Там через инфопоршень прописывать надо...

 

 

Это в папке level, нужного тебе уровня:
[level_scripts]
script = svalka

Это в папке scripts:
function main()
if not has_alife_info("controller_tubeman")then
alife():create("controller_tubeman",vector():set(69.456,1.29,95.033),239954,370)
db.actor:give_info_portion("controller_tubeman")
end
end

И инфопоршень нужен еще, тогда спавнится при каждом заходе на уровень, ну или какая там тебе функция нужна при каждом заходе...
У меня таким образом появляется контролер в квесте, можно сделать что бы только 1 раз спавнился например по желанию...

 

Изменено пользователем losiara
  • Нравится 1

Жизнь следует измерять поступками, а не временем...

Поделиться этим сообщением


Ссылка на сообщение

Старлей

Проверка (лично мне) нужна для одноразового выполнения функции.

Подробнее можно узнать у Malandrius, это он юзал этот способ...

 

 

 _Val_

Почему инфопоршень не выдается??? У меня проверяет и выдает. Если не выдается значит функция у тебя не стартует.

Жизнь следует измерять поступками, а не временем...

Поделиться этим сообщением


Ссылка на сообщение

Dniwe

 

Да что тут гуглить, выдать можно и через инфопорцию и через другую функцию и множеством иных методов и способов...

 

 

Сама функция выглядит проще 

function my_habar(actor, npc)
        treasure_manager.get_treasure_manager():give_treasure("имя тайника")
end
Изменено пользователем losiara

Жизнь следует измерять поступками, а не временем...

Поделиться этим сообщением


Ссылка на сообщение

Serg.Ivan

Конечно с конфигом все нормально, но вот только rpm - это параметр скорострельности, а не стрельбы очередями, таким образом его повышение влияет только на количество выстрелов в еденицу времени, а не тип выстрелов (очередь, одиночные)!!! Менять/добавлять надо другой параметр, "fire_modes" как и было сказано выше.

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

Жизнь следует измерять поступками, а не временем...

Поделиться этим сообщением


Ссылка на сообщение

Serg.Ivan

Тогда поставь у своей СВД параметр rpm = 700 или 1000 и пусть она начнет стрелять очередями!!!

Жизнь следует измерять поступками, а не временем...

Поделиться этим сообщением


Ссылка на сообщение

@Serg.Ivan,

При том Уважаемый, что параметр rpm не отвечает за стрельбу очередями!!! Поэтому я и предложил тебе увеличить этот параметр на том оружии которое не призвано стрелять очередями (СВД). Итог будет следующий, увеличение rpm приведет к тому что ты сможешь чаще стрелять при каждом "нажатии" на курок (ЛКМ), но очередями в связи с этим оружие стрелять не станет!!! А вот у автоматического оружия увеличение данного параметра как раз таки и вызовет увеличение количества пуль пуль выпущенных в еденицу времени при ОДНОРАЗОВОМ "нажимании" на курок (ЛКМ)!!!

Если в данном моде оружию присвоен статус "автоматического", тогда действительно rpm призвано будет помочь в решении проблемы, если же параметр выставлен на стрельбу "одиночными", то хоть 100.000 rpm выстави, а более одной пули оно выпускать не будет...

И не нужно злиться. ;)

Жизнь следует измерять поступками, а не временем...

Поделиться этим сообщением


Ссылка на сообщение

andreyholkin,не помогает. Всё тот же безлоговый вылет. С новайсами я нахожусь в одной группировке.

 

 

Причем тут новайсы?! Изначально в игре с бандитами говорить нельзя, будь ты им хоть брат родной. Вносите правки в соотв. скрипты. Менеджер диалогов тут и близко не стоит, - это для справки.

Говорить нельзя, но вылет скорее всего не из за этого, проблема в профиле либо самом диалоге, скрипты трогать не нужно.

У себя в моде я добавил диалоги всем неквестовым персам на всех локациях (дружелюбным) и все они разговаривают и даже задания выполняют...

 

Примерно так:

 

 

 

<dialog id="zadanie_kvest">

<dont_has_info>zadanie_kvest</dont_has_info>

<phrase_list>

<phrase id="0">

<text>zadanie_kvest_0</text>

<give_info>new_restriktor</give_info>

<give_info>outfit_actor</give_info>

<next>1</next>

</phrase>

<phrase id="1">

<text>zadanie_kvest_1</text>

<next>2</next>

<next>21</next>

</phrase>

<phrase id="2">

<text>zadanie_kvest_2</text>

<next>3</next>

</phrase>

<phrase id="21">

<text>zadanie_kvest_21</text>

<next>4</next>

</phrase>

<phrase id="3">

<text>zadanie_kvest_3</text>

<give_info>zadanie_kvest</give_info>

<give_info>zadanie_kvest_vipolnil_have</give_info>

</phrase>

<phrase id="4">

<text>zadanie_kvest_4</text>

<next>1</next>

<action>dialogs.break_dialog</action>

</phrase>

</phrase_list>

</dialog>

<dialog id="zadanie_kvest_vipolnil">

<precondition>kvest_dialog.have_a_mutant_dog_tail</precondition>

<has_info>zadanie_kvest_vipolnil_have</has_info>

<dont_has_info>zadanie_kvest_vipolnil_done</dont_has_info>

<phrase_list>

<phrase id="0">

<text>zadanie_kvest_vipolnil_0</text>

<next>1</next>

</phrase>

<phrase id="1">

<text>zadanie_kvest_vipolnil_1</text>

<next>2</next>

</phrase>

<phrase id="2">

<text>zadanie_kvest_vipolnil_2</text>

<action>kvest_dialog.babki_otdal</action>

<action>kvest_dialog.otday_mutant</action>

<give_info>zadanie_kvest_vipolnil_done</give_info>

</phrase>

</phrase_list>

</dialog>

 

 

Профиль:

 

 

<!---------------------------STALKER NOVICE----------------------->

 

<specific_character id="esc_stalker_novice_default1" team_default = "1">

<name>GENERATE_NAME_stalker</name>

<icon>ui_npc_u_green_stalker_6</icon>

<bio>esc_stalker_novice_bio</bio>

 

<class>esc_stalker_novice</class>

<community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect>

 

<rank>140</rank>

<reputation>12</reputation>

<money min="200" max="600" infinitive="0"/>

 

<snd_config>characters_voice\human_01\newbie\</snd_config>

<crouch_type>-1</crouch_type>

 

<visual>actors\novice\green_stalker_6</visual>

<supplies>

[spawn] \n

wpn_bm16 \n

ammo_12x70_buck \n

stalker_outfit \n

#include "gameplay\character_items.xml" \n

#include "gameplay\character_food.xml"

</supplies>

 

#include "gameplay\character_criticals_3.xml"

 

<start_dialog>hello_dialog</start_dialog>

<actor_dialog>dm_help_wounded_medkit_dialog</actor_dialog>

<actor_dialog>zadanie_kvest</actor_dialog>

<actor_dialog>zadanie_kvest_vipolnil</actor_dialog>

#include "gameplay\character_dialogs.xml"

</specific_character>

 

 

 

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

Жизнь следует измерять поступками, а не временем...

Поделиться этим сообщением


Ссылка на сообщение

Программа ругается на то что не может открыть секцию "grenade_gd-05"

Связано может быть со многими причинами, в том числе с прописыванием ее в торговлю, спавном где то на локации, в инвентаре ГГ либо сталкеров, выдаче в квестах и т. д. 

А удалять надо полностью предмет, а не только его секцию в файле...

Жизнь следует измерять поступками, а не временем...

Поделиться этим сообщением


Ссылка на сообщение

@Потенциал, А зачем его ставить вне АИ сетки??? Ради эксперимента что ли??? 

Игра не расчитана на то что бы спавнить персов вне АИ сетки, это приведет к багам и вылетам!!!

  • Нравится 1

Жизнь следует измерять поступками, а не временем...

Поделиться этим сообщением


Ссылка на сообщение

NFSNeedForSpirt      может так попробовать:

 

custom_data = <<END

вместо:

custom_data = <[smart_terrain]

 

Строгое предупреждение !!!

п.2.4. про жирные буквы почитай.

BFG

 

p.s. пост поправил.

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

Жизнь следует измерять поступками, а не временем...

Поделиться этим сообщением


Ссылка на сообщение

AndrewMor

 

Вот тебе пример из моего мода по проверке правда тут 10 рук зомби и передачу их торговцу. Активация скриптов происходит через диалог, проверка через прекондишн...

 

 

 

 

 

function proverka_v_nalichii(sSection,iNum)
if not iNum then iNum = 1 end
local oActor = db.actor
local iCnt = 0
if oActor and sSection then
oActor:iterate_inventory(
function (dummy, oItem)
if oItem:section() == sSection then
iCnt = iCnt + 1
if iCnt >= iNum then
return true --/> актор имеет N предметов
end
end
end
,nil)
end
return iCnt >= iNum --/> имеет ли актор N предметов
end

function zamochit_zombie()
return this.proverka_v_nalichii("mutant_zombie_hand", 10)
end

function Delete_mutant_zombie_hand()
local cnt = db.actor:object_count()
local ch=0
for i=0, cnt-1 do
local item = db.actor:object(i)
if item:section() == "mutant_zombie_hand" then
local sobj = alife():object(item:id())
if sobj then
alife():release(sobj,true)
ch = ch+1
if ch == 10 then
break end
end
end
end
end

 

 

 

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

Жизнь следует измерять поступками, а не временем...

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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