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

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

1 час назад, I am Dead сказал(а):

Полнейший бред, уроки русского языка вам поучить, товарищ!

В чём же там бред? Всё правильно. То что вы, мил человек, упоминали, есть не более чем сценки - логика + анимации + звуки. С точки зрения игры, диалог с неписями может вести только гг.

 Моя нычкаНычка в арендованном у Опричника холодильнике  

Мы хорошие ребята, жаль патронов маловато:):ukostra:

UriZzz.gif

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

Спасибо всем, кто помогал с предыдущим вопросом. Вы все очень помогли! Сейчас у меня возникла одна проблема, касающаяся неправильной работы логики нпс. 

Здесь идет логика персонажа:

[logic]
active = remark1
danger = danger_ignore
 
[danger_ignore]
ignore_distance = 5
 
[remark1]
no_move = true
meet = meet@self
 
[meet@self]
use = {=dist_to_actor_le(12) -kvest_vodka_started} self
meet_dialog = {-kvest_vodka_started} escape_trader_oops

Она, до поры до времени, работала, но как только я начал дальше разрабатывать модификацию, начались баги. Теперь, при приближении актора к нпс, полностью пропадает возможность сдвинуться с места, а также диалоговое окно не появляется на экране. Прошу заметить, что раньше все отменно работало без нареканий, но теперь диалог не работает. Хотя, если актор сам начинает диалог (пишу вместо <start_dialog>escape_trader_oops</start_dialog> ---> <actor_dialog>escape_trader_oops</actor_dialog>, то диалог появляется и квест работает (нажимаю F и можно отвечать НПСу), если же начинает нпс, то диалог не показывается, хотя логика персонажа отчасти работает, поскольку при приближении к нпс что-то происходит ( блокируется движение).

Добавлено  Опричник,

Для "Спасибо" в каждом сообщении справа-внизу есть кнопки.

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

@Rod_K , попробуй уменьшить дистанцию с 12 до, например, 5 метров. В движке на дистанцию, с которой можно начинать диалог, ограничение стоит, не помню только, какое именно. И, да - ремарк в качестве основной схемы - это моветон.

Изменено пользователем naxac
  • Согласен 3

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

Ссылка на комментарий
7 часов назад, naxac сказал(а):

И, да - ремарк в качестве основной схемы - это моветон.

Много раз встречал подобное утверждение и до сих пор не знаю, что значит "основная/активная схема"? Объясните, пожалуйста.

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

S.T.A.L.K.E.R. CoP Objects (upd 15.11.24)

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

@WinCap, под "основной схемой" подразумевается та схема, которая используется на постоянной основе для просто стоящего на месте NPC (или циклично перемещающего по определённым путям). Для этих целей используются walker и animpoint.

 

Как правило, remark применяется исключительно для небольших сценок с последующим переходом на "основные схемы" (отыграл нужную анимацию/реплику в remark и снова перешёл в walker). Если использовать её в качестве постоянной, то NPC банально не вернётся "на своё место" после столкновения с противником (или если кто-то его случайно "отодвинет").

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

Очередное кострище ушло в свободное плаванье (переместилось метров на 5 вверх):

2375746ebbe3t.jpg

При этом координаты всех элеменетов костра одинаковые и указывают правильное местоположение:

Скрытый текст


[25.06.21 12:02:44.041] 1. smart_terrain -- bar_ecolog_kamp x=53.180000305176 y=-11.630000114441 z=-260.14001464844; id=15023; story_id=-1
[25.06.21 12:02:44.041] 2. space_restrictor -- yan_campfire1_restr x=53.180000305176 y=-11.630000114441 z=-260.14001464844; id=15026; story_id=-1
[25.06.21 12:02:44.042] 3. physic_object -- yan_campfire1 x=53.180000305176 y=-11.630000114441 z=-260.14001464844; id=15027; story_id=-1
[25.06.21 12:02:44.108] 4. zone_flame_small -- yan_campfire1_flame x=53.180000305176 y=-11.630000114441 z=-260.14001464844; id=60440; story_id=804729
[25.06.21 12:02:44.109] 5. lights_hanging_lamp -- yan_campfire1_light x=53.180000305176 y=-11.630000114441 z=-260.14001464844; id=60441; story_id=804730

 

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

Скрытый текст

function test25062021()
    for i = 1, 65534 do    
        local obj = alife():object(i)
        if obj and obj:name()== "yan_campfire1" then
            --перемещение        
            local xpos=obj.position.x
            local ypos=obj.position.y
            local zpos=obj.position.z
            ypos=ypos+5    --на 5 метров вверх!
            local vPos = vector():set(xpos,ypos,zpos)
            local pk = m_netpk.net_cse_abstract(obj)
            if pk:isOk() then
                log("!ОК!")
                local status = pk:setCallback( function(data)
                    data.position  = vPos --/ change property 'position' in 'cse_abstract'
                end )
            end            
        end
    end
end

 

Что это такое, и как это побороть (вернуть кострище на место!)?

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

@Colder В некоторых спавнерах есть возможность телепортирования на другие Локи и был ещё мод "кпк разработчика" (если правильно помню название) ,там тоже есть такая возможность.

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

@phalcor я пришел к выводу,что это проблема физики. Могу посоветовать только переспаун. В движке я пытался это исправить, но не уверен, получилось или нет. Точнее, не стал заморачиваться с проверкой, т.к. автоматический скриптовый переспаун, который уже работал на тот момент, меня устраивал.

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

@dsh Понятно, физика, будь она неладна. Удаляется кострище без проблем, а вот как его заспавнить из скрипта? 

В распакованном алл-спавне нашёл его секцию, но что-то не соображу, как сделать спавн?

Скрытый текст

[8380]
; cse_abstract properties
section_name = physic_object
name = yan_campfire1
position = 53.1800003051758,-11.6300001144409,-260.140014648438
direction = 0,0,0
unknown_id = 0
script_version = 7

; cse_alife_object properties
game_vertex_id = 1480
distance = 0.300000011920929
level_vertex_id = 66633
object_flags = 0xffffff3a
custom_data = <<END
[collide]
ignore_static
END

; cse_visual properties
visual_name = dynamics\koster\koster_palki

; cse_ph_skeleton properties
skeleton_name = 
skeleton_flags = 1

; cse_alife_object_physic properties
physic_type = 0x3
mass = 10
fixed_bones = bone01


 


 

Изменено пользователем phalcor
Ссылка на комментарий
28 минут назад, phalcor сказал(а):

fixed_bones = bone01

Тебе надо зафиксировать вот эту кость. Попробуй в свою функцию после data.position  = vPos добавить что-то типа 

 data.physic_type = 3
  data.mass        = 10
  data.fixed_bones = "bone01"

 

Изменено пользователем Marafon6540
  • Спасибо 1
Ссылка на комментарий
2 hours ago, Marafon6540 said:

Тебе надо зафиксировать вот эту кость.

Это не поможет. В том месте, где происходит эта проблема, фиксированные кости не обрабатываются. Оно там о такой штуке просто не знает. Хотя это не отменяет необходимость фиксации костей. Но против этой проблемы - это не поможет.

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

Решил сделать фичу, как в ОП 2. При смерти ГГ выводится сообщение о том, что он сдох. Решил сделать также, но у меня не получилось.

Вписал проверку жив ли ГГ в начальную инфопорцию. (Не знаю важно ли это) 

info_portion id="storyline_actor_start">
 <task>storyline_eliminate_gunslinger</task>
    <action>my.god_spawn</action>
    <action>my.gg_podoh</action>
  </info_portion>

Сам скрипт:

 

function gg_podoh()

if not db.actor:alive() then

db.actor:give_info_portion("gg_pomer")

end

 

function sms_otpravka()

local snd = sound_object([[device\pda\pda_tip]])

local sactor = alife():actor()

local cactor = level.object_by_id(sactor.id)

snd:play_no_feedback(db.actor,sound_object.s2d, 5, vector():set(0, 0, 0), 0.7)

cactor:give_game_news("Система:\\n%c[255,200,200,200]ГГ сдох.", "ui_iconsTotal_found_money", Frect():set(0,0,83,47), 5001, 8 000)

end

end

 

Пробовал также через news_manager.send_tip. Но это не помогло.

Сам поршень:

 

  <info_portion id="gg_pomer">

 <action>kalecheniy_death.sms_otpravka

</action>

    </info_portion>

 

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

Ссылка на комментарий
4 часа назад, Krolevarka сказал(а):

просто не отправляются

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

Здесь могла быть ваша реклама.

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

@naxac Решил сделать по другому. В bind_stalker создал проверку жив ли actor. Если не жив, то выдается инфопоршень. Этот инфопоршень отправляет сообщение.

Скрытый текст

    if not db.actor:alive() then
       my.portion()
    end

Скрытый текст

   <info_portion id="gg_smert">
    <action>my.sms_otpravka</action>
    </info_portion>

Скрытый текст

function sms_otpravka(actor, npc)
    news_manager.send_tip(db.actor, "%c[255,255,128,128]System:\n%c[default]You are dead.", nil, nil, 40000)
end

 

function portion()
db.actor:give_info_portion("gg_smert")
end

 

 

В итоге сообщение отправилось успешно.

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

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

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

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

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

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

Войти

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

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

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