29

» WarCraft 3 / не срабатывают триггеры инициализации (или вообще триггеры)

при замене инициализации карты на 1сек. elapsed time, все работает, но как мне вернуть, чтоб все работало с инициализации?
При инициализации не запускаются функции, которые не могут работать корректно или вообще не работать при инициализации "Map Initialization". В этих функциях описано внизу, что они не работают при "Map Initialization". Эти функции работают в потоках триггеров, которые были запущены от событий ну (или в jass, в функциях, вызванных потоком таймера).
И вообще лучше покажите код или скриншот того триггера, который инициализирует всё.
29

» WarCraft 3 / Как конвентировать эти функции, чтобы заработали?

Steal nerves, по сути хендл как бы указатель(дескриптор), UINT32 или UINT64 в зависимости от арх. проц. ВМ. Он хранить адрес памяти вроде на переменную типа, в данном случае на декорацию. Просто молнию удаляли по указателю, потом это метелица исправила. В общем через этот баг удаляло декорацию по адресу, что возможно опасный вызов..
Так что тебе придётся рыться в этом мусоре и перепиливать на лад патча 1.26+, в данном случае можно будет использовать UserData и hashtable; Вот кеш(gamecache) не рекомендую.
Save\Load$type$Handle() Для хендл типов destructable. unit и т.д. (скорее всего ты знаешь)
29

» WarCraft 3 / Как конвентировать эти функции, чтобы заработали?

GetHandleId(handle) обратно не вернёшь.
А есть же Get\SetUnitUserData || Set\GetItemUserData, и такая вещь как структура с ними тоже хорошая манипулаяция. Есть такая штука, которой не нужен хеш, ну допустим образно "GetHandleId() - HANDLE_POS_UNIT (0x100000). " и получает индекс массива к которому был закреплён юнит. Но зачем такой изврат? Когда есть хеш таблица, или структура и UserData...
29

» WarCraft 3 / не срабатывают триггеры инициализации (или вообще триггеры)

Если вы пишете триггер на Jass, то могло их оборвать следующие
  • Не было выхода цикла внутри функции инициализации
  • Возможно вы поставили отрицательное значение индексу массива
  • Скорее что-то дизсенхронизировало и обломало потоки
Если просто гуи
То некоторые функции не работают при инициализации триггера ( используйте однократный таймер с периодом 0.00 или 2.00 )
29

» WarCraft 3 / multiboard

Казалось бы, теперь ширина всего multiboard должна быть равна 50%, (т. к. это ширина самой широкой строки). Но на деле мы имеем multiboard , ширина которого равна 10%. Потому что, ширина multiboard высчитывается по ширине первой строки.
А что мешает высчитать процентное соотношения для 1 символа, а почему бы не с делать и 1 строку 25% 25%. И просчитывать сколько символов нужно допустить для 5%, если ты конечно хочешь чтобы слова так же сокращались, так же как при пяти 5%. Ибо нет такой функции которая бы тупо меняла ширину именно всей доски.
29

» WarCraft 3 / Как скрыть определенный нест.обьект в world editor?

AntiMage:
nvc123, получилось) в ро его не видно, теперь появилась новая проблема карта загружается медленнее слк, варкрафт долго загружает, я всего то вытащил из War3Patch.mpq - Units\AbilityData.slk и импортировал внутри карты
Ужс, достаточно было 1-ой строки в slk, которая бы скрывала сие данную абилку. А вы загрузили всё вместе со стандартом..... Всё равно сначала все загружается из War3Patch, а потом из карты...
29

» WarCraft 3 / Количество текстур

Принятый ответ
  1. Для начала измените настройки в доп. ландшафте. Да так чтобы галочка оставалась. Потом сохранить. Рекомендую перезагрузить карту или WE после таких действий.
1.
  1. Запустите JPNG и нажмите на пункт меню "Edit Tileset" в разделе Extensions
2.
  1. Нажмите на кнопку ок, полсе того как выберите нужные тайлсеты. После этого не нажимайте кнопку сохранить, иначе можете сбить сохр. настройки сделанные через Extensions->Edit Tileset; Затем просто закройте WE JPNG
3.
  1. Заново запускаем WE JPNG, открываем — и вот итог наших действий.
4.
Загруженные файлы
29

» WarCraft 3 / multiboard

Правильно ли я понял, что если настроить ширину первой строки на 0.25, то ширину второй строки не сделать больше 0.25? Можно как-то пофиксить?
В GUI SetItemWidth делает ширину для каждой ячейки.
// MultiboardSetItemsWidth(multiboard,real) - устанавливает для всех ячеек одну ширину.
call MultiboardSetItemsWidth(udg_MyBoard,0.25)
// MultiboardSetItemWidth(multiboarditem, real)  - для 1 ячейки..
29

» WarCraft 3 / Триггерные заклинания

Принятый ответ
  1. Для этого есть xgm.guru/p/wc3/needspells
  2. Рекомендую прочитать статьи по этому поводу.
3.
  1. Или такой пример
local unit c = GetTriggerUnit()
local unit tg = GetSpellTargetUnit()
//local real x1 = GetUnitState(c, UNIT_STATE_MAX_LIFE )
//local real x2 = GetUnitState(c, UNIT_STATE_MAX_MANA )
//local real x3 = GetUnitState(c, UNIT_STATE_MANA )
//local real z = I2R(GetHeroAgi(c, TRUE ))
//local real z1 = I2R(GetHeroAgi(c, TRUE ))
//local real z2 = I2R(GetHeroStr(c, TRUE ))
//local real z3 = I2R(GetHeroInt(c, TRUE ))
local real zall = I2R(GetHeroInt(c, TRUE ) + GetHeroStr(c, TRUE ) + GetHeroAgi(c, TRUE ))
call UnitDamageTarget( c, tg, zall, true, true, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS )
set c = null
set tg = null
И вообще сформулируйте вопрос правильнее..
Загруженные файлы
29

» WarCraft 3 / про boolexpr, filterfunc...

code тип принимающий только наименовании функция через ключ function;
ей не требуется знать возвращает ли функция булево или нет. Она тупо отсылку к функции поставляет. Проще говоря он передаёт ссылку на функцию.
Однако для фильтра(условия(condition)) нужна только функция с логическим типом, ведь он проверяет допускать ли предмет или боевую единицу для перечня или согласованна ли она для выполнения триггера по событию, которое содержит данный фильтр.
По сути тупо ей нужен логический тип для подтверждения дальнейший действий.
Поэтому лучше не извращаться с этим, если вы не применяете для каких либо значимых целей. А для исполнения действий нужна чисто без параметров и чтобы не возвращала ничего, например для TimerStart, TriggerAddAction
И как сказал quq_CCCP, такая ваша конструкция может сделать ошибку или прервать поток.
И да это ошибка уже парсера(как сказал quq_CCCP~~) самого JASS. Т.к. те проверяются из-за того, что те функции служебные, а ваша простая.
Лучше сделайте так:
function abc takes nothing returns boolean
	return not IsUnitType(GetFilterUnit(), UNIT_TYPE_HERO) // к примеру или другой ваш пример...
endfunction
29

» WarCraft 3 / Герой и обычный юнит

Принятый ответ
Вот так можно в РО. Или в имеете ввиду триггерно?
Загруженные файлы
29

» WarCraft 3 / Не мгновенный найм юнита

Принятый ответ
Это вам надо пилить системку, которая будет отлавливать пустышки(дамми) - показывать % готовности перед выходом наёмника, и потом уж выпускать нанятого на свободу. Это вам не обыкновенный наём единицы. Ну можно ещё замутить дамика с отменой найма единицы.
29

» WarCraft 3 / Скрыть иконку героя сверху или удалить с него геройность

ClotPh, Вот такая функция есть, только она распространяется на все иконки героев, подконтрольных игроку.
Хотя на вряд ли это будет вам полезно.
// Совместимо с GetLocalPlayer(), вне его скроются у всех игроков иконки своих героев.
call SetReservedLocalHeroButtons(1) = показать
call SetReservedLocalHeroButtons(-1) = скрыть
29

» WarCraft 3 / как изменить время суток в редакторе варкрафт 3 ледяной трон

Если ты имеешь ввиду в редакторе самой его эмуляции.
Если это стоит JPNG с XGM то никак, всегда будет ночь.
Со стандартным JPNG хайва можно.
29

» WarCraft 3 / Ошибка в коде

ScopteRectuS:
или уберите:
local boolexpr b = Condition(function Trigger_Conditions)
call DestroyBoolExpr(b)
set b = null
Замените call TriggerAddCondition(TRIGGER, b) на call TriggerAddCondition(TRIGGER, Condition(function Trigger_Conditions))
Это помогло. Но почему так? Там же утечка создаётся.
Дело в том, что вы удаляли то, что проверяло условие. Это вам не ректы и локи для региона.
если вы используете одно и тоже условие для триггеров то лучше сделать глобальным.
boolexpr BXPR_0000 = null
где-нибудь создаёте.
И добавляете в каждый нужный триггер, если не хотите расходовать лишнюю память на одно и тоже условие.
Ну есть и другой способ добавить в Trigger_Actions
if (условие) then
код вызова внутри
endif
private function Trigger_Actions takes nothing returns nothing
   if return LoadStr(HASHTABLE, GetSpellAbilityId(), StringHash("abil_id")) != null then
        call BJDebugMsg(RAW2S(GetSpellAbilityId()) + "str != null")
        call ExecuteFunc(LoadStr(HASHTABLE, GetSpellAbilityId(), StringHash("abil_id")))
    endif
endfunction
29

» WarCraft 3 / Ошибка в коде

Принятый ответ
private function Trigger_Conditions takes nothing returns boolean
     return LoadStr(HASHTABLE, GetSpellAbilityId(), StringHash("abil_id")) != null and LoadStr(HASHTABLE, GetSpellAbilityId(), StringHash("abil_id")) != ""
endfunction
попробуйте так, или уберите:
local boolexpr b = Condition(function Trigger_Conditions)
call DestroyBoolExpr(b)
set b = null
Замените call TriggerAddCondition(TRIGGER, b) на call TriggerAddCondition(TRIGGER, Condition(function Trigger_Conditions))

Добавлю
Ещё бывает что значение из хеш-таблицы строкового показывало "(null)";
29

» WarCraft 3 / Ошибка в коде

private function Trigger_Conditions takes nothing returns boolean
     return LoadStr(HASHTABLE, GetSpellAbilityId(), StringHash("abil_id")) != null
endfunction
Лучше так, меньше утечек
Из "private function Init takes nothing returns nothing"
 local boolexpr b = Condition(function Trigger_Conditions)
//....
call DestroyBoolExpr(b)
set b = null
Вот этот участок немного сомнительный, хотя хз мож так надо...
HASHTABLE - иницилизированна ли данная хеш таблица?
29

» WarCraft 3 / Нарезалка LoadingScreen'а (теперь с интерфейсом!)

Конечно это хорошо, но лучше было бы сразу конвертом в *.tga. И вообще зачем данные об отладке pbd?
Я просто пользуюсь двумя программами gimp'ом с blplab делаю один fullscreen.blp 512x512 ну или 1024x1024 сопрягаю уже с готовой спец. loadscreen.mdx... И ничего не нарезаю и вес поменьше, чем суммарный.
nvc123:
один вопрос
нафига?
Вот тут я согласен.
29

» Кузня Волчачки / [Заметка №3] Черновик Kjass

Поскольку в посте упоминается именно C++, то тут все-же лучше анрил. А юнити это шарпы и совсем другая песочница.
Понятно. Хотя я иногда видел посты "противостоянием" фракций «unity» и «unreal» в других источниках. Если отбросить разницу в песочницах, и прочем. А по общему показателю они равны, или один из них - всё таки лучше.

На счёт kJass: Я просто хотел более менее упростить. Хотя пока я пришел к выводу: Что это не нужно, изобретения велосипеда. Прежде чем делать всё это я решил пока ещё обдумать и взвесить:
Что мы имеем на данный момент:
  1. На хайве вышла новая сборка 1.5f ~ месяц назад.
  2. Близзарды выпустили патч 1.27б с на 1 зубок,
  3. Нужность изготовления нового парсера псевдоскрипта равна нулю (лишь возможно что хотя бы 10%)
  4. Взесив vJass и cJass + надобность написания kjass'а || результам голосования и здешним рассуждением от других пользователей, + своя голова на плечах.. Не особо нужно... может сделать что-то нибудь другое...
.~ELB359,
PS: Чуть не забыл, в сJass есть эмуляция FormatString(строка формата) aka C++,
См. пункт 6.3.2 в руководстве от автора cJass.
cjass.xgm.guru/manual-ru, %u если не выдаёт имя юнита, то хз
Хотя vJass сам себя перезапускает порядком 2 раза.. Смотрел исходники.. "no coments"..
29

» Кузня Волчачки / [Заметка №3] Черновик Kjass

prog:
KingMaximax, лучше бы потратил время с пользой и запилил полноценный редактор кода с контекстным автодополнением и генерацией часто используемых конструкций по шаблонам. Это куда больше времени экономит, чем издевательство над синтаксисом.
А еще лучше - учил бы Unreal Engine.
Что-то вроде вбил в поля названия, а программа генерировала конструкцию?
Может вы имели ввиду Unity, а не Unreal Engine. Или всё-таки ареал?
29

» Кузня Волчачки / [Заметка №3] Черновик Kjass

ELB359:
Идея прекрасная, но почему бы не придерживаться си-подобного синтаксиса? Что еще за "flo", "str"?
Можно придерживаться, но у меня мысль как бы облегчить для быстрого настрачивания строк кода. Хотя может можно и не писать. + Я ещё точно не решил..
Догадаться не сложно: float string
alexprey:
синтаксис ужасен, даже у vjass намного приятнее и гармоничнее был
Вынужден согласиться, но это лишь черновой вариант. Был и такой вариант.
Загруженные файлы
29

» Кузня Волчачки / Пишу для себя компилятор kjass

prog:
Заканчивался 2016 год, поколение ютуюба избавлялось от скобочек в вызове функций без параметров... В jass...
ничего личного, поколение ютуба упомянуто исключительно для придания большей красочности высказыванию
basic jass тогда какой-то получается...
Не-а, дело в часто-вызываемых функциях, не во всем же избавляться от скобок. Со скобками - это дело каждого. Если все бы было так одинаково, но нет. Все разное, и не может быть одинаковым -такова воля отца восьми царей мироздания.
29

» Кузня Волчачки / Пишу для себя компилятор kjass

Doc:
Полный рофл без намека на смысл. Единственная адекватная надстройка над джассом это wurstscript в котором в частности есть и всякие расширители дефолтных типов которые позволяют делать unit.getHandleId() и т.д.
Вот эту вот "pak+id+action" гирлянду уже 10 лет как изобрели в cjass.
Ты про Define гирлянду, или при обработке компилятором ключа "scope", если не указано имя скопе?
.getHandleId() - длинно дак ещё скобочки)) я проще буду unit.Handle без скобочек на конце)) так же как и с unit.Data, Item.Data Get[Unit/Item]UserData;
Все равно хочется больше простоты и удобности)))
29

» Кузня Волчачки / Потрошение XGM: Туманные события

Themis:
Первый годный текст. Теперь бы словарный запас расширить. И я даже ждать буду.
Не знаю, получиться или нет. Обнадёживать не буду. Я стараюсь больше употреблять слова, ближе к рус. яз., а не пришедшие из вне. Ох уж эта этимология и орфоэпия.
Набросал недавно некоторые тексты, но они как кусочки разорванного рисунка, который нужно собрать по частям да так, чтобы образовалось точное изображение.
29

» WarCraft 3 / Вопрос насчет "бессмертия" с EventDamage

Можно сделать с нужных атак обнуление урона в константах где сопротивление брони от урона; И что самое интересное урон не пройдёт, но будет единица урона. Однако можно орудовать одной лог. глоб переменной) Оставляем лишь 1 чистый урон, который даёт юнитам леща по полной. Правда там мороки много, придётся для каждой брони делать своё сопротивление к урону, а так же без формул не обойтись. Одной особой переменной или ещё чем-то будешь с помощью условия просто сводить наносимый урон к 0.
Правда это геморрой.
Это как раз подходит под то, что ты сказал.