852000 (skillmenu): Приказ (без указания цели), при выполнении которого открывается меню навыков героев. Если же триггерно заставить выполнить этот приказ обычную боевую единицу, то исчезнет ее карта команд, которая возвратится, если выбрать боевую единицу.
можно этим приказом активировать, но нельзя отследить. открытие этого меню невозможно через приказ отследить
Мне нужны иконки ячменя, ржи
старался. Но у меня чего то не получается ).
вот подобрал иконку пшеницы (на этом фоне иконки ржи и ячменя смотрятся отстойно). Ржи и ячменю очень трудно найти норм картинки, как у пшеницы
точнее не очень хорошо смотрятся в том плане, что у автора карты иконки норм подобраны, большие. Я же находил и брал красивые хорошие изображения, редактировал и подгонял под 64х64 пикс, и получаются размытыми или ничего не видно, Просто если ячмень или рожь длинная, приходилось делать так чтобы влезало. И в результате по бокам много места свободного
брал такие картинки
вот пример
обрезал
подгонял под 64х64
итог: смотрятся как-то мелко на экране. на хайве иконка пшеницы гораздо лучше сделана. у меня так получаются со всеми найденными картинками, чем длиннее растение тем меньше смотрятся
PhysCraft, +++
тут еще зависит от того какой скилл. Если длительный, например буран, огненный столб и тд. то там дамаг периодично повторяющий. поэтому не всегда можно как это с мгновенными кастами типа молота бурь.
PyCCKuu_4eJl, хорошая идея, которая облегчает жизнь. То что дамагер - это даймик, даст нам знать что был каст. НО обычно из-за дайми кастов не агрится противник, опыт гер может не получить (ведь кастер - даймик). Мб это не ущербно, решаемо. Можно триггерно переагрить, и триггерно опыт давать. Я как то пошел бы по сложному пути
драколич прав. дучше - это полностью триггерные способности. При нанесении урона триггерно записываем в логическую, при детекте урона проверяем.
пробовал ранее потестить. чтобы один игрок видел в этом магазине свои грейды (юнитов), другой другие (других юнитов), так не получится. В норм плане, но только 4-ый вариант мб.
вот примеры
GetLocalPlayer() + добавление в магазин юнитов. Это приводит к десинку, норм показывает в начале разных юнитов в магазине, но как только кто-то покупает - приводит к десинку.
код
local integer id
if GetLocalPlayer() == Player(0) then
set id = 'hfoo' //пехотинец
elseif GetLocalPlayer() == Player(1) then
set id = 'ogru' //бугай
endif
call AddUnitToStockBJ( id, gg_unit_n000_0001, 0, 1 )
GetLocalPlayer() + ShowUnit. Пробовал разные магазины наделать, для каждого игрока свой магазин. Расставляем все эти рынки в одну точку (удаляем всем магазинам текстуру пути, лишь у одного должна быть. Иначе блокируют стройку, и друг на друга не поставишь здания). И каждый должен видеть свой. Но как бы GetLocalPlayer() и ShowUnit несовместимы, сразу же приводит к десинку.
код
//market1, market2 - магазины 1 и 2
if GetLocalPlayer() == Player(0) then
call ShowUnit(market2, false)
elseif GetLocalPlayer() == Player(1) then
call ShowUnit(market1, false)
endif
можно запретить тренировать войска или проводить исследования. Как это сделать? Это в триггерах в разделе игрок можно поставить лимит данного типа юнита на ноль.
У одного игрока может быть запрещен, то у другого игрока показан. Однако, этот лимит распространяется на тренировку (не найм). Хотел поставить эту идею на покупку юнитов, но попутал обучением. Не распространяется на найм Короче, еще есть такая фишка что чужой игрок не увидит ваших юнитов, для этого нужно полный контроль отдать ему. Аналогично, и у исследовании (вроде там тоже в разделе игрок есть макс лимит технологии, точно не тестил).
В редакторе есть ограничение: в редакторе в бараках в поле "обучено войск" макс указать можно 12 типов юнитов, но по-настоящему можно тысячи типов юнитов добавить через shift. этот вариант работает у игрока, если барак принадлежит ему. Или этот контроль за бараком должен быть расшарен (однако с этим могут быть проблемы: контроль то общий, но невозможно заставить чужой барак тренировать юнита, если у владельца барака нет ресурсов)
возможно смесь вариантов 2 и 3 - это с разными магазинами, только переключаешь выбор на нужный магазин. Есть событие - игрок выделяет юнита. это единственный рабочий вариант
Demon_Dante, все равно как-то туманно.
можно сделать через продажу войск. Вы же в нейтральном магазине (доме-юните) хотите грейдить? Когда кто-то покупает dummy-юнита, можно узнать владельца. А следом и узнаем и принадлежность расы игрока, и к какому союзу и прочее. Можно еще произвести звук: "Исследование завершено!" а исследование можно изучить триггерно, там просто есть комманда "установить лв исследования"
зависит от патчей. в 1.26 с помощью в мем хака можно менять что угодно (есть набор функции, правда не тестил все), либо в новых патчах (там дали новые нативки, но не знаю есть ли там подобные). И если не ошибаюсь там на типы распространяются, если изменишь описание одного типа, изменишь и остальным. В мем хаке копался, но забыл уже
Генератор цветов для текста (вроде не трудно и самим подобрать, зная цветовые коды RGB ссылка)
WC3 Item Creator
TextColorizer3.2
ARGB - Alpha/Red/Green/Blue - значение прописывают от 0 (0x0) до 255 (0xff). Альфа в варкрафте в описании текста не меняется, только в текстагах, на юнитах (цветовой код юнитов в мем хаке находил).
Есть система. Можно использовать EVENT_WIDGET_DEATH - то есть это срабатывает раньше реальной смерти. Это помогает не только отслеживать перерождение. Но и другие объекты, такие как смерть декора, предмета.
function TrigPick_Func001A takes nothing returns nothing
call TriggerRegisterDeathEvent( gg_trg_d1, GetEnumUnit() )
endfunction
function TrigPick_Actions takes nothing returns nothing
call ForGroupBJ( GetUnitsInRectAll(GetPlayableMapRect()), function TrigPick_Func001A )
endfunction
//===========================================================================
function InitTrig_pick takes nothing returns nothing
set gg_trg_pick = CreateTrigger( )
call TriggerAddAction( gg_trg_pick, function TrigPick_Actions )
endfunction
теперь основная фишка. Когда происходит смерть, событие TriggerRegisterDeathEvent срабатывает раньше и там значение голды не изменилось. Поскольку мы не можем в этом событии узнать убийцу, как в реальном событии. Нам придется завести массив. Циклом пробегаем от 0 до 11, и записываем в него значение голды всех игроков (убийца неизвестен, записываем всех). Тк значение в будущем у убийцы через 0 сек изменится, нам нужно знать наскока изменится
код
function Trig1_d_Actions takes nothing returns nothing
local integer i = 0
loop
exitwhen i>11
set udg_p[i] = GetPlayerState( Player(i), PLAYER_STATE_RESOURCE_GOLD)
call BJDebugMsg("Игрок " + I2S(i) + " имеет золото: " + I2S(udg_p[i]))
set i=i+1
endloop
endfunction
//===========================================================================
function InitTrig_d1 takes nothing returns nothing
set gg_trg_d1 = CreateTrigger( )
call TriggerAddAction( gg_trg_d1, function Trig1_d_Actions )
endfunction
когда придет реальная смерть TriggerRegisterAnyUnitEventBJ( gg_trg_d, EVENT_PLAYER_UNIT_DEATH ). То уже деньги уже зачислены, юнит мертв. В реальной смерти можно узнать убийцу, тогда сверяемся с массивом. Насколько изменилось. Все это происходит за 0.00 сек
код
function Trig_d_Actions takes nothing returns nothing
local integer n = GetPlayerId(GetOwningPlayer(GetKillingUnit()))
local integer gold = GetPlayerState( Player(n), PLAYER_STATE_RESOURCE_GOLD)-udg_p[n]
call BJDebugMsg("|cFFFF9300Игрок получил:r " + I2S(gold))
endfunction
//===========================================================================
function InitTrig_d takes nothing returns nothing
set gg_trg_d = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_d, EVENT_PLAYER_UNIT_DEATH )
call TriggerAddAction( gg_trg_d, function Trig_d_Actions )
endfunction
А вот добыча золота рабом можно попробовать проверять приказом. Там когда он идет за ресурсом имеет один приказ. Добыв его (меняется анима - уже за плечами мешок с голдой), уже имеет другой приказ. Здесь также пригодится массив, чтоб знать наскока изменилось значение голды. Хотя я думаю это сложнее будет и не факт что точно.
еще можно смотреть как изменилась голда у рудника
вот карта
вот не объяснил, когда срабатывает триггер ChangeGold. Он записывает изменения голды.Срабатывает это событие раньше всех (досенения рабом голды в ратушу, покупки предмета, награды за убийство). Но позже спустя срабатывает одно из них, буквально сразу же.
Тк все события и действия однопоточные, то:
Если раб донес, это изменение уже записано в массиве ch. Из ch мы знаем что он донес 10 голды.
При продаже итема, можно узнать из ch стоимость итема.
При убийстве знаем из ch сколько награды получили.
запутаться невозможно логически, хотя триггер ChangeGold не нужен. можно было все вычисления сделать в самих триггерах. Но так совпало, что гораздо удобнее. И есть другие случаи изменения числа голды (подбора монетки, тренировки, исследования, строительство), поэтому это переходит нужное
опишите вопрос понятно
кажется там круг из даймиков или эффектов
меняете радиус r круга каждые n-секунд
вот формула
k = C/L - это кол-во даймиков или кол-во промежутков
далее, зная это кол-во можно узнать и угловую скорость W в град
W = 360/k
Потом циклом пробегаете от 0 до k, прибавляя к тек углу A + на число W
код
set i = 0
set A = 0
loop
exitwhen i > k
set x = x + r * Cos(A*bj_DEGTORAD)
set y = y + r * Sin(A*bj_DEGTORAD)
//создать dummy[i] в точке (x,y), или сдвинуть dummy[i] в эту точку.
//Хотя число даймиков мб измениться, поэтому наверное стоит пересоздать?
set i = i + 1
set A = A + W
endloop
Если надо проверить вышел ли кто за круг: берете расстояние от центра до позиции юнита. Если юнит вышел за круг, короче расстояние между центром и позиции > радиуса круга - дамажим этого юнита.
3-х мерные и более массивы (возможно задвинул, но один раз не хватало доп ключей для ввода. Конечно изобретал велосипед, делал всякие махинации с ключами)
ладно ошибки исправил. Но обнаруживаются другие проблемы - отображаем только наружные границы. А во внутренние не учитываем.
И тут у варкрафта что ли проблема - не может создать много молнии (не все молнии может успеть создать = не знаю почему, дебаг норм показывает. все координаты точек показываем норм), лимит операции (вряд ли)?
запоминаешь тек позицию, каждую сек таймером проверяешь позицию (изменилась ли она). Можно получить расстояние между двумя точками (тек точкой и след точкой). Если расстояние == 0, значит стоит. Если расстояние > 0, значит сдвинулся юнит с тек. точки
вот картасм пример Diod-а
шикарные модели. эх глядя на последнего на трицератона из черепашек ниндзя вспомнил. но в последней модели как будто пол головы снесли. Если что можно большую часть видов ящер слизать из эпохи динозавров. или виды слизать из и лягушачих и рыбоголовых. зотя варкрафте так и сделали. вот мурлоки похожи на рыбоголовых лягушатников. китов, акул и крокодилов, змеи.вот вам и целая империя земноводных. в лично у меня с ящерами фантизии нет. А у вас хватило. не знаю можно ли в эту группу перечислить скорпионов, бегемотов и слонов? ведь есть в варкрафте гигантские ящеры
Один раз как-то добавлял в исключение и у меня не работало. возможно нужно перезагрузить комп - видимо бывает изменения в 10-ке не сразу происходят. Не напишу, что точно. Из-за чего такая хрень происходит не знаю. Или невнимательность или неторопливость.
Поэтому делал по-другому, я заходил в "центр безопасности защитника" => "параметры защиты от вирусов и других угроз" => отключал все параметры (всего то там 3 параметра, хотя нужно было 1 параметр выкл надо). Но ОС каждый раз при включении компьютера или обновлении ОС включала один параметр "защита в режиме реального времени". Эта штука фильтрует, и программу блочит. Заметка: Если у тебя прогу блочат, тебе нужно этот параметр включить, езще и прогу перезапустить.
Вот например, я открыл JNGP решил сохранить карту, у меня блочится или не сохраняется. тоже самое и с mdlvis - модель просто не сохраняется. Отключаю параметр "защита в режиме реального времени", и пробую заново сохранится = не получается, хотя параметр то отключен. Нужно программу (JNGP или mdlvis), действие которой было заблочено, перезапустить. Ну и так каждый раз работал. Антиварь каждый раз сам включался, приходилось выключать. Потом мне надоело делать такие операции, и добавил в исключение. Это "добавление в исключение" не сразу заработало. Через несколько дней заметил что не блочится, как только параметр "защита в режиме реального времени" включился.
8gabriel8,
я тоже почему-то считаю что RecycleGuardPosition не нужна. Эта функция возвращает контроль ИИ. Эта возможно у игроков (0-11). У компьютера может быть не включена ИИ. Это наверное не за позицию, наверное какой-то другой смысл вложен в названии нативки
раскрыть
это функции редко используемы, но полезны. можно в других случаях использовать. У меня есть три melee-компа, которые клипают базу рабами и тренируют войска. Есть триггер отслеживающий обучения войска. после обучения воина (не раба), можно отбирать контроль RemoveGuardPosition - отбирать контроль за юнитами. В основном мне нужно за войнами и героями. Они стоят на базе и никуда не ходят, только триггерными коммандами (приказами) можно управлять. Пробовал расшарить контроль за его войсками, управлял ими норм. Только вот рабы не всегда хотят мне служить, и убегают работать дальше. Естественно, я не отбирал контроль за рабами. В таких случаях, можно управления войском сделать триггерным. Будет такое умное войско. Иногда, когда бьют твоего соратника, бот-дебил не хочет помогать, своими делами занят (возможно какая тактика у него, но все же у меня выживалка. если лишимся одной из опорных точек - будет худо). Тут всегда нападает на базу всякая мелочь, и поэтому тактически разумно поделить войска на 2 части (этого же бот же не сможет сделать). Еще далековато ходят, новых-юнитов отправляет на помощь основным силам, бегут через леса, и там дохнут. RecycleGuardPosition - иногда полезно вернуть. пускай бегает с войсками, развивает.
может поможет этокартинки рассмотрите. Можно также мышкой навести на функцию + Ctrl и вам раскроит. главное знать что делает функция или нативка
мне помогал JNGP. там есть библиотека функции. Еще можно конвентировать гуи в текст. Со временем отошел от гуи.
канал - идеальная абилка. Но бывают случаи когда нужен особый скилл (то что дальше пойдет это мечты):
авто-каст (еще нужны настройки: когда, и на кого работает автокаст.
Работают автокасты в основном когда:
кто-то агрессивный атакует ваш отряд или отряды союзников. (большая часть, либо укрепляют союзников или ослабляют врагов)
кто-то атакует носителя авто-каста (пример бегство в астрал)
когда ранен или истрачена мана у носителя или соратника (лечение)
Или работают всегда: т.е. когда замечаю кидаю в него (замедление с вкл галочкой)
просто дамаг (стрелы)
мгновенный (кастуется без задержек, юнит не останавливается для произношения заклинания и абила не сбивает приказ. Пример безумие, стремительность. Ранее часто нужны кнопки-пустышки, проблема в том, что 1к безумии не наделаешь ибо на всю игру найти можно несколько кнопок-абилок (безумие, windwalk). Знаю, что есть это зависит от анимации юнита. Но хочется универсальные кнопочки-пустышки с разными id-приказами. Выше это пользователи подметили уже. Или мгновенно-целевая абилка, мгновенных целевых абил практически не припомнить. Скажу так прицельные абилы все равно получаются не мгновенными, тк в последствии им надо поближе к цели подбежать.
вызывать прицелы других абил. Хотел бы универсальный skill. Есть у тебя 2 абилы - одна пустышка, другая это с прицелом. При нажатии на пустышку вызывается прицел другой абилки. Так не хватает возможностей вызывать прицел. Не каст и не приказ, заметьте!!! Обычно у целевых абил происходит в 2 клика: 1 клик по кнопке - вызов прицела, 2 - на цель.
3.1 Дать возможность активировать действия других абил. Можно похожее сделать. только не прицелы, а активацию. Можно в пустышке задать ту, которую хотели бы активировать (скорость инвиз). Это будет обход на ограничения из-за id-приказа второй абилы. это если близзарды не смогут дать возможность задавать свой ид
заряды (возможность манипулировать ими, желательно триггерно, а то бесполезны так)
переключаемый (возможность изменять форму или часть, или добавлять атаку). Часто мне не нужен морф, а нужно изменить тип атаки или брони. Хотя наверное, это уже не нужно с появлением триггерных аналогов
требование маны и возможность нацепить баффы (при чем разные баффы). И еще хотелось бы отлавливать получения баффов. знаете пассивкам иногда не задашь значение маны. а у большинства абил не предусмотрено вешать баффы на цели
возможность дать ресурсы (абилка типа "поставка ресурсов", например за определенную сумму можно сделать триггерный каст). Есть конечно поставка ресурсов, но вот например, хочу такую, но целевую абилку.
возможность запускать снаряды (у канала данная возможность отключена или не предусмотрена) или молнии
какой-нибудь спелл-пустышку, на который можно аттачить эффекты (часто ребята задают вопросы по нему).
можно ли сделать какой-нибудь стэк баффов. Ну подобие буфферизации у отравленных стрел
что касается аур. У них проблема в том, что: "Бонусы от одинаковых баффов аур не стакаются друг с другом." Еще хотелось бы отойти от аур, часто чтобы добавить бафф используют ауру. и как подметил Doc лучше создавать баффы. Давать управлять ими. Дать задавать таймер жизни и таймер мигания (через мем хак делал этот, но там проблема еще с определением настоящего времени).
пассажирские абилы. можно ли как-то узнать сколько юнитов сидит в транспорте. Раньше приходилось счетчиком подсчитывать.
способность "техника"/"темный". Она бывает багнутой
можно ли сделать несколько меню, не прибегая к spellbook. Можно ли создать какой-то контейнер для абил (отдельный тип данных), триггерно добавляя или убавляя. и показывать его GetLocalPlayer(). Хотя мне spellbook нравится, но есть недостаток. Я не могу вызвать/показать триггерно это меню.
можно ли сделать несколько buider-menu (второе меню строительства).
Инвиз. Можно ли расширить виды инвиза (не только обычный инвиз и закопаться, но и 2-ой инвиз или 3-ий инвиз) и прилагающие обнаружения войск
Хотелось абилки и нативки с проходимостью. Настраивать тип движения, изменять карту путей, виды столкновения.
код из мем хака
//Установить тип движения юнита
//movetp - тип движения, selfcollision - могут ли другие юниты пройти через unit u (через себя), integer outhercollision - unit u может ли через других пройти
function SetUnitMovementType takes unit u, integer movetp, integer selfcollision, integer outhercollision returns nothing
local integer data= GetUnitDataDefByIdCaching(GetUnitTypeId(u)) + 0x1A8
local integer p1=RMem(data)
local integer p2=RMem(data + 4)
local integer p3=RMem(data + 8)
if movetp!=-1 then
call WMem(data,movetp)
endif
//0 = "none", 1 = "foot", 2 = "fly", 4 = "horse", 8 = "hover", 16 = "water"?, 32 = "amph"
//-1 = оставить без изменений
//0 = нет (отсутствует ограничения)
//1 = пеший, 4 = конный, 8 = парящий (ограничение: вода, всякие преграды: здания, деревья, ландшафт, юниты)
//2 = летающий (отсутствуют ограничения, кроме блокираторов воздуха (здания и декор). На воздух влияет с нужным цветом текстура пути, которая, собственно, и крепится к зданию или декору)
//16 = плавающий (ограничение: суша, ландшафт, юниты)
//32 = земноводный (ограничивает только деревья и здания, ландшафт, юниты)
//Примечание: ограничение в смысле что-то блокирует, препятствует движению. И юнит может обойти эту преграду
if selfcollision!=-1 then
call WMem(data + 4,selfcollision)
endif
//0xCA by default
//seems to be TexturePlacement analogue (кажется является аналогом TexturePlacement. наверное аналогия https://xgm.guru/p/wc3/pathing-alternate ?? Не совсем понятно, что имел в виду автор)
//0 = pathable for others
//only 2+8 (A) makes unit non-pathable
//-1 - оставляет без изменений
//0 - если ввожу ноль или любую другую цифру, то через этого юнита "u" проходят
//10 - если десять, то через юнита "u" не могут проходить, обходят стороной
//0xCA - по умолчанию. возвращает к исходному значению, которое было задано.
//пробовал ввести 0xFF летун не мог через здание пролетать, облетает. Как-то влияет значит текстура. Ну вообще большинство чисел (0xFFF) не дают такое сделать. Не все числа, конечно.
//Конечно пытался попробовал изменить текстуру на стройку и ходьбу наземных = не получается.
if outhercollision!=-1 then
call WMem(data + 8,outhercollision)
endif
//-1 = оставить без изменений
//0 = pass through anything (unit u проходит через что-либо. Короче не имеет преград)
//1 = cannot move (unit u не может двигаться, неподвижен. Может только совершать повороты на месте)
//2 = default, 2 by default for ground (настройка по умолчанию для наземных)
//4 = flying default (настройка по умолчанию для летающих)
//8 = stuck at items, can't go thtough units/buildings, pathable for others (unit u не может проходить через предметы. Остальное почти тоже самое, преграды: юниты/здания/декор. Если у здания/декора убрать текстуру пути, то проходит без преград)
//0x10 = can go through units but not items/buildings (Юнит проходит через юнитов. Через итемы/здания/декор не может. Если у здания/декора убрать текстуру пути, то проходит без преград)
//0x20 = free (свободен. без ограничении)
//0x40 = cant move (не может двигаться. почти тоже самое что и "1")
//0x80 == 2 ? , above == 0
call SetUnitPathing(u, true)
call WMem(data,p1)
call WMem(data + 4,p2)
call WMem(data + 8,p3)
endfunction
//===========
//устанавливает особую проходимость (как у wind walk: ходят через юнитов, кроме здании и деревьев).
//у здании и деревьев текстуры пути со цветом 0xff00ff
//особая фишка в том. что перед SetUnitPathing вводят настройки, и они тут же применится Phased
function SetUnitPhased takes unit u returns nothing
local integer data = GetObjectDataCaching( pUnitData , GetUnitTypeId( u ) ) + 0x1AC
local integer p1 = RMem( data )
local integer p2 = RMem( data + 4 )
// call BJDebugMsg(Int2Hex((data-107)*4))
call WMem( data, 8 )
call WMem( data + 4, 16 )
call SetUnitPathing( u, true )
call WMem( data, p1 )
call WMem( data + 4, p2 )
endfunction
//вкл-выкл настройку Phased
function TurnUnitPhased takes unit u, boolean b returns nothing
if b then
call SetUnitPhased(u)
else
call SetUnitPathing( u, not b ) //повторный ввод отключает настройку Phased
endif
endfunction
//===================
Можно ли двойные абилки-пустышки? Желательно возможность переключаться. Есть аналоги пустышки (укрыться за щитом, но бывает случаи когда 2-3 мало).
Можно ли получить переменную выделенного юнита, панель интерфейса, которая отображена на экране у локального игрока
раскрыть
допустим выделив рамкой 2 юнитов: героя и раба, у вас будет отображаться в окне посерединке 2 иконки выделенных юнитов. Но сбоку меню будет переключено на героя (механика вара). Часто не хватает манипуляции
Является ли юнит неактивным (находится ли он в состоянии покоя или нет). В некоторых случаях полезна знать стоит ли юнит, т.к. ловить приказ не надежно. Не знаю есть ли это в новых патчах.
У меня часто настроено через "сценарии" => "кланы". Когда игрок ливает, не видно никакого мутиборда.
В melee-игре, если игрок ливает. У него часто такое происходит
Пробовал удалить melee-триггер. Когда ливает игрок, не видно никакого мультиборда. Выяснил, что это из-за действия
call MeleeInitVictoryDefeat( )
там очень много настроек, находим нужное
// Set a trigger to fire whenever this player leaves
set trig = CreateTrigger()
call TriggerRegisterPlayerEvent(trig, indexPlayer, EVENT_PLAYER_LEAVE)
call TriggerAddAction(trig, function MeleeTriggerActionPlayerLeft)
смотрим
разбор
function MeleeTriggerActionPlayerLeft takes nothing returns nothing
local player thePlayer = GetTriggerPlayer()
// Just show game over for observers when they leave
if (IsPlayerObserver(thePlayer)) then
call RemovePlayerPreserveUnitsBJ(thePlayer, PLAYER_GAME_RESULT_NEUTRAL, false)
return
endif
call CachePlayerHeroData(thePlayer)
// This is the same as defeat except the player generates the message
// "player left the game" as opposed to "player was defeated".
if (MeleeGetAllyCount(thePlayer) > 0) then
// If at least one ally is still alive and kicking, share units with
// them and proceed with death.
call ShareEverythingWithTeam(thePlayer)
call MeleeDoLeave(thePlayer)
else
// If no living allies remain, swap all units and buildings over to
// neutral_passive and proceed with death.
call MakeUnitsPassiveForTeam(thePlayer)
call MeleeDoLeave(thePlayer)
endif
call MeleeCheckForLosersAndVictors()
endfunction
вот настройки союза
function ShareEverythingWithTeam takes player whichPlayer returns nothing
local integer playerIndex
local player indexPlayer
set playerIndex = 0
loop
set indexPlayer = Player(playerIndex)
if (PlayersAreCoAllied(whichPlayer, indexPlayer) and whichPlayer != indexPlayer) then
call SetPlayerAlliance(whichPlayer, indexPlayer, ALLIANCE_SHARED_VISION, true)
call SetPlayerAlliance(whichPlayer, indexPlayer, ALLIANCE_SHARED_CONTROL, true)
call SetPlayerAlliance(indexPlayer, whichPlayer, ALLIANCE_SHARED_CONTROL, true)
call SetPlayerAlliance(whichPlayer, indexPlayer, ALLIANCE_SHARED_ADVANCED_CONTROL, true)
endif
set playerIndex = playerIndex + 1
exitwhen playerIndex == bj_MAX_PLAYERS//
endloop
endfunction
настройки
bj_ALLIANCE_UNALLIED противник
bj_ALLIANCE_UNALLIED_VISION противник с общим полем зрения
bj_ALLIANCE_NEUTRAL нейтральный
bj_ALLIANCE_NEUTRAL_VISION нейтральный с общим полем зрения
bj_ALLIANCE_ALLIED союзник
bj_ALLIANCE_ALLIED_VISION союзник с общим полем зрения
bj_ALLIANCE_ALLIED_UNITS союзник с общими полем зрения и общими войсками
bj_ALLIANCE_ALLIED_ADVUNITS союзник с общими полем зрения и общими войсками (этот параметр не очень понятен, но он то как раз и отвечает за продвинутый контроль за войсками. можете покупать и тренировать войска этого игрока, у вас будут открыты иконки юнитов (ранее в bj_ALLIANCE_ALLIED_UNITS это могло быть недоступным или невозможным, просто контроль давали и все). Также появляется мультиборд. В сценарии => кланы => "общие войска: все" - этот параметр тоже самое. Эту мульт нельзя обнаружить при тесте, если слоты союзников пусты).
ниже это аспекты союза. большая часть делает тоже самое, что и вверхняя часть
ALLIANCE_PASSIVE союз о не нападении
ALLIANCE_SHARED_VISION общее поле зрение
ALLIANCE_SHARED_VISION_FORCED ???
ALLIANCE_RESCUABLE ???
ALLIANCE_SHARED_CONTROL общие войска
ALLIANCE_SHARED_ADVANCED_CONTROL общие войска: все
ALLIANCE_SHARED_XP общий опыт
ALLIANCE_SHARED_SPELLS заклинания действуют на союзников
ALLIANCE_HELP_REQUEST просьба о помощи (пинги?)
ALLIANCE_HELP_RESPONSE оказания помощи (скорее всего финансовая помощь, передача ресурсов)
все происходит из-за этой штуки bj_ALLIANCE_ALLIED_ADVUNITS или ALLIANCE_SHARED_ADVANCED_CONTROL
Желание быстрых загрузок. Короче быстрых тестов. Зашел посмотрел, вышел из игры. А не как в старкрафте, он после тестов выходит из игры в игровое меню, потом из игровое меню в виндовс. Долго же
» WarCraft 3 / cjass Можно ли запустить без редактора?
Ред. MpW
» WarCraft 3 / id способности
Ред. MpW
» WarCraft 3 / Иконки на заказ
старался. Но у меня чего то не получается ).
вот подобрал иконку пшеницы (на этом фоне иконки ржи и ячменя смотрятся отстойно). Ржи и ячменю очень трудно найти норм картинки, как у пшеницы
брал такие картинки
Ред. MpW
» WarCraft 3 / Определение скилла, которым убили юнита
тут еще зависит от того какой скилл. Если длительный, например буран, огненный столб и тд. то там дамаг периодично повторяющий. поэтому не всегда можно как это с мгновенными кастами типа молота бурь.
драколич прав. дучше - это полностью триггерные способности. При нанесении урона триггерно записываем в логическую, при детекте урона проверяем.
» WarCraft 3 / Показатель заряда у способности
Ред. MpW
» WarCraft 3 / Отображение, уровня исследования
В редакторе есть ограничение: в редакторе в бараках в поле "обучено войск" макс указать можно 12 типов юнитов, но по-настоящему можно тысячи типов юнитов добавить через shift. этот вариант работает у игрока, если барак принадлежит ему. Или этот контроль за бараком должен быть расшарен (однако с этим могут быть проблемы: контроль то общий, но невозможно заставить чужой барак тренировать юнита, если у владельца барака нет ресурсов)
Ред. MpW
» WarCraft 3 / Отображение, уровня исследования
можно сделать через продажу войск. Вы же в нейтральном магазине (доме-юните) хотите грейдить? Когда кто-то покупает dummy-юнита, можно узнать владельца. А следом и узнаем и принадлежность расы игрока, и к какому союзу и прочее. Можно еще произвести звук: "Исследование завершено!" а исследование можно изучить триггерно, там просто есть комманда "установить лв исследования"
Ред. MpW
» WarCraft 3 / Смена предметов в магазинах и конвектор текста
TextColorizer3.2
ARGB - Alpha/Red/Green/Blue - значение прописывают от 0 (0x0) до 255 (0xff). Альфа в варкрафте в описании текста не меняется, только в текстагах, на юнитах (цветовой код юнитов в мем хаке находил).
Ред. MpW
» WarCraft 3 / Триггерная голда
вот не объяснил, когда срабатывает триггер ChangeGold. Он записывает изменения голды.Срабатывает это событие раньше всех (досенения рабом голды в ратушу, покупки предмета, награды за убийство). Но позже спустя срабатывает одно из них, буквально сразу же.
Тк все события и действия однопоточные, то:
Если раб донес, это изменение уже записано в массиве ch. Из ch мы знаем что он донес 10 голды.
При продаже итема, можно узнать из ch стоимость итема.
При убийстве знаем из ch сколько награды получили.
запутаться невозможно логически, хотя триггер ChangeGold не нужен. можно было все вычисления сделать в самих триггерах. Но так совпало, что гораздо удобнее. И есть другие случаи изменения числа голды (подбора монетки, тренировки, исследования, строительство), поэтому это переходит нужное
Ред. MpW
» WarCraft 3 / Сужение зоны на тригерах
кажется там круг из даймиков или эффектов
k = C/L - это кол-во даймиков или кол-во промежутков
далее, зная это кол-во можно узнать и угловую скорость W в град
W = 360/k
Потом циклом пробегаете от 0 до k, прибавляя к тек углу A + на число W
» Crazy Dwarf Race / Crazy Dwarf Race
Ред. MpW
» Мир безумного / WarCraft III Reforged - WE (что хотите увидеть?)
Ред. MpW
» WarCraft 3 / Территория деревни
И тут у варкрафта что ли проблема - не может создать много молнии (не все молнии может успеть создать = не знаю почему, дебаг норм показывает. все координаты точек показываем норм), лимит операции (вряд ли)?
Ред. MpW
» WarCraft 3 / Как сделать так, чтобы при движении определенный герой терял -2
вот карта см пример Diod-а
Ред. MpW
» WarCraft 3 / Пак людей-ящериц
не знаю можно ли в эту группу перечислить скорпионов, бегемотов и слонов? ведь есть в варкрафте гигантские ящеры
» WarCraft 3 / Как сделать случайное событие?
set A = RandomInteger(0, 100)
if A < 50 then
событие 1
else
событие 2
endif
Ред. MpW
» WarCraft 3 / Защитник Windows и War3ModelEditor с mdlvis...
» WarCraft 3 / Создание новой точки для ожидания нейтральным юнитам
Ред. MpW
» WarCraft 3 / Создание новой точки для ожидания нейтральным юнитам
я тоже почему-то считаю что RecycleGuardPosition не нужна. Эта функция возвращает контроль ИИ. Эта возможно у игроков (0-11). У компьютера может быть не включена ИИ. Это наверное не за позицию, наверное какой-то другой смысл вложен в названии нативки
RemoveGuardPosition - отбирать контроль за юнитами. В основном мне нужно за войнами и героями. Они стоят на базе и никуда не ходят, только триггерными коммандами (приказами) можно управлять. Пробовал расшарить контроль за его войсками, управлял ими норм. Только вот рабы не всегда хотят мне служить, и убегают работать дальше. Естественно, я не отбирал контроль за рабами. В таких случаях, можно управления войском сделать триггерным. Будет такое умное войско. Иногда, когда бьют твоего соратника, бот-дебил не хочет помогать, своими делами занят (возможно какая тактика у него, но все же у меня выживалка. если лишимся одной из опорных точек - будет худо). Тут всегда нападает на базу всякая мелочь, и поэтому тактически разумно поделить войска на 2 части (этого же бот же не сможет сделать). Еще далековато ходят, новых-юнитов отправляет на помощь основным силам, бегут через леса, и там дохнут.
RecycleGuardPosition - иногда полезно вернуть. пускай бегает с войсками, развивает.
Ред. MpW
» WarCraft 3 / хочу изучать джассовый триггер но не знаю с чего начать
мне помогал JNGP. там есть библиотека функции. Еще можно конвентировать гуи в текст. Со временем отошел от гуи.
Ред. MpW
» Мир безумного / WarCraft III Reforged - WE (что хотите увидеть?)
» WarCraft 3 / ИИ не хочет строить здания
действие ИИ - ignore guard position
Ред. MpW
» WarCraft 3 / Полное отключение мультиборда ливнувших игроков
bj_ALLIANCE_UNALLIED_VISION противник с общим полем зрения
bj_ALLIANCE_NEUTRAL нейтральный
bj_ALLIANCE_NEUTRAL_VISION нейтральный с общим полем зрения
bj_ALLIANCE_ALLIED союзник
bj_ALLIANCE_ALLIED_VISION союзник с общим полем зрения
bj_ALLIANCE_ALLIED_UNITS союзник с общими полем зрения и общими войсками
bj_ALLIANCE_ALLIED_ADVUNITS союзник с общими полем зрения и общими войсками (этот параметр не очень понятен, но он то как раз и отвечает за продвинутый контроль за войсками. можете покупать и тренировать войска этого игрока, у вас будут открыты иконки юнитов (ранее в bj_ALLIANCE_ALLIED_UNITS это могло быть недоступным или невозможным, просто контроль давали и все). Также появляется мультиборд. В сценарии => кланы => "общие войска: все" - этот параметр тоже самое. Эту мульт нельзя обнаружить при тесте, если слоты союзников пусты).
ALLIANCE_PASSIVE союз о не нападении
ALLIANCE_SHARED_VISION общее поле зрение
ALLIANCE_SHARED_VISION_FORCED ???
ALLIANCE_RESCUABLE ???
ALLIANCE_SHARED_CONTROL общие войска
ALLIANCE_SHARED_ADVANCED_CONTROL общие войска: все
ALLIANCE_SHARED_XP общий опыт
ALLIANCE_SHARED_SPELLS заклинания действуют на союзников
ALLIANCE_HELP_REQUEST просьба о помощи (пинги?)
ALLIANCE_HELP_RESPONSE оказания помощи (скорее всего финансовая помощь, передача ресурсов)
Ред. MpW
» WarCraft 3 / Приказ отмены улучшения здания
» Мир безумного / WarCraft III Reforged - WE (что хотите увидеть?)