summaryrefslogtreecommitdiff
path: root/src/char
diff options
context:
space:
mode:
authormekolat <mekolat@users.noreply.github.com>2015-06-18 09:29:35 -0400
committermekolat <mekolat@users.noreply.github.com>2015-06-18 09:29:35 -0400
commit778015665ad5880410244d13b8a2062e44eee2be (patch)
treefff41da618ac849b1432ecb7f44408769e1bc36c /src/char
parent182e82a79c0455b6e6734b1cb6d83cfcd7f28d61 (diff)
downloadtmwa-778015665ad5880410244d13b8a2062e44eee2be.tar.gz
tmwa-778015665ad5880410244d13b8a2062e44eee2be.tar.bz2
tmwa-778015665ad5880410244d13b8a2062e44eee2be.tar.xz
tmwa-778015665ad5880410244d13b8a2062e44eee2be.zip
send error code when char creation fails
Diffstat (limited to 'src/char')
-rw-r--r--src/char/char.cpp42
1 files changed, 32 insertions, 10 deletions
diff --git a/src/char/char.cpp b/src/char/char.cpp
index 7ad6dff..153cccd 100644
--- a/src/char/char.cpp
+++ b/src/char/char.cpp
@@ -562,7 +562,7 @@ void mmo_char_sync_timer(TimerData *, tick_t)
// Function to create a new character
//-----------------------------------
static
-CharPair *make_new_char(Session *s, CharName name, const Stats6& stats, uint8_t slot, uint16_t hair_color, uint16_t hair_style)
+CharPair *make_new_char(Session *s, CharName name, const Stats6& stats, uint8_t slot, uint16_t hair_color, uint16_t hair_style, short& error_code)
{
// ugh
char_session_data *sd = static_cast<char_session_data *>(s->session_data.get());
@@ -572,6 +572,7 @@ CharPair *make_new_char(Session *s, CharName name, const Stats6& stats, uint8_t
{
CHAR_LOG("Make new char error (control char received in the name): (connection #%d, account: %d).\n"_fmt,
s, sd->account_id);
+ error_code = 0x02;
return nullptr;
}
@@ -580,6 +581,7 @@ CharPair *make_new_char(Session *s, CharName name, const Stats6& stats, uint8_t
{
CHAR_LOG("Make new char error (leading/trailing whitespace): (connection #%d, account: %d, name: '%s'.\n"_fmt,
s, sd->account_id, name);
+ error_code = 0x02;
return nullptr;
}
@@ -588,6 +590,7 @@ CharPair *make_new_char(Session *s, CharName name, const Stats6& stats, uint8_t
{
CHAR_LOG("Make new char error (character name too small): (connection #%d, account: %d, name: '%s').\n"_fmt,
s, sd->account_id, name);
+ error_code = 0x02;
return nullptr;
}
@@ -600,6 +603,7 @@ CharPair *make_new_char(Session *s, CharName name, const Stats6& stats, uint8_t
{
CHAR_LOG("Make new char error (invalid letter in the name): (connection #%d, account: %d), name: %s, invalid letter: %c.\n"_fmt,
s, sd->account_id, name, c);
+ error_code = 0x02;
return nullptr;
}
}
@@ -607,16 +611,29 @@ CharPair *make_new_char(Session *s, CharName name, const Stats6& stats, uint8_t
// TODO this comment is obsolete
// this is why it needs to be unsigned
- if (stats.str + stats.agi + stats.vit + stats.int_ + stats.dex + stats.luk != 5 * 6 || // stats
- slot >= 9 ||
- hair_style >= 20 ||
- hair_color >= 12)
+ if (stats.str + stats.agi + stats.vit + stats.int_ + stats.dex + stats.luk != 5 * 6)
{
- CHAR_LOG("Make new char error (invalid values): (connection #%d, account: %d) slot %d, name: %s, stats: %d+%d+%d+%d+%d+%d=%d, hair: %d, hair color: %d\n"_fmt,
+ CHAR_LOG("Make new char error (invalid stats): (connection #%d, account: %d) slot %d, name: %s, stats: %d+%d+%d+%d+%d+%d=%d\n"_fmt,
s, sd->account_id, slot, name,
stats.str, stats.agi, stats.vit, stats.int_, stats.dex, stats.luk,
- stats.str + stats.agi + stats.vit + stats.int_ + stats.dex + stats.luk,
- hair_style, hair_color);
+ stats.str + stats.agi + stats.vit + stats.int_ + stats.dex + stats.luk);
+ error_code = 0x03;
+ return nullptr;
+ }
+
+ if (slot >= 9)
+ {
+ CHAR_LOG("Make new char error (invalid slot): (connection #%d, account: %d) slot %d, name: %s\n"_fmt,
+ s, sd->account_id, slot, name);
+ error_code = 0x05;
+ return nullptr;
+ }
+
+ if (hair_style >= 20 || hair_color >= 12)
+ {
+ CHAR_LOG("Make new char error (invalid hair): (connection #%d, account: %d) slot %d, name: %s, hair: %d, hair color: %d\n"_fmt,
+ s, sd->account_id, slot, name, hair_style, hair_color);
+ error_code = 0x04;
return nullptr;
}
@@ -631,6 +648,7 @@ CharPair *make_new_char(Session *s, CharName name, const Stats6& stats, uint8_t
stats.str, stats.agi, stats.vit, stats.int_, stats.dex, stats.luk,
stats.str + stats.agi + stats.vit + stats.int_ + stats.dex + stats.luk,
hair_style, hair_color);
+ error_code = 0x03;
return nullptr;
}
}
@@ -644,6 +662,7 @@ CharPair *make_new_char(Session *s, CharName name, const Stats6& stats, uint8_t
stats.str, stats.agi, stats.vit, stats.int_, stats.dex, stats.luk,
stats.str + stats.agi + stats.vit + stats.int_ + stats.dex + stats.luk,
hair_style, hair_color);
+ error_code = 0x01;
return nullptr;
}
if (cd.key.account_id == sd->account_id
@@ -654,6 +673,7 @@ CharPair *make_new_char(Session *s, CharName name, const Stats6& stats, uint8_t
stats.str, stats.agi, stats.vit, stats.int_, stats.dex, stats.luk,
stats.str + stats.agi + stats.vit + stats.int_ + stats.dex + stats.luk,
hair_style, hair_color);
+ error_code = 0x05;
return nullptr;
}
}
@@ -665,6 +685,7 @@ CharPair *make_new_char(Session *s, CharName name, const Stats6& stats, uint8_t
stats.str, stats.agi, stats.vit, stats.int_, stats.dex, stats.luk,
stats.str + stats.agi + stats.vit + stats.int_ + stats.dex + stats.luk,
hair_style, hair_color);
+ error_code = 0x01;
return nullptr;
}
@@ -2355,11 +2376,12 @@ void parse_char(Session *s)
uint8_t slot = fixed.slot;
uint16_t hair_color = fixed.hair_color;
uint16_t hair_style = fixed.hair_style;
- const CharPair *cp = make_new_char(s, name, stats, slot, hair_color, hair_style);
+ short error_code = 0;
+ const CharPair *cp = make_new_char(s, name, stats, slot, hair_color, hair_style, error_code);
if (!cp)
{
Packet_Fixed<0x006e> fixed_6e;
- fixed_6e.code = 0x00;
+ fixed_6e.code = error_code;
send_fpacket<0x006e, 3>(s, fixed_6e);
break;
}