Автор | Сообщение |
Nil = 2nd Lieutenant =
| 1513 |
Doom Rate: 2.31 Posts quality: +64 |
Отправлено: 27.04.18 00:37:14 | | | В этой теме Обсуждаются все общие И мелкие вопросы. не создавайте новых тем по пустякам. Спасибо за внимание.
При задавании общих вопросов в духе "как сделать X?" — указывать порт ОБЯЗАТЕЛЬНО.
Читаем правила.
-----------------------------------------------------------------------------
Прежде чем задать здесь свой вопрос, настоятельно рекомендуется ознакомится с перечнем ответов на наиболее популярные вопросы в http://iddqd.ru/faq. |
|
|
1 |
2 |
1 |
|
|
| |
Nil = 2nd Lieutenant =
| 1513 |
Doom Rate: 2.31 Posts quality: +64 |
|
1 |
2 |
1 |
|
|
| |
FoxPlays = Sergeant Major =
| 644 |
Doom Rate: 2.14 Posts quality: +367 |
Отправлено: 23.06.19 22:18:55 | | | Всё пытаюсь и без успехов...
Как можно сделать проверку желательно на ACS (т.к. на нём я и пытался) на совпадение следующего уровня [ PRINTNAME_NEXTLEVEL ] со следующим секретным [ PRINTNAME_NEXTSECRET ] и если бы они совпадали, то выводилось какое-нибудь сообщение через Log?
Конечно-же с помощью PRINTNAME_NEXTLEVEL и PRINTNAME_NEXTSECRET это не получится, но надеюсь что есть рабочий и похожий даже малость способ | |
|
| |
N00b Chief Petty Officer
| 922 |
Doom Rate: 2.15 Posts quality: +384 |
Отправлено: 23.06.19 22:54:56 | | | FoxPlays
Да нет, должно получиться.
Вот страничка на форуме zdoom, в которой фактически решается та же проблема.
Готовый код для вопроса:
str nextname = StrParam(n: PRINTNAME_NEXTLEVEL);
str secretname = StrParam(n: PRINTNAME_NEXTSECRET);
if (StrCmp(nextname, secretname) == 0) {
A_Log("Nothing here.");
} else {
A_Log("Watch out, something interesting is hidden!");
}
У тебя не получалось, скорее всего, из-за того, что сравнивать строки оператором "==" практически бесполезно (поскольку передаются не сами строки по значению, а номера в таблице строк). |
|
|
| |
FoxPlays = Sergeant Major =
| 644 |
Doom Rate: 2.14 Posts quality: +367 |
Отправлено: 24.06.19 14:18:24 | | | N00b2015
Спасибо, только через Log(s:"Nothing here."); , а не A_Log("Nothing here.");
Всё работает, но только в некоторых вадах, т.к. в других вадах скрипт выводит Watch out, something interesting is hidden! каждый уровень.
Можно ли попробовать как нибудь сделать проверку на наличие секретного выхода на уровне? | |
|
| |
N00b Chief Petty Officer
| 922 |
Doom Rate: 2.15 Posts quality: +384 |
Отправлено: 24.06.19 19:51:53 | | | FoxPlays
Да-да, конечно. Опечатка.
На zscript-е, если я правильно понимаю, вполне можно сделать проверку на наличие лайндефа на карте с заданным экшном (там, Exit_Normal или Exit_Secret), но работать корректно это тоже будет не везде, поскольку такой экшн может вызываться не с лайндефа напрямую, а из ACS-скрипта, например. Ещё бывают такие экшны как Teleport_NewMap.
Ну, что-то вроде этого для классики сработает:
version "3.0"
class NewHandler: EventHandler {
override void WorldLoaded(WorldEvent e) {
int linecount = level.lines.size();
bool hasnormal = false, hassecret = false;
for (int i = 0; i < linecount; ++i) {
line currline = level.lines[i];
if (currline.special == Exit_Normal) {
hasnormal = true;
}
if (currline.special == Exit_Secret) {
hassecret = true;
}
} //all lines processed
if (hasnormal) {
if (hassecret) {
Console.Printf("Something interesting is hidden!");
} else {
Console.Printf("Nothing special here.");
}
} else {
if (hassecret) {
Console.Printf("Plutonia MAP31, ain't it?");
} else {
Console.Printf("No exit!");
}
}
}
}
Сообщения выводятся в консоль, но не печатаются игроку на экран. Можно попробовать как-нибудь найти актор игрока и от его имени вызвать A_Log, но эти костыли сам пиши, если такой эффект не устраивает
Ещё нужно в MAPINFO прописать:
gameinfo {
EventHandlers = "NewHandler"
} | |
|
| |
JSO x - 2nd Lieutenant -
| 1334 |
Doom Rate: 2.26 Posts quality: +726 |
Отправлено: 24.06.19 23:27:43 | | | Есть минимум два способа вводить на экран не через консоль. Первый -- переопределить обработчик "virtual void RenderOverlay( RenderEvent e ) {}"; в этом случае информация будет выводиться всем. Пример:
override void RenderOverlay( RenderEvent e ) {
screen.DrawText( Font.FindFont( "smallfont" ), Font.CR_DARKGRAY,
10, 10, "Score: " .. GetScore(),
DTA_VirtualWidth, 640, DTA_VirtualHeight, 480 );
}
Второй -- создать свой SBarInfo. Примеры для IWAD'ов есть в (g/q)zdoom.pk3, "\zscript\statusbar.txt", оттуда много интересного тоже подчерпнуть можно.
Предупреждение: оба варианта действуют исключительно из-под user-interface сферы, так что многие вещи, спокойно запускающиеся из-под "play" scope (сферы влияния самого "экшена"), здесь будут работать только на readonly или не работать вовсе.
Ага, нашёл третий. N00b2015 пишет: | Можно попробовать как-нибудь найти актор игрока и от его имени вызвать A_Log, но эти костыли сам пиши, если такой эффект не устраивает | players[ consoleplayer ].mo.A_Log( "Something..." );
* * *
Дополнение, насчёт этого:
for (int i = 0; i < linecount; ++i) {
line currline = level.lines[i];
if (currline.special == Exit_Normal) {
hasnormal = true;
}
if (currline.special == Exit_Secret) {
hassecret = true;
}
} //all lines processed
Так перебираются, насколько я знаю, не все варианты. Более полным перебором будет int s = level.lines[ i ].special;
if ( s == 74 || s == 75 || s == Exit_Normal )
hasnormal = true;
if ( s == 243 || s == 244 || s == Exit_Secret )
hassecret = true; | |
|
2 |
7 |
1 |
|
|
| |
Darknesss Recruit
| 6 |
Doom Rate: 2
|
Отправлено: 25.06.19 00:05:44 | | | Здарова Думеры, до этого качал всякие моды на новое оружие и в целом всё было нормально, но есть одна проблема которая довольно сильно раздражает. Отдача во многих модах которая поднимает прицел оружия до небес и приходится постоянно регулировать её, можно ли как-нибудь отключить отдачу в настройках, чтобы прицел не поднимало? Я просто не силен в английском и ничего не нашел в настройках по поводу отдачи. | |
|
| |
N00b Chief Petty Officer
| 922 |
Doom Rate: 2.15 Posts quality: +384 |
Отправлено: 25.06.19 00:21:08 | | | JSO x
JSO x пишет: | players[ consoleplayer ].mo.A_Log( "Something..." ); |
Я же из Handler-а пытаюсь написать сообщение. Или ты предлагаешь в хэндлере обрабатывать, а выводить как-нибудь отдельно? Как информацию передать? Только не говори про глобальные переменные
JSO x пишет: | Более полным перебором будет |
75-ый, действительно, тоже нужно обработать. 244 == Exit_Secret. А с 74-ым труднее, там же на любой слот можно перескочить, хоть на сорок разных штук с одной карты, и вопрос потеряет смысл (секретная карта называться может как угодно).
Кстати, с уровня можно выходить ещё множеством неразобранных способов вроде триггеров A_BossDeath или секторов (классического, не знаю, во что его xlat превращает) типа 11
Darknesss
Нет такой стандартной характеристики у оружия в Doom
Если не видно настроек самого мода, то напрямую никак. Но вполне можно написать "для личного использования" (не в мультиплеере) небольшую модификацию. Если укажешь мод, могу посмотреть. |
|
|
| |
Darknesss Recruit
| 6 |
Doom Rate: 2
|
Отправлено: 25.06.19 00:59:52 | | | N00b2015 пишет: |
Darknesss
Нет такой стандартной характеристики у оружия в Doom
Если не видно настроек самого мода, то напрямую никак. Но вполне можно написать "для личного использования" (не в мультиплеере) небольшую модификацию. Если укажешь мод, могу посмотреть.
|
Да всё норм, надо было просто в настройках мыши покопаться) | |
|
| |
JSO x - 2nd Lieutenant -
| 1334 |
Doom Rate: 2.26 Posts quality: +726 |
Отправлено: 25.06.19 12:55:05 | | | Darknesss пишет: | Отдача во многих модах которая поднимает прицел оружия до небес и приходится постоянно регулировать её, можно ли как-нибудь отключить отдачу в настройках, чтобы прицел не поднимало? |
Реально сделать. "Options" -> "Comportability options" -> "Allow freelook: off". Будет невозможно смотреть вверх/вниз, но вместе с тем и любое изменение наклона головы будет само автоматически приводиться обратно, к "центральному" взгляду.
N00b2015 пишет: | Я же из Handler-а пытаюсь написать сообщение. Или ты предлагаешь в хэндлере обрабатывать, а выводить как-нибудь отдельно? Как информацию передать? Только не говори про глобальные переменные |
В смысле? Этот обработчик находится в play-scope, то есть из-под него вполне можно вызвать всё, что принадлежит этой же сфере. Такой код --override void WorldTick() {
Actor rPlayer = players[ 0 ].mo;
if ( rPlayer == NULL ) return;
rPlayer.A_Print( "Pitch: " .. rPlayer.pitch ); /* */
} // Этот код я для другого писал, потому он кажется здесь неуместным и некрасивым. -- вполне работает, выводя текущий pitch игрока:
Точно так же работает и WorldLoaded(), он тоже относится к play-сфере.
Так что нет, неправ ты. Это -- третий работающий способ вывода информации на экран. |
|
|
2 |
7 |
1 |
|
|
| |
N00b Chief Petty Officer
| 922 |
Doom Rate: 2.15 Posts quality: +384 |
Отправлено: 25.06.19 17:10:21 | | | JSO x
Да я не говорил, что ты неправ или что они не работающие. Просто нужно всех игроков рассматривать, и просто написать players[0].mo мне показалось каким-то несимметричным решением.
Наверное, в той ситуации тогда лучше A_PrintBold вызвать (но один раз), чтобы все видели сообщение, а не только первый игрок. | |
|
| |
Doomgay1999 - Corporal -
| 96 |
Doom Rate: 2
|
Отправлено: 26.06.19 05:29:42 | | | А можно ли с при помощи Slade от редактировать музыку? Если нет то есть какой-то редактор по этому поводу? | |
|
| |
Xtor = Lance Corporal =
| 162 |
Doom Rate: 1.95 Posts quality: +18 |
Отправлено: 26.06.19 08:50:10 | | | Doomgay1999, например, Audacity или Adobe Audition. | |
|
| |
ZZYZX - UAC Commissar -
| | 6284 |
Doom Rate: 1.65 Posts quality: +1630 |
|
2 |
2 |
1 |
|
|
| |
FoxPlays = Sergeant Major =
| 644 |
Doom Rate: 2.14 Posts quality: +367 |
Отправлено: 26.06.19 13:11:24 | | | Насчёт скрипта с показом секретного выхода. Уже давно сделал всё на костылях
Появился ещё вопрос.
Как сделать проверку инвентаря игроков на наличие какого-либо ключа (см. quote ниже) и если ключ был найден в инвентаре игрока, то он раздаётся всем другим игрокам у которых нет этого или этих ключей? Хорошо если это получиться в виде ACS кода
|
CheckInventory - надеюсь через него можно будет сделать проверку
Вот пример:
ACTOR RedCard : DoomKey
{
Inventory.PickupMessage "$GOTREDCARD"
Inventory.Icon "STKEYS2"
States
{
Spawn:
RKEY A 10
RKEY B 10 Bright
Loop
}
}
Актор выходит из DoomKey, а DoomKey выходит к Key
ACTOR DoomKey : Key
{
Radius 20
Height 16
+NOTDMATCH
}
Значит этот актор (или же предмет) является ключём.
|
| |
|
| |
Void Weaver = Captain =
| 2496 |
Doom Rate: 1.82 Posts quality: +808 |
Отправлено: 26.06.19 14:56:24 | | | Во-первых, не надо использовать повторные определения уже существующих акторов (ключей), если хочешь создать новые на базе существующих то используй Species свойство:
Actor NewRedCard : RedCard replaces RedCard
{
Species "RedCard"
States
{
Spawn:
ABCD A -1 //Новые спрайты
}
} Во-вторых, для таких целей надо использовать CheckActorInventory и GiveActorInventory; кстати в примерах по ссылкам уже представлен подобный скрипт. | |
|
1 |
9 |
1 |
|
|
| |
FoxPlays = Sergeant Major =
| 644 |
Doom Rate: 2.14 Posts quality: +367 |
Отправлено: 26.06.19 15:02:39 | | | Void Weaver
Ок, но можно как-нибудь сделать без создания новых акторов?
Возможно ли сделать проверку на базе уже существующих?
Просто делать проверку ключей отдельно для Doom, Heretic или же Strife будет тем не менее муторно | |
|
| |
Void Weaver = Captain =
| 2496 |
Doom Rate: 1.82 Posts quality: +808 |
Отправлено: 26.06.19 15:19:30 | | | Ну разумеется, тогда просто проверяй наличие ванильных уже существующих ключей. Я просто решил что ты желаешь запилить новые ключи.
Но проверку для ключей каждого типа игры делать придётся по любому.
Т. е. для Еретика:
CheckActorInventory(tid,"KeyBlue")
CheckActorInventory(tid,"KeyGreen")
для Дума:
CheckActorInventory(tid,"RedCard")
CheckActorInventory(tid,"BlueSkull")
ЭДИТ:
Если я не ошибаюсь то из декор\ацс чек-функций проверять базовый класс умеет только CheckClass, но её АЦС версия не умеет в чек родительского класса. ( |
Рейтинг сообщения: +1, отметил(и): FoxPlays |
|
1 |
9 |
1 |
|
|
| |
FoxPlays = Sergeant Major =
| 644 |
Doom Rate: 2.14 Posts quality: +367 |
Отправлено: 26.06.19 15:25:34 | | | Void Weaver
Спасибо. Только жаль что нельзя проверять через CheckActorInventory(tid,"Key") | |
|
| |