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

Doom Rate: 1.83

Posts quality: +536
Ссылка на пост №3881 Отправлено: 10.04.19 12:21:48
Оператор && гласит что
any non-zero number is true, then this returns true: 4 && 3
Вопрос: можно ли в анон ф-ции записать чтобы

{
<...>
If ((GetDistance(1,AAPTR_TRACER)<=40&&-60<=GetAngle(GAF_RELATIVE|GAF_SWITCH,AAPTR_TRACER)<=60)==1) //Эта строка была TRUE ТОЛЬКО при совпадении значений в данных диапазонах, а не при возврате любых значений отличных от 0.
	{
	  Return A_GiveInventory("Blinder",1,AAPTR_TRACER);
	}
Else
	{
	  Return state("");
	}
}
Иными словами мне надо ввинтить в анон ф-цию эквивалент строки A_JumpIfInTargetLOS("Blind",120,JLOSF_PROJECTILE|JLOSF_DEADNOJUMP,40), т. е. чтобы игрок "слеп" только если поймает непосредственно в лицо снаряд с этой строкой.
1 7 1
JSO x
- Sergeant Major -
Next rank: = Sergeant Major = after 54 points
546

Doom Rate: 2.43

Posts quality: +192
Ссылка на пост №3882 Отправлено: 10.04.19 16:50:31
Только несколькими проверками. "&&" (логический AND) возвращает TRUE, если операнды у него -- "TRUE" и "TRUE". Единственным числовым значением, которое считается эквивалентом "FALSE", является число "0".

Если ты сам нигде в коде ничего не напутал, то так будет работать:
if ( ( GetDistance( 1, AAPTR_TRACER ) <= 40 )
        && ( -60 <= GetAngle( GAF_RELATIVE|GAF_SWITCH, AAPTR_TRACER ) )
        && ( GetAngle( GAF_RELATIVE|GAF_SWITCH, AAPTR_TRACER ) <=60 ) ) {
    // <sub-block code here...>
}

Рейтинг сообщения: +1, отметил(и): Void Weaver
1 5
Void Weaver
- 1st Lieutenant -
Next rank: = 1st Lieutenant = after 60 points
1780

Doom Rate: 1.83

Posts quality: +536
Ссылка на пост №3883 Отправлено: 10.04.19 17:43:14
Шило на мыло же (я пробовал и без "==1"), и я как раз и говорил о том что && возвращает ТРУ для любого не нулевого значения, мне же надо чтобы ТРУ возвращалось ТОЛЬКО если оба значения из диапазона.
1 7 1
N00b2015
= Sergeant =
Next rank: - Master Sergeant - after 22 points
378

Doom Rate: 2.28

Posts quality: +104
Ссылка на пост №3884 Отправлено: 10.04.19 18:37:13
Void Weaver
(здесь был ответ)
Edit: ошибся, не заметил флаг GAF_SWITCH.
1 1
Void Weaver
- 1st Lieutenant -
Next rank: = 1st Lieutenant = after 60 points
1780

Doom Rate: 1.83

Posts quality: +536
Ссылка на пост №3885 Отправлено: 10.04.19 19:16:43
Да, конструкция вызывается из снаряда, в итоге хочу чтоб последний "слепил" игрока если тот поймает этот снаряд прямо в лицо (эдак в конусе fov под 120-160 градусов). Офк можно тупо прописать A_JumpIfTargetInLOS в самого игрока но я бы не хотел выводить код за пределы актора снаряда.

Возможно я туплю но разве флаги не меняют поведение просчёта угла и точки отсчёта?

GAF_RELATIVE: Normally this function returns the absolute angle of the line from the caller to the pointer (i.e., relative to facing due east). This flag has the function return the angle relative to the caller's angle instead.
GAF_SWITCH: Checks the line going from the pointer to the angle instead. If used with GAF_RELATIVE, will also be relative to the pointer's angle not the caller's.


ЭДИТ:
Полагаю что это элементарно лечится через вывод 1\0 посредством SetResultValue, но проблема в том что оная робит только со скриптами.
Поэтому вопрос сводится к: "можно ли на декоре записать возврат конкретного значения инт-ф-ции как ТРУ\ФАЛЬС?"
1 7 1
YURA_111
- Sergeant Major -
Next rank: = Sergeant Major = after 30 points
570

Doom Rate: 2.01

Posts quality: +89
Ссылка на пост №3886 Отправлено: 11.04.19 14:53:08
Void Weaver пишет:
Офк можно тупо прописать A_JumpIfTargetInLOS в самого игрока


Void Weaver пишет:
но я бы не хотел выводить код за пределы актора снаряда.


Тогда может быть эта функция "https://zdoom.org/wiki/A_JumpIfInTargetLOS" поможет (если я правильно понял что тебе нужно)
Void Weaver
- 1st Lieutenant -
Next rank: = 1st Lieutenant = after 60 points
1780

Doom Rate: 1.83

Posts quality: +536
Ссылка на пост №3887 Отправлено: 11.04.19 19:37:51
Это невозможно.
1 7 1
JSO x
- Sergeant Major -
Next rank: = Sergeant Major = after 54 points
546

Doom Rate: 2.43

Posts quality: +192
Ссылка на пост №3888 Отправлено: 11.04.19 21:01:08
Что не так работает в моём коде? Тебе нужна проверка на "dist < 40", "angle > -60" и "angle < 60" одновременно, так? Тогда так, как я скидывал выше, должно работать правильно.

if ( ( GetDistance( 1, AAPTR_TRACER ) <= 40 ) 
    // Дистанция.
        && ( GetAngle( GAF_RELATIVE|GAF_SWITCH, AAPTR_TRACER ) >= -60 )
    // Угол, больший -60 degree.
        && ( GetAngle( GAF_RELATIVE|GAF_SWITCH, AAPTR_TRACER ) <=60 ) ) 
    // Угол, меньший 60 degree.
    {}


Если попробовать понять твой вопрос по-другому (ориентируясь на комментарий в коде) -- можно сделать так:
if ( ( GetDistance( 1, AAPTR_TRACER ) <= 40 ) 
        && ( GetAngle( GAF_RELATIVE|GAF_SWITCH, AAPTR_TRACER ) >= -60 )
        && ( GetAngle( GAF_RELATIVE|GAF_SWITCH, AAPTR_TRACER ) <=60 ) 
        && ( GetAngle( GAF_RELATIVE|GAF_SWITCH, AAPTR_TRACER ) == GetDistance( 1, AAPTR_TRACER ) ) ) 
    {}


Скрытый текст:

Я, честно говоря, часто не понимаю твоего способа выражения мыслей. По-моему, иногда части твоего сообщения противоречат друг другу, а иногда и вовсе не относятся к делу и выглядят как случайно добавленные строки.

1 5
ZZYZX
- Commissar -
Next rank: = Commissar = after 376 pointsМодератор форума
4964

Doom Rate: 1.74

Posts quality: +1357
Ссылка на пост №3889 Отправлено: 11.04.19 21:37:52
+1 к JSO x, попытался понять вопрос, ничё не понял и просветлений не предвидится...
2 2 1
Void Weaver
- 1st Lieutenant -
Next rank: = 1st Lieutenant = after 60 points
1780

Doom Rate: 1.83

Posts quality: +536
Ссылка на пост №3890 Отправлено: 11.04.19 23:49:07
JSO x
Я хз что именно непонятно в моих текстах, и уж тем более где там противоречия или неуместные фразы но вот, пожалуйста:

Actor Hy_PoisonNovaMissile
{
+SEEKERMISSILE
+NODAMAGETHRUST
+BLOODLESSIMPACT
+RIPPER
+BRIGHT
Projectile
Speed 30
Height 8
Radius 15
Damage (random(1,3)*6)
Scale 0.2
RenderStyle Add
Alpha 0.9
States
{
Spawn:
PSSS ABCDEFGHIJKLMNOPQRSTUVWX 1 Light("POISONPULSE")
{
A_FadeOut(0.037);
A_SetScale(Scalex+0.2,Scaley+0.2);
A_RadiusGive("Hy_PoisonHitNovaSpawner",40,RGF_PLAYERS|RGF_MONSTERS|RGF_OBJECTS|RGF_NOSIGHT|RGF_EXFILTER,1,"Hydra");
If ( ( GetDistance( 1, AAPTR_TRACER ) <= 40 ) 
            && ( GetAngle( GAF_RELATIVE|GAF_SWITCH, AAPTR_TRACER ) >= -60 )
            && ( GetAngle( GAF_RELATIVE|GAF_SWITCH, AAPTR_TRACER ) <=60 ) )
	{
	  Return A_Jump(256,"Blind");
	}
Else
	{
	  Return state("");
	}
}
Death:
TNT1 A 0 
Stop
Blind:
TNT1 A 0 A_GiveInventory("Blinder",1,AAPTR_TRACER)
Stop
}
}

Actor Blinder : CustomInventory
{
+INVENTORY.ALWAYSPICKUP
Inventory.MaxAmount 0
States
{
Spawn:
TNT1 A 1
Loop

Pickup:
TNT1 A 0 A_SetBlend("00 07 03",1.00,350)
Stop
}
}
Actor Blinder выдаётся всегда; выходит что анон ф-ция возвращает всегда ТРУ. И похоже что поведение условия работы оператора полностью укладывается в примечание к оному (любое значение отличное от 0 всегда рассматривается как ТРУ).
Что-то всё ещё непонятно?
1 7 1
ZZYZX
- Commissar -
Next rank: = Commissar = after 376 pointsМодератор форума
4964

Doom Rate: 1.74

Posts quality: +1357
Ссылка на пост №3891 Отправлено: 12.04.19 01:20:58
А. Я кажись понял. Объясняю.
Void Weaver пишет:
И похоже что поведение условия работы оператора полностью укладывается в примечание к оному (любое значение отличное от 0 всегда рассматривается как ТРУ).

Это означает, что если ты напишешь "3 && 60", то результат будет "1", то есть true.
Но ты не пишешь 3 && 60, ты пишешь (GetDistance(...) <= 60), то есть ты через && объединяешь результаты сравнений таким образом, чтобы все из них проходили.
В этой части у тебя всё верно.

Скорее всего неверна у тебя логика, то есть вызываемые функции возвращают не то, что ты думаешь. Попробуй добавить Console.Printf() или A_Log() с целью залоггировать результат GetAngle или GetDistance.

Рейтинг сообщения: +1, отметил(и): Void Weaver
2 2 1
Void Weaver
- 1st Lieutenant -
Next rank: = 1st Lieutenant = after 60 points
1780

Doom Rate: 1.83

Posts quality: +536
Ссылка на пост №3892 Отправлено: 12.04.19 01:37:52
JSO x, ZZYZX
Ох, ребьзь, простите идиота... ну конечно, я же сравниваю значения а не тупо вывожу их. Да, вариант ДЖСО работает и похоже косяк где-то в ином месте.

А не подскажете куда именно вписать A_LogFloat() и что указывать внутри неё?
1 7 1
Герр Смертоносец
- Sergeant Major -
Next rank: = Sergeant Major = after 11 points
589

Doom Rate: 1.53

Posts quality: +341
Ссылка на пост №3893 Отправлено: 12.04.19 04:10:50
Void Weaver пишет:
Почему MageStaffFX2 (aka звезда Bloodscourge посоха) будучи ударенной Disc of Repulsion немедленно записывает игрока в свой трэйсерфилд и соответственно мгновенно перенацеливается на стрелка?
Есть какое-нибудь рациональное объяснение сему феномену или этот баг зарыт где-то глубже на уровне кода?

Вот я мало ковырялся в хексене и его мутных специализированных фичах, поэтому могу фигню сморозить.

Насколько я понял, диск оптом меняет поинтеры у всего, что попало в радиус действия: текущий таргет пишется в трасерфилд, игрок пишется в таргетфилд. Сделано это для того, чтобы условный ревенант получил по морде своим же A_SeekerMissile, который наводился бы на ревенанта, будучи как бы переиспущенным игроком.
Другое дело, если игрок сам стреляет чем-то A_SeekerMissile. Такая ракета, попав в радиус действия, мгновенно записывает текущий таргет (игрока) в трасерфилд, и его же в таргетфилд. Получается казус: ракета, испущенная игроком, на него же и нацеленная. Такая ракета будет летать вокруг него (и сквозь него) как назойливая муха, пока не лопнет. Что мы и наблюдаем на видео. (Звезда юзает модификацию A_SeekerMissile: A_MStaffTrack, которая, если трасера изначально нет - с вероятностью 20% попытается получить его в пределах 10 пунктов.)

Загадка тут в другом. Disc of repulsion срабатывает только на снаряды с флагом CANBLAST, а у MageStaffFX2 этого флага в оригинале нет. (На видео есть характерные искорки BlastEffect, которые совершенно точно говорят нам о срабатывании диска.) Значит одно из двух: либо какого-то лешего этот флаг у звезды появился, либо проверка на CANBLAST сломалась где-то на уровне движка (или зскриптовых воздействий на движок).
2
Void Weaver
- 1st Lieutenant -
Next rank: = 1st Lieutenant = after 60 points
1780

Doom Rate: 1.83

Posts quality: +536
Ссылка на пост №3894 Отправлено: 12.04.19 06:19:34
Ну касаемо того почему наворачивает круги это-то понятно, я же сразу уточнил что в трэйсерфилд снаряда записывается игрок, при этом не переставая быть в таргетфилде также.

Насчёт CANBLAST полагаю что для снарядов флаг по умолчанию "+" если явно не прописан "-", но при этом почему-то скрыт. Просто все снаряды без явно прописанного CANBLAST всё равно отбрасываются.

Причина же записи игрока в трэйсер снаряда по-прежнему не ясна, хотя версия с диском меняющим поинтеры была интересна.
По результату тестов получается что баг хардкодед где-то в самой MageStaffFX2: снаряд унаследованный от снаряда но БЕЗ флагов И БЕЗ вызова A_MStaffTrack ведёт себя так же; при этом вторым условием является необходимость вызова A_SeekerMissile.

Как-то так:
__Hexen_MageStaff-based_Weapon.wad


P. S.
Если это не починят то открываются довольно интересные перспективы. Например запил оффенсив-шилдов.
P. P. S.
А стоит ли вообще репортить на гоззу?
1 7 1
Герр Смертоносец
- Sergeant Major -
Next rank: = Sergeant Major = after 11 points
589

Doom Rate: 1.53

Posts quality: +341
Ссылка на пост №3895 Отправлено: 12.04.19 08:11:22
Void Weaver пишет:
Насчёт CANBLAST полагаю что для снарядов флаг по умолчанию "+" если явно не прописан "-", но при этом почему-то скрыт. Просто все снаряды без явно прописанного CANBLAST всё равно отбрасываются.

Вот не должно быть этого. Projectile combo для дума и хексена немножко разные, но этот флаг туда не входит. По крайней мере если верить здум вики.

Косяк может быть в трёх местах:
1. Если переписал что-то в ZScript virtual function. (Проверяется отключением зскрипта).
2. Если переписал что-то в самой MageStaffFX2. (Проверяется пулянием чего-то на 100% свежего и ниоткуда не унаследованного).
3. Если в билде гоззы что-то отвалилось.

Вообще рекомендую провести эксперимент. По-быстрому скрафтить тестовую пушку, пуляющую девственный RevenantTracer, который ко всему этому хексену вообще не имеет отношения. Если диск сработает и на него - значит точно косяк гоззы. Для надёжности стоит проверить на какой-нибудь старой версии здум.

Void Weaver пишет:
Если это не починят то открываются довольно интересные перспективы. Например запил оффенсив-шилдов.

Да в общем-то не имеет значения, починят или нет. Можно просто прописать снарядам, чтобы они сразу после спауна копировали таргет в трасерфилд, и тогда они будут до бесконечности виться вокруг выстрелившего. А ещё можно замутить моднейшее ёба-оружие, чтобы фаерболы дооолго накапливались, летая вокруг игрока, как вокруг зловещей анимешной девочки, а потом внезапно по мановению переключающей трасер волшебной палочки разом всей кучей летели в цель. Пафоса будут просто полные штаны!

Рейтинг сообщения: +1, отметил(и): Void Weaver
2
Void Weaver
- 1st Lieutenant -
Next rank: = 1st Lieutenant = after 60 points
1780

Doom Rate: 1.83

Posts quality: +536
Ссылка на пост №3896 Отправлено: 12.04.19 11:06:35
Герр Смертоносец пишет:
Вот не должно быть этого. Projectile combo для дума и хексена немножко разные, но этот флаг туда не входит. По крайней мере если верить здум вики.

Monsters with the BOSS or DONTBLAST flags are normally unaffected; as well as any actor that isn't a monster, player, or projectile, unless they have the CANBLAST flag.
Видимо всё же КЭНБЛАСТ это какой-то "крипто"-флаг, не входящий в комбо, нигде явно не прописанный но по умолчанию активный для нон-босс монстров, игрока и снарядов. Ну или на вики его банально забыли упомянуть в комбо. ;|

Ваще-т это вполне себе ванильный баг (я это отметил в описании под видео), но при этом "успешно" портированный. :| Просто я предположил что воспроизведение бага при портировании оного могло оставить след где-то на поверхности, на уровне декора.
Так что 3 вариант исключается как первопричина, а про 1 и 2 я не в курсе, тем более что лично я ничего не менял. И да, не уточнил выше но, тем не менее актору не родственному СтаффМиссилю не удаётся воспроизвести аналогичное поведение даже при копировании всех параметров за исключением натив A_MStaffTrack, ну и собс-но наследования. Возможно не вполне тщательно экспериментировал.

А вот за идею лайкушечку! ^_^

EDIT:

Наверное что-то типа:
Actor SeekerShieldMissile
{
+SEEKERMISSILE
Projectile
States
{
Spawn:
TNT1 A(AAA) 1 //Чтобы успели вылететь на некоторое расстояние от стрелкА для формирования радиуса "орбиты" вокруг него, коррелирует со скоростью снаряда
TNT1 A 0 A_RearrangePointers(AAPTR_DEFAULT,AAPTR_DEFAULT,AAPTR_TARGET)
ChargeUp:
TNT1 A 0 A_JumpIfInTargetInventory("SeekerCounter",<ко-во снарядов>,"PreRelease")
ABCD ABCDEFG № A_SeekerMissile(х,у) //"Косметические" значения наведения
TNT1 A 0 A_SpawnItemEx("SeekerShieldMissile",-5,0,0,0,0,0,0,SXF_ABSOLUTEVELOCITY|SXF_NOCHECKPOSITION)
TNT1 A 0 A_GiveToTarget("SeekerCounter")
Loop

PreRelease:
TNT1 A 0 A_RearrangePointers(AAPTR_DEFAULT,AAPTR_DEFAULT,AAPTR_NULL)
TNT1 A 0 A_TakeFromTarget("SeekerCounter") //Обнуляем счётчик снарядов игрока\монстра
//TNT1 A 0 A_Warp(AAPTR_TARGET,0,0,Height/2,0,WARPF_NOCHECKPOSITION|WARPF_COPYINTERPOLATION|WARPF_BOB) //Опционально можно собрать в кучку перед залпом
Release:
ABCD ABCDEFG № A_SeekerMissile(х,у) //"Науськивание" всех снарядов в одну цель ИЛИ
//ABCD ABCDEFG № A_SeekerMissile(х,у,SMF_LOOK,256,100) //Роспуск всех снарядов в свободную охоту
Loop

<...>

}
}
1 7 1
Void Weaver
- 1st Lieutenant -
Next rank: = 1st Lieutenant = after 60 points
1780

Doom Rate: 1.83

Posts quality: +536
Ссылка на пост №3897 Отправлено: 16.04.19 08:12:39
Возможно ли на декоре сделать так чтобы монстры реагировали на абстрактный актор (ну пускай даже на монстра) как на игрока?
Т. е. чтобы при обнаружении (хотя бы визуально) такого актора сразу на него агрились, но при этом оный не мешал бы потенциальному инфайтингу между монстрами.
Детали проблемы:
Скрытый текст:

Дело в том что столкнулся с серьёзной проблемой шилда для убер-волыны: он работает как часы... за исключением милишников, - они по-прежнему пытаются ломать лицо игроку игноря шилд. :( Причём проблема не в безопасности игрока а в том что при таком раскладе шилд будет перманентно неуязвим против мили атак вместе с игроком.
Кароч нужно как-то заставить монстров таргетить именно шилд, но юзать Thing_Hate не хотелось бы (бо тид + сразу поднимет на уши всех в радиусе) а A_AlertMonsters к сожалению не пашет на тех у кого уже есть цель.

1 7 1
ZZYZX
- Commissar -
Next rank: = Commissar = after 376 pointsМодератор форума
4964

Doom Rate: 1.74

Posts quality: +1357
Ссылка на пост №3898 Отправлено: 16.04.19 14:03:59
Начни зскрипт использовать уже

Рейтинг сообщения: 0, отметил(и): JSO x, Void Weaver
2 2 1
Void Weaver
- 1st Lieutenant -
Next rank: = 1st Lieutenant = after 60 points
1780

Doom Rate: 1.83

Posts quality: +536
Ссылка на пост №3899 Отправлено: 16.04.19 14:50:04
ZZYZX
Скрытый текст:

Коть, ты повторяешься. Без обид, но это уже раздражает.
Я прекрасно понимаю возможности зскрипта, но если бы я умел в него то таких вопросов бы не задавал.

1 7 1
ZZYZX
- Commissar -
Next rank: = Commissar = after 376 pointsМодератор форума
4964

Doom Rate: 1.74

Posts quality: +1357
Ссылка на пост №3900 Отправлено: 16.04.19 16:39:12
Ок, отвечу по другому, на декоре это сделать нельзя. Теперь ты без щита в жертву декору. Стало лучше?

Я пишу про зскрипт ("повторяюсь") не потому, что мне по приколу. А потому что тебе по сути нужно сделать две фичи одновременно: общий счётчик здоровья для всего щита (кусают одну часть, ослабляется весь щит), и поведение вида - если любого монстра ударило щитом, насильственно переставить ему таргет. Или переделать проджектайлы щита таким образом, чтобы они не были проджектайлами и не были связаны с игроком (потому что это такая логика у монстров, что если их дамажит проджектайлом то они будут атаковать именно игрока). Ещё на зскрипте можно определять дамаг по игроку и переносить его на щит. DamageMobj если что. Ни первое, ни второе сделать на декоре невозможно.

Вообще монстры агрятся на любое + FRIENDLY, но сомневаюсь что тебе это поможет, там по идее всё равно игрок в приоритете, будут баги.

Рейтинг сообщения: +1, отметил(и): VladGuardian
2 2 1
Страница 195 из 200Перейти наверх Пред.  1, 2, 3 ... 194, 195, 196 ... 198, 199, 200  След.
   Список разделов - Местечко мапперов и моддеров - Тема для новичков. Вопросы по маппингу/моддингу - любые!