В общем я изучаю cJass и есть проблемы с фигурными скобочками, в упор не вижу ошибки, а выбивается missing endblock.
При включении любого кода привидённого ниже выдает ошибку:
(Использовал JassReplacer)
(1)
 library FuncDeathWaterguards uses Polar 
    nothing DeathWaterguards ( unit u1, real x1, real y1 ) { 
        unit u2   = g_waterguardBase[GetUnitUserData(u1)]
        real x2   = GetUnitX(u2)
        real y2   = GetUnitY(u2)
        if ( DistanceBetweenCoords(x1, y1, x2, y2) >= 1000.00 ) {
            DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Other\\CrushingWave\\CrushingWaveDamage.mdl&​quot;, x1, y1))
            UnitDamageTargetBJ( u1, u1, ( 0.25 * GetUnitState(u1, UNIT_STATE_MAX_LIFE) ), ATTACK_TYPE_CHAOS, DAMAGE_TYPE_UNIVERSAL )
        }
        u1 = null
        u2 = null
    }
endlibrary
(2)
 library FuncMurlocScales
  nothing MurlocScales ( unit u, real x, real y, integer id ){ 
    integer i       = 0
    integer tw   = g_timeWater[GetUnitUserData(u)]
    boolean iw     = g_inWater[GetUnitUserData(u)]
     if iw == true {
      tw = 0
      SetUnitState(u, UNIT_STATE_LIFE, GetUnitState(u, UNIT_STATE_LIFE) + resHPmur)
      elseif (iw == false) then
      tw = (tw + 1 )
     }
     if ( id == 'n001' ) or ( id == 'h002' ) {
      i = 180
     }else{
      i = 120
     }
     if ( tw == 0 ) and ( GetUnitAbilityLevel(u, 'A00V') >= 1 ) {
      SetUnitAbilityLevel( u, 'A00S', 1 )
      SetUnitAbilityLevel( u, 'A00U', 1 )
      SetUnitAbilityLevel( u, 'A00V', 1 )
      UnitRemoveAbility( u, 'A00V')
      UnitRemoveAbility( u, 'A00S')
      UnitRemoveAbility( u, 'A00U')
      UnitRemoveAbility( u, 'B004')
      elseif ( tw >= i ) and ( GetUnitAbilityLevel(u, 'A00V') == 0 ) then
      UnitAddAbility( u, 'A00V')
      UnitAddAbility( u, 'A00S')
      UnitAddAbility( u, 'A00U')
      elseif ( tw >= ( 2 * i )) and ( GetUnitAbilityLevel(u, 'A00V') == 1 ) then
      SetUnitAbilityLevel( u, 'A00S', 2 )
      SetUnitAbilityLevel( u, 'A00U', 2 )
      SetUnitAbilityLevel( u, 'A00V', 2 )
      elseif ( tw >= ( 4 * i )) and ( GetUnitAbilityLevel(u, 'A00V') == 2 ) then
      SetUnitAbilityLevel( u, 'A00S', 3 )
      SetUnitAbilityLevel( u, 'A00U', 3 )
      SetUnitAbilityLevel( u, 'A00V', 3 )
     }
   }
endlibrary

Принятый ответ

Проблема в Coordinate functions
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
25
5 лет назад
Отредактирован Jack-of-shadow
0
Реплейсер чутка не доделаный.. Тоже на глаз не вижу проблемы. В таких случаях если не понятно где потеряна скобка, начиная просто все закомичивать.

Стоп там вроде путь эффекта зафаршмачен
0
19
5 лет назад
Отредактирован KaneThaumaturge
0
Jack-of-shadow, это при копировании на сайт сделалось, в коде все норм, не знаю почему при вставке поменялось
Может просто ошибка в синтаксисе? Ту же всего 3 блока...
Загруженные файлы
3
25
5 лет назад
3
KaneThaumaturge:
да там then не нужен
0
19
5 лет назад
0
Jack-of-shadow, да это я уже добавил, раньше его не было, и, насколько я знаю, его можно писать и не писать.
0
25
5 лет назад
Отредактирован Jack-of-shadow
0
Во втором все норм
0
32
5 лет назад
0
да {} = then endif
0
19
5 лет назад
Отредактирован KaneThaumaturge
0
Вот такое происходит при включении второго триггера, при первом аналогично. Если выключить два, то сейвит без ошибок.
Загруженные файлы
0
18
5 лет назад
0
До:
     if ( tw == 0 ) and ( GetUnitAbilityLevel(u, 'A00V') >= 1 ) {
      SetUnitAbilityLevel( u, 'A00S', 1 )
      SetUnitAbilityLevel( u, 'A00U', 1 )
      SetUnitAbilityLevel( u, 'A00V', 1 )
      UnitRemoveAbility( u, 'A00V')
      UnitRemoveAbility( u, 'A00S')
      UnitRemoveAbility( u, 'A00U')
      UnitRemoveAbility( u, 'B004')
      elseif ( tw >= i ) and ( GetUnitAbilityLevel(u, 'A00V') == 0 ) then
После:
     if ( tw == 0 ) and ( GetUnitAbilityLevel(u, 'A00V') >= 1 ) {
      SetUnitAbilityLevel( u, 'A00S', 1 )
      SetUnitAbilityLevel( u, 'A00U', 1 )
      SetUnitAbilityLevel( u, 'A00V', 1 )
      UnitRemoveAbility( u, 'A00V')
      UnitRemoveAbility( u, 'A00S')
      UnitRemoveAbility( u, 'A00U')
      UnitRemoveAbility( u, 'B004')
      }elseif ( tw >= i ) and ( GetUnitAbilityLevel(u, 'A00V') == 0 )
	  {
0
19
5 лет назад
0
Ссылка на карту, на всякий случай, может у меня что-то с JNGP
Загруженные файлы
0
25
5 лет назад
0
В общем я убрал заменил все твои глобалки (типо таких g_timeWater[]) из других либ на простые значения и все хорошо компилится.
0
18
5 лет назад
0
короче говоря - в конструкциях нельзя мешать си-синтаксис и jass синтаксис
Вот образец условного ветвления, ни в коем случае нельзя ставить всякие then/endif и т.д
if( i == 1 )
{
	////
} elseif( i == 2 )
{
	////
} else
{
	////
}
0
19
5 лет назад
0
  nothing MurlocScales ( unit u, real x, real y, integer id ){ 
    integer i       = 0
    integer tw   = g_timeWater[GetUnitUserData(u)]
    boolean iw     = g_inWater[GetUnitUserData(u)]
     if iw == true {
      tw = 0
      SetUnitState(u, UNIT_STATE_LIFE, GetUnitState(u, UNIT_STATE_LIFE) + resHPmur)
      }elseif (iw == false) {
      tw++
     }
     if ( id == 'n001' ) or ( id == 'h002' ) {
      i = 180
     }else{
      i = 120
     }
     if ( tw == 0 ) and ( GetUnitAbilityLevel(u, 'A00V') >= 1 ) {
      SetUnitAbilityLevel( u, 'A00S', 1 )
      SetUnitAbilityLevel( u, 'A00U', 1 )
      SetUnitAbilityLevel( u, 'A00V', 1 )
      UnitRemoveAbility( u, 'A00V')
      UnitRemoveAbility( u, 'A00S')
      UnitRemoveAbility( u, 'A00U')
      UnitRemoveAbility( u, 'B004')
      }elseif ( tw >= i ) and ( GetUnitAbilityLevel(u, 'A00V') == 0 ) {
      UnitAddAbility( u, 'A00V')
      UnitAddAbility( u, 'A00S')
      UnitAddAbility( u, 'A00U')
      }elseif ( tw >= ( 2 * i )) and ( GetUnitAbilityLevel(u, 'A00V') == 1 ) {
      SetUnitAbilityLevel( u, 'A00S', 2 )
      SetUnitAbilityLevel( u, 'A00U', 2 )
      SetUnitAbilityLevel( u, 'A00V', 2 )
      }elseif ( tw >= ( 4 * i )) and ( GetUnitAbilityLevel(u, 'A00V') == 2 ) {
      SetUnitAbilityLevel( u, 'A00S', 3 )
      SetUnitAbilityLevel( u, 'A00U', 3 )
      SetUnitAbilityLevel( u, 'A00V', 3 )
     }
   }
endlibrary
Изменил так, но все равно не компилится
Jack-of-shadow, из-за глобалок? Эмм, это странно, и почему так?
0
25
5 лет назад
0
KaneThaumaturge:
Я из вопроса код пробовал, а в карте да странно
0
19
5 лет назад
0
Jack-of-shadow, эти переменные описаны в кастом коде, может занести их в либу, которая будет инициализироваться первой?
Ничего не изменилось
0
18
5 лет назад
0
не в тему вопроса:
закинь вот это куда нибудь в карту и юзай (так быстрее пишется код)
define
{
	int = integer
	float = real
	void = nothing
	bool = boolean
}
в jngp так же работает подсветка синтаксиса на эти сокращения
0
19
5 лет назад
0
UrsaBoss, спасибо.
0
25
5 лет назад
0
UrsaBoss:
я себе еще такую тему сделал)
развернуть
define for_i (max) = {integer i = 1;loop;exitwhen i > max}
define end_i () = {i ++;endloop}
define for_n (max) = {integer n = 1;loop;exitwhen n > max}
define end_n () = {n ++;endloop}
0
18
5 лет назад
0
я такое делаю вручную обычно)
ну а так, самое то:
define <else if> = elseif

KaneThaumaturge, попробуй вместо library endlibrary написать library{ }
Этот комментарий удален
0
18
5 лет назад
0
((код

))
:D
0
25
5 лет назад
Отредактирован Jack-of-shadow
0
Проблема в Coordinate functions
Принятый ответ
0
19
5 лет назад
0
а, зинк не заканчивается
Странно, я вставил //! endzinc , но при компиляции мне показывает, что там два раза вписано //! endzinc ... И в итоге ошибка, хотя в коде я вписал одну строку.
Наверное зайду mpq архивом и удалю строку
Собственно вот:
Почему так, не понятно... вторая строка ни в одном триггере не прописано, более того, зинк я использовал только один раз...
В общем, удалил с помощью mpq вторую строку, однако, она не удалилась, более того, теперь в коде отобразилось 2 строки. Удалил уже в коде, сохранил и все работает. Надеюсь больше такого не будет...
А нет, не заработало, зинк все равно ломает весь код. В общем перепишу функции с зинка на cJASS и все.
Загруженные файлы
1
28
5 лет назад
1
KaneThaumaturge, по поводу первой картинки: в конце каждого триггера оставляй как минимум 1 пустую строку, потому что в скрипте первая строка триггера n и последняя строка триггера n-1 склеиваются. n - номер триггера, если считать сверху вниз.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.