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

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

Тема для обсуждения скриптов всего и всех в серии игр STALKER.


Задавая вопрос (!):
1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего;
2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме);
3. Изучите информацию которая может вам помочь:

 
 

Stalkerin. Там есть много хороших статей касательно данной темы.
Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения.

 

Справочное руководство по языку Lua 5.1
https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ru
Справочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены.

4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос;
5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе;
6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода;
7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины.
8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ.
9. И помните: «Правильно заданный вопрос – половина ответа».

 

Какие вопросы следует задавать, а какие нет...

 

Задавайте вопросы, которые касаются непосредственно скриптов и их работы, т.е. Вы что-то делаете, а у Вас что-то не получается, при этом у Вас на руках должен быть хотя бы какой-то код, свидетельствующий о Вашей причастности к вопросу.

 

Вопросы которые будут удалятся, следовательно их задавать не нужно:
-- Где находится та или иная функция?
Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;
-- Как сделать что-то/то-то?
С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;
-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.
-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.
Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов?
В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос.

И последнее: очень рекомендовано к прочтению Правила форума
 


  • Спасибо 1
  • Полезно 2
Ссылка на комментарий

Мм..

в xr_motivator.script (death_callback) добавил:

alife():release(alife():object(victim:id()), true)

и вылетел с

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: ...\s.t.a.l.k.e.r\gamedata\scripts\smart_terrain.script:1137: attempt to index local 'obj' (a nil value)

 

 

Поправил smart_terrain.script:

local obj = sim:object(npc.id)

local strn_id = obj:smart_terrain_id()

 

if strn_id ~= 65535 then

sim:object( strn_id ).gulag:clear_dead(obj_id)

end

 

local obj = sim:object( obj_id )

if obj ~= nil then

local strn_id = obj:smart_terrain_id()

 

if strn_id ~= 65535 then

sim:object( strn_id ).gulag:clear_dead(obj_id)

end

else

return

end

 

 

 

Но вылетел с

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: ...\s.t.a.l.k.e.r\gamedata\scripts\death_manager.script:116: attempt to index local 'se_obj' (a nil value)

 

Собсно,что делать? :mellow:

 

Министр

Ок,спасибо.

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

Влад, не удаляй труп сталкера сразу после его смерти, остальные схемы (в частности death_manager) не успевают сделать свои дела, ибо объекта уже нет и везде передается nil (можно было и по логу догадаться в чем косяк).

 

P.S. Юзай таймеры или флаги.

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

меченый(стрелок)

не угадал :P не для гитары...=)

найти эту схему... вот в этом проблема=)

в папке со скриптами скриптов много, а который из них тот самый? С реакциями НПСов?=)

SkyLoader

 

СПАСибо =)

как всегда про файл знал, а вот заглянуть в него не заглянул=)

Изменено пользователем ФеНиКс
87728-stalker.gif
Ссылка на комментарий

ФеНиКс, у меня , как уже не раз писал, нету ни сталкера(ни в каком виде) ни модов.Исходя из этого я не могу сказать что там делать, я лишь направил на "путь истинный" ;).

А вообще ,посмотри на саму главную функцию в скрипте, binder по моему(ну или что-то связанно с bind ;)).

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

Вот смотрите, есть функция:

local stope = false
function testych()
    local npc = level.object_by_id(id)
    local PosActor = db.actor:position()
     if npc and IsStalker(npc) and npc:alive() and npc.health > 0.1 then
         if npc:position():distance_to(PosActor) < 4 then 
             if not stope then 
                 news_manager.send_tip(db.actor, "Эй, чоё встал!?.", 0, "stalker", 7000) 
              stope = true 
                end 
             else 
          stope = false 
        end
    end
end

 

Тоесть, если расстояние НПС'а до ГГ меньше 4 метров, то должно сработать действие.Это действие срабатывает, но только при загрузке игры, а правильно функция работать не хочет(ни чего не происходит, если к НПС подойти) ...Не подскажете, где я мог допустить ошибку?

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

Я так понял что функция у тебя работает только один раз а потом не работает? Если да то вот готовый вариант:

local stope = false
function testych()
    local npc = level.object_by_id(id)
    local PosActor = db.actor:position()
     if npc and IsStalker(npc) and npc:alive() and npc.health > 0.1 then
         if npc:position():distance_to(PosActor) < 4 then
             if not stope then
                 news_manager.send_tip(db.actor, "Эй, чоё встал!?.", 0, "stalker", 7000)
              stope = true
                end
             else
          stope = false
               if npc:position():distance_to(PosActor) > 4 and stope then
        stope = false
            end
        end
    end
end

Неуверен что работает но думаю что ты понял фишку

Изменено пользователем _Призрак_

Freedom

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

_Призрак_

Функция работает один раз, но только тогда, когда игра только загрузилась, то есть идет Кlиент:Синхроризация, и как только игра загрузилась - сразу действие срабатывает.А если к неписям подходить, то ни чоё не происходит.

На счет твоего кода:Зачем второй раз восстанавливать флаг?Ведь у меня в функции уже это есть:

local stope = false
local npc = level.object_by_id(id)
function testych()
    local PosActor = db.actor:position()
     if npc and IsStalker(npc) and npc:alive() and npc.health > 0.1 then
         if npc:position():distance_to(PosActor) < 4 then 
             if not stope then 
                 news_manager.send_tip(db.actor, "Эй, чоё встал!?.", 0, "stalker", 7000) 
              stope = true --флаг-триггер(чтоб действие выполнилось только 1 раз)
                end 
             else 
          stope = false --восстановления флага, чтоб при каждом подходе к НПС срабатывало действие
        end
    end
end

 

 

Ни кто не знает, в чем проблема? :unsure:

 

max_max_08

Функцию ставлю на апдейт в actor_binder:update(delta).А вот почему функция срабатывает при запуске - не пойму, очень странно :blink:

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

Смотря для какой игры. Если для ЗП, то там iо функции форэва. А если к ТЧ, то только заменой секции итема на такой же, но с другим описанием.

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

gamedatavec,

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

кровоSTALKER,

Т.е. предлагаешь изменять описание сразу всем "стволам" данного типа?

Изменено пользователем меченый(стрелок)
Ссылка на комментарий
Stalk15, вот я вижу строчку local npc = level.object_by_id(id). Хорошо. А вот откуда берется сам id мне не ясно. Вот это плохо. Изменено пользователем Министр
Ссылка на комментарий

кровоSTALKER а можешь по подробнее про тот способ который ты предложил геймдатовцу?

Я пробовал удалять и тут же спавнить через скрипт прямо во время игры (скрипт работает при определенных условия через биндер) но эт не выход ведь если играть с снимаемым прицелом то он не спавнить на калаше к примеру!

 

Тогда по другому вопрос поставлю если на этот нет ответа:

как заспавнить к примеру калаш с надетым но снимаемым прицелом через скрипт в руках или в инвентарь к ГГ?

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

Byurrer

А что не понятного?Если надо заменить описание итема, например, ак-74, просто удали его и сразу же заспавни такой же, но с другим своим описанием, зарание создав второй ак-74 с новым описанием. ;)

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

Stalk15 нет нет с этим мне все понятно, пробовал получилось (спасибо что откликнулся) я не знаю как заспавнитьь ак с снимаемым но одетым прцелом, вот что меня интересует!!!

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

Народ!Кто может подробно расписать примеры работы с нет-пакетами стволов/НПЦ ? С меня +,и другим тоже пригодилось бы..

 

malandrinus

Спасибо,гляну.

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

Влад,

В acdc есть вся нужная информация. Достаточно иметь нескомпилированную версию acdc (сырец на Perl-е), знать серверный класс объекта и иметь любой рабочий пример с нетпакетами (например создание аномалии или вертолёта от Бардака).

 

 

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

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

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

 

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

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

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

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

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

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

Войти

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

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

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