Добавлен Vlod,
опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
cJass
Тип:
Наработка
Версия Warcraft:
1.26а
Введение
Иногда может понадобиться сохранить определенный список аргументов функции, чтобы потом вызвать её с нужными параметрами.
Описание
- Сохранить аргументы с функцией в объект:
namefunction.save(arg1,arg2...) -> int obj,
где namefunction - имя оригинальной функции,
(arg1,arg2...) - её аргументы.
- Вызвать:
frun(int obj)
- Вернуть значения:
namefunction.namepar1, namefunction.namepar2,
где nameparN - имя возвращаемого параметра
- Удалить (очистить):
fdel(int obj)
---Пример---
function test_1 takes integer a, integer b returns nothing
test_1.ret(a+1,b-1)
endfunction
//! runtextmacro FUNC2("test_1","integer","integer")
//! runtextmacro RET2("test_1","integer","i1","integer","i2")
function test_2 takes integer a, integer b, real c returns nothing
printr(a+c,b+c)
endfunction
//! runtextmacro FUNC3("test_2","integer","integer","real")
function MyCode1 takes nothing returns nothing
integer save = test_1.save(1,5)
frun(save)
fdel(save)
save = test_2.save( test_1.i1, test_1.i2, 10. )
frun(save)
fdel(save)
endfunction
Выведет:
a+c 12.000; b+c 14.000
Дополнительно
о количестве аргументов
Система легко масштабируется, но с увеличением масштаба тяжело вводить архитектурные изменения. Сжать код не получилось из за словленного бага с define.
Установка
Поддерживаются функции не более чем с 6 аргументами.
Число возвращаемых параметров не более 4.
Число возвращаемых параметров не более 4.
Список поддерживаемых типов данных
Возможно расширить в любой момент по аналогии.
(string)
(destructable)
(effect)
(integer)
(item)
(lightning)
(multiboard)
(multiboarditem)
(player)
(real)
(rect)
(region)
(timer)
(trigger)
(unit)
Список изменений (02.01.2020)
- Добавлено введение, описание, дополнительно, установка;
- Добавлен деструктор. Теперь можно очистить объект-функцию;
- Исправлена очистка функций, добавлен возврат нескольких значений;
- Единый деструктор для всех функций. Переход к ExecuteFunc() от ForceEnumPlayers() из-за мультивызовов.
Скопировать папки ProtoClass, SaveFunction.
Скачать:
SaveFunction.w3m
SaveFunction.w3m
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован Jack-of-shadow
Единственное передача атрибутов там не встроена, для этого используются глобалки. Функции для передачи я расширяю по мере надобности, так как обычно хватает индекса игрока.
А, так у тебя тоже фильтры только не через хеш? Тогда это даже шустрее будет
Сомнительный функционал в рамках варкрафта
Подсветка, запуск, билд, скиньте подробные мануалы, чтобы можно было их сравнить с предыдущими и проверить работоспособность на 1.26 и 1.31.
Или, может, есть парсер cjass -> lua, или хотя бы vjass -> lua?
Ведь большое количество проектов были написаны с использованием этих диалектов, есть ли возможность облегчить им переход?
Отредактирован Doc
Запускать можно множеством способов, начиная от копипастинга кода в редактор и запускания прямо оттуда, заканчивая билд системами, такими как github.com/ElusiveMori/ceres-wc3
Я использую обычный .bat скрипт, в котором одна строка копирует файл карты, другая вставляет в нее мой код (с помощью MPQEditor.exe), а третья запускает варкрафт с этой картой.
Многих может шокировать невероятно, но близзард и так уже конвертируют жасс в луа, поэтому такой парсер уже есть в стандартной поставке. Либо этот github.com/actboy168/jass2lua
Другой вариант - xgm.guru/p/wc3/jassnewgenpack-lua#lastpost