добавил в нее 9-ую модификацию - attack speed. кучу абил перчаток наплодил с разными параметрами со степенями двойки. ниче не менял, тока дополнил таблицы данными. так, то система работает. изучил как работает AS до дыр. В нее добавил ограничение от -80% до 400%.
вот пример:
было AS 0%
добавляю 5555, стало AS 400%
вычитаю -777, стало AS 4016%. должно быть -80%, тк в лимит упирается. откуда взялось 4016? так понимаю 4096-4016= -80 -короче че то не так. почему так работает странно. от чего работает. возможен баг, информацию не всегда верно выдает
пробую еще раз: к этому 4019 вычитаю -66, стало 400% - херня странно работает. должно отриц значение.
Решение: информацию о разных бонусах проще хранить в глобалках. До этого работает с ошибками, после внесения инфы в таблицы - не замечено.
гайд про скорость
Скорость атаки - это показатель ударов в секунду, или как часто взмахивает оружием ваш герой. Скорость атаки зависит от ловкости, аур, артефактов, скилов. Чем быстрее скорость атаки тем больше урона в определенное время наносит урона герой.
Для вывода формулы будут использованы некоторые понятия: AS - attack speed - Скорость атаки, кол-во ударов в сек BAS - basic attack speed - Базовая скорость атаки, кол-во ударов в сек IAS - increase attack speed дополнительный процент. Складывается из ловкости героя и бонусов скорости атаки. Не может быть выше 400 или ниже -80. Изначально скорость не измерялась в процентах, но так пошло в варкрафте. Понижение и увеличение скорости осуществляется с помощью модификаторов-способностей. А еще дополнительно от ловкости через константы. Изначальная скорость юнитов равно 1.00 (100%). Максимум бонусом можно задать 4.00 (400%). Это в сумме: изначальная + бонусная = 100+400 = 500%. В варкрафте в максимум упирается в в этот потолок, это 5 ударов в сек. больше никак не сделать. ниже 100% нормы - уже скорость идет на понижение. самый минимальный предел = 20%. Ниже 20% никак нельзя поставить.
Складывается из ловкости героя и бонусов скорости атаки. Не может быть выше 400 или ниже -80.
0.20 = -80% IAS <= самый минимальный результат. ниже этого нельзя поставить.
1.00 = 0% IAS <= изначальную скорость принята считать за 1.00 (100%)
2.00 = 100% IAS <= при увеличении AS на 1.00 (100%), скорость увеличилась 2.00
Delay - Базовая задержка между ударами, сек. По-другому, Delay называют базовое время атаки Base attack time, BAT. или AttackCooldown. Можно проверить таймером от замаха до замаха - это будет считаться временем. Начало замаха означает начала атаки. Time - время задержки после добавления модификации бонусов, сек. Этот параметр добавил специально, чтобы смотреть как меняется время задержки между атаками после добавления модификаторов.
Изначально в механике игры заложен параметр задержка между ударами - Delay, а не скорость атаки.
У подавляющего большинства героев Delay равен 1.7 сек, за исключением:
Magina - The Anti-Mage (Антимаг) – 1.45 сек.
Shandelzare Silkwood - The Vengeful Spirit (Венга) – 1.77 сек.
Balanar - The Night Stalker (Сталкер) – 1.8 сек.
Terrorblade - The Soul Keeper (Террорблейд) – 1.5 сек.
Чтобы рассчитать скорость атаки - AS, нам необходимо знать BAS и IAS героя:
Чтобы вычислить базовую скорость атаки (BAS), нужно количество выстрелов (ударов) разделить на время, за которое они произведены. За основу мы берем единицу, т.е. один удар, которым совершаем атаку за определенное время. То есть мы должны 1 разделить на Delay, так как пауза между выстрелами (ударами) равна 1.7 сек., отсюда: BAS =1/Delay=1/1.7 ≈ 0.6 выстрелов в секунду. Для вышеуказанных героев с отличающимися задержками от стандартной, все рассчитывается точно так же по формуле BAS =1/Delay.
IAS - дополнительный процент – процент увеличения скорости атаки, равен сумме процентов от ловкости, артефактов, умений, наложенных заклинаний и аур.
Измеряется IAS в % и подразделяется как бы на 2е группы:
IAS от ловкости. Каждая единица ловкости увеличивает IAS на 1%. (Например, у героя ловкость равна 24, тогда IAS от ловкости = 24*1%=24%). (0.01) 1% взят из констант доты. В варкрафте значение это мб другим, оно равно 0.02 за каждую ловкость
IAS от артефактов, умений, наложенных заклинаний и аур. Сразу указан в % и не тр***ет дополнительных расчетов. Все IAS складываются между собой. (Например, IAS от ловкости = 30%, IAS от Power treads = 30%, следовательно, общий (суммарный) IAS (Σ IAS)) = 60%)
Получается вот такая формула подсчета скорости:
AS = BAS* (1 + Σ IAS)=1/Delay*(1 + Σ IAS)
Примеры:
Silencer с ловкостью в 20 ед., тогда:
Σ IAS = 20 * 1% = 20%,
AS = 0.6 * (1+ 20%) ≈ 0,7 выстрелов (ударов) в секунду
Time = Delay / (1+ 20%) = 1.7 / 1.2 % = 1.4 сек - задержка между ударами
Axe с Power treads и MKB, ловкость = 35, тогда:
Σ IAS = 35 * 1% + 30% + 15% = 80%,
AS = 0.6* (1+80%) ≈ 1.1 выстрел (удар) в секунду
Time = Delay / (1+80%) = 1.7 / 1.8 % = 0.94 сек - задержка между ударами
--BAS - базовая скорость атаки, показывает кол-во ударов в сек
--BlzGetUnitAttackCooldown - новая нативка рефорджа
function GetUnitBaseAttackSpeed(unit, index)
return 1/BlzGetUnitAttackCooldown(unit, index)
end
--IAS - показывает % процентное содержание AS
--это надо переделать, тк бонус от ловкости не относится к базовой (точно не уверен)
function GetUnitIncreaseBaseAttackSpeed(unit)
if IsUnitType(unit, UNIT_TYPE_HERO) then
return 1.00 + (GetHeroAttributeAgi(unit, false)*0.02) --0.02% бонуса AS за каждую единицу ловкости
else
return 1.00
end
end
--bonus IAS - показывает процент AS от абилок
--делим на 100 тк результат из BonusMod выдают в виде целых чисел
function GetUnitIncreaseBonusAttackSpeed(unit)
return UnitGetBonus (unit, 9) / 100 --это UnitGetBonus надо будет переделать
end
function GetUnitIncreaseAttackSpeed(unit, includeBonuses)
if not includeBonuses then
return GetUnitIncreaseBaseAttackSpeed(unit) + GetUnitIncreaseBonusAttackSpeed(unit)
else
return GetUnitIncreaseBaseAttackSpeed(unit)
end
end
--AS выдает кол-во ударов в сек
function GetUnitAttackSpeed(unit, index)
return GetUnitBaseAttackSpeed(unit, index) * GetUnitIncreaseAttackSpeed(unit, false)
end
--время задержки для атаки
function GetUnitAttackTime(unit, index)
return GetUnitBaseAttackSpeed(unit, index) / GetUnitIncreaseAttackSpeed(unit, false)
end
создаем для цели таймер, запускаем. привязываем таймер к юниту хт, юнита к твймеру хт. хт - хэш-таблица. Нужно сохранить инфу в хт, чтобы получать инфу. Пример, когда повторно бьем цель, можно проверить есть ли у него таймер. нам не нужно создавать новый таймер. Достаточно перезапустить таймер. Или юнит умер, все удалить надо, хт чистим. Таймер истек, надо почистить хт с двух концов (с юнита/с таймера).
юнит умирает, можно таймер удалить. получаем ссылку на таймер. хт чистим. таймер уничтожаем
когда таймер истечет, удаляем бафф. удаляем таймер. Получаем ссылку на юнита. Чистим хт, дабы память не засорять.
по идее, у каждой цели будет свой таймер. при истечении он удаляется. Общий таймер можно сделать, тогда все цели запихиваем в группу, и ежесекудно перебираем в ней каждую цель. Можно счетчик времени каждой цели задать, и ежесекудно вычитать -1. Когда время истечет, <=0 цель выпиливается из группы и хт. Использовать общий или отдельно для каждого таймер - это ваш выбор
На гуи сидите?
Похожим эффектом продления обладает ядовитое облако.
большая часть филдов рефорджете не работает. работают только геты (get), с них что-то да можно получить. А сеты (set) могут не работать, работают только set на хп/мана реген, армор, и у некоторых атрибутов героя. Нельзя видимо просто изменить поле
рабочие нативки (не все тут)
--[[ нативки рефорджета
--защита (работает норм).
native BlzGetUnitArmor takes unit whichUnit returns real --считывает базовый+бонус
native BlzSetUnitArmor takes unit whichUnit, real armorAmount returns nothing
native BlzGetUnitBaseDamage takes unit whichUnit, integer weaponIndex returns integer
native BlzGetUnitDiceNumber takes unit whichUnit, integer weaponIndex returns integer
native BlzGetUnitDiceSides takes unit whichUnit, integer weaponIndex returns integer
native BlzSetUnitBaseDamage takes unit whichUnit, integer baseDamage, integer weaponIndex returns nothing
native BlzSetUnitDiceNumber takes unit whichUnit, integer diceNumber, integer weaponIndex returns nothing
native BlzSetUnitDiceSides takes unit whichUnit, integer diceSides, integer weaponIndex returns nothing
native BlzGetUnitAttackCooldown takes unit whichUnit, integer weaponIndex returns real
native BlzSetUnitAttackCooldown takes unit whichUnit, real cooldown, integer weaponIndex returns nothing
native BlzGetUnitMaxHP takes unit whichUnit returns integer
native BlzSetUnitMaxHP takes unit whichUnit, integer hp returns nothing
native BlzGetUnitMaxMana takes unit whichUnit returns integer
native BlzSetUnitMaxMana takes unit whichUnit, integer mana returns nothing
native BlzUnitHideAbility takes unit whichUnit, integer abilId, boolean flag returns nothing
native BlzGetUnitAbilityManaCost takes unit whichUnit, integer abilId, integer level returns integer
native BlzSetUnitAbilityManaCost takes unit whichUnit, integer abilId, integer level, integer manaCost returns nothing
native BlzGetUnitAbilityCooldown takes unit whichUnit, integer abilId, integer level returns real
native BlzGetUnitAbilityCooldownRemaining takes unit whichUnit, integer abilId returns real
native BlzSetUnitAbilityCooldown takes unit whichUnit, integer abilId, integer level, real cooldown returns nothing
native BlzUnitHideAbility takes unit whichUnit, integer abilId, boolean flag returns nothing
native BlzUnitDisableAbility takes unit whichUnit, integer abilId, boolean flag, boolean hideUI returns nothing
BlzGetUnitRealField(GetTriggerUnit(), UNIT_RF_CAST_BACK_SWING)
BlzGetUnitRealField(GetTriggerUnit(), UNIT_RF_CAST_POINT)
]]
добавление функции
do
local InitGlobalsOrigin = InitGlobals
function InitGlobals()
InitGlobalsOrigin()
function GetUnitDefenseType(unit)
return BlzGetUnitIntegerField(unit, UNIT_IF_DEFENSE_TYPE)
end
function GetUnitAttackType(unit,index)
return BlzGetUnitWeaponIntegerField(unit, UNIT_WEAPON_IF_ATTACK_ATTACK_TYPE, index)
end
function GetUnitAcquisitionRange(unit)
return BlzGetUnitRealField(unit, UNIT_RF_ACQUISITION_RANGE)
end
function GetUnitSightRadius(unit)
return BlzGetUnitRealField(unit, UNIT_RF_SIGHT_RADIUS)
end
function IsAttackUnitEnabled(unit,index)
return BlzGetUnitWeaponBooleanField(unit, UNIT_WEAPON_BF_ATTACKS_ENABLED,index)
end
--общие параметры атрибутов: базовый+бонус (бонус можно исключить)
function GetHeroAttributeStr(hero, includeBonuses)
return GetHeroStr(hero, includeBonuses)
end
function GetHeroAttributeAgi(hero, includeBonuses)
return GetHeroAgi(hero, includeBonuses)
end
function GetHeroAttributeInt(hero, includeBonuses)
return GetHeroInt(hero, includeBonuses)
end
--базовые атрибуты героя
function GetHeroStr_base(hero)
return BlzGetUnitIntegerField(hero, UNIT_IF_STRENGTH)
end
function GetHeroAgi_base(hero)
return BlzGetUnitIntegerField(hero, UNIT_IF_AGILITY)
end
function GetHeroInt_base(hero)
return BlzGetUnitIntegerField(hero, UNIT_IF_INTELLIGENCE)
end
--бонусные атрибуты героя
function GetHeroStr_bonus(hero)
return BlzGetUnitIntegerField(hero, UNIT_IF_STRENGTH_WITH_BONUS)-GetHeroStr_base(hero)
end
function GetHeroAgi_bonus(hero)
return BlzGetUnitIntegerField(hero, UNIT_IF_AGILITY_WITH_BONUS)-GetHeroAgi_base(hero)
end
function GetHeroInt_bonus(hero)
return BlzGetUnitIntegerField(hero, UNIT_IF_INTELLIGENCE_WITH_BONUS)-GetHeroInt_base(hero)
end
--установить базовые (белые) атрибуты героя
function SetHeroBaseStr(hero, value)
SetHeroStr(hero, value, true)
end
function SetHeroBaseAgi(hero, value)
SetHeroAgi(hero, value, true)
end
function SetHeroBaseInt(hero, value)
SetHeroInt(hero, value, true)
end
--установить бонусные (зеленые) атрибуты героя
function SetHeroBonusStr(hero, value)
UnitClearBonus (hero, 1)
UnitSetBonus (hero, 1, value)
end
function SetHeroBonusAgi(hero, value)
UnitClearBonus (hero, 2)
UnitSetBonus (hero, 2, value)
end
function SetHeroBonusInt(hero, value)
UnitClearBonus (hero, 3)
UnitSetBonus (hero, 3, value)
end
--добавить бонусные (зеленые) атрибуты героя
function AddHeroBonusStr(hero, value)
UnitAddBonus (target, 1, ammount)
end
function AddHeroBonusAgi(hero, value)
UnitAddBonus (target, 2, ammount)
end
function AddHeroBonusInt(hero, value)
UnitAddBonus (target, 3, ammount)
end
--основной атрибут героя (1-str, 3-agi, 2-int). влияет на атаку
function GetHeroPrimaryAttribute(hero)
return BlzGetUnitIntegerField(hero, UNIT_IF_PRIMARY_ATTRIBUTE)
end
function SetHeroPrimaryAttribute(hero, value) --установка не работает
BlzSetUnitIntegerField( hero, UNIT_IF_PRIMARY_ATTRIBUTE, value)
end
function GetHeroStrPerLevel(hero)
return BlzGetUnitRealField(hero, UNIT_RF_STRENGTH_PER_LEVEL)
end
function GetHeroAgiPerLevel(hero)
return BlzGetUnitRealField(hero, UNIT_RF_AGILITY_PER_LEVEL)
end
function GetHeroIntPerLevel(hero)
return BlzGetUnitRealField(hero, UNIT_RF_INTELLIGENCE_PER_LEVEL)
end
--base regen hp/sec
function GetUnitBaseRegenHP(unit)
return BlzGetUnitRealField(unit, UNIT_RF_HIT_POINTS_REGENERATION_RATE)
end
function SetUnitBaseRegenHP(unit, value)
BlzSetUnitRealFieldBJ( unit, UNIT_RF_HIT_POINTS_REGENERATION_RATE, value )
end
--base regen mana/sec
function GetUnitBaseRegenMana(unit)
return BlzGetUnitRealField(unit, UNIT_RF_MANA_REGENERATION)
end
function SetUnitBaseRegenMana(unit, value)
return BlzSetUnitRealField( unit, UNIT_RF_MANA_REGENERATION, value )
end
--bonus regen hp/sec
function GetUnitBonusRegenHP(unit)
return UnitGetBonus (unit, 6)
end
--bonus % увеличение mana regen от base regen
function GetUnitBonusRegenMana(unit)
return UnitGetBonus (unit, 7)
end
function SetUnitHP(unit,value)
SetUnitState(unit, UNIT_STATE_LIFE, RMaxBJ(0,value))
end
function SetUnitMana(unit,value)
SetUnitState(unit, UNIT_STATE_MANA, RMaxBJ(0,value))
end
function GetUnitBaseAttackSpeed(unit)
if IsUnitType(unit, UNIT_TYPE_HERO) then
return 1.00 + (GetHeroAttributeAgi(unit, false)/100)
else
return 1.00
end
end
function GetUnitBonusAttackSpeed(unit)
return UnitGetBonus (unit, 9)
end
function GetUnitAttackSpeed(unit, includeBonuses)
if not includeBonuses then
return GetUnitBaseAttackSpeed(unit) + GetUnitBonusAttackSpeed(unit)
else
return GetUnitBaseAttackSpeed(unit)
end
end
function GetUnitBonusArmor(unit)
return UnitGetBonus (unit, 5)
end
function GetUnitBaseArmor(unit)
return BlzGetUnitArmor(unit)-GetUnitBonusArmor(unit)
end
TimerStart(CreateTimer(),0.5,true,function()
print("основной атрибут: "..GetHeroPrimaryAttribute(HERO))
--print("FFF str: "..GetHeroAttributeStr(HERO, true))
--print("base str: "..GetHeroStr_base(HERO))
--print("permament str: "..GetHeroStr_permament(HERO))
--print("bonus str: "..GetHeroStr_bonus(HERO))
--print("BaseRegenHP: "..GetUnitBaseRegenHP(HERO).." hp/sec")
--print("BonusRegenHP: "..GetUnitBonusRegenHP(HERO).." hp/sec")
--print("BaseRegenMana: "..GetUnitBaseRegenMana(HERO).." mana/sec")
--print("BonusRegenMana: "..GetUnitBonusRegenMana(HERO)/100..." % от регена")
end)
local t = CreateTrigger()
TriggerRegisterPlayerChatEvent( t, Player(0), "-change ", false )
TriggerAddAction( t, function()
local k = S2I(SubStringBJ(GetEventPlayerChatString(),9, StringLength(GetEventPlayerChatString())))
print(k)
--SetUnitBaseRegenHP(HERO, k)
--SetUnitBaseRegenMana(HERO, k)
--SetHeroBaseStr(HERO, GetHeroStr_base(HERO)+k, true)
--SetHeroAgi_bonus(HERO, k)
--SetHeroPrimaryAttribute(HERO, k)
print("end")
end)
end
end
мне кажется мана реген неправильна работает. или совсем не работает. используете абилку маски соби
раскрыть
MANA_REGEN_SobiMask =((base_mana_regen + mana_regen_Intellect + другие бонусы типа чародейской ауры)*p) - реген от одной абилки. Если вообще нет никакого регена (реген != 0, главное чтоб был хотя бы один реген), то не будет работать реген и от маски. теперь даже отрицательный реген может получится, если указано отрицательное значение коэффициента. ВНИМАНИЕ: в этой формуле MANA_REGEN_SobiMask не учитывается реген от других соби масок, если у героя их несколько. Учитывают базовый реген, реген от инты +другие регены MANA_REGEN_Common = mana_regen_Intellect + MANA_REGEN_SobiMask + другие бонусы типа чародейской ауры - общий реген (так как у героя работает только реген от инты и от других бонусов, а вот базовый реген не учитывается. Так как базовый реген не работает на герое) MANA_REGEN_Common = mana_regen_Intellect + MANA_REGEN_SobiMask1 + MANA_REGEN_SobiMask2 + другие бонусы типа чародейской ауры - общий реген ((если абилок от маски соби несколько, они суммируются вот так)
Какие бонусы есть в игре? Это пассивки (чародейская аура, аура фонтана, маска соби не учитывается), активных заклинании с постепенным восстановлением не много (рев, леденящий крик, омоложение не учитывается, base_mana_regen - базовый реген, который указан в РО юнита "Характеристики - Восстановление маны". Работает только у обычных юнитов, тестировал этот момент у героя. У героя показывает реген от интеллекта (базовый не работает у героя), но когда он одевает маску соби учитывается базовый реген. Благодаря базовому регену, можно сделать героя с уникальным регеном. mana_regen_Intellect = Intellect * k - реген от интеллекта (где Intellect - кол-во интеллекта героя, k - константа "Характеристики героя: увеличение скорости восстановления за единицу разума", которая за каждую единицу маны восстанавливает заданное число) p - процент от абилки
какие параметры не ввожу для регена маны, реакции никакой
дистанция получения приказа - расстояние, с которого юнит замечает вражескую цель, и начинает атаку/авто-атаку. есть в рефордже одиночное событие - юнит получает цель. тогда, можно чекать, получил или нет.
по факту игра таймером тикает на обнаружение поблизости противника. если вражеская цель замечена, то в атаку. Я так и делал в рефорджете авто-атаку =) Пример, часто этим пользуются сторожевые башни, или нейтралы, которые не спят, да и обычные юниты.
дальность атаки - макс радиус атаки, с которой начинается атака. Пример, для милишника, чтобы атаковать цель, он должен впритык подойти. А для различных стрелков мб разное макс расстояние, с которого могут обстреливать противника.
дальность по сути не ограничивает атаку. у меня вот милишник с мин дальность атаки когда обнаруживает издалека цель, бежит ее атаковать.
если чекать бездействие - то чекать по точкам хуже, тк стоя на одном месте, юнит может драться (замахи, выстрелы делает). а с помощью приказов можно отслеживать все, кроме автоатаки (это когда юниты обнаруживают противников, и начинают авто-атаку. по сути атака есть, а приказа нет).
в смысле?)) вам нужно это.
варкрафт он такой. что-то работает. что-то не работает. если бы не я, то кто? это все статьи из моего черновика, я в него в разное время вносил изменения, и свои мысли. как какой то дневник или журнал
N7 Molot, сомневаюсь. раздуваете из мухи слона. никто не умрет.
а ваши бывшие хгм-цы основали другой сайт? с ними что стало? на сайт их захожу, мой браузер ругается.
Bergi_Bear, наверное =)) это просто пустышка.
тут надо показать новичкам, что они могут любую информацию вставить в центральную панель. хоть 9, хоть 100.
могут переделать даже центральную панель. зачем им повторять вариковский интерфейс?
я вот подумал, а нельзя ли добавить баффы? всем желающим можна так
Bergi_Bear:
менять модель курсора никак, потом отследить координаты мыши никак (корявые костыли не в счет - они проигрывают в скорости), нацепить на мышь никак. что остается? при нажатии на фрейм-пустышку вызывать прицел через forcekey. А вот эта штука выше, помогает проверять закрытие. Удобно же.
можно отслеживать закрытие курсора. нажатие ESC, ЛКМ в игровой карте, переключение юнитов и пр. больше действии
и еще даже, если прицел можно было изменять. игра то считает, что эта обычный курсор. кликнешь по цели, переключишься на нее. тут еще надо чекать какие цели выделены. А в рефордже только юнитов можно проверять через BlzGetMouseFocusUnit(). декорации и итемы не отслеживаются 😝
Bergi_Bear, ну почему? сейчас есть. придет какой-нибудь нуб. и посмотрит на это. хочу еще залипить пример кастомной стройки
Bergi_Bear, кстати, у button и gluebutton события наведения существуют (enter,leave). У SimpleButton их нет, тк у него в запасе только событие клика. Но вот подсказки решают эту проблему
Bergi_Bear, xgm.guru/p/wc3/defaultframelist3
смотрим 2. ResourceBarFrame
информация есть. упоминается только тут. как 5 потомок ResourceBarFrame. но это все. попробуй вызвать как потомка. только сначала чекни кол-во потомков для точности. и виден ли он в данный момент..
Cooldawn - можно получить в рефордже и мемхаке. задают в ро в атаке. Обычным способом никак
bonus - изначально у юнита равна 1.00 скорость, bonus - процентная характеристика, начисляемая и понижаемая всеми абилами скорости/баффами и дебаффами/аурами
AS = bonus+(agility/100) --в рефордже никак эту характеристику не получить. только в мем хаке
attack_speed = bat/AS --ударов в сек
Ред. MpW
» WarCraft 3 / [lua] BonusMod
AS - attack speed - Скорость атаки, кол-во ударов в сек
BAS - basic attack speed - Базовая скорость атаки, кол-во ударов в сек
IAS - increase attack speed дополнительный процент. Складывается из ловкости героя и бонусов скорости атаки. Не может быть выше 400 или ниже -80. Изначально скорость не измерялась в процентах, но так пошло в варкрафте. Понижение и увеличение скорости осуществляется с помощью модификаторов-способностей. А еще дополнительно от ловкости через константы. Изначальная скорость юнитов равно 1.00 (100%). Максимум бонусом можно задать 4.00 (400%). Это в сумме: изначальная + бонусная = 100+400 = 500%. В варкрафте в максимум упирается в в этот потолок, это 5 ударов в сек. больше никак не сделать. ниже 100% нормы - уже скорость идет на понижение. самый минимальный предел = 20%. Ниже 20% никак нельзя поставить.
Time - время задержки после добавления модификации бонусов, сек. Этот параметр добавил специально, чтобы смотреть как меняется время задержки между атаками после добавления модификаторов.
Magina - The Anti-Mage (Антимаг) – 1.45 сек.
Shandelzare Silkwood - The Vengeful Spirit (Венга) – 1.77 сек.
Balanar - The Night Stalker (Сталкер) – 1.8 сек.
Terrorblade - The Soul Keeper (Террорблейд) – 1.5 сек.
Чтобы вычислить базовую скорость атаки (BAS), нужно количество выстрелов (ударов) разделить на время, за которое они произведены. За основу мы берем единицу, т.е. один удар, которым совершаем атаку за определенное время. То есть мы должны 1 разделить на Delay, так как пауза между выстрелами (ударами) равна 1.7 сек., отсюда: BAS =1/Delay=1/1.7 ≈ 0.6 выстрелов в секунду. Для вышеуказанных героев с отличающимися задержками от стандартной, все рассчитывается точно так же по формуле BAS =1/Delay.
AS = BAS* (1 + Σ IAS)=1/Delay*(1 + Σ IAS)
Silencer с ловкостью в 20 ед., тогда:
Σ IAS = 20 * 1% = 20%,
AS = 0.6 * (1+ 20%) ≈ 0,7 выстрелов (ударов) в секунду
Time = Delay / (1+ 20%) = 1.7 / 1.2 % = 1.4 сек - задержка между ударами
Σ IAS = 35 * 1% + 30% + 15% = 80%,
AS = 0.6* (1+80%) ≈ 1.1 выстрел (удар) в секунду
Time = Delay / (1+80%) = 1.7 / 1.8 % = 0.94 сек - задержка между ударами
https://www.xgm.guru/p/wc3/228035
https://zhyk.ru/forum/showthread.php?t=94549
Ред. MpW
» WarCraft 3 / Обновляемое замедление
Ред. MpW
» WarCraft 3 / [lua] BonusMod
» Кефирное логово / Статья о том, как нужно делать карты для 2кхаоса
» WarCraft 3 / Способы инкома
Ред. MpW
» WarCraft 3 / [lua] BonusMod
MANA_REGEN_Common = mana_regen_Intellect + MANA_REGEN_SobiMask + другие бонусы типа чародейской ауры - общий реген (так как у героя работает только реген от инты и от других бонусов, а вот базовый реген не учитывается. Так как базовый реген не работает на герое)
MANA_REGEN_Common = mana_regen_Intellect + MANA_REGEN_SobiMask1 + MANA_REGEN_SobiMask2 + другие бонусы типа чародейской ауры - общий реген ((если абилок от маски соби несколько, они суммируются вот так)
Какие бонусы есть в игре? Это пассивки (чародейская аура, аура фонтана, маска соби не учитывается), активных заклинании с постепенным восстановлением не много (рев, леденящий крик, омоложение не учитывается,
base_mana_regen - базовый реген, который указан в РО юнита "Характеристики - Восстановление маны". Работает только у обычных юнитов, тестировал этот момент у героя. У героя показывает реген от интеллекта (базовый не работает у героя), но когда он одевает маску соби учитывается базовый реген. Благодаря базовому регену, можно сделать героя с уникальным регеном.
mana_regen_Intellect = Intellect * k - реген от интеллекта (где Intellect - кол-во интеллекта героя, k - константа "Характеристики героя: увеличение скорости восстановления за единицу разума", которая за каждую единицу маны восстанавливает заданное число)
p - процент от абилки
Ред. MpW
» WarCraft 3 / Дальность атаки
» WarCraft 3 / Движение юнита
но подвижность ладно, см выше комменты
» WarCraft 3 / Reforged и CommandFunc.txt
» WarCraft 3 / Memory hack API v1.4
» WarCraft 3 / tooltips для simplebutton
Ред. MpW
» WarCraft 3 / tooltips для simplebutton
варкрафт он такой. что-то работает. что-то не работает. если бы не я, то кто? это все статьи из моего черновика, я в него в разное время вносил изменения, и свои мысли. как какой то дневник или журнал
» XGM Team / Роскомнадзор заблокировал The Hive Workshop
а ваши бывшие хгм-цы основали другой сайт? с ними что стало? на сайт их захожу, мой браузер ругается.
» XGM Team / Роскомнадзор заблокировал The Hive Workshop
Ред. MpW
» WarCraft 3 / TEXT (текст)
Ред. MpW
» WarCraft 3 / UI: 3x3 Custom Unit Stats
» WarCraft 3 / UI: 3x3 Custom Unit Stats
тут надо показать новичкам, что они могут любую информацию вставить в центральную панель. хоть 9, хоть 100.
могут переделать даже центральную панель. зачем им повторять вариковский интерфейс?
Ред. MpW
» WarCraft 3 / Активирован ли прицел
менять модель курсора никак, потом отследить координаты мыши никак (корявые костыли не в счет - они проигрывают в скорости), нацепить на мышь никак. что остается? при нажатии на фрейм-пустышку вызывать прицел через forcekey. А вот эта штука выше, помогает проверять закрытие. Удобно же.
» WarCraft 3 / Hovering Command/ItemButton (отслеживание наведения мыши)
» WarCraft 3 / Hovering Command/ItemButton (отслеживание наведения мыши)
Ред. MpW
» WarCraft 3 / Frame Save & Load
Ред. MpW
» WarCraft 3 / UI: Change Lumber Text
смотрим 2. ResourceBarFrame
информация есть. упоминается только тут. как 5 потомок ResourceBarFrame. но это все. попробуй вызвать как потомка. только сначала чекни кол-во потомков для точности. и виден ли он в данный момент..
Ред. MpW
» WarCraft 3 / Изменение размера рамки фреймов (мемхак)
и нельзя одноименные пихать. если в этом или в другом fdf есть, то нельзя
Ред. MpW
» WarCraft 3 / Скорость атаки юнита
bonus - изначально у юнита равна 1.00 скорость, bonus - процентная характеристика, начисляемая и понижаемая всеми абилами скорости/баффами и дебаффами/аурами
AS = bonus+(agility/100) --в рефордже никак эту характеристику не получить. только в мем хаке
attack_speed = bat/AS --ударов в сек
Ред. MpW
» WarCraft 3 / Документация функций интерфейса - API DOC FDF