Данная библиотека предназначена для тех, кто не хочет или не может изучать JASS, но имеет проблемы с утечками. Для использования необходимо: 1. Установить JASS NewGen Pack. 2. Скачать, собственно, саму библиотеку и закинуть ее в папку ...\jassnewgenpack5d\AdicHelper\lib\ 3. В своей карте написать в нестандартном коде: include "ALL.j"[spoiler="Нестандартный код здесь"][/spoiler]4. Забыть об утечках.
Результат - такое действие, как, например, "Боевая единица - Move (Triggering unit) to ((Position of (Target unit of ability being cast)) offset by 200.00 towards (Angle from (Position of (Triggering unit)) to (Position of (Target unit of ability being cast))) degrees)" не будет оставлять утечных точек.
Если же Вам нужно, к примеру, занести точку или эффект в переменную для дальнейшей работы с ними, перед этим действием нужно прописать Личным сценарием (Custom script): ALL_Remove = false, а после него - ALL_Remove = true.
Однако повторюсь, лучше использовать JASS, ведь вручную можно сделать все гораздо лучше.
private constant timer Timer = CreateTimer() private int MaxVar = -1 private int array LeakNum private location array LocationVar private rect array RectVar private group array GroupVar private force array ForceVar private group Group private force Force public bool Remove = false
public rect RemoveRect(rect leak) { if Remove { MaxVar++ MaxVar:RectVar = leak MaxVar:LeakNum = RectLeak if MaxVar == 0 { TimerStart(Timer, .0, false, function RemoveLeak) } } return leak } public rect RectFromCenterSizeBJ_GetRectFromCircleBJ(location l, real width, real height, bool b) { real x = GetLocationX(l), y = GetLocationY(l) if b { width *= .5 height *= .5 return Re##ct(x - width, y - height, x + width, y + height) } return Re##ct(x - width, y - width, x + width, y + width) }
public location RemoveLocation(location leak) { if Remove { MaxVar++ MaxVar:LocationVar = leak MaxVar:LeakNum = LocationLeak if MaxVar == 0 { TimerStart(Timer, .0, false, function RemoveLeak) } } return leak } public location GetWidgetLoc(widget w) { return Loc##ation(GetWidgetX(w), GetWidgetY(w)) } public location PolarProjection##BJ(location l, real r, real a) { a *= .0174533 return Loc##ation(GetLocationX(l) + Cos(a) * r, GetLocationY(l) + Sin(a) * r) } public location MeleeGetLoc##WithinRect(location l, rect r) { real minX = GetRectMinX®, maxX = GetRectMaxX®, \ minY = GetRectMinY®, maxY = GetRectMaxY® real x = GetLocationX(l), y = GetLocationY(l) if x < minX { x = minX } elseif x > maxX { x = maxX } if y < minY { return Loc##ation(x, minY) } elseif y > maxY { return Loc##ation(x, maxY) } return Loc##ation(x, y) }
public group DestroyGroup(group leak) { if Remove { MaxVar++ MaxVar:GroupVar = leak MaxVar:LeakNum = GroupLeak if MaxVar == 0 { TimerStart(Timer, .0, false, function RemoveLeak) } } return leak } public group GetUnitsInRange##OfLocMatching(real r, location l, boolexpr b) { Group = CreateGroup() GroupEnumUnitsInRangeOfLoc(Group, l, r, b) return Group } public group GetUnitsInRect##Matching(rect r, boolexpr b) { Group = CreateGroup() GroupEnumUnitsInRect(Group, r, b) return Group } public group GetUnitsInRect##OfPlayer(rect r, player p) { Group = CreateGroup() bj_groupEnumOwningPlayer = p GroupEnumUnitsInRect(Group, r, filterGetUnitsInRectOfPlayer) return Group } public group GetUnitsOfPlayer##Matching(player p, boolexpr b) { Group = CreateGroup() GroupEnumUnitsOfPlayer(Group, p, b) return Group } public group GetUnitsOfPlayer##AndTypeId(player p, int id) { Group = CreateGroup() bj_groupEnumTypeId = id GroupEnumUnitsOfPlayer(Group, p, filterGetUnitsOfPlayerAndTypeId) return Group } public group GetUnitsOfTypeId##All(int id) { group g = CreateGroup() bj_groupAddGroupDest = CreateGroup() bj_groupEnumTypeId = id for (int i = 0) { GroupEnumUnitsOfPlayer(g, Player(i), filterGetUnitsOfTypeIdAll) ForGroup(g, function GroupAddGroupEnum) exitwhen i == 15 i++ } Destroy##Group(g) g = null return bj_groupAddGroupDest } public group GetUnits##SelectedAll(player p) { Group = CreateGroup() SyncSelections() GroupEnumUnitsSelected(Group, p, null) return Group }
public force DestroyForce(force leak) { if Remove { MaxVar++ MaxVar:ForceVar = leak MaxVar:LeakNum = ForceLeak if MaxVar == 0 { TimerStart(Timer, .0, false, function RemoveLeak) } } return leak } public force GetForce##OfPlayer(player p) { Force = CreateForce() ForceAddPlayer(Force, p) return Force } public force GetPlay##ersAllies(player p) { Force = CreateForce() ForceEnumAllies(Force, p, null) return Force } public force GetPlayersByMap##Control(mapcontrol mc) { player p = Player(0) Force = CreateForce() for (int i = 0) { if GetPlayerController(p) == mc { ForceAddPlayer(Force, p) } exitwhen i == 15 p = Player(++i) } p = null return Force } public force GetPlay##ersEnemies(player p) { Force = CreateForce() ForceEnumEnemies(Force, p, null) return Force } public force GetPlay##ersMatching(boolexpr b) { Force = CreateForce() ForceEnumPlayers(Force, b) return Force }
//! textmacro ALL__RegisterMultiboardUpdater takes NAME, ARGS, PARAMS, PRE public void Multiboard##SetItem$NAME$BJ(multiboard mb, int col, int row, $ARGS$) { int rows = MultiboardGetRowCount(mb) int cols = MultiboardGetColumnCount(mb) multiboarditem mbi $PRE$ if col == 0 { if row == 0 { MultiboardSetItems$NAME$(mb, $PARAMS$) } else { row-- for (int i = 0; i < cols; i++) { mbi = MultiboardGetItem(mb, row, i) MultiboardSetItem$NAME$(mbi, $PARAMS$) MultiboardReleaseItem(mbi) } } } elseif row == 0 { col-- for (int i = 0; i < rows; i++) { mbi = MultiboardGetItem(mb, i, col) MultiboardSetItem$NAME$(mbi, $PARAMS$) MultiboardReleaseItem(mbi) } } else { mbi = MultiboardGetItem(mb, row - 1, col - 1) MultiboardSetItem$NAME$(mbi, $PARAMS$) MultiboardReleaseItem(mbi) } mbi = null } //! endtextmacro //! runtextmacro ALL__RegisterMultiboardUpdater("Style", "bool showVal, bool showIcon", "showVal, showIcon", "") //! runtextmacro ALL__RegisterMultiboardUpdater("Value", "string val", "val", "") //! runtextmacro ALL__RegisterMultiboardUpdater("ValueColor", "real red, real green, real blue, real trans", "r, g, b, t", "int r = R2I(red * 2.55), g = R2I(green * 2.55), b = R2I(blue * 2.55), t = 255 - R2I(trans * 2.55)") //! runtextmacro ALL__RegisterMultiboardUpdater("Width", "real width", "width", "width *= .01") //! runtextmacro ALL__RegisterMultiboardUpdater("Icon", "string icon", "icon", "") }[/code]
Решил воспользоваться данным ресурсом... Сделал все по инструкции, но в джассе ни черта не шарю поэтому не понимаю, что за ошибка при сохранении у меня вылезает! А вылазит у меня окно AdicHelper: syntax error в котором дофига всякого текста, а в самом конце выделено x=GetLocationX(1) И в нижней графе написано [22] Critical error: variables redeclared
SirNikolas, я уже разрешил эту проблему, у меня больше не вылазит это окно)
Добавлено (06 Май 2012, 14:58:11) --------------------------------------------- Кхм...я заметил, что после установки библиотеки (а мб и из-за джассового редактора, я хз), у меня перестала работать вот эта триггерная способность: http://imagepost.ru/?v=trigger2.png Почему??? И как сделать, чтобы она опять работала
ЗЫ: эффекты молнии пашут, даже миллисекундный стан делается! А вот Обе цели не перемещаются, а остаются на месте...
Если же Вам нужно, к примеру, занести точку или эффект в переменную для дальнейшей работы с ними, перед этим действием нужно прописать Личным сценарием (Custom script): ALL_Remove = false, а после него - ALL_Remove = true.
Под "дальнейшим использованием" я подразумевал наличие wait'ов или периодических триггеров.
Личный сценарий: ALL_Remove = false Установить NetherPosition[1] = (Позиция NetherUnits[1]) Установить NetherPosition[2] = (Позиция NetherUnits[2]) Личный сценарий: ALL_Remove = true
Добавлено (06 Май 2012, 17:51:35) --------------------------------------------- А в конце триггера вместо обнулений (они не нужны) пропиши: call RemoveLocation(udg_NetherPosition[1]) call RemoveLocation(udg_NetherPosition[2])
Когда вылазит? При сохранении? Во время игры? При запуске? Сохраняешь ли вообще карту перед запуском? Есть ли в карте или в пути кириллица? Действительно фатал или просто окно с ошибкой компиляции?
Когда вылазит? При сохранении? Во время игры? При запуске? Сохраняешь ли вообще карту перед запуском? Есть ли в карте или в пути кириллица? Действительно фатал или просто окно с ошибкой компиляции?
А можно пользоваться программой JASS NewGen Pack при картостроение через ГУИ?? И почему через эту программу всё хорошо работает, а когда открываю эту карту через стандартный worldedit, то ошибка вылезает? Ток не надо критиковать, я новичок))
Custom script: ALL_Remove = false Set SpellPoint = (Position of (Triggering unit)) Custom script: ALL_Remove = true
я в джассе не шарю , сорь если нубо вопрос , но "Custom script: ALL_Remove..." нужно только для переменных? или если я допустим создам юнита , то что бы потом его взять как last created unit нужно будет перед его созданием прописать "Custom script: ALL_Remove..." ???