UjAPI - AngelScript

Added by , published
Программы
Предназначение:
Работа с файлами

Данный ресурс работает ТОЛЬКО с патчами 1.24e/1.26а/1.27a/1.27b/1.28f и требует UjAPI

Как пользоваться?

  1. Перенесите AngelScript.dll в папку Modules в папке UjAPI.
  2. Запустите UjAPI.exe и отметьте чекбокс "Load Library" в секции AngelScript.
  3. Запустите игру.
  4. Наслаждайтесь.

Как программировать?

  1. Создайте war3map.as файл, в этом файле вы будете писать код.
  2. Добавьте файл через менеджер импорта или же MPQ по пути Scripts\\war3map.as или же просто war3map.as.
  3. Запустите UjAPI со включённой опцией AngelScript.
  4. Наслаждайтесь.

В чём особенность AngelScript?

  1. Строгая типизация как в Jass.
  2. Возможность создавать свои объекты/классы.
  3. Современные парадигмы и их особенности.
  4. Возможность программировать код по кускам за счёт "#include".
  5. Скорость сравнимая с lua, без её проблем.
  6. И многое другое.

Парсер/Проверка синтаксиса и простое выполнение:

  1. Скачать: файлы.
    Пометка: common.j и blizzard.as рекомендуется вручную брать из последнего релиза UjAPI.mpq
  2. Перетащите ваш файл в приложение.
  3. В консоль выведутся предупреждения/ошибки.

Подсветка для AngelScript:

Visual Studio Code: Github (Мой плагин).
Sublime: Github.

Пример кода:

expand
#include "Scripts\\blizzard.as" // это подключит blizzard.as (транспилированный blizzard.j) в проект.

void SomeFunction( )
{
  print( "SomeFunction\n" );
}

void main( )
{
	TimerStart( CreateTimer( ), 1.f, false, @SomeFunction ); // @ используется для создания делегата, в данном случае ссылки на функцию.
	TimerStart( CreateTimer( ), 1.f, false,  function( )
        {
          print( "OnSomeTimerAction\n" );
        }  ); // Данный вид написания тоже валиден, в данном случае мы используем лямбду (анонимную функцию).

	// Пример лямбды с триггером.
	trigger tTest = CreateTrigger( );
	player p = Player( 0 );
	TriggerRegisterPlayerEvent( tTest, p, EVENT_PLAYER_ARROW_LEFT_DOWN ); // ConvertPlayerEvent(261)
	TriggerAddCondition( tTest, Filter(
			function( )
			{
				print( "OnSomeStupidCond\n" );
				return true;
			}
		)
	);
	TriggerAddAction( tTest,
		function( )
		{
		  print( "OnSomeStupidAct\n" );
		}
	);
}

void config( )
{
	// Логика этой функции в точности копирует поведение функции config в Jass, потому тут показывать нечего.
}

Скриншоты:

`
LOADING AD...
0
19
3 months ago
0
Вот это я понимаю некстген варкрафта
0
20
3 months ago
0
Добавлена ссылка на плагин подсветки синтаксиса AngelScript для Visual Studio Code: Github.
Replies (2)
0
35
3 months ago
0
Unryze,
тогда уж и github.com/wronex/sublime-angelscript но разве оно не ставится прямо из приложения?
0
20
3 months ago
0
tysch_tysch, то, что ставится частично сломано, да и реализация там как раз из этого саблайма (то бишь обе кривые). Я весь tmlanguage оригинала в начале перегнал обратно в .js а потом уже зафиксил пару проблем. Ну и добавил типы джасса, как и нативки и BJ функции.
Но в целом укажу и это, но вряд ли тут кто-то использует sublime.
1
20
3 months ago
Edited by Unryze
1
A new version is out! Scroll to the resource

v1.0.1.2

1. Исправлена критическая ошибка от сравнения любого типа хендлов.
2. Исправлена критическая ошибка от GetEventPlayerChatString.
3. Исправлена критическая ошибка от GetEventPlayerChatStringMatched.
4. Добавлено int64 std::chrono::get_ns.
5. Добавлено int64 std::chrono::get_us.
6. Добавлено int64 std::chrono::get_ns.
3
20
2 months ago
3
A new version is out! Scroll to the resource

v1.0.2.6

1, Добавлена поддержка мульти-строки для строк, что позволит избавиться от нужды """.
2. Исправлены исключения/ошибки в тяжело нагруженных строками картах, это было решено путём кэша строк на стороне AngelScript.

v1.0.2.7

1. Исправлена поддержка 1.27a/1.27b/1.28f.

v1.0.2.9

1. Добавлена поддержка литералов, то бишь 'I000' вместо FourCC( "I000" ).
2. Улучшена поддержка литералов с 1 или 4 символов до 1 до 8 символов, то бишь 'I0' and 'I000000I' оба будут валидны.
3. Исправлена критическая ошибка при присваивании нулевой строки в строку.
	Пометка: это по большей части связано с LoadStr.
4. "main" функция более не вызывается в лобби.
0
31
Создайте war3map.as файл, в этом файле вы будете писать код.
Добавьте файл через менеджер импорта или же MPQ по пути Scripts\\war3map.as или же просто war3map.as
При добавлении через менеджер импорта и попытке сохранить появляется ошибка:
но только, если прописывать путь Scripts\\war3map.as
Через MPQ-редактор все нормально.
Но и так и так не получается добиться исполнения кода (Был использован тот что в примере приведен).
Так же прогнав код из примере через парсер получил сообщения об ошибке:
Подскажите, где и что я делаю не так?
0
20
1 month ago
0
В данный момент не дома, AngelScript не был создан для WE, ошибка тоже странная, буду дома гляну сам.
По парсеру - там отдельная ошибка, точнее мой косяк, я когда добавлял новые типы именно в парсере забыл добавить их регистрацию, обновлю его скоро.
1
31
При добавлении через менеджер импорта и попытке сохранить появляется ошибка:
Это, скорее всего, мой личный косяк.
без UjAPI происходит тоже самое. Как и в обычном WE. И не только со скриптами. Пытался заменить текстуру ландшафта - та же проблема. Переустановка JNGP не дала результатов. Чуть позже проверю на другой машине, надеюсь, поможет.

Все, разобрался, запустил. Сдуру в пути импорта указал двойные "//".
Тогда только жду обновление парсера. Спасибо.
Replies (1)
0
20
1 month ago
0
Алексей Андреич, забыл ответить, парсер был обновлён.
0
23
4 weeks ago
0
Добавьте файл через менеджер импорта или же MPQ по пути Scripts\\war3map.as или же просто war3map.as.
Режим папки [как в рефе] возможен на 1.26-1.28? Что-нибудь такое в перспективе вообще планируется?
Replies (4)
0
20
4 weeks ago
0
Makeba, редактирование World Editor'a ужасно геморройное занятие, так что скорее нет, чем да. Ибо мне тяжко вообще оправдать трудочасы на него, учитывая все его проблемы, да и когда есть тот же w3x2lni.
0
23
4 weeks ago
Edited by Makeba
0
Unryze, к хорошему быстро привыкаешь, физически больно откатываться назад к менеджеру импорта и mpq редактору
0
29
4 weeks ago
0
Makeba, ну так не откатывайся.
0
23
4 weeks ago
0
nazarpunk, ну так и не откатываюсь
2
20
4 weeks ago
Edited by Unryze
2
A new version is out! Scroll to the resource

AngelScript v1.0.4.16

1. Базовый код AngelScript обновлён до 2.36.1.
2. Добавлено std:sleep_ns(uint64_t) как внутреннее API, которое принимает nanoseconds.
3. Добавлено std:sleep_us(uint64_t) как внутреннее API, которое принимает microseconds.
4. Добавлено std:sleep_ms(uint64_t) как внутреннее API, которое принимает milliseconds.
5. Добавлено std:sleep(double) как внутреннее API, которое принимает float/double.
6. TriggerSleepAction теперь использует std::sleep(double), раннее ничего не делало.
7. Изменены << и <<= операторы с Логических в Арифметические.
8. Изменены >>, >>> и >>= операторы с Логических в Арифметические.
9. Добавлен оператор <<< как Логическия операция.

AngelScript Parser 1.0.3.14

1. AngelScript base code updated в 2.36.1.
2. Добавлено std:sleep_ns(uint64_t) как внутреннее API, которое принимает nanoseconds.
3. Добавлено std:sleep_us(uint64_t) как внутреннее API, которое принимает microseconds.
4. Добавлено std:sleep_ms(uint64_t) как внутреннее API, которое принимает milliseconds.
5. Добавлено std:sleep(double) как внутреннее API, которое принимает float/double.
6. TriggerSleepAction теперь использует std::sleep(double), раннее ничего не делало.
7. Изменены << и <<= операторы с Логических в Арифметические.
8. Изменены >>, >>> и >>= операторы с Логических в Арифметические.
9. Добавлен оператор <<< как Логическия операция.
10. Добавлена опция RunTimers в settings.ini, это контролирует будут ли созданы и запущены таймеры.
0
29
6 days ago
0
Более подробная документация доступна здесь.
To leave a comment please sign in to the site.