Advertisement
Hird194

syntax error, unexpected TOKEN_IDENT, expecting TOKEN_FUNCTI

Oct 23rd, 2018
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 59.32 KB | None | 0 0
  1. /*
  2. Copyright © CD Projekt RED 2015
  3. */
  4.  
  5. struct SItemGenericStat
  6. {
  7. var statName : string;
  8. var value : float;
  9. var comparence : string;
  10. }
  11.  
  12. class W3TooltipComponent
  13. {
  14. protected var m_playerInv : CInventoryComponent;
  15. protected var m_itemInv : CInventoryComponent;
  16. protected var m_shopInv : CInventoryComponent;
  17. protected var m_flashValueStorage : CScriptedFlashValueStorage;
  18.  
  19. public function initialize( inventory : CInventoryComponent, flashValueStorage : CScriptedFlashValueStorage ) : void
  20. {
  21. m_playerInv = inventory;
  22. m_flashValueStorage = flashValueStorage;
  23. }
  24.  
  25. public function setCurrentInventory( invComponent : CInventoryComponent ):void
  26. {
  27. m_itemInv = invComponent;
  28. }
  29.  
  30. public function setShopInventory( invComponent : CInventoryComponent ):void
  31. {
  32. m_shopInv = invComponent;
  33. }
  34.  
  35.  
  36.  
  37. public function GetEmptySlotData( equipID : int ) : CScriptedFlashObject
  38. {
  39. var tooltipData : CScriptedFlashObject;
  40. tooltipData = m_flashValueStorage.CreateTempFlashObject();
  41. tooltipData.SetMemberFlashString("ItemType", GetLocStringByKeyExt(GetLocNameFromEquipSlot(equipID)) );
  42. tooltipData.SetMemberFlashString("Description", GetLocStringByKeyExt("panel_inventory_tooltip_empty_slot") );
  43. return tooltipData;
  44. }
  45.  
  46. public function GetEmptyPreparationSlotData( equipID : int, isLocked : bool ) : CScriptedFlashObject
  47. {
  48. var tooltipData : CScriptedFlashObject;
  49. tooltipData = m_flashValueStorage.CreateTempFlashObject();
  50.  
  51. if (isLocked)
  52. {
  53. tooltipData.SetMemberFlashString("Description", GetLocStringByKeyExt("panel_inventory_tooltip_locked_slot"));
  54. }
  55. else
  56. {
  57. tooltipData.SetMemberFlashString("Description", GetLocStringByKeyExt("panel_inventory_tooltip_empty_slot"));
  58. }
  59.  
  60.  
  61. if (equipID == EES_SilverSword || equipID == EES_SteelSword)
  62. {
  63. tooltipData.SetMemberFlashString("ItemType", GetLocStringByKeyExt("panel_inventory_paperdoll_slotname_oils") );
  64. }
  65. else
  66. {
  67. tooltipData.SetMemberFlashString("ItemType", GetLocStringByKeyExt(GetLocNameFromEquipSlot(equipID)) );
  68. }
  69.  
  70. return tooltipData;
  71. }
  72.  
  73.  
  74.  
  75. public function GetBaseItemData( item : SItemUniqueId, itemInvComponent : CInventoryComponent, optional isShopItem : bool, optional compareWithItem : SItemUniqueId, optional compareItemInv : CInventoryComponent ) : CScriptedFlashObject
  76. {
  77. var wplayer : W3PlayerWitcher;
  78. var tooltipData : CScriptedFlashObject;
  79. var genericStatsList : CScriptedFlashArray;
  80. var statsList : CScriptedFlashArray;
  81. var propsList : CScriptedFlashArray;
  82. var socketsList : CScriptedFlashArray;
  83.  
  84. var itemName : name;
  85. var itemLabel : string;
  86. var itemSlot : EEquipmentSlots;
  87. var equipedItem : SItemUniqueId;
  88. var equipedItemName : name;
  89. var equipedItemStats : array<SAttributeTooltip>;
  90.  
  91. var weightAttribute : SAbilityAttributeValue;
  92. var categoryName : name;
  93. var categoryLabel : string;
  94. var typeString : string;
  95. var typeDesc : string;
  96. var weightValue : float;
  97.  
  98. var primaryStatLabel : string;
  99. var primaryStatValue : float;
  100. var primaryStatOriginValue : float;
  101.  
  102. var primaryStatDiff : string;
  103. var primaryStatDiffValue : float;
  104. var primaryStatDiffStr : string;
  105. var eqPrimaryStatLabel : string;
  106. var eqPrimaryStatValue : float;
  107. var primaryStatDurabilityPenalty : float;
  108. var durMult : float;
  109.  
  110. var uniqueDescription : string;
  111. var durabilityValue : int;
  112. var durabilityStrValue : string;
  113. var durabilityLabel : string;
  114. var durabilityRatio : float;
  115.  
  116. var armorType : string;
  117. var notForSaleText : string;
  118.  
  119. var enableComparing : bool;
  120. var itemStats : array<SAttributeTooltip>;
  121. var compStats : array<SAttributeTooltip>;
  122. var isWeaponOrArmor : bool;
  123.  
  124. var isArmorOrWeapon : bool;
  125. var tmpStr : string;
  126.  
  127. var invItem : SInventoryItem;
  128. var invItemPrice : int;
  129. var invItemPriceString : string;
  130.  
  131. var allItems : array< SItemUniqueId >;
  132. var i,j : int;
  133. var m_schematicList, m_recipeList : array< name >;
  134. var itemCategory : name;
  135.  
  136. var requiredLevel : string;
  137. var additionalDescription : string;
  138. var alchRecipe : SAlchemyRecipe;
  139.  
  140. var craftSchematic : SCraftingSchematic;
  141. var craftItemName : name;
  142. var craftItemCategory : name;
  143. var craftItemSlot : EEquipmentSlots;
  144.  
  145. var ignorePrimaryStat : bool;
  146. var itemAttributePrefix : string;
  147.  
  148. var canBeCompared : bool;
  149. var itemLevel : int;
  150.  
  151. var definitionsMgr : CDefinitionsManagerAccessor;
  152.  
  153. if (!IsInited())
  154. {
  155. LogChannel('GUI_Tooltip', "W3TooltipComponent is not initialized, can't get tooltip data");
  156. return NULL;
  157. }
  158. if( !itemInvComponent.IsIdValid(item) )
  159. {
  160. LogChannel('GUI_Tooltip', "W3TooltipComponent.GetBaseItemData incorrect item ID");
  161. return NULL;
  162. }
  163.  
  164.  
  165.  
  166.  
  167. if (!compareItemInv)
  168. {
  169. compareItemInv = m_playerInv;
  170. }
  171.  
  172. definitionsMgr = theGame.GetDefinitionsManager();
  173. wplayer = GetWitcherPlayer();
  174. tooltipData = m_flashValueStorage.CreateTempFlashObject();
  175. propsList = tooltipData.CreateFlashArray();
  176. socketsList = tooltipData.CreateFlashArray();
  177. statsList = tooltipData.CreateFlashArray();
  178.  
  179. isArmorOrWeapon = itemInvComponent.IsItemAnyArmor(item) || itemInvComponent.IsItemWeapon(item) ;
  180. itemName = itemInvComponent.GetItemName(item);
  181. itemLabel = GetLocStringByKeyExt(itemInvComponent.GetItemLocalizedNameByUniqueID(item));
  182. // modCustomLocalizationFix++
  183. if (itemLabel == "")
  184. itemLabel = itemInvComponent.GetItemLocalizedNameByUniqueID(item);
  185. // modCustomLocalizationFix--
  186. itemSlot = itemInvComponent.GetSlotForItemId(item);
  187.  
  188.  
  189.  
  190. categoryName = itemInvComponent.GetItemCategory(item);
  191. additionalDescription = "";
  192. craftItemName = '';
  193.  
  194. if (categoryName == 'crafting_schematic')
  195. {
  196. craftSchematic = GetSchematicDataFromXML(itemName);
  197. craftItemName = craftSchematic.craftedItemName;
  198. }
  199. else
  200. if (categoryName == 'alchemy_recipe')
  201. {
  202. alchRecipe = GetRecipeDataFromXML(itemName);
  203. craftItemName = alchRecipe.cookedItemName;
  204. }
  205. if (craftItemName != '')
  206. {
  207.  
  208. craftItemCategory = definitionsMgr.GetItemCategory(craftItemName);
  209. itemInvComponent.GetItemStatsFromName(craftItemName, itemStats);
  210. wplayer.GetItemEquippedOnSlot(GetSlotForItemByCategory(craftItemCategory), equipedItem);
  211. additionalDescription = "<br/><br/><font size = '21' color = '#B58D45'>";
  212. additionalDescription += StrUpperUTF(GetLocStringByKeyExt(m_playerInv.GetItemLocalizedNameByName(craftItemName))) + "</font>";
  213. ignorePrimaryStat = false;
  214. itemAttributePrefix = "";
  215. }
  216. else
  217. {
  218. itemInvComponent.GetItemBaseStats(item, itemStats);
  219. if (compareItemInv.IsIdValid(compareWithItem))
  220. {
  221. equipedItem = compareWithItem;
  222. }
  223. else
  224. {
  225. wplayer.GetItemEquippedOnSlot(itemSlot, equipedItem);
  226. }
  227. ignorePrimaryStat = isArmorOrWeapon;
  228. if (isArmorOrWeapon)
  229. {
  230. itemAttributePrefix = "+";
  231. }
  232. }
  233.  
  234. if (categoryName == 'gwint')
  235. {
  236. additionalDescription += GetGwintCardDescription(GetWitcherPlayer().GetGwentCardIndex(itemName));
  237. }
  238.  
  239. if (itemInvComponent.ItemHasTag(item, 'ReadableItem') && itemInvComponent.IsBookRead(item))
  240. {
  241. additionalDescription += "<br/><font color=\"#19D900\">" + GetLocStringByKeyExt("book_already_known") + "</font>";
  242. }
  243.  
  244.  
  245.  
  246. AddItemStats(itemStats, statsList, tooltipData, ignorePrimaryStat, itemAttributePrefix);
  247. AddBuffStats(item, itemInvComponent, statsList, tooltipData);
  248.  
  249.  
  250.  
  251. primaryStatDiff = "none";
  252. primaryStatDiffValue = 0;
  253. primaryStatDiffStr = "";
  254. eqPrimaryStatValue = 0;
  255.  
  256. if (compareItemInv.IsIdValid(equipedItem))
  257. {
  258. equipedItemName = compareItemInv.GetItemName(equipedItem);
  259.  
  260. if (compareItemInv.GetItemCategory(equipedItem) == 'crossbow')
  261. {
  262. GetCrossbowPrimatyStat(equipedItem, compareItemInv, eqPrimaryStatLabel, eqPrimaryStatValue);
  263. }
  264. else
  265. {
  266. compareItemInv.GetItemPrimaryStat(equipedItem, eqPrimaryStatLabel, eqPrimaryStatValue);
  267. }
  268.  
  269. canBeCompared = isArmorOrWeapon;
  270. }
  271. else
  272. {
  273. canBeCompared = false;
  274. }
  275.  
  276. if (categoryName == 'crossbow')
  277. {
  278. GetCrossbowPrimatyStat(item, itemInvComponent, primaryStatLabel, primaryStatOriginValue);
  279. }
  280. else
  281. {
  282. itemInvComponent.GetItemPrimaryStat(item, primaryStatLabel, primaryStatOriginValue);
  283. }
  284.  
  285. if (isArmorOrWeapon)
  286. {
  287. primaryStatValue = RoundMath(primaryStatOriginValue);
  288. eqPrimaryStatValue = RoundMath(eqPrimaryStatValue);
  289. primaryStatDiff = GetStatDiff(primaryStatValue, eqPrimaryStatValue);
  290. primaryStatDiffValue = primaryStatValue - eqPrimaryStatValue;
  291. if (primaryStatDiffValue > 0)
  292. {
  293. primaryStatDiffStr = "<font color=\"#19D900\">+" + NoTrailZeros(primaryStatDiffValue) + "</font>";
  294. }
  295. else if (primaryStatDiffValue < 0)
  296. {
  297. primaryStatDiffStr = "<font color=\"#E00000\">" + NoTrailZeros(primaryStatDiffValue) + "</font>";
  298. }
  299. }
  300.  
  301. if (itemInvComponent.IsItemWeapon(item))
  302. {
  303. tooltipData.SetMemberFlashNumber("PrimaryStatDelta", .1);
  304. }
  305. else
  306. {
  307. tooltipData.SetMemberFlashNumber("PrimaryStatDelta", 0);
  308. }
  309.  
  310.  
  311.  
  312. weightValue = itemInvComponent.GetItemEncumbrance( item );
  313.  
  314. if (categoryName == 'horse_bag' || categoryName == 'horse_blinder' || categoryName == 'horse_saddle' )
  315. {
  316. categoryLabel = GetLocStringByKeyExt("item_category_misc");
  317. }
  318. else if (itemInvComponent.ItemHasTag(item, 'SecondaryWeapon'))
  319. {
  320. categoryLabel = GetLocStringByKeyExt("item_category_secondary");
  321. }
  322. else
  323. {
  324. categoryLabel = GetLocStringByKeyExt("item_category_" + categoryName);
  325. }
  326. typeString = GetLocStringByKeyExt(GetFilterTypeName( itemInvComponent.GetFilterTypeByItem(item) ));
  327.  
  328. uniqueDescription = "";
  329. if (!isArmorOrWeapon)
  330. {
  331. uniqueDescription = GetLocStringByKeyExt( itemInvComponent.GetItemLocalizedDescriptionByUniqueID(item) );
  332. }
  333. uniqueDescription += additionalDescription;
  334.  
  335. if (categoryName == 'armor'|| categoryName == 'pants' || categoryName == 'boots' || categoryName == 'gloves')
  336. {
  337. armorType = "";
  338. if (itemInvComponent.ItemHasTag(item, 'LightArmor'))
  339. {
  340. armorType = GetLocStringByKeyExt("item_type_light_armor");
  341. }
  342. else if (itemInvComponent.ItemHasTag(item, 'MediumArmor'))
  343. {
  344. armorType = GetLocStringByKeyExt("item_type_medium_armor");
  345. }
  346. else if (itemInvComponent.ItemHasTag(item, 'HeavyArmor'))
  347. {
  348. armorType = GetLocStringByKeyExt("item_type_heavy_armor");
  349. }
  350. typeDesc = armorType;
  351. }
  352. else
  353. {
  354. typeDesc = categoryLabel;
  355. }
  356.  
  357. if ( itemInvComponent.IsItemAnyArmor(item) || itemInvComponent.IsItemBolt(item) || itemInvComponent.IsItemWeapon(item) )
  358. {
  359. itemLevel = itemInvComponent.GetItemLevel( item );
  360. requiredLevel = itemInvComponent.GetItemLevelColorById( item ) + " " + GetLocStringByKeyExt( 'panel_inventory_item_requires_level' ) + " " + itemLevel + "</font>";
  361. }
  362. else
  363. {
  364. requiredLevel = "";
  365. }
  366.  
  367. tooltipData.SetMemberFlashString("RequiredLevel", requiredLevel);
  368.  
  369. if (categoryName == 'alchemy_recipe' )
  370. {
  371.  
  372. m_recipeList = GetWitcherPlayer().GetAlchemyRecipes();
  373. itemInvComponent.GetAllItems( allItems );
  374. for( j = 0; j < m_recipeList.Size(); j+= 1 )
  375. {
  376. if ( itemInvComponent.GetItemName(item) == m_recipeList[j] )
  377. {
  378. typeDesc = "<font color='#FF0000'>" + GetLocStringByKeyExt("item_recipe_known");
  379. break;
  380. }
  381. }
  382.  
  383. categoryLabel = GetLocStringByKeyExt("item_category_misc");
  384. }
  385. else if (categoryName == 'crafting_schematic' )
  386. {
  387.  
  388. m_schematicList = GetWitcherPlayer().GetCraftingSchematicsNames();
  389. itemInvComponent.GetAllItems( allItems );
  390. for( j = 0; j < m_schematicList.Size(); j+= 1 )
  391. {
  392. if ( itemInvComponent.GetItemName(item) == m_schematicList[j] )
  393. {
  394. typeDesc = "<font color='#FF0000'>" + GetLocStringByKeyExt("item_schematic_known");
  395. break;
  396. }
  397. }
  398. }
  399.  
  400.  
  401.  
  402. AddOilInfo(item, itemInvComponent, tooltipData);
  403. AddSocketsInfo(item, itemInvComponent, socketsList);
  404.  
  405. if ( m_shopInv )
  406. {
  407. if ( isShopItem == true )
  408. {
  409. invItemPrice = m_shopInv.GetItemPriceModified( item, false );
  410.  
  411. invItemPriceString = invItemPrice;
  412.  
  413. if (m_shopInv.GetItemQuantity(item) > 1)
  414. {
  415. invItemPriceString += " (" + (m_shopInv.GetItemQuantity(item) * invItemPrice) + ")";
  416. }
  417.  
  418. addGFxItemStat( propsList, "price", invItemPriceString, "panel_inventory_item_price" );
  419. }
  420. else
  421. {
  422. invItem = m_playerInv.GetItem( item );
  423. invItemPrice = m_shopInv.GetInventoryItemPriceModified( invItem, true );
  424.  
  425. if ( invItemPrice < 0 || m_playerInv.ItemHasTag(item, 'Quest'))
  426. {
  427. tooltipData.SetMemberFlashString("WarningMessage", GetLocStringByKeyExt("panel_shop_not_for_sale"));
  428. addGFxItemStat( propsList, "notforsale", " ");
  429. }
  430. else
  431. {
  432. invItemPriceString = invItemPrice;
  433.  
  434. if (m_playerInv.GetItemQuantity(item) > 1)
  435. {
  436. invItemPriceString += " (" + (m_playerInv.GetItemQuantity(item) * invItemPrice) + ")";
  437. }
  438. addGFxItemStat( propsList, "price", invItemPriceString, "panel_inventory_item_price" );
  439. }
  440. }
  441. }
  442. else
  443. {
  444. invItemPrice = itemInvComponent.GetItemPrice( item );
  445. invItemPriceString = invItemPrice;
  446.  
  447. if (itemInvComponent.GetItemQuantity(item) > 1)
  448. {
  449. invItemPriceString += " (" + (itemInvComponent.GetItemQuantity(item) * invItemPrice) + ")";
  450. }
  451.  
  452. addGFxItemStat( propsList, "price", invItemPriceString, "panel_inventory_item_price" );
  453. }
  454.  
  455. tmpStr = FloatToStringPrec( weightValue, 2 );
  456. addGFxItemStat(propsList, "weight", tmpStr, "attribute_name_weight");
  457.  
  458. durMult = 1;
  459. if (isArmorOrWeapon && !itemInvComponent.ItemHasTag(item, 'bolt'))
  460. {
  461. durabilityRatio = itemInvComponent.GetItemDurability(item) / itemInvComponent.GetItemMaxDurability(item);
  462. durabilityValue = RoundMath( durabilityRatio * 100);
  463. durabilityStrValue = IntToString(durabilityValue) + " %";
  464. durabilityLabel = GetLocStringByKeyExt("panel_inventory_tooltip_durability");
  465. if (durabilityValue <= theGame.params.ITEM_DAMAGED_DURABILITY)
  466. {
  467. durabilityStrValue = "<font color='#E70000'>" + durabilityStrValue + "</font>";
  468. durabilityLabel = "<font color='#E70000'>" + durabilityLabel + "</font>";
  469. tooltipData.SetMemberFlashString("DurabilityDescription", GetLocStringByKeyExt("tooltip_durability_description"));
  470. }
  471. addGFxItemStat(propsList, "repair", durabilityStrValue, durabilityLabel, true);
  472.  
  473. durMult = theGame.params.GetDurabilityMultiplier( durabilityRatio, itemInvComponent.IsItemWeapon(item));
  474. if (durMult < 1)
  475. {
  476. primaryStatDurabilityPenalty = primaryStatValue - RoundMath( primaryStatOriginValue * durMult );
  477. }
  478. }
  479.  
  480.  
  481.  
  482.  
  483. if (m_playerInv.IsIdValid(compareWithItem))
  484. {
  485. tooltipData.SetMemberFlashString("EquippedTitle", GetLocStringByKeyExt("panel_blacksmith_equipped"));
  486. }
  487.  
  488. tooltipData.SetMemberFlashUInt("ItemId", ItemToFlashUInt(item));
  489. tooltipData.SetMemberFlashString("ItemType", typeDesc);
  490. tooltipData.SetMemberFlashString("ItemName", itemLabel);
  491. tooltipData.SetMemberFlashString("ItemRarity", GetItemRarityDescription(item, itemInvComponent) );
  492. tooltipData.SetMemberFlashString("IconPath", itemInvComponent.GetItemIconPathByUniqueID(item) );
  493. tooltipData.SetMemberFlashString("ItemCategory", categoryLabel);
  494. tooltipData.SetMemberFlashString("Description", uniqueDescription);
  495.  
  496. tooltipData.SetMemberFlashArray("SocketsList", socketsList);
  497. tooltipData.SetMemberFlashArray("StatsList", statsList);
  498. tooltipData.SetMemberFlashArray("PropertiesList", propsList);
  499.  
  500. tooltipData.SetMemberFlashString("PrimaryStatLabel", primaryStatLabel);
  501. tooltipData.SetMemberFlashString("PrimaryStatDiff", primaryStatDiff);
  502. tooltipData.SetMemberFlashString("PrimaryStatDiffStr", primaryStatDiffStr);
  503. tooltipData.SetMemberFlashNumber("PrimaryStatValue", primaryStatValue);
  504. tooltipData.SetMemberFlashNumber("PrimaryStatDurabilityPenalty", primaryStatDurabilityPenalty);
  505.  
  506. tooltipData.SetMemberFlashBool("CanBeCompared", canBeCompared);
  507. tooltipData.SetMemberFlashBool("EnableFullScreenInfo", isArmorOrWeapon);
  508.  
  509. return tooltipData;
  510. }
  511.  
  512. // modCustomLocalizationFix++
  513. var schematicNameString : string;
  514. // modCustomLocalizationFix--
  515.  
  516. flashDataObj.SetMemberFlashString("appliedEnchantmentInfo", "<font face=\"$BoldFont\">" + GetLocStringByKeyExt(schematic.localizedName) + ":</font> " + description);
  517. // modCustomLocalizationFix++
  518. schematicNameString = GetLocStringByKeyExt(schematic.localizedName);
  519. if (schematicNameString == "")
  520. schematicNameString = schematic.localizedName;
  521. flashDataObj.SetMemberFlashString("appliedEnchantmentInfo", "<font face=\"$BoldFont\">" + schematicNameString + ":</font> " + description);
  522. // modCustomLocalizationFix--
  523. private function GetCrossbowPrimatyStat(itemId : SItemUniqueId, itemInvComponent : CInventoryComponent, out primaryStatLabel : string, out primaryStatValue : float):void
  524. {
  525. var itemOnSlot : SItemUniqueId;
  526. var crossbowPower : SAbilityAttributeValue;
  527. var crossbowStatValueMult : float;
  528.  
  529. crossbowPower = itemInvComponent.GetItemAttributeValue(itemId, 'attack_power');
  530. crossbowStatValueMult = crossbowPower.valueMultiplicative;
  531. if (crossbowStatValueMult == 0)
  532. {
  533.  
  534. crossbowStatValueMult = 1;
  535. }
  536. GetWitcherPlayer().GetItemEquippedOnSlot(EES_Bolt, itemOnSlot);
  537. if (GetWitcherPlayer().inv.IsIdValid(itemOnSlot))
  538. {
  539. GetWitcherPlayer().inv.GetItemPrimaryStat(itemOnSlot, primaryStatLabel, primaryStatValue);
  540. primaryStatValue = primaryStatValue * crossbowStatValueMult;
  541. }
  542. else
  543. {
  544. itemInvComponent.GetItemStatByName('Bodkin Bolt', 'PiercingDamage', primaryStatValue);
  545. primaryStatValue = primaryStatValue * crossbowStatValueMult;
  546. }
  547. primaryStatLabel = GetLocStringByKeyExt("panel_inventory_tooltip_damage");
  548. }
  549.  
  550.  
  551. private function AddSocketsInfo(itemId : SItemUniqueId, itemInvComponent : CInventoryComponent, out flashDataObj : CScriptedFlashArray):void
  552. {
  553. var socketsCount : int;
  554. var usedSocketsCount : int;
  555. var emptySocketsCount : int;
  556. var socketItems : array<name>;
  557. var idx : int;
  558. var curUpgradeName : name;
  559. var curUpgradeLocName : string;
  560.  
  561. var upgradeBonusValue : string;
  562. var upgradeBonus : float;
  563. var upgradeStats : array<SAttributeTooltip>;
  564. var upgradeStatFirst : SAttributeTooltip;
  565.  
  566. socketsCount = itemInvComponent.GetItemEnhancementSlotsCount( itemId );
  567. usedSocketsCount = itemInvComponent.GetItemEnhancementCount( itemId );
  568. emptySocketsCount = socketsCount - usedSocketsCount;
  569. itemInvComponent.GetItemEnhancementItems(itemId, socketItems);
  570.  
  571. for (idx = 0; idx < socketItems.Size(); idx+=1)
  572. {
  573. curUpgradeName = socketItems[idx];
  574. curUpgradeLocName = GetLocStringByKeyExt(itemInvComponent.GetItemLocalizedNameByName(curUpgradeName));
  575. // modCustomLocalizationFix++
  576. if (curUpgradeLocName == "")
  577. curUpgradeLocName = itemInvComponent.GetItemLocalizedNameByName(curUpgradeName);
  578. // modCustomLocalizationFix--
  579. itemInvComponent.GetItemStatsFromName(curUpgradeName, upgradeStats);
  580. if (upgradeStats.Size() > 0)
  581. {
  582. upgradeStatFirst = upgradeStats[0];
  583. if( upgradeStatFirst.percentageValue )
  584. {
  585. upgradeBonusValue = "<font color=\"#ACACAC\">+" + RoundMath(upgradeStatFirst.value * 100) + " %</font>";
  586. }
  587. else
  588. {
  589. upgradeBonusValue = "<font color=\"#ACACAC\">+" + RoundMath(upgradeStatFirst.value) + "</font>";
  590. }
  591. upgradeBonusValue += "<font color=\"#B69A68\"> " + upgradeStatFirst.attributeName + " (" + curUpgradeLocName + ")</font>";
  592. addGFxItemStat(flashDataObj, "equipped", upgradeBonusValue);
  593. }
  594. else
  595. {
  596. addGFxItemStat(flashDataObj, "equipped", curUpgradeLocName);
  597. }
  598. }
  599. upgradeBonusValue = "<font color=\"#515151\">" + GetLocStringByKeyExt("panel_blacksmith_empty_socket") + "</font>";
  600. for (idx = 0; idx < emptySocketsCount; idx+=1)
  601. {
  602. addGFxItemStat(flashDataObj, "empty", upgradeBonusValue);
  603. }
  604. }
  605.  
  606.  
  607. private function AddOilInfo(itemId : SItemUniqueId, itemInvComponent : CInventoryComponent, out flashDataObj : CScriptedFlashObject):void
  608. {
  609. var oilName : name;
  610. var oilLocName : string;
  611. var oilCharges : int;
  612. var oilMaxCharges : int;
  613. var oilBonus : float;
  614. var oilStats : array<SAttributeTooltip>;
  615. var oilStatFirst : SAttributeTooltip;
  616. var oilBonusValue : string;
  617.  
  618. oilName = itemInvComponent.GetSwordOil(itemId);
  619. if (oilName != '')
  620. {
  621. oilLocName = GetLocStringByKeyExt(itemInvComponent.GetItemLocalizedNameByName(oilName));
  622. oilCharges = itemInvComponent.GetItemModifierInt(itemId, 'oil_charges');
  623. oilMaxCharges = itemInvComponent.GetItemModifierInt(itemId, 'oil_max_charges');
  624. itemInvComponent.GetItemStatsFromName(oilName, oilStats);
  625. if (oilStats.Size() > 0)
  626. {
  627. oilStatFirst = oilStats[0];
  628. if( oilStatFirst.percentageValue )
  629. {
  630. oilBonusValue = "<font color=\"#ACACAC\">+" + RoundMath(oilStatFirst.value * 100) + " %</font>";
  631. }
  632. else
  633. {
  634. oilBonusValue = "<font color=\"#ACACAC\">+" + RoundMath(oilStatFirst.value) + "</font>";
  635. }
  636. }
  637. oilBonusValue = oilBonusValue + "<font color=\"#B69A68\"> " + oilStatFirst.attributeName + " (" + oilLocName + ")(" + oilCharges + "/" + oilMaxCharges + ")</font>";
  638. flashDataObj.SetMemberFlashString("appliedOilInfo", oilBonusValue);
  639. }
  640. }
  641.  
  642.  
  643. private function AddItemStats(itemStats : array<SAttributeTooltip>, out resultGFxArray : CScriptedFlashArray, rootGFxObject : CScriptedFlashObject, ignorePrimaryStat : bool, defaultPrefix : string):void
  644. {
  645. var l_flashObject : CScriptedFlashObject;
  646. var currentStat : SAttributeTooltip;
  647. var i, statsCount : int;
  648. var maxToxicity : int;
  649. var valuePrefix : string;
  650. var valuePostfix : string;
  651. var valueString : string;
  652.  
  653. statsCount= itemStats.Size();
  654. for( i = 0; i < statsCount; i += 1)
  655. {
  656. currentStat = itemStats[i];
  657. if (!ignorePrimaryStat || !currentStat.primaryStat)
  658. {
  659.  
  660. if (currentStat.originName == 'toxicity_offset')
  661. {
  662. currentStat.attributeName = GetAttributeNameLocStr('toxicity', false);
  663. currentStat.originName = 'toxicity';
  664. currentStat.value = 80;
  665. currentStat.percentageValue = false;
  666. }
  667.  
  668. if (currentStat.originName == 'toxicity')
  669. {
  670. maxToxicity = RoundMath(thePlayer.GetStatMax( BCS_Toxicity ));
  671. valuePrefix = "";
  672. valuePostfix = "/" + maxToxicity;
  673. }
  674. else
  675. if (currentStat.originName == 'duration')
  676. {
  677. valuePrefix = "";
  678. valuePostfix = " " + GetLocStringByKeyExt("per_second");
  679. }
  680. else
  681. {
  682. valuePrefix = defaultPrefix;
  683. valuePostfix = "";
  684. }
  685.  
  686. if( currentStat.percentageValue )
  687. {
  688. valueString = NoTrailZeros( RoundMath( currentStat.value * 100 ) ) + " %";
  689. }
  690. else
  691. {
  692. valueString = NoTrailZeros( RoundMath( currentStat.value ) );
  693. }
  694.  
  695. l_flashObject = rootGFxObject.CreateFlashObject();
  696. l_flashObject.SetMemberFlashString("id", NameToString(currentStat.originName));
  697. l_flashObject.SetMemberFlashString("name", currentStat.attributeName);
  698. l_flashObject.SetMemberFlashString("color", currentStat.attributeColor);
  699. l_flashObject.SetMemberFlashString("value", valuePrefix + valueString + valuePostfix);
  700. l_flashObject.SetMemberFlashNumber("floatValue", currentStat.value);
  701. resultGFxArray.PushBackFlashObject(l_flashObject);
  702. }
  703. }
  704. }
  705.  
  706.  
  707. private function AddBuffStats(itemId : SItemUniqueId, itemInvComponent : CInventoryComponent, out resultGFxArray : CScriptedFlashArray, rootGFxObject : CScriptedFlashObject) : void
  708. {
  709. var curFlashObject : CScriptedFlashObject;
  710. var buffDuration : float;
  711. var idx, len : int;
  712. var curBufValue : float;
  713. var curBufValueStr : string;
  714.  
  715. var t1:int;
  716. var t2:int;
  717.  
  718. if (itemInvComponent.ItemHasTag(itemId, 'Edibles') || itemInvComponent.ItemHasTag(itemId, 'Drinks'))
  719. {
  720. buffDuration = GetBuffDuration(itemId, itemInvComponent);
  721. }
  722. else if (itemInvComponent.IsItemBomb(itemId))
  723. {
  724. buffDuration = GetBuffDuration(itemId, itemInvComponent);
  725. }
  726.  
  727. if (buffDuration > 0)
  728. {
  729. len = resultGFxArray.GetLength();
  730. for (idx = 0; idx < len; idx+=1)
  731. {
  732. curFlashObject = resultGFxArray.GetElementFlashObject(idx);
  733.  
  734. if (curFlashObject.GetMemberFlashString("id") == NameToString('duration'))
  735. {
  736. curBufValue = curFlashObject.GetMemberFlashNumber("floatValue");
  737. curBufValue += buffDuration;
  738. curBufValueStr = NoTrailZeros( RoundMath( curBufValue) ) + " " + GetLocStringByKeyExt("per_second");
  739.  
  740. curFlashObject.SetMemberFlashString("value", curBufValueStr);
  741. curFlashObject.SetMemberFlashNumber("floatValue", curBufValue);
  742. return;
  743. }
  744. }
  745.  
  746. curBufValueStr = NoTrailZeros( RoundMath( buffDuration) ) + " " + GetLocStringByKeyExt("per_second");
  747. curFlashObject = rootGFxObject.CreateFlashObject();
  748. curFlashObject.SetMemberFlashString("name", GetAttributeNameLocStr('duration', false));
  749. curFlashObject.SetMemberFlashString("value", curBufValueStr);
  750. curFlashObject.SetMemberFlashNumber("floatValue", buffDuration);
  751. resultGFxArray.PushBackFlashObject(curFlashObject);
  752. }
  753. }
  754.  
  755.  
  756.  
  757. public function GetExItemData( item : SItemUniqueId, optional isShopItem : bool ) : CScriptedFlashObject
  758. {
  759. var tooltipData:CScriptedFlashObject;
  760.  
  761. if (!IsInited())
  762. {
  763. LogChannel('GUI_Tooltip', "W3TooltipComponent is not initialized, can't get tooltip data");
  764. return NULL;
  765. }
  766. return GetBaseItemData(item, m_itemInv, isShopItem);
  767. }
  768.  
  769.  
  770.  
  771. public function GetTooltipData( itemId : SItemUniqueId, isShopItem : bool, compareItem : bool) : CScriptedFlashObject
  772. {
  773. var wplayer : W3PlayerWitcher;
  774. var itemSlot : EEquipmentSlots;
  775. var equipedItemId : SItemUniqueId;
  776. var horseManager : W3HorseManager;
  777. var horseInv : CInventoryComponent;
  778. var selectedItemData : CScriptedFlashObject;
  779. var equippedItemData : CScriptedFlashObject;
  780. var isArmorOrWeapon : bool;
  781.  
  782. if (!IsInited())
  783. {
  784. LogChannel('GUI_Tooltip', "W3TooltipComponent is not initialized, can't get tooltip data");
  785. return NULL;
  786. }
  787.  
  788. selectedItemData = GetBaseItemData(itemId, m_itemInv, isShopItem);
  789.  
  790. if (compareItem && m_itemInv.CanBeCompared(itemId))
  791. {
  792. if (m_itemInv.IsItemHorseItem(itemId))
  793. {
  794. itemSlot = m_itemInv.GetSlotForItemId(itemId);
  795. horseManager = GetWitcherPlayer().GetHorseManager();
  796. if (horseManager)
  797. {
  798. equipedItemId = horseManager.GetItemInSlot(itemSlot);
  799. horseInv = horseManager.GetInventoryComponent();
  800.  
  801. if (horseInv.IsIdValid(equipedItemId))
  802. {
  803. if (isShopItem)
  804. {
  805. equippedItemData = GetBaseItemData(equipedItemId, horseInv, isShopItem, itemId, m_shopInv);
  806. }
  807. else
  808. {
  809. equippedItemData = GetBaseItemData(equipedItemId, horseInv, isShopItem, itemId, m_playerInv);
  810. }
  811. selectedItemData.SetMemberFlashObject("equippedItemData", equippedItemData);
  812. }
  813. }
  814. }
  815. else
  816. {
  817. itemSlot = m_itemInv.GetSlotForItemId(itemId);
  818. wplayer = GetWitcherPlayer();
  819. wplayer.GetItemEquippedOnSlot(itemSlot, equipedItemId);
  820. if (m_playerInv.IsIdValid(equipedItemId) && equipedItemId != itemId)
  821. {
  822. isArmorOrWeapon = m_playerInv.IsItemAnyArmor(equipedItemId) || m_playerInv.IsItemWeapon(equipedItemId);
  823. if (isArmorOrWeapon)
  824. {
  825. if (isShopItem)
  826. {
  827. equippedItemData = GetBaseItemData(equipedItemId, m_playerInv, isShopItem, itemId, m_shopInv);
  828. }
  829. else
  830. {
  831. equippedItemData = GetBaseItemData(equipedItemId, m_playerInv, isShopItem, itemId, m_playerInv);
  832. }
  833. selectedItemData.SetMemberFlashObject("equippedItemData", equippedItemData);
  834. }
  835. }
  836. }
  837. }
  838.  
  839. return selectedItemData;
  840. }
  841.  
  842.  
  843.  
  844. protected function GetGenStatsGFxData( itemStats : array<SItemGenericStat>, comparingItemsStats : array<SItemGenericStat>, enableCompare : bool) : CScriptedFlashArray
  845. {
  846. var curStatData : CScriptedFlashObject;
  847. var statListData : CScriptedFlashArray;
  848. var curStat : SItemGenericStat;
  849. var compValue : string;
  850. var i, j : int;
  851. var statsCount : int;
  852. var compStatsCount : int;
  853. var foundComp : bool;
  854.  
  855. var maxToxicity : int;
  856. var durationPostfix : string;
  857.  
  858. statListData = m_flashValueStorage.CreateTempFlashArray();
  859. statsCount = itemStats.Size();
  860. compStatsCount = comparingItemsStats.Size();
  861.  
  862. for (i = 0; i < statsCount; i += 1)
  863. {
  864. foundComp = false;
  865. curStat = itemStats[i];
  866.  
  867. if (!((curStat.statName == "duration" || curStat.statName == "toxicity" ) && RoundMath(curStat.value) <= 1))
  868. {
  869. compValue = "none";
  870. if (enableCompare)
  871. {
  872. for (j = 0; j < compStatsCount; j += 1)
  873. {
  874. if (curStat.statName == comparingItemsStats[i].statName)
  875. {
  876. compValue = GetStatDiff(curStat.value, comparingItemsStats[i].value);
  877. foundComp = true;
  878. break;
  879. }
  880. }
  881. if (!foundComp)
  882. {
  883. compValue = "wayBetter";
  884. }
  885. }
  886. curStatData = m_flashValueStorage.CreateTempFlashObject();
  887. if ( curStat.statName == "toxicity_offset" )
  888. curStatData.SetMemberFlashString("type", "toxicity"); else
  889. curStatData.SetMemberFlashString("type", curStat.statName);
  890.  
  891.  
  892. if (curStat.statName == "toxicity" || curStat.statName == "toxicity_offset" )
  893. {
  894. maxToxicity = RoundMath(thePlayer.GetStatMax( BCS_Toxicity ));
  895. if ( curStat.statName == "toxicity_offset" )
  896. curStatData.SetMemberFlashString("value", RoundMath(curStat.value * 100) + "/" + maxToxicity);
  897. else
  898. curStatData.SetMemberFlashString("value", RoundMath(curStat.value) + "/" + maxToxicity);
  899. }
  900. else if (curStat.statName == "duration")
  901. {
  902. durationPostfix = GetLocStringByKeyExt("per_second");
  903. curStatData.SetMemberFlashString("value", RoundMath(curStat.value) + " " + durationPostfix);
  904. }
  905. else
  906. {
  907. curStatData.SetMemberFlashString("icon", compValue);
  908. }
  909. statListData.PushBackFlashObject(curStatData);
  910. }
  911. }
  912. return statListData;
  913. }
  914.  
  915. protected function GetMutagenGenStatsGFxData():CScriptedFlashArray
  916. {
  917. var curStatData : CScriptedFlashObject;
  918. var statListData : CScriptedFlashArray;
  919.  
  920. statListData = m_flashValueStorage.CreateTempFlashArray();
  921. curStatData = m_flashValueStorage.CreateTempFlashObject();
  922. curStatData.SetMemberFlashString("type", "toxicity");
  923. curStatData.SetMemberFlashString("value", GetLocStringByKeyExt("panel_tooltip_mutagen_toxicity_warning"));
  924. statListData.PushBackFlashObject(curStatData);
  925. return statListData;
  926. }
  927.  
  928. protected function GetBuffDuration( itemId : SItemUniqueId, inv: CInventoryComponent ):float
  929. {
  930. var buffs : array<SEffectInfo>;
  931. var i : int;
  932. var min, max : SAbilityAttributeValue;
  933. var dValue : float;
  934.  
  935. inv.GetItemBuffs(itemId, buffs);
  936. for(i = 0; i < buffs.Size(); i += 1)
  937. {
  938. theGame.GetDefinitionsManager().GetAbilityAttributeValue(buffs[i].effectAbilityName, 'duration', min, max);
  939. dValue = CalculateAttributeValue(GetAttributeRandomizedValue(min, max));
  940. if (dValue > 0) return dValue;
  941. }
  942. return 0;
  943. }
  944.  
  945. protected function GetGenericStats( item : SItemUniqueId, inv: CInventoryComponent ) : array<SItemGenericStat>
  946. {
  947. var curStat : SAttributeTooltip;
  948. var i, j, count : int;
  949. var settingsSize : int;
  950. var attrListSize : int;
  951. var attributes : array<name>;
  952. var attrName : string;
  953. var attrType : string;
  954. var attrValue : float;
  955. var attrMult : float;
  956. var genStats : array<SItemGenericStat>;
  957. var curGenStat : SItemGenericStat;
  958.  
  959. inv.GetItemAttributes(item, attributes);
  960. attrListSize = attributes.Size();
  961. settingsSize = theGame.tooltipSettings.GetNumRows();
  962. AppendDefaultGenericStats(genStats, item, inv);
  963.  
  964. for (i = 0; i < settingsSize; i += 1)
  965. {
  966. for (j = 0; j < attrListSize; j += 1)
  967. {
  968. attrName = theGame.tooltipSettings.GetValueAt(0, i);
  969. attrType = theGame.tooltipSettings.GetValueAt(3, i);
  970. if ( ( attrName == NameToString(attributes[j]) ) && ( attrType != "" ) )
  971. {
  972. attrMult = (float)theGame.tooltipSettings.GetValueAt(4, i);
  973. attrValue = GetAttributeValue(item, attributes[j], inv) * attrMult;
  974.  
  975. if (attrType == "duration")
  976. {
  977. AppendGenericStat(genStats, attrType, attrValue, true);
  978. }
  979. else
  980. {
  981. AppendGenericStat(genStats, attrType, attrValue);
  982. }
  983. break;
  984. }
  985. }
  986. }
  987. return genStats;
  988. }
  989.  
  990. protected function AppendDefaultGenericStats(out statsList : array<SItemGenericStat>, item : SItemUniqueId, inv: CInventoryComponent) : void
  991. {
  992. var buffDuration:float;
  993.  
  994. if (inv.ItemHasTag(item, 'Edibles') || inv.ItemHasTag(item, 'Drinks'))
  995. {
  996. buffDuration = GetBuffDuration(item, inv);
  997. AddGenericStat(statsList, 'toxicity', 0);
  998. AddGenericStat(statsList, 'duration', buffDuration);
  999. }
  1000. else if (inv.IsItemBomb(item))
  1001. {
  1002. buffDuration = GetBuffDuration(item, inv);
  1003. AddGenericStat(statsList, 'duration', buffDuration);
  1004. }
  1005. else if (inv.IsItemPotion(item))
  1006. {
  1007. AddGenericStat(statsList, 'toxicity', 0);
  1008. AddGenericStat(statsList, 'duration', 0);
  1009. }
  1010. else if (inv.IsItemAnyArmor(item) || inv.IsItemWeapon(item))
  1011. {
  1012. AddGenericStat(statsList, 'attack', 0);
  1013. AddGenericStat(statsList, 'defence', 0);
  1014. AddGenericStat(statsList, 'magic', 0);
  1015. AddGenericStat(statsList, 'vitality', 0);
  1016. }
  1017. }
  1018.  
  1019. protected function AddGenericStat(out statsList : array<SItemGenericStat>, statName : string, statValue : float) : void
  1020. {
  1021. var newStat : SItemGenericStat;
  1022. newStat.statName = statName;
  1023. newStat.value = statValue;
  1024. statsList.PushBack(newStat);
  1025. }
  1026.  
  1027. protected function AppendGenericStat(out statsList : array<SItemGenericStat>, statName : string, statValue : float, optional resetValue:bool) : void
  1028. {
  1029. var i, len : int;
  1030. var newStat : SItemGenericStat;
  1031.  
  1032. len = statsList.Size();
  1033. for (i = 0; i < len; i += 1)
  1034. {
  1035. if (statsList[i].statName == statName)
  1036. {
  1037. if (resetValue)
  1038. {
  1039. statsList[i].value = statValue;
  1040. }
  1041. else
  1042. {
  1043. statsList[i].value += statValue;
  1044. }
  1045. return;
  1046. }
  1047. }
  1048. }
  1049.  
  1050. protected function GetAttributeValue(item : SItemUniqueId, statName : name, inv : CInventoryComponent) : float
  1051. {
  1052. var statValue : float;
  1053. var attributeVal : SAbilityAttributeValue;
  1054.  
  1055. attributeVal = inv.GetItemAttributeValue(item, statName);
  1056. if(attributeVal.valueBase != 0)
  1057. {
  1058. statValue = attributeVal.valueBase;
  1059. }
  1060. if(attributeVal.valueMultiplicative != 0)
  1061. {
  1062. statValue = attributeVal.valueMultiplicative;
  1063. }
  1064. if(attributeVal.valueAdditive != 0)
  1065. {
  1066. statValue = attributeVal.valueAdditive;
  1067. }
  1068.  
  1069. return statValue;
  1070. }
  1071.  
  1072.  
  1073.  
  1074. protected function IsInited():bool
  1075. {
  1076. return m_itemInv && m_playerInv && m_flashValueStorage;
  1077. }
  1078.  
  1079. private function addGFxItemStat(out targetArray:CScriptedFlashArray, type:string, value:string, optional label:string, optional isHtml:bool):void
  1080. {
  1081. var resultData : CScriptedFlashObject;
  1082. var labelLoc : string;
  1083.  
  1084. resultData = m_flashValueStorage.CreateTempFlashObject();
  1085. resultData.SetMemberFlashString("type", type);
  1086. resultData.SetMemberFlashString("value", value);
  1087. if (label != "")
  1088. {
  1089. if (!isHtml)
  1090. {
  1091. labelLoc = GetLocStringByKeyExt(label);
  1092. // modCustomLocalizationFix++
  1093. if (labelLoc == "")
  1094. labelLoc = label;
  1095. // modCustomLocalizationFix--
  1096. }
  1097. else
  1098. {
  1099. labelLoc = label;
  1100. }
  1101. resultData.SetMemberFlashString("label", labelLoc);
  1102. }
  1103. targetArray.PushBackFlashObject(resultData);
  1104. }
  1105.  
  1106. function GetItemRarityDescription( item : SItemUniqueId, tooltipInv : CInventoryComponent ) : string
  1107. {
  1108. var itemQuality : int;
  1109.  
  1110. itemQuality = tooltipInv.GetItemQuality(item);
  1111. switch(itemQuality)
  1112. {
  1113. case 1:
  1114. return "<font color='#7b7877'>"+GetLocStringByKeyExt("panel_inventory_item_rarity_type_common")+"</font>";
  1115. case 2:
  1116. return "<font color='#3661dc'>"+GetLocStringByKeyExt("panel_inventory_item_rarity_type_masterwork")+"</font>";
  1117. case 3:
  1118. return "<font color='#959500'>"+GetLocStringByKeyExt("panel_inventory_item_rarity_type_magic")+"</font>";
  1119. case 4:
  1120. return "<font color='#934913'>"+GetLocStringByKeyExt("panel_inventory_item_rarity_type_relic")+"</font>";
  1121. case 5:
  1122. return "<font color='#197319'>"+GetLocStringByKeyExt("panel_inventory_item_rarity_type_set")+"</font>";
  1123. default:
  1124. return "ERROR";
  1125. }
  1126. }
  1127.  
  1128.  
  1129.  
  1130.  
  1131.  
  1132. private function CompareItemsStats(itemStats : array<SAttributeTooltip>, compareItemStats : array<SAttributeTooltip>, out compResult : CScriptedFlashArray, rootGFxObject : CScriptedFlashObject, optional dontCompare : bool, optional extendedData:bool )
  1133. {
  1134. CalculateStatsComparance(itemStats, compareItemStats, rootGFxObject, compResult, true, dontCompare, extendedData);
  1135. }
  1136.  
  1137.  
  1138. private function getCategoryDescription(itemCategory : name):string
  1139. {
  1140. switch (itemCategory)
  1141. {
  1142. case 'steelsword':
  1143. case 'silversword':
  1144. case 'crossbow':
  1145. case 'secondary':
  1146. case 'armor':
  1147. case 'pants':
  1148. case 'gloves':
  1149. case 'boots':
  1150. case 'armor':
  1151. case 'bolt':
  1152. return GetLocStringByKeyExt("item_category_" + itemCategory + "_desc");
  1153. break;
  1154. default:
  1155. return "";
  1156. break;
  1157. }
  1158. return "";
  1159. }
  1160.  
  1161. private function GetGwintCardDescription(cardIndex:int):string
  1162. {
  1163. var cardString : string;
  1164. var gwintManager : CR4GwintManager;
  1165. var cardDefinition : SCardDefinition;
  1166. var tempStr : string;
  1167. var abilityName : string;
  1168. var abilityDescription : string;
  1169.  
  1170. gwintManager = theGame.GetGwintManager();
  1171. cardDefinition = gwintManager.GetCardDefinition(cardIndex);
  1172.  
  1173. if (cardDefinition.index == -1)
  1174. {
  1175. return "Failed to get card definition";
  1176. }
  1177.  
  1178. cardString += GetLocStringByKeyExt("gwint_tooltip_faction_header") + ": ";
  1179.  
  1180. switch (cardDefinition.faction)
  1181. {
  1182. case GwintFaction_Neutral:
  1183. cardString += "<font color='#7b7877'>" + GetLocStringByKeyExt("gwint_faction_name_neutral") + "</font>";
  1184. break;
  1185. case GwintFaction_NoMansLand:
  1186. cardString += "<font color='#5B0302'>" + GetLocStringByKeyExt("gwint_faction_name_no_mans_land") + "</font>";
  1187. break;
  1188. case GwintFaction_Nilfgaard:
  1189. cardString += "<font color='#BCAE3C'>" + GetLocStringByKeyExt("gwint_faction_name_nilfgaard") + "</font>";
  1190. break;
  1191. case GwintFaction_NothernKingdom:
  1192. cardString += "<font color='#495382'>" + GetLocStringByKeyExt("gwint_faction_name_northern_kingdom") + "</font>";
  1193. break;
  1194. case GwintFaction_Scoiatael:
  1195. cardString += "<font color='#076807'>" + GetLocStringByKeyExt("gwint_faction_name_scoiatael") + "</font>";
  1196. break;
  1197. }
  1198.  
  1199. cardString += "<br/>" + GetLocStringByKeyExt("gwint_tooltip_card_type") + ": ";
  1200.  
  1201. if (cardDefinition.index >= 1000)
  1202. {
  1203. cardString += "<font color='#7b7877'>" + GetLocStringByKeyExt("gwint_tooltip_card_type_leader") + "</font>";
  1204.  
  1205. if (cardDefinition.effectFlags.Size() == 1 && cardDefinition.effectFlags[0] != GwintEffect_None)
  1206. {
  1207. switch (cardDefinition.effectFlags[0])
  1208. {
  1209. case GwintEffect_MeleeScorch:
  1210. abilityName = GetLocStringByKeyExt("gwint_card_tooltip_ldr_melee_scorch_title");
  1211. abilityDescription = GetLocStringByKeyExt("gwint_card_tooltip_ldr_melee_scorch");
  1212. break;
  1213. case GwintEffect_11thCard:
  1214. abilityName = GetLocStringByKeyExt("gwint_card_tooltip_ldr_eleventh_card_title");
  1215. abilityDescription = GetLocStringByKeyExt("gwint_card_tooltip_ldr_eleventh_card");
  1216. break;
  1217. case GwintEffect_ClearWeather:
  1218. abilityName = GetLocStringByKeyExt("gwint_card_tooltip_ldr_clear_weather_title");
  1219. abilityDescription = GetLocStringByKeyExt("gwint_card_tooltip_ldr_clear_weather");
  1220. break;
  1221. case GwintEffect_PickWeatherCard:
  1222. abilityName = GetLocStringByKeyExt("gwint_card_tooltip_ldr_pick_weather_title");
  1223. abilityDescription = GetLocStringByKeyExt("gwint_card_tooltip_ldr_pick_weather");
  1224. break;
  1225. case GwintEffect_PickRainCard:
  1226. abilityName = GetLocStringByKeyExt("gwint_card_tooltip_ldr_pick_rain_title");
  1227. abilityDescription = GetLocStringByKeyExt("gwint_card_tooltip_ldr_pick_rain");
  1228. break;
  1229. case GwintEffect_PickFogCard:
  1230. abilityName = GetLocStringByKeyExt("gwint_card_tooltip_ldr_pick_fog_title");
  1231. abilityDescription = GetLocStringByKeyExt("gwint_card_tooltip_ldr_pick_fog");
  1232. break;
  1233. case GwintEffect_PickFrostCard:
  1234. abilityName = GetLocStringByKeyExt("gwint_card_tooltip_ldr_pick_frost_title");
  1235. abilityDescription = GetLocStringByKeyExt("gwint_card_tooltip_ldr_pick_frost");
  1236. break;
  1237. case GwintEffect_View3EnemyCard:
  1238. abilityName = GetLocStringByKeyExt("gwint_card_tooltip_ldr_view_enemy_title");
  1239. abilityDescription = GetLocStringByKeyExt("gwint_card_tooltip_ldr_view_enemy");
  1240. break;
  1241. case GwintEffect_ResurectCard:
  1242. abilityName = GetLocStringByKeyExt("gwint_card_tooltip_ldr_resurect_title");
  1243. abilityDescription = GetLocStringByKeyExt("gwint_card_tooltip_ldr_resurect");
  1244. break;
  1245. case GwintEffect_ResurectFromEnemy:
  1246. abilityName = GetLocStringByKeyExt("gwint_card_tooltip_ldr_resurect_enemy_title");
  1247. abilityDescription = GetLocStringByKeyExt("gwint_card_tooltip_ldr_resurect_enemy");
  1248. break;
  1249. case GwintEffect_Bin2Pick1:
  1250. abilityName = GetLocStringByKeyExt("gwint_card_tooltip_ldr_bin_pick_title");
  1251. abilityDescription = GetLocStringByKeyExt("gwint_card_tooltip_ldr_bin_pick");
  1252. break;
  1253. case GwintEffect_MeleeHorn:
  1254. abilityName = GetLocStringByKeyExt("gwint_card_tooltip_ldr_melee_horn_title");
  1255. abilityDescription = GetLocStringByKeyExt("gwint_card_tooltip_ldr_melee_horn");
  1256. break;
  1257. case GwintEffect_RangedHorn:
  1258. abilityName = GetLocStringByKeyExt("gwint_card_tooltip_ldr_range_horn_title");
  1259. abilityDescription = GetLocStringByKeyExt("gwint_card_tooltip_ldr_range_horn");
  1260. break;
  1261. case GwintEffect_SiegeHorn:
  1262. abilityName = GetLocStringByKeyExt("gwint_card_tooltip_ldr_siege_horn_title");
  1263. abilityDescription = GetLocStringByKeyExt("gwint_card_tooltip_ldr_siege_horn");
  1264. break;
  1265. case GwintEffect_SiegeScorch:
  1266. abilityName = GetLocStringByKeyExt("gwint_card_tooltip_ldr_siege_scorch_title");
  1267. abilityDescription = GetLocStringByKeyExt("gwint_card_tooltip_ldr_siege_scorch");
  1268. break;
  1269. case GwintEffect_CounterKingAbility:
  1270. abilityName = GetLocStringByKeyExt("gwint_card_tooltip_ldr_counter_king_title");
  1271. abilityDescription = GetLocStringByKeyExt("gwint_card_tooltip_ldr_counter_king");
  1272. break;
  1273. }
  1274. }
  1275. }
  1276. else if ((cardDefinition.typeFlags & GwintType_Creature) == GwintType_Creature)
  1277. {
  1278. if ((cardDefinition.typeFlags & GwintType_Hero) == GwintType_Hero)
  1279. {
  1280. cardString += "<font color='#7b7877'>" + GetLocStringByKeyExt("gwint_card_tooltip_hero_title") + "</font>";
  1281. }
  1282. else
  1283. {
  1284. cardString += "<font color='#7b7877'>" + GetLocStringByKeyExt("gwint_tooltip_card_type_creature") + "</font>";
  1285. }
  1286.  
  1287. cardString += "<br/>" + GetLocStringByKeyExt("gwint_tut_unitcardrange_title") + ": ";
  1288.  
  1289. if ((cardDefinition.typeFlags & GwintType_Melee) == GwintType_Melee)
  1290. {
  1291. tempStr = GetLocStringByKeyExt("gwint_tutorial_unit_range_close");
  1292. tempStr = StrReplaceAll(tempStr, "<br>", "");
  1293. cardString += "<font color='#7b7877'>" + tempStr;
  1294.  
  1295. if ((cardDefinition.typeFlags & GwintType_Ranged) == GwintType_Ranged)
  1296. {
  1297. tempStr = GetLocStringByKeyExt("gwint_tutorial_unit_range_long");
  1298. tempStr = StrReplaceAll(tempStr, "<br>", "");
  1299. cardString += ", " + tempStr + "</font>";
  1300. }
  1301. else
  1302. {
  1303. cardString += "</font>";
  1304. }
  1305. }
  1306. else if ((cardDefinition.typeFlags & GwintType_Ranged) == GwintType_Ranged)
  1307. {
  1308. tempStr = GetLocStringByKeyExt("gwint_tutorial_unit_range_long");
  1309. tempStr = StrReplaceAll(tempStr, "<br>", "");
  1310. cardString += "<font color='#7b7877'>" + tempStr + "</font>";
  1311. }
  1312. else if ((cardDefinition.typeFlags & GwintType_Siege) == GwintType_Siege)
  1313. {
  1314. tempStr = GetLocStringByKeyExt("gwint_tutorial_unit_range_siege");
  1315. tempStr = StrReplaceAll(tempStr, "<br>", "");
  1316. cardString += "<font color='#7b7877'>" + tempStr + "</font>";
  1317. }
  1318.  
  1319. cardString += "<br/>" + GetLocStringByKeyExt("gwint_tut_unitcardstrength_title") + ": " + "<font color='#7b7877'>" + cardDefinition.power + "</font>";
  1320.  
  1321. if (cardDefinition.effectFlags.Size() == 1 && cardDefinition.effectFlags[0] != GwintEffect_None)
  1322. {
  1323. switch (cardDefinition.effectFlags[0])
  1324. {
  1325. case GwintEffect_MeleeScorch:
  1326.  
  1327.  
  1328.  
  1329. break;
  1330. case GwintEffect_SummonClones:
  1331. abilityName = GetLocStringByKeyExt("gwint_card_tooltip_summon_clones_title");
  1332. abilityDescription = GetLocStringByKeyExt("gwint_card_tooltip_summon_clones");
  1333. break;
  1334. case GwintEffect_Nurse:
  1335. abilityName = GetLocStringByKeyExt("gwint_card_tooltip_nurse_title");
  1336. abilityDescription = GetLocStringByKeyExt("gwint_card_tooltip_nurse");
  1337. break;
  1338. case GwintEffect_Draw2:
  1339. abilityName = GetLocStringByKeyExt("gwint_card_tooltip_spy_title");
  1340. abilityDescription = GetLocStringByKeyExt("gwint_card_tooltip_spy");
  1341. break;
  1342. case GwintEffect_SameTypeMorale:
  1343. abilityName = GetLocStringByKeyExt("gwint_card_tooltip_same_type_morale_title");
  1344. abilityDescription = GetLocStringByKeyExt("gwint_card_tooltip_same_type_morale");
  1345. break;
  1346. case GwintEffect_ImproveNeightbours:
  1347. abilityName = GetLocStringByKeyExt("gwint_card_tooltip_improve_neightbours_title");
  1348. abilityDescription = GetLocStringByKeyExt("gwint_card_tooltip_improve_neightbours");
  1349. break;
  1350. case GwintEffect_Horn:
  1351. abilityName = GetLocStringByKeyExt("gwint_card_tooltip_horn_title");
  1352. abilityDescription = GetLocStringByKeyExt("gwint_card_tooltip_horn");
  1353. break;
  1354. }
  1355. }
  1356. else if ((cardDefinition.typeFlags & GwintType_Ranged) == GwintType_Ranged && (cardDefinition.typeFlags & GwintType_Melee) == GwintType_Melee)
  1357. {
  1358. abilityName = GetLocStringByKeyExt("gwint_card_tooltip_agile_title");
  1359. abilityDescription = GetLocStringByKeyExt("gwint_card_tooltip_agile");
  1360. }
  1361. else if ((cardDefinition.typeFlags & GwintType_Hero) == GwintType_Hero)
  1362. {
  1363. abilityName = GetLocStringByKeyExt("gwint_card_tooltip_hero_title");
  1364. abilityDescription = GetLocStringByKeyExt("gwint_card_tooltip_hero");
  1365. }
  1366. }
  1367. else
  1368. {
  1369. cardString += "<font color='#7b7877'>" + GetLocStringByKeyExt("gwint_tooltip_card_type_special");
  1370.  
  1371. if ((cardDefinition.typeFlags & GwintType_Weather) == GwintType_Weather)
  1372. {
  1373. cardString += ", " + GetLocStringByKeyExt("gwint_tooltip_card_type_weather");
  1374. }
  1375.  
  1376. cardString += "</font>";
  1377.  
  1378. if (cardDefinition.effectFlags.Size() == 1 && cardDefinition.effectFlags[0] != GwintEffect_None)
  1379. {
  1380. switch (cardDefinition.effectFlags[0])
  1381. {
  1382. case GwintEffect_Melee:
  1383. abilityName = GetLocStringByKeyExt("gwint_card_tooltip_frost_title");
  1384. abilityDescription = GetLocStringByKeyExt("gwint_card_tooltip_frost");
  1385. break;
  1386. case GwintEffect_Ranged:
  1387. abilityName = GetLocStringByKeyExt("gwint_card_tooltip_fog_title");
  1388. abilityDescription = GetLocStringByKeyExt("gwint_card_tooltip_fog");
  1389. break;
  1390. case GwintEffect_Siege:
  1391. abilityName = GetLocStringByKeyExt("gwint_card_tooltip_rain_title");
  1392. abilityDescription = GetLocStringByKeyExt("gwint_card_tooltip_rain");
  1393. break;
  1394. case GwintEffect_ClearSky:
  1395. abilityName = GetLocStringByKeyExt("gwint_card_tooltip_clearsky_title");
  1396. abilityDescription = GetLocStringByKeyExt("gwint_card_tooltip_clearsky");
  1397. break;
  1398. case GwintEffect_UnsummonDummy:
  1399. abilityName = GetLocStringByKeyExt("gwint_card_tooltip_dummy_title");
  1400. abilityDescription = GetLocStringByKeyExt("gwint_card_tooltip_dummy");
  1401. break;
  1402. case GwintEffect_Horn:
  1403. abilityName = GetLocStringByKeyExt("gwint_card_tooltip_horn_title");
  1404. abilityDescription = GetLocStringByKeyExt("gwint_card_tooltip_horn");
  1405. break;
  1406. case GwintEffect_Scorch:
  1407. abilityName = GetLocStringByKeyExt("gwint_card_tooltip_scorch_title");
  1408. abilityDescription = GetLocStringByKeyExt("gwint_card_tooltip_scorch");
  1409. break;
  1410. }
  1411. }
  1412. }
  1413.  
  1414. if (abilityName != "" && abilityDescription != "")
  1415. {
  1416. cardString += "<br/>" + GetLocStringByKeyExt("gwint_tut_unitcardspecialability_title") + ": " + "<font color='#7b7877'>" + abilityName + "<br/>" + abilityDescription;
  1417. }
  1418.  
  1419. return cardString;
  1420. }
  1421.  
  1422. public function GetSchematicDataFromXML(schematicName:name):SCraftingSchematic
  1423. {
  1424. var curSchematicName : name;
  1425. var i, j, k, tmpInt : int;
  1426. var ing : SItemParts;
  1427. var schem : SCraftingSchematic;
  1428. var dm : CDefinitionsManagerAccessor;
  1429. var main, ingredients : SCustomNode;
  1430.  
  1431. dm = theGame.GetDefinitionsManager();
  1432. main = dm.GetCustomDefinition('crafting_schematics');
  1433.  
  1434. for(i=0; i<main.subNodes.Size(); i+=1)
  1435. {
  1436. dm.GetCustomNodeAttributeValueName(main.subNodes[i], 'name_name', curSchematicName);
  1437. if (curSchematicName == schematicName)
  1438. {
  1439. if(dm.GetCustomNodeAttributeValueName(main.subNodes[i], 'craftedItem_name', curSchematicName))
  1440. schem.craftedItemName = curSchematicName;
  1441. if(dm.GetCustomNodeAttributeValueName(main.subNodes[i], 'craftsmanType_name', curSchematicName))
  1442. schem.requiredCraftsmanType = ParseCraftsmanTypeStringToEnum(curSchematicName);
  1443. if(dm.GetCustomNodeAttributeValueName(main.subNodes[i], 'craftsmanLevel_name', curSchematicName))
  1444. schem.requiredCraftsmanLevel = ParseCraftsmanLevelStringToEnum(curSchematicName);
  1445. if(dm.GetCustomNodeAttributeValueInt(main.subNodes[i], 'price', tmpInt))
  1446. schem.baseCraftingPrice = tmpInt;
  1447.  
  1448.  
  1449. ingredients = dm.GetCustomDefinitionSubNode(main.subNodes[i],'ingredients');
  1450. for(k=0; k<ingredients.subNodes.Size(); k+=1)
  1451. {
  1452. ing.itemName = '';
  1453. ing.quantity = -1;
  1454.  
  1455. if(dm.GetCustomNodeAttributeValueName(ingredients.subNodes[k], 'item_name', curSchematicName))
  1456. ing.itemName = curSchematicName;
  1457. if(dm.GetCustomNodeAttributeValueInt(ingredients.subNodes[k], 'quantity', tmpInt))
  1458. ing.quantity = tmpInt;
  1459.  
  1460. schem.ingredients.PushBack(ing);
  1461. }
  1462. schem.schemName = curSchematicName;
  1463. return schem;
  1464. }
  1465. }
  1466. return schem;
  1467. }
  1468.  
  1469.  
  1470.  
  1471. public function GetRecipeDataFromXML(recipeName:name):SAlchemyRecipe
  1472. {
  1473. var dm : CDefinitionsManagerAccessor;
  1474. var main, ingredients : SCustomNode;
  1475. var tmpBool : bool;
  1476. var tmpName : name;
  1477. var tmpString : string;
  1478. var tmpInt : int;
  1479. var ing : SItemParts;
  1480. var i,k : int;
  1481. var rec : SAlchemyRecipe;
  1482.  
  1483. dm = theGame.GetDefinitionsManager();
  1484. main = dm.GetCustomDefinition('alchemy_recipies');
  1485.  
  1486. for(i=0; i<main.subNodes.Size(); i+=1)
  1487. {
  1488. dm.GetCustomNodeAttributeValueName(main.subNodes[i], 'name_name', tmpName);
  1489.  
  1490. if (tmpName == recipeName)
  1491. {
  1492. if(dm.GetCustomNodeAttributeValueName(main.subNodes[i], 'cookedItem_name', tmpName))
  1493. rec.cookedItemName = tmpName;
  1494. if(dm.GetCustomNodeAttributeValueName(main.subNodes[i], 'type_name', tmpName))
  1495. rec.typeName = tmpName;
  1496. if(dm.GetCustomNodeAttributeValueInt(main.subNodes[i], 'level', tmpInt))
  1497. rec.level = tmpInt;
  1498. if(dm.GetCustomNodeAttributeValueString(main.subNodes[i], 'cookedItemType', tmpString))
  1499. rec.cookedItemType = AlchemyCookedItemTypeStringToEnum(tmpString);
  1500. if(dm.GetCustomNodeAttributeValueInt(main.subNodes[i], 'cookedItemQuantity', tmpInt))
  1501. rec.cookedItemQuantity = tmpInt;
  1502.  
  1503.  
  1504. ingredients = dm.GetCustomDefinitionSubNode(main.subNodes[i],'ingredients');
  1505. for(k=0; k<ingredients.subNodes.Size(); k+=1)
  1506. {
  1507. ing.itemName = '';
  1508. ing.quantity = -1;
  1509.  
  1510. if(dm.GetCustomNodeAttributeValueName(ingredients.subNodes[k], 'item_name', tmpName))
  1511. ing.itemName = tmpName;
  1512. if(dm.GetCustomNodeAttributeValueInt(ingredients.subNodes[k], 'quantity', tmpInt))
  1513. ing.quantity = tmpInt;
  1514.  
  1515. rec.requiredIngredients.PushBack(ing);
  1516. }
  1517.  
  1518. rec.recipeName = recipeName;
  1519.  
  1520.  
  1521. rec.cookedItemIconPath = dm.GetItemIconPath( rec.cookedItemName );
  1522. rec.recipeIconPath = dm.GetItemIconPath( rec.recipeName );
  1523. break;
  1524. }
  1525. }
  1526. return rec;
  1527. }
  1528.  
  1529. }
  1530.  
  1531.  
  1532.  
  1533.  
  1534. function CalculateStatsComparance(itemStats : array<SAttributeTooltip>, compareItemStats : array<SAttributeTooltip>, rootGFxObject : CScriptedFlashObject, out compResult : CScriptedFlashArray, optional ignorePrimStat : bool, optional dontCompare : bool, optional extendedData:bool)
  1535. {
  1536. var l_flashObject : CScriptedFlashObject;
  1537. var attributeVal : SAbilityAttributeValue;
  1538.  
  1539. var strDifference : string;
  1540. var strDiffPrefix : string;
  1541. var strDiffPostfix : string;
  1542. var strDiffValue : string;
  1543. var strValue : string;
  1544.  
  1545. var percentDiff : float;
  1546. var nDifference : float;
  1547. var i, j, price : int;
  1548. var statsCount : int;
  1549. var comparedStats : array<SAttributeTooltip>;
  1550.  
  1551. var valuePrefix : string;
  1552. var valuePostfix : string;
  1553.  
  1554. var diffValue : string;
  1555. var statToCompareExist : bool;
  1556.  
  1557. statsCount = itemStats.Size();
  1558. for( i = 0; i < statsCount; i += 1 )
  1559. {
  1560. if (!(itemStats[i].primaryStat && ignorePrimStat))
  1561. {
  1562. l_flashObject = rootGFxObject.CreateFlashObject();
  1563. l_flashObject.SetMemberFlashString("name",itemStats[i].attributeName);
  1564. l_flashObject.SetMemberFlashString("color",itemStats[i].attributeColor);
  1565.  
  1566. strDifference = "better";
  1567. strDiffPrefix = "";
  1568. strDiffPostfix = "";
  1569. strDiffValue = "";
  1570.  
  1571. valuePrefix = "";
  1572. valuePostfix = "";
  1573.  
  1574. statToCompareExist = false;
  1575.  
  1576.  
  1577. if (!dontCompare)
  1578. {
  1579. for( j = 0; j < compareItemStats.Size(); j += 1 )
  1580. {
  1581.  
  1582. if( itemStats[i].attributeName == compareItemStats[j].attributeName )
  1583. {
  1584. statToCompareExist = true;
  1585.  
  1586. if( itemStats[i].percentageValue )
  1587. {
  1588. nDifference = RoundMath(itemStats[i].value * 100) - RoundMath(compareItemStats[j].value * 100);
  1589. percentDiff = AbsF( nDifference / RoundMath(itemStats[i].value * 100) );
  1590. }
  1591. else
  1592. {
  1593. nDifference = RoundMath(itemStats[i].value) - RoundMath(compareItemStats[j].value);
  1594. percentDiff = AbsF( nDifference / RoundMath(itemStats[i].value) );
  1595. }
  1596.  
  1597.  
  1598. if(nDifference > 0)
  1599. {
  1600. strDiffPrefix = "<font color=\"#19D900\"> +";
  1601. strDiffPostfix = "</font>";
  1602.  
  1603. if(percentDiff < 0.25)
  1604. strDifference = "better";
  1605. else if(percentDiff > 0.75)
  1606. strDifference = "wayBetter";
  1607. else
  1608. strDifference = "reallyBetter";
  1609. }
  1610.  
  1611. else if(nDifference < 0)
  1612. {
  1613. strDiffPrefix = "<font color=\"#E00000\"> ";
  1614. strDiffPostfix = "</font>";
  1615.  
  1616. if(percentDiff < 0.25)
  1617. strDifference = "worse";
  1618. else if(percentDiff > 0.75)
  1619. strDifference = "wayWorse";
  1620. else
  1621. strDifference = "reallyWorse";
  1622. }
  1623. else
  1624. {
  1625. strDifference = "none";
  1626. }
  1627. if (nDifference != 0)
  1628. {
  1629. if( itemStats[i].percentageValue )
  1630. strDiffValue = strDiffPrefix + RoundMath(nDifference) + " %" + strDiffPostfix;
  1631. else
  1632. strDiffValue = strDiffPrefix + RoundMath(nDifference) + strDiffPostfix;
  1633. }
  1634.  
  1635. else
  1636. {
  1637. strDiffPrefix = "";
  1638. strDiffPostfix = "";
  1639. strDiffValue = "";
  1640. }
  1641. compareItemStats.Remove(compareItemStats[j]);
  1642. break;
  1643. }
  1644. }
  1645.  
  1646.  
  1647. if (strDiffValue == "" && !statToCompareExist)
  1648. {
  1649. strDifference = "better";
  1650. strDiffPrefix = "<font color=\"#19D900\"> +";
  1651. strDiffPostfix = "</font>";
  1652. if( itemStats[i].percentageValue )
  1653. {
  1654. strDiffValue = strDiffPrefix + RoundMath(itemStats[i].value *100) + " %" + strDiffPostfix;
  1655. }
  1656. else
  1657. {
  1658. strDiffValue = strDiffPrefix + RoundMath(itemStats[i].value) + strDiffPostfix;
  1659. }
  1660. }
  1661. }
  1662. else
  1663. {
  1664. strDifference = "none";
  1665. }
  1666.  
  1667. l_flashObject.SetMemberFlashString("icon", strDifference);
  1668. l_flashObject.SetMemberFlashBool("primaryStat", itemStats[i].primaryStat);
  1669.  
  1670. if (itemStats[i].originName == 'toxicity')
  1671. {
  1672. valuePrefix = "";
  1673. valuePostfix = "";
  1674. }
  1675. else
  1676. if (itemStats[i].originName == 'duration')
  1677. {
  1678. valuePrefix = "";
  1679. valuePostfix = " " + GetLocStringByKeyExt("per_second");
  1680. }
  1681. else
  1682. if (ignorePrimStat)
  1683. {
  1684. valuePrefix = "+";
  1685. valuePostfix = "";
  1686. }
  1687. else
  1688. {
  1689. valuePrefix = "";
  1690. valuePostfix = "";
  1691. }
  1692.  
  1693. if( itemStats[i].percentageValue )
  1694. {
  1695. l_flashObject.SetMemberFlashString("value", valuePrefix + RoundMath( itemStats[i].value * 100 ) + " %" + valuePostfix );
  1696. }
  1697.  
  1698. else
  1699. {
  1700. l_flashObject.SetMemberFlashString("value", valuePrefix + RoundMath( itemStats[i].value ) + valuePostfix );
  1701. }
  1702.  
  1703. l_flashObject.SetMemberFlashString("diffValue", strDiffValue);
  1704.  
  1705. compResult.PushBackFlashObject(l_flashObject);
  1706. }
  1707. }
  1708.  
  1709.  
  1710. if (!dontCompare)
  1711. {
  1712. if (ignorePrimStat)
  1713. {
  1714. valuePrefix = "+";
  1715. }
  1716. else
  1717. {
  1718. valuePrefix = "";
  1719. }
  1720.  
  1721. for( j = 0; j < compareItemStats.Size(); j += 1 )
  1722. {
  1723. if (!(compareItemStats[j].primaryStat && ignorePrimStat))
  1724. {
  1725. l_flashObject = rootGFxObject.CreateFlashObject();
  1726. l_flashObject.SetMemberFlashString("name",compareItemStats[j].attributeName);
  1727. l_flashObject.SetMemberFlashString("color",compareItemStats[j].attributeColor);
  1728. l_flashObject.SetMemberFlashString("icon", "worse");
  1729.  
  1730. if( compareItemStats[j].percentageValue )
  1731. {
  1732. strValue = valuePrefix + "0 %";
  1733. diffValue = "<font color=\"#E00000\"> -" + RoundMath( compareItemStats[j].value * 100 ) + " %</font>";
  1734. }
  1735. else
  1736. {
  1737. strValue = valuePrefix + "0";
  1738. diffValue = "<font color=\"#E00000\"> -" + RoundMath(compareItemStats[j].value) + "</font>";
  1739. }
  1740.  
  1741. l_flashObject.SetMemberFlashString("value", strValue);
  1742. l_flashObject.SetMemberFlashString("diffValue", diffValue);
  1743.  
  1744. compResult.PushBackFlashObject(l_flashObject);
  1745. }
  1746. }
  1747. }
  1748. }
  1749.  
  1750.  
  1751. function GetItemAttributeComparison(attrName:string, attrValue:float, equipedItemStats: array<SAttributeTooltip>):string
  1752. {
  1753. var i, statsCount : int;
  1754. statsCount = equipedItemStats.Size();
  1755. for( i = 0; i < statsCount; i += 1 )
  1756. {
  1757. if (StrLower(attrName) == StrLower(equipedItemStats[i].attributeName))
  1758. {
  1759. return GetStatDiff(attrValue, equipedItemStats[i].value);
  1760. }
  1761. }
  1762. return "better";
  1763. }
  1764.  
  1765. function GetStatDiff(a : float, b : float):string
  1766. {
  1767. var nDifference : float;
  1768. var percentDiff : float;
  1769. var strDifference : string;
  1770.  
  1771. nDifference = a - b;
  1772. percentDiff = AbsF(nDifference/a);
  1773.  
  1774. strDifference = "none";
  1775.  
  1776.  
  1777. if(nDifference > 0)
  1778. {
  1779. if(percentDiff < 0.25)
  1780. strDifference = "better";
  1781. else if(percentDiff > 0.75)
  1782. strDifference = "wayBetter";
  1783. else
  1784. strDifference = "reallyBetter";
  1785. }
  1786.  
  1787.  
  1788. else if(nDifference < 0)
  1789. {
  1790. if(percentDiff < 0.25)
  1791. strDifference = "worse";
  1792. else if(percentDiff > 0.75)
  1793. strDifference = "wayWorse";
  1794. else
  1795. strDifference = "reallyWorse";
  1796. }
  1797.  
  1798. return strDifference;
  1799. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement