Jump to content
Korean Random

Search the Community

Showing results for '"hello world"'.

  • Search By Author

Content Type


Forums

  • Games
    • Armored Warfare
    • War Thunder
    • World of Warplanes
    • World of Warships
    • World of Tanks
    • WoT Mods
    • Games
  • General
    • Live Streaming and Video Production
    • Game Development and Game Engines
    • Programming and Development
    • Software: OS, Drivers and other programs
    • Computers, Devices and Hardware
    • DIY & Hand-Made
    • Culture & Media
    • General Discussions / Chit-Chat
  • Korean Random
    • About Korean Random
  • Тестовый клуб's Раздел 1
  • Тестовый клуб's Раздел 2

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


City


Interests


Instagram


Nick


Skype

  1. Yo, My buddy has been asking me to build a "some-$hit" to log a few things after every game: Dmg (lowroll, avg, highroll?) Killing shot (yes/no), to determine if it was lowroll or just fatable shot Which tier you are (top1 = playing against 1 tier lower, top2 = against 2 tier lower, bot1 = against 1 tier higher, bot2 = against 2 tier higher, middle = against lower and higher tiers, equal = all same tier) I am currently studying software development, but anything else than 'hello world' and micromanaging xvm mods to my own preference, is beyond my skills. Is there an easy way to build it? We could then argue whether we are more lowtier and hit more lowrolls than average. Now we need data to either support our conspiracy, or to deny it make us look like a fools! Thanks buddies, any help would be greatly appreciated.
  2. Я делаю так class CommonChannelCriteria(object): def filter(self, channel): return channel.getName() == messenger.m_constants.LAZY_CHANNEL.COMMON ctrl = messenger.MessengerEntry.g_instance.gui.channelsCtrl.getControllerByCriteria(CommonChannelCriteria()) ctrl.sendMessage("Hello world")
  3. @ribbed, это типа для запуска Hello World придется принудительно паковать его и отправлять каждый раз на подпись? Те, кто это придумал понимают вообще сущность подобного бреда? Они вообще понимают сколько раз нужно порой исправить-запустить мод, чтобы он нормально запустился? И что в некоторых случаях вообще приходится в реалтайме с отладчика работать (передача кода в клиент и выполнение "на лету")?
  4. До утра сидел за ноутом, сегодня половину рабочего дня "гуглил" на работе - решил попробовать OpenWRT, так как в ней вроде есть нужный драйвер для китайских ардуин... Если чуть позже запал не пройдет - буду пробовать собрать драйвер для dd-wrt. Изначально боялся что придется всё делать в консоли, но оказалось есть неплохой веб-интерфейс. До этого только один раз устанавливал OpenWRT родителям дома из-за глючности заводской прошивки TP-Link, а других вариантов не было. Подключил флешку, при чем делается проще чем в dd-wrt - практически всё через web. Установил драйвер для китайской Arduino: Поставил python, pip, flask, pyserial. вывел себе в браузер "Hello world!" - красота ;)
  5. При создании AS3 части мода начинающему мододелу (относительно) понятно, как подключиться подключиться к картошкиной экосистеме. Засовываем тестовый мод xfw.hello_world в FlashDevelop и видим ссылки на внешние библиотеки в *.swc файлах. Спасибо создателям XVM, они собрали картошкины методы в этот полуфабрикат, который в большой степени закрывает нужды мододелов. Потому что из *.swc файлов торчат сигнатуры методов и свойств объектов, это очень много инфы. Как работает каждый метод нужно разбираться отдельно, но вопрос с зависимостями в целом закрыт. Ура. Однако при попытке создать чисто питоновский hello world оно как-то не идёт. Непонятно, что импортировать в IDE. И где смотреть хотя бы сигнатуры методов. С импортом объектов из XFW относительно понятно: скопировать то, что выдаёт компиляция XFW в xfw\~output\python\mods\xfw\python. Однако даже относительно небольшие моды в своей питоновской части импортируют и другие зависимости. Например, в моде xvm_ping в заглавном файле __init__.py импорт такой: import traceback import BigWorld import game from ConnectionManager import connectionManager from gui.shared import g_eventBus from predefined_hosts import g_preDefinedHosts from gui.Scaleform.daapi.view.meta.LobbyHeaderMeta import LobbyHeaderMeta from xfw import * traceback понятен, это встроенный питоновский модуль. xfw тоже понятен. А где брать BigWorld ? ConnectionManager? gui? Хоть какую-нибудь болванку, stub с названиями доступных объектов и методов. Видимо, это картошкины родные модули, но как с ними работать? Я чего-то очень простого не понимаю. Может, гайд какой, где расписано, как и что. Или декомпилить что-то общедуступное нужно? Как разберусь, обязуюсь написать тестовый мод по образцу xfw.hello_world :)
  6. Всё, что оказалось полезным на пути новичка. С краткими аннотациями. Буду расширять по мере знакомства с материалом. Буду благодарен, если подбросите пропущенное или просто полезное. А. Официальные доки Документация XVM Framework 3.1.0 Абсолютно must read, но, к сожалению, крайне кратко и, возможно, давно не обновлялось. Для сборки под Windows необходим пакет MSYS2, который не работает под Win XP. xfw.hello_world Пример мода на основе XFW. Полностью на ActionScript. B. Питоновская сторона силы. Доки к BigWorld -- часть питоновских библиотек, за которые моды цепляются в клиенте игры (via ktulho). Это документация от "чистого" BigWorld 2.1.0. Там нет методов, которые добавлены разработчиками танков. Еще часть может отсутствовать.(thx 2 Monstrofil) Декомпилированные питоновские исходники из клиента игры (via ktulho). Там же инструмент (PjOrion от StranikS_Scan) и инструкции по декомпиляции. Как я забыл скомпилировать питоновские файлы. Заодно там ссылка на проект hello world для ангара. Чтобы моды запустились, достаточно поместить .pyc файл в папку scripts/client/gui/mods и название файла должно начинаться с mod_ C. Разное Создание Flash объектов и управление ими. Основы DAAPI. Про интероп между Питоном и AS. Требует минимального знакомства с обеими языками. Немного про среду для разработки модов Обсуждение IntelliJ IDEA, PyCharm, более легкие альтернативы. Рекомендации по настройке режима отладки. Как создать форму(Окно) в ангаре. Питоновский файл складывать в res_mods\<wot_ver>\scripts/client/gui/mod, swf файл складывать в res_mods\<wot_ver>\gui\flash\ Интеграция своего sfw файла в battle.sfw в патче 9.15.1 D. Всякое В FlashDevelop файл с точкой входа для компилятора должен быть документом (ПКМ). При редактировании питоновских проектов удобно скачать декомпилированные питоновские исходники (Питоновская сторона силы. - 2) и сделать их external lib. Это даст подсказку и исправление опечаток в IDE. E. Чисто конкретно Название танка Как создать сообщение с кнопками в центре уведомлений?
  7. Хотел пойти в качалку-до сих пор тупо бегаю. Хотел поступить в местную академию фсб-получил судимость и работаю дальше парикмахером. Хотел подучиться программированию-бомбануло на стадии Hello World. Единственное, чего достиг-получил 5 разряд модельера. Вот такое я бесполезное существо.
  8. Не понял, относительно, чего вопрос... Если про те ссылки, которые я дал на исходники AAS - то это просто пример реализации определенных моментов, но никак не готовый "Hello world!" для новичков. Вообще с загрузкой боевых флешек все не так просто, есть куча далеко не самых очевидных даже для меня подводных камней. Для новичка могу посоветовать для начала разобраться с чем-то одним, а уже потом копать взаимодействие флеша и питона, имея хотя бы какую-нибудь базу. К сожалению все никак не найду времени для написания хотя бы простейшего примера реализации боевого интерфейса с комментариями и пояснениями. Да и далеко не все раскопал пока. Но в общем и целом, используются все те же классы, что и для ангарного интерфейса, за некоторыми исключениями, так что часть информации из "ангарной темы" актуальна и тут.
  9. Разработчики опубликовали первую информацию по API для модов в World of Warships. Это сообщение будет редактироваться и дополняться по мере поступления информации Содержание: Введение, общее описание API для модовModsAPI Python HelloWorld ModsAPI Flash HelloWorld Flash API Data Bridge Module Stage Module Python API callbacks events flash customPorts Введение, общее описание API для модов ModsAPI - это Sandbox, максимально изолированный от остальных частей клиента, но работающий на тех же технологиях, что и другие части. ModsAPI Flash и ModsAPI Python - две части API, которые могут работать независимо друг от друга. Каждая из них выполняет роль загрузчика модификации, а так же предоставляет доступ к данным клиента и функциям управления им. Общая изолированность API, а также примененные технологии позволяют "на лету" загружать и выгружать моды. ModsAPI устроен таким образом, что ошибки в модах ни коим образом не сказываются на общей работоспособности клиента(громкое заявление - прим. рекдактора) PythonAPI обеспечивает загрузку/выгрузку кода модиификации, написанной на языке Python, а так же перечень функций для получения данных из клиента и взаимодействия с FlashAPI. FlashAPI обеспечивает загрузку/выгрузку на изолированную сцену модификации, написанной на ActionScript 3, а так же перечень функций для взаимодействия с Flash-сценой и PythonAPI. ModsAPI — это изолированная среда. Моды, загруженные с помощью ModsAPI изолированы от остального клиента. Это необходимо для: Поддержания работоспособности мода из версии в версию Уменьшения вероятности «сломать» клиент Защиты от злоумышленного использования В обычном состоянии клиента ModsAPI неактивно. Для его активации необходимо в любой папке клиента создать пустой файл "PnFModsLoader.py", а рядом с ним папку "PnFMods". В папке "PnFMods" должны храниться папки с модами. В самом простом случае мод может состоять всего из одного файла: "Main.py". В итоге простейший мод может лежать по следующему пути: "<папка_с_игрой>/res_mods/<версия_игры>/PnFMods/MyMod/Main.py". ModsAPI состоит из двух частей: Python и Flash. Python-часть отвечает за загрузку "Main.py", а Flash-часть загружает специально подготовленные "Main.swf". Python и Flash части мода работают изолированно от игрового клиента. Для получения и отправки различных данных используется предоставленный интерфейс. ModsAPI Python HelloWorld Создадим в папке "res_mods/<версия_игры>" папку "PnFMods" и пустой файл "PnFModsLoader.py". В папке "PnFMods" создадим папку для нашей модификации "HelloWorld": Теперь в папке "HelloWorld" создадим пустой файл "Main.py", откроем его в любом редакторе и напишем следующее: API_VERSION = 'API_v1.0' print 'Hello World!' Запустим клиент, дождемся его загрузки и после этого закроем его. Откроем файл "python.log", в нем увидим примерно следующее: Итак, наш первый мод готов и работает! ModsAPI Flash HelloWorld Для создания Flash-части мода нам понадобится Flash IDE. Это может быть "Adobe Flash Professional" или "FlashDevelop". Создадим пустой AS3 проект и в зависимости от выбранной IDE добавим к проекту внешнюю SWC-библиотеку, актуальную версию которой можно взять из ModsSDK: https://share.wargaming.net/d/351652a5fa/ (as3_library/wows_library.swc) После подключения библиотеки нам необходимо создать "Document Class", опять же в зависимости от выбранной IDE способ создания может различаться. Например после создания проекта в FlashDevelop такой класс уже будет создан и нам нужно будет его лишь немного доработать. Вот код-заготовка для Flash-части мода: package { import lesta.api.ModBase; public class Main extends ModBase { public function Main() { super(); } override public function init():void { super.init(); } override public function fini():void { super.fini(); } override public function updateStage(width:Number, height:Number):void { super.updateStage(width, height); } } } Напишем наш простой Flash-мод: package { import lesta.api.ModBase; import flash.text.TextField; import flash.text.TextFormat; public class Main extends ModBase { private var tf:TextField = new TextField(); public function Main() { super(); } override public function init():void { super.init(); var format:TextFormat = new TextFormat(); format.size = 40; gameAPI.stage.addChild(tf); tf.defaultTextFormat = format; tf.text = "Hello World!"; tf.textColor = 0xFF0000; tf.width = 250; } override public function fini():void { super.fini(); } override public function updateStage(width:Number, height:Number):void { super.updateStage(width, height); } } } Запустим клиент и убедимся, что он работает: FlashAPI Методы доступные для потомков класса ModBase ModBase - это базовый класс, который должны наследовать все Flash моды. Если главный класс мода не наследуется от ModBase, то ModsAPI игнорирует такой мод. ModBase наследуется от базового класса Sprite. Список полей класса ModBase: public var gameAPI:GameAPI // точка доступа к GameAPI protected var stageWidth:Number // текущая ширина Stage protected var stageHeight:Number // текущая высота Stage Список методов класса ModBase: public function init():void // данная функция вызывается после добавления мода на Stage public function fini():void // данная функция вызывается перед удалением мода со Stage public function updateStage(_stageWidth:Number, _stageHeight:Number):void // вызывается при изменении размеров Stage protected function log(...args):void // функция для логирования в python.log Data Bridge Module gameAPI.data.call(methodName:String, params:Array):void gameAPI.data.addCallBack(methodName:String, func:Function):void gameAPI.data.removeCallBack(methodName:String = null, callBack:Function = null):void StageModule gameAPI.stage.addChild(child:displayObject):displayObject gameAPI.stage.addChildAt(child:displayObject, index:int):displayObject gameAPI.stage.removeChild(child:displayObject):displayObject gameAPI.stage.removeChildAt(index:int):displayObject gameAPI.stage.width():Number gameAPI.stage.height():Number Data Bridge Module (описание) Данный модуль позволяет моду передавать или получать данные в/из Python. call Метод позволяет передать в Python информацию. Входные параметры: methodName:String - имя коллбэка, на который подписан Python. params:Array - массив передаваемых в Python параметров addCallBack Добавляет коллбэк для получения информации из Python'a. Входные параметры: methodName:String - имя коллбэка, на который будет подписан Flash func:Function - функция-обработчик коллбека removeCallBack Удаляет коллбэк для получения информации из Python'a. Входные параметры: methodName:String - имя коллбэка, на который будет подписан Flash func:Function - функция-обработчик коллбека Примечание: Функция может быть вызвана без параметров. Таким образом удалятся все коллбеки, на которые был подписан мод. Stage Module (описание) Данный модуль предоставляет моду интерфейс для работы со Stage. addChild Добавляет DispalyObject на Stage. Входные параметры: child:displayObject - DisplayObject, который должен быть добавлен на StageВозвращаемое значение: DisplayObject, который был добавлен на Stage. addChildAt Добавляет DispalyObject на определенный слой Stage'a. Входные параметры: child:displayObject - DisplayObject, который должен быть добавлен на Stage index:int - порядковый номер слоя, на который должен быть добавлен DisplayObject Возвращаемое значение: DisplayObject, который был добавлен на Stage. removeChild Удаляет DispalyObject со Stage. Входные параметры: child:displayObject - DisplayObject, который должен быть удален со Stage index:int Возвращаемое значение: DisplayObject, который был удален со Stage. removeChildAt Очищает выбранный слой на Stage. Входные параметры: index:int - порядковый номер слоя, с которого должен быть удален DisplayObject.Возвращаемое значение: DisplayObject, который был удален со Stage. width Возвращает ширину Stage. Возвращаемое значение: Number, ширина Stage. height Возвращает высоту Stage. Возвращаемое значение: Number, высота Stage. PythonAPI Доступные методы: callbackscallbacks.perTick(func) callbacks.callback(dt, func, *args, **kw) callbacks.cancel(handle) eventsevents.onFlashReady events.onSFMEvent events.onReceiveShellInfo events.onBattleStarted events.onBattleQuit flashflash.call(methodName, args = None) flash.addExternalCallback(command, function) flash.removeExternalCallback(command = None, function = None) flash.loadFlashMod(modName) flash.loadPyMod(modName) flash.reloadMod(modName, needToReloadPy = False) flash.unloadMod(modName, needToUnloadPy = False) flash.getModsStatus() customPortscustomPorts.addCustomPort(portName, portDisplayName = 'Персональный', isPremium = False, peculiarities = None) customPorts.removeCustomPort(portName) contentSDKcontentSDK.registerShipMod(shipName) contentSDK.extractSources(modName, shipName, callback = None) callbacks (описание) perTick Данная функция вызывает функцию, переданную в качестве параметра каждый тик. Входные параметры: func - Python-функцияВозвращаемое значение: handle - уникальный идентификатор, используемый для остановки вызова функции по тику. callback Данная функция позволяет вызвать другую функцию с определенной задержкой и параметрами. Входные параметры: dt - время в милисекундах, через которое вызвоется функция func func - функция, которая вызовется *args - все non-keyword параметры, которые передадутся в функцию func **kw - все keyword параметры, которые передадутся в функцию func Возвращаемое значение: handle - уникальный идентификатор, используемый для остановки вызова функции по тику. cancel Данная функция отменяет действие, которые должны будут выполнить функции выше (вызов функции каждый тик или вызов функции с задержкой). Входные параметры: handle - уникальный идентификатор, полученный от функций perTick или callback.events (описание) Эвенты вызываются извне и передают различные параметры в функции, которые на данные эвенты подписаны. Пример подписи на эвент: events.eventName(myEventHandlerFunc) onFlashReady Данный эвент срабатывает сразу после загрузки и инициализации Flash-части мода (при её наличии). Параметры эвента: modName - имя мода, Flash-часть которого была загружена onSFMEvent Данный эвент срабатывает при возникновении различных событий в SFM-машине. Например показ и скрытие различных окон, нажатия на некоторые кнопки и т.д и т.п. Параметры эвента: eventName - имя SFM эвента eventData - параметры SFM эвента onReceiveShellInfo Данный эвент срабатывает при получении игроком информации о попадании (снарядом/торпедой) в чужой корабль. Параметры эвента: victimID - идентификатор атакованного shooterID - идентификатор атакующего ammoId - тип снаряда matId - тип материала, в который было попадание shotID - идентификатор выстрела booleans - пока не определено damage - кол-во нанесенного урона shotPosition - точки пападания yaw - пока не определено hlinfo - пока не определено onBattleStarted Данный эвент срабатывает при начале боя, после 30-секундного отсчета. onBattleQuit Данный эвент срабатывает после окончания боя. Параметры эвента: arg - зарезервированный аргумент. На данный момент равен Trueflash (описание) call Данный метод вызывает коллбек, на который должны быть подписаны функции во Flash. Параметры функции: methodName - имя, ключ коллбека args = None - массив аргументов addExternalCallback Данный метод добавляет функцию обработчик для указанного коллбека. Параметры функции: methodName - имя, ключ коллбека function - функция-обработчик коллбека removeExternalCallback Данный метод прекращает работу функции-обработчика коллбека. Параметры функции: methodName = None - имя, ключ коллбека function = None - функция-обработчик коллбека Примечание: При вызове данной функции без параметров будет полностью очищен список функций-обработчиков для текущего мода. loadFlashMod Данный метод загружает Flash-часть мода, если она не была загружена ранее, либо была выгружена. Параметры функции: modName - имя, идентификатор мода loadPyMod Данный метод загружает Python-часть мода, если она не была загружена ранее, либо была выгружена. Данный метод так же загрузит Flash-часть мода. Параметры функции: modName - имя, идентификатор мода reloadMod Данный метод перезагружает мод. Параметры функции: modName - имя, идентификатор мода needToReloadPy = False - нужно ли перезагрузить Python-часть мода unloadMod Данный метод выгружает мод. Параметры функции: modName - имя, идентификатор мода needToUnloadPy = False - нужно ли выгружать Python-часть мода getModsStatus Данный метод возвращает список модов и их статус. Возвращаемое значение Словарь (dict) следующего вида: { 'modName': isLoaded # загружен ли мод } customPorts (описание) addCustomPort Данный метод добавляет в меню выбора порта новый порт. Параметры функции: portName - имя, идентификатор порта, должен совпадать с именем space'a и png-иконки порта portDisplayName = 'Персональный' - отображаемое имя порта isPremium = False - премиумность порта peculiarities = None - массив особенностей порта (напр. "peculiarities = [ 'arpeggio' ]") removeCustomPort Данный метод удаляет из меню выбора порта новый порт. Параметры функции: portName - имя, идентификатор загруженного порта
  10. я там фигни понаписывал, с целью хотя бы увидеть что оно пытается работать. я уже поисправлял. FAQ как писать моды Элементарный Пример 1 скачайте себе PjOrion -- где то тут http://www.koreanrandom.com/forum/topic/15280-pjorion-%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D1%8F-%D0%B4%D0%B5%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D1%8F-%D0%BE%D0%B1%D1%84/ 2 запустите PjOrion и в нем напишите функцыональность мода на языке python (хаха это самое простое) например напишите туды текст из одной строки print 'Hello world' 3 скомпилируйте CTRL-F9 оно спросит - а куда сохранить? - сохраните куда нибудь, главное чтоб имя начиналось на mod_ (например mod_hello.py) компилятор создаст .pyc файло (например mod_hello.pyс) 4 скопируйте мод mod_hello.pyс в директорию [...путь к танчикам... .\res_mods\...версия ... \scripts\client\gui\mods например C:\Games\World_of_Tanks\res_mods\0.9.14.1\scripts\client\gui\mods 5 запустите танчики и оно должно начать работать работа примера заключается в том что в файл C:\Games\python.log будет напечатана строка INFO: Hello world Ура! тоесть когда танчики запускаются, происходит исполнение мода mod_hello.pyс печатается строка, которая попадает в лог -------------------------- ну а дальше пример mod_hello.py надо усложнять, наворачивать, добавлять всякие нужные команды.. исходный пример содержит код, который выполнится один раз при запуске танчиков. что как бы не очень полезно. когда в игре происходит какое нибудь событие, оно вызывает стандартную функцию. эту стандартную функцию можно перенаправить, чтобы выполнялся Нужный Код. вот тут есть хороший пример http://www.koreanrandom.com/forum/topic/31287-%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA-%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2-%D0%B1%D0%BE%D1%8F/ краткие пояснения: - когда танчики стартуют, мод запускается. - создается функция BF_new_afterCreate - внизу две строчки производят перенаправление стандартной функции Battle.afterCreate на Свою Написанную функцию BF_new_afterCreate - теперь когда начинается Бой, оно всегда начинает вызывать функцию BF_new_afterCreate - оригинальная стандартная функция сохранена в BF_orig_afterCreate, - новая написанная функция вызывает стандартную - потом она делает то что нам нужно вообщем разработка мода состоит в том чтобы узнать какую функцию перехватывать и натулить туда своего кода, который делает чо то полезное. --------------- ОШИБКИ Если в тексте мода будут всякие ошибки, то танчики могут воще не запустицца, а в файле C:\Games\python.log будут всякие сообщения об ошибках что то типо ERROR: [EXCEPTION] (scripts/client/game.py, 184): Traceback (most recent call last): File "scripts/client/game.py", line 155, in init File "scripts/client/gui/shared/personality.py", line 329, in init File "scripts/client/gui/mods/__init__.py", line 17, in init File "scripts/client/gui/mods/__init__.py", line 64, in _findValidMODs File "scripts/common/Lib/importlib/__init__.py", line 37, in import_module File "stata1", line 24, in <module> AttributeError: 'NoneType' object has no attribute 'arena' --------------------------------- усложняем КАК НАПИСАТЬ СВОЙ МОД ОЛЕНЕМЕР берем за основу http://www.koreanrandom.com/forum/topic/31287-%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA-%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2-%D0%B1%D0%BE%D1%8F/ итак, когда танчики стартуют, происходит подмена функции Battle.afterCreate теперь во время начала каждой битвы будет вызывацца наш код из BF_new_afterCreate глобальный объект BigWorld.player().arena.vehicles.values() содержит список всех участников боя. перебираем список. pl['name'] даст нам имя игрока pl['accountDBID'] даст нам ID игрока в базе каргаминга например игрок warboss86 имеет ID 1008410489 шлем http запрос на ссайт варгаминга http://worldoftanks.com/en/community/accounts/[ID игрока]-[имя игрока] например http://worldoftanks.com/en/community/accounts/1008410489-warboss86 парсим полученный html table class="t-personal-data и видим что он полное днище - процент побед 46.95% и так узнаем данные всех остальных игроков из боя. сохраняем этот список позора и унижения. в моде также надо переопределить вывод игроков. это функция ..... [скоро допишу] програмируем код, чтобы вместо [ИмяИгрока - имя танчика] печаталось [ИмяИгрока - %побед% имя танчика] %побед% мы будем брать из сохраненного списка ------------- вот так все просто ------------
  11. Здравствуйте. Меня зовут Вячеслав, мне 22 года и я пхп программист. Я сижу на пхп с 18 лет. Первый раз я попробовал пхп с другом. Мы сидели, обсуждали веб-технологии и тут он сказал, что недавно пробовал пхп. Он предложил попробовать мне. Поначалу я не согласился, ведь это пхп, я слышал много плохих слухов про него, слышал, что он вызывает зависимость. Но друг настаивал, говорил, что в жизни нужно попробовать все и я сдался. Он предложил бесплатный скрипт, выводящий «Hello world!». Он казался совсем безобидным, но как потом оказалось, я уже не мог остановиться. Уже очень скоро благодаря пхп я попробовал свою первую cms ...
  12. 1. Нужно ставить в клиент серверную часть, чтобы игровой клиент мог принимать подключения от Sublime. 2. Клиентскую часть на Sublime, как я понял, ты уже развернул, раз меню появилось. 3. У Sublime есть своя внутренняя консоль, вызывается через Ctrl+~, ЕМНИП. Если что-то в плагине идет не так - там будут логи. 4. Не нужно брать сходу скрипты. Тестируется все довольно просто. 4.1. Коннектимся к клиенту. Состояние не важно, главное чтобы он прогрузился. 4.2. Открываем в Sublime лог-файл или лог-панель. Там должен появиться весь лог, если параметр fetch_logs включен (ЕМНИП он включен по дефолту). 4.3. Создаем пустой файлик, где мы будем писать наш скрипт. Пишем туда что-то типа "print 'Hello world!'". 4.4. Запускаем это дело. В лог-файле/лог-панели должна появиться строка "Hello world!". 4.5. PROFIT. 5. Некоторые скрипты интегрируются в клиент на стадии загрузки, поэтому их запуск через терминал без ручной интеграции (контролируемая интеграция) невозможен. 6. Из пункта 5 следует, что терминал используется для отладки модулей с использованием их ручной интеграции или проверки работоспособности каких-то кусков кода. Готовые скрипты следует отлаживать уже нормальным методом (устанавливать как мод). В последствии (если скрипт такое нормально воспримет) можно управлять состоянием этого скрипта через терминал, как и любым другим модулем картофана или пользовательским модом. Если конечно вы знаете, что надо делать.
  13. Во время компиляции кода (который в переменной code) возникла синтаксическая ошибка. Смысл примерно такой: 1abc='Hello World!' Название переменной ошибочное. Проверяй свой исходник.
  14. та со скиллом hello world+ далеко не залезешь :)------ Блин((( для многих танков нормали все равно выворачивает :(
  15. ну эти вопросы явно не для getting started. тут про то, как заставить работать hello world на этой платформе.
  16. Это инжектор. В первом посте инфа есть под спойлером про защиты. Тройные - это всё тот же стринг только захватывающий еще и концы строк. А ни чем другим он от стрингов в кавычках и апострофах не отличается. Я полистал питон, действительно многие пишут, что тройные кавычки также можно юзать и для многострочного комментирования в теле программы. Ни чего другого нет для этого. Немного странно конечно. Коммент - не есть элемент кода программы. Но в питоне строка в тройных кавычках - это константа в программе, просто не юзаемая и потому компилятор её выкидывает. Но похоже эти строки можно и как комменты юзать. #this is a comment in Python print "Hello World" #This is also a comment in Python """ This is an example of a multiline comment that spans multiple lines ... """ Дык компилятор же выкидывает лишние инструкции. Я пробовал, например делать лишние операции со стеком, дык он их выбрасывал из кода ))))
  17. Все отображает спасибо Только text = urlopen('Hello World').read() заменил на return self.flashObject.as_setText('<font color="#FFFFFF">Hello World</font>')
  18. Теперь ошибки тут from gui.Scaleform.daapi import LobbySubView from gui.WindowsManager import g_windowsManager from gui.shared.utils.key_mapping import getBigworldNameFromKey from gui.Scaleform.framework.entities.View import View class TestWindow(LobbySubView, WindowViewMeta): def __init__(self): View.__init__(self) def _populate(self): View._populate(self) def as_setTextS(self): if self._isDAAPIInited(): return self.flashObject.as_setText('<font color="#FFFFFF">Hello World!</font>') def onWindowClose(self): self.destroy() def onTryClosing(self): return True def startF(self): self.as_setTextS() _alias = 'TestWindow' _url = 'TestWindow.swf' _type = ViewTypes.WINDOW _event = None _scope = ScopeTemplates.DEFAULT_SCOPE _settings = ViewSettings(_alias, TestWindow, _url, _type, _event, _scope) g_entitiesFactories.addSettings(_settings) def onhandleKeyEvent(event): key = getBigworldNameFromKey(event.key) if key == 'KEY_F10': g_windowsManager.window.loadView('TestWindow', 'TestWindow') return None from gui import InputHandler InputHandler.g_instance.onKeyDown += onhandleKeyEvent
  19. нет не такНужно из флешки отправить сигнал на старт функции public var startF:Function;В конце configUI дописать this.startF();В питоне class TestWindow(LobbySubView, WindowViewMeta): def __init__(self): View.__init__(self) def _populate(self): View._populate(self) def as_setTextS(self): if self._isDAAPIInited(): return self.flashObject.as_setText('<font color="#FFFFFF">Hello World!</font>') def onWindowClose(self): self.destroy() def onTryClosing(self): return True def startF(self): self.as_setTextS()
  20. То есть должно получиться: def __init__(self): View.__init__(self) def _populate(self): View._populate(self) self.as_setTextS() def as_setTextS(self): if self._isDAAPIInited(): return self.flashObject.as_setText('Hello World!') def onWindowClose(self): self.destroy() def onTryClosing(self): return True def testF(self, param1): print param1
  21. Хм.. вчера так и пытался вывести но почему то вывел пустату заместо "Hello World!"
  22. Есть способы защиты, которые сводятся к тому, что для того, чтобы декомпилировать надо потратить.. год (на самый простой скрипт). В целом - "недекомпилируемым кодом" можно назвать такой код, затраты на декомпиляцию которого больше чем затраты на создание с нуля оригинального кода (как человеко-часы, так и финансовые). Для примера http://dropmefiles.com/dYmbg Исходник: print 'Hello World!' LOAD_CONST 'Hello World!' PRINT_ITEM PRINT_NEWLINE LOAD_CONST None RETURN_VALUE попытайся декомпилировать..;) Можно назвать этот скрипт недекомпилируемым? А некоторые защиты основываются на дозагрузке некоторой части скрипта (примерно как это реализовано в варпаке)..
  23. Продвижения есть, так что 99%, что рабочий мод скоро будет. Сейчас много мелких правок, так как все расположения сбились На данный момент я немного поковырялся с питоном, но мне от него много не требовалось, лишь бы загрузил флешку в ангар, что он успешно и сделал. Сейчас осталось подправить флешки, надеюсь, успею до патча. К слову, я пробежался по разным всяким модам на разных форумах, ангарных модов на тему питон + флеш 2 с половиной штуки, причём это немного не то, что мне надо было, но из них хотя бы ясно, как грузится view. XVM понятно, это мегамод отдельной строкой капслоком, но и разобраться в его внутренностях время требуется. Вообще, не понимаю политику WG в данном вопросе. Сделали папку для модов. Ок. Так напишите как правильно загружать моды, работать с view и т.п. хотя бы на базовом примере Hello World. Всё равно декомпилируются их флешки и скрипты, так сделали бы инструкцию, как делать моды правильно, чтобы не тыркаться вслепую. Ведь от того, что мододелы действуют методом проб и ошибок - лучше не будет. Статью написали на хабре, тоже хорошо, но там всё-таки общие вопросы.
  24. Вот import BigWorld from gui.WindowsManager import g_windowsManager #----------------------------------------------------------------- if g_windowsManager.battleWindow is not None: g_windowsManager.battleWindow.call('battle.PlayerMessagesPanel.ShowMessage', ['0', 'Hello World!(cep62rus)', 'red'])
  25. Ахаххаха, Ну да прям вообще все станет очень быстро , да всем пофигу в принципе, подумаешь какой то чел Hello world написал.
×
×
  • Create New...