Welcome to U.A.C. [O.S.A.]
login / register
Status: Guest
Архивы форума | iddqd.ru
Wolf 3D
ПравилаПравила ПоискПоиск
18+
Тема для новичков. Вопросы по маппингу/моддингу - любые!-2 1, 2, 3 ... 61, 62, 63  След.
   Список разделов - Местечко мапперов и моддеров - Тема для новичков. Вопросы по маппингу/моддингу - любые!-2Ответить
АвторСообщение
Nil
= 2nd Lieutenant =
Next rank: - 1st Lieutenant - after 127 points
1513

Doom Rate: 2.31

Posts quality: +63
Ссылка на пост №1 Отправлено: 27.04.18 00:37:14
В этой теме Обсуждаются все общие И мелкие вопросы. не создавайте новых тем по пустякам. Спасибо за внимание.

При задавании общих вопросов в духе "как сделать X?" — указывать порт ОБЯЗАТЕЛЬНО.
Читаем правила.

-----------------------------------------------------------------------------

Прежде чем задать здесь свой вопрос, настоятельно рекомендуется ознакомится с перечнем ответов на наиболее популярные вопросы в http://iddqd.ru/faq.

Рейтинг сообщения: +1, отметил(и): +Ku6EPyXOBEPTKA+
1 2 1
Nil
= 2nd Lieutenant =
Next rank: - 1st Lieutenant - after 127 points
1513

Doom Rate: 2.31

Posts quality: +63
Ссылка на пост №2 Отправлено: 29.04.18 15:49:16
+Ku6EPyXOBEPTKA+, ещё пожалуйся, что в BOOM 2.02 не работает.
https://github.com/coelckers/gzdoom/blob/master/specs/udmf_zdoom.txt
Можешь почитать, что там и как менялось, может ещё что-нибудь не знал.
Есть ещё основной раздел, содержащий только основные вещи из Doom, Heretic, Hexen и Strife, но там точно нет ничего нового для тебя:
https://github.com/coelckers/gzdoom/blob/master/specs/udmf_zdoom.txt
1 2 1
FoxPlays
= Sergeant Major =
Next rank: UAC Sergeant Major after 36 points
644

Doom Rate: 2.14

Posts quality: +367
Ссылка на пост №3 Отправлено: 23.06.19 22:18:55
Всё пытаюсь и без успехов...
Как можно сделать проверку желательно на ACS (т.к. на нём я и пытался) на совпадение следующего уровня [ PRINTNAME_NEXTLEVEL ] со следующим секретным [ PRINTNAME_NEXTSECRET ] и если бы они совпадали, то выводилось какое-нибудь сообщение через Log?

Конечно-же с помощью PRINTNAME_NEXTLEVEL и PRINTNAME_NEXTSECRET это не получится, но надеюсь что есть рабочий и похожий даже малость способ :)
1 1 1
N00b
Chief Petty Officer
Next rank: Chief Petty Officer after 18 points
922

Doom Rate: 2.15

Posts quality: +384
Ссылка на пост №4 Отправлено: 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!");
}

У тебя не получалось, скорее всего, из-за того, что сравнивать строки оператором "==" практически бесполезно (поскольку передаются не сами строки по значению, а номера в таблице строк).

Рейтинг сообщения: +2, отметил(и): VladGuardian, Void Weaver
1 2
FoxPlays
= Sergeant Major =
Next rank: UAC Sergeant Major after 36 points
644

Doom Rate: 2.14

Posts quality: +367
Ссылка на пост №5 Отправлено: 24.06.19 14:18:24
N00b2015
Спасибо, только через Log(s:"Nothing here."); , а не A_Log("Nothing here.");

Всё работает, но только в некоторых вадах, т.к. в других вадах скрипт выводит Watch out, something interesting is hidden! каждый уровень.

Можно ли попробовать как нибудь сделать проверку на наличие секретного выхода на уровне?
1 1 1
N00b
Chief Petty Officer
Next rank: Chief Petty Officer after 18 points
922

Doom Rate: 2.15

Posts quality: +384
Ссылка на пост №6 Отправлено: 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, но эти костыли сам пиши, если такой эффект не устраивает :wacky:
Ещё нужно в MAPINFO прописать:
gameinfo {
  EventHandlers = "NewHandler"
}
1 2
JSO x
= Warrant Officer =
Next rank: - 2nd Lieutenant - after 10 points
1280

Doom Rate: 2.29

Posts quality: +669
Ссылка на пост №7 Отправлено: 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
Next rank: Recruit after 6 points
4

Doom Rate: 2

Ссылка на пост №8 Отправлено: 25.06.19 00:05:44
Здарова Думеры, до этого качал всякие моды на новое оружие и в целом всё было нормально, но есть одна проблема которая довольно сильно раздражает. Отдача во многих модах которая поднимает прицел оружия до небес и приходится постоянно регулировать её, можно ли как-нибудь отключить отдачу в настройках, чтобы прицел не поднимало? Я просто не силен в английском и ничего не нашел в настройках по поводу отдачи.
N00b
Chief Petty Officer
Next rank: Chief Petty Officer after 18 points
922

Doom Rate: 2.15

Posts quality: +384
Ссылка на пост №9 Отправлено: 25.06.19 00:21:08
JSO x
JSO x пишет:
players[ consoleplayer ].mo.A_Log( "Something..." );

Я же из Handler-а пытаюсь написать сообщение. Или ты предлагаешь в хэндлере обрабатывать, а выводить как-нибудь отдельно? Как информацию передать? Только не говори про глобальные переменные :x
JSO x пишет:
Более полным перебором будет

75-ый, действительно, тоже нужно обработать. 244 == Exit_Secret. А с 74-ым труднее, там же на любой слот можно перескочить, хоть на сорок разных штук с одной карты, и вопрос потеряет смысл (секретная карта называться может как угодно).
Кстати, с уровня можно выходить ещё множеством неразобранных способов вроде триггеров A_BossDeath или секторов (классического, не знаю, во что его xlat превращает) типа 11 :oops:
Darknesss
Нет такой стандартной характеристики у оружия в Doom :-)
Если не видно настроек самого мода, то напрямую никак. Но вполне можно написать "для личного использования" (не в мультиплеере) небольшую модификацию. Если укажешь мод, могу посмотреть.

Рейтинг сообщения: +2, отметил(и): JSO x, Darknesss
1 2
Darknesss
Recruit
Next rank: Recruit after 6 points
4

Doom Rate: 2

Ссылка на пост №10 Отправлено: 25.06.19 00:59:52
N00b2015 пишет:

Darknesss
Нет такой стандартной характеристики у оружия в Doom
Если не видно настроек самого мода, то напрямую никак. Но вполне можно написать "для личного использования" (не в мультиплеере) небольшую модификацию. Если укажешь мод, могу посмотреть.


Да всё норм, надо было просто в настройках мыши покопаться)
JSO x
= Warrant Officer =
Next rank: - 2nd Lieutenant - after 10 points
1280

Doom Rate: 2.29

Posts quality: +669
Ссылка на пост №11 Отправлено: 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, отметил(и): Mostcus, N00b
2 7 1
N00b
Chief Petty Officer
Next rank: Chief Petty Officer after 18 points
922

Doom Rate: 2.15

Posts quality: +384
Ссылка на пост №12 Отправлено: 25.06.19 17:10:21
JSO x
Да я не говорил, что ты неправ или что они не работающие. Просто нужно всех игроков рассматривать, и просто написать players[0].mo мне показалось каким-то несимметричным решением.
Наверное, в той ситуации тогда лучше A_PrintBold вызвать (но один раз), чтобы все видели сообщение, а не только первый игрок.
1 2
Doomgay1999
- Corporal -
Next rank: = Corporal = after 6 points
94

Doom Rate: 2

Posts quality: -1
Ссылка на пост №13 Отправлено: 26.06.19 05:29:42
А можно ли с при помощи Slade от редактировать музыку? Если нет то есть какой-то редактор по этому поводу?
Xtor
= Lance Corporal =
Next rank: - Master Corporal - after 38 points
162

Doom Rate: 1.95

Posts quality: +18
Ссылка на пост №14 Отправлено: 26.06.19 08:50:10
Doomgay1999, например, Audacity или Adobe Audition.
ZZYZX
- UAC Commissar -
Next rank: = UAC Commissar = after 16 pointsМодератор форума
6284

Doom Rate: 1.65

Posts quality: +1630
Ссылка на пост №15 Отправлено: 26.06.19 11:36:15
Xtor
Ему ж небось нужно миды или мусы.
https://zdoom.org/wiki/MIDI#External_links тут пара ссылок есть
2 2 1
FoxPlays
= Sergeant Major =
Next rank: UAC Sergeant Major after 36 points
644

Doom Rate: 2.14

Posts quality: +367
Ссылка на пост №16 Отправлено: 26.06.19 13:11:24
Насчёт скрипта с показом секретного выхода. Уже давно сделал всё на костылях :o

Появился ещё вопрос.
Как сделать проверку инвентаря игроков на наличие какого-либо ключа (см. quote ниже) и если ключ был найден в инвентаре игрока, то он раздаётся всем другим игрокам у которых нет этого или этих ключей? Хорошо если это получиться в виде ACS кода :x



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
}

Значит этот актор (или же предмет) является ключём.

1 1 1
Void Weaver
= Captain =
Next rank: - Major - after 144 points
2496

Doom Rate: 1.82

Posts quality: +807
Ссылка на пост №17 Отправлено: 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 =
Next rank: UAC Sergeant Major after 36 points
644

Doom Rate: 2.14

Posts quality: +367
Ссылка на пост №18 Отправлено: 26.06.19 15:02:39
Void Weaver

Ок, но можно как-нибудь сделать без создания новых акторов?
Возможно ли сделать проверку на базе уже существующих?
Просто делать проверку ключей отдельно для Doom, Heretic или же Strife будет тем не менее муторно :o
1 1 1
Void Weaver
= Captain =
Next rank: - Major - after 144 points
2496

Doom Rate: 1.82

Posts quality: +807
Ссылка на пост №19 Отправлено: 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 =
Next rank: UAC Sergeant Major after 36 points
644

Doom Rate: 2.14

Posts quality: +367
Ссылка на пост №20 Отправлено: 26.06.19 15:25:34
Void Weaver

Спасибо. Только жаль что нельзя проверять через CheckActorInventory(tid,"Key") :)
1 1 1
Страница 1 из 63Перейти наверх 1, 2, 3 ... 61, 62, 63  След.
   Список разделов - Местечко мапперов и моддеров - Тема для новичков. Вопросы по маппингу/моддингу - любые!-2