Перезарядка способности
До сего момента наше заклинание давало постоянный эффект, теперь добавим ему шансовый эффект. Заодно научимся работать c hashtable и предсказывать будущее.
Идея
При использовании заклинания всем дружественным героям с шансом 10*уровень способности сбросим перезарядку последней используемой способности.
Hashtable
Подробно использование хэштаблиц описано в этой статье. Проблема состоит в том, что с разрастанием карты, разработчики боятся случайно перезаписать значения таблицы и напороться на трудновыявимый баг. Поэтому на каждый чих, инициализируют новую таблицу, что крайне расточительно по памяти. Мы же пойдём другим путём и используем обёртку над таблицами, которая позволяет используя всего одну таблицу не бояться случайно перезаписать/удалить не те значения. Так как импорт прост (нужно скопировать всего один триггер), посмотрим на примеры использования.
Example usage of HashTable
local HashTable hash = HashTable.create() create it
Чит включен: Warcraft III
set hash[‘hfoo’][StringHash(«poop»)] = 66 access large parent and child keys as needed
set hash[‘hfoo’].unit[99999] = GetTriggerUnit() still works with multiple-type syntax so you still have the full hashtable API.
call hash.remove(‘hfoo’) This literally is calling FlushChildHashtable, and should be used when the parentkey and/or HashTable are to be retired
call hash.destroy() DOES NOT FLUSH THE HASHTABLE. You must manually remove each parent key, first, otherwise you’ll have a lot of leaked Tables.
Example Usage of Table
struct table_demo extends array
private static method demo takes nothing returns nothing
Create it:
local Table a = Table.create()
Use it:
local boolean b = a.has(69)
set a[654321] = ‘A’
set a[54321] = ‘B’
set a.unit[12345] = GetTriggerUnit()
set a.unit[GetHandleId(a.unit[12345])] = GetSpellTargetUnit()
set a.real[‘ABCD’] = 3.14159
set a.integer[133] = 21
remove entries
call a.handle.remove(‘ABCD’)
call a.remove(54321)
Flush/destroy it:
call a.destroy()
Or, only flush it:
call a.flush()
endmethod
endstruct
Example Usage of TableArray
Create it:
local TableArray da = TableArray[0x2000]
Use it:
local thistype this = 0
loop
set this = this.next
exitwhen this == 0
set this.save = this.save + 1
set da[this].real[this.save * 3] = GetUnitX(this.unit)
set da[this].real[this.save * 3 + 1] = GetUnitY(this.unit)
set da[this].real[this.save * 3 + 2] = GetUnitFlyHeight(this.unit)
endloop
Flush/destroy it:
call da.flush()
Or, only destroy it (more efficient if you manage memory yourself)
call da.destroy()
Запоминаем последнюю способность
Логика здесь проста, если герой использует способность, мы её запомним. Заодно немного схитрим, ведь триггер с событием «Боевая единица приводит способность в действие» у нас уже есть.
КУДА ПРОПАЛА Жрица Луны? Пятая Раса против Чемпиона мира по Warcraft 3 Reforged
Скопировать в буфер
TriggerAddCondition(t, Condition( function()-> boolean < return GetSpellAbilityId() == AbilityID; >));
Для начала нам понадобится экземпляр хэштаблицы. Посему, в начале заклинания мы его объявим.
Table CooldownTable;
Если вас смущает тип данных Table, который не описан в хорошей статье, то просто запомните, что мы сначала объявляем таблицу CooldownTable типа Table, а в функции onInit мы её создадим.
CooldownTable = Table.create();
Теперь немножко изменим условие триггера, чтобы сохранить id способности.
Скопировать в буфер
TriggerAddCondition(t, Condition( function()-> boolean < integer // Запоминаем ид заклинания для сброса перезарядки if (IsUnitType(GetTriggerUnit(), UNIT_TYPE_HERO))< CooldownTable.integer[GetHandleId(GetTriggerUnit())] = id; >return AbilityID; >));
Перезаряжаем способность
К сожалению разработчики предусмотрели только функцию UnitResetCooldown.
native UnitResetCooldown takes unit whichUnit returns nothing
Которая по очевидным причинам нам не подходит. Поэтому напишем свою функцию и попытаемся угадать, как её реализуют в Reforged.
Скопировать в буфер
// Сброс перезарядки способности, пока не реализовали. // native UnitResetAbilityCooldown takes unit whichUnit, integer abilityId returns nothing function UnitResetAbilityCooldown(unit whichUnit, integer abilityId)
И наконец-то перезарядим способности
Скопировать в буфер
//if (GetRandomInt(1, 100) > >
Предсказываем баги
Для начала проверим, записывается ли id приказа при использовании способностей предмета.
Для этого немного переделаем условие.
Скопировать в буфер
// Условие срабатывания триггера TriggerAddCondition(t, Condition( function()-> boolean < integer u = GetTriggerUnit(); // Запоминаем ид заклинания для сброса перезарядки if (IsUnitType(u, UNIT_TYPE_HERO))< BJDebugMsg(GetUnitName(u) + » использовал » + I2S(id)); CooldownTable.integer[GetHandleId(u)] = id; >u = null; return AbilityID; >));
- Мы можем добавить предметную способность герою.
- В BJDebugMsg, выводится непонятное длинное число, вместо всемипонятных равкодов.
native GetUnitAbilityLevel takes unit whichUnit, integer abilcode returns integer
Но она вернёт уровень предметной способности. Так что мы схитрим и заглянем в скрытые идентификаторы приказов.
852008 to 852013 (useslot): Заставляют героя, отдавшего приказ, использовать предмет, находящийся в соответствующем слоте инвентаря. Идентификатор 852008 использует предмет в первом слоте, идентификатор 852009 – во втором и т.д.
Скопировать в буфер
// Запоминаем ид заклинания для сброса перезарядки if (IsUnitType(u, UNIT_TYPE_HERO) !(GetUnitCurrentOrder(u) >= 852008 GetUnitCurrentOrder(u)
Теперь если провервить, на разных заклинаниях могут быть непредсказуемые эффекты. Простого способа это определить не существует, поэтому применим подход в лоб — тупо перечислим разрешённые заклинания. Что-бы не засорять основной код, обернём проверку в библиотеку.
Скопировать в буфер
library Cooldown < public < // Сброс перезарядки способности, пока не реализовали. // native UnitResetAbilityCooldown takes unit whichUnit, integer abilityId returns nothing function UnitResetAbilityCooldown(unit whichUnit, integer abilityId)< integer level = GetUnitAbilityLevel(whichUnit, abilityId); UnitRemoveAbility (whichUnit, abilityId); UnitAddAbility (whichUnit, abilityId); SetUnitAbilityLevel (whichUnit, abilityId, level); >function IsAbilityHasCooldown(integer id) -> boolean < return ( ‘AHhb’ || // Благодать ‘AHbn’ || // Изгнание в астрал ‘AHtb’ || // Молот бурь ‘AHtc’ || // Удар грома ‘AOsh’ || // Волна силы ‘AOws’ || // Громовая поступь ‘AOfs’ || // Громовая поступь ‘AOhx’ || // Сглаз ‘AOsw’ || // Сторожевая змея ‘AUfn’ || // Ледяная звезда ‘AUdc’ || // Лик смерти ‘AUim’ || // Пронзающая смерть ‘AUdp’ || // Смертельный союз ‘AUsl’ || // Сон ‘AUcs’ || // Тёмная стая ‘AUdr’ // Тёмный ритуал // .. Список можно дополнить по желанию ); >> >
Источник: xgm.guru
Что такое кулдаун?
Слово кулдаун было образовано от английского слова «cooldown» (англ. перезарядка, восстановление), благодаря привычке русскоязычных геймеров пополнять свой сленг иностранными игровыми терминами. Кулдаун заклинания обозначает время его перезарядки после использования. Когда кулдаун проходит, заклинание можно снова кастануть по противнику. У разных заклинаний может быть разное время восстановления: от пары секунд до нескольких минут.
Так же время восстановления может быть и у игровых подземелий, причем отсчет времени начинается после убийства в них боссов. Пока этот кулдаун не спадёт, пройти подземелье снова будет невозможно.
автор вопроса выбрал этот ответ лучшим
комментировать
в избранное ссылка отблагодарить
Lunat ica [14.4K]
7 лет назад
Дословно «Cooldown» (другое название — КД) означает «охлаждать», «остывать», то есть, если говорить о компьютерной игре (например, Дота 2, Warcraft 3) это время ожидания, в течение которого новый предмет или новая сила (способность) будет вне доступности. Другими словами, это перезарядка до следующего использования способностей или предметов. Это время, когда перезаряжаешь оружие, либо время между каждым выстрелом. При перезарядке оружия кулдаун обратно пропорционален скорости стрельбы (речь не только об огнестрельном оружии, но и о холодном, магическом). Употребляется геймерами и в качестве способности, когда на помощь компьютерному герою вступают «защитные кулдауны».
Источник: www.bolshoyvopros.ru
Кд, кулдаун — Что такое Кд, кулдаун?
КД, кулдаун от cooldown – время, в течениЕ которого вы не сможете снова использовать способность, предмет или возможность посетить подземелье, рейд.
Также употребляется в значении собственно этой способности. Например, “защитные кулдауны” – способности персонажа, повышающие тем или иным способом его защиту, и которые нельзя использовать постоянно, потому что требуется ждать, пока эти способности восстановятся и станут снова доступны для использования.
Изменено 12 июня, 2020 пользователем Aex
Поделиться
Обратная связь
Чтобы оставить отзыв, создайте аккаунт или авторизуйтесь
Вы должны быть пользователем, чтобы оставить отзыв
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Войти
Уже есть аккаунт? Войти в систему.
Полезные ссылки
Соц сети
О проекте
AzeroTh Band сервер версии WotLK 3.3.5a для людей с руками из плеч
Эксклюзивный творческий проект эмулятора игры World of Warcraft, на основе патча 3.3.5а «Личкинг»,
с использованием программных продуктов свободного доступа, на базе ядра Azeroht Core.
- Сбалансированная модернизация, уникальный клиент игры
- Все расы — всеми классами, HD модели персонажей
- Креативное прохождения контента, обычные вещи в необычном виде, возможность подбора нестандартных билдов и спеков
- Измененный облик ландшафта мира (катаклизм, без катаклизма)
- Расширенные возможности достижения цели, полезных инстов стало больше
- Комфортный кач и расширенный крафтинг, -10 профессий
- Теперь спутники не только декоративы, но и полезны
- Новые эксклюзивные облики экипировки включая эротические
- 9 этапов развития персонажа, от кача до 25 ХМ
- 4-х уровневые гильдейские (10об, 10гер, 25об, 25гер)
- Механика спелов персонажей Blizzlike, механика инстов 80-лвл патча 3.3.5а Blizzlike
- БК, Ванила, Лич — актуально всё для 80. От ингредиентов, до забытых легендарок
- 12 освящаемых сетов экипировки для всех классоспеков, от Tier-1 до Tier-10 в каждом 239, 251, 264, 277 ilvl
- Параллельное открытие контента, по мере модифицирования инстов
Источник: wowka.su