auras.cpp

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