Steemnova - hints and ratio for market

in utopian-io •  2 months ago


Steemnova is active opensource project based on the old Ogame gameplay.

Hint box with the resources on the ships

When you send a fleet to any planet you can see the status in the 2 places.

  1. Overview page
    Zrzut ekranu z 2018-05-08 22-39-50.png
  2. Fleet page
    Zrzut ekranu z 2018-05-08 22-41-33.png

On the first one you can see the resources as a flying box, but on the second not, but when you want to return the fleet you have to use the second view. It is easy to made mistake.


Peek 2018-05-08 22-43.gif


  1. I've added the resources form SQL as template parameters


            $FlyingFleetList[]  = array(
                'id'            => $fleetsRow['fleet_id'],
                'mission'       => $fleetsRow['fleet_mission'],
                'state'         => $fleetsRow['fleet_mess'],
                'no_returnable'         => $fleetsRow['fleet_no_m_return'],
                'startGalaxy'   => $fleetsRow['fleet_start_galaxy'],
                'startSystem'   => $fleetsRow['fleet_start_system'],
                'startPlanet'   => $fleetsRow['fleet_start_planet'],
                'startTime'     => _date($LNG['php_tdformat'], $fleetsRow['fleet_start_time'], $USER['timezone']),
                'endGalaxy'     => $fleetsRow['fleet_end_galaxy'],
                'endSystem'     => $fleetsRow['fleet_end_system'],
                'endPlanet'     => $fleetsRow['fleet_end_planet'],
+               'metal'     => $fleetsRow['fleet_resource_metal'],
+               'crystal'       => $fleetsRow['fleet_resource_crystal'],
+               'deuterium'     => $fleetsRow['fleet_resource_deuterium'],
+               'dm'        => $fleetsRow['fleet_resource_darkmatter'],
                'endTime'       => _date($LNG['php_tdformat'], $fleetsRow['fleet_end_time'], $USER['timezone']),
                'amount'        => pretty_number($fleetsRow['fleet_amount']),
                'returntime'    => $returnTime,
                'resttime'      => $returnTime - TIMESTAMP,
                'FleetList'     => $FleetList[$fleetsRow['fleet_id']],
  1. I had to add the special box to the template


    {foreach name=FlyingFleets item=FlyingFleetRow from=$FlyingFleetList}
-   <td>{$LNG["type_mission_{$FlyingFleetRow.mission}"]}
+   <td>
+       <a data-tooltip-content="
+ <table style='width:200px'>
+  <tr>
+    <td style='width:50%;color:white'>{$LNG['tech'][901]}</td>
+    <td style='width:50%;color:white'>{$FlyingFleetRow.metal}</td>
+  </tr>
+  <tr>
+    <td style='width:50%;color:white'>{$LNG['tech'][902]}</td>
+    <td style='width:50%;color:white'>{$FlyingFleetRow.crystal}</td>
+  </tr>
+  <tr>
+    <td style='width:50%;color:white'>{$LNG['tech'][903]}</td>
+    <td style='width:50%;color:white'>{$FlyingFleetRow.deuterium}</td>
+  </tr>
+  <tr>
+    <td style='width:50%;color:white'>{$LNG['tech'][921]}</td><td style='width:50%;color:white'>{$}</td>
+  </tr>
+ </table>" class="tooltip">
+           {$LNG["type_mission_{$FlyingFleetRow.mission}"]}
+       </a>
    {if $FlyingFleetRow.state == 1}
        <br><a title="{$LNG.fl_returning}">{$LNG.fl_r}</a>

Ratio on the market

** Code bases on the GreaseMonkey script of one of the players (zbo0j THX!). I will describe whole part but I will show what was copied. It is here only to understand the whole PR and my work **


On the old market is a lot of offers which are very expensive. User need to calculate all to see which offer is the best.

The solution is to add the ratio offer based on some values. Because 1metal is not equal 1 crystal in the game. Suggested ratio is 4:2:1 but in some parts of game can be different so it is difficult to have one hard coded value.

New market view:
Zrzut ekranu z 2018-05-08 23-09-34.png


I've prepared the new table with the reference ratios designed by zboOj

+<table style="width:50%">
+   <tr class="ratio">
+       <td>Reference ratio:</td>
+       <td>
+           <input type="number" name="ratio-metal" value="4" style="width: 30%"/>:<input type="number" name="ratio-cristal" value="2" style="width: 30%"/>:<input type="number"name="ratio-deuterium" value="1" style="width: 30%"/>
+       </td>
+   </tr>
  1. Change the old ratio i total columns to empty
        <td class="resource_crystal">{$FlyingFleetRow.fleet_resource_crystal|number}</td>
        <td class="resource_deuterium">{$FlyingFleetRow.fleet_resource_deuterium|number}</td>
-       <td>{$|number}</td>
-       <td>{$FlyingFleetRow.ratio}</td>
+       <td class="total_value"></td>
+       <td class="ratio"></td>
        <td data-time="{$FlyingFleetRow.end}">{pretty_fly_time({$FlyingFleetRow.end})}</td>
        <td class="no-background no-border">

Data will be fill by JS function.

  1. JS part

This part is created by zboOj and get the data from table with jquery and the ratios.

+function calculateRatios(){
+   /*
+    * Thanks to zb0oj for idea and a part of source code!
+    */
+   var referenceRatios = {
+           'metal': $('input[name=ratio-metal]').val(),
+           'cristal': $('input[name=ratio-cristal]').val(),
+           'deuterium': $('input[name=ratio-deuterium]').val()
+   };
+   $('table#tradeList tbody tr').not('').each(function() {
+           var tradeOffer = $(this);
+           var offer = {
+               'metal': parseInt(tradeOffer.find('.resource_metal').html().replace(/\./g,'')),
+               'cristal': parseInt(tradeOffer.find('.resource_crystal').html().replace(/\./g,'')),
+               'deuterium': parseInt(tradeOffer.find('.resource_deuterium').html().replace(/\./g,'')),
+               'getReference': function() {
+                   return this.metal / referenceRatios.metal + this.cristal / referenceRatios.cristal + this.deuterium / referenceRatios.deuterium;
+               }
+           };
+           var cost = {
+               'isMetal': (tradeOffer.find('.wanted-resource-1').length > 0),
+               'isCristal': (tradeOffer.find('.wanted-resource-2').length > 0),
+               'isDeuterium': (tradeOffer.find('.wanted-resource-3').length > 0),
+               'wantedAmount': parseInt(tradeOffer.find('.wanted-resource-amount').html().replace(/\./g,'')),
+               'getReference': function() {
+                   if(this.isMetal) return this.wantedAmount / referenceRatios.metal;
+                   if(this.isCristal) return this.wantedAmount / referenceRatios.cristal;
+                   if(this.isDeuterium) return this.wantedAmount / referenceRatios.deuterium;
+               }
+           };

This part is created by me. Ratio calculation and adding data to the new columns to the table. If ratio is better than reference ratio offer is green, when it is worse than red.

+           var ratio =  offer.getReference() / cost.getReference();
+           tradeOffer.find('.total_value').text(offer.getReference().toFixed(0));
+           var n = tradeOffer.find('.ratio').text(ratio.toFixed(2));
+           if(ratio < 1) {
+               n.css({'color': '#F00'});
+           } else {
+               n.css({'color': '#0F0'});
+           }
+       });

Data is also updated when you change the reference ratio:

 $(document).ready(function() {
    interval    = window.setInterval(Refrash, 1000);
+   $('input[name=ratio-metal], input[name=ratio-crystal], input[name=ratio-deuterium]').change(function(e){
+       calculateRatios();
+   });
+   calculateRatios();


Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

You have a minor grammatical mistake in the following sentence:

If ratio is better then reference ratio offer is green, when it is worse then red.
It should be better than instead of better then.


Thank you grammar bot :-)

Thanks for the contribution!

While we appreciate everyone who contributions to open source projects, I'd recommend that for future contributions you combine more work into one post. Especially since in this case quite a large portion was made by zboOj.

Need help? Write a ticket on
Chat with us on Discord.


Thank you. Usually I do it but this two PRs were near to time limit. I've add the zboOj part to this post because is also a part of my PR. But I understand.

Bedaŭrinde mi nenion komprenas de tia afero. Unuflanke mi ŝatas la blokĉenan agadon, aliaflanke mi timas, ke tiaj aĵoj estiĝas pli kaj pli komplikaj. Bonan tagon aŭ nokton !