Данная библиотека предназначена для тех, кто не хочет или не может изучать 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]
MultiboardSetItemStyleBJ MultiboardSetItemValueBJ MultiboardSetItemColorBJ MultiboardSetItemWidthBJ MultiboardSetItemIconBJ Там не обнуляется multiboarditem. А учитывая, сколько раз они вызываются (некоторые разработчики вообще сто раз в секунду полностью обновляют доску), это может вызвать снижение FPS. Плюс они вложенным циклом проходят по всей доске, даже когда надо изменить одну ячейку.
Установил, все запустилось, только вот триггеры чтоли начали тупит в карте , все наоборот в перемешку происходит, появляюсь не там где надо, другие ваще не включаются ит.д.
Если же Вам нужно, к примеру, занести точку или эффект в переменную для дальнейшей работы с ними, перед этим действием нужно прописать Личным сценарием (Custom script): ALL_Remove = false, а после него - ALL_Remove = true.
Мде... Проверил. Таки думал вот оно счастье ГУИ-шное. Ан нет. Скилы бомбят, не правильно работают. А о том как варик мгновенно начал оперативку жрать, я вообще умолчу...
Если же Вам нужно, к примеру, занести точку или эффект в переменную для дальнейшей работы с ними, перед этим действием нужно прописать Личным сценарием (Custom script): ALL_Remove = false, а после него - ALL_Remove = true.
ЦитатаPK_demon ()
А о том как варик мгновенно начал оперативку жрать, я вообще умолчу...
А вот это уже интересно. Я бы попросил перепроверить и посмотреть в Диспетчере Задач, действительно ли тратится память или же лаги по другой причине.
Система ловит утечные точки, области, группы, кланы и эффекты. За всеми остальными объектами следите вы сами.
Что значить кланы? (не суди строго я новичок) А как же боевая единица? А как же звуки ? (они вообще вызывают? Где то читал что да или ошибаюсь) И ты имеешь виду с каждым действием wait сделать так: Личные сценарий: ALL_Remove=false Ждать бла бла бла секунд Личные сценарий: ALL_Remove=true Верно? (Просто хотел не ошибаться)