ВНИМАНИЕ! Наша конференция посвящена космической тематике и компьютерным играм. Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!
|
» Секреты моддинга (Вопросница) | страница 45 |
|
|
|
Звездные волки 2: Гражданская война »
МОДовый отсек: «Секреты моддинга (Вопросница)» |
|
|
PirateOnCarrier 50 EGP Репутация: 0 Сообщения: 31
Зарегистрирован: 25.02.2017 |
|
Доброго времени суток.
В процессе создания коллизии для корабля (выставление сфер GBND) выставленные сферы при сохранении превращаются в куски самой модели, в итоге в космосе появляется скопление этих самых сфер вместо модели.
Вопрос - как сохранить модель, чтобы GBND нормально работали, а не превращались в куски модели?
|
|
|
Michael_Moon 100 EGP
Рейтинг канала: 4(72) Репутация: -2 Сообщения: 669 Откуда: РК, Кокшетау Зарегистрирован: 15.02.2011 |
|
ironHAMMER.ms : |
Michael_Moon : |
В какой части игры?
|
Гражданская Война
|
Немного понекромантю У меня, таки, получилось заставить пользоваться пилотом, а не АИ (т.е. без пилота база просто тупо никуда не полетит, хотя, если не нужно, чтобы она куда-то летела, пилота можно посадить на истребитель
|
|
|
Protok St 65 EGP
Рейтинг канала: 2(15) Репутация: 8 Сообщения: 106 Откуда: Мирградъ-Земля Зарегистрирован: 09.08.2009 |
|
Приветствую всех пилотов портала EG!
Открыл проект 8-летней давности. Решил модельки переделать, но IMDEditor не хочет сохранять изменения. Раньше через него работал и отлично работал. В чём дело кто подскажет?
_______________
После каждого изменения значения в поле надо нажимать ВВОД.
За ответ благодарю Olvegg.
Последний раз редактировалось: Protok St (22:25 04-05-2017), всего редактировалось 1 раз |
|
|
Protok St 65 EGP
Рейтинг канала: 2(15) Репутация: 8 Сообщения: 106 Откуда: Мирградъ-Земля Зарегистрирован: 09.08.2009 |
|
Может кто-нибудь напомнить как включить консоль и логи, чтобы
SLOG(" заработал?
Цитата: |
Как включить консоль
В файл main.ini в строке GAME допишите DebugMode = 1.
В игре нажмите [SHIFT] + [~], откроется консоль.
|
Консоль и вывод логов в неё заработали.
Как вывести лог в отдельный файл?
Последний раз редактировалось: Protok St (19:12 06-05-2017), всего редактировалось 1 раз |
|
|
valv 62 EGP
Рейтинг канала: 2(23) Репутация: 7 Сообщения: 96 Откуда: Odessa Зарегистрирован: 14.10.2011 |
|
R4JVR : |
Как вывести лог в отдельный файл?
|
Если речь о дублировании экранного лога в файл, то
перекрой функцию SLOG своей
примеры найдешь в моем коде.
_________________ Если мечтать, то ни в чём себе не отказывать :) |
|
|
Protok St 65 EGP
Рейтинг канала: 2(15) Репутация: 8 Сообщения: 106 Откуда: Мирградъ-Земля Зарегистрирован: 09.08.2009 |
|
Вопрос по анимации телепортации портала:
Эта функция в движке, что она делает посмотреть нельзя.
Но можно попробовать использовать те же эффекты:
Код: |
PORTAL:AddMeshFX("PARTICLESYSTEM", "portal.pst");
PORTAL:AddMeshFX("PARTICLESYSTEM", "portal_rotate.pst");
PORTAL:AddMeshFX("PARTICLESYSTEM", "portal_vortex.pst");
PORTAL:AddMeshFX("PARTICLESYSTEM", "portal_vortex_out.pst");
PORTAL:AddMeshFX("PARTICLESYSTEM", "portal_vortex_dark.pst");
PORTAL:AddMeshFX("PARTICLESYSTEM", "portal_vortex_glow2a.pst"); |
Fxы с суффиксом vortex создают эффект воронки.
dark это копия glow2a с идентичной текстурой.
portal_vortex_out - это водоворот наоборот, имеет визуальный дефект при исчезновении частицы.
***
Чтобы создать анимацию телепортации в любом месте без проблем также можно использовать CreatePortalGlow. Тоже обрабатывается движком.
***
Если всё же создавать эффект портала вручную, то надо использовать:
Код: |
PORTAL:AddMeshFX("PARTICLESYSTEM", "portal.pst");
PORTAL:AddMeshFX("PARTICLESYSTEM", "portal_rotate.pst"); |
Однако, этого недостаточно для полного соответствия движковому эффекту телепорта. Движок использует текстуру portal_glow2.dds в центре портала. Чтобы сделать подобный эффект вручную необходимо создать новый файл частиц так как изначально его нет.
Последний раз редактировалось: Protok St (21:43 05-06-2017), всего редактировалось 4 раз(а) |
|
|
Strongrus 50 EGP Репутация: 0 Сообщения: 7
Зарегистрирован: 06.06.2017 |
|
Перенаправлен в вопросницу из FAQа. Вопрос: как добавить в продажу в конкретном секторе, например Харон, истребители тамплиеров Т-образный рэптор и Т-образный ганслингер?
Самому этого сделать не получилось. Что делал: в файле InitTradeSystem.script вставил блок
local Market=GetBlackMarket("haron");
Market:ShipGoodsState("Raptor_mk2_pl0", RAND(5)+1, 1.55, 0.4);
Market:ShipGoodsState("Gunslinger_mk2_pl0", RAND(5)+1, 1.05, 0.4);
Market:ShipGoodsState("Trident_mk2_white_pl0", RAND(5)+1, 1.05, 0.4);
После этого менял значение шанса появления в магазине от 30 до 100. Менял названия сектора gredos и названия кораблей из файла Carcasses.xml на рэптор и бриганд. Менял название рынка black на white. Да и прочитал тему faq для начинающих модеров прежде чем все это делать.
Зачем все это затеял? В хароне уже на протяжении 4 новых игр пропали из продажи Т-образные истребители кроме хримтурсов. Надоело на драконах летать.
|
|
|
Michael_Moon 100 EGP
Рейтинг канала: 4(72) Репутация: -2 Сообщения: 669 Откуда: РК, Кокшетау Зарегистрирован: 15.02.2011 |
|
Strongrus : |
Зачем все это затеял? В хароне уже на протяжении 4 новых игр пропали из продажи Т-образные истребители кроме хримтурсов. Надоело на драконах летать.
|
Просто в трюм добавь и всё. Через консоль или скриптом.
Если же охота добавить именно в магазин, то лучше прописать истребы в соответствующем массиве. Не думаю, что описанная выше процедура сработает. Ну и объявление локальной переменной в скрипте - не лучшая идея
|
|
|
Protok St 65 EGP
Рейтинг канала: 2(15) Репутация: 8 Сообщения: 106 Откуда: Мирградъ-Земля Зарегистрирован: 09.08.2009 |
|
Если добавить в конец файла InitTeamScript.script
Код: |
mothership:AddShipToInventory("Excalibur_pl0", 1); |
То появится в трюме. Числовой параметр это количество добавляемого.
Если вы не собираетесь делать какую-то отдельную пользовательскую модификацию, то добавить в трюм все истребители какие захотите, это самый простой и эффективный способ.
добавлено спустя 18 минут:
Как получить координату, находящуюся на расстоянии a=20, от исходной координаты в направлении Vector3(x,y,z)?
То есть как отложить координату в определённом направлении от точки?
Решение задачи на примере замены портала на каркас.
Код: |
MotherShip:SetPosition(Portal:GetEntryPoint(10)); -- портал |
Код: |
local ms_pos = Vector3(0,0,0);
ms_pos.x = portal_orn.x * 20; ms_pos.y = portal_orn.y * 20; ms_pos.z = portal_orn.z * 20;
ms_pos = ms_pos+Portal:GetPosition()
MotherShip:SetPosition(ms_pos); -- то же самое для каркаса |
Поставленная задача решается умножением вектора ориентации объекта на заданную величину - дистанцию.
Последний раз редактировалось: Protok St (10:42 08-07-2017), всего редактировалось 2 раз(а) |
|
|
Protok St 65 EGP
Рейтинг канала: 2(15) Репутация: 8 Сообщения: 106 Откуда: Мирградъ-Земля Зарегистрирован: 09.08.2009 |
|
Как получить вектор для ориентации, который будет означать направление от одной точки к другой?
|
|
|
Protok St 65 EGP
Рейтинг канала: 2(15) Репутация: 8 Сообщения: 106 Откуда: Мирградъ-Земля Зарегистрирован: 09.08.2009 |
|
Какая функция возвращает размер объекта?
|
|
|
Aleksey_SR 73 EGP Рейтинг канала: 4(67) Репутация: 6 Сообщения: 175 Откуда: Новокузнецк Зарегистрирован: 13.12.2015 |
|
R4JVR : |
Как получить координату, находящуюся на расстоянии a=20, от исходной координаты в направлении Vector3(x,y,z)?
То есть как отложить координату в определённом направлении от точки?
|
Попробуй использовать код от вызовов звеньев:
Код: |
local CenterDislocation = Vector3(x,y,z);
local orientation = ship:GetPosition() - CenterDislocation;
|
добавлено спустя 4 минуты:
Strongrus : |
Перенаправлен в вопросницу из FAQа. Вопрос: как добавить в продажу в конкретном секторе, например Харон, истребители тамплиеров Т-образный рэптор и Т-образный ганслингер?
Самому этого сделать не получилось. Что делал: в файле InitTradeSystem.script вставил блок
local Market=GetBlackMarket("haron");
Market:ShipGoodsState("Raptor_mk2_pl0", RAND(5)+1, 1.55, 0.4);
Market:ShipGoodsState("Gunslinger_mk2_pl0", RAND(5)+1, 1.05, 0.4);
Market:ShipGoodsState("Trident_mk2_white_pl0", RAND(5)+1, 1.05, 0.4);
После этого менял значение шанса появления в магазине от 30 до 100. Менял названия сектора gredos и названия кораблей из файла Carcasses.xml на рэптор и бриганд. Менял название рынка black на white. Да и прочитал тему faq для начинающих модеров прежде чем все это делать.
Зачем все это затеял? В хароне уже на протяжении 4 новых игр пропали из продажи Т-образные истребители кроме хримтурсов. Надоело на драконах летать.
|
Или в массиве local NShop_Templ = {} ищешь последний подмассив, где написан комментарий "5 level ships" и меняешь последний 3 значения x в массиве {0,0,0,x,x,x} на любое число, или пишешь так, как сделал выше, но вместо RAND(5)+1 пропиши 100 (это шанс выпадения). Должно получится так:
Код: |
local Market=GetBlackMarket("haron");
Market:ShipGoodsState("Raptor_mk2_pl0", 100, 1.55, 0.4);
Market:ShipGoodsState("Gunslinger_mk2_pl0", 100, 1.05, 0.4);
Market:ShipGoodsState("Trident_mk2_white_pl0", 100, 1.05, 0.4);
|
P.S. для этих изменений нужно начать новую игру.
UPD: RAND(5)+1 - это НЕ ШАНС ВЫПАДЕНИЯ, а просто количество итемов, появляющихся в продаже. Не путайте. Рад, что ошибку свою подправил.
_________________ Discord: shadowvinyl
Последний раз редактировалось: Aleksey_SR (13:27 27-04-2019), всего редактировалось 3 раз(а) |
|
|
negat!ve 57 EGP Репутация: -2 Сообщения: 70
Зарегистрирован: 24.07.2015 |
|
R4JVR : |
P.S. для этих изменений нужно начать новую игру.
|
Можно сделать без начала новой игры, например вызвать свою функцию
Код: |
function test_shop()
if shop_flag == false then
shop_flag = true;
local Market=GetBlackMarket("sys01");
Market:ShipGoodsState("Hrimturs_grey0", 100, 1.0, 0.65);
OutputToScreenLog("Магазин обновлен !", -1);
end;
end; |
в функции, которой обрабатывается событие когда игрок подлетает близко к порталу.
Цитата: |
function Portal_R_Action()
dest_location="tarrot";
test_shop();
ShowMsgBox("#M_teleport_confirm", "#M_teleport_to_tarrot", OnPortalStart_R, OnPortalCancel);
end;
|
Также подобную функцию можно вызвать через биндинг или через любой диалог.
Проверил, работает, только я не могу понять как флаг shop_flag сделать глобальным и что бы он сохранялся, если кто знает помогите
Последний раз редактировалось: negat!ve (21:58 22-06-2017), всего редактировалось 1 раз |
|
|
Aleksey_SR 73 EGP Рейтинг канала: 4(67) Репутация: 6 Сообщения: 175 Откуда: Новокузнецк Зарегистрирован: 13.12.2015 |
|
negat!ve : |
Можно сделать без начала новой игры, например вызвать свою функцию
Код: |
OutputToScreenLog("Магазин обновлен !", -1);
|
|
Вопрос: зачем ты в функции OutputToScreenLog в таймере используешь отрицательное число? Если ты уж хочешь вывести на экран сообщение, так делай единичку, или выводи сообщение в лог.
negat!ve : |
Также подобную функцию можно вызвать через биндинг или через любой диалог.
Проверил, работает, только я не могу понять как флаг shop_flag сделать глобальным и что бы он сохранялся, если кто знает помогите
|
Очень просто. Пользуйся функциями
Код: |
setglobal("МАСКА_ПЕРЕМЕННОЙ",shop_flag)
shop_flag = getglobal("МАСКА_ПЕРЕМЕННОЙ")
SetQuestLabel("МАСКА_ПЕРЕМЕННОЙ","МАСКА_ПЕРЕМЕННОЙ_2")
local var = GetQuestLabel("МАСКА_ПЕРЕМЕННОЙ")
if var == TRUE then ... end;
Aleksey_SR: "МАСКА_ПЕРЕМЕННОЙ_2" это var :)
|
Или в файлах АИ в папках AI и include пропиши эти флаги:
Все. Игра автоматом будет знать, что этот флаг есть (и, может быть, активен). И в моментах квеста/игры можешь присваивать ему новые значения:
Код: |
shop_flag = NIL -- или так
shop_flag = FALSE -- или так
|
_________________ Discord: shadowvinyl
Последний раз редактировалось: Aleksey_SR (17:53 23-06-2017), всего редактировалось 3 раз(а) |
|
|
negat!ve 57 EGP Репутация: -2 Сообщения: 70
Зарегистрирован: 24.07.2015 |
|
Aleksey_SR : |
OutputToScreenLog в таймере используешь отрицательное число?
|
Я это взял отсюда.
Guide-script-4.doc : |
OutputToScreenLog Функция вывода дополнительной информации на окно пользователя
OutputToScreenLog(“message”, life_time)
-1 по умолчанию;
|
Guide-script-4.doc [Справочник по скриптингу игровых уровней “Star Wolves 2: Civil War”]
Хм, походу там имелось ввиду возвращаемое значение, попутал.
Кстати если ты знаешь другие справочники закидывай, буду рад ими обмазаться.
Aleksey_SR : |
Или в файлах АИ в папках AI и include пропиши эти флаги:
|
Не понял, можно конкретней, в каких файлах и что прописывать ?
В заведомо рабочем инклуде прописывал shop_flag=false; но флаг не ставится.
Это будет работать без начала новой игры ?
Aleksey_SR : |
Код:
setglobal("МАСКА_ПЕРЕМЕННОЙ",shop_flag)
shop_flag = getglobal("МАСКА_ПЕРЕМЕННОЙ")
SetQuestLabel("МАСКА_ПЕРЕМЕННОЙ","МАСКА_ПЕРЕМЕННОЙ_2")
local var = GetQuestLabel("МАСКА_ПЕРЕМЕННОЙ")
if var == TRUE then ... end;
Aleksey_SR: "МАСКА_ПЕРЕМЕННОЙ_2" это var
|
Вообще непонятно.Можно подробней ? "МАСКА_ПЕРЕМЕННОЙ_2" это var т.е. она имеет тип bool ? как то все запутанно на ровном месте
Вот моя логика.
Требуется :После загрузки старого сейва обновить магазин один раз.
Мое решение работает, но скрипт как будто не видит изменение значения булевой переменной shop_flag или она переписывается ? в общем мне не понятно
Как я это тестирую.В папке звездной системы, в файле functions.script добавляю
свою функцию в функцию портала,
Код: |
function Portal_R_Action()--Функция, которая вызывается, когда игрок подходит близко к порталу для стыковки с ним
dest_location="tarrot";
test_shop();--наша функция
ShowMsgBox("#M_teleport_confirm", "#M_teleport_to_tarrot", OnPortalStart_R, OnPortalCancel);
end; |
конечно как я и писал выше обновить магазин можно любым другим способом, но вопрос уже не о магазине, а о глобальных переменных.
Код моей функции в новом скрипте по адерсу data\scripts\include\mod.script
Скрипт заинклюжен в system.lst "include/mod.script", ты писал что нужно добавить переменную еще и в папку AI, зачем ?
Код: |
shop_flag = false
function test_shop()--Функция обновления ассортимента в конкретном сторе без начала новой игры, нужно выполнить ее только один раз.
if shop_flag == false then --Если флага нет
shop_flag = true; --ставим его
local Market=GetBlackMarket("sys01");--Добавляем нужный товар в нашу систему
Market:ShipGoodsState("Hrimturs_grey0", 100, 1.0, 0.65);
OutputToScreenLog("Магазин обновлен !", 7);--Информер
end;--Что бы эта функция не выполнялась повторно когда товар с её помощью уже добавлен флаг должен быть true
end; |
Как сделать, чтобы это работало ?
|
|
|
Aleksey_SR 73 EGP Рейтинг канала: 4(67) Репутация: 6 Сообщения: 175 Откуда: Новокузнецк Зарегистрирован: 13.12.2015 |
|
negat!ve : |
Я это взял отсюда.
Guide-script-4.doc [Справочник по скриптингу игровых уровней “Star Wolves 2: Civil War”]
Хм, походу там имелось ввиду возвращаемое значение, попутал.
Кстати если ты знаешь другие справочники закидывай, буду рад ими обмазаться.
|
Встречались вроде такие. Как найду, поделюсь.
negat!ve : |
Aleksey_SR : |
Или в файлах АИ в папках AI и include пропиши эти флаги
|
Скрипт заинклюжен в system.lst "include/mod.script", ты писал что нужно добавить переменную еще и в папку AI, зачем ?
|
Пардон, я хотел написать Или в файлах АИ, ИЛИ в папке include в файлах.
negat!ve : |
В заведомо рабочем инклуде прописывал shop_flag=false; но флаг не ставится.
Это будет работать без начала новой игры ?
|
А регистр букв соблюдал? Когда я с флагами работаю, я всегда их пишу заглавными буквами:
negat!ve : |
Вообще непонятно. Можно подробней ? "МАСКА_ПЕРЕМЕННОЙ_2" это var т.е.
она имеет тип bool ? как то все запутанно на ровном месте
|
Смотри. Например, возьмем квестовый лейбл для пропуска в Гидеон:
Код: |
SetQuestLabel("GideonPermit","no");
|
"GideonPermit" - это 1 аргумент SetQuestLabel
"no" - это 2 аргумент SetQuestLabel
Так вот. 1 аргумент - это что-то типа "маски" метки, а 2 - это его "состояние". Меняя 2 аргумент в этой функции, где уже прописан 1, ты меняешь его состояние. Понятным языком: чтобы сделать так, чтобы КФНИ при влете в Гидеон не нападали а игрока, нужно написать вместо "no" "yes" (смотря, как там оператор if расписан в локации. В Гидеоне там еще нужна зеленая репутация с КФНИ ля влета в систему.).
Так же мы можем узнать состояние этого 1 аргумента через функцию GetQuestLabel:
Код: |
var = GetQuestLabel("GideonPermit");
if var == "no" then ... end;
|
negat!ve : |
Как сделать, чтобы это работало ?
Код: |
shop_flag = false
function test_shop()
if shop_flag == false then
shop_flag = true;
end;
end;
|
|
Выше написал. Выведи сам флаг в папки АИ или include. Так же попробуй флаги написать заглавными буквами, чтобы движок видел их сопоставление с записями в MapInitialization.script:
Код: |
--//////////// DEFINES //////////////////
TRUE = 1;
FALSE = 0;
|
_________________ Discord: shadowvinyl
Последний раз редактировалось: Aleksey_SR (06:09 24-06-2017), всего редактировалось 2 раз(а) |
|
|
Michael_Moon 100 EGP
Рейтинг канала: 4(72) Репутация: -2 Сообщения: 669 Откуда: РК, Кокшетау Зарегистрирован: 15.02.2011 |
|
R4JVR : |
Как получить координату, находящуюся на расстоянии a=20, от исходной координаты в направлении Vector3(x,y,z)?
То есть как отложить координату в определённом направлении от точки?
|
R4JVR : |
Как получить вектор для ориентации, который будет означать направление от одной точки к другой?
|
Смотри Vector3.script в папке Include
|
|
|
negat!ve 57 EGP Репутация: -2 Сообщения: 70
Зарегистрирован: 24.07.2015 |
|
Aleksey_SR : |
А регистр букв соблюдал? Когда я с флагами работаю, я всегда их пишу заглавными буквами:
Код:
STOP_FLAG = FALSE;
|
Так вообще не работает, ошибок в логах нет, не понимаю вообще ничего
Cкрытый текст (кликните здесь для просмотра)
SHOP_FLAG = FALSE;
function test_shop()--Функция обновления ассортимента в конкретном сторе без начала новой игры, нужно выполнить ее только один раз.
if SHOP_FLAG == FALSE then --Если флага нет
SHOP_FLAG = TRUE; --ставим его
local Market=GetBlackMarket("sys01");--Добавляем нужный товар в нашу систему
Market:ShipGoodsState("Hrimturs_grey0", 100, 1.0, 0.65);
OutputToScreenLog("Магазин обновлен !", 7);--Информер
end;--Что бы эта функция не выполнялась повторно когда товар с её помощью уже добавлен флаг должен быть true
end;
|
Если раньше функция вызывалась постоянно не глядя на флаг, то теперь она не вызвалась ни разу
---
Похоже что для работы глобальных переменных требуется новая игра
После начала игры эта функция как от нее и требуется выполняется только один раз, состояние флага сохраняется после сейвлоада.
Это как то печально, остается лишь городить свои костыли ?
Второй вариант не проверял потому что до конца не понял принцип его действия
Последний раз редактировалось: negat!ve (16:06 24-06-2017), всего редактировалось 3 раз(а) |
|
|
valv 62 EGP
Рейтинг канала: 2(23) Репутация: 7 Сообщения: 96 Откуда: Odessa Зарегистрирован: 14.10.2011 |
|
negat!ve : |
Похоже что для работы глобальных переменных требуется новая игра
|
Переменные загружаются из сохранёнки.
Если хочешь увидеть их новые значения - вызывай функцию, в которой они назначаются, или приписывай их назначение в скрипте, загружаемом в include и таки войди в новую локацию.
Насчет true и false - оба они равны nil (нет таких переменных и нет такого результата сравнения).
В скриптах используются переменные TRUE и FALSE ( = 1 и = 0).
Оператор if переходит на блок then если выражение сравнения не равно nil
// т.е. в if при ЛЮБОМ значении, кроме nil будет срабатывать блок then
_________________ Если мечтать, то ни в чём себе не отказывать :)
Последний раз редактировалось: valv (22:11 24-06-2017), всего редактировалось 1 раз |
|
|
Michael_Moon 100 EGP
Рейтинг канала: 4(72) Репутация: -2 Сообщения: 669 Откуда: РК, Кокшетау Зарегистрирован: 15.02.2011 |
|
Для понимания твоих объяснений, Вал, надо, чтобы чел хоть немного разбирался в ЛУА
|
|
|
|
|
|
Звездные волки 2: Гражданская война ->
МОДовый отсек: «Секреты моддинга (Вопросница)» |
|
|