0
22
5 лет назад
0

» Осквернитель / Главная страница

Добавил заклинание Corpse Gas. Указанная дружественная нежить становится бомбой которая взрывается через 5 секунд. Урон зависит от здоровья дружественного юнита и уровня способности. Время отслеживается плавающим текстом.
globals 
  constant real SCG_DELAY = 5.0 
  constant real SCG_UPDATE_TIMEOUT = 0.1

  constant integer CORPSE_GAS = 'A600'

  unit array SCGCasters
  real array SCGDuration
  effect array SCGEffects
  integer array SCGLevel
  texttag array SCGIndicators
  unit array SCGTargets

  group SCGVictims
  integer SCGTargetsQuantity
endglobals 

function SCGOnExplosionCallback takes nothing returns nothing 
endfunction 

function spellCorpseGas takes unit c, unit t, integer lvl returns nothing
  local integer i = SCGTargetsQuantity
  local texttag indicator = null

  if (i >= JASS_MAX_ARRAY_SIZE) or (null == c) or (null == t) or (lvl < 1) then
    return
  endif


  set SCGCasters[i] = c
  set SCGEffects[i] = AddSpecialEffectTarget("Abilities\\Spells\\NightElf\\TargetArtLumber\\TargetArtLumber.mdl", t, "origin")
  set SCGTargets[i] = t
  set SCGDuration[i] = SCG_DELAY
  set indicator = CreateTextTagUnitBJ(I2S(R2I(SCG_DELAY)), t, 0.0, 8.0, 100.0, 100.0, 100.0, 0)
  set SCGIndicators[i] = indicator
  set SCGLevel[i] = lvl
  set SCGTargetsQuantity = SCGTargetsQuantity + 1
endfunction 

function SCGOnCastCallback takes nothing returns nothing 
  local unit caster = GetSpellAbilityUnit() 

  local integer spellLevel = GetUnitAbilityLevel(caster, CORPSE_GAS) 

  call spellCorpseGas(caster, GetSpellTargetUnit(), spellLevel) 

  set caster = null 
endfunction 

function SCGUpdateCallback takes nothing returns nothing 
  local integer i = SCGTargetsQuantity
  local unit u = null
  local unit f = null
  local boolean mustBeDestroyed = false
  local real dmg = 0.0

  loop 
    exitwhen i <= 0
    set i = i - 1
    set u = SCGTargets[i] 
    if IsUnitAliveBJ(u) then
      /* update visuals */
      set SCGDuration[i] = SCGDuration[i] - SCG_UPDATE_TIMEOUT
      call SetTextTagTextBJ(SCGIndicators[i], I2S(R2I(SCGDuration[i])), 8.0)
      call SetTextTagPosUnitBJ(SCGIndicators[i], SCGTargets[i], 0.0)
      if SCGDuration[i] <= 2.0 then
        call SetTextTagColorBJ(SCGIndicators[i], 100.0, 0.0, 0.0, 0.0)
      endif
      /* end update visuals */

      /* explode when needed */
      if SCGDuration[i] <= 0.0 then 
	call GroupClear(SCGVictims)
	call GroupEnumUnitsInRangeCounted(SCGVictims, GetUnitX(u), GetUnitY(u), 512.0, null, 6)

	set dmg = (30.0 + 30.0 * I2R(SCGLevel[i])) * (GetUnitState(SCGTargets[i], UNIT_STATE_LIFE) / 300.0)

        call SetUnitExploded(SCGTargets[i], true)
        call UnitDamageTargetBJ(SCGCasters[i], SCGTargets[i], 300.0, ATTACK_TYPE_MAGIC, DAMAGE_TYPE_DISEASE)
	call SetUnitExploded(SCGTargets[i], false)

	call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Undead\\DeathCoil\\DeathCoilSpecialArt.mdl", SCGTargets[i], "origin"))
	loop
	  set f = FirstOfGroup(SCGVictims)
	  exitwhen null == f
	  if not IsUnitType(f, UNIT_TYPE_UNDEAD) and IsUnitAliveBJ(f) and GetUnitAbilityLevel(f, 'Avul') == 0 then
	    call UnitDamageTargetBJ(SCGCasters[i], f, dmg, ATTACK_TYPE_MAGIC, DAMAGE_TYPE_DISEASE)
	    if dmg > 60.0 then
	      call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Undead\\DeathCoil\\DeathCoilSpecialArt.mdl", f, "origin"))
	    endif
	  endif
	  call GroupRemoveUnit(SCGVictims, f)
	endloop
      endif 
      /* end explode if needed */
    endif 

    /* cleanup */
    set mustBeDestroyed = IsUnitDeadBJ(u) or SCGDuration[i] <= 0.0
    if mustBeDestroyed then 
      call DestroyTextTag(SCGIndicators[i])
      call DestroyEffect(SCGEffects[i])

      set SCGTargetsQuantity = SCGTargetsQuantity - 1

      set SCGCasters[i] = SCGCasters[SCGTargetsQuantity]
      set SCGDuration[i] = SCGDuration[SCGTargetsQuantity]
      set SCGEffects[i] = SCGEffects[SCGTargetsQuantity]
      set SCGIndicators[i] = SCGIndicators[SCGTargetsQuantity]
      set SCGLevel[i] = SCGLevel[SCGTargetsQuantity]
      set SCGTargets[i] = SCGTargets[SCGTargetsQuantity] 

      set SCGCasters[SCGTargetsQuantity] = null
      set SCGEffects[SCGTargetsQuantity] = null
      set SCGIndicators[SCGTargetsQuantity] = null
      set SCGTargets[SCGTargetsQuantity] = null 
    endif 
    /* end cleanup */
  endloop 

  set u = null 
  set f = null
endfunction 

function SCGOnCastFilter takes nothing returns boolean
  local boolean result = true 
  set result = CORPSE_GAS == GetSpellAbilityId() and result
  set result = GetSpellTargetUnit() != null and result
  set result = IsUnitType(GetSpellTargetUnit(), UNIT_TYPE_UNDEAD) and result
  return result
endfunction

function initSpellCorpseGas takes nothing returns nothing 
  local trigger t = CreateTrigger() 
  local timer updateTimer = CreateTimer()

  set SCGTargetsQuantity = 0
  set SCGVictims = CreateGroup()

  call TimerStart(updateTimer, SCG_UPDATE_TIMEOUT, true, function SCGUpdateCallback) 

  call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_SPELL_CAST)
  call TriggerAddCondition(t, Condition(function SCGOnCastFilter))	
  call TriggerAddAction(t, function SCGOnCastCallback) 
 
  set t = null 
endfunction 
Загруженные файлы
0
22
5 лет назад
Отредактирован Zahanc
0

» Осквернитель / Главная страница

Репозиторий Git на BitBucket. Использую скрипты чтобы паковать архив кампании. В будущем расширю чтобы упростить глобализацию.
git clone https://vladyslavbondatzohoeu@bitbucket.org/vladyslavbondatzohoeu/plaguebringergame.git
0
22
6 лет назад
0

» Осквернитель / Главная страница

Потерял исходники (опять). Осталось только то что на сайте. Выпуск откладывается.
0
22
6 лет назад
0

» WarCraft 3 / Вселенная WarCraft

Nosferoh,
Ну, они знакомы давно. Ещё Кенариус контактировал с минотаврами но Войны Древних, а таурены в своё время пытались поймать Малорна. Возможно, минотавры объединялись с Ночными Эльфами против кентавров.
Попрошу источники.
0
22
6 лет назад
0

» WarCraft 3 / Поясните белое пятно в сюжете игры

Разве в книгах от Кристи Голден этого нету?
0
22
6 лет назад
0

» WarCraft 3 / Пара элементарных вопросов

RikLine,
Можно отловить событие поражения для игрока или выход игрока.
0
22
6 лет назад
0

» WarCraft 3 / Пара элементарных вопросов

Нету функции возвращающей урон юнита.
Если очень нужно, придется прибегнуть к мемхаку или писать свою систему нанесения урона.
+
Возможно в новой версии игры ввели, не уверен. Не использую последнюю версию поскольку не могу заставить JNGP работать в таком случае.
0
22
6 лет назад
0

» Повелитель Бездны / Главная страница

Version 3.
Changelog.
  1. Replaced first three spells of Pit Lord.
  2. Fixed bug with optional quest in second map. Now only civilians count as sacrifices. Changed the reward also.

Добавлю русскую версию позже. Я потерял файлы локализации.
Загруженные файлы
0
22
6 лет назад
0

» Fa_losophy / XGMolution

Я так понял Raised предлагает сделать фильтрование ресурсов по тегам. Сейчас можно только выбрать все ресурсы содержащие один определённый тег.
7
22
6 лет назад
7

» Fa_losophy / XGMolution

Должен сказать что поиск по сайту слабый. Я попользовался им неделю как его выпустили, и с тех пор для поиска по сайту использую сторонние поисковики.
4
22
6 лет назад
4

» Дневник Сильваны / Как использовать все место на карте?

Нужно больше информации о том как манипулировать вниманием игрока. Как дать понять игроку куда идти? Как интересно спрятать тайники? Как создать ощущение пространства (обычно делается с помощью разницы высот)? Как донести тему местности (хотя это больше про эстетику).
0
22
6 лет назад
Отредактирован Zahanc
0

» WarCraft 3 / Галерея скриншотов ландшафта

Да, я почерпнул приём создания "темы" для игры прежде механик из литературы (Game Design Lenses, кажется). Что-то должно быть написано конкретно о дизайне уровней. Ищу дальше.
0
22
6 лет назад
0

» WarCraft 3 / Галерея скриншотов ландшафта

koloff,
То что Вы предлагаете имеет смысл для микродекоринга. Вопрос был:
Меня интересует именно механики, а не эстетика.
Например, как обыграть комнату с боссом? Где поставить тайники? Откуда должны нападать враги? И так далее. Избавиться от arbitrary geometry.
0
22
6 лет назад
0

» WarCraft 3 / Галерея скриншотов ландшафта

Немного не в тему, но я всё таки спрошу. Поделитесь какой литературой на тему дизайна уровней, пожалуйста. Меня интересует именно механики, а не эстетика. Пока что собираю отдельные рецепты по крупицам со всей Сети. Должно же быть что-то связное где-то.
0
22
6 лет назад
0

» Дневник Сильваны / Послушник

Мне нужен рескин гидры для кампании. Если вдруг ищите идеи.
1
22
6 лет назад
1

» Дневник Сильваны / Послушник

У меня тоже. Не суть.
0
22
6 лет назад
0

» Дневник Сильваны / Послушник

Напомнило мне xgm.guru/p/occultism/index с его автором xgm.guru/user/Skairus
1
22
6 лет назад
1

» Дневник Сильваны / Послушник

Любопытно. По снимку, если бы не анимации, так на послушника вовсе не похоже.
0
22
6 лет назад
0

» WarCraft 3 / vJass: импортировать несколько скриптов.

Сделал так:
include "scriptA.j"
include "scriptB.j"
vJass и cJass включены. Предварительно добавил файлы в "D:\games\Jass New Gen Pack Rebuild\AdicHelper\lib". Я не могу хранить файлы в той же папке что и карта из-за того как устроен сборщик кампаний.
Заработало. Спасибо.
0
22
6 лет назад
0

» WarCraft 3 / vJass: импортировать несколько скриптов.

Да. Почему это важно?
+
Ещё включен сборщик кампаний, но это не должно иметь значение. К тому же, мне обязательно чтобы это работало со сборщиком.
0
22
6 лет назад
0

» World of Warcraft Modding / Импорт ИИ на карте

ИИ скрипт добавляется в архив карты, как любой другой импортируемый файл. Изменения сделанные на исходном скрипте никак не отразятся на том файле которых запакован в архив карты.
К тому же, ИИ созданные с помощью WE импортируются в двух шагах.
0
22
6 лет назад
0

» Осквернитель / Главная страница

хочу использовать систему заданий
И облачные сервисы не подразумевают ведения changelog'ов.
0
22
6 лет назад
Отредактирован Zahanc
0

» WarCraft 3 / vJass: как перебрать все экземпляры структуры?

То есть thistype(3) вернёт мне третий экземлпяр, если он существует? В смысле индекс экземпляра, то есть 3.
0
22
6 лет назад
Отредактирован Zahanc
0

» WarCraft 3 / vJass: как перебрать все экземпляры структуры?

pro100master:
тогда делай переменную приватную и он обрашать будет только внутри библиотек... извне будет ошибка
Суть в том чтобы избежать повторения кода. А именно алгоритм стэка.
Что значит следующее:
((код
thistype(0)
))
Здесь сказано что это ключевое слово, но не функция.