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

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

ColR_iT, А зачем нужны game vertex и level vertex в лук поинтах?

[start_6look]

points = p0

p0:name = wp00

p0:flags = 0x1

p0:position = -1.03979444503784,8.50889873504639,-135.781280517578

p0:game_vertex_id = 3646

p0:level_vertex_id = 356302

А из-за этого не могут быть проблемы с сейвами? Так все нормально нет вылетов, но сейвы бьются постоянно

 

Создаю глобальный мод с новыми локациямЭ

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

Здрасте, у меня вопрос как заспанить Монстра через скрипт? Кол-во не имеет значение, но если можно то лучше через алл. Плиз с примером на кордоне!

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

Из за чего может быть такая проблема?

Заспавнил мутанта и задал ему логику направится в определённую точку. Но вместо того чтобы двигаться к точке, мутант тупо стоит на месте с анимацией бега.

 

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

Вот что я действительно упустил, забыл сказать важную вещь - мутант спавнится на новой локации.

Секция спавна собаки(моего мутанта) из all.spawn.

; cse_abstract properties
section_name = dog_normal
name = dog_normal_1
position = 179.759155273438,20.1181125640869,79.2889633178711 
direction = 5.63856360713544e-007,-1.32480001449585,-1.41571035783272e-007

; cse_alife_object properties
game_vertex_id = 0 
distance = 40.5999984741211 
level_vertex_id = 383716 
object_flags = 0xffffffbf 
custom_data = <<END
[logic]
active = mob_walker@dog_walk_1

[mob_walker@dog_walk_1]
path_walk = dog_walk_1
on_timer = 10 | mob_walker@dog_walk_2

[mob_walker@dog_walk_2]
path_walk = dog_walk_2
END

; cse_visual properties
visual_name = monsters\dog\dog_red

; cse_alife_creature_abstract properties
g_team = 0
g_squad = 0
g_group = 0
health = 1
dynamic_out_restrictions = 
dynamic_in_restrictions = 

upd:health = 1
upd:timestamp = 0 
upd:creature_flags = 0 
upd:position = 179.759155273438,20.1181125640869,79.2889633178711 
upd:o_model = 0 
upd:o_torso = -1.32480001449585,5.63856360713544e-007,0 
upd:g_team = 0 
upd:g_squad = 0 
upd:g_group = 0

; cse_alife_monster_abstract properties

upd:next_game_vertex_id = 65535
upd:prev_game_vertex_id = 65535
upd:distance_from_point = 0
upd:distance_to_point = 0

; cse_ph_skeleton properties

; cse_alife_monster_base properties

; se_monster properties

Точки я думаю писать уже не нужно?

Не думаю что они чем-то помогут, но вот если что:

[dog_walk_1]
points = p0
p0:name = name00
p0:position = 218.416305541992,21.7092933654785,91.9415588378906
p0:game_vertex_id = 0
p0:level_vertex_id = 421092

 

[dog_walk_2]
points = p0
p0:name = name00
p0:position = 88.924103,-10.092127,118.739883
p0:game_vertex_id = 1
p0:level_vertex_id = 301145

 

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

strelok200, за тем же зачем и в остальных точках: точках пути, спавна и т.д. и тому подобное. Биться сейвы из-за этого точно не будут. Что это такое можно найти минут за пять воспользовавшись поиском.

 

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

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

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

 

В скрипте gulag_escape смотрел приоритеты - своему неписю поставил аж под 500 ед. (на всякий случай, чтоб не сбивали другие террэйны). И всё равно его что-то сбивает - вместо того, чтобы стоять на вышке, он тупо ходит по территории за блокпостом.

 

Кто может, подскажите пожалуйста, в чём беда?

 

Вот. На скрине проиллюстрированы предположительные точки, куда непись смотрит и откуда он смотрит (только днём). А ночью пока не нужно - если разберусь с днём, разберуюсь и с ночью. По гулагам - слишком много нужно писать, всё не поместится. Но уверяю - что бы я ни делал, даже простую ремарковскую логику прописывал ему - всё равно куда-то убегает.

e8a7ae90d8c7t.jpg

Вот точка, откуда непись смотрит (прописал в all.spawn):

[big_soldier_smart_walk1]

points = p0

p0:name = name00

p0:flags = 0x400

p0:position = -163.7255859375, -25.435829162598, -350.27590942383

p0:game_vertex_id = 31

p0:level_vertex_id = 85729

А вот точки, куда он смотрит:

[big_soldier_smart_look1]

points = p0,p1,p2

p0:name = name00|a=guard

p0:flags = 0x400

p0:position = -183.30322265625, -30.729475021362, -318.25082397461

p0:game_vertex_id = 36

p0:level_vertex_id = 67308

p0:links = p1(1)

 

p1:name = name01|t=15000|a=guard

p1:flags = 0x400

p1:position = -159.03273010254, -30.059520721436, -302.86755371094

p1:game_vertex_id = 34

p1:level_vertex_id = 90503

p1:links = p2(1)

 

p2:name = name02|t=10000|a=guard

p2:flags = 0x400

p2:position = -119.28175354004, -30.398241043091, -324.59219360352

p2:game_vertex_id = 100

p2:level_vertex_id = 134793

А это точки, где непись спит:

[big_soldier_sleeper_sleep]

points = p0, p1

p0:name = wp00

p0:position = -166.57637023926, -24.899848937988, -356.91793823242

p0:game_vertex_id = 31

p0:level_vertex_id = 83083

p0:links = p1(1)

 

p1:name = wp01

p1:position = -166.56726074219, -25.43902015686, -352.73843383789

p1:game_vertex_id = 83092

p1:level_vertex_id = 31

p1:links = p0(1)

Из gulag_escape.script:

if type == "big_soldier_smart" then

t = { section = "logic@big_soldier_smart",

idle = 0,

prior = 100, state = {0},

in_rest = "", out_rest = "",

position_threshold = 100,

predicate = function(obj_info)

return obj_info.profile_name == "big_soldier_profile"

end

}

table.insert(sj, t)

t = { section = "logic@big_soldier_sleeper",

idle = 0,

prior = 100, state = {1},

position_threshold = 100,

online = true,

in_rest = "", out_rest = "",

predicate = function(obj_info)

return obj_info.profile_name == "big_soldier_profile"

end

}

table.insert(sj, t)

 

if type == "big_soldier_smart" then

return function(gulag)

if level.get_time_hours() >= 6 and level.get_time_hours() <= 20 then

return 0 -- день

else

return 1 -- ночь

end

end

end

 

if gulag_type == "big_soldier_smart" then

return se_obj:profile_name() == "big_soldier_profile"

end

 

[logic@big_soldier_smart]

active = walker@big_soldier_walker

 

[walker@big_soldier_walker]

path_walk = walk1

path_look = look1

on_info = {+big_soldier_warning1 -big_soldier_warning1_given} remark@big_soldier_warning

 

[remark@big_soldier_warning]

anim = threat

snd = big_soldier_1

tips = big_soldier_1_radio

tips_sender = soldier_elite1

target = actor

on_signal = sound_end | walker@big_soldier_walker %+big_soldier_warning1_given%

 

[logic@big_soldier_sleeper]

active = sleeper@big_soldier_sleeper

 

[sleeper@big_soldier_sleeper]

path_main = sleep

wakeable = true

 

 

 

Это всё, что я сделал.

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

Artos

Спасибо за разъяснение :)

___

Последний вопрос - раз рестрикторы есть и у оффлайн объектов, то можно ли их удалить через серверный без использования нет-пакетов? Или нужно например отлавливать их выход в онлайн?

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

*Shoker*, ну зачем задавать вопрос, на который можно самому ответить чуток подумав?

Для доступа к информации по рестрикторам объекта имеются методы ... Эти методы имеются только для клиентского объекта ... Делаем вывод, что или для изменения такой информации требуется иметь объект в онлайне или работать нештатными методами, т.е. через нет-пакеты.

Мне непонятно, ну почему тебе не посмотреть как работа с информацией по рестрикторам сделана в том же Simbion'е или OGSE? В этих модах проблемы со спавном и удалением аномалий решены.

Оставался вопрос с некорректной порой записью нет-пакетов по причине некорректных на то время кодов для чтения/записи скелета объекта, что приводило изредка к "рельсам" - так теперь и это решено.

 

Чем тебе вот этот код не подходит?

--/#+# чистка рестрикторов
function Clear_Restriction(idNPC,soNPC,oNPC)
  local sim = alife()
  if not soNPC then
    soNPC = idNPC and sim:object(idNPC)
  end
  if soNPC and IsNPC(soNPC) then
    --/ для онлайновых объектов
    if oNPC and level.object_by_id(soNPC.id) then
      if oNPC.alive and not oNPC:alive() then --/ мертв?
        oNPC:remove_all_restrictions() --/ чистим все
      elseif db.iSSVer <= 8 then --/#!# for SHOC|CS: по списку имен рестрикторов
        local sInRestrictions = oNPC:in_restrictions() --/ читаем список рестрикторов 'in' (входить)
        if sInRestrictions ~= "" then
          local tToRemove = {}
          for sRest in sInRestrictions:gmatch('%s*[^,]+%s*') do --/ разделяем имена по запятым
            local oRestr = sim:object(sRest) --/#!# only for SHOC|CS
            if oRestr and Is_ZoneAnom(oRestr) then
              table.insert(tToRemove,sRest)
            end
          end
          if next(tToRemove) then
            local sToRemove = table.concat(tToRemove,',') --/ строка 'удаляемых' у объекта рестрикторов
            oNPC:remove_restrictions("",sToRemove)
          end
        end
      end
    end
    --/ для всех (т.е. и оффлайновых) объектов
    local pk = get_netpk(soNPC,1) --/ запрос нет-пакета ('state')
    if pk:isOk() then --/ получен доступ к нет-пакету объекта?
      local data = pk:get() --/ читаем данные из нет-пакета
      if next(data.dynamic_in_restrictions) then --/ таблица рестрикторов не пуста?
        local tRestrLeft,idRestr = {},nil --/ массив НЕ удаляемых рестрикторов
        for idx,idRestr in ipairs(data.dynamic_in_restrictions) do
          local soRestr = idRestr and sim:object(idRestr)
          if soRestr then
            if Is_ZoneAnom(soRestr) then --/ проверка: аномалия?
              tRestrRemoved[idRestr] = true
              if tAnomsRemove[idRestr] then
                tAnomsRemove[idRestr] = false --/#?#
              end
              sim:remove_in_restriction(soNPC, idRestr)
            else --/ не удаляемый рестриктор
              table.insert(tRestrLeft, idRestr)
            end
          end
        end
        --
        if #data.dynamic_in_restrictions ~= #tRestrLeft then
          data.dynamic_in_restrictions = tRestrLeft
          pk:set(data) --/< запись в нет-пакет
        end
      end
    end
  end
end

 

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий
Daniar299, функция спавн монстра ничем не отличается от спавна того же НПС или же какого-нибудь предмета. Примеры тебе предоставили разработчики в оригинальных файлах. Вооружаешься поиском по словам (выбрать есть из чего) и вперёд на фронт в геймдату.
Да я согласен функции тежи! Но например та же логика, story_id, spawn_sections, character_profile, откуда брать их? точнее что туда писать для монстра без логики, чтоб просто бегал! Изменено пользователем ColR_iT
Ссылка на комментарий

Озадачился я сегодня такой проблемой. Есть текст произвольной длинны. Нужно узнать сколько строк он займет при выводе на статик. У статика задан параметр компекс_мод=1

У меня было несколько идей:

1. Посчитать какой размер текста и сколько в нем символов \n. Но проблема в том что из-за переменоса слов на другую строку этот метод дает погрешность в несколько строк при большом объеме текста.

2. Фактически переписать метод SetText. Идея такая - резать строку по словам и смотреть помещается ли это слово на эту строку. заодно посчитать символы \n. Но при больших текстах такая система будет работать очень долго, а там как у меня и так много чего в этот момент обрабатывается это не есть хорошо.

 

Заранее спасибо

Freedom

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

Daniar299, если прочитать твои два поста, то становится очень не понятно чего тебе нужно.

Ты просишь спавн через скрипт и тут же говоришь, что лучше через "алл". Определись с выбором то.

Ещё раз повторюсь: функция спавна монстра ничем не отличается от функции спавна НПС, что там, что там тебе нужно прописать секцию и координаты.

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

Туторов тьма-тьмущая. Открой хотя бы тот же Stalkerin и изучай.

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

_Призрак_,

если надо быстро, то забудь про это. Но в самом то деле, зачем выводить быстро и при этом динамически переносить строки? На худ что ли многострочный текст дампить? Думаю, что при выводе на худ лучше как-то решить вопрос компромиссно - самому распределить строки и отформатировать текст.

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

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

 

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

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

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

 

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

Получается вертексы надо использовать те же, что и при спавне?

 

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

Посмотрел на Инсайде, там об этом только вкратце

Создаю глобальный мод с новыми локациямЭ

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

А на мой вопрос так и не ответили...

Неужели никто не знает решения? Не поверю...

Если это поможет, то у меня были следующие подозрения:

У сталкеров есть секции такого типа:

[stalker_terrain]

255,000,255,255

008,001,255,255 ;Разрешено ходить по опасным местам на баре

012,001,255,255 ;Разрешено ходить по опасным местам на Милитари

 

У собак же она одна, но может быть она не подходит для моей новой локации или что-то типа этого?

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

Boofer, не стОит всех оптом подозревать в незнании ... Большей частью, и не хочется многим заниматься очередными погадалками, тем более в таком частном вопросе, который многим по-барабану. Кому-то лень, у кого-то более важные дела, чтобы тратить на мелочовку время ...

Параметр смарт-терейна в твоем случае не имеет никакого значения.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Boofer, давайте все же задумываться прежде чем писать вопрос в топик!

Если бы схема не была рабочей - то в кодах оригинальной игры мы бы не встречали сплошь и рядом упоминания этой схемы и конфигов логики этой схемы.

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

Смотри в чем разница ... если не считать собственно кординат на локации, хотя и в них вполне может быть загвоздка.

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

Не гадать и смущаться нужно, а делать что-то и смотреть. Делать желательно осмысленно, а не абы чО писать в схему/логику.

 

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

P.S. И что тебе мешает определить виновата ли логика/схема или нет?

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

Пробуем с "пустой" логикой, пробуем с иной схемой, пробуем с иными параметрами своей схемы ...

Ведь все это и не так сложно и ответ и порцию знаний/опыта на будущее.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

привет,народ столкнулся с такой проблемой,пропала фраза у всех сталкеров "До встречи!" уже все перерыл немогу понять куда делась,подскажите плиз как исправить это чтобы фраза была

 

Во-первых, ошибся темой. Во-вторых, откуда кто знает, что ты там наворотил? В-третьих, тебе уже было замечание по грамотности, если не хочешь последствий - пиши грамотно. Cyclone

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

Artos, выяснил что виновата именно логика. Когда мутант находится под действием логики, то зависает в истерическом бегу на месте, но стоит ему заметить врага, он выходит из под действия логики и нападает на врага (передвигается). Но стоит врагу пропасть, он снова продолжает выполнять незаконченную логику и зависает... Менял и координаты точек и координаты спавна самого мутанта. Даже прописывал новую локацию в скрипте xr_gulag. Безрезультатно. Уже даже не представляю что ещё можно сделать...

Пробовал без логики. Всё нормально.

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

Boofer, ну и ... констатация факта того, что тобою написана ошибочная логика и не более. Теперь, если еще не отпало желание, смотри свою логику и приводи ее к рабочему варианту. Та же "учебная" плоть тебе в качестве примера, как сделана рабочая логика для схемы.

 

strelok200, в твоем вопросе "голый" сэйв бесполезен. Без всех твоих модмфицированных кодов и пр. изменений от оригинальной игры, версию которой ты также не упоминаешь - бессмыслено даже о чем-то говорить. Битые сэйвы могут возникать по самым разным причинам, коих неперечислишь даже.

Ну а раз ковыряешь алл.спавн и получаешь битье - смотри свои ошибки при правках ищи что и где не так делаешь. Используй вывод в лог при загрузке игры технологических сообщений, смотри какой объект виноват и т.д.

Если выложишь где-нибуль весь свой мод с парой битых сэйвов - попробую на выходных глянуть ...

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Здравствуйте! Пожалуйста, помогите разобраться с вылетом:

 

function object_eat(obj)
    local sect = obj:section()
if db.actor:has_info("wpn_porshein") then
    db.actor:disable_info_portion("wpn_porshein")
iTimer = nil
                db.actor:restore_weapon()
end
if  sect == "medkit" or sect == "medkit_army" or sect == "medkit_scientic" then
                db.actor:hide_weapon()
random_time()
end
end  
          
function random_time()
      local random_table_function = math.random(1,5)
if random_table_function == 1 then
      function_start_1()
end

if random_table_function == 2 then
      function_start_2() 
end

if random_table_function == 3 then
      function_start_3() 
end

if random_table_function == 4 then
      function_start_4() 
end

if random_table_function == 5 then
      function_start_5() 
end

function function_start_1() 
  iTimer = time_global() + 5*1000
  db.actor:give_info_portion("wpn_porshein")
end

function function_start_2() 
  iTimer = time_global() + 7*1000
  db.actor:give_info_portion("wpn_porshein")
end

function function_start_3() 
  iTimer = time_global() + 9*1000
  db.actor:give_info_portion("wpn_porshein")
end

function function_start_4() 
  iTimer = time_global() + 11*1000
  db.actor:give_info_portion("wpn_porshein")
end

function function_start_5() 
  iTimer = time_global() + 13*1000
  db.actor:give_info_portion("wpn_porshein")
end
end 

function Timer_N_minutes()
  if iTimer and iTimer < time_global() then 
    iTimer = nil 
    db.actor:disable_info_portion("wpn_porshein")
db.actor:restore_weapon()
  end
end

 

 

FATAL ERROR

[error]Expression    : !m_error_code
[error]Function      : raii_guard::~raii_guard
[error]File          : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
[error]Line          : 748
[error]Description   : d:\stalker cop\gamedata\scripts\builds_activ.script:34: attempt to call global 'function_start_5' (a nil value)


stack trace:

 

 

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

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

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

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

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

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

Войти

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

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

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