summaryrefslogtreecommitdiff
path: root/src/mmo/extract.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mmo/extract.cpp')
-rw-r--r--src/mmo/extract.cpp49
1 files changed, 44 insertions, 5 deletions
diff --git a/src/mmo/extract.cpp b/src/mmo/extract.cpp
index 378986d..a480984 100644
--- a/src/mmo/extract.cpp
+++ b/src/mmo/extract.cpp
@@ -18,12 +18,20 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
+#include <algorithm>
+
#include "../strings/astring.hpp"
#include "../strings/xstring.hpp"
#include "../strings/vstring.hpp"
+#include "extract_enums.hpp"
+#include "mmo.hpp"
+
#include "../poison.hpp"
+
+namespace tmwa
+{
bool extract(XString str, XString *rv)
{
*rv = str;
@@ -36,20 +44,21 @@ bool extract(XString str, AString *rv)
return true;
}
-bool extract(XString str, struct global_reg *var)
+bool extract(XString str, GlobalReg *var)
{
return extract(str,
record<','>(&var->str, &var->value));
}
-bool extract(XString str, struct item *it)
+bool extract(XString str, Item *it)
{
XString ignored;
- return extract(str,
+ XString corruption_hack_amount;
+ bool rv = extract(str,
record<',', 11>(
- &it->id,
+ &ignored,
&it->nameid,
- &it->amount,
+ &corruption_hack_amount,
&it->equip,
&ignored,
&ignored,
@@ -59,4 +68,34 @@ bool extract(XString str, struct item *it)
&ignored,
&ignored,
&ignored));
+ if (rv)
+ {
+ if (corruption_hack_amount == "-1"_s)
+ it->amount = 0;
+ else
+ rv = extract(corruption_hack_amount, &it->amount);
+ }
+ return rv;
+}
+
+bool extract(XString str, MapName *m)
+{
+ XString::iterator it = std::find(str.begin(), str.end(), '.');
+ str = str.xislice_h(it);
+ VString<15> tmp;
+ bool rv = extract(str, &tmp);
+ *m = tmp;
+ return rv;
+}
+
+bool extract(XString str, CharName *out)
+{
+ VString<23> tmp;
+ if (extract(str, &tmp))
+ {
+ *out = CharName(tmp);
+ return true;
+ }
+ return false;
}
+} // namespace tmwa