summaryrefslogtreecommitdiff
path: root/src/char/int_party.cpp
diff options
context:
space:
mode:
authorBen Longbons <b.r.longbons@gmail.com>2014-04-22 11:46:23 -0700
committerBen Longbons <b.r.longbons@gmail.com>2014-04-22 13:20:52 -0700
commitad049a15b43b7ddba3fe7d0a898652fc8022629d (patch)
tree142624e70ead3e89a8da6d56de41651f171524d0 /src/char/int_party.cpp
parentceeda2e337077b2edaf1af09cc4df2c30e8205a1 (diff)
downloadtmwa-ad049a15b43b7ddba3fe7d0a898652fc8022629d.tar.gz
tmwa-ad049a15b43b7ddba3fe7d0a898652fc8022629d.tar.bz2
tmwa-ad049a15b43b7ddba3fe7d0a898652fc8022629d.tar.xz
tmwa-ad049a15b43b7ddba3fe7d0a898652fc8022629d.zip
Use strict ID types
Possibly some missing for the far side of the network. AccountId and BlockId are still terribly entangled.
Diffstat (limited to 'src/char/int_party.cpp')
-rw-r--r--src/char/int_party.cpp131
1 files changed, 67 insertions, 64 deletions
diff --git a/src/char/int_party.cpp b/src/char/int_party.cpp
index 952788c..3afa8a9 100644
--- a/src/char/int_party.cpp
+++ b/src/char/int_party.cpp
@@ -23,6 +23,8 @@
#include <cstdlib>
#include <cstring>
+#include "../ints/udl.hpp"
+
#include "../strings/mstring.hpp"
#include "../strings/astring.hpp"
#include "../strings/xstring.hpp"
@@ -45,16 +47,16 @@
AString party_txt = "save/party.txt"_s;
static
-Map<int, struct party> party_db;
+Map<PartyId, struct party> party_db;
static
-int party_newid = 100;
+PartyId party_newid = wrap<PartyId>(100_u32);
static
-void mapif_party_broken(int party_id, int flag);
+void mapif_party_broken(PartyId party_id, int flag);
static
int party_check_empty(struct party *p);
static
-void mapif_parse_PartyLeave(Session *s, int party_id, int account_id);
+void mapif_parse_PartyLeave(Session *s, PartyId party_id, AccountId account_id);
// パーティデータの文字列への変換
static
@@ -150,24 +152,24 @@ void inter_party_init(void)
if (!in.is_open())
return;
- // TODO: convert to use char_id, and change to extract()
+ // TODO: convert to use char_id
AString line;
int c = 0;
while (in.getline(line))
{
- int i, j = 0;
- if (SSCANF(line, "%d\t%%newid%%\n%n"_fmt, &i, &j) == 1 && j > 0
- && party_newid <= i)
+ PartyId i;
+ if (extract(line, record<'\t'>(&i, "%newid%"_s))
+ && party_newid < i)
{
party_newid = i;
continue;
}
struct party p {};
- if (extract(line, &p) && p.party_id > 0)
+ if (extract(line, &p) && p.party_id)
{
- if (p.party_id >= party_newid)
- party_newid = p.party_id + 1;
+ if (party_newid < next(p.party_id))
+ party_newid = next(p.party_id);
party_check_deleted_init(&p);
party_db.insert(p.party_id, p);
party_check_empty(&p);
@@ -253,7 +255,7 @@ int party_check_empty(struct party *p)
for (i = 0; i < MAX_PARTY; i++)
{
- if (p->member[i].account_id > 0)
+ if (p->member[i].account_id)
{
return 0;
}
@@ -268,7 +270,7 @@ int party_check_empty(struct party *p)
// キャラの競合がないかチェック用
static
void party_check_conflict_sub(struct party *p,
- int party_id, int account_id, CharName nick)
+ PartyId party_id, AccountId account_id, CharName nick)
{
int i;
@@ -290,7 +292,7 @@ void party_check_conflict_sub(struct party *p,
// キャラの競合がないかチェック
static
-void party_check_conflict(int party_id, int account_id, CharName nick)
+void party_check_conflict(PartyId party_id, AccountId account_id, CharName nick)
{
for (auto& pair : party_db)
party_check_conflict_sub(&pair.second,
@@ -302,14 +304,14 @@ void party_check_conflict(int party_id, int account_id, CharName nick)
// パーティ作成可否
static
-void mapif_party_created(Session *s, int account_id, struct party *p)
+void mapif_party_created(Session *s, AccountId account_id, struct party *p)
{
WFIFOW(s, 0) = 0x3820;
- WFIFOL(s, 2) = account_id;
+ WFIFOL(s, 2) = unwrap<AccountId>(account_id);
if (p != NULL)
{
WFIFOB(s, 6) = 0;
- WFIFOL(s, 7) = p->party_id;
+ WFIFOL(s, 7) = unwrap<PartyId>(p->party_id);
WFIFO_STRING(s, 11, p->name, 24);
PRINTF("int_party: created! %d %s\n"_fmt, p->party_id, p->name);
}
@@ -324,11 +326,11 @@ void mapif_party_created(Session *s, int account_id, struct party *p)
// パーティ情報見つからず
static
-void mapif_party_noinfo(Session *s, int party_id)
+void mapif_party_noinfo(Session *s, PartyId party_id)
{
WFIFOW(s, 0) = 0x3821;
WFIFOW(s, 2) = 8;
- WFIFOL(s, 4) = party_id;
+ WFIFOL(s, 4) = unwrap<PartyId>(party_id);
WFIFOSET(s, 8);
PRINTF("int_party: info not found %d\n"_fmt, party_id);
}
@@ -350,25 +352,25 @@ void mapif_party_info(Session *s, struct party *p)
// パーティメンバ追加可否
static
-void mapif_party_memberadded(Session *s, int party_id, int account_id, int flag)
+void mapif_party_memberadded(Session *s, PartyId party_id, AccountId account_id, int flag)
{
WFIFOW(s, 0) = 0x3822;
- WFIFOL(s, 2) = party_id;
- WFIFOL(s, 6) = account_id;
+ WFIFOL(s, 2) = unwrap<PartyId>(party_id);
+ WFIFOL(s, 6) = unwrap<AccountId>(account_id);
WFIFOB(s, 10) = flag;
WFIFOSET(s, 11);
}
// パーティ設定変更通知
static
-void mapif_party_optionchanged(Session *s, struct party *p, int account_id,
+void mapif_party_optionchanged(Session *s, struct party *p, AccountId account_id,
int flag)
{
unsigned char buf[15];
WBUFW(buf, 0) = 0x3823;
- WBUFL(buf, 2) = p->party_id;
- WBUFL(buf, 6) = account_id;
+ WBUFL(buf, 2) = unwrap<PartyId>(p->party_id);
+ WBUFL(buf, 6) = unwrap<AccountId>(account_id);
WBUFW(buf, 10) = p->exp;
WBUFW(buf, 12) = p->item;
WBUFB(buf, 14) = flag;
@@ -382,13 +384,13 @@ void mapif_party_optionchanged(Session *s, struct party *p, int account_id,
// パーティ脱退通知
static
-void mapif_party_leaved(int party_id, int account_id, CharName name)
+void mapif_party_leaved(PartyId party_id, AccountId account_id, CharName name)
{
unsigned char buf[34];
WBUFW(buf, 0) = 0x3824;
- WBUFL(buf, 2) = party_id;
- WBUFL(buf, 6) = account_id;
+ WBUFL(buf, 2) = unwrap<PartyId>(party_id);
+ WBUFL(buf, 6) = unwrap<AccountId>(account_id);
WBUF_STRING(buf, 10, name.to__actual(), 24);
mapif_sendall(buf, 34);
PRINTF("int_party: party leaved %d %d %s\n"_fmt, party_id, account_id, name);
@@ -402,8 +404,8 @@ void mapif_party_membermoved(struct party *p, int idx)
unsigned char buf[29];
WBUFW(buf, 0) = 0x3825;
- WBUFL(buf, 2) = p->party_id;
- WBUFL(buf, 6) = p->member[idx].account_id;
+ WBUFL(buf, 2) = unwrap<PartyId>(p->party_id);
+ WBUFL(buf, 6) = unwrap<AccountId>(p->member[idx].account_id);
WBUF_STRING(buf, 10, p->member[idx].map, 16);
WBUFB(buf, 26) = p->member[idx].online;
WBUFW(buf, 27) = p->member[idx].lv;
@@ -411,11 +413,11 @@ void mapif_party_membermoved(struct party *p, int idx)
}
// パーティ解散通知
-void mapif_party_broken(int party_id, int flag)
+void mapif_party_broken(PartyId party_id, int flag)
{
unsigned char buf[7];
WBUFW(buf, 0) = 0x3826;
- WBUFL(buf, 2) = party_id;
+ WBUFL(buf, 2) = unwrap<PartyId>(party_id);
WBUFB(buf, 6) = flag;
mapif_sendall(buf, 7);
PRINTF("int_party: broken %d\n"_fmt, party_id);
@@ -424,15 +426,15 @@ void mapif_party_broken(int party_id, int flag)
// パーティ内発言
static
-void mapif_party_message(int party_id, int account_id, XString mes)
+void mapif_party_message(PartyId party_id, AccountId account_id, XString mes)
{
size_t len = mes.size() + 1;
unsigned char buf[len + 12];
WBUFW(buf, 0) = 0x3827;
WBUFW(buf, 2) = len + 12;
- WBUFL(buf, 4) = party_id;
- WBUFL(buf, 8) = account_id;
+ WBUFL(buf, 4) = unwrap<PartyId>(party_id);
+ WBUFL(buf, 8) = unwrap<AccountId>(account_id);
WBUF_STRING(buf, 12, mes, len);
mapif_sendall(buf, len + 12);
}
@@ -442,7 +444,7 @@ void mapif_party_message(int party_id, int account_id, XString mes)
// パーティ
static
-void mapif_parse_CreateParty(Session *s, int account_id, PartyName name, CharName nick,
+void mapif_parse_CreateParty(Session *s, AccountId account_id, PartyName name, CharName nick,
MapName map, int lv)
{
{
@@ -461,7 +463,8 @@ void mapif_parse_CreateParty(Session *s, int account_id, PartyName name, CharNam
return;
}
struct party p {};
- p.party_id = party_newid++;
+ party_newid = next(party_newid);
+ p.party_id = party_newid;
p.name = name;
p.exp = 0;
p.item = 0;
@@ -480,7 +483,7 @@ void mapif_parse_CreateParty(Session *s, int account_id, PartyName name, CharNam
// パーティ情報要求
static
-void mapif_parse_PartyInfo(Session *s, int party_id)
+void mapif_parse_PartyInfo(Session *s, PartyId party_id)
{
struct party *p = party_db.search(party_id);
if (p != NULL)
@@ -491,7 +494,7 @@ void mapif_parse_PartyInfo(Session *s, int party_id)
// パーティ追加要求
static
-void mapif_parse_PartyAddMember(Session *s, int party_id, int account_id,
+void mapif_parse_PartyAddMember(Session *s, PartyId party_id, AccountId account_id,
CharName nick, MapName map, int lv)
{
struct party *p = party_db.search(party_id);
@@ -503,7 +506,7 @@ void mapif_parse_PartyAddMember(Session *s, int party_id, int account_id,
for (int i = 0; i < MAX_PARTY; i++)
{
- if (p->member[i].account_id == 0)
+ if (!p->member[i].account_id)
{
int flag = 0;
@@ -522,7 +525,7 @@ void mapif_parse_PartyAddMember(Session *s, int party_id, int account_id,
flag = 0x01;
}
if (flag)
- mapif_party_optionchanged(s, p, 0, 0);
+ mapif_party_optionchanged(s, p, AccountId(), 0);
return;
}
}
@@ -531,7 +534,7 @@ void mapif_parse_PartyAddMember(Session *s, int party_id, int account_id,
// パーティー設定変更要求
static
-void mapif_parse_PartyChangeOption(Session *s, int party_id, int account_id,
+void mapif_parse_PartyChangeOption(Session *s, PartyId party_id, AccountId account_id,
int exp, int item)
{
struct party *p = party_db.search(party_id);
@@ -552,7 +555,7 @@ void mapif_parse_PartyChangeOption(Session *s, int party_id, int account_id,
}
// パーティ脱退要求
-void mapif_parse_PartyLeave(Session *, int party_id, int account_id)
+void mapif_parse_PartyLeave(Session *, PartyId party_id, AccountId account_id)
{
struct party *p = party_db.search(party_id);
if (!p)
@@ -572,7 +575,7 @@ void mapif_parse_PartyLeave(Session *, int party_id, int account_id)
// パーティマップ更新要求
static
-void mapif_parse_PartyChangeMap(Session *s, int party_id, int account_id,
+void mapif_parse_PartyChangeMap(Session *s, PartyId party_id, AccountId account_id,
MapName map, int online, int lv)
{
struct party *p = party_db.search(party_id);
@@ -596,14 +599,14 @@ void mapif_parse_PartyChangeMap(Session *s, int party_id, int account_id,
flag = 1;
}
if (flag)
- mapif_party_optionchanged(s, p, 0, 0);
+ mapif_party_optionchanged(s, p, AccountId(), 0);
return;
}
}
// パーティ解散要求
static
-void mapif_parse_BreakParty(Session *, int party_id)
+void mapif_parse_BreakParty(Session *, PartyId party_id)
{
struct party *p = party_db.search(party_id);
if (p == NULL)
@@ -615,14 +618,14 @@ void mapif_parse_BreakParty(Session *, int party_id)
// パーティメッセージ送信
static
-void mapif_parse_PartyMessage(Session *, int party_id, int account_id, XString mes)
+void mapif_parse_PartyMessage(Session *, PartyId party_id, AccountId account_id, XString mes)
{
mapif_party_message(party_id, account_id, mes);
}
// パーティチェック要求
static
-void mapif_parse_PartyCheck(Session *, int party_id, int account_id, CharName nick)
+void mapif_parse_PartyCheck(Session *, PartyId party_id, AccountId account_id, CharName nick)
{
party_check_conflict(party_id, account_id, nick);
}
@@ -638,7 +641,7 @@ int inter_party_parse_frommap(Session *ms)
{
case 0x3020:
{
- int account = RFIFOL(ms, 2);
+ AccountId account = wrap<AccountId>(RFIFOL(ms, 2));
PartyName name = stringish<PartyName>(RFIFO_STRING<24>(ms, 6));
CharName nick = stringish<CharName>(RFIFO_STRING<24>(ms, 30));
MapName map = RFIFO_STRING<16>(ms, 54);
@@ -653,14 +656,14 @@ int inter_party_parse_frommap(Session *ms)
break;
case 0x3021:
{
- int party_id = RFIFOL(ms, 2);
+ PartyId party_id = wrap<PartyId>(RFIFOL(ms, 2));
mapif_parse_PartyInfo(ms, party_id);
}
break;
case 0x3022:
{
- int party_id = RFIFOL(ms, 2);
- int account_id = RFIFOL(ms, 6);
+ PartyId party_id = wrap<PartyId>(RFIFOL(ms, 2));
+ AccountId account_id = wrap<AccountId>(RFIFOL(ms, 6));
CharName nick = stringish<CharName>(RFIFO_STRING<24>(ms, 10));
MapName map = RFIFO_STRING<16>(ms, 34);
uint16_t lv = RFIFOW(ms, 50);
@@ -674,8 +677,8 @@ int inter_party_parse_frommap(Session *ms)
break;
case 0x3023:
{
- int party_id = RFIFOL(ms, 2);
- int account_id = RFIFOL(ms, 6);
+ PartyId party_id = wrap<PartyId>(RFIFOL(ms, 2));
+ AccountId account_id = wrap<AccountId>(RFIFOL(ms, 6));
uint16_t exp = RFIFOW(ms, 10);
uint16_t item = RFIFOW(ms, 12);
mapif_parse_PartyChangeOption(ms,
@@ -687,8 +690,8 @@ int inter_party_parse_frommap(Session *ms)
break;
case 0x3024:
{
- int party_id = RFIFOL(ms, 2);
- int account_id = RFIFOL(ms, 6);
+ PartyId party_id = wrap<PartyId>(RFIFOL(ms, 2));
+ AccountId account_id = wrap<AccountId>(RFIFOL(ms, 6));
mapif_parse_PartyLeave(ms,
party_id,
account_id);
@@ -696,8 +699,8 @@ int inter_party_parse_frommap(Session *ms)
break;
case 0x3025:
{
- int party_id = RFIFOL(ms, 2);
- int account_id = RFIFOL(ms, 6);
+ PartyId party_id = wrap<PartyId>(RFIFOL(ms, 2));
+ AccountId account_id = wrap<AccountId>(RFIFOL(ms, 6));
MapName map = RFIFO_STRING<16>(ms, 10);
uint8_t online = RFIFOB(ms, 26);
uint16_t lv = RFIFOW(ms, 27);
@@ -711,15 +714,15 @@ int inter_party_parse_frommap(Session *ms)
break;
case 0x3026:
{
- int party_id = RFIFOL(ms, 2);
+ PartyId party_id = wrap<PartyId>(RFIFOL(ms, 2));
mapif_parse_BreakParty(ms, party_id);
}
break;
case 0x3027:
{
size_t len = RFIFOW(ms, 2) - 12;
- int party_id = RFIFOL(ms, 4);
- int account_id = RFIFOL(ms, 8);
+ PartyId party_id = wrap<PartyId>(RFIFOL(ms, 4));
+ AccountId account_id = wrap<AccountId>(RFIFOL(ms, 8));
AString mes = RFIFO_STRING(ms, 12, len);
mapif_parse_PartyMessage(ms,
party_id,
@@ -729,8 +732,8 @@ int inter_party_parse_frommap(Session *ms)
break;
case 0x3028:
{
- int party_id = RFIFOL(ms, 2);
- int account_id = RFIFOL(ms, 6);
+ PartyId party_id = wrap<PartyId>(RFIFOL(ms, 2));
+ AccountId account_id = wrap<AccountId>(RFIFOL(ms, 6));
CharName nick = stringish<CharName>(RFIFO_STRING<24>(ms, 10));
mapif_parse_PartyCheck(ms,
party_id,
@@ -746,7 +749,7 @@ int inter_party_parse_frommap(Session *ms)
}
// サーバーから脱退要求(キャラ削除用)
-void inter_party_leave(int party_id, int account_id)
+void inter_party_leave(PartyId party_id, AccountId account_id)
{
mapif_parse_PartyLeave(nullptr, party_id, account_id);
}