Перейти к содержимому
Для публикации в этом разделе необходимо провести 1 боёв.
MedvedevTD

ModAPI (обсуждение)

В этой теме 157 комментариев

Рекомендуемые комментарии

3
[KYIV]
Участник
9 публикаций
21 166 боёв
В 26.09.2018 в 12:19:05 пользователь MatroseFuchs сказал:

На данный момент в планах этого нет пока. Как Вы хотели бы обрабатывать информацию из чата, какие инструменты/методы нужны?

Время от времени пишу для клана чат-бот под discord. По ряду причин (в основном из-за удобств), кланы используют discord для общения как альтернативу внутриигровому чату. Хотелось бы иметь возможность синхронизации важных сообщений, уведомлений. Понимаю, что такой функционал наверно лучше бы иметь в web api, но мало ли :

Рассказать о публикации


Ссылка на публикацию
Поделиться на других сайтах
958
[0RZ]
Мододел, Коллекционер
536 публикаций
9 122 боя
В 15.11.2018 в 17:24:37 пользователь MatroseFuchs сказал:

Полное описание будет добавлено в документацию ModAPI с выходом обновления.

Классная вещь! Спасибо))
Но... в public test 0.8.0 вышли новые ленточки и типы урона (связанные с появлением ракет)

Я думал воспользоваться этими методами для получения их значений... однако их нет((

С уважением, Максим

Рассказать о публикации


Ссылка на публикацию
Поделиться на других сайтах
602
[LST]
Разработчик
136 публикаций
1 185 боёв
Сегодня в 10:51:40 пользователь qMBQx8GH_real сказал:

однако их нет((

пополним в одном из обновлений

Рассказать о публикации


Ссылка на публикацию
Поделиться на других сайтах
958
[0RZ]
Мододел, Коллекционер
536 публикаций
9 122 боя
Сегодня в 10:11:22 пользователь MatroseFuchs сказал:

в одном из обновлений

pt или уже на основе?

Рассказать о публикации


Ссылка на публикацию
Поделиться на других сайтах
602
[LST]
Разработчик
136 публикаций
1 185 боёв
Сегодня в 11:25:09 пользователь qMBQx8GH_real сказал:

pt или уже на основе?

На основном предварительно 0.8.1 или 0.8.2, насчет ПТ не обещаю.

Рассказать о публикации


Ссылка на публикацию
Поделиться на других сайтах
14
[CF]
Старший альфа-тестер
37 публикаций
13 456 боёв

Делая все как написано в инструкции к теме: ModsAPI How-To, попытался написать простейший мод HelloWorld.

API_VERSION = 'API_v1.0'

print('HELLO WORLD')

Ожидалось что в логах python засветится содержимое команды print, ничего подобного я не обнаружил (Ctrl + F и простой осмотр документа)

Все что есть по модам это:

...
2019-07-07 18:57:35.455: INFO: [Script] [ModsAPI] 'PnFModsLoader.py' was found at: C:/Games/World_of_Warships_Ru/bin64/../res_mods/0.8.5.1/PnFMods; (, 67647152034311, 451)
2019-07-07 18:57:35.499: INFO: [Script] [ModsAPI] 1 mods found, loading...; (, 67647152034311, 335)
2019-07-07 18:57:35.501: INFO: [Script] [ModsAPI] [ModsAPI] Loading mods completed (1/1); (, 67647152034311, 127)
...

И далее никаких упоминаний. Пример мода "HelloWorld" на FlashAPI работает, но на момент проверки я не обращал внимания на логи. Уже после того как стал сам редактировать пример под свои идеи, обратил внимание что в логах информации нет (INFO: [Print]). И после этого решил набрать простенький пример, где обнаружил данную проблему. Пробовал восстанавливать клиент - не помогло.

Рассказать о публикации


Ссылка на публикацию
Поделиться на других сайтах
602
[LST]
Разработчик
136 публикаций
1 185 боёв
В 07.07.2019 в 19:14:52 пользователь Crystalz сказал:

Ожидалось что в логах python засветится содержимое команды print, ничего подобного я не обнаружил (Ctrl + F и простой осмотр документа)

Добрый день! С версии 0.8.5 функция "print" больше не выводит информацию в "python.log", но мы добавим метод для ее замены, описание в документации будет добавлено позже.

Рассказать о публикации


Ссылка на публикацию
Поделиться на других сайтах
14
[CF]
Старший альфа-тестер
37 публикаций
13 456 боёв

Возник глупый вопрос. Подскажите пожалуйста как вывести хотя бы кнопку на экран?

Есть вот такой вот код, делаю методом тыка конечно и никогда не имел опыта работы с ActionScript.

Скрытый текст

package
{
	import lesta.api.ModBase;
	import lesta.dev_gui.*;
	
	public class Main extends ModBase
	{
		private var mybutton:DevGUIButton = new DevGUIButton();
		
		public function Main()
		{
			super();
		}
		
		override public function init():void
		{
			super.init();
			
			gameAPI.stage.addChild(mybutton);
		}
		
		override public function fini():void
		{
			super.fini();
		}
		
		override public function updateStage(width:Number, height:Number):void
		{
			super.updateStage(width, height);
		}
	}
}

 

 А вот собственно кнопка через import fl.controls.Button; отображается, но не имеет интерфейса как в игре.

Рассказать о публикации


Ссылка на публикацию
Поделиться на других сайтах
602
[LST]
Разработчик
136 публикаций
1 185 боёв
В 22.03.2020 в 18:52:11 пользователь Crystalz сказал:

Возник глупый вопрос. Подскажите пожалуйста как вывести хотя бы кнопку на экран?

Здравствуйте.
Вам нужно использовать другие кнопки:

import scaleform.clik.controls.Button;


private var myButton:Button;
private var buttonClass:Class = getDefinitionByName("button_default") as Class;  # стиль кнопки как в игре


myButton = new buttonClass;
gameAPI.stage.addChild(myButton);

 

  • Плюс 2

Рассказать о публикации


Ссылка на публикацию
Поделиться на других сайтах
14
[CF]
Старший альфа-тестер
37 публикаций
13 456 боёв

Собственно код получился вот таким и все равно заветной кнопки в верхнем левом углу не наблюдается

Скрытый текст

package
{
	import lesta.api.ModBase;
	import flash.utils.getDefinitionByName;
	import scaleform.clik.controls.Button;
	
	public class Main extends ModBase
	{
		private var myButton:Button
		private var buttonClass:Class = getDefinitionByName("button_default") as Class;
		
		public function Main()
		{
			super();
		}
		
		override public function init():void
		{
			super.init();
			
			myButton = new buttonClass;
			gameAPI.stage.addChild(myButton);
		}
		
		override public function fini():void
		{
			super.fini();
		}
		
		override public function updateStage(width:Number, height:Number):void
		{
			super.updateStage(width, height);
		}
	}
}

 

 

Рассказать о публикации


Ссылка на публикацию
Поделиться на других сайтах
472
[-RAT-]
Участник, Коллекционер
1 148 публикаций
9 375 боёв

Пропустил точку с запятой

Рассказать о публикации


Ссылка на публикацию
Поделиться на других сайтах
14
[CF]
Старший альфа-тестер
37 публикаций
13 456 боёв
Сегодня в 19:07:50 пользователь _Kusanagi сказал:

Пропустил точку с запятой

Исправил, но суть не изменилась. Пробовал даже Window отрисовать, так же не выводится на экран.

Рассказать о публикации


Ссылка на публикацию
Поделиться на других сайтах
602
[LST]
Разработчик
136 публикаций
1 185 боёв
Сегодня в 19:14:30 пользователь Crystalz сказал:

Исправил, но суть не изменилась. Пробовал даже Window отрисовать, так же не выводится на экран.

Забыл еще кое что добавить

Скрытый текст

package
{
	import lesta.api.ModBase;
	import flash.utils.getDefinitionByName;
	import scaleform.clik.controls.Button;
	import scaleform.clik.core.UIComponent;
	
	public class Main extends ModBase
	{
		private var container:UIComponent;
		private var myButton:Button
		private var buttonClass:Class = getDefinitionByName("button_default") as Class;
		
		public function Main()
		{
			super();
		}
		
		override public function init():void
		{
			super.init();
			container = new UIComponent();
			gameAPI.stage.addChild(container);
			

			myButton = new buttonClass;
			container.addChild(myButton);
			
		}
		
		override public function fini():void
		{
			super.fini();
		}
		
		override public function updateStage(width:Number, height:Number):void
		{
			super.updateStage(width, height);
		}
	}
}

 

 

Рассказать о публикации


Ссылка на публикацию
Поделиться на других сайтах
14
[CF]
Старший альфа-тестер
37 публикаций
13 456 боёв

Если внутрь контейнера запихнуть надпись container.addChild(tf), то надпись выводится. Но с кнопкой какая то беда, не выводится. Что вне, что внутри...

Изменено пользователем Crystalz

Рассказать о публикации


Ссылка на публикацию
Поделиться на других сайтах
602
[LST]
Разработчик
136 публикаций
1 185 боёв
В 23.03.2020 в 22:03:22 пользователь Crystalz сказал:

Но с кнопкой какая то беда, не выводится.

Свойство видимости у кнопки "visible" пробовали настроить?

Рассказать о публикации


Ссылка на публикацию
Поделиться на других сайтах
14
[CF]
Старший альфа-тестер
37 публикаций
13 456 боёв
В 24.03.2020 в 08:57:46 пользователь MatroseFuchs сказал:

Свойство видимости у кнопки "visible" пробовали настроить?

да, пробовал:

myButton.width = 250;
myButton.height = 250;
myButton.x = 250;
myButton.y = 250;
myButton.label = "label 1";
myButton.visible = true;

UPD

 

Методом проб и ошибок выяснил, что если в коде присутствует строка:

private var buttonClass:Class = getDefinitionByName("button_default") as Class;

то выполнение ActionScript'а прекращается, а в логах Python'а появляется следующее:

2020-03-25 02:34:12.163: ERROR: [Other] Can't read data from file .../World_of_Warships_RU/res_mods/0.9.2.0/PnFMods/TestMod/Main.swf.
2020-03-25 02:34:12.855: ERROR: [Scaleform] Error: null
2020-03-25 02:34:12.925: ERROR: [Scaleform] Error: null

Без нее и добавления кнопки на сцену, выводится при желании TextField и TextField добавленный в UIComponent

 

Код над которым работал:

Скрытый текст

package
{
	import lesta.api.ModBase;
	import flash.text.TextField;
	import flash.text.TextFormat;
	import flash.utils.getDefinitionByName;
	import scaleform.clik.controls.Button;
	import scaleform.clik.core.UIComponent;
	
	public class Main extends ModBase
	{

		private var container:UIComponent;
		private var myButton:Button;
		private var buttonClass:Class = getDefinitionByName("button_default") as Class; // Без этой строки код продолжает работать
		private var tf:TextField = new TextField();
		
		public function Main()
		{
			super();
		}
		
		override public function init():void
		{
			super.init();
			
			container = new UIComponent();
			gameAPI.stage.addChild(container);
			
			var format:TextFormat = new TextFormat();
			format.size = 40;
			container.addChild(tf);
			tf.defaultTextFormat = format;
			tf.text = "Строка в контейнере";
			tf.textColor = 0xFF0000;
			tf.width = 250;
			
			myButton = new buttonClass; // см. 15 строку
			container.addChild(myButton); // кнопка не появится
		}
		
		override public function fini():void
		{
			super.fini();
		}
		
		override public function updateStage(width:Number, height:Number):void
		{
			super.updateStage(width, height);
		}
	}
}

 

 

Изменено пользователем Crystalz

Рассказать о публикации


Ссылка на публикацию
Поделиться на других сайтах
602
[LST]
Разработчик
136 публикаций
1 185 боёв
В 24.03.2020 в 14:10:25 пользователь Crystalz сказал:

Методом проб и ошибок выяснил, что если в коде присутствует строка:


private var buttonClass:Class = getDefinitionByName("button_default") as Class;

Прошу прощения, к сожалению ошибся, класс этой кнопки не доступен, тут либо пользоваться простой кнопкой "fl.controls.Button" или нарисовать свой объект кнопки, т.к. сам по себе "scaleform.clik.controls.Button;" еще не кнопка а простой DisplayObject.

Рассказать о публикации


Ссылка на публикацию
Поделиться на других сайтах

×