Development News #191 — The New Beginnings

What are we currently working on.
User avatar
Arrakis
 
Posts: 5466
Joined: 25 Oct 2013, 14:11
Location: Sparksvaard, the middle world; the world of people.

Development News #191 — The New Beginnings

Post by Arrakis » 25 Apr 2020, 15:29

Image

Hello, Feudalists!
A lot has been happening this week. Godenland has been wiped clean, and players have poured into this beautiful world to claim their lands and build their settlements. Of course, as it usually goes in the game development, it couldn’t go without some small hiccups.
We have received a number of reports about server crashes and their relation to the monuments, and since then we’ve been investigating the issue in both, the code and the wipe script itself. During that time we have worked with the guild leaders and assisted them with recovery of materials and rebuilding their monuments. As we’ve been digging deeper and deeper into the code and server logs, after several hours of work and with new reports about other sources of the server crashes, we’ve finally got to the bottom of this and permanently fixed the issue, which actually wasn’t related to monument building.
We’re continuing on with the fixes of issues that surfaced after the wipe. One of those problems is the missing refund of God’s Coins, Decorator’s Kits and/or Believer Tools we’ve mentioned before. We understand how important this problem is for you and are doing our best to see the reason some of the players are still missing their items. The other issue is related to the issues with some of the fiefs that are acting as expanded while not being claimed by anyone.The problem will be patched soon, returning these fiefs to their normal sizes.
Last thing we want to share is some of the data from before the wipe. More specifically, guild ratings. You have all put in a lot of work to build your settlements and to raise your kingdoms. You have kept growing as you’ve claimed new lands by building new outposts and as you’ve conquered the lands of your enemies. All this was reflected in the guild ranking and we want to highlight the top guilds in the world in three categories:

Top 10 by rank & rating:
  1. [DV] Deus Vult (ID: 68)
  2. [KoT] Kingdom of Turul (ID: 99)
  3. [KoLF] Kingdom of Longfellows (ID: 241)
  4. [ODB] Order of the Drunken Bears (ID: 324)
  5. [WS] West Slavs (ID: 274)
  6. [AZ] Askanjeros Zwirblers (ID: 29)
  7. [HYD] HYDRA (ID: 3403)
  8. [KB] Kingsbridge (ID: 91)
  9. [MAS] The Kingdom of Masons (ID: 233)
  10. [HTA] HERITAGE (ID: 2519)
Top 5 by territory rating:
  1. [DV] Deus Vult (ID: 68)
  2. [MAS] The Kingdom of Masons (ID: 233)
  3. [KoT] Kingdom of Turul (ID: 99)
  4. [KoLF] Kingdom of Longfellows (ID: 241)
  5. [ODB] Order of the Drunken Bears (ID: 324)
Top 5 by wealth:
  1. [DV] Deus Vult (ID: 68)
  2. [HYD] HYDRA (ID: 3403)
  3. [CVE] Clan Vakteneik (ID: 71)
  4. [KoLF] Kingdom of Longfellows (ID: 241)
  5. [JdR] Jinetes de Rohan (ID: 3)
Congratulations folks! You’ve all done absolutely incredible work! We can’t wait to see the results of your further endeavors.

Have a great weekend everyone!

— The Team


User avatar
Nefezer
 
Posts: 41
Joined: 09 Feb 2018, 17:17

Re: Development News #191 — The New Beginnings

Post by Nefezer » 27 Apr 2020, 19:19

Good afternoon.

I want my automatic splitter back.

Sincerely,
A stressful dissident subscriber.


File: InventoryGui.cs
Code: Select all
//-----------------------------------------------------------------------------

function showSplitStackItemDialog(%quantity1, %max_stack_size1, %quantity2, %max_stack_size2, %bitmap, %name)
{
   SplitStackItem.init(%quantity1, %max_stack_size1, %quantity2, %max_stack_size2, %bitmap, %name, %name);
   SplitStackItem.toggle();
}
//-----------------------------------------------------------------------------

function ShowInventory(%val)
{
   if (%val)
      ShowHideInventory();
}
//-----------------------------------------------------------------------------

//SplitStackItem
//-----------------------------------------------------------------------------

function SplitStackItem::init(%this, %quantity1, %max_stack_size1, %quantity2, %max_stack_size2, %bitmap, %name)
{
   $CurQuantity = %quantity1 + %quantity2;
   $MaxStackSize1 = %max_stack_size1;
   $MaxStackSize2 = %max_stack_size2;

   if ($CurQuantity < $MaxStackSize1)
      $MaxStackSize1 = $CurQuantity;

   if ($CurQuantity < $MaxStackSize2)
      $MaxStackSize2 = $CurQuantity;

   if ($MaxStackSize1 < $MaxStackSize2)
      $MaxStackSize1 = $MaxStackSize1 + 1;
   else if ($MaxStackSize2 < $MaxStackSize1)
      $MaxStackSize2 = $MaxStackSize2 + 1;

   $Quantity1 = %quantity1;
   
   sbLeft.range = "1 " @ strformat("%d", $MaxStackSize1 - 1);
   sbRight.range = "1 " @ strformat("%d", $MaxStackSize2 - 1);

   SliderCount.range = strformat("%d", $CurQuantity - $MaxStackSize1 + 1) @ " " @ strformat("%d", $MaxStackSize2 - 1);

   sbLeft.text =  %quantity1;
   sbRight.text =  %quantity2;
    itemImage.bitmap = %bitmap;
   itemName.setText("<just:center>" @ %name);
   SliderCount.value = %quantity2;
}
//-----------------------------------------------------------------------------
function SplitStackItem::btnCancel(%this)
{
   cancelSplitStackItem();
   Canvas.popDialog(%this);
}
//-----------------------------------------------------------------------------
function SplitStackItem::btnOK(%this)
{
   applySplitStackItem($Quantity1, getTrailingNumber(sbLeft.text), getTrailingNumber(sbRight.text));
   Canvas.popDialog(%this);
}
//-----------------------------------------------------------------------------
function SplitStackItem::btnSplitAll(%this)
{
   %w1 = getTrailingNumber(sbLeft.text);
   %w2 = getTrailingNumber(sbRight.text);
   applySplitStackItem($Quantity1, %w1, %w2);
   $Quantity1 = $Quantity1 - %w2;
   %w1 = %w1 - %w2;
   while ($Quantity1>%w2)
   {
      applySplitStackItem($Quantity1, %w1, %w2);
      $Quantity1 = $Quantity1 - %w2;
      %w1 = %w1 - %w2;
   }
   Canvas.popDialog(%this);
}
//-----------------------------------------------------------------------------
function SplitStackItem::toggle(%this)
{

   if (%this.isAwake())
   {
      Canvas.popDialog(%this);
   }
   else
   {
      Canvas.pushDialog(%this);
   }
}
//-----------------------------------------------------------------------------

function SplitStackItem::sbLeftOnValueChanged(%this)
{
   if (sbRight.text == $CurQuantity - getTrailingNumber(sbLeft.text))
      return;

   sbRight.text = $CurQuantity - getTrailingNumber(sbLeft.text);
   SliderCount.value = getTrailingNumber(sbRight.text);
}
//-----------------------------------------------------------------------------

function SplitStackItem::sbRightOnValueChanged(%this)
{
   if (sbLeft.text == $CurQuantity - getTrailingNumber(sbRight.text))
      return;

   sbLeft.text = $CurQuantity - getTrailingNumber(sbRight.text);
   SliderCount.value = getTrailingNumber(sbRight.text);
}
//-----------------------------------------------------------------------------

function SplitStackItem::SliderCountOnValueChanged(%this)
{
   if (sbRight.text == SliderCount.getValue())
      return;

   sbRight.text = SliderCount.getValue();
}
//-----------------------------------------------------------------------------

function sbLeft::onValueChanged(%this)
{
   SplitStackItem.sbLeftOnValueChanged();
}
//-----------------------------------------------------------------------------

function sbRight::onValueChanged(%this)
{
   SplitStackItem.sbRightOnValueChanged();
}
//-----------------------------------------------------------------------------

function SliderCount::onValueChanged(%this)
{
   SplitStackItem.SliderCountOnValueChanged();
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------


File: SplitStackItem.gui
Code: Select all
//--- OBJECT WRITE BEGIN ---
singleton GuiControlProfile(SplitStackTextCountProfile : GuiAtlas2ImageProfile ) {
   fontSize = 24;
   fontColor = "204 204 204";
   fontColorHL = "204 204 204";
   fontColorNA = "204 204 204";
   fontColorSEL = "204 204 204";
   justify = "center";
   textOffset = "0 -2";
   border = "none";
   numbersOnly = true;
   canKeyFocus = true;
};

%guiContent = new GuiControl(SplitStackItem)
{
   position = "0 0";
   extent = "100% 100%";
   horizSizing = "center";
   vertSizing = "center";
   profile = "GuiDefaultProfile";
   visible = "1";
   active = "1";
   hovertime = "1000";
   isContainer = "1";
   canSave = "1";
   canSaveDynamicFields = "1";

   new GuiWindowCtrl(SplitStackItemDlg)
   {
      position = "296 274";
      extent = "660 250";
      horizSizing = "center";
      vertSizing = "center";
      profile = "GuiWindowProfile";
      visible = "1";
      active = "1";
      hovertime = "1000";
      isContainer = "1";
      canSave = "1";
      canSaveDynamicFields = "1";
      resizeWidth = "0";
      resizeHeight = "0";
      canMove = "1";
      canClose = "1";
      canMinimize = "0";
      canMaximize = "0";
      canCollapse = "0";
      text = "";
      closeCommand ="SplitStackItem.btnCancel();";

      //background
      new GuiBitmapCtrl()
      {
         imageIndex = LearningWindowBackground;
         profile = "GuiAtlas3ImageProfile";
         position = "7 42";
         extent = "646 168";
         wrap = true;
      };
      
      // split item name and icon
      new GuiControl()
      {
         position = "7 42";
         extent = "200 168";
         profile = GuildBlackVertLineProfile;
         visible = "1";
         active = "1";
         hovertime = "1000";
         isContainer = "1";
         canSave = "1";
         canSaveDynamicFields = "1";

         new GuiBitmapCtrl(itemImage)
         {
            position = "0 0";
            extent = "100% 100%";
            //horizSizing = center;
            //vertSizing = center;
            profile = SplitStackItemIconProfile;
            visible = "1";
            active = "1";
            hovertime = "1000";
            isContainer = "1";
            bitmap = "";
            centered = "1";
         };
         
         //text background
         new GuiBitmapCtrl()
         {
            position = "0 110";
            extent = "100% 52";
            //horizSizing = center;
            //vertSizing = center;
            profile = GuiAtlas3ImageProfile;
            visible = "1";
            active = "1";
            hovertime = "1000";
            isContainer = "1";
            imageIndex = BattleBackground2;
            wrap = 0;
         };
         
         new GuiMLTextCtrl(itemName)
         {
            text = "";
            lineSpacing = "2";
            allowColorChars = "0";
            maxChars = "-1";
            useURLMouseCursor = "0";
            isContainer = "0";
            Profile = SplitStackItemTextNameProfile;
            HorizSizing = "center";
            position = "0 120";
            extent = "180 25";
            canSave = "1";
            Visible = "1";
            hovertime = "1000";
            canSaveDynamicFields = "0";
         };
      };
      
      // separator
      new GuiControl()
      {
         position = "207 42";
         extent = "20 168";
         //horizSizing = right;
         profile = GuiAtlas1TiledImageProfile;
         visible = "1";
         active = "1";
         hovertime = "1000";
         isContainer = "0";
         canSave = "1";
         canSaveDynamicFields = "1";
         LeftIndex0 = FringeLeftShadow;
      };

      // left count
      new GuiControl()
      {
         position = "220 69";
         extent = "80 35";
         horizSizing = right;
         vertSizing = bottom;
         profile = GuiAtlas3TiledImageProfile;
         visible = "1";
         active = "1";
         hovertime = "1000";
         isContainer = "1";
         canSave = "1";
         canSaveDynamicFields = "1";
         leftIndex0 = SmallHexagonalTextFieldLeft;
         backgroundIndex = SmallHexagonalTextFieldCenter;
         rightIndex0 = SmallHexagonalTextFieldRight;
         
         new GuiTextEditSliderCtrl(sbLeft)
         {
            format = "%d";
            renderArrow = "false";
            range = "0 1";
            increment = "1";
            focusOnMouseWheel = "0";
            historySize = "0";
            tabComplete = "0";
            sinkAllKeyEvents = "0";
            password = "0";
            passwordMask = "*";
            text = "0";
            maxLength = "1024";
            margin = "0 0 0 0";
            padding = "0 0 0 0";
            anchorTop = "1";
            anchorBottom = "0";
            anchorLeft = "1";
            anchorRight = "0";
            position = "0 0";
            extent = "80 35";
            horizSizing = right;
            vertSizing = bottom;
            profile = SplitStackTextCountProfile;
            visible = "1";
            active = "1";
            hovertime = "1000";
            isContainer = "1";
            canSave = "1";
            canSaveDynamicFields = "0";
         };
      };
      
      // right count
      new GuiControl()
      {
         position = "550 69";
         extent = "80 35";
         horizSizing = right;
         vertSizing = bottom;
         profile = GuiAtlas3TiledImageProfile;
         visible = "1";
         active = "1";
         hovertime = "1000";
         isContainer = "1";
         canSave = "1";
         canSaveDynamicFields = "1";
         leftIndex0 = SmallHexagonalTextFieldLeft;
         backgroundIndex = SmallHexagonalTextFieldCenter;
         rightIndex0 = SmallHexagonalTextFieldRight;

         new GuiTextEditSliderCtrl(sbRight)
         {
            format = "%d";
            renderArrow = "false";
            range = "0 1";
            increment = "1";
            focusOnMouseWheel = "0";
            historySize = "0";
            tabComplete = "0";
            sinkAllKeyEvents = "0";
            password = "0";
            passwordMask = "*";
            text = "0";
            maxLength = "1024";
            margin = "0 0 0 0";
            padding = "0 0 0 0";
            anchorTop = "1";
            anchorBottom = "0";
            anchorLeft = "1";
            anchorRight = "0";
            position = "0 0";
            extent = "80 35";
            horizSizing = "right";
            vertSizing = "bottom";
            profile = "SplitStackTextCountProfile";
            visible = "1";
            active = "1";
            hovertime = "1000";
            isContainer = "1";
            canSave = "1";
            canSaveDynamicFields = "0";
         };
      };

      // slider
      new CmGuiArrowSliderCtrl(SliderCount)
      {
         range = "0 100";
         ticks = "0";
         snap = "0";
         value = "0";
         position = "317 70";
         extent = "220 35";
         horizSizing = right;
         vertSizing = bottom;
         profile = GuiHorizSliderProfile;
         visible = "1";
         active = "1";
         hovertime = "1000";
         canSave = "1";
         canSaveDynamicFields = "0";
         trackVOffset = "8";
         thumbOffset = "0 0";
      };
      
      // button Loop
      new guiHorzTilingButtonCtrl()
      {
         text = GetMessageIDText(1339); // Loop
         groupNum = "-1";
         buttonType = "PushButton";
         useMouseEvents = "0";
         position = "365 135";
         extent = "120 44";
         profile = BuildPositionButtonProfile;
         imageIndex = H44Btn;
         visible = "1";
         active = "1";
         command = "SplitStackItem.btnSplitAll();";
      };

      // button Ok
      new guiHorzTilingButtonCtrl()
      {
         text = GetMessageIDText(1218); // Ok
         groupNum = "-1";
         buttonType = "PushButton";
         useMouseEvents = "0";
         position = "230 135";
         extent = "120 44";
         profile = BuildPositionButtonProfile;
         imageIndex = H44Btn;
         visible = "1";
         active = "1";
         command = "SplitStackItem.btnOK();";
      };

      // button Cancel
      new guiHorzTilingButtonCtrl()
      {
         text = GetMessageIDText(1113); // Cancel
         groupNum = "-1";
         buttonType = "PushButton";
         useMouseEvents = "0";
         position = "500 135";
         extent = "120 44";
         profile = BuildPositionButtonProfile;
         imageIndex = H44Btn;
         visible = "1";
         active = "1";
         command = "SplitStackItem.btnCancel();";
      };
   };
};
//--- OBJECT WRITE END ---


And what excuse are you going to give now? Hey? Am i giving you enough stress now? really? :twisted:
In a game in BETA version we have to cope with the stressed development team with black humor :twisted:

Return to Development News