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

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


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

Garry_Galler

Любой НПС должен бить в морду--

  level.add_cam_effector("camera_effects\\fusker.anm", 999, false, "")

-- это просто эффект от удара а самого удара не происходит

И так же мне не ясно как сделать проверку: Если ГГ использовал предмет, то...

И сделать это цикличным, т.е. предмет может использоваться многократно. (допустим нож)

если ты(ГГ) махнул ножом(т.е. использовал) и ты(гг) стои(т)шь на расстоянии удара, то НПС ударит в морду ГГ.

87728-stalker.gif
Ссылка на комментарий

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

Сообщение от модератора n6260
А что мешает в распакованной геймдате просмотреть все модели по-очереди и найти искомое? Просто интересно...

Строгое предупреждение от модератора n6260
З.Ы. Безграмотность царит ;) минимум три ошибки :)

Замедляю полураспад души стержнями музыки

Ссылка на комментарий
Ирбис, box_wood_01.ogf и box_metall_01_prt1.ogf+box_metall_01_prt2.ogf. Глянь здесь gamedata\meshes\dynamics\box\ программами ogf viewer или milkshape. Изменено пользователем dimos
Цензура ограничивает творчество © by me
Ссылка на комментарий

ФеНиКс

ну дак я же говорю - удар это анимация камеры плюс АНИМАЦИЯ NPC (punch называется).

Вот тебе и нужно как то это все в одном скрипте объединить - чтобы и анимация камеры сработала и анимация NPC.

если ты(ГГ) махнул ножом(т.е. использовал) и ты(гг) стои(т)шь на расстоянии удара, то НПС ударит в морду ГГ

Вот ты чего захотел. А отследить использования ножа ГГ сможешь? Это первое что надо сделать.

далее скриптом (если это возможно - сам не делал) вызвать у ближайшего к ГГ NPC (расстояние удара - перебор всех онлайн NPC и проверка расстояния от ГГ до всех онлайн NPC ) анимацию удара (ну и анимацию камеры включить и все прочие эффекты).

 

Так что не все так просто. Как это сделать по другому - не влезая в АИ схемы NPC - не знаю.

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

Вот что у меня вышло,

 

function za_fak_v_mordu()
--local actor = db.actor
--local ipos = actor:position()
for i,v in pairs(db.storage) do
local obj = level.object_by_id(i)
if obj and IsStalker(obj) and obj:alive() and obj.health > 0.1 then --and
if obj:position():distance_to(db.actor:position()) < 2 then
  local item = db.actor:active_item()
  if not (item and item:section() == "wpn_fuck") then
     -- set_inactivate_input_time(30)
      local snd_obj = xr_sound.get_safe_sound_object([[affects\hit_fist]])
      snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
      level.add_cam_effector("camera_effects\\fusker.anm", 1999, false, "")
      level.add_pp_effector("fire_hit.ppe", 1974, false)
    end
  end
end
end
end

 

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

Как исправить это?

и как отследить использование ножа?

87728-stalker.gif
Ссылка на комментарий

ФеНиКс

не понял эту строчку - if not (item and item:section() == "wpn_fuck") then

 

если тебе нужно узнать та ли вещь у ГГ в руках тогда нужно

if (item and item:section() == "wpn_fuck") then - а иначе получается обратное.

 

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

Ну дальше - все просто: проверяешь на апдейте сколько патронов в магазине ножа и если меньше чем размер магазина - значит ГГ "замахнулся" ножом.

только патрон нужно вернуть обратно в магазин - скриптом. Примеры смотри в гравипушках :-)

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

Garry_Galler

Ой точно...я просто скопипастил, а not не убрал =)

Если честно, то нож-то мне и не нужен просто вещь на классе болта сделана...

и надо как-то отследить её применение.

И остаётся загадкой как анимацию проиграть...=(

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

Как можно НПС'у поменять его группировку.Вот например, поговорил с Волком, вызвал функцию и Волк стал Бандитом.Можно так сделать?

 

 

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

Ребят токая проблемка у меня: поставил 6 патч, после этого шрифт стал маленьким, очень неприятно глазу, на 4 патче все было ОК, формат монитора 16:10 дак вот кто знает как увеличить размер шрифта, где ковырять!?

Хост с картинкой сдох. dc

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

Stalk15

 

function name()
local npc = level_object_by_sid(айди)
npc:set_character_community("имя группировки", 0, 0)
end

 

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

 

function name(actor, npc)
npc:set_character_community("имя группировки", 0, 0)
end

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

ФеНиКс

Спасибо.

 

А не подскажите еще кто-нибудь функцию, которая удалила бы, например, Волка?

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

http://www.amk-team.ru/forum/index.php?s=&...st&p=371141

почитай. А скрипт такой:

function name_function()

local se_obj = alife():object("сюда_пишем_что_удалять_будем")

if se_obj then

alife():release(se_obj, true)

end

end

 

ПРИМЕР

--' убираем финального Клыка

function dell_kluk_final()

local se_obj = alife():object("final_kluk")

if se_obj then

alife():release(se_obj, true)

end

end

 

или можно совсем просто:

function dell_kluk_final()

alife():release("сюда_пишем_что_удалять_будем", true)

end

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

Freedom

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

Garry_Galler,

конечно еще остается вариант с запоминанием текущего состояния кнопок ....Что я и попробую сделать.

 

Я думаю, что так и придётся сделать. С восстановлением состояния кнопок не должно возникнуть никаких проблем. У меня нормально задавалось начальное состояние кнопок: видимость, включённость и пр.

 

Немного общей информации в тему. Покопавшись немного я обнаружил интересный факт. Начало новой игры отнюдь не всегда означает, что все объекты будут созданы заново. Вот например то-же окно инвентаря (и вероятно все остальные стандартные окна) остаётся тем-же самым объектом вплоть до выхода из программы. Это означает в частности, что если вы поместили на это окно свою кнопку, то эта кнопка там останется даже после загрузки другого сохранения. Похожим образом ведут себя диалоги, инициализированные скриптами. Диалог инициализируется один раз при первом запуске и остаётся таким вплоть до выхода из программы. Вероятно есть и другие компоненты с таким же поведением. Так работает некая оптимизация, хотя на мой взгляд это совершенно лишнее.

С другой стороны, никак не выйдет поместив на стандартное окно свою кнопку радостно работать с ней и после загрузки новой игры. Не выйдет! Более того, это может вызвать проблемы даже после того, как инвентарь просто скрылся и открылся заново. Дело в том, что окно инвентаря экспортировано самым минимальным образом. После того, как оно скрывается, скриптовая обёртка для него благополучно помирает (несмотря на то, что внутренний объект остаётся). Если вы не сохранили нигде ссылку на кнопку, то уже никак не вытащить обратно. Если сохранили, то нет никакой уверенности, что в этой ситуации всё работает согласованно, поскольку такого рода трюки никак не были предсмотрены разрабами. Так что нет никаких гарантий, что ваша кнопка будет работать как надо.

 

Я бы предпочёл поступать по возможности аккуратнее: открылось окно - навесили кнопку, закрылось - тут-же отцепили и почистили за собой. Собственно я так и сделал, и проблема вроде как решилась.

 

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

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

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

 

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

malandrinus

вот уже пару часов пытаюсь понять как получить объект моих кнопок - дабы применить к ним GetCheck() -узнать текущее состояние и SetCheck(true) - восстановить нажатие если оно было. Ничего не выходит - не через обращение к статику (к которому кнопки приаттачены) не через обращение к окну инвентаря, не через обращение собственно к окну моего класса. Выходит нужно каждый раз объект кнопок при создании запоминать и записывать?

вот так правильно будет записать?

   btn = CUICheckButton()
   btn:SetAutoDelete(true)
   btn:SetWindowName("check_button_1") -- используем  переданный индекс для наименования кнопки
   btn:Init(150,160,113,21) 
   btn:SetText("Удаление объектов")
   btn:SetTextAlign(CGameFont.alCenter)
   btn:SetTextX(5)
   rec_wnd:Register(btn)
   stat:AttachChild(btn)  
  table.insert(TBtn,"check_button_1",btn)  -- запишем в табличку объект  первой кнопки

------------------------------------------------------------------------------------------------------------------------------------------------

в общем восстановление состояния кнопок я сделал - (надо было делать конечно не через insert, а TBtn["check_button_1"]= btn

но чертов вылет при перезагрузке по прежнему присутствует.

stack trace:

001B:7C812AFB kernel32.dll

001B:78158E89 MSVCR80.dll, EH_prolog()

001B:78159082 MSVCR80.dll, _RTCastToVoid()

001B:0353464C xrGame.dll

001B:03543550 xrGame.dll

001B:007BC2F8 XRLUA.DLL, lua_yield()

 

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

Не знаю как вы мужики, а я от чекбоксов отказался, нихрена оно не работает... :negative:

сделал изменение цвета текста простого батона в зависимости от булевы (красный - фэлс, зелёный - тру)

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

Kirag,

Вполне возможно. Почему конфиг фонарика находится по адресу config\models\objects\light_night.ltx? Правильно, он прописан инклудом в модели фонарика! Сделать копию модели фонарика, но прописать другой файл конфига. Вуаля! Остаются мелочи - подменить фонарик скриптом и прописать его в конфигах актора и НПС в attachable_items, чтобы работал.

На акторе разница заметна сразу, на НПС, если выдать новый при уже включенном фонарике - после С/Л, и надо скрипты юза фонарика ковырять.

А фиг вам! Если игра заметит, что в конфигах два или более фонарика - сразу вылет, проверено

 

 

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

ФеНиКс,

Каким образом НПС реагируют на игру гитары другого НПСа?

это логика или скрипт?

Что я имею в виду: когда нпс играет на гитаре, то другие(другой) оценивает его игру либо "+"(похвала;пример:"Ну, ты мастер" либо"-"(недовольство;пример:"Кончай уже, Рихтор...!", как это происходит?

 

в скриптах 1935-го билда все было объяснено:

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

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

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

Помогите разобраться с функцией(функция из скрипта динамических аномалий):

function anomaly_position_choice(lname, psy)

 

if not lname then

lname = level.name()

end

 

if not level_vertexes[lname] or level_vertexes[lname][3] == 0 then return false end

local gvn,gvx,lvx = level_vertexes[lname][1], level_vertexes[lname][2], level_vertexes[lname][3]

 

local new_lv = math.random(1,lvx)

local pos = level.vertex_position(new_lv)

 

while check_lvids_forbidden(new_lv) or chek_exclusion_position(pos, lname, psy) do

new_lv = math.random(1,lvx)

pos = level.vertex_position(new_lv)

end

 

local new_gv = 0

local min_dist = 100000

-- подбираем геймвертекс

for a = gvn, gvx do

local tmp = game_graph():vertex(a):game_point()

if tmp:distance_to(pos) < min_dist then

min_dist = tmp:distance_to(pos)

new_gv = a

end

end

 

if new_gv > 0 and game_graph():valid_vertex_id(new_gv) then

return pos, new_lv, new_gv

else

return false

end

 

end

 

Почему то именно при вычислении game_vertex(в спойлере выделено красным) происходит вылет вот с таким логом:

Expression : I != levels().end()

Function : GameGraph::CHeader::level

File : e:\stalker\sources\trunk\xr_3da\xrgame\game_graph_inline.h

Line : 171

Description : there is no specified level in the game graph : 61

 

Вылет стабилен, от местонахождения и локации не зависит. Подскажите, как можно исправить :)

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

феникс ты вроде искал как сделать удар неписем гг?

первой ремаркой все понятно. Переход ко второй на дистанции ближе 2 метров.

 

[remark@punch]

anim = punch

snd = cit_jail_guard_sneer

meet = meet@punch

target = actor

on_signal = sound_end| %=run_cam_effector(fatigue)%

on_timer = 60000| remark@doctor_wakeup %=run_postprocess(deadcity_wake:1777:false)%

danger = danger_condition

 

[meet@punch]

meet_state = 5|hide_s_left@wait| 4|hide_s_right@wait

meet_state_wpn = 5|backoff2@threat_back

victim = 10|actor

victim_wpn = 10|actor

use = true

use_wpn = true

meet_dialog = escape_lager_guard_start_dialog

 

punch– анимка удара рукой (или прикладом). Так как я не специалист по боксу, то не скажу точно как именно называется этот удар с правой в челюсть. Если поставите ее в meet_state_wpn на дистанции 2 метра - ГГ получит реальный удар в морду прикладом ствола. Так как я эксперементировал на своем торговце - то он (будучи безоружным) бил чисто кулаком. А если вместо запуска анимации камеры %=run_cam_effector(fatigue)% поставите запуск функции %=killactor%, то НПС кинется вас убивать.

 

Freedom

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

_Призрак_

Ну вообще ФеНиКс'у нужно не это (ты так и не понял что он хочет сделать - не через логику отдельных NPC ) - а об анимке punch он осведомлен - тем более что это моя статья и он ее читал на СП :rolleyes:

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

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

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

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

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

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

Войти

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

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

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