Здравствуйте, друзья!
У меня в кампании не запускается карта после добавления в неё JASS-триггера. Этот триггер нужен для того, чтобы юнит в кинематике менял прозрачность плавнее. Обычными триггерами не получается выставить маленькое время для периодического изменения прозрачности на несколько процентов. Я может быть сохраняю карту в кампании неправильно, делаю, как в обычном World Editor, а в JNGP может быть свой метод?
Помогите, пожалуйста!
P. S. Нажимаю на кнопку с картой, появляется просто чёрный экран. До добавления JASS-триггера нормально запускалась.
У меня в кампании не запускается карта после добавления в неё JASS-триггера. Этот триггер нужен для того, чтобы юнит в кинематике менял прозрачность плавнее. Обычными триггерами не получается выставить маленькое время для периодического изменения прозрачности на несколько процентов. Я может быть сохраняю карту в кампании неправильно, делаю, как в обычном World Editor, а в JNGP может быть свой метод?
Помогите, пожалуйста!
P. S. Нажимаю на кнопку с картой, появляется просто чёрный экран. До добавления JASS-триггера нормально запускалась.
Принятый ответ
quq_CCCP, извлёк. Теперь мне засунуть этот код в копию этой карты, которую в редакторе кампаний добавить в кампанию и сохранить? Вроде как получается то же самое, как при сохранении карты в JNGP отдельно, а потом её добавлении в кампанию.
P. S. Цвета персонажей слетели при этом способе, а они очень важны. Хотя так код и правда работает.
P. P. S. Сначала карта запускалась, но цвета юнитов менялись, код срабатывал. Потом решил повторить это(замену файла war3map.j), внеся изменения в простые триггеры, но карта уже не запускалась.
P. P. P. S. Короче, разобрался в причине того, что карта не запускалась, я её с рабочего стола загружал и сохранял. Видимо из-за русских символов в пути не получалось. Если карта лежит в папке maps, то нормально. Но проблема с другими цветами персонажей, а точнее красным цветом, так и осталась. В итоге решил не мучиться, а сделать всё обычными триггерами.
Кстати, из триггера убрали элементы vjass, код стал таким, но всё равно не сохранялся в кампании:
globals
timer alp_t = CreateTimer()
integer alp_m = 0
unit array alp_a
boolean array alp_f
integer array alp_alpha
real array alp_speed
real array alp_time
endglobals
P. S. Цвета персонажей слетели при этом способе, а они очень важны. Хотя так код и правда работает.
P. P. S. Сначала карта запускалась, но цвета юнитов менялись, код срабатывал. Потом решил повторить это(замену файла war3map.j), внеся изменения в простые триггеры, но карта уже не запускалась.
P. P. P. S. Короче, разобрался в причине того, что карта не запускалась, я её с рабочего стола загружал и сохранял. Видимо из-за русских символов в пути не получалось. Если карта лежит в папке maps, то нормально. Но проблема с другими цветами персонажей, а точнее красным цветом, так и осталась. В итоге решил не мучиться, а сделать всё обычными триггерами.
Кстати, из триггера убрали элементы vjass, код стал таким, но всё равно не сохранялся в кампании:
globals
timer alp_t = CreateTimer()
integer alp_m = 0
unit array alp_a
boolean array alp_f
integer array alp_alpha
real array alp_speed
real array alp_time
endglobals
function TimeUnitAlpha takes nothing returns nothing
local integer i = 0
loop
set i = i + 1
exitwhen i>alp_m
if GetWidgetLife(alp_a[i])>0.405 and alp_time[i]>0 then
if alp_f[i] then
set alp_alpha[i] = alp_alpha[i] + R2I(alp_speed[i])
else
set alp_alpha[i] = alp_alpha[i] - R2I(alp_speed[i])
endif
call SetUnitVertexColor(alp_a[i],255,255,255,alp_alpha[i])
set alp_time[i] = alp_time[i] - 0.05
else
if alp_f[i] then
call SetUnitVertexColor(alp_a[i],255,255,255,255)
endif
set alp_a[i] = alp_a[alp_m]
set alp_f[i] = alp_f[alp_m]
set alp_time[i] = alp_time[alp_m]
set alp_alpha[i] = alp_alpha[alp_m]
set alp_speed[i] = alp_speed[alp_m]
set alp_m = alp_m - 1
if alp_m==0 then
call PauseTimer(alp_t)
endif
endif
endloop
endfunction
local integer i = 0
loop
set i = i + 1
exitwhen i>alp_m
if GetWidgetLife(alp_a[i])>0.405 and alp_time[i]>0 then
if alp_f[i] then
set alp_alpha[i] = alp_alpha[i] + R2I(alp_speed[i])
else
set alp_alpha[i] = alp_alpha[i] - R2I(alp_speed[i])
endif
call SetUnitVertexColor(alp_a[i],255,255,255,alp_alpha[i])
set alp_time[i] = alp_time[i] - 0.05
else
if alp_f[i] then
call SetUnitVertexColor(alp_a[i],255,255,255,255)
endif
set alp_a[i] = alp_a[alp_m]
set alp_f[i] = alp_f[alp_m]
set alp_time[i] = alp_time[alp_m]
set alp_alpha[i] = alp_alpha[alp_m]
set alp_speed[i] = alp_speed[alp_m]
set alp_m = alp_m - 1
if alp_m==0 then
call PauseTimer(alp_t)
endif
endif
endloop
endfunction
Принимает : (Юнита, Длительность , начальная прозрачность , макс. прозрачности за время , Появится/Исчезнуть ) | |
call AddUnitAlpha(Caster,3,0,255,true) = Появится за 3 секунды | |
call AddUnitAlpha(Caster,3,255,255,false) = Исчезнет за 3 секунды |
function AddUnitAlpha takes unit A,real TIMES,integer ALPHA,integer MAX_ALPHA,boolean F returns nothing
set alp_m = alp_m + 1
set alp_a[alp_m] = A
set alp_f[alp_m] = F
set alp_time[alp_m] = TIMES+0.10
set alp_alpha[alp_m] = ALPHA
set alp_speed[alp_m] = MAX_ALPHA/TIMES*0.05
if alp_m==1 then
call TimerStart(alp_t,0.05,true,function TimeUnitAlpha)
endif
endfunction
set alp_m = alp_m + 1
set alp_a[alp_m] = A
set alp_f[alp_m] = F
set alp_time[alp_m] = TIMES+0.10
set alp_alpha[alp_m] = ALPHA
set alp_speed[alp_m] = MAX_ALPHA/TIMES*0.05
if alp_m==1 then
call TimerStart(alp_t,0.05,true,function TimeUnitAlpha)
endif
endfunction
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Так что код этого триггера в студию, там либо ошибки, либо используются диалекты Vjass, Cjass и нету интерпретации при сохранении.
Вот сам триггер AlphaUnit:
define
void = nothing
int = integer
bool = boolean
enddefine
globals
private timer t = CreateTimer()
private int m = 0
private unit array a
private bool array f
private int array alpha
private real array speed
private real array time
endglobals
local int i = 0
loop
set i = i + 1
exitwhen i>m
if GetWidgetLife(a[i])>0.405 and time[i]>0 then
if f[i] then
set alpha[i] = alpha[i] + R2I(speed[i])
else
set alpha[i] = alpha[i] - R2I(speed[i])
endif
call SetUnitVertexColor(a[i],255,255,255,alpha[i])
set time[i] = time[i] - 0.05
else
if f[i] then
call SetUnitVertexColor(a[i],255,255,255,255)
endif
set a[i] = a[m]
set f[i] = f[m]
set time[i] = time[m]
set alpha[i] = alpha[m]
set speed[i] = speed[m]
set m = m - 1
if m==0 then
call PauseTimer(t)
endif
endif
endloop
endfunction
set m = m + 1
set a[m] = A
set f[m] = F
set time[m] = TIMES+0.10
set alpha[m] = ALPHA
set speed[m] = MAX_ALPHA/TIMES*0.05
if m==1 then
call TimerStart(t,0.05,true,function TimeUnitAlpha)
endif
endfunction
endlibrary
А вот как вызываю функцию:
Отредактирован Феникс
Отредактирован 8gabriel8
Отредактирован 8gabriel8
Хотя просто проверю сначала)
Всё также, то есть просто чёрный экран появляется после нажатия на кнопку.
Я решил так проверить:
Так же вам ничего не мешает переписать все на чистый jass.
Отредактирован 8gabriel8
P. S. Цвета персонажей слетели при этом способе, а они очень важны. Хотя так код и правда работает.
P. P. S. Сначала карта запускалась, но цвета юнитов менялись, код срабатывал. Потом решил повторить это(замену файла war3map.j), внеся изменения в простые триггеры, но карта уже не запускалась.
P. P. P. S. Короче, разобрался в причине того, что карта не запускалась, я её с рабочего стола загружал и сохранял. Видимо из-за русских символов в пути не получалось. Если карта лежит в папке maps, то нормально. Но проблема с другими цветами персонажей, а точнее красным цветом, так и осталась. В итоге решил не мучиться, а сделать всё обычными триггерами.
Кстати, из триггера убрали элементы vjass, код стал таким, но всё равно не сохранялся в кампании:
globals
timer alp_t = CreateTimer()
integer alp_m = 0
unit array alp_a
boolean array alp_f
integer array alp_alpha
real array alp_speed
real array alp_time
endglobals
local integer i = 0
loop
set i = i + 1
exitwhen i>alp_m
if GetWidgetLife(alp_a[i])>0.405 and alp_time[i]>0 then
if alp_f[i] then
set alp_alpha[i] = alp_alpha[i] + R2I(alp_speed[i])
else
set alp_alpha[i] = alp_alpha[i] - R2I(alp_speed[i])
endif
call SetUnitVertexColor(alp_a[i],255,255,255,alp_alpha[i])
set alp_time[i] = alp_time[i] - 0.05
else
if alp_f[i] then
call SetUnitVertexColor(alp_a[i],255,255,255,255)
endif
set alp_a[i] = alp_a[alp_m]
set alp_f[i] = alp_f[alp_m]
set alp_time[i] = alp_time[alp_m]
set alp_alpha[i] = alp_alpha[alp_m]
set alp_speed[i] = alp_speed[alp_m]
set alp_m = alp_m - 1
if alp_m==0 then
call PauseTimer(alp_t)
endif
endif
endloop
endfunction
set alp_m = alp_m + 1
set alp_a[alp_m] = A
set alp_f[alp_m] = F
set alp_time[alp_m] = TIMES+0.10
set alp_alpha[alp_m] = ALPHA
set alp_speed[alp_m] = MAX_ALPHA/TIMES*0.05
if alp_m==1 then
call TimerStart(alp_t,0.05,true,function TimeUnitAlpha)
endif
endfunction