295 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			295 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			Python
		
	
	
| # CFGuilds.py - classes for crossfire guilds
 | |
| #
 | |
| # Copyright (C) 2004 Todd Mitchell
 | |
| #
 | |
| # This program is free software; you can redistribute it and/or modify
 | |
| # it under the terms of the GNU General Public License as published by
 | |
| # the Free Software Foundation; either version 2 of the License, or
 | |
| # (at your option) any later version.
 | |
| #
 | |
| # This program is distributed in the hope that it will be useful,
 | |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
| # GNU General Public License for more details.
 | |
| #
 | |
| # You should have received a copy of the GNU General Public License
 | |
| # along with this program; if not, write to the Free Software
 | |
| # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | |
| #
 | |
| # The author can be reached via e-mail at temitchell@sourceforge.net
 | |
| 
 | |
| import Crossfire
 | |
| 
 | |
| from time import localtime, strftime, time
 | |
| import os
 | |
| from CFDataFile import CFDataFile, CFData
 | |
| 
 | |
| def GuildUpdate():
 | |
|     GuildList = os.path.join(Crossfire.DataDirectory(),Crossfire.MapDirectory(),'templates','guild','GuildList')
 | |
|     try:
 | |
|             guildfile = open(GuildList,'r')
 | |
|             guildlisting = guildfile.read().split('\n')
 | |
|             guildfile.close()
 | |
|             guildlisting.pop()
 | |
|     except:
 | |
|         Crossfire.Log(Crossfire.LogError,'No GuidList file.  Please check %s' %GuildList)
 | |
|     if (guildlisting):
 | |
|         Crossfire.Log(Crossfire.LogDebug, '%s' %guildlisting)
 | |
|         for guild in guildlisting:
 | |
|             if not CFGuildHouses().info(guild):
 | |
|                 if CFGuildHouses().add_guild(guild):
 | |
|                     Crossfire.Log(Crossfire.LogInfo,'New Guild: %s' %guild)
 | |
| 
 | |
| def SearchGuilds(player):
 | |
|     guildlist = CFGuildHouses().list_guilds()
 | |
|     for guild in guildlist:
 | |
|         memberlist = CFGuild(guild).list_members()
 | |
|         for member in memberlist:
 | |
|             if member == player:
 | |
|                 return guild
 | |
|     return 0
 | |
| 
 | |
| class CFGuildHouses:
 | |
|     '''Inter-Guild management class - loads guild from GuildList'''
 | |
| 
 | |
|     def __init__(self):
 | |
|         guildhousesheader= ['Founded_Date', 'Points', 'Status', 'Quest_points']
 | |
|         self.status=['active', 'suspended', 'probation', 'inactive']
 | |
|         self.guildhouselist = CFData('GuildHouses_log', guildhousesheader)
 | |
|         self.pointscap = 2000000000
 | |
|         self.qpcap = 2000000000
 | |
| 
 | |
|     def info(self, name):
 | |
|         record = self.guildhouselist.get_record(name)
 | |
|         if record:
 | |
|             return record
 | |
|         else:
 | |
|             return 0
 | |
| 
 | |
|     def list_guilds(self):
 | |
|           return self.guildhouselist.get_keys()
 | |
| 
 | |
|     def add_guild(self, name):
 | |
|         record={'#' : name
 | |
|                     ,'Founded_Date' : 'never'
 | |
|                     ,'Points' : 0
 | |
|                     ,'Status' : 'inactive'
 | |
|                     ,'Quest_points': 0
 | |
|                     }
 | |
|         try:
 | |
|             self.guildhouselist.put_record(record)
 | |
|             return 1
 | |
|         except:
 | |
|             return 0
 | |
| 
 | |
|     def establish(self, name):
 | |
|         record = self.info(name)
 | |
|         date = strftime("%a, %d %b %Y", localtime(time()))
 | |
|         if record:
 | |
|             record['Founded_Date'] = date
 | |
|             record['Status'] = 'active'
 | |
|             self.guildhouselist.put_record(record)
 | |
|             return 1
 | |
|         else:
 | |
|             return 0
 | |
| 
 | |
|     def change_status(self, name, status):
 | |
|         record = self.info(name)
 | |
|         if record:
 | |
|             if self.status.count(status) != 0:
 | |
|                 record['Status'] = status
 | |
|                 self.guildhouselist.put_record(record)
 | |
|                 return 1
 | |
|             else:
 | |
|                 return 0
 | |
|         else:
 | |
|             return 0
 | |
| 
 | |
|     def add_questpoints(self, name, number):
 | |
|         record = self.info(name)
 | |
|         if record:
 | |
|             temp = int(record['Quest_points'])
 | |
|             if temp + number >= self.qpcap:
 | |
|                 temp = self.qpcap
 | |
|             else:
 | |
|                 temp = temp + number
 | |
|             record['Quest_points'] = temp
 | |
|             self.guildhouselist.put_record(record)
 | |
|             return 1
 | |
|         else:
 | |
|             return 0
 | |
| 
 | |
|     def update_points(self, name, number):
 | |
|         record = self.info(name)
 | |
|         if record:
 | |
|             temp = int(record['Points'])
 | |
|             if temp + number >= self.pointscap:
 | |
|                 temp = self.pointscap
 | |
|             else:
 | |
|                 temp = temp + number
 | |
|             record['Points'] = temp
 | |
|             self.guildhouselist.put_record(record)
 | |
|             return 1
 | |
|         else:
 | |
|             return 0
 | |
| 
 | |
| class CFGuild:
 | |
| 
 | |
|     def __init__(self, guildname):
 | |
|         self.guildname = guildname
 | |
|         guildheader = ['Join_date', 'Rank', 'Status', 'Dues', 'Demerits', 'Quest_points']
 | |
|         self.ranks=['Initiate', 'Novice', 'Guildman', 'Journeyman', 'Master', 'GuildMaster']
 | |
|         self.status=['suspended', 'probation', 'good']
 | |
|         self.duescap = 1000000 #arbitrary limit on dues (if you change it remember it currently is an int)
 | |
|         self.demeritcap = 100 #arbitrary limit on demerits
 | |
|         self.qpcap = 100
 | |
|         guild_name = '%s_log' %self.guildname
 | |
|         self.guildlist = CFData(guild_name, guildheader)
 | |
| 
 | |
|     def add_member(self, name, rank):
 | |
|         date = strftime("%a, %d %b %Y", localtime(time()))
 | |
|         record={'#' : name
 | |
|         ,'Join_date' : date
 | |
|         ,'Rank' : rank
 | |
|         ,'Status' : 'good'
 | |
|         ,'Dues' : 0
 | |
|         ,'Demerits' : 0
 | |
|         ,'Quest_points': 0
 | |
|         }
 | |
|         try:
 | |
|             self.guildlist.put_record(record)
 | |
|             return 1
 | |
|         except:
 | |
|             return 0
 | |
| 
 | |
|     def remove_member(self, name):
 | |
|         try:
 | |
|             self.guildlist.remove_record(name)
 | |
|             return 1
 | |
|         except:
 | |
|             return 0
 | |
| 
 | |
|     def info(self, name):
 | |
|         record = self.guildlist.get_record(name)
 | |
|         if record:
 | |
|             return record
 | |
|         else:
 | |
|             return 0
 | |
| 
 | |
|     def list_members(self):
 | |
|         return self.guildlist.get_keys()
 | |
| 
 | |
|     def count_members(self):
 | |
|         number = len(self.guildlist.get_keys())
 | |
|         return number
 | |
| 
 | |
|     def add_demerits(self, name, number):
 | |
|         record = self.info(name)
 | |
|         if record:
 | |
|             temp = int(record['Demerits'])
 | |
|             if temp + number >= self.demeritcap:
 | |
|                 temp = self.demeritcap
 | |
|             else:
 | |
|                 temp = temp + number
 | |
|             record['Demerits'] = temp
 | |
|             self.guildlist.put_record(record)
 | |
|             return 1
 | |
|         else:
 | |
|             return 0
 | |
| 
 | |
|     def remove_demerits(self, name, number):
 | |
|         record = self.info(name)
 | |
|         if record:
 | |
|             temp = int(record['Demerits'])
 | |
|             if temp - number <=0:
 | |
|                 temp = 0
 | |
|             else:
 | |
|                 temp = temp - number
 | |
|             record['Demerits'] = temp
 | |
|             self.guildlist.put_record(record)
 | |
|             return 1
 | |
|         else:
 | |
|             return 0
 | |
| 
 | |
|     def add_questpoints(self, name, number):
 | |
|         record = self.info(name)
 | |
|         if record:
 | |
|             temp = int(record['Quest_points'])
 | |
|             if temp + number >= self.qpcap:
 | |
|                 temp = self.qpcap
 | |
|             else:
 | |
|                 temp = temp + number
 | |
|             record['Quest_points'] = temp
 | |
|             self.guildlist.put_record(record)
 | |
|             return 1
 | |
|         else:
 | |
|             return 0
 | |
| 
 | |
|     def pay_dues(self, name, number):
 | |
|         record = self.info(name)
 | |
|         if record:
 | |
|             temp = int(record['Dues'])
 | |
|             if temp + number >= self.duescap:
 | |
|                 temp = self.duescap
 | |
|             else:
 | |
|                 temp = temp + number
 | |
|             record['Dues'] = temp
 | |
|             self.guildlist.put_record(record)
 | |
|             # add points to the guild record
 | |
|             CFGuildHouses().update_points(self.guildname,number)
 | |
|             return 1
 | |
|         else:
 | |
|             return 0
 | |
| 
 | |
|     def clear_dues(self, name, number):
 | |
|         record = self.info(name)
 | |
|         if record:
 | |
|             record['Dues'] = 0
 | |
|             self.guildlist.put_record(record)
 | |
|             return 1
 | |
|         else:
 | |
|             return 0
 | |
| 
 | |
|     def change_status(self, name, status):
 | |
|         record = self.info(name)
 | |
|         if record:
 | |
|             if self.status.count(status) != 0:
 | |
|                 record['Status'] = status
 | |
|                 self.guildlist.put_record(record)
 | |
|                 return 1
 | |
|             else:
 | |
|                 return 0
 | |
|         else:
 | |
|             return 0
 | |
| 
 | |
|     def promote_member(self, name):
 | |
|         record = self.info(name)
 | |
|         if record:
 | |
|             currentrank = record['Rank']
 | |
|             if currentrank != 'GuildMaster':
 | |
|                 ranknum = self.ranks.index(currentrank)
 | |
|                 newrank = ranknum+1
 | |
|                 record['Rank'] = self.ranks[newrank]
 | |
|                 self.guildlist.put_record(record)
 | |
|                 return 1
 | |
|             else:
 | |
|                 return 0
 | |
|         else:
 | |
|             return 0
 | |
| 
 | |
|     def demote_member(self, name):
 | |
|         record = self.info(name)
 | |
|         if record:
 | |
|             currentrank = record['Rank']
 | |
|             if currentrank != 'Initiate':
 | |
|                 ranknum = self.ranks.index(currentrank)
 | |
|                 Crossfire.Log(Crossfire.LogDebug,  "ranknum = %d"%ranknum)
 | |
|                 newrank = ranknum-1
 | |
|                 record['Rank'] = self.ranks[newrank]
 | |
|                 self.guildlist.put_record(record)
 | |
|                 return 1
 | |
|             else:
 | |
|                 return 0
 | |
|         else:
 | |
|             return 0
 |