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



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


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

Остальное нужно тестить. Патч только вышел. Телепаты в отпуске.
biridius #20 - 5 месяцев назад 4
GF RaiseD, вопрос в том можно ли через это SetEventDamage() сделать поглошение урона, или это тупо перезапись глобалки, и все равно нужно возится с добавлениями хп и умираниями от урона больше хп
pro100master #21 - 5 месяцев назад (отредактировано ) 0
GetLocalPlayer, базовую и зеленая вместе так как будет возврашать реальные то есть в игре вы увидите 4 армора а реал вернет 3.900
Raised #22 - 5 месяцев назад (отредактировано ) 5
biridius, можно. Для этого она и придумана.
ScorpioT1000 #23 - 5 месяцев назад 0
Поменяйте уже ему никнейм и пару пунктов за житрожопие можно)
pro100master #24 - 5 месяцев назад 4
Щас тестил такен урона да если поставить минус 1.00 то лечит а если 0.00 то польный игнор урона или свой урон... реально круто что не умирает от 1 хп при 9лям урона не умирает
Пушистый #25 - 5 месяцев назад 0
JNGP для 1.29 никто еще не скрутил?
pro100master #26 - 5 месяцев назад 2
SetEventDamage игнорирует армор
то есть юит получает урон
получает сколько нанес урон через GetEventDamage c учетом брони
если надо то SetEventDamage (GetEventDamage()) будет по умолчание...
но если надо то поставить GetEventDamage(-100.00) даст лечение хп здоровья чистый с учетом регеном.
GetEventDamage(100.00) снимает 100 здоровья с юнита чистый даже учитивает регенерация
PT153 #27 - 5 месяцев назад 0
pro100master:
но если надо то поставить GetEventDamage(-100.00) даст лечение хп здоровья чистый с учетом регеном.
GetEventDamage(100.00) снимает 100 здоровья с юнита чистый даже учитивает регенерация
Тут наверное имеется в виду SetEventDamage()?
pro100master:
то есть юит получает урон
получает сколько нанес урон через GetEventDamage c учетом брони
То есть по умолчанию в GetEventDamage() записан урон с вычитом брони?
Raised #28 - 5 месяцев назад 0
PT153, да. Это итоговый урон после всех подсчетов.
GetLocalPlayer #29 - 5 месяцев назад 0
То есть по умолчанию в GetEventDamage() записан урон с вычитом брони?
По умолчанию, событие на получение урона срабатывает уже после всех снижающий факторов от брони, способностей, баффов. Технически, GetEventDamage это уже не урон, а прямое изменение здоровья, так что описанное выше поведение вряд ли можно назвать сюрпризом.
pro100master #30 - 5 месяцев назад (отредактировано ) 4
PT153, да сеттер перепутал вот сначало мы добавляем события каждого юнитп получает урон
после чего мы получим GetEventDamage() оригинальный урон с учетом брони то есть
если в этом потоке не установлено SetEventDamage то в итоге идет оригинал.. типо получим так
SetEventDamage(GetEventDamage()) - это основа оригинал в движке чтоб этого не было мы изменим сеттер ранее урона то получим результат =) то есть уже радует
кто шас тестирует 1.29 вот карта и скрин примера после события получение урона
Терь нет нужды добавлять абилку антимагия -200% обратный чтобы не умирать от способности... ну и так далее =)
прикреплены файлы
Clamp #31 - 5 месяцев назад 2
То есть по умолчанию в GetEventDamage() записан урон с вычитом брони?
Ну это логично, показывает же получаемый целью урон, а получает она его только после прохождения всех возможных модификаторов.
pro100master #32 - 5 месяцев назад 0
удалил библиотека детектор урона и поставил 1.29 SetEventDamage и круто и гладко работает чем 1000 строк кода (антимагия, хп давать и так далее)
Пушистый #33 - 5 месяцев назад 0
pro100master, JNGP на 1.29 работает?
DracoL1ch #34 - 5 месяцев назад 0
Если строки вдруг стали обязательны к синхронизации - это провал. Иначе, если тултип действительно нельзя менять локально, это провал x2
pro100master #35 - 5 месяцев назад 0
Пушистый, Я не разработчик JNGP, напиши ему и узнаеш...
DracoL1ch, ну да если было бы возможность менять тилтуп для юнита а не для всей игры тогда и локал отпали бы вопросов!!!
DracoL1ch #37 - 5 месяцев назад 0
Создаю уникальные локальные строки уже 4 года, строки не являются хендлами и не нуждаются в синке
2 комментария удалено
Doc #40 - 5 месяцев назад 0
Я согласен что тултипы должна быть возможность менять локально без проблем.
Но и эффекты тоже можно было бы создавать локально, но как-то всем пох, невелика потеря.
Daro #41 - 5 месяцев назад 0
Может когда - нибудь мы доживем до настраиваемого угла крена юнита и увеличения макс скорости перемещения , хотябы до 700-722 ( в идеале до 1000) .Думаю 200 допольнительной скорости перемещния не навредит и не вызовет особых проблем с реализацией.Ждем допиленого отлова урона
Raised #42 - 5 месяцев назад 1
Кто-нибудь уже проверял настройки крита. Можно ли отметить чтоб он учитывал доп. урон?
Пушистый #43 - 5 месяцев назад (отредактировано ) 0
GF RaiseD, вроде как такого поля нет, увы, хотя для Хранителя Рощи ввели параметр неуязвимости.
Raised #44 - 5 месяцев назад (отредактировано ) 0
Видимо, теперь нужно будет триггерно делать крит. По крайней мере чтоб он работал так как раньше.
awesomesk1ll #45 - 5 месяцев назад 4
GF RaiseD:
Видимо, теперь нужно будет триггерно делать крит. По крайней мере чтоб он работал так как раньше.
Про это вопрос? оно есть
Raised #46 - 5 месяцев назад 0
Флаффи, я тя отпинаю. awesomesk1ll, да. Об этом.
Extremator #47 - 5 месяцев назад (отредактировано ) 0
DracoL1ch:
Создаю уникальные локальные строки уже 4 года, строки не являются хендлами и не нуждаются в синке
DracoL1ch, есть подозрение что это же самое косается не только строк, но и инт'ов, реал'ок, и бул'ок, это так? (т.к. они вообще не объвляются в коммоне, и стоят на порядок выше и/или проще всего остального)
ScorpioT1000 #48 - 5 месяцев назад 0
Extremator, примитивы создаются прямо на месте и передаются по значению
Raised #49 - 5 месяцев назад 0
Кет:
Ура! Скептики посрамлены! Варкрафт жив!
Близзард готовит ритуал воскрешения.
Sergarr #50 - 5 месяцев назад 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 - 5 месяцев назад 0
Можно. Для интерфейса все равно нужна возможность рисовать картинки, цветные квадраты и текст. Глюки в дгуи были в основном из-за способа "отрисовки".
Raised #52 - 5 месяцев назад 4
Лучше штормите близзов чтоб поддержку кастом UI ввели. ДГУИ - херь.
DracoL1ch #53 - 5 месяцев назад 0
Поднимать скорость бега выше 522 нельзя по причине устаревшей системы поиска пути, вот если они её переделают.. но это мечты имхо
У эффектов есть причина быть хендлами, у структуры абилок - нет. Костыль какой-то очередной
ScorpioT1000 #54 - 5 месяцев назад (отредактировано ) 0
Нельзя сделать шутер от 1 лица, нельзя) потому что нет функционала установки курсора в центр. Ты доведёшь до края экрана и всё остановится. В идеале ещё сокрытие нужно.
А вот управление персонажем в стиле Diablo и подобных гораздо интереснее. Т.е. в целом поворот и движение в направлении мыши.
uranus #55 - 5 месяцев назад 0
Я не понимаю, почему GetUnitAbilityManaCost не имеет Set вариации, и к чему было отдельно делать GetUnitMaxMana/Life? Что вообще такое AutomationTest?
Alexander12 #56 - 5 месяцев назад 0
uranus:
Я не понимаю, почему GetUnitAbilityManaCost не имеет Set вариации, и к чему было отдельно делать GetUnitMaxMana/Life? Что вообще такое AutomationTest?
Одинаковые скилы ссылаются на одну таблицу данных, при изменении у 1 героя, это отразиться на всех остальных. Я с помощью мемхака создавал новую таблицу и ставил ссылку на нее у скила, чтобы можно было редактировать под конкретного героя.
uranus #57 - 5 месяцев назад 2
Alexander12, очень печально, что более мощных нативок [без переписывания движка] мы не получим. Эх, ну, тогда осталось только JNGP дождаться.
Doc #58 - 5 месяцев назад 0
Так а получение курсора сейчас в каких координатах? World?
Maniac_91 #59 - 5 месяцев назад (отредактировано ) 0
Мышь вверх и вниз - это поворот колёса?
Если да, то круто. Можно шутер с быстрой сменой оружия сделать.
pro100master #60 - 5 месяцев назад 0
Maniac_91, midle это колесиком при нажатие, а up и down это прокрутка колесик... а move при движении мышка
biridius #61 - 5 месяцев назад (отредактировано ) 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 - 5 месяцев назад (отредактировано ) 0
Doc, location в world, x/y я так понимаю, viewport. Иначе был бы Z
UPD
а вот хрен, всё в world координатах
(опечатался, там вторая - это Y)
прикреплены файлы
NanO #63 - 5 месяцев назад 0
лол
То есть оно возвращает позицию курсора относительно мира, а не относительно экрана?)
ScorpioT1000 #64 - 5 месяцев назад (отредактировано ) 0
NanO, да, так что DGUI ещё в силе. Будем юзать матрицы проекции. Хотя для этого надо точно знать положение камеры.
abidin #65 - 5 месяцев назад 2
А разве не так и должен работать отлов положения мыши?
Зачем что-то выдумывать?
NanO #66 - 5 месяцев назад 0
ScorpioT1000:
NanO, да, так что DGUI ещё в силе. Будем юзать матрицы проекции. Хотя для этого надо точно знать положение камеры.
Близзы как всегда)
Я уже понадеялся, что относительно экрана, думаю, ну наконец-то, можно интересно использовать.
Адекватных идей для "относительно мира" я пока не вижу. Квесты какие-то разве что.
Ethernet #67 - 5 месяцев назад 1
NanO:
ScorpioT1000:
NanO, да, так что DGUI ещё в силе. Будем юзать матрицы проекции. Хотя для этого надо точно знать положение камеры.
Близзы как всегда)
Я уже понадеялся, что относительно экрана, думаю, ну наконец-то, можно интересно использовать.
Адекватных идей для "относительно мира" я пока не вижу. Квесты какие-то разве что.
Quick Cast как в дота2!
ScorpioT1000 #68 - 5 месяцев назад 7
NanO, управление персонажем как в Diablo или Alien Shooter. Другой тип движения - в стиле космических полётов или warthunder. Кроме того, управление спеллами и чем угодно ещё в мире.
Maniac_91 #69 - 5 месяцев назад 0
biridius, жаль, что не прокрутка, но тоже неплохо.
Doc #70 - 5 месяцев назад 0
Я полагаю что эти ивенты они еще и синкаются так что до нормального ЮИ еще далеко тут. Нужны локальные ивенты на мышь...
А разве не так и должен работать отлов положения мыши?
Нет, не так.
Вот так было бы супер:
GameUI.GetCursorPosition
GameUI.GetScreenWorldPosition
awesomesk1ll #71 - 5 месяцев назад 3
ScorpioT1000:
Если кликать на UI евенты не работают?
NanO:
Я уже понадеялся, что относительно экрана, думаю, ну наконец-то, можно интересно использовать.
Адекватных идей для "относительно мира" я пока не вижу. Квесты какие-то разве что.
Теперь представь как это будет работать для всех возможных игровых разрешений и соотношений сторон экрана :)
ScorpioT1000 #72 - 5 месяцев назад 2
На UI отдаётся всё по нулям
Sergant1000 #73 - 5 месяцев назад 0
GetUnitMovementType - получить тип движения юнита. (летающий ходящий плавающий и т.д.)
SetUnitMovementType- установить тип движения юниту. (летающий ходящий плавающий и т.д.)
GetUnitArmorType- получить тип брони юнита. (легкая тяжелая герой и т.д.)
GetHeroPrimaryStat - получить изначальную хар-ку героя. (сила ловкость интелект)
GetHeroPrimaryStatById - получить изначальную хар-ку по айди героя. (сила ловкость интелект)
GetHeroStat - получить хар-ку героя с бонусом или без. (сила ловкость интелект)
uranus #74 - 5 месяцев назад 0
Я не понял про события начала/конца каста, в чем их отличие от того, что было?
avuremybe #75 - 5 месяцев назад 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 - 5 месяцев назад (отредактировано ) 1
Какая сейчас стратегия разработки? Объявляем native в 1.21b и компилим, дальше чекаем на 1.29?
Bergi_Bear #77 - 5 месяцев назад 1
а как в этом кодить то? на гуи чтоли? или в кастом текст на стандартном джасс? или уже какая-то наработка в процессе?
PT153 #78 - 5 месяцев назад (отредактировано ) 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 - 5 месяцев назад 1
PT153, ну все по прежнему просто конвертор евент немного увеличили и все двинули вперед =)
PT153, ведь каждый нативка имеет свой конвертор евент так что и они и увеличивает сдвиг учитивая некоторых новедении
DracoL1ch #80 - 5 месяцев назад 4
Ну, поплывут карты, которые использовали целое-хендл от таких событий вместо алиаса самого события. Их, конечно, по пальцам пресчитать, но всё же. Зачем близы ломают легаси в очередной раз - нипоняяятно. Слабые разработчики, видимо
Tovio #81 - 5 месяцев назад 0
DracoL1ch, там реально дилетанты какие-то сидят, ало.
Maniac_91 #82 - 5 месяцев назад 0
Если выбрать юнита, то это будет считаться кликом мышью?
Если да, то запрос координат мыши вернёт координаты юнита?
DemonoiD #83 - 5 месяцев назад 8
Можно отслеживать координаты экрана создавая дамми в центре и беря его координаты в карте и координаты мыши в карте.
Возможен новый тип кликалок. Теперь мы не кликаем на юнита, а рисуем ему препятствия, разрезаем мышкой пополам и тп, отталкиваем курсором. Это сколько можно придумать для жанра миниигр. Прелесть!
Я даже подумал, что сборный интерфейс так можно реализовать. Расталкиваем мышью по углам плоские юниты-картинки и сохраняем их положение относительно центра экрана.
А ещё нонтаргет абилки! Вашу Машу. С помощью банальной линейной функции.
А ещё можно устанавливать имя юнитов. Это ж новый жанр. Все накликиваемые вражеские юниты получают имя Игорь. Если игрок кликнул на своего Игоря, то он становится Васей. Каждые 15 секунд все Игори умирают. Победил тот, у кого остался хоть один юнит.
Или генерация рандомных итемов. Если у итема такая-то иконка сделать то-то.
Взять описание итема сумка, разбить строки по спецсимволам, вычислить какой предмет там описан и учесть его цену при продаже. Теперь не нужно создавать 10 предметов для торговли, хватит БД цен и описания предмета.
Упрощается генерация предмета с помощью невидимого спелбука. Ведь можно генерировать описания и иконки! Мощно.
awesomesk1ll #84 - 5 месяцев назад (отредактировано ) 0
avuremybe:
awesomesk1ll, какие могут быть клики на UI, если там world координаты?
Я спросил отрабатывается евент или нет. И что, что координаты world ? :D
DemonoiD:
Можно отслеживать координаты экрана создавая дамми в центре и беря его координаты в карте и координаты мыши в карте.
Возможен новый тип кликалок. Теперь мы не кликаем на юнита, а рисуем ему препятствия, разрезаем мышкой пополам и тп, отталкиваем курсором. Это сколько можно придумать для жанра миниигр. Прелесть!
Я даже подумал, что сборный интерфейс так можно реализовать. Расталкиваем мышью по углам плоские юниты-картинки и сохраняем их положение относительно центра экрана.
А ещё нонтаргет абилки! Вашу Машу. С помощью банальной линейной функции.
А ещё можно устанавливать имя юнитов. Это ж новый жанр. Все накликиваемые вражеские юниты получают имя Игорь. Если игрок кликнул на своего Игоря, то он становится Васей. Каждые 15 секунд все Игори умирают. Победил тот, у кого остался хоть один юнит.
Или генерация рандомных итемов. Если у итема такая-то иконка сделать то-то.
Взять описание итема сумка, разбить строки по спецсимволам, вычислить какой предмет там описан и учесть его цену при продаже. Теперь не нужно создавать 10 предметов для торговли, хватит БД цен и описания предмета.
Упрощается генерация предмета с помощью невидимого спелбука. Ведь можно генерировать описания и иконки! Мощно.
Про координаты не понял, раньше же и так можно ловить координаты приказа Move или Spell, так что про кликалки новые не понятно. Не, учитывая возможность использования левой и правой кнопки мыши конечно сулит новые возможности, но это мизер вообще. Нонтаргет абилки тоже были же.
В остальном да, классные введения, хотя хотелось бы бОльшего. В частности Custom UI, возможность нанесения на миникарту своих иконок например.. (динамических, статические очевидно и сейчас нарисовать можно).
Maniac_91:
Если выбрать юнита, то это будет считаться кликом мышью?
Если да, то запрос координат мыши вернёт координаты юнита?
Очевидно что да, этот евент тоже должен сработать.
Логично предположить, что нет, должны возвращаться координаты удара raycast в землю в точке клика с viewport (т.е точка не должна совпадать с координатами юнита)
DemonoiD #85 - 5 месяцев назад 0
awesomesk1ll, смотри, делаем даммик в центре области экрана игрока. Берём его координату.
Берём координату курсора. Вычитаем одно из другого, получаем отклонение курсора от центра экрана, т.е экранную координату. Следственно, если есть экранная координата - можно запилить шутан.
Проверяем юнитов в области от курсора - можно их от туда оттолкнуть, повесить баф/дебаф.
Можно замерять таймером координаты перемещения мыши каждые 0.01 секунд. Тем самым получая скорость её перемещения. И в зависимости от этого увеличивать силу отброса-дебафа юнитов.
Можно создать бензопилы, которые стремятся лететь к курсору.
Создание союзных юнитов при клике мышью, которые воюют с врагами.
Можно устроить выбор спела от поворота колесика мыши.
Вот тебе и миниигра с 5 различными механиками победы. Не говоря уже о комбинациях этих подходов:
ведем курсором рядом с юнитом, чтобы его поджечь, горящий юнит при клике на него взрывается.
При клике правой кнопкой мыши юнит подмерзает, при клике левой - раскалывается на куски.
Clamp #86 - 5 месяцев назад (отредактировано ) 3
Строго говоря, возможность отслеживать world-координаты клика мышкой уже давно существует, причём что правой кнопкой, что левой, но при этом приходилось отказываться от использования практически всего интерфейса. Реализовывалось через ForceUIKey(string key), по сути юнит всё время пытался начать кастовать абилку, и отлавливались координаты каста. Использовалось, например, в TCX.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

В смысле ЧТОО?!
Raised #110 - 5 месяцев назад 0
Ещё забавнее, что на семь if приходится девять endif, и при этом карта работает.
Wut?
Clamp #111 - 5 месяцев назад -2
Комплектный синтакс-чекер на голубом глазу пропускает такую функцию:
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 - 5 месяцев назад (отредактировано ) 0
Clamp #113 - 5 месяцев назад -4

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

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

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

В смысле ЧТОО?!
Кстати да. Скачал карту DarkLightning-а, увидел тоже это.
А кто Clamp минусы ставит?
DemonoiD #148 - 5 месяцев назад (отредактировано ) 1
А кто Clamp минусы ставит?
PT153, Я с телефона иногда мажу, простите ребят :(
ScorpioT1000 #149 - 5 месяцев назад (отредактировано ) 0
Про позиции камеры - у DGUI тоже aspect ratio задаётся вручную
Тест dgui
Интересно, что фпс вырос и обрабатывает довольно быстро период 0.00833333
прикреплены файлы
NazarPunk #150 - 5 месяцев назад 2
Кастом UI прекрасно стандартными средствами реализуется
Смотрю близы начали доедать мёртвого оленя. Надеюсь они вкатят вразумительных функций, но что-то мне слабо верится. Пока что мемхак реализует бльше возможностей.
Думаю врятли дождёмся SetMouseX/Y (в координатах монитора), а уж тем более MouseHover event.
А шутан с мемхаком очень просто реализуется
Doc #151 - 5 месяцев назад (отредактировано ) 0
Кастом UI прекрасно стандартными средствами реализуется
Ага, с залоченной камерой и постоянными сбросами селекшна))
NazarPunk #152 - 5 месяцев назад 2
Doc:
Кастом UI прекрасно стандартными средствами реализуется
Ага, с залоченной камерой и постоянными сбросами селекшна))
И ещё не работающий при камере смотрящей строго вверх/вниз))
Но реализовывать нативно RenderEdge близы явно не будут. Надеюсь они хоть нормальную подсветку JASS сделали, а то без JGNP на него смотреть невозможно.
DualShock #153 - 5 месяцев назад 13
native SetUnitName
Побаловался сегодня с этим вот что получилось
прикреплены файлы
pro100master #154 - 5 месяцев назад 0
DualShock, это ты придумал?
uranus #155 - 5 месяцев назад 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,
Добавить-то без костылей проблематично, вопрос только как часто это требуется, кроме совсем уж специфических случаев? Собственно, а как часто это делалось не банальным "апгрейдом" или добавлением абилки?
А вот бафф... да чуть ли не в каждом спелле юзается. Если мне дадут выбор между баффом и добавлением брони, то первое, по мне, облегчит куда больше работы и уберет даммиков
DualShock #201 - 4 месяца назад 0
Полезная фича: теперь способностям и предметам можно задавать какое угодно по размеру описание - но делать это нужно через объединение строк, так как есть лимит на размер одной строки, созданной через GUI
Работает, к сожалению, только для способностей =(
uranus #202 - 4 месяца назад (отредактировано ) 0
А через перемещение способности за пределы юнит-бара, можно будет реализовать щит протоссов,использую Магический щит?
Cancel #203 - 4 месяца назад 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 - 4 месяца назад 0
Так возможность создавать иконку баффа (CreateCustonBuff) или никто о таком даже не просит? (В принципе, по мне. ввели бы это - и я был бы счастлифф)
leroydraigo #224 - 4 месяца назад 0
orc01, баф можно повесить способностью, а вот скрыть иконку бафа было бы очень неплохо
orc01 #225 - 4 месяца назад 0
leroydraigo,
В том-то и суть, что для добавления простейшего баффа нужен танец с конями, дамми юнит и дамми-абилка. При этом убрать тот или иной бафф можно(не спрятать)
Doc #226 - 4 месяца назад 0
Ну так проси, предлагай, пиши
2 комментария удалено
KingMaximax #229 - 3 месяца назад (отредактировано ) 1
H:
хм, у меня jngp падает при попытки вставить хоть сколько длинную строку в gui (не измерял, но по ощущением 60-100 русских букв, возможно там лимит в 128 символов (ascii) и соответственно в 64 если использовать юникод).
Но через vJass я спокойно могу вписать туда целую поэму.
local string tmp_string = "<куча русских букв>"
Варик спокойно читает подобное, я проверял через внедренный текст в Blizzard.j. Даже не надо ставить (\n) |n, спокойно без переносов всо делает.
правда не проверял на патче 1.29.
Cancel #230 - 3 месяца назад 0
pp.userapi.com/c830309/v830309999/d5514/5LIAtw5i9IQ.jpg спокойно делал карту на 1.29 PTR но после обновления карта не хочет запускаться на 1.29, в чём может быть проблема?
ScorpioT1000 #231 - 3 месяца назад 1
Cancel, что-то с триггером на гуи. Ну и забей на это, на то он и ptr
Cancel #232 - 3 месяца назад 3
ScorpioT1000, да хер знает, я много времени вложил, не хочется забивать
youtu.be/TmaOJ0iMzEQ
youtu.be/y7xnXUw8t5Q
Cancel #234 - 3 месяца назад 0
Clamp, благодарю, но босюсь пользы от этого подхода будет не много, если я так и не смогу запустить карту в релизной версии редактора.
Diaboliko #235 - 3 месяца назад 0
Cancel, ну в релизной версии будет иметь смысл копаться в архиве карты и искать проблемы внутри кода. Если они вообще будут, конечно
ScorpioT1000 #236 - 3 месяца назад 0
Cancel, зачем ты что-то делал на тестовой версии редактора, не подходящей для продакшена?
Cancel #237 - 3 месяца назад 0
ScorpioT1000, руки чесались. Я раньше на ПТР ничего не делал и не знал, что наработки не будут актуальны при релизе