Index: C:/newtgeawork/kit_svn/tgea/trunk/mud/gamesettings.py
===================================================================
--- C:/newtgeawork/kit_svn/tgea/trunk/mud/gamesettings.py (revision 11)
+++ C:/newtgeawork/kit_svn/tgea/trunk/mud/gamesettings.py (revision 12)
#GMSERVER_IP = "minions.prairiegames.com"
@@ -34,6 +34,7 @@
GL_ANNOUNCE_IP = "www.somenet.com"
USE_PNG_SVN = 1
+USE_PERCHAR_START = True
DEFAULT_GAMENAME = "Testgame"
DEFAULT_GAMEROOT = GAMEROOT
Index: C:/newtgeawork/kit_svn/tgea/trunk/mud/characterserver/serverdb.py
===================================================================
--- C:/newtgeawork/kit_svn/tgea/trunk/mud/characterserver/serverdb.py (revision 11)
+++ C:/newtgeawork/kit_svn/tgea/trunk/mud/characterserver/serverdb.py (revision 12)
@@ -21,9 +21,35 @@
public_name TEXT,
buffer BLOB
);
+"""
+if USE_PERCHAR_START:
+ CREATE_PLAYER_BUFFER_SQL = CREATE_PLAYER_BUFFER_SQL + """
CREATE TABLE character_buffer
(
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ public_name TEXT,
+ character_name TEXT UNIQUE,
+ race TEXT,
+ pclass TEXT,
+ sclass TEXT,
+ tclass TEXT,
+ plevel INTEGER,
+ slevel INTEGER,
+ tlevel INTEGER,
+ realm INTEGER,
+ rename INTEGER,
+ logZone integer references Zone(id),
+ logTransformInternal TEXT,
+ bindZone integer references Zone(id),
+ bindTransformInternal TEXT,
+ buffer BLOB
+);
+"""
+else:
+ CREATE_PLAYER_BUFFER_SQL = CREATE_PLAYER_BUFFER_SQL + """
+CREATE TABLE character_buffer
+(
id INTEGER PRIMARY KEY AUTOINCREMENT,
public_name TEXT,
character_name TEXT UNIQUE,
@@ -38,8 +64,9 @@
rename INTEGER,
buffer BLOB
);
+"""
-
+CREATE_PLAYER_BUFFER_SQL = CREATE_PLAYER_BUFFER_SQL + """
CREATE TABLE cserver_character
(
id INTEGER PRIMARY KEY AUTOINCREMENT,
@@ -192,7 +219,10 @@
cursor = self.conn.cursor()
try:
- cursor.execute("SELECT character_name,race,pclass,sclass,tclass,plevel,slevel,tlevel,realm,rename FROM character_buffer WHERE public_name = '%s';"%publicName)
+ if USE_PERCHAR_START:
+ cursor.execute("SELECT character_name,race,pclass,sclass,tclass,plevel,slevel,tlevel,realm,rename,logZone,logTransformInternal,bindZone,bindTransformInternal FROM character_buffer WHERE public_name = '%s';"%publicName)
+ else:
+ cursor.execute("SELECT character_name,race,pclass,sclass,tclass,plevel,slevel,tlevel,realm,rename FROM character_buffer WHERE public_name = '%s';"%publicName)
for v in cursor.fetchall():
cinfos[v[0]]=v
except:
@@ -217,7 +247,11 @@
def insertCharacterBuffer(self,publicName,cvalues,buffer):
cursor = self.conn.cursor()
- characterName,race,pclass,sclass,tclass,plevel,slevel,tlevel,realm = cvalues
+ if USE_PERCHAR_START:
+ characterName,race,pclass,sclass,tclass,plevel,slevel,tlevel,realm,logZone,logTransform,bindZone,bindTransform = cvalues
+ else:
+ characterName,race,pclass,sclass,tclass,plevel,slevel,tlevel,realm = cvalues
+
rename = 0
try:
cursor.execute("SELECT rename FROM character_buffer WHERE public_name = '%s' AND character_name = '%s';"%(publicName,characterName))
@@ -231,8 +265,12 @@
traceback.print_exc()
buffer = sqlite.Binary(buffer)
- values = (None,publicName,characterName,race,pclass,sclass,tclass,plevel,slevel,tlevel,realm,rename,buffer)
- cursor.executemany("INSERT INTO character_buffer VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?);",(values,))
+ if USE_PERCHAR_START:
+ values = (None,publicName,characterName,race,pclass,sclass,tclass,plevel,slevel,tlevel,realm,rename,logZone,logTransform,bindZone,bindTransform,buffer)
+ cursor.executemany("INSERT INTO character_buffer VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);",(values,))
+ else:
+ values = (None,publicName,characterName,race,pclass,sclass,tclass,plevel,slevel,tlevel,realm,rename,buffer)
+ cursor.executemany("INSERT INTO character_buffer VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?);",(values,))
cursor.close()
Index: C:/newtgeawork/kit_svn/tgea/trunk/mud/characterserver/upgradedb.py
===================================================================
--- C:/newtgeawork/kit_svn/tgea/trunk/mud/characterserver/upgradedb.py (revision 11)
+++ C:/newtgeawork/kit_svn/tgea/trunk/mud/characterserver/upgradedb.py (revision 12)
@@ -257,7 +257,10 @@
def UpgradeCharacterBuffer(values):
global PCONN,NEWPCONN,BAD_CHARACTERS,WARN,MUSTRENAMECOUNTER
- id,publicName,characterName,race,pclass,sclass,tclass,plevel,slevel,tlevel,realm,rename,buffer = values
+ if USE_PERCHAR_START:
+ id,publicName,characterName,race,pclass,sclass,tclass,plevel,slevel,tlevel,realm,rename,logZone,logTransform,bindZone,bindTransform,buffer = values
+ else:
+ id,publicName,characterName,race,pclass,sclass,tclass,plevel,slevel,tlevel,realm,rename,buffer = values
try:
dbuffer = zlib.decompress(buffer)
@@ -357,10 +360,14 @@
CHARACTER_NAMES[name] = name
#v = (None,publicName,characterName,race,pclass,sclass,tclass,plevel,slevel,tlevel,realm,rename,buffer)
- v = (None,publicName,name,race,pclass,sclass,tclass,plevel,slevel,tlevel,realm,rename,buffer)
+ cursor = NEWCONN.cursor()
+ if USE_PERCHAR_START:
+ v = (None,publicName,name,race,pclass,sclass,tclass,plevel,slevel,tlevel,realm,rename,logZone,logTransform,bindZone,bindTransform,buffer)
+ cursor.executemany("INSERT INTO character_buffer VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);",(v,))
+ else:
+ v = (None,publicName,name,race,pclass,sclass,tclass,plevel,slevel,tlevel,realm,rename,buffer)
+ cursor.executemany("INSERT INTO character_buffer VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?);",(v,))
- cursor = NEWCONN.cursor()
- cursor.executemany("INSERT INTO character_buffer VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?);",(v,))
cursor.close()
Index: C:/newtgeawork/kit_svn/tgea/trunk/mud/world/spawn.py
===================================================================
--- C:/newtgeawork/kit_svn/tgea/trunk/mud/world/spawn.py (revision 11)
+++ C:/newtgeawork/kit_svn/tgea/trunk/mud/world/spawn.py (revision 12)
@@ -13,7 +13,7 @@
# Needed to register vendor classes.
import mud.world.vendor
from mud.world.shared.vocals import *
-
+from mud.gamesettings import USE_PERCHAR_START
from collections import defaultdict
from datetime import date
from math import ceil
@@ -177,8 +177,15 @@
desc = StringCol(default = "")
+ if USE_PERCHAR_START:
+ bindTransformInternal = StringCol(default="")
+ bindZone = ForeignKey('Zone',default=None)
+ logTransformInternal = StringCol(default="")
+ logZone = ForeignKey('Zone',default=None)
+
+
def _init(self,*args,**kw):
Persistent._init(self, *args, **kw)
self.level = self.plevel
Index: C:/newtgeawork/kit_svn/tgea/trunk/mud/world/playeravatar.py
===================================================================
--- C:/newtgeawork/kit_svn/tgea/trunk/mud/world/playeravatar.py (revision 11)
+++ C:/newtgeawork/kit_svn/tgea/trunk/mud/world/playeravatar.py (revision 12)
@@ -24,10 +24,10 @@
from cPickle import dumps,loads
from base64 import encodestring,decodestring
from mud.worldserver.charutil import ExtractPlayer,InstallCharacterBuffer
-from mud.gamesettings import GAMENAME
+from mud.gamesettings import GAMENAME,USE_PERCHAR_START
from race import GetRaceGraphics
+from sqlite3 import dbapi2 as sqlite
-
#for jelly
from mud.world.shared.worlddata import CharacterInfo,ZoneConnectionInfo
from mud.world.shared.playdata import RootInfo,ItemInfo
@@ -191,8 +191,13 @@
spawn.bdyBase = newchar.scores['BDY'] + newchar.adjs['BDY']
spawn.mndBase = newchar.scores['MND'] + newchar.adjs['MND']
spawn.mysBase = newchar.scores['MYS'] + newchar.adjs['MYS']
-
+ if USE_PERCHAR_START:
+ zone = Zone.byName("base")
+ spawn.logZone = zone
+ spawn.bindZone = zone
+ spawn.logTransformInternal = "28 -270 112 0 0 0 1"
+ spawn.bindTransformInternal = "28 -270 112 0 0 0 1"
char = Character(player=self.player,name=newchar.name,spawn=spawn,portraitPic = newchar.portraitPic)
spawn.character = char
@@ -961,19 +986,39 @@
mspawns.append(ms.spawn)
names = []
- for cname,cvalues in result.iteritems():
- names.append(cname)
- name,race,pclass,sclass,tclass,plevel,slevel,tlevel,realm,rename = cvalues
- cinfo = CharacterInfo()
- cinfo.status = "Alive"
- cinfo.name = str(cname)
- cinfo.race = str(race)
- cinfo.realm = realm
- cinfo.klasses.append(str(pclass))
- cinfo.levels.append(plevel)
- cinfo.newCharacter = False
- cinfo.rename = rename
- cinfos.append(cinfo)
+
+ if USE_PERCHAR_START:
+ for cname,cvalues in result.iteritems():
+ names.append(cname)
+ name,race,pclass,sclass,tclass,plevel,slevel,tlevel,realm,rename,logZone,logTransform,bindZone,bindTransform = cvalues
+ cinfo = CharacterInfo()
+ cinfo.status = "Alive"
+ cinfo.name = str(cname)
+ cinfo.race = str(race)
+ cinfo.realm = realm
+ cinfo.klasses.append(str(pclass))
+ cinfo.levels.append(plevel)
+ cinfo.newCharacter = False
+ cinfo.rename = rename
+ cinfo.logZone = logZone
+ cinfo.logTransform = logTransform
+ cinfo.bindZone = bindZone
+ cinfo.bindTransform = bindTransform
+ cinfos.append(cinfo)
+ else:
+ for cname,cvalues in result.iteritems():
+ names.append(cname)
+ name,race,pclass,sclass,tclass,plevel,slevel,tlevel,realm,rename = cvalues
+ cinfo = CharacterInfo()
+ cinfo.status = "Alive"
+ cinfo.name = str(cname)
+ cinfo.race = str(race)
+ cinfo.realm = realm
+ cinfo.klasses.append(str(pclass))
+ cinfo.levels.append(plevel)
+ cinfo.newCharacter = False
+ cinfo.rename = rename
+ cinfos.append(cinfo)
self.player.cserverInfos = cinfos[:]
@@ -1099,7 +1144,31 @@
zone = self.player.logZone.name
else:
raise "Unknown Realm!"
+
+ if USE_PERCHAR_START:
+ filename = "data/character/character.db"
+ conn = sqlite.connect(filename,isolation_level=None)
+ cursor = conn.cursor()
+ logzone = None
+ cursor.execute("SELECT * FROM zone WHERE id = %s;"%(c.logZone))
+ logzone = cursor.fetchone()
+
+ #EQ START...Using the player's logzone stuff since it is global
+ #but, the info comes from CHARACTERINFOs which is tied to an idividual
+ #character. ALso, this server's MAXPARTY will be 1
+ self.player.logZone = logzone[0]
+ self.player.logTransformInternal = c.logTransform
+ #Do the same for the character's bind zone in case he dies while AFK
+ cursor.execute("SELECT * FROM zone WHERE id = %s;"%(c.bindZone))
+ logzone = cursor.fetchone()
+ self.player.bindZone = logzone[0]
+ self.player.bindTransformInternal = c.bindTransform
+ zone = logzone[4]
+ cursor.close()
+ conn.close()
+
+
if zone in self.world.staticZoneNames:
#we're on the right world server already
d = AVATAR.mind.callRemote("getCharacterBuffer",self.player.publicName,party[0])
@@ -1169,8 +1238,12 @@
self.player.monsterLogTransformInternal = self.player.monsterBindTransformInternal
self.player.monsterLogZone = self.player.monsterBindZone
else:
- self.player.logTransformInternal = self.player.bindTransformInternal
- self.player.logZone = self.player.bindZone
+ if USE_PERCHAR_START:
+ self.player.curChar.spawn.logTransformInternal = self.player.curChar.spawn.bindTransformInternal
+ self.player.curChar.spawn.logZone = self.player.curChar.spawn.bindZone
+ else:
+ self.player.logTransformInternal = self.player.bindTransformInternal
+ self.player.logZone = self.player.bindZone
zone = self.world.playerSelectZone(self,simPort,simPassword)
if not zone:
Index: C:/newtgeawork/kit_svn/tgea/trunk/mud/world/cserveravatar.py
===================================================================
--- C:/newtgeawork/kit_svn/tgea/trunk/mud/world/cserveravatar.py (revision 11)
+++ C:/newtgeawork/kit_svn/tgea/trunk/mud/world/cserveravatar.py (revision 12)
@@ -4,7 +4,7 @@
from twisted.spread import pb
-from mud.gamesettings import GAMEROOT
+from mud.gamesettings import GAMEROOT,USE_PERCHAR_START
from mud.common.permission import User,Role
from mud.world.defines import *
from mud.world.player import Player
@@ -58,6 +58,13 @@
publicName,pbuffer,cbuffer,cvalues = \
ExtractPlayer(player.publicName,player.id, \
player.party.members[0].id,False)
+ if USE_PERCHAR_START:
+ c = player.party.members[0]
+ #create loc and bind strings from the tranform list #EQ START
+ logLoc = str(player.logTransform[0]) + " " + str(player.logTransform[1]) + " " + str(player.logTransform[2]) + " " + str(player.logTransform[3]) + " " + str(player.logTransform[4]) + " " + str(player.logTransform[5]) + " " + str(player.logTransform[6])
+ bindLoc = str(player.bindTransform[0]) + " " + str(player.bindTransform[1]) + " " + str(player.bindTransform[2]) + " " + str(player.bindTransform[3]) + " " + str(player.bindTransform[4]) + " " + str(player.bindTransform[5]) + " " + str(player.bindTransform[6])
+ cvalues = c.name,c.spawn.race,c.spawn.pclassInternal,c.spawn.sclassInternal,c.spawn.tclassInternal,c.spawn.plevel,c.spawn.slevel,c.spawn.tlevel,c.spawn.realm,player.logZone.id,logLoc,c.spawn.bindZone.id,bindLoc
+
pbuffer = encodestring(dumps(pbuffer, 2))
cbuffer = encodestring(dumps(cbuffer, 2))
Index: C:/newtgeawork/kit_svn/tgea/trunk/mud/world/shared/worlddata.py
===================================================================
--- C:/newtgeawork/kit_svn/tgea/trunk/mud/world/shared/worlddata.py (revision 11)
+++ C:/newtgeawork/kit_svn/tgea/trunk/mud/world/shared/worlddata.py (revision 12)
@@ -5,6 +5,7 @@
from twisted.spread import pb
from mud.world.defines import *
+from mud.gamesettings import USE_PERCHAR_START
import traceback
class WorldConfig(pb.Copyable,pb.RemoteCopy):
@@ -70,8 +71,13 @@
self.realm = RPG_REALM_NEUTRAL
self.rename = 0
self.status = ""
-
+ if USE_PERCHAR_START:
+ self.logZone = None
+ self.logTransformInternal = "" #EQ START ZONE
+ self.bindZone = None
+ self.bindTransformInternal = ""
+
if char:
if char.dead:
self.status = "Dead"
@@ -89,6 +95,13 @@
if char.spawn.tclassInternal:
self.klasses.append(char.spawn.tclassInternal)
self.levels.append(char.spawn.tlevel)
+
+ if USE_PERCHAR_START:
+ self.logZone = char.spawn.logZone
+ self.logTransformInternal = char.spawn.logTransformInternal
+ self.bindZone = char.spawn.bindZone
+ self.bindTransformInternal = char.spawn.bindTransformInternal
+
pb.setUnjellyableForClass(CharacterInfo, CharacterInfo)
def CmdKill(mob, args):
Index: C:/newtgeawork/kit_svn/tgea/trunk/mud/worldserver/charutil.py
===================================================================
--- C:/newtgeawork/kit_svn/tgea/trunk/mud/worldserver/charutil.py (revision 11)
+++ C:/newtgeawork/kit_svn/tgea/trunk/mud/worldserver/charutil.py (revision 12)
@@ -11,6 +11,8 @@
from twisted.internet import reactor
import traceback
+from mud.gamesettings import *
+
from sqlite3 import dbapi2 as sqlite
import os,re,zlib
@@ -540,7 +542,10 @@
ExtractItemList(cursor,excursor,cursor.fetchall(),True)
#spawn info
- cursor.execute("SELECT name,race,pclass_internal,sclass_internal,tclass_internal,plevel,slevel,tlevel,realm FROM spawn WHERE character_id = '%i' LIMIT 1;"%cid)
+ if USE_PERCHAR_START:
+ cursor.execute("SELECT name,race,pclass_internal,sclass_internal,tclass_internal,plevel,slevel,tlevel,realm,log_zone_id,log_transform_internal,bind_zone_id,bind_transform_internal FROM spawn WHERE character_id = '%i' LIMIT 1;"%cid)
+ else:
+ cursor.execute("SELECT name,race,pclass_internal,sclass_internal,tclass_internal,plevel,slevel,tlevel,realm FROM spawn WHERE character_id = '%i' LIMIT 1;"%cid)
cvalues = cursor.fetchone()
cursor.execute("SELECT * FROM spawn WHERE character_id = %i LIMIT 1;"%cid)