Добавлен , не публикуется
Переделанная версия моей прошлой наработки.
Изменения:Все сделано на Jass.Переделана пассивная способность.Добавлена новая способность.Оптимизированы некоторые утечки.Убрано GUI.Исправлены недочёты с иконками.Теперь карта открывается у всех и без JNGP.Вес карты уменьшен.
Описание способностей:
1)Резка клинками:Герой производит серию ударов по врагу с разных точек нанося незначительный урон,после чего мгновенно разрезает его со спины нанеся огромный урон.
2)Быстрые атаки:Герой перемещается в случайные точки в радиусе 650 от начала способности нанося урон попадающимся рядом противникам.
3)Искуство Ассасина:Герой имеющий эту способность становится невидимым.При атаке он наносит серию ударов по врагу нанося урон.Через 4 секунды после атаки герой вновь становится невидимым.
4)Цепь:Герой крутит цепь вокруг себя.Каждые 0.02 секунды цепь наносит 20 урона.Количество сцепленных частей 12.Расстояние между частями 75.Длина цепи 1200.
`
ОЖИДАНИЕ РЕКЛАМЫ...
28
Gnusik, синусы,косинусы и теорему Пифагора проходили?
кроме этих 3 вещей тебе нечего не надо
6
nvc123:
Gnusik, синусы,косинусы и теорему Пифагора проходили?
кроме этих 3 вещей тебе нечего не надо
Проходили.Но я был в это время в плохой школе и нифига не понял.Мдеееееее.Туго будет.
Синус отношение противолежащего катета к гипотенузе,Косинус прилежащего в гипотенузе.Теорему Пифагора поздабыл.
28
Gnusik, сумма квадратов катетов равна квадрату гипотенузы(по этой теореме находят расстояние между юнитами)
6
nvc123:
сумма квадратов катетов равна квадрату гипотенузы
Спс вспомнил.
~(по этой теореме находят расстояние между юнитами)
Каким боком о_О
оуууууу.я понял но это сложновато.
Но остался вопрос.По отношению угол поворота
call SetUnitPositionLocFacingLocBJ( b, PolarProjectionBJ(GetUnitLoc(a), 45.00, GetUnitFacing(a)), GetUnitLoc(a) )
28
1 угол это 1 юнит,2 угол это 2 юнит,расстояние между ними это гипотенуза,разница x это 1 катет,разница y второй катет
и если открыть эти бж то в них написаны формулы о которых я говорю
6
nvc123:
1 угол это 1 юнит,2 угол это 2 юнит,расстояние между ними это гипотенуза,разница x это 1 катет,разница y второй катет
и если открыть эти бж то в них написаны формулы о которых я говорю
блин квадраты как я их вычислю.
28
ну я точно не уверен но возможно если умножить число само на себя то получится квадрат этого числа
6
nvc123:
ну я точно не уверен но возможно если умножить число само на себя то получится квадрат этого числа
да это так.Но как убрать квадрат гипотенузы?
Можно попробовать числа взять вдвое меньше и тогда будет искомое сразу.
28
Gnusik, то есть ты хочешь сказать что квадратный корень из 6*6+8*8=6/2*6/2+8/2*8/2?
SquareRoot() это квадратный корень
если не знаешь что такое квадратный корень
квадратный корень это действие противоположное действию возвести в квадрат,например:
4 в квадрате=16
квадратный корень из 16=4
6
nvc123, В принципе да.Я такой способ вроде в школе проходил.Или как то по другому.
28
Gnusik, то есть ты хочешь сказать что в твоей школе действуют другие законы физики и математики?
квадратный корень из 6*6+8*8=10
6/2*6/2+8/2*8/2=25
получается что вам в школе говорили что 10=25
либо место аномальное либо кто то спал на уроках
смотри как найти расстояние между 2 точками(юнитами)
r=SquareRoot(dx*dx+dy*dy)
где dx это разница x точек а dy разница y точек
r это гипотенуза(расстояние)
если мне не изменяет память вы должны были проходить это в 7 классе
6
nvc123,
то есть ты хочешь сказать что в твоей школе действуют другие законы физики и математики?

Или как то по другому

Значит метод забыл.Надо покопатся в тетрадках.
Не утрудит ли тебя(пишу уже в 4 раз,но код ты ещё не писал,может непонятно)
call SetUnitPositionLocFacingLocBJ( a, PolarProjectionBJ(GetUnitLoc(a), 50.00, GetUnitFacing(a)), GetUnitLoc(b) )
Напиши кодом без BJ пожалуйста.
28
открываешь джнгп, пишешь туда этот код, зажимаешь ctrl и лкм на функции и это я тебе 100 раз говорил
вот код где юнит u это твой юнит a,юнит u1 это твой юнит b, r это расстояние(вместо твоих 50)
function nobj takes unit u,real r,unit u1 returns nothing
real a=GetUnitFacing(u)*bj_DEGTORAD
real x=GetUnitX(u)
real y=GetUnitY(u)
real x1=GetUnitX(u1)
real y1=GetUnitY(u1)
SetUnitX(u,r*Cos(a)+x)
SetUnitY(u,r*Sin(a)+y)
SetUnitFacing(u,Atan2(y1-y,x1-x)*bj_RADTODEG)
endfunction
6
nvc123:
открываешь джнгп, пишешь туда этот код, зажимаешь ctrl и лкм на функции и это я тебе 100 раз говорил
вот код где юнит u это твой юнит a,юнит u1 это твой юнит b, r это расстояние(вместо твоих 50)
function nobj takes unit u,real r,unit u1 returns nothing
real a=GetUnitFacing(u)*bj_DEGTORAD
real x=GetUnitX(u)
real y=GetUnitY(u)
real x1=GetUnitX(u1)
real y1=GetUnitY(u1)
SetUnitX(u,r*Cos(a)+x)
SetUnitY(u,r*Sin(a)+y)
SetUnitFacing(u,Atan2(y1-y,x1-x)*bj_RADTODEG)
endfunction
Да.Блин я очень тупил.Сейчас делал новый наработок попробовал опять ctrl+lkm и узрел анти BJ.А за код спасибо.И да кстати.На GUI точки не создаются.там движется юнит.Жаль нельзя 2 в 1 сделать.
Сейчас случится нечто.Я может смогу создать MYI SPELL без BJ.
Теперь ещё вопрос.Я двигаю юнита по отношению своего поворота.Не соображу код.
Скилл уже МУИ
28
GetUnitLoc(b) создаёт точку,полярные координаты создают точку
SetUnitFacing(u,Atan2(y1-y,x1-x)*bj_RADTODEG)
y1 x1 координаты 2 юнита,y x координаты точки где был 1 юнит до того как мы его переместили
SetUnitX(u,r*Cos(a)+x)
SetUnitY(u,r*Sin(a)+y)
это двигает юнита на расстояние r под углом a
расстояние умноженное на косинус угла + его текущая координата x=его новая координата x
расстояние умноженное на синус угла + его текущая координата y=его новая координата y
6
nvc123:
это уже готовый код или переменные подгонять надо?
и пожалуйста скажи
real a=GetUnitFacing(u)*bj_DEGTORAD
real x=GetUnitX(u)
real y=GetUnitY(u)
real x1=GetUnitX(u1)
real y1=GetUnitY(u1)
SetUnitX(u,r*Cos(a)+x)
SetUnitY(u,r*Sin(a)+y)
SetUnitFacing(u,Atan2(y1-y,x1-x)*bj_RADTODEG)
как это вставить?
уже понял
хотя нет.как в 1 триггере делать?через таймер?
nvc123, скажи пожалуйста из за чего ошибка.На BJ не обращай внимания потом уберу.
код
function Trig_Black_Hole_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A002'
endfunction

function Trig_Black_Hole_Actions takes nothing returns nothing
    local unit Caster=GetSpellAbilityUnit()
    set udg_Cast_Point = GetOrderPointLoc()
    call CreateNUnitsAtLoc( 1,'h002',GetOwningPlayer(Caster),GetSpellTargetLoc(),bj_UNIT_FACING)
    local unit Dummy=bj_lastCreatedUnit
    call AddSpecialEffectLoc("T_baqixiaoguo.mdx",GetUnitLoc(Dummy))
    local effect Effect=bj_lastCreatedEffect
    set bj_forLoopAIndex = 1
    set bj_forLoopAIndexEnd = 16
    loop
        exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
        call ForGroupBJ(GetUnitsInRangeOfLocMatching(250.00,GetUnitLoc(Dummy),Condition(function Trig_Black_Hole_Func007Func001001003)),function Trig_Black_Hole_Func007Func001A)
        call TriggerSleepAction(0.20)
        set bj_forLoopAIndex = bj_forLoopAIndex + 1
    endloop
    call RemoveUnit(Dummy)
    call DestroyEffect(whichEffect)
    call RemoveLocation(Cast_Point)
endfunction

function Trig_Black_Hole_Func007Func001001003 takes nothing returns boolean
    return ( IsUnitEnemy(GetEnumUnit(), GetOwningPlayer(Caster)) == true )
endfunction

function Trig_Black_Hole_Func007Func001A takes nothing returns nothing
    call SetUnitPositionLocFacingBJ( GetEnumUnit(), PolarProjectionBJ(GetUnitLoc(Dummy), -8.00, AngleBetweenPoints(GetUnitLoc(Dummy), GetUnitLoc(GetEnumUnit()))),GetUnitFacing(Dummy))
endfunction


//===========================================================================
function InitTrig_Black_Hole takes nothing returns nothing
    set gg_trg_Black_Hole = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Black_Hole, EVENT_PLAYER_UNIT_SPELL_CAST )
    call TriggerAddCondition( gg_trg_Black_Hole, Condition( function Trig_Black_Hole_Conditions ) )
    call TriggerAddAction( gg_trg_Black_Hole, function Trig_Black_Hole_Actions )
endfunction
28
что за ошибка ибо разбираться в бж коде очень сложно
локальные переменные должны быть объявлены в начале функции
код читается с верху вниз то есть например
функция а
бла бла бла
endfunction
функция б
бла бла бла
endfunction
из функции б ты можешь вызвать функцию а так как а выше
из функции а ты не можешь вызвать функцию б так как б ниже
это то что я вижу
в принципе идеалом было бы делать через апдейт
так
локальные переменные действуют в пределах 1 функции а ты пытаешься в Trig_Black_Hole_Func007Func001A
использовать локалки из Trig_Black_Hole_Actions
надо либо параллельные массивы либо структуры(в принципе это 1и тоже только в структурах короче получается)
6
nvc123:
что за ошибка ибо разбираться в бж коде очень сложно
локальные переменные должны быть объявлены в начале функции
код читается с верху вниз то есть например
функция а
бла бла бла
endfunction
функция б
бла бла бла
endfunction
из функции б ты можешь вызвать функцию а так как а выше
из функции а ты не можешь вызвать функцию б так как б ниже
это то что я вижу
в принципе идеалом было бы делать через апдейт
так
локальные переменные действуют в пределах 1 функции а ты пытаешься в Trig_Black_Hole_Func007Func001A
использовать локалки из Trig_Black_Hole_Actions
надо либо параллельные массивы либо структуры(в принципе это 1и тоже только в структурах короче получается)
я в структурах не АС
Может делать через таймер и хэш?
Кстати спелл без кода jass не утечен.но он не муи:(
28
утечен
само определение расстояния между юнитами в гуи утечно
6
nvc123:
утечен
само определение расстояния между юнитами в гуи утечно
жаль.Стоп до меня сейчас дошло.Можно сделать все в 1 триггере как.Вот тока я не смогу релиз.До сих пор функции плохо понимаю.
28
Gnusik, таймер+структуры в результате и муи и в 1 триггере
6
nvc123:
Gnusik, таймер+структуры в результате и муи и в 1 триггере
Таймер я не могу применять.Код не знаю.Структуры и подавно.
6
nvc123:
Gnusik, я как нибудь напишу статью
С нетерпением буду ждать!!!
nvc123, Кстати посмотри код получился муи?
code
function Trig_Assasin_Invisible_Conditions takes nothing returns boolean
return GetUnitAbilityLevel(GetAttacker(),'Apiv') >= 1
endfunction

function Trig_Assasin_Invisible_Actions takes nothing returns nothing
    local unit Attack=GetAttacker()
    local unit Unit=GetTriggerUnit()
    call PauseUnit(Attack,true)
    call PauseUnit(Unit,true)
    call DisableTrigger(gg_trg_Assasin_Spell)
    call UnitRemoveAbility(Attack,'Apiv')
    call SetUnitAnimation(Attack,"attack")
    call SetUnitAnimation(Unit,"death")
    call UnitDamageTarget(Attack,Unit,75.00,true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS)
    call TriggerSleepAction(0.20)
    call SetUnitAnimation(Attack,"attack")
    call SetUnitAnimation(Unit,"death")
    call UnitDamageTarget(Attack,Unit,75.00,true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS)
    call TriggerSleepAction(0.20)
    call SetUnitAnimation(Attack,"attack")
    call SetUnitAnimation(Unit,"death")
    call UnitDamageTarget(Attack,Unit,75.00,true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS)
    call TriggerSleepAction(0.20)
    call SetUnitAnimation(Attack,"attack")
    call SetUnitAnimation(Unit,"death")
    call UnitDamageTarget(Attack,Unit,75.00,true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS)
    call TriggerSleepAction(0.20)
    call SetUnitAnimation(Attack,"attack")
    call SetUnitAnimation(Unit,"death")
    call UnitDamageTarget(Attack,Unit,75.00,true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS)
    call TriggerSleepAction(0.20)
    call SetUnitAnimation(Attack,"attack")
    call SetUnitAnimation(Unit,"death")
    call UnitDamageTarget(Attack,Unit,75.00,true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS)
    call TriggerSleepAction(0.20)
    call PauseUnit(Attack,false)
    call PauseUnit(Unit,false)
    call DisableTrigger(GetTriggeringTrigger())
    call TriggerSleepAction(4.00)
    call EnableTrigger(GetTriggeringTrigger())
    call EnableTrigger(gg_trg_Assasin_Spell)
endfunction

//===========================================================================
function InitTrig_Assasin_Invisible takes nothing returns nothing
    local integer index=0
    set gg_trg_Sword_Attack = CreateTrigger(  )
        loop
            call TriggerRegisterPlayerUnitEvent(gg_trg_Assasin_Invisible, Player(index),EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
            set index = index + 1
            exitwhen index == 15
        endloop
    call TriggerAddCondition(gg_trg_Assasin_Invisible, Condition( function Trig_Assasin_Invisible_Conditions ) )
    call TriggerAddAction(gg_trg_Assasin_Invisible, function Trig_Assasin_Invisible_Actions )
endfunction
nvc123, вот вопрос что такое:
1)source
2)dist
3)angle
В коде
local real x = GetLocationX(source) + dist * Cos(angle * bj_DEGTORAD)
nvc123, И ещё одна просьба.Поможешь мне сделать из того скила что ты мне кинул "Sword Attacl" немного переделать в "Speed Attack".Я перезалил карту посмотри её.
28
TriggerSleepAction(0.20) даёт неточный результат лучше делать через таймер и структуры/параллельные массивы
source это точка,dist расстояние,angle угол
косинус угла*гипотенуза+координата x угла
Чтобы оставить комментарий, пожалуйста, войдите на сайт.