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

Скриптование


Svoboда

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

Коллеги, может, кто поможет? Ситуация такая: вылет по стори айди.

FATAL ERROR

 

[error]Expression : no_assert

[error]Function : CALifeStoryRegistry::add

[error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\alife_story_registry.cpp

[error]Line : 30

[error]Description : Specified story object is already in the Story registry!

 

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

 

Добавлено

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

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

Поделиться этим сообщением


Ссылка на сообщение
gruber, я не настолько неопытный, как может показаться по количеству сообщений. Начинал, конечно. В общем, после последней _рабочей_ секции алсспавна не спавнится ничего ни при каких условиях (проверил, кажется, все возможные варианты)... Как будто реально у него закончилось свободное место для предметов.

Поделиться этим сообщением


Ссылка на сообщение

Да я пошутил про место - понятно, что оно не закончилось.

Artos, Ок: ацдц от 11 октября, последняя секция спавна, при которой вылет:

[9041]

 

 

 

section_name=physic_destroyable_object

 

position = -57.74195098877,-6.4983997344971,13.447357177734

direction = 0,0,0

 

game_vertex_id = 778

level_vertex_id = 4007

 

story_id = 10015

 

 

 

name = agr_under_box_9

 

distance = 0

 

object_flags = 0xffffff3a

 

visual_name = physics\box\box_wood_01

 

physic_type = 0x3

 

mass = 10

 

Вообще, если более доступно описать проблему:

Имеем n секций спавна, при добавлении секции n+1 получаем вылет. Удаляем секцию n+1 и еще в придачу n (в итоге получаем на одну секцию меньше, чем при последнем рабочем варианте) - все работает. Добавляем секцию n+1 (любую другую - не обязательно ту же самую, что в первой итерации - в итоге получаем количество секций, равное последнему рабочему варианту) - работает. Добавляем n+1 секцию и снова получаем вылет. То есть как бы я ни изгалялся, при достижении количества секций спавна числа n+1 получаю вылет. Также наверянка важная информация - если допустить явную ошибку в аллспавне (например, забыл из копипащенной секции удалить сид), размер лога - 7 r,? если все вроде бы должно работать - размер лога 17 кб... То есть, по идее, аллспавн он считывает и виснет уже потом.

Поделиться этим сообщением


Ссылка на сообщение
Artos, Спасибо, понял. Спавнятся, да. Я, вообще, уже думал про нумерацию, но как-то отбросил эту идею... И как тогда правильно пронумеровать алл-спавн, чтобы подобных вылетов не было?

Поделиться этим сообщением


Ссылка на сообщение

Хм... Вообще, что-то я приврал - по номеру секции у меня ничего не спавнится. Декомпилировал, нашел одинаковые имена секций (внимательностью никогда не отличался). Однако кое-как оно все же работало до секции n.

gruber,

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

Поделиться этим сообщением


Ссылка на сообщение

Artos,

Я ничего не зажимал. Тебе всю папку геймдата выложить?

 

И что, ты будешь по всем конфигам копаться? Хм... Ладно, спасибо за предложение - поеопаюсь пока сам - если ничего не выйдет, выложу.

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

Поделиться этим сообщением


Ссылка на сообщение

В общем, как будто удалось локализовать проблему: при добавлении новых секций алл.спавна в соответствующий файл уровня из дефолтного алл.спавна и последующей его компиляции в игру все работает (а секций там явно больше, чем в моем глючном). Видимо, что-то не то удалил (только вот что?). Скриптовый спавн точно ни при чем - вывел из биндера все скрипты, которые что-либо спавнят в начале игры, и все равно вылет сохранялся.

Поделиться этим сообщением


Ссылка на сообщение

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

Ulman, У тебя синтаксис скрипта хромает. Лог ошибки свидетельствует о том, что луа не может распарсить то, что ты там накодил (а именно - цифры 1 и 0,1). Что хотел-то получить в итоге?

Поделиться этим сообщением


Ссылка на сообщение

Опять наскриптовался по самое небалуйся...

 

В общем, задача: сделать лагерь охранников ученых у бункера на Янтаре.

[4725]

 

; cse_abstract properties

section_name = smart_terrain

name = scientist_guard

position = 48.12174987793,-11.88060092926,-271.53497314453

direction = 0,0,0

game_vertex_id = 1480

level_vertex_id = 63987

distance = 0

object_flags = 0xffffff3e

custom_data = <<END

[smart_terrain]

type = scientist_guard

capacity = 5

communities = ecolog

groups = 2

END

; cse_shape properties

shapes = shape0

shape0:type = sphere

shape0:offset = 0,0,0

shape0:radius = 6.5

; cse_alife_space_restrictor properties

restrictor_type = 3

; se_smart_terrain properties

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

[4726]

; cse_abstract properties

section_name = respawn

name = scientist_guard_respawn

position = 50.741165161133,-11.879903793335,-272.93768310547

direction = 0,0,0

game_vertex_id = 1480

level_vertex_id = 65146

distance = 0

object_flags = 0xffffff3e

custom_data = <<END

[respawn]

respawn_section = scientist_guard_1, scientist_guard_2, scientist_guard_3, scientist_guard_4, scientist_guard_5

max_spawn = 999

min_count = 5

max_count = 5

idle_spawn = medium

END

; cse_shape properties

shapes = shape0

shape0:type = sphere

shape0:offset = 0,0,0

shape0:radius = 5

; cse_alife_space_restrictor properties

restrictor_type = 0

; se_respawn properties

function load_states(gname, type)
  if type == "scientist_guard" then
    return function(gulag)
      return 0
    end
  end
end

function load_ltx(gname, type)
  return nil
end

function checkStalker(npc_community, gulag_type, npc_rank, se_obj)
  if gulag_type == "scientist_guard" then
    return npc_community == "ecolog"
  end
end
  
local t = {}

function load_job(sj, gname, type, squad, groups)
  if type == "scientist_guard" then
    t = { section = "logic@scientist_guard_walk_1",
      idle = 0,
      prior = 20, state = {0},
--      online = true,
      in_rest = "", out_rest = "",
      position_threshold = 600
    }
    table.insert(sj, t)
    t = { section = "logic@scientist_guard_walk_2",
      idle = 0,
      prior = 20, state = {0},
--      online = true,
      in_rest = "", out_rest = "",
      position_threshold = 600
    }
    table.insert(sj, t)
    t = { section = "logic@scientist_guard_patrol_l",
      idle = 0,
      prior = 15, state = {0},
--      online = true,
      in_rest = "", out_rest = "",
      position_threshold = 600
    }
    table.insert(sj, t)
    t = { section = "logic@scientist_guard_camp_1",
      idle = 0,
      prior = 15, state = {0},
--      online = true,
      in_rest = "", out_rest = "",
      position_threshold = 600
    }
    table.insert(sj, t)
    t = { section = "logic@scientist_guard_camp_2",
      idle = 0,
      prior = 5, state = {0},
--      online = true,
      in_rest = "", out_rest = "",
      position_threshold = 600
    }
    table.insert(sj, t)
  end
end

function checkMonster(npc_community, gulag_type)
  return false
end

[logic@scientist_guard_walk_1]

active = walker@scientist_guard_walk_1

 

[walker@scientist_guard_walk_1]

path_walk = walk_1_walk

path_look = walk_1_look

danger = danger_condition@scientist_guard

 

 

[logic@scientist_guard_walk_2]

active = walker@scientist_guard_walk_2

 

[walker@scientist_guard_walk_2]

path_walk = walk_2_walk

path_look = walk_2_look

danger = danger_condition@scientist_guard

 

 

[logic@scientist_guard_patrol_l]

active = walker@scientist_guard_patrol_l

 

[walker@scientist_guard_patrol_l]

path_walk = patrol_l_walk

path_look = patrol_l_look

danger = danger_condition@scientist_guard

 

 

[logic@scientist_guard_camp_1]

active = kamp@scientist_guard_camp_1

 

[kamp@scientist_guard_camp_1]

center_point = camp_1_centr

danger = danger_condition@scientist_guard

 

 

[logic@scientist_guard_camp_2]

active = kamp@scientist_guard_camp_2

 

[kamp@scientist_guard_camp_2]

center_point = camp_2_centr

danger = danger_condition@scientist_guard

 

 

[danger_condition@scientist_guard]

ignore_distance = 0

ignore_distance_corpse = 0

 

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

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

Поделиться этим сообщением


Ссылка на сообщение

Ок, вот такое:

! Cannot find saved game :>respawn: [scientist_guard_respawn] spawn execute
! Cannot find saved game :>spawning [scientist_guard_respawn], cant spawn. max count reached!!!

Странно, вроде бы в MaxCount поставил экологов всех рангов по сотне, а все равно...

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

своем собственном

Собственном - конечно... ;)

 

Поделиться этим сообщением


Ссылка на сообщение

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

 

А что мне лог выдал - выше в моем посте.

 

Добавлено:

Лог:

! Cannot find saved game :>respawn: [scientist_guard_respawn] spawn execute
! Cannot find saved game :>spawning [scientist_guard_respawn], cant spawn. max count reached!!!

Вытекает отсюда:

 for i=1,self.max_spawn do   
    if self.max_count ~= -1 and table.getn(self.spawned_obj) >= self.max_count then
            printf("SPAWNING [%s], CANT SPAWN. MAX COUNT REACHED!!!", tostring(self:name()))
      return
    end

Короче, стандартный крипт АМК.

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

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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