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

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

Закрытая тема
 
Lord of Death
Потерянный надолго
offline
Опыт: 3,008
Активность:
Цитата:
Мне надо в игре поменять юнита(героя) на другого героя в АОСе (чтоби било без утечек или почти) навсегда. Кто то может помочь???? Или файл модели поменять навсегда???
Ну так римувь того героя и создавай на его позиции которго тебе нужен. Модель можно поменять только через морф.
Цитата:
Если я хочу создать триг с "общими функциями" которие будут визиватся.
Какое собитие надо сделать етому тригеру???
Никакое. Запускай его тогда функцией Run Trigger. Да и вообще, это JASS Вопросник, а не Trigger Вопросник...
Старый 24.03.2007, 18:56
Lord of Death
Потерянный надолго
offline
Опыт: 3,008
Активность:
Всё никак не могу понять, почему не работает эта функция. Функция, которая делает юнита полностью прозрачным, выдаёт несовпадение типов.
Код:
function Trig_BadLuck_Actions takes nothing returns nothing
local unit t=GetSpellTargetUnit()
local unit d=CreateNUnitsAtLoc(1,'u003',Player(PLAYER_NEUTRAL_PASSIVE),GetUnitLoc(t), bj_UNIT_FACING)
    call SetUnitVertexColor(d,0,0,0,100) //Она выдаёт несовпадение типов. Почему?
    call SetUnitAbilityLevelSwapped('A03J',d,GetUnitAbilityLevelSwapped('A03H', GetSpellAbilityUnit()) )
    call IssueTargetOrder(d,"curse",t)
    call TriggerSleepAction(1.00)
    call RemoveUnit(d)
set t=null
set d=null
endfunction
Старый 26.03.2007, 11:44
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
скорее всего, несовпадение выдает предыдущая строка.
FellGuard добавил:
CreateNUnitsAtLoc возвращает группу, тут могут быть нисастыковки.
попробуй, если не помогает, CreateUnit, CreateUnitAtLoc
Старый 26.03.2007, 11:55
adic3x

offline
Опыт: 108,439
Активность:
CreateNUnitsAtLoc - однозначно возращает группу, поэтому все неработатет... Попробуй:

Код:
local unit a=GetSpellTargetUnit()
local unit u=CreateUnit(Player(PLAYER_NEUTRAL_PASSIVE),'u003',GetUnitX(a),GetUnitY(a),0)
call SetUnitVertexColor(u,0,0,0,100)
call SetUnitAbilityLevelSwapped('A03J',u,GetUnitAbilityLevelSwapped('A03H', GetSpellAbilityUnit()) )
call IssueTargetOrder(u,"curse",a)
call TriggerSleepAction(1.00)
call RemoveUnit(d)
set u=null
set a=null


Хотя мну смущщает TriggerSleepAction. я бы добавлял таймер наверно...
Старый 26.03.2007, 18:10
Lord of Death
Потерянный надолго
offline
Опыт: 3,008
Активность:
Код:
call RemoveUnit(d)
- если уж везде заменять на u, то и это тоже=)). Спасибо, всё нормально работает. Хм, вот про таймер поподробнее. Им проще? Или есть шанс того, что TriggerSleepAction убьёт триггер?
CreateUnit() - этой функции на ГУИ вообще не существует?

Отредактировано Lord of Death, 26.03.2007 в 19:40.
Старый 26.03.2007, 19:15
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
Lord of Death, т.к. в гуи мы не можем выполнять действия типа
set u = CreateUnit(...), значит обращаться к созданному объекту можно только через LastCreated
Соответственно, лишняя гуишная ф-ия по созданию отдельного юнита утрачивает смысл

FellGuard добавил:
т.к. есть ф-ия по созданию группы
Старый 27.03.2007, 07:58
adic3x

offline
Опыт: 108,439
Активность:
TriggerSleepAction будет отсчитывать времы и если игра на паузе, если в твоем случае кастунать заклинание, но потом поставить паузу юнит может ремовкнутся до того, как он успеет провести даммикаст, вобщем спел несработает.

Теперь:

Код:
function CreateUnitAtLocSaveLast takes player id, integer unitid, location loc, real face returns unit
    if (unitid == 'ugol') then
        set bj_lastCreatedUnit = CreateBlightedGoldmine(id, GetLocationX(loc), GetLocationY(loc), face)
    else
        set bj_lastCreatedUnit = CreateUnitAtLoc(id, unitid, loc, face)
    endif

    return bj_lastCreatedUnit
endfunction

function CreateNUnitsAtLoc takes integer count, integer unitId, player whichPlayer, location loc, real face returns group
    call GroupClear(bj_lastCreatedGroup)
    loop
        set count = count - 1
        exitwhen count < 0
        call CreateUnitAtLocSaveLast(whichPlayer, unitId, loc, face)
        call GroupAddUnit(bj_lastCreatedGroup, bj_lastCreatedUnit)
    endloop
    return bj_lastCreatedGroup
endfunction


CreateUnitAtLoc - уже является нативко, и почти аналагична CreateUnit, но использует точку, т.е. обьекты, а последняя использует координаты. CreateUnit - насколько я знаю самая оптимальная.

Видиш какая байда выходит со всем этим - циклы для одного юнита, мфы, которые нам совсем не нужны... Читай стаью Джона про оптимизацию=)
Старый 27.03.2007, 12:37
DFlyer
<3 MJ
offline
Опыт: 42,879
Активность:
Как проверять столкновение с объектом? В частности, с юнитом?
Старый 31.03.2007, 09:59
J
expert
offline
Опыт: 48,447
Активность:
DFlyer создавай триггер, с событием "юнит подошел к юниту на такоето растояние", делай растояние на длину вытянутой руки орка, и все...
Старый 31.03.2007, 13:39
DFlyer
<3 MJ
offline
Опыт: 42,879
Активность:
call TriggerRegisterUnitInRangeSimple(trigger,256,u)
Так чтоли?
Получается, Triggering Unit подошёл на расстояние 256 у юниту u.
Я правильно понимаю?
Старый 31.03.2007, 13:57
J
expert
offline
Опыт: 48,447
Активность:
256 много, поставь 60 хотябы... а так - да, это.
Старый 31.03.2007, 13:58
DFlyer
<3 MJ
offline
Опыт: 42,879
Активность:
Ну да, надо поменьше поставить, знаю.
Пасип, а я не видел такого триггера...
Старый 31.03.2007, 13:59
Kiwi
Offline
offline
Опыт: 11,502
Активность:
Вот у меня назрел вопросег... В чем здесь ашипка? FirePathDummy и FirePathCas - локальные переменные.
function FirePath takes nothing returns nothing
call IssuePointOrderLocBJ( FirePathDummy, "flamestrike", GetUnitLoc(FirePathCas) )
endfunction


Kiwi добавил:
Джассу я только еще учусь, а потому просьба не отвечать замудренными фразами...
Старый 03.04.2007, 03:14
J
expert
offline
Опыт: 48,447
Активность:
Kiwi локальные переменные надо обьявлять в функции где они юзаются, или передовать туда их, на то они и локальные, у тебя этого нет, ты либо обьявляй
Код:
function FirePath takes nothing returns nothing
    local unit FirePathDummy = что-то
    local unit FirePathCas = что-то
    call IssuePointOrderLocBJ( FirePathDummy, "flamestrike", GetUnitLoc(FirePathCas) )
endfunction

либо передавай
Код:
function FirePath takes unit FirePathDummy, unit FirePathCas returns nothing
    call IssuePointOrderLocBJ( FirePathDummy, "flamestrike", GetUnitLoc(FirePathCas) )
endfunction
Старый 03.04.2007, 04:13
Kiwi
Offline
offline
Опыт: 11,502
Активность:
Jon, спасибо огромное, помогло =)

Kiwi добавил:
Короче, вот еще вопрос. По идее, это должно вызывать ф-цию, описанную мной в предыдущем вопросе 6 раз. Но при сохранении высвечивает "неверное количество аргументов", и не запускается. Что делать?
set bj_forLoopAIndex = 1
set bj_forLoopAIndexEnd = 6
loop
exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
call FirePath()
call TriggerSleepAction( 0.25 )


Kiwi добавил:
Ведь все вродебы сделано правильно...
Старый 03.04.2007, 04:41
J
expert
offline
Опыт: 48,447
Активность:
Kiwi если ты использовал мой первый код - то все должно быть норм, если использовал второй, то надо передать в эту функцию эти 2 юнита: unit FirePathDummy, unit FirePathCas
Код:
call FirePath(FirePathDummy, FirePathCas)

но при этом они должны быть обьявлены (также как в моем первом коде) в той функции где будет использоватся эта строка.

Jon добавил:
не юзай это
Код:
set bj_forLoopAIndex = 1
set bj_forLoopAIndexEnd = 6

а то сразу видно что делал цикл на гуи, используй локальную переменную.
Старый 03.04.2007, 04:46
Kiwi
Offline
offline
Опыт: 11,502
Активность:
Jon, еще раз огромное спасибо =)
Старый 03.04.2007, 04:49
DFlyer
<3 MJ
offline
Опыт: 42,879
Активность:
Kiwi
И ещё, где есть GetUnitLoc, лучше делай через отдельную локалку, чтоб потом можно было избежать учтечек. Кстати, избегай BJ.

Код:
function FirePath takes unit FirePathDummy, unit FirePathCas returns nothing
  local location loc = GetUnitLoc(FirePathCas)
  call IssuePointOrderLoc(FirePathDummy, "flamestrike",loc)
  call RemoveLocation(loc)
endfunction
Старый 03.04.2007, 13:59
DeT

offline
Опыт: 5,715
Активность:
так, вопро: как мона на жасс-ии послать Ассаулт группу на свою родную базу никого не атакуя, т.е. заставитьь отступить?
Старый 03.04.2007, 14:50
DioD

offline
Опыт: 45,134
Активность:
занести в аи команду смены командира
и послать данную команду
Старый 03.04.2007, 15:16
Закрытая тема

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

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

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

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



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