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

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

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

Спустя год когда мод был почти готов, я наткнулся на очень интересную статью

Что за статья?

 

Не подскажете одиночное выполнение скрипта.

Скрипт сделан через биндер.

TREWKO, можно так :

flag = true

function ***()
    if flag then
        ...
        flag = false
    end
end

Вот как раз после таких примеров и начинают все пихать всё в апдейт. Можно подумать, что в биндере нет других методов.

Для начала, сам вопрос звучит странно. Что вообще значит "сделан через биндер"? Да ещё при этом требуется "одиночное выполнение". Это как? Я лично не понял, о чём идёт речь. Если требуется одиночное выполнение, то сперва надо выяснить, а по какому собственно поводу надо что-то выполнить, а уж потом выяснять, куда этот код помещать и как.

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

Апдейт я чаще всего задействую для некоего отладочного мониторинга, когда надо что-то постоянно отслеживать. И то это можно сделать из под того же полигона с использованием fastcall-ов опять же не влезая в существующие скрипты. fastcall обычно не занят и его можно и навесить на актора и снять "со стороны".

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

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

Коротко. У меня скрипт, выводит время по часам в виде сообщения.

Нужно, что бы один раз выполнилось, и через 24 часа снова показалось сообщение.

Ссылка на комментарий
Что за статья?

вот эта

второй части уже тама нету, но у меня на компе где-то валяется. если надо - кину куда-нить

Изменено пользователем Gonarh
118 101 110 105 44 32 118 105 100 105 44 32 118 105 99 105
Ссылка на комментарий
TREWKO, через 24 часа время всегда одинаковое - вот на него и ставь условие

i-igroman.ru - Мой, принципиально новый сайт о компьютерных играх

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

Доброго времени суток!!!

Значится так: я созлавал свой смарт вот по этой статье статья Просто заменял там bandits на свою группировку, потом всё прописал как надо, и добавил им точки в файл way_l01_escape.ltx . После того как я зашёл в игру, у мну ВСЕ неписи ходят куда их пошлёт alife

Вот мои файлы

[919]
; cse_abstract properties (основные параметры)
section_name = smart_terrain
name         = esc_wind_smart_terrain
position     = -234.973999023438,-19.6793632507324,-156.694946289063
direction    = 0,0,0

; cse_alife_object properties (параметры объекта)
game_vertex_id  = 47
distance        = 9.09999942779541
level_vertex_id = 20038
object_flags    = 0x==3e
custom_data     = <<END
[smart_terrain]
type     = esc_wind_smart_terrain
capacity = 3
END

; cse_shape properties (параметры шейпа объекта)
shapes        = shape0
shape0:type   = sphere
shape0:offset = 0,0,0
shape0:radius = 20.55957102775574

; cse_alife_space_restrictor properties (параметры рестриктора)
restrictor_type = 3

; se_smart_terrain properties (параметры смарттеррейна)

[920]
; cse_abstract properties
section_name = stalker
name = wind_3__
position = -234.88432312012,-20.028535842896,-158.0202331543
direction = 0,0.000113633497676346,0.118211999535561

; cse_alife_trader_abstract properties
money = 5000
character_profile = wind_3

; cse_alife_object properties
game_vertex_id = 47
distance = 4.90000009536743
level_vertex_id = 20680
object_flags = 0xffffffbf
custom_data = <<END
[smart_terrains]
esc_wind_smart_terrain = true
END

; cse_visual properties
visual_name = actors\bandit\stalker_bandit_exoskeleton

; cse_alife_creature_abstract properties
g_team = 0
g_squad = 1
g_group = 21
health = 1
dynamic_out_restrictions = 
dynamic_in_restrictions = 

upd:health = 1
upd:timestamp = 0
upd:creature_flags = 0
upd:position = -234.88432312012,-20.028535842896,-158.0202331543
upd:o_model = 0
upd:o_torso = 0.000113633497676346,0.118211999535561,0
upd:g_team = 0
upd:g_squad = 1
upd:g_group = 21

; cse_alife_monster_abstract properties

upd:next_game_vertex_id = 65535
upd:prev_game_vertex_id = 65535
upd:distance_from_point = 0
upd:distance_to_point = 0

; cse_alife_human_abstract properties
predicate5 = 0,1,2,0,0
predicate4 = 2,0,2,0

; cse_ph_skeleton properties

upd:start_dialog = 

; se_stalker properties

[921]
; cse_abstract properties
section_name = stalker
name = wind_31
position = -234.88432312012,-20.028535842896,-158.0202331543
direction = 0,0.000113633497676346,0.118211999535561

; cse_alife_trader_abstract properties
money = 5000
character_profile = wind_2

; cse_alife_object properties
game_vertex_id = 47
distance = 4.90000009536743
level_vertex_id = 20680
object_flags = 0xffffffbf
custom_data = <<END
[smart_terrains]
esc_wind_smart_terrain = true
END

; cse_visual properties
visual_name = actors\bandit\stalker_bandit_exoskeleton

; cse_alife_creature_abstract properties
g_team = 0
g_squad = 1
g_group = 21
health = 1
dynamic_out_restrictions = 
dynamic_in_restrictions = 

upd:health = 1
upd:timestamp = 0
upd:creature_flags = 0
upd:position = -234.88432312012,-20.028535842896,-158.0202331543
upd:o_model = 0
upd:o_torso = 0.000113633497676346,0.118211999535561,0
upd:g_team = 0
upd:g_squad = 1
upd:g_group = 21

; cse_alife_monster_abstract properties

upd:next_game_vertex_id = 65535
upd:prev_game_vertex_id = 65535
upd:distance_from_point = 0
upd:distance_to_point = 0

; cse_alife_human_abstract properties
predicate5 = 0,1,2,0,0
predicate4 = 2,0,2,0

; cse_ph_skeleton properties

upd:start_dialog = 

; se_stalker properties

[922]
; cse_abstract properties
section_name = stalker
name = wind_11
position = -234.88432312012,-20.028535842896,-158.0202331543
direction = 0,0.000113633497676346,0.118211999535561

; cse_alife_trader_abstract properties
money = 5000
character_profile = wind_1

; cse_alife_object properties
game_vertex_id = 47
distance = 4.90000009536743
level_vertex_id = 20680
object_flags = 0xffffffbf
custom_data = <<END
[smart_terrains]
esc_wind_smart_terrain = true
END

; cse_visual properties
visual_name = actors\bandit\stalker_bandit_exoskeleton

; cse_alife_creature_abstract properties
g_team = 0
g_squad = 1
g_group = 21
health = 1
dynamic_out_restrictions = 
dynamic_in_restrictions = 

upd:health = 1
upd:timestamp = 0
upd:creature_flags = 0
upd:position = -234.88432312012,-20.028535842896,-158.0202331543
upd:o_model = 0
upd:o_torso = 0.000113633497676346,0.118211999535561,0
upd:g_team = 0
upd:g_squad = 1
upd:g_group = 21

; cse_alife_monster_abstract properties

upd:next_game_vertex_id = 65535
upd:prev_game_vertex_id = 65535
upd:distance_from_point = 0
upd:distance_to_point = 0

; cse_alife_human_abstract properties
predicate5 = 0,1,2,0,0
predicate4 = 2,0,2,0

; cse_ph_skeleton properties

upd:start_dialog = 

; se_stalker properties

 

 

 

[koster_wind_1_look]
points = p0
p0:name = wp00
p0:position = -234.973999023438,-19.6793632507324,-156.694946289063
p0:game_vertex_id = 47
p0:level_vertex_id = 20038

[koster_wind_1_look_task]
points = p0
p0:name = wp00
p0:position = -234.973999023438,-19.6793632507324,-156.694946289063
p0:game_vertex_id = 47
p0:level_vertex_id = 20038

[wind_oxrana_vozle_doma_1]
points = p0
p0:name = wp00
p0:position = -236.984741210938,-20.1954555511475,-151.015335083008
p0:game_vertex_id = 47
p0:level_vertex_id = 18739


[wind_oxrana_vozle_doma_1_look]
points = p0
p0:name = wp00
p0:position = -235.76075744629,-20.211112976074,-149.19891357422
p0:game_vertex_id = 47
p0:level_vertex_id = 19397

[wind_look_t_sleep]
points = p0
p0:name = wp00
p0:position = -234.973999023438,-19.6793632507324,-156.694946289063
p0:game_vertex_id = 47
p0:level_vertex_id = 20038

[koster_wind_3_look]
points = p0
p0:name = wp00
p0:position = -234.973999023438,-19.6793632507324,-156.694946289063
p0:game_vertex_id = 47
p0:level_vertex_id = 20038

[koster_wind_3_walk]
points = p0
p0:name = wp00
p0:position = -234.973999023438,-19.6793632507324,-156.694946289063
p0:game_vertex_id = 47
p0:level_vertex_id = 20038

 

 

;-- bandit1 (walker(прогуливающийся) -> состояние 0, днем)
[logic@esc_wind_smart_terrain_wind1_walker]
active = walker@esc_wind_smart_terrain_wind1

[walker@esc_wind_smart_terrain_wind1]
path_walk         = wind_oxrana_walk1
danger            = danger_condition@esc_wind_smart_terrain
;def_state_moving1 = patrol
;def_state_moving2 = patrol
;def_state_moving3 = patrol
meet              = no_meet

;-- bandit1 (kamp(лагерь) -> состояние 1, ночью)
[logic@esc_wind_smart_terrain_wind1_kamp]
active = kamp@esc_wind_smart_terrain_wind1

[kamp@esc_wind_smart_terrain_wind1]
center_point = koster_wind_1_look
path_walk    = koster_wind_1_look_task

;-- bandit2 (guard(охранник) -> состояние 0, днем)
[logic@esc_wind_smart_terrain_wind2_walker]
active = walker@esc_wind_smart_terrain_wind2

[walker@esc_wind_smart_terrain_wind2]
path_walk = wind_oxrana_vozle_doma_1
path_look = wind_oxrana_vozle_doma_1_look
danger    = danger_condition@esc_wind_smart_terrain

;-- bandit2 (sleeper(спящий) -> состояние 1, ночью)
[logic@esc_wind_smart_terrain_wind2_sleeper]
active = sleeper@esc_wind_smart_terrain_wind2

[sleeper@esc_wind_smart_terrain_wind2]
path_main = wind_look_t_sleep
wakeable  = false

;-- bandit3 (guard -> состояние 0 и 1, днем/ночью)
[logic@esc_wind_smart_terrain_wind3_walker]
active = walker@esc_wind_smart_terrain_wind3

[walker@esc_wind_smart_terrain_wind3]
path_walk = koster_wind_3_walk
path_look = koster_wind_3_look

[danger_condition@esc_wind_smart_terrain]
ignore_distance_corpse = 0
ignore_distance        = 0

 

 

function load_job(sj, gname, type, squad, groups)
--'--------------------------------------------------------------------------
--' ESCAPE
--'--------------------------------------------------------------------------
if type == "esc_wind_smart_terrain" then
    t = {
    section = "logic@esc_wind_smart_terrain_wind1_walker",
    idle = 0,
    timeout = 0,
    prior = 100,
    state = {0},
  
    online = true,
    in_rest = "",
    out_rest = ""
    }
    table.insert(sj, t)

    t = {section = "logic@esc_wind_smart_terrain_wind1_kamp",
    idle = 0, timeout = 0, prior = 100, state = {1}, online = true, in_rest = "",
    out_rest = ""}
    table.insert(sj, t)


    t = {section = "logic@esc_wind_smart_terrain_wind2_walker",
    idle = 0, prior = 5, state = {0},
    in_rest = "", out_rest = ""}
    table.insert(sj, t)


    t = {section = "logic@esc_wind_smart_terrain_wind2_sleeper",
    idle = 0, prior = 5, state = {1}, 
    in_rest = "", out_rest = ""}
    table.insert(sj, t)


    t = {section = "logic@esc_wind_smart_terrain_wind3_walker",
    idle = 0, prior = 5, state = {0, 1},
    in_rest = "", out_rest = ""}
    table.insert(sj, t)
end
................................

function load_states(gname, type)

    if type == "esc_wind_smart_terrain" then
    return function(gulag)
        if not db.actor then
            return gulag.state
        end
        if level.get_time_hours() >= 5 and level.get_time_hours() <= 22 then
                return 0  -- переключает всех мутантов/нпс на дневную работу
        else
            return 1  -- ереключает всех мутантов/нпс на ночную работу
        end
    end
end
...................................


function checkStalker(npc_community, gulag_type, npc_rank, se_obj)

if gulag_type == "esc_wind_smart_terrain" then
    return npc_community == "wind"
end

 

 

Где я тут напортачил?

 

upd: Сейчас ещё раз протестил и вообще игра вылетела вот с таким логом

Expression    : fatal error
Function      : CScriptEngine::lua_error
File          : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line          : 73
Description   : <no expression>
Arguments     : LUA error: ...итель желанийguygu\gamedata\scripts\state_mgr.script:193: C stack overflow

 

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

Подскажите имена файлов-конфигов для жарки и трамплина. Ну очень буду обязан....

НЛС-6: У каждого своя зона

_______________________________________________________________

Не ищи легких путей и не возвращайся той же дорогой

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

lekzd, вот кароче:

function test()
if onif == 1 then
   local ber = level.get_time_hours()
   local der = level.get_time_minutes()

if ber == 0 and der == 0 and level.get_weather("default") and flag then
    local sactor = alife():actor() 
    local cactor = level.object_by_id(sactor.id) 
    cactor:give_game_news(
        "%c[255,255,1,1]DiVares\\n%c[255,1,255,1]Время: 00:00:00",   
        "ui\\ui_iconstotal",        
        Frect():set(1079,799,83,47),  
        math.random(1000, 3000),     
        50000                         
        )
flag = false
end

И вот вобщем, функция даёт цикл, тоесть колбасит эти сообщения целую минуту, что очень много, надо только раз.

Шас тут подумаю ещё, сделал по совету флаг, но функция выдаётся и всё, флаг ставится на false.

Изменено пользователем TREWKO
Ссылка на комментарий
local trigger = 0
function test()
  local time_h = level.get_time_hours()
  local time_m = level.get_time_minutes()
  if (time_m == 0) and (time_h == 0) and level.get_weather("default") then
    if trigger == 0 then
      local sactor = alife():actor()
      local cactor = level.object_by_id(sactor.id)
      cactor:give_game_news("%c[255,255,1,1]DiVares\\n%c[255,1,255,1]Время: 00:00:00",  "ui\\ui_iconstotal", Frect():set(1079,799,83,47),  
        math.random(1000, 3000), 50000)
      trigger = 1
    end
  else 
    if time_m ~= 0 then trigger = 0 end
  end
end

Изменено пользователем Gonarh
118 101 110 105 44 32 118 105 100 105 44 32 118 105 99 105
Ссылка на комментарий

Gonarh, спасибо!

Но уже сам сделал, создал 24 флага, и отключение оного, включение предыдущего.

Но всё равно, будем ваш юзать)

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

Создаю новую шкалу. Столкнулся с такой проблемой, что не установить что длину, что ширину самой полоски - ругается, что SetWidth() или SetHeight() принимают нулевое значение. Вот код:

local main_hud = get_hud()
function my_hud()
if main_hud:GetCustomStatic("hud_wpn") == nil or main_hud:GetCustomStatic("p_hud_wpn") == nil then
	main_hud:AddCustomStatic("hud_wpn", true)
	main_hud:AddCustomStatic("p_hud_wpn", true)	
end
local hud = main_hud:GetCustomStatic("p_hud_wpn")
if hud then
	hud:SetWidth(100)
	hud:SetHeight(10)
end
end

 

Сам конфиг шкалы из ui_custom_msgs.xml выглядит так:

	<hud_wpn x="860" y="508" width="155" height="34">
	<texture>ui_hud_shkala_health</texture>
</hud_wpn>

<p_hud_wpn x="33" y="5" width="110" height="10" horz="1" min="0" max="100" pos="0">
	<progress>
		<texture>ui_hud_shk_health</texture>
	</progress>
</p_hud_wpn>

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

Darien,

hud:wnd():SetWidth(100)

 

Я бы функцию примерно так написал.

function my_hud()
        local hud1 = main_hud:GetCustomStatic("hud_wpn") or main_hud:AddCustomStatic("hud_wpn", true)
        local hud = main_hud:GetCustomStatic("p_hud_wpn") or main_hud:AddCustomStatic("p_hud_wpn", true)    
        hud:wnd():SetWidth(100)
        hud:wnd():SetHeight(10)
end

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Ссылка на комментарий
второй части уже тама нету, но у меня на компе где-то валяется. если надо - кину куда-нить

 

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

Да и много кому, кроме меня, я думаю, пригодится.

Мои работы:

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

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

Soul Cube

 

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

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

Gonarh, Хе-хе...наткнулся он...это не ты наткнулся,это я тебя наткнул :D

 

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

И еще: кто знает,какой цыет ставить трассерам,чтобы они нормальные были?Не зеленые,не красные,не серобуромалиновые?

Белый - почти подходит,но надо скорее слегка оранжевый...ну как партикл выстрела.

Короче нужен "натуральный" цвет.

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

Подскажите новичку как добавить в allspawn своего нпс через xrspawner

Если ты знаешь, что сможешь чего-то добиться, то ты прав. Нет границ для самосовершенства.

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

n6260,я в этом плохо понимаю.как перевести RGB[0..255] в сталкеровское RGB[0..1]

Вот например цвет 255,228,181 .

Сообщение от модератора n6260
А ты пробывал из таблицы значения в игру вставлять? ;)
Ссылка на комментарий

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

×
×
  • Создать...