diff options
author | Ben Longbons <b.r.longbons@gmail.com> | 2013-03-01 11:45:15 -0800 |
---|---|---|
committer | Ben Longbons <b.r.longbons@gmail.com> | 2013-03-01 13:56:33 -0800 |
commit | 30335063bff54c2b4782689eebdb3b2717e878fa (patch) | |
tree | 8cf4af06a0915e8741b51bbdcb19491d954b5c7f /src/char/char.cpp | |
parent | 777c013fe163348d1489fb9ca2e41cb135eec0d1 (diff) | |
download | tmwa-30335063bff54c2b4782689eebdb3b2717e878fa.tar.gz tmwa-30335063bff54c2b4782689eebdb3b2717e878fa.tar.bz2 tmwa-30335063bff54c2b4782689eebdb3b2717e878fa.tar.xz tmwa-30335063bff54c2b4782689eebdb3b2717e878fa.zip |
Convince skills to work
Diffstat (limited to 'src/char/char.cpp')
-rw-r--r-- | src/char/char.cpp | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/src/char/char.cpp b/src/char/char.cpp index 7954655..9749c23 100644 --- a/src/char/char.cpp +++ b/src/char/char.cpp @@ -327,10 +327,10 @@ std::string mmo_char_tostr(struct mmo_charstatus *p) str_p += '\t'; for (SkillID i : erange(SkillID(), MAX_SKILL)) - if (p->skill[i].id != SkillID()/*SkillID::ZERO*/) + if (p->skill[i].lv) { str_p += STRPRINTF("%d,%d ", - p->skill[i].id, + i, p->skill[i].lv | (uint16_t(p->skill[i].flags) << 16)); } str_p += '\t'; @@ -351,14 +351,21 @@ bool extract(const_string str, struct point *p) return extract(str, record<','>(&p->map, &p->x, &p->y)); } +struct skill_loader +{ + SkillID id; + uint16_t level; + SkillFlags flags; +}; + static -bool extract(const_string str, struct skill *s) +bool extract(const_string str, struct skill_loader *s) { uint32_t flags_and_level; if (!extract(str, record<','>(&s->id, &flags_and_level))) return false; - s->lv = flags_and_level & 0xffff; + s->level = flags_and_level & 0xffff; s->flags = SkillFlags(flags_and_level >> 16); return true; } @@ -375,7 +382,7 @@ bool extract(const_string str, struct mmo_charstatus *p) uint32_t unused_guild_id, unused_pet_id; std::vector<struct point> memos; std::vector<struct item> inventory, cart; - std::vector<struct skill> skills; + std::vector<struct skill_loader> skills; std::vector<struct global_reg> vars; if (!extract(str, record<'\t'>( @@ -429,10 +436,13 @@ bool extract(const_string str, struct mmo_charstatus *p) std::copy(cart.begin(), cart.end(), p->cart); // number of cart items is not saved - it just detects nameid 0 - if (skills.size() > uint16_t(MAX_SKILL)) - return false; - std::copy(skills.begin(), skills.end(), &p->skill[SkillID()]); - // number of skills is not saved - it just detects skill.id 0 + for (struct skill_loader& sk : skills) + { + if (sk.id > MAX_SKILL) + return false; + p->skill[sk.id].lv = sk.level; + p->skill[sk.id].flags = sk.flags; + } if (vars.size() > GLOBAL_REG_NUM) return false; |