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

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

Greh921

во время игры - невозможно.

хотя..дизассемблер в руки и погнал движок ковырять ^_^

Не бойтесь совершенства. Вам его не достичь.
C. Дали
Ссылка на комментарий
Подскажите, пожалуйста, как можно сделать так ,что при каждом заходе на локацию, на ней автоматически спавнилось человек 15 бандюков.

 

Понадобится bind_stalker.script

 

1) В функции actor_binder:save(packet) допиши в самое начало примерно следующее:

 

function actor_binder:save(packet)
    if utils.level_changing() then
        xr_logic.pstor_store(db.actor, "changing_level", 1)
    end
... и т.д.

 

Это нужно для того, чтобы сохранить информацию о том, какой это сейв - автосейв при смене локации или любой другой.

 

2) В функции actor_binder:net_spawn(data) допиши в конец перед return true вот такое:

 

    if xr_logic.pstor_retrieve(db.actor, "changing_level", 0) == 1 then
        -- Здесь производим нужные действия
        xr_logic.pstor_store(db.actor, "changing_level", 0)
    end

 

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

 

Ну, как заспавнить нужное количество нужных персонажей, ты, я думаю, знаешь :)

 

P.S. Писалось для ТЧ и проверялось на ТЧ, в других версиях не знаю, но что-то наподобие.

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

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

Ссылка на комментарий
Kirag, Я делал по-другому.Я в net_spawn() сохранял имя текущего левела.До того сравнивая с предыдущим сохраненным и по необходимости вызывая новопрописанный коллбэк level_change(old,new).
Ссылка на комментарий

а я делал вообще вот так...

 

if level:name() == "l05_bar" then

-- спавнил

end

 

по памяти так, может метод как ни так написал, но смысл такой :)

 

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

Влад, можно дфиг раскомпилить и перегнать на делфи, там удобней править

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

[b]Struck[/b]

можно дфиг раскомпилить и перегнать на делфи, там удобней править

и зачем ты мне "это" говоришь?

 

if level[b][u].[/u][/b]name() == "l05_bar" then

ошибка была.

Изменено пользователем Влад
Не бойтесь совершенства. Вам его не достичь.
C. Дали
Ссылка на комментарий

Каким методом, скриптом добавить диалог нпс?

Что бы, вроде:

local push = true

local item = db.actor:object("wpn_pm")

function test()

if item and push then

добавить диалог...

Выдать мессагу...

push = false

end

end

 

Мессагу знаю как сделать. Но как про диалог?

И не подскажете чтение ini файла и запись, посредством Lua?

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

TREWKO

с диалогом:

сделай выдачу поршня "my_info" в твоей функции,а в диалоге сделай <has_info>my_info</has_info>

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

Описание "class ini_file" от меченый(стрелок):

C++ class ini_file {

ini_file (string); --создать объект класса ini_file/за место string прописываем путь до файла

 

function line_count(string); --возвращает количество ключей в секции string/ return ini:line_count("my_section")

function r_bool(string, string); --возвращает логическое(булево) значение/(секция,ключ)

function section_exist(string); --"проверка" существует ли секция string/if ini:section_exist("my_section")

function r_float(string, string); --возвращает значение с плавающей точкой

function r_clsid(string, string);*********************

function r_s32(string, string); --возвращает целое число

function r_line(ini_file*, string, number, string&, string&); --возвращает полностью "линию" т.е. key1 = value1

function r_token(string, string, const token_list&); **********

function r_vector(string, string);********

function r_u32(string, string);--возвращает целое число(чуть-чуть медленне чем s32)

function r_string_wq(string, string);--возвращает строку

function r_string(string, string);--возвращает строку

function line_exist(string, string);--"проверка" существует ли ключ /if ini:line_exist("my_section","key1")

};

 

Примеры работы с ним:

...

local ini = ini_file("my_folder\my.ltx")

if ini:section_exist("my_section") then

...

end

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

local ini = ini_file("my_folder\my.ltx")

ini:r_float("my_section", "my_line") --возвращает значение с плавающей точкой

...

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

local ini = ini_file("my_folder\my.ltx")

ini:r_s32("my_section", "my_line") --возвращает целое число

...

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

local ini = ini_file("my_folder\my.ltx")

ini:r_u32("my_section", "my_line") --возвращает целое число

...

 

Не бойтесь совершенства. Вам его не достичь.
C. Дали
Ссылка на комментарий

function wpn_class()

local active_item=db.actor:active_item()

if active_item ~= nil then

active_item:section() == "wpn_vintorez" or

active_item:section() == "wpn_svu" or

active_item:section() == "wpn_svd" and

if math.ceil(db.actor:accuracy()*1000) == 1 then

get_hud():AddCustomStatic("din_pric", true)

end

end

end

end

он верный? И ещё, в какой апдейтер его присоединить? Пробывал в дельту - вылет без лога.

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

кровоSTALKER

юзай так:

function wpn_class()
local hud = get_hud()
local custom_static = hud:GetCustomStatic("din_pric")
local active_item=db.actor:active_item()
if active_item then
    if (active_item:section() == "wpn_vintorez" or active_item:section() == "wpn_svu" or active_item:section() == "wpn_svd") and math.ceil(db.actor:accuracy()*1000) == 1 then
        if custom_static == nil then
                      hud:AddCustomStatic("din_pric", true)
        end
    end
end
end

 

апдейт в bind_stalker.script - function actor_binder:update(delta)

Изменено пользователем Влад
Не бойтесь совершенства. Вам его не достичь.
C. Дали
Ссылка на комментарий
Kirag, Я делал по-другому.Я в net_spawn() сохранял имя текущего левела.До того сравнивая с предыдущим сохраненным и по необходимости вызывая новопрописанный коллбэк level_change(old,new).

 

Кстати, да, этот метод даже толковее. Он и проще, и позволяет выполнять действия с учетом того, откуда перешли. Век живи, век учись :)

 

а я делал вообще вот так...

 

if level:name() == "l05_bar" then

-- спавнил

end

 

по памяти так, может метод как ни так написал, но смысл такой :)

 

Если это (и только это) в net_spawn актора, то у метода есть большой недостаток - он будет срабатывать не только при переходе на бар, но и при каждом Сейв/Лоаде, причем эффект будет накапливаться каждый С/Л. Вся возня с сохранением имени левелов или факта перехода как раз и нужна, чтобы от этого момента избавиться.

Хотя, смотря когда и что нужно.

 

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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

Влад, заюзал, вылет такой:

Expression : !m_error_code

Function : raii_guard::~raii_guard

File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp

Line : 748

Description : .... - Çîâ Ïðèïÿòè\gamedata\scripts\bind_stalker.script:322: attempt to index global 'chimera_mod' (a nil value)

 

 

В bind_stalker апдейтер был таков:

chimera_mod.din_scope()

 

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

Обижаешь. Поправил ошибку синтаксиса, получил вылет:

Expression : !m_error_code

Function : raii_guard::~raii_guard

File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp

Line : 748

Description : .... - Çîâ Ïðèïÿòè\gamedata\scripts\bind_stalker.script:322: attempt to call field 'din_scope' (a nil value)

 

 

Кастом статик тоже сделал.

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

кровоSTALKER, покажи код, в слепую ничего не понятно.

 

============================

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

Изменено пользователем 8push5
Возможно всё, ну или почти всё.
Ссылка на комментарий

Содержание chimera_mod:

snd_obj = {} --это нужно для воспроизведеня звука, должен быть в каждом скрипте где будет использоватся команда "s_play"

snd_obj = xr_sound.get_safe_sound_object([[$no_sound]])

 

function s_stop()

if snd_obj:playing()==true then snd_obj:stop() end

end

 

function s_play(path) --сюда передается путь файла, и он ево играет

s_stop()

snd_obj = xr_sound.get_safe_sound_object(path)

snd_obj:play_at_pos(db.actor, vector ():set (0, 0, 0), 0, sound_object.s2d)

end

 

------Copyright DEXXX-------

 

-- device\pda\pda_tip --это путь до файла без расширения .ogg

local sound_types = {"([[device\pda\pda_tip]])", "([[device\pda\pda_tip]])", "[device\pda\pda_news]", "[[device\pda\pda_objective]]"} --со скобками нада поэксперементировать,

 

function name_script() --твой скрипт

s_play(sound_types[math.random(4)]) --четыре это максимальное значение, от 1 до 4. скока файлов стока и максимальное значение

end

 

function add_new_lc(levch,levchn,levchm,info) --спауним левел ченджер

local objt = alife():story_object(levch)

if not objt then

alife():create(levchn)

end

local obj = alife():story_object(levch)

if obj then

level.map_add_object_spot(obj.id, "level_changer",levchm)

db.actor:give_info_portion(info)

info_received()

end

end

 

-- Апдейтер динамических прицелов

function din_scope()

local hud = get_hud()

local custom_static = hud:GetCustomStatic("din_pric")

local active_item=db.actor:active_item()

if active_item then

if (active_item:section() == "wpn_vintorez" or active_item:section() == "wpn_svu" or active_item:section() == "wpn_svd") and math.ceil(db.actor:accuracy()*1000) == 1 then

if custom_static == nil then

hud:AddCustomStatic("din_pric", true)

end

end

end

end

 

Строка апдейтера в bind_stalker:

function actor_binder:update(delta)

object_binder.update(self, delta)

if string.find(command_line(), "-designer") then

return

end

if self.already_jumped==false and jump_level.need_jump==true and (device().frame > self.spawn_frame+2000) then

-- jump_level.try_to_jump()

self.already_jumped = true

return

end

-- Вызов апдейта переноса игрока проводником

if travel_func ~= nil then

travel_func()

end

-- DEBUG slowdown

local time = time_global()

game_stats.update (delta, self.object)

-- апдейт погоды

self.weather_manager:update()

--' Апдейт саундменеджера

xr_sound.update(self.object:id())

-- Обновление отключения ввода с клавиатуры.

if self.st.disable_input_time ~= nil and game.get_game_time():diffSec(self.st.disable_input_time) >= self.st.disable_input_idle then

level.enable_input()

self.st.disable_input_time = nil

end

-- Апдейт прятание оружия игрока во время диалога

if self.object:is_talking() then

if self.weapon_hide_in_dialog == false then

self.object:hide_weapon()

printf("hiding weapon!!!")

self.weapon_hide_in_dialog = true

end

else

if self.weapon_hide_in_dialog == true then

printf("restoring weapon!!!")

self.object:restore_weapon()

self.weapon_hide_in_dialog = false

end

end

-- Апдейт прятание оружия игрока в зоне sr_no_weapon

if check_for_weapon_hide_by_zones()==true then

if self.weapon_hide == false then

printf("hiding weapon!!!")

self.object:hide_weapon()

self.weapon_hide = true

end

else

if self.weapon_hide == true then

printf("restoring weapon!!!")

self.object:restore_weapon()

self.weapon_hide = false

end

end

-- обновление пси-антенны

if sr_psy_antenna.psy_antenna then

sr_psy_antenna.psy_antenna:update(delta)

end

if self.bCheckStart then

printf("SET DEFAULT INFOS")

if not has_alife_info("global_dialogs") then

self.object:give_info_portion("global_dialogs")

end

if not has_alife_info("level_changer_icons") then

self.object:give_info_portion("level_changer_icons")

end

self.bCheckStart = false

end

if not self.loaded_slot_applied then

self.object:activate_slot(self.loaded_active_slot)

self.loaded_slot_applied = true

end

xr_s.on_actor_update(delta)

 

-- ARS MOD --------------------------

ars.on_actor_update(self)

-- обработчик всяческих менеджеров четыре раза в секунду.

if TimeTrigger1<time then

TimeTrigger1=time+250

self:check_detective_achievement()

self:check_mutant_hunter_achievement()

if(level_anomaly)then

self.anomaly_manager:update()

end

end

-- ARS MOD --------------------------

-- Chimera addon. Dinamic scopes update

chimera_mod.din_scope()

 

if(self.surge_manager) then

if(self.f_surge_manager_loaded ~= true) then

self.surge_manager:initialize()

self.f_surge_manager_loaded = true

end

if(self.surge_manager.levels_respawn[level.name()]) then

self.surge_manager:respawn_artefacts_and_replace_anomaly_zone()

end

self.surge_manager:update()

end

-- Апдейт доступности для симуляции.

simulation_objects.get_sim_obj_registry():update_avaliability(alife():actor())

if not self.loaded then

get_console():execute("dump_infos")

self.loaded = true

end

treasure_manager.get_treasure_manager():update()

if not(primary_objects_filled) then

pda.fill_primary_objects()

primary_objects_filled = true

end

pda.fill_sleep_zones()

end

 

Содержание ui_custom_msgs:

<!--Chimera addon to ARS CoP-->

<din_pric x="640" y="512" stretch="1">

<texture>chimera\anim_cube</texture>

</din_pric>

anim_cube тестовая, файл .seq.

Изменено пользователем кровоSTALKER
Ссылка на комментарий
function din_scope()
local hud = get_hud()
local custom_static = hud:GetCustomStatic("din_pric")
local active_item=db.actor:active_item()
if active_item then
    if active_item:section() == "wpn_vintorez" or active_item:section() == "wpn_svu" or active_item:section() == "wpn_svd" then
    if math.ceil(db.actor:accuracy()*1000) == 1 then
        if custom_static == nil then
                      hud:AddCustomStatic("din_pric", true)
        end
      end
    end
end
end

Не бойтесь совершенства. Вам его не достичь.
C. Дали
Ссылка на комментарий

Влад, тоже

Expression : !m_error_code

Function : raii_guard::~raii_guard

File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp

Line : 748

Description : .... - Çîâ Ïðèïÿòè\gamedata\scripts\bind_stalker.script:322: attempt to call field 'din_scope' (a nil value)

 

 

 

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

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

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

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

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

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

Войти

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

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

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