Yuryol

Активная боевая система. Альт.оружие

Оценить эту запись
[quote]- с оружием в руке герой стреляет вперед, а потом мгновенно - назад. из того же пистолета, не глядя
- с пистолетами в двух руках герой убивает двух врагов впереди, а потом расставив руки в сторону, уничтожает всех по бокам от себя
- с калашом наперевес герой отстреливает противников. внезапно на него нападает чувак сзади, но наш герой фигачит его штык-ножом, не особо отвлекаясь на стрельбу и не меняя оружие
- против танка и пеших сражаться гораздо легче если у тебя оружие с подствольным гранатометом
- и т.д.[/quote]

Для всего этого в плагин было добавлено альтернативное оружие. По задумке это:
- другой вариант выстрела из этого же оружия. Например,герой из двух пистолетов может стрелять как вперед, таки в стороны.
- дополнительная возможность самого оружия - подствольный гранатомет или альтернативные патроны

[size=6]Когда-то раньше[/size]

В прошлый версиях в заметках оружия можно было приписать несколько дополнительных свойств - направление выстрелов, альтернативный патрон и еще несколько других тегов.

Для использования этих дополнительных возможностей следовало зажать один из шифтов геймпада при выстреле, что просчитывалось следующим кодом несложным кодом:

[code]if (Input.isTriggered(INPUT_SHOT)) {
if (Input.isPressed('INPUT_SHIFT')) this.shotWeapon(0, true);
else this.shotWeapon(0, false);
}[/code]

То есть при зажатии двух кнопок вызывалась функция с двумя аргументами: 0 и "true", где:

[LIST][*][b]"0"[/b] - слот экипировки оружия (для справки: 0 - это оружие, 1 - щит, 2 - броня головы, 3 - броня тела, 4 - аксессуар),[*][b]"true"[/b] - использовано альтернативное оружие. И этот второй параметр так и передавался через все функции, а те, в свою очередь, проверяли какое оружие использовано. Мало того, что было куча проверок, так еще и с каждой новой возможностью оружия этих проверок становилось всё больше[/LIST]

[size=6]Один параметр[/size]

Решение было простым - а давайте просто сделаем возможность вместо альтернативных тегов оружия указывать ДРУГОЕ оружие. То есть при зажатии двух кнопок у нас просто выстреливало оружие с ID, которое указывалось в заметках экипированного оружия. Теперь настройка стала легче

Однако, ни от второго аргумента функции,ни от кучи проверок мы не избавились. Надо оставить один параметр функции, и соответственно этот параметр должен быть слотом экипировки. А потому логично всего лишь взять и добавить еще один слот экипировки, в котором у нас будет храниться альтернативное оружие. Соответственно,код у нас становится таким

[code type=javascript]if (Input.isTriggered(INPUT_SHOT)) {
if (Input.isPressed('INPUT_SHIFT')) this.shotWeapon(0);
else this.shotWeapon(5);
}[/code]

[size=6]Шестой слот[/size]

А вот как добавить этот шестой слот была та еще задачка. Минут сорок при инициализации текущей экипировки я пытался вставить дополнительный слот партии $gameParty.leader() . И только потом я наконец догадался, что слоты у партии берутся из слотов героя, у значит у Game_Actor. Еще через мучительных поисков в коде и попыток сделать красиво, я в итоге довольно костыльно изменил одну строчку в функции Game_Actor.prototype.initEquips

[code]var maxSlots = slots.length+1;[/code]

До меня таки не дошло, откуда берется количество слотов у героя, и в итоге я тупо прибавил к нему единичку :silly:

А дальше всё просто. Если у оружия в слоте "0" есть тег altId, то мы добавляем шестой слот экипировки с id=5 (помним что нумерация слотов идет с нуля) - $gameParty.leader()._equips[5]:

[code]
if (altId) {
$gameParty.leader()._equips[5]._itemId = altId;
$gameParty.leader()._equips[5]._dataClass = "weapon";
this.addParamsWeapon(altId);
}[/code]

[size=6]Патроны[/size]

Ну и последнее - если у нас второе оружие стреляет одинаковыми патронами и по сути является тем же оружием с измеенной характеристикой, то нам надо,чтоб магазин был один. Поэтому добавляем проверку "если у оружия одинаковые патроны, то в функцию "траты" патронов мы передаем магазин оружия с нулевого слота:

[code]let equip = $gameParty.leader().equips();
let altEquip = (equip[0].meta.itemBullet == equip[5].meta.itemBullet) ? equip[0] : equip[5];[/code]

[b][size=5]ИТОГО:[/size][/b]
С помощью менее 10 строчек добавлено альтернативное оружие B)

Отправить "Активная боевая система. Альт.оружие" в Digg Отправить "Активная боевая система. Альт.оружие" в del.icio.us Отправить "Активная боевая система. Альт.оружие" в StumbleUpon Отправить "Активная боевая система. Альт.оружие" в Google Отправить "Активная боевая система. Альт.оружие" в VKontakte Отправить "Активная боевая система. Альт.оружие" в Facebook

Метки: Нет Добавить / редактировать метки
Категории
Без категории

Комментарии