|
|
|
|
[Вопрос] Утечки
|
|
Hock | Дата: Воскресенье, 27 Ноября 2011, 13:51:11 | Сообщение # 1 |
3 уровень
Группа: Проверенные
Сообщений: 57
Награды: 0
Репутация: 14
Блокировки:
| Вопрос такой-Из нижеперечисленных действий - есть ли утечные? И как это исправить? Code local unit u=GetTriggerUnit() local real x=GetUnitX(u) local real y=GetUnitY(u) local unit d=CreateUnit(GetOwningPlayer(u),'h008',x,y,0) call ForGroup( GetUnitsInRangeOfLocAll(425.00, GetUnitLoc(u)), function Trig_TimeStop_Func001A ) call TriggerSleepAction(3 * GetUnitAbilityLevel(GetTriggerUnit(),'A00R')) call RemoveUnit(d) set d=null set u=null Code [code]local real x=-10.2 local real y=1719.1 set udg_Hero[0]=CreateUnit(Player(0),'H000',x,y,0) local real x=-4779.6 local real y=2400.3 call RemoveUnit( GetTriggerUnit() ) call AddHeroXP(GetKillingUnit(),30,false) call TriggerSleepAction( 7.00 ) call CreateUnit(Player(10),'n00B',x,y,0)[/code]
Code local real x=-4466.9 local real y=6847.5 local unit u=GetTriggerUnit() call SetUnitX(u,x) call SetUnitY(u,y) call PanCameraToForPlayer(GetOwningPlayer(u),x,y)
Code local real x=GetUnitX(GetKillingUnit()) local real y=GetUnitY(GetKillingUnit()) local real x2=-4485.5 local real y2=7793.2 call AddHeroXP(GetKillingUnit(),5000,false) call DisplayTextToForce( GetPlayersAll(), ( GetPlayerName(GetTriggerPlayer()) + ( " |cFFFF093BСтер в порошок" + ( " Морского гиганта и получает сокровенные |cFF76FF3B" + I2S(udg_BG) ) ) ) ) call AdjustPlayerStateBJ( udg_BG, GetOwningPlayer(GetKillingUnitBJ()), PLAYER_STATE_RESOURCE_GOLD ) call CreateItem(udg_ItepDropChoseFromBosses[GetRandomInt(0, 19)],x,y) call CreateItem(udg_ItepDropChoseFromBosses[GetRandomInt(0, 11)],x,y) call RemoveUnit( GetTriggerUnit() ) set udg_BG = ( udg_BG + 250 ) set udg_WO = 1 call TriggerSleepAction( 30.00 ) call CreateUnit(Player(11),'n009',x2,y2,0)
Code local real x=-10.2 local real y=1719.1 call SetUnitX(u,x) call SetUnitY(u,y) call TriggerSleepAction( 30.00 ) set udg_WO = 0
http://warcraft3ft.info/forum/26-34958-1
|
|
|
|
Borodach | Дата: Воскресенье, 27 Ноября 2011, 14:18:26 | Сообщение # 2 |
9 уровень
Группа: Проверенные
Сообщений: 930
Награды: 0
Репутация: 422
Блокировки:
| Hock, я заметил только утечку буля и вызов ненужной бж функции. 1)решается вроде так... local filterfunc f=Trig_TimeStop_Func001A call ForGroup( GetUnitsInRangeOfLocAll(425.00, GetUnitLoc(u)), function f ) call DestroyFilter(f) 2)так... но это по вкусу, утечки нет просто вызов лишней функции call SetPlayerState(GetOwningPlayer(GetKillingUnit()),PLAYER_STATE_RESOURCE_GOLD, GetPlayerState(GetOwningPlayer(GetKillingUnit()),PLAYER_STATE_RESOURCE_GOLD)+udg_BG)
Karamba
|
|
|
|
lawson | Дата: Воскресенье, 27 Ноября 2011, 15:07:58 | Сообщение # 3 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (Borodach) я заметил только утечку буля и вызов ненужной бж функции. когда бул пишется сразу в функции группы то он не вызывает утечки.Добавлено (27 Ноябрь 2011, 15:07:10) ---------------------------------------------
Quote (Hock) GetUnitsInRangeOfLoc УтечкаДобавлено (27 Ноябрь 2011, 15:07:58) --------------------------------------------- Самая большая твоя утечка - это вейт!
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
Ty3uK | Дата: Воскресенье, 27 Ноября 2011, 15:16:15 | Сообщение # 4 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| +1 надо юзать GroupEnumUnitsInRange() и таймер, плюс избавиться от функций, которые создает гуи. Ну и таймер Добавлено (27 Ноябрь 2011, 15:16:15) --------------------------------------------- Ну и Лавс правильно сказал- бульэкспр как фильтрфунк не утекает, если писать его сразу в функцию
|
|
|
|
OxygenD | Дата: Понедельник, 28 Ноября 2011, 14:41:17 | Сообщение # 5 |
2 уровень
Группа: Проверенные
Сообщений: 25
Награды: 0
Репутация: 11
Блокировки:
| Quote (Hock) call DisplayTextToForce( GetPlayersAll(), ( GetPlayerName(GetTriggerPlayer()) + ( " |cFFFF093BСтер в порошок" + ( " Морского гиганта и получает сокровенные |cFF76FF3B" + I2S(udg_BG) ) ) ) )
Не хорошо.
Юзай >>>
Code function Msg takes string s, integer id, real time returns nothing call DisplayTimedTextToPlayer(Player(id), 0, 0, time, s) endfunction
Пою в душе на паскале.
Сообщение отредактировал OxygenD - Понедельник, 28 Ноября 2011, 14:41:51 |
|
|
|
Hock | Дата: Понедельник, 28 Ноября 2011, 14:47:20 | Сообщение # 6 |
3 уровень
Группа: Проверенные
Сообщений: 57
Награды: 0
Репутация: 14
Блокировки:
| OxygenD, придется юзать 10 раз,разве лучше?) Ибо нужно показать 10-м
http://warcraft3ft.info/forum/26-34958-1
|
|
|
|
Hexing | Дата: Понедельник, 28 Ноября 2011, 15:06:18 | Сообщение # 7 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| Hock, юзай Code call DisplayTextToPlayer(GetLocalPlayer(),GetPlayerName(GetTriggerPlayer())+" |cFFFF093BСтер в порошок" +" Морского гиганта и получает сокровенные|cFF76FF3B"+I2S(udg_BG)) меньше скобок = лучшая читабельность
Сообщение отредактировал Hexing - Понедельник, 28 Ноября 2011, 15:06:37 |
|
|
|
Hock | Дата: Понедельник, 28 Ноября 2011, 16:30:42 | Сообщение # 8 |
3 уровень
Группа: Проверенные
Сообщений: 57
Награды: 0
Репутация: 14
Блокировки:
| Hexing, Просто я делал карту в смеси гуй и жасса Т.к вроде знаю что да как в последнем,но все же,все на нем еще не получается,и столкнулся с проблемой гдет после 30 минут активной игры,лаги оО у меня комп староватый,но все же. У тестеров как они говорят и после часа не было,но я решил переделать все что смогу,вот и спросил Устранено ли в этих кодах все?)) А эту строчку поменять как ненашел,более быстрой замены,чем цикл,для смены показам игрокам.
http://warcraft3ft.info/forum/26-34958-1
|
|
|
|
Hexing | Дата: Понедельник, 28 Ноября 2011, 16:49:12 | Сообщение # 9 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| Quote (Hock) карту в смеси гуй и жасса заранее неудачная идея, в результате ничего хорошего не получится Code call SetUnitX(u,x) call SetUnitY(u,y) меняй на SetUnitPosition(u,x,y) Code call TriggerSleepAction( 7.00 ) убрать все sleep-ы нахрен лепи из таймеров+хэша часто функция просто дохнет иззи слипов(обрывается) раскрой bj - юзай SetPlayerState(player, state, GetPlayerState(player, state) + value) остальное вроде нормуль но советую вместо x и y писать ручками числа ибо это быстрее переменные используются в случаях, когда они могут принять неизвестное нам значение удачи кстати не знаю быстрее ли это, но я завожу 12 констант типа player со значениями Player(0)...Player(11) соответственно, и по возможности использую эти константы вместо Player(0) и т.п. ведь Player(0) это лишний вызов функции, но опять же это дело каждого
|
|
|
|
SirNikolas | Дата: Вторник, 29 Ноября 2011, 15:17:27 | Сообщение # 10 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (Hexing) call SetUnitX(u,x) call SetUnitY(u,y) Работает чуть быстрее, чем SetUnitPosition, т. к. не проверяет проходимость точки, зато если юнит вылетит за границы карты, будет Fatal Error.
|
|
|
|
YaNeZnauJass | Дата: Вторник, 29 Ноября 2011, 19:44:22 | Сообщение # 11 |
1 уровень
Группа: Пользователи
Сообщений: 15
Награды: 0
Репутация: 15
Блокировки:
| Code local real x=GetUnitX(u) local real y=GetUnitY(u)
Code local real x=GetWidgetX(u) local real y=GetWidgetY(u)
|
|
|
|
Ice_Air | Дата: Вторник, 29 Ноября 2011, 23:24:43 | Сообщение # 12 |
1 уровень
Группа: Пользователи
Сообщений: 13
Награды: 0
Репутация: -56
Блокировки:
| Quote (Hock) ForGroup( GetUnitsInRangeOfLocAll(425.00, GetUnitLoc(u)), function Trig_TimeStop_Func001A ) Quote (Hock) GetUnitsInRangeOfLocAll Quote (Hock) GetUnitLoc(u)
|
|
|
|
FatalBlade | Дата: Среда, 30 Ноября 2011, 01:51:01 | Сообщение # 13 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (Hock) call ForGroup( GetUnitsInRangeOfLocAll(425.00, GetUnitLoc(u)), function Trig_TimeStop_Func001A ) Могу ошибаться, но помоему тут 2 утечки. Точку и группу то надо удалять. А вообще лучше без точки. Вот так:
Code local group g = CreateGroup() call GroupEnumUnitsInRange(u, GetWidgetX(u), GetWidgetY(u), 425.00, function Trig_TimeStop_Func001A) Это даже не БЖ, что очень хорошо.
Затем, можно и без отдельной функции делать действия для каждого юнита в группе. Для выделения юнита делаешь
Code set un = FirstOfGroup(g) loop exitwhen un == null бла бла бла endloop call DestroyGroup(g) set g = null set un = null
|
|
|
|
SirNikolas | Дата: Среда, 30 Ноября 2011, 14:49:06 | Сообщение # 14 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (FatalBlade) Code set un = FirstOfGroup(g) loop exitwhen un == null бла бла бла endloop call DestroyGroup(g) set g = null set un = null Code globals constant group udg_G = CreateGroup() endglobals
//... local unit u call GroupEnumUnitsInRange(u, GetWidgetX(u), GetWidgetY(u), 425., null) loop set u = FirstOfGroup(udg_G) exitwhen u == null call GroupRemoveUnit(udg_G, u) //... endloop //... По крайней мере так. А лучше перебирать юнитов прямо в функции-условии.
|
|
|
|
Ty3uK | Дата: Среда, 30 Ноября 2011, 14:50:05 | Сообщение # 15 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| SirNikolas, но такое объявление глобалок работает только в jngp, разве нет?
|
|
|
|
SirNikolas | Дата: Среда, 30 Ноября 2011, 14:54:06 | Сообщение # 16 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Ctrl+B еще никто не отменял.
|
|
|
|
YaNeZnauJass | Дата: Среда, 30 Ноября 2011, 15:25:24 | Сообщение # 17 |
1 уровень
Группа: Пользователи
Сообщений: 15
Награды: 0
Репутация: 15
Блокировки:
| SirNikolas, А лучше фильтром. Code constant group Group=CreateGroup()
boolean FilterG () { if GetWidgetLife(GetEnumUnit())>.425 { return true } }
// и вызывать этим:
GroupEnumUnitsInRange (Group, x, y, 500., Condition(function FilterG))
|
|
|
|
Hock | Дата: Среда, 30 Ноября 2011, 20:22:54 | Сообщение # 18 |
3 уровень
Группа: Проверенные
Сообщений: 57
Награды: 0
Репутация: 14
Блокировки:
| Спасибо всем) Есть еще вопрос: Как раскрыть бж тут? Code call RemoveItem( GetItemOfTypeFromUnitBJ(GetTriggerUnit(), 'I00M') )
http://warcraft3ft.info/forum/26-34958-1
|
|
|
|
lawson | Дата: Среда, 30 Ноября 2011, 20:40:56 | Сообщение # 19 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (Hock) Как раскрыть бж тут? помоему в две функции раскрывается. Дуратский бж, посмотри как он работает в function list
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
Hock | Дата: Среда, 30 Ноября 2011, 20:54:50 | Сообщение # 20 |
3 уровень
Группа: Проверенные
Сообщений: 57
Награды: 0
Репутация: 14
Блокировки:
| Code call RemoveItemFromStock(u,'I00M') Это заменит?
http://warcraft3ft.info/forum/26-34958-1
|
|
|
|
Borodach | Дата: Среда, 30 Ноября 2011, 20:59:33 | Сообщение # 21 |
9 уровень
Группа: Проверенные
Сообщений: 930
Награды: 0
Репутация: 422
Блокировки:
| Hock, Code local integer i=0 local item Item loop set Item=UnitItemInSlot(GetTriggerUnit(),i) if (Item != null) and (GetItemTypeId(Item)=='I00M') then call RemoveItem(Item) endif set i=i+1 exitwhen i>=bj_MAX_INVENTORY endloop
Karamba
|
|
|
|
Hock | Дата: Среда, 30 Ноября 2011, 21:02:36 | Сообщение # 22 |
3 уровень
Группа: Проверенные
Сообщений: 57
Награды: 0
Репутация: 14
Блокировки:
| К сожалению нет Добавлено (30 Ноябрь 2011, 21:02:36) --------------------------------------------- Borodach, Спс попробую
http://warcraft3ft.info/forum/26-34958-1
|
|
|
|
lawson | Дата: Среда, 30 Ноября 2011, 21:05:19 | Сообщение # 23 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| А, я думал тебе вообще надо его раскрыть а не только для этого случая.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
Ty3uK | Дата: Среда, 30 Ноября 2011, 21:28:21 | Сообщение # 24 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| bj_MAX_INVENTORY - мы не знаем, сколько максимум предметов в инвентаре может быть? О.о пишите сразу 8, ибо использование бж- лишнее действие для процессора Добавлено (30 Ноябрь 2011, 21:28:21) --------------------------------------------- Фу, 6, перепутал
|
|
|
|
FatalBlade | Дата: Среда, 30 Ноября 2011, 21:57:09 | Сообщение # 25 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| А можно как то попроще раскрыть БЖ - GetItemOfTypeFromUnitBJ ? Или какая нибудь альтернатива?
|
|
|
|
|
|
|
|
|
|
|