summaryrefslogtreecommitdiff
path: root/src/map/party.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/map/party.cpp')
-rw-r--r--src/map/party.cpp80
1 files changed, 32 insertions, 48 deletions
diff --git a/src/map/party.cpp b/src/map/party.cpp
index c08c9fc..0c6e20e 100644
--- a/src/map/party.cpp
+++ b/src/map/party.cpp
@@ -1,35 +1,34 @@
-// $Id: party.c,v 1.2 2004/09/22 02:59:47 Akitasha Exp $
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
#include "party.hpp"
+
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
+
#include "../common/db.hpp"
-#include "../common/timer.hpp"
-#include "../common/socket.hpp"
#include "../common/nullpo.hpp"
-#include "pc.hpp"
-#include "map.hpp"
+#include "../common/socket.hpp"
+#include "../common/timer.hpp"
+
#include "battle.hpp"
-#include "intif.hpp"
#include "clif.hpp"
+#include "intif.hpp"
+#include "map.hpp"
+#include "pc.hpp"
#include "skill.hpp"
#include "tmw.hpp"
-#ifdef MEMWATCH
-#include "memwatch.hpp"
-#endif
-
#define PARTY_SEND_XYHP_INVERVAL 1000 // 座標やHP送信の間隔
-static struct dbt *party_db;
+static
+struct dbt *party_db;
void party_send_xyhp_timer(timer_id tid, tick_t tick, custom_id_t id, custom_data_t data);
/*==========================================
* 終了
*------------------------------------------
*/
-static void party_db_final(db_key_t key, db_val_t data, va_list ap)
+static
+void party_db_final(db_key_t, db_val_t data)
{
free(data);
}
@@ -56,12 +55,9 @@ struct party *party_search(int party_id)
}
static
-void party_searchname_sub(db_key_t key, db_val_t data, va_list ap)
+void party_searchname_sub(db_key_t, db_val_t data, const char *str, struct party **dst)
{
- struct party *p = (struct party *) data, **dst;
- const char *str;
- str = va_arg(ap, const char *);
- dst = va_arg(ap, struct party **);
+ struct party *p = (struct party *) data;
if (strcasecmp(p->name, str) == 0)
*dst = p;
}
@@ -70,7 +66,7 @@ void party_searchname_sub(db_key_t key, db_val_t data, va_list ap)
struct party *party_searchname(const char *str)
{
struct party *p = NULL;
- numdb_foreach(party_db, party_searchname_sub, str, &p);
+ numdb_foreach(party_db, std::bind(party_searchname_sub, ph::_1, ph::_2, str, &p));
return p;
}
@@ -383,8 +379,7 @@ int party_member_added(int party_id, int account_id, int flag)
}
// パーティ除名要求
-int party_removemember(struct map_session_data *sd, int account_id,
- const char *name)
+int party_removemember(struct map_session_data *sd, int account_id, const char *)
{
struct party *p;
int i;
@@ -514,7 +509,7 @@ int party_optionchanged(int party_id, int account_id, int exp, int item,
}
// パーティメンバの移動通知
-int party_recv_movemap(int party_id, int account_id, const char *map, int online,
+int party_recv_movemap(int party_id, int account_id, const char *mapname, int online,
int lv)
{
struct party *p;
@@ -531,7 +526,7 @@ int party_recv_movemap(int party_id, int account_id, const char *map, int online
}
if (m->account_id == account_id)
{
- memcpy(m->map, map, 16);
+ memcpy(m->map, mapname, 16);
m->online = online;
m->lv = lv;
break;
@@ -644,7 +639,7 @@ int party_check_conflict(struct map_session_data *sd)
// 位置やHP通知用
static
-void party_send_xyhp_timer_sub(db_key_t key, db_val_t data, va_list ap)
+void party_send_xyhp_timer_sub(db_key_t, db_val_t data)
{
struct party *p = (struct party *) data;
int i;
@@ -675,9 +670,9 @@ void party_send_xyhp_timer_sub(db_key_t key, db_val_t data, va_list ap)
}
// 位置やHP通知
-void party_send_xyhp_timer(timer_id tid, tick_t tick, custom_id_t id, custom_data_t data)
+void party_send_xyhp_timer(timer_id, tick_t, custom_id_t, custom_data_t)
{
- numdb_foreach(party_db, party_send_xyhp_timer_sub, tick);
+ numdb_foreach(party_db, party_send_xyhp_timer_sub);
}
// 位置通知クリア
@@ -701,18 +696,12 @@ int party_send_xy_clear(struct party *p)
}
// HP通知の必要性検査用(map_foreachinmoveareaから呼ばれる)
-void party_send_hp_check(struct block_list *bl, va_list ap)
+void party_send_hp_check(struct block_list *bl, int party_id, int *flag)
{
- int party_id;
- int *flag;
struct map_session_data *sd;
nullpo_retv(bl);
- nullpo_retv(ap);
- nullpo_retv(sd = (struct map_session_data *) bl);
-
- party_id = va_arg(ap, int);
- flag = va_arg(ap, int *);
+ sd = (struct map_session_data *) bl;
if (sd->status.party_id == party_id)
{
@@ -722,7 +711,7 @@ void party_send_hp_check(struct block_list *bl, va_list ap)
}
// 経験値公平分配
-int party_exp_share(struct party *p, int map, int base_exp, int job_exp)
+int party_exp_share(struct party *p, int mapid, int base_exp, int job_exp)
{
struct map_session_data *sd;
int i, c;
@@ -730,12 +719,12 @@ int party_exp_share(struct party *p, int map, int base_exp, int job_exp)
nullpo_retr(0, p);
for (i = c = 0; i < MAX_PARTY; i++)
- if ((sd = p->member[i].sd) != NULL && sd->bl.m == map)
+ if ((sd = p->member[i].sd) != NULL && sd->bl.m == mapid)
c++;
if (c == 0)
return 0;
for (i = 0; i < MAX_PARTY; i++)
- if ((sd = p->member[i].sd) != NULL && sd->bl.m == map)
+ if ((sd = p->member[i].sd) != NULL && sd->bl.m == mapid)
pc_gainexp(sd, base_exp / c + 1, job_exp / c + 1);
return 0;
}
@@ -743,11 +732,10 @@ int party_exp_share(struct party *p, int map, int base_exp, int job_exp)
// 同じマップのパーティメンバー全体に処理をかける
// type==0 同じマップ
// !=0 画面内
-void party_foreachsamemap(void(*func)(struct block_list *, va_list),
- struct map_session_data *sd, int type, ...)
+void party_foreachsamemap(std::function<void(struct block_list *)> func,
+ struct map_session_data *sd, int type)
{
struct party *p;
- va_list ap;
int i;
int x0, y0, x1, y1;
struct block_list *list[MAX_PARTY];
@@ -763,8 +751,6 @@ void party_foreachsamemap(void(*func)(struct block_list *, va_list),
x1 = sd->bl.x + AREA_SIZE;
y1 = sd->bl.y + AREA_SIZE;
- va_start(ap, type);
-
for (i = 0; i < MAX_PARTY; i++)
{
struct party_member *m = &p->member[i];
@@ -784,9 +770,7 @@ void party_foreachsamemap(void(*func)(struct block_list *, va_list),
for (i = 0; i < blockcount; i++)
if (list[i]->prev) // 有効かどうかチェック
- func(list[i], ap);
+ func(list[i]);
map_freeblock_unlock(); // 解放を許可する
-
- va_end(ap);
}