summaryrefslogtreecommitdiff
path: root/src/map/party.h
blob: 960e6da08141914c99394afdf786a1aa163d6d48 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
// Copyright (c) Hercules Dev Team, licensed under GNU GPL.
// See the LICENSE file
// Portions Copyright (c) Athena Dev Teams

#ifndef MAP_PARTY_H
#define MAP_PARTY_H

#include "map/map.h" // TBL_PC
#include "common/hercules.h"
#include "common/db.h"
#include "common/mmo.h" // struct party

#include <stdarg.h>

#define PARTY_BOOKING_JOBS 6
#define PARTY_BOOKING_RESULTS 10

struct hplugin_data_store;

struct party_member_data {
	struct map_session_data *sd;
	unsigned int hp; //For HP,x,y refreshing.
	unsigned short x, y;
};

struct party_data {
	struct party party;
	struct party_member_data data[MAX_PARTY];
	uint8 itemc; //For item distribution, position of last picker in party
	short *instance;
	unsigned short instances;
	struct {
		unsigned monk : 1;   ///< There's at least one monk in party?
		unsigned sg : 1;     ///< There's at least one Star Gladiator in party?
		unsigned snovice :1; ///< There's a Super Novice
		unsigned tk : 1;     ///< There's a taekwon
	} state;

	/* HPM Custom Struct */
	struct hplugin_data_store *hdata;
};

#define PB_NOTICE_LENGTH (36 + 1)

#ifndef PARTY_RECRUIT
struct party_booking_detail {
	short level;
	short mapid;
	short job[PARTY_BOOKING_JOBS];
};

struct party_booking_ad_info {
	unsigned int index;
	char charname[NAME_LENGTH];
	int expiretime;
	struct party_booking_detail p_detail;
};
#else /* PARTY_RECRUIT */
struct party_booking_detail {
	short level;
	char notice[PB_NOTICE_LENGTH];
};

struct party_booking_ad_info {
	unsigned int index;
	int expiretime;
	char charname[NAME_LENGTH];
	struct party_booking_detail p_detail;
};
#endif /* PARTY_RECRUIT */

/*=====================================
* Interface : party.h
* Generated by HerculesInterfaceMaker
* created by Susu
*-------------------------------------*/
struct party_interface {
	DBMap* db; // int party_id -> struct party_data* (releases data)
	DBMap* booking_db; // int char_id -> struct party_booking_ad_info* (releases data) // Party Booking [Spiria]
	unsigned int booking_nextid;
	/* funcs */
	void (*init) (bool minimal);
	void (*final) (void);
	/* */
	struct party_data* (*search) (int party_id);
	struct party_data* (*searchname) (const char* str);
	int (*getmemberid) (struct party_data* p, struct map_session_data* sd);
	struct map_session_data* (*getavailablesd) (struct party_data *p);

	int (*create) (struct map_session_data *sd,char *name, int item, int item2);
	void (*created) (int account_id,int char_id,int fail,int party_id,char *name);
	int (*request_info) (int party_id, int char_id);
	int (*invite) (struct map_session_data *sd,struct map_session_data *tsd);
	void (*member_joined) (struct map_session_data *sd);
	int (*member_added) (int party_id,int account_id,int char_id,int flag);
	int (*leave) (struct map_session_data *sd);
	int (*removemember) (struct map_session_data *sd,int account_id,char *name);
	int (*member_withdraw) (int party_id,int account_id,int char_id);
	void (*reply_invite) (struct map_session_data *sd,int party_id,int flag);
	int (*recv_noinfo) (int party_id, int char_id);
	int (*recv_info) (struct party* sp, int char_id);
	int (*recv_movemap) (int party_id,int account_id,int char_id, unsigned short mapid,int online,int lv);
	int (*broken) (int party_id);
	int (*optionchanged) (int party_id,int account_id,int exp,int item,int flag);
	int (*changeoption) (struct map_session_data *sd,int exp,int item);
	bool (*changeleader) (struct map_session_data *sd, struct map_session_data *t_sd);
	void (*send_movemap) (struct map_session_data *sd);
	void (*send_levelup) (struct map_session_data *sd);
	int (*send_logout) (struct map_session_data *sd);
	int (*send_message) (struct map_session_data *sd,const char *mes,int len);
	int (*recv_message) (int party_id,int account_id,const char *mes,int len);
	int (*skill_check) (struct map_session_data *sd, int party_id, uint16 skill_id, uint16 skill_lv);
	int (*send_xy_clear) (struct party_data *p);
	int (*exp_share) (struct party_data *p,struct block_list *src,unsigned int base_exp,unsigned int job_exp,int zeny);
	int (*share_loot) (struct party_data* p, struct map_session_data* sd, struct item* item_data, int first_charid);
	int (*send_dot_remove) (struct map_session_data *sd);
	int (*sub_count) (struct block_list *bl, va_list ap);
	int (*sub_count_chorus) (struct block_list *bl, va_list ap);
	/*==========================================
	 * Party Booking in KRO [Spiria]
	 *------------------------------------------*/
	void (*booking_register) (struct map_session_data *sd, short level, short mapid, short* job);
	void (*booking_update) (struct map_session_data *sd, short* job);
	void (*booking_search) (struct map_session_data *sd, short level, short mapid, short job, unsigned long lastindex, short resultcount);
	/* PARTY_RECRUIT */
	void (*recruit_register) (struct map_session_data *sd, short level, const char *notice);
	void (*recruit_update) (struct map_session_data *sd, const char *notice);
	void (*recruit_search) (struct map_session_data *sd, short level, short mapid, unsigned long lastindex, short resultcount);
	bool (*booking_delete) (struct map_session_data *sd);
	/* */
	int (*vforeachsamemap) (int (*func)(struct block_list *,va_list),struct map_session_data *sd,int range, va_list ap);
	int (*foreachsamemap) (int (*func)(struct block_list *,va_list),struct map_session_data *sd,int range,...);
	int (*send_xy_timer) (int tid, int64 tick, int id, intptr_t data);
	void (*fill_member) (struct party_member* member, struct map_session_data* sd, unsigned int leader);
	TBL_PC* (*sd_check) (int party_id, int account_id, int char_id);
	void (*check_state) (struct party_data *p);
	struct party_booking_ad_info* (*create_booking_data) (void);
	int (*db_final) (DBKey key, DBData *data, va_list ap);
};

#ifdef HERCULES_CORE
void party_defaults(void);
#endif // HERCULES_CORE

HPShared struct party_interface *party;

#endif /* MAP_PARTY_H */