Welcome to U.A.C. [O.S.A.]
login / register
Status: Guest
Архивы форума | iddqd.ru
Wolf 3D
ПравилаПравила ПоискПоиск
18+
Тема для новичков. Вопросы по маппингу/моддингу - любые! Пред.  1, 2, 3 ... 181, 182, 183, 184, 185  След.
   Список разделов - Местечко мапперов и моддеров - Тема для новичков. Вопросы по маппингу/моддингу - любые!Ответить
АвторСообщение
Void Weaver
- Warrant Officer -
Next rank: = Warrant Officer = after 78 points
1062

Doom Rate: 1.95

Posts quality: +280
Ссылка на пост №3621 Отправлено: 10.10.18 18:27:29
Кстати вместо Goto LightDone можно просто ставить Stop.
5 1
N00b2015
- Sergeant -
Next rank: = Sergeant = after 6 points
334

Doom Rate: 2.34

Posts quality: +83
Ссылка на пост №3622 Отправлено: 10.10.18 21:17:28
Снова вопрос от меня. Подобный сюжет уже обсуждался недавно в этой теме, но по какой-то причине у меня не работает ни один из предложенных советов.
В некоторый момент при определённых условиях спаунится дохлый (изначально) актор A. Я хочу, чтобы арчвайл мог воскресить актора A, но как бы я ни пытался объявить A, вылезали проблемы.
Код актора A (на зскрипте, декорейт будет аналогичен):
class A: Actor { default { Monster; -COUNTKILL DamageFactor 0.0; Radius 32; Height 20; } states { Spawn: TNT1 A 0; TNT1 A 0; Death: TNT1 A 0 A_UnsetShootable; TNT1 A 0 A_UnsetSolid; TNT1 A 0; //(1) CYBR A -1 CanRaise; //чтобы актора видно было stop; Raise: //а тут будет происходить то, ради чего всё и затевается (будет спауниться другой актор) stop; } }


Приведённая версия актора не воскрешается, очевидно, потому что нет флажка +CORPSE: арчи просто пробегают мимо, не видя актора. Однако попытка поставить этот флажок с помощью A_ChangeFlag, например, в (1), приводит к полному исчезновению актора!
Как заставить арчвайла воскрешать актора A, не залезая в код арчвайла? Как безболезненно поставить флажок +CORPSE?
P. S. Если A_UnSet... заменить на A_NoBlocking, проблема, естественно, остаётся.
1 1
DOOMGABR
Chief Petty Officer
Next rank: - Warrant Officer - after 42 points
998

Doom Rate: 1.9

Posts quality: +545
Ссылка на пост №3623 Отправлено: 10.10.18 21:33:39
MyNameIs
Более менее помогло. Спс.

Добавлено спустя 4 минуты 52 секунды:

Проблема. Пытаюсь исправить неправильное поведение чейнгана, при 1 патроне. Нужно, чтобы когда осталась 1 пуля (Clip = 1) — силком отправить в стейт Ready, чтобы оттуда, при нажатии ОГОНЬ, алгоритм понял, что надо сменить оружие.
Написал так вот:
Fire: CHGG A 0 A_PlaySound("weapons/chngun", CHAN_WEAPON) CHGG A 0 A_Overlay (2, "Muzzle1") CHGG A 4 A_FireBullets(5.6, 0, 1, 5, "BulletPuff") TNT1 A 0 A_JumpIfInventory("Clip", 1, "Ready") // если в количество пуль = 1 —> отправить в стейт Ready. CHGG B 0 A_PlaySound("weapons/chngun", CHAN_WEAPON) CHGG B 0 A_Overlay (2, "Muzzle2") CHGG B 4 A_FireBullets(5.6, 0, 1, 5, "BulletPuff") CHGG B 0 A_ReFire Goto Ready

В игре какая-то хрень. Работает неправильно. Гозза почему-то тупо проигрывает только выстрел из первого ствола пулемёта и не переключается на выстрел второго. Что не так?

Добавлено спустя 6 минут 29 секунд:

P.S.: починил
___
Было:
... TNT1 A 0 A_JumpIfInventory("Clip", 1, "Ready") ...

Стало:
... TNT1 A 0 A_JumpIfNoAmmo("Ready") ...

Рейтинг сообщения: +1, отметил(и): VladGuardian
MyNameIs
= 2nd Lieutenant =
Next rank: - 1st Lieutenant - after 182 points
1458

Doom Rate: 1.94

Posts quality: +517
Ссылка на пост №3624 Отправлено: 10.10.18 22:13:17
DOOMGABR
джампифинвентори проверяет не равенство, а есть ли "это количество этого итема" в наличии у актора
A_JumpIfInventory Clip 1, например, будет работать, если патронов больше/равно единице

поэтому оно должно выглядеть как-то так
Скрытый текст:

Fire: CHGG A 0 A_PlaySound("weapons/chngun", CHAN_WEAPON) CHGG A 0 A_Overlay (2, "Muzzle1") CHGG A 4 A_FireBullets(5.6, 0, 1, 5, "BulletPuff") TNT1 A 0 A_JumpIfInventory("Clip", 1, "Fire1") Goto Ready Fire1: CHGG B 0 A_PlaySound("weapons/chngun", CHAN_WEAPON) CHGG B 0 A_Overlay (2, "Muzzle2") CHGG B 4 A_FireBullets(5.6, 0, 1, 5, "BulletPuff") CHGG B 0 A_ReFire ("Fire") Goto Ready

еще можно сделать это прыжком не на стейт файер1, а прыжком по цифре, но я не оч понял принципы их прыжков, поэтому им не доверяю


Рейтинг сообщения: +1, отметил(и): VladGuardian
1 1
Void Weaver
- Warrant Officer -
Next rank: = Warrant Officer = after 78 points
1062

Doom Rate: 1.95

Posts quality: +280
Ссылка на пост №3625 Отправлено: 10.10.18 22:42:03
DOOMGABR
Как вариант:
TNT1 A 0 A_JumpIf(CountInv("Clip")==1,"Ready") // если в количество пуль = 1 —> отправить в стейт Ready.
---------------------------------
N00b2015
Spawn: TNT1 A 0 TNT1 A 0 A_UnsetShootable TNT1 A 0 A_ChangeFlag("CORPSE",1) CYBR A -1 CanRaise Stop
На декоре норм пашет, проверил. Т. е. "Death" вообще не нужен.

Рейтинг сообщения: +2, отметил(и): N00b2015, DOOMGABR
5 1
YURA_111
= Master Sergeant =
Next rank: - Sergeant Major - after 30 points
500

Doom Rate: 2.02

Posts quality: +70
Ссылка на пост №3626 Отправлено: 11.10.18 21:52:58
N00b2015 :
states {
Spawn:
TNT1 A 0;
TNT1 A 0;
Death:
TNT1 A 0 A_UnsetShootable;
TNT1 A 0 A_UnsetSolid;
TNT1 A 0; //(1)
CYBR A -1 CanRaise; //чтобы актора видно было
stop;
Raise:
//а тут будет происходить то, ради чего всё и затевается (будет спауниться другой актор)
stop;
}
}


Вся проблема в том, что простой переход из некого ("не смертельного") стейта в стейт DEATH не означает что АКТОР погибает.
Для правильности нужно именно убить актора, а значит писать так:
Spawn:
TNT1 A 0
TNT1 A 0 A_Die
Stop
А штуковина CanRaise вообще здесь не нужна.

Рейтинг сообщения: +1, отметил(и): Void Weaver
alekv
Lieutenant Colonel
Next rank: - Colonel - after 258 pointsМодератор форума
3782

Doom Rate: 1.93

Posts quality: +638
Ссылка на пост №3627 Отправлено: 11.10.18 23:41:46
YURA_111 :
Для правильности нужно именно убить актора,

Просто
TNT1 A 0
Stop
убивает, A_Die не обязательно гздум сам очищает

Рейтинг сообщения: -1, отметил(и): JSO x
1 3 1
DOOMGABR
Chief Petty Officer
Next rank: - Warrant Officer - after 42 points
998

Doom Rate: 1.9

Posts quality: +545
Ссылка на пост №3628 Отправлено: 11.10.18 23:50:12
Проблема. Не воспроизводится звук щелчка дробовика (кастомный — "weapons/shotgp") у монстра. Причину вообще не понимаю. "weapons/shotgf" — звук выстрела без щелчка цевьем.
Стейт атаки шотганнера:
Missile: SPOS E 7 A_FaceTarget TNT1 A 0 A_PlaySound("weapons/shotgf", CHAN_AUTO) SPOS F 7 Bright A_CustomBulletAttack(22.5, 0, 3, random(1,5)*3, "BulletPuff", 0, CBAF_NORANDOM) SPSR A 5 A_PlaySound("weapons/shotgp", CHAN_AUTO) SPSR B 6 SPSR A 5 Goto See


SNDINFO
FistWallHit DSPUNCH weapons/chngun DSCHAING weapons/shotgf DSSGSHOT weapons/shotgp DSSGPUMP chainguy/attack DSCHAING $volume "weapons/chngun" 0.9 $volume "chainguy/attack" 0.9 spider/attack DSMASTER wolfss/attack DSPISTOL


В папке "sounds" звуки точно названы корректно. Странно. Что не так?
Void Weaver
- Warrant Officer -
Next rank: = Warrant Officer = after 78 points
1062

Doom Rate: 1.95

Posts quality: +280
Ссылка на пост №3629 Отправлено: 12.10.18 02:03:16
alekv :
Просто
TNT1 A 0
Stop
убивает, A_Die не обязательно
А вот нифига. Стоп в Спауне без А_Дай просто поремувит моба без трупа.

YURA_111 :
Для правильности нужно именно убить актора, а значит писать так:
Spawn:
TNT1 A 0
TNT1 A 0 A_Die
Stop
А штуковина CanRaise вообще здесь не нужна.
Прав, и на счёт CanRaise тоже - кейворд просто является альтернативным указателем для Heal кадру с -1 длительностью.

Так что варианты такой:
Spawn: TNT1 A 0 TNT1 A 0 A_Die Death: CYBR A -1 Stop
либо такой:
Spawn: TNT1 A 0 TNT1 A 0 A_UnsetShootable TNT1 A 0 A_ChangeFlag("CORPSE",1) CYBR A -1 Stop
Вариант Юры лучше, имхо.
---------------------------
DOOMGABR
Странно. Попробуй CHAN_AUTO заменить на CHAN_WEAPON.

Рейтинг сообщения: +2, отметил(и): JSO x, DOOMGABR
5 1
JSO x
= Master Sergeant =
Next rank: - Sergeant Major - after 60 points
470

Doom Rate: 2.64

Posts quality: +154
Ссылка на пост №3630 Отправлено: 12.10.18 19:22:31
Void Weaver :
Кстати вместо Goto LightDone можно просто ставить Stop.

Неверно. В Software-рендерере это создаёт непогашенную имитацию света. В OpenGL -- да, можно, там A_Light-производные просто не отображаются. Там Light( <тип> ) как имитатор выстрела используется.

DOOMGABR, у одного человека (nailzx128) крайне похожее было, точь-в-точь. Папка "Sounds", а не "Sound", должна называться. Это графика в любом читается. Звуки -- нет. Другого объяснения не вижу. Замена на "CHAN_WEAP" не должна помочь.

Рейтинг сообщения: +1, отметил(и): Void Weaver
1 5
DOOMGABR
Chief Petty Officer
Next rank: - Warrant Officer - after 42 points
998

Doom Rate: 1.9

Posts quality: +545
Ссылка на пост №3631 Отправлено: 12.10.18 22:30:49
Всем конечно спасибо за ваши ответы, но произошло нечто. Я тупо ночью выключил комп и пошёл спать, а на утро всё заработало. Ошибки как таковой не было, по факту. Слейд я точно сохранял, все названия папок, декларации, имена файлов, правильные имена в коде. Всё было на своих местах. Странно :shock:
nailzx128
- Corporal -
Next rank: = Corporal = after 10 points
90

Doom Rate: 1.91

Posts quality: +21
Ссылка на пост №3632 Отправлено: 13.10.18 23:03:13
Возникла небольшая проблема. Вот скрипт для увеличения максимального кол-ва переносимых патронов. Он не работает корректно.
Если заспавнить мой AmmoExtender через консоль, всё работает хорошо. НО! Суть в том, что этот предмет заменяет оригинальный Backpack. На некоторых картах, при самом первом подборе предмета, ничего не происходит. А вот к примеру на седьмой карте Doom 2, этот предмет вообще поднимается максимальное кол-во раз! Итак, вопрос знатокам. Что я сделал не так?
Ниже публикую код, если это что-то даст.

ACS скрипт
bool playerbackpack[8] = { FALSE }; script 123 (void) { if (playerbackpack[PlayerNumber()]) { if (GetAmmoCapacity("energyammo") < 1000) { SetAmmoCapacity("energyammo", GetAmmoCapacity("energyammo") + 100); giveinventory("energyammo",100); SetAmmoCapacity("tracerbulletsammo", GetAmmoCapacity("tracerbulletsammo") + 100); giveinventory("tracerbulletsammo",100); SetAmmoCapacity("petroleumammo", GetAmmoCapacity("petroleumammo") + 100); giveinventory("petroleumammo",100); SetAmmoCapacity("missileammo", GetAmmoCapacity("missileammo") + 100); giveinventory("missileammo",100); SetAmmoCapacity("meatballsammo", GetAmmoCapacity("meatballsammo") + 100); giveinventory("meatballsammo",100); } } else playerbackpack[PlayerNumber()] = TRUE; } script 124 ENTER { if (GetAmmoCapacity("energyammo") >> 0) playerbackpack[PlayerNumber()] = true; } script 125 RESPAWN { playerbackpack[PlayerNumber()] = FALSE; }


Код предмета

actor ammoextender : custominventory replaces backpack { inventory.pickupmessage "$ammo_ext" inventory.pickupsound "pickup" //оригинально... scale 0.7 states { spawn: tnt1 a 0 acs_namedexecutealways("harpplay",0,0,0) //тут проигрывается музон aful abcdefghijklmnop 2 loop pickup: tnt1 a 0 acs_execute(123,0,0,0,0) stop } }
DOOMGABR
Chief Petty Officer
Next rank: - Warrant Officer - after 42 points
998

Doom Rate: 1.9

Posts quality: +545
Ссылка на пост №3633 Отправлено: 14.10.18 00:35:47
1. Как сделать, чтобы БФГ-шар не уничтожал актор своим трейсером? В моём случае, это думовская взрывная бочка.
2. Не могу понять, где найти код который отвечает за выпускание Ревенантом обычной ракеты и самонаводящейся. На ZDoom Вики я запутался и так ничего и не понял.
Void Weaver
- Warrant Officer -
Next rank: = Warrant Officer = after 78 points
1062

Doom Rate: 1.95

Posts quality: +280
Ссылка на пост №3634 Отправлено: 14.10.18 01:59:37
nailzx128
Из того что на поверхности:
nailzx128 :
if (GetAmmoCapacity("energyammo") >> 0)
когда должно быть
if (GetAmmoCapacity("energyammo") > 100)
nailzx128 :
этот предмет вообще поднимается максимальное кол-во раз!
Типа берёшь 1 а эффект как от 10? Если да, то попробуй прописать в ammoextender:
+INVENTORY.ALWAYSPICKUP
Inventory.Amount 1
Inventory.MaxAmount 1
---------------------------
DOOMGABR
1. Вижу 2 варианта:
Вариант №1:
Actor MyBarrel : ExplosiveBarrel replaces ExplosiveBarrel { DamageFactor "BFGSplash", 0.0 //Тупо даём бочке иммунитет к БФГ-трэйсерам }
Плюс - не затрагивается игрок; минус - в этом случае вспышки будут по-прежнему спауниться на бочках.

Вариант №2:
Actor MyDoomguy: DoomPlayer { Species "BFGTracerFriends" //Даём игроку и бочке одинаковый специес } Actor MyBFGExtra : BFGExtra replaces BFGExtra { +MTHRUSPECIES //Даём флаг кастомному трэйсер-пуффу БФГ } Actor MyBarrel : ExplosiveBarrel replaces ExplosiveBarrel { Species "BFGTracerFriends" //Даём игроку и бочке одинаковый специес }
Плюс - выглядит идеально; минус - надо эдитить игрока, а также тратить уникальное свойство Species, ну и до кучи игрок становится неуязвим к БФГ-трэйсерам.
Не исключено что можно сделать какой-нибудь хитрый джамп с проверкой акторкласса чтобы игрок таки получал урон от БФГ-спрея.
---------------------------
2. По поводу ракет Рева.
DOOMGABR :
Не могу понять, где найти код который отвечает за выпускание Ревенантом обычной ракеты и самонаводящейся.
Дело в том что за оба типа снарядов отвечает ОДИН актор (RevenantTracer) и ОДНА ф-ция (A_Tracer). Штука весьма хитрожопая и работает в зависимости от совпадения таймингов вызова ф-ции и некоего глобального таймера кратного 4. Т. е. шанс и степень самонаведения строго зависят от того какое число тиков использовано при вызове A_Tracer. Это вкратце.
Имхо, с А_Трэйсер вообще не стоит связываться, ну если только не планируешь нечто мега извратное.

Добавлено спустя 1 час 19 минут 7 секунд:

ЕЯПП, то правила следующие:
Если интервал вызова ф-ции нечётный, то наведение будет срабатывать каждый интервал×4 tics.
Например:
Скрытый текст:

Actor Tracer3 : RevenantTracer { States { Spawn: FATB AB 3 bright A_Tracer loop } }
Будет всегда наводящаяся, но наведение будет слабым - каждые 12 тиков.


Если интервал вызова ф-ции кратен 4, то будет срабатывать каждый интервал, но только если ракета была выстрелена в глобальный тик кратный 4.
Например:
Скрытый текст:

Actor Tracer4 : RevenantTracer { States { Spawn: FATB AB 4 bright A_Tracer loop } }
Будет наводящаяся если выстрел совершён в глобал-тик кратный 4, а наведение будет сильным - каждые 4 тика.


Если интервал вызова ф-ции чётный но НЕ кратен 4, то будет срабатывать каждый интервал×2 tics, но только если ракета была выстрелена в чётный глобальный тик.
Например:
Скрытый текст:

Actor RevenantTracer { States { Spawn: FATB AB 2 bright A_Tracer loop } }
Классика. Будет наводящаяся если выстрел совершён в чётный глобал-тик, а наведение будет сильным - каждые 4 тика.


Максимально злой вариант будет при FATB AB 1 bright A_Tracer - спаунится всегда наводящейся с максимальным наведением в 4 тика.

Рейтинг сообщения: +3, отметил(и): YURA_111, JSO x, DOOMGABR
5 1
YURA_111
= Master Sergeant =
Next rank: - Sergeant Major - after 30 points
500

Doom Rate: 2.02

Posts quality: +70
Ссылка на пост №3635 Отправлено: 14.10.18 09:08:32
Void Weaver :
минус - в этом случае вспышки будут по-прежнему спауниться на бочках.


можно внутри вот этого:

https://zdoom.org/wiki/Classes:BFGExtra

прописать A_checkproximity, c проверкой рядом ли бочка во время этой самой вспышки и если рядом то прыжок на TNT1 A 0. Вспышки не будет визуально...

Рейтинг сообщения: +1, отметил(и): Void Weaver
nailzx128
- Corporal -
Next rank: = Corporal = after 10 points
90

Doom Rate: 1.91

Posts quality: +21
Ссылка на пост №3636 Отправлено: 14.10.18 10:35:35
Void Weaver :
nailzx128
Из того что на поверхности:
nailzx128 :
if (GetAmmoCapacity("energyammo") >> 0)
когда должно быть
if (GetAmmoCapacity("energyammo") > 100)
nailzx128 :
этот предмет вообще поднимается максимальное кол-во раз!
Типа берёшь 1 а эффект как от 10? Если да, то попробуй прописать в ammoextender:
+INVENTORY.ALWAYSPICKUP
Inventory.Amount 1
Inventory.MaxAmount 1

Спасибо! Проблема с эффектом как от 10 решена! Однако, осталась проблема с первым поднятием.
И да, ещё вопрос знатокам.Почему двигло ругается на это:
weapon.ammouse (random (1, 0))
?
Суть в том, что я хочу снизить потребление патронов у одной очень скорострельной пушки. Одна из идей была в установке рандомного параметра в пункте кол-ва потребления аммуниции.
YURA_111
= Master Sergeant =
Next rank: - Sergeant Major - after 30 points
500

Doom Rate: 2.02

Posts quality: +70
Ссылка на пост №3637 Отправлено: 14.10.18 13:11:29
nailzx128 :
Суть в том, что я хочу снизить потребление патронов у одной очень скорострельной пушки.


МОжно вместо weapon.ammouse использовать внутри стейтов экшен A_TakeInventory. Там рандом точно сработает.

Рейтинг сообщения: +1, отметил(и): JSO x
nailzx128
- Corporal -
Next rank: = Corporal = after 10 points
90

Doom Rate: 1.91

Posts quality: +21
Ссылка на пост №3638 Отправлено: 14.10.18 13:47:12
YURA_111 :
МОжно вместо weapon.ammouse использовать внутри стейтов экшен A_TakeInventory. Там рандом точно сработает.

Не даром говорят, что всё гениальное - просто. Спасибо!

Добавлено спустя 21 минуту 40 секунд:

YURA_111 :
МОжно вместо weapon.ammouse использовать внутри стейтов экшен A_TakeInventory. Там рандом точно сработает.

Хотя не, тут A_TakeInventory сработал откровенно...странно.
a_takeinventory("tracerbulletsammo",random(1,0));

Сжирает все патроны почти сразу. ЧЗНХ? :bitsa:
Герр Смертоносец
= Master Sergeant =
Next rank: - Sergeant Major - after 5 points
525

Doom Rate: 1.53

Posts quality: +282
Ссылка на пост №3639 Отправлено: 14.10.18 15:52:00
nailzx128 :
Сжирает все патроны почти сразу. ЧЗНХ? :bitsa:

Тому що "0" означает изъять всё независимо от количества.

Вариант раз: повесить на итем флаг INVENTORY.KEEPDEPLETED.
Вариант два: пропускать изъятие одной единицы через A_Jump с нужным шансом.

Рейтинг сообщения: +2, отметил(и): JSO x, Void Weaver
1
Void Weaver
- Warrant Officer -
Next rank: = Warrant Officer = after 78 points
1062

Doom Rate: 1.95

Posts quality: +280
Ссылка на пост №3640 Отправлено: 15.10.18 00:25:01
YURA_111 :
прописать A_checkproximity, c проверкой рядом ли бочка во время этой самой вспышки и если рядом то прыжок на TNT1 A 0. Вспышки не будет визуально...
Кстати да, работает как часы :
Actor MyBFGExtra : BFGExtra replaces BFGExtra { States { Spawn: TNT1 A 0 NoDelay A_CheckProximity("Death","MyBarrel",20.0,1) BFE2 ABCD 8 Bright Death: TNT1 A 0 Stop } }

-----------------
nailzx128 :
Суть в том, что я хочу снизить потребление патронов у одной очень скорострельной пушки. Одна из идей была в установке рандомного параметра в пункте кол-ва потребления аммуниции.
Полагаю речь идёт о Wailer, да? У тебя в коде все ф-ции каждого выстрела "упакованы" в 1 тик анонимной ф-ции, из-за этого пуха дико скорострельна. А ты не думал пойти несколько иным путём - чуток снизить скорострельность (повысив дамаг и\или ко-во пуль) вместо просто снижения потребления аммо?
5 1
Страница 182 из 185Перейти наверх Пред.  1, 2, 3 ... 181, 182, 183, 184, 185  След.
   Список разделов - Местечко мапперов и моддеров - Тема для новичков. Вопросы по маппингу/моддингу - любые!