0
19
2 года назад
0

» WarCraft 3 / Storm Dragon

N7 Molot, китайская дота
2
19
2 года назад
Отредактирован KaneThaumaturge
2

» WarCraft 3 / Талгармы

ValdionWorld, модели понравились, продолжай в том же духе. Немного подтяни текстуры на Коцеле и портрет прикрути к всаднику и будет топ.
Держи сердечко ❤️
0
19
2 года назад
0

» WarCraft 3 / Кампания на разные версии

Можешь попробовать воспользоваться этим конвертом.
0
19
2 года назад
Отредактирован KaneThaumaturge
0

» WarCraft 3 / Переход нейтрального здания, как в 23 расы

В условиях добавь проверку на тип умирающего юнита == проклятый рудник.
Загруженные файлы
0
19
2 года назад
0

» WarCraft 3 / S.T.A.L.K.E.R RPG ARXIV - X

netnicka, 1.27b версия
3
19
2 года назад
3

» WarCraft 3 / GUI перебор юнитов

bUnit01 = FirstOfGroup(gr);
ForGroup(gr, function() {
	bUnit = GetEnumUnit();
	if (GetUnitLifePercent(bUnit01) < GetUnitLifePercent(bUnit)) {
		bUnit01 = bUnit;
	}
}); 
target = bUnit01;
На гуи логика такая же, по-другому никак.
0
19
2 года назад
0

» WarCraft 3 / Negate Damage library

PT153, Но скачки будут гараздо реже и при обычной игре не заметны, да есть небольшая ошибка из-за real. Но в целом если у вас нет юнитов с 1 хп, то все будет норм.
1
19
2 года назад
1

» WarCraft 3 / Как указать герою покупать предметы с помощью триггеров?

function BuyItem takes unit FromShop,integer ItemID,unit ToUnit returns boolean
  if IssueNeutralTargetOrder(GetOwningPlayer(ToUnit), FromShop, "smart", ToUnit) or IssueTargetOrder(FromShop, "smart", ToUnit) then
    return IssueNeutralImmediateOrderById(GetOwningPlayer(ToUnit), FromShop, ItemID) or IssueImmediateOrderById(FromShop, ItemID)
  endif
  return false
endfunction

function Trig_Pokupka_Conditions takes nothing returns boolean
if ( not ( GetTriggerUnit() == gg_unit_Othr_0049 ) ) then
return false
endif
return true
endfunction
function Trig_Pokupka_Actions takes nothing returns nothing
call BuyItem(ТВОЙ_МАГАЗ, ИД_СВИТКА, gg_unit_Othr_0049)
endfunction
===========================================================================
function InitTrig_Pokupka takes nothing returns nothing
set gg_trg_Pokupka = CreateTrigger( )
call TriggerRegisterUnitInRangeSimple( gg_trg_Pokupka, 256, gg_unit_ngme_0056 )
call TriggerAddCondition( gg_trg_Pokupka, Condition( function Trig_Pokupka_Conditions ) )
call TriggerAddAction( gg_trg_Pokupka, function Trig_Pokupka_Actions )
endfunction

Ван Рок, ты задал много хороших вопросов и если почитаешь статьи о Jass, то узнаешь на них ответ. В представленном виде это не триггер с условиями и ивентом, это просто функция, которую можно вызвать.

Вызывать можно и в гуи через кастом скрипт
0
19
2 года назад
0

» WarCraft 3 / Как указать герою покупать предметы с помощью триггеров?

function BuyItem takes unit FromShop,integer ItemID,unit ToUnit returns boolean
  if IssueNeutralTargetOrder(GetOwningPlayer(ToUnit), FromShop, "smart", ToUnit) or IssueTargetOrder(FromShop, "smart", ToUnit) then
    return IssueNeutralImmediateOrderById(GetOwningPlayer(ToUnit), FromShop, ItemID) or IssueImmediateOrderById(FromShop, ItemID)
  endif
  return false
endfunction
Что здесь непонятного? FromShop - лавка, ItemID - id свитка, ToUnit - Тралл

Но вообще можешь просто отнимать голду и выдавать предмет
2
19
2 года назад
Отредактирован KaneThaumaturge
2

» WarCraft 3 / Negate Damage library

Делюсь измененной либой. Проблема исходной в скачущей полосе (и значения) здоровья при блокировании дамага. Тут это немного исправлено. Абилка будет выдаваться лишь тогда, когда отменённый урон больше чем максимальное здоровье. Если урон больше чем недостающее здоровье, то юнит хилится на максимум, а дохил будет после нанесения урона. В других случаях юнит просто хилится на отмененный урон. Позволяет немного убрать недостатки либы.
Вам нужна инициализированная хэш-таблица.
код
library NegateDamageLib uses HashId

    globals
        private constant group Group = CreateGroup()
        private constant timer Timer = CreateTimer()
        
        // MUST BE SPECIFIED
        public constant integer MaxLifeBonusAbility = 'A002'
        public constant integer MaxLifeBonus = 1000000
    endglobals

    private function ProcessUnitAbility takes nothing returns nothing
        local unit u
        local real life2set
    
        loop
            set u = FirstOfGroup(Group)
            exitwhen u == null
            call GroupRemoveUnit(Group, u)
        
            if UnitAlive(u) then
                set life2set = GetWidgetLife(u)
                call UnitRemoveAbility(u, MaxLifeBonusAbility)
                call SetWidgetLife(u, life2set)
            else
                call UnitRemoveAbility(u, MaxLifeBonusAbility)
            endif
        endloop
    endfunction

    private function ProcessUnit takes nothing returns nothing
        local integer tmId = GetHandleId(GetExpiredTimer())
        local unit u = LoadUnitHandle(HT, tmId, 0)
        local real lifeBonus = LoadReal(HT, tmId, 1)
            
        if UnitAlive(u) then
            call SetWidgetLife(u, GetUnitState(u, UNIT_STATE_LIFE)  + lifeBonus)
        endif
        
        set u = null
        call FlushChildHashtable(HT, tmId)
        call PauseTimer(GetExpiredTimer())
        call DestroyTimer(GetExpiredTimer())
    endfunction

    function NegateDamage takes unit u, real negated returns nothing
        local real life = GetWidgetLife(u)
        local real a
        local timer tm
        set a = GetUnitState(u, UNIT_STATE_MAX_LIFE) - GetUnitState(u, UNIT_STATE_LIFE)
        if (GetUnitState(u, UNIT_STATE_MAX_LIFE) < negated) then
            call GroupAddUnit(Group, u)
            call UnitAddAbility(u, MaxLifeBonusAbility)
            call SetWidgetLife(u, life + negated)
            call TimerStart(Timer, 0., false, function ProcessUnitAbility)
        elseif (a < negated) then
            call SetWidgetLife(u, life + a)
            set tm = CreateTimer()
            call SaveUnitHandle(HT, GetHandleId(tm), 0, u)
            call SaveReal(HT, GetHandleId(tm), 1, negated - a)
            call TimerStart(tm, 0., false, function ProcessUnit)
        else
            call SetWidgetLife(u, life + negated)
        endif
        set tm = null
    endfunction

    function GetUnitMaxHealth takes unit u returns real
        return GetUnitState(u, UNIT_STATE_MAX_LIFE) - MaxLifeBonus * GetUnitAbilityLevel(u, MaxLifeBonusAbility)
    endfunction

endlibrary

И в дополнение макрос для перехвата функции, жаль cJass.
    define GetUnitState(u, state) = GetUnitStateHook(u, state)
    
    //! nocjass
    function GetUnitStateHook takes unit u, unitstate state returns real
        if state == UNIT_STATE_MAX_LIFE then
            return GetUnitState(u, UNIT_STATE_MAX_LIFE) - MaxLifeBonus * GetUnitAbilityLevel(u, MaxLifeBonusAbility)
        endif
        return GetUnitState(u, state)
    endfunction
    //! endnocjass
0
19
3 года назад
0

» WarCraft 3 / Система отлова нанесённого урона

но если после воскрешения на событие будет подписан новый триггер, то на урон по воскрешённому юниту он не подпишется.
Да, это я уже понял, спасибо за уточнение.
0
19
3 года назад
0

» WarCraft 3 / Система отлова нанесённого урона

Извиняюсь за археологию. EVENT_PLAYER_UNIT_DECAY ловит событие, когда юнит начал разложение, а не закончил, это означает что для воскрешенных юнитов потеряется ивент?
1
19
3 года назад
1

» Мой путь редактора / Аниме карта 1.1

Лучше ловить атаку через бафф яда и делать триггерные орбы, чем ловить атаку через событие Юнит атакован.
1
19
3 года назад
1

» Блог пользователя under11 / Кинжал в цель

Интересно, почему решил не переназначить метод create в структуре, а вынести его за ее пределы?

Удобное переназначить деструктор и очищать там переменные, также и с конструктором create. И можно внутри структуры описать статический метод, вместо вынесенной функции move, тогда можно просто использовать this, вместо объявления переменной S и ссылаться на переменные без точки.
0
19
3 года назад
0

» WarCraft 3 / Вопрос по Handle Counter

Кидай карту, посмотрим
1
19
3 года назад
Отредактирован KaneThaumaturge
1

» WarCraft 3 / Полезная информация

как сделать подсвечиваемый участок на карте (как в компании)?
в QA иди.
0
19
3 года назад
Отредактирован KaneThaumaturge
0

» MARS / Первый турнир по MARS

Vlod, Записи вроде бы есть, но без комментаторов. Все стримы закончились и безвозвратно утеряны.
Результаты турнира, победил Toxanchec Skadi.
кат
Загруженные файлы
0
19
3 года назад
0

» WarCraft 3 / Фризит карту с продажи айтема в лавку.

Скинь мапу
0
19
3 года назад
0

» WarCraft 3 / Безопасное выделение hashtable

Тебя куда-то не туда унесло.
Мне просто правда интересно зачем это и как можно использовать. В описанной тобой способности данные просто сохраняются на хэндл таймера, все работает индивидуально и не перебивает друг друга.
0
19
3 года назад
0

» WarCraft 3 / Безопасное выделение hashtable

GetLocalPlayer, Если сделаю с одной хэш-таблицей мне полагается приз?
0
19
3 года назад
0

» WarCraft 3 / Безопасное выделение hashtable

GetLocalPlayer, Что тут сложного? Зачем более 1 хэштаблицы? На структурах все сохраняется, хотя можно и без них.

GetLocalPlayer, А можно пример способности?
0
19
3 года назад
Отредактирован KaneThaumaturge
0

» Fantasy Mini Battle / Альфа 0.79g

Тоже самое
кат

N7 Molot:
а браузер заблокировал из за того, что он был установлен у меня ранее. В корневой папке удали папку .local-chromium и должно заработать. Он конечно переустановится но хотя бы заработает нормально. А, у него ещё защита от копи-паста стоит из за этого интерфейс будет глючить.
Не помогло.

Зашел через вк
Загруженные файлы
0
19
3 года назад
Отредактирован KaneThaumaturge
0

» WarCraft 3 / Безопасное выделение hashtable

У тебя может быть способность, которая должна сохранять данные на касетра + цель. При этом целей может быть несколько. Следовательно, в key идет ид кастера, в value ид всех целей. Если таких способностей несколько, +1 таблица на каждую.
Создать группу целей и привязать ее к кастеру.

Не знаю, может я чего-то не понимаю.
0
19
3 года назад
0

» WarCraft 3 / Безопасное выделение hashtable

Интересно для чего может понадобиться динамически создавать хэш-таблицы?
0
19
3 года назад
Отредактирован KaneThaumaturge
0

» WarCraft 3 / Reforged – Каков новый редактор карт, по сравнению со старым?

Я не обьективен, т.к не играл в рефорж и не работал с редактором. Отвечаю насколько знаю.
– Необходимость создания абилок, на основе уже существующих способностей.
Нет.
– Необходимость создания дамми юнитов.
Частично. Добавили больше функций связанными с эффектами. Это позволяет использовать эффекты как снаряды, вместо даммиков. Но для применения скиллов, думаю, также используются дамми.
– Невозможность сделать из не героя, героя. И наоборот.
Нет, да и не нужно впринципе.
– Невозможность использовать все типы ландшафта.
Нет
– Тупая система Импорта, без которой нельзя напрямую вставить например пиктограмму, модель, и прочее, прочее.
Нет
– Редактор использует только одно ядро процессора. Из-за чего определённые действия, производятся в разы дольше, чем могли бы.
Хз.
– Невозможность добавить прокачиваемую способность герою, без костылей.
Нет
– Необходимость накладывать рамки, на игровые иконки.
Нет
– Невозможность работать с разными форматами изображений.
Нет
– Невозможность удалить юнита, да и вообще любой объект из списка тех, которые есть в редакторе по умолчанию.
Зачем? Нет.
– Бессмысленное ограничение на скорость перемещения юнитов.
Нет
В общем, добавили множество действительно полезных функций. Например, можно, как я понял, изменять поля PO во время игры. Узнать тип входящего урона. Создавать и изменять фреймы. Думаю добавили много чего, что действительно полезно.