Добавлен , опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
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
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
7
5 лет назад
0
как сделать ульту сларка?
0
29
5 лет назад
0
как сделать ульту сларка?
Руками.
0
18
5 лет назад
Отредактирован Hodor
0
quq_CCCP, но ведь они же как то добавляли новые предметы, абилки и т.д
ещё как захотят) Обезьяну они не сделали потому что у них походу нету моделлеров
+ я общаюсь с человеком, который общается с кодерами айкапа
меня как минимум услышат)

и ещё я в dll'ке айкапа в асм куче разглядел дофига имен нативок и т.д в одном из сегментов
мне кажется что они тупо берут и пихают в процесс уже скомпилированный в ++ "скрипт" карты, им это выгодно как минимум чтобы калькуляторы не лагали
0
32
5 лет назад
0
UrsaBoss, рили? Ты знаком с кодерами айкапа и знаешь как и что они делают? Очень интересно послушать.
0
18
5 лет назад
0
quq_CCCP:
UrsaBoss, рили? Ты знаком с кодерами айкапа и знаешь как и что они делают? Очень интересно послушать.
ну
я общаюсь с человеком, который общается с кодерами айкапа
если захочу буду знаком)
и знаешь как и что они делают?
не знаю) Просто предполагаю
upd
не знаю и не интересовался*
и ещё я в dll'ке айкапа в асм куче разглядел дофига имен нативок и т.д в одном из сегментов
ну точнее в dll'ке которая в .exe шнике, который внутри карты
0
32
5 лет назад
0
UrsaBoss, ну скажем так там прямо есть кусок jass кода.
0
18
5 лет назад
0
quq_CCCP:
UrsaBoss, ну скажем так там прямо есть кусок jass кода.
может быть, я ещё утром быстро пробежал в иде по сегментам, мб не заметил что то
0
4
5 лет назад
0
Я хотел как-то рики варс, где особенность что если тебя видит какой либо игрок - ты получаешь урон. От этого как-то плясать и развивать идею.
0
32
5 лет назад
0
UrsaBoss, но подробностей устройства этой длл у нас нет, как уж они там извернулись я не знаю, но интересно.
1
18
5 лет назад
1
quq_CCCP:
UrsaBoss, но подробностей устройства этой длл у нас нет, как уж они там извернулись я не знаю, но интересно.
я жалею что забил болт на обучение сразу же на 1 курсе и ушёл на слесаря)
я так то знаю ассемблер и частично устройство машинного кода, но очень сильно не хватает опыта работы с ним чтобы реально в этом понимать
upd
точнее понимать что написано на ассемблере
2
32
5 лет назад
2
quq_CCCP, скилетон кинг варс тоже будет весьма интересно, если взять за основу часть механики сларков, а конкретно: 6 аганимов = смена класса + ещё 5 аганимов, только поместить их в другую среду, например они начинают на кладбище и должны куда-то подняться, параллельно прокачиваюсь в 1 из классов: упор на стан, упор на вампиризм, упор на создание скелетов, упор на воскрешение и т.д., а будут они например разорять деревни, против магов альянса, даже не обязательно режим друг против друга
А если Рики Wars ну, тоже не обязательно вообще FFA, лучше вообще его исключить, тоже сделать на подобие захвата садов альянса, и пройти через 5 уровней обнаружения, задача прокачать некий навык скрытности на 6, чтобы избежать обнаружения на 5, ну и так же в много классов: класс тучи, блинка, удара в спину, класс ультимейта (как в доте2 щас ульта по области)
В любом случае НЕ FFA как показали себя сларки, люди моментально ливают, когда надо драться друг против друга, даже когда команда людей, против команды ботов, а если все в союзе месят боссов, то никаких проблем не вызывает такая игра
Обязательно начну любую из этих игр, как только устаканется 131 патч =)
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.