Здравствуйте, друзья!
У меня в кампании не запускается карта после добавления в неё 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
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
Принимает : (Юнита, Длительность , начальная прозрачность , макс. прозрачности за время , Появится/Исчезнуть )
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
0
27
7 лет назад
0
JNGP - это сторонний скрипт(своего рода), поэтому кампания не читает его, и собственно функции из него тоже не сработают, правда была тема где-то с дополнительным расширением для кампаний, насколько мне известно
3
32
7 лет назад
3
PrincePhoenix:
JNGP - это сторонний скрипт(своего рода), поэтому кампания не читает его, и собственно функции из него тоже не сработают, правда была тема где-то с дополнительным расширением для кампаний, насколько мне известно
Шта, jngp это надстройка над редактором, если функция написано полностью на jass то все должно работать если нету ошибок.
Так что код этого триггера в студию, там либо ошибки, либо используются диалекты Vjass, Cjass и нету интерпретации при сохранении.
0
26
7 лет назад
0
quq_CCCP, прошу простить за задержку, были личные вопросы.
Вот сам триггер AlphaUnit:
define
void = nothing
int = integer
bool = boolean
enddefine
library AlphaUnit
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
function TimeUnitAlpha takes void returns void
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
Принимает : (Юнита, Длительность , начальная прозрачность , макс. прозрачности за время , Появится/Исчезнуть )
call AddUnitAlpha(Caster,3,0,255,true) = Появится за 3 секунды
call AddUnitAlpha(Caster,3,255,255,false) = Исчезнет за 3 секунды
function AddUnitAlpha takes unit A,real TIMES,int ALPHA,int MAX_ALPHA,bool F returns void
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
А вот как вызываю функцию:
В кинематике один юнит превращается в другого, для этого помещаю обоих на одну позицию, у второго ставлю прозрачность 100%, далее происходит превращение, когда первый юнит периодически теряет прозрачность, а второй периодически приобретает. Так как полностью потерять прозрачность от этого триггера не получается и что-то малоразличимое остаётся, то по истечению времени исчезающего первого юнита прячу(hide).
Загруженные файлы
0
27
7 лет назад
Отредактирован Феникс
0
quq_CCCP, объясню на пальцах, давным давно, когда люди пытались впилить систему 3д камеры и движения, выполнялся отлов некоторых клавиш и движения мыши(врать не буду, помню не точно) Так вот возникала проблема использования сей системы в кампаниях, ибо некоторые функции JNGP не доступны для camp поскольку являются что-то вроде импортными.
0
26
7 лет назад
Отредактирован 8gabriel8
0
PrincePhoenix, я понял и в первый раз, но есть в JNGP такая утилита:
Что и как делает не знаю.
Загруженные файлы
0
32
7 лет назад
0
Дважды сохраните карту отдельно, потом пакуйте в кампанию или просто сохраните карту и вытащите war3map.j из карты и суньте в кампанию, делов то...
0
26
7 лет назад
Отредактирован 8gabriel8
0
quq_CCCP, а там ведь куча данных кампании, которые в самой карте отсутствуют, разве отдельное сохранение карты не повредит.
Хотя просто проверю сначала)
Всё также, то есть просто чёрный экран появляется после нажатия на кнопку.
Я решил так проверить:
  1. взял карту без изменений, которая нормально запускается в кампании;
  2. вставил в неё JASS-триггер с библиотекой и триггер с обращением к библиотеке, но в игре их не задействовал;
  3. сохранил два раза;
  4. в кампании карта не запускается(после нажатия на кнопку с картой на секунду появляется чёрный экран, а потом экран кампании), а как одиночная карта запускается.
0
32
7 лет назад
0
код вытащи и засуть в карту кампании, вероятно не происходит интерпритация в обычный jass с vjass.
Так же вам ничего не мешает переписать все на чистый jass.
0
26
7 лет назад
0
quq_CCCP, я не умею писать на jass, мне человек сделал. И как вытащить код и засунуть в карту кампании?
0
32
7 лет назад
0
8gabriel8:
quq_CCCP, я не умею писать на jass, мне человек сделал. И как вытащить код и засунуть в карту кампании?
Мпк редактором, весь код карты это war3map.j
0
26
7 лет назад
Отредактирован 8gabriel8
0
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
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
Принимает : (Юнита, Длительность , начальная прозрачность , макс. прозрачности за время , Появится/Исчезнуть )
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
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.