XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
Sladkoegka
Забыл что хотел...
offline
Опыт: 7,477
Активность:
Ошибка в коде
Вот код
function Trig_Collision_flight_Move_Conditions takes nothing returns boolean
    return IsUnitEnemy(GetEnumUnit(), GetOwningPlayer(udg_Collision_flight_unit_Grifon)) and GetUnitState(GetEnumUnit(), UNIT_STATE_LIFE) > 0 and IsUnitType(GetEnumUnit(), UNIT_TYPE_STRUCTURE) == false 
endfunction

function Trig_Collision_flight_Move_ForGroup takes nothing returns nothing
    local location loc = GetUnitLoc(GetEnumUnit())
    local location point = GetUnitLoc(udg_Collision_flight_unit_Grifon)
    if (Trig_Collision_flight_Move_Conditions) then
        call SetUnitPositionLoc( GetEnumUnit(), Location(GetLocationX(loc) + 15.00 * Cos(bj_RADTODEG * Atan2(GetLocationY(loc) - GetLocationY(point), GetLocationX(loc) - GetLocationX(point)) * bj_DEGTORAD),GetLocationY(loc) + 15.00 * Sin(bj_RADTODEG * Atan2(GetLocationY(loc) - GetLocationY(point), GetLocationX(loc) - GetLocationX(point)) * bj_DEGTORAD)) )
        call UnitDamageTarget( udg_Collision_flight_unit_Grifon, GetEnumUnit(), ( 10.00 * I2R(GetUnitAbilityLevel(udg_Collision_flight_unit_Grifon, 'A004' )) ), true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS )
        call UnitDamageTarget( udg_Collision_flight_unit_Grifon, udg_Collision_flight_unit_Grifon, ( 2.00 * I2R(GetUnitAbilityLevel(udg_Collision_flight_unit_Grifon, 'A004' )) ),true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS )
        call AddSpecialEffectTarget( "chest", GetEnumUnit(), "Objects\\Spawnmodels\\Human\\HumanBlood\\HumanBloodSorceress.mdl" )
    endif
    call RemoveLocation(loc)
    call RemoveLocation(point)
endfunction

function Trig_Collision_flight_Move_Actions takes nothing returns nothing
    local unit u = udg_Collision_flight_unit_Grifon
    local location loc = GetUnitLoc(u)
    local location point = udg_Collision_flight_Point_Grifon
    local real x = GetLocationX(loc) + 24.00 * Cos( bj_RADTODEG * Atan2(GetLocationY(point) - GetLocationY(loc), GetLocationX(point) - GetLocationX(loc)) * bj_DEGTORAD)
    local real y = GetLocationY(loc) + 24.00 * Sin( bj_RADTODEG * Atan2(GetLocationY(point) - GetLocationY(loc), GetLocationX(point) - GetLocationX(loc)) * bj_DEGTORAD)
    local real x1 = GetLocationX( loc )
    local real y1 = GetLocationY( loc )
    local group g = CreateGroup()
    call SetUnitPositionLoc( u, Location(x,y))
    call GroupEnumUnitsInRect(g, Rect( x - 113, y - 113, x + 113, y + 113 ), Condition(function Trig_Collision_flight_Move_Conditions))
    call DestroyBoolExpr(Condition(function Trig_Collision_flight_Move_Conditions))
    call RemoveLocation(loc)
    call RemoveLocation(point)
    set u = null
    call GroupClear(g) 
    call DestroyGroup(g) 
    set g = null
endfunction

//===========================================================================
function InitTrig_Collision_flight_Move takes nothing returns nothing
    set gg_trg_Collision_flight_Move = CreateTrigger(  )
    call DisableTrigger( gg_trg_Collision_flight_Move )
    call TriggerRegisterTimerEventPeriodic( gg_trg_Collision_flight_Move, 0.04 )
    call TriggerAddAction( gg_trg_Collision_flight_Move, function Trig_Collision_flight_Move_Actions )
endfunction
Компилятор не ругается, а вот JassHelper плачет на строчку
endif
Пишет типа Cannot convert integer to boolean
(Она после
call AddSpecialEffectTarget( "chest", GetEnumUnit(), "Objects\\Spawnmodels\\Human\\HumanBlood\\HumanBloodSorceress.mdl" идет)
Кто нибудь может помочь и сказать в чем дело?
можете называть нубом
Старый 03.06.2012, 17:51
Lipen

offline
Опыт: 1,550
Активность:
Вот это:
if (Trig_Collision_flight_Move_Conditions) then
замени на это:
if Trig_Collision_flight_Move_Conditions() then
Или сразу подставь в иф, раз в условии всего 1 строчка:
if IsUnitEnemy(GetEnumUnit(), GetOwningPlayer(udg_Collision_flight_unit_Grifon)) and GetUnitState(GetEnumUnit(), UNIT_STATE_LIFE) > 0 and IsUnitType(GetEnumUnit(), UNIT_TYPE_STRUCTURE) == false then
Место локаций используй X,Y:
GetUnitX(u)
GetUnitY(u)
И заноси юнита в локалку, если обращаешься к нему больше 1 раза.
local unit u = GetEnumUnit()
Старый 03.06.2012, 18:13
NIKZ
Изучаю Jass
offline
Опыт: 6,036
Активность:
так лучше
function Trig_Collision_flight_Move_Conditions takes nothing returns boolean
    return IsUnitEnemy(GetEnumUnit(), GetOwningPlayer(udg_Collision_flight_unit_Grifon)) and GetUnitState(GetEnumUnit(), UNIT_STATE_LIFE) > 0.405 and IsUnitType(GetEnumUnit(), UNIT_TYPE_STRUCTURE) == false 
endfunction
Старый 03.06.2012, 18:44
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
NIKZ:
так лучше
function Trig_Collision_flight_Move_Conditions takes nothing returns boolean
    return IsUnitEnemy(GetEnumUnit(), GetOwningPlayer(udg_Collision_flight_unit_Grifon)) and GetUnitState(GetEnumUnit(), UNIT_STATE_LIFE) > 0.405 and IsUnitType(GetEnumUnit(), UNIT_TYPE_STRUCTURE) == false 
endfunction
function Trig_Collision_flight_Move_Conditions takes nothing returns boolean
    return IsUnitEnemy(GetEnumUnit(), GetOwningPlayer(udg_Collision_flight_unit_Grifon)) and GetUnitState(GetEnumUnit(), UNIT_STATE_LIFE) > 0.045 and not IsUnitType(GetEnumUnit(), UNIT_TYPE_STRUCTURE)
endfunction
ну если уже совсем то так.
Старый 03.06.2012, 18:54
Sladkoegka
Забыл что хотел...
offline
Опыт: 7,477
Активность:
Hatsume_Hate, NIKZ, Вот вы мелочные)
Sladkoegka добавил:
Lipen, Ща попробую.Капец все тока из за одной скобки(((Спс,твои советы были полезны.Вот только я боюсь утечных точек создаваемых реалками.А еще мне кажется что присваивание новой локалки юниту замедляет работу,потому не использую.

Отредактировано Sladkoegka, 03.06.2012 в 19:26.
Старый 03.06.2012, 19:21
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
Sladkoegka:
Hatsume_Hate, NIKZ, Вот вы мелочные)
Sladkoegka добавил:
Lipen, Ща попробую.Капец все тока из за одной скобки(((Спс,твои советы были полезны.Вот только я боюсь утечных точек создаваемых реалками.А еще мне кажется что присваивание новой локалки юниту замедляет работу,потому не использую.
реалки интежеры боолеаны и строки не нуждаются в обнулении. И лучше работать с реальными чем с точками
и у тебя утечек тут уйма.
Старый 03.06.2012, 19:39
Sladkoegka
Забыл что хотел...
offline
Опыт: 7,477
Активность:
Блин,теперь движение не работает((Вот эта формула правильная:
local real x = GetLocationX(loc) + 24.00 * Cos( bj_RADTODEG * Atan2(GetLocationY(point) - GetLocationY(loc), GetLocationX(point) - GetLocationX(loc)) * bj_DEGTORAD)
    local real y = GetLocationY(loc) + 24.00 * Sin( bj_RADTODEG * Atan2(GetLocationY(point) - GetLocationY(loc), GetLocationX(point) - GetLocationX(loc)) * bj_DEGTORAD)
call SetUnitPositionLoc( u, Location(x,y))
Hatsume_Hate,
и у тебя утечек тут уйма.
Оо.Скажешь хотя бы одну?Я просто в этом не разбираюсь
Старый 03.06.2012, 19:45
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
call GroupEnumUnitsInRect(g, Rect( x - 113, y - 113, x + 113, y + 113 ), Condition(function Trig_Collision_flight_Move_Conditions))
создал рект - удали рект и обнули его
local rect rct = Rect( x - 113, y - 113, x + 113, y + 113 )

call GroupEnumUnitsInRect(g, rct, Condition(function Trig_Collision_flight_Move_Conditions))

call RemoveRect(rct)
set rct = null
local location loc = GetUnitLoc(u)
local location point = udg_Collision_flight_Point_Grifon
...
call RemoveLocation(loc)
call RemoveLocation(point)
локации нужно обнулять после уничтожения
local location loc = GetUnitLoc(u)
local location point = udg_Collision_flight_Point_Grifon
...
call RemoveLocation(loc)
call RemoveLocation(point)
set loc = null
set point = null
Hatsume_Hate добавил:
зачем каждый раз нужно высчитывать угол между точками? найди его сразу и сохрани
local real xC = GetUnitX(u)
local real yC = GetUnitY(u)
local real angle = bj_RADTODEG * Atan2(GetLocationY(point) - yC, GetLocationX(point) -  xC)
local real x = xC + 24.00 * Cos( angle * bj_DEGTORAD)
local real y = yC + 24.00 * Sin( angle * bj_DEGTORAD)
Старый 03.06.2012, 19:57
Sladkoegka
Забыл что хотел...
offline
Опыт: 7,477
Активность:
Hatsume_Hate, Спасибо.Посмотри пожалуйста
function Trig_Collision_flight_Move_ForGroup и к ней function Trig_Collision_flight_Move_Conditions
Они почему-то не работают( И я что-то затупил вот почему кастер двигается не так?(
Старый 03.06.2012, 19:57
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
call DestroyBoolExpr(Condition(function Trig_Collision_flight_Move_Conditions))
зачем? взял и удалил условие, мб поток грохается от этого?
и двигай юнита через SetUnitPosition (x,y) а то у тебя очередная утечка локации
Старый 03.06.2012, 20:01
Sladkoegka
Забыл что хотел...
offline
Опыт: 7,477
Активность:
Hatsume_Hate, переделал под реалки.С условием или без него - все равно не работает
Старый 03.06.2012, 20:06
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
покажи свой код теперь
Старый 03.06.2012, 20:08
Sladkoegka
Забыл что хотел...
offline
Опыт: 7,477
Активность:
Hatsume_Hate, Я наверно тупой но почему где надо вызывать действия для каждого из группы, необходимо писать функцию-условие а не обычную функцию??
Ща скину.
function Trig_Collision_flight_Move_Conditions takes nothing returns boolean
    return IsUnitEnemy(GetEnumUnit(), GetOwningPlayer(udg_Collision_flight_unit_Grifon)) and GetUnitState(GetEnumUnit(), UNIT_STATE_LIFE) > 0.405 and IsUnitType(GetEnumUnit(), UNIT_TYPE_STRUCTURE) == false 
endfunction

function Trig_Collision_flight_Move_ForGroup takes nothing returns nothing
    local unit uni = GetEnumUnit()
    local location loc = GetUnitLoc(uni)
    local location point = GetUnitLoc(udg_Collision_flight_unit_Grifon)
    if Trig_Collision_flight_Move_Conditions() then
        call DisplayTextToForce( GetPlayersAll(), "TRIGSTR_113" )
        call SetUnitPosition( uni, GetLocationX(loc) + 15.00 * Cos(bj_RADTODEG * Atan2(GetLocationY(loc) - GetLocationY(point), GetLocationX(loc) - GetLocationX(point)) * bj_DEGTORAD), GetLocationY(loc) + 15.00 * Sin(bj_RADTODEG * Atan2(GetLocationY(loc) - GetLocationY(point), GetLocationX(loc) - GetLocationX(point)) * bj_DEGTORAD))
        call UnitDamageTarget( udg_Collision_flight_unit_Grifon, uni, ( 10.00 * I2R(GetUnitAbilityLevel(udg_Collision_flight_unit_Grifon, 'A004' )) ), true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS )
        call UnitDamageTarget( udg_Collision_flight_unit_Grifon, udg_Collision_flight_unit_Grifon, ( 2.00 * I2R(GetUnitAbilityLevel(udg_Collision_flight_unit_Grifon, 'A004' )) ),true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS )
        call AddSpecialEffectTarget( "chest", uni, "Objects\\Spawnmodels\\Human\\HumanBlood\\HumanBloodSorceress.mdl" )
    endif
    call RemoveLocation(loc)
    call RemoveLocation(point)
    set loc = null
    set point = null
    set uni = null
endfunction

function Trig_Collision_flight_Move_Actions takes nothing returns nothing
    local unit u = udg_Collision_flight_unit_Grifon
    local location loc = GetUnitLoc(u)
    local location point = udg_Collision_flight_Point_Grifon
    local real x = GetLocationX(loc) + 24.00 * Cos( bj_DEGTORAD * Atan2(GetLocationY(point) - GetLocationY(loc), GetLocationX(point) - GetLocationX(loc)) * bj_DEGTORAD)
    local real y = GetLocationY(loc) + 24.00 * Sin( bj_DEGTORAD * Atan2(GetLocationY(point) - GetLocationY(loc), GetLocationX(point) - GetLocationX(loc)) * bj_DEGTORAD)
    local real x1 = GetLocationX(loc)
    local real y1 = GetLocationY(loc)
    local group g = CreateGroup()
    local rect rct = Rect( x1 - 113, y1 - 113, x1 + 113, y1 + 113 )
    call SetUnitPosition( u, x , y)
    call GroupEnumUnitsInRect(g, rct, Condition(function Trig_Collision_flight_Move_ForGroup))
    //call DestroyBoolExpr(Condition(function Trig_Collision_flight_Move_Conditions))
    call RemoveLocation(loc)
    call RemoveLocation(point)
    set loc = null
    set point = null
    set u = null
    call GroupClear(g) 
    call DestroyGroup(g) 
    set g = null
    call RemoveRect(rct)
    set rct = null
endfunction

//===========================================================================
function InitTrig_Collision_flight_Move takes nothing returns nothing
    set gg_trg_Collision_flight_Move = CreateTrigger(  )
    call DisableTrigger( gg_trg_Collision_flight_Move )
    call TriggerRegisterTimerEventPeriodic( gg_trg_Collision_flight_Move, 0.04 )
    call TriggerAddAction( gg_trg_Collision_flight_Move, function Trig_Collision_flight_Move_Actions )
endfunction
Старый 03.06.2012, 20:12
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
function Trig_Collision_flight_Move_ForGroup takes nothing returns boolean
	local unit u = GetEnumUnit()
    local location loc = GetUnitLoc(u)
    local location point = GetUnitLoc(udg_Collision_flight_unit_Grifon)
    if IsUnitEnemy(u, GetOwningPlayer(udg_Collision_flight_unit_Grifon)) and GetUnitState(u, UNIT_STATE_LIFE) > 0.405 and not IsUnitType(u, UNIT_TYPE_STRUCTURE) then
        call DisplayTextToForce( GetPlayersAll(), "TRIGSTR_113" )
        call SetUnitPosition( u, GetLocationX(loc) + 15.00 * Cos(bj_RADTODEG * Atan2(GetLocationY(loc) - GetLocationY(point), GetLocationX(loc) - GetLocationX(point)) * bj_DEGTORAD), GetLocationY(loc) + 15.00 * Sin(bj_RADTODEG * Atan2(GetLocationY(loc) - GetLocationY(point), GetLocationX(loc) - GetLocationX(point)) * bj_DEGTORAD))
        call UnitDamageTarget( udg_Collision_flight_unit_Grifon, u, ( 10.00 * I2R(GetUnitAbilityLevel(udg_Collision_flight_unit_Grifon, 'A004' )) ), true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS )
        call UnitDamageTarget( udg_Collision_flight_unit_Grifon, udg_Collision_flight_unit_Grifon, ( 2.00 * I2R(GetUnitAbilityLevel(udg_Collision_flight_unit_Grifon, 'A004' )) ),true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS )
        call AddSpecialEffectTarget( "chest", u, "Objects\\Spawnmodels\\Human\\HumanBlood\\HumanBloodSorceress.mdl" )
    endif
    call RemoveLocation(loc)
    call RemoveLocation(point)
    set u = null
    set loc = null
    set point = null
return false
endfunction
ога
Старый 03.06.2012, 20:17
Sladkoegka
Забыл что хотел...
offline
Опыт: 7,477
Активность:
Hatsume_Hate, ну урон также не наносится,герой двигается не туда и ниче пока не заработало((тем более я уже 10+ раз пробовал условие переставлять
Старый 03.06.2012, 20:21
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
ну попробуй так
function Trig_Collision_flight_Move_ForGroup takes nothing returns boolean
	local unit u = GetFilterUnit()
    local location loc = GetUnitLoc(u)
    local location point = GetUnitLoc(udg_Collision_flight_unit_Grifon)
    if IsUnitEnemy(u, GetOwningPlayer(udg_Collision_flight_unit_Grifon)) and GetUnitState(u, UNIT_STATE_LIFE) > 0.405 and not IsUnitType(u, UNIT_TYPE_STRUCTURE) then
        call DisplayTextToForce( GetPlayersAll(), "TRIGSTR_113" )
        call SetUnitPosition( u, GetLocationX(loc) + 15.00 * Cos(bj_RADTODEG * Atan2(GetLocationY(loc) - GetLocationY(point), GetLocationX(loc) - GetLocationX(point)) * bj_DEGTORAD), GetLocationY(loc) + 15.00 * Sin(bj_RADTODEG * Atan2(GetLocationY(loc) - GetLocationY(point), GetLocationX(loc) - GetLocationX(point)) * bj_DEGTORAD))
        call UnitDamageTarget( udg_Collision_flight_unit_Grifon, u, ( 10.00 * I2R(GetUnitAbilityLevel(udg_Collision_flight_unit_Grifon, 'A004' )) ), true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS )
        call UnitDamageTarget( udg_Collision_flight_unit_Grifon, udg_Collision_flight_unit_Grifon, ( 2.00 * I2R(GetUnitAbilityLevel(udg_Collision_flight_unit_Grifon, 'A004' )) ),true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS )
        call AddSpecialEffectTarget( "chest", u, "Objects\\Spawnmodels\\Human\\HumanBlood\\HumanBloodSorceress.mdl" )
    endif
    call RemoveLocation(loc)
    call RemoveLocation(point)
    set u = null
    set loc = null
    set point = null
return false
endfunction

...
call GroupEnumUnitsInRect(g, rct, Filter(function Trig_Collision_flight_Move_ForGroup))
...
Старый 03.06.2012, 20:23
Sladkoegka
Забыл что хотел...
offline
Опыт: 7,477
Активность:
Hatsume_Hate, Таааааааааак,юниты задвигались и урон стал наноситься,осталосьтока движение героя.
Тока эффект что то бажит((
Старый 03.06.2012, 20:26
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
а что с движением не так?
ах да. утекает спец эффект.
пиши всегда так
call DestroyEffect(AddSpecialEffectTarget( "chest", u, "Objects\\Spawnmodels\\Human\\HumanBlood\\HumanBloodSorceress.mdl" ))
Старый 03.06.2012, 20:28
Sladkoegka
Забыл что хотел...
offline
Опыт: 7,477
Активность:
Hatsume_Hate, Да про спецэффект знал,но забыл.спасибо.А герой двигается не так-такое ощущение что там углы на 180 в перемешку с углами по 360.
короче говоря если направить юниты вправо то все путем.
Если направить влево-то он уезжает назад вправо.
Если вверх или вниз то тоже отклоняется вправо.
Старый 03.06.2012, 20:32
adic3x

offline
Опыт: 108,439
Активность:
call DestroyBoolExpr(Condition(function Trig_Collision_flight_Move_Conditions))
EPIC WIN! Автор непонимает разницы между переменной-указателем и данными. Читайте статьи у нас на сайте.
Старый 03.06.2012, 20:36
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 15:34.