Advertisement
rsklnkv

Traders Tool NA

Mar 15th, 2016
3,890
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <html>
  2.     <head>
  3.         <title>Trader assistance tool</title>
  4.         <script src="http://cdn.webix.com/edge/webix.js" type="text/javascript"></script>
  5.  
  6.         <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
  7.         <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
  8.         <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
  9.  
  10.         <link rel="stylesheet" href="http://cdn.webix.com/edge/webix.css" type="text/css">
  11.  
  12.     </head>
  13.  
  14. <body>
  15.     <div id="shards"></div>
  16.     <div id="search"></div>
  17.     <div id="results"></div>
  18.     <script>
  19.         var getShopFromId = function (id) {
  20.             for (i = 0; i < Shops.length; i++) {
  21.                 if (Shops[i].Id == id) {
  22.                     return Shops[i];
  23.                 }
  24.             }
  25.             return null;
  26.         };
  27.  
  28.         // get port by id
  29.         var getPortFromId = function (id) {
  30.             for (i = 0; i < Ports.length; i++) {
  31.                 if (Ports[i].Id == id) {
  32.                     return Ports[i];
  33.                 }
  34.             }
  35.             return "PORT NOT FOUND";
  36.         };
  37.  
  38.         // get nation from index
  39.         var getNationFromIdx = function (idx) {
  40.             return Nations.Nations[idx];
  41.         };
  42.  
  43.         var getNationFromName = function (name) {
  44.             for (var i = 0; i < Nations.Nations.length; i++) {
  45.                 if (Nations.Nations[i].Name == name) {
  46.                     return Nations.Nations[i];
  47.                 }
  48.             }
  49.             return null;
  50.         };
  51.  
  52.         var getNationIdxFromName = function (name) {
  53.             for (var i = 0; i < Nations.Nations.length; i++) {
  54.                 if (Nations.Nations[i].Name == name) {
  55.                     return i;
  56.                 }
  57.             }
  58.             return 0;
  59.         };
  60.  
  61.         var getPortFromName = function (name) {
  62.             for (var i = 0; i < Ports.length; i++) {
  63.                 if (Ports[i].Name == name) {
  64.                     return Ports[i];
  65.                 }
  66.             }
  67.             return null;
  68.         };
  69.  
  70.         // get item template from id
  71.         var getItemTemplateFromId = function (id) {
  72.             for (var itemTemplateIdx = 0; itemTemplateIdx < ItemTemplates.length; itemTemplateIdx++) {
  73.                 if (ItemTemplates[itemTemplateIdx].Id == id) {
  74.                     return ItemTemplates[itemTemplateIdx];
  75.                 }
  76.             }
  77.             return null;
  78.         };
  79.  
  80.         // get item template from name
  81.         var getItemTemplateFromName = function (name, ignoreClasses) {
  82.             for (var itemTemplateIdx = 0; itemTemplateIdx < ItemTemplates.length; itemTemplateIdx++) {
  83.                 if (ignoreClasses != null && ItemTemplates[itemTemplateIdx].ItemType.indexOf(ignoreClasses) != -1)
  84.                 {
  85.                     continue;
  86.                 }
  87.                 if (ItemTemplates[itemTemplateIdx].Name == name) {
  88.                     return ItemTemplates[itemTemplateIdx];
  89.                 }
  90.             }
  91.             return null;
  92.         };
  93.        
  94.         var distance_XZ = function (p0, p1) {
  95.             return (p0.x - p1.x) * (p0.x - p1.x) + (p0.z - p1.z) * (p0.z - p1.z);
  96.         };
  97.        
  98.         var distance_XY = function (p0, p1) {
  99.             return (p0.x - p1.x) * (p0.x - p1.x) + (p0.y - p1.y) * (p0.y - p1.y);
  100.         };
  101.     </script>
  102.  
  103.     <script>
  104.         function showTradersTool()
  105.         {
  106.             var searchAroundPort = null;
  107.             var searchDistance = 0;
  108.  
  109.             var suggestions = [];
  110.             var portSuggestions = [];
  111.  
  112.             var nationSelector = [];
  113.             var nationsEnabled = [];
  114.             for (var i = 0; i < Nations.Nations.length; i++) {
  115.                 nationSelector.push(
  116.                     {
  117.                         view: "toggle", label: Nations.Nations[i].Name, value: 1, onIcon: "check-square-o", offIcon: "square-o", type: "icon", id: "nationSelector_" + i.toString(),
  118.                         on: {
  119.                             onChange: function (value, obj) {
  120.                                 for (var i = 0; i < nationsEnabled.length; i++) {
  121.                                     nationsEnabled[i] = $$('nationSelector_' + i.toString()).getValue() == 1;
  122.                                 }
  123.                                 setupData();
  124.                             }
  125.                         }
  126.                     });
  127.                 nationsEnabled.push(true);
  128.             }
  129.  
  130.             var templateNames = [];
  131.             for (var t in ItemTemplates) {
  132.                 if (ItemTemplates[t].__type.indexOf("MaterialTemplate") != -1
  133.                     || ItemTemplates[t].__type.indexOf("ResourceTemplate") != -1) {
  134.                     suggestions.push(ItemTemplates[t].Name);
  135.                     templateNames.push(ItemTemplates[t].Name);
  136.                 }
  137.             }
  138.  
  139.             var shopNames = [];
  140.             for (var p in Shops) {
  141.                 suggestions.push(getPortFromId(Shops[p].Id).Name);
  142.                 shopNames.push(getPortFromId(Shops[p].Id).Name);
  143.                 portSuggestions.push(getPortFromId(Shops[p].Id).Name);
  144.             }
  145.  
  146.             function skipPort(id) {
  147.                 var port = getPortFromId(id);
  148.  
  149.                 if (!nationsEnabled[port.Nation]) {
  150.                     return true;
  151.                 }
  152.  
  153.                 if (searchAroundPort == null) {
  154.                     return false;
  155.                 }
  156.  
  157.                 if (distance_XY(searchAroundPort.sourcePosition, port.sourcePosition) > searchDistance) {
  158.                     return true;
  159.                 }
  160.  
  161.                 return false;
  162.             }
  163.  
  164.             var setupItemData = function (itemName) {
  165.                 var itemId = 0;
  166.                 var info = "";
  167.                 info += "<h1>" + itemName + "</h1>";
  168.  
  169.                 var item = getItemTemplateFromName(itemName, "Recipe");
  170.  
  171.                 // produced
  172.                 info += "<h3>Produced</h3>";
  173.                 info += "<ul class=\"list-group\">";
  174.                 for (var i = 0; i < Shops.length; i++) {
  175.                     for (var p = 0; p < Shops[i].ResourcesProduced.length; p++) {
  176.                         if (skipPort(Shops[i].Id)) continue;
  177.  
  178.                         if (Shops[i].ResourcesProduced[p].Key == item.Id) {
  179.                             info += " <span class=\"label label-default\">" + "<span class=\"label label-success label-pill pull-xs-left\">"
  180.                                         + (Shops[i].ResourcesProduced[p].Value * 24) + "</span> " + getPortFromId(Shops[i].Id).Name + "</span> ";
  181.                             break;
  182.                         }
  183.                     }
  184.                 }
  185.                 info += "</ul>";
  186.  
  187.                 // consumed
  188.                 info += "<h3>Consumed</h3>";
  189.                 info += "<ul class=\"list-group\">";
  190.                 for (var i = 0; i < Shops.length; i++) {
  191.                     for (var p = 0; p < Shops[i].ResourcesConsumed.length; p++) {
  192.                         if (skipPort(Shops[i].Id)) continue;
  193.  
  194.                         if (Shops[i].ResourcesConsumed[p].Key == item.Id) {
  195.                             info += " <span class=\"label label-default\">" + "<span class=\"label label-success label-pill pull-xs-left\">"
  196.                                         + (Shops[i].ResourcesConsumed[p].Value * 24) + "</span> " + getPortFromId(Shops[i].Id).Name + "</span> ";
  197.                             break;
  198.                         }
  199.                     }
  200.                 }
  201.                 info += "</ul>";
  202.  
  203.                 // available
  204.                 info += "<h3>Available</h3>";
  205.                 //info += " <span class=\"label label-default\">"
  206.                 //            + "<span class=\"label label-warning label-pill pull-xs-left\">" + "quantity" + "</span> "
  207.                 //            + "<span class=\"label label-danger label-pill pull-xs-left\">" + "sells" + "</span> "
  208.                 //            + "<span class=\"label label-info label-pill pull-xs-left\">" + "buys" + "</span> "
  209.                 //            + "port name" + "</span> ";
  210.                 //info += "<br/>";
  211.                 //info += "<br/>";
  212.  
  213.                 info += "<ul class=\"list-group\">";
  214.                 for (var i = 0; i < Shops.length; i++) {
  215.                     if (skipPort(Shops[i].Id)) continue;
  216.  
  217.                     for (var p = 0; p < Shops[i].RegularItems.length; p++) {
  218.                         if (Shops[i].RegularItems[p].TemplateId == item.Id) {
  219.                             var amount = Shops[i].RegularItems[p].Quantity;
  220.                             var sellPrice = Shops[i].RegularItems[p].SellPrice;
  221.                             var buyPrice = Shops[i].RegularItems[p].BuyPrice;
  222.  
  223.                             info += " <span class=\"label label-default\">"
  224.                                         + "<span class=\"label label-warning label-pill pull-xs-left\">" + amount + "</span> "
  225.                                         + "<span class=\"label label-danger label-pill pull-xs-left\">" + buyPrice + "</span> "
  226.                                         + "<span class=\"label label-info label-pill pull-xs-left\">" + sellPrice + "</span> "
  227.                                         + getPortFromId(Shops[i].Id).Name + "</span> ";
  228.  
  229.                             break;
  230.                         }
  231.                     }
  232.                 }
  233.                 info += "</ul>";
  234.  
  235.                 document.getElementById("results").innerHTML = info;
  236.             };
  237.  
  238.             var setupShopData = function (portName) {
  239.                 var info = "";
  240.                 info += "<h1>" + portName + "</h1>";
  241.  
  242.                 var port = getPortFromName(portName);
  243.                 var portShop = getShopFromId(port.Id);
  244.  
  245.                 // Produces
  246.                 info += "<h3>Produces</h3>";
  247.                 for (var p = 0; p < portShop.ResourcesProduced.length; p++) {
  248.                     var item = getItemTemplateFromId(portShop.ResourcesProduced[p].Key);
  249.                     var amount = portShop.ResourcesProduced[p].Value * 24;
  250.                     info += " <span class=\"label label-default\">" + "<span class=\"label label-success label-pill pull-xs-left\">" + amount + "</span> " + item.Name + "</span> ";
  251.                 }
  252.  
  253.                 // Consumes
  254.                 info += "<h3>Consumes</h3>";
  255.                 info += "<ul class=\"list-group\">";
  256.                 for (var p = 0; p < portShop.ResourcesConsumed.length; p++) {
  257.                     var item = getItemTemplateFromId(portShop.ResourcesConsumed[p].Key);
  258.                     var amount = portShop.ResourcesConsumed[p].Value * 24;
  259.                     info += " <span class=\"label label-default\">" + "<span class=\"label label-warning label-pill pull-xs-left\">" + amount + "</span> " + item.Name + "</span> ";
  260.                 }
  261.                 info += "</ul>";
  262.  
  263.                 // Stock
  264.                 info += "<h3>Stock</h3>";
  265.                 info += " <span class=\"label label-default\">"
  266.                             + "<span class=\"label label-warning label-pill pull-xs-left\">" + "quantity" + "</span> "
  267.                             + "<span class=\"label label-danger label-pill pull-xs-left\">" + "sells" + "</span> "
  268.                             + "<span class=\"label label-info label-pill pull-xs-left\">" + "buys" + "</span> "
  269.                             + "item name" + "</span> ";
  270.                 info += "<br/>";
  271.                 info += "<br/>";
  272.  
  273.                 //info += "<ul class=\"list-group\">";
  274.                 for (var p = 0; p < portShop.RegularItems.length; p++) {
  275.                     var item = getItemTemplateFromId(portShop.RegularItems[p].TemplateId);
  276.                     var amount = portShop.RegularItems[p].Quantity;
  277.                     var sellPrice = portShop.RegularItems[p].SellPrice;
  278.                     var buyPrice = portShop.RegularItems[p].BuyPrice;
  279.  
  280.                     info += " <span class=\"label label-default\">"
  281.                                 + "<span class=\"label label-warning label-pill pull-xs-left\">" + amount + "</span> "
  282.                                 + "<span class=\"label label-danger label-pill pull-xs-left\">" + buyPrice + "</span> "
  283.                                 + "<span class=\"label label-info label-pill pull-xs-left\">" + sellPrice + "</span> "
  284.                                 + item.Name + "</span> ";
  285.                 }
  286.                 //info += "</ul>";
  287.  
  288.                 document.getElementById("results").innerHTML = info;
  289.             };
  290.  
  291.             function setupData() {
  292.                 var name = $$('searchCombo').getValue();
  293.                 var searchAround = $$('searchAroundCombo').getValue();
  294.                 var distance = $$('radiusSlider').getValue();
  295.  
  296.                 searchAroundPort = getPortFromName(searchAround);
  297.                 searchDistance = distance_XY({ x: -4096, y: -4096 }, { x: 4096, y: 4096 }) * (distance / 100.0) * (distance / 100.0);
  298.  
  299.                 console.log(name + ", " + searchAround + ", " + searchDistance);
  300.  
  301.                 if (templateNames.indexOf(name) != -1) {
  302.                     setupItemData(name);
  303.                     showItemFilters(true);
  304.                 }
  305.                 if (shopNames.indexOf(name) != -1) {
  306.                     setupShopData(name);
  307.                     showItemFilters(false);
  308.                 }
  309.             }
  310.  
  311.             //console.info(shopsData);
  312.             webix.ui(
  313.                 {
  314.                     container: "search",
  315.                     rows:
  316.                         [
  317.                             {
  318.                                 cols:
  319.                                     [
  320.                                         {
  321.                                             view: "combo", label: "Port or item name:", labelWidth: 150, suggest: suggestions, id: "searchCombo",
  322.                                             on: {
  323.                                                 onChange: function () {
  324.                                                     setupData();
  325.                                                 }
  326.                                             }
  327.                                         }
  328.                                     ]
  329.                             },
  330.                             {
  331.                                 cols:
  332.                                     [
  333.                                         {
  334.                                             view: "combo", label: "Search around port:", labelPosition: "left", labelWidth: 150, suggest: portSuggestions, id: "searchAroundCombo",
  335.                                             on: {
  336.                                                 onChange: function () {
  337.                                                     var name = $$('searchAroundCombo').getValue();
  338.                                                     setupData();
  339.                                                 }
  340.                                             }
  341.                                         },
  342.                                         {
  343.                                             view: "slider", type: "alt", label: "Search distance:", labelWidth: 150, value: "100", id: "radiusSlider", on:
  344.                                                 {
  345.                                                     onChange: function () {
  346.                                                         setupData();
  347.                                                     }
  348.                                                 }
  349.                                         }
  350.                                     ]
  351.                             },
  352.                             {
  353.                                 cols: nationSelector
  354.                             }
  355.                         ]
  356.                 });
  357.  
  358.             function showItemFilters(show) {
  359.                 if (show)
  360.                 {
  361.                     $$('searchAroundCombo').enable();
  362.                     $$('radiusSlider').enable();
  363.                     for (var i = 0; i < nationSelector.length; i++) {
  364.                         $$('nationSelector_' + i.toString()).enable();
  365.                     }
  366.                 } else
  367.                 {
  368.                     $$('searchAroundCombo').disable();
  369.                     $$('radiusSlider').disable();
  370.                     for (var i = 0; i < nationSelector.length; i++) {
  371.                         $$('nationSelector_' + i.toString()).disable();
  372.                     }
  373.                 }
  374.             }
  375.             showItemFilters(false);
  376.         }
  377.     </script>
  378.  
  379.     <script>
  380.         function startTradersTool() {
  381.             if (typeof Ports === 'undefined'
  382.                 || typeof Nations === 'undefined'
  383.                 || typeof ItemTemplates === 'undefined'
  384.                 || typeof Shops === 'undefined'
  385.                 ) {
  386.                 console.log("Data is missing");
  387.  
  388.                 var text = "";
  389.  
  390.                 text += "<a class=\"navbar-brand\" href=\"#\">" + "Data is missing" + "</a>";
  391.                 text += "<a href=\"#\" onclick=\"window.location.reload(true);\">Change server/Reload</a>";
  392.  
  393.                 document.getElementById("shards").innerHTML = text;
  394.             } else {
  395.                 showTradersTool();
  396.             }
  397.         }
  398.  
  399.         var shards = [];
  400.         var realmConfigPath = "";
  401.  
  402.         function setActiveRealms(data)
  403.         {
  404.             shards = [];
  405.             for (var i = 0; i < data.data.length; i++) {
  406.                 shards.push({ name: data.data[i].title, url: data.data[i].name });
  407.             }
  408.             realmConfigPath = "https://storage.googleapis.com/nacleanopenworldprodshards/";
  409.            
  410.             showShardSelector();
  411.         }
  412.  
  413.         var usePublicShards = true;
  414.         if (usePublicShards)
  415.         {
  416.             var apiKey = "1ZptRtpXAyEaBe2SEp63To1aLmISuJj3Gxcl5ivl"; // TEMP, should be obtained from Slik
  417.             var serverListPath = "http://api.shipsofwar.net/servers?apikey=" + apiKey + "&callback=setActiveRealms";
  418.  
  419.             $.ajax({ url: serverListPath, dataType: 'jsonp', jsonpCallback: 'setActiveRealms'});
  420.         }
  421.  
  422.         function showShardSelector() {
  423.             var shardSelector = "";
  424.  
  425.             shardSelector += "Please select realm: ";
  426.             for (var i = 0; i < shards.length; i++)
  427.             {
  428.                 shardSelector += "<button type=\"button\" class=\"btn btn-default\" onclick=\"selectShard('" + shards[i].url + "')\">" + shards[i].name + "</button>";
  429.             }
  430.  
  431.             document.getElementById("shards").innerHTML = shardSelector;
  432.         }
  433.  
  434.         function loadScript(name)
  435.         {
  436.             return $.getScript(realmConfigPath + name + ".json");
  437.         }
  438.  
  439.         function changeRealm()
  440.         {
  441.             location.reload();
  442.         }
  443.  
  444.         function createShardSelector(name)
  445.         {
  446.             var text = "";
  447.  
  448.             text += "<a class=\"navbar-brand\" href=\"#\">" + name + "</a>";
  449.             text += "<a href=\"#\" onclick=\"window.location.reload(true);\">change</a>";
  450.  
  451.             document.getElementById("shards").innerHTML = text;
  452.         }
  453.  
  454.         function selectShard(name)
  455.         {
  456.             document.getElementById("shards").innerHTML = "Loading data for " + name;
  457.             loadScript("ItemTemplates_" + name).done(loadScript("Ports_" + name).done(loadScript("Nations_" + name).done(loadScript("Shops_" + name).done(
  458.                 function () {
  459.                     startTradersTool();
  460.                     createShardSelector(name);
  461.                 }))));
  462.         }
  463.  
  464.         if (!usePublicShards) {
  465.             showShardSelector();
  466.         }
  467.     </script>
  468.  
  469. </body>
  470.  
  471. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement