0
5
8 месяцев назад
Отредактирован Darklight
0

» WarCraft 3 / Как определить алтарь, который воскрешает героя

Вы вообще о чём? Героя никуда не перебрасывает до момента окончания воскрешения.
Вот пришёл в голову более простой вариант (для интерактивной работы, с программной всё прозрачнее и там таких проблем нет):
Второй вариант. Определять текущий алтарь через выбранный пользователем (по событию "EVENT_PLAYER_HERO_REVIVE_START")
//На самом деле этот метод фильтра не нужен - без него ничего не изменится (в группе априори будет один нужный алтарь... ну не совсем, но фильтр ничего не изменит)
fucntion FindAltarCond takes nothing returns boolean
	return (GetUnitTypeId(GetFilterUnit())=='t321' and IsUnitAliveBJ(GetFilterUnit()))
endfucntion
fucntion FindAltar takes player p returns Unit
        local group g
        local unit u
        
            set g = CreateGroup()
            call SyncSelections()
            call GroupEnumUnitsSelected(g, p, Filter(function FindAltarCond))
            set u = FirstOfGroup(g)
            if (u != null) then
                call BJDebugMsg("Reviving altar "+GetUnitName(u))
            endif
            call DestroyGroup(g)
            set g = null
            return u
endfucntion
Но.... увы... это оказалось плохой идеей - ведь герои могут стоять в очереди и к моменту очереди воскрешения очередного героя алтарь нужный скорее всего не будет выбран :-(
Так что пока остаётся первый вариант с дамми-абилкой (ниже текущая предварительная версия), да и есть проблема с событием "EVENT_PLAYER_HERO_REVIVE_CANCEL" - кажется не срабатывает при отмене воскрешения по клику на иконку исключения из очереди (текущего обрабатываемого элемента)
Сделал на одном триггере (по событию "EVENT_PLAYER_HERO_REVIVE_START") с небольшим ожиданием обработки команды
Открыть
static method FindAltar takes player p, integer state returns Unit
        local integer aid = 't321'
        local group g
        local group g2
        local unit u
        local string comName
		local boolean ok = false	
            set g2 = GetUnitsOfPlayerAndTypeId(p, aid)
            set g = CreateGroup()
            loop
                set u = FirstOfGroup(g2)
                exitwhen (u==null)
                call GroupRemoveUnit(g2, u)
                if (IsUnitAliveBJ(u) and IsNotBusy(u)) then //IsNotBasy - некая кастомная функция проверки  пометки, что алтарь ранее уже был занят
                    set comName = GetLastCommand(u) //Некая кастомная функция, получающая последнюю сохранённую команду 
                        if (comName=="roar") then
                            debug BJDebugMsg("FLUSH "+GetUnitName(u)
                            call FlushOrder(u) //Некая кастомная функция очистки последний сохранённой команды
                        endif
                        call GroupAddUnit(g, u)
                endif
            endloop
            loop
                set u = FirstOfGroup(g)
                exitwhen (u==null)
                call GroupRemoveUnit(g, u)
                if (IsUnitAliveBJ(u) and IsNotBusy(u)) then
                            debug BJDebugMsg("ROAR "+GetUnitName(u))
                            call IssueImmediateOrder(u,"roar")
                            call GroupAddUnit(g2, u)
                endif
            endloop
            call DestroyGroup(g)
            call TriggerSleepAction(0.2)
            loop
                set u = FirstOfGroup(g2)
                exitwhen (u==null)
                call GroupRemoveUnit(g2, u)
                if (IsUnitAliveBJ(u)) then
                		set comName = GetLastCommand(u) //Некая кастомная функция, получающая последнюю сохранённую команду 
                            if (comName=="roar") then
                                call BJDebugMsg("ROAR COMPLETED")
                                call FlushOrder(u) 
                            else
                                call BJDebugMsg("Reviving altar "+GetUnitName(u))
								set ok = true
                            endif
                     endif
                exitwhen (ok==true)
            endloop
            call DestroyGroup(g2)
            set g = null
            set g2 = null
			call  MarkBusy(u) //u - алтарь надо ещё пометить как теперь уже занятый
            return u
        endmethod
Все доп данные можно хранить в hashtable с привязкой по юниту (этот код опускаю - у меня более сложная система хранения доп данных по юниту со структурами на vJass - а в хештаблицах только привязка юнитов к индексам структур vJass)
0
5
8 месяцев назад
Отредактирован Darklight
0

» WarCraft 3 / Как определить алтарь, который воскрешает героя

Slonick, как написал - алатрей может быть много. Нужно достоверное определение
Darkmen500,
1. Делать триггерное воскрешение - над этим можно подумать, хотя чувствую, что очень геморно это и цель не оправдает средства - это надо делать свою абилку алтаря для каждого героя (добавляя её всем алтарям по событию "EVENT_PLAYER_HERO_REVIVABLE" и убирая по событию "EVENT_PLAYER_HERO_REVIVE_START" и возвращать по событию "EVENT_PLAYER_HERO_REVIVE_CANCEL" - но тогда придётся ещё как-то эмулировать сам процесс воскрешения - начиная от правильного определения ресурсов и времени (причём в подсказке текстом это заранее не показать) и до полосы прогресса (стандартный не сделать) и обработки отмены.
Хотя нет, события "EVENT_PLAYER_HERO_REVIVE_*" не подойдут – если эмулировать сам процесс воскрешения (их не будет), да и обрабатывать нужно именно события самой аблики (ведь именно событие абилки будет на алтаре).
Выполнить процесс воскрешение на подставном алтаре видимо тоже не получится – такой команды (и нативной функции), судя по всему, просто нет. А функция ReviveHero воскрешает немедленно!
2. Как вариант добавлять абилку при начале строительства, но с отменой и завершением удалять - вот тут не понял о чём речь. Причём здесь строительство? Герой как и алтарь могут вообще быть на карте не от строительства.
nazarpunk, "Насколько я помню, алтарю будет отдан приказ с равкодом героя" - только при найме, при воскрешении нет приказа :-( Есть события - но все он от героя, который остаётся даже лежать где пал, а не переносится к алтарю (собственно первым делом и хотелось бы сделать этот самый перенос горя к алтарю)
Вот мом размышления "на свежую голову":
Найти алтарь, выполняющий воскрешение, наверное, не большая проблема - достаточно пройтись по всем живым алтарям, программно добавить им дамми-абилку и попробовать дать ей команду - думаю, что занятый алтарь не выполнит команду - это можно отследить (но не факт, что не выполнит); останется отфильтровать только алтари, занятые процессом найма (но это как раз отслеживается по команде найма).
Проблема в том, что если будет несколько алтарей, одновременно воскрешающих героя - то как определить нужный?
Но, думаю это тоже решаемо - алтари же не начинают этот процесс одновременно - всё-равно сначала начнёт один, затем начнёт второй и т.д.
Поэтому надо отслеживать, указанным мною способом, алтарь, который только что начал воскрешение, и помечать его занятым, при следующей "команде" на воскрешение исключать его до завершения воскрешения.
Остаётся понять какого героя алтарь начал воскрешать (если мёртвых было несколько)?
Но это уже по событию "EVENT_PLAYER_HERO_REVIVE_START" определить можно (отмену тоже надо отслеживать) - собственно с него и надо начинать - сразу получаем героя, ищем занятный (но ещё не обработанный/связанный с другим героем - воскрешаемым или нанимаемым) алтарь через дамми-абилку, вуа-ля - нашли нужный алтарь - связали его с нужным героем. По событиям "EVENT_PLAYER_HERO_REVIVE_CANCEL" и "EVENT_PLAYER_HERO_REVIVE_FINISH" освобождаем связь алтаря и героя (находя её по герою).
Осталось проверить сработает ли приказ дамми-абилки на занятом воскрешением алтаре - какую лучше абилку для этого взять, посоветуете?
Ну и система обработки событий сразу двух триггеров параллельно выходит не очень простая (события от героя и от дамми-аблики, что нужно совместить с одним набором данных)
0
5
9 месяцев назад
0

» WarCraft 3 / Не работает вкладка extensions в jass new gen pack

У меня тоже не работает. Никаких русских букв в путях нет
D:\W3\Maps\(2)OgreMound.w3x
D:\W3\Maps\WE\Objects\war3map.w3u (тут и другие файлы)
D:\Games\Jass New Gen Pack Rebuild\NewGen WE.exe
D:\Games\WarCraft3\Warcraft III\World Editor.exe
Сначала был какой-то визуальный процесс - что-то обрабатывалось, но ничего не происходило
А теперь вообще ноль реакции на эти команды!
Редактор и ОС перезагружал - не помогает!
Экспорт в файлы в принципе работает - файлы создаются (но при экспорте происходит ошибка - что с ней делать не понятно - скриншот ошибки прилагаю)
Загруженные файлы
0
5
9 месяцев назад
Отредактирован Darklight
0

» WarCraft 3 / Не работает vJass и cJass в Warcatf 3 Jass New Gen Pack

nazarpunk,
М-да, вот слепой - не увидел сам (да и никто не увидел - хотя всё в тесте сабжа так указано)- а ведь верно - всё дело было в этом долбанном nohing - в упор не увидел - а ошибка то прям в статье на xgm - поправил и заработало - итоговый jass прилагаю
сам код триггера ниже
function Trig_Library_Actions takes nothing returns nothing
endfunction

//===========================================================================
function InitTrig_Library takes nothing returns nothing
    set gg_trg_Library = CreateTrigger(  )
    call TriggerAddAction( gg_trg_Library, function Trig_Library_Actions )
endfunction

library NAME initializer Init
	globals
		public real X
		
	endglobals
	
	
	private function Init takes nothing returns nothing
		
	endfunction

endlibrary
я так полагаю. что от function InitTrig_Library takes nothing returns nothing сейчас избавиться нельзя - ранее у меня в триггерах (что библиотеки) не было вроде таких обязаловок?
Загруженные файлы
0
5
9 месяцев назад
0

» WarCraft 3 / Не работает vJass и cJass в Warcatf 3 Jass New Gen Pack

Прилагаю файлы (карта и 2 jass файла - тот что "clean" без library, и три скриншота).
Впрочем тут и "без бутылки ясно", что vJass не отработал, хотя JassHelper включён а vJass синтаксис не выключен
0
5
9 месяцев назад
0

» WarCraft 3 / Не работает vJass и cJass в Warcatf 3 Jass New Gen Pack

nazarpunk,
Конечно vJass\Enable JassHelper включён, я достаточно продвинутый, просто давно не использовал Jass New Gen Pack - раньше то активно использовал и vJass и cJass - подозреваю что проблема где-то более глобальная - может что-то с ОС WIndows - хочу сейчас попробовать на виртуалке поднять старую ОС Windows 7 и на ней попробовать (ранее то я на ней разрабатывал на JASS - хоть и было это почти 10 лет назад)
Код, тут в постах, я заключал в блоки "((код .... ))" - что нет так? Или вы про спойлеры ">> ... <<"?
Пример объявления библиотеки vJass взял с xgm тут
0
5
9 месяцев назад
Отредактирован Darklight
0

» WarCraft 3 / Не работает vJass и cJass в Warcatf 3 Jass New Gen Pack

cLTKF~nazarpunk:
Поставь актуальную сборку JNGP, удали после установки папку AdicHelper. Ну и переустанови начисто лицензионный 1.27а.
Сделал всё что сказали - не помогло :-(
Тестирую на пустой карте. Вот такой вот триггер с именем Library
function Trig_Library_Actions takes nothing returns nothing
endfunction

//===========================================================================
function InitTrig_Library takes nothing returns nothing
    set gg_trg_Library = CreateTrigger(  )
    call TriggerAddAction( gg_trg_Library, function Trig_Library_Actions )
endfunction

library NAME initializer Init
	globals
		public real X
		
	endglobals
	
	
	private function Init takes nothing returns nohing
		
	endfunction

endlibrary
Приводит к тому, что карта не стартует
В строке
function NAME__Init takes nothing returns nohing
ошибка: Undefined type nothing
и затем в строке ниже: Missing return
globals
//globals from NAME:
constant boolean LIBRARY_NAME=true
real NAME_X
		
//endglobals from NAME
    // Generated
trigger gg_trg_Library= null

trigger l__library_init

//JASSHelper struct globals:

endglobals


//library NAME:
	
	
 function NAME__Init takes nothing returns nohing
		
	endfunction


//library NAME ends
0
5
9 месяцев назад
0

» WarCraft 3 / Не работает vJass и cJass в Warcatf 3 Jass New Gen Pack

cJass более не поддерживается?
0
5
11 лет назад
0

» Война в Школе РПГ / Главная страница

Очень оригинально, хоть и задротно! Надеюсь баланс будет соблюдён, а не будет перекосов в стиле ученики самые крутые - учителя самые злые :]
2
5
11 лет назад
2

» WarCraft 3 / Иконки умений с улучшениями

ОООО!!! Круто! Спасибо!
1
5
11 лет назад
1

» Модели из World Of WarCraft / Скелеты

Плюсую, воина может возьму себе на замену обычного вровского скелета - у меня как раз он производится на базе ;) а обыцчный останется для подымаемых трупов
вот только с тим колором вопрос решить надо
1
5
11 лет назад
1

» JaBeN's Project / Классификация героев

Мои предложения.
  1. Распределить все профессии по "сторонам силы", а именно на "Тёмных" и "Светлых" (при желании - выделить и "Нейтральных" атеистов), при этом это не разделяет персонажа на злого/доброго, и сделать так, чтобы был баланс противоположностей; можно так же отделить (классифицировать по группам) чистых воинов от чистых магов, а так же выделить средний класс - типа ведьмаков - воинов, практикующих магию, и сделать их не такими сильными и выносливыми как воины, но и не сильными магами, способными одеваться и как воин и как маг; неплохо бы ещё разнести персонажей по классам живые организмы, нежить и демоны, духи-ангелы, "механические" неживые субстанции (например каменные исполины), и сделать некоторые способности со специфическими бонусами при применении к определённым классам, или наоборот - уменьшать или вовсе исключать эффект от применения (это касается не только героев но и вызываемых существ и крипов); сделать доп. изменяющееся состояние кармы - злой/добрый/циник - переменная величина, меняющаяся во время игры от поступков (независимо от класса) и дающая доп плюсы/минусы при взаимодействиях с другими персонажами (эти бонусы уже могут зависеть не только от стороны величины кармы, но и от класса; например светлый паладин и рыцарь тьмы могут получить разные бонусы если будут с доброй кармой, при этом этм бонусы так же могут быть различны при взаимодействии с другим персонажем с ткаой же или противоположной кармой).
  1. Отделить Убийцу от Охотника (как две различные противоположности)
  1. Финт убийцы - предлагаю чуть модернизировать: в момент применения убийца создаёт свою иллюзию (незаметно визуально) на месте своей последней позиции (не более 1 сек жизни), а сам, переместившись за спину врага, становится невидимым до атаки или не более 1 сек - будет очень круто - вражеская цель не сразу среагирует на переместившегося убицу, будучи думать, что он ещё перед ней, а он уже будет за спиной.
  1. Вампирические способности смертельный укус и вампиризм - как мне кажется, одновременно это слишком круто.
  1. Волк и вампир обычно не совместимы друг с другом -волк - оборотень - всегда был врагом вампиров - летучих мышей.
  1. Паладин - способности ветки света - не слишком ли много видов лечения на одного персонажа.
  1. Что там с печатями паладина - как они действуют, почему их несколько?
  1. И что там с несколькими аурами паладина - это как?
  1. Ангел хранитель паладина - как мне кажется, лучше привязывать ангела только к одной цели до её смерти (а вмести с ней исчезает и ангел) на опр. время, без всяких прыжков по целям.
  1. Жрец и лечение - целитель/сфинкс (наверное под сфинксом именуется стандартная обсидиановая статуя) - это два разных заклинания по способу действия. Вы ещё выбираете? Из личного опыта не рекомендую целилку обсидианки - не эффективна и не очень хорошо работает, хотя если всё сделать самостоятельно на тригерах - может выйти толк).
  1. Опять таки слишком много лечения у жреца.
  1. Что там с использованием креста перерождения у жрецов - как планируется этот процесс - Вы имеете в виду выборочное воскрешение?
  1. Кара небесная - потенциально читерская способность серафима.
  1. Зловоние и скелеты - по моему мнени - вещи не совместимые - у скелетов просто нечему разлагаться, то же про некроз - у костяных клеток такого эффекта нет; как и взрывы скелетов - нечему взрываться, конечно кости - это осколочная начинка - но ни запала, ни энергетической "батареи" для взрыва у них нет. Может лучше тогда не скелетов подымать, а зомби - да и не так "замылено" для некромантов это будет, как скелеты. Сметельный союз для скелетов тоже не очень логичен - у них уже нет остатков жизненной энергии - подняты они исключительно за счет магической энергии, но это не энергия жизни.
  1. Костяная броня у некроманта - бред какой-то
  1. Что такое stun-lightning?
  1. Стихи воздуха друида - что очень запутано со смерчем и вихрями - нужно бы пояснить зависимости, да и как-то всё уж очень однотипно
  1. Горящий след - что там происходит с дорожкой из пламени, остающейся в следах пиромана и почему только если здоровье ниже 30%? Может лучше превратить её в переключатель, совместив с жаром преисподней?
  1. Гидра пироманта - идея с гидрой не очень нравится - да и гидра - это водяное существо. Предлагаю при применении заклинания порождать огненный вихрь (дух), который будет одноразово атаковать применившего заклинание врага (можно сделать как активку/автокаст/так и пассивку)
  1. Колдун и Мир духов / Освобожденпе душ - быстрое накопление душ убиенных врагов - это врят ли получится (разве что около героя не идёт крутой замес из бстродохнущих тварей). Говорю по своему опыту, т.к. сам имею подобную абилку у одного из своих героев (но у меня накопление душ идёт постоянно, в качестве пассивки - обычно более 20-30 вообще не накапливается за всю игру, если их конечно иногда всё же тратить; так ещё и пришлось сделать, что вызванные но не уничтоженные души поступают обратно в копилку, если хозяин рядом; я Вам рекомендую такой же подход).
  1. Что там с призванниками Колдуна - почему несколько разных - хочется пояснений?
  1. Предсмертный вопль - идея интересная, но, как мне кажется, не удачная - тут конечно тестить нужно, да и сделать такое будет несколько труднова-то
  1. Чесотка - самому интересно что это такое за абилка ;) Неприятная, наверное
  1. И что за массовые корни при параличе?
  1. Что там с тотемами шамана - всё запутано - хочется пояснений?
  1. Зелье невидимости как пассивка и с зависимостью от здоровья - по-моему это полный бред
  1. Трупы и трупный яд для знахаря - не самые подходящие способности - хотя если сделать два разных героя тёмного и светлого...
как-то так ;)
1
5
11 лет назад
1

» JaBeN's Project / Скачать последнюю версию

JaBeN_Симфер, Просто очень любопытно - неужели проект за 2.5 года не продвинулся и на 0.01 эээ %
Какое же должно быть продвижение, чтобы достичь версии.... ну... хотя бы 0.80 ;) т.е. в 10 раз больший номер!
1
5
11 лет назад
1

» JaBeN's Project / Скачать последнюю версию

хм... 2.5 года назад версия было 0.08 - и сейчас версия 0.08 (буковки только в конце добавились) - а продвижение - колоссальное, а номерочек версии очень скромненький - может номер версии пора тоже чуть поднять. Всё равно пока не 1.0 и до единицы ещё очень много чисел ;)
или я ошибся с тем, что версия 0.08 была уже 2.5 года назад
3
5
11 лет назад
3

» JaBeN's Project / Главная страница

Супер! Уже более двух лет я вынашиваю планы по созданию подобного мода, очень сильно похожего по своей концепции к данному. Структура геймплея уже очень хорошо проработана. Но... реализация была лишь пилотная - не дальше альфа версии. Нет времени заниматься. Тем более что у меня в разработке есть два других проекта, два очень давних долгостроя другого жанра - и они съедают всё свободное время. Я рад что кто-то нашёл силы и сделал то, о чём я только грезил ;) Респект автору!
0
5
11 лет назад
0

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

Ничего выдающегося :(
ведь реально больше есть потребность не просто зарегистрировать получения урона, но и определить:
  1. Источник урона (атакующий)
  2. Тип атаки
  3. Тип урона
  4. Вид заклинания (для урона, полученного заклинанием или способностью)
  5. Величину урона (как реальную, так и базовую)
но на WC3 это очень сложно - особенно с заклинаниями - тут всё дамаг систему нужно перелывать
0
5
11 лет назад
0

» Ретро-игры / Castle Wolfenstein

Вот, он, оказывается, какой был прародитель для Wolfenstain 3D от Id Software, пущай и выпущенный другой студией ;)
0
5
11 лет назад
0

» WarCraft 3 / Юнит атакует в движении...

Сейчас добавится требование, чтобы ещё и корпус юнита частично был повёрнут в сторону атаки - и всё получится "башенная" модель (с отдельно вращающейся башней атаки) и задача станет совсем нетривиальной. Хотя, вот есть Древа у ночных эльфов - так у них спец абилка есть для поворота "башни" (но сама по себе она неработает - тут всё
... тут всё-таки анимации нужно покручивать.
0
5
11 лет назад
0

» WarCraft 3 / Исследование порчи (Blight)

Steal nerves, О да, действительно всё сложно. И тут даже уже дело не кривых функциях стандартного Blight API (с некоторой погрешностью им всё же можно пользоваться, наводя поручу "точечно" небольшими радиусами и оптимизируя на больших площадях непрерывной порчи) и, даже не в сложности математического аппарата (да не простой, но всё же это лишь 2D плоскость - геометрия здесь не шибко сложная - можно всё просчитать), а сложность в том, что для такой схемы, как у вас, требуется достаточно гибкая система хранения параметров порчи (хранить её только на карте уже будет недостаточно). ИМХО тут без подключения своих native функций уже будет очень сложно обойтись. А в этих native придётся строить свои структуры хранения (лучше в виде матриц или графических канвасов) и размещать ресурсоёмкие расчеты порчи. Как-то так.
0
5
11 лет назад
0

» PsiLab / RtC. Первые шаги

а где продолжение?
0
5
11 лет назад
0

» В гостях у Эльрата / N'Y 2013 Naga Model Contest

Эльрат, Если убрал "жабры" (хотя было здорово - я бы их оставил) - добавь щупальца - а то уж очень слащавое лицо вышло
А так - ОЧЕНЬ НЕПЛОХО!
1
5
11 лет назад
1

» WarCraft 3 / N'Y 2013 Naga Model Contest: участник Эльрат, модель Нага-искоренитель

А где скриншоты с моделью?
1
5
11 лет назад
1

» WarCraft 3 / Исследование порчи (Blight)

Steal nerves, используй функцию native SetBlight takes player whichPlayer, real x, real y, real radius, boolean addBlight returns nothing для постепенного расширения радиусов.
Как написано в статье - она работает более менее хорошо, особенно для больших радиусов. Использовать абилку статического наведения порчи, учитывая желания иметь варды (интересно, что за слово такое), снимающие порчу, не рекомендую, т.к. порча от этих абилок (на юнитах) не рассеивается, пока действуют эти абилки.
С другой стороны, у вас, явно должно быть посложнее - а именно, если рассеяние порчи сильно и неравномерно углубилось в распространённую порчу, то должен быть восстановлен не весь текущий радиус порчи, а постепенно порча должна как бы затягиваться изнутри к внешней границе.
Верно и обратное - если здание, распространившее порчу уничтожено - то порча должна постепенно уменьшаться в радиусе распространения (как у Зергов в SC).
Поэтому я написал выше, о том, что неплохо бы иметь более расширенную библиотеку по работе с порчей, раз автор затронул эту тему.
0
5
11 лет назад
0

» WarCraft 3 / Исследование порчи (Blight)

Steal nerves, Интересно, что ты в этих уровнях разместить хочешь?
0
5
11 лет назад
0

» WarCraft II: The Rebirth / Скриншоты проекта (09.01.13)

Посмотрел скрины - ох как ностальгией повеяло - жаль всё пока выглядит очень кривовато :(
А так - респект!