Developer Store
Support
Member Forums

Screenshots
FAQ
Documentation
License
Known Issues
Downloads

MMOWorkshop BACK!

PyTorque
TGB Web Browser


talentraspel

hallsofvalhalla - Been A while
xapken - Wizards and Champions
J.C. Smith - The Repopulation - 0.5.2 Build Notes
EmpireGames - Elementals in Rise of Heroes
Empire Games - WarPath.
jaidurn - Warcall 0.0.1.0 build notes
medafor - Final detailing of models
Thamior - Presence system GONE! [May 25th 2009)]
... MORE BLOGS!

Building a MMO
Wow I had no idea....
Quest Remnants of Chaos
Checking to see if anyone is sti...
Well here I am again :)
T3D and MMOKit
afx 2.0
Terrain specularity [video]
Torque T3D MMO Kit
[3dFoin] Dragon Bug
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)