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

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

Ответ
 
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
Ошибка в коде
((кат код
function Trig_storage1_Actions takes nothing returns nothing
local real x
local real y
local unit u
call CreateUnit(Player(12), 'n001', GetUnitX(GetSpellAbilityUnit()), GetUnitY(GetSpellAbilityUnit()), 270)
set u = bj_lastCreatedUnit
set x = GetUnitX(u)
set y = GetUnitY(u)
call KillUnit(u)
call RemoveUnit(u)
set u = null
call CreateUnit(Player(12), 'n002', GetUnitX(GetSpellAbilityUnit()), GetUnitY(GetSpellAbilityUnit()), 270)
set u = bj_lastCreatedUnit
if (GetUnitX(u) == x) and ((GetUnitY(u)) == y) then
call KillUnit(u)
call RemoveUnit(u)
call KillUnit(GetSpellAbilityUnit())
call DisplayTextToPlayer(GetOwningPlayer(GetSpellAbilityUnit()), 0, 0, "succes")
call CreateUnit(GetOwningPlayer(GetSpellAbilityUnit()), 'o000', GetUnitX(GetSpellAbilityUnit()), GetUnitY(GetSpellAbilityUnit()), 270)
call RemoveUnit(GetSpellAbilityUnit())
else
call DisplayTextToPlayer(GetOwningPlayer(GetSpellAbilityUnit()), 0, 0, "fail")
call KillUnit(u)
call RemoveUnit(u)
endif
call KillUnit(GetSpellAbilityUnit())
call RemoveUnit(GetSpellAbilityUnit())
set u = null
endfunction
))
суть
создаю невидимое здание 1 на 1 (n001) под юнитом проходимое но не билдабельное сохраняю коры, потом удаляю. создаю 3 на 3 (n002), сравниваю коры
если не равны то фейл, равны - саццес и создание нужного здания (o000), ради которого всё и мутится (проверка, есть ли место вокруг кастующего юнита для его размещения)
но выдаёт что всегда равны
Старый 06.02.2011, 00:10
Hanabishi
COOL STATUS
offline
Опыт: отключен
local unit u
call CreateUnit(Player(12), 'n001', GetUnitX(GetSpellAbilityUnit()), GetUnitY(GetSpellAbilityUnit()), 270)
set u = bj_lastCreatedUnit
ты БЖ раскрывал? bj_lastCreatedUnit задаёт функция CreateNUnitsInLoc
нативы такие штуки не используют
set u = CreateUnit(Player(12), 'n001', GetUnitX(GetSpellAbilityUnit()), GetUnitY(GetSpellAbilityUnit()), 270)
вот так
Старый 06.02.2011, 00:16
DioD

offline
Опыт: 45,134
Активность:
советую открыть БЖ хоть раз в жизни и посмотреть как именно работают все глобалки на последний созданный что-то
Старый 06.02.2011, 08:11
Nekit1234007

offline
Опыт: 11,916
Активность:
Старый 06.02.2011, 09:03
ScorpioT1000
Работаем
offline
Опыт: отключен
if (GetUnitX(u) == x) and ((GetUnitY(u)) == y) then
краб штоле?
ScorpioT1000 добавил:
вобще близы зря сделали у флоата операцию ==, а то такие как вы её юзают вечно
Старый 06.02.2011, 09:48
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
function Trig_storage1_Actions takes nothing returns nothing
local unit u = CreateUnit(Player(12), 'n001', GetUnitX(GetSpellAbilityUnit()), GetUnitY(GetSpellAbilityUnit()), 270)
local real x = GetUnitX(u)
local real y = GetUnitY(u)
call KillUnit(u)
call RemoveUnit(u)
set u = CreateUnit(Player(12), 'n002', GetUnitX(GetSpellAbilityUnit()), GetUnitY(GetSpellAbilityUnit()), 270)
if (RAbsBJ(x-GetUnitX(u))>0.1) or (RAbsBJ(y-GetUnitY(u))>0.1) then
call DisplayTextToPlayer(GetOwningPlayer(GetSpellAbilityUnit()), 0, 0, "fail")
call KillUnit(u)
call RemoveUnit(u)
else
call KillUnit(u)
call RemoveUnit(u)
call KillUnit(GetSpellAbilityUnit())
call DisplayTextToPlayer(GetOwningPlayer(GetSpellAbilityUnit()), 0, 0, "succes")
call CreateUnit(GetOwningPlayer(GetSpellAbilityUnit()), 'o000', GetUnitX(GetSpellAbilityUnit()), GetUnitY(GetSpellAbilityUnit()), 270)
call RemoveUnit(GetSpellAbilityUnit())
endif
set u = null
endfunction
так лучше? в любом случае всегда даёт удачу и создаёт это здание совсем не там, где надо -_-
вообще всё по идее построено на том, что здания по сетке выравниваются и не строятся на непроходимых участках

Отредактировано Clamp, 06.02.2011 в 13:38.
Старый 06.02.2011, 10:53
ScorpioT1000
Работаем
offline
Опыт: отключен
function IsRealEqu takes real a, real equ returns boolean
    return ((a > (equ-0.001)) and (a < (equ+0.001)))
endfunction
->
if IsRealEqu(GetUnitX(u), x) and IsRealEqu(GetUnitY(u), y) then
Старый 06.02.2011, 11:01
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
нифига -_-
зайди в асю что ли =)
Старый 06.02.2011, 11:11
ScorpioT1000
Работаем
offline
Опыт: отключен
call CreateUnit(Player(12), 'n001', GetUnitX(GetSpellAbilityUnit()), GetUnitY(GetSpellAbilityUnit()), 270)
set u = bj_lastCreatedUnit
замени на
set u = CreateUnit(Player(12), 'n001', GetUnitX(GetSpellAbilityUnit()), GetUnitY(GetSpellAbilityUnit()), 270)
не видишь чтоли он юнита возвращает, это вот если CreateNUnitsAtLoc тогда да, там говнобж
Старый 06.02.2011, 13:21
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
xgm.ru/forum/showpost.php?p=977616&postcount=6 там так и сделано
Старый 06.02.2011, 13:36
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
таки что неверно то?
Старый 07.02.2011, 15:11
ScorpioT1000
Работаем
offline
Опыт: отключен
ничего не приходит в голову, давай данные и результаты тестов )
Старый 07.02.2011, 16:13
DioD

offline
Опыт: 45,134
Активность:
лучше выложи код с отладочными сообщениями и результатами отладки, я буду знать что ты хотя бы старался и тут же решу твою проблему.
Старый 07.02.2011, 16:23
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
оно выдаёт, что координаты обоих "проверочных" зданий равны. решительно не понимаю, почему
Clamp добавил:
function Trig_storage1_Actions takes nothing returns nothing
    local unit u = CreateUnit(Player(12), 'n001', GetUnitX(GetSpellAbilityUnit()), GetUnitY(GetSpellAbilityUnit()), 270)
    local real x = GetUnitX(u)
    local real y = GetUnitY(u)
    call KillUnit(u)
    call RemoveUnit(u)
    //
    call BJDebugMsg(R2S(GetUnitX(GetSpellAbilityUnit()))+" "+R2S(GetUnitY(GetSpellAbilityUnit())))
    call BJDebugMsg(R2S(x)+" "+R2S(y))
    //
    set u = CreateUnit(Player(12), 'n002', GetUnitX(GetSpellAbilityUnit()), GetUnitY(GetSpellAbilityUnit()), 270)
    //
    call BJDebugMsg(R2S(GetUnitX(u))+" "+R2S(GetUnitY(u)))
    //
    if (RAbsBJ(x-GetUnitX(u))>0.1) or (RAbsBJ(y-GetUnitY(u))>0.1) then
        call DisplayTextToPlayer(GetOwningPlayer(GetSpellAbilityUnit()), 0, 0, "fail")
        call KillUnit(u)
        call RemoveUnit(u)
    else
        call KillUnit(u)
        call RemoveUnit(u)
        call KillUnit(GetSpellAbilityUnit())
        call DisplayTextToPlayer(GetOwningPlayer(GetSpellAbilityUnit()), 0, 0, "succes")
        set u = CreateUnit(GetOwningPlayer(GetSpellAbilityUnit()), 'o000', GetUnitX(GetSpellAbilityUnit()), GetUnitY(GetSpellAbilityUnit()), 270)
        call RemoveUnit(GetSpellAbilityUnit())
    endif
    call BJDebugMsg(R2S(GetUnitX(u))+" "+R2S(GetUnitY(u)))
    set u = null
endfunction
Clamp добавил:
причём юнит в итоге вообще хз появляется
Clamp добавил:
Старый 07.02.2011, 16:47
DioD

offline
Опыт: 45,134
Активность:
  1. для проверки на пачинг используется вещь, а не юнит, вещь имеет размер толи 8 толи 16 изменить нельзя.
  1. после того как ты создал юнита, нужно подвинуть его куда надо, функцией SetUnitPosition, так как функция создания создаёт где скажешь игнорируя препятствия.
  1. замути карту для наглядности чтоли, я конкретно распишу как сделать такую проверку как юнитом так и просто проверяя cell by cell.
Старый 07.02.2011, 16:57
Ответ

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

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

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

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



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