29

» WarCraft 3 / Патч 1.28.2

DracoL1ch:
Вы щас всерьез рассуждаете, что эти маркетолухи будут перевыпускать варкрафт ремастер? Игру, жанр которой они сами наызвают неактуальным? Да скорее исходники отдадут, чем это.
Хотя я особо и не против, хуже всё равно некуда. 1.26 форева.
Лучше тогда уж исходники от патча 1.26a..
Но ещё лучше свергнуть Близзард написав движок XGM-Strategy, который будет в Xtream раз лучше близзардского наркодвижка варика или того-же ск2. Будет он так же прост как и WE, но более изыскан да изящен. В Xtream раз больше фунционала, больше нативок. Собственный быстро читаемый скрипт XASS ил XS;
Есть ли у Blizzard совесть или все же ими правит жадность?
29

» Hanabishi's Blog / Jass New Gen Pack - Rebuild

У меня скромный вопрос касательно japi. Раз вы решили немного переделать JPNG и изучить принцип работы grimoire. Вы подумывали настроить japi для импорта собственных нативок на патч 1.26a? Или же всё же, вы не планируете такого апгрейда в сборке rebuild...?
29

» WarCraft 3 / Патч 1.28.2

Они уже это почти сделали дав возможность делать карты для сетки в 100+ мб.
Тут есть один не достаток, если надо менять код, то это же полная пещера.
Проще карту отдельно от архива, а архив мог подключаться как addon для карты. Чтобы приходилось обновлять не всю мапищу целиком, а лишь кусок с кодом.
Xin, ну это как про мистический warcaft IV который выйдет в 2018 году бла-бла... Который возможно будет выходить бесконечность через каждые 2 года.., но его не будет.. Хотя как знать..
29

» WarCraft 3 / Патч 1.28.2

Близзарды такие близзарды, хоть бы новые функции добавили, или ключ типа customnative %Name% takes % returns % dllimport "dll" + шаблон для функций для dll'ки. Ну или неплохо бы просто подключение пользовательских mpq Архивов. И где поддержка utf-8 внутри игры для карт и кампаний, для WE? Сплошное ASCII.. разочарвание.. Лишь фикс для путей с utf...
Мультиимпорта нет... ужс..
Лишь надевание аристократических перчаток на варик для красоты.
НЗМ: Даёшь japi.dll для патча 1.26a
Ньюген с фичами вжасса припаяли к редатору? нет
Им даже собственный было лень написать, да ещё облегчить синтаксис. Они даже не додумали сделать собственные структуры. Хотя один человек-солстик сказал, что они бы сделали их криво.
29

» WarCraft 3 / vJass

nvc123:
KingMaximax, с каких пор cjass это альтернатива vjass?
Я немного не правильно выразился, я имел ввиду что у него несколько иной подход. Но по сути тоже самое. Но в более облегчённой версии и инструкция на русском языке есть.
29

» WarCraft 3 / vJass

Там есть примеры, по ним можно понять, что делает каждая функция или спец. ключ.
Ну можно ещё прочитать про сJass cjass.xgm.guru/manual-ru, альтернатива vJass'у
29

» WarCraft 3 / Способности и алгоритмы на заказ

GADees15:

Заказ

Название: Ещё нету
Метод: Всё равно
MUI: Не обязательно
Цель: Нету цели
Количество уровней: 3
Описание: Подчинение крипа(монстра) на определённое время который убил вашего героя.
Технические характеристики: 1 уровень:10 секунд
2 уровень:15 секунд
3 уровень:20 секунд
globals
    hashtable yourhash      = InitHashtable()
    trigger   YourTrigger   = null 
endglobals



scope COD initializer TriggerHeroCharmOfDeath

function IF_ofcbsh takes nothing returns boolean
    return GetUnitAbilityLevel( GetTriggerUnit(), 'your' ) > 0 
endfunction

function cofcbsh takes nothing returns nothing
    local timer t = GetExpiredTimer()
    local integer id = GetHandleId(t)
    local integer timeleft = LoadInteger( yourhash, id, StringHash("CharmTime") )
    if timeleft > 0 then
        if IsUnitType(LoadUnitHandle(yourhash, id, StringHash("CharmedCreep")), UNIT_TYPE_DEAD ) then
            call DestroyTimer(t)
            if LoadUnitHandle(yourhash, id, StringHash("CharmedCreep")) != null then
                call SetUnitOwner( LoadUnitHandle(yourhash, id, StringHash("CharmedCreep")), LoadPlayerHandle(yourhash, id, StringHash("CreepPlayer")), true )
            endif
            call FlushChildHashtable( yourhash, id)
        else
            call SaveInteger( yourhash, id, StringHash("CharmTime"), timeleft - 1 )
        endif
    else
        call DestroyTimer(t)
        if LoadUnitHandle(yourhash, id, StringHash("CharmedCreep")) != null then
            call SetUnitOwner( LoadUnitHandle(yourhash, id, StringHash("CharmedCreep")), LoadPlayerHandle(yourhash, id, StringHash("CreepPlayer")), true )
        endif
        call FlushChildHashtable( yourhash, id)
    endif
    set t = null
endfunction

function CharmOfCritterBySlainHero takes nothing returns nothing
    local unit k = GetKillingUnit()
    local unit u = GetTriggerUnit()
    local integer id
    local timer t
    if GetWidgetLife(k)>.405 and  not IsUnitType( k, UNIT_TYPE_DEAD ) and k != null then
        set t = CreateTimer()
        set id = GetHandleId(t)
        call SavePlayerHandle(yourhash, id, StringHash("CreepPlayer"), GetOwningPlayer(k))
        call SaveInteger( yourhash, id, StringHash("CharmTime"), (GetUnitAbilityLevel(u, 'your') * 50) + 49 )
        call SaveUnitHandle(yourhash, id, StringHash("CharmedCreep"), k )
        call SetUnitOwner( k, GetOwningPlayer(u), true )
        call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Other\\Charm\\CharmTarget.mdl", k, "origin"))
        call TimerStart(t, .1, true, function cofcbsh )
    endif
    set t = null
endfunction

function TriggerHeroCharmOfDeath takes nothing returns nothing
    set YourTrigger = CreateTrigger()
    call TriggerAddAction( YourTrigger, function CharmOfCritterBySlainHero )
    call TriggerAddCondition( YourTrigger, Condition(function IF_ofcbsh) )
    //call TriggerRegisterDeathEvent( YourTrigger, YourUnit )
endfunction 

endscope
Вместо 'your' - rave код вашей способности
Вместо YourTrigger код вашего триггера
Вместо yourhash - ваша хеш-таблица, хоть udg_;
Героя сами добавите в триггер //call TriggerRegisterDeathEvent( YourTrigger, YourUnit ) или своим методом, где YourTrigger - ваш триггер, YourUnit - ваш герой...
29

» WarCraft 3 / Триггерные скиллы в Melee

Есть способ, но он дикий. Извлечь родной .slk сданными (Переделать под свои нужды) запихнуть в микс архив,( а сам микс. импортировать в карту по пути "\redist\miles", хотя вряд ли сработает) ну или кинуть просто в под-под-папку варика "\redist\miles" или самой основной папке варика. Шаманить танцуя с бубном так, чтобы скрипт не превращал в шестерни карту, препарируя war3mapscript.j; чтобы были мечи. Но вероятность успеха равна 0.00000000000000001%
Хотя это глупо, ведь такое не исправишь, не перелопатив весь wc3, превратив его в мод wc3.
29

» WarCraft 3 / local и global timer нагружаются в локальной сети?

Немного как-то бредово.
Автор, вы применяли правильное удаление и обнуление объектов типа handle, agent?
Чрезмерное создание эффектов вредит производительности... (Кадый эффект по своему снижает фпс)
Если вы ещё не удаляли дамми юниты или не делали им срок жизни (1..2 сек) и устанавливали им тип смерти не воскрешаемый без разложения, чтобы те быстро исчезали.
И вообще автору было бы полезно узнать, что может вызывать дикие лаги Ведь могут вызывать не только криво настроенные триггеры(криво написанный код), но некоторые криво настроенные способности в Р.О.
Минимально допустимый безлаговый период таймера: 0.03(0.02) сек
А вообще, лучше задавшему вопрос показать код... (Чую там орудует "TriggerSleepAction", ломающий потоки локальным таймерам; Или ещё что-то похуже )
ПН: Ледяной лягушь криворук...
29

» WarCraft 3 / Оформление заданий от BLIZZARD

ScopteRectuS, что мешает распаковать из war3.mpq / war3x.mpq / war3xlocal.mpq карты кампаний из архивной папки Campaings, и открыть через WE карты этих кампаний, чтобы посмотреть как оформляет Метелица.
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 / Скрыть иконку героя сверху или удалить с него геройность

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