Новые нативные функции в 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


Просмотров: 5 543



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


Кет #1 - 2 месяца назад 18
Ура! Скептики посрамлены! Варкрафт жив!
Пушистый #2 - 2 месяца назад 0
Найти бы время все это проверить, чтобы потом сделать видбек, в случае выявления неточностей.
ScopteRectuS #3 - 2 месяца назад (отредактировано ) 0
А чем отличаются эти и этим подобные функции с "On":
native GetAbilityTooltip                    takes integer abilCode, integer level returns string
native GetAbilityOnTooltip                  takes integer abilCode, integer level returns string
Понял, это для авто-кастов? Но тогда где "Off" вариант?
pro100master #4 - 2 месяца назад (отредактировано ) 0
По умолчание: Чтобы установить базовый урон необходимо установить по умолчание индекс 1 как и гетер 0
abidin #5 - 2 месяца назад (отредактировано ) 2
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
Интересно из каких религиозных соображений они решили не вводить Get функцию?
DracoL1ch #6 - 2 месяца назад 3
Кет:
Ура! Скептики посрамлены! Варкрафт жив!
Боже мой, как вы живете? От новых нативок в игре появятся новые игроки? Да дай бог, чтобы старые-то вспомнили, что существовала такая игра, и что они когда-то в неё играли. Как можно радоваться подобным мелочам, словно это новая игра с большим будущим?
По теме - малая часть от всех сеттеров-геттеров, что ожидалось. Лучше, чем ничего, но до полноценного агрегата еще годы работы в таком темпе.
pro100master #7 - 2 месяца назад 2
Самое печальное что нельзя менять описание способности и предмета для определеного игрока.. а то через GetLocalPlayer десик
Doc #8 - 2 месяца назад 0
abidin, из тех что игра сама это не сетает.
От новых нативок в игре появятся новые игроки
Думаю если завезут бнет 2.0 то какой-никакой бонус будет.
малая часть от всех сеттеров-геттеров, что ожидалось
Разве? По-моему как раз сказали что в этом патче как раз завезут небольшую часть предложений. Я бы сказал что ожидания оправданы
pro100master #9 - 2 месяца назад 0
Нужно тестировать в сети
if GetLocalPlayer() == Player(0) then
    		call SetAbilityTooltip( 'Adef', "|c0000FF00123|r", 1 )
    		call SetAbilityExtendedTooltip( 'Adef', "321 |c0000FF00test|r", 1 )
	endif
У мя почему то десихр...
Doc #10 - 2 месяца назад 0
Ну дак потому что неправильно делаешь, точно так же как и со спецэффектами локальными.
pro100master #11 - 2 месяца назад 0
Doc, я знаю просто тестирую... хотел чтоб можно менять описание у определеного юнита например зачем делать 12 абилок который будет описание каждый апргрейд от +1 до +12 =) было круто
Clamp #12 - 2 месяца назад 2
У мя почему то десихр
Строку надо создавать потому что не локально.
pro100master #13 - 2 месяца назад 0
Clamp, угу и русский не показывает...
PT153 #14 - 2 месяца назад (отредактировано ) 0
pro100master:
Clamp, угу и русский не показывает...
Потому что поддержку кириллицы так и не завезли.
Ну и на сайте написано:
PTR only supports English version of the client.
Clamp #15 - 2 месяца назад 0
Странно ожидать русскую версию в тестовом клиенте игры, созданной не в СНГ.
PT153 #16 - 2 месяца назад 0
Объясните ещё раз, что делает SetEventDamage(), пожалуйста.
Raised #17 - 2 месяца назад (отредактировано ) 0
PT153, изменяет ивентдемедж на указанное число.
GetLocalPlayer #18 - 2 месяца назад (отредактировано ) 0
Получение зеленой атаки видимо не завезли?
native UnitInterruptAttack                  takes unit whichUnit returns nothing
Интересует смысл этой нативки.
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 GetUnitArmor                         takes unit whichUnit returns real
Получает всю броню или белую?
Raised #19 - 2 месяца назад 0
GetLocalPlayer, полагаю дисейбл - это как сайленс или нечто вроде него. А хайд - это хайд.

Остальное нужно тестить. Патч только вышел. Телепаты в отпуске.
biridius #20 - 2 месяца назад 4
GF RaiseD, вопрос в том можно ли через это SetEventDamage() сделать поглошение урона, или это тупо перезапись глобалки, и все равно нужно возится с добавлениями хп и умираниями от урона больше хп
pro100master #21 - 2 месяца назад (отредактировано ) 0
GetLocalPlayer, базовую и зеленая вместе так как будет возврашать реальные то есть в игре вы увидите 4 армора а реал вернет 3.900
Raised #22 - 2 месяца назад (отредактировано ) 5
biridius, можно. Для этого она и придумана.
ScorpioT1000 #23 - 2 месяца назад 0
Поменяйте уже ему никнейм и пару пунктов за житрожопие можно)
pro100master #24 - 2 месяца назад 4
Щас тестил такен урона да если поставить минус 1.00 то лечит а если 0.00 то польный игнор урона или свой урон... реально круто что не умирает от 1 хп при 9лям урона не умирает
Пушистый #25 - 2 месяца назад 0
JNGP для 1.29 никто еще не скрутил?
pro100master #26 - 2 месяца назад 2
SetEventDamage игнорирует армор
то есть юит получает урон
получает сколько нанес урон через GetEventDamage c учетом брони
если надо то SetEventDamage (GetEventDamage()) будет по умолчание...
но если надо то поставить GetEventDamage(-100.00) даст лечение хп здоровья чистый с учетом регеном.
GetEventDamage(100.00) снимает 100 здоровья с юнита чистый даже учитивает регенерация
PT153 #27 - 2 месяца назад 0
pro100master:
но если надо то поставить GetEventDamage(-100.00) даст лечение хп здоровья чистый с учетом регеном.
GetEventDamage(100.00) снимает 100 здоровья с юнита чистый даже учитивает регенерация
Тут наверное имеется в виду SetEventDamage()?
pro100master:
то есть юит получает урон
получает сколько нанес урон через GetEventDamage c учетом брони
То есть по умолчанию в GetEventDamage() записан урон с вычитом брони?
Raised #28 - 2 месяца назад 0
PT153, да. Это итоговый урон после всех подсчетов.
GetLocalPlayer #29 - 2 месяца назад 0
То есть по умолчанию в GetEventDamage() записан урон с вычитом брони?
По умолчанию, событие на получение урона срабатывает уже после всех снижающий факторов от брони, способностей, баффов. Технически, GetEventDamage это уже не урон, а прямое изменение здоровья, так что описанное выше поведение вряд ли можно назвать сюрпризом.
pro100master #30 - 2 месяца назад (отредактировано ) 4
PT153, да сеттер перепутал вот сначало мы добавляем события каждого юнитп получает урон
после чего мы получим GetEventDamage() оригинальный урон с учетом брони то есть
если в этом потоке не установлено SetEventDamage то в итоге идет оригинал.. типо получим так
SetEventDamage(GetEventDamage()) - это основа оригинал в движке чтоб этого не было мы изменим сеттер ранее урона то получим результат =) то есть уже радует
кто шас тестирует 1.29 вот карта и скрин примера после события получение урона
Терь нет нужды добавлять абилку антимагия -200% обратный чтобы не умирать от способности... ну и так далее =)
прикреплены файлы
Clamp #31 - 2 месяца назад 2
То есть по умолчанию в GetEventDamage() записан урон с вычитом брони?
Ну это логично, показывает же получаемый целью урон, а получает она его только после прохождения всех возможных модификаторов.
pro100master #32 - 2 месяца назад 0
удалил библиотека детектор урона и поставил 1.29 SetEventDamage и круто и гладко работает чем 1000 строк кода (антимагия, хп давать и так далее)
Пушистый #33 - 2 месяца назад 0
pro100master, JNGP на 1.29 работает?
DracoL1ch #34 - 2 месяца назад 0
Если строки вдруг стали обязательны к синхронизации - это провал. Иначе, если тултип действительно нельзя менять локально, это провал x2
pro100master #35 - 2 месяца назад 0
Пушистый, Я не разработчик JNGP, напиши ему и узнаеш...
DracoL1ch, ну да если было бы возможность менять тилтуп для юнита а не для всей игры тогда и локал отпали бы вопросов!!!
DracoL1ch #37 - 2 месяца назад 0
Создаю уникальные локальные строки уже 4 года, строки не являются хендлами и не нуждаются в синке
2 комментария удалено
Doc #40 - 2 месяца назад 0
Я согласен что тултипы должна быть возможность менять локально без проблем.
Но и эффекты тоже можно было бы создавать локально, но как-то всем пох, невелика потеря.
Daro #41 - 2 месяца назад 0
Может когда - нибудь мы доживем до настраиваемого угла крена юнита и увеличения макс скорости перемещения , хотябы до 700-722 ( в идеале до 1000) .Думаю 200 допольнительной скорости перемещния не навредит и не вызовет особых проблем с реализацией.Ждем допиленого отлова урона
Raised #42 - 2 месяца назад 1
Кто-нибудь уже проверял настройки крита. Можно ли отметить чтоб он учитывал доп. урон?
Пушистый #43 - 2 месяца назад (отредактировано ) 0
GF RaiseD, вроде как такого поля нет, увы, хотя для Хранителя Рощи ввели параметр неуязвимости.
Raised #44 - 2 месяца назад (отредактировано ) 0
Видимо, теперь нужно будет триггерно делать крит. По крайней мере чтоб он работал так как раньше.
awesomesk1ll #45 - 2 месяца назад 4
GF RaiseD:
Видимо, теперь нужно будет триггерно делать крит. По крайней мере чтоб он работал так как раньше.
Про это вопрос? оно есть
Raised #46 - 2 месяца назад 0
Флаффи, я тя отпинаю. awesomesk1ll, да. Об этом.
Extremator #47 - 2 месяца назад (отредактировано ) 0
DracoL1ch:
Создаю уникальные локальные строки уже 4 года, строки не являются хендлами и не нуждаются в синке
DracoL1ch, есть подозрение что это же самое косается не только строк, но и инт'ов, реал'ок, и бул'ок, это так? (т.к. они вообще не объвляются в коммоне, и стоят на порядок выше и/или проще всего остального)
ScorpioT1000 #48 - 2 месяца назад 0
Extremator, примитивы создаются прямо на месте и передаются по значению
Raised #49 - 2 месяца назад 0
Кет:
Ура! Скептики посрамлены! Варкрафт жив!
Близзард готовит ритуал воскрешения.
Sergarr #50 - 2 месяца назад 0
native GetTriggerPlayerMouseX takes nothing returns real
native GetTriggerPlayerMouseY takes nothing returns real
native GetTriggerPlayerMousePosition takes nothing returns location
native GetTriggerPlayerMouseButton takes nothing returns mousebuttontype
Очень интерестно, теперь можно сделать шутер на базе варика со стрельбой от первого лица! Ну и еще наверное можно триггерный псевдоинтерфейс запилить, наподобие DGUI, но только без глюков...
constant native DecPlayerTechResearched takes player whichPlayer, integer techid, integer levels returns nothing
А что, технологиям теперь можно уровень понижать?
Doc #51 - 2 месяца назад 0
Можно. Для интерфейса все равно нужна возможность рисовать картинки, цветные квадраты и текст. Глюки в дгуи были в основном из-за способа "отрисовки".
Raised #52 - 2 месяца назад 4
Лучше штормите близзов чтоб поддержку кастом UI ввели. ДГУИ - херь.
DracoL1ch #53 - 2 месяца назад 0
Поднимать скорость бега выше 522 нельзя по причине устаревшей системы поиска пути, вот если они её переделают.. но это мечты имхо
У эффектов есть причина быть хендлами, у структуры абилок - нет. Костыль какой-то очередной
ScorpioT1000 #54 - 2 месяца назад (отредактировано ) 0
Нельзя сделать шутер от 1 лица, нельзя) потому что нет функционала установки курсора в центр. Ты доведёшь до края экрана и всё остановится. В идеале ещё сокрытие нужно.
А вот управление персонажем в стиле Diablo и подобных гораздо интереснее. Т.е. в целом поворот и движение в направлении мыши.
uranus #55 - 2 месяца назад 0
Я не понимаю, почему GetUnitAbilityManaCost не имеет Set вариации, и к чему было отдельно делать GetUnitMaxMana/Life? Что вообще такое AutomationTest?
Alexander12 #56 - 2 месяца назад 0
uranus:
Я не понимаю, почему GetUnitAbilityManaCost не имеет Set вариации, и к чему было отдельно делать GetUnitMaxMana/Life? Что вообще такое AutomationTest?
Одинаковые скилы ссылаются на одну таблицу данных, при изменении у 1 героя, это отразиться на всех остальных. Я с помощью мемхака создавал новую таблицу и ставил ссылку на нее у скила, чтобы можно было редактировать под конкретного героя.
uranus #57 - 2 месяца назад 2
Alexander12, очень печально, что более мощных нативок [без переписывания движка] мы не получим. Эх, ну, тогда осталось только JNGP дождаться.
Doc #58 - 2 месяца назад 0
Так а получение курсора сейчас в каких координатах? World?
Maniac_91 #59 - 2 месяца назад (отредактировано ) 0
Мышь вверх и вниз - это поворот колёса?
Если да, то круто. Можно шутер с быстрой сменой оружия сделать.
pro100master #60 - 2 месяца назад 0
Maniac_91, midle это колесиком при нажатие, а up и down это прокрутка колесик... а move при движении мышка
biridius #61 - 2 месяца назад (отредактировано ) 0
Maniac_91,
события
EVENT_PLAYER_MOUSE_DOWN - нажатие
EVENT_PLAYER_MOUSE_UP - отпускание
EVENT_PLAYER_MOUSE_MOVE - наведение
а тип кнопки этого события проверяется в условиях через GetTriggerPlayerMouseButton()
MOUSE_BUTTON_TYPE_LEFT - левая
MOUSE_BUTTON_TYPE_MIDDLE - колесо
MOUSE_BUTTON_TYPE_RIGHT - правая
ScorpioT1000 #62 - 2 месяца назад (отредактировано ) 0
Doc, location в world, x/y я так понимаю, viewport. Иначе был бы Z
UPD
а вот хрен, всё в world координатах
(опечатался, там вторая - это Y)
прикреплены файлы
NanO #63 - 2 месяца назад 0
лол
То есть оно возвращает позицию курсора относительно мира, а не относительно экрана?)
ScorpioT1000 #64 - 2 месяца назад (отредактировано ) 0
NanO, да, так что DGUI ещё в силе. Будем юзать матрицы проекции. Хотя для этого надо точно знать положение камеры.
abidin #65 - 2 месяца назад 2
А разве не так и должен работать отлов положения мыши?
Зачем что-то выдумывать?
NanO #66 - 2 месяца назад 0
ScorpioT1000:
NanO, да, так что DGUI ещё в силе. Будем юзать матрицы проекции. Хотя для этого надо точно знать положение камеры.
Близзы как всегда)
Я уже понадеялся, что относительно экрана, думаю, ну наконец-то, можно интересно использовать.
Адекватных идей для "относительно мира" я пока не вижу. Квесты какие-то разве что.
Ethernet #67 - 2 месяца назад 1
NanO:
ScorpioT1000:
NanO, да, так что DGUI ещё в силе. Будем юзать матрицы проекции. Хотя для этого надо точно знать положение камеры.
Близзы как всегда)
Я уже понадеялся, что относительно экрана, думаю, ну наконец-то, можно интересно использовать.
Адекватных идей для "относительно мира" я пока не вижу. Квесты какие-то разве что.
Quick Cast как в дота2!
ScorpioT1000 #68 - 2 месяца назад 7
NanO, управление персонажем как в Diablo или Alien Shooter. Другой тип движения - в стиле космических полётов или warthunder. Кроме того, управление спеллами и чем угодно ещё в мире.
Maniac_91 #69 - 2 месяца назад 0
biridius, жаль, что не прокрутка, но тоже неплохо.
Doc #70 - 2 месяца назад 0
Я полагаю что эти ивенты они еще и синкаются так что до нормального ЮИ еще далеко тут. Нужны локальные ивенты на мышь...
А разве не так и должен работать отлов положения мыши?
Нет, не так.
Вот так было бы супер:
GameUI.GetCursorPosition
GameUI.GetScreenWorldPosition
awesomesk1ll #71 - 2 месяца назад 3
ScorpioT1000:
Если кликать на UI евенты не работают?
NanO:
Я уже понадеялся, что относительно экрана, думаю, ну наконец-то, можно интересно использовать.
Адекватных идей для "относительно мира" я пока не вижу. Квесты какие-то разве что.
Теперь представь как это будет работать для всех возможных игровых разрешений и соотношений сторон экрана :)
ScorpioT1000 #72 - 2 месяца назад 2
На UI отдаётся всё по нулям
Sergant1000 #73 - 2 месяца назад 0
GetUnitMovementType - получить тип движения юнита. (летающий ходящий плавающий и т.д.)
SetUnitMovementType- установить тип движения юниту. (летающий ходящий плавающий и т.д.)
GetUnitArmorType- получить тип брони юнита. (легкая тяжелая герой и т.д.)
GetHeroPrimaryStat - получить изначальную хар-ку героя. (сила ловкость интелект)
GetHeroPrimaryStatById - получить изначальную хар-ку по айди героя. (сила ловкость интелект)
GetHeroStat - получить хар-ку героя с бонусом или без. (сила ловкость интелект)
uranus #74 - 2 месяца назад 0
Я не понял про события начала/конца каста, в чем их отличие от того, что было?
avuremybe #75 - 2 месяца назад 0
awesomesk1ll, какие могут быть клики на UI, если там world координаты?

А чем отличаются эти и этим подобные функции с "On":
native GetAbilityTooltip takes integer abilCode, integer level returns string
native GetAbilityOnTooltip takes integer abilCode, integer level returns string
Понял, это для авто-кастов? Но тогда где "Off" вариант?
Это не автокасты, а включаемые абилки (вроде жара преисподней). Off-вариант это просто GetAbilityTooltip.
ScorpioT1000 #76 - 2 месяца назад (отредактировано ) 1
Какая сейчас стратегия разработки? Объявляем native в 1.21b и компилим, дальше чекаем на 1.29?
Bergi_Bear #77 - 2 месяца назад 1
а как в этом кодить то? на гуи чтоли? или в кастом текст на стандартном джасс? или уже какая-то наработка в процессе?
PT153 #78 - 2 месяца назад (отредактировано ) 1
к чему было отдельно делать GetUnitMaxMana/Life? Что вообще такое AutomationTest?
Вот тоже интересно.
uranus:
Я не понял про события начала/конца каста, в чем их отличие от того, что было?

было

constant unitevent EVENT_UNIT_SPELL_CHANNEL = ConvertUnitEvent(289)
constant unitevent EVENT_UNIT_SPELL_CAST = ConvertUnitEvent(290)
constant unitevent EVENT_UNIT_SPELL_EFFECT = ConvertUnitEvent(291)
constant unitevent EVENT_UNIT_SPELL_FINISH = ConvertUnitEvent(292)
constant unitevent EVENT_UNIT_SPELL_ENDCAST = ConvertUnitEvent(293)

стало

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)
pro100master #79 - 2 месяца назад 1
PT153, ну все по прежнему просто конвертор евент немного увеличили и все двинули вперед =)
PT153, ведь каждый нативка имеет свой конвертор евент так что и они и увеличивает сдвиг учитивая некоторых новедении
DracoL1ch #80 - 2 месяца назад 4
Ну, поплывут карты, которые использовали целое-хендл от таких событий вместо алиаса самого события. Их, конечно, по пальцам пресчитать, но всё же. Зачем близы ломают легаси в очередной раз - нипоняяятно. Слабые разработчики, видимо
Tovio #81 - 2 месяца назад 0
DracoL1ch, там реально дилетанты какие-то сидят, ало.
Maniac_91 #82 - 2 месяца назад 0
Если выбрать юнита, то это будет считаться кликом мышью?
Если да, то запрос координат мыши вернёт координаты юнита?
DemonoiD #83 - 2 месяца назад 8
Можно отслеживать координаты экрана создавая дамми в центре и беря его координаты в карте и координаты мыши в карте.
Возможен новый тип кликалок. Теперь мы не кликаем на юнита, а рисуем ему препятствия, разрезаем мышкой пополам и тп, отталкиваем курсором. Это сколько можно придумать для жанра миниигр. Прелесть!
Я даже подумал, что сборный интерфейс так можно реализовать. Расталкиваем мышью по углам плоские юниты-картинки и сохраняем их положение относительно центра экрана.
А ещё нонтаргет абилки! Вашу Машу. С помощью банальной линейной функции.
А ещё можно устанавливать имя юнитов. Это ж новый жанр. Все накликиваемые вражеские юниты получают имя Игорь. Если игрок кликнул на своего Игоря, то он становится Васей. Каждые 15 секунд все Игори умирают. Победил тот, у кого остался хоть один юнит.
Или генерация рандомных итемов. Если у итема такая-то иконка сделать то-то.
Взять описание итема сумка, разбить строки по спецсимволам, вычислить какой предмет там описан и учесть его цену при продаже. Теперь не нужно создавать 10 предметов для торговли, хватит БД цен и описания предмета.
Упрощается генерация предмета с помощью невидимого спелбука. Ведь можно генерировать описания и иконки! Мощно.
awesomesk1ll #84 - 2 месяца назад (отредактировано ) 0
avuremybe:
awesomesk1ll, какие могут быть клики на UI, если там world координаты?
Я спросил отрабатывается евент или нет. И что, что координаты world ? :D
DemonoiD:
Можно отслеживать координаты экрана создавая дамми в центре и беря его координаты в карте и координаты мыши в карте.
Возможен новый тип кликалок. Теперь мы не кликаем на юнита, а рисуем ему препятствия, разрезаем мышкой пополам и тп, отталкиваем курсором. Это сколько можно придумать для жанра миниигр. Прелесть!
Я даже подумал, что сборный интерфейс так можно реализовать. Расталкиваем мышью по углам плоские юниты-картинки и сохраняем их положение относительно центра экрана.
А ещё нонтаргет абилки! Вашу Машу. С помощью банальной линейной функции.
А ещё можно устанавливать имя юнитов. Это ж новый жанр. Все накликиваемые вражеские юниты получают имя Игорь. Если игрок кликнул на своего Игоря, то он становится Васей. Каждые 15 секунд все Игори умирают. Победил тот, у кого остался хоть один юнит.
Или генерация рандомных итемов. Если у итема такая-то иконка сделать то-то.
Взять описание итема сумка, разбить строки по спецсимволам, вычислить какой предмет там описан и учесть его цену при продаже. Теперь не нужно создавать 10 предметов для торговли, хватит БД цен и описания предмета.
Упрощается генерация предмета с помощью невидимого спелбука. Ведь можно генерировать описания и иконки! Мощно.
Про координаты не понял, раньше же и так можно ловить координаты приказа Move или Spell, так что про кликалки новые не понятно. Не, учитывая возможность использования левой и правой кнопки мыши конечно сулит новые возможности, но это мизер вообще. Нонтаргет абилки тоже были же.
В остальном да, классные введения, хотя хотелось бы бОльшего. В частности Custom UI, возможность нанесения на миникарту своих иконок например.. (динамических, статические очевидно и сейчас нарисовать можно).
Maniac_91:
Если выбрать юнита, то это будет считаться кликом мышью?
Если да, то запрос координат мыши вернёт координаты юнита?
Очевидно что да, этот евент тоже должен сработать.
Логично предположить, что нет, должны возвращаться координаты удара raycast в землю в точке клика с viewport (т.е точка не должна совпадать с координатами юнита)
DemonoiD #85 - 2 месяца назад 0
awesomesk1ll, смотри, делаем даммик в центре области экрана игрока. Берём его координату.
Берём координату курсора. Вычитаем одно из другого, получаем отклонение курсора от центра экрана, т.е экранную координату. Следственно, если есть экранная координата - можно запилить шутан.
Проверяем юнитов в области от курсора - можно их от туда оттолкнуть, повесить баф/дебаф.
Можно замерять таймером координаты перемещения мыши каждые 0.01 секунд. Тем самым получая скорость её перемещения. И в зависимости от этого увеличивать силу отброса-дебафа юнитов.
Можно создать бензопилы, которые стремятся лететь к курсору.
Создание союзных юнитов при клике мышью, которые воюют с врагами.
Можно устроить выбор спела от поворота колесика мыши.
Вот тебе и миниигра с 5 различными механиками победы. Не говоря уже о комбинациях этих подходов:
ведем курсором рядом с юнитом, чтобы его поджечь, горящий юнит при клике на него взрывается.
При клике правой кнопкой мыши юнит подмерзает, при клике левой - раскалывается на куски.
Clamp #86 - 2 месяца назад (отредактировано ) 3
Строго говоря, возможность отслеживать world-координаты клика мышкой уже давно существует, причём что правой кнопкой, что левой, но при этом приходилось отказываться от использования практически всего интерфейса. Реализовывалось через ForceUIKey(string key), по сути юнит всё время пытался начать кастовать абилку, и отлавливались координаты каста. Использовалось, например, в TCX.

делаем даммик в центре области экрана игрока
Как?
awesomesk1ll #87 - 2 месяца назад 0
DemonoiD:
awesomesk1ll, смотри, делаем даммик в центре области экрана игрока. Берём его координату.
Берём координату курсора. Вычитаем одно из другого, получаем отклонение курсора от центра экрана, т.е экранную координату. Следственно, если есть экранная координата - можно запилить шутан.
Получить координату от центра экрана и раньше можно было, там только нужно синкать коорды таргета камеры. Ещё встает вопрос отрисовки игровой камеры на разных соотношениях экрана, как я понимаю в 1.29 можно видеть больше/меньше в зависимости от скринсайза.
Clamp #88 - 2 месяца назад (отредактировано ) 0

Вычитаем одно из другого, получаем отклонение курсора от центра экрана, т.е экранную координату.
А, понял идею управления. Есть очевидное слабое место, но я не вполне понимаю, что ты имеешь в виду под "шутаном" (без возможности вращать мышкой камеру при зафиксированном пивоте), может статься, что это слабое место и вовсе не влияет.

А, да, забыл описать. Проблема в том, что указывая на небо, ты будешь получать (0.0, 0.0).

И вторая проблема в том, что разрешение у всех разное.

вычислить какой предмет там описан и учесть его цену при продаже
Вот это жёсткий оверинжинеринг, конечно. :D

Можно замерять таймером координаты перемещения мыши каждые 0.01 секунд.
Нельзя, для этого надо синхронизировать игроков каждые 0.01 секунды.
Хотя хз, это моё предположение (т.к. мышь локальна, её координаты тоже локальны и синкаются N раз в секунду), но проверить не могу.
DemonoiD #89 - 2 месяца назад 0
Clamp, EVENT_PLAYER_MOUSE_MOVE. Можно без клика отследить. Главное чтоб движение было.
awesomesk1ll, тебе пофиг какая ширина. Тебе нужно смещать центр камеры к курсору, а не отдаляться от центра. Условие "пока координата центра не равна координате мыши, перемещаем камеру к курсору по х, у , z
Clamp #90 - 2 месяца назад 0
Ну хз. Почему-то это представляется мне сомнительным, но не могу сказать точно почему.

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

Ну и да, что делать со "взглядом" выше горизонта, который вернёт (0.0, 0.0) неясно.
DemonoiD #91 - 2 месяца назад 0
А ещё можно удалять игроков, если его мышь не двигалась минуту. Или наоборот, двинул курсором - проиграл. Можно хороры так делать, типа рядом маньяк, который тебя ищет с 50% вероятности. Двинешь мышкой - точно найдёт. Не двинешь - не сможешь убежать.
Можно встраивать в первую доту десинх от движения мыши.
awesomesk1ll #92 - 2 месяца назад (отредактировано ) 0
DemonoiD:
А ещё можно удалять игроков, если его мышь не двигалась минуту. Или наоборот, двинул курсором - проиграл. Можно хороры так делать, типа рядом маньяк, который тебя ищет с 50% вероятности. Двинешь мышкой - точно найдёт. Не двинешь - не сможешь убежать.
Можно встраивать в первую доту десинх от движения мыши.
Пока что на ум приходит только ANTI-AFK система, не писал/не двигал мышку минуту/не юзал скиллы с юнитов - выбываешь из раунда. Было бы неплохо.
Clamp:
Ну и да, что делать со "взглядом" выше горизонта, который вернёт (0.0, 0.0) неясно.
Тут ещё приходит на ум то что придётся блокировать камеру от игрока (уровень наклона/зум, кнопки PageDown PageUp.
DemonoiD #93 - 2 месяца назад (отредактировано ) 1
А ещё, если знать немного геодезию, можно определять с позиции стрелка куда ты попал по вражескому юниту. Голова, тело, руки, ноги. Правда по линейной траектории, а не баллистической.
О. Я про эффекты забыл. От уровня навыка скаляция в масштабе создаваемых способностью эффектов. Типа герой стал сильнее и бросает более большие фаерболы.
А ещё можно рисовать гениталии изменением тайлов под курсором на базе врага. Это ж то, о чем мы мечтали 10 лет!
Clamp #94 - 2 месяца назад 0
если знать немного геодезию
Скорее, линейную алгебру (векторное представление движения).

Функция-то точно не на остановку мыши после движения реагирует, а на сам его факт?

придётся блокировать камеру от игрока
Да тут скорее будет проще свою написать, как в DGUI.

Пока что на ум приходит только ANTI-AFK система
Мне кажется, у него просто брейншторм идёт на предмет что можно сделать с новыми игрушками нативками. =)
DemonoiD #95 - 2 месяца назад (отредактировано ) 3
Clamp, такая же была в с#. Как тут действует, я не знаю. Но скорее всего действительно на мув. У меня нет лицухи, так бы я место идей уже мапу релизнул.
GetUnitDiceNumber - итемы прибавляющие не +1, а от 0 до 2. Welcome dnd!
Можно изменять позицию абилок в интерфейсе после каста или снижать или повышать их стоимость динамически, демонстрируя игроку хаос бытия. Или эффекты алкогольного опьянения и манашторма "неделя волшебника. все заклинания стали стоить на 20% меньше маны"
А ещё с помощью пкм можно выдавать список действий пользователя с обьектом, с помощью левитирующего текста. Колесико - выбор из списка, лкм - подтверждение выбора.
uranus #96 - 2 месяца назад 0
снижать или повышать их стоимость динамически
Этого сделать нельзя, если мне тут правильно объяснили про таблицу, где эти значения хранятся.
DemonoiD #97 - 2 месяца назад 0
uranus, можно, даже если нельзя, выдавать голду тригерно.
Doc #98 - 2 месяца назад 5
awesomesk1ll, смотри, делаем даммик в центре области экрана игрока. Берём его координату.
Берём координату курсора. Вычитаем одно из другого, получаем отклонение курсора от центра экрана, т.е экранную координату. Следственно, если есть экранная координата - можно запилить шутан.
Гениально, жаль, что полный бред
biridius #99 - 2 месяца назад 0
DemonoiD, это будет работать только если камера смотрит сверху под прямым углом.
При нормальной камере придется учитывать угол атаки камеры и высоту рельефа в этой точке, куча лишней возни. Все-таки лучше бы возможность сразу получать экранные координаты.
Doc #100 - 2 месяца назад 3
Каким образом это будет работать даже при камере смотрящей сверху вы можете мне объяснить? Хелло?
Начинаем с первого шага
делаем даммик в центре области экрана игрока
А теперь думаем каким же образом это мы так сделаем без кастомной камеры и зачем здесь вообще что-либо создавать. А с кастомной камерой в дгуи это уже и 8 лет назад было. Может я конечно упустил функцию с названием типа CreateUnitInTheCenterOfPlayerScreen?
PrincePhoenix #101 - 2 месяца назад 0
Doc:
Каким образом это будет работать даже при камере смотрящей сверху вы можете мне объяснить? Хелло?
Начинаем с первого шага
делаем даммик в центре области экрана игрока
А теперь думаем каким же образом это мы так сделаем без кастомной камеры и зачем здесь вообще что-либо создавать. А с кастомной камерой в дгуи это уже и 8 лет назад было. Может я конечно упустил функцию с названием типа CreateUnitInTheCenterOfPlayerScreen?
Ору в голос, просто треш, прочитать это все с интонацией и можно захлебнуться колой.
Clamp #102 - 2 месяца назад 1
CreateUnitInTheCenterOfPlayerScreen
GetCameraTargetPositionLoc
:D

зачем здесь вообще что-либо создавать
По фану, разумеется!
Doc #103 - 2 месяца назад 0
Это замечательно и известно, при чем тут дамми юнит все еще непонятно. И даже наверное подобрать матрицу проекции можно, либо как уже заметили до этого использовать вид сверху. Синхронизировать придется в любом случае (если не сингл плеер) ну и про то что на небо и прочие внетеррейновые элементы указывать будет нельзя ты сам подметил. А еще и высота земли будет мешать, ага. Получаем синглплеерную игру с видом сверху под 90 градусов и плоской землей. Какой разгул.
Clamp #104 - 2 месяца назад (отредактировано ) -4
Кроме автора идеи никто не знает зачем там юнит, забей.
Лучше поделись своими соображениями какими-нибудь на предмет "вот теперь это можно запилить". :3

» раскрыть
у тебя что-то случилось, что такое настроение жёсткое?
ты и в целом конечно не божий одуванчик, но сейчас как-то совсем токсично жаришь =/
Doc #105 - 2 месяца назад (отредактировано ) 2
Что можно запилить - хз. Точно знаю что теперь можно убрать кучу ненужных систем типа всяких баз данных и систем урона и хаков с отловом мыши через форс юи кей, это круто. Все равно пока не будет нормальных функций для создания нового юи возможности будут ограничены имхо. Конечно все всегда можно впилить в мультиборд или полноэкранное юи, но это совсем не то и опять же костыли. Ничего не случилось, просто прочитал слишком много необдуманных постов еще до этого.
Вот хороший кейз где можно применить новые функции мыши как экранные координаты - это как раз полноэкранный интерфейс. Там центр экрана известен (ведь на него лочится камера) и камера направлена сверху вниз. Можно выкинуть тормозные трекаблы которые теперь непонятно зачем вообще нужны.
Clamp #106 - 2 месяца назад 0
Конечно все всегда можно впилить в мультиборд или полноэкранное юи
Тут даже стало интересно, работает ли отлов координат при клике сквозь развёрнутый мультиборд.
Если кто-нибудь проверит - отпишитесь сюда. :3

Можно выкинуть тормозные трекаблы которые теперь непонятно зачем вообще нужны.
Ну это совсем уж суперочевидно, как мне кажется.
DarkLigthing #107 - 2 месяца назад 0
Набросок альтернативной системы передвижения
прикреплены файлы
awesomesk1ll #108 - 2 месяца назад 1
DarkLigthing:
Набросок альтернативной системы передвижения
Похоже что разрешение довольно сильно влияет на твою задумку.
Левая кнопка, центр осей сместился выше юнита, на скриншоте курсор наведён на центр, при нажатии раб стоит.
Аналогично и с телепортами, тоже сбились координаты.
Разрешение 1920х1080
прикреплены файлы
Clamp #109 - 2 месяца назад -4
Клик по иконке незанятого раба в углу возвращает координаты за иконкой, забавно.
Ещё забавнее, что на семь if приходится девять endif, и при этом карта работает.

В смысле ЧТОО?!
Raised #110 - 2 месяца назад 0
Ещё забавнее, что на семь if приходится девять endif, и при этом карта работает.
Wut?
Clamp #111 - 2 месяца назад -4
Комплектный синтакс-чекер на голубом глазу пропускает такую функцию:
function BadJASS takes nothing returns nothing
    \test
    /testng
    if ()
    call
    endif
    exitwhen
    if (false)
        call BJDebugMsg("Still displayed...")
    else
        call BJDebugMsg("so is this")
endfunction
И карта с ЭТИМ спокойно запускается.
abidin #112 - 2 месяца назад (отредактировано ) 0
Clamp #113 - 2 месяца назад -4

Уже потестировал.

Думал было что совсем двинулся, когда лишние endif-ы насчитал, ан нет. Это пока что не я двинулся.
Raised #114 - 2 месяца назад 0
Забавно.
abidin #115 - 2 месяца назад 0
Может быть из за этой ошибки можно новые эксплойты обраружить
Clamp #116 - 2 месяца назад (отредактировано ) -4
Тут даже стало интересно, работает ли отлов координат при клике сквозь развёрнутый мультиборд.
Если кто-нибудь проверит - отпишитесь сюда. :3
Проверил, работает.

Вот вам и кастомный интерфейс, чё.
DemonoiD #117 - 2 месяца назад (отредактировано ) 0
Жду извинений за все вышенаписанные "ядовитые" глупости.
При любом углу наклона, создается в центре камеры юнит. Точка на плоскости у дамми юнита в мировых координатах есть. Точка камеры в мировых координатах есть. Точка мыши теперь в мировых координатах есть.
прикреплены файлы
Raised #118 - 2 месяца назад 0
Без возможности узнавать ширину/высоту экрана это все ровно что оперировать вилкой.
awesomesk1ll #119 - 2 месяца назад (отредактировано ) 3
Накидал за полчасика пример с отловом положения мыши.
Всё на гуи с кучей утечек, как бы для прототипа пофиг. Кому надо будет нормально сделает.
прикреплены файлы
DemonoiD #120 - 2 месяца назад 0
GF RaiseD, зачем? если нужен только центр :( я не понимаю к чему мне ширина и высота экрана?
if mouse.position.x>cam.position.x then cam.position.x++
if mouse.position.y>cam.position.y then cam.position.y++
if mouse.position.x<cam.position.x then cam.position.x--
if mouse.position.y<cam.position.y then cam.position.y--
Raised #121 - 2 месяца назад 0
DemonoiD, для нормального кастом UI
biridius #122 - 2 месяца назад 0
я так и не понял зачем создавать юнита в центре камеры и медленно двигать камеру за мышью, и как это поможет рассчитывать координаты мыши на экране
знаю я дурак
Raised #123 - 2 месяца назад 0
biridius, это чтоб вращать камеру мышью.
DemonoiD #124 - 2 месяца назад (отредактировано ) 0
biridius, упрощенный вариант без "кренов", углов поворота и просмотра в небо. Но там полюбому тоже будет зависимость от игровых координат и функции типа "крен камеры игрока" или отбор у игрока возможности вращать камерой кроме нами установленных, тем самым полностью контролируя систему.
прикреплены файлы
awesomesk1ll #125 - 2 месяца назад (отредактировано ) 6
прикреплены файлы
Doc #126 - 2 месяца назад (отредактировано ) 3
А теперь поставь в центре экрана холмик. И может все же есть объяснение зачем конкретно нужен юнит?
И по поводу "упрощенного решения", учитывая каким должно быть полное решение, это - не решение совсем. Как раз с углом камеры и прочим начнутся сложности, потому что нужны матрицы камеры и проекции. Если камеру проекции еще можно подобрать (хотя здесь тоже проблемы с aspect ratio), то матрицу камеры просто так получить не получится. Честно говоря не помню можно ли получить угол наклона камеры в вк3.
DemonoiD #127 - 2 месяца назад 0
Doc, если ты знаешь как отловить без юнита координату игровой камеры в мире, тогда не нужен. Тогда пропускаем этот пункт и переходим к следующим.
Можно каким-то образом заставлять игрока перенести мышь в правый нижний угол (например тыкнуть на иконку) и таким образом вычислять ширину экрана, если кому-то вдруг она понадобилась.
прикреплены файлы
Raised #128 - 2 месяца назад 0
и таким образом вычислять ширину экрана, если кому-то вдруг она понадобилась.
Без возможности узнавать ширину/высоту экрана это все ровно что оперировать вилкой.
Sergarr #129 - 2 месяца назад 4
awesomesk1ll:
Замена ModuloInteger
Если i действительно равно 4 после этой операции, то это не Modulo, а вполне себе Div.
DemonoiD #130 - 2 месяца назад (отредактировано ) 0
прикреплены файлы
Doc #131 - 2 месяца назад (отредактировано ) 2
Очевидно что результаты будут разные в зависимости от рельефа потому что рейкаст.
Steal nerves #132 - 2 месяца назад 0
awesomesk1ll, ModuloInteger - это остаток от деления, что не так то? что добавили там? эта функция очень полезна
awesomesk1ll #133 - 2 месяца назад (отредактировано ) 7
Steal nerves:
awesomesk1ll, ModuloInteger - это остаток от деления, что не так то? что добавили там? эта функция очень полезна
Wareditor там блескует предположениями просто, не пугайтесь, возможно баг нашёл даже :D.
прикреплены файлы
DemonoiD #134 - 2 месяца назад (отредактировано ) 0
Doc, ты что-то у себя сломал. Ибо когда я центрирую камеру ниже холма, юниты появляются за холмом :(
прикреплены файлы
Steal nerves #135 - 2 месяца назад 0
awesomesk1ll, да ладно. уж не страшно, это бж-функция, самому можно написать такую
DemonoiD #136 - 2 месяца назад 0
прикреплены файлы
awesomesk1ll #137 - 2 месяца назад (отредактировано ) 1
Лучшеб ракету глянули т.к спор потерял логическую нить уже где-то постов 5 назад..
И вот вообще
Clamp #138 - 2 месяца назад 5
Замена ModuloInteger
СЛАВА ЯЙЦАМ!
Doc:
Честно говоря не помню можно ли получить угол наклона камеры в вк3.
Можно получить координаты таргета камеры и самой камеры ("глаза"), так что особых проблем тут нет.
DemonoiD #139 - 2 месяца назад (отредактировано ) 0
awesomesk1ll, у него нет летающих бензопил за курсором. Плохая игра мини-игра:(
awesomesk1ll #140 - 2 месяца назад (отредактировано ) 0
DemonoiD:
awesomesk1ll, у него нет летающих бензопил за курсором. Плохая игра мини-игра:(
Они могут там появиться, это же только WIP.
Raised #141 - 2 месяца назад 2
Долбите близзов чтоб добавили возможность вращать камеру мышью. Долбите пока можно. Харе извращаться. 2018 год на дворе!
DemonoiD #142 - 2 месяца назад 0
GF RaiseD, так её можно теперь теоретически вращать.
EVENT_PLAYER_MOUSE_MOVE
if MOUSE_BUTTON_TYPE_RIGHT = true then ВРАЩАТЬ.
Raised #143 - 2 месяца назад (отредактировано ) 1
Гипотетически, зубы пломбировать можно и сквозь задницу, если тебе это доставляет.
Doc #144 - 2 месяца назад 0
Я уже писал под видео что данная конкретная карта делается на трекаблах изи, слабый пример.
Увидел уже нативки для получения глаза - тогда ок.
Doc, ты что-то у себя сломал. Ибо когда я центрирую камеру ниже холма, юниты появляются за холмом :(
Если так тогда тем более ок.
DemonoiD #145 - 2 месяца назад 4
GF RaiseD, вот видишь, главное научиться получать от процесса удовольствие, а остальное наладится ;)
Doc, Вы, кажется, забыли принести извинения.
ScorpioT1000 #146 - 2 месяца назад 0
Побитовых операций как не было, так и нет, как обычно всё математикой делается)
P.S. Я клоню к AES и http request
PT153 #147 - 2 месяца назад 0
Clamp:
Клик по иконке незанятого раба в углу возвращает координаты за иконкой, забавно.
Ещё забавнее, что на семь if приходится девять endif, и при этом карта работает.

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

бестолковый AddArmor
Попробуй добавить броню без этой функции или тонны костылей.
orc01 #200 - 1 месяц назад 0
Clamp,
Добавить-то без костылей проблематично, вопрос только как часто это требуется, кроме совсем уж специфических случаев? Собственно, а как часто это делалось не банальным "апгрейдом" или добавлением абилки?
А вот бафф... да чуть ли не в каждом спелле юзается. Если мне дадут выбор между баффом и добавлением брони, то первое, по мне, облегчит куда больше работы и уберет даммиков
DualShock #201 - 1 месяц назад 0
Полезная фича: теперь способностям и предметам можно задавать какое угодно по размеру описание - но делать это нужно через объединение строк, так как есть лимит на размер одной строки, созданной через GUI
Работает, к сожалению, только для способностей =(
uranus #202 - 1 месяц назад (отредактировано ) 0
А через перемещение способности за пределы юнит-бара, можно будет реализовать щит протоссов,использую Магический щит?
Cancel #203 - 1 месяц назад 0
uranus, почему не проверишь? -)
ScorpioT1000 #204 - 4 недели назад 0
Cancel, не через GUI тоже. 1023 байта. Первые 128 символов таблицы юникод занимают 1 байт. Русские по 2. Дальше читать про UTF8.
Cancel #205 - 4 недели назад 0
ScorpioT1000, ты мне вот это сейчас к чему написал?
Кет #206 - 4 недели назад (отредактировано ) 0
Cancel, к тому, что лимит размера строки — в движке, а не только в GUI, ятп.
H #207 - 4 недели назад (отредактировано ) 0
хм, у меня jngp падает при попытки вставить хоть сколько длинную строку в gui (не измерял, но по ощущением 60-100 русских букв, возможно там лимит в 128 символов (ascii) и соответственно в 64 если использовать юникод).
Но через vJass я спокойно могу вписать туда целую поэму.
local string tmp_string = "<куча русских букв>"
прикреплены файлы
ScorpioT1000 #208 - 4 недели назад 0
H, окай, давайте подробнее)
Но через vJass я спокойно могу вписать туда целую поэму.
ты сгенеренный код смотрел?
H #209 - 4 недели назад 0
ты сгенеренный код смотрел?
не, но предполагаю что препроцессор его делит на кучи строк с конкантенацией, заворачивает все cariage returnы в \n и т.п.
ScorpioT1000 #210 - 4 недели назад 3
Какой нахальный гном
Кет #211 - 4 недели назад (отредактировано ) 0
Но в какой-то момент они и в vJASS обрываются, у меня такое было. Если где-то в два раза больше, чем у тебя, вписать.
DualShock #212 - 4 недели назад 0
4 комментария удалено
pro100master #217 - 4 недели назад 6
хм
function GetEventDamageAttackType takes nothing returns attacktype                    
        //In response to a damage event returns the attacktype (Spell, Hero, Chaos, etc) of the damage.
    function GetEventDamageDamageType takes nothing returns damagetype
        //In response to a damage event returns the damagetype (unkown, magic, normal, enhanced, etc) of the damage.
    function GetEventDamageAbilityId takes nothing returns integer                        
       //In response to a damage event returns the ability ID that caused the damage. This ability can be a damage spell (Flame Strike, Storm Bolt, etc) or an attack modifier ability (Cold Arrow, orb of fire, etc). Normal attack damage returns some safe default value such as 0.
    function GetEventDamageUnmodified takes nothing returns real                          
       //In response to a damage event returns the damage dealt to the unit before any modifications (armor, attacktype reduction, etc) were applied.
    function GetEventDamageMana takes nothing returns real                                
        //In response to a damage event returns the mana lost due to an active mana shield.
Ок жду когда хз
avuremybe #218 - 4 недели назад 0
pro100master, вот это поворот
pro100master #219 - 4 недели назад (отредактировано ) 4
Не плохо терь нет нужды создавать декорации и жрать его текстуры для замены юнита текстур (Хотя отрабатывает как декорация)
function SetWidgetTexure takes widget whichWidget, string texturePath, integer replaceableId returns boolean
    /*Models can have textures with a Replaceable ID instead of a texture path.
    The most common use of this is for team color and hero glow (Replaceable ID 1 & 2).
    While there are natives to set a units team color, that's about all that is natively supported.
    The Mountain Giant's War Club ability will change any texture on the caster that uses "Replaceable ID 32" to the texture of the targeted destructable.
     While this allows us to modify ID 32, it's not enough and has some overhead.

    If we can allow the user to change any ID, then we can switch the texture of any part of the model dynamically.
    Of course this requires models to use Replaceable ID's instead of texture paths, so many vanilla models won't have uses other than custom team colors.
    Perhaps a complete API to modify model data would be better, however this would be the easiest to implement.
    There is already an internal function capable of doing this. However it requires a destructable as one of the paramaters, but I think it should be fairly easy to find a way to not require one.
    The way I do it is by using a dummy destructable object (not handle) and switching it's texture, but there is probably a better way.*/
Steal nerves #220 - 4 недели назад (отредактировано ) 0
pro100master, это то что выйдет (вышло) в патче 1.29?
DracoL1ch #221 - 4 недели назад 0
Это то, что хотят модмейкеры
И десятой части от этого не будет в этом году, релакс
pro100master #222 - 4 недели назад 0
Steal nerves, нет там есть комментарии помечено что вышло в 1.29 а остальные в ожидании когда нам не ванговать!!!
orc01 #223 - 3 недели назад 0
Так возможность создавать иконку баффа (CreateCustonBuff) или никто о таком даже не просит? (В принципе, по мне. ввели бы это - и я был бы счастлифф)
leroydraigo #224 - 3 недели назад 0
orc01, баф можно повесить способностью, а вот скрыть иконку бафа было бы очень неплохо
orc01 #225 - 3 недели назад 0
leroydraigo,
В том-то и суть, что для добавления простейшего баффа нужен танец с конями, дамми юнит и дамми-абилка. При этом убрать тот или иной бафф можно(не спрятать)
Doc #226 - 3 недели назад 0
Ну так проси, предлагай, пиши
2 комментария удалено
KingMaximax #229 - 1 неделю назад (отредактировано ) 1
H:
хм, у меня jngp падает при попытки вставить хоть сколько длинную строку в gui (не измерял, но по ощущением 60-100 русских букв, возможно там лимит в 128 символов (ascii) и соответственно в 64 если использовать юникод).
Но через vJass я спокойно могу вписать туда целую поэму.
local string tmp_string = "<куча русских букв>"
Варик спокойно читает подобное, я проверял через внедренный текст в Blizzard.j. Даже не надо ставить (\n) |n, спокойно без переносов всо делает.
правда не проверял на патче 1.29.
Cancel #230 - 1 неделю назад 0
pp.userapi.com/c830309/v830309999/d5514/5LIAtw5i9IQ.jpg спокойно делал карту на 1.29 PTR но после обновления карта не хочет запускаться на 1.29, в чём может быть проблема?
ScorpioT1000 #231 - 1 неделю назад 1
Cancel, что-то с триггером на гуи. Ну и забей на это, на то он и ptr
Cancel #232 - 1 неделю назад 3
ScorpioT1000, да хер знает, я много времени вложил, не хочется забивать
youtu.be/TmaOJ0iMzEQ
youtu.be/y7xnXUw8t5Q
Cancel #234 - 1 неделю назад 0
Clamp, благодарю, но босюсь пользы от этого подхода будет не много, если я так и не смогу запустить карту в релизной версии редактора.
Diaboliko #235 - 1 неделю назад 0
Cancel, ну в релизной версии будет иметь смысл копаться в архиве карты и искать проблемы внутри кода. Если они вообще будут, конечно
ScorpioT1000 #236 - 5 дней назад 0
Cancel, зачем ты что-то делал на тестовой версии редактора, не подходящей для продакшена?
Cancel #237 - 5 дней назад 0
ScorpioT1000, руки чесались. Я раньше на ПТР ничего не делал и не знал, что наработки не будут актуальны при релизе