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

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


Svoboда

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

 

 

вот хоть товарищу помоги, у него необходимость возникла. А я переживу.

Спасибо, но я уже сам разобрался. Ничего сложного там нету.

Сталкер - наше всё!

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


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

 

 

Помогите привязать скрипт телепортации к какому либо поедаемому объекту, мол гг съел хлебушек и его перекинуло на янтарь.

Смотри, как это сделано в Солянке. Тайники Кости: там портирует в пределах локации - мама не горюй. А далее - делай по аналогии.

 

А насчет другой локации - да, скриптовый левел_ченжер тебе в помощь.

Сталкер - наше всё!

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


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

 

 

Примеры использования можно найти в оригинальных скриптах игры. Вообще, поиск по файлам с помощью, например, TC, может дать много интересной и полезной информации.

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

 

Сорри за флуд, не мог пройти мимо.

Сталкер - наше всё!

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


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

Камрады, поясните, кто знает. В Солянке в файле sak_off_corpses.script есть две таблицы: tabl_corpses и tabl_corpses_9510. Так понимаю, что в первую заносятся трупы,  которые убираются. А во вторую - которые не должны убираться, что ли (те, которым прописан story_id)?

Сталкер - наше всё!

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


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

@AndrewMor, если я не путаю, в первую в цикле заносятся трупики, которые сейчас будут удалятся. Во вторую заносятся трупики, у которых story_id меньше 9510 и они не будут удаляться.

Спасибо, я так и думал.

Сталкер - наше всё!

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


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

Напомните кто-нибудь, как узнать максимальное количество lvid на конкретной локации?

  • Согласен 1

Сталкер - наше всё!

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


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

 

 

Тут посмотри:

Список локаций там неполный. Меня интересовало, как скриптово узнать максимальное кол-во левел-вертексов.

  • Согласен 1

Сталкер - наше всё!

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


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

 

 

например так:

Спасибо. Только после alife нужны скобки :)

Сталкер - наше всё!

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


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

 

 

Сохранять значение переменной в определенный файл?

Использовать pstor для сохранения значения переменной.

  • Спасибо 1
  • Согласен 1

Сталкер - наше всё!

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


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

@Kober(BRUC), 

В качестве примера:

 

     local kolvo_irp = xr_logic.pstor_retrieve(db.actor, "kol_irp", 0) -- объявляем локальную переменную и читаем значение из pstor (его там нет, потому присваиваем 0).
     if kolvo_irp ~= "number" or kolvo_irp == nil then -- сравниваем ее значение с чем-либо, если нужно.
       kolvo_irp = 2 -- присваиваем ей другое значение
       xr_logic.pstor_store(db.actor, "kol_irp", kolvo_irp) -- сохраняем новое значение в pstor.
     end

 

Может, пример и не сильно удачен.

  • Спасибо 1

Сталкер - наше всё!

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


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

 

 

Есть готовый инструментарий для отладки смарт-террейнов на локации:

А ссылка на том сайте битая...

  • Согласен 1

Сталкер - наше всё!

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


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

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

 

function actor_binder:save(packet)


local pk1 = fake_net_packet.fake_net_packet()
  self:save_old(pk1)
  --get_console():execute("Packet_size_is_"..pk1:w_tell())
  if pk1:w_tell()>7500 then
     ogsm_debug.clean_pstor()
  end
  self:save_old(packet)
end

 

  • Нравится 1

Сталкер - наше всё!

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


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

 

 

Вызывается при любом сохранении

Включая и автосейв? Или просто сейвы, в т.ч. и квик?

 

 

 

Если в функциях self:save_old() и ogsm_debug.clean_pstor() содержится то, что можно предположить (OGSM для ТЧ нет под рукой

 

function actor_binder:save_old(packet)



  local save_treasure_manager = true

  printf("actor_binder:save(): self.object:name()='%s'", self.object:name())
  object_binder.save(self, packet)

  --' Сохраняем уровень сложности
  if save_treasure_manager == true then
  packet:w_u8(level.get_game_difficulty() + 128)
  else
    packet:w_u8(level.get_game_difficulty())
  end

  --' Сохраняем данные об отключенном вводе
  if self.st.disable_input_time == nil then
  packet:w_bool(false)
  else
    packer:w_bool(true)
    utils.w_CTime(packet, self.st.disable_input_time)
  end

  xr_logic.pstor_save_all(self.object, packet)
  self.weather_manager:save(packet)

  sr_psy_antenna.save( packet )

  if save_treasure_manager == true then
    treasure_manager.save(packet)
  end

  task_manager.save(packet)
  self.actor_detector:save(packet)
end

 

 

-- Экстренная очистка хранилища актора
function clean_pstor()
   for k,v in pairs(ogsm_anomaly.loc) do
     if k ~= level.name() then
      amk.del_variable("an"..ogsm_anomaly.loc[k])
     end
  end

 for i=1,100 do
   amk.del_variable("rt"..i)
   amk.del_variable("rt"..i.."d")
   amk.del_variable("rt"..i.."p")
   amk.del_variable("gt"..i)
   amk.del_variable("gt"..i.."d")
   amk.del_variable("gt"..i.."p")
 end
 

 amk.del_variable("rfx")
 amk.del_variable("blt")
 amk.del_variable("drnk")
 amk.del_variable("slp")
 amk.del_variable("nrg")
 amk.del_variable("smn")
 

 amk.del_variable("aem_team1")
 amk.del_variable("aem_team2")
 amk.del_variable("aem_cr")
 amk.del_variable("aem_cm")
 amk.del_variable("aem_rt")
 amk.del_variable("aem_ct")

 amk.del_variable("aem_lt")
 amk.del_variable("aem_nt")
 amk.del_variable("aem_it")
 amk.del_variable("aem_mt")
 amk.del_variable("aem_mk")

 for i=1,5 do
   amk.del_variable("snd"..i)
 end

 for i=1,65535 do
   local obj = alife():object(i)
   if obj and (obj:name()=="esc_tutorial_dead_novice" or
obj:name()=="val_lager_bandits_borov" or
obj:name()=="rostok_stalker") then
     alife():release(obj, true)
   end
 end

 db.actor:give_info_portion("val_actor_has_borov_key")

--amk.g_start_timer("bl1",0, 9+math.random(-1,1), 0)
--amk.g_start_timer("rsp",0, 5+math.random(-1,1), 0)

 get_console():execute("Actor_storage_has_been_successfully_cleaned!")
end

 

 

И еще вопрос: отчего может переполняться хранилище?

  • Спасибо 1

Сталкер - наше всё!

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


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

 

 

таймеры,

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

  • Спасибо 1

Сталкер - наше всё!

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


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

Привет всем.

Пытаюсь вытащить из Солянки спавн артефактов. Вызываю свой скрипт так:

function actor_binder:net_spawn(data)


...
...
uzi_arts.add_arts()
return true

 

 

Сам скрипт:

local anoms_sections={
buzz={"buzz",{shtype=0,radius=1.5,center={0,0,0}}},
electra={"witches_galantine",{shtype=0,radius=4,center={0,0,0}}},
gravi={"gravi_zone",{shtype=0,radius=3,center={0,0,0}}},
mincer={"mincer",{shtype=0,radius=3.5,center={0,0,0}}},
mosquito_bald={"mosquito_bald",{shtype=0,radius=3,center={0,0,0}}},
zharka_static={"zharka_static",{shtype=1,v1={1,0,0},v2={0,5,0},v3={0,0,1},offset={0,0,0}}}
}

level_anoms={
l01_escape={100,170,1000,{electra=12, gravi=5, mincer=10, buzz=10, mosquito_bald=15}},
l02_garbage={100,160,800,{mosquito_bald=12, mincer=12, electra=15, gravi=10, buzz=12}},
l03_agroprom={100,140,800,{mosquito_bald=12, mincer=8, electra=12, buzz=12, gravi=10}},
l04_darkvalley={110,150,1000,{mincer=8, mosquito_bald=12, electra=12, buzz=10, zharka_static=8, gravi=8}},
l05_bar={70,90,300,{mosquito_bald=8, mincer=10, electra=10, buzz=5, gravi=8, zharka_static=4}},
l06_rostok={70,100,800,{mincer=7, mosquito_bald=7, electra=10, zharka_static=25, gravi=7, buzz=10}},
l08_yantar={80,110,400,{mosquito_bald=8, mincer=8, electra=10, buzz=8, zharka_static=5, gravi=8}},
l07_military={110,150,1000,{mincer=12 , mosquito_bald=15, electra=12, zharka_static=8, gravi=10, buzz=10}},
l10_radar={120,140,1000,{mincer=14, mosquito_bald=11, electra=15, buzz=10, zharka_static=12, gravi=10}},
l11_pripyat={110,150,900,{mincer=10, mosquito_bald=10, electra=10, zharka_static=8, gravi=10, buzz=10}},
l12_stancia={70,90,700,{mincer=12, mosquito_bald=10, electra=10, buzz=10, zharka_static=7, gravi=8}},
puzir={150,170,450,{mincer=15, mosquito_bald=15, electra=14, buzz=12, zharka_static=5, gravi=14}},
aver={180,190,750,{mincer=12, mosquito_bald=12, electra=16, buzz=15, zharka_static=5, gravi=15}},
marsh={140,180,900,{mincer=13, mosquito_bald=11, electra=12, zharka_static=12, gravi=10, buzz=13}},
limansk={50,60,300,{mosquito_bald=10, mincer=10, electra=15, gravi=10, buzz=10, zharka_static=8}},
hospital={10,20,200,{mincer=8, mosquito_bald=8, electra=7, buzz=8, gravi=5, zharka_static=5}},
red_forest={110,150,400,{mincer=15, mosquito_bald=10, electra=10, zharka_static=8, gravi=10, buzz=10}},
lost_village={80,100,250,{mincer=8, mosquito_bald=8, electra=10, zharka_static=5, gravi=5, buzz=5}},
generators={160,190,350,{mincer=15, mosquito_bald=11, electra=15, zharka_static=5, gravi=10, buzz=16}},
atp_for_test22={160,180,400,{mincer=13, mosquito_bald=10, electra=15, zharka_static=10, gravi=10, buzz=20}},
dead_city={110,150,900,{mincer=10, mosquito_bald=10, electra=10, zharka_static=8, gravi=10, buzz=10}},
zaton={180,190,1000,{electra=15, gravi=15, mincer=12, buzz=15, mosquito_bald=15, zharka_static=5}},
jupiter={180,190,1000,{electra=15, gravi=15, mincer=10, buzz=15, mosquito_bald=15}},
pripyat={140,160,1000,{electra=15, gravi=15, mincer=10, buzz=15, mosquito_bald=15}},
predbannik={100,170,1000,{electra=12, gravi=5, mincer=10, buzz=10, mosquito_bald=15}}
}

local math_random=math.random

local levelsIgnoreArts = {
["l03u_agr_underground"] = true,
["l04u_labx18"] = true,
["l08u_brainlab"] = true,
["l12u_sarcofag"] = true,
["l12u_control_monolith"] = true,
["l10u_bunker"] = true,
["peshera"] = true,
["av_peshera"] = true,
["warlab"] = true,
["jupiter_underground"] = true,
["labx8"] = true,
["cs_agroprom_underground"] = true
}

local arts_sections={
balb_1="af_medusa", -- Медуза
balb_2="af_cristall_flower", -- Каменный цветок
balb_3="af_night_star", -- Ночная звезда
buzz_1="af_ameba_slime", -- Слизь
buzz_2="af_ameba_slug", -- Слизняк
buzz_3="af_ameba_mica", -- Слюда
dummy_1="af_dummy_spring", -- Пружина
dummy_2="af_dummy_dummy", -- Пустышка
dummy_3="af_dummy_battery", -- Батарейка
dummy_4="af_dummy_pellicle", -- Плёнка
dummy_5="af_fuzz_kolobok", -- Колобок
dummy_6="af_dummy_glassbeads", -- Мамины бусы
electra_1="af_electra_sparkler", -- Бенгальский огонь
electra_2="af_electra_flash", -- Вспышка
electra_3="af_electra_moonlight", -- Лунный свет
gravi_1="af_vyvert", -- Выверт
gravi_2="af_gravi", -- Грави
gravi_3="af_gold_fish", -- Золотая рыбка
mincer_1="af_blood", -- Кровь камня
mincer_2="af_mincer_meat", -- Ломоть мяса
mincer_3="af_soul", -- Душа
rusty_1="af_rusty_thorn", -- Колючка
rusty_2="af_rusty_kristall", -- Кристальная колючка
rusty_3="af_rusty_sea-urchin", -- Морской ёж
zharka_1="af_drops", -- Капли
zharka_2="af_fireball", -- Огненный шар
zharka_3="af_cristall" -- Кристалл
}

level_arts={
l01_escape={2,4,{balb_1=24, balb_2=2, balb_3=0, buzz_1=0, buzz_2=0, buzz_3=0, dummy_1=0, dummy_2=0, dummy_3=0, dummy_4=0, dummy_5=0, dummy_6=0, electra_1=9, electra_2=1, electra_3=0, gravi_1=23, gravi_2=5, gravi_3=0, mincer_1=25, mincer_2=0, mincer_3=0, rusty_1=5, rusty_2=0, rusty_3=0, zharka_1=0, zharka_2=0, zharka_3=0}},
l02_garbage={2,4,{balb_1=19, balb_2=5, balb_3=0, buzz_1=0, buzz_2=0, buzz_3=0, dummy_1=0, dummy_2=0, dummy_3=0, dummy_4=0, dummy_5=0, dummy_6=0, electra_1=10, electra_2=0, electra_3=0, gravi_1=25, gravi_2=5, gravi_3=0, mincer_1=20, mincer_2=5, mincer_3=0, rusty_1=5, rusty_2=0, rusty_3=0, zharka_1=0, zharka_2=0, zharka_3=0}},
l03_agroprom={3,6,{balb_1=12, balb_2=5, balb_3=0, buzz_1=10, buzz_2=0, buzz_3=0, dummy_1=0, dummy_2=0, dummy_3=0, dummy_4=0, dummy_5=0, dummy_6=0, electra_1=10, electra_2=5, electra_3=0, gravi_1=13, gravi_2=5, gravi_3=0, mincer_1=10, mincer_2=5, mincer_3=0, rusty_1=5, rusty_2=0, rusty_3=0, zharka_1=10, zharka_2=5, zharka_3=0}},
l03u_agr_underground={1,3,{balb_1=0, balb_2=0, balb_3=0, buzz_1=15, buzz_2=5, buzz_3=3, dummy_1=0, dummy_2=0, dummy_3=0, dummy_4=0, dummy_5=0, dummy_6=0, electra_1=10, electra_2=5, electra_3=3, gravi_1=0, gravi_2=0, gravi_3=0, mincer_1=0, mincer_2=0, mincer_3=0, rusty_1=5, rusty_2=3, rusty_3=3, zharka_1=5, zharka_2=5, zharka_3=0}},
l04_darkvalley={6,8,{balb_1=1, balb_2=9, balb_3=0, buzz_1=10, buzz_2=3, buzz_3=0, dummy_1=1, dummy_2=1, dummy_3=1, dummy_4=0, dummy_5=1, dummy_6=1, electra_1=5, electra_2=9, electra_3=0, gravi_1=5, gravi_2=8, gravi_3=0, mincer_1=5, mincer_2=10, mincer_3=0, rusty_1=5, rusty_2=2, rusty_3=0, zharka_1=5, zharka_2=5, zharka_3=0}},
l04u_labx18={1,3,{balb_1=0, balb_2=0, balb_3=0, buzz_1=0, buzz_2=0, buzz_3=0, dummy_1=0, dummy_2=0, dummy_3=0, dummy_4=0, dummy_5=2, dummy_6=0, electra_1=0, electra_2=0, electra_3=0, gravi_1=0, gravi_2=0, gravi_3=0, mincer_1=3, mincer_2=3, mincer_3=2, rusty_1=2, rusty_2=2, rusty_3=1, zharka_1=5, zharka_2=5, zharka_3=2}},
l05_bar={2,4,{balb_1=18, balb_2=7, balb_3=0, buzz_1=5, buzz_2=3, buzz_3=0, dummy_1=1, dummy_2=1, dummy_3=0, dummy_4=1, dummy_5=1, dummy_6=0, electra_1=10, electra_2=0, electra_3=0, gravi_1=18, gravi_2=0, gravi_3=0, mincer_1=20, mincer_2=0, mincer_3=0, rusty_1=5, rusty_2=3, rusty_3=0, zharka_1=0, zharka_2=0, zharka_3=0}},
l06_rostok={2,5,{balb_1=0, balb_2=2, balb_3=2, buzz_1=5, buzz_2=0, buzz_3=0, dummy_1=0, dummy_2=1, dummy_3=1, dummy_4=1, dummy_5=0, dummy_6=0, electra_1=8, electra_2=10, electra_3=0, gravi_1=0, gravi_2=0, gravi_3=0, mincer_1=0, mincer_2=2, mincer_3=2, rusty_1=10, rusty_2=10, rusty_3=5, zharka_1=20, zharka_2=10, zharka_3=5}},
l08_yantar={4,8,{balb_1=1, balb_2=3, balb_3=2, buzz_1=8, buzz_2=5, buzz_3=1, dummy_1=1, dummy_2=1, dummy_3=0, dummy_4=1, dummy_5=0, dummy_6=0, electra_1=8, electra_2=5, electra_3=2, gravi_1=8, gravi_2=5, gravi_3=2, mincer_1=6, mincer_2=5, mincer_3=2, rusty_1=9, rusty_2=3, rusty_3=2, zharka_1=8, zharka_2=5, zharka_3=2}},
l08u_brainlab={2,4,{balb_1=0, balb_2=0, balb_3=0, buzz_1=0, buzz_2=0, buzz_3=0, dummy_1=1, dummy_2=1, dummy_3=0, dummy_4=0, dummy_5=1, dummy_6=0, electra_1=0, electra_2=0, electra_3=0, gravi_1=0, gravi_2=0, gravi_3=0, mincer_1=0, mincer_2=2, mincer_3=2, rusty_1=0, rusty_2=2, rusty_3=3, zharka_1=5, zharka_2=5, zharka_3=1}},
l07_military={4,7,{balb_1=2, balb_2=4, balb_3=2, buzz_1=8, buzz_2=2, buzz_3=0, dummy_1=0, dummy_2=1, dummy_3=1, dummy_4=0, dummy_5=1, dummy_6=0, electra_1=8, electra_2=5, electra_3=2, gravi_1=3, gravi_2=5, gravi_3=3, mincer_1=6, mincer_2=5, mincer_3=5, rusty_1=8, rusty_2=5, rusty_3=2, zharka_1=6, zharka_2=5, zharka_3=3}},
l10_radar={4,8,{balb_1=3, balb_2=5, balb_3=5, buzz_1=5, buzz_2=5, buzz_3=0, dummy_1=0, dummy_2=0, dummy_3=0, dummy_4=0, dummy_5=0, dummy_6=1, electra_1=5, electra_2=4, electra_3=3, gravi_1=4, gravi_2=3, gravi_3=3, mincer_1=6, mincer_2=6, mincer_3=5, rusty_1=7, rusty_2=6, rusty_3=5, zharka_1=5, zharka_2=5, zharka_3=5}},
l11_pripyat={4,7,{balb_1=3, balb_2=3, balb_3=3, buzz_1=8, buzz_2=4, buzz_3=3, dummy_1=1, dummy_2=2, dummy_3=1, dummy_4=1, dummy_5=1, dummy_6=1, electra_1=4, electra_2=4, electra_3=3, gravi_1=3, gravi_2=3, gravi_3=3, mincer_1=4, mincer_2=4, mincer_3=3, rusty_1=7, rusty_2=5, rusty_3=4, zharka_1=7, zharka_2=4, zharka_3=4}},
l12_stancia={2,4,{balb_1=2, balb_2=3, balb_3=3, buzz_1=7, buzz_2=4, buzz_3=3, dummy_1=1, dummy_2=1, dummy_3=1, dummy_4=1, dummy_5=1, dummy_6=1, electra_1=7, electra_2=4, electra_3=3, gravi_1=6, gravi_2=4, gravi_3=3, mincer_1=3, mincer_2=6, mincer_3=4, rusty_1=7, rusty_2=4, rusty_3=3, zharka_1=7, zharka_2=4, zharka_3=3}},
l12u_sarcofag={1,3,{balb_1=0, balb_2=0, balb_3=0, buzz_1=0, buzz_2=0, buzz_3=0, dummy_1=1, dummy_2=1, dummy_3=1, dummy_4=1, dummy_5=1, dummy_6=1, electra_1=2, electra_2=2, electra_3=4, gravi_1=0, gravi_2=0, gravi_3=0, mincer_1=0, mincer_2=0, mincer_3=2, rusty_1=0, rusty_2=3, rusty_3=6, zharka_1=0, zharka_2=2, zharka_3=2}},
l12u_control_monolith={1,3,{balb_1=0, balb_2=0, balb_3=0, buzz_1=0, buzz_2=0, buzz_3=0, dummy_1=0, dummy_2=0, dummy_3=0, dummy_4=0, dummy_5=0, dummy_6=2, electra_1=0, electra_2=1, electra_3=1, gravi_1=0, gravi_2=0, gravi_3=0, mincer_1=0, mincer_2=0, mincer_3=2, rusty_1=0, rusty_2=0, rusty_3=2, zharka_1=0, zharka_2=0, zharka_3=0}},
l12_stancia_2={2,4,{balb_1=2, balb_2=2, balb_3=1, buzz_1=2, buzz_2=2, buzz_3=1, dummy_1=1, dummy_2=1, dummy_3=0, dummy_4=0, dummy_5=1, dummy_6=1, electra_1=0, electra_2=0, electra_3=2, gravi_1=2, gravi_2=2, gravi_3=1, mincer_1=0, mincer_2=0, mincer_3=1, rusty_1=0, rusty_2=0, rusty_3=2, zharka_1=0, zharka_2=2, zharka_3=1}},
l10u_bunker={1,3,{balb_1=0, balb_2=0, balb_3=0, buzz_1=0, buzz_2=0, buzz_3=0, dummy_1=0, dummy_2=0, dummy_3=0, dummy_4=0, dummy_5=0, dummy_6=1, electra_1=0, electra_2=0, electra_3=0, gravi_1=0, gravi_2=0, gravi_3=0, mincer_1=0, mincer_2=0, mincer_3=0, rusty_1=0, rusty_2=0, rusty_3=3, zharka_1=0, zharka_2=2, zharka_3=2}},
atp_for_test22={4,8,{balb_1=2, balb_2=4, balb_3=3, buzz_1=4, buzz_2=2, buzz_3=1, dummy_1=0, dummy_2=0, dummy_3=0, dummy_4=0, dummy_5=0, dummy_6=0, electra_1=5, electra_2=5, electra_3=2, gravi_1=6, gravi_2=4, gravi_3=3, mincer_1=4, mincer_2=4, mincer_3=1, rusty_1=7, rusty_2=4, rusty_3=0, zharka_1=3, zharka_2=2, zharka_3=0}},
peshera={1,3,{balb_1=0, balb_2=0, balb_3=0, buzz_1=0, buzz_2=0, buzz_3=0, dummy_1=1, dummy_2=1, dummy_3=1, dummy_4=0, dummy_5=1, dummy_6=0, electra_1=1, electra_2=2, electra_3=2, gravi_1=0, gravi_2=0, gravi_3=0, mincer_1=0, mincer_2=0, mincer_3=0, rusty_1=0, rusty_2=1, rusty_3=3, zharka_1=2, zharka_2=3, zharka_3=4}},
puzir={2,4,{balb_1=3, balb_2=3, balb_3=0, buzz_1=12, buzz_2=8, buzz_3=5, dummy_1=0, dummy_2=0, dummy_3=0, dummy_4=0, dummy_5=0, dummy_6=0, electra_1=12, electra_2=5, electra_3=0, gravi_1=5, gravi_2=5, gravi_3=0, mincer_1=10, mincer_2=5, mincer_3=0, rusty_1=5, rusty_2=2, rusty_3=0, zharka_1=5, zharka_2=5, zharka_3=0}},
aver={4,8,{balb_1=2, balb_2=3, balb_3=3, buzz_1=8, buzz_2=6, buzz_3=4, dummy_1=1, dummy_2=1, dummy_3=1, dummy_4=1, dummy_5=1, dummy_6=0, electra_1=7, electra_2=5, electra_3=2, gravi_1=6, gravi_2=4, gravi_3=3, mincer_1=5, mincer_2=4, mincer_3=1, rusty_1=7, rusty_2=4, rusty_3=4, zharka_1=4, zharka_2=4, zharka_3=1}},
av_peshera={4,8,{balb_1=0, balb_2=0, balb_3=0, buzz_1=0, buzz_2=0, buzz_3=0, dummy_1=1, dummy_2=1, dummy_3=1, dummy_4=0, dummy_5=1, dummy_6=0, electra_1=4, electra_2=4, electra_3=1, gravi_1=0, gravi_2=0, gravi_3=0, mincer_1=0, mincer_2=0, mincer_3=0, rusty_1=2, rusty_2=5, rusty_3=3, zharka_1=5, zharka_2=3, zharka_3=2}},
limansk={2,4,{balb_1=2, balb_2=4, balb_3=5, buzz_1=5, buzz_2=5, buzz_3=0, dummy_1=2, dummy_2=2, dummy_3=0, dummy_4=0, dummy_5=0, dummy_6=2, electra_1=5, electra_2=5, electra_3=5, gravi_1=5, gravi_2=5, gravi_3=5, mincer_1=4, mincer_2=5, mincer_3=5, rusty_1=5, rusty_2=5, rusty_3=5, zharka_1=5, zharka_2=5, zharka_3=2}},
hospital={1,3,{balb_1=1, balb_2=1, balb_3=1, buzz_1=7, buzz_2=4, buzz_3=3, dummy_1=1, dummy_2=1, dummy_3=1, dummy_4=1, dummy_5=1, dummy_6=0, electra_1=2, electra_2=0, electra_3=0, gravi_1=2, gravi_2=0, gravi_3=0, mincer_1=2, mincer_2=0, mincer_3=0, rusty_1=2, rusty_2=0, rusty_3=0, zharka_1=0, zharka_2=0, zharka_3=0}},
generators={4,8,{balb_1=2, balb_2=4, balb_3=3, buzz_1=0, buzz_2=0, buzz_3=0, dummy_1=5, dummy_2=5, dummy_3=1, dummy_4=1, dummy_5=1, dummy_6=0, electra_1=4, electra_2=4, electra_3=3, gravi_1=4, gravi_2=3, gravi_3=3, mincer_1=5, mincer_2=4, mincer_3=3, rusty_1=0, rusty_2=9, rusty_3=0, zharka_1=7, zharka_2=4, zharka_3=4}},
warlab={1,3,{balb_1=0, balb_2=0, balb_3=0, buzz_1=0, buzz_2=0, buzz_3=0, dummy_1=1, dummy_2=1, dummy_3=0, dummy_4=0, dummy_5=0, dummy_6=0, electra_1=2, electra_2=1, electra_3=0, gravi_1=0, gravi_2=0, gravi_3=0, mincer_1=0, mincer_2=0, mincer_3=0, rusty_1=0, rusty_2=2, rusty_3=2, zharka_1=0, zharka_2=2, zharka_3=1}},
red_forest={4,8,{balb_1=3, balb_2=9, balb_3=5, buzz_1=5, buzz_2=5, buzz_3=0, dummy_1=2, dummy_2=2, dummy_3=0, dummy_4=0, dummy_5=0, dummy_6=0, electra_1=5, electra_2=4, electra_3=3, gravi_1=4, gravi_2=3, gravi_3=3, mincer_1=6, mincer_2=6, mincer_3=5, rusty_1=6, rusty_2=6, rusty_3=2, zharka_1=2, zharka_2=3, zharka_3=4}},
lost_village={1,3,{balb_1=0, balb_2=1, balb_3=1, buzz_1=3, buzz_2=0, buzz_3=0, dummy_1=0, dummy_2=0, dummy_3=0, dummy_4=0, dummy_5=0, dummy_6=0, electra_1=2, electra_2=0, electra_3=0, gravi_1=3, gravi_2=0, gravi_3=0, mincer_1=2, mincer_2=0, mincer_3=0, rusty_1=0, rusty_2=0, rusty_3=0, zharka_1=1, zharka_2=0, zharka_3=0}},
marsh={8,10,{balb_1=2, balb_2=3, balb_3=3, buzz_1=7, buzz_2=4, buzz_3=3, dummy_1=1, dummy_2=1, dummy_3=1, dummy_4=1, dummy_5=1, dummy_6=0, electra_1=9, electra_2=4, electra_3=1, gravi_1=6, gravi_2=4, gravi_3=3, mincer_1=6, mincer_2=4, mincer_3=3, rusty_1=10, rusty_2=4, rusty_3=0, zharka_1=7, zharka_2=5, zharka_3=1}},
dead_city={3,6,{balb_1=4, balb_2=4, balb_3=3, buzz_1=3, buzz_2=0, buzz_3=0, dummy_1=0, dummy_2=0, dummy_3=0, dummy_4=0, dummy_5=0, dummy_6=0, electra_1=3, electra_2=2, electra_3=0, gravi_1=4, gravi_2=3, gravi_3=1, mincer_1=5, mincer_2=3, mincer_3=0, rusty_1=0, rusty_2=0, rusty_3=0, zharka_1=3, zharka_2=1, zharka_3=0}},
zaton={8,10,{balb_1=2, balb_2=3, balb_3=3, buzz_1=7, buzz_2=4, buzz_3=3, dummy_1=1, dummy_2=1, dummy_3=1, dummy_4=1, dummy_5=0, dummy_6=1, electra_1=7, electra_2=4, electra_3=3, gravi_1=4, gravi_2=4, gravi_3=3, mincer_1=4, mincer_2=4, mincer_3=3, rusty_1=7, rusty_2=4, rusty_3=3, zharka_1=7, zharka_2=4, zharka_3=3}},
jupiter={8,10,{balb_1=2, balb_2=3, balb_3=3, buzz_1=10, buzz_2=5, buzz_3=3, dummy_1=1, dummy_2=1, dummy_3=1, dummy_4=1, dummy_5=0, dummy_6=1, electra_1=7, electra_2=4, electra_3=3, gravi_1=6, gravi_2=4, gravi_3=3, mincer_1=6, mincer_2=4, mincer_3=3, rusty_1=7, rusty_2=4, rusty_3=3, zharka_1=7, zharka_2=4, zharka_3=3}},
pripyat={4,8,{balb_1=2, balb_2=3, balb_3=3, buzz_1=0, buzz_2=0, buzz_3=0, dummy_1=1, dummy_2=1, dummy_3=1, dummy_4=0, dummy_5=0, dummy_6=1, electra_1=7, electra_2=4, electra_3=3, gravi_1=6, gravi_2=4, gravi_3=3, mincer_1=6, mincer_2=4, mincer_3=3, rusty_1=7, rusty_2=4, rusty_3=3, zharka_1=3, zharka_2=2, zharka_3=1}},
jupiter_underground={3,6,{balb_1=0, balb_2=0, balb_3=0, buzz_1=5, buzz_2=3, buzz_3=0, dummy_1=1, dummy_2=1, dummy_3=1, dummy_4=1, dummy_5=1, dummy_6=0, electra_1=3, electra_2=2, electra_3=3, gravi_1=0, gravi_2=0, gravi_3=0, mincer_1=0, mincer_2=0, mincer_3=0, rusty_1=0, rusty_2=2, rusty_3=5, zharka_1=0, zharka_2=3, zharka_3=2}},
labx8={1,3,{balb_1=0, balb_2=0, balb_3=0, buzz_1=0, buzz_2=0, buzz_3=0, dummy_1=0, dummy_2=0, dummy_3=0, dummy_4=0, dummy_5=3, dummy_6=0, electra_1=1, electra_2=1, electra_3=1, gravi_1=0, gravi_2=0, gravi_3=0, mincer_1=0, mincer_2=0, mincer_3=0, rusty_1=0, rusty_2=0, rusty_3=3, zharka_1=0, zharka_2=0, zharka_3=2}},
cs_agroprom_underground={1,3,{balb_1=0, balb_2=0, balb_3=0, buzz_1=3, buzz_2=2, buzz_3=0, dummy_1=2, dummy_2=2, dummy_3=0, dummy_4=0, dummy_5=0, dummy_6=0, electra_1=2, electra_2=2, electra_3=0, gravi_1=0, gravi_2=0, gravi_3=0, mincer_1=0, mincer_2=0, mincer_3=0, rusty_1=0, rusty_2=1, rusty_3=2, zharka_1=0, zharka_2=0, zharka_3=2}},
predbannik={2,4,{balb_1=9, balb_2=0, balb_3=0, buzz_1=3, buzz_2=0, buzz_3=0, dummy_1=0, dummy_2=0, dummy_3=0, dummy_4=0, dummy_5=0, dummy_6=0, electra_1=3, electra_2=0, electra_3=0, gravi_1=5, gravi_2=0, gravi_3=0, mincer_1=5, mincer_2=0, mincer_3=0, rusty_1=0, rusty_2=0, rusty_3=0, zharka_1=0, zharka_2=0, zharka_3=0}},
garbage_old={3,6,{balb_1=9, balb_2=2, balb_3=0, buzz_1=4, buzz_2=0, buzz_3=0, dummy_1=0, dummy_2=0, dummy_3=0, dummy_4=0, dummy_5=0, dummy_6=0, electra_1=4, electra_2=1, electra_3=0, gravi_1=8, gravi_2=5, gravi_3=0, mincer_1=10, mincer_2=4, mincer_3=0, rusty_1=3, rusty_2=0, rusty_3=0, zharka_1=3, zharka_2=0, zharka_3=0}},
yantar_old={3,6,{balb_1=9, balb_2=2, balb_3=0, buzz_1=4, buzz_2=0, buzz_3=0, dummy_1=2, dummy_2=2, dummy_3=0, dummy_4=0, dummy_5=0, dummy_6=0, electra_1=5, electra_2=2, electra_3=0, gravi_1=10, gravi_2=5, gravi_3=0, mincer_1=10, mincer_2=5, mincer_3=0, rusty_1=2, rusty_2=1, rusty_3=0, zharka_1=2, zharka_2=3, zharka_3=0}},
swamp_old={3,6,{balb_1=7, balb_2=2, balb_3=0, buzz_1=10, buzz_2=3, buzz_3=0, dummy_1=1, dummy_2=1, dummy_3=0, dummy_4=0, dummy_5=0, dummy_6=0, electra_1=3, electra_2=1, electra_3=0, gravi_1=10, gravi_2=5, gravi_3=0, mincer_1=7, mincer_2=3, mincer_3=0, rusty_1=2, rusty_2=0, rusty_3=0, zharka_1=3, zharka_2=1, zharka_3=0}}
}

local game_vertexes={
l01_escape={0,251},
l02_garbage={252,415},
l03_agroprom={416,702},
l03u_agr_underground={703,810},
l04_darkvalley={811,1108},
l04u_labx18={1109,1167},
l05_bar={1168,1307},
l06_rostok={1308,1437},
l08_yantar={1438,1528},
l08u_brainlab={1529,1544},
l07_military={1545,1861},
l10_radar={1862,2116},
l11_pripyat={2117,2272},
l12_stancia={2273,2401},
l12u_sarcofag={2402,2466},
l12u_control_monolith={2467,2516},
l12_stancia_2={2517,2660},
l10u_bunker={2661,2791},
atp_for_test22={2792,2861},
peshera={2862,2880},
puzir={2881,2885},
aver={2886,2908},
av_peshera={2909,2987},
limansk={2988,3027},
hospital={3028,3075},
generators={3076,3152},
warlab={3153,3223},
red_forest={3224,3323},
lost_village={3324,3336},
marsh={3337,3581},
dead_city={3582,3659},
zaton={3660,3699},
jupiter={3700,3747},
pripyat={3748,3770},
jupiter_underground={3771,3829},
labx8={3830,3850},
cs_agroprom_underground={3851,3869},
predbannik={3870,4031},
garbage_old={4032,4337},
yantar_old={4338,4384},
swamp_old={4385,4399}
}

local level_vertexes={
l01_escape=594270,
l02_garbage=382646,
l03_agroprom=437385,
l03u_agr_underground=4810,
l04_darkvalley=385716,
l04u_labx18=7565,
l05_bar=89145,
l06_rostok=67569,
l08_yantar=140884,
l08u_brainlab=7724,
l07_military=418224,
l10_radar=227100,
l11_pripyat=260016,
l12_stancia=472560,
l12u_sarcofag=10620,
l12u_control_monolith=3971,
l12_stancia_2=261400,
l10u_bunker=8723,
atp_for_test22=1043966,
peshera=32109,
puzir=366675,
aver=1765298,
av_peshera=172361,
limansk=60467,
hospital=7818,
generators=625954,
warlab=7747,
red_forest=165896,
lost_village=48854,
marsh=528954,
dead_city=531706,
zaton=1843840,
jupiter=1425786,
pripyat=427661,
jupiter_underground=40830,
labx8=5799,
cs_agroprom_underground=4856,
predbannik=1216832,
garbage_old=1228368,
yantar_old=585301,
swamp_old=1735357
}

function add_arts()
 local sim = alife()
 local obj
 for a = 1, 65534 do
  obj = sim:object(a)
  if not levelsIgnoreArts[level.name()] then
     generate_arts()
  end
 end
end

function generate_arts()
 local lname=level.name()
 if not level_vertexes[lname] then
   return
 end
 local v=level_arts[lname]
 if v then
   local cnt,mxx=0,math_random(v[1],v[2])
   while cnt<mxx do
    if generate_art(lname) then
      cnt=cnt+1
   end
   end
 end
end

function generate_art(lname)
 local gvn,gvx,lvx = game_vertexes[lname][1], game_vertexes[lname][2], level_vertexes[lname]
 local new_lv=math_random(1,lvx)
 local pos = level.vertex_position(new_lv)
 local new_gv = 0
 local min_dist = 100000
 for a = gvn, gvx, 1 do
   g1 = game_graph():vertex(a):game_point()
   if g1:distance_to(pos)<min_dist then
     min_dist = g1:distance_to(pos)
     new_gv = a
   end
 end
 if game_graph():valid_vertex_id(new_gv) then
    return spawn_rand_arts(pos,new_gv,new_lv,lname)
 end
end

function spawn_rand_arts(pos,gv,lv,lname)
 local rnd_max=0
 for k,v in pairs(level_anoms[lname][4]) do
    rnd_max=rnd_max+v
 end
 local rnd=0
 rnd=math_random()*rnd_max
 for k,v in pairs(level_arts[lname][3]) do
   if rnd<=v then
     section=arts_sections[k]
     break
   end
   rnd=rnd-v
 end
 return spawn_art(section,pos,gv,lv)
end

function spawn_art(section,pos,gv,lv)
 local sobj
 sobj=spawn_arts(section,pos,gv,lv)
 if sobj then
   return sobj
 end
end

function spawn_arts(spawn_item, pos, gv,lv)
  if gv==nil then
     gv=db.actor:game_vertex_id()
  end
  if lv==nil then
    lv=db.actor:level_vertex_id()
  end
  return alife():create(spawn_item, pos, lv, gv)
end

 

 

 

Но почему-то ловлю вылет:

FATAL ERROR

[error]Expression : m_available_count
[error]Function : CID_Generator::tfGetID
[error]File : e:\stalker\sources\trunk\xr_3da\xrgame\id_generator.h
[error]Line : 92
[error]Description : Not enough IDs

stack trace:

 

 

Собственно, вопрос: почему? Что сделал не так?

 

 

 

Сталкер - наше всё!

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


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

 

 

Зачем вызывать функцию спавна артов (generate_arts()) много (несколько тысяч) раз?

Говорю же, пытался вытащить из Солянки. Может, что и неправильно вытащил.

 

 

 

AndrewMor сказал(а)local math_random=math.randomlocal math_random = function (min, max) return math.random(min,max) end

Так в Соляночном скрипте прописано. И скрипт-то исправно работал.


 

 

если судить по логу то похоже что артефактов спавнится дофига.

Похоже, что так. Отсюда и вопрос: почему? И что сделано не так?

Сталкер - наше всё!

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


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

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

Сталкер - наше всё!

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


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

losiara, приведенная тобой функция сама по себе ничего и никого не спавнит, она только вызывает соответствующие функции для спавна чего/кого (monsters_spawn.bloodsucker_esc, monsters_spawn.esc_zombie_1, random_spawn.random_spawn_agr_dog, random_spawn.random_spawn_td_krovosos, random_spawn.random_spawn_dar_bandit1, npc_spawn.rostok_killer, npc_spawn.ros_ecolog, monsters_spawn.aes_zombie, npc_spawn.stalker_zombied_aes2_2). Копай их, явно там назначается story_id, и при повторном вызове функции ты получаешь вылет.

Сталкер - наше всё!

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


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

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

Сталкер - наше всё!

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


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

 

 

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

Лог врать не будет. Если есть объект с таким же SID-ом, будет этот вылет. Каким-то образом твоя функция пересекается с другой/другими, присваивающими СИД

Сталкер - наше всё!

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


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

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