Jump to content
Korean Random
SV_Kirov

Как создать форму(Окно) в ангаре

Recommended Posts

Спасибо! ВОт вам за это: http://www.koreanrandom.com/forum/topic/29620-настоящий-мод-wgl/


Блин, ну хоть читайте тему немного! Писали и не один раз и тут, и в разделе хелпа, а все равно некоторые до сих пор задают подобные вопросы. Я понимаю, ну юзвера читать не умеют, но мододелам надо бы уметь хоть немного - читать тему или пользоваться поиском по теме. WindowsManager в поиск по теме и ответ в одном из постов-результатов. Там даже написано что и на что надо поменять!
Гайд не может всегда быть 100% правильным, ибо автор пишет его один раз, а картоха каждый патч что-то меняет.
Извиняюсь за некоторого рода флуд, но реально немного подгорает иногда.

А как с TextInput работать, можешь пример показать, если не сложно

Share this post


Link to post

Short link
Share on other sites

А как с TextInput работать, можешь пример показать, если не сложно

Если честно, давно не работал с флешем. Есть такой мод... ModSettingsAPI, глянь у них репо, может там есть какой пример. Ну или кто еще подскажет чего.

Share this post


Link to post

Short link
Share on other sites

Ребят, помогите!

Не работает не из клиента не с сайта

this.imgMap = new TextField();
   this.imgMap.width = 500;
   this.imgMap.height = 550;
   this.imgMap.x = 150;
   this.imgMap.y = 200;
   this.imgMap.multiline = true;
   this.imgMap.selectable = false;
   this.imgMap.htmlText = "<img width='300' height='300' src='http://mastersofweapons.ru/maps/def.png'>";
   this.addChild(this.imgMap);

Share this post


Link to post

Short link
Share on other sites

С сайта точто не загрузит, а с клиента должно

Чтобы такое замутить, нужно через DAAPI вызывать питон, он грузит что надо, и результат либо сохраняет на диск (не есть хорошо), либо возвращает результатом функции.

Share this post


Link to post

Short link
Share on other sites

А как в системное сообщение вывести картинку с сайта? Как показано выше не работает

Share this post


Link to post

Short link
Share on other sites

А как в системное сообщение вывести картинку с сайта? Как показано выше не работает

С локального ресурса грузится?

Share this post


Link to post

Short link
Share on other sites

С локального ресурса грузится?

В том плане что если картинку положить на клиент, она прогружается?

Share this post


Link to post

Short link
Share on other sites

С локального ресурса грузится?

Слушай, а так будет

<img width='300' height='300' src='res_mods/0.9.13/map.png'>

А вот так?

this.imgMap.htmlText = "<img width=\"300\" height=\"300\" src=\"../res_mods/0.9.13/map.png\">";

Edited by FeeMan

Share this post


Link to post

Short link
Share on other sites

Awesomium в примерах

Простой пример использования Awesomium

Python

from gui import game_control
from adisp import process
from gui.shared.utils.key_mapping import getBigworldNameFromKey

@process
def openBrowserWindow():
    _url = 'http://yandex.ru'
    _title = 'Test Title'
    _width = 600
    _height = 400
    _browserSize = [_width, _height]
    browserID = yield game_control.g_instance.browser.load(_url, _title, showActionBtn=False, browserSize=_browserSize)
    browser = game_control.g_instance.browser.getBrowser(browserID)

def onhandleKeyEvent(event):
    key = getBigworldNameFromKey(event.key)
    if key == 'KEY_F10':
        openBrowserWindow()
    return None

from gui import InputHandler
InputHandler.g_instance.onKeyDown += onhandleKeyEvent 

attachicon.gifshot_164.jpg

Передача данных из Awesomium в Python с использованием console.log()

Python

from gui import game_control
from adisp import process
from gui.shared.utils.key_mapping import getBigworldNameFromKey
from ResMgr import resolveToAbsolutePath

oldOnAddConsoleMessage = None

def newOnAddConsoleMessage(message, lineNumber, source):
    print(message)
    oldOnAddConsoleMessage(message, lineNumber, source)

@process
def openBrowserWindow():
    global oldOnAddConsoleMessage
    _url = 'file:///{0}'.format(resolveToAbsolutePath('../res_mods/index.html'))
    _title = 'Test console.log()'
    _width = 800
    _height = 600
    _browserSize = [_width, _height]
    browserID = yield game_control.g_instance.browser.load(_url,  _title, showActionBtn=False, browserSize=_browserSize)
    browser = game_control.g_instance.browser.getBrowser(browserID)
    oldOnAddConsoleMessage = browser._WebBrowser__browser.script.onAddConsoleMessage
    browser._WebBrowser__browser.script.onAddConsoleMessage = newOnAddConsoleMessage

def onhandleKeyEvent(event):
    key = getBigworldNameFromKey(event.key)
    if key == 'KEY_F10':
        openBrowserWindow()
    return None

from gui import InputHandler
InputHandler.g_instance.onKeyDown += onhandleKeyEvent

./res_mods/index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <script type="text/javascript">
function write_to_log()
{
  console.log(document.getElementById('_in_text').value);
}
    </script>
  </head>
  <body bgcolor="white">
    <input id="_in_text" type="text" />
    <a href="#" onclick="write_to_log();return false;">Отправить сообщение в питон</a>
  </body>
</html>

attachicon.gifshot_007.jpg

Увидим в логе:
...
INFO: test message
...

Выполнение JS-кода(отправленного из Python) на web-странице

Python

from gui import game_control
from adisp import process
from gui.shared.utils.key_mapping import getBigworldNameFromKey
from ResMgr import resolveToAbsolutePath

browser = None

def onLoadEnd(url, isLoaded):
    js_code = "document.getElementById('_in_text').value = 'Hello from python!';"
    browser._WebBrowser__browser.executeJavascript(js_code, '')

@process
def openBrowserWindow():
    global browser
    _url = 'file:///{0}'.format(resolveToAbsolutePath('../res_mods/index.html'))
    _title = 'Test executeJavascript'
    _width = 800
    _height = 600
    _browserSize = [_width, _height]
    browserID = yield game_control.g_instance.browser.load(_url,  _title, showActionBtn=False, browserSize=_browserSize)
    browser = game_control.g_instance.browser.getBrowser(browserID)
    browser.onLoadEnd += onLoadEnd

def onhandleKeyEvent(event):
    key = getBigworldNameFromKey(event.key)
    if key == 'KEY_F10':
        openBrowserWindow()
    return None

from gui import InputHandler
InputHandler.g_instance.onKeyDown += onhandleKeyEvent

./res_mods/index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
  </head>
  <body bgcolor="white">
    <input id="_in_text" type="text" />
  </body>
</html>

attachicon.gifshot_008.jpg

Обработка питоном переходов по url внутри браузера

Python

from gui import game_control
from gui import SystemMessages
from adisp import process
from gui.shared.utils.key_mapping import getBigworldNameFromKey
from ResMgr import resolveToAbsolutePath

oldOnBeginLoadingFrameCB = None
browser = None

def newOnBeginLoadingFrameCB(frameId, isMainFrame, url):
    if url.startswith('gamecall://'):
        if browser._WebBrowser__browser:
            browser._WebBrowser__browser.stop()
        _url = url[11:]
        if _url.startswith('showWarning='):
            msg = _url[12:]
            SystemMessages.pushMessage(msg, SystemMessages.SM_TYPE.Warning)
        elif _url.startswith('showInformation='):
            msg = _url[16:]
            SystemMessages.pushMessage(msg, SystemMessages.SM_TYPE.Information)
    else:
        oldOnBeginLoadingFrameCB(frameId, isMainFrame, url)

@process
def openBrowserWindow():
    global oldOnBeginLoadingFrameCB, browser
    _url = 'file:///{0}'.format(resolveToAbsolutePath('../res_mods/index.html'))
    _title = 'Test url request'
    _width = 800
    _height = 600
    _browserSize = [_width, _height]
    browserID = yield game_control.g_instance.browser.load(_url,  _title, showActionBtn=False, browserSize=_browserSize)
    browser = game_control.g_instance.browser.getBrowser(browserID)
    oldOnBeginLoadingFrameCB = browser._WebBrowser__browser.script.onBeginLoadingFrame
    browser._WebBrowser__browser.script.onBeginLoadingFrame = newOnBeginLoadingFrameCB

def onhandleKeyEvent(event):
    key = getBigworldNameFromKey(event.key)
    if key == 'KEY_F10':
        openBrowserWindow()
    return None

from gui import InputHandler
InputHandler.g_instance.onKeyDown += onhandleKeyEvent

./res_mods/index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
  </head>
  <body bgcolor="white">
    <iframe name="frame_1" style="display:none"></iframe>
    <a href="gamecall://showWarning=TEST_WARNING" target="frame_1">Показать уведомление</a>
    <br />
    <a href="gamecall://showInformation=TEST_INFORMATION" target="frame_1">Показать информацию</a>
  </body>
</html>

attachicon.gifshot_009.jpg

 

Вопрос по простому примеру. Можно ли вызывать окно не по нажатии кнопки, а при заходе в игру. Как сделать, чтобы окно вызывалось при заходе на сервер, но после его можно было бы вызвать кнопкой.

 

Спасибо.

Share this post


Link to post

Short link
Share on other sites

С чем может быть связано? AttributeError: 'BigWorld.WebBrowserProvider' object has no attribute 'executeJavascript'

Share this post


Link to post

Short link
Share on other sites

С чем может быть связано?

Они вроде на хромиум перешли...

Похоже теперь там все по-другому...

Edited by ShadowHunterRUS

Share this post


Link to post

Short link
Share on other sites

Они вроде на хромиум перешли...

Похоже теперь там все по-другому...

 

А есть какой пример для окна рабочий?

Share this post


Link to post

Short link
Share on other sites

Фреймворк внутреннего браузера Awesomium заменён на Chromium Embedded Framework. Осталось теперь понять как реализовать

Share this post


Link to post

Short link
Share on other sites

Фреймворк внутреннего браузера Awesomium заменён на Chromium Embedded Framework. Осталось теперь понять как реализовать

Почти все осталось как и было, просто добавили больше опций.

вот пример как это работает сейчас в 0.9.15: 

browserID = yield game_control.g_instance.browser.load(_url, _title, showActionBtn = True, showWaiting = True, browserID = None, isAsync = False, browserSize = None, isDefault = True, callback = None, showCloseBtn = False, useWhitelisting = False)

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...