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

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

Ответ
 
Mefist
Is it cocktail hour yet?
offline
Опыт: 98,190
Активность:
ммм, такой вопрос. Как занести приказ в локальную переменную, а затем дать приказ его использовать (опять же через переменную)?
Старый 03.02.2006, 22:20
TiM
Старичок
offline
Опыт: 8,594
Активность:
а and'ы и or'ы лучше писать так:
(true==true)and(false==false)or(true!=false)and(false!=true)
первую часть можно еще взять в скобки, ибо так будет удобнее.

2мефист
используя строку:
function...
local string s
set s = OrderId2StringBJ(GetIssuedOrderIdBJ())
call TriggerSleepAction( 10.00 )
call IssueImmediateOrderBJ( udg_unit, s )
set s=null
endfunction

это будет:
s=получить отданный приказ при событии юнито получил приказ Цель-точка/объект/без цели
ждать
отдать приказ без цели s.

TiM добавил:
мефист, юзай GUI, и переводи его в джазз, имхо так легче!
Старый 03.02.2006, 23:05
Mefist
Is it cocktail hour yet?
offline
Опыт: 98,190
Активность:
я не совсем правильно выразился. мне нужно из стринга (или в чем они выражаются? я к своему удивлению узнал, что глобалка типа приказ это оказывается integer) сделать приказ, и отдать его юниту.
Я думал сделать так:
Код:
function Trig_Jinx_Actions takes nothing returns nothing
    local string o = "impale"
    local unit c = CreateUnitAtLoc(GetOwningPlayer(GetTriggerUnit()),'hrif', GetUnitLoc(GetTriggerUnit()), bj_UNIT_FACING)
    call IssueTargetOrderBJ( c, String2OrderIdBJ(o), GetOrderTargetUnit() )
endfunction

Но он говорит: Invalid argument type (integer)
Старый 03.02.2006, 23:33
NETRAT

offline
Опыт: 83,712
Активность:
Код:
function Trig_Jinx_Actions takes nothing returns nothing
    local unit c = CreateUnit(GetOwningPlayer(GetTriggerUnit()),'hrif', GetUnitX(GetTriggerUnit()), GetUnitY(GetTriggerUnit()),  bj_UNIT_FACING)
    call IssueTargetOrder ( c, "impale", GetOrderTargetUnit() )
endfunction

Так намного лучше, да и ошибок не выдает. В некоторых случаях это все вообще можно в одну строку запихнуть (если юнита утилизировать автоматически)

NETRAT добавил:
Вместо String2OrderIdBJ лучше использовать OrderId, и вообще если уж пишешь на жассе, то забудь про BJ
Старый 04.02.2006, 05:55
Mefist
Is it cocktail hour yet?
offline
Опыт: 98,190
Активность:
я понимаю, что так лучше. я хотел сделать рандомный приказ, но так чтобы не писать кучу if-then
ладно, забудьте. это я так, для развлечения, реально всеравно через глобалку делать придется
Старый 04.02.2006, 12:40
NETRAT

offline
Опыт: 83,712
Активность:
Mefist вполне реально - запихнуть приказы в массив и выбирать рандомный элемент массива. Нет проблем?
Старый 04.02.2006, 13:06
Mefist
Is it cocktail hour yet?
offline
Опыт: 98,190
Активность:
вот хрен, все-равно он на что-то ругается:
Код:
local unit c = CreateUnitAtLoc(GetOwningPlayer(GetTriggerUnit()),'hrif', GetUnitLoc(GetTriggerUnit()), bj_UNIT_FACING)
    set udg_order = String2OrderIdBJ("impale")
    call UnitAddAbilityBJ( 'A000', c )
    call IssueTargetOrderBJ( c, udg_order, GetOrderTargetUnit() )

Опять говорит: Invalid argument type (integer). Что я на этот раз неправильно написал?

Отредактировано Mefist, 04.02.2006 в 17:20.
Старый 04.02.2006, 15:58
NETRAT

offline
Опыт: 83,712
Активность:
блин, да непарься, пиши set udg_order = OrderId("impale")
Старый 04.02.2006, 18:30
TiM
Старичок
offline
Опыт: 8,594
Активность:
Помогите мне плиз. делаю мапу тут и столкнулся с проблемой.
этот триггер не хочет создавать юнит. он лежит в нестандартном коде карты(наверху).
ему я передаю например это call addun(3,"hrif","HO",3), он никак не хочет создавать

function addun takes integer i,string s,string g,integer n returns nothing
call CreateNUnitsAtLoc(i,String2UnitIdBJ(s),Player(PLAYER_NEUTRAL_PASSIVE),GetRectCen ter(gg_rct_buffer),bj_UNIT_FACING)
...

что не так ?;)

TiM добавил:
все понял. тип юнита-это не string, a integer.
Старый 04.02.2006, 19:47
NETRAT

offline
Опыт: 83,712
Активность:
Попробуй создать их по таймеру. Попробуй обойтись без функции String2UnitIdBJ(s) - ибо лажа, вроде все правильно, если не поможет - выложи карту
Старый 04.02.2006, 20:01
Mefist
Is it cocktail hour yet?
offline
Опыт: 98,190
Активность:
причем тут это, я говорю, что у меня сам триггер не включается. Ругается на последнюю строку
И еще вопрос, можно как-то абилку перевести в приказ?
Старый 04.02.2006, 20:12
Mefist
Is it cocktail hour yet?
offline
Опыт: 98,190
Активность:
со строкой разобрался
Старый 04.02.2006, 23:28
Mozes
Green Street!
offline
Опыт: 5,034
Активность:
Я например в этом 0с чего начать.
Старый 05.02.2006, 02:01
licn
The witch
offline
Опыт: 4,640
Активность:
мне тоже джас не помишает!!!!!!!!!!!
Старый 05.02.2006, 10:04
TiM
Старичок
offline
Опыт: 8,594
Активность:
у меня трабл! теперь варик не хочет создавать юнитов из юнит группы!
юнит группы у меня в массиве для каждого левела. он первую создает нормально, а вторую и последующие не хочет, это у всех так???
Старый 05.02.2006, 14:33
Mefist
Is it cocktail hour yet?
offline
Опыт: 98,190
Активность:
выложи триггер
Старый 05.02.2006, 14:43
TiM
Старичок
offline
Опыт: 8,594
Активность:
вначале идет это:
Цитата:
call addun(4,'hfoo',"HO",1)
call addun(1,'hrif',"HO",1)
call addun(3,'hfoo',"HO",2)
call addun(2,'hmpr',"HO",2)
call addun(2,'hsor',"HO",2)
call addun(2,'hspt',"HO",2)
call addun(1,'hfoo',"HO",3)
call addun(3,'hrif',"HO",3)

а вот триггер addun:
Цитата:
function addun takes integer i,integer s,string g,integer n returns nothing
call DisplayTextToForce( GetPlayersAll(), I2S(n))
call CreateNUnitsAtLoc(i,s,Player(PLAYER_NEUTRAL_PASSIVE),GetRectCenter(gg_rct_buffer ),0)
if g=="HH" then
if i==1 then
call GroupAddUnitSimple(GetLastCreatedUnit(),udg_Group_HUM_HUM[n])
else
call GroupAddGroup(GetLastCreatedGroup(),udg_Group_HUM_HUM[n])
endif
endif
if g=="HO" then
if i==1 then
call GroupAddUnitSimple(GetLastCreatedUnit(),udg_Group_HUM_ORC[n])
else
call GroupAddGroup(GetLastCreatedGroup(),udg_Group_HUM_ORC[n])
endif
endif
итп HU HE OH OO OU OE...
созданные/созданный юнит/ы хайдятся

а потом эти группы создаются так:
Цитата:
function createU takes nothing returns nothing
call CreateNUnitsAtLoc(1,GetUnitTypeId(GetEnumUnit()),ConvertedPlayer(udg_random),Get RectCenter(udg_spawnplace[udg_random-1]),bj_UNIT_FACING)
endfunction

if (udg_race[GetConvertedPlayerId(udg_Player_List[pl])]==RACE_HUMAN)and(udg_race[GetConvertedPlayerId(udg_Player_List[pl+1])]==RACE_HUMAN) then
call ForGroupBJ(udg_Group_HUM_HUM[udg_level],function createU)
endif

еще раз повторяю, что в первый раз все проходит нормально, а во второй раз-глючит.

TiM добавил:
по переменным: udg_Player_List[x]=А -это номера игроков №А, расположенных массиве udg_Player_List по номерам Х (Х=1,2...) по убыванию в зависимости от их очков.
pl-переменная integer=0 to кол-во играющих.

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

For each (Integer A) from 1 to igraet, do (Actions)
Цикл - Действия
Set Player_List[(Integer A)] = (Player in position (Integer A) of Leader_Board)

TiM добавил:
упс, player_list[x] - это не НОМЕРА ИГРОКОВ, а игроки
Старый 05.02.2006, 15:11
NETRAT

offline
Опыт: 83,712
Активность:
Не всматривался, но проверь все ли тела функций (addun?) выполняются - впиши в них вывод текстовых сообщений - есть вероятность что это превышение лимита итераций или времени выполнения. Обьекты групп при работе кушают много времени и памяти, а у тебя тут сплошняком циклы и обьединения групп
Старый 05.02.2006, 17:18
TiM
Старичок
offline
Опыт: 8,594
Активность:
все функции addun выполняются, может мне сделать между ними паузы?

TiM добавил:
хотя я пробовал уже юнитов, предназначенных для второй группы переносить в первую и они нормально спавнились...

TiM добавил:
хотя я пробовал уже юнитов, предназначенных для второй группы переносить в первую и они нормально спавнились в первой...

TiM добавил:
Вообще, судя повсему, group array's глючные и нерабочие. первые номера групп работают, а остальные нет!!!
Даже триггером отдельно пробовал заспавнить группу №2-никак ;(
Старый 05.02.2006, 18:16
Ответ

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

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

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

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



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