27

» WarCraft 3 / Нестандартная способность с "отталкиванием".

Если на триггерах только, я знаю только на jass:
xgm.guru/p/wc3/179127 простое движение
внизу ссылки на темы, где обсуждают ошибки. Там решение даны, подправить надо самим
xgm.guru/forum/showthread.php?t=53841 отталкивание посложнее
xgm.guru/forum/showthread.php?t=45368 отталкивание
27

» WarCraft 3 / Как сохранить в хэш-таблицу attacktype, damagetype, weapontype

quq_CCCP, вау а я не знал, что функцией GetHandleId можно из переменных типа ATTACK_TYPE_CHAOS вынимать числа, получил дебагом 5. Держи плюс ))
27

» WarCraft 3 / Как сохранить в хэш-таблицу attacktype, damagetype, weapontype

нет таких функции чтобы сохранить в хэш такие типы переменных как attacktype, damagetype, weapontype. Такое вообще не предусмотрено, и мало где можно использовать (проверить даже нельзя будет, нет таких условии, и еще у разных юнитов разные будут типы урона, атаки и брони). Но можно же по-другому, например использовать целочисленную
смотреть сюда
Например:
if типа юнита  == пехотинец (а пехотинец имеет обычную атаку) then
сохранить число 0
elseif типа юнита  == волшебница Альянса (магичка имеет маг. атаку) then
сохранить число 1
endif
Есть более совершенный способ, использовать хак-памяти, но требует знания jass
xgm.guru/p/wc3/179535 тема на сайте
www.hiveworkshop.com/threads/memory-hack.289508 основная тема на хайве
function SetUnitAttackType takes unit u, integer i, integer attacknum returns nothing
//типы атак (для 1-ой атаки, для 2-ой атаки) У юнитов 2 атаки
//установить тип атаки
function SetUnitAttackType1 takes unit u, integer i returns nothing
function SetUnitAttackType2 takes unit u, integer i returns nothing
//вычислить тип атаки
function GetUnitAttackType1 takes unit u returns integer
function GetUnitAttackType2 takes unit u returns integer
//внизу типы брони, точно не уверен, но одно отвечает за звуки, второе - за снижение урона
//тип брони, за звуки отвечает
function SetUnitWeaponType takes unit u, integer i returns nothing
function GetUnitWeaponType takes unit u returns integer
//тип защиты 
function GetUnitArmorType takes unit u returns integer
function SetUnitArmorType takes unit u, integer id returns nothing
по типу атаки и прочее сохранять целочисленную, если так уж хочется
27

» WarCraft 3 / Как триггерно отследить выбор игроком разрушаемого объекта?

Какие декорации? Пытаешься навести на дерево или что? Вот, если юниты выделены у игрока, и их наводишь на дерево или на бочок/стены, то можно отловить приказ. Но не все юниты наводятся на дерево (только рабочие или каменный голем у ночных эльфов), даже игрок без юнитов не может выбрать деревце.
Но обычно когда игрок просто щелкает и наводит на такие декорации как бочок или ворота, то никак это отследить нельзя Стандартным способом никак, такого события нет =(( Если надо делать невыделяемым, то можно переделать декор на дерево попробовать, но на ворота и бочок зачем такое делать?
27

» WarCraft 3 / Один предмет

видел где-то похожие темы и даже системы. Но что-то не могу найти. Но xgm-bot нашел одну тему.
Можно создать заранее заготовленный класс предметов, где будет рассортировано по классу. В одном классе будут мечи, в другом броня. Другая проблема в том, что у варкрафта всего 7 классов (постоянные, усиливащие, артефакты и др.), этого может быть мало, но и ячеек у героя не много - всего 6. Но думаю этого будет достаточно.
Чтобы классификации предметов стало больше - проблема устраняется базой данных, где записываешь в переменные с массивами Туда записываешь типы предметов. Еще можно использовать SetItemUserData, при создании заранее задаешь число. Каждое число - это класс предмета. Можно еще использовать здоровье предмета, а сам предмет будет неуязвимым. Не знаю можно ли создавать классификацию и добавлять в нее предметы.
А вот, чтоб увеличить слоты герою нужно делать систему. поищи на сайте, на форуме
при подборке проверяй тип предмета/классификацию предмета. Пробегаешь циклом от 1-6 сверяешь есть ли такой же предмет и дропаешь его. обычно все проще делается, во многих системах определенный класс предмета закреплен за определенной ячейкой.
27

» WarCraft 3 / После сохранения карты редактор JNGP закрывается

  1. Если имеет дело с cjass и vjass иногда для работы карты перед тестом нужно сохранить карту два раза. Иногда и одного раза хватает в некоторых случаях, в остальных случаях одного раза мало, чтобы код скомпилировался норм.
  2. В некоторых ситуациях бывает используется код xgm.guru/p/wc3/179535, который норм не компилируется. Поэтому используется новая версия компилирующей программы. Например pjass. Вставляется в папку jngp/jasshelper/pjass.exe Может не работать норм, потому что нужно отключить cjass
27

» WarCraft 3 / globals/ регионы

Talgar2, создай триггер, в котором при инициализации будут прописаны по-порядку ректы в глобалку.
oblast [0]= lvl 1 
oblast [1]= lvl 2
....
oblast [1]= lvl 90
//лучше бы создать область с помощью функции Rect, на карте создаешь область (ну чтобы заранее присмотреться как область укладывается на карте), смотришь какие у нее координаты, приписываешь в функцию Rect координаты. Область на карте удаляешь.
скобки круглые (), в скобках обычно записывают аргументы, если функция не берет аргументов, то значит ничего не берет.
например, call Init()
А вот {} - cjass и vjass, типа блок функции { открывает и } закрывает. А вот с void мало инфы, для удобства сделали. типа void = nothing, ничего не возвращает
Критическая ошибка может из-за того, что jngp не установлен? или не правильно что-то делаешь?
27

» WarCraft 3 / Пожалуйста, помогите с способностью!

DracoL1ch, это через редактор объектов или через хак? В РО я ставил такое значение, но ниже чем -1000000000 в редакторе не ставится. И при отрицательном значении крашится вар. Если это поставить в изучении (х, у), то крашится при нажатии красного плюсика (изучения). Если просто в используется (х, у), то при получении крашится. Надо будет в таблицах .slk или через хак попробовать ввести такие значения
27

» WarCraft 3 / Пожалуйста, помогите с способностью!

Засовываем змеиную ловкость в спелбук, а спелбук блокируем командой "Игрок - Enable/Disable Ability". В скрытый спелбук можно добавлять только пассиные способности. Ищи на тему как скрыть способность, иконку/кнопку способности. xgm.guru/forum/showthread.php?t=31722 И называйте норм тему
можно через хак, но требует определенные знания
function SetAbilityDisabled takes integer pAbility, integer count returns nothing
function GetAbilityDisabledCount takes integer pAbility returns integer
function SetAbilityHidden takes integer pAbility, integer count returns nothing
function SetAbilityDisabled2 takes integer pAbility, integer count returns nothing
function GetAbilityDisabled2 takes integer pAbility returns integer
function ShowAbilityById_Main takes integer ConvertedHandle, integer d returns nothing
function HideAbilityButton takes unit u, integer id, boolean hide returns nothing
27

» WarCraft 3 / Тип атаки

В хаке есть функции переключения атаки (1 атака, 2 атака). В РО придется настроить атаки (цели атаки, тип атаки). Еще есть включения, можно включить одну из двух, а можно сразу одновременно две атаки включить. Это получше чем с орбом, ибо потом другой какой-нибудь орб не сможешь юзать. Есть отдельные функции смены типа атаки и защиты. Короче можно всю атаку подстроить (урон, кол-во костей, урон 1 кости, скорость снарядов и прочее). Практичски много чего вкусного и интересного есть
смотреть сюда
//тип защиты 
function GetUnitArmorType takes unit u returns integer
function SetUnitArmorType takes unit u, integer id returns nothing
//защита
function GetUnitArmor takes unit u returns real
function SetUnitArmor takes unit u,real r returns nothing
//атаки (1 атака, 2 атака, или обе атаки)
function SetUnitAttackType takes unit u, integer i, integer attacknum returns nothing
//тип атаки
function SetUnitAttackType1 takes unit u, integer i returns nothing
function SetUnitAttackType2 takes unit u, integer i returns nothing
function GetUnitAttackType1 takes unit u returns integer
function GetUnitAttackType2 takes unit u returns integer
//
function SetUnitWeaponType takes unit u, integer i returns nothing
function GetUnitWeaponType takes unit u returns integer
27

» WarCraft 3 / Хак на память Warcraft3

DracoL1ch, я просто не шарю в этом =(( кода много просто. это надо проверять больше 0, а чем так варику не нравятся нули. И еще вопрос что такое вот 0x90, умножают на нули
27

» WarCraft 3 / Хак на память Warcraft3

quq_CCCP, А вот функции которые задают длительность баффа.
    local integer  pBuff = GetUnitAbility( u, 'B00A' ) + 0x90  

    call WriteRealMemory(ReadRealMemory(pBuff)+0x4,SetRealIntoMemory(текущее время + 15.00)) // задаёт длительность
    call WriteRealMemory(ReadRealMemory(pBuff)+0x8,SetRealIntoMemory(текущее время  + 10.408)) // Задает время после которого бафф начнёт мигать
Жаль что нормально выудить игровое время не получается, поэтому юзаем таймер который мы запускаем при старте карты на 99999999999.00 сек., и по нему мы будем узнавать текущее время, который кстати будет отставать относительно игрового примерно на 0.408 сек.
После 20-минутного копипаста, сохранил карту. Запустил карту, но как только произошел тот момент, когда должен код работать, у меня фаталит =((. Пример, божественный щит
Загруженные файлы
27

» WarCraft 3 / Событие

То что ты пытаешься сделать - отловить чат. Поищи в интернете.
смотреть сюда
Например, игрок вводит текст типа -gold X. где Х - кол-во голды
Событие - Игрок 1 (Красный) types a chat message containig "текст" as ===
Вместо === дают два выбора "подстрока" и "точное совпадение"
точное совпадение - точно, как ты указал в тексте, никак не иначе. Это не то, что тебе нужно. А подстрока (англ. substring, это текст, который ты указал в событий). Может находится впереди, в серединке, или даже в конце.
см. в условии раздел строка (англ. string) - substring
условие - Substring (Entered chat string, 1, 6) == "-gold "
функция Substring берет определенное кол-во символов введенной строки в подстроку. Например, нам нужно знать, что в введенной строке подстрока "-gold " находится впереди, не сзади (то есть от 1 до 6 символов, включая пробел).
set U= S2I (Substring (Entered chat string, 7, 16) )
А остальные символы от 7 до 16 могут быть цифрами. Но подстрока - строка. И ее надо конвентировать, то есть превратить в целочисленное число. Есть всякие специальные команды, вот нам нужна S2I. И даем золото игроку.
Загруженные файлы
27

» WarCraft 3 / Поменять стрелки на WASD

Стандартным способом нельзя. Используют горячие клавиши способностей юнитов, только тогда когда юниты выделены игроком. Не знаю можно ли отловить нажатие Enter игроком, и снять выделение с юнита. Но по-моему когда ты чатишься с другими игроками, то есть пишешь в окошко, ты не можешь хоткеи юзать, разве не так?
27

» WarCraft 3 / Проблема с невероятно простой способностью.

Про использовании метода глобалок с массивами не нашел статью (МУИ). Но там не трудно реализуется, но объяснять лень. Запустил заклинание, запомнил по номеру массива - закончил, удалил и очистил по номеру массива. Недостаток, что приходиться перебирать циклом все массивы, чтобы найти нужный номер массива, хотя проще можно, но ладно. xgm.guru/forum/showthread.php?t=55275
Можно использовать вместо этого хэш-таблицы, хэш-таблица - типа как электронная таблица с ячейками, имеет двухмерный массив, типа 1 массив - как строчка/адрес, 2 массив - как столбик/ряд/номер. В ячейке можно сохранить число, строку, объект.
Вэйты - то же недостаток, работает в действии Action, типа паузит поток. В некоторых других функциях (не в действии) пахать не будет (см. пример карты). xgm.guru/forum/showthread.php?t=57352
вот
Загруженные файлы
27

» WarCraft 3 / синтаксис

зависит от разных обстоятельств: может нет проги jgnp, компилирующей код; не настроен нормально jngp; не правильно компилируешь код (надо чтоб кириллицы не было); нету обновлении, нет библиотеки, а мб из-за ретурн бага (версия варика ниже 1.24). Перед тестом пробуем сохранить
Учим cjass и vjass, но перед этим должны хорошо знать jass
xgm.guru/p/wc3/we-help здесь мануалы и программы скрипта найди
xgm.guru/p/wc3/179535 для работы vjass, скачиваем pjass, заменяем файлик в папке jasshelper проги jngp. Если не работает, отключаем cjass.
можно короче компилировать код, потом открыть файл формата j попробовать mpq. Там должен код в нормальном jass-коде отображаться.
27

» WarCraft 3 / Перемещение области.

Если раскрыть события входа, выхода в область, то там событие действует не на область, а на регион. Область добавляют в регион xgm.guru/forum/showthread.php?t=59215 но перемещение будет не таким, как можете ожидать, оно можно слегка кривым.
27

» WarCraft 3 / Проблема с невероятно простой способностью.

Talgar2, потому что надо не Picкed unit() а Maching unit() потому что это фильтр (условие) Как происходит все, есть специальные функции выбора, они выделяют всех юнитов в группу, а фильтр отсеивает не нужных при выборе. Потом происходит ForGroup, то есть перебор. На самом деле, отдельный поток на каждого юнита вызывает этот ForGroup. Там в фильтре обращают конкретно не к Picкed unit, а к Maching unit. Picкed unit - в FrorGroup.
pricoluwa, хотя не, вэйт не норм работает в группе. У мебя получилось так дал способность всем, и все. Видимо вэйт работает только в действий. А потоки видимо обрубил.
сделал на jass, и это не стол заказов
Загруженные файлы
27

» WarCraft 3 / Проблема с невероятно простой способностью.

pricoluwa, используй локалки и таймеры + хэш-таблица, или переменные массивы (типа как муи)
pricoluwa, что совсем что ли не работает? очевидно если ничего не выводит на экран, значит не работает
pricoluwa, хотя с вэйтом я ошибся. Там выборка (ForGroup) для каждого юнита отдельный поток шлет. Должно норм работать у тебя на скрине
27

» WarCraft 3 / Проблема с невероятно простой способностью.

Что за выделенная боевая единица? может выбранная? мне кажется из-за вэйтов (ожидать) может быть не работает? там обрывает поток триггера. Вот например, есть 5 юнитов и герой, применяет он заклинание, потом работает триггер, ты выбираешь всех юнитов рядом с кастером. Потом идет перебор, или проще сказать цикл, триггер сначало выбрал одного, добавил ему способность и потом... БАХ, у триггера пауза на 15 сек., то есть только у одного твоего юнита есть эта способность. Прошло 15 сек. триггер врубился, и затем удаляем у юнита способность. И затем происходит со следующим юнитом те же действия, и так будет делать пока не переберет всех юнитов.
лучше правильно структуру триггеров сделай. Создаем переменную типа группа С.
установить группа С = выбираем всех юнитов
отряд - выбрать каждую боевую единицу в группе С
  добавить скилл
ждать 15 сек.
отряд - выбрать каждую боевую единицу в группе С
  удалить скилл
удалить группу С
Может быть лучше использовать способность друида-медведя? такая же копия. Называется рев
Юзай дебаг. выводи на экран текст, вот в самом начале провел тест, работает ли триггер с такими событием и условием, затем проверяй также с группой. При выборе группы тебе должно выскочить столько строчек, сколько и юнитов. Если выборка не работает, то нужно см. что там. Или выводи на экран кол-во юнитов в отряде
р
27

» WarCraft 3 / Есть ли какая то статья по использованию 13-16 игроков?

nvc123, а как вырубить ИИ у нейтралов то? юниты, привязаны к точке их создания. Через определенное время и расстояния они возвращаются (это все указано в константах). Можно сбить эту точку появления xgm.guru/forum/showthread.php?t=46038 Можно отключить в константах или сбить точку появления, недостаток такого способа в том, что он будет агрится и без конца по всей карте гнаться за тобой.
функцией RemoveGuardPosition вырубить нельзя это. Мне кажется ничего не делает она, эта функция полезна на юнитах игроков 0-11, где включен скрипт ИИ. Тестил.
А так можно ловить и перебить этот приказ, и все. И еще юниты нейтралов сами по себе катастрофа.=) Я так и не решился делать себе загоны, отгонять их и прочее.
Загруженные файлы
27

» WarCraft 3 / Скорость атаки

а вот это читал? там в поиске много такого
вот системы:
можно использовать новый ретурн баг (правда там нет на зеленого бонуса атаки)
смотреть сюда (как я понял)
формула xgm.guru/forum/showpost.php?p=1299685&postcount=7:
Расстояние = Скорость * время
Чтобы найти время
время = Расстояние / скорость
Расстояние и время берется за единицы типа 100%
а 0.02% - за каждую 1 ед. ловкости (прописано в константах)
А вот эти все проценты прибавляют к скорости
Можно выявить время между между замахом и нанесением урона, то вот не уверен будет ли это считаться КД. Или мб между двумя атаками. Не понимаю вот мне кажется, что КД атаки и время атаки не одно и тоже.
мне кажется (мб ошибаюсь), что КД - ударил и будет отдыхать, типа как у абилок, а время атаки - насколько быстро ударил, анимация атаки будет быстрее (снарядов и прочее). Но КД тоже влияет на скорость, дает перерыв к след. атаке. Из-за этого путаешься
Не могу понять анимация атаки и анимация снарядов как связаны со скоростью?
что-во здесь в двух ссылках пишут про анимацию
еще можно на скорость снаряда обратить внимание, если стреляет издалека
в триггере есть функция с изменением скорости анимации, она дает быстро или медленно проигрывать любую анимацию, даже анимацию атаки, это нужно у модели смотреть название (например. крит. удар орка-самурая). Но не знаешь какое значение давать анимации

И у скорости есть лимит на бонусы %, больше 400% нельзя делать
27

» WarCraft 3 / Система складывания Предметов

Вот полностью рабочая и норм, еще кучу примеров покажу тебе с двойным нажатием
блин не то добавил, удалить бы
Загруженные файлы
27

» WarCraft 3 / Невосприимчивость к стихиям

Можно. придумывать свою систему, где взаимодействуют система урона и триггерные заклинания вместе. Короче заклинания триггерно полностью реализуются, или можно станд. скиллы юзать, но тогда как-то нужно запомнить или дать знать, что какой-то определенный скилл применился. Также поиграйся с целями заклинаний xgm.guru/p/wc3/wc3targets
27

» WarCraft 3 / Передать здание игроку X

Ну можно по-разному. Главное понять от чего отталкиваться.
Создаем две переменные: одна целочисленная К и вторая целочисленная G с массивом.
событие - инициализация
действие - цикл А от 1 до 6 //это игроки 1-6 -=1 клан или можно от 1-3, у тебя же 3 первых игрока
  if  игрок (A) = комп and игрок (А) = играет then
	К=К+1 //кол-во игроков
	G (К) = А //номер игрока, в этой ячейке хранится номер игрока
 endif
также можно было создать группу игроков, и при инициализации засунуть и использовать ее, но не важно.
Вызываем
I=Random (от 0 до К) //короче I - это целочисленная переменная, К - общее кол-во игроков
И передать здания Игрока Х игроку ( G (I) )