wings.cpp

main 64 lines · 1.4 KB Raw
Alex Alex Commit Server upload 18/10/2026 23:38
1#include "otpch.h"
2
3#include "wings.h"
4
5#include "pugicast.h"
6#include "tools.h"
7
8bool Wings::reload()
9{
10 wings.clear();
11 return loadFromXml();
12}
13
14bool Wings::loadFromXml()
15{
16 pugi::xml_document doc;
17 pugi::xml_parse_result result = doc.load_file("data/XML/wings.xml");
18 if (!result) {
19 printXMLError("Error - Wings::loadFromXml", "data/XML/wings.xml", result);
20 return false;
21 }
22
23 for (auto wingNode : doc.child("wings").children()) {
24 wings.emplace_back(
25 static_cast<uint8_t>(pugi::cast<uint16_t>(wingNode.attribute("id").value())),
26 pugi::cast<uint16_t>(wingNode.attribute("clientid").value()),
27 wingNode.attribute("name").as_string(),
28 pugi::cast<int32_t>(wingNode.attribute("speed").value()),
29 wingNode.attribute("premium").as_bool()
30 );
31 }
32 wings.shrink_to_fit();
33 return true;
34}
35
36Wing* Wings::getWingByID(uint8_t id)
37{
38 auto it = std::find_if(wings.begin(), wings.end(), [id](const Wing& wing) {
39 return wing.id == id;
40 });
41
42 return it != wings.end() ? &*it : nullptr;
43}
44
45Wing* Wings::getWingByName(const std::string& name) {
46 auto wingName = name.c_str();
47 for (auto& it : wings) {
48 if (strcasecmp(wingName, it.name.c_str()) == 0) {
49 return &it;
50 }
51 }
52
53 return nullptr;
54}
55
56Wing* Wings::getWingByClientID(uint16_t clientId)
57{
58 auto it = std::find_if(wings.begin(), wings.end(), [clientId](const Wing& wing) {
59 return wing.clientId == clientId;
60 });
61
62 return it != wings.end() ? &*it : nullptr;
63}
64
Top