27

» WarCraft 3 / [lua] BonusMod

функция UnitGetBonus может работать неправильно.
добавил в нее 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е группы:
  1. IAS от ловкости. Каждая единица ловкости увеличивает IAS на 1%. (Например, у героя ловкость равна 24, тогда IAS от ловкости = 24*1%=24%). (0.01) 1% взят из констант доты. В варкрафте значение это мб другим, оно равно 0.02 за каждую ловкость
  2. 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
27

» WarCraft 3 / Обновляемое замедление

тут надо при нанесении урона цели
  • на цель вешаем бафф (даем ауру)
  • создаем для цели таймер, запускаем. привязываем таймер к юниту хт, юнита к твймеру хт. хт - хэш-таблица. Нужно сохранить инфу в хт, чтобы получать инфу. Пример, когда повторно бьем цель, можно проверить есть ли у него таймер. нам не нужно создавать новый таймер. Достаточно перезапустить таймер. Или юнит умер, все удалить надо, хт чистим. Таймер истек, надо почистить хт с двух концов (с юнита/с таймера).
  • юнит умирает, можно таймер удалить. получаем ссылку на таймер. хт чистим. таймер уничтожаем
  • когда таймер истечет, удаляем бафф. удаляем таймер. Получаем ссылку на юнита. Чистим хт, дабы память не засорять.
  • по идее, у каждой цели будет свой таймер. при истечении он удаляется. Общий таймер можно сделать, тогда все цели запихиваем в группу, и ежесекудно перебираем в ней каждую цель. Можно счетчик времени каждой цели задать, и ежесекудно вычитать -1. Когда время истечет, <=0 цель выпиливается из группы и хт. Использовать общий или отдельно для каждого таймер - это ваш выбор
На гуи сидите?
Похожим эффектом продления обладает ядовитое облако.
27

» WarCraft 3 / [lua] BonusMod

большая часть филдов рефорджете не работает. работают только геты (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
27

» Кефирное логово / Статья о том, как нужно делать карты для 2кхаоса

PT153,
Деградация от того, что в вопроснике сидят токсики в числе тебя и меня, которые своими ответами отбивают любое желание вливаться в XGM.
да ты просто не отвечай в вопросах. и токсичность для новичков исчезнет. щас среднячки должны усилия прилагать в помощи.

1😉
27

» WarCraft 3 / [lua] BonusMod

мне кажется мана реген неправильна работает. или совсем не работает. используете абилку маски соби
раскрыть
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 - процент от абилки

какие параметры не ввожу для регена маны, реакции никакой

найдена ошибка
заменить
		-- MP 7 [79-91]
		FourCC('ZxC0'), -- +1
		FourCC('ZxC1'), -- +2
		FourCC('ZxC2'), -- +4
		FourCC('ZxC3'), -- +8
		FourCC('ZxC4'), -- +16
		FourCC('ZxC5'), -- +32
		FourCC('ZxC6'), -- +64
		FourCC('ZxC7'), -- +128
		FourCC('ZxC8'), -- +256
		FourCC('ZxC9'), -- +512
		FourCC('ZxCa'), -- +1024
		FourCC('ZxCb'), -- +2048
		FourCC('ZxCc'), -- -4096
на это
	-- regen MP 7 [79-91]
	FourCC('ZxD0'), -- +1
	FourCC('ZxD1'), -- +2
	FourCC('ZxD2'), -- +4
	FourCC('ZxD3'), -- +8
	FourCC('ZxD4'), -- +16
	FourCC('ZxD5'), -- +32
	FourCC('ZxD6'), -- +64
	FourCC('ZxD7'), -- +128
	FourCC('ZxD8'), -- +256
	FourCC('ZxD9'), -- +512
	FourCC('ZxDa'), -- +1024
	FourCC('ZxDb'), -- +2048
	FourCC('ZxDc'), -- -4096
27

» WarCraft 3 / Дальность атаки

дистанция получения приказа - расстояние, с которого юнит замечает вражескую цель, и начинает атаку/авто-атаку. есть в рефордже одиночное событие - юнит получает цель. тогда, можно чекать, получил или нет.

по факту игра таймером тикает на обнаружение поблизости противника. если вражеская цель замечена, то в атаку. Я так и делал в рефорджете авто-атаку =) Пример, часто этим пользуются сторожевые башни, или нейтралы, которые не спят, да и обычные юниты.
дальность атаки - макс радиус атаки, с которой начинается атака. Пример, для милишника, чтобы атаковать цель, он должен впритык подойти. А для различных стрелков мб разное макс расстояние, с которого могут обстреливать противника.
дальность по сути не ограничивает атаку. у меня вот милишник с мин дальность атаки когда обнаруживает издалека цель, бежит ее атаковать.
27

» WarCraft 3 / Движение юнита

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

но подвижность ладно, см выше комменты
27

» WarCraft 3 / Reforged и CommandFunc.txt

попробуй абилки скрывать нативками типа атака Aatk перемещение Amov итд
27

» WarCraft 3 / tooltips для simplebutton

ScorpioT1000, ааа. случайно. мне нужно было посмотреть как расширяется текст и рамка подсказки. Поэтому брал большой тест из новостей
27

» WarCraft 3 / tooltips для simplebutton

ScorpioT1000:
Без теорий заговора нельзя было обойтись?)
в смысле?)) вам нужно это.
варкрафт он такой. что-то работает. что-то не работает. если бы не я, то кто? это все статьи из моего черновика, я в него в разное время вносил изменения, и свои мысли. как какой то дневник или журнал
27

» XGM Team / Роскомнадзор заблокировал The Hive Workshop

мб дело в FastProxy браузера Mozilla?

N7 Molot, сомневаюсь. раздуваете из мухи слона. никто не умрет.
а ваши бывшие хгм-цы основали другой сайт? с ними что стало? на сайт их захожу, мой браузер ругается.
27

» WarCraft 3 / TEXT (текст)

poisoNDealer, для задания шрифта и его размеров. должен работать.
xgm.guru/p/wc3/UI---Simpleframes-uuw <= пример со String правильно ли ты изменяешь, надо со двойными слэшами путь <//>
можно изменять у String, у Text должно быть можно изменять. если никак, попробуй с пустышками. надо смотреть в параметры шаблона Text
что за флаг FontFlags "FIXEDSIZE", <= мб стоит убрать

эта функция BlzFrameSetFont мб для String. Т.е. для simpleframes. Это как например у Texture с BlzFrameSetVertexColor. Никак нельзя изменить
27

» WarCraft 3 / UI: 3x3 Custom Unit Stats

Bergi_Bear, это каким способом? через фреймы, через рефорджевские филды?

мне осталось чуть-чуть добавить 2-3 статьи. и дело с концом. и можно звать священника. а то мало ли завтра роскомнадзор выключит хгм навсегда.
еще бы сюда добавить примеры с анимированными фреймами, ты уже вчера скинул. только не показал как видео разбил на рисунки.
27

» WarCraft 3 / UI: 3x3 Custom Unit Stats

Bergi_Bear, наверное =)) это просто пустышка.
тут надо показать новичкам, что они могут любую информацию вставить в центральную панель. хоть 9, хоть 100.
могут переделать даже центральную панель. зачем им повторять вариковский интерфейс?

я вот подумал, а нельзя ли добавить баффы? всем желающим можна так
27

» WarCraft 3 / Активирован ли прицел

Bergi_Bear:
менять модель курсора никак, потом отследить координаты мыши никак (корявые костыли не в счет - они проигрывают в скорости), нацепить на мышь никак. что остается? при нажатии на фрейм-пустышку вызывать прицел через forcekey. А вот эта штука выше, помогает проверять закрытие. Удобно же.
можно отслеживать закрытие курсора. нажатие ESC, ЛКМ в игровой карте, переключение юнитов и пр. больше действии
и еще даже, если прицел можно было изменять. игра то считает, что эта обычный курсор. кликнешь по цели, переключишься на нее. тут еще надо чекать какие цели выделены. А в рефордже только юнитов можно проверять через BlzGetMouseFocusUnit(). декорации и итемы не отслеживаются 😝
27

» WarCraft 3 / Hovering Command/ItemButton (отслеживание наведения мыши)

Bergi_Bear, ну почему? сейчас есть. придет какой-нибудь нуб. и посмотрит на это. хочу еще залипить пример кастомной стройки

Bergi_Bear, кстати, у button и gluebutton события наведения существуют (enter,leave). У SimpleButton их нет, тк у него в запасе только событие клика. Но вот подсказки решают эту проблему
27

» WarCraft 3 / Frame Save & Load

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

» WarCraft 3 / UI: Change Lumber Text

Bergi_Bear, xgm.guru/p/wc3/defaultframelist3
смотрим 2. ResourceBarFrame
информация есть. упоминается только тут. как 5 потомок ResourceBarFrame. но это все. попробуй вызвать как потомка. только сначала чекни кол-во потомков для точности. и виден ли он в данный момент..
27

» WarCraft 3 / Изменение размера рамки фреймов (мемхак)

ValdionWorld, их надо наверн загрузить в toc
и нельзя одноименные пихать. если в этом или в другом fdf есть, то нельзя

я создавал новые fdf. а вот заменять fdf не пробовал. вы хотите заменить?
27

» WarCraft 3 / Скорость атаки юнита

Cooldawn - можно получить в рефордже и мемхаке. задают в ро в атаке. Обычным способом никак
bonus - изначально у юнита равна 1.00 скорость, bonus - процентная характеристика, начисляемая и понижаемая всеми абилами скорости/баффами и дебаффами/аурами
AS = bonus+(agility/100) --в рефордже никак эту характеристику не получить. только в мем хаке
attack_speed = bat/AS --ударов в сек
27

» WarCraft 3 / Документация функций интерфейса - API DOC FDF

ScorpioT1000, могу. но эта много частей надо перенести. хз как это перенести, даже не представляю?