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

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

Очень частые ошибки, выдаваемые JNGP

((центр
НА АНГЛИЙСКОМ ДОЛЖЕН БЫТЬ ПУТЬ К КАРТЕ, НА АНГЛИЙСКОМ!
))
  • "wehack.lua:437: attempt to index global 'rtc_enabled'(a nil value)" - Решение, Ещё решение
  • Так же можно убрать галочку с "Reinventing the craft"
  • При проверке через ctrl+f9 карта не запускается - а вылетает в главное меню, как этого избежать?
  • Сначала 2 раза сохраните карту обычным способом (ctrl+s), лишь потом проверяйте.
  • При первом открытии карты, после запуска редактора, появляются "Ошибки базы данных триггеров" - Решение
Вопросы связанные с этими ошибками будут караться, как флуд.
Для проверки правильности кода не следует использовать Syntax Check (он работает неправильно), просто пересохраните карту.

Пришедшим впервые

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

Оптимальные настройки JNGP (идут по-умолчанию при установке Exp2)

После применения настроек редактор нужно перезапустить!

Работа дополнений из меню «Extensions»

Чтобы заработали пункты из меню «Extensions», необходимо предварительно сохранить карту и перезапустить редактор.

Сообщение о вирусах

Некоторые антивирусы могут сообщать о наличии резидентных программ, это так и есть, но все содержимое архива безвредно.

Закрытая тема
 
PlayerDark
Coraline
offline
Опыт: 10,569
Активность:
Можно ли делать у структур ограничение на размер массива ? те если я обьявляю структуру, то создаются еще 8192 (?) структуры, хотя мне нужно только 10.
Старый 02.07.2009, 13:25
J
expert
offline
Опыт: 48,447
Активность:
PlayerDark O_O, сруктура своих переменых создает чтук 5 не больше, а по одной на каждое поле структуры
Старый 02.07.2009, 13:32
PlayerDark
Coraline
offline
Опыт: 10,569
Активность:
J та нет... в смысле что под структуры используются параллельные массивы с большим размером ?
Старый 02.07.2009, 14:05
J
expert
offline
Опыт: 48,447
Активность:
что значит "массивы с большим размером"? у масивов в варе всегда один размер
Старый 02.07.2009, 14:20
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
может он имеет ввиду, чт ов варе можно указать размерность массива, а можно не указывать..
Старый 02.07.2009, 14:38
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
Если верить ТС, то массивы в варе инициализируются по 8 штук.
Старый 02.07.2009, 19:14
Van Damm
wait... what?
offline
Опыт: 22,268
Активность:
Вышел JassHepler 0.9.I.1. Скачать, как всегда, можно здесь http://www.wc3c.net/showthread.php?t=88142.
0.9.I.1
  • Исправлен вылет из-за расширений и членов-массивов.
  • Исправлена вероятность того, что clijasshelper попытается создать окно. (sic!)
  • Исправлена ошибка со stub, из-за которых структуры без наследников не вызывали правильно onDestroy.
  • Добавлены перехваты (hooks).
  • Теперь более вероятно, что методы, использующие evaluate, не будут использовать TriggerEvaluate если они вызывают лишь функции из кж/бж.
0.9.I.0
  • Native-функции могут быть объявлены в любом месте кода, jasshelper сам перенесет их куда нужно (или удалит если они лишние).
0.9.H.3
  • В список функций, не изменяющих состояние, добавлены GetHandleId, StringHash, Get и HaveStored от кеша , а также Load и HaveSaved от хэштаблиц. Это повышает вероятность инлайна функций, использующих их.
  • Исправлена опечатка в комментарии внутри jasshelper.conf.
0.9.H.2
  • Исправлено зависание и ошибка нехватки памяти при массовом хранении массивов/структур, когда их размер превышал 8191*13.
  • Функции массового хранения массивов/структур теперь немного короче.



Теперь объяснение новой фишки: hook
Хуки используются если нужно при вызове какой-то native-функции вызывать свой обработчик.
Код:
function onRemoval takes unit u returns nothing
    call BJDebugMsg("юнита удаляют!")
endfunction

hook RemoveUnit onRemoval
Также где-то в карте должно вызываться RemoveUnit, или вышеприведенный код будет бесполезным. В игре, сначала выполнится onRemoval, а лишь затем RemoveUnit.

Где это применять, оставляю за вами


Hook в vJass и cJass

Возьмем в пример только что описанный hook и сравним его реализации:
» vJass
Код:
function onRemoval takes unit u returns nothing
    call BJDebugMsg("unit is being removed!")
endfunction

hook RemoveUnit onRemoval

function nop takes nothing returns nothing
    call RemoveUnit(GetTriggerUnit())
endfunction
безобидно, да? А вот, что мы имеем в итоге
Код:
globals
trigger array st___prototype2
unit f__arg_unit1
endglobals

function sc___prototype2_execute takes integer i,unit a1 returns nothing
    set f__arg_unit1=a1
    call TriggerExecute(st___prototype2[i])
endfunction

function sc___prototype2_evaluate takes integer i,unit a1 returns nothing
    set f__arg_unit1=a1
    call TriggerEvaluate(st___prototype2[i])
endfunction

function h__RemoveUnit takes unit a0 returns nothing
    call sc___prototype2_evaluate(2,a0)
call RemoveUnit(a0)
endfunction

...

function onRemoval takes unit u returns nothing
    call BJDebugMsg("unit is being removed!")
endfunction

function nop takes nothing returns nothing
    call h__RemoveUnit(GetTriggerUnit())
endfunction

...

function sa___prototype2_onRemoval takes nothing returns boolean
    call onRemoval(f__arg_unit1)
    return true
endfunction

function jasshelper__initstructs861827 takes nothing returns nothing
    set st___prototype2[1]=CreateTrigger()
    call TriggerAddAction(st___prototype2[1],function sa___prototype2_onRemoval)
    call TriggerAddCondition(st___prototype2[1],Condition(function sa___prototype2_onRemoval))

endfunction

» cJass

Код:
define RemoveUnit = onRemoval

function onRemoval takes unit u returns nothing
    call BJDebugMsg("unit is being removed!")
    call Remove ## Unit(u) 
endfunction

function nop takes nothing returns nothing
    call RemoveUnit(GetTriggerUnit())
endfunction
что компилируется как
Код:
function onRemoval takes unit u returns nothing
    call BJDebugMsg("unit is being removed!")
    call RemoveUnit(u) 
endfunction

function nop takes nothing returns nothing
    call onRemoval(GetTriggerUnit())
endfunction


Подведем итоги:


vJass
+ понятный синтаксис
+ универсальное применение
- создается много лишнего кода
- используются TriggerEvaluate, массивы триггеров, массивы переменных итд
- рядовому кодеру сложно понять, как оно работает
- отсутствуют области видимости хуков: любой хук глобален


cJass
+ не создается лишнего кода - только тот, что написал кодер
+ не используются триггеры, дополнительные переменные итд
+ прямая и понятная логика действия
+ возможность создавать приватные хуки, разграничивать область действия хуков
- неочевидный синтаксис
- невозможность навесить больше одного хука на функцию в пределах одной области видимости

Так как не всем понятно, уточню - я не сравнивал эти два препроцессора в целом, а лишь реализацию одной вещи. Спасибо за внимание

Отредактировано Van Damm, 03.07.2009 в 10:29.
Старый 03.07.2009, 01:52
MupaMaX
Мой статус
offline
Опыт: 1,495
Активность:
Так он вроде еще неделю назад вышел ?
Старый 03.07.2009, 02:40
Van Damm
wait... what?
offline
Опыт: 22,268
Активность:
I.1 вышел сегодня
Старый 03.07.2009, 02:41
J
expert
offline
Опыт: 48,447
Активность:
Цитата:
Подведем итоги:
если вести оценку то использовать только хуки это грязный трюк, такчто оценим вообщем
» раскрыть
начнум с vjass
+ понятный синтаксис
угу
+ универсальное применение
угу
- создается много лишнего кода
это не минус, это +\-, т.к. неимеет значения
- используются TriggerEvaluate, массивы триггеров, массивы переменных итд
TriggerEvaluate это -, но на хуки же вроде исправлено в последнем обновлении, а второе +/- т.к. не имеет значения
- рядовому кодеру сложно понять, как оно работает
какой интересный минвс в сторону ооп, обычно говорят иначе
- отсутствуют области видимости хуков: любой хук глобален
не знаю удобно или нет, еще не разбирался с хуками

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

верхнии 3 пунка это пункты не на cjass, а на простой jass, потому что cjass далеко не такого уровня развития как vjass, и в нем просто напросто нет тех функций что потребовали бы создания дополнительный код и переменные
- неочевидный синтаксис
угу
+ возможность создавать приватные хуки, разграничивать область действия хуков
- невозможность навесить больше одного хука на функцию в пределах одной области видимости
не знаю удобно или нет, еще не разбирался с хуками

также, хуки на cjass это не хуки, а дуфайны, вот если в vjass появятся дефайны, то cjass сразуже сосо по единственоу направленю в котором хоть что-то овнит

Отредактировано J, 03.07.2009 в 03:44.
Старый 03.07.2009, 03:32
MupaMaX
Мой статус
offline
Опыт: 1,495
Активность:
Ван Дамм... не знаешь когда выйдет под 1.23б версию ? ну TESH,и подсветка функций...
Старый 03.07.2009, 13:40
Ranger21
I love beatiul days XD
offline
Опыт: 13,274
Активность:
MupaMaX Уже всё работает под 1.23б и 1.24 тестовую

надо обновлять JassHelper
Старый 03.07.2009, 13:47
Windrunner
Верь мне!
offline
Опыт: 4,565
Активность:
Нужна помощь!
1 Почему-то у меня на все JNGP выыдает мол карта сделана на другой версии
2 У меня он не выдает ошибки!Почему-то после того как я поработал с ним то у меня обычный редактор сломался(выдает кучу ошибок от тригера который я удалил), а в варе карта вообще не запускается??
3 он почему то выдает что не правильно составлена переменная udg_u (она установлена и ей присвоено значение)
Ответте пожайлуста
Старый 04.07.2009, 11:49
ELDAR
НИИ 4А-ВО кафедра SPELLS
offline
Опыт: 8,394
Активность:
код в студию

ELDAR добавил:
а лучше мапу
Старый 04.07.2009, 11:58
Red_Fog

offline
Опыт: 7,340
Активность:
А у меня после появления JNGP в папке варкрафт, все карты начали глючать. Я удалил JNGP всё нормально.
Старый 04.07.2009, 12:00
Elf_Stratigo

offline
Опыт: 4,699
Активность:
Цитата:
выдает кучу ошибок от тригера который я удалил

у меня тоже было такое - это изза того, что название было слишком длинное и поэтому "умный" ве дал триггеру другое имя и потом про него забыл - т.е. триггера самого нет, а код остался
исправил созданием чистой мапы и экспортом в неё всего со старой :)
Старый 04.07.2009, 12:01
Windrunner
Верь мне!
offline
Опыт: 4,565
Активность:
Цитата:
Сообщение от ELDAR
код в студию

ELDAR добавил:
а лучше мапу

Ето вы мне??Если мне,то вот код
Код:
function Move_text takes nothing returns nothing
    call SetTextTagPosUnitBJ( udg_t, udg_u, 0 )
endfunction

function Trig_imena_Actions takes nothing returns nothing
    local texttag t
    local unit u
    local timer v
    call CreateTextTagUnitBJ( GetUnitName(GetTriggerUnit()), GetTriggerUnit(), 0, 10, 100, 100, 100, 0 )
    set udg_t = GetLastCreatedTextTag()
    set udg_u = GetTriggerUnit
    call TimerStart(v,0.05,true,function Move_text)
    call TriggerSleepAction( 2 )
    call TimerStart(v,0.05,false,function Move_text)
    call DestroyTextTagBJ( t )
    call DestroyTimer(v)
    set t=null
    set u=null    
endfunction

//===========================================================================
function InitTrig_imena takes nothing returns nothing
    set gg_trg_imena = CreateTrigger(  )
    call TriggerRegisterUnitInRangeSimple( gg_trg_imena, 200.00, gg_unit_O000_0004 )
    call TriggerAddAction( gg_trg_imena, function Trig_imena_Actions )
endfunction
Старый 04.07.2009, 12:02
Van Damm
wait... what?
offline
Опыт: 22,268
Активность:
Stormtrooper, его можно устанавливать в любую папку, и как раз в папку с варом этого делать не стоит.
Старый 04.07.2009, 12:51
SageOne
x
offline
Опыт: 46,054
Активность:
Van Damm а я в папку с Варом установил и все отлично))
Старый 04.07.2009, 14:03
ELDAR
НИИ 4А-ВО кафедра SPELLS
offline
Опыт: 8,394
Активность:
Windrunner хммммм, ну я даже не знаю , ты точно обьявил глобалки ? а то по твоему коду я могу судить, что ты из локалок сделал глобалки

ELDAR добавил:
Цитата:
1 Почему-то у меня на все JNGP выыдает мол карта сделана на другой версии

потому что JNGP использует exe от версии 1.21
Старый 04.07.2009, 14:09
Закрытая тема

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

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

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

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



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