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

[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
Ссылка на комментарий

Создаю новую шкалу. Столкнулся с такой проблемой, что не установить что длину, что ширину самой полоски - ругается, что 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
А ты пробывал из таблицы значения в игру вставлять? ;)
Ссылка на комментарий

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

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

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

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

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

Войти

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

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

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