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

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


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

Подскажите кто нибудь, возможно ли сделать кнопу такую же как "Торговать" в диалоге рядом с ней и назначить на эту кнопку скрипт?

Если можно, подскажите как.

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

Из "Справочника по ф-циям и классам":

int rank() -- получить ранг сталкера
int character_rank();

 

С первым методом понятно, а что тогда второй возвращает ? Или он для установки\изменения ?

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

@UnLoaded, rank() это только для сталкеров, а character_rank() это тоже самое, но работает и для монстров.

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

@Charsi

Сделал такую проверку для актера(ГГ): на входе на Свалку, сценка с Юриком. Перед началом сценки: rank = 0 и character_rank = 0. После удачного отстрела бандюков: rank = 0 и character_rank = 3. А это как понимать ? Что из этого тогда является рангом актера(ГГ)\НПСа ?

 

Еще, в файле ranks.script в ф-ции get_obj_rank_name(obj) нашел такой момент:

-- HACK
if obj.m_story_id ~= nil then
     obj_rank = obj:rank()
else
     obj_rank = obj:character_rank()
end

типа, если есть SID, то читаем rank(), а если нет - то character_rank(). Это то-же нифига не понял.

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

Онлайновые и офлайновые.

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

obj.m_story_id есть только у серверного объекта.

У game - :story_id()

 

Соотвественно, rank() и character_rank()

 

Ну lua_help.script же - он для кого лежит ?

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

Всё никак не могу добиться результата.
В общем, повторяю: хочу сделать, что бы при взятии флешки у ГГ в КПК появлялась инфа в разделе Дневник. Инфопоршни и артиклы я забил, но, походу, не читается скрипт, отвечающий за выдачу поршня при взятии флешки.
Вот скрипт:

function proceed()
local actor=db.actor
if actor:object("borov_flash") and not has_alife_info("borov_flash_found") then
actor:give_info_portion("borov_flash_found")
**(тут я ещё хотел написать return true, но нужно ли?)**
end
end

Это уже 3-ий вариант скрипта. У меня есть предположение, что скрипт не срабатывает из-за того, что флешку мне выдаёт Волк (в качестве теста конечно).
Помогите, пожалуйста. Скрипт делал по подобию таких же ситуаций, как, например, флешка Стрелка или Круглова.

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

 

 

но, походу, не читается скрипт, отвечающий за выдачу поршня при взятии флешки.

Ну так ты и должен обеспечить, чтоб он читался(хотя правильнее, наверное - выполнялся).

В файле bind_stalker.script(лежит в gamedata\scripts) найди ф-цию:

function actor_binder:on_item_take (obj)
    level_tasks.proceed(self.object)
    --game_stats.update_take_item (obj, self.object)
end
Внутри нее добавь вызов своей ф-ции, как-то так:
function actor_binder:on_item_take (obj)
    level_tasks.proceed(self.object)
    --game_stats.update_take_item (obj, self.object)

    имя_файла_в_котором_твоя_ф-ция.proceed(obj)
end
Ф-цию свою немного измени, примерно так:
function proceed(obj)
     if obj:section() == "borov_flash" and not has_alife_info("borov_flash_found") then
          db.actor:give_info_portion("borov_flash_found")
     end
end
Не забудь, что "borov_flash" должно быть именем секции твоей флешки в конфиг-файле(в items.ltx или в quest_items.ltx).
Ссылка на комментарий

@UnLoaded, так, ну допустим. Имя секции правильное, скрипты поправлю.
Но вопрос всё равно остаётся: почему МОЙ скрипт не выполняется? Почему другие такие же работают, а мой нет?

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

 

 

Но вопрос всё равно остаётся: почему МОЙ скрипт не выполняется?

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

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

Да не беда, покажу. Я перечислю названия файлов + приведу куски, которые я в них вставил.
dialogs_darkvalley.script:

function proceed()
local actor=db.actor
if actor:object("borov_flash") and not has_alife_info("borov_flash_found") then
actor:give_info_portion("borov_flash_found")
end
end

До этого была такая попытка:

function borov_flash_found
if db.actor:object("borov_flash") and not has_alife_info("borov_flash_found") then
db.actor:give_info_portion("borov_flash_found")
end
end

info_l05dark_valley.xml:

<info_portion id="borov_flash_found">
<article>borov_flash_found</article>
</info_portion>

storyline_info_darkvalley.xml:

<article id="borov_flash_found" name="Borov_flash" group="Found_PDA" article_type="journal">
<text>borov_flash</text>
</article>

На всякий пожарный выложу сам предмет.
quest_items.ltx:

[borov_flash]:identity_immunities
GroupControlSection=spawn_group
$spawn="devices\quest_items\borov_flash"
;$prefetch=32
class=II_ATTCH
cform=skeleton
visual=equipments\item_flash_2.ogf
radius=1
;script_binding=stalker.object_init
quest_item=true
description=borov_flash_desc
inv_name=borov_flash_name
inv_name_short=borov_flash_name
inv_weight=.05
inv_grid_width=1
inv_grid_height=1
inv_grid_x=11
inv_grid_y=28
cost=1000

Плюс ко всему файлы типа stable_**, но они, я думаю, без надобности.

 

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

@Vadyanchikus

И шо ? А где-же сам вызов этих самых proceed() или borov_flash_found() ? Как игра(движок) должны узнать, что при появлении этой самой флэшки в инвентаре актера(ГГ) надо вызвать Вашу ф-цию ? Добавляй все, что я писал касаемо bind_stalker.script, и будет тебе счастье ;) .

 

P.S.

имя_файла_в_котором_твоя_ф-ция.proceed(obj) замени на dialogs_darkvalley.proceed(obj)

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

Хорошо, у меня нет выбора :) 
НО! Почему другие такие функции не требуют вызова? Почему они и так работают? Не понимаю!!!! :D  :angry:

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

@Vadyanchikus, потому что те файлы вызываются, если ты впишешь в proceed()  darkvalley_tasks. то должно все пройти гладко, система терминально идиотская, советую всем ее переписать, и поделится, ибо мне самому лень  :D. Я у себя только от явного ахтунга избавился.

 

@UnLoaded, он имеет ввиду систему поддержки тасков оригинала, с ней работают немногие, но пусть будут они прокляты.

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

Нет, например, agroprom_tasks.script:

function proceed()
    local actor = db.actor
if actor:object("agr_nii_security_shedule_file") then
actor:give_info_portion("agr_nii_security_shedule_file_have")
-- gunslinger's flash
    elseif actor:object("gunslinger_flash") then 
        actor:give_info_portion("agr_find_ghost_start")
        return true
end
end

Это функция на получение инфы из флешки Стрелка.
Или bar_rostok.script:

function proceed()
    local actor = db.actor
-- Bar Rostok
-- выдача информации с флешки профессора
if not has_alife_info("bar_ecolog_research_normal") and
  not has_alife_info("bar_ecolog_research_corrupted") and
  actor:object("bar_ecolog_flash") 
then
if has_alife_info("bar_rescue_research_corruped") then
actor:give_info_portion("bar_ecolog_research_corrupted")
else
actor:give_info_portion("bar_ecolog_research_normal")
end
end
end

Они-то работают.

Ссылка на комментарий
Нет, например, agroprom_tasks.script:

Ах вон ты о чем... Ну смотри:

сначала в bind_stalker.script:

function actor_binder:on_item_take(obj)
     level_tasks.proceed(self.object)
end

затем в level_tasks.script:

for k, v in pairs(level_scripts) do
     v.proceed() -- здесь в одной из "v" будет скрипт agroprom_tasks.script
end

и затем в agroprom_tasks.script:

function proceed()
     -- и все что в ней, уже описанное выше
end

А ты говоришь "не требуют вызова". Просто ты не знал, где они происходят, эти вызовы.

Изменено пользователем UnLoaded
  • Спасибо 1
Ссылка на комментарий

 

 

Ах вон ты о чем...

 

 

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

 

Таки да.

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

А-а-а-а... Блин, мне ещё во многом стоит разобраться. Прям спасибо!!! Я понял, в чём была проблема: я пихал скрипт в файлы типа **локация**_dialog, а надо было в **локация**_tasks. Короче, всё заработало.

Но парочка вопросов в догонку, если ты не против:
1) я заметил одну проблему с Сидоровичем: если при первой его фразе сразу отвернуться, то мы будем слышать его монолог, а когда он закончит и повернуться обратно, то увидим, что он продолжает проигрывать свою анимацию. Короче говоря, если отвернуться от Сидора, то он продолжит базарить, но не будет отыгрывать анимацию, т. е. анимацию он отыгрывает только тогда, когда мы на него смотрим. При этом, пока он не отыграет анимацию, мы с ним не сможем заговорить. Как это исправить?
2) если быстро выйти (выбежать) из бункера Сидора и он вдогонку что-то скажет типа "удачной охоты", то мы услышим его голос даже на улице и так, будто он стоит перед нами. Как это исправить?

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

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

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

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

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

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

Войти

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

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

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