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

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


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

malandrinus, перешли на использование такого:

function game_milliseconds()
    if StartTime == nil then
        getStartTime()
        if StartTime == nil then
            return 0
        end
    end
    local gtime = game.get_game_time()
    local seconds = gtime:diffSec(StartTime)
    local y,m,d,h,min,sec,ms = gtime:get()
    return (seconds * 1000 + ms)
end

function game_seconds()
    if StartTime == nil then
        getStartTime()
        if StartTime == nil then
            return 0
        end
    end
    return game.get_game_time():diffSec(StartTime)
end

function game_minutes()
    return math_floor(game_seconds() / 60)
end

function game_hours()
    return math_floor(game_seconds() / 3600)
end

function game_days()
    return math_floor(game_seconds() / 86400)
end

 

Косяки могут остаться только если где-то этот переход не сделали или время сохраняется ещё по-старому. Например в xr_gulag.script. Всё руки никак не дойдут переделать сохранение/чтение там...

 

malandrinus, сообщение Kolmogor-а (в его тему отправил кто-то из забредших в тему Солянки) ну и тот факт, что в CTime используется 64-разрядный счетчик.

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

sapsan,

Вот есть встроенный в игру счётчик. Когда он докручивается до конца, то время устанавливается в стартовое. Дата отматывается назад и функция game.get_game_time() будет давать это обнулённое значение. Я это проверял. Так каким образом помогают эти новые функции, если системное время игры (которое в них используется) глючит? Прошёл месяц игрового времени и всё.

Что я не понимаю?

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

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

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

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

 

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

Раз уж дело каснулось скриптов, то у меня такой вопрос: а где происходит апдейт актора на потерю жизни?

 

// Ф-ия actor_binder:update, файл bind_stalker.script. Ищи там. Министр.

 

А вот и не нашел я там ничего. :mellow:

function actor_binder:update(delta)

object_binder.update(self, delta)

 

-- DEBUG slowdown

-- slowdown.update()

 

local time = time_global()

 

game_stats.update (delta, self.object)

 

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

self.weather_manager:update()

 

-- апдейт схемы детектора

self.actor_detector:update()

 

-- апдейт звуковой схемы актера

xr_sound.update_actor()

 

--' Проверка потери жизни

--[[

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

 

-- обновление рестрикторов, которые под логикой, срабатывает через интервалы времени

if self.next_restrictors_update_time < time then

bind_restrictor.actor_update(delta)

 

self.next_restrictors_update_time = time + 200

 

task_manager.actor_update()

end

 

-- обновление постпроцессов

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

 

--' Вывод сообщения о большой радиации

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

 

 

 

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

end

Как видно они просто закоментированны. Может есть еще где? Ищу для чистой 1.004.

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

Здравствуйте!

 

Есть вопрос по звукам:

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

 

И еще вопрос: например мне нужно добавить вид бандитов новичков с другим оружием. В character_desc_simulation есть три вида бандитов новичков: "sim_bandit_novice_default1" "sim_bandit_novice_default2" и "sim_bandit_novice_default3".

Если я добавлю новый вид "sim_bandit_novice_default4", то будет ли он использоваться игрой?

 

 

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

"Зло перестало быть слепой хаотичной силой. Сегодня Зло действует по праву закона - ибо у него теперь есть права. Оно действует в соответствии с заключенными мирными договорами, ибо о Зле подумали, заключая эти договоры. Геральт из Ривии, ведьмак."

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

MgVolkolak, со звуками - да. Просто добавь со следующим номером в папку characters_voice\human_?. Хотя там 3 папки human_01, _02 и _03 соответственно. Я добавлял в каждую, для нужной группировки.

На счет нового вида. Если пропишешь в спавн новому НПС свой профиль, тогда да, а так, сама игра твой новый профиль выбирать не будет.

О! Пардон! Проглядел, что ты панисал character_desc_simulation. Посмотри вот эту статью: Wiki.

Изменено пользователем Куфзук
Ссылка на комментарий
Куфзук, я так и не понял что тебе надо. Единственная проверка на потерю жизни ГГ в ориг. игре как раз та которую ты выделил в своем посте, другой насколько я знаю нет.
Ссылка на комментарий

А она работает??? :shok: Она ведь закоментирована. Или

--[[ Coment ]]--

это не коментарии?

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

Такая проблемка. Ни как не могу выдать в сообщении число из таблицы.

local tbl = {}

tbl[1] = cost

function send_msg()

local text = "Стоимость"..tbl[1]"руб." --вот здесь не пойму как вписать цену

db.actor:give_game_news(text, "ui\\ui_iconsTotal",Frect():set(332,376,83,47),0,10000)

end

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

Локальная cost это сумма нескольких локальных

local cost1 = 100

local cost2 = 200

local cost3 = 300

cost=cost1+cost2+cost3

Может и можно обойтись и без таблицы, я не знаю. А локальная переменная будет хранить свое значение после сэйв/лоад? Может его сразу вписать в месадж, без занесения в таблицу

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

Если переменная 'соst' определена до этого, то :

 

local tbl = {}

tbl[1] = tostring(cost) -- в принципе Luа прекрасно сама преобразовывает числа в строки и наоборот, но от греха подальше пусть лучше будет через tostring

function send_msg()

local text = "Стоимость "..tbl[1].." руб."

 

-- и т.д...

end

 

 

Только зачем таблицу нужно создавать??? Тебе, я думаю, виднее.

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

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

 

P.S. Объясни, что тебе от этой проверки надо.

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

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

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

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

hypercatt, что конкретно тебе нужно!? Спавн мертвого НПС или оживить мертвого НПС?

Про оживление НПС, вот ссылка: Артефакт для воскрешения мертвого НПС , надеюсь разберешься.

А если тебе нужен спавнить мертвого, то в шапке темы есть ссылка на шпаргалку от n6260, там есть. И не только это, очень много полезностей!

 

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

hypercatt, вот что мне дал Google:

Цитата от banderos, втеме "Скриптование и спаун":

function spawn_trup_npc()
local obj = alife():create("здесь профиль твоего нпс",vector():set(-45.41, 19.18, 5.84), 2340, 1530)
local tbl = amk.read_stalker_params(obj)
tbl.custom="[known_info]\nможно вставить инфопоршен" -- эту строку можно убрать. Она для выдачи инфопоршена при обыске трупа.
tbl.sid = 481543 -- id
tbl.health = 0
tbl.updhealth = 0
amk.write_stalker_params(tbl, obj)
end

Если делаешь через all.spawn, то еще проще, просто пропиши health = 0.
Ссылка на комментарий

hypercatt

Ты лучше диалоги этого НПС пропиши кому нибудь. Допустим бармену:

Поиском находишь твоего НПС. Поищи по имени в конфигс/геймплай_характер_****

Там ты увидишь его секцию. Что то типа такого:

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

<name>Командир</name>

<icon>ui_inGame2_Sich</icon>

<map_icon x="1" y="0">

</map_icon>

<bio>Опытный сталкер. Детальная информация отсутствует.</bio>

<class>start_game_killer</class>

<community>stalker</community>

<terrain_sect>stalker_terrain</terrain_sect>

<snd_config>characters_voice\human_02\stalker\</snd_config>

<rank>880</rank>

<reputation>0</reputation>

<money min="480000" max="480000" infinitive="1" />

<visual>actors\stalker_bandit\stalker_bandit_3_face_1</visual>

 

<supplies>

[spawn] \n

wpn_ak74 \n

ammo_5.45x39_fmj = 1 \n

wpn_beretta \n

ammo_9x19_fmj = 1 \n

grenade_rgd5 = 1 \n

 

#include "gameplay\character_items.xml"

#include "gameplay\character_food.xml"

#include "gameplay\character_drugs.xml"

</supplies>

#include "gameplay\character_criticals_4.xml"

<actor_dialog>test</actor_dialog>

<actor_dialog>start_game_killer_dialog</actor_dialog>

<actor_dialog>actor_break_dialog</actor_dialog>

 

</specific_character>

 

Оттуда копируй строки где есть <actor_dialog>*******</actor_dialog>

Потом открываешь character_desc_bar и найди секцию бармена (поищи по слову barman)

У него находишь где написано <actor_dialog>*******</actor_dialog>

и вставляешь туда диалоги твоего помершего НПС

Freedom

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

Здравствуйте.

Интересует проблема Leviathan на 266 странице http://www.amk-team.ru/forum/index.php?s=&...post&p=5128.

У самого стоит АМК с патчами + nlc 5.08 + графические моды +адаптация под 1.0006 + мои правки.

Правил all.spawn, убирал халяву в виде патронов, артефактов и т.п. в контейнерах. Не люблю, когда проходишь игру в N-й раз и знаешь, что есть патроны или аптечки в определённом месте. После правок компилировал новый all.spawn утилитой acdc. В результате все секции в файле были перенумерованы. Из-за этого не появляются переходы. Стоит заменить all.spawn на nlc-й и загрузить сохранение перед сдачей документов их Х18 бармену, то переход на росток появляется. С переносом спауна переходов из all.spawn, как написано в WiKi не справлюсь, не силён я в этом.

 

Как всё-таки скомпилировать all.spawn, чтобы не менялась нумерация секций? Пробовал разные версии acdc, во всех нумерация меняется.

 

И ещё вопрос, как убрать спавн артефакта, например, батарейки у перехода со свалки в ТД. Секцию нашёл, а что делать?

Изменено пользователем Рудь
Ссылка на комментарий
Рудь, ну вопервых: при компиляции нового all.spawn, нужно начинать новую игру. Вовторых: при удалении или добавлении новой секции в all.spawn, нумерация хочешь не хочешь поменяется, это делае сам acdc и на сколько мне известно, сдвиг нумирации в ту или иную сторону, не на что не влияет. В третьих: чтобы убрать батарейку, просто убери ее секцию.
Ссылка на комментарий

Куфзук, с новой игрой понятно, начинал заново. Только почитав пост Leviathan и проверив на деле, убедился, что дело в перенумерации секций. Да и потом в процессе игры, можно запросто менять all.spawn, естественно, только чтобы скрипт спаунинга перехода сработал, в остальных случаях - новая игра. За подсказку с удалением секции -спасибо, что-то я сам не догадался.

 

Вот такой вопрос, в каком скрипте прописаны номера секций спаунинга перехода связанные с секциями all.spawn? Попробую заменить их в соответствии с нумерацией all.spawn. Это как один вариант.

 

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

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

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

 

Попробовал ещё раз заново начать игру, поставил неуязвимость ГГ, добежал до Агропрома, взял документы по переходу с Агропрома на Кордон со 2-го этажа здания, где вояки сидят. В результате переход не открылся. Т.е. в момент, когда берёшь документ, по идее, выполняется скрипт, этот скрипт ссылается на координаты перехода из соответствующей секции all.spawn. Это верно или я заблуждаюсь?

 

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

Куфзук, к сожалению, на подфоруме NLC убрали все ветки про 5-ю версию, остались только ссылки. А Сяк сюда редко заходит.

Попробую всё-таки покавыряться с acdc, там секция с названием use constant levels_info.

 

 

Всё, разобрался. Перенумерация секций в all.spawn неизбежна, посему нужно править скрипт sak.script, в самом начале файла. Пример:

 

add_new_lc(9100,1462,"На Кордон","info_way100a")

 

правим на add_new_lc(9100,хххх,"На Кордон","info_way100a")

 

Здесь хххх - новый номер секции в скомпилированном all.spawn.

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

Рудь, да, в NLC спаун идет по номеру секции в all.spawn.

 

P.S. И да, пожалуйста, если вы не знаете правильного ответа, то лучше не отвечайте, людям только тяжелей от таких советов приходится.

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

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

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

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

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

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

Войти

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

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

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