Skip to content

UnrealKaraulov/WarcraftIII_DLL_126-xxx

Repository files navigation

WarcraftIII_DLL_126-127

Improvements for Warcraft III 126a and 127a, used in new DoTA (d1stats.ru)

Features:

"Attack Speed" and "Magic amplification" More unit info

"Move Speed" and "Magic Protection" More unit info

"Widescreen support"

(Widescreen support disabled:)

Widescreen off

(Widescreen support enabled:)

Widescreen on

"Ally skill view" Ally skill viewer

"Ally manabar view" Ally manabar viewer

RawImage update:

// Создает RawImage (RGBA) с указанным цветом
// Create RawImage with color
int __stdcall CreateRawImage( int width, int height, RGBAPix defaultcolor )
// Загружает RawImage из filename (tga,blp)
// Load RawImage from game file
int __stdcall LoadRawImage( const char * filename )
// Рисует RawImage2 на RawImage
// Draw RawImage2 at RawImage
int __stdcall RawImage_DrawImg( int RawImage, int RawImage2, int drawx, int drawy, int blendmode )
// Заполняет выбранный пиксель указанным цветом
// Fill pixel with color
int __stdcall RawImage_DrawPixel( int RawImage, int x, int y, RGBAPix color )//RGBAPix = unsigned int
// Рисует прямоугольник с указанным цветом и размером
// Fill rectangle with color
int __stdcall RawImage_DrawRect( int RawImage, int drawx, int drawy, int widthsize, int heightsize, RGBAPix color )
// Рисует линию с указанным цветом и размером
// Draw line with color
int __stdcall RawImage_DrawLine( int RawImage, int x1, int y1, int x2, int y2, int size, RGBAPix color )
// Рисует круг с указанным радиусом, толщиной, цветом
// Draw circle with color
int __stdcall RawImage_DrawCircle( int RawImage, int x, int y, int radius, int size, RGBAPix color )
// Заполняет круг указанным цветом
// Fill circle with color
int __stdcall RawImage_FillCircle( int RawImage, int x, int y, int radius, RGBAPix color )
// Оставляет только круг с указанным радиусом
// Erase circle
int __stdcall RawImage_EraseCircle( int RawImage, int x, int y, int radius, BOOL inverse )
// Делает пиксели с цветом color - прозрачными, power от 0 до 255
// Not working
int __stdcall RawImage_EraseColor( int RawImage, RGBAPix color, int power )
// Загружает шрифт из файла
// Load font from game file
int __stdcall RawImage_LoadFontFromResource( const char * filepath )
// Устанавливает настройки шрифта для RawImage_DrawText
// Set font settings for DrawText
int __stdcall RawImage_SetFontSettings( const char * fontname, int fontsize, unsigned int flags )
// Пишет текст в указанных координатах с указанными цветом и настройками шрифта RawImage_SetFontSettings
// Draw text at RawImage
int __stdcall RawImage_DrawText( int RawImage, const char * text, int x, int y, RGBAPix color )
// Сохраняет RawImage в blp и делает доступным для использования в игре
// Save RawImage to game file
int __stdcall SaveRawImageToGameFile( int RawImage, const char * filename, BOOL IsTga, BOOL enabled )
// Сохраняет RawImage на диск в TGA по выбранному пути
// Save RawIamge to file
int __stdcall DumpRawImageToFile( int RawImage, const char * filename )
// Получает RawImage из списка RawImages по имени файла.
// Search RawImage by filename
int __stdcall GetRawImageByFile( const char * filename )
// Получает ширину RawImage
// Get width
int __stdcall RawImage_GetWidth( int RawImage )
// Получает высоту RawImage
// Get height
int __stdcall RawImage_GetHeight( int RawImage )
// Изменяет размер RawImage
// Resize RawImage
int __stdcall RawImage_Resize( int RawImage, int newwidth, int newheight )
// Рисует RawImage по заданным координатам (от 0.0 до 1.0) в игре. Можно установить размер (от 0.0 до 1.0).
// Draw RawImage as overlay ingame. xsize / ysize not working in this version (use 0.0)
int __stdcall RawImage_DrawOverlay( int RawImage, BOOL enabled, float xpos, float ypos, float xsize, float ysize )
int __stdcall RawImage_EnableOverlay( unsigned int RawImage, BOOL enabled )
int __stdcall RawImage_MoveTimed( unsigned int RawImage, float x2, float y2, unsigned int Time1, unsigned int Time2, unsigned int SleepTime )
int __stdcall RawImage_SetPacketCallback( unsigned int RawImage, BOOL enable, unsigned int events )
int __stdcall RawImage_AddCallback( unsigned int RawImage, const char * MouseActionCallback, RawImageCallbackData * callbackdata, unsigned int events )
int __stdcall RawImage_IsBtn( unsigned int RawImage, BOOL enabled )

"Example result:" RawImage Draw API

CFrame API update:

globals

	integer testclickcount = 0


	integer pCFrame_GetLastEventId = 0 
	integer pCFrame_GetTriggerCFrame = 0
	integer pCFrame_SetCustomValue = 0
	integer pCFrame_GetCustomValue = 0
	integer pCFrame_LoadFramesListFile = 0 
	integer pCFrame_CreateNewFrame = 0 
	integer pCFrame_LoadFrame = 0 
	integer pCFrame_SetFrameType = 0 
	integer pCFrame_SetFrameModel = 0 
	integer pCFrame_SetFrameTexture = 0 
	integer pCFrame_SetFrameText = 0 
	integer pCFrame_SetAbsolutePosition = 0 
	integer pCFrame_SetRelativePosition = 0 
	integer pCFrame_Destroy = 0 
	integer pCFrame_AddCallack = 0 
	integer pCFrame_AddCallackPacket = 0 
	integer pCFrame_Enable = 0
	integer pCFrame_IsEnabled = 0
	integer pCFrame_GetFrameAddress = 0
	integer pCFrame_StartCustomAnimate = 0
	integer	pCFrame_SetCustomAnimateOffset = 0
	integer	pCFrame_StopCustomAnimate = 0
	integer pCFrame_SetScale = 0
	integer pCFrame_Show = 0
	
	integer CFrameBackType_ControlFrame = 0
	integer CFrameBackType_ControlBackdrop = 1
	integer CFrameBackType_ControlPushedBackdrop = 2
	integer CFrameBackType_ControlDisabledBackdrop = 3

	integer	CFramePosition_TOP_LEFT = 0
	integer	CFramePosition_TOP_CENTER = 1
	integer	CFramePosition_TOP_RIGHT = 2
	integer	CFramePosition_LEFT = 3
	integer	CFramePosition_CENTER = 4
	integer	CFramePosition_RIGHT = 5
	integer	CFramePosition_BOTTOM_LEFT = 6
	integer	CFramePosition_BOTTOM_CENTER = 7
	integer	CFramePosition_BOTTOM_RIGHT = 8

	integer	FRAMETYPE_FRAME = 0
	integer	FRAMETYPE_BACKDROP = 1
	integer	FRAMETYPE_ITEM = 2
	integer	FRAMETYPE_POPUPMENU = 3
	integer	FRAMETYPE_EDITBOX = 4
	integer	FRAMETYPE_BUTTON = 5
	integer	FRAMETYPE_TEXTBUTTON = 6
	integer	FRAMETYPE_SPRITE = 7
	integer	FRAMETYPE_HIGHLIGHT = 8
	integer	FRAMETYPE_SCROLLBAR = 9
	integer	FRAMETYPE_MODEL = 10

	integer FRAME_EVENT_PRESSED = 1
	integer FRAME_MOUSE_ENTER = 2
	integer FRAME_MOUSE_LEAVE = 3
	integer FRAME_MOUSE_UP = 4
	integer FRAME_MOUSE_DOWN = 5
	integer FRAME_MOUSE_WHEEL = 6
	integer FRAME_FOCUS_ENTER = FRAME_MOUSE_ENTER
	integer FRAME_FOCUS_LEAVE = FRAME_MOUSE_LEAVE
	integer FRAME_CHECKBOX_CHECKED = 7
	integer FRAME_CHECKBOX_UNCHECKED = 8
	integer FRAME_EDITBOX_TEXT_CHANGED = 9
	integer FRAME_POPUPMENU_ITEM_CHANGE_START = 10
	integer FRAME_POPUPMENU_ITEM_CHANGED = 11
	integer FRAME_MOUSE_DOUBLECLICK = 12
	integer FRAME_SPRITE_ANIM_UPDATE = 13
	

#endglobals

#code



function CFrame_GetLastEventId takes nothing returns integer
	if pCFrame_GetLastEventId == 0 then
		set pCFrame_GetLastEventId = GetModuleProcAddress(EXTRADLLNAME, "CFrame_GetLastEventId")
	endif
	if pCFrame_GetLastEventId != 0 then 
		return CallStdCallWith1Args(pCFrame_GetLastEventId,0)
	endif
	return 0
endfunction

function CFrame_GetTriggerCFrame takes nothing returns integer
	if pCFrame_GetTriggerCFrame == 0 then
		set pCFrame_GetTriggerCFrame = GetModuleProcAddress(EXTRADLLNAME, "CFrame_GetTriggerCFrame")
	endif
	if pCFrame_GetTriggerCFrame != 0 then 
		return CallStdCallWith1Args(pCFrame_GetTriggerCFrame,0)
	endif
	return 0
endfunction

function CFrame_GetCustomValue takes integer pCframe, integer ValueID returns integer
	if pCFrame_GetCustomValue == 0 then
		set pCFrame_GetCustomValue = GetModuleProcAddress(EXTRADLLNAME, "CFrame_GetCustomValue")
	endif
	if pCFrame_GetCustomValue != 0 then 
		return CallStdCallWith2Args(pCFrame_GetCustomValue,pCframe,ValueID)
	endif
	return 0	
endfunction

function CFrame_SetCustomValue takes integer pCframe, integer ValueID, integer customval returns nothing
	if pCFrame_SetCustomValue == 0 then
		set pCFrame_SetCustomValue = GetModuleProcAddress(EXTRADLLNAME, "CFrame_SetCustomValue")
	endif
	if pCFrame_SetCustomValue != 0 then 
		call CallStdCallWith3Args(pCFrame_SetCustomValue,pCframe,ValueID,customval)
	endif
endfunction

function CFrame_LoadFramesListFile takes string filepath, boolean reload returns nothing
	if pCFrame_LoadFramesListFile == 0 then
		set pCFrame_LoadFramesListFile = GetModuleProcAddress(EXTRADLLNAME, "CFrame_LoadFramesListFile")
	endif
	if pCFrame_LoadFramesListFile != 0 then 
		call CallStdCallWith2Args(pCFrame_LoadFramesListFile,GetStringAddress(filepath),B2I(reload))
	endif
endfunction

function CFrame_CreateNewFrame takes string framename, integer relativeframe, boolean show, integer frameid returns integer
	if pCFrame_CreateNewFrame == 0 then
		set pCFrame_CreateNewFrame = GetModuleProcAddress(EXTRADLLNAME, "CFrame_CreateNewFrame")
	endif
	if pCFrame_CreateNewFrame != 0 then 
		return CallStdCallWith4Args(pCFrame_CreateNewFrame,GetStringAddress(framename),relativeframe,B2I(show),frameid)
	endif
	return 0
endfunction

function CFrame_LoadFrame takes string framename, integer frameid returns integer
	if pCFrame_LoadFrame == 0 then
		set pCFrame_LoadFrame = GetModuleProcAddress(EXTRADLLNAME, "CFrame_LoadFrame")
	endif
	if pCFrame_LoadFrame != 0 then 
		return CallStdCallWith2Args(pCFrame_LoadFrame,GetStringAddress(framename),frameid)
	endif
	return 0
endfunction

function CFrame_SetFrameType takes integer pCframe, integer frametype returns nothing
	if pCFrame_SetFrameType == 0 then
		set pCFrame_SetFrameType = GetModuleProcAddress(EXTRADLLNAME, "CFrame_SetFrameType")
	endif
	if pCFrame_SetFrameType != 0 then 
		call CallStdCallWith2Args(pCFrame_SetFrameType,pCframe,frametype)
	endif
endfunction

function CFrame_SetFrameModel takes integer pCframe, string modelpath returns nothing
	if pCFrame_SetFrameModel == 0 then
		set pCFrame_SetFrameModel = GetModuleProcAddress(EXTRADLLNAME, "CFrame_SetFrameModel")
	endif
	if pCFrame_SetFrameModel != 0 then 
		call CallStdCallWith2Args(pCFrame_SetFrameModel,pCframe,GetStringAddress(modelpath))
	endif
endfunction

function CFrame_SetFrameTexture takes integer pCframe, string texturepath, string borderpath, boolean tiled returns nothing
	if pCFrame_SetFrameTexture == 0 then
		set pCFrame_SetFrameTexture = GetModuleProcAddress(EXTRADLLNAME, "CFrame_SetFrameTexture")
	endif
	if pCFrame_SetFrameTexture != 0 then 
		call CallStdCallWith4Args(pCFrame_SetFrameTexture,pCframe,GetStringAddress(texturepath),GetStringAddress(borderpath),B2I(tiled) )
	endif
endfunction

function CFrame_SetFrameText takes integer pCframe, string text returns nothing
	if pCFrame_SetFrameText == 0 then
		set pCFrame_SetFrameText = GetModuleProcAddress(EXTRADLLNAME, "CFrame_SetFrameText")
	endif
	if pCFrame_SetFrameText != 0 then 
		call CallStdCallWith2Args(pCFrame_SetFrameText,pCframe,GetStringAddress(text))
	endif
endfunction

function CFrame_SetAbsolutePosition takes integer pCframe, integer origpos, real AbsoluteX, real AbsoluteY returns nothing
	if pCFrame_SetAbsolutePosition == 0 then
		set pCFrame_SetAbsolutePosition = GetModuleProcAddress(EXTRADLLNAME, "CFrame_SetAbsolutePosition")
	endif
	if pCFrame_SetAbsolutePosition != 0 then 
		call CallStdCallWith4Args(pCFrame_SetAbsolutePosition,pCframe,origpos,mR2I(AbsoluteX),mR2I(AbsoluteY))
	endif
endfunction

function CFrame_SetRelativePosition takes integer pCframe, integer origpos, integer relativeframeaddr, integer dstpos, real RelativeX, real RelativeY returns nothing
	if pCFrame_SetRelativePosition == 0 then
		set pCFrame_SetRelativePosition = GetModuleProcAddress(EXTRADLLNAME, "CFrame_SetRelativePosition")
	endif
	if pCFrame_SetRelativePosition != 0 then 
		call CallStdCallWith6Args(pCFrame_SetRelativePosition,pCframe,origpos,relativeframeaddr,dstpos, mR2I(RelativeX),mR2I(RelativeY))
	endif
endfunction

function CFrame_Destroy takes integer pCframe returns nothing
	if pCFrame_Destroy == 0 then
		set pCFrame_Destroy = GetModuleProcAddress(EXTRADLLNAME, "CFrame_Destroy")
	endif
	if pCFrame_Destroy != 0 then 
		call CallStdCallWith1Args(pCFrame_Destroy,pCframe)
	endif
endfunction

function CFrame_AddCallack takes integer pCframe, string callbackfuncname, integer callbackeventid returns nothing
	if pCFrame_AddCallack == 0 then
		set pCFrame_AddCallack = GetModuleProcAddress(EXTRADLLNAME, "CFrame_AddCallack")
	endif
	if pCFrame_AddCallack != 0 then 
		call CallStdCallWith4Args(pCFrame_AddCallack,pCframe,GetStringAddress(callbackfuncname),callbackeventid,0)
	endif
endfunction

function CFrame_AddCallackPacket takes integer pCframe, integer framecode, integer callbackeventid returns nothing
	if pCFrame_AddCallackPacket == 0 then
		set pCFrame_AddCallackPacket = GetModuleProcAddress(EXTRADLLNAME, "CFrame_AddCallackPacket")
	endif
	if pCFrame_AddCallackPacket != 0 then 
		call CallStdCallWith4Args(pCFrame_AddCallackPacket,pCframe,framecode,callbackeventid,0)
	endif
endfunction

function CFrame_Enable takes integer pCframe, boolean enabled returns nothing
	if pCFrame_Enable == 0 then
		set pCFrame_Enable = GetModuleProcAddress(EXTRADLLNAME, "CFrame_Enable")
	endif
	if pCFrame_Enable != 0 then 
		call CallStdCallWith2Args(pCFrame_Enable,pCframe,B2I(enabled))
	endif
endfunction


function CFrame_IsEnabled takes integer pCframe returns boolean
	if pCFrame_IsEnabled == 0 then
		set pCFrame_IsEnabled = GetModuleProcAddress(EXTRADLLNAME, "CFrame_IsEnabled")
	endif
	if pCFrame_IsEnabled != 0 then 
		return I2B(CallStdCallWith1Args(pCFrame_IsEnabled,pCframe))
	endif
	return false
endfunction


function CFrame_GetFrameAddress takes integer pCframe returns integer
	if pCFrame_GetFrameAddress == 0 then
		set pCFrame_GetFrameAddress = GetModuleProcAddress(EXTRADLLNAME, "CFrame_GetFrameAddress")
	endif
	if pCFrame_GetFrameAddress != 0 then 
		return CallStdCallWith1Args(pCFrame_GetFrameAddress,pCframe)
	endif
	return 0
endfunction

function CFrame_StartCustomAnimate takes integer frame,integer anim_id returns nothing
	if pCFrame_StartCustomAnimate == 0 then
		set pCFrame_StartCustomAnimate = GetModuleProcAddress(EXTRADLLNAME, "CFrame_StartCustomAnimate")
	endif
	if pCFrame_StartCustomAnimate != 0 then 
		call CallStdCallWith2Args(pCFrame_StartCustomAnimate,pCframe,anim_id)//  0 = anim_id ?
	endif
endfunction

function CFrame_StopCustomAnimate takes integer pCframe returns nothing
	if pCFrame_StopCustomAnimate == 0 then
		set pCFrame_StopCustomAnimate = GetModuleProcAddress(EXTRADLLNAME, "CFrame_StopCustomAnimate")
	endif
	if pCFrame_StopCustomAnimate != 0 then 
		call CallStdCallWith1Args(pCFrame_StopCustomAnimate,pCframe)
	endif
endfunction

function CFrame_SetCustomAnimateOffset takes integer pCframe, real anim_offset returns nothing
	if pCFrame_SetCustomAnimateOffset == 0 then
		set pCFrame_SetCustomAnimateOffset = GetModuleProcAddress(EXTRADLLNAME, "CFrame_SetCustomAnimateOffset")
	endif
	if pCFrame_SetCustomAnimateOffset != 0 then 
		call CallStdCallWith2Args(pCFrame_SetCustomAnimateOffset,pCframe,mR2I(anim_offset))
	endif
endfunction

function CFrame_SetScale takes integer pCframe, integer backtype, boolean filltoparentframe, real scalex,real scaley returns nothing
	if pCFrame_SetScale == 0 then
		set pCFrame_SetScale = GetModuleProcAddress(EXTRADLLNAME, "CFrame_SetScale")
	endif
	if pCFrame_SetScale != 0 then 
		call CallStdCallWith5Args(pCFrame_SetScale,pCframe,backtype, B2I(filltoparentframe),mR2I(scalex),mR2I(scaley) )
	endif
endfunction


function CFrame_Show takes integer pCframe,boolean show returns nothing
	if ( pCFrame_Show == 0 ) then
		set pCFrame_Show = GetModuleProcAddress(EXTRADLLNAME, "CFrame_Show")
	endif
	if ( pCFrame_Show != 0 ) then
		call CallStdCallWith2Args(pCFrame_Show , pCframe , B2I(show))
	endif
endfunction


function CFrameTestCallback takes nothing returns nothing
	local integer frameeventid = CFrame_GetLastEventId( )
	local integer eventframe = CFrame_GetTriggerCFrame( )
	if eventframe > 0 then 
		call CFrame_SetFrameText(eventframe,"Clicked " + I2S(testclickcount) + " times.")
		if frameeventid == FRAME_EVENT_PRESSED then
		call echo("Clicked " + I2S(testclickcount) + " times.")
		set testclickcount = testclickcount + 1 
		endif 
		call echo("Event id:" + Int2Hex(frameeventid) + ". Frame:" + Int2Hex(eventframe) + ". Flags:" +  Int2Hex( RMem( CFrame_GetFrameAddress(eventframe) + 0x1D4) ))
	endif
	
endfunction
		
function CFrameTest takes nothing returns nothing
	local integer glyphframe = 0
	call CFrame_LoadFramesListFile("DotaFrameList.txt",true)
	set glyphframe = CFrame_CreateNewFrame("GlyphButton",RMem(pGameClass2),false,0)
	call CFrame_SetAbsolutePosition(glyphframe, CFramePosition_BOTTOM_LEFT, 0.155, 0.006  )
	set glyphframe = CFrame_LoadFrame("GlyphItemButton",0)
	
	//call CFrame_AddCallack(glyphframe,"CFrameTestCallback",FRAME_EVENT_PRESSED)
	//call CFrame_AddCallack(glyphframe,"CFrameTestCallback",FRAME_MOUSE_ENTER)
	//call CFrame_AddCallack(glyphframe,"CFrameTestCallback",FRAME_MOUSE_LEAVE)
	//call CFrame_AddCallack(glyphframe,"CFrameTestCallback",FRAME_MOUSE_UP)
	//call CFrame_AddCallack(glyphframe,"CFrameTestCallback",FRAME_MOUSE_DOWN)
	//call CFrame_AddCallack(glyphframe,"CFrameTestCallback",FRAME_MOUSE_WHEEL)
	//call CFrame_AddCallack(glyphframe,"CFrameTestCallback",FRAME_CHECKBOX_CHECKED)
	//call CFrame_AddCallack(glyphframe,"CFrameTestCallback",FRAME_CHECKBOX_UNCHECKED)
	//call CFrame_AddCallack(glyphframe,"CFrameTestCallback",FRAME_EDITBOX_TEXT_CHANGED)
	
	
	call CFrame_AddCallackPacket(glyphframe,'GLPH',FRAME_EVENT_PRESSED)
	call CFrame_AddCallackPacket(glyphframe,'GLPH',FRAME_MOUSE_UP)
	call CFrame_AddCallackPacket(glyphframe,'GLPH',FRAME_MOUSE_DOWN)
	call CFrame_AddCallackPacket(glyphframe,'GLPH',FRAME_MOUSE_ENTER)
	call CFrame_AddCallackPacket(glyphframe,'GLPH',FRAME_MOUSE_LEAVE)
	
	
	call CFrame_SetFrameType(glyphframe,FRAMETYPE_BUTTON)
	call CFrame_SetFrameText(glyphframe,"Clicked 0 times")
endfunction

#endcode

Packet API update! (for sync any data)

globals


		
	constant integer Packet_RawImageCode = 'IIMG'
	constant integer Packet_KeyEventCode = 'IKEY'
	constant integer Packet_CFrameEventCode = 'FRAM'

	integer pPacket_Clear = 0
	integer pPacket_Initialize = 0
	integer pPacket_PushInteger = 0
	integer pPacket_PopInteger = 0
	integer pPacket_PushReal = 0
	integer pPacket_PopReal = 0
	integer pPacket_Send = 0
	integer pPacket_GetTriggerPlayerId = 0


endglobals

code


function Packet_Clear takes nothing returns integer
	if pPacket_Clear == 0 then
		set pPacket_Clear = GetModuleProcAddress(EXTRADLLNAME, "Packet_Clear")
	endif
	if pPacket_Clear != 0 then
		return CallStdCallWith1Args(pPacket_Clear,0)
	endif
	return 0
endfunction

function Packet_Initialize takes integer pTriggerHandle returns integer
	if pPacket_Initialize == 0 then
		set pPacket_Initialize = GetModuleProcAddress(EXTRADLLNAME, "Packet_Initialize")
	endif
	if pPacket_Initialize != 0 then
		return CallStdCallWith1Args(pPacket_Initialize,pTriggerHandle)
	endif
	return 0
endfunction

function Packet_PushInteger takes integer i returns integer
	if pPacket_PushInteger == 0 then
		set pPacket_PushInteger = GetModuleProcAddress(EXTRADLLNAME, "Packet_PushInteger")
	endif
	if pPacket_PushInteger != 0 then
		return CallStdCallWith1Args(pPacket_PushInteger,i)
	endif
	return 0
endfunction

function Packet_PopInteger takes nothing returns integer
	if pPacket_PopInteger == 0 then
		set pPacket_PopInteger = GetModuleProcAddress(EXTRADLLNAME, "Packet_PopInteger")
	endif
	if pPacket_PopInteger != 0 then
		return CallStdCallWith1Args(pPacket_PopInteger,0)
	endif
	return 0
endfunction

function Packet_PushReal takes real i returns integer
	if pPacket_PushReal == 0 then
		set pPacket_PushReal = GetModuleProcAddress(EXTRADLLNAME, "Packet_PushReal")
	endif
	if pPacket_PushReal != 0 then
		return CallStdCallWith1Args(pPacket_PushReal,mR2I(i))
	endif
	return 0
endfunction

function Packet_PopReal takes nothing returns real
	local real r = 0.0
	local integer i = 0
	if pPacket_PopReal == 0 then
		set pPacket_PopReal = GetModuleProcAddress(EXTRADLLNAME, "Packet_PopReal")
	endif
	if pPacket_PopReal != 0 then
		return mI2R(CallStdCallWith1Args(pPacket_PopReal,0))
	endif
	return r
endfunction

function Packet_Send takes nothing returns integer
	if pPacket_Send == 0 then
		set pPacket_Send = GetModuleProcAddress(EXTRADLLNAME, "Packet_Send")
	endif
	if pPacket_Send != 0 then
		return CallStdCallWith1Args(pPacket_Send,0)
	endif
	return 0
endfunction

function Packet_GetTriggerPlayerId takes nothing returns integer
	if pPacket_GetTriggerPlayerId == 0 then
		set pPacket_GetTriggerPlayerId = GetModuleProcAddress(EXTRADLLNAME, "Packet_GetTriggerPlayerId")
	endif
	if pPacket_GetTriggerPlayerId != 0 then
		return CallStdCallWith1Args(pPacket_GetTriggerPlayerId,0)
	endif
	return 0
endfunction

function Packet_TestRecv takes nothing returns nothing 
	local integer PacketType = Packet_PopInteger( )
	local integer PacketValueInteger = Packet_PopInteger( )
	local real PacketValueReal = Packet_PopReal( )
	local real PacketValueReal2 = Packet_PopReal( )
	call echo("Packet type:" + Int2Hex(PacketType) + ". Packet integer value:" + I2S(PacketValueInteger) + ". Packet real value:" + R2S(PacketValueReal) + ". Packet real value2:" + R2S(PacketValueReal2) + ". Trigger Player:" + Int2Hex(Packet_GetTriggerPlayerId( )) )
endfunction

function Packet_TestRecv2 takes nothing returns nothing 
	local integer PacketType = Packet_PopInteger( )
	local integer p = Packet_GetTriggerPlayerId( )
	if (PacketType == Packet_KeyEventCode) then 
		call echo("Packet_KeyEventCode: Player:" + I2S(p) + ". Player(duplicate):" + I2S(Packet_PopInteger( )) + ". Message:" + I2S(Packet_PopInteger( ))+ ". KeyCode:" + I2S(Packet_PopInteger( )))
	endif 
	if (PacketType == Packet_CFrameEventCode) then 
		call echo("Packet_KeyEventCode: Player:" + I2S(p) + ". Player(duplicate):" + I2S(Packet_PopInteger( )) + ". Frame code:" + I2S(Packet_PopInteger( ))+ ". Event:" + I2S(Packet_PopInteger( )) + ". CTRL:" + I2S(Packet_PopInteger( )) + ". ALT:" + I2S(Packet_PopInteger( )) + ". LEFT MOUSE:" + I2S(Packet_PopInteger( )) + ". RIGHT MOUSE:" + I2S(Packet_PopInteger( )) + ". MIDLE MOUSE:" + I2S(Packet_PopInteger( )))
	endif 
	if (PacketType == Packet_RawImageCode) then 
		call echo("Packet_KeyEventCode: Player:" + I2S(p) + ". Player(duplicate):" + I2S(Packet_PopInteger( )) + ". RawImageId:" + I2S(Packet_PopInteger( ))+ ". EventType:" + I2S(Packet_PopInteger( ))+ ". mouse x/y:" + R2S(Packet_PopReal( )) + "/" + R2S(Packet_PopReal( ))+ ". Alt:" + I2S(Packet_PopInteger( ))+ ". Ctrl:" + I2S(Packet_PopInteger( ))+ ". LeftBtn:" + I2S(Packet_PopInteger( ))+ ". EventType:" + I2S(Packet_PopInteger( ))+ ". OffsetX:" + I2S(Packet_PopInteger( ))+ ". OffsetY:" + I2S(Packet_PopInteger( ))+ ". ImageID:" + I2S(Packet_PopInteger( )))
	endif 
endfunction


function Packet_TestSend takes nothing returns nothing 
	local integer maxpackets = 20
	loop 
	call echo("Packet clear:")
	call Packet_Clear( )
	call echo("Packet push packettype(just integer)")
	call Packet_PushInteger(0x12345678)
	call echo("Packet push integer")
	call Packet_PushInteger(maxpackets)
	call echo("Packet push real")
	call Packet_PushReal(1234.56)
	call echo("Packet push real")
	call Packet_PushReal(1234.56)
	call echo("Packet send ")
	call Packet_Send( )
	call echo("Packet send ok")
	exitwhen ( maxpackets <= 0 )
	set maxpackets = maxpackets - 1
	endloop
endfunction

function Packet_TestInitialize takes nothing returns nothing
	// global code
	local trigger t =CreateTrigger()
	//call TriggerAddAction(t,function Packet_TestRecv)
	call TriggerAddAction(t,function Packet_TestRecv2)
	call Packet_Initialize(GetHandleId(t))
	set t = null
	
	// local send
	//call Packet_TestSend( )
	call FuncTriggerRegisterPlayerKeyboardEvent('0')
	call CFrameTest( )
endfunction



endcode

Key codes:

	 0-Z = 0-Z 
	 "LBTN" =  Left mouse button
	 "RBTN" =  Right mouse button
	 "CANCEL" =  Control-break processing
	 "MBTN" =  Middle mouse button (three-button mouse)
	 "XBTN1" =  X1 mouse button
	 "XBTN2" =  X2 mouse button
	 "BACK" =  BACKSPACE key
	 "TAB" =  TAB key
	 "CLEAR" =  CLEAR key
	 "RETURN" =  ENTER key
	 "SHIFT" =  SHIFT key
	 "CTRL" =  CTRL key
	 "ALT" =  ALT key
	 "PAUSE" =  PAUSE key
	 "CAPS" =  CAPS LOCK key
	 "KANA" =  IME Kana mode
	 "VK_HANGUEL" =  IME Hangul mode
	 "JUNJA" =  IME Junja mode
	 "FINAL" =  IME final mode
	 "HANJA" =  IME Hanja mode
	 "VK_KANJI" =  IME Kanji mode
	 "ESC" =  ESC key
	 "CONV" =  IME convert
	 "NCONV" =  IME nonconvert
	 "ACCEPT" =  IME accept
	 "MCHANGE" =  IME mode change request
	 "SPACE" =  SPACEBAR
	 "PAGEUP" =  PAGE UP key
	 "PAGEDN" =  PAGE DOWN key
	 "END" =  END key
	 "HOME" =  HOME key
	 "LEFT" =  LEFT ARROW key
	 "UP" =  UP ARROW key
	 "RIGHT" =  RIGHT ARROW key
	 "DOWN" =  DOWN ARROW key
	 "SELECT" =  SELECT key
	 "PRINT" =  PRINT key
	 "EXEC" =  EXECUTE key
	 "SSHOT" =  PRINT SCREEN key
	 "INSERT" =  INS key
	 "DELETE" =  DEL key
	 "HELP" =  HELP key
	 "LWIN" =  Left Windows key (Natural keyboard)
	 "RWIN" =  Right Windows key (Natural keyboard)
	 "APPS" =  Applications key (Natural keyboard)
	 "SLEEP" =  Computer Sleep key
	 "NPAD0" =  Numeric keypad 0 key
	 "NPAD1" =  Numeric keypad 1 key
	 "NPAD2" =  Numeric keypad 2 key
	 "NPAD3" =  Numeric keypad 3 key
	 "NPAD4" =  Numeric keypad 4 key
	 "NPAD5" =  Numeric keypad 5 key
	 "NPAD6" =  Numeric keypad 6 key
	 "NPAD7" =  Numeric keypad 7 key
	 "NPAD8" =  Numeric keypad 8 key
	 "NPAD9" =  Numeric keypad 9 key
	 "MULT" =  Multiply key
	 "ADD" =  Add key
	 "SEP" =  Separator key
	 "SUB" =  Subtract key
	 "DEC" =  Decimal key
	 "DIV" =  Divide key
	 "F1" =  F1 key
	 "F2" =  F2 key
	 "F3" =  F3 key
	 "F4" =  F4 key
	 "F5" =  F5 key
	 "F6" =  F6 key
	 "F7" =  F7 key
	 "F8" =  F8 key
	 "F9" =  F9 key
	 "F10" =  F10 key
	 "F11" =  F11 key
	 "F12" =  F12 key
	 "F13" =  F13 key
	 "F14" =  F14 key
	 "F15" =  F15 key
	 "F16" =  F16 key
	 "F17" =  F17 key
	 "F18" =  F18 key
	 "F19" =  F19 key
	 "F20" =  F20 key
	 "F21" =  F21 key
	 "F22" =  F22 key
	 "F23" =  F23 key
	 "F24" =  F24 key
	 "NLOCK" =  NUM LOCK key
	 "SCRL" =  SCROLL LOCK key
	 "LSHFT" =  Left SHIFT key
	 "RSHFT" =  Right SHIFT key
	 "LCTRL" =  Left CONTROL key
	 "RCTRL" =  Right CONTROL key
	 "LALT" =  Left MENU key
	 "RALT" =  Right MENU key
	 "BBACK" =  Browser Back key
	 "BFORW" =  Browser Forward key
	 "BREFR" =  Browser Refresh key
	 "BSTOP" =  Browser Stop key
	 "BSEARCH" =  Browser Search key
	 "BFAV" =  Browser Favorites key
	 "BHOME" =  Browser Start and Home key
	 "MUTE" =  Volume Mute key
	 "V_DOWN" =  Volume Down key
	 "V_UP" =  Volume Up key
	 "NEXT" =  Next Track key
	 "PREV" =  Previous Track key
	 "STOP" =  Stop Media key
	 "MPLAY" =  Play/Pause Media key
	 "MAIL" =  Start Mail key
	 "MSEL" =  Select Media key
	 "APP1" =  Start Application 1 key
	 "APP2" =  Start Application 2 key
	 "OEM_1" =  Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the ';:' key
	 "OEM_P" =  For any country/region, the '+' key
	 "COMMA" =  For any country/region, the ',' key
	 "MINUS" =  For any country/region, the '-' key
	 "PERIOD" =  For any country/region, the '.' key
	 "OEM_2" =  Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the '/?' key
	 "OEM_3" =  Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the '`~' key
	 "ABNT_C1" =  Brazilian (ABNT) Keyboard
	 "ABNT_C2" =  Brazilian (ABNT) Keyboard
	 "OEM_4" =  Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the '[{' key
	 "OEM_5" =  Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the '\|' key
	 "OEM_6" =  Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the ']}' key
	 "OEM_7" =  Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the 'single-quote/double-quote' key
	 "OEM_8" =  Used for miscellaneous characters; it can vary by keyboard.
	 "OEM102" =  Either the angle bracket key or the backslash key on the RT 102-key keyboard
	 "PROCKEY" =  IME PROCESS key
	 "PACKET" =  Used to pass Unicode characters as if they were keystrokes.
	 "ATTN" =  Attn key
	 "CRSEL" =  CrSel key
	 "EXSEL" =  ExSel key
	 "EREOF" =  Erase EOF key
	 "PLAY" =  Play key
	 "ZOOM" =  Zoom key
	 "NONAME" =  Reserved
	 "PA1" =  PA1 key
	 "OCLEAR" =  Clear key
// конвертировать строку в код клавиши (комбинации клавиш)
int __stdcall ConvertKeyStringToKeyCode( const char * str )
// конвертировать код клавиши в строку
const char * __stdcall ConvertKeyCodeToKeyString( unsigned int code )