Jump to content


  • Content Сount

  • Joined

  • Last visited

  • Battles


About MatroseFuchs

  • Rank
    Lieutenant (junior grade)
  • Insignia

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. MatroseFuchs

    [ALL] ModStation

    Hi, please wait, we are fixing bug.
  2. MatroseFuchs

    [modAPI] Contect SDK

    Hi, i updated the manual in first post. The problem resolve with unpacked ModsSDK.zip to the folder with the same name.
  3. Hi, everyone! In this topic We’d like to explain how to change visibility icons in battle interface. From this (default view) IconVisibilityVolley IconVisibilityShip IconVisibilityPlane IconVisibilityRLS IconVisibilitySonar IconVisibilityCommonXray To this (these icons are used as an example): IconVisibilityVolley IconVisibilityShip IconVisibilityPlane IconVisibilityRLS IconVisibilitySonar IconVisibilityCommonXray The collection contains more than six clips, here’s the full list of events triggering the display of info icons: IconVisibilityFightersWarning IconVisibilityFightersCritical IconVisibilityAntiAir IconVisibilityVolley IconVisibilityShip IconVisibilityPlane IconVisibilityRadar IconVisibilityAircarrierAttacked IconVisibilityRLS IconVisibilitySonar IconVisibilityCommonXray First step is to prepare the future icons in the required size. Icons should be created in *.PNG (preferably already optimized for lesser file size). Them using the client unpack tool unpack the file: World_of_Warships/res_unpack/gui/unbound/main_hud_pc.xml In the main_hud_pc.xml search for required event, for example, being spotted by enemy ship: <block className="IconVisibilityShip"> <style> <width value="6px"/> <height value="24px"/> <backgroundImage value="symbol:icon_visibility_ship"/> </style> </block> This block sets the main (defaults) parameter for the image: <width value="6px"/> image width <height value="24px"/> image length <backgroundImage value="symbol:icon_visibility_ship"/> location in depository (in this example – in hud_lib.swf file) Assume you have an image with 70x70 pixels size Changing the lenght nad width paremeters accordingly in the block: <width value="70px"/> <height value="70px"/> Then you need to put the path to the external depository where the image is stored where the game will be taking this image from. Assume you have it stored in res_mods/<game_version>/gui/VisibilityItemsClip - then we need to put the path to this directory (VisibilityItemsClip): <backgroundImage value="url:../VisibilityItemsClip/IconVisibilityShip.png"/> In the end the changed block will look like this: <block className="IconVisibilityShip"> <style> <width value="70px"/> <height value="70px"/> <backgroundImage value="url:../VisibilityItemsClip/IconVisibilityShip.png"/> </style> </block> Save the changed file in according folder World_of_Warships/res_mods/<game_version>/gui/unbound/main_hud_pc.xml add folder with your images World_of_Warships/res_mods/<game_version>/gui/VisibilityItemsClip Log in to battle and see the results!
  4. MatroseFuchs

    Unbound framework (documentation)

    Colors Limited palett of colors is used in game for fints and icon graphics: For the most cases, the color can be used from so called safe Web-colors:
  5. MatroseFuchs

    Unbound framework (documentation)

    Typographics Font The main font used in game is Warhelios Condensed. It can be in one of two styles – common (WarheliosCondC) or bold (WarheliosCondCBold). Guidelines You should avoid using all the text style and instead use template style classes: Class What it is being used fo $TextDefault13NM Secondary (additional) text $TextDefault15NM main class, use it for the most cases $TextDefault17NM Tier 4 header $TextDefault19NM Tier 3 header $TextDefault21NM Tier 2 header $TextDefault23NM Tier 1 header $TextDefaultBoldNM Ships name and her tie,table header,title of drop down lists, title of stats groups $TextDefaultBold17NM Paragraph title $TextDefaultBold19NM Tier 3 title with higher importance $TextDefaultBold21NM Tier 2 title with higher importance $TextDefaultBold23NM Tier 1 title with higher importance, Window title Examples of style class code: Example of text stylization: Source text: (tf (text "Hello, world!") # black font with Arial typeface ) Now adding standard style class, using white color by default: (tf (class $TextDefaultNM) # now the text is white with 15px size and Warhelios Condensed typeface (text "Hello, world!") ) Now we are changing text, redefining the class text with our own by adding (textColor) attribute to the (style) block: (tf (class $TextDefaultNM) (style (textColor 0xFFCC66)) # golden color for premium ships (text "Hello, world!") )
  6. MatroseFuchs

    Unbound framework (documentation)

    Styles Element visual is determined by a set of atomic style properties, such as height, width, color, location etc. Certain style properties can be combined in style classes: class – style class style – expression, defining the style element specifically in this block (i.e. incline-style) atomic style properties Similar to HTML, the property being used is the one was applied last to the element:
  7. MatroseFuchs

    Unbound framework (documentation)

    Layout Each window or element consists of: macroicons, displayed in the required order style qualities, defining or dynamically changing the display of macroicons expressions, that can: set local variables connect expressing with the model manage the indication of the blocks request methods, effecting the model Blocks Element is an independent root block of the top parent level, in which the rest of child blocks are specified Determining element is required when: We want to create a new window. We want to create a new element, that will be used in any of the existing windows. The element can be determined either dynamically (when matched certain logic conditions) or statically. An example of dynamical appearance of the block is a button “Claim the reward” in calendar. Child blocks can be of the following types: block – sprite block <block> ... </block> tf – text block <block type="text"> mc - Movie Clip – type block, determined in any *.fla flash file and exported to ActionScript; <block className="some_class_name" type="native"> If we execute the code mentioned above, we won’t see anything on the display, since by default the blocks are created without color fill, with zero height and width For their visuals you can use styles.
  8. MatroseFuchs

    Unbound framework (documentation)

    List of supported events for the mouse Unbound supports only a fraction of the mouse events from ActionScript 3.0. Example: (bind dispatch "'click'; 'eventName'; {}") event description click Left click mouseDown It works when you click the left mouse button mouseUp It works when the left mouse button is released mouseWheel Scroll the mouse wheel in any direction mouseOver Hover over item mouseOut It works when the mouse leaves the element mouseMove It works when the pointer moves over the element rollOver Same as mouseOver, but does not work on children rollOut Same as mouseOut, but does not work on children Note There is a difference between mouseOver / rollOver and mouseOut / rollOut in ActionScript, it is saved in Unbound. This means that the mouseOver event will work on both the parent and the children, unlike rollOver, which will work once on the parent and will not work on children.
  9. MatroseFuchs

    Unbound framework (documentation)

    DataHub 2.0 Binding List DHCollectionRepeatBinding DHCollectionGeneratorBinding DHCollectionBinding DHEntityBinding DHHandleEventBinding DHWatchBinding DHDataRefBinding
  10. The "modification" (also further referred as "mod") is a file, or combination of files, related to WoWs project, that interacts directly or indirectly with game client (client's files), and/or that alters its behavior in any way. Modders group is entitled to: Create and/or publish modification. Follow the forum and modification publications rule (further referred as "Rules"). Support and update their respecting published modifications. Receive the "Modder" status as the author of publication, after at least three game versions release from the moment of publication, if no Rules have been violated. The "Modder" status is given to the author of publication, even if he's not the person (or group of people) who created the modification initially. If the modification has been created by a group of people, this group should provide one representative, who'll be considered the author of publication and be held responsible for it. The representative will receive the Modder status; the rest of the group do not receive the Modder status. Participant can be excluded from the modders group if they: Violate the Rules of modification publications. Makes intended changes into already published theme, that contains files with prohibited or malicious content. Stops support for all published modifications for more than three game versions releases. Published modification, that causes harm via files and programs after installation; installs malicious files and programs; or installs files not mentioned in modification description. Recognition system: Forum administrator might reward the Modders for their efforts and impact on game development. Rules for modification publications: All publications and modifications must comply to the general Forum rules and Modification section of the Forum. Publications are being verified by the forum administrators with one or three days after being posted. If the publication is not approved or no remarks on it received within this period, author should contact the forum administrators via direct message. Modification must be related to WoWs project. Modification should match the published description. Published modification should be compatible to the current version of the game. Publications that have disputable or borderline content are to be left on forum administrator consideration. If the remarks for the publication are not followed within 7 days period, the publication is moved to the Archive. Publication name must contain the compatible game version and the name of the modification (example: [] My SuperMod); if the modification does not require any specific game version, then it should be marked as [ALL]. Publishing another author's modification is allowed only with the respected author approval. In this case the original author should direct message forum administrator (MatroseFuchs) of their approval. Publication must contain: Necessarily: Modification description. Download link to the file depository (Google Drive, Yandex.Disk, Cloud.Mail, Dropbox etc.). Installation guide in the description or the mod archive. If publishing another author mod - the name of original author. Interface and graphics modifications must contain screenshots (no more than 3), related to the mod content. If there is any other important information for using the modification, it should be added to description and highlighted. On author's consideration: Additional images or videos for mod description, but they must be put under spoilers. Modification is published in according topic of the forum. After the release of new game version, the modification, if affected, must be updated to be compatible with the current game version within 3 days after release, otherwise modification is put into Archive until it's updated to the current game version. After updating the modification, the mentioned game version in it's publication's name should be changed as well. If the modification, that had been previously already put into Archive, is updated to the current game version, the author should directly message the administrator (MatroseFuchs) for verification. Prohibited content for the modification publications: Programs and mods, that add additional ways for targeting in game, not present in the game client (like preempting markers). Programs, bots and scripts for autonomous management of any game aspect. Programs and mods, that replace, involve or affect in any way the game client file of scripts.zip Containing erotic, pornography or nude models materials. Containing Nazism or fascism-related symbols. Forum administrator has a right to forbid any publication at their discretion.
  11. MatroseFuchs

    Unbound How-To

    Let’s have a look at mod creation on Unbound and take a mod showing the win rate in the ship carousel as an example. To create a mod, we need to get three main tasks completed: Get necessary data; Process the data correctly; Display the result. The statistics can be viewed in the game client in the Port in the Profile → Summary: Please note that the win rate is shown for a specific battle type, take this into account when processing the data. Let’s find out how to get the data. To work with game client files, you need to extract them with the help of a utility. We unpack the directory res\gui\unbound to create our mod. The files will be extracted to “..\World_of_Warships\res_unpack\gui\unbound”. In the extracted files, we need to find files working with win rate statistics. Let’s search all the files by the word “victory” as the closes one in terms of meaning and have a look at the result: The search results will contain the file dock.xml (this is our port) and the closest match. As our profile is in the port, it is logical to start searching this file. We open dock.xml and look at the matching area. We will find the winRate attribute in the line above: Looks like this is what we want. We can see that this parameter is in the statData field; now let’s see where it is. We go up and discover that statData initializes in the main block <block className="PlayerSummary">, It is also a property of dataComponent located in statDataEntity. Let’s look at the content of statData. Unfortunately, you cannot use debugging tools when working with XML files, therefore we create a simple text block to display the content. We add the style class, so that the text color is white and not black by default: As some parameters can contain not only string and numerical values but also information in the object format, we use the method reflect() similar to the function rtrace() in AS3 to have the desired parameter displayed correctly. As this block displays black text I recommend adding the textDefault class to the block to make the text white and outlined in order to simplify tracing. Please note! To have changes made to the XML file displayed in the game client, you need to assemble an SWF file https://forum.worldofwarships.ru/topic/51786-правка-unbound-xml/, put it in “World_of_Warships\res_mods\<game_version>\gui\flash”, put USSExpressionsLoader.xml next to it with the path to the SWF file added to it, put the updated XML file in “World_of_Warships\res_mods\<game_version>\gui\unbound” and start the game. We assemble the SWF file again after every change. When we go to Profile → Summary (remember that statistics are displayed in the Summary in the player profile) we see statData content displayed there: If we change the type of battle to have statistics displayed in the profile, we will see changes in statData as well: now data are displayed for the selected battle type. In the obtained data, we find shipsList consisting of dictionaries with fields for every ship, including winRate. We can also see in dock.xml that shipsList is also contained in dataComponent and is declared in a separate variable. We can consider the first task done. We now know that the win rate for very ship is contained in shipsList in dataComponent. Now let’s see how to get the same data for the ship carousel. First of all, we need to display statistics by a certain battle type selected next to the Battle! button. Let’s find this parameter in the code. As you can see below, the battleType variable is responsible for the type of battle: We can suppose that this variable or something similar to it should also be located in the block close to the Battle! button element. Let’s try to find this button element and search for something related to “button” and “battle”. We will find the following elements: StartBattleButtonBig and StartBattleButtonSmall, as well as BattleTypeChooser below: Looks like it’s what we need. We study these elements and see the following: There is a variable selectedBattle containing the selected battle type selectedBattle.type. Now we know how to get access to the selected battle type. Now let’s find out how to get shipsList for the selected battle type. We already know that dataComponent is contained in statDataEntity. Let’s see what we can use there: While searching for shipsList we could notice that the entity statDataEntity is an element of the collection statDataEntities. When we have a closer look at this collection we’ll see that it consists of one element and contains such components as dataComponent and rankedSeasonHistory. If you take an entity with a different component also containing the dataComponent component and look into it, you will see that dataComponent of this entity contains information related to the selected component. You can see that the component rankedSeasonHistory contains the field gameType responsible for the battle type. So, if we set the selected battle type for this component we can get shipsList with the necessary win rate from dataComponent. Let’s check out our hypothesis. Note that you use a dot when accessing the object field (“object.field”) as it is its property in AS3. In the code below, you can see a binding giving us an entity with a component filtered by the required field: Let’s use it. Now let’s get the selected battle type value. Let’s take the entity containing the component rankedSeasonHistory with the selected battle type, and get shipsList from dataComponent (that our entity will have, as we already know) and display it on the screen: So, we see the list of ships filtered by battle type with fields showing their win rate (the string representation is winRate, the numerical representation is winRateNum). Let’s select another battle type and notice that shipsList now has data on ships we played in this type of battle. So, we can say that the second task has also been completed. Now let’s get down to visualizing the result. First, we need to find the element where we will display our win rate. We are looking for a ship carousel and a ship slot in it. Searching for a carousel in all XML files will return a lot of matches, but on closer inspection you will find our dock.xml. If we search a bit using a simple text block with the value “Hello World!” as a debugging instrument (see documentation, the Blocks section) we will find the main carousel element CarouselItem: Here we can process our ship list and get the win rate for every ship. First, let’s get the list filtered by the battle type: When working with the list we use the binding indexOf allowing us to get a list item for the current ship slot. It’s obvious that a separate ship with various properties will be defined for every carousel slot, and a ship ID will probably be among them as well. When scrolling down we will see that it is so: With the help of the binding indexOf we will get a list item index for the current ship slot and take the value winRate. Let’s have a look at the result: As you see we have the win rate displayed for every ship depending on the selected battle type. In our next step, let’s find the slot element, both big and small, to place the win rate inside the slot. The search will result in finding ShipCarouselDefaultSlot – a slot of the regular size, and below there will be the small slot ShipCarouselSmallSlot. Let’s find out how data is passed to a slot, for example, the ship tier and bindings used for that. In the slot element, let’s find a block responsible for placing the ship tier value: Here we can also see what text style is used, as well as the way of positioning the block inside the element. Now let’s see how this parameter is passed to the slot element: Let’s pass our win rate the same way: Then we add a block displaying values with the same top and bottom margins and text style similar to the ship tier so that all slot elements match visually: Let’s add finishing touches now, namely, color gradation of the win rate similar to the tank mod and set the following condition: if there is no win rate the text block remains empty. To do it, we take a numerical representation of the win rate and the binding <bind name="style" value="'textColor'; …”> to change the text color: Let’s repeat the block for a small slot: As a result, we get the mod displaying the ship’s win rate for a selected battle type in a small and ordinary carousel. PS. Don’t forget to reassemble the SWF file after every change to the XML document and replace files in corresponding folders in res_mods.
  12. MatroseFuchs

    [ModAPI] Documentation

    FlashAPI - StageModule "StageModule" methods allow you to work with "Stage". Available methods: gameAPI.stage gameAPI.stage.addChild(child:displayObject) gameAPI.stage.addChildAt(child:displayObject, index:int) gameAPI.stage.removeChild(child:displayObject) gameAPI.stage.removeChildAt(index:int) gameAPI.stage.width() gameAPI.stage.height() gameAPI.stage.addChild(child:displayObject) It works in a way similar to the "addChild" method, it adds a "displayObject" to the "Stage" to visualize the object. The input argument "child" is a Flash object that is being created. gameAPI.stage.addChildAt(child:displayObject, index:int) Like the "addChildAt" method, it adds a DispalyObject to a certain layer of the Stage.The input arguments: "child" - a Flash object that is being created; index - an indexing number of the layer where a DisplayObject should be added. gameAPI.stage.removeChild(child:displayObject) The method removes a DispalyObject from the Stage.The input argument "child" is a DisplayObject that should be removed from the Stage. gameAPI.stage.removeChildAt(index:int) The method removes the top layer from the Stage. The input argument "index" is an indexing number of the layer where a DisplayObject should be removed. gameAPI.stage.width() The method returns the Stage width. The returned value is a "Number" type of data. gameAPI.stage.height() The method returns the Stage height. The returned value is a "Number" type of data.
  13. MatroseFuchs

    Unbound framework (documentation)

    A list of available bindings UbChildBinding UbInstanceBinding UbEventBinding  UbSyncBinding  UbRepeatBinding  UbGeneratorBinding  UbDraggableBinding  UbClikListBinding  UbStyleBinding  UbStyleClassBinding  UbAppearBinding  UbTransitionBinding  UbTooltipBinding  UbSequenceBinding  UbPropertyBinding  UBVariablesBinding  UbCatchEventBinding  UbDispatchBinding  UbDispatchDelayResetBinding  UbChangeDispatchBinding  UbCountdownBinding  UbClockBinding UbContainsBinding UbFileBinding UbEventSequenceBinding UbTimeFormatBinding UbRestrictFeedbackBinding UbIndexOfBinding UBAccountLevelBinding SFMRequestBinding and SFMActionBinding FocusBinding InputMappingBinding UbScopeTraceBinding UbSubstituteBinding UbEventPlaySoundBinding DesignerCollectionBinding ConcatBinding ClipboardBinding ColorTransformBinding SliceBinding ResourceBinding DHCollectionGeneratorBinding GSTimelineBinding WowsResizeBinding UbFadeBinding UbPluralTextBinding UbContextMenuBinding UbBlurLayerBinding, UbBlurMapBinding UbWatchBinding ActionIsDisplayBinding UbRepeatWithScopeHoldBinding UbStageSizeBinding UBClickSplitBinding UbLinearChartBinding UBServerTimeBinding UbFeatureCheckBinding UbGeneratorBinding UbInOutActionBinding UbIMEEnableBinding UbFadeBinding UbBlurLayerBinding, UbBlurMapBinding UbStageSizeBinding UBClickSplitBinding UbLinearChartBinding
  14. MatroseFuchs

    Unbound framework (documentation)

    Bindings Bindings are directives assigning different behavior to elements: synchronization with the data model, tooltip display, drag-and-drop, etc. Bindings are defined as follows: (bind %binding_name% "binding_expression1; binding_expression2; ..."). The binding expressions syntax is a subset of the JS / AS3 syntax as it supports lines, numbers, true, false, null, arithmetical, logical operations, comparison operators, access to array elements via [], access to object properties via . and a ternary operator. Binding expressions are calculated for the current scope (i.e. "player.name" is in fact "scope.player.name"). When an element is instantiated by the framework, a scope object is created automatically where the programmer can enter any data at their own choice. To control data in the scope you may write controllers that will obtain data from the game logic (e.g. via GameInfoHolder), process them and fill the scope with them. public class NewWindowController extends UbController { public var gameInfoHolder:GameInfoHolder; override public function init(... params):void { scope.playerName = ... // grab player name from GameInfoHolder } } For the controller not to be cut by a linker (or whatever this thing is called in SWF's compilation), you need to import it in the main window class and declare a private variable of a corresponding type. When instantiating, necessary variables are injected into controllers – the framework does it for every public field. All public methods of the controller are imported to the scope it is linked to. A controller can be declared as follows: (bind controller "lesta.dialogs.new_window.NewWindowController; arg1; arg2; ...") Calculated arg1, arg2, arg3, ... are passed to the init method of the controller. Frequently used controllers
  15. MatroseFuchs

    ModAPI (discussion)

    Update The documentation translated and published: