summaryrefslogtreecommitdiff
path: root/src/map/party.cpp
diff options
context:
space:
mode:
authorBen Longbons <b.r.longbons@gmail.com>2013-02-23 14:28:21 -0800
committerBen Longbons <b.r.longbons@gmail.com>2013-02-23 15:13:16 -0800
commit1e77f5dc8d95bbf912205c85274d294a80ea65c9 (patch)
tree054aa52764297b205431dfe82119a7f3e5e7ecd1 /src/map/party.cpp
parent25823b36905a84d92f9299ba7f9f0c713141c8fb (diff)
downloadtmwa-1e77f5dc8d95bbf912205c85274d294a80ea65c9.tar.gz
tmwa-1e77f5dc8d95bbf912205c85274d294a80ea65c9.tar.bz2
tmwa-1e77f5dc8d95bbf912205c85274d294a80ea65c9.tar.xz
tmwa-1e77f5dc8d95bbf912205c85274d294a80ea65c9.zip
Replace struct dbt with typesafe std::map wrappers
Also fix broken save/accreg.txt reading.
Diffstat (limited to 'src/map/party.cpp')
-rw-r--r--src/map/party.cpp33
1 files changed, 15 insertions, 18 deletions
diff --git a/src/map/party.cpp b/src/map/party.cpp
index f6cb84b..277d0c8 100644
--- a/src/map/party.cpp
+++ b/src/map/party.cpp
@@ -21,7 +21,7 @@
constexpr interval_t PARTY_SEND_XYHP_INVERVAL = std::chrono::seconds(1);
static
-struct dbt *party_db;
+Map<int, struct party> party_db;
static
int party_check_conflict(struct map_session_data *sd);
@@ -31,7 +31,6 @@ void party_send_xyhp_timer(TimerData *tid, tick_t tick);
// 初期化
void do_init_party(void)
{
- party_db = numdb_init();
add_timer_interval(gettick() + PARTY_SEND_XYHP_INVERVAL,
party_send_xyhp_timer,
PARTY_SEND_XYHP_INVERVAL);
@@ -40,13 +39,12 @@ void do_init_party(void)
// 検索
struct party *party_search(int party_id)
{
- return (struct party *)numdb_search(party_db, party_id);
+ return party_db.search(party_id);
}
static
-void party_searchname_sub(db_key_t, db_val_t data, const char *str, struct party **dst)
+void party_searchname_sub(struct party *p, const char *str, struct party **dst)
{
- struct party *p = (struct party *) data;
if (strcasecmp(p->name, str) == 0)
*dst = p;
}
@@ -55,7 +53,8 @@ void party_searchname_sub(db_key_t, db_val_t data, const char *str, struct party
struct party *party_searchname(const char *str)
{
struct party *p = NULL;
- numdb_foreach(party_db, std::bind(party_searchname_sub, ph::_1, ph::_2, str, &p));
+ for (auto& pair : party_db)
+ party_searchname_sub(&pair.second, str, &p);
return p;
}
@@ -93,19 +92,18 @@ int party_created(int account_id, int fail, int party_id, const char *name)
/* The party name is valid and not already taken. */
if (!fail)
{
- struct party *p;
sd->status.party_id = party_id;
- if ((p = (struct party *)numdb_search(party_db, party_id)) != NULL)
+ struct party *p = party_db.search(party_id);
+ if (p != NULL)
{
PRINTF("party_created(): ID already exists!\n");
exit(1);
}
- CREATE(p, struct party, 1);
+ p = party_db.init(party_id);
p->party_id = party_id;
memcpy(p->name, name, 24);
- numdb_insert(party_db, party_id, p);
/* The party was created successfully. */
clif_party_created(sd, 0);
@@ -184,15 +182,14 @@ int party_recv_noinfo(int party_id)
// 情報所得
int party_recv_info(const struct party *sp)
{
- struct party *p;
int i;
nullpo_ret(sp);
- if ((p = (struct party *)numdb_search(party_db, sp->party_id)) == NULL)
+ struct party *p = party_db.search(sp->party_id);
+ if (p == NULL)
{
- CREATE(p, struct party, 1);
- numdb_insert(party_db, sp->party_id, p);
+ p = party_db.init(sp->party_id);
// 最初のロードなのでユーザーのチェックを行う
*p = *sp;
@@ -466,7 +463,7 @@ int party_broken(int party_id)
p->member[i].sd->party_sended = 0;
}
}
- numdb_erase(party_db, party_id);
+ party_db.erase(party_id);
return 0;
}
@@ -633,9 +630,8 @@ int party_check_conflict(struct map_session_data *sd)
// 位置やHP通知用
static
-void party_send_xyhp_timer_sub(db_key_t, db_val_t data)
+void party_send_xyhp_timer_sub(struct party *p)
{
- struct party *p = (struct party *) data;
int i;
nullpo_retv(p);
@@ -666,7 +662,8 @@ void party_send_xyhp_timer_sub(db_key_t, db_val_t data)
// 位置やHP通知
void party_send_xyhp_timer(TimerData *, tick_t)
{
- numdb_foreach(party_db, party_send_xyhp_timer_sub);
+ for (auto& pair : party_db)
+ party_send_xyhp_timer_sub(&pair.second);
}
// 位置通知クリア