27

» WarCraft 3 / multiboard

ScopteRectuS, xgm.guru/forum/showthread.php?t=47331
ты знаешь, что там значение на сотку нужно делить? Пропорция.
раскрыть
Ты не сможешь изменить по ходу игры размер ширины, он только один раз. Нужно спрятать мультииборд через MultiboardDisplay, изменить размер, а потом отобразить.
спасибо, конечно, за список функций. Но я спрашивал не это. Представь МБ, 2строки, 2 столбца.
ну это точно нельзя сказать. Вот, я методом тыка и проб определял. Также тут зависит от длины текста и прочее. Я пробовал посмотреть с помощью карты. MultiboardDisplay действительна полезна, помогает увидеть как меняет положение.
Вводи в чат:
"D1 N" - где N размер ширины 1 ячейки
"D2 N" - где N размер ширины 2 ячейки
Сам только что сделал, мб ничего не значит карта. Надо посмотреть, а то по впечатлениям, ввожу первой 55 (это 0,55), смещается влево, и таким образом расширяет таблицу. Ввожу второй ячейке 54 (0.54), смещается влево, Но получилось очень не красиво, она сдвинула первую ячейку вперед и встала на нее место. Короче зазоры между ячейками большие получились
Загруженные файлы
27

» WarCraft 3 / multiboard

вот
создать мультиборд
set bj_lastCreatedMultiboard = CreateMultiboard() //создаем мультиборд, меню паузы
native CreateMultiboard takes nothing returns multiboard
мультиборд можно представить в виде таблицы
call MultiboardSetRowCount(bj_lastCreatedMultiboard, rows) //ряд, строка
native MultiboardSetRowCount takes multiboard lb, integer count returns nothing
call MultiboardSetColumnCount(bj_lastCreatedMultiboard, cols) //столбец, колонка
native MultiboardSetColumnCount takes multiboard lb, integer count returns nothing
узнать кол-во строк или столбцов мультиборда
MultiboardGetRowCount(mb) //максимальное кол-во строк
native MultiboardGetRowCount takes multiboard lb returns integer
MultiboardGetColumnCount(mb) //максимальное кол-во столбцов
native MultiboardGetColumnCount takes multiboard lb returns integer
мультиборду можно придать имя, заглавие (торчит название сверху)
call MultiboardSetTitleText(bj_lastCreatedMultiboard, title)
native MultiboardSetTitleText takes multiboard lb, string label returns nothing
цвет заглавие мультиборда (названия мультиборда)
native MultiboardSetTitleTextColor takes multiboard lb, integer red, integer green, integer blue, integer alpha returns nothing
показать-скрыть мультиборд, мультиборд можно отобразить конкретному игроку вставив вместо true условие GetLocalPlayer() == Player(0). Если мультибордов несколько, то у игрока активным будет один
call MultiboardDisplay(bj_lastCreatedMultiboard, true)
native MultiboardDisplay takes multiboard lb, boolean show returns nothing
показать-скрыть все мультиборды. Инверсная функция
call MultiboardSuppressDisplay(not flag)
native MultiboardSuppressDisplay takes boolean flag returns nothing
проверка показан ли мультиборд.
native IsMultiboardDisplayed takes multiboard lb returns boolean
часто используют понятие как ячейка multiboarditem, как и таблица Excel может хранить текст (строку), числа (целые и реальные), картинки (сюда вписывают путь картинки)
local multiboarditem mbitem = MultiboardGetItem(mb, curRow - 1, curCol - 1)
Функция MultiboardGetItem поможет перебирать ячейки, например через цикл. После того, как поработали с ячейкой (там текст или картинку изменили, ширину задали и др.). Нужно обязательно в конце вставлять эту нативку MultiboardReleaseItem
native MultiboardGetItem takes multiboard lb, integer row, integer column returns multiboarditem
показать текст, числа или изображения для одной ячейки. Вы можете скрыть текст или изображение (короче два варианта).
native MultiboardSetItemStyle takes multiboarditem mbi, boolean showValue, boolean showIcon returns nothing
показать текст, числа или изображения для всех ячеек.
native MultiboardSetItemsStyle takes multiboard lb, boolean showValues, boolean showIcons returns nothing
установить значение одной ячейки. вообще-то текст, точнее строку. Конвертом из целого числа или из реального числа переводим в строку
native MultiboardSetItemValue takes multiboarditem mbi, string val returns nothing
установить значения для всех ячеек
native MultiboardSetItemsValue takes multiboard lb, string value returns nothing
установить ширину для одной ячейки. В гуи варианте разрешено от 0% до 100%. Думаю, что ширина 100% - весь экран. Если задать хотя бы в одной ячейке 100%, это сместит всю вашу таблицу, она станет шире из-за одной ячейки. Если у вас есть в одном ряду два соседа столбца, вы захотите их расположите на экране, то не забывайте, что, если у обоих в сумме больше 100%, текст или картинка может не отобразиться, вам поэтому нужно, чтобы в одном ряду сумма не превышала 100%, то есть 1.
call MultiboardSetItemWidth(mbitem, width/100.0) //значение делиит на 100%
native MultiboardSetItemWidth takes multiboarditem mbi, real width returns nothing
устанавливает для всех ячеек одну ширину.
MultiboardSetItemsWidth(multiboard,real)
native MultiboardSetItemsWidth takes multiboard lb, real width returns nothing
задает картинку. сюда прописываете путь. Помните, там где нужно писать один слэш "/" , вы пишете два ""
native MultiboardSetItemIcon takes multiboarditem mbi, string iconFileName returns nothing
задаете картинки для всех ячеек.
native MultiboardSetItemsIcon takes multiboard lb, string iconPath returns nothing
перезапуск. удаление утечек. Эта нативка помогает удалить утечку
call MultiboardReleaseItem(mbitem)
native MultiboardReleaseItem takes multiboarditem mbi returns nothing
Цвет одной ячейки
native MultiboardSetItemValueColor takes multiboarditem mbi, integer red, integer green, integer blue, integer alpha returns nothing
цвет всех ячеек
native MultiboardSetItemsValueColor takes multiboard lb, integer red, integer green, integer blue, integer alpha returns nothing
сворачивает и разворачивает мультиборд.
call MultiboardMinimize(mb, minimize)
native MultiboardMinimize takes multiboard lb, boolean minimize returns nothing
проверка свернут ли мультиборд
native IsMultiboardMinimized takes multiboard lb returns boolean
очистить мультиборд от строк и столбцов
MultiboardClear
native MultiboardClear takes multiboard lb returns nothing
уничтожить мультиборд
DestroyMultiboard
native DestroyMultiboard takes multiboard lb returns nothing
Что я помню, что обычно при инициализации не работает то ли создание то ли разворачивание (не помню), а позже.
В гуи BJ-функции там можно нолики приписывать, короче все строки или столбцы работает. Но все это можно сократить, дописав свои.
27

» WarCraft 3 / Блокировка чит-кодов

чтобы защититься от whosyourdaddy есть еще один момент - расшарить общий контроль за войсками с другим игроком. Чит работает только в сингле. Ведь супер сильные и неуязвимые становятся ваши войска, а представьте, что вы управляете войсками союзника, и сколько не вводили, но чит не работает
xgm.guru/p/wc3/182252?postid=340524 соответствующие настройки нужно выставить
27

» WarCraft 3 / textag

вот что я выяснил
SetTextTagSuspended - я не знаю что это за функция, но переводится как приостановить действие текстага. В гуи варианте есть еще Suspend/Resume. Resume - так понял запустить, перезапустить. Наверное типа как пауза, таймер жизни паузит, фиг знает, не проверял.
Функция SetTextTagLifespan отвечает за длительность исчезновения. (Оптимально 1-3 сек). время жизни после которого исчезнет и удалиться. В гуишном варианте пишут, что эта команда отвечает за удаление и очистку текстагов, придется поверить на слову.
функция SetTextTagAge - с какого времени начинается исчезновение. (0, для того что бы сразу). Удаляется после истекшего времени я не знаю.
Функция SetTextTagFadepoint - с какого времени начинается исчезновение, текст с каждой секундой становится все более прозрачным, и затем исчезает. (0, для того что бы сразу). Удаляется после истекшего времени я не знаю.
Функции SetTextTagAge и SetTextTagFadepoint напрямую связаны с SetTextTagLifespan. Правда до этого не знал, что делают две побочные нативки. Ведь в SetTextTagLifespan вы задаете время жизни, возвраст текстагов.
Например, вы задаете время жизни в SetTextTagLifespan 5 секунд. Относительно, этих 5 секунд жизни вы задаете так, чтобы на 3 секунде жизни текстаг исчез с помощью SetTextTagAge. Можно сделать так, чтобы исчез сразу на 0 секунде жизни. Если SetTextTagLifespan не задавать, то работать SetTextTagAge не будет. Вернее работает, но не так как хотелось бы (не отчего задавать время, возраст то не задан).
call SetTextTagLifespan(bj_lastCreatedTextTag, 5.) ////время жизни после которого исчезнет и удалиться
call SetTextTagAge(bj_lastCreatedTextTag, 3) //на 3 секунде жизни исчезнет текстаг
аналогично
call SetTextTagLifespan(bj_lastCreatedTextTag, 5.) ////время жизни после которого исчезнет и удалиться
call SetTextTagFadepoint(texttag, 1.5) //текстаг ближе к 1.5 секунде начнет затухать и на 1.5 секунде жизни исчезнет текстаг
что у меня получилось без SetTextTagLifespan
Пишут: функция SetTextTagAge - для установки возраста текстового объекта (в секундах) и перехода на определенный этап его процесса замирания, затухания.
Если SetTextTagLifespan не вводить, то вовсе это не время, через которое исчезнет текст, а что-то другое. Просто в буржуйском сайте на английском пишут что устанавливают возраст, хотя как-то странно время течет без SetTextTagLifespan, очень долго течет. Мб скорость затухания, то есть постепенно становится более прозрачным, и потом и вовсе исчезнет. (0-30 - не заметно, если ввести 30, то кажется, что текст не исчезает, но на самом деле полностью исчезнет через 69 сек. Если ввести 80, то полностью исчезнет через 18 сек. Если ввести 90, то исчезнет 9 сек. Если ввести 99 и более, то текст тут же исчезнет как будто бы его и не было никогда.)
Пишут: Функция SetTextTagFadepoint - для установки возраста текстового объекта (в секундах) и перехода на определенный этап его процесса замирания, затухания.
Аналогично, как и SetTextTagAge, хотя если присмотреться вроде похоже как исчезают там и здесь, текст с каждой секундой становится все более прозрачным, и затем исчезает (процесс замирания, затухания). Ввел 1 единицу, а исчезал 40-70 секунд.
пробовал проверять удаляет ли текстаги
проверял таймером обнулена ли переменная с помощью SetTextTagLifespan, SetTextTagFadepoint, SetTextTagAge
    if ( bj_lastCreatedTextTag == null ) then
        call DisplayTextToForce( GetPlayersAll(), "текстаг пуст" )
    endif
но проверка говорит, что переменная текстага не фига не пуста. Вывод (как сказал Драколич):
тексттаги не являются настоящими агентами и существуют на компе отдельно от прочего, как и молнии, например. их можно создавать в локальном коде, их не нужно нуллить.
Придеться использовать SetTextTagLifespan, так как в гуишном варианте написано, что Lifespan удаляет и чистит от текстагов
Загруженные файлы
27

» WarCraft 3 / textag

объяснения
удалять не нужно так как есть для этого специальные команды, которые задают время длительности жизни тексттага.
function TextTag takes unit u, string text returns texttag
local texttag t = CreateTextTag() //создаем текстаг
//скорость изменения координат xvel на оси х, yvel на оси у
local real xvel = 60 * 0.071 / 128 * Cos(70 * (3.14159/180))
local real yvel = 60 * 0.071 / 128 * Sin(70 * (3.14159/180))
call SetTextTagPermanent(t, false) //делаем постоянным
call SetTextTagText(t, text,12 * 0.023 / 10) //изменяем содержания текста, размер букв текста
call SetTextTagPosUnit(t, u, 0) //устанавливаем текстаг над юнитом и задаем высоту. Вместо этой функции можно заюзать SetTextTagPos - над точкой, тогда координаты придется вводить вместо юниита 
call SetTextTagVelocity(t, xvel, yvel) //устанавливаем скорость всплытия текста, короче эта функция отвечает за то, чтобы текст влетал вверх, как это делает при убийстве юнитов или крит и др.
call SetTextTagFadepoint(t, 0.00)  
call SetTextTagLifespan(t, 2.5) 
return t
endfunction
SetTextTagPermanent - сделать ли постоянным. постоянному текстагу нельзя будет установить время жизни. Нельзя будет сделать прозрачным или невидимым. И многие другие фишки, так как на все Permanent не проверял
Функция SetTextTagLifespan отвечает за длительность исчезновения. (Оптимально 1-3 сек). время жизни после которого исчезнет и удалиться.
функция SetTextTagAge - с какого времени начинается исчезновение. (0, для того что бы сразу). Удаляется после истекшего времени я не знаю.
Функция SetTextTagFadepoint - с какого времени начинается исчезновение, текст с каждой секундой становится все более прозрачным, и затем исчезает. (0, для того что бы сразу). Удаляется после истекшего времени я не знаю.
Функция SetTextTagVisibility - сделать текстаг видимым можно через GetLocalPlayer как в ShowTextTagForceBJ
SetTextTagColorBJ - изменяем цвет и прозрачность
SetTextTagSuspended - я не знаю что это за функция
вроде скину карту, ничего в ней особенного, но в ней проверял. возможно ошибаюсь с SetTextTagLifespan, SetTextTagFadepoint, SetTextTagAge. Проверить можно таймером и переменной не удалился ли текстаг, а вот исчезновение у некоторых команд разное кажись
Загруженные файлы
27

» WarCraft 3 / Переменные, утечки, стабильность

Altf40160, плохо написано =((
Naadir, Видимо, он хотел использовать её вместо Temp_Unit, но не срослось.
но в том то и дело, что в гуи-менюшки не вставишь локалки, эти буковки не везде можно вписать. Только через Custom Script. Человек должен понимать, что это переменные типа как ссылки, и что-то с ними делают. И еще в гуи например в условии эту локалку не впишешь (только через CS), так как в гуи условие создает отдельную функцию. Здесь можно использовать ту глобалку. Вообще многие гуишники начинают везде лепить локалки для мультиплеерности, в каждом действии (конечно полезны локалки, чтоб не создавать глобалки, юзаю их). Вопрос полезно ли лепить везде локи? Мне кажется, если есть разрывы во времени (триггерное действие длительное), то можно юзать их. Только вот где юзать локалки - вэйт? нет. В таймере, так на каждый поток отдельный создается таймер и поток? Да и ладно не парюсь, пишу чисто jass
Кстати в аргументах функции - то же локалки. Их можно обнулить. Не знал, узнал недавно, что обнулять можно аргументы.
27

» WarCraft 3 / Конвертация равкодов

поищи на сайте, уже тем скопилось дофига. Есть еще библиотеки и программ и ссылок
27

» WarCraft 3 / Конкурс карт Warcraft 3, Новости

Maxwell_Hive, у разных людей разные вкусы) мне больше ТД-шки и выживалки нравятся. Интересно же Вадимка снимает кодо-таг или зомби-тэг, выживалки и др, правда Вадим больше одного раза не снимает. 20 минут просмотра мало.
к сожалению арены и доты не цепляют =(( главная фишка - необычность, чтобы что-то поделать можно было и так далее.
27

» WarCraft 3 / Как определить, является ли воин героем?

IsUnitType //проверка
UnitAddType //добавить класс
UnitRemoveType //удалить класс
в JNGP есть библиотека, в триггерах найти еще можно в первом boolean условии
27

» WarCraft 3 / заставить рабочего строить здание

bazeba, через приказ вроде (узнаем равкод здания или строковое название здания) или через предмет со способностью игрушечной фермы
нативки приказов
строительство (приказы в точку)
заставляет юнита строить определенное здание в точке (у нежити с этим проблемы, точнее с рудником)
native IssueBuildOrder takes unit whichPeon, string unitToBuild, real x, real y returns boolean
native IssueBuildOrderById takes unit whichPeon, integer unitId, real x, real y returns boolean
чтобы возвести сплетенный рудник эльфов или проклятый рудник нежити вроде используют IssueTargetOrderById, наводя на рудник
function IssueBuildOrderByIdLocBJ takes unit whichPeon, integer unitId, location loc returns boolean
    if (unitId == 'ugol') then //проклятый рудник
        return IssueHauntOrderAtLocBJ(whichPeon, loc)
    else
        return IssueBuildOrderById(whichPeon, unitId, GetLocationX(loc), GetLocationY(loc))
    endif
endfunction
стандартные приказы
применяет абилки без цели, нанимает (тренирует) войска, улучшает здания и проводит исследования
native IssueImmediateOrder takes unit whichUnit, string order returns boolean
native IssueImmediateOrderById takes unit whichUnit, integer order returns boolean
применяет приказы в точку
native IssuePointOrder takes unit whichUnit, string order, real x, real y returns boolean
native IssuePointOrderById takes unit whichUnit, integer order, real x, real y returns boolean
native IssuePointOrderLoc takes unit whichUnit, string order, location whichLocation returns boolean
native IssuePointOrderByIdLoc takes unit whichUnit, integer order, location whichLocation returns boolean
применяет приказы в цель (в качестве цели могут быть юниты, предметы, декорации - деревья)
native IssueTargetOrder takes unit whichUnit, string order, widget targetWidget returns boolean
native IssueTargetOrderById takes unit whichUnit, integer order, widget targetWidget returns boolean
по дереву и золоту:
"harvest" - добывать ресурсы
"eattree" - съесть дерево
"grabtree" - вырвать дерево
"sentinel" - сторожевая сова
ГРУППЫ - ОТРЯДЫ, групповые стандартные приказы
заставляет отряд применять приказ
native GroupImmediateOrder takes group whichGroup, string order returns boolean
native GroupImmediateOrderById takes group whichGroup, integer order returns boolean
отдает отряду приказ в цель
native GroupTargetOrder takes group whichGroup, string order, widget targetWidget returns boolean
native GroupTargetOrderById takes group whichGroup, integer order, widget targetWidget returns boolean
заставляет отряд использовать приказ в точку
native GroupPointOrder takes group whichGroup, string order, real x, real y returns boolean
native GroupPointOrderById takes group whichGroup, integer order, real x, real y returns boolean
native GroupPointOrderLoc takes group whichGroup, string order, location whichLocation returns boolean
native GroupPointOrderByIdLoc takes group whichGroup, integer order, location whichLocation returns boolean
нестандартные приказы
ИСПОЛЬЗОВАНИЕ объекта instantTargetWidget на цель targetWidget
native IssueInstantTargetOrder takes unit whichUnit, string order, widget targetWidget, widget instantTargetWidget returns boolean
native IssueInstantTargetOrderById takes unit whichUnit, integer order, widget targetWidget, widget instantTargetWidget returns boolean
Объяснение: на примере нативки IssueInstantTargetOrder, заставляет юнита whichUnit использовать приказ order на targetWidget с помощью объекта instantTargetWidget
Пример: есть приказ на гуи "dropitem" выбросить предмет, на самом деле этот предмет можно дропнуть другому юниту (герою, или в магазин. если в магазин передаешь, то продает его). Короче на этом примере можно передать targetWidget итем instantTargetWidget или использовать какое-нибудь заклинание предмета на него. Это был просто пример, хотя ничего кроме предмета не приходит на ум. Если в качестве widget можно было бы использовать способность, а не только юнита, декорацию и итем.
order_dropitem = 852001
ИСПОЛЬЗОВАНИЕ объекта instantTargetWidget в точку
native IssueInstantPointOrder takes unit whichUnit, string order, real x, real y, widget instantTargetWidget returns boolean
native IssueInstantPointOrderById takes unit whichUnit, integer order, real x, real y, widget instantTargetWidget returns boolean
Объяснение: на примере нативки IssueInstantPointOrder заставляет юнита whichUnit использовать приказ order в точку (x,y) или что-то сделать в точке с помощью объекта instantTargetWidget.
Пример: к примеру есть приказ на гуи "dropitem" выбросить предмет targetWidget или приказ использовать итем instantTargetWidget в точку. Хотя ничего кроме предмета не приходит на ум. Если в качестве widget можно было бы использовать способность, а не только юнита, декорацию и итем.
order_dropitem = 852001
приказы с итемами
юнит передает предмет цели target (можно так и продать в магазин, если магазин будет целью)
native UnitDropItemTarget takes unit whichUnit, item whichItem, widget target returns boolean
дропают предмет в точку (на землю короче выкидываем)
native UnitDropItemPoint takes unit whichUnit, item whichItem, real x, real y returns boolean
перемещает предмет в слот (если там был слот занят, то меняет местами).
native UnitDropItemSlot takes unit whichUnit, item whichItem, integer slot returns boolean
юзаем предмет
native UnitUseItem takes unit whichUnit, item whichItem returns boolean
юзаем предмет в цель (в качестве цели могут быть объект widget: такие как юнит, итем. декорация)
native UnitUseItemTarget takes unit whichUnit, item whichItem, widget target returns boolean
юзаем предмет в точку
native UnitUseItemPoint takes unit whichUnit, item whichItem, real x, real y returns boolean
852002 to 852007 (moveslot): Эти приказы перемещают указанный предмет в соответствующий слот инвентаря героя, отдавшего приказ. Идентификатор 852002 переместит предмет в первый слот, идентификатор 852003 – во второй и т.д. Можно с помощью IssueInstantTargetOrderById перетащить итем самому себе.
852008 to 852013 (useslot): Заставляют героя, отдавшего приказ, использовать предмет, находящийся в соответствующем слоте инвентаря. Идентификатор 852008 использует предмет в первом слоте, идентификатор 852009 – во втором и т.д.
МАНИПУЛЯЦИИ С ПРЕДМЕТОМ (не приказы)
даем итем (не создаем !!!)
native UnitAddItem takes unit whichUnit, item whichItem returns boolean 
создаем итем определенного типа
native UnitAddItemById takes unit whichUnit, integer itemId returns item
создаем итем определенного типа в определенный слот
native UnitAddItemToSlotById takes unit whichUnit, integer itemId, integer itemSlot returns boolean
удаляем итем
native UnitRemoveItem takes unit whichUnit, item whichItem returns nothing
удаляем итем с определенного слота
native UnitRemoveItemFromSlot takes unit whichUnit, integer itemSlot returns item
размер инвентаря (может помочь с циклом, например узнать до скольки перебирать слоты и др.)
native UnitInventorySize takes unit whichUnit returns integer
итем в слоте
native UnitItemInSlot takes unit whichUnit, integer itemSlot returns item
иммитация
как понял ниже три заставляют чужого юнита делать действия от имени игрока forWhichPlayer:
  1. магазин покупает/продает юнитов и предметов от имени чужого игрока (пример IssueNeutralImmediateOrder)
  2. магазин переключить на героя с помощью smart, иначе герой не купит (пример IssueNeutralTargetOrder)
  3. мастерскую гоблина заставляет делать разведку в точке (IssueNeutralPointOrder)
чаще всего эти нативки помогают в покупках/продажах, neutralStructure представляется часто как магазин, у которого можно что-то купить.
иммитация от имени игрока
native IssueNeutralImmediateOrder takes player forWhichPlayer, unit neutralStructure, string unitToBuild returns boolean
native IssueNeutralImmediateOrderById takes player forWhichPlayer,unit neutralStructure, integer unitId returns boolean
Объяснение: нативка IssueNeutralImmediateOrder - это иммитация приказа, заставляет нейтральное здание neutralStructure (чаще всего магазин) от имени игрока forWhichPlayer что-то делать (например нанимать войска)
иммитация от имени игрока в цель
native IssueNeutralTargetOrder takes player forWhichPlayer,unit neutralStructure, string unitToBuild, widget target returns boolean
native IssueNeutralTargetOrderById takes player forWhichPlayer,unit neutralStructure, integer unitId, widget target returns boolean
Объяснение: нативка IssueNeutralTargetOrder - заставляет что-то делать нейтральное здание neutralStructure с целью (купить выбранную цель у игрока; переключится на героя, тем самым открыв панель магазина)
иммитация от имени игрока в точку
native IssueNeutralPointOrder takes player forWhichPlayer,unit neutralStructure, string unitToBuild, real x, real y returns boolean
native IssueNeutralPointOrderById takes player forWhichPlayer,unit neutralStructure, integer unitId, real x, real y returns boolean
Объяснение: нативка IssueNeutralPointOrder - заставляет что-то делать нейтральное здание neutralStructure с точкой. Думаю, эта штука, к примеру вроде типа помогает разведку делать. Помните, у мастерской гоблина гоблина разведку делать
если у вас расшарен общий контроль это поможет например синему купить что-то у красного. хотя не всегда работает. Не путайте покупку и тренировку
xgm.guru/p/wc3/warden-buyitem возьмем пример
вариант Warden
function BuyItem takes unit FromShop,integer ItemID,unit ToUnit returns boolean
  if IssueNeutralTargetOrder(GetOwningPlayer(ToUnit), FromShop, "smart", ToUnit) or IssueTargetOrder(FromShop, "smart", ToUnit) then
    return IssueNeutralImmediateOrderById(GetOwningPlayer(ToUnit), FromShop, ItemID) or IssueImmediateOrderById(FromShop, ItemID)
  endif
  return false
endfunction
вариант agentex
function BuyItem takes unit u, unit shop, integer id returns boolean
  call IssueNeutralTargetOrder(GetOwningPlayer(u), shop, "smart", u)
  return IssueNeutralImmediateOrderById(GetOwningPlayer(u), shop, id)
endfunction
выучить навык
native SelectHeroSkill takes unit whichHero, integer abilcode returns nothing
851971 (smart): Приказ (цель-точка или цель-объект), аналог правой клавиши мыши.
852000 (skillmenu): Приказ (без указания цели), при выполнении которого открывается меню навыков героев. Если же триггерно заставить выполнить этот приказ обычную боевую единицу, то исчезнет ее карта команд, которая возвратится, если выбрать боевую единицу.
851994 (buildmenu): Приказ (без указания цели), открывающий меню строительства воина, способного возводить здания.
851973 (stunned): Этот приказ отдается боевым единицам, подвергшимся оглушающим способностям, таким как ‘AOws’ (Громовая поступь), лишая их возможности двигаться и атаковать.
По сути совет правильный, но приказ (имеется в виду skillmenu) указан неверно: OrderId("attributemodskill") = 852576
xgm.guru/p/100/184889 посмотри здесь тему, посмотри карты. Там рабочии вокруг ратуши строит фермы, вместо ферм можно чего-нибудь другое построить
27

» WarCraft 3 / Как рассчитать стоимость здания?

ScopteRectuS, сделай базу данных. стандартным способом узнать не получится, нет такой нативки. мемхаком наверное
первый способ
вот при инициализации, берешь целочисленную записываешь в хэш
//по равкоду
call SaveInteger(Hash, rawcode, 0, 225) //1 здание
call SaveInteger(Hash, upgrage1, 0, 450) //upgrage 1
call SaveInteger(Hash, upgrage2, 0, 675) //upgrage 2
//вместо rawcode или upgrage 1,2 пиши например так: 'hfoo' - это обыкновенные числа в 256-ричной системе
если нужно достать стоимость, в качестве ключа проверяешь равкод (rawcode, upgrage 1,2)
set CostWood = LoadInteger(Hash, GetUnitTypeId(GetTriggerUnit()), 0) 
по хэндлу
вот при инициализации, берешь целочисленную записываешь в хэш
//по равкоду записываешь изначальную стоимость здания
call SaveInteger(Hash, rawcode, 0, 225) //стоимость здание - древесина
call SaveInteger(Hash, rawcode, 1, 100) //стоимость здание - золото
//сохраняем по ключу хэндлу GetHandleId, по формуле от изначально стоимости
call SaveInteger(Hash, GetHandleId(GetTriggeriUnit()), 0, 0)  //кол-во апргрейдов равно ноль
при улучшении строительства прибавляешь счетчик
set id = GetHandleId(GetTriggeriUnit()) //хэндл юнита, номер объекта
set k = LoadInteger(Hash, id, 0) //загружаем счетчик апгрейдов по ключу хэндлов
call SaveInteger(Hash, id, 0, k+1) //сохраняем кол-во апргрейдов
А когда нужно достать стоимость по той формуле, что выше. Ты берешь счетчик, изначальную цену, и считываешь себе стоимость.
можно еще в качестве базы данных поля в РО забить, но что-то не вижу ничего. У здании уровни не отображаются, хп у итемов делаются так как там не видно хп, короче не много вариантов у зданий. Есть еще CustomValue, но на триггерах это
27

» WarCraft 3 / Не открывается карта

Принятый ответ
JNGP снимает ограничения (например максимум декорации 20к), если обычным редактором открыть критует. В jngp есть новые гуишные функции, которых нет в обычном, стандартный редактор их не распознает. Юзайте поиск, такой вопрос уже задавали
можно вместо новых триггерных команд юзать нативки. Писать например через Custom Script или вообще на jass
27

» WarCraft 3 / Радиус постройки

xgm.guru/p/wc3/184889 ИИ строит вокруг ратуши
погоди у тебя строителем является ратуша?
27

» WarCraft 3 / Изгнание в астрал

ScopteRectuS, нет. можно попробовать юзать систему урона. стандартным способом никак. можно отрицательные маг. резисторы давать, но лучше системой урона
27

» WarCraft 3 / Изгнание в астрал

смотри в константах. там типа таблица коэффициентов урона. эфир
поиском юзать умеешь?
27

» WarCraft 3 / Объединить предметы одного типа в инвентаре

а что за системы CCS?
8gabriel8, я уже скинул выше
при заполненном инвентаре юзай руны, пример карты Items и hh
27

» WarCraft 3 / Объединить предметы одного типа в инвентаре

Принятый ответ
ответы
Как объединить зелья лечения в одно с зарядом, если герой имеет одно в инвентаре и поднимает второе?
обычно используют "событие - юнит получает предмет", И на предмет, который вы получаете, ссылается переменная, которая называется item being manipulated. А юнит, который получает итем - Triggering Unit. Вы можете с помощью этой переменной итема узнать тип, сравнить. Потом циклом пробегаете по слотам (от 1 до 6), тут вся суть в одной команде триггерной (item in slot X, итем в слоте Х) и проверяете есть ли такой же итем (не забываем делать проверки, на то что этот предмет не равен item being manipulated и сравниваете не одинаковые ли типы). Если есть такой же (находите тот же тип что и item being manipulated), то от item being manipulated берете заряды и прибавляете к зарядам существующего, а потом item being manipulated удаляете. Недостаток: при заполненном инвентаре такая штука не будет работать.Не хватает свободного места.
код
цикл А от 1 до 6
if тип итема (item being manipulated) РАВНО тип итема (item in slot А) and item being manipulated НЕ РАВНО item in slot А then проверяете
set k = Charges remaining in ( item being manipulated) + Charges remaining in ( item in slot А) складываете заряды
Set charges remaining in ( item in slot А) to ( k) устанавливаете кол-во зарядов
Remove Item (item being manipulated) удаляете
endif
Есть гуишная проверка на наличие итема определенного типа в инвентаре, но она утечна. И лучше циклом прогонять.
Кстати выше пример, там вот дропают итем, зачем? чтобы проверить есть ли такой же итем. А то мб проверка на наличие итема определенного типа в инвентаре найти подобранный итем. А нам нужно знать, что есть еще один, кроме подобранного. Поэтому дропают. Только не понятно зачем создаете новый итем.
Проверка, на то что подобранный предмет имеет зарядов больше 0, говорит нам о том что это не обычный предмет.
есть статьи
Как зелье с зарядом разделить, если игрок перекладывает зелье с зарядом в другую ячейку инвентаря, если возможно, то разделение происходить должно только при нажатии какой-то клавиши?
можно перекладывать в другой слот. для этого ловят приказ. Короче смотрите системы CCS
там создают новый такой же предмет, и выделяют кол-во зарядов, деля поровну например. Абилкой например, попробуй сделать целевую активную абилку с целью предмет, указывай на инвентарь и дели.
Как это можно сделать покороче для множества разных типов предметов?
всмысле покороче? сделать под одну группу? есть же классификация. Я вот делаю так, что все предметы, которые с зарядами, должны иметь классификацию "с зарядами". Не помню точно как называется класс итемов.
Как правильно реализовать в инвентаре 7 слот?
если у героя заполнен инвентарь, то он может подобрать руну. Вот в доте система скрещивания. То же самое можно сделать и с зарядами. На земле у него лежат руны, при подборе руна исчезает. Но мы проверяем слоты, есть ли такой итем. Если есть, прибавляем заряды к существующему. Иначе создать новый. При дропе итема, оригинал подменяет снова на руну. В руну можно передать значения зарядов.
А также ограничения какие-то на количество зарядов нужно ставить или сама система выше какой-то планки не даст собирать?
до такого не доходил.
скинул примеры (хотя многие дурацкие, но делал здесь хгм в качестве ответов)
вот еще одна система hh
Загруженные файлы
27

» WarCraft 3 / Проверка при выборе цели атаки

еще вот например есть классификации как "может атаковать наземные цели", "может атаковать воздушные цели". но что-то кроме бд тут не вижу.
27

» WarCraft 3 / Изменение положения полоски здоровья

Принятый ответ
8gabriel8, точно не уверен.проверял, и ничего (не круг, не полоска - никаких изменений). мне советовали, что спрятать хп-бар можно, если изменить шкалу и высоту выбора. Но работает только шкала выбора. А что значит высота выбора для меня загадка, не работает что-то. Мб с моделью как-то.
это надо у модельщиков спрашивать. Хорошо бы, если кто-то расписал бы в этой теме.
27

» WarCraft 3 / Увеличение уровня-способность на основе предмета

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

» WarCraft 3 / Правильно ли писать такой код?

Вроде бы все правильно. Ничего страшного нет, но если у тебя очень много скилов, то мб сделать базу данных.
Единственное, что неудобно искать. Когда функции дохера в один файлик вложено.
Недавно была тема на этот вопрос xgm.guru/p/wc3/190367
27

» WarCraft 3 / Блокировка приказов

ClotPh, ты проверял? выкл. и вкл. - этого мало. просто отдать, юнит ничего не делает. а только через задержку 0.00
27

» WarCraft 3 / Блокировка приказов

Игра вылетает
Steal nerves,
И в третьих, зацикливание может привести к вылету, нужно отключать триггер, отдавать приказ, и включать триггер.
если отдать триггерно приказ, то сработает событие. Сработает заново триггер, и заново отдача приказа. И так по кругу. Зацикливание короче. Поэтому нужно оборвать это. Выключаем временно триггер или делаем задержку таймером или вэйтом