Ticket #4366: 4366_barterUI.patch
File 4366_barterUI.patch, 21.2 KB (added by , 7 years ago) |
---|
-
binaries/data/mods/public/gui/session/menu.js
diff --git a/binaries/data/mods/public/gui/session/menu.js b/binaries/data/mods/public/gui/session/menu.js index 12f2a02..a4493b3 100644
a b const STEP = 5; 28 28 // Shown in the trade dialog. 29 29 const g_IdleTraderTextColor = "orange"; 30 30 31 const BARTER_RESOURCE_AMOUNT_TO_SELL = 100; 32 const BARTER_BUNCH_MULTIPLIER = 5; 33 const BARTER_ACTIONS = ["Sell", "Buy"]; 34 var g_BarterSell; 35 31 36 var g_IsMenuOpen = false; 32 37 33 38 var g_IsDiplomacyOpen = false; … … function openTrade() 489 494 490 495 g_IsTradeOpen = true; 491 496 492 var updateButtons = function()497 let updateTradeButtons = function() 493 498 { 494 499 for (let res in button) 495 500 { … … function openTrade() 510 515 511 516 for (let i = 0; i < resCodes.length; ++i) 512 517 { 518 let resCode = resCodes[i]; 519 520 // Barter 521 let barterButton = {}; 522 for (let a of ["Buy", "Sell"]) 523 barterButton[a] = Engine.GetGUIObjectByName("barter" + a + "Button[" + i + "]"); 524 525 if (!g_BarterSell) 526 g_BarterSell = g_ResourceData.GetCodes()[0]; 527 528 let resource = getLocalizedResourceName(g_ResourceData.GetNames()[resCode], "withinSentence"); 529 barterButton.Buy.tooltip = sprintf(translate("Buy %(resource)s"), { "resource": resource }); 530 barterButton.Sell.tooltip = sprintf(translate("Sell %(resource)s"), { "resource": resource }); 531 532 barterButton.Sell.onPress = function() { 533 g_BarterSell = resCode; 534 }; 535 536 setPanelObjectPosition(Engine.GetGUIObjectByName("barterResource[" + i + "]"), i, i+1); 537 538 // Trade 513 539 let tradeResource = Engine.GetGUIObjectByName("tradeResource["+i+"]"); 514 540 if (!tradeResource) 515 541 { … … function openTrade() 519 545 520 546 setPanelObjectPosition(tradeResource, i, i+1); 521 547 522 let resCode = resCodes[i];523 proba[resCode] = proba[resCode] || 0;524 525 548 let icon = Engine.GetGUIObjectByName("tradeResourceIcon["+i+"]"); 526 549 icon.sprite = "stretched:session/icons/resources/" + resCode + ".png"; 527 550 … … function openTrade() 535 558 "sel": Engine.GetGUIObjectByName("tradeResourceSelection["+i+"]") 536 559 }; 537 560 561 proba[resCode] = proba[resCode] || 0; 562 538 563 let buttonResource = Engine.GetGUIObjectByName("tradeResourceButton["+i+"]"); 539 564 buttonResource.enabled = controlsPlayer(g_ViewedPlayer); 540 565 buttonResource.onpress = (function(resource){ … … function openTrade() 547 572 Engine.PostNetworkCommand({"type": "set-trading-goods", "tradingGoods": proba}); 548 573 } 549 574 selec = resource; 550 update Buttons();575 updateTradeButtons(); 551 576 }; 552 577 })(resCode); 553 578 … … function openTrade() 557 582 proba[resource] += Math.min(STEP, proba[selec]); 558 583 proba[selec] -= Math.min(STEP, proba[selec]); 559 584 Engine.PostNetworkCommand({"type": "set-trading-goods", "tradingGoods": proba}); 560 update Buttons();585 updateTradeButtons(); 561 586 }; 562 587 })(resCode); 563 588 … … function openTrade() 567 592 proba[selec] += Math.min(STEP, proba[resource]); 568 593 proba[resource] -= Math.min(STEP, proba[resource]); 569 594 Engine.PostNetworkCommand({"type": "set-trading-goods", "tradingGoods": proba}); 570 update Buttons();595 updateTradeButtons(); 571 596 }; 572 597 })(resCode); 573 598 } 574 update Buttons();599 updateTradeButtons(); 575 600 576 601 let traderNumber = Engine.GuiInterfaceCall("GetTraderNumber", g_ViewedPlayer); 577 Engine.GetGUIObjectByName("landTraders").caption = getIdleLandTradersText(traderNumber); 578 Engine.GetGUIObjectByName("shipTraders").caption = getIdleShipTradersText(traderNumber); 602 Engine.GetGUIObjectByName("traders").caption = getIdleLandTradersText(traderNumber) + "\n\n" + getIdleShipTradersText(traderNumber); 579 603 Engine.GetGUIObjectByName("tradeDialogPanel").hidden = false; 580 604 } 581 605 606 function updateBarterButtons() 607 { 608 let resCodes = g_ResourceData.GetCodes(); 609 if (!g_BarterSell) 610 g_BarterSell = resCodes[0]; 611 612 let canBarter = Engine.GuiInterfaceCall("PlayerCanBarter", g_ViewedPlayer); 613 Engine.GetGUIObjectByName("barterNoMarketsMessage").hidden = canBarter; 614 Engine.GetGUIObjectByName("barterResources").hidden = !canBarter; 615 if (!canBarter) 616 return; 617 618 for (let i = 0; i < resCodes.length; ++i) 619 { 620 let resCode = resCodes[i]; 621 let barterButton = {}; 622 let barterIcon = {}; 623 let barterAmount = {}; 624 for (let a of ["Buy", "Sell"]) 625 { 626 barterButton[a] = Engine.GetGUIObjectByName("barter" + a + "Button[" + i + "]"); 627 barterIcon[a] = Engine.GetGUIObjectByName("barter" + a + "Icon[" + i + "]"); 628 barterAmount[a] = Engine.GetGUIObjectByName("barter" + a + "Amount[" + i + "]"); 629 } 630 let selectionIcon = Engine.GetGUIObjectByName("barterSellSelection[" + i + "]"); 631 632 633 let amountToSell = BARTER_RESOURCE_AMOUNT_TO_SELL; 634 if (Engine.HotkeyIsPressed("session.massbarter")) 635 amountToSell *= BARTER_BUNCH_MULTIPLIER; 636 637 let isSelected = resCode == g_BarterSell; 638 let grayscale = isSelected ? "color: 0 0 0 100:grayscale:" : ""; 639 640 // do we have enough of this resource to sell? 641 let neededRes = {}; 642 neededRes[resCode] = amountToSell; 643 let canSellCurrent = Engine.GuiInterfaceCall("GetNeededResources", { 644 "cost": neededRes, 645 "player": g_ViewedPlayer, 646 }) ? "color:255 0 0 80:" : ""; 647 648 // Let's see if we have enough resources to barter. 649 neededRes = {}; 650 neededRes[g_BarterSell] = amountToSell; 651 let canBuyAny = Engine.GuiInterfaceCall("GetNeededResources", { 652 "cost": neededRes, 653 "player": g_ViewedPlayer, 654 }) ? "color:255 0 0 80:" : ""; 655 656 barterIcon.Sell.sprite = canSellCurrent + "stretched:" + grayscale + "session/icons/resources/" + resCode + ".png"; 657 barterIcon.Buy.sprite = canBuyAny + "stretched:" + grayscale + "session/icons/resources/" + resCode + ".png"; 658 659 barterAmount.Sell.caption = "-" + amountToSell; 660 let prices = Engine.GuiInterfaceCall("GetBarterPrices"); 661 barterAmount.Buy.caption = "+" + Math.round(prices.sell[g_BarterSell] / prices.buy[resCode] * amountToSell); 662 663 barterButton.Buy.onPress = function() { 664 Engine.PostNetworkCommand({ 665 "type": "barter", 666 "sell": g_BarterSell, 667 "buy": resCode, 668 "amount": amountToSell 669 }); 670 }; 671 672 barterButton.Buy.hidden = isSelected; 673 barterButton.Buy.enabled = controlsPlayer(g_ViewedPlayer); 674 barterButton.Sell.hidden = false; 675 selectionIcon.hidden = !isSelected; 676 } 677 }; 678 582 679 function getIdleLandTradersText(traderNumber) 583 680 { 584 681 let active = traderNumber.landTrader.trading; -
binaries/data/mods/public/gui/session/selection_panels.js
diff --git a/binaries/data/mods/public/gui/session/selection_panels.js b/binaries/data/mods/public/gui/session/selection_panels.js index 6bc6e12..b7a98d0 100644
a b let g_FormationsInfo = new Map(); 33 33 34 34 let g_SelectionPanels = {}; 35 35 36 let g_BarterSell;37 38 36 g_SelectionPanels.Alert = { 39 37 "getMaxNumberOfItems": function() 40 38 { 41 39 return 3; 42 40 }, 43 "conflictsWith": [ "Barter"],41 "conflictsWith": [], 44 42 "getItems": function(unitEntStates) 45 43 { 46 44 let ret = []; … … g_SelectionPanels.Alert = { 95 93 } 96 94 }; 97 95 98 g_SelectionPanels.Barter = {99 "getMaxNumberOfItems": function()100 {101 return 4;102 },103 "rowLength": 4,104 "conflictsWith": ["Alert", "Garrison"],105 "getItems": function(unitEntStates)106 {107 if (unitEntStates.every(state => !state.barterMarket))108 return [];109 return g_ResourceData.GetCodes();110 },111 "setupButton": function(data)112 {113 // data.item is the resource name in this case114 let button = {};115 let icon = {};116 let amount = {};117 for (let a of BARTER_ACTIONS)118 {119 button[a] = Engine.GetGUIObjectByName("unitBarter" + a + "Button[" + data.i + "]");120 icon[a] = Engine.GetGUIObjectByName("unitBarter" + a + "Icon[" + data.i + "]");121 amount[a] = Engine.GetGUIObjectByName("unitBarter" + a + "Amount[" + data.i + "]");122 }123 let selectionIcon = Engine.GetGUIObjectByName("unitBarterSellSelection[" + data.i + "]");124 125 let amountToSell = BARTER_RESOURCE_AMOUNT_TO_SELL;126 if (Engine.HotkeyIsPressed("session.massbarter"))127 amountToSell *= BARTER_BUNCH_MULTIPLIER;128 129 if (!g_BarterSell)130 g_BarterSell = g_ResourceData.GetCodes()[0];131 132 amount.Sell.caption = "-" + amountToSell;133 let prices;134 for (let state of data.unitEntStates)135 if (state.barterMarket)136 {137 prices = state.barterMarket.prices;138 break;139 }140 141 amount.Buy.caption = "+" + Math.round(prices.sell[g_BarterSell] / prices.buy[data.item] * amountToSell);142 143 let resource = getLocalizedResourceName(g_ResourceData.GetNames()[data.item], "withinSentence");144 button.Buy.tooltip = sprintf(translate("Buy %(resource)s"), { "resource": resource });145 button.Sell.tooltip = sprintf(translate("Sell %(resource)s"), { "resource": resource });146 147 button.Sell.onPress = function() {148 g_BarterSell = data.item;149 updateSelectionDetails();150 };151 152 button.Buy.onPress = function() {153 Engine.PostNetworkCommand({154 "type": "barter",155 "sell": g_BarterSell,156 "buy": data.item,157 "amount": amountToSell158 });159 };160 161 let isSelected = data.item == g_BarterSell;162 let grayscale = isSelected ? "color: 0 0 0 100:grayscale:" : "";163 164 // do we have enough of this resource to sell?165 let neededRes = {};166 neededRes[data.item] = amountToSell;167 let canSellCurrent = Engine.GuiInterfaceCall("GetNeededResources", {168 "cost": neededRes,169 "player": data.player170 }) ? "color:255 0 0 80:" : "";171 172 // Let's see if we have enough resources to barter.173 neededRes = {};174 neededRes[g_BarterSell] = amountToSell;175 let canBuyAny = Engine.GuiInterfaceCall("GetNeededResources", {176 "cost": neededRes,177 "player": data.player178 }) ? "color:255 0 0 80:" : "";179 180 icon.Sell.sprite = canSellCurrent + "stretched:" + grayscale + "session/icons/resources/" + data.item + ".png";181 icon.Buy.sprite = canBuyAny + "stretched:" + grayscale + "session/icons/resources/" + data.item + ".png";182 183 button.Buy.hidden = isSelected;184 button.Buy.enabled = controlsPlayer(data.player);185 button.Sell.hidden = false;186 selectionIcon.hidden = !isSelected;187 188 setPanelObjectPosition(button.Sell, data.i, data.rowLength);189 setPanelObjectPosition(button.Buy, data.i + data.rowLength, data.rowLength);190 return true;191 }192 };193 194 96 g_SelectionPanels.Command = { 195 97 "getMaxNumberOfItems": function() 196 98 { … … g_SelectionPanels.Garrison = { 430 332 return 12; 431 333 }, 432 334 "rowLength": 4, 433 "conflictsWith": [ "Barter"],335 "conflictsWith": [], 434 336 "getItems": function(unitEntStates) 435 337 { 436 338 if (unitEntStates.every(state => !state.garrisonHolder)) … … g_SelectionPanels.Upgrade = { 1217 1119 */ 1218 1120 let g_PanelsOrder = [ 1219 1121 // LEFT PANE 1220 "Barter", // Must always be visible on markets1221 1122 "Garrison", // More important than Formation, as you want to see the garrisoned units in ships 1222 1123 "Alert", 1223 1124 "Formation", -
binaries/data/mods/public/gui/session/selection_panels_helpers.js
diff --git a/binaries/data/mods/public/gui/session/selection_panels_helpers.js b/binaries/data/mods/public/gui/session/selection_panels_helpers.js index 6b9f507..e5b1f03 100644
a b 1 const BARTER_RESOURCE_AMOUNT_TO_SELL = 100;2 const BARTER_BUNCH_MULTIPLIER = 5;3 const BARTER_ACTIONS = ["Sell", "Buy"];4 1 const GATE_ACTIONS = ["lock", "unlock"]; 5 2 6 3 const UPGRADING_NOT_STARTED = -2; -
deleted file binaries/data/mods/public/gui/session/selection_panels_left/barter_panel.xml
diff --git a/binaries/data/mods/public/gui/session/selection_panels_left/barter_panel.xml b/binaries/data/mods/public/gui/session/selection_panels_left/barter_panel.xml deleted file mode 100644 index 85de11d..0000000
+ - 1 <?xml version="1.0" encoding="utf-8"?>2 <object name="unitBarterPanel"3 size="4 68 100% 100%"4 hidden="true"5 >6 <repeat count="4">7 8 <!-- Sell -->9 <object name="unitBarterSellButton[n]" style="iconButton" type="button" size="0 0 46 46" tooltip_style="sessionToolTipBottomBold" hidden="true">10 <object name="unitBarterSellIcon[n]" type="image" ghost="true" size="3 3 100%-3 100%-3"/>11 <object name="unitBarterSellAmount[n]" ghost="true" style="resourceText" type="text" size="0 0 100% 50%"/>12 <object name="unitBarterSellSelection[n]" hidden="true" type="image" ghost="true" size="3 3 100%-3 100%-3" sprite="stretched:session/icons/corners.png"/>13 </object>14 15 <!-- Buy -->16 <object name="unitBarterBuyButton[n]" style="iconButton" type="button" size="0 0 46 46" tooltip_style="sessionToolTipBottomBold" hidden="true">17 <object name="unitBarterBuyIcon[n]" type="image" ghost="true" size="3 3 100%-3 100%-3"/>18 <object name="unitBarterBuyAmount[n]" ghost="true" style="resourceText" type="text" size="0 0 100% 50%"/>19 </object>20 21 </repeat>22 23 </object> -
binaries/data/mods/public/gui/session/session.js
diff --git a/binaries/data/mods/public/gui/session/session.js b/binaries/data/mods/public/gui/session/session.js index ada8705..3d3714a 100644
a b function updateGUIObjects() 768 768 updateBuildingPlacementPreview(); 769 769 updateTimeNotifications(); 770 770 updateIdleWorkerButton(); 771 updateBarterButtons(); 771 772 772 773 if (g_ViewedPlayer > 0) 773 774 { -
binaries/data/mods/public/gui/session/top_panel/button_trade.xml
diff --git a/binaries/data/mods/public/gui/session/top_panel/button_trade.xml b/binaries/data/mods/public/gui/session/top_panel/button_trade.xml index 787c1f7..6f59e92 100644
a b 7 7 > 8 8 <!-- TODO make the button less ugly --> 9 9 <object size="0 0 100% 100%" name="tradeButtonImage" type="image" sprite="stretched:session/icons/economics.png" ghost="true"/> 10 <translatableAttribute id="tooltip"> Trade</translatableAttribute>10 <translatableAttribute id="tooltip">Barter & Trade</translatableAttribute> 11 11 <action on="Press"> 12 12 toggleTrade(); 13 13 </action> -
binaries/data/mods/public/gui/session/trade_window.xml
diff --git a/binaries/data/mods/public/gui/session/trade_window.xml b/binaries/data/mods/public/gui/session/trade_window.xml index 537eac5..14f6905 100644
a b 1 1 <?xml version="1.0" encoding="utf-8"?> 2 2 <object name="tradeDialogPanel" 3 size="50%- 134 50%-130 50%+134 50%+100"3 size="50%-80 50%-280 50%+80 50%+136" 4 4 type="image" 5 5 hidden="true" 6 6 sprite="ModernDialog" 7 z="100" 7 8 > 8 9 <object type="text" style="TitleText" size="50%-96 -16 50%+96 16"> 9 <translatableAttribute id="caption"> Trade</translatableAttribute>10 <translatableAttribute id="caption">Barter & Trade Goods</translatableAttribute> 10 11 </object> 11 12 12 <!-- Trading goods --> 13 <object name="tradeGoods" size="20 50 100%-20 82"> 14 <object name="tradeHeader" size="0 0 180 100%" type="text" style="ModernLabelText" text_align="left" ghost="true"> 15 <translatableAttribute id="caption">Trading goods selection:</translatableAttribute> 13 14 <!-- Barter Goods --> 15 <object size="24 24 100%-24 33%"> 16 17 <object name="barterHeader" size="8 0 100% 32" type="text" style="ModernLeftLabelText"> 18 <translatableAttribute id="caption">Barter</translatableAttribute> 16 19 </object> 20 <object size="0 28 100% 29" type="image" sprite="ModernGoldLine"/> 21 22 <object size="0 38 100% 38+84"> 23 24 <object size="0 0 60 41" type="text" style="ModernRightLabelText"> 25 <translatableAttribute id="caption">Sell:</translatableAttribute> 26 </object> 27 28 <object size="0 100%-41 60 100%" type="text" style="ModernRightLabelText"> 29 <translatableAttribute id="caption">Buy:</translatableAttribute> 30 </object> 31 32 <object size="72 0 100% 100%" type="text" style="ModernLabelText" name="barterNoMarketsMessage"> 33 <translatableAttribute id="caption">No Markets Available</translatableAttribute> 34 </object> 35 36 <object name="barterResources" size="72 0 100% 100%"> 37 <repeat count="8"> 38 <object name="barterResource[n]" size="0 0 58 100%"> 39 40 <!-- Sell --> 41 <object name="barterSellButton[n]" style="iconButton" type="button" size="0 0 41 41" tooltip_style="sessionToolTipBottomBold" hidden="true"> 42 <object name="barterSellIcon[n]" type="image" ghost="true" size="3 3 100%-3 100%-3"/> 43 <object name="barterSellAmount[n]" ghost="true" style="resourceText" type="text" size="0 0 100% 50%"/> 44 <object name="barterSellSelection[n]" hidden="true" type="image" ghost="true" size="3 3 100%-3 100%-3" sprite="stretched:session/icons/corners.png"/> 45 </object> 46 47 <!-- Buy --> 48 <object name="barterBuyButton[n]" style="iconButton" type="button" size="0 100%-41 41 100%" tooltip_style="sessionToolTipBottomBold" hidden="true"> 49 <object name="barterBuyIcon[n]" type="image" ghost="true" size="3 3 100%-3 100%-3"/> 50 <object name="barterBuyAmount[n]" ghost="true" style="resourceText" type="text" size="0 0 100% 50%"/> 51 </object> 17 52 18 <object size="180 0 100% 100%" name="tradeResources">19 <repeat count="8">20 <object name="tradeResource[n]" size="0 0 58 32">21 <object name="tradeResourceButton[n]" size="4 0 36 100%" type="button" style="StoneButton">22 <object name="tradeResourceIcon[n]" type="image" ghost="true"/>23 <object name="tradeResourceSelection[n]" type="image" sprite="stretched:session/icons/corners.png" ghost="true"/>24 <object name="tradeResourceText[n]" type="text" style="ModernLabelText" ghost="true"/>25 </object>26 <object name="tradeArrowUp[n]" size="36 0 52 50%" type="button" style="iconButton">27 <object type="image" ghost="true" sprite="StoneArrowUp"/>28 53 </object> 29 <object name="tradeArrowDn[n]" size="36 50% 52 100%" type="button" style="iconButton"> 30 <object type="image" ghost="true" sprite="StoneArrowDn"/> 54 </repeat> 55 </object> 56 57 </object> 58 </object> 59 60 <!-- Trading goods --> 61 <object size="24 33%+32 100%-24 100%-64"> 62 63 <object name="tradeHeader" size="8 0 100% 32" type="text" style="ModernLeftLabelText"> 64 <translatableAttribute id="caption">Trade</translatableAttribute> 65 </object> 66 <object size="0 28 100% 29" type="image" sprite="ModernGoldLine"/> 67 68 <object name="tradeGoods" size="0 38 100% 38+32"> 69 70 <object size="0 0 60 100%" type="text" style="ModernRightLabelText"> 71 <translatableAttribute id="caption">Goods:</translatableAttribute> 72 </object> 73 74 <object size="72 0 100% 100%" name="tradeResources"> 75 <repeat count="8"> 76 <object name="tradeResource[n]" size="0 0 58 32"> 77 78 <object name="tradeResourceButton[n]" size="4 0 36 100%" type="button" style="StoneButton"> 79 <object name="tradeResourceIcon[n]" type="image" ghost="true"/> 80 <object name="tradeResourceSelection[n]" type="image" sprite="stretched:session/icons/corners.png" ghost="true"/> 81 <object name="tradeResourceText[n]" type="text" style="ModernLabelText" ghost="true"/> 82 </object> 83 <object name="tradeArrowUp[n]" size="36 0 52 50%" type="button" style="iconButton"> 84 <object type="image" ghost="true" sprite="StoneArrowUp"/> 85 </object> 86 <object name="tradeArrowDn[n]" size="36 50% 52 100%" type="button" style="iconButton"> 87 <object type="image" ghost="true" sprite="StoneArrowDn"/> 88 </object> 89 31 90 </object> 32 </object> 33 </repeat> 91 </repeat> 92 </object> 93 34 94 <object name="tradeHelp" size="100%-24 4 100% 28" enabled="false" type="button" style="StoneButton" tooltip_style="sessionToolTipBold"> 35 95 <object size="20% 15% 80% 75%" type="image" ghost="true" sprite="iconInfoWhite"/> 36 96 </object> 97 37 98 </object> 38 </object>39 99 40 <object name="tradeStatistics" size="20 90 100%-20 168"> 41 <object name="landTraders" size="0 0 100% 50%" type="text" style="ModernLabelText" text_align="left" ghost="true" /> 42 <object name="shipTraders" size="0 50% 100% 100%" type="text" style="ModernLabelText" text_align="left" ghost="true" /> 100 <object name="traders" size="8 88 100% 100%" type="text" style="ModernLeftTabLabelText"/> 101 43 102 </object> 44 103 45 104 <object size="50%-64 100%-50 50%+64 100%-22" type="button" style="StoneButton"> -
binaries/data/mods/public/gui/session/unit_actions.js
diff --git a/binaries/data/mods/public/gui/session/unit_actions.js b/binaries/data/mods/public/gui/session/unit_actions.js index 4f8e7b2..297dc91 100644
a b var g_EntityCommands = 1260 1260 return false; 1261 1261 1262 1262 return { 1263 "tooltip": translate(" Select trading goods"),1263 "tooltip": translate("Barter & Trade"), 1264 1264 "icon": "economics.png" 1265 1265 }; 1266 1266 }, -
binaries/data/mods/public/simulation/components/GuiInterface.js
diff --git a/binaries/data/mods/public/simulation/components/GuiInterface.js b/binaries/data/mods/public/simulation/components/GuiInterface.js index 932c8cd..64d948e 100644
a b GuiInterface.prototype.GetTradingGoods = function(player) 1954 1954 return QueryPlayerIDInterface(player).GetTradingGoods(); 1955 1955 }; 1956 1956 1957 GuiInterface.prototype.GetBarterPrices = function() 1958 { 1959 return Engine.QueryInterface(SYSTEM_ENTITY, IID_Barter).GetPrices(); 1960 }; 1961 1962 GuiInterface.prototype.PlayerCanBarter = function(player) 1963 { 1964 let playerEnt = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager).GetPlayerByID(player); 1965 return Engine.QueryInterface(SYSTEM_ENTITY, IID_Barter).PlayerHasMarket(playerEnt); 1966 }; 1967 1957 1968 GuiInterface.prototype.OnGlobalEntityRenamed = function(msg) 1958 1969 { 1959 1970 this.renamedEntities.push(msg); … … let exposedFunctions = { 2018 2029 2019 2030 "GetTraderNumber": 1, 2020 2031 "GetTradingGoods": 1, 2032 "GetBarterPrices": 1, 2033 "PlayerCanBarter": 1, 2021 2034 }; 2022 2035 2023 2036 GuiInterface.prototype.ScriptCall = function(player, name, args)