This commit is contained in:
Loudrob 2015-06-05 13:59:58 -04:00
commit 2bbe0aaa7c
17 changed files with 113 additions and 319 deletions

View file

@ -27,7 +27,7 @@ int niraicall_onLoadGameData()
gd.open("stride.dist", ios_base::in | ios_base::binary);
if (!gd.is_open())
{
std::cerr << "unable to open game file" << std::endl;
std::cerr << "Unable to open game file!" << std::endl;
return 1;
}
@ -37,7 +37,7 @@ int niraicall_onLoadGameData()
if (memcmp(header, read_header, header_size))
{
std::cerr << "invalid header" << std::endl;
std::cerr << "Invalid header" << std::endl;
return 1;
}
@ -98,7 +98,7 @@ int niraicall_onLoadGameData()
nassertd(dgi.get_remaining_size() == 0)
{
std::cerr << "corrupted data" << std::endl;
std::cerr << "Corrupted data!" << std::endl;
return 1;
}

View file

@ -23,10 +23,6 @@ texture-anisotropic-degree 16
# Preferences:
preferences-filename user/preferences.json
# Content packs:
content-packs-filepath user/contentpacks/
content-packs-sort-filename sort.yaml
# Backups:
backups-filepath dependencies/backups/
backups-extension .json

View file

@ -48,6 +48,8 @@ echo ppython: "dependencies/panda/python/ppython.exe"
if %INPUT%==2 (
echo Username: %ttsUsername%
) else if %INPUT%==4 (
echo Username: %ttsUsername%
) else (
echo Username: %TTS_PLAYCOOKIE%
)

View file

@ -1,11 +1,9 @@
from pandac.PandaModules import Vec4
from toontown.safezone.DDSafeZoneLoader import DDSafeZoneLoader
from toontown.town.DDTownLoader import DDTownLoader
from toontown.toonbase import ToontownGlobals
from toontown.hood.ToonHood import ToonHood
class DDHood(ToonHood):
notify = directNotify.newCategory('DDHood')
@ -16,7 +14,7 @@ class DDHood(ToonHood):
SKY_FILE = 'phase_3.5/models/props/BR_sky'
SPOOKY_SKY_FILE = 'phase_3.5/models/props/BR_sky'
TITLE_COLOR = (0.8, 0.6, 0.5, 1.0)
underwaterColor = Vec4(0.0, 0.0, 0.6, 1.0)
HOLIDAY_DNA = {
ToontownGlobals.WINTER_DECORATIONS: ['phase_6/dna/winter_storage_DD.pdna'],
ToontownGlobals.WACKY_WINTER_DECORATIONS: ['phase_6/dna/winter_storage_DD.pdna'],
@ -26,18 +24,6 @@ class DDHood(ToonHood):
def __init__(self, parentFSM, doneEvent, dnaStore, hoodId):
ToonHood.__init__(self, parentFSM, doneEvent, dnaStore, hoodId)
# Load content pack ambience settings:
ambience = contentPacksMgr.getAmbience('donalds-dock')
color = ambience.get('underwater-color')
if color is not None:
try:
self.underwaterColor = Vec4(color['r'], color['g'], color['b'], color['a'])
except Exception, e:
raise ContentPackError(e)
elif self.underwaterColor is None:
self.underwaterColor = Vec4(0, 0, 0.6, 1)
def load(self):
ToonHood.load(self)

View file

@ -1,10 +1,8 @@
from pandac.PandaModules import Vec4
from toontown.safezone.OZSafeZoneLoader import OZSafeZoneLoader
from toontown.toonbase import ToontownGlobals
from toontown.hood.ToonHood import ToonHood
class OZHood(ToonHood):
notify = directNotify.newCategory('OZHood')
@ -14,22 +12,11 @@ class OZHood(ToonHood):
SKY_FILE = 'phase_3.5/models/props/TT_sky'
SPOOKY_SKY_FILE = 'phase_3.5/models/props/BR_sky'
TITLE_COLOR = (1.0, 0.5, 0.4, 1.0)
underwaterColor = Vec4(0.0, 0.0, 0.6, 1.0)
def __init__(self, parentFSM, doneEvent, dnaStore, hoodId):
ToonHood.__init__(self, parentFSM, doneEvent, dnaStore, hoodId)
# Load content pack ambience settings:
ambience = contentPacksMgr.getAmbience('outdoor-zone')
color = ambience.get('underwater-color')
if color is not None:
try:
self.underwaterColor = Vec4(color['r'], color['g'], color['b'], color['a'])
except Exception, e:
raise ContentPackError(e)
elif self.underwaterColor is None:
self.underwaterColor = Vec4(0, 0, 0.6, 1)
def load(self):
ToonHood.load(self)

View file

@ -11,7 +11,6 @@ from toontown.cogdominium import CogdoInterior
from toontown.toon.Toon import teleportDebug
from toontown.hood import SkyUtil
class ToonHood(Hood):
notify = directNotify.newCategory('ToonHood')
@ -22,7 +21,6 @@ class ToonHood(Hood):
SKY_FILE = None
SPOOKY_SKY_FILE = None
TITLE_COLOR = None
HOLIDAY_DNA = {}
def __init__(self, parentFSM, doneEvent, dnaStore, hoodId):
@ -54,18 +52,6 @@ class ToonHood(Hood):
State.State('final', self.enterFinal, self.exitFinal, [])], 'start', 'final')
self.fsm.enterInitialState()
# Load content pack ambience settings:
ambience = contentPacksMgr.getAmbience('general')
color = ambience.get('underwater-color')
if color is not None:
try:
self.underwaterColor = Vec4(color['r'], color['g'], color['b'], color['a'])
except Exception, e:
raise ContentPackError(e)
else:
self.underwaterColor = None
# Until we cleanup Hood, we will need to define some variables
self.id = self.ID
self.storageDNAFile = self.STORAGE_DNA

View file

@ -106,28 +106,6 @@ loadPrcFileData('Settings: musicVol', 'audio-master-music-volume %s' % settings[
loadPrcFileData('Settings: sfxVol', 'audio-master-sfx-volume %s' % settings['sfxVol'])
loadPrcFileData('Settings: loadDisplay', 'load-display %s' % settings['loadDisplay'])
import os
from toontown.toonbase.ContentPacksManager import ContentPackError
from toontown.toonbase.ContentPacksManager import ContentPacksManager
contentPacksFilepath = ConfigVariableString(
'content-packs-filepath', 'user/contentpacks/').getValue()
contentPacksSortFilename = ConfigVariableString(
'content-packs-sort-filename', 'sort.yaml').getValue()
if not os.path.exists(contentPacksFilepath):
os.makedirs(contentPacksFilepath)
__builtin__.ContentPackError = ContentPackError
__builtin__.contentPacksMgr = ContentPacksManager(
filepath=contentPacksFilepath, sortFilename=contentPacksSortFilename)
contentPacksMgr.applyAll()
languagePack = settings['language'].lower() + '.mf'
if contentPacksMgr.isApplicable(languagePack):
contentPacksMgr.applyMultifile(languagePack)
import time
import sys
import random

View file

@ -1,138 +0,0 @@
from direct.directnotify.DirectNotifyGlobal import directNotify
import fnmatch
import os
import yaml
from panda3d.core import Multifile, Filename, VirtualFileSystem
APPLICABLE_FILE_PATTERNS = ('*.mf', 'ambience.yaml')
CONTENT_EXT_WHITELIST = ('.jpg', '.jpeg', '.rgb', '.png', '.ogg', '.ttf')
class ContentPackError(Exception):
pass
class ContentPacksManager:
notify = directNotify.newCategory('ContentPacksManager')
notify.setInfo(True)
def __init__(self, filepath='user/contentpacks/', sortFilename='sort.yaml'):
self.filepath = filepath
self.sortFilename = os.path.join(self.filepath, sortFilename)
if __debug__:
self.mountPoint = '../resources'
else:
self.mountPoint = '/'
self.vfs = VirtualFileSystem.getGlobalPtr()
self.sort = []
self.ambience = {}
def isApplicable(self, filename):
"""
Returns whether or not the specified file is applicable.
"""
# Does this file exist?
if not os.path.exists(filename):
return False
# Does this file match one of the applicable file patterns?
basename = os.path.basename(filename)
for pattern in APPLICABLE_FILE_PATTERNS:
if fnmatch.fnmatch(basename, pattern):
return True
return False
def applyMultifile(self, filename):
"""
Apply the specified multifile.
"""
mf = Multifile()
mf.openReadWrite(Filename(filename))
# Discard content with non-whitelisted extensions:
for subfileName in mf.getSubfileNames():
ext = os.path.splitext(subfileName)[1]
if ext not in CONTENT_EXT_WHITELIST:
mf.removeSubfile(subfileName)
self.vfs.mount(mf, self.mountPoint, 0)
def applyAmbience(self, filename):
"""
Apply the specified ambience configuration file.
"""
with open(os.path.join(self.filepath, filename), 'r') as f:
self.ambience.update(yaml.load(f) or {})
def apply(self, filename):
"""
Apply the specified content pack file.
"""
self.notify.info('Applying %s...' % filename)
basename = os.path.basename(filename)
if basename.endswith('.mf'):
self.applyMultifile(os.path.join(self.filepath, filename))
elif basename == 'ambience.yaml':
self.applyAmbience(filename)
def applyAll(self):
"""
Using the sort configuration, recursively apply all applicable content
pack files under the configured content packs directory.
"""
# First, read the sort configuration:
self.readSortConfig()
# Next, apply the sorted files:
for filename in self.sort[:]:
if self.isApplicable(os.path.join(self.filepath, filename)):
self.apply(filename)
else:
self.notify.warning('Invalidating %s...' % filename)
self.sort.remove(filename)
# Apply the non-sorted files:
for root, _, filenames in os.walk(self.filepath):
root = root[len(self.filepath):]
for filename in filenames:
filename = os.path.join(root, filename).replace('\\', '/')
# Ensure this file isn't sorted:
if filename in self.sort:
continue
# Ensure this file is applicable:
if not self.isApplicable(os.path.join(self.filepath, filename)):
continue
# Apply this file, and add it to the sort configuration:
self.apply(filename)
self.sort.append(filename)
# Finally, write the new sort configuration:
self.writeSortConfig()
def readSortConfig(self):
"""
Read the sort configuration.
"""
if not os.path.exists(self.sortFilename):
return
with open(self.sortFilename, 'r') as f:
self.sort = yaml.load(f) or []
def writeSortConfig(self):
"""
Write the sort configuration to disk.
"""
with open(self.sortFilename, 'w') as f:
for filename in self.sort:
f.write('- %s\n' % filename)
def getAmbience(self, group):
"""
Returns the ambience configurations for the specified group.
"""
return self.ambience.get(group, {})

View file

@ -216,14 +216,14 @@ class RemoteAccountDB(AccountDB):
correctHash = hashAlgo(token + accountServerSecret).digest()
if len(hash) != len(correctHash):
raise ValueError('invalid hash')
raise ValueError('Invalid hash.')
value = 0
for x, y in zip(hash[::-1], correctHash):
value |= ord(x) ^ ord(y)
if value:
raise ValueError('invalid hash')
raise ValueError('Invalid hash.')
token = json.loads(token.decode('base64')[::-1].decode('rot13'))

View file

@ -1,3 +0,0 @@
*
!.gitignore
!sort.yaml