Сейчас 21:32:18 Пятница, 19 апреля, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Вопрос] hook
[Вопрос] 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. buba

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

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 :)


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

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, я не про диез.

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

GoodieДата: Вторник, 25 Июня 2013, 11:10:34 | Сообщение # 10
4 уровень
Группа: Проверенные
Сообщений: 84
Награды: 0
Репутация: 57
Блокировки:
Аа, точняк. LoL

cJass рулит!
Power of Mighty[Work In Progress]
 

Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Вопрос] hook
  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz