SHARE
TWEET

Untitled

a guest Jun 19th, 2017 53 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
RAW Paste Data
Top