Ty3uK, Ладно проще: когда ты присваиваешь какую либо перменную например unit = GetTriggerUnit() ты вызываешь внутри игровые функции которая присваивает ссылку на юнита через GetTriggerUnit() а unit это ссылка на GetTriggerUnit() поэтому это буквально не считаеться функцией, это уже основы програмирования любого языка програмирования. Все что ты делаешь все функции даже когда печатаешь или мышью водишь все вызывает функции.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Пятница, 23 Сентября 2011, 12:57:54
FatalBlade, И что здесь сложно пикаешь всех трупой вокруг и накладываешь эффект взрыва создаешь даммика около каждого трупа и кастуешь способность наносящую урон или триггерно наносишь урон.
Так я ж про то и говорю- ноль тоже вызов пустой функции, поэтому можно засунуть ее в локальную и уничтожить вообщем, это сугубо мое мнение, а так же некоторый теоретический материал от Дуси в аське
FatalBlade, И что здесь сложно пикаешь всех трупой вокруг и накладываешь эффект взрыва создаешь даммика около каждого трупа и кастуешь способность наносящую урон или триггерно наносишь урон.
Я ЗНАЮ КАК ЭТО ДЕЛАТЬ! У меня уже есть готовые спеллы, как минимум 150 таких триггерных спеллов, даже сложнее чем этот. Этот ещё 1 из самых простых. Мне всего лишь нужно их оптимизировать, избавить от глобальных переменных и глобальных таймеров. Вот и всё)
Хм... А что в этом такого? О.о основы их работы не требуют особых знаний (если не вдаваться в чисто физические дебри). А по твоему, что же тогда означает, например, call TimerStart(t, 1., false, null), как не старт таймера с пустой функцией? О.о
Добавлено (23 Сентябрь 2011, 13:07:40) --------------------------------------------- Домой со школоло приду и сделаю, на уроках не кайф с телефона, да он еще и сдохнет скоро
call TimerStart(t, 1., false, null), как не старт таймера с пустой функцией? О.о
Здесь ты вызываешь функцию УЖЕ так как здесь стоит call! да ты здесь тоже можно поставить call set u = null но это - лишь присвоение перменной значение. Кароче хочешь услышать однозначный и правильный ответ пообщайся с создателями C#.
простой пример: функция Какое яблоко яблоко != груша конец функции
вызвать функцию Какое яблоко это тебе выведет что яблоко != груша тоесть чтобы это вывести ты вызвал функцию Какое яблоко а она в себе имеет ТОЛЬКО ЗНАЧЕНИЕ что яблоко != груша.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Пятница, 23 Сентября 2011, 13:18:56
function Trig_Explode_Corpses_Conditions takes nothing returns boolean if ( GetSpellAbilityId() == 'A0QT' ) then return true endif return false endfunction
function EC1 takes nothing returns nothing local timer t = GetExpiredTimer() local group g = LoadGroupHandle(udg_Skills, GetSpellAbilityId(), 0) local unit u local location x local real d local integer l = GetUnitAbilityLevel( GetTriggerUnit(), 'A0QT')
if ( l == 1 ) then set d = 50.00 endif if ( l == 2 ) then set d = 65.00 endif if ( l == 3 ) then set d = 85.00 endif if ( l == 4 ) then set d = 110.00 endif if ( l == 5 ) then set d = 140.00 endif if ( l == 6 ) then set d = 175.00 endif if ( l == 7 ) then set d = 215.00 endif if ( l == 8 ) then set d = 260.00 endif if ( l == 9 ) then set d = 310.00 endif if ( l == 10 ) then set d = 365.00 endif
set u = FirstOfGroup(g) loop exitwhen u == null set u = FirstOfGroup(g) set x = GetUnitLoc(u) call UnitDamagePointLoc( u, 0, 180.00, x, d, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_FORCE ) call DestroyEffect(AddSpecialEffectLoc( "Units\\Undead\\Abomination\\AbominationExplosion.mdl", x )) call RemoveLocation(x) call GroupRemoveUnit(g,u) call RemoveUnit(u) endloop call PlaySoundOnUnitBJ( gg_snd_ImpaleLand, 100, GetTriggerUnit()) call DestroyGroup(g) call DestroyTimer(t) endfunction
function group0 takes nothing returns nothing local location p = GetUnitLoc(GetEnumUnit()) local unit u if (IsUnitDeadBJ(GetEnumUnit()) == true) then set u = CreateUnit( GetOwningPlayer(GetTriggerUnit()), 'h007', GetLocationX(p), GetLocationY(p), 0.00 ) call GroupAddUnit(LoadGroupHandle(udg_Skills, GetSpellAbilityId(), 0), u) call RemoveUnit(GetEnumUnit()) set u = null endif call RemoveLocation(p) endfunction
function Trig_Explode_Corpses_Actions takes nothing returns nothing local timer t = CreateTimer() local location p = GetUnitLoc(GetTriggerUnit()) local group g = CreateGroup() call SaveGroupHandle(udg_Skills, GetSpellAbilityId(), 0, g) call ForGroup( GetUnitsInRangeOfLocAll(900.00, p), function group0) call DestroyGroup(GetLastCreatedGroup()) call RemoveLocation(p) call TimerStart( t, 0.4, false, function EC1 ) endfunction
И я решил проверить что именно не работает. Дал дамми видимую модель, что бы всех дамми была видно. Так вот, оказывается, дамми создаются, но не создаётся эффект и нету дамага. Как будто группа просто тупо не сохраняется в хэш
Ок Сам спелл, это канал, не требующий цель. Target Type - Instant (No Target). Когда герой кликает на спелл, то через 0.4 секунды, все трупы которые валяются вокруг героя в радиусе 900, взрываются. Каждый взорвавшийся труп наносит урон всем юнитам в радиусе 180 (от трупа). Урон может наноситься не только врагам, но и союзникам, если они находятся в радиусе 180 от взорвавшегося трупа.
Формула зависимости урона от уровня способности? И тогда сделаю.
Нет. То есть урон то зависит от уровня, но не формула урона. Это тупо 10 ифзенов, но, формула есть. Урон спелла = (Уровень спелла + 1) * 5 + Урон предыдущего уровня * Если уровень спелла равен 1, то Урон предыдущего уровня = 40. Вообщем урон на 1 уровне спелла будет 50, на втором 65, на третим 85 итд...
Quote (SirNikolas)
И есть ли JNGP?
Нет.
Добавлено (23 Сентябрь 2011, 15:23:09) --------------------------------------------- Я смог это сделать на джассе, но при этом пришлось сделать 2 глобалки! Дамми (массив юнитов) + количество дамми (интежер).
Сообщение отредактировал FatalBlade - Пятница, 23 Сентября 2011, 15:23:57
function Trig_Explode_Corpses_Timer takes nothing returns nothing local timer t = GetExpiredTimer() local integer id = GetHandleId(t) local group g = LoadGroupHandle(udg_Hash, id, 0) local integer l = LoadInteger(udg_Hash, id, 1) local unit u = LoadUnitHande(udg_Hash, id, 2) local unit u2 local unit u3 local real d local real x local real y if l <= 4 then if l <= 2 then if l == 1 then set d = 50. else set d = 65. endif elseif l == 3 then set d = 85. else set d = 110. endif elseif l <= 8 then if l <= 6 then if l == 5 then set d = 140. else set d = 175. endif elseif l == 7 then set d = 215. else set d = 260. endif elseif l == 9 then set d = 310. else set d = 365. endif call AttachSoundToUnit(gg_snd_ImpaleLand, u) call SetSoundVolume(gg_snd_ImpaleLand, 127) call StartSound(gg_snd_ImpaleLand) loop set u2 = FirstOfGroup(g) exitwhen u2 == null call GroupRemoveUnit(g, u2) set x = GetWidgetX(u2) set y = GetWidgetY(u2) call DestroyEffect(AddSpecialEffect("Units\\Undead\\Abomination\\AbominationExplosion.mdl", x, y)) call RemoveUnit(u2) call GroupEnumUnitsInRange(udg_Group, x, y, 180., null) loop set u3 = FirstOfGroup(udg_Group) exitwhen u3 == null call GroupRemoveUnit(udg_Group, u3) call UnitDamageTarget(u, u3, d, true, false, ATTACK_TYPE_MAGIC, DAMAGE_TYPE_MAGIC, WEAPON_TYPE_WHOKNOWS) endloop endloop call DestroyGroup(g) call FlushChildHashtable(udg_Hash, id) call DestroyTimer(t) set t = null set g = null set u = null set u2 = null set u3 = null endfunction
function Trig_Explode_Corpses_Actions takes nothing returns nothing local unit u = GetTriggerUnit() local group g = CreateGroup() local timer t = CreateTimer() local integer id = GetHandleId(t) local unit u call GroupEnumUnitsInRange(udg_Group, GetWidgetX(u), GetWidgetY(u), 900., null) loop set u = FirstOfGroup(udg_Group) exitwhen u == null call GroupRemoveUnit(udg_Group, u) if GetWidgetLife(u) <= .0 and IsUnitType(u, UNIT_TYPE_HERO) == false then call GroupAddUnit(g, u) endif endloop call SaveAgentHandle(udg_Hash, id, 0, g) call SaveInteger(udg_Hash, id, 1, GetUnitAbilityLevel(u, 'A0QT')) call SaveAgentHandle(udg_Hash, id, 2, u) call TimerStart(t, .4, false, function Trig_Explode_Corpses_Timer) set g = null set t = null set u = null endfunction
function InitTrig_Explode_Corpses takes nothing returns nothing local trigger trig = CreateTrigger() local integer i = 0 loop call TriggerRegisterPlayerUnitEvent(trig, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT, null) exitwhen i == 11 set i = i + 1 endloop call TriggerAddCondition(trig, Filter(function Trig_Explode_Corpses_Conditions)) call TriggerAddAction(trig, function Trig_Explode_Corpses_Actions) set trig = null endfunction
Писал в Notepad++, так что могут быть ошибки.
Добавлено (23 Сентябрь 2011, 15:45:34) --------------------------------------------- Нужно создать глобальные переменные Hash типа Hashtable и Group типа Unit group.