RSQR, в письме с описанием мем-хака была указана исчерпывающая техническая информация о его работе и причинах его появления, а также о том, как его можно исправить. Разработчики убрали возможность помещать исполняемый байт-код напрямую в память, однако возможность напрямую читать память оставили, что можно расценивать как официальную поддержку этого функционала. Более того, осталась возможность записывать что-либо напрямую в память, однако исполняться оно будет только внутри виртуальной машины Jass. Технически, динамичные хоткеи реализуемы посредством такой записи.
Про изменения в списке нативных функций пока что ничего не известно, но многое указывает на то, что их список будет расширяться. Просто наберитесь терпения =)
BrEd Pitt, имхо, примерно так и есть. Ещё вполне возможен вариант, что какой-нибудь достаточно высоко сидящий товарищ из близарда предполагал заикнуться про разработку Wc4, но топ-менеджмент заявил, что жанр ртс в виде Sc2 плохо себя показал и Wc4 не будет, и этот товарищ нашёл вот такой вот выход
Более корректный способ для этого расширение нативного API.
Ятп, он про это и говорит, просто несколько эмоционально
Я думаю, что они до этого дойдут когда разберутся с основными проблемами старой архитектуры вара, чтобы подогнать её под более современные реалии и требования.
сегодня карты не качают, а в 90% их ставят на боты
Действительно, 10% пользователей - статистическая погрешность, не более.
Ну и тебе должно быть весьма очевидно, что пока у близов есть планы на игру, платформа будет считаться защищённой только если близы сами и будут этих ботов контролировать. Предлагаю целиком конвертировать дисскусию на эту тему на хайв и перестать срать на хгм.
Ну и да, записывать в память - это очень крутая абилка. Если оно тебе не надо, так и проходи мимо. А мне надо, вот и распинаюсь. Хейтеры мх похожи на бабок против ГМО - нихера не понимают, им это не надо, значит, правильно, что запретили.
Мне нравится концепция мх и его возможности, некоторые из них я бы с удовольствием использовал, но черви в моей системе мне не нравятся больше, чем нравится мх. Распинайся - не распинайся, но голос одного человека никак не повлияет. Лучше побереги нервы =)
А как они узнают? ты запустил свою кастом карту, и сказал что делать виртуальной jass машине...
Концептуально BNet2.0 хостит карты сам, а там предварительная проверка в контейнере прекрасно имплементится.
от админа, который якобы переписывается с биззард
Без "якобы", видел пруфы.
Пока они криво заткнули запись в память
Почитай хайв ещё раз, они как раз-таки нормально заткнули.
DracoL1ch, твои полыхания, кстати, мне вообще непонятны. Чтение памяти напрямую никто не закрывал, причём по просьбе твоего товарища по ресёрчу в сторону мем-хака. Через баннеры в интернете вишмастер уже весьма давно не дарится, спасибо развитию браузеров и - как ни странно - интернета. Высказывания про "вылезание за скрипты" на фоне твоего последнего поста в "способ оглушить" выглядят забавными, но не более.
Если ты даже после трёх ответов на хайве не понял, почему возможность записи в память было необходимо выпилить как можно скорее, то и здесь не поймёшь, так что распинаться никто не будет.
Ну и тебе уже сказали, что у парней там уже есть роадмап и они начали наиболее логичным образом: закрыли все найденные критические дыры и озаботились нормальным средствами доставки контента (патчей). Просто попробуй быть немного терпеливее и научись сдерживать эмоции, и ты многого достигнешь.
Алсо, это не хайв, и за явные попытки оскорблений здесь ловятся муты.
Скорее всего это связано с ремастером, который будет продаваться отдельно, но может ещё какой контент выпустят
Я где-то на сайте после выхода 1.26a писал, что такие действия с высокой вероятностью являются признаком начала работы над ремастером, а после ремастера СК1 это стало очевидным. Появление подобной информации было просто вопросом времени.
это огромные инвестиции.
AFAIK, на данный момент там что-то четыре человека плотно Варкрафтом заняты, и используемое железо никуда не девается. Вот то, что разраб заикнулся про "Sc2 level graphics" - куда более интригующий момент, значит уже готовятся артовые мощности.
Да успокойтесь вы уже, неугомонные искатели правды, влюблённые в "стандартные бафы". Если непонятно, как заменить так нелюбимую вами паузу на приказ, то пожалуйста:
раскрыть
library StunUnit initializer Init
{
private timer periodicTimer = CreateTimer() // Can be replaced with main map timer
private unit unitsStack[]
private effect effectsStack[] // Stun effect storage
private float timeRemaining[] // Time of stun left
private int stackCounter = 0
#define private TICK_PERIOD = 0.05
#define private STACK_LIMIT = 8190
#define private STUN_EFFECT = "Abilities\\Spells\\Human\\Thunderclap\\ThunderclapTarget.mdl"
#define private ORDERID_STOP = 0xD0004
// Looking for id of specified unit in stack
private int StackSearch(unit givenUnit) {
int i = -1
while(i++ < stackCounter) {
if (givenUnit == unitsStack[i]) {
return i
}
}
return -1
}
// Add unit to stack with overflow check
private void StackPush(unit givenUnit, float duration) {
if(stackCounter < STACK_LIMIT) {
unitsStack [stackCounter] = givenUnit
effectsStack [stackCounter] = AddSpecialEffectTarget(STUN_EFFECT, givenUnit, "overhead")
timeRemaining[stackCounter] = duration
stackCounter++
} else {
BJDebugMsg("Stunned units stack overflow!")
}
}
// Remove unit from stack
private void StackPop(int id) {
DestroyEffect(effectsStack[id])
stackCounter--
unitsStack [id] = unitsStack [stackCounter]
effectsStack [id] = effectsStack [stackCounter]
timeRemaining[id] = timeRemaining[stackCounter]
unitsStack [stackCounter] = null
effectsStack [stackCounter] = null
timeRemaining[stackCounter] = 0.0
}
void StunUnit(unit givenUnit, float duration) {
int stackedUnitId = StackSearch(givenUnit)
if (stackedUnitId == -1) {
StackPush(givenUnit, duration)
} elseif (timeRemaining[stackedUnitId] < duration) { // <=!!
timeRemaining[stackedUnitId] = duration
}
}
private void TimerCallback() {
int i = -1
while(i++ < stackCounter) {
timeRemaining[i] -= TICK_PERIOD
IssueImmediateOrderById(unitsStack[i], ORDERID_STOP)
if (timeRemaining[i] <= 0.0) {
StackPop(i)
}
}
}
private void Init() {
TimerStart(periodicTimer, TICK_PERIOD, true, function TimerCallback)
}
}
нужно самому вести учет навешанных и снимаемых пауз
Ты удивишься, но умение следить за результатами выполнения кода из этого самого кода в принципе полезный навык, если ты планируешь что-нибудь помимо варкрафта любить. В коде выше специально указал место, где этот самый "учёт" происходит вот такими комментами: <=!!.
минусы болта
Возня в РО, даммикаст.
Постарайтесь больше не бампать вопрос, ответ на него уже был дан, а претензии к паузе были нивелированы сим постом.
Если ты внимательно посмотришь на код мимо PauseUnit, то заметишь, что он рассчитан на использование в качестве единственного источника станов на карте и учитывает возможность нескольких последовательных станов. Ну и офк никто не мешает в TimerCallback() воткнуть приказ "stop" для юнитов из стека, убрав действия с паузой. наезд, конечно, аргументированный, но по сути это тупо копипаст из одной моей карты, где использование паузы абсолютно оправдано \о/
quq_CCCP, если ищется способ не использовать способности для реализации оглушения, то, по моему убеждению, целью является отказ от дефолтных способностей в принципе => это не имеет значения.
а не легче будет в начале игры таймером создавать юнитов,дамаиков и тдд + ещё создать юнита которому дать все способности ("таймером естественно")а потом всё это дело дружно удалить
Не легче, загрузка карты должна быть достаточно быстрой, иначе второй раз игроки в неё играть уже не пойдут.
Обычно делается так, что предзагрузка данных героя выполняется только тогда, когда он появляется на карте. Для того, чтобы он не был подгружен при запуске карты, достаточно не вызывать в начале игры никаких функций, связанных с героем или его способностями.
Nighty, ЕМНИП проходимость считается в рантайме, так что или делать точно так, как описано в статье, или делать через код, под катом вся нужная инфа:
pathing API
constant pathingtype PATHING_TYPE_ANY = ConvertPathingType(0)
constant pathingtype PATHING_TYPE_WALKABILITY = ConvertPathingType(1)
constant pathingtype PATHING_TYPE_FLYABILITY = ConvertPathingType(2)
constant pathingtype PATHING_TYPE_BUILDABILITY = ConvertPathingType(3)
constant pathingtype PATHING_TYPE_PEONHARVESTPATHING = ConvertPathingType(4)
constant pathingtype PATHING_TYPE_BLIGHTPATHING = ConvertPathingType(5)
constant pathingtype PATHING_TYPE_FLOATABILITY = ConvertPathingType(6)
constant pathingtype PATHING_TYPE_AMPHIBIOUSPATHING = ConvertPathingType(7)
native IsTerrainPathable takes real x, real y, pathingtype t returns boolean
native SetTerrainPathable takes real x, real y, pathingtype t, boolean flag returns nothing
Через код весьма геморройно, хотя способы упростить себе задачу всё-таки есть (выставлять по типу текстуры ландшафта, по высоте ландшафта, по позициям разрушаемых, etc).
allocate() используется внутри статичного метода и возвращает лишь индекс новой структуры
Технически верно, но на практике использовать .allocate() есть смысл только при перегрузке .create() (равно как и .deallocate() только при перегрузке .destroy()). Собственно, согласно документации, для того эти методы и существуют.
» WarCraft 3 / Важная информация об обновлении 1.28
» WarCraft 3 / Важная информация об обновлении 1.28
» WarCraft 3 / Важная информация об обновлении 1.28
» WarCraft 3 / Важная информация об обновлении 1.28
Ну и тебе должно быть весьма очевидно, что пока у близов есть планы на игру, платформа будет считаться защищённой только если близы сами и будут этих ботов контролировать. Предлагаю целиком конвертировать дисскусию на эту тему на хайв и перестать срать на хгм.
Распинайся - не распинайся, но голос одного человека никак не повлияет. Лучше побереги нервы =)
Ред. Clamp
» WarCraft 3 / Важная информация об обновлении 1.28
» WarCraft 3 / Важная информация об обновлении 1.28
quq_CCCP:
» WarCraft 3 / Важная информация об обновлении 1.28
Ред. Clamp
» WarCraft 3 / способ оглушить
» WarCraft 3 / способ оглушить
» WarCraft 3 / способ оглушить
» WarCraft 3 / Счётчик времени
» WarCraft 3 / способ оглушить
» WarCraft 3 / [vJass] Основы работы со Структурами (Structs)
» WarCraft 3 / Удвоение постепенного движения (нужна небольшая помощь кодера)
Ред. Clamp
» WarCraft 3 / способ оглушить
Ред. Clamp
» WarCraft 3 / Вопрос о функциях
» WarCraft 3 / Отключаемая аура
» WarCraft 3 / Как правильно инициализировать способности и юнитов в массиве?
Обычно делается так, что предзагрузка данных героя выполняется только тогда, когда он появляется на карте. Для того, чтобы он не был подгружен при запуске карты, достаточно не вызывать в начале игры никаких функций, связанных с героем или его способностями.
Ред. Clamp
» WarCraft 3 / Отключаемая аура
Ред. Clamp
» WarCraft 3 / Альтернативный способ наложения карты путей
» WarCraft 3 / vJass: .create () и .allocate () в чем разница?
Ред. Clamp
» WarCraft 3 / [vJass] Основы работы со Структурами (Structs)