Близы забросили игру и к сожалению в реальном редакторе мы такого не увидим, и так встречайте, Фреймы на русском ГУИ, любой может без знаний джасс и кода и знаний синтаксиса создать свой первый фрейм
К сожалению всё очень топорно, по русский больше на албанский похож, многое мне не удалось к сожалению, но в целом всё возможно и легко
Чтобы активировать эти фреймы в своём редакторе нужно в папке C:\Games\Warcraft III\_retail_ создать папку ui поместить туда мой triggerdata
Не скажу что тут тонна работы проделана, но добавил:
Пару функций
// Frame actions
BlzHideOriginFrames=0,boolean
_BlzHideOriginFrames_DisplayName="Отключение оригинальных фреймов"
_BlzHideOriginFrames_Parameters="Отключить оригинальные фремы?: ",~Enable
_BlzHideOriginFrames_Defaults=FALSE
_BlzHideOriginFrames_Category=TC_FRAMES

BlzCreateFrameByTypeBJ=0,string,string,framehandle,string,integer
_BlzCreateFrameByTypeBJ_DisplayName="Создать фрейм по типу из шаблона"
_BlzCreateFrameByTypeBJ_Parameters="Создать фрейм типа ",~String," по имени ",~String," От фрейма родителя ",~framehandle," По шаблону ",~String," В контекст ",~Integer
_BlzCreateFrameByTypeBJ_Defaults="BACKDROP","FaceButtonIcon",,"",0
_BlzCreateFrameByTypeBJ_Category=TC_FRAMES

BlzFrameSetAllPoints=0,framehandle,framehandle
_BlzFrameSetAllPoints_DisplayName="Сопоставить позиции фреймов"
_BlzFrameSetAllPoints_Parameters="Фрейм ",~framehandle, "сопоставить с",~framehandle
_BlzFrameSetAllPoints_Category=TC_FRAMES

BlzFrameSetTexture=0,framehandle,string,integer,boolean
_BlzFrameSetTexture_DisplayName="Установить текстуру для фрейма"
_BlzFrameSetTexture_Parameters="Установить для ",~framehandle," текстуру пути ",~String," с каким-то флагом ",~integer," и включить смешивание? ",~boolean
_BlzFrameSetTexture_Defaults=,"ReplaceableTextures\CommandButtons\BTNSelectHeroOn",0,TRUE
_BlzFrameSetTexture_Category=TC_FRAMES

BlzFrameSetSize=0,framehandle,real,real
_BlzFrameSetSize_DisplayName="Масштабировать фрейм"
_BlzFrameSetSize_Parameters="Для фрейма ",~framehandle," установить масштаб по x ",~real," и по y ",~real
_BlzFrameSetSize_Defaults=,0.039,0.039
_BlzFrameSetSize_Category=TC_FRAMES

BlzFrameSetAbsPoint=0,framehandle,framepointtype,real,real
_BlzFrameSetAbsPoint_DisplayName="Установить абсолютную позицию фрейма"
_BlzFrameSetAbsPoint_Parameters="Для фрейма ",~framehandle," центрировать позицию в ",~framepointtype, по х ,~real, и по у ,~real
_BlzFrameSetAbsPoint_Defaults=,FRAMEPOINT_CENTER,0.4,0.3
_BlzFrameSetAbsPoint_Category=TC_FRAMES

BlzGetOriginFrameBJ=0,originframetype,integer
_BlzGetOriginFrameBJ_DisplayName="Получить оригинальный фрейм"
_BlzGetOriginFrameBJ_Parameters=" Получить фрейм типа ",~originframetype," по индексу ",~integer
_BlzGetOriginFrameBJ_Defaults=ORIGIN_FRAME_GAME_UI,0
_BlzGetOriginFrameBJ_Category=TC_FRAMES
Пару типов данных
framehandle=1,1,0 ,"Frame Handle"
framepointtype=1,1,0 ,"Frame Point Type"
originframetype=1,1,0 ,"Frame Type Origin"
И пару хинтов
// FramePointType

FRAMEPOINT_TOPLEFT=0,framepointtype,FRAMEPOINT_TOPLEFT,"Вверх-лево"
FRAMEPOINT_TOP=0,framepointtype,FRAMEPOINT_TOP,"Вверх"
FRAMEPOINT_TOPRIGHT=0,framepointtype,FRAMEPOINT_TOPRIGHT,"Вверх-право"
FRAMEPOINT_LEFT=0,framepointtype,FRAMEPOINT_LEFT,"Лево"
FRAMEPOINT_CENTER=0,framepointtype,FRAMEPOINT_CENTER,"По центру"
FRAMEPOINT_RIGHT=0,framepointtype,FRAMEPOINT_RIGHT,"Право"
FRAMEPOINT_BOTTOMLEFT=0,framepointtype,FRAMEPOINT_BOTTOMLEFT,"Низ-лево"
FRAMEPOINT_BOTTOM=0,framepointtype,FRAMEPOINT_BOTTOM,"Вниз"
FRAMEPOINT_BOTTOMRIGHT=0,framepointtype,FRAMEPOINT_BOTTOMRIGHT,"Низ-Право"

// Originframetype
ORIGIN_FRAME_GAME_UI=0,originframetype,ORIGIN_FRAME_GAME_UI,"ORIGIN_FRAME_GAME_UI"
ORIGIN_FRAME_COMMAND_BUTTON=0,originframetype,ORIGIN_FRAME_COMMAND_BUTTON,"ORIGIN_FRAME_COMMAND_BUTTON"
ORIGIN_FRAME_HERO_BAR=0,originframetype,ORIGIN_FRAME_HERO_BAR,"ORIGIN_FRAME_HERO_BAR"
ORIGIN_FRAME_HERO_BUTTON=0,originframetype,ORIGIN_FRAME_HERO_BUTTON,"ORIGIN_FRAME_HERO_BUTTON"
ORIGIN_FRAME_HERO_HP_BAR=0,originframetype,ORIGIN_FRAME_HERO_HP_BAR,"ORIGIN_FRAME_HERO_HP_BAR"
ORIGIN_FRAME_HERO_MANA_BAR=0,originframetype,ORIGIN_FRAME_HERO_MANA_BAR,"ORIGIN_FRAME_HERO_MANA_BAR"
ORIGIN_FRAME_HERO_BUTTON_INDICATOR=0,originframetype,ORIGIN_FRAME_HERO_BUTTON_INDICATOR,"ORIGIN_FRAME_HERO_BUTTON_INDICATOR"
ORIGIN_FRAME_ITEM_BUTTON=0,originframetype,ORIGIN_FRAME_ITEM_BUTTON,"ORIGIN_FRAME_ITEM_BUTTON"
ORIGIN_FRAME_MINIMAP=0,originframetype,ORIGIN_FRAME_MINIMAP,"ORIGIN_FRAME_MINIMAP"
ORIGIN_FRAME_MINIMAP_BUTTON=0,originframetype,ORIGIN_FRAME_MINIMAP_BUTTON,"ORIGIN_FRAME_MINIMAP_BUTTON"
ORIGIN_FRAME_SYSTEM_BUTTON=0,originframetype,ORIGIN_FRAME_SYSTEM_BUTTON,"ORIGIN_FRAME_SYSTEM_BUTTON"
ORIGIN_FRAME_TOOLTIP=0,originframetype,ORIGIN_FRAME_TOOLTIP,"ORIGIN_FRAME_TOOLTIP"
ORIGIN_FRAME_UBERTOOLTIP=0,originframetype,ORIGIN_FRAME_UBERTOOLTIP,"ORIGIN_FRAME_UBERTOOLTIP"
ORIGIN_FRAME_CHAT_MSG=0,originframetype,ORIGIN_FRAME_CHAT_MSG,"ORIGIN_FRAME_CHAT_MSG"
ORIGIN_FRAME_UNIT_MSG=0,originframetype,ORIGIN_FRAME_UNIT_MSG,"ORIGIN_FRAME_UNIT_MSG"
ORIGIN_FRAME_TOP_MSG=0,originframetype,ORIGIN_FRAME_TOP_MSG,"ORIGIN_FRAME_TOP_MSG"
ORIGIN_FRAME_PORTRAIT=0,originframetype,ORIGIN_FRAME_PORTRAIT,"ORIGIN_FRAME_PORTRAIT"
ORIGIN_FRAME_WORLD_FRAME=0,originframetype,ORIGIN_FRAME_WORLD_FRAME,"ORIGIN_FRAME_WORLD_FRAME"
ORIGIN_FRAME_SIMPLE_UI_PARENT=0,originframetype,ORIGIN_FRAME_SIMPLE_UI_PARENT,"ORIGIN_FRAME_SIMPLE_UI_PARENT"
ORIGIN_FRAME_PORTRAIT_HP_TEXT=0,originframetype,ORIGIN_FRAME_PORTRAIT_HP_TEXT,"ORIGIN_FRAME_PORTRAIT_HP_TEXT"
ORIGIN_FRAME_PORTRAIT_MANA_TEXT=0,originframetype,ORIGIN_FRAME_PORTRAIT_MANA_TEXT,"ORIGIN_FRAME_PORTRAIT_MANA_TEXT"
ORIGIN_FRAME_UNIT_PANEL_BUFF_BAR=0,originframetype,ORIGIN_FRAME_UNIT_PANEL_BUFF_BAR,"ORIGIN_FRAME_UNIT_PANEL_BUFF_BAR"
ORIGIN_FRAME_UNIT_PANEL_BUFF_BAR_LABEL=0,originframetype,ORIGIN_FRAME_UNIT_PANEL_BUFF_BAR_LABEL,"ORIGIN_FRAME_UNIT_PANEL_BUFF_BAR_LABEL"
Ну и пришлось добавить свои BJ функции в нестандартный код карты
globals
	framehandle bj_lastLastCreatedFrameHandle=null
endglobals

function GetLastCreatedFrameHandle takes nothing returns framehandle
	return bj_lastLastCreatedFrameHandle
endfunction

function BlzCreateFrameByTypeBJ takes string typeName, string name, framehandle owner, string inherits, integer createContext  returns framehandle
	set bj_lastLastCreatedFrameHandle=BlzCreateFrameByType(typeName, name, owner, inherits, createContext)
	return bj_lastLastCreatedFrameHandle
endfunction

function BlzGetOriginFrameBJ takes originframetype frameType, integer index returns framehandle
	set bj_lastLastCreatedFrameHandle=BlzGetOriginFrame(frameType, index)
	return bj_lastLastCreatedFrameHandle
endfunction
Но лично я это доделывать никогда не буду, может быть если только за денги.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Этот комментарий удален
21
Ну и кому это надо?:)
Нубы и так не разберутся, а те, кто умеет во фрэймах, не будут заниматься этой ерундой
33
Ну и кому это надо?:)
Никому, поэтому я это и не стал доделывать, была интересна лишь возможность создание такого.
И как результат: да, это возможно

Просто это позволило бы понизить порог вхождения во фреймы, однако не для кого понижать уже, а челы с 126 гуи патча даже скорее всего не знаю что такое фреймы. Просто если всё нормально сделать, то гуи фреймы в варике, будут на уровне старкрафта 2.
Но это всё по прежнему никому не нужно
21
Просто это позволило бы понизить порог вхождения во фреймы
кому надо тот войдёт куда надо :)
15
Ну и кому это надо?:)
Ничего не истинно, все дозволено.
Мы давно пришли к моменту, когда не написать каких-то систем для массового пользования. Все оно будет иметь сугубо нишевый характер. Посему вопрос "кому оно надо" бессмысленен в виде его применимости абсолютно в любой ситуации.
21
GetLocalPlayer, при чём тут массово
мне интересно кому это реально надо, покажите мне этого типа
который будет этим пользоваться
30
Никому, поэтому я это и не стал доделывать, была интересна лишь возможность создание такого.
Кстати, а таким образом можно переписать стандартные BJ? Тогда можно вообще изящно эту штуку реализовать.
33
NazarPunk, нет, bj же находятся внутри blizzard.j их можно только переопределить, но ты об этом знаешь и именно это и делал. В целом можно всё это совместить до кучи и сделать отдельный нормальный рефорджевый гуи редактор со всеми функциями и без утечек.
30
но ты об этом знаешь и именно это и делал
Так я и хотел бы переопределить, только не добавлением в custom_code, а таким нехитрым способом. Зато с другой стороны можно в гуи например добавить векторы и прочие полезные вещи.
15
Так я и хотел бы переопределить, только не добавлением в custom_code, а таким нехитрым способом
Если я правильно понял твое заблуждение, то triggerdata не определяет код функций, он лишь определяет код вызова функций. Имя функции, принимаемые параметры, возвращаемое значение и описание, которое будет отображаться в GUI редакторе.
Технически это позволяет лишь добавить в GUI функции твоей библиотеки, но не их начинку.
33
Ну всю эту начинку можно добавлять во внутрь карты (во внутрь war3map.lua или j) автоматически, как только в гуи вызывается функция данных для которой не обнаружено
NazarPunk:
а таким нехитрым способом
Ну тогда надо модифицировать blizzard.j, правда такая карта будет только у тебя работать
30
мне интересно кому это реально надо, покажите мне этого типа
который будет этим пользоваться
Сама идея добавления кода в гуи крута сама по себе. Только вот нужно 100500 времени чтоб её развить и доделать.
Ну всю эту начинку можно добавлять во внутрь карты
Мы о гуишниках говорим, они же без сборщика работают. В идеале найти способ заставить редактор вставлять код в карту.

Фреймы на русском ГУИ, любой может без знаний джасс и кода и знаний синтаксиса создать свой первый фрейм
Во влажных мечтах конечно не фрэймы давать юзеру, а например сделать выбор кастомного интерфейса.
15
Только вот нужно 100500 времени чтоб её развить и доделать.
Не сказал бы, процесс достаточно ускоряется практикой Ctrl+C/V
Тут основная проблема в том что все это дело нужно распихивать в один единственный текстовый файл (в два, если с подсказками), да еще по заранее определенным секциям. Рядовой гуишник в этом деле запутается если будет использовать больше одной сторонней библиотеки.
33
Только вот нужно 100500 времени чтоб её развить и доделать
Время есть, потребности нет
NazarPunk:
В идеале найти способ заставить редактор вставлять код в карту
Я думаю, что те кто руку к jngp приложил, знают как это сделать
NazarPunk:
Во влажных мечтах конечно не фрэймы давать юзеру, а например сделать выбор кастомного интерфейса
Тут тоже да, в идеале для гуишника надо чтобы фрейм создавался без переменных и в 1 строчку, как видишь у меня вообще потребовалось 10 строк написать, ради 1 фрейма без событий. Это плохо, мы же юнита всё таки 1 строчкой создаём же.
30
Тут основная проблема в том что все это дело нужно распихивать в один единственный текстовый файл (в два, если с подсказками), да еще по заранее определенным секциям.
Да хоть в 100500, современные IDE в прямых руках замечательно всё соберут в один нужный файлик.
Рядовой гуишник в этом деле запутается если будет использовать больше одной сторонней библиотеки.
Если бы редактор подхватывал внешний код, то гуишнику нужно всего один раз скопировать файло в triggerdata и с удовольствием использовать новый функционал. Ну а куча неиспользованого кода всяко лучше того, что он в гуи натыкает.

Время есть, потребности нет
Ну дык злые программисты распугали всех гуишников)
Я думаю, что те кто руку к jngp приложил, знают как это сделать
Если я правильно понимаю, близы прикрыли лавочку с надстройками редактора.
в идеале для гуишника надо чтобы фрейм создавался без переменных и в 1 строчку
В идеале для гуишника вообще не знать что такое фрэймы, а выбирать из менюшечек:
Интерфейс:
  • РПГ
  • Арена
  • Обсервер
  • Минимальный
  • Стандартный
Инвентарь
  • Стандартный
  • Расширенный
  • ...
33
В идеале для гуишника вообще не знать что такое фрэймы, а выбирать из менюшечек:
А не пошли ли они нахер?
30
А не пошли ли они нахер?
Опять администрация гуишников обижает, куда катится мир...
ну дык чем больше хороших инструментов для гуишников, тем больше интерес к игре))

Ну а совсем во влажных мечтах это импорт заклинаний из интернета: нажал кнопочку и у тебя в карте появилось любоезаклинаниеиздоты))
15
Да хоть в 100500, современные IDE в прямых руках замечательно всё соберут в один нужный файлик.
Гуишнику не нужны IDE. Именно гуишнику придется брать чужие библиотеки и собирать их у себя в один triggerdata файл в чем он не разберется.
Тут скорее сборщик писать придется. Хватит и консольной программы, закинул в папку заготовленные triggerdata файлы с кастомными функциями, а сброщик уже сам это дело соберет и кинет в папку с игрой. Правда CustomScript в карту копировать так и так вручную придется.
30
Именно гуишнику придется брать чужие библиотеки и собирать их у себя в один triggerdata файл в чем он не разберется.
Задача гуишника взять собранный умными людьми triggerdata и скопировать себе. Побочный эффект это конечно куча неиспользованного кода, но неиспользуемый код лучше чем унылый)
Тут скорее сборщик писать придется.
Так сборщик уже давно написан, притом совместимый со стандартным редактором. Можно к нему допилить нужный функционал. Но это потребуется только в случае коммандной работы над проэктом, где работают гуишники и кодеры с IDE.
33
NazarPunk, забей, лучше на сборщика апдейт напиши на xgm.guru/p/wc3/cheapack/comments?postid=448575#comment37, хотя я часть уже и сам сделал, но об этом поговорить либо там либо в личке
15
Задача гуишника взять собранный умными людьми triggerdata и скопировать себе. Побочный эффект это конечно куча неиспользованного кода, но неиспользуемый код лучше чем унылый)
Пользователь сам волен выбирать используемые библиотеки. Никому не уперлось копировать себе в CustomScript тонну неизвестно вообще чего и зачем.
33
Пользователь сам волен выбирать используемые библиотеки. Никому не уперлось копировать себе в CustomScript тонну неизвестно вообще чего и зачем.
я ж чё и говорю в иделе оно должно автоматически добавляться в кастом скрип, как только для гуи функции нужен этот код
Проблема именно вот в таких функциях
function BlzCreateFrameByTypeBJ takes string typeName, string name, framehandle owner, string inherits, integer createContext  returns framehandle
	set bj_lastLastCreatedFrameHandle=BlzCreateFrameByType(typeName, name, owner, inherits, createContext)
	return bj_lastLastCreatedFrameHandle
endfunction
Оно нужно чтобы хоть как-то получить новый тип данных, потому что
 BlzCreateFrameByType(typeName, name, owner, inherits, createContext)
само по себе ничего не возвращает для гуи, нужно сразу для переменной создавать, но я не знаю как это сделать, сделать
Set VariableFrameType=BlzCreateFrameByType, я максимум смог добавить функцию "последний созданный фрейм", если бы это было возможно, тогда бы можно было обойтись без самописных BJ в кастом коде
30
Пользователь сам волен выбирать используемые библиотеки.
Нормальный пользователь берёт IDE, сборщик по вкусу и пишет на lua, а гуишники пусть пихают. им не привыкать))
Никому не уперлось копировать себе в CustomScript тонну неизвестно вообще чего и зачем.
Ну так можно запилить подобие Download Builder и пусть выбирает по вкусу, только с таким подходом есть ненулевой шанс запороть карту использовав гуи функцию отсутствующую в triggerdata.
33
Самый лол, этот пост Дизлайкнуло 2 гуишника. Интересно ребята, я впервые мог сделать то, что вам может пригодиться, я даже луа тут спецом не использован, а вы вот как.

Аргументируйте пожалуйста своё решение, может вас обидело что я написал "никогда не буду доделывать"?

Niken покажи пожалуйста скрин триггера из редактора SK2, где создаётся просто кнопка в центре экрана
30
Самый лол, этот пост Дизлайкнуло 2 гуишника.
Так гуишники привыкли по кнопочкам из менюшечек тыкать, а не разрабатывать инструменты для своей же пользы.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.