В данной теме у нас будет что то типа ненужных наработок в моддинге. Под моддином упоминается изменение монстров, их поведения, спрайты, оружия и всё в таком духе.
Тут я думаю можно обойтись без одного общего вада, хотя в принципе если тема разовьётся и народ изъявит желание на один общий вад с объединёнными ненужными наработками, то прицепим и общий вад. Так же как и в маппинге - это уже будет считаться как работа целого форума. Имена и т.п. тоже будет.
Правила - не засоряем тему всякой джигурдой и флудом. Так же как и в теме маппинга - вас тут никто не заставляет что либо выкладывать, никто не обязывает кидать какой либо код\спрайт и подобное. Тема создана чисто для фана и возможно для всеобщей помощи друг другу в тех же наработках. Тут всё в свободном состоянии.
-- 44 минуты 57 секунд --
И так я буду первым в данной теме.
Как то на досуге мне приходила мыслишка сделать небольшое подобие L4D в думе. Идея так и не воплотилась в жизнь, потому что делал на тот момент трилогию и SW)
А вот первая пушка, осталась. Решил замутить М16 в стиле дума, вынул из NAM саму м-ку, прицепил руку из шедоя и пририсовал свитер с перчаткой. Вышло вроде бы неплохо, но определённо надо допиливать. Собсна вот вам и моя наработка.
Любимый порт: USB Любимое оружие: Вилка - один удар, четыре дырки
Задумка супер, жаль что не будет развиваться. сорь за непросвещенность и, возможно, глупый вопрос - кто-нибудь пробовал запилить такую фишку, чтобы по скину было видно какое оружие держит в руках игрок. видя то, что творят в Brutal doom вроде кажется фигней, но чето нигде не видно
Любимый порт: GZDOOM, SKULLTAG Любимое оружие: ССГ, Плазмаган Любимые карты в Duel32: Нет таких, не больно люблю дуэли. Я больше люблю кооператив.
можно 2-мя способами. Один - прицеплять с помощью инвенторий, т.е. спрятанной инвентории даётся определённое значение, это значение проверяется в коде игрока и если оно действительно равно тому, которому нужно, то скин автоматом меняется на другой. Второй способ - прицеплять непосредственно к самому скину. Этот способ я точно не помню как запиливать. В своём моде(SW) я использовал первый способ.
-- 38 минут 24 секунды --
Так подробнее про 1 способ.
В коде самого оружия есть 2 пункта Select и Deselect, думаю ты и так знаешь, что один пункт отвечает за то, что происходит при выборе оружия, а другой отвечает за то, что происходит при убирании данного оружия.
В пример я беру код простого шотгана. Пункты я отметил жирным.
ACTOR Shotgun : DoomWeapon 2001 { Game Doom SpawnID 27 Weapon.SelectionOrder 1300 Weapon.AmmoUse 1 Weapon.AmmoGive 8 Weapon.AmmoType "Shell" Inventory.PickupMessage "$GOTSHOTGUN" Obituary "$OB_MPSHOTGUN" Tag "$TAG_SHOTGUN" States { Ready: SHTG A 1 A_WeaponReady Loop Deselect: SHTG A 1 A_Lower Loop Select: SHTG A 1 A_Raise Loop Fire: SHTG A 3 SHTG A 7 A_FireShotgun SHTG BC 5 SHTG D 4 SHTG CB 5 SHTG A 3 SHTG A 7 A_ReFire Goto Ready Flash: SHTF A 4 Bright A_Light1 SHTF B 3 Bright A_Light2 Goto LightDone Spawn: SHOT A -1 Stop } }
Так вот, чтобы работало как в 1 способе, нужно создать инвенторию, которая не будет видна в списке(в баре)
actor ShotgunCheck : inventory { Inventory.MaxAmount 1 +INVENTORY.UNDROPPABLE -INVENTORY.INVBAR States { Spawn: TNT1 A 1 Stop }
}
Грубо говоря это инвентория пустая, т.е. создана тупо для чисел. Нам нужно чтобы у неё максимум вместительность была в 1 воизбежании ошибок. Алгоритм собственно. У оружия в пункте Select нам нужно сделать так, чтобы этой инвентории давалась одна единица, большего нам и не надо. Вот кусочек из шотгана Select: SHTG A 0 A_GiveInventory("ShotgunCheck", 1) SHTG A 1 A_Raise Goto Select+1 Goto Select+1 - почему не Loop? Потому что при выборе игра затупит и будет пытаться постоянно давать значение нашей инвентории. Собственно отличие того от Loop в том, что Loop повторяет всё до определённого момента, а Goto Срабатывает один раз и дальше код будет работать со второй строки(или с той, которую укажешь). Подобная фишка широко используется к примеру, если должен прозвучать звук выбора оружия(с Loop звук будет постоянно вопроизводиться заного до окончательного момента выбора).
И так теперь подробнее зачем мы это сделали, зачем собсна дали инвентории 1 единицу. Дали мы её для того, чтобы потом в скине можно было активировать к примеру другие спрайты.
Собсна что то типа примера с простым думоским скином: Вот оригинал: Нам тут нужны пункты, которые отвечают за стрельбу, хотьбу, просто стоячее положение и смерть(хоть при желании можно смерть оставить и оригинальной). Т.е. практически все пункты нам сейчас сделись. ACTOR DoomPlayer : PlayerPawn { Speed 1 Health 100 Radius 16 Height 56 Mass 100 PainChance 255 Player.DisplayName "Marine" Player.CrouchSprite "PLYC" Player.StartItem "Pistol" Player.StartItem "Fist" Player.StartItem "Clip", 50 Player.WeaponSlot 1, Fist, Chainsaw Player.WeaponSlot 2, Pistol Player.WeaponSlot 3, Shotgun, SuperShotgun Player.WeaponSlot 4, Chaingun Player.WeaponSlot 5, RocketLauncher Player.WeaponSlot 6, PlasmaRifle Player.WeaponSlot 7, BFG9000
States { Spawn: PLAY A -1 Loop See: PLAY ABCD 4 Loop Missile: PLAY E 12 Goto Spawn Melee: PLAY F 6 BRIGHT Goto Missile Pain: PLAY G 4 PLAY G 4 A_Pain Goto Spawn Death: PLAY H 0 A_PlayerSkinCheck("AltSkinDeath") Death1: PLAY H 10 PLAY I 10 A_PlayerScream PLAY J 10 A_NoBlocking PLAY KLM 10 PLAY N -1 Stop XDeath: PLAY O 0 A_PlayerSkinCheck("AltSkinXDeath") XDeath1: PLAY O 5 PLAY P 5 A_XScream PLAY Q 5 A_NoBlocking PLAY RSTUV 5 PLAY W -1 Stop AltSkinDeath: PLAY H 6 PLAY I 6 A_PlayerScream PLAY JK 6 PLAY L 6 A_NoBlocking PLAY MNO 6 PLAY P -1 Stop AltSkinXDeath: PLAY Q 5 A_PlayerScream PLAY R 0 A_NoBlocking PLAY R 5 A_SkullPop PLAY STUVWX 5 PLAY Y -1 Stop } }
Чтоже делать то?(приходит на ум), ну дали мы инвентории значение и зачем? А дали мы для того, чтобы с помощью него проверять, какое оружие выбрано. Вот теперь подрихтованый код игрока, где рповеряется значение инвентории:
States { Spawn: PLAY A 0 A_JumpIfInventory("ShotgunCheck", 1, "Spawn2") PLAY A -1 loop Spawn2: бла бла, тут код нашего особого скина. loop See: PLAY A 0 A_JumpIfInventory("ShotgunCheck", 1, "See2") PLAY ABCD 4 loop See2: бла бла, тут код нашего особого скина. loop Missile: PLAY E 0 A_JumpIfInventory("ShotgunCheck", 1, "Missile2") PLAY E 12 Goto Spawn Missile2: бла бла, тут код нашего особого скина. Goto Spawn2 Melee: PLAY F 0 A_JumpIfInventory("ShotgunCheck", 1, "Melee2") PLAY F 6 BRIGHT Goto Missile Melee2: бла бла, тут код нашего особого скина. Goto Missile2 Pain: PLAY G 0 A_JumpIfInventory("ShotgunCheck", 1, "Pain2") PLAY G 4 PLAY G 4 A_Pain Goto Spawn Pain2: бла бла, тут код нашего особого скина. Goto Spawn2 Death: PLAY H 0 A_JumpIfInventory("ShotgunCheck", 1, "Death2") PLAY H 0 A_PlayerSkinCheck("AltSkinDeath") Death1: PLAY H 10 PLAY I 10 A_PlayerScream PLAY J 10 A_NoBlocking PLAY KLM 10 PLAY N -1 Stop Death2: бла бла, тут код нашего особого скина. stop XDeath: PLAY O 0 A_JumpIfInventory("ShotgunCheck", 1, "XDeath2") PLAY O 0 A_PlayerSkinCheck("AltSkinXDeath") XDeath1: PLAY O 5 PLAY P 5 A_XScream PLAY Q 5 A_NoBlocking PLAY RSTUV 5 PLAY W -1 Stop AltSkinDeath: PLAY H 6 PLAY I 6 A_PlayerScream PLAY JK 6 PLAY L 6 A_NoBlocking PLAY MNO 6 PLAY P -1 Stop AltSkinXDeath: PLAY Q 5 A_PlayerScream PLAY R 0 A_NoBlocking PLAY R 5 A_SkullPop PLAY STUVWX 5 PLAY Y -1 Stop XDeath2: бла бла, тут код нашего особого скина. stop } }
Как видно - тут везде проверки на то, какое значение в инвентории. Если у инвентории значение равно единице, то скин автоматически будет выглядеть по другому, игрок будет умирать с другими спрайтами и т.п.
И вот мы столкнулись с проблемой "оуууу щит, у него скин не меняется!". Собственно мы помним о том, что я говорил на счёт пункта Deselect у оружия. Там мы должны это значение у инвентории отнимать. Получается то, что в инвентории будет значение по умолчанию - нуль и собственно скин опять вернётся в прежнее состояние. Вот вам кусочек кода Deselect шотгана:
Deselect: SHTG A 0 A_TakeInventory(""ShotgunCheck", 1) SHTG A 1 A_Raise Goto Deselect+1 Собственно на этом можно и закончить, надеюсь эта небольшая информация была полезна кому нить на данном форуме)
-- 30 дней 2 часа 52 минуты 17 секунд --
И так собственно я выкладываю ещё одну мою наработку, хотя она скорее не наработка, а тупо кусок ещё одного моего проекта. Собсна - как то я игрался с редактором видео и вспомнил, что можно то самое видео раскладывать на кадры. Сразу же в голову прилетела мысль запилить что то вменяемое в думе используя данную возможность. Прадставляю вам на осмотр 4 пушки из контры. Запилил Glock18, USP, MP5 и M3ShotGun. Перезарядка происходит на отдельную клавишу, которую по желанию можно выставить в настройках. Так же у пистолетов Glock18 и USP полностью рабочие альт-фаиры. Хочу заметить, что частота видео, с которого я нарезал спрайты было около 25 кадров, следовательно плавность всего и вся вам гарантируется(первый тестирующий сказал, что вышло даже круче чем в РГА по плавности, хз так это или нет, но решать вам).
Ну и под конец на счёт качества спрайтов - до меня пока так и не допёрло как сделать спрайты хайрезными, так что смотрите как есть(хотя если сильно не замарачиваться по этому поводу, то вроде как всё нормально, хоть и размазанно).
На форум к сожалению залить не смог файл, глючит при загрузке, однако залил на народ. http://narod.ru/disk/39852476001/smg.rar.html Всё как обычно - обсерания\пожелания принимаются.
Любимый порт: GZDOOM, SKULLTAG Любимое оружие: ССГ, Плазмаган Любимые карты в Duel32: Нет таких, не больно люблю дуэли. Я больше люблю кооператив.
Skaladin писал(а):
-ILOK- TRANE Как я понял оружие там из сталкера? Имею ввиду пистолет белый. Только вот стрелять не могу из нового оружия Это же будет поправлено???
Ах, вы читаете вообще чё я пишу на счёт оружий?)) Оружия из контры. Не стреляет оно, потому что надо перезарядить. Перезарядка находится на отдельной клавише, которую надо назначить в настройках игры(в настройках клавиш). Кстати и где ты там нашёл белый пистолет?) Glock18 - чёрный. USP - синеватый. Вроде как никаких белых пистолетов нет.
Skaladin Я имел ввиду код использовать потому что патроны на 0 были, я и говорю введи код и будит 20 патронов, хотя если надо перезарядить... я упустил этот момент, да я сразу заметил что из CS пушки, по рукам видно))
Любимый порт: gzdoom Любимое оружие: Двухстволка и бфг9000 Любимые карты в Duel32: SSL2, judas, oblivx, shoot, king, moo, dwango-map07
-ILOK- TRANE Вот можно бы к этому оружию еще других карт? А то надо разнообразие
-ILOK- TRANE писал(а):
Оружия из контры. Не стреляет оно, потому что надо перезарядить. Перезарядка находится на отдельной клавише, которую надо назначить в настройках игры(в настройках клавиш).
А так нужно всегда назначать? Или потом автоматом будет назначаться клавиша?
Любимый порт: GZDOOM, SKULLTAG Любимое оружие: ССГ, Плазмаган Любимые карты в Duel32: Нет таких, не больно люблю дуэли. Я больше люблю кооператив.
GhosTDoomer писал(а):
Вот можно бы к этому оружию еще других карт? А то надо разнообразие
Расчёт мода идёт на то, что можно будет устроить неплохое мясцо на любой карте. Мод возможно будет двух видов - один для ТДМ, где будут ещё 2 режима(воровство документов и всеми любимый режим с бомбой), а так же будет кооперативный, который как раз я ща и делаю.
GhosTDoomer писал(а):
А так нужно всегда назначать? Или потом автоматом будет назначаться клавиша?
Нет не всегда, по идее достаточно назначить один раз.
Любимый порт: USB Любимое оружие: Вилка - один удар, четыре дырки
-ILOK- TRANE, я чето много пропустил, пост с декорейт-кодом понравился так сильно, что на медаль за зачетный пост имхо)))
Skaladin писал(а):
Как я понял оружие там из сталкера?
Даже если ты заядлый думер, и твой мозг отторгает Half-Life и прочие продукты VALVe, хотя бы раз попробовать легенду всех командных шутеров - долг каждого геймера ИМХО
я зато сам кстати в сталкера ни разу не играл))) тупо не довелось купить када не было инета, а када появился, стало тупо лень скачать XDD
медаль за зачетный пост чето не получается номинировать у мя. Хз может это типа прав нету. Скал, вручи ты плз если разделяешь мое мнение конечно))
Любимый порт: USB Любимое оружие: Вилка - один удар, четыре дырки
Skaladin писал(а):
Покажи за какой пост именно надо вручать медаль
-ILOK- TRANE писал(а):
В коде самого оружия есть 2 пункта Select и Deselect, думаю ты и так знаешь, что один пункт отвечает за то, что происходит при выборе оружия, а другой отвечает за то, что происходит при убирании данного оружия.
В пример я беру код простого шотгана. Пункты я отметил жирным.
ACTOR Shotgun : DoomWeapon 2001 { Game Doom SpawnID 27 Weapon.SelectionOrder 1300 Weapon.AmmoUse 1 Weapon.AmmoGive 8 Weapon.AmmoType "Shell" Inventory.PickupMessage "$GOTSHOTGUN" Obituary "$OB_MPSHOTGUN" Tag "$TAG_SHOTGUN" States { Ready: SHTG A 1 A_WeaponReady Loop Deselect: SHTG A 1 A_Lower Loop Select: SHTG A 1 A_Raise Loop Fire: SHTG A 3 SHTG A 7 A_FireShotgun SHTG BC 5 SHTG D 4 SHTG CB 5 SHTG A 3 SHTG A 7 A_ReFire Goto Ready Flash: SHTF A 4 Bright A_Light1 SHTF B 3 Bright A_Light2 Goto LightDone Spawn: SHOT A -1 Stop } }
Так вот, чтобы работало как в 1 способе, нужно создать инвенторию, которая не будет видна в списке(в баре)
actor ShotgunCheck : inventory { Inventory.MaxAmount 1 +INVENTORY.UNDROPPABLE -INVENTORY.INVBAR States { Spawn: TNT1 A 1 Stop }
}
Грубо говоря это инвентория пустая, т.е. создана тупо для чисел. Нам нужно чтобы у неё максимум вместительность была в 1 воизбежании ошибок. Алгоритм собственно. У оружия в пункте Select нам нужно сделать так, чтобы этой инвентории давалась одна единица, большего нам и не надо. Вот кусочек из шотгана Select: SHTG A 0 A_GiveInventory("ShotgunCheck", 1) SHTG A 1 A_Raise Goto Select+1 Goto Select+1 - почему не Loop? Потому что при выборе игра затупит и будет пытаться постоянно давать значение нашей инвентории. Собственно отличие того от Loop в том, что Loop повторяет всё до определённого момента, а Goto Срабатывает один раз и дальше код будет работать со второй строки(или с той, которую укажешь). Подобная фишка широко используется к примеру, если должен прозвучать звук выбора оружия(с Loop звук будет постоянно вопроизводиться заного до окончательного момента выбора).
И так теперь подробнее зачем мы это сделали, зачем собсна дали инвентории 1 единицу. Дали мы её для того, чтобы потом в скине можно было активировать к примеру другие спрайты.
Собсна что то типа примера с простым думоским скином: Вот оригинал: Нам тут нужны пункты, которые отвечают за стрельбу, хотьбу, просто стоячее положение и смерть(хоть при желании можно смерть оставить и оригинальной). Т.е. практически все пункты нам сейчас сделись. ACTOR DoomPlayer : PlayerPawn { Speed 1 Health 100 Radius 16 Height 56 Mass 100 PainChance 255 Player.DisplayName "Marine" Player.CrouchSprite "PLYC" Player.StartItem "Pistol" Player.StartItem "Fist" Player.StartItem "Clip", 50 Player.WeaponSlot 1, Fist, Chainsaw Player.WeaponSlot 2, Pistol Player.WeaponSlot 3, Shotgun, SuperShotgun Player.WeaponSlot 4, Chaingun Player.WeaponSlot 5, RocketLauncher Player.WeaponSlot 6, PlasmaRifle Player.WeaponSlot 7, BFG9000
States { Spawn: PLAY A -1 Loop See: PLAY ABCD 4 Loop Missile: PLAY E 12 Goto Spawn Melee: PLAY F 6 BRIGHT Goto Missile Pain: PLAY G 4 PLAY G 4 A_Pain Goto Spawn Death: PLAY H 0 A_PlayerSkinCheck("AltSkinDeath") Death1: PLAY H 10 PLAY I 10 A_PlayerScream PLAY J 10 A_NoBlocking PLAY KLM 10 PLAY N -1 Stop XDeath: PLAY O 0 A_PlayerSkinCheck("AltSkinXDeath") XDeath1: PLAY O 5 PLAY P 5 A_XScream PLAY Q 5 A_NoBlocking PLAY RSTUV 5 PLAY W -1 Stop AltSkinDeath: PLAY H 6 PLAY I 6 A_PlayerScream PLAY JK 6 PLAY L 6 A_NoBlocking PLAY MNO 6 PLAY P -1 Stop AltSkinXDeath: PLAY Q 5 A_PlayerScream PLAY R 0 A_NoBlocking PLAY R 5 A_SkullPop PLAY STUVWX 5 PLAY Y -1 Stop } }
Чтоже делать то?(приходит на ум), ну дали мы инвентории значение и зачем? А дали мы для того, чтобы с помощью него проверять, какое оружие выбрано. Вот теперь подрихтованый код игрока, где рповеряется значение инвентории:
States { Spawn: PLAY A 0 A_JumpIfInventory("ShotgunCheck", 1, "Spawn2") PLAY A -1 loop Spawn2: бла бла, тут код нашего особого скина. loop See: PLAY A 0 A_JumpIfInventory("ShotgunCheck", 1, "See2") PLAY ABCD 4 loop See2: бла бла, тут код нашего особого скина. loop Missile: PLAY E 0 A_JumpIfInventory("ShotgunCheck", 1, "Missile2") PLAY E 12 Goto Spawn Missile2: бла бла, тут код нашего особого скина. Goto Spawn2 Melee: PLAY F 0 A_JumpIfInventory("ShotgunCheck", 1, "Melee2") PLAY F 6 BRIGHT Goto Missile Melee2: бла бла, тут код нашего особого скина. Goto Missile2 Pain: PLAY G 0 A_JumpIfInventory("ShotgunCheck", 1, "Pain2") PLAY G 4 PLAY G 4 A_Pain Goto Spawn Pain2: бла бла, тут код нашего особого скина. Goto Spawn2 Death: PLAY H 0 A_JumpIfInventory("ShotgunCheck", 1, "Death2") PLAY H 0 A_PlayerSkinCheck("AltSkinDeath") Death1: PLAY H 10 PLAY I 10 A_PlayerScream PLAY J 10 A_NoBlocking PLAY KLM 10 PLAY N -1 Stop Death2: бла бла, тут код нашего особого скина. stop XDeath: PLAY O 0 A_JumpIfInventory("ShotgunCheck", 1, "XDeath2") PLAY O 0 A_PlayerSkinCheck("AltSkinXDeath") XDeath1: PLAY O 5 PLAY P 5 A_XScream PLAY Q 5 A_NoBlocking PLAY RSTUV 5 PLAY W -1 Stop AltSkinDeath: PLAY H 6 PLAY I 6 A_PlayerScream PLAY JK 6 PLAY L 6 A_NoBlocking PLAY MNO 6 PLAY P -1 Stop AltSkinXDeath: PLAY Q 5 A_PlayerScream PLAY R 0 A_NoBlocking PLAY R 5 A_SkullPop PLAY STUVWX 5 PLAY Y -1 Stop XDeath2: бла бла, тут код нашего особого скина. stop } }
Как видно - тут везде проверки на то, какое значение в инвентории. Если у инвентории значение равно единице, то скин автоматически будет выглядеть по другому, игрок будет умирать с другими спрайтами и т.п.
И вот мы столкнулись с проблемой "оуууу щит, у него скин не меняется!". Собственно мы помним о том, что я говорил на счёт пункта Deselect у оружия. Там мы должны это значение у инвентории отнимать. Получается то, что в инвентории будет значение по умолчанию - нуль и собственно скин опять вернётся в прежнее состояние. Вот вам кусочек кода Deselect шотгана:
Deselect: SHTG A 0 A_TakeInventory(""ShotgunCheck", 1) SHTG A 1 A_Raise Goto Deselect+1 Собственно на этом можно и закончить, надеюсь эта небольшая информация была полезна кому нить на данном форуме)
Там основы декорейта писал, точнее писал как сам понимаю декорейт .
-- 16 дней 23 часа 34 минуты 10 секунд --
На досуге как то занимался SW модом, думал как сделать переносную аптечку, после долгих мучений я таки её запилил. Так вот, те, кто желает в своём моде использовать нормальную аптечку, аналогичную дюковской(а не одноразовую), лицезрейте код:
ACTOR MedikitSW : CustomInventory { Game Doom Inventory.PickupMessage "Medikit" Inventory.Amount 100 Inventory.MaxAmount 100 Inventory.Icon "MEDKB0" +INVENTORY.INVBAR -INVENTORY.AUTOACTIVATE States { Spawn: MEDK A -1 stop Use: TNT1 A 1 TNT1 A 0 A_jumpifinventory("health",100,"Spawn") TNT1 A 0 A_JumpIfInventory("MedikitSW",1,"Use2") Fail Use2: TNT1 A 1 TNT1 A 0 A_JumpIfHealthLower(100, "Use3") Fail Use3: TNT1 A 1 TNT1 A 0 A_PlaySound("AHH") TNT1 A 0 A_GiveInventory("health",1) TNT1 A 0 A_TakeInventory("MedikitSW",1) TNT1 A 0 A_jumpifinventory("health",100,"Spawn") Goto Use } }
Расшифровка данного кода собсна: Эта инвентория кастомная(CustomInventory), отличие от простой инвентории(Inventory) в том, что у простой тупо отсутствует поток Use, даже если его прописать, то ни чё происходить не будет при попытке нажать клавишу Use. Собсна это не пустая инвентория, она должна быть в баре(+INVENTORY.INVBAR), максимальная вместимость онной всего в 100, ибо больше и не надо. Поток Use состоит из нескольких переходов, в которых есть "откат"(Fail) Use: TNT1 A 1 TNT1 A 0 A_jumpifinventory("health",100,"Spawn") TNT1 A 0 A_JumpIfInventory("MedikitSW",1,"Use2") Fail Тут 2 условия, которые проверяются, когда нажимаешь клавишу активации, первое TNT1 A 0 A_jumpifinventory("health",100,"Spawn") проверяет сколько у нас жизней вообще в запасе, если 100, то сделается переход в Spawn(теоретически) Второе TNT1 A 0 A_JumpIfInventory("MedikitSW",1,"Use2") Смотрит, что у нас есть в инвентории хотя бы 1 единица, это нужно для того, чтобы выдача жизней не прошла, даже если у нас инвентория кончилась(хотя по идее она автоматом уберётся из бара если будет нуль), Собсна если есть хотя бы 1, то игра сделает переход в поток Use2. Fail - всё отменяет если вообще ни чё не сработало. Use2: TNT1 A 1 TNT1 A 0 A_JumpIfHealthLower(100, "Use3") Fail Тут делается повторная проверка на кол-во жизней, если меньше 100, то делается переход в поток выдачи жизней, т.е. Use3, Fail же всё отменит вообще, если условие не выполнится(вдруг жизней наоборот много). Use3: TNT1 A 1 TNT1 A 0 A_PlaySound("AHH") TNT1 A 0 A_GiveInventory("health",1) TNT1 A 0 A_TakeInventory("MedikitSW",1) TNT1 A 0 A_jumpifinventory("health",100,"Spawn") Goto Use Тут у нас совершенно обычный алгоритм выдачи жизней. У инвентории 1 забирается и выдаётся 1 в жизни игрока. Почему по 1?, это нужно чтобы игра выдавала не всё, а именно сколько нужно, подобный принцип используется в перезарядке. Замечу, что т.к. у нас выполняется всё с нулевой задержкой, то захеляет игрока мгновенно. Чтобы игра не растратила всё, тут есть переход в поток Use и проверка TNT1 A 0 A_jumpifinventory("health",100,"Spawn"), дабы игра смотрела сколько нужно выдать хелсов игроку. Если этого не будет, то игра истратит вообще всё. Тут у меня звук ещё есть TNT1 A 0 A_PlaySound("AHH"), вопроизводится, при активации, можете сюда забить что то своё) Собсна всё. Думаю будет кому нить полезно, подобной актечки я вообще ни разу не видел ни в одном моде, можно считать это чем то новым(хотя это хорошо поюзанное старое) Зацениваем
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения