[Вопрос] hook
|
|
Aphelion | Дата: Понедельник, 17 Июня 2013, 19:37:00 | Сообщение # 1 |
1 уровень
Группа: Пользователи
Сообщений: 1
Награды: 0
Репутация: 0
Блокировки:
| Здравствуйте. Расскажите, пожалуйста, новичку в vJASS о возможности хукинга, т.е. "отлова" вызова native-функции. У меня появилась идея сделать счётчик копящихся ссылок юнитов, тексттегов и т.п. на основе вылова создания объекта и его уничтожения. В поиске особенно ничего об этом не нашёл, только говорят, что это очень полезная штука. Спасибо за любые советы.
|
|
|
|
bornikkeny | Дата: Понедельник, 17 Июня 2013, 20:05:51 | Сообщение # 2 |
5 уровень
Группа: Проверенные
Сообщений: 107
Награды: 0
Репутация: 81
Блокировки:
| Код library temp412 initializer InitTrig_HandleCounter globals private leaderboard udg_HandleBoard endglobals function HandleCounter_Update takes nothing returns nothing local integer i = 0 local integer id local location array P local real result=0 loop exitwhen i >= 50 set i = i + 1 set P[i] = Location(0,0) set id = GetHandleId(P[i]) set result = result + (id-0x100000) endloop set result = result/i-i/2 loop call RemoveLocation(P[i]) set P[i] = null exitwhen i <= 1 set i = i - 1 endloop call LeaderboardSetItemValue(udg_HandleBoard,0,R2I(result)) endfunction
function HandleCounter_Actions takes nothing returns nothing set udg_HandleBoard = CreateLeaderboard() call LeaderboardSetLabel(udg_HandleBoard, "Handle Counter") call PlayerSetLeaderboard(GetLocalPlayer(),udg_HandleBoard) call LeaderboardDisplay(udg_HandleBoard,true) call LeaderboardAddItem(udg_HandleBoard,"Handles",0,Player(0)) call LeaderboardSetSizeByItemCount(udg_HandleBoard,1) call HandleCounter_Update() call TimerStart(GetExpiredTimer(),0.05,true,function HandleCounter_Update) endfunction
function InitTrig_HandleCounter takes nothing returns nothing call TimerStart(CreateTimer(),0,false,function HandleCounter_Actions) endfunction endlibrary Мб поможет... Эта "библиотека" находит все хендлы в игре. Что очень помогает при оптимизации карт. Если даже это не то, что вы просите, то можете что-либо интересное там найти. Удачи.
Сообщение отредактировал bornikkeny - Понедельник, 17 Июня 2013, 20:19:59 |
|
|
|
SirNikolas | Дата: Вторник, 18 Июня 2013, 07:43:26 | Сообщение # 3 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Хук позволяет вызвать свою функцию перед тем, как будет вызвана нативка. Однако повлиять на выполнение последней или обработать ее возвращаемое значение невозможно - для этого следует использовать cJass. Пользоваться хуком очень просто:Код library HookTest private /* Да, функция может быть приватной. */ function test takes unit u /* Функция должна принимать те же параметры. */ returns nothing call BJDebugMsg("A unit " + GetUnitName(u) + " " + I2S(GetHandleId(u)) + " is being removed") endfunction
hook RemoveUnit test endlibrary
|
|
|
|
Goodie | Дата: Вторник, 25 Июня 2013, 10:19:54 | Сообщение # 4 |
4 уровень
Группа: Проверенные
Сообщений: 84
Награды: 0
Репутация: 57
Блокировки:
| cJass Rullez Код define RemoveUnit(u) =FixRemoveUnit
void FixRemoveUnit(unit u) { Remove##Unit(u)/*Склеивание строк*/ } Ну как то так
cJass рулит! Power of Mighty[Work In Progress]
|
|
|
|
Ty3uK | Дата: Вторник, 25 Июня 2013, 10:33:02 | Сообщение # 5 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Goodie, вопрос был о хуке в vJASS.
|
|
|
|
Goodie | Дата: Вторник, 25 Июня 2013, 10:33:49 | Сообщение # 6 |
4 уровень
Группа: Проверенные
Сообщений: 84
Награды: 0
Репутация: 57
Блокировки:
| Ty3uK, SirNikolas, На него ответил -_- Я подсказал, что можно и на cjass
cJass рулит! Power of Mighty[Work In Progress]
|
|
|
|
Ty3uK | Дата: Вторник, 25 Июня 2013, 10:36:22 | Сообщение # 7 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Код #define RemoveUnit(u) = FixRemoveUnit(u) fixed
|
|
|
|
Goodie | Дата: Вторник, 25 Июня 2013, 10:42:44 | Сообщение # 8 |
4 уровень
Группа: Проверенные
Сообщений: 84
Награды: 0
Репутация: 57
Блокировки:
| Ty3uK, можно и без # Добавлено (25 Июня 2013, 10:42:44) --------------------------------------------- Иначе используй новый парсер http://code.google.com/p/cjass/downloads/list
cJass рулит! Power of Mighty[Work In Progress]
|
|
|
|
Ty3uK | Дата: Вторник, 25 Июня 2013, 10:56:35 | Сообщение # 9 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Goodie, я не про диез.
|
|
|
|
Goodie | Дата: Вторник, 25 Июня 2013, 11:10:34 | Сообщение # 10 |
4 уровень
Группа: Проверенные
Сообщений: 84
Награды: 0
Репутация: 57
Блокировки:
| Аа, точняк. LoL
cJass рулит! Power of Mighty[Work In Progress]
|
|
|
|