Так, дело движется, мод - строится.......
Спасибо Arist, а то я бы и дальше тупил, где подключать функции в bind_stalker.
Да к стати Arist, если так подумать, то мне кажется что места где можно спрятаться от выброса либо прописаны в одном из скриптов (наверняка там где то указаны координаты каждого убежища либо это как то привязано к гулагам)
И такой вопросик на последок....
Можно ли в модели ogg вместо пути к текстуре указать путь к файлу .ltx, это помогло бы сменять текстуры и сделать видимость смены рук при смене костюмов. А если нет, то можно как нибудь заставить игру переименовывать файлы ну или заставить думать что этот файл называется по другому??
добавлено спустя 13 минут
Arist
Нашёл, уже :-cool)
в файле ogsm_surge.script записаны координаты "убежишь", осталось лишь координаты новых уктытий записать и дело в шляпе !:buba
отредактировал(а) PoG ne Riba: 11-02-2012 12:31 GMT3 час.
Arist
я то не забыл, но вот подключить силу выброса забыл, на болотах, к примеру выброс вообще не вредит.
а размеры наверняка одни и теже используются, не подумал об этом ?
добавлено спустя 1 минуту
хотя если честно меня сейчас заботит совмещение с этим выбросом мод ai, а то там одни и теже скрипты используются
добавлено спустя 1 минуту
Я сейчас сделаю новое меню для своего мода, а потом опять полазаю в скриптах, там не сложно, надо лишь немного помозговать
отредактировал(а) PoG ne Riba: 11-02-2012 13:43 GMT3 час.
PoG ne Riba
l01 - это часть названия локации.Если ПЫСы назвали бы просто escape,так бы и было.А если бы Сообщество Мапперов указывало бы на выходе из СДК ,l13_boloto,так бы и называлось.Номер ничего не значит.
Это только к примеру?Если взять МапПак,к примеру.Есть "дебильный" метот(сам делал).
1.Ставишь МапПак.
2.Распаковываешь all.spawn.
3.Открываешь acdc.pl и находишь там:
package levels;
use strict;
use constant levels_info => (
{ gvid0 =>3700, },
{ gvid0 => 3337, name => 'marsh' },
{ gvid0 => 3324, name => 'lost_village' },
{ gvid0 => 3224, name => 'red_forest' },
{ gvid0 => 3153, name => 'warlab' },
{ gvid0 => 3076, name => 'generators' },
{ gvid0 => 3028, name => 'hospital' },
{ gvid0 => 2988, name => 'limansk' },
{ gvid0 => 2909, name => 'av_peshera' },
{ gvid0 => 2886, name => 'aver' },
{ gvid0 => 2881, name => 'puzir' },
{ gvid0 => 2862, name => 'peshera' },
{ gvid0 => 2792, name => 'atp_for_test22' },
{ gvid0 => 2661, name => 'l10u_bunker' },
Вычеркиваешь ненужную локу.
4.Там же в acdc,файл all.ltx. Вычеркиваеш ненужную локу.
5.Собираешь all.spawn и кидаешь в игру.
6.Из папки levels выкидываешь ненужную локацию и из других папок ненужный мусор связанный с ней.
Если выкинуть таким методом:пещеру,логово,какую-нибудь не сквозную(Как Свалка) локацию,метод пойдёт,а с проходной локой,обориётся связь между геймграфами и соответственно стрелка,напрвляющая на цель квеста,будет показывать неправильно,плюс НПСи не смогут переходить на другие локи,плюс,наверняка останется много текстурного мусора.Наверно ещё есть плюсы(ТОчнее минусы).
Но если одну,две локи - давай.
Возможно нам придётся переделывать и старые укрытия.Сделал в МГ четыре,а там ещё два,и одно за оградой.Я думаю координаты у скриптовых рестрикторов посбивались из-за новых лок.
отредактировал(а) Arist: 11-02-2012 16:09 GMT3 час.
Arist
Я так и не смог настроить выбрас на других локах. Названия нужно правильно писать. Хорошо хоть есть мод такой, а там уже сами разберёмя..... там в скриптах вроде 2 функции укрытия, для гг и для нпс. Тут всё ясно, а вот с позициями укрытий намудрили. Я лично вижу лишь 2 координаты и радиус зоны, а где параметр высоты ??? Непонятно
REKSID1
у тебя постоянно одни вылеты
зырь там где делал последние изменения, откат короче говоря, а вообще то нужно следить за той последовательностью изменений которую ты вносишь в игру. (у меня была такая фигня, был вылет без лога на ростке, пришлось всё с нуля делать)
Выброс на новых локациях должен появиться автоматически.А вот координаты рестрикторов,мне по крайней мере придётся менять.Для ГГ,файл ogsm_hideout.script, функция function first_run()
-- Бункер Сидора
spawn_restrictor("l01_escape", vector():set(-249.9,-24.8,-134.4), 10136, 7, "fake_", 3) -- где 3 - размер рестриктора.Дальше. В файле ogsm_surge есть функция
-- Обновление менеджера выброса. Вызывается из актор-байндера
function update_surge()
**************----******
if level_name == "l01_escape" then
if actor_in_zone(-211,-198,-132,-125,-23,-20) == 1 or -- Подвал 1 в лагере новичков
actor_in_zone(-256,-246,-137,-132,-25,-20) == 1 or -- Бункер Сидора и т. д.
Шесть цифр.Представь параллелепипед.Первые четыре цыфры - это его основание,последние две - высота.Координата Сидора по Х -249,9
Первые две цифры второй функции -256 и -246.Это и есть размер по Х.(256-246=10) и сразу же и координаты.
Дальше -24,8 - высота.Во второй функции,высота последние цифры -23 и -20(Размер 3)
И последняя в рестрикторе цифра:-- -134.4.Это ширина нашего параллелепипеда.Ей соответствуют
цыфры -137 и-132.Сразу же и координаты.Размер = 5.
И эти же данные есть в первом файле ogsm_hideout.script
function is_in_specific_zone(npc)
if npc_in_zone(npc,"l01_escape",-256,-246,-137,-132,-25,-20) or -- Бункер Сидора
Я,правда, новые убежища добавил в следующую функцию:
function is_in_hide(npc)
if npc_in_zone(npc,"l01_escape",-211,-198,-132,-125,-23,-20) or -- Подвал 1 в лагере новичков
Хотя, это наверное, одно и то же.Непонятно,почему убежища военных(их 2) на Блокпосте,бандитов(АТП),элеватор,свиноферма и у Лиса есть только рестриктор,а они работают.
Скорей всего я перемудрил,но мои укрытия тоже работают.
Arist
Ну раз работают, значит хорошо....
А вот про выброс на других локах. У меня на них есть тоже выброс но он не наносит урона ГГ и нет радиации вообще..
Да и я ни как не могу к этому моду подключить мод ai_add, там функции из xr_logic вызываются, я их добавлял но игра вылетает с одним и тем же логом, наверно в xr_motivator ошибся
добавлено спустя 1 час 13 минут
У меня вопросик. Можно ли задать свой таймер, чтобы он циклично выдавал один и тот же ифопоршень через заданный промежуток времени (скажем, через несколько часов)
отредактировал(а) PoG ne Riba: 11-02-2012 19:55 GMT3 час.
Я попытался решить проблему с вылетом, но на место старого вылета пришел новый. Лог вылета: Expression : fatal error
Function : CInifile::r_string
File : E:\stalker\patch_1_0004\xrCore\Xr_ini.cpp
Line : 352
Description :
Arguments : Can't find variable type in [smart_terrain]
puma-sniper вылет на 20 строку файла _g.script, происходит не из-за косяка самого файла, а данных, которые передаются в эту строку. Могу тебе сказать, что у меня этот вылет связан в основном в ошибке логики НПС (логические, синтаксические), поскольку я 80% времени отведённых на модинг провожу именно с логикой. Но это далеко не единственная причина, их может быть куда больше. Вот комментарии уважаемых мной людей:
Ошибка распространённая. На первый взгляд кажется, что ошибка как раз в скриптах, но всё может быть иначе. Делаем так: открываем файл _g.script блокнотом, закоменчиваем 20 строку (ставим перед строкой --) и идём к тому месту где поймали вылет. Так мы получим более развёрнутый ответ. Участник:Призрак: Автор прав в том что вылет очень распространен, но так его исправлять нельзя, т.к. nil передается в эту функцию только при каком-то форс мажоре. Поэтому необходимо перейти в _g.script в функцию printf и перед log1(string.format(fmr,..)) дописать: get_console():execute("load "..fmt). После этого запустить еще раз игру и посмотреть при передачи какой строки игра вылетает. Потом найти эту строку в скриптах игры и прикинуть почему аргумент (у нас это аргумент №2 (bad argument #2)) равен nil
.
Что касается второго вылета: "Can't find variable type in [smart_terrain]", то это вероятно причины того, что ты пытаешься удалить локацию на которой размещены гулаги, которые в свою очередь прописаны в скриптах, а поскольку ты удалил локацию, то и данные для гулага брать не от куда. Вот собственно и делай вывода...
Оброщаюсь с Уважением, окончательно отчаявшись к Мастерам скриптования и к гуру логики.......
Прочитал я кучу разных статей, на многих сайтах и так и не смог разобраться с созданием новых скриптов
Во многих статьях, где обучали делать моды есть такие места как "создайте новый скрипт" и тут я упёрся лбом в стену непонимания. Дело в том, что я ни как не могу удачно создать новый скрипт так, чтобы его функции выполнялись. Мне нужна простая функция спавна мобов, точнее импровизированная версия респавна мутантов. Я собираюсь спавнить мутантов таким образом:
к примеру скрипт называется spawn_mob.script
function spawn_monster()
alife():create("m_flesh_e",vector(0,0,0):set(-208.064193725586,-22.534460067749,-128.362594604492),0,0)
end
теперь на сколько я знаю нужно вызвать этот инфопоршень с помощью, скажем диалога
spawn_mob.spawn_monster
Объясните мне, делаю ли я всё правильно, если нет то что не так, и как задать таймер, который будет циклично выдавать этот поршень через заданное кол-во времени....
Зарание спасибо, надеюсь на помощь
п.с. Нужно ли где ни будь регистрировать новый скрипт?
Всё ты делаешь правильно.Я не знаю,как делать по таймеру,но если поставишь "Выброс",то можешь в файл ogsm_surge.script дополнить функцию:
-- Вызов спавна артефактов для каждого уровня
function spawn_arts()
local level_name = level.name()
if level_name == "l01_escape" then
proceed_art_spawn("af_medusa", 1)
proceed_art_spawn("af_vyvert", 1)
proceed_art_spawn("af_blood", 1)
proceed_art_spawn("af_electra_sparkler", 1) proceed_art_spawn("boar_weak", 1)
proceed_art_spawn("dog_strong", 1)
end
if level_name == "l02_garbage" or level_name == "l03_agroprom" then
proceed_art_spawn("af_cristall_flower", 1)
proceed_art_spawn("af_gravi", 1)
proceed_art_spawn("af_rusty_thorn", 1)
proceed_art_spawn("af_mincer_meat", 1) proceed_art_spawn("gigant_strong", 1)
end
Или пусть монстры спавнятся каждый раз,когда ты переходишь на новую локу.И опять же вопрос,откуда автор взял вертексы локаций?
Извините ,что не для всех уровней,исправлюсь Так,таблица у нас есть ,теперь нам нужно написать функцию спавна.
Давайте покажу на Монстрах создадим таблицу с секциями спавна монстров:
Таблицу записали ,наконец приступим к оформлению главной функции
function spawn_monster()
local count = math.random(5,20) --выбираем кол-во заспавненых мобов
local section = mutants[math.random(table.getn(mutants))] -- выбираем секцию моба
local lv = math.random(level_vertexes[level.name()]["lvid"]) --выбираем левел вертекс
local gv = level_vertexes[level.name()]["gvid"] --выбираем гэйм вертекс
for ind = 1, count do
alife():create(section, level.vertex_position(lv), lv, gv)--\\level.vertex_position(lv) - позиция левел вертекса
end
end
Далее помещаем вызов функции в bind_stalker.script в net_spawn() и при каждой загрузке будут спавнится мобы в рандомной точке.
--' Загружаем настройки дропа
death_manager.init_drop_settings()
spawn_mob.spawn_monster()
Вроде нормальный вариант,если хочешь побольше монстров.
добавлено спустя 3 минут
ColR_iT
Привет!Пока ты здесь,объясни пожалуйста,откуда берутся гейм и левелвертексы локаций?
Спасибо.И насчёт убежищ от выброса.Я их прописываю в трёх местах.А на Кордоне их девять,а только трём заданы размеры для НПСей.Хотя,главное.что работают.Просто,хотелось бы попроще.
Лично я делаю это при помощи программы Graph Viewer 0.1 (вот ссылка если что: >><< Не знаю, если ли более новые версии или нет).
Собственно как это происходит...
Открываем программу и видим вот такое окошко:
Нажимаем "Файл/Открыт...", появляется следующее окошко:
Нажимаем на "Поиск" и далее в открывшемся окошке идём в папку нужной тебе локации, для которой мы хотим узнать количество level_vertexов и game_vertexов: