Добавлен Hodor,
опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
Jass
Тип:
Способность
Версия Warcraft:
1.26+
Rikimaru со всеми способностями
Custom Script
function Error takes player p, string s returns nothing
local sound snd = CreateSoundFromLabel("InterfaceError", false, false, false, 10, 10)
if( GetLocalPlayer() == p )then
if(s != "") and (s != null)then
call ClearTextMessages()
call DisplayTimedTextToPlayer(p, 0.50, -1.00, 2.00, "|cffffcc00"+s+"|r")
endif
call StartSound(snd)
endif
call KillSoundWhenDone(snd)
endfunction
function AddAbility takes unit u, integer i returns nothing
call UnitAddAbility(u, i)
call UnitMakeAbilityPermanent(u, true, i)
endfunction
Smoke Screen
function Trig_Smoke_Screen_Actions takes nothing returns nothing
local unit u = GetTriggerUnit()
local real x = GetSpellTargetX()
local real y = GetSpellTargetY()
local unit dummy = CreateUnit(GetOwningPlayer(u), 'e003', x, y, 0)
local integer level = GetUnitAbilityLevel(u, 'A0RG')
local real size = (83+17*level)*0.01
call SetUnitVertexColor(dummy, 255, 255, 255, 150)
call UnitApplyTimedLife(dummy, 'BTLF', 6)
call SetUnitScale(dummy, size, size, size)
call AddAbility(dummy, 'A0E7')
call SetUnitAbilityLevel(dummy, 'A0E7', level)
call IssuePointOrder(dummy, "cloudoffog", x, y)
set u = null
set dummy = null
endfunction
function Trig_Smoke_Screen_Conditions takes nothing returns boolean
if GetSpellAbilityId() == 'A0RG' then
call Trig_Smoke_Screen_Actions()
endif
return false
endfunction
//===========================================================================
function InitTrig_Smoke_Screen takes nothing returns nothing
set gg_trg_Smoke_Screen = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(gg_trg_Smoke_Screen, EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition(gg_trg_Smoke_Screen, Condition(function Trig_Smoke_Screen_Conditions))
endfunction
Permanent Invisibility
function Trig_Permanent_Invisibility_Regeneration takes nothing returns boolean
local trigger trg = GetTriggeringTrigger()
local integer trgH = GetHandleId(trg)
local unit u = LoadUnitHandle(udg_hashtable, trgH, 2)
local integer level = GetUnitAbilityLevel(u, 'A00J')
local real r = (level+3)/4
if TimerGetElapsed(udg_dotaTimer) > (10-2*level)+udg_InvisibilityTime then
call SetUnitState(u, UNIT_STATE_LIFE, GetUnitState(u, UNIT_STATE_LIFE)+r)
endif
set trg = null
set u = null
return false
endfunction
function Trig_Permanent_Invisibility_Actions takes nothing returns boolean
local unit attacker = GetAttacker()
local integer level = GetUnitAbilityLevel(attacker, 'A00J')
if level > 0 then
set udg_InvisibilityTime = TimerGetElapsed(udg_dotaTimer)
call UnitRemoveAbility(attacker, udg_InvisibilityLevel[level])
call UnitRemoveAbility(attacker, 'A00J')
call AddAbility(attacker, udg_InvisibilityLevel[level])
call AddAbility(attacker, 'A00J')
call SetUnitAbilityLevel(attacker, 'A00J', level)
endif
set attacker = null
return false
endfunction
function Trig_Permanent_Invisibility_Learn_Actions takes nothing returns nothing
local unit u = GetTriggerUnit()
local integer level = GetUnitAbilityLevel(u,'A00J')
local trigger trg
local integer trgH
if level == 1 then
set trg = CreateTrigger()
set trgH = GetHandleId(trg)
call TriggerRegisterTimerEvent(trg, 0.25, true)
call TriggerAddCondition(trg, Condition(function Trig_Permanent_Invisibility_Regeneration))
call SaveUnitHandle(udg_hashtable, trgH, 2, u)
set trg = null
endif
if GetUnitAbilityLevel(u, 'A0MB') == 0 then
call AddAbility(u, 'A0MB')
endif
if level == 2 then
call UnitRemoveAbility(u, udg_InvisibilityLevel[1])
elseif level == 3 then
call UnitRemoveAbility(u, udg_InvisibilityLevel[1])
call UnitRemoveAbility(u, udg_InvisibilityLevel[2])
elseif level == 4 then
call UnitRemoveAbility(u, udg_InvisibilityLevel[1])
call UnitRemoveAbility(u, udg_InvisibilityLevel[2])
call UnitRemoveAbility(u, udg_InvisibilityLevel[3])
endif
call SetUnitAbilityLevel(u, 'A0MB', level)
call AddAbility(u, udg_InvisibilityLevel[level])
set u = null
endfunction
function Trig_Permanent_Invisibility_Learn_Conditions takes nothing returns boolean
if GetLearnedSkill() == 'A00J' and IsUnitIllusion(GetTriggerUnit()) == false then
call Trig_Permanent_Invisibility_Learn_Actions()
endif
return false
endfunction
//===========================================================================
function InitTrig_Permanent_Invisibility takes nothing returns nothing
local trigger trg = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(trg, EVENT_PLAYER_HERO_SKILL)
call TriggerAddCondition(trg, Condition(function Trig_Permanent_Invisibility_Learn_Conditions))
set trg = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(trg, EVENT_PLAYER_UNIT_ATTACKED)
call TriggerAddCondition(trg, Condition(function Trig_Permanent_Invisibility_Actions))
set trg = null
endfunction
Backstab
function Trig_Backstab_Actions takes nothing returns nothing
local unit attacker = GetAttacker()
local unit u = GetTriggerUnit()
local integer level = GetUnitAbilityLevel(attacker,'A0DZ')
local boolean b = LoadBoolean(udg_hashtable, GetHandleId(attacker), 332)
local real r = RAbsBJ(GetUnitFacing(u)-GetUnitFacing(attacker))
if r > 180 then
set r = 360-r
endif
if r <= 105 or b then
call BJDebugMsg(R2S(r))
call SaveBoolean(udg_hashtable, GetHandleId(attacker), 332, false)
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Other\\Stampede\\StampedeMissileDeath.mdl", u, "chest"))
call UnitDamageTarget(attacker, u, GetHeroAgi(attacker, true)*(0.25*level+0.25), true, true, ATTACK_TYPE_HERO, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS)
endif
set attacker = null
set u = null
endfunction
function Trig_Backstab_Conditions takes nothing returns boolean
if GetUnitAbilityLevel(GetAttacker(), 'A0DZ') > 0 and IsUnitType(GetTriggerUnit(), UNIT_TYPE_STRUCTURE) == false then
if IsUnitAlly(GetTriggerUnit(), GetOwningPlayer(GetAttacker())) == false or (IsUnitType(GetTriggerUnit(), UNIT_TYPE_HERO) == false and GetUnitState(GetTriggerUnit(), UNIT_STATE_LIFE)/GetUnitState(GetTriggerUnit(), UNIT_STATE_MAX_LIFE) < 0.5) then
call Trig_Backstab_Actions()
endif
endif
return false
endfunction
//===========================================================================
function InitTrig_Backstab takes nothing returns nothing
set gg_trg_Backstab = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(gg_trg_Backstab, EVENT_PLAYER_UNIT_ATTACKED)
call TriggerAddCondition(gg_trg_Backstab, Condition(function Trig_Backstab_Conditions))
endfunction
Blink Strike
function Trig_Blink_Strike_IsAbilityBlink takes integer i returns boolean
return i == 'A2YZ' or i == 'A2YW' or i == 'A2YV' or i == 'A2YY' or i == 'A2YX' or i == 'A2Z0' or i == 'A2ZL'
endfunction
function Trig_Blink_Strike_Actions takes nothing returns nothing
local unit u = GetTriggerUnit()
local unit target = GetSpellTargetUnit()
local real damage = 10+30*GetUnitAbilityLevel(u, 'A0K9')
local real x = GetUnitX(target)-75*Cos(GetUnitFacing(target)*bj_DEGTORAD)
local real y = GetUnitY(target)-75*Sin(GetUnitFacing(target)*bj_DEGTORAD)
local integer charges = LoadInteger(udg_hashtable, GetHandleId(u), 828)
if charges > 0 then
call SetUnitX(u, x)
call SetUnitY(u, y)
call SetUnitFacing(u, GetUnitFacing(target))
call DestroyEffect(AddSpecialEffect("war3mapImported\\BlinkStrike.mdx", x, y))
if IsUnitEnemy(target, GetOwningPlayer(u)) then
call UnitDamageTarget(u, target, damage, true, true, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_FIRE, WEAPON_TYPE_WHOKNOWS )
call SaveBoolean(udg_hashtable, GetHandleId(u), 332, true)
call IssueTargetOrder(u, "attack", target)
endif
call UnitRemoveAbility(u, udg_Charges[charges])
set charges = charges-1
call SaveInteger(udg_hashtable, GetHandleId(u), 828, charges)
call AddAbility(u, udg_Charges[charges])
else
call Error(GetOwningPlayer(GetTriggerUnit()), "No more charges")
endif
set u = null
set target = null
endfunction
function Trig_Blink_Strike_Conditions takes nothing returns boolean
if Trig_Blink_Strike_IsAbilityBlink(GetSpellAbilityId()) then
call Trig_Blink_Strike_Actions()
endif
return false
endfunction
function Trig_Blink_Strike_Blink takes nothing returns boolean
if Trig_Blink_Strike_IsAbilityBlink(GetSpellAbilityId()) then
call DestroyEffect(AddSpecialEffect("war3mapImported\\BlinkStrike.mdx", GetUnitX(GetTriggerUnit()), GetUnitY(GetTriggerUnit())))
endif
return false
endfunction
function Trig_Blink_Strike_Restore_Charges takes nothing returns boolean
local trigger trg = GetTriggeringTrigger()
local integer trgH = GetHandleId(trg)
local unit u = LoadUnitHandle(udg_hashtable, trgH, 2)
local integer charges = LoadInteger(udg_hashtable, GetHandleId(u), 828)
local integer time = LoadInteger(udg_hashtable, trgH, 34)
local integer maxCharges = 3+GetUnitAbilityLevel(u, 'A0K9')
if charges < maxCharges then
set time = time-1
call SaveInteger(udg_hashtable, trgH, 34, time)
if time == 0 then
call UnitRemoveAbility(u, udg_Charges[charges])
set time = 35
call SaveInteger(udg_hashtable, trgH, 34, time)
set charges = charges+1
call SaveInteger(udg_hashtable, GetHandleId(u), 828, charges)
call AddAbility(u, udg_Charges[charges])
endif
endif
set trg = null
set u = null
return false
endfunction
function Trig_Blink_Strike_Learn_Actions takes nothing returns nothing
local unit u = GetTriggerUnit()
local trigger trg = CreateTrigger()
local integer i = GetHandleId(trg)
call SaveInteger(udg_hashtable, GetHandleId(u), 828, 4)
call AddAbility(u, udg_Charges[4])
call TriggerRegisterTimerEvent(trg, 1, true)
call TriggerAddCondition(trg, Condition(function Trig_Blink_Strike_Restore_Charges))
call SaveUnitHandle(udg_hashtable, i, 2, u)
call SaveInteger(udg_hashtable, i, 34, 35)
set u = null
set trg = null
endfunction
function Trig_Blink_Strike_Learn_Conditions takes nothing returns boolean
if GetLearnedSkill() == 'A0K9' and IsUnitIllusion(GetTriggerUnit()) == false then
if GetUnitAbilityLevel(GetTriggerUnit(), 'A0K9') == 1 then
call Trig_Blink_Strike_Learn_Actions()
endif
endif
return false
endfunction
//===========================================================================
function InitTrig_Blink_Strike takes nothing returns nothing
local trigger trg = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(trg, EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition(trg, Condition(function Trig_Blink_Strike_Conditions))
set trg = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(trg, EVENT_PLAYER_UNIT_SPELL_CAST)
call TriggerAddCondition(trg, Condition(function Trig_Blink_Strike_Blink))
set trg = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(trg, EVENT_PLAYER_HERO_SKILL)
call TriggerAddCondition(trg, Condition(function Trig_Blink_Strike_Learn_Conditions))
set trg = null
endfunction
InitRikimaru
function InitTrig_InitRikimaru takes nothing returns nothing
set udg_InvisibilityLevel[1] = 'A2UR'
set udg_InvisibilityLevel[2] = 'A2US'
set udg_InvisibilityLevel[3] = 'A2UT'
set udg_InvisibilityLevel[4] = 'A2YU'
set udg_Charges[0] = 'A2YZ'
set udg_Charges[1] = 'A2YW'
set udg_Charges[2] = 'A2YV'
set udg_Charges[3] = 'A2YY'
set udg_Charges[4] = 'A2YX'
set udg_Charges[5] = 'A2Z0'
set udg_Charges[6] = 'A2ZL'
set udg_hashtable = InitHashtable()
call TimerStart(udg_dotaTimer, 999999.00, false, null)
endfunction
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
не знаю) Просто предполагаю
upd
не знаю и не интересовался*
ну точнее в dll'ке которая в .exe шнике, который внутри карты
я так то знаю ассемблер и частично устройство машинного кода, но очень сильно не хватает опыта работы с ним чтобы реально в этом понимать
upd
точнее понимать что написано на ассемблере
скорость разгона будет разной, если оба бары столкнутся - то победит тот, у кого скорость разгона выше ну или итемы такие то
ещё может быть вот так, один бара стоит - другой разогнался, второй прилетел и убил первого бару, т.к тот стоял (т.е скорость разгона 0)
игра будет что то типа вышибал
На карте в некотором месте эмитируется ситуация встречи двух гереов доты, герои максимально неприятные друг для друга, с некоторыми уровнями и вещями, ваша задача завалить опонента или сбежать от него. Встреча фуриона и клоквер гоблина, траксы и ликантропа, течиса и террорблейда.