1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software
14  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
15  */
16 
17 #ifndef INCLUDED_CLAN_TYPES
18 #define INCLUDED_CLAN_TYPES
19 
20 #ifdef JUST_NEED_TYPES
21 # include "common/bn_type.h"
22 #else
23 # define JUST_NEED_TYPES
24 # include "common/bn_type.h"
25 # undef JUST_NEED_TYPES
26 #endif
27 
28 #ifdef CLAN_INTERNAL_ACCESS
29 #ifdef JUST_NEED_TYPES
30 # include <stdio.h>
31 # include "common/list.h"
32 #else
33 # define JUST_NEED_TYPES
34 # include <stdio.h>
35 # include "common/list.h"
36 # undef JUST_NEED_TYPES
37 #endif
38 
39 #endif
40 
41 typedef struct clan
42 #ifdef CLAN_INTERNAL_ACCESS
43 {
44     unsigned int clanid;
45     int clantag;
46     char const *clanname;
47     time_t creation_time;
48     char const *clan_motd;
49     t_list *members;
50     int created;
51     /* --by Soar
52        on create, set it to -count of invited members,
53        each accept packet will inc it by 1,
54        when it is increased to 0, means that all invited members have accepted,
55        then clan will be created and set this value to 1
56      */
57     char modified;
58     char channel_type;		/* 0--public 1--private */
59 }
60 #endif
61 t_clan;
62 
63 typedef struct _clanmember
64 #ifdef CLAN_INTERNAL_ACCESS
65 {
66     void *memberacc;
67     char status;
68     time_t join_time;
69     t_clan * clan;
70 #ifdef WITH_SQL
71     char modified;
72 #endif
73 }
74 #endif
75 t_clanmember;
76 
77 #define CLAN_CHIEFTAIN 0x04
78 #define CLAN_SHAMAN    0x03
79 #define CLAN_GRUNT     0x02
80 #define CLAN_PEON      0x01
81 #define CLAN_NEW       0x00
82 
83 #endif
84 
85 #ifndef JUST_NEED_TYPES
86 #ifndef INCLUDED_CLAN_PROTOS
87 #define INCLUDED_CLAN_PROTOS
88 
89 #define JUST_NEED_TYPES
90 #include "common/list.h"
91 #undef JUST_NEED_TYPES
92 
93 
94 extern t_list *clanlist(void);
95 extern int clanlist_load(void);
96 extern int clanlist_save(void);
97 extern int clanlist_unload(void);
98 extern int clanlist_remove_clan(t_clan * clan);
99 extern int clanlist_add_clan(t_clan * clan);
100 extern t_clan *clanlist_find_clan_by_clanid(int cid);
101 extern t_clan *clanlist_find_clan_by_clantag(int clantag);
102 
103 
104 extern t_account *clanmember_get_account(t_clanmember * member);
105 extern int clanmember_set_account(t_clanmember * member, t_account * memberacc);
106 extern t_connection *clanmember_get_conn(t_clanmember * member);
107 extern char clanmember_get_status(t_clanmember * member);
108 extern int clanmember_set_status(t_clanmember * member, char status);
109 extern time_t clanmember_get_join_time(t_clanmember * member);
110 extern t_clan * clanmember_get_clan(t_clanmember * member);
111 extern int clanmember_set_online(t_connection * c);
112 extern int clanmember_set_offline(t_connection * c);
113 extern const char *clanmember_get_online_status(t_clanmember * member, char *status);
114 extern int clanmember_on_change_status(t_clanmember * member);
115 extern const char *clanmember_get_online_status_by_connection(t_connection * conn, char *status);
116 extern int clanmember_on_change_status_by_connection(t_connection * conn);
117 
118 extern t_clan *clan_create(t_account * chieftain_acc, int clantag, const char *clanname, const char *motd);
119 extern int clan_destroy(t_clan * clan);
120 
121 extern int clan_unload_members(t_clan * clan);
122 extern int clan_remove_all_members(t_clan * clan);
123 
124 extern int clan_save(t_clan * clan);
125 extern int clan_remove(int clantag);
126 
127 extern int clan_get_created(t_clan * clan);
128 extern int clan_set_created(t_clan * clan, int created);
129 extern char clan_get_modified(t_clan * clan);
130 extern int clan_set_modified(t_clan * clan, char modified);
131 extern char clan_get_channel_type(t_clan * clan);
132 extern int clan_set_channel_type(t_clan * clan, char channel_type);
133 extern t_list *clan_get_members(t_clan * clan);
134 extern char const *clan_get_name(t_clan * clan);
135 extern int clan_get_clantag(t_clan * clan);
136 extern char const *clan_get_motd(t_clan * clan);
137 extern int clan_set_motd(t_clan * clan, const char *motd);
138 extern unsigned int clan_get_clanid(t_clan * clan);
139 extern int clan_set_creation_time(t_clan * clan, time_t c_time);
140 extern time_t clan_get_creation_time(t_clan * clan);
141 extern int clan_get_member_count(t_clan * clan);
142 
143 extern t_clanmember *clan_add_member(t_clan * clan, t_account * memberacc, char status);
144 extern int clan_remove_member(t_clan * clan, t_clanmember * member);
145 
146 extern t_clanmember *clan_find_member(t_clan * clan, t_account * memberacc);
147 extern t_clanmember *clan_find_member_by_name(t_clan * clan, char const *membername);
148 extern t_clanmember *clan_find_member_by_uid(t_clan * clan, unsigned int memberuid);
149 
150 extern int clan_send_packet_to_online_members(t_clan * clan, t_packet * packet);
151 extern int clan_get_possible_member(t_connection * c, t_packet const *const packet);
152 extern int clan_send_status_window(t_connection * c);
153 extern int clan_send_status_window_on_create(t_clan * clan);
154 extern int clan_close_status_window(t_connection * c);
155 extern int clan_close_status_window_on_disband(t_clan * clan);
156 extern int clan_send_memberlist(t_connection * c, t_packet const *const packet);
157 extern int clan_change_member_status(t_connection * c, t_packet const *const packet);
158 extern int clan_send_motd_reply(t_connection * c, t_packet const *const packet);
159 extern int clan_save_motd_chg(t_connection * c, t_packet const *const packet);
160 
161 extern int str_to_clantag(const char *str);
162 
163 #endif
164 #endif
165