User:Jusonex: Difference between revisions

From Multi Theft Auto: Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 31: Line 31:
*'''isLocal:''' Specifies whether to use the browser in local or global mode
*'''isLocal:''' Specifies whether to use the browser in local or global mode
*'''transparent:''' Should the browser support transparency?
*'''transparent:''' Should the browser support transparency?
<syntaxhighlight lang="lua">
bool updateBrowser(browser webBrowser)
</syntaxhighlight>
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
bool requestBrowserPages(table pages)
bool requestBrowserPages(table pages)
Line 60: Line 57:
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
bool injectBrowserMouseWheel(browser webBrowser, int scrollVertical, int scrolLHorizontal)
bool injectBrowserMouseWheel(browser webBrowser, int scrollVertical, int scrolLHorizontal)
</syntaxhighlight>
<syntaxhighlight lang="lua">
bool injectBrowserKeyDown(brower webBrowser, string key) -- key names: https://wiki.multitheftauto.com/wiki/Key_names
</syntaxhighlight>
<syntaxhighlight lang="lua">
bool injectBrowserKeyUp(browser webBrowser, string key) -- key names: https://wiki.multitheftauto.com/wiki/Key_names
</syntaxhighlight>
<syntaxhighlight lang="lua">
bool injectBrowserCharacter(browser webBrowser, string character) -- takes case sensitivity and unicode characters into account
</syntaxhighlight>
</syntaxhighlight>
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
Line 89: Line 77:
====Events====
====Events====
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
onClientBrowserRequestResult
onClientBrowserRequestChange
Parameters: bool wasAllowed
Parameters: table allowedRequests
</syntaxhighlight>
</syntaxhighlight>
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
Line 99: Line 87:
''Cursor IDs:''
''Cursor IDs:''
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
  kCursor_Pointer, // ID: 0
Todo
  kCursor_Cross, // ID: 1
  kCursor_Hand, // ID: 2
  kCursor_IBeam, // ID: 3
  kCursor_Wait, // ID: 4
  kCursor_Help, // ID: ...
  kCursor_EastResize,
  kCursor_NorthResize,
  kCursor_NorthEastResize,
  kCursor_NorthWestResize,
  kCursor_SouthResize,
  kCursor_SouthEastResize,
  kCursor_SouthWestResize,
  kCursor_WestResize,
  kCursor_NorthSouthResize,
  kCursor_EastWestResize,
  kCursor_NorthEastSouthWestResize,
  kCursor_NorthWestSouthEastResize,
  kCursor_ColumnResize,
  kCursor_RowResize,
  kCursor_MiddlePanning,
  kCursor_EastPanning,
  kCursor_NorthPanning,
  kCursor_NorthEastPanning,
  kCursor_NorthWestPanning,
  kCursor_SouthPanning,
  kCursor_SouthEastPanning,
  kCursor_SouthWestPanning,
  kCursor_WestPanning,
  kCursor_Move,
  kCursor_VerticalText,
  kCursor_Cell,
  kCursor_ContextMenu,
  kCursor_Alias,
  kCursor_Progress,
  kCursor_NoDrop,
  kCursor_Copy,
  kCursor_None,
  kCursor_NotAllowed,
  kCursor_ZoomIn,
  kCursor_ZoomOut,
  kCursor_Grab,
  kCursor_Grabbing,
  kCursor_Custom
</syntaxhighlight>
</syntaxhighlight>
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
Line 201: Line 146:
addEventHandler("onClientRender", root,
addEventHandler("onClientRender", root,
function()
function()
-- Update the browser
updateBrowser(webBrowser)
-- Draw a nice border
-- Draw a nice border
dxDrawRectangle(195, 95, 1024+10, 768+10, tocolor(255, 255, 0))
dxDrawRectangle(195, 95, 1024+10, 768+10, tocolor(255, 255, 0))

Revision as of 08:17, 20 October 2014

Features

Awesomium API

How to test

Install the following installer (run it as admin manually!): http://jusonex.net/public/mta/awesomium/full-r6798.exe

If it doesn't work, you'll have to install the x86 VC++ Redist 2013 (http://www.microsoft.com/en-us/download/details.aspx?id=40784).

How you can help

The Awesomium branch needs a lot of testing before it can be merged into the trunk. This is the perfect way to help. Especially the URL and javascript filter must work perfectly, so that you are not able to:

  • read any file outside the MTA resorce directory
  • load a website that is not explicitly allowed (by the whitelist or an accepted request)
  • execute your own javascript code in non-local mode

Local versus non-local mode

Local:

  • you can execute your own javascript code using executeBrowserJavascript/Browser.executeJavascript
  • you cannot load websites from remote servers
  • local mode is recommended for HTML UIs

Non-local:

  • you cannot load local websites
  • remote websites are filtered
  • you cannot your own execute javascript code (javascript code execution on remote websites can also be blocked in the settings)
  • non-local mode is recommended (and necessary) for extern websites such as YouTube

Functions

browser createBrowser(int width, int height, bool isLocal [, bool transparent = false] )
  • isLocal: Specifies whether to use the browser in local or global mode
  • transparent: Should the browser support transparency?
bool requestBrowserPages(table pages)
bool loadBrowserURL(browser webBrowser, string url)
bool isBrowserLoading(browser webBrowser)
string getBrowserTitle(browser webBrowser)
string getBrowserURL(browser webBrowser)
bool injectBrowserMouseMove(browser webBrowser, int x, int y)
bool injectBrowserMouseDown(browser webBrowser, string mouseButton) -- mouseButton: left/middle/right
bool injectBrowserMouseUp(browser webBrowser, string mouseButton) -- mouseButton: left/middle/right
bool injectBrowserMouseWheel(browser webBrowser, int scrollVertical, int scrolLHorizontal)
bool setBrowserRenderingPaused(browser webBrowser, bool isPaused)
bool executeBrowserJavascript(brower webBrowser, string jsCode) -- works only in local mode
bool setBrowserVolume(browser webBrowser, float volume)
bool setBrowserVolume(float volume)
bool isBrowserURLBlocked(string url)
bool focusBrowser(browser webBrowser)

Events

onClientBrowserRequestChange
Parameters: table allowedRequests
onClientBrowserCursorChange
Parameters: int cursor
Source: The webbrowser element

Cursor IDs:

Todo
onClientBrowserPopup
Parameters: string targetURL, string openerURL, bool isPopup
Source: The webbrowser element
onClientBrowserNavigate
Parameters: string targetURL, bool isMainFrame
Source: The webbrowser element
onClientBrowserLoadingFailed
Parameters: string url, int errorCode, string errorDescription
Source: The webbrowser element
onClientBrowserDocumentReady
Parameters: string url
Source: The webbrowser element

Javascript API

Syntax:

[javascript]
null mta.triggerEvent(string eventName, ...)

Example: Javascript:

[javascript]
mta.triggerEvent("chatOutput", "Hello world!")

Lua:

addEvent("chatOutput")
addEventHandler("chatOutput", root,
    function(text)
        outputChatBox(text)
    end
)

Examples

Example 1: A 2D browser with mouse and a simple input handler
local webBrowser = createBrowser(1024, 768, false)
requestBrowserPages({"youtube.com"})

addCommandHandler("load",
	function()
		-- Load the url
		loadBrowserURL(webBrowser, "http://youtube.com") -- This line is potentially needless since YouTube is whitelisted
	end
)

addEventHandler("onClientRender", root,
	function()
		-- Draw a nice border
		dxDrawRectangle(195, 95, 1024+10, 768+10, tocolor(255, 255, 0))
		
		-- Draw the browser
		dxDrawImage(200, 100, 1024, 768, webBrowser)
	end
)

addEventHandler("onClientCursorMove", root,
	function(relativeX, relativeY, absoluteX, absoluteY)
		injectBrowserMouseMove(webBrowser, absoluteX - 200, absoluteY - 100)
	end
)

addEventHandler("onClientClick", root,
	function(button, state)
		if state == "down" then
			injectBrowserMouseDown(webBrowser, button)
		else
			injectBrowserMouseUp(webBrowser, button)
		end
	end
)

addEventHandler("onClientKey", root,
	function(button, pressKey)
		if pressKey then
			injectBrowserKeyDown(webBrowser, button)
		else
			injectBrowserKeyUp(webBrowser, button)
		end
                
		if button == "mouse_wheel_down" then
			injectBrowserMouseWheel(webBrowser, -40, 0)
		elseif button == "mouse_wheel_up" then
			injectBrowserMouseWheel(webBrowser, 40, 0)
		end
	end
)

addEventHandler("onClientCharacter", root,
	function(c)
		injectBrowserCharacter(webBrowser, c)
	end
)

showCursor(true)
A 3D browser at the car cinema in Fort Carson (Demo: https://www.youtube.com/watch?v=9w2qU6mZDh8)
local width, height = 1600, 900

-- Create the browser
local webBrowser = createBrowser(width, height, false)

-- Request the pages
requestBrowserPages({"www.youtube.com", "nyan.cat"})

addEventHandler("onClientRender", root,
	function()
		-- Update pixel data
		updateBrowser(webBrowser)
	
		-- Draw the line
		local x, y = 110.7, 1024.15
		dxDrawMaterialLine3D(x, y, 23.25, x, y, 14.75, webBrowser, 18.2, tocolor(255, 255, 255, 255), x, y+1, 19)
	end
)

addCommandHandler("youtube",
	function()
		outputChatBox("YouTube?")
		loadBrowserURL(webBrowser, "http://www.youtube.com/watch?v=kdemFfbS5H0")
	end
)

addCommandHandler("nyan",
	function()
		outputChatBox("Nyan!")
		loadBrowserURL(webBrowser, "http://nyan.cat")
	end
)

Notes

  • Crosshair position (weapons that use the "normal" crosshair texture "siteM16"): X = screenWidth * 0.5299999714f; Y = screenHeight * 0.4f

Useful stuff

Resources

Tools

SA Reversing