Новые нативные функции в 1.29

» опубликован
В вышедшем сегодня патче для Warcraft III помимо огромного количества правок баланса и соревновательных карт была включена целая гора новых нативных JASS-функций (без малого почти сотня). Некоторые из них являются более удобными версиями уже бывшего доступным функционала, но большинство несут совершенно новые возможности, до сих пор бывшие недоступными простому смертному картоделу.
В общем, ознакамливайтесь и радуйтесь! Ну или не радуйтесь. Сами уж как-нибудь разберётесь.
type mousebuttontype extends handle

constant native GetBJMaxPlayers             takes nothing returns integer
constant native GetBJPlayerNeutralVictim    takes nothing returns integer
constant native GetBJPlayerNeutralExtra     takes nothing returns integer
constant native GetBJMaxPlayerSlots         takes nothing returns integer
constant native GetPlayerNeutralPassive     takes nothing returns integer
constant native GetPlayerNeutralAggressive  takes nothing returns integer

constant integer            PLAYER_NEUTRAL_PASSIVE              = GetPlayerNeutralPassive()
constant integer            PLAYER_NEUTRAL_AGGRESSIVE           = GetPlayerNeutralAggressive()

constant mousebuttontype    MOUSE_BUTTON_TYPE_LEFT              = ConvertMouseButtonType(1)
constant mousebuttontype    MOUSE_BUTTON_TYPE_MIDDLE            = ConvertMouseButtonType(2)
constant mousebuttontype    MOUSE_BUTTON_TYPE_RIGHT             = ConvertMouseButtonType(3)

constant playerevent        EVENT_PLAYER_MOUSE_DOWN             = ConvertPlayerEvent(269)
constant playerevent        EVENT_PLAYER_MOUSE_UP               = ConvertPlayerEvent(270)
constant playerevent        EVENT_PLAYER_MOUSE_MOVE             = ConvertPlayerEvent(271)

constant playerunitevent    EVENT_PLAYER_UNIT_SELL              = ConvertPlayerUnitEvent(272)
constant playerunitevent    EVENT_PLAYER_UNIT_CHANGE_OWNER      = ConvertPlayerUnitEvent(273)
constant playerunitevent    EVENT_PLAYER_UNIT_SELL_ITEM         = ConvertPlayerUnitEvent(274)
constant playerunitevent    EVENT_PLAYER_UNIT_SPELL_CHANNEL     = ConvertPlayerUnitEvent(275)
constant playerunitevent    EVENT_PLAYER_UNIT_SPELL_CAST        = ConvertPlayerUnitEvent(276)
constant playerunitevent    EVENT_PLAYER_UNIT_SPELL_EFFECT      = ConvertPlayerUnitEvent(277)
constant playerunitevent    EVENT_PLAYER_UNIT_SPELL_FINISH      = ConvertPlayerUnitEvent(278)
constant playerunitevent    EVENT_PLAYER_UNIT_SPELL_ENDCAST     = ConvertPlayerUnitEvent(279)
constant playerunitevent    EVENT_PLAYER_UNIT_PAWN_ITEM         = ConvertPlayerUnitEvent(280)

constant unitevent          EVENT_UNIT_SELL                     = ConvertUnitEvent(289)
constant unitevent          EVENT_UNIT_CHANGE_OWNER             = ConvertUnitEvent(290)
constant unitevent          EVENT_UNIT_SELL_ITEM                = ConvertUnitEvent(291)
constant unitevent          EVENT_UNIT_SPELL_CHANNEL            = ConvertUnitEvent(292)
constant unitevent          EVENT_UNIT_SPELL_CAST               = ConvertUnitEvent(293)
constant unitevent          EVENT_UNIT_SPELL_EFFECT             = ConvertUnitEvent(294)
constant unitevent          EVENT_UNIT_SPELL_FINISH             = ConvertUnitEvent(295)
constant unitevent          EVENT_UNIT_SPELL_ENDCAST            = ConvertUnitEvent(296)
constant unitevent          EVENT_UNIT_PAWN_ITEM                = ConvertUnitEvent(297)


//===================
// Player input
//===================

native GetTriggerPlayerMouseX               takes nothing returns real
native GetTriggerPlayerMouseY               takes nothing returns real
native GetTriggerPlayerMousePosition        takes nothing returns location
native GetTriggerPlayerMouseButton          takes nothing returns mousebuttontype


//===================
// Items UI
//===================

native SetItemName                          takes item whichItem, string name returns nothing
native SetItemDescription                   takes item whichItem, string name returns nothing
native SetItemTooltip                       takes item whichItem, string name returns nothing
native SetItemExtendedTooltip               takes item whichItem, string name returns nothing
native SetItemIconPath                      takes item whichItem, string name returns nothing

native GetItemDescription                   takes item whichItem returns string
native GetItemTooltip                       takes item whichItem returns string
native GetItemExtendedTooltip               takes item whichItem returns string
native GetItemIconPath                      takes item whichItem returns string


//===================
// Abils
//===================

    // Stats

native GetAbilityManaCost                   takes integer abilId, integer level returns integer
native GetAbilityCooldown                   takes integer abilId, integer level returns real

    // Text

native SetAbilityTooltip                    takes integer abilCode, string tooltip, integer level returns nothing
native SetAbilityOnTooltip                  takes integer abilCode, string tooltip, integer level returns nothing
native SetAbilityExtendedTooltip            takes integer abilCode, string ExtendedTooltip, integer level returns nothing
native SetAbilityOnExtendedTooltip          takes integer abilCode, string ExtendedTooltip, integer level returns nothing
native SetAbilityResearchTooltip            takes integer abilCode, string researchTooltip, integer level returns nothing
native SetAbilityResearchExtendedTooltip    takes integer abilCode, string researchExtendedTooltip, integer level returns nothing

native GetAbilityTooltip                    takes integer abilCode, integer level returns string
native GetAbilityOnTooltip                  takes integer abilCode, integer level returns string
native GetAbilityExtendedTooltip            takes integer abilCode, integer level returns string
native GetAbilityOnExtendedTooltip          takes integer abilCode, integer level returns string
native GetAbilityResearchTooltip            takes integer abilCode, integer level returns string
native GetAbilityResearchExtendedTooltip    takes integer abilCode, integer level returns string

    // Button

native SetAbilityIcon                       takes integer abilCode, string iconPath, integer level returns nothing
native SetAbilityOnIcon                     takes integer abilCode, string iconPath returns nothing
native SetAbilityPosX                       takes integer abilCode, integer x returns nothing
native SetAbilityPosY                       takes integer abilCode, integer y returns nothing
native SetAbilityOnPosX                     takes integer abilCode, integer x returns nothing
native SetAbilityOnPosY                     takes integer abilCode, integer y returns nothing

native GetAbilityIcon                       takes integer abilCode, integer level returns string
native GetAbilityOnIcon                     takes integer abilCode returns string
native GetAbilityPosX                       takes integer abilCode returns integer
native GetAbilityPosY                       takes integer abilCode returns integer
native GetAbilityOnPosX                     takes integer abilCode returns integer
native GetAbilityOnPosY                     takes integer abilCode returns integer


//===================
// Unit
//===================

    // Stats

native SetUnitArmor                         takes unit whichUnit, real armorAmount returns nothing
native SetUnitMaxHP                         takes unit whichUnit, integer hp returns nothing
native SetUnitMaxMana                       takes unit whichUnit, integer mana returns nothing
native SetUnitBaseDamage                    takes unit whichUnit, integer baseDamage, integer weaponIndex returns nothing
native SetUnitDiceNumber                    takes unit whichUnit, integer diceNumber, integer weaponIndex returns nothing
native SetUnitDiceSides                     takes unit whichUnit, integer diceSides, integer weaponIndex returns nothing
native SetUnitAttackCooldown                takes unit whichUnit, real cooldown, integer weaponIndex returns nothing

native GetUnitArmor                         takes unit whichUnit returns real
native GetUnitMaxHP                         takes unit whichUnit returns integer
native GetUnitMaxMana                       takes unit whichUnit returns integer
native GetUnitBaseDamage                    takes unit whichUnit, integer weaponIndex returns integer
native GetUnitDiceNumber                    takes unit whichUnit, integer weaponIndex returns integer
native GetUnitDiceSides                     takes unit whichUnit, integer weaponIndex returns integer
native GetUnitAttackCooldown                takes unit whichUnit, integer weaponIndex returns real

native GetUnitCollisionSize                 takes unit whichUnit returns real
native GetLocalUnitZ                        takes unit whichUnit returns real

native SetUnitName                          takes unit whichUnit, string name returns nothing
native SetUnitNameAll                       takes unit whichUnit, string name returns nothing
native SetHeroProperName                    takes unit whichUnit, string name returns nothing

    // Abils

native SetUnitAbilityCooldown               takes unit whichUnit, integer abilId, integer level, real cooldown returns nothing
native GetUnitAbilityCooldown               takes unit whichUnit, integer abilId, integer level returns real
native GetUnitAbilityCooldownRemaining      takes unit whichUnit, integer abilId returns real
native EndUnitAbilityCooldown               takes unit whichUnit, integer abilCode returns nothing

native GetUnitAbilityManaCost               takes unit whichUnit, integer abilId, integer level returns integer

native UnitHideAbility                      takes unit whichUnit, integer abilId, boolean flag returns nothing
native UnitDisableAbility                   takes unit whichUnit, integer abilId, boolean flag, boolean hideUI returns nothing
native DeleteHeroAbility                    takes unit whichUnit, integer abilCode returns nothing

    // Misc.

native UnitInterruptAttack                  takes unit whichUnit returns nothing
native UnitCancelTimedLife                  takes unit whichUnit returns nothing

native IsUnitSelectable                     takes unit whichUnit returns boolean
native IsUnitInvulnerable                   takes unit whichUnit returns boolean


//===================
// Special effect
//===================

    // Appearance

native SetSpecialEffectColorByPlayer        takes effect whichEffect, player whichPlayer returns nothing
native SetSpecialEffectColor                takes effect whichEffect, integer r, integer g, integer b returns nothing
native SetSpecialEffectAlpha                takes effect whichEffect, integer alpha returns nothing
native SetSpecialEffectScale                takes effect whichEffect, real scale returns nothing
native SetSpecialEffectHeight               takes effect whichEffect, real height returns nothing
native SetSpecialEffectTimeScale            takes effect whichEffect, real timeScale returns nothing
native SetSpecialEffectTime                 takes effect whichEffect, real time returns nothing

    // Position

native SetSpecialEffectX                    takes effect whichEffect, real x returns nothing
native SetSpecialEffectY                    takes effect whichEffect, real y returns nothing
native SetSpecialEffectZ                    takes effect whichEffect, real z returns nothing
native SetSpecialEffectPosition             takes effect whichEffect, real x, real y, real z returns nothing
native SetSpecialEffectPositionLoc          takes effect whichEffect, location loc returns nothing

native GetLocalSpecialEffectX               takes effect whichEffect returns real
native GetLocalSpecialEffectY               takes effect whichEffect returns real
native GetLocalSpecialEffectZ               takes effect whichEffect returns real

native SetSpecialEffectOrientation          takes effect whichEffect, real yaw, real pitch, real roll returns nothing
native SetSpecialEffectYaw                  takes effect whichEffect, real yaw returns nothing
native SetSpecialEffectPitch                takes effect whichEffect, real pitch returns nothing
native SetSpecialEffectRoll                 takes effect whichEffect, real roll returns nothing

    // Playback

native PlaySpecialEffect                    takes effect whichEffect, integer anim returns nothing
native PlaySpecialEffectWithTimeScale       takes effect whichEffect, integer anim, real timeScale returns nothing


//===================
// Misc.
//===================

native SetEventDamage                       takes real damage returns nothing

native AutomationTestStart                  takes string testName returns nothing
native AutomationTestEnd                    takes string testName returns nothing

constant native IncPlayerTechResearched     takes player whichPlayer, integer techid, integer levels returns nothing
constant native DecPlayerTechResearched     takes player whichPlayer, integer techid, integer levels returns nothing


//===================
// Not yet impl.
//===================

// native GetUnitMovementType               takes unit whichUnit returns integer
// native SetUnitMovementType               takes unit whichUnit, integer movementType returns nothing
// native GetUnitArmorType                  takes unit whichUnit returns integer
// native SetHeroStatEx                     takes unit whichHero, integer whichStat, integer statValue, boolean permanent returns nothing
// native GetHeroPrimaryStat                takes unit whichHero returns integer
// native GetHeroPrimaryStatById            takes unit whichHero returns integer
// native GetHeroStat                       takes unit whichHero, integer whichStat, boolean includeBonuses returns integer


Просмотров: 11 857



» Лучшие комментарии


Doc #151 - 4 месяца назад (отредактировано ) 0
Кастом UI прекрасно стандартными средствами реализуется
Ага, с залоченной камерой и постоянными сбросами селекшна))
NazarPunk #152 - 4 месяца назад 2
Doc:
Кастом UI прекрасно стандартными средствами реализуется
Ага, с залоченной камерой и постоянными сбросами селекшна))
И ещё не работающий при камере смотрящей строго вверх/вниз))
Но реализовывать нативно RenderEdge близы явно не будут. Надеюсь они хоть нормальную подсветку JASS сделали, а то без JGNP на него смотреть невозможно.
DualShock #153 - 4 месяца назад 13
native SetUnitName
Побаловался сегодня с этим вот что получилось
прикреплены файлы
pro100master #154 - 4 месяца назад 0
DualShock, это ты придумал?
uranus #155 - 4 месяца назад 2
DualShock, а через SetAbilityTooltip наконец-то можно и визуально реализовать способности, требующие жизнь, а не ману. Без проблем получилось, на удивление.
прикреплены файлы
DualShock #156 - 4 месяца назад 0
Кто нибудь знает, что это? не работает :(
прикреплены файлы
Кет #157 - 4 месяца назад 0
проверка кода, судя по названию
Doc #158 - 4 месяца назад 0
Добавили еще в 1.28
ScorpioT1000 #159 - 4 месяца назад 0
uranus, в юникоде есть покрасивее значок для HP
uranus #160 - 4 месяца назад 0
ScorpioT1000, я загуглил "крестик символ") Вообще я подумал, а нельзя ли создать шрифт, пусть даже на основе существующего, а в нем указать для некоторых символов уже подобие иконок. И уже с этим шрифтом можно будет установить иконку, если это можно так назвать.
KingMaximax #161 - 4 месяца назад (отредактировано ) 0
ScorpioT1000:
uranus, в юникоде есть покрасивее значок для HP
Wacraft III даже при 1.29 PTR пока ещё не поддерживает wchar_t (WORD), что печальненько. (Внутри игровой текст, ну ещё и WE тексты, описание и пр.)
avuremybe #162 - 4 месяца назад 1
uranus, если шрифт можно залить прямо в карту - то по идее возможно.
uranus #163 - 4 месяца назад 0
avuremybe, вот, т.е. можно будет такой аналог иконки маны создать будет.
KingMaximax #164 - 4 месяца назад 1
avuremybe:
uranus, если шрифт можно залить прямо в карту - то по идее возможно.
Если нравиться возиться с такими программами как FontForge, то пожалуйста. А так, это же геморно редачить шрифты...
avuremybe #165 - 4 месяца назад 0
uranus, шрифт ты любой создать можешь. Я тебе о том, что видеть его будет только человек у которого он есть в архиве вара.
Вроде я встречал здесь тему, где обсуждалась возможность залить свой шрифт прямо в карту. Но я не помню, чем закончилось обсуждение данного вопроса.
uranus #166 - 4 месяца назад (отредактировано ) 0
avuremybe, я сам лично заливал файлы шрифтов в карты, делать это не сложно:
Берем *.ttf файлик, импортируем, а потом прописываем в настройках интерфейса пути (причем настройки со шрифтами есть только в JNGP, если я не путаю).
Daro #167 - 4 месяца назад (отредактировано ) -1
Опишу свою ситуацию, где-то выше я писал что многие карты не будут работать на 1.29.Это действительно так проверял на своем проекте ( Legend of Worlds).Тестируя 2 версии 1 - основная со скиллами на структурах и всякими системами и весящая больше 8 мб и очень старую версию , которая весит 6мб и полностью сохраняется на обычном редакторе.
Проведя несколько тестов оптимизированой версии моей карты на 1.28 никаких неполадок не было , все в целом полностью работало.На версии 1.29 я не смог начать игру, карта загружась а дальше никак , видимо там близзы изменили что-то в запуске триггеров.Дальше я нашел нашел способ начать игру , так вот спустя примерно минуту - полторы вар навечно зависал, так было каждый раз сколько я не пытался. Я предположил что близзы накосячили с приказами или чем -то подобным , потому что вар ложился как предпологаю , когда ИИ боты пытались что-то применить.
Дальше я решил откопать версию работающую на обычном редакторе чтоб протестить ее в новом ворлд эдиторе от близов.Я решил поэксперементировать убил часа полтора времени переделывая карту на 24 игрока и все триггеры.В Итоге в пустую вар3 также навечно зависал спустя минуту игры , неуспев раздать героев игрокам (ботам).Убрал 24 игрока и решил проверить снова - результат не изменился.Кроме того у меня сломался JNGP сразу же после установки тестового патча 1.29.Он даже не мог запуститься, переустановки не помогали.Пришлось чистить реестр.Карта сохраненая в новом редакторе больше не открылась на 1.26 даже без доп игроков, что и следовало ожидать.Близзарды явно что-то накосячили.
Жаль потеряного времени.
Doc #168 - 4 месяца назад 0
Скидывай близзам свою карту.
Daro #169 - 4 месяца назад 0
Предпологаю что новый патч больно ударит по джассерам, так им есть что терять.В обычном редакторе очень ограниченый функционал, а за 15 лет они добавили только 1 сомнительную кнопку проверки синтаксиса.Карты сделаные полностью на ГУИ по идеии должны нормально пережить переход.
.Вижу два варианта :
  1. оставаться на 1.26 со всем багажем
  2. гнаться за новыми сонительными патчами для мили карт.
Надеюсь что к выходу оффициального пачта 1.30 (не раньше) у нас уже будет новый JNGP.
Затея с 24 игроками очень крутая ,только пока близзы не поправят взаимодействие с памятью варкрафта и выгрузкой лишних обьектов из памяти, ничего хорошего не будет.К слову сказать, я пришел к выводу, что даже 12 игроков в карте слишком много.Сечас даже просто 6 человек собрать трудно, темболее с бесконечными проблемами с гареной.
Doc #170 - 4 месяца назад 7
Он не должен ударить вообще никак. Вместо того чтобы строить теории заговора лучше постить багрепорты разработчикам.
ScorpioT1000 #171 - 4 месяца назад 1
uranus, есть даже fontawesome =) fontawesome.com/icons
только это локально всё
NazarPunk #172 - 4 месяца назад 2
SetAbilityTooltip()
добавили, а вот SetAbilityRequirements(),SetUnitRequirements(),SetItemRequirements() пожалели. А как удобно было бы
SetItemRequirementsForPlayer(Player(0),'ward',udg_IsDungeonBossKilled,"Убить босса в подземелье")
Вместо создания кучи даммиков ради одной красивой строчки.
А на HideUIButtonForUnit(GetTriggerUnit(),'Move') я даже не надеюсь((
uranus #173 - 4 месяца назад (отредактировано ) 0
NazarPunk, но требование же не просто строка, а именно что своего рода список юнитов/улучшений, которые должны быть, как-то функция здесь не очень уместна. по сути можно было бы менять имя этого самого дамми юнита, но глобально для всех юнитов этого типа.
ScorpioT1000, очень даже неплохо.
NazarPunk #174 - 4 месяца назад 0
uranus, так можно ввести новый тип
set udg_IsDungeonBossKilled = CreateRequirement()
call SetRequirementName(udg_IsDungeonBossKilled,"Убить босса в подземелье")
call SetRequirementStateForPlayer(udg_IsDungeonBossKilled,Player(0),false)
call SetRequirementFotUnitTypeForPlayer(Player(0),'hfoo',udg_IsDungeonBossKilled)
uranus #175 - 4 месяца назад 0
NazarPunk, я не думаю, что близы будут заморачиваться над этим. Судя по всему, они вообще механику менять, пусть и совсем немного, не собираются. Максимум: добавят возможность динамично устанавливать требования юнитам/способностям.
Extremator #176 - 4 месяца назад 2
uranus:
DualShock, а через SetAbilityTooltip наконец-то можно и визуально реализовать способности, требующие жизнь, а не ману. Без проблем получилось, на удивление.
Без SetAbilityTooltip, на патче 1.26, без MemoryHack...
GetLocalPlayer #177 - 4 месяца назад 0
Extremator, полагаю речь о требованиях от максимального/текущего запаса здоровья, которые нестатичны.
NazarPunk #178 - 4 месяца назад 0
GetLocalPlayer, SetAbilityTooltip() же не устанавливает требования. Для этого к каждому заклинанию неплохо было бы поле добавить Стоимость: жизни
uranus #179 - 4 месяца назад (отредактировано ) 0
Extremator, тут суть в динамике, описание то, конечно, всегда можно было менять в РО =) Я написал функцию, которая к каждой абилке может добавлять требования в кол-ве ХП. Вешает событие на начало каста и проверяет наличие ХП. Естественно, такую стоимость можно будет убрать потом.
GetLocalPlayer, и это тоже.
KingMaximax #180 - 4 месяца назад 0
Патч обновили, ну ничего пока такого серьезного us.battle.net/forums/en/bnet/topic/20761878126
uranus #181 - 4 месяца назад 0
KingMaximax, поднятые лимиты для объектов - не так уж плохо, а так да - очень медленно они будут чинить новые нативки.
ssbbssc #182 - 4 месяца назад 1
очень сочувствую тем кодерам, которые сейчас всё это разгребают
и одновременно завидую) такой мозговой штурм небось идёт
NazarPunk #183 - 4 месяца назад 0
Esc on Mac has a chance to close the client
Просто шикарно)
ScorpioT1000 #184 - 4 месяца назад 0
nullable string даже не в known issues m-|
DracoL1ch #185 - 4 месяца назад 0
ScorpioT1000:
nullable string даже не в known issues m-|
а что это?
KingMaximax #186 - 4 месяца назад 0
nullable string даже не в known issues m-|
Как и некоторые функции.
uranus #187 - 4 месяца назад 0
Ну, почему самые элементарные вещи они не хотят добавлять? Т.е. сделать Ауру вампиризма настраиваемой как Ауру меткости они не могут, а заставить Смертельный удар не учитывать урон от предметов - пожалуйста. Может написать на хайв?
Clamp #188 - 4 месяца назад 0
Потому что для их целей (баланса) потребовалось одно, а не другое.
uranus #189 - 4 месяца назад 0
Clamp, это я понимаю, но в таком случае уже нельзя сослаться на техническую сложность реализации. Нативки вводят, на этом спасибо, но куда проще некоторые вещи позволить реализовать через РО.
Clamp #190 - 4 месяца назад 0
Куда проще дать ко всему доступ из кода потенциально, и нет смысла размыливать не слишком большие рабочие ресурсы на лишнюю работу.
Не забывай, что там сейчас полностью новая команда разработчиков, и им самим приходится сначала разбираться в деталях.
NazarPunk #191 - 4 месяца назад 0
uranus:
Ну, почему самые элементарные вещи они не хотят добавлять? Т.е. сделать Ауру вампиризма настраиваемой как Ауру меткости они не могут, а заставить Смертельный удар не учитывать урон от предметов - пожалуйста. Может написать на хайв?
Потому что всем рулят эффективные менежеры, и хайп о патче важнее его работоспособности. ИМХО к концу года Бдиззы даже близко к функционалу мемхака не продвинутся.
uranus:
Clamp, это я понимаю, но в таком случае уже нельзя сослаться на техническую сложность реализации. Нативки вводят, на этом спасибо, но куда проще некоторые вещи позволить реализовать через РО.
А некоторые вещи совсем просто реализуются через
GetSLKcelll()
SetSLKcell()
Куда проще дать ко всему доступ из кода потенциально, и нет смысла размыливать не слишком большие рабочие ресурсы на лишнюю работу.
Тоесть о SetUnitModel() можно только мечть?
Doc #192 - 4 месяца назад (отредактировано ) 0
Все ваще просто делается)) Попробуйте сами разок подизайнить апи которое должно быть не только понятным, но и безопасным со всем сторон и поймете, сколько времени на это уходит. Мемхачить на коленке конечно изи. Дали SetSLKCell, в каком-нибудь месте получили очередной OOB и очередной мемхак.
Cancel #193 - 4 месяца назад 8
Полезная фича: теперь способностям и предметам можно задавать какое угодно по размеру описание - но делать это нужно через объединение строк, так как есть лимит на размер одной строки, созданной через GUI
прикреплены файлы
orc01 #194 - 4 месяца назад 1
Многое хорошо, многое спасибо и всё такое, но вот функции AddUnitSpecificBuff так и не завезли, и по прежнему приходится для простейшего действа появления иконки баффа выдумывать способность и корячится с даммиками. Неужели реализация оного так сложна и невостребованна?
Cancel #195 - 4 месяца назад 0
orc01, уверен у них есть это в тасках
orc01 #196 - 4 месяца назад (отредактировано ) 0
Cancel, на мой взгляд, реализовать это стоило первее, чем относительно бестолковых AddArmor и добавлении разницы костей в атаке(которые, имхо, программятся сложнее относительно одного юнита). Я уже отчаялся получить такую простую и такую востребованную функцию...
Cancel #197 - 4 месяца назад 0
orc01, хер знает, я очень рад возможности менять динамично кости, броню и ппрочее без лишнего гемороя (хоть и есть баги, например, при прекращении способности аватар после изменения макс хп). Для своего проекта запилил диаблоподобный механизм генерации мобов.
Все формулы и параметры всех юнитов сделал в Excel, а из Excel генерирую код для варика по генерации юнитов разных типов с сопутствующими для них аффиксами и префиксами
orc01 #198 - 4 месяца назад 0
Cancel,
Каждому своё хорошо, как говорится, каждому своё полезно)
Clamp #199 - 4 месяца назад 1
Все ваще просто делается))
Очевидно, что я имел в виду не это, не надо юродствовать.

бестолковый AddArmor
Попробуй добавить броню без этой функции или тонны костылей.
orc01 #200 - 4 месяца назад 0
Clamp,
Добавить-то без костылей проблематично, вопрос только как часто это требуется, кроме совсем уж специфических случаев? Собственно, а как часто это делалось не банальным "апгрейдом" или добавлением абилки?
А вот бафф... да чуть ли не в каждом спелле юзается. Если мне дадут выбор между баффом и добавлением брони, то первое, по мне, облегчит куда больше работы и уберет даммиков