Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int ParseSkins()
- {
- valve_parser::Document doc;
- auto r = doc.Load(".\\csgo\\scripts\\items\\items_game.txt", valve_parser::ENCODING::UTF8);
- if (!r)
- return 1;
- valve_parser::Document english;
- r = english.Load(".\\csgo\\resource\\csgo_english.txt", valve_parser::ENCODING::UTF16_LE);
- if (!r)
- return 2;
- auto weaponSkinCombo = doc.BreadthFirstSearch("weapon_icons");
- if (!weaponSkinCombo || !weaponSkinCombo->ToObject())
- return 3;
- auto skinDataVec = doc.BreadthFirstSearchMultiple("paint_kits");
- if (!skinDataVec.size())
- return 4;
- auto PaintKitNames = english.BreadthFirstSearch("Tokens");
- if (!PaintKitNames || !PaintKitNames->ToObject())
- return 5;
- //std::unordered_map<std::string, std::set<std::string>> G::weaponSkins;
- //std::unordered_map<std::string, skinInfo> G::skinMap;
- //std::unordered_map<std::string, std::string> G::skinNames;
- std::vector<std::string> weaponNames = {
- "deagle",
- "elite",
- "fiveseven",
- "glock",
- "ak47",
- "aug",
- "awp",
- "famas",
- "g3sg1",
- "galilar",
- "m249",
- "m4a1_silencer", //needs to be before m4a1 else silencer doesnt get filtered out :D
- "m4a1",
- "mac10",
- "p90",
- "ump45",
- "xm1014",
- "bizon",
- "mag7",
- "negev",
- "sawedoff",
- "tec9",
- "hkp2000",
- "mp7",
- "mp9",
- "nova",
- "p250",
- "scar20",
- "sg556",
- "ssg08",
- "usp_silencer",
- "cz75a",
- "revolver",
- "knife_m9_bayonet", //needs to be before bayonet else knife_m9_bayonet doesnt get filtered out :D
- "bayonet",
- "knife_flip",
- "knife_gut",
- "knife_karambit",
- "knife_tactical",
- "knife_falchion",
- "knife_survival_bowie",
- "knife_butterfly",
- "knife_push"
- };
- //populate G::weaponSkins
- for (auto child : weaponSkinCombo->children)
- {
- if (child->ToObject())
- {
- for (auto weapon : weaponNames)
- {
- auto skinName = child->ToObject()->GetKeyByName("icon_path")->ToKeyValue()->Value.toString();
- auto pos = skinName.find(weapon);
- //filter out the skinname
- if (pos != std::string::npos)
- {
- auto pos2 = skinName.find_last_of('_');
- G::weaponSkins[weapon].insert(
- skinName.substr(pos + weapon.length() + 1,
- pos2 - pos - weapon.length() - 1)
- );
- break;
- }
- }
- }
- }
- //populate skinData
- for (auto skinData : skinDataVec)
- {
- if (skinData->ToObject())
- {
- for (auto skin : skinData->children)
- {
- if (skin->ToObject())
- {
- skinInfo si;
- si.paintkit = skin->ToObject()->name.toInt();
- auto skinName = skin->ToObject()->GetKeyByName("name")->ToKeyValue()->Value.toString();
- auto tagNode = skin->ToObject()->GetKeyByName("description_tag");
- if (tagNode)
- {
- std::string tag = tagNode->ToKeyValue()->Value.toString();
- tag = tag.substr(1, std::string::npos); //skip #
- std::transform(tag.begin(), tag.end(), tag.begin(), towlower);
- si.tagName = tag;
- }
- auto keyVal = skin->ToObject()->GetKeyByName("seed");
- if (keyVal != nullptr)
- si.seed = keyVal->ToKeyValue()->Value.toInt();
- G::skinMap[skinName] = si;
- }
- }
- }
- }
- //populate G::skinNames
- for (auto child : PaintKitNames->children)
- {
- if (child->ToKeyValue())
- {
- std::string key = child->ToKeyValue()->Key.toString();
- std::transform(key.begin(), key.end(), key.begin(), towlower);
- if (key.find("paintkit") != std::string::npos &&
- key.find("tag") != std::string::npos)
- {
- G::skinNames[key] = child->ToKeyValue()->Value.toString();
- }
- }
- }
- //dump skins
- /*auto f = fopen("dump.txt", "wb");
- if (f)
- {
- for (auto weapon : weaponNames)
- {
- fwrite(weapon.c_str(), sizeof(char), weapon.length(), f);
- fwrite(std::string("\n").c_str(), sizeof(char), std::string("\n").length(), f);
- for (auto skin : G::weaponSkins[weapon])
- {
- fwrite(std::string("\t").c_str(), sizeof(char), std::string("\t").length(), f);
- fwrite(skin.c_str(), sizeof(char), skin.length(), f);
- fwrite(std::string(" | ").c_str(), sizeof(char), std::string(" | ").length(), f);
- fwrite(std::to_string(G::skinMap[skin].paintkit).c_str(), sizeof(char), std::to_string(G::skinMap[skin].paintkit).length(), f);
- fwrite(std::string(" | ").c_str(), sizeof(char), std::string(" | ").length(), f);
- fwrite(G::skinNames[G::skinMap[skin].tagName].c_str(), sizeof(char), G::skinNames[G::skinMap[skin].tagName].length(), f);
- fwrite(std::string("\n").c_str(), sizeof(char), std::string("\n").length(), f);
- }
- }
- fclose(f);
- }*/
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement