ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/maps/python/CFGuilds.py
Revision: 1.1.1.1 (vendor branch)
Committed: Sun Feb 5 00:02:08 2006 UTC (18 years, 3 months ago) by root
Content type: text/x-python
Branch: UPSTREAM, MAIN
CVS Tags: post_fixaltar, last_stable, post_fixaltar2, rel-2_82, rel-2_81, rel-2_80, pre_coinconvert, UPSTREAM_2006_03_15, rel-3_0, rel-2_6, rel-2_7, rel-2_4, rel-2_5, rel-2_2, rel-2_0, rel-2_1, rel-2_72, rel-2_73, rel-2_71, rel-2_76, rel-2_77, rel-2_74, rel-2_75, rel-2_54, rel-2_55, rel-2_56, rel-2_79, UPSTREAM_2006_02_01, rel-2_53, pre_material_cfarch_normalize_run, rel-2_32, pre_fixconverter, post_coinconvert, pre_fixaltar2, pre_map_rename, UPSTREAM_2006_02_22, rel-2_90, rel-2_92, rel-2_93, rel-2_78, post_fixconverter, pre_fixaltar, rel-2_61, rel-2_43, rel-2_42, rel-2_41, HEAD
Changes since 1.1: +0 -0 lines
Log Message:
Initial Import

File Contents

# Content
1 # CFGuilds.py - classes for crossfire guilds
2 #
3 # Copyright (C) 2004 Todd Mitchell
4 #
5 # This program is free software; you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 2 of the License, or
8 # (at your option) any later version.
9 #
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
14 #
15 # You should have received a copy of the GNU General Public License
16 # along with this program; if not, write to the Free Software
17 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 #
19 # The author can be reached via e-mail at temitchell@sourceforge.net
20
21 import Crossfire
22
23 from time import localtime, strftime, time
24 import os
25 from CFDataFile import CFDataFile, CFData
26
27 def GuildUpdate():
28 GuildList = os.path.join(Crossfire.DataDirectory(),Crossfire.MapDirectory(),'templates','guild','GuildList')
29 try:
30 guildfile = open(GuildList,'r')
31 guildlisting = guildfile.read().split('\n')
32 guildfile.close()
33 guildlisting.pop()
34 except:
35 print 'No GuidList file. Please check %s' %GuildList
36 if (guildlisting):
37 print guildlisting
38 for guild in guildlisting:
39 if not CFGuildHouses().info(guild):
40 if CFGuildHouses().add_guild(guild):
41 print 'New Guild: %s' %guild
42
43 def SearchGuilds(player):
44 guildlist = CFGuildHouses().list_guilds()
45 for guild in guildlist:
46 memberlist = CFGuild(guild).list_members()
47 for member in memberlist:
48 if member == player:
49 return guild
50 return 0
51
52 class CFGuildHouses:
53 '''Inter-Guild management class - loads guild from GuildList'''
54
55 def __init__(self):
56 guildhousesheader= ['Founded_Date', 'Points', 'Status', 'Quest_points']
57 self.status=['active', 'suspended', 'probation', 'inactive']
58 self.guildhouselist = CFData('GuildHouses_log', guildhousesheader)
59 self.pointscap = 2000000000
60 self.qpcap = 2000000000
61
62 def info(self, name):
63 record = self.guildhouselist.get_record(name)
64 if record:
65 return record
66 else:
67 return 0
68
69 def list_guilds(self):
70 return self.guildhouselist.get_keys()
71
72 def add_guild(self, name):
73 record={'#' : name
74 ,'Founded_Date' : 'never'
75 ,'Points' : 0
76 ,'Status' : 'inactive'
77 ,'Quest_points': 0
78 }
79 try:
80 self.guildhouselist.put_record(record)
81 return 1
82 except:
83 return 0
84
85 def establish(self, name):
86 record = self.info(name)
87 date = strftime("%a, %d %b %Y", localtime(time()))
88 if record:
89 record['Founded_Date'] = date
90 record['Status'] = 'active'
91 self.guildhouselist.put_record(record)
92 return 1
93 else:
94 return 0
95
96 def change_status(self, name, status):
97 record = self.info(name)
98 if record:
99 if self.status.count(status) != 0:
100 record['Status'] = status
101 self.guildhouselist.put_record(record)
102 return 1
103 else:
104 return 0
105 else:
106 return 0
107
108 def add_questpoints(self, name, number):
109 record = self.info(name)
110 if record:
111 temp = int(record['Quest_points'])
112 if temp + number >= self.qpcap:
113 temp = self.qpcap
114 else:
115 temp = temp + number
116 record['Quest_points'] = temp
117 self.guildhouselist.put_record(record)
118 return 1
119 else:
120 return 0
121
122 def update_points(self, name, number):
123 record = self.info(name)
124 if record:
125 temp = int(record['Points'])
126 if temp + number >= self.pointscap:
127 temp = self.pointscap
128 else:
129 temp = temp + number
130 record['Points'] = temp
131 self.guildhouselist.put_record(record)
132 return 1
133 else:
134 return 0
135
136 class CFGuild:
137
138 def __init__(self, guildname):
139 self.guildname = guildname
140 guildheader = ['Join_date', 'Rank', 'Status', 'Dues', 'Demerits', 'Quest_points']
141 self.ranks=['Initiate', 'Novice', 'Guildman', 'Journeyman', 'Master', 'GuildMaster']
142 self.status=['suspended', 'probation', 'good']
143 self.duescap = 1000000 #arbitrary limit on dues (if you change it remember it currently is an int)
144 self.demeritcap = 100 #arbirtary limit on demerits
145 self.qpcap = 100
146 guild_name = '%s_log' %self.guildname
147 self.guildlist = CFData(guild_name, guildheader)
148
149 def add_member(self, name, rank):
150 date = strftime("%a, %d %b %Y", localtime(time()))
151 record={'#' : name
152 ,'Join_date' : date
153 ,'Rank' : rank
154 ,'Status' : 'good'
155 ,'Dues' : 0
156 ,'Demerits' : 0
157 ,'Quest_points': 0
158 }
159 try:
160 self.guildlist.put_record(record)
161 return 1
162 except:
163 return 0
164
165 def remove_member(self, name):
166 try:
167 self.guildlist.remove_record(name)
168 return 1
169 except:
170 return 0
171
172 def info(self, name):
173 record = self.guildlist.get_record(name)
174 if record:
175 return record
176 else:
177 return 0
178
179 def list_members(self):
180 return self.guildlist.get_keys()
181
182 def count_members(self):
183 number = len(self.guildlist.get_keys())
184 return number
185
186 def add_demerits(self, name, number):
187 record = self.info(name)
188 if record:
189 temp = int(record['Demerits'])
190 if temp + number >= self.demeritcap:
191 temp = self.demeritcap
192 else:
193 temp = temp + number
194 record['Demerits'] = temp
195 self.guildlist.put_record(record)
196 return 1
197 else:
198 return 0
199
200 def remove_demerits(self, name, number):
201 record = self.info(name)
202 if record:
203 temp = int(record['Demerits'])
204 if temp - number <=0:
205 temp = 0
206 else:
207 temp = temp - number
208 record['Demerits'] = temp
209 self.guildlist.put_record(record)
210 return 1
211 else:
212 return 0
213
214 def add_questpoints(self, name, number):
215 record = self.info(name)
216 if record:
217 temp = int(record['Quest_points'])
218 if temp + number >= self.qpcap:
219 temp = self.qpcap
220 else:
221 temp = temp + number
222 record['Quest_points'] = temp
223 self.guildlist.put_record(record)
224 return 1
225 else:
226 return 0
227
228 def pay_dues(self, name, number):
229 record = self.info(name)
230 if record:
231 temp = int(record['Dues'])
232 if temp + number >= self.duescap:
233 temp = self.duescap
234 else:
235 temp = temp + number
236 record['Dues'] = temp
237 self.guildlist.put_record(record)
238 # add points to the guild record
239 CFGuildHouses().update_points(self.guildname,number)
240 return 1
241 else:
242 return 0
243
244 def clear_dues(self, name, number):
245 record = self.info(name)
246 if record:
247 record['Dues'] = 0
248 self.guildlist.put_record(record)
249 return 1
250 else:
251 return 0
252
253 def change_status(self, name, status):
254 record = self.info(name)
255 if record:
256 if self.status.count(status) != 0:
257 record['Status'] = status
258 self.guildlist.put_record(record)
259 return 1
260 else:
261 return 0
262 else:
263 return 0
264
265 def promote_member(self, name):
266 record = self.info(name)
267 if record:
268 currentrank = record['Rank']
269 if currentrank != 'GuildMaster':
270 ranknum = self.ranks.index(currentrank)
271 newrank = ranknum+1
272 record['Rank'] = self.ranks[newrank]
273 self.guildlist.put_record(record)
274 return 1
275 else:
276 return 0
277 else:
278 return 0
279
280 def demote_member(self, name):
281 record = self.info(name)
282 if record:
283 currentrank = record['Rank']
284 if currentrank != 'Initiate':
285 ranknum = self.ranks.index(currentrank)
286 newrank = ranknum+1
287 record['Rank'] = self.ranks[newrank]
288 self.guildlist.put_record(record)
289 return 1
290 else:
291 return 0
292 else:
293 return 0