Advertisement
Guest User

Untitled

a guest
Jun 19th, 2017
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.47 KB | None | 0 0
  1. int ParseSkins()
  2. {
  3. valve_parser::Document doc;
  4. auto r = doc.Load(".\\csgo\\scripts\\items\\items_game.txt", valve_parser::ENCODING::UTF8);
  5. if (!r)
  6. return 1;
  7.  
  8. valve_parser::Document english;
  9. r = english.Load(".\\csgo\\resource\\csgo_english.txt", valve_parser::ENCODING::UTF16_LE);
  10. if (!r)
  11. return 2;
  12.  
  13. auto weaponSkinCombo = doc.BreadthFirstSearch("weapon_icons");
  14. if (!weaponSkinCombo || !weaponSkinCombo->ToObject())
  15. return 3;
  16.  
  17. auto skinDataVec = doc.BreadthFirstSearchMultiple("paint_kits");
  18. if (!skinDataVec.size())
  19. return 4;
  20.  
  21. auto PaintKitNames = english.BreadthFirstSearch("Tokens");
  22. if (!PaintKitNames || !PaintKitNames->ToObject())
  23. return 5;
  24.  
  25. //std::unordered_map<std::string, std::set<std::string>> G::weaponSkins;
  26. //std::unordered_map<std::string, skinInfo> G::skinMap;
  27. //std::unordered_map<std::string, std::string> G::skinNames;
  28.  
  29. std::vector<std::string> weaponNames = {
  30. "deagle",
  31. "elite",
  32. "fiveseven",
  33. "glock",
  34. "ak47",
  35. "aug",
  36. "awp",
  37. "famas",
  38. "g3sg1",
  39. "galilar",
  40. "m249",
  41. "m4a1_silencer", //needs to be before m4a1 else silencer doesnt get filtered out :D
  42. "m4a1",
  43. "mac10",
  44. "p90",
  45. "ump45",
  46. "xm1014",
  47. "bizon",
  48. "mag7",
  49. "negev",
  50. "sawedoff",
  51. "tec9",
  52. "hkp2000",
  53. "mp7",
  54. "mp9",
  55. "nova",
  56. "p250",
  57. "scar20",
  58. "sg556",
  59. "ssg08",
  60. "usp_silencer",
  61. "cz75a",
  62. "revolver",
  63. "knife_m9_bayonet", //needs to be before bayonet else knife_m9_bayonet doesnt get filtered out :D
  64. "bayonet",
  65. "knife_flip",
  66. "knife_gut",
  67. "knife_karambit",
  68. "knife_tactical",
  69. "knife_falchion",
  70. "knife_survival_bowie",
  71. "knife_butterfly",
  72. "knife_push"
  73. };
  74.  
  75. //populate G::weaponSkins
  76. for (auto child : weaponSkinCombo->children)
  77. {
  78. if (child->ToObject())
  79. {
  80. for (auto weapon : weaponNames)
  81. {
  82. auto skinName = child->ToObject()->GetKeyByName("icon_path")->ToKeyValue()->Value.toString();
  83. auto pos = skinName.find(weapon);
  84. //filter out the skinname
  85. if (pos != std::string::npos)
  86. {
  87. auto pos2 = skinName.find_last_of('_');
  88. G::weaponSkins[weapon].insert(
  89. skinName.substr(pos + weapon.length() + 1,
  90. pos2 - pos - weapon.length() - 1)
  91. );
  92. break;
  93. }
  94. }
  95. }
  96. }
  97.  
  98. //populate skinData
  99. for (auto skinData : skinDataVec)
  100. {
  101. if (skinData->ToObject())
  102. {
  103. for (auto skin : skinData->children)
  104. {
  105. if (skin->ToObject())
  106. {
  107. skinInfo si;
  108. si.paintkit = skin->ToObject()->name.toInt();
  109.  
  110. auto skinName = skin->ToObject()->GetKeyByName("name")->ToKeyValue()->Value.toString();
  111. auto tagNode = skin->ToObject()->GetKeyByName("description_tag");
  112. if (tagNode)
  113. {
  114. std::string tag = tagNode->ToKeyValue()->Value.toString();
  115. tag = tag.substr(1, std::string::npos); //skip #
  116. std::transform(tag.begin(), tag.end(), tag.begin(), towlower);
  117. si.tagName = tag;
  118. }
  119.  
  120. auto keyVal = skin->ToObject()->GetKeyByName("seed");
  121. if (keyVal != nullptr)
  122. si.seed = keyVal->ToKeyValue()->Value.toInt();
  123.  
  124. G::skinMap[skinName] = si;
  125. }
  126. }
  127. }
  128. }
  129.  
  130. //populate G::skinNames
  131. for (auto child : PaintKitNames->children)
  132. {
  133. if (child->ToKeyValue())
  134. {
  135. std::string key = child->ToKeyValue()->Key.toString();
  136. std::transform(key.begin(), key.end(), key.begin(), towlower);
  137. if (key.find("paintkit") != std::string::npos &&
  138. key.find("tag") != std::string::npos)
  139. {
  140. G::skinNames[key] = child->ToKeyValue()->Value.toString();
  141. }
  142. }
  143. }
  144.  
  145. //dump skins
  146. /*auto f = fopen("dump.txt", "wb");
  147. if (f)
  148. {
  149. for (auto weapon : weaponNames)
  150. {
  151. fwrite(weapon.c_str(), sizeof(char), weapon.length(), f);
  152. fwrite(std::string("\n").c_str(), sizeof(char), std::string("\n").length(), f);
  153. for (auto skin : G::weaponSkins[weapon])
  154. {
  155. fwrite(std::string("\t").c_str(), sizeof(char), std::string("\t").length(), f);
  156. fwrite(skin.c_str(), sizeof(char), skin.length(), f);
  157. fwrite(std::string(" | ").c_str(), sizeof(char), std::string(" | ").length(), f);
  158. fwrite(std::to_string(G::skinMap[skin].paintkit).c_str(), sizeof(char), std::to_string(G::skinMap[skin].paintkit).length(), f);
  159. fwrite(std::string(" | ").c_str(), sizeof(char), std::string(" | ").length(), f);
  160. fwrite(G::skinNames[G::skinMap[skin].tagName].c_str(), sizeof(char), G::skinNames[G::skinMap[skin].tagName].length(), f);
  161. fwrite(std::string("\n").c_str(), sizeof(char), std::string("\n").length(), f);
  162. }
  163. }
  164. fclose(f);
  165. }*/
  166.  
  167. return 0;
  168. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement