Данная библиотека предназначена для тех, кто не хочет или не может изучать 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]
1. Установить JASS NewGen Pack. 2. Скачать, собственно, саму библиотеку и закинуть ее в папку ...\jassnewgenpack5d\AdicHelper\lib\ 3. В своей карте написать в нестандартном коде: include "ALL.j"
Где здесь хоть что-то про то, что код библиотеки нужно копировать себе в триггеры?
Эдик убирает "local"? С таким я еще не сталкивался. Код функции ведь корректный? Там внизу endfunction есть и все такое, да? Какой сборкой JNGP пользуешься? Рекомендую эту.
Добавлено (15 Марта 2014, 22:13:22) --------------------------------------------- Так, а почему осталась табуляция? Ну-ка скинь скрин с галочками настроек JassHelper и cJass.
Так, а почему осталась табуляция? Ну-ка скинь скрин с галочками настроек JassHelper и cJass.
Да с галочками все в порядке, я делаю карту не первый год, + есть еще 1 разроб со мной, один из них пишет на джазе ник wetalq У меня и у него вот эта версия редактора Jass New Gen Pack 5d Exp2
Я боюсь это делать, у меня уже был случай, когда я удалил старый редактор и установил в новый то пропали подсветки с Джас кодов, и некто не смог помочь, пришлось переустановить виндовс что жутко не в моих правилах, а еще был случаей что когда 2 редактора то оба перестали запускатся и кирдык, что я не делал все след редакторы не включались, токо стандартные. Поэтому установить новый редактор не хочу(
Просто вписал в начало нестандартного кода #include "ALL.j", все сохранилось и заработало.
ЦитатаDondra ()
Да с галочками все в порядке, я делаю карту не первый год
То, что ты делаешь карту не первый год, еще не означает, что у тебя правильно настроены диалекты JASS'а. Скинь скрин.
Советую очень внимательно перечитать эти строки:
ЦитатаSirNikolas ()
Если же Вам нужно, к примеру, занести точку или эффект в переменную для дальнейшей работы с ними, перед этим действием нужно прописать Личным сценарием (Custom script): ALL_Remove = false, а после него - ALL_Remove = true.
Просто вписал в начало нестандартного кода #include "ALL.j", все сохранилось и заработало. Цитата Dondra () Да с галочками все в порядке, я делаю карту не первый год То, что ты делаешь карту не первый год, еще не означает, что у тебя правильно настроены диалекты JASS'а. Скинь скрин.
Советую очень внимательно перечитать эти строки: Цитата SirNikolas () Если же Вам нужно, к примеру, занести точку или эффект в переменную для дальнейшей работы с ними, перед этим действием нужно прописать Личным сценарием (Custom script): ALL_Remove = false, а после него - ALL_Remove = true.
Я сохраняю выдает синтаксис ошибки !!!
Добавлено (19 Марта 2014, 01:16:34) --------------------------------------------- Записал я твой редактор, после сохранения выбивает опять же тучу синтаксис ошибок.
Добавлено (19 Марта 2014, 01:20:36) --------------------------------------------- Удалил я старый редактор, установил заново новый , установил твою билиотеку в новой, сделал все пункты заново, Заработало, точнее сохранило карту, а когда начну тестировать твою систему и работает ли она скажу на этой недели.
Добавлено (23 Марта 2014, 23:35:16) --------------------------------------------- Система работает, но есть один очень неприятный побочный эффект, у меня в карте много квестов я прикрипляю к головам НПС спецэффекты, а твоя система их сразу же удаляет, как это происходит я понятия не имею, но если я удаляю твою систему, то все спецэффекты сново на своих местах... =(
Мой проект на War3info
Сообщение отредактировал Dondra - Понедельник, 24 Марта 2014, 01:54:30
Если же Вам нужно, к примеру, занести точку или эффект в переменную для дальнейшей работы с ними, перед этим действием нужно прописать Личным сценарием (Custom script): ALL_Remove = false, а после него - ALL_Remove = true.
Советую очень внимательно перечитать эти строки: Цитата SirNikolas () Если же Вам нужно, к примеру, занести точку или эффект в переменную для дальнейшей работы с ними, перед этим действием нужно прописать Личным сценарием (Custom script): ALL_Remove = false, а после него - ALL_Remove = true.
А я не думаю что болие чем в 300сот тригерах я буду кликать личные сценарии... К томуже я даже не понимаю как их делает, а то что тут написано я ваше хз впервые такое вижу и слышу.
Добавлено (24 Марта 2014, 21:49:26) --------------------------------------------- Мда почти все скилы не работают спецэфекты сразу уничтажаются, ужас
Добавлено (24 Марта 2014, 22:01:14) --------------------------------------------- Сделал как ты сказал личные сценарии, только я ввожу в начале тригера и в конце, пока работает но переделка займет много времени.
Если между ними попадает действие ожидания (wait), система не будет удалять утечки нигде в это время.
У меня почти везде ждать, вот выпустил карту, уже болиее 10-сяти жалоб на ужасные лаги почти при любых тригерных скилах, ппц.
Добавлено (06 Апреля 2014, 13:10:24) --------------------------------------------- Я записал все скилы в эти сценарии, ничего не изменилось всеравно лагает ужастно ни чено не изменилось, прейдется систему снять =( а жаль так надеялся и так долго все переделовал.
Добавлено (06 Апреля 2014, 13:14:57) --------------------------------------------- а тепреь случился такой "***" после того как я убрал систему оно заглючило и выкенуло сразу хочет что бы я поудалял все личные сценарии а их по папкам и тригерах 100+ шт...... я хереню, зря ваше связался
Завуалированный мат.
Мой проект на War3info
Сообщение отредактировал SirNikolas - Воскресенье, 06 Апреля 2014, 15:05:08
Вопрос такой, я думаю его уже задавали, а может нет. Как его правильно юзать выключать фукнцию, устанавливать переменную, включать функцию, но как я понимаю она сразу её удалит, а может нет. Или же можно выключаит, сделать всё что нужно и под конец включит, вместо того, что бы через Лич. Сцен. убирать утечки?
Если ничего не отключать, объектом (эффектом, точкой и т. д.) можно будет пользоваться до первого wait'а (или до конца триггера). Потом он удалится. Если же отключить систему, создать объект и снова ее включить, то система "не заметит" созданного объекта и не будет пытаться его удалять. Разумеется, в этом случае ответственность за убирание утечки ложится полностью на вас.