Commit initial et ajout de build_gamedata_linux depuis une copie de build_gamedata (pour le moment que 0_setup.py et configuration/scripts.py changé et all_dev bash script ajouté)
This commit is contained in:
parent
145651ed54
commit
1590df0b1d
235 changed files with 21107 additions and 2 deletions
|
@ -366,7 +366,7 @@ for projectName in ProjectsToProcess:
|
||||||
subprocess.call([ "python", "0_setup.py", "--excludeprocess" ] + args.excludeprocess)
|
subprocess.call([ "python", "0_setup.py", "--excludeprocess" ] + args.excludeprocess)
|
||||||
else:
|
else:
|
||||||
subprocess.call([ "python", "0_setup.py" ])
|
subprocess.call([ "python", "0_setup.py" ])
|
||||||
except Exception, e:
|
except Exception as e:
|
||||||
printLog(log, "<" + projectName + "> " + str(e))
|
printLog(log, "<" + projectName + "> " + str(e))
|
||||||
os.chdir("..")
|
os.chdir("..")
|
||||||
try:
|
try:
|
||||||
|
@ -374,7 +374,7 @@ for projectName in ProjectsToProcess:
|
||||||
projectLogData = projectLog.read()
|
projectLogData = projectLog.read()
|
||||||
projectLog.close()
|
projectLog.close()
|
||||||
log.write(projectLogData)
|
log.write(projectLogData)
|
||||||
except Exception, e:
|
except Exception as e:
|
||||||
printLog(log, "<" + projectName + "> " + str(e))
|
printLog(log, "<" + projectName + "> " + str(e))
|
||||||
else:
|
else:
|
||||||
printLog(log, "IGNORE PROJECT " + projectName)
|
printLog(log, "IGNORE PROJECT " + projectName)
|
||||||
|
|
469
code/nel/tools/build_gamedata_linux/0_setup.py
Executable file
469
code/nel/tools/build_gamedata_linux/0_setup.py
Executable file
|
@ -0,0 +1,469 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 0_setup.py
|
||||||
|
# \brief Run all setup processes
|
||||||
|
# \date 2009-02-18 15:28GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Run all setup processes
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util, argparse
|
||||||
|
sys.path.append("configuration")
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(description='Ryzom Core - Build Gamedata - Setup')
|
||||||
|
parser.add_argument('--noconf', '-nc', action='store_true')
|
||||||
|
parser.add_argument('--noverify', '-nv', action='store_true')
|
||||||
|
# parser.add_argument('--haltonerror', '-eh', action='store_true')
|
||||||
|
parser.add_argument('--includeproject', '-ipj', nargs='+')
|
||||||
|
parser.add_argument('--excludeproject', '-epj', nargs='+')
|
||||||
|
parser.add_argument('--includeprocess', '-ipc', nargs='+')
|
||||||
|
parser.add_argument('--excludeprocess', '-epc', nargs='+')
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
if not args.includeproject == None and not args.excludeproject == None:
|
||||||
|
print("ERROR --includeproject cannot be combined with --excludeproject, exit.")
|
||||||
|
exit()
|
||||||
|
|
||||||
|
if not args.includeprocess == None and not args.excludeprocess == None:
|
||||||
|
print("ERROR --includeprocess cannot be combined with --excludeprocess, exit.")
|
||||||
|
exit()
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
try:
|
||||||
|
from buildsite import *
|
||||||
|
except ImportError:
|
||||||
|
printLog(log, "*** FIRST RUN ***")
|
||||||
|
if args.noconf:
|
||||||
|
printLog(log, "ERROR --noconf is invalid on first run, exit.")
|
||||||
|
exit()
|
||||||
|
from tools import *
|
||||||
|
|
||||||
|
if not args.noconf:
|
||||||
|
try:
|
||||||
|
BaseDir
|
||||||
|
except NameError:
|
||||||
|
BaseDir = "/Volumes/SIELA/Khaganat"
|
||||||
|
try:
|
||||||
|
CodeDir
|
||||||
|
except NameError:
|
||||||
|
CodeDir = BaseDir + "/khanat-code/code"
|
||||||
|
try:
|
||||||
|
DataDir
|
||||||
|
except NameError:
|
||||||
|
DataDir = BaseDir + "/khanat-data"
|
||||||
|
try:
|
||||||
|
AssetsDir
|
||||||
|
except NameError:
|
||||||
|
AssetsDir = BaseDir + "/khanat-assets"
|
||||||
|
try:
|
||||||
|
BuildDir
|
||||||
|
except NameError:
|
||||||
|
BuildDir = BaseDir + "/khanat-build"
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Setup build site")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "This script will set up the buildsite configuration, and create needed directories.")
|
||||||
|
printLog(log, "To use the defaults, simply hit ENTER, else type in the new value.")
|
||||||
|
printLog(log, "Use -- if you need to insert an empty value.")
|
||||||
|
printLog(log, "")
|
||||||
|
BaseDir = askVar(log, "Base Directory", BaseDir).replace("\\", "/")
|
||||||
|
CodeDir = askVar(log, "Code Directory", CodeDir).replace("\\", "/")
|
||||||
|
DataDir = askVar(log, "Data Directory", DataDir).replace("\\", "/")
|
||||||
|
AssetsDir = askVar(log, "Asset Directory", AssetsDir).replace("\\", "/")
|
||||||
|
BuildDir = askVar(log, "Build Directory", BuildDir).replace("\\", "/")
|
||||||
|
|
||||||
|
try:
|
||||||
|
BuildQuality
|
||||||
|
except NameError:
|
||||||
|
BuildQuality = 1
|
||||||
|
try:
|
||||||
|
ToolDirectories
|
||||||
|
except NameError:
|
||||||
|
ToolDirectories = [ CodeDir + '/build_tools/bin', BaseDir + '/external/bin' ]
|
||||||
|
try:
|
||||||
|
ToolSuffix
|
||||||
|
except NameError:
|
||||||
|
ToolSuffix = ""
|
||||||
|
try:
|
||||||
|
ScriptDirectory
|
||||||
|
except NameError:
|
||||||
|
ScriptDirectory = CodeDir + "/nel/tools/build_gamedata_linux"
|
||||||
|
try:
|
||||||
|
WorkspaceDirectory
|
||||||
|
except NameError:
|
||||||
|
WorkspaceDirectory = DataDir + "/workspace"
|
||||||
|
try:
|
||||||
|
DatabaseDirectory
|
||||||
|
except NameError:
|
||||||
|
DatabaseDirectory = AssetsDir + "/database"
|
||||||
|
try:
|
||||||
|
ExportBuildDirectory
|
||||||
|
except NameError:
|
||||||
|
ExportBuildDirectory = BuildDir + "/export"
|
||||||
|
try:
|
||||||
|
InstallDirectory
|
||||||
|
except NameError:
|
||||||
|
InstallDirectory = BuildDir + "/install"
|
||||||
|
try:
|
||||||
|
ClientDevDirectory
|
||||||
|
except NameError:
|
||||||
|
ClientDevDirectory = BuildDir + "/client_dev"
|
||||||
|
try:
|
||||||
|
ClientPatchDirectory
|
||||||
|
except NameError:
|
||||||
|
ClientPatchDirectory = BuildDir + "/client_patch"
|
||||||
|
try:
|
||||||
|
ClientInstallDirectory
|
||||||
|
except NameError:
|
||||||
|
ClientInstallDirectory = BuildDir + "/client_install"
|
||||||
|
try:
|
||||||
|
ShardInstallDirectory
|
||||||
|
except NameError:
|
||||||
|
ShardInstallDirectory = BuildDir + "/shard"
|
||||||
|
try:
|
||||||
|
WorldEditInstallDirectory
|
||||||
|
except NameError:
|
||||||
|
WorldEditInstallDirectory = BuildDir + "/worldedit"
|
||||||
|
try:
|
||||||
|
LeveldesignDirectory
|
||||||
|
except NameError:
|
||||||
|
LeveldesignDirectory = DataDir + "/leveldesign"
|
||||||
|
try:
|
||||||
|
LeveldesignDfnDirectory
|
||||||
|
except NameError:
|
||||||
|
LeveldesignDfnDirectory = DataDir + "/leveldesign/DFN"
|
||||||
|
try:
|
||||||
|
LeveldesignWorldDirectory
|
||||||
|
except NameError:
|
||||||
|
LeveldesignWorldDirectory = DataDir + "/leveldesign/world"
|
||||||
|
try:
|
||||||
|
PrimitivesDirectory
|
||||||
|
except NameError:
|
||||||
|
PrimitivesDirectory = DataDir + "/primitives"
|
||||||
|
try:
|
||||||
|
GamedevDirectory
|
||||||
|
except NameError:
|
||||||
|
GamedevDirectory = CodeDir + "/ryzom/client/data/gamedev"
|
||||||
|
try:
|
||||||
|
DataShardDirectory
|
||||||
|
except NameError:
|
||||||
|
DataShardDirectory = CodeDir + "/ryzom/server/data_shard"
|
||||||
|
try:
|
||||||
|
DataCommonDirectory
|
||||||
|
except NameError:
|
||||||
|
DataCommonDirectory = CodeDir + "/ryzom/common/data_common"
|
||||||
|
try:
|
||||||
|
LeveldesignDataShardDirectory
|
||||||
|
except NameError:
|
||||||
|
LeveldesignDataShardDirectory = DataDir + "/shard"
|
||||||
|
try:
|
||||||
|
LeveldesignDataCommonDirectory
|
||||||
|
except NameError:
|
||||||
|
LeveldesignDataCommonDirectory = DataDir + "/common"
|
||||||
|
try:
|
||||||
|
TranslationDirectory
|
||||||
|
except NameError:
|
||||||
|
TranslationDirectory = DataDir + "/translation"
|
||||||
|
try:
|
||||||
|
WorldEditorFilesDirectory
|
||||||
|
except NameError:
|
||||||
|
WorldEditorFilesDirectory = CodeDir + "/ryzom/common/data_leveldesign/leveldesign/world_editor_files"
|
||||||
|
try:
|
||||||
|
WindowsExeDllCfgDirectories
|
||||||
|
except NameError:
|
||||||
|
WindowsExeDllCfgDirectories = [ 'C:/Program Files (x86)/Microsoft Visual Studio 9.0/VC/redist/x86', 'D:/libraries/external/bin', 'R:/build/dev/bin/Release', 'R:/code/ryzom/client', 'R:/code/nel/lib', 'R:/code/ryzom/bin', 'R:/code/ryzom/tools/client/client_config/bin' ]
|
||||||
|
try:
|
||||||
|
LinuxServiceExecutableDirectory
|
||||||
|
except NameError:
|
||||||
|
LinuxServiceExecutableDirectory = CodeDir + "/build_linux_server/bin"
|
||||||
|
try:
|
||||||
|
LinuxClientExecutableDirectory
|
||||||
|
except NameError:
|
||||||
|
LinuxClientExecutableDirectory = CodeDir + "/build_linux_client/bin"
|
||||||
|
try:
|
||||||
|
PatchmanCfgAdminDirectory
|
||||||
|
except NameError:
|
||||||
|
PatchmanCfgAdminDirectory = CodeDir + "/ryzom/server/patchman_cfg/admin_install"
|
||||||
|
try:
|
||||||
|
PatchmanCfgDefaultDirectory
|
||||||
|
except NameError:
|
||||||
|
PatchmanCfgDefaultDirectory = CodeDir + "/ryzom/server/patchman_cfg/default"
|
||||||
|
try:
|
||||||
|
PatchmanBridgeServerDirectory
|
||||||
|
except NameError:
|
||||||
|
PatchmanBridgeServerDirectory = BuildDir + "/bridge_server"
|
||||||
|
try:
|
||||||
|
MaxAvailable
|
||||||
|
except NameError:
|
||||||
|
MaxAvailable = 0
|
||||||
|
try:
|
||||||
|
MaxDirectory
|
||||||
|
except NameError:
|
||||||
|
MaxDirectory = "C:/Program Files (x86)/Autodesk/3ds Max 2010"
|
||||||
|
try:
|
||||||
|
MaxUserDirectory
|
||||||
|
except NameError:
|
||||||
|
import os
|
||||||
|
try:
|
||||||
|
MaxUserDirectory = os.path.normpath(os.environ["LOCALAPPDATA"] + "/Autodesk/3dsMax/2010 - 32bit/enu")
|
||||||
|
except KeyError:
|
||||||
|
MaxAvailable = 0
|
||||||
|
MaxUserDirectory = "C:/Users/Kaetemi/AppData/Local/Autodesk/3dsMax/2010 - 32bit/enu"
|
||||||
|
try:
|
||||||
|
MaxExecutable
|
||||||
|
except NameError:
|
||||||
|
MaxExecutable = "3dsmax.exe"
|
||||||
|
|
||||||
|
BuildQuality = int(askVar(log, "Build Quality", str(BuildQuality)))
|
||||||
|
ToolDirectories[0] = askVar(log, "[IN] Primary Tool Directory", ToolDirectories[0]).replace("\\", "/")
|
||||||
|
ToolDirectories[1] = askVar(log, "[IN] Secondary Tool Directory", ToolDirectories[1]).replace("\\", "/")
|
||||||
|
ToolSuffix = askVar(log, "Tool Suffix", ToolSuffix)
|
||||||
|
ScriptDirectory = askVar(log, "[IN] Script Directory", os.getcwd().replace("\\", "/")).replace("\\", "/")
|
||||||
|
WorkspaceDirectory = askVar(log, "[IN] Workspace Directory", WorkspaceDirectory).replace("\\", "/")
|
||||||
|
DatabaseDirectory = askVar(log, "[IN] Database Directory", DatabaseDirectory).replace("\\", "/")
|
||||||
|
ExportBuildDirectory = askVar(log, "[OUT] Export Build Directory", ExportBuildDirectory).replace("\\", "/")
|
||||||
|
InstallDirectory = askVar(log, "[OUT] Install Directory", InstallDirectory).replace("\\", "/")
|
||||||
|
ClientDevDirectory = askVar(log, "[OUT] Client Dev Directory", ClientDevDirectory).replace("\\", "/")
|
||||||
|
ClientPatchDirectory = askVar(log, "[OUT] Client Patch Directory", ClientPatchDirectory).replace("\\", "/")
|
||||||
|
ClientInstallDirectory = askVar(log, "[OUT] Client Install Directory", ClientInstallDirectory).replace("\\", "/")
|
||||||
|
ShardInstallDirectory = askVar(log, "[OUT] Shard Data Install Directory", ShardInstallDirectory).replace("\\", "/")
|
||||||
|
WorldEditInstallDirectory = askVar(log, "[OUT] World Edit Data Install Directory", WorldEditInstallDirectory).replace("\\", "/")
|
||||||
|
LeveldesignDirectory = askVar(log, "[IN] Leveldesign Directory", LeveldesignDirectory).replace("\\", "/")
|
||||||
|
LeveldesignDfnDirectory = askVar(log, "[IN] Leveldesign DFN Directory", LeveldesignDfnDirectory).replace("\\", "/")
|
||||||
|
LeveldesignWorldDirectory = askVar(log, "[IN] Leveldesign World Directory", LeveldesignWorldDirectory).replace("\\", "/")
|
||||||
|
PrimitivesDirectory = askVar(log, "[IN] Primitives Directory", PrimitivesDirectory).replace("\\", "/")
|
||||||
|
GamedevDirectory = askVar(log, "[IN] Gamedev Directory", GamedevDirectory).replace("\\", "/")
|
||||||
|
DataShardDirectory = askVar(log, "[IN] Data Shard Directory", DataShardDirectory).replace("\\", "/")
|
||||||
|
DataCommonDirectory = askVar(log, "[IN] Data Common Directory", DataCommonDirectory).replace("\\", "/")
|
||||||
|
TranslationDirectory = askVar(log, "[IN] Translation Directory", TranslationDirectory).replace("\\", "/")
|
||||||
|
LeveldesignDataShardDirectory = askVar(log, "[IN] Leveldesign Data Shard Directory", LeveldesignDataShardDirectory).replace("\\", "/")
|
||||||
|
LeveldesignDataCommonDirectory = askVar(log, "[IN] Leveldesign Data Common Directory", LeveldesignDataCommonDirectory).replace("\\", "/")
|
||||||
|
WorldEditorFilesDirectory = askVar(log, "[IN] World Editor Files Directory", WorldEditorFilesDirectory).replace("\\", "/")
|
||||||
|
WindowsExeDllCfgDirectories[0] = askVar(log, "[IN] Primary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[0]).replace("\\", "/")
|
||||||
|
WindowsExeDllCfgDirectories[1] = askVar(log, "[IN] Secondary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[1]).replace("\\", "/")
|
||||||
|
WindowsExeDllCfgDirectories[2] = askVar(log, "[IN] Tertiary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[2]).replace("\\", "/")
|
||||||
|
WindowsExeDllCfgDirectories[3] = askVar(log, "[IN] Quaternary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[3]).replace("\\", "/")
|
||||||
|
WindowsExeDllCfgDirectories[4] = askVar(log, "[IN] Quinary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[4]).replace("\\", "/")
|
||||||
|
WindowsExeDllCfgDirectories[5] = askVar(log, "[IN] Senary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[5]).replace("\\", "/")
|
||||||
|
WindowsExeDllCfgDirectories[6] = askVar(log, "[IN] Septenary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[6]).replace("\\", "/")
|
||||||
|
LinuxServiceExecutableDirectory = askVar(log, "[IN] Linux Service Executable Directory", LinuxServiceExecutableDirectory).replace("\\", "/")
|
||||||
|
LinuxClientExecutableDirectory = askVar(log, "[IN] Linux Client Executable Directory", LinuxClientExecutableDirectory).replace("\\", "/")
|
||||||
|
PatchmanCfgAdminDirectory = askVar(log, "[IN] Patchman Cfg Admin Directory", PatchmanCfgAdminDirectory).replace("\\", "/")
|
||||||
|
PatchmanCfgDefaultDirectory = askVar(log, "[IN] Patchman Cfg Default Directory", PatchmanCfgDefaultDirectory).replace("\\", "/")
|
||||||
|
PatchmanBridgeServerDirectory = askVar(log, "[OUT] Patchman Bridge Server Patch Directory", PatchmanBridgeServerDirectory).replace("\\", "/")
|
||||||
|
MaxAvailable = int(askVar(log, "3dsMax Available", str(MaxAvailable)))
|
||||||
|
if MaxAvailable:
|
||||||
|
MaxDirectory = askVar(log, "3dsMax Directory", MaxDirectory).replace("\\", "/")
|
||||||
|
MaxUserDirectory = askVar(log, "3dsMax User Directory", MaxUserDirectory).replace("\\", "/")
|
||||||
|
MaxExecutable = askVar(log, "3dsMax Executable", MaxExecutable)
|
||||||
|
if os.path.isfile("configuration/buildsite.py"):
|
||||||
|
os.remove("configuration/buildsite.py")
|
||||||
|
sf = open("configuration/buildsite.py", "w")
|
||||||
|
sf.write("#!/usr/bin/python\n")
|
||||||
|
sf.write("# \n")
|
||||||
|
sf.write("# \\file site.py\n")
|
||||||
|
sf.write("# \\brief Site configuration\n")
|
||||||
|
sf.write("# \\date " + time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time())) + "\n")
|
||||||
|
sf.write("# \\author Jan Boon (Kaetemi)\n")
|
||||||
|
sf.write("# Python port of game data build pipeline.\n")
|
||||||
|
sf.write("# Site configuration.\n")
|
||||||
|
sf.write("# \n")
|
||||||
|
sf.write("# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>\n")
|
||||||
|
sf.write("# Copyright (C) 2009-2014 by authors\n")
|
||||||
|
sf.write("# \n")
|
||||||
|
sf.write("# This program is free software: you can redistribute it and/or modify\n")
|
||||||
|
sf.write("# it under the terms of the GNU Affero General Public License as\n")
|
||||||
|
sf.write("# published by the Free Software Foundation, either version 3 of the\n")
|
||||||
|
sf.write("# License, or (at your option) any later version.\n")
|
||||||
|
sf.write("# \n")
|
||||||
|
sf.write("# This program is distributed in the hope that it will be useful,\n")
|
||||||
|
sf.write("# but WITHOUT ANY WARRANTY; without even the implied warranty of\n")
|
||||||
|
sf.write("# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n")
|
||||||
|
sf.write("# GNU Affero General Public License for more details.\n")
|
||||||
|
sf.write("# \n")
|
||||||
|
sf.write("# You should have received a copy of the GNU Affero General Public License\n")
|
||||||
|
sf.write("# along with this program. If not, see <http://www.gnu.org/licenses/>.\n")
|
||||||
|
sf.write("# \n")
|
||||||
|
sf.write("\n")
|
||||||
|
sf.write("\n")
|
||||||
|
sf.write("# *** SITE INSTALLATION ***\n")
|
||||||
|
sf.write("\n")
|
||||||
|
sf.write("# Use '/' in path name, not '\'\n")
|
||||||
|
sf.write("# Don't put '/' at the end of a directory name\n")
|
||||||
|
sf.write("\n")
|
||||||
|
sf.write("\n")
|
||||||
|
sf.write("# Quality option for this site (1 for BEST, 0 for DRAFT)\n")
|
||||||
|
sf.write("BuildQuality = " + str(BuildQuality) + "\n")
|
||||||
|
sf.write("\n")
|
||||||
|
sf.write("ToolDirectories = " + str(ToolDirectories) + "\n")
|
||||||
|
sf.write("ToolSuffix = \"" + str(ToolSuffix) + "\"\n")
|
||||||
|
sf.write("\n")
|
||||||
|
sf.write("# Build script directory\n")
|
||||||
|
sf.write("ScriptDirectory = \"" + str(ScriptDirectory) + "\"\n")
|
||||||
|
sf.write("WorkspaceDirectory = \"" + str(WorkspaceDirectory) + "\"\n")
|
||||||
|
sf.write("\n")
|
||||||
|
sf.write("# Data build directories\n")
|
||||||
|
sf.write("DatabaseDirectory = \"" + str(DatabaseDirectory) + "\"\n")
|
||||||
|
sf.write("ExportBuildDirectory = \"" + str(ExportBuildDirectory) + "\"\n")
|
||||||
|
sf.write("\n")
|
||||||
|
sf.write("# Install directories\n")
|
||||||
|
sf.write("InstallDirectory = \"" + str(InstallDirectory) + "\"\n")
|
||||||
|
sf.write("ClientDevDirectory = \"" + str(ClientDevDirectory) + "\"\n")
|
||||||
|
sf.write("ClientPatchDirectory = \"" + str(ClientPatchDirectory) + "\"\n")
|
||||||
|
sf.write("ClientInstallDirectory = \"" + str(ClientInstallDirectory) + "\"\n")
|
||||||
|
sf.write("ShardInstallDirectory = \"" + str(ShardInstallDirectory) + "\"\n")
|
||||||
|
sf.write("WorldEditInstallDirectory = \"" + str(WorldEditInstallDirectory) + "\"\n")
|
||||||
|
sf.write("\n")
|
||||||
|
sf.write("# Utility directories\n")
|
||||||
|
sf.write("WorldEditorFilesDirectory = \"" + str(WorldEditorFilesDirectory) + "\"\n")
|
||||||
|
sf.write("\n")
|
||||||
|
sf.write("# Leveldesign directories\n")
|
||||||
|
sf.write("LeveldesignDirectory = \"" + str(LeveldesignDirectory) + "\"\n")
|
||||||
|
sf.write("LeveldesignDfnDirectory = \"" + str(LeveldesignDfnDirectory) + "\"\n")
|
||||||
|
sf.write("LeveldesignWorldDirectory = \"" + str(LeveldesignWorldDirectory) + "\"\n")
|
||||||
|
sf.write("PrimitivesDirectory = \"" + str(PrimitivesDirectory) + "\"\n")
|
||||||
|
sf.write("LeveldesignDataCommonDirectory = \"" + str(LeveldesignDataCommonDirectory) + "\"\n")
|
||||||
|
sf.write("LeveldesignDataShardDirectory = \"" + str(LeveldesignDataShardDirectory) + "\"\n")
|
||||||
|
sf.write("TranslationDirectory = \"" + str(TranslationDirectory) + "\"\n")
|
||||||
|
sf.write("\n")
|
||||||
|
sf.write("# Misc data directories\n")
|
||||||
|
sf.write("GamedevDirectory = \"" + str(GamedevDirectory) + "\"\n")
|
||||||
|
sf.write("DataCommonDirectory = \"" + str(DataCommonDirectory) + "\"\n")
|
||||||
|
sf.write("DataShardDirectory = \"" + str(DataShardDirectory) + "\"\n")
|
||||||
|
sf.write("WindowsExeDllCfgDirectories = " + str(WindowsExeDllCfgDirectories) + "\n")
|
||||||
|
sf.write("LinuxServiceExecutableDirectory = \"" + str(LinuxServiceExecutableDirectory) + "\"\n")
|
||||||
|
sf.write("LinuxClientExecutableDirectory = \"" + str(LinuxClientExecutableDirectory) + "\"\n")
|
||||||
|
sf.write("PatchmanCfgAdminDirectory = \"" + str(PatchmanCfgAdminDirectory) + "\"\n")
|
||||||
|
sf.write("PatchmanCfgDefaultDirectory = \"" + str(PatchmanCfgDefaultDirectory) + "\"\n")
|
||||||
|
sf.write("PatchmanBridgeServerDirectory = \"" + str(PatchmanBridgeServerDirectory) + "\"\n")
|
||||||
|
sf.write("\n")
|
||||||
|
sf.write("# 3dsMax directives\n")
|
||||||
|
sf.write("MaxAvailable = " + str(MaxAvailable) + "\n")
|
||||||
|
sf.write("MaxDirectory = \"" + str(MaxDirectory) + "\"\n")
|
||||||
|
sf.write("MaxUserDirectory = \"" + str(MaxUserDirectory) + "\"\n")
|
||||||
|
sf.write("MaxExecutable = \"" + str(MaxExecutable) + "\"\n")
|
||||||
|
sf.write("\n")
|
||||||
|
sf.write("\n")
|
||||||
|
sf.write("# end of file\n")
|
||||||
|
sf.close()
|
||||||
|
|
||||||
|
sys.path.append(WorkspaceDirectory)
|
||||||
|
from projects import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Run the setup projects")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
# For each project
|
||||||
|
for projectName in ProjectsToProcess:
|
||||||
|
if ((args.includeproject == None or projectName in args.includeproject) and (args.excludeproject == None or not projectName in args.excludeproject)):
|
||||||
|
printLog(log, "PROJECT " + projectName)
|
||||||
|
os.putenv("NELBUILDACTIVEPROJECT", os.path.abspath(WorkspaceDirectory + "/" + projectName))
|
||||||
|
os.chdir("processes")
|
||||||
|
try:
|
||||||
|
if not args.includeprocess == None:
|
||||||
|
subprocess.call([ "python", "0_setup.py", "--includeprocess" ] + args.includeprocess)
|
||||||
|
elif not args.excludeprocess == None:
|
||||||
|
subprocess.call([ "python", "0_setup.py", "--excludeprocess" ] + args.excludeprocess)
|
||||||
|
else:
|
||||||
|
subprocess.call([ "python", "0_setup.py" ])
|
||||||
|
except Exception as e:
|
||||||
|
printLog(log, "<" + projectName + "> " + str(e))
|
||||||
|
os.chdir("..")
|
||||||
|
try:
|
||||||
|
projectLog = open("processes/log.log", "r")
|
||||||
|
projectLogData = projectLog.read()
|
||||||
|
projectLog.close()
|
||||||
|
log.write(projectLogData)
|
||||||
|
except Exception as e:
|
||||||
|
printLog(log, "<" + projectName + "> " + str(e))
|
||||||
|
else:
|
||||||
|
printLog(log, "IGNORE PROJECT " + projectName)
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# Additional directories
|
||||||
|
printLog(log, ">>> Setup additional directories <<<")
|
||||||
|
mkPath(log, ClientDevDirectory)
|
||||||
|
mkPath(log, ClientPatchDirectory)
|
||||||
|
mkPath(log, ClientInstallDirectory)
|
||||||
|
|
||||||
|
if not args.noverify:
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Verify tool paths")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
if MaxAvailable:
|
||||||
|
findMax(log, MaxDirectory, MaxExecutable)
|
||||||
|
findTool(log, ToolDirectories, TgaToDdsTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, BuildInterfaceTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, ExecTimeoutTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, BuildSmallbankTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, BuildFarbankTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, ZoneDependenciesTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, ZoneWelderTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, BuildRbankTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, BuildIndoorRbankTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, BuildIgBoxesTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, GetNeighborsTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, ZoneLighterTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, ZoneIgLighterTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, IgLighterTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, AnimBuilderTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, TileEditTool, ToolSuffix)
|
||||||
|
# findTool(log, ToolDirectories, BuildImagesetTool, ToolSuffix) # kaetemi stuff, ignore this
|
||||||
|
findTool(log, ToolDirectories, MakeSheetIdTool, ToolSuffix)
|
||||||
|
# findTool(log, ToolDirectories, BuildSheetsTool, ToolSuffix) # kaetemi stuff, ignore this
|
||||||
|
# findTool(log, ToolDirectories, BuildSoundTool, ToolSuffix) # kaetemi stuff, ignore this
|
||||||
|
findTool(log, ToolDirectories, BuildCoarseMeshTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, LightmapOptimizerTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, BuildClodtexTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, BuildShadowSkinTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, PanoplyMakerTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, HlsBankMakerTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, LandExportTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, PrimExportTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, IgElevationTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, IgAddTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, BuildClodBankTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, SheetsPackerTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, BnpMakeTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, AiBuildWmapTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, TgaCutTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, PatchGenTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, TranslationToolsTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, BuildWorldPackedColTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, R2IslandsTexturesTool, ToolSuffix)
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
if os.path.isfile("0_setup.log"):
|
||||||
|
os.remove("0_setup.log")
|
||||||
|
shutil.copy("log.log", time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time())) + "_setup.log")
|
||||||
|
shutil.move("log.log", "0_setup.log")
|
94
code/nel/tools/build_gamedata_linux/1_export.py
Executable file
94
code/nel/tools/build_gamedata_linux/1_export.py
Executable file
|
@ -0,0 +1,94 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 1_export.py
|
||||||
|
# \brief Run all export processes
|
||||||
|
# \date 2009-02-18 09:22GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Run all export processes
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util, argparse
|
||||||
|
sys.path.append("configuration")
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(description='Ryzom Core - Build Gamedata - Export')
|
||||||
|
# parser.add_argument('--haltonerror', '-eh', action='store_true')
|
||||||
|
parser.add_argument('--includeproject', '-ipj', nargs='+')
|
||||||
|
parser.add_argument('--excludeproject', '-epj', nargs='+')
|
||||||
|
parser.add_argument('--includeprocess', '-ipc', nargs='+')
|
||||||
|
parser.add_argument('--excludeprocess', '-epc', nargs='+')
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
if not args.includeproject == None and not args.excludeproject == None:
|
||||||
|
print "ERROR --includeproject cannot be combined with --excludeproject, exit."
|
||||||
|
exit()
|
||||||
|
|
||||||
|
if not args.includeprocess == None and not args.excludeprocess == None:
|
||||||
|
print "ERROR --includeprocess cannot be combined with --excludeprocess, exit."
|
||||||
|
exit()
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from tools import *
|
||||||
|
|
||||||
|
sys.path.append(WorkspaceDirectory)
|
||||||
|
from projects import *
|
||||||
|
|
||||||
|
# Log error
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Run the export processes")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
# For each project
|
||||||
|
for projectName in ProjectsToProcess:
|
||||||
|
if ((args.includeproject == None or projectName in args.includeproject) and (args.excludeproject == None or not projectName in args.excludeproject)):
|
||||||
|
printLog(log, "PROJECT " + projectName)
|
||||||
|
os.putenv("NELBUILDACTIVEPROJECT", os.path.abspath(WorkspaceDirectory + "/" + projectName))
|
||||||
|
os.chdir("processes")
|
||||||
|
try:
|
||||||
|
if not args.includeprocess == None:
|
||||||
|
subprocess.call([ "python", "1_export.py", "--includeprocess" ] + args.includeprocess)
|
||||||
|
elif not args.excludeprocess == None:
|
||||||
|
subprocess.call([ "python", "1_export.py", "--excludeprocess" ] + args.excludeprocess)
|
||||||
|
else:
|
||||||
|
subprocess.call([ "python", "1_export.py" ])
|
||||||
|
except Exception, e:
|
||||||
|
printLog(log, "<" + projectName + "> " + str(e))
|
||||||
|
os.chdir("..")
|
||||||
|
try:
|
||||||
|
projectLog = open("processes/log.log", "r")
|
||||||
|
projectLogData = projectLog.read()
|
||||||
|
projectLog.close()
|
||||||
|
log.write(projectLogData)
|
||||||
|
except Exception, e:
|
||||||
|
printLog(log, "<" + projectName + "> " + str(e))
|
||||||
|
else:
|
||||||
|
printLog(log, "IGNORE PROJECT " + projectName)
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
if os.path.isfile("1_export.log"):
|
||||||
|
os.remove("1_export.log")
|
||||||
|
shutil.copy("log.log", time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time())) + "_export.log")
|
||||||
|
shutil.move("log.log", "1_export.log")
|
94
code/nel/tools/build_gamedata_linux/2_build.py
Executable file
94
code/nel/tools/build_gamedata_linux/2_build.py
Executable file
|
@ -0,0 +1,94 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 2_build.py
|
||||||
|
# \brief Run all build processes
|
||||||
|
# \date 2009-02-18 09:22GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Run all build processes
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util, argparse
|
||||||
|
sys.path.append("configuration")
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(description='Ryzom Core - Build Gamedata - Build')
|
||||||
|
# parser.add_argument('--haltonerror', '-eh', action='store_true')
|
||||||
|
parser.add_argument('--includeproject', '-ipj', nargs='+')
|
||||||
|
parser.add_argument('--excludeproject', '-epj', nargs='+')
|
||||||
|
parser.add_argument('--includeprocess', '-ipc', nargs='+')
|
||||||
|
parser.add_argument('--excludeprocess', '-epc', nargs='+')
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
if not args.includeproject == None and not args.excludeproject == None:
|
||||||
|
print "ERROR --includeproject cannot be combined with --excludeproject, exit."
|
||||||
|
exit()
|
||||||
|
|
||||||
|
if not args.includeprocess == None and not args.excludeprocess == None:
|
||||||
|
print "ERROR --includeprocess cannot be combined with --excludeprocess, exit."
|
||||||
|
exit()
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from tools import *
|
||||||
|
|
||||||
|
sys.path.append(WorkspaceDirectory)
|
||||||
|
from projects import *
|
||||||
|
|
||||||
|
# Log error
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Run the build processes")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
# For each project
|
||||||
|
for projectName in ProjectsToProcess:
|
||||||
|
if ((args.includeproject == None or projectName in args.includeproject) and (args.excludeproject == None or not projectName in args.excludeproject)):
|
||||||
|
printLog(log, "PROJECT " + projectName)
|
||||||
|
os.putenv("NELBUILDACTIVEPROJECT", os.path.abspath(WorkspaceDirectory + "/" + projectName))
|
||||||
|
os.chdir("processes")
|
||||||
|
try:
|
||||||
|
if not args.includeprocess == None:
|
||||||
|
subprocess.call([ "python", "2_build.py", "--includeprocess" ] + args.includeprocess)
|
||||||
|
elif not args.excludeprocess == None:
|
||||||
|
subprocess.call([ "python", "2_build.py", "--excludeprocess" ] + args.excludeprocess)
|
||||||
|
else:
|
||||||
|
subprocess.call([ "python", "2_build.py" ])
|
||||||
|
except Exception, e:
|
||||||
|
printLog(log, "<" + projectName + "> " + str(e))
|
||||||
|
os.chdir("..")
|
||||||
|
try:
|
||||||
|
projectLog = open("processes/log.log", "r")
|
||||||
|
projectLogData = projectLog.read()
|
||||||
|
projectLog.close()
|
||||||
|
log.write(projectLogData)
|
||||||
|
except Exception, e:
|
||||||
|
printLog(log, "<" + projectName + "> " + str(e))
|
||||||
|
else:
|
||||||
|
printLog(log, "IGNORE PROJECT " + projectName)
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
if os.path.isfile("2_build.log"):
|
||||||
|
os.remove("2_build.log")
|
||||||
|
shutil.copy("log.log", time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time())) + "_build.log")
|
||||||
|
shutil.move("log.log", "2_build.log")
|
94
code/nel/tools/build_gamedata_linux/3_install.py
Executable file
94
code/nel/tools/build_gamedata_linux/3_install.py
Executable file
|
@ -0,0 +1,94 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 3_install.py
|
||||||
|
# \brief Run all install processes
|
||||||
|
# \date 2009-02-18 16:19GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Run all install processes
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util, argparse
|
||||||
|
sys.path.append("configuration")
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(description='Ryzom Core - Build Gamedata - Install')
|
||||||
|
# parser.add_argument('--haltonerror', '-eh', action='store_true')
|
||||||
|
parser.add_argument('--includeproject', '-ipj', nargs='+')
|
||||||
|
parser.add_argument('--excludeproject', '-epj', nargs='+')
|
||||||
|
parser.add_argument('--includeprocess', '-ipc', nargs='+')
|
||||||
|
parser.add_argument('--excludeprocess', '-epc', nargs='+')
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
if not args.includeproject == None and not args.excludeproject == None:
|
||||||
|
print "ERROR --includeproject cannot be combined with --excludeproject, exit."
|
||||||
|
exit()
|
||||||
|
|
||||||
|
if not args.includeprocess == None and not args.excludeprocess == None:
|
||||||
|
print "ERROR --includeprocess cannot be combined with --excludeprocess, exit."
|
||||||
|
exit()
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from tools import *
|
||||||
|
|
||||||
|
sys.path.append(WorkspaceDirectory)
|
||||||
|
from projects import *
|
||||||
|
|
||||||
|
# Log error
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Run the install processes")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
# For each project
|
||||||
|
for projectName in ProjectsToProcess:
|
||||||
|
if ((args.includeproject == None or projectName in args.includeproject) and (args.excludeproject == None or not projectName in args.excludeproject)):
|
||||||
|
printLog(log, "PROJECT " + projectName)
|
||||||
|
os.putenv("NELBUILDACTIVEPROJECT", os.path.abspath(WorkspaceDirectory + "/" + projectName))
|
||||||
|
os.chdir("processes")
|
||||||
|
try:
|
||||||
|
if not args.includeprocess == None:
|
||||||
|
subprocess.call([ "python", "3_install.py", "--includeprocess" ] + args.includeprocess)
|
||||||
|
elif not args.excludeprocess == None:
|
||||||
|
subprocess.call([ "python", "3_install.py", "--excludeprocess" ] + args.excludeprocess)
|
||||||
|
else:
|
||||||
|
subprocess.call([ "python", "3_install.py" ])
|
||||||
|
except Exception, e:
|
||||||
|
printLog(log, "<" + projectName + "> " + str(e))
|
||||||
|
os.chdir("..")
|
||||||
|
try:
|
||||||
|
projectLog = open("processes/log.log", "r")
|
||||||
|
projectLogData = projectLog.read()
|
||||||
|
projectLog.close()
|
||||||
|
log.write(projectLogData)
|
||||||
|
except Exception, e:
|
||||||
|
printLog(log, "<" + projectName + "> " + str(e))
|
||||||
|
else:
|
||||||
|
printLog(log, "IGNORE PROJECT " + projectName)
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
if os.path.isfile("3_install.log"):
|
||||||
|
os.remove("3_install.log")
|
||||||
|
shutil.copy("log.log", time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time())) + "_install.log")
|
||||||
|
shutil.move("log.log", "3_install.log")
|
181
code/nel/tools/build_gamedata_linux/9_upload.py
Executable file
181
code/nel/tools/build_gamedata_linux/9_upload.py
Executable file
|
@ -0,0 +1,181 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 9_upload.py
|
||||||
|
# \brief Upload data to servers
|
||||||
|
# \date 2009-02-18 16:19GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Game data build pipeline.
|
||||||
|
# Upload data to servers
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2011 Kaetemi
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from tools import *
|
||||||
|
|
||||||
|
try:
|
||||||
|
from upload import *
|
||||||
|
except ImportError:
|
||||||
|
# Not documenting this. Because we can.
|
||||||
|
printLog(log, "ERROR Upload not configured, bye.")
|
||||||
|
exit()
|
||||||
|
|
||||||
|
sys.path.append(WorkspaceDirectory)
|
||||||
|
from projects import *
|
||||||
|
|
||||||
|
# Log error
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Upload data to servers")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# Find tools
|
||||||
|
# Not documenting this. Because we can.
|
||||||
|
Psftp = findFileMultiDir(log, ToolDirectories + WindowsExeDllCfgDirectories, UploadPsftpTool)
|
||||||
|
printLog(log, "PSFTP " + Psftp)
|
||||||
|
|
||||||
|
def downloadVersionTag(server, user, sshkey, dir):
|
||||||
|
if os.path.isfile("upload.tag"):
|
||||||
|
os.remove("upload.tag")
|
||||||
|
if os.path.isfile("upload.batch"):
|
||||||
|
os.remove("upload.batch")
|
||||||
|
ub = open("upload.batch", "w")
|
||||||
|
ub.write("cd " + dir + "\n")
|
||||||
|
ub.write("get upload.tag upload.tag\n")
|
||||||
|
ub.write("quit\n")
|
||||||
|
ub.close()
|
||||||
|
subprocess.call([ Psftp, "-b", "upload.batch", "-i", sshkey, user + "@" + server ])
|
||||||
|
os.remove("upload.batch")
|
||||||
|
if os.path.isfile("upload.tag"):
|
||||||
|
ft = open("upload.tag")
|
||||||
|
result = float(ft.read()) # float, really
|
||||||
|
ft.close()
|
||||||
|
os.remove("upload.tag")
|
||||||
|
printLog(log, "INFO Upload tag is " + str(result))
|
||||||
|
return result
|
||||||
|
else:
|
||||||
|
printLog(log, "WARNING Upload tag not found, uploading everything")
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def isDirectoryNeeded(ft, dir):
|
||||||
|
files = os.listdir(dir)
|
||||||
|
for fileName in files:
|
||||||
|
if isLegalFileName(fileName):
|
||||||
|
fileFull = dir + "/" + fileName
|
||||||
|
if os.path.isfile(fileFull):
|
||||||
|
nftf = os.stat(fileFull).st_mtime
|
||||||
|
if nftf > ft:
|
||||||
|
return True
|
||||||
|
elif os.path.isdir(fileFull):
|
||||||
|
if isDirectoryNeeded(ft, fileFull):
|
||||||
|
return True
|
||||||
|
elif not os.path.isdir(fileFull):
|
||||||
|
printLog(log, "isDirectoryNeeded: file not dir or file?!" + fileFull)
|
||||||
|
return False
|
||||||
|
|
||||||
|
def listDirectoryUpload(ft, ub, udb, dir):
|
||||||
|
nft = 0
|
||||||
|
files = os.listdir(dir)
|
||||||
|
for fileName in files:
|
||||||
|
if isLegalFileName(fileName):
|
||||||
|
fileFull = dir + "/" + fileName
|
||||||
|
if os.path.isfile(fileFull):
|
||||||
|
nftf = os.stat(fileFull).st_mtime
|
||||||
|
if nftf > ft:
|
||||||
|
ub.write("put " + fileFull + " " + fileName + "\n")
|
||||||
|
if nftf > nft:
|
||||||
|
nft = nftf
|
||||||
|
elif os.path.isdir(fileFull):
|
||||||
|
if isDirectoryNeeded(ft, fileFull):
|
||||||
|
udb.write("mkdir " + fileName + "\n")
|
||||||
|
ub.write("cd " + fileName + "\n")
|
||||||
|
udb.write("cd " + fileName + "\n")
|
||||||
|
nft2 = listDirectoryUpload(ft, ub, udb, fileFull)
|
||||||
|
if (nft2 > nft):
|
||||||
|
nft = nft2
|
||||||
|
ub.write("cd ..\n")
|
||||||
|
udb.write("cd ..\n")
|
||||||
|
elif not os.path.isdir(fileFull):
|
||||||
|
printLog(log, "listDirectoryUpload: file not dir or file?!" + fileFull)
|
||||||
|
return nft
|
||||||
|
|
||||||
|
def uploadSftp(server, user, sshkey, dir_to, dir_from, addcmd):
|
||||||
|
ft = downloadVersionTag(server, user, sshkey, dir_to)
|
||||||
|
if isDirectoryNeeded(ft, dir_from):
|
||||||
|
if os.path.isfile("upload_dir.batch"):
|
||||||
|
os.remove("upload_dir.batch")
|
||||||
|
if os.path.isfile("upload.batch"):
|
||||||
|
os.remove("upload.batch")
|
||||||
|
udb = open("upload_dir.batch", "w")
|
||||||
|
udb.write("cd " + dir_to + "\n")
|
||||||
|
ub = open("upload.batch", "w")
|
||||||
|
ub.write("cd " + dir_to + "\n")
|
||||||
|
for ac in addcmd:
|
||||||
|
ub.write(ac + "\n")
|
||||||
|
ftn = listDirectoryUpload(ft, ub, udb, dir_from)
|
||||||
|
if (ft > ftn):
|
||||||
|
ftn = ft
|
||||||
|
nft = open("upload.tag", "w")
|
||||||
|
nft.write(str(ftn))
|
||||||
|
nft.close()
|
||||||
|
ub.write("put upload.tag upload.tag\n")
|
||||||
|
ub.write("quit\n")
|
||||||
|
ub.close()
|
||||||
|
udb.write("quit\n")
|
||||||
|
udb.close()
|
||||||
|
subprocess.call([ Psftp, "-be", "-b", "upload_dir.batch", "-i", sshkey, user + "@" + server ])
|
||||||
|
subprocess.call([ Psftp, "-b", "upload.batch", "-i", sshkey, user + "@" + server ])
|
||||||
|
os.remove("upload_dir.batch")
|
||||||
|
os.remove("upload.batch")
|
||||||
|
os.remove("upload.tag")
|
||||||
|
else:
|
||||||
|
printLog(log, "SKIP " + dir_to)
|
||||||
|
|
||||||
|
printLog(log, ">>> Upload patch <<<")
|
||||||
|
for target in UploadPatch:
|
||||||
|
uploadSftp(target[0], target[1], target[2], target[3], ClientPatchDirectory + "/patch", [ ])
|
||||||
|
|
||||||
|
printLog(log, ">>> Upload data_shard <<<")
|
||||||
|
for target in UploadShard:
|
||||||
|
uploadSftp(target[0], target[1], target[2], target[3], DataShardDirectory, [ "rm *.packed_sheets", "rm primitive_cache/*.binprim" ])
|
||||||
|
|
||||||
|
printLog(log, ">>> Upload data_common <<<")
|
||||||
|
for target in UploadCommon:
|
||||||
|
uploadSftp(target[0], target[1], target[2], target[3], DataCommonDirectory, [ ])
|
||||||
|
|
||||||
|
printLog(log, ">>> Upload data_leveldesign/leveldesign <<<")
|
||||||
|
for target in UploadLeveldesign:
|
||||||
|
uploadSftp(target[0], target[1], target[2], target[3], LeveldesignDirectory, [ ])
|
||||||
|
|
||||||
|
printLog(log, ">>> Upload data_leveldesign/primitives <<<")
|
||||||
|
for target in UploadPrimitives:
|
||||||
|
uploadSftp(target[0], target[1], target[2], target[3], PrimitivesDirectory, [ ])
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
if os.path.isfile("9_upload.log"):
|
||||||
|
os.remove("9_upload.log")
|
||||||
|
shutil.copy("log.log", time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time())) + "_upload.log")
|
||||||
|
shutil.move("log.log", "9_upload.log")
|
74
code/nel/tools/build_gamedata_linux/a1_worldedit_data.py
Executable file
74
code/nel/tools/build_gamedata_linux/a1_worldedit_data.py
Executable file
|
@ -0,0 +1,74 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file a1_worldedit_data.py
|
||||||
|
# \brief Install worldedit data
|
||||||
|
# \date 2014-09-10 14:01GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Install worldedit data
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from tools import *
|
||||||
|
|
||||||
|
sys.path.append(WorkspaceDirectory)
|
||||||
|
from projects import *
|
||||||
|
|
||||||
|
# Log error
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Install worldedit data")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
for ecosystem in WorldEditEcosystems:
|
||||||
|
ecosystemName = ecosystem[0]
|
||||||
|
srcZoneLigos = ExportBuildDirectory + "/ecosystems/" + ecosystemName + "/ligo_es/zoneligos/"
|
||||||
|
dstZoneLigos = WorldEditInstallDirectory + "/" + ecosystemName + "/zoneligos/"
|
||||||
|
mkPath(log, srcZoneLigos)
|
||||||
|
mkPath(log, dstZoneLigos)
|
||||||
|
copyFilesNoTreeIfNeeded(log, srcZoneLigos, dstZoneLigos)
|
||||||
|
srcZoneBitmaps = DatabaseDirectory + "/landscape/ligo/" + ecosystemName + "/zonebitmaps/"
|
||||||
|
dstZoneBitmaps = WorldEditInstallDirectory + "/" + ecosystemName + "/zonebitmaps/"
|
||||||
|
mkPath(log, srcZoneBitmaps)
|
||||||
|
mkPath(log, dstZoneBitmaps)
|
||||||
|
copyFilesExtNoTreeIfNeeded(log, srcZoneBitmaps, dstZoneBitmaps, ".tga")
|
||||||
|
copyFilesExtNoTreeIfNeeded(log, srcZoneBitmaps, dstZoneBitmaps, ".png")
|
||||||
|
dstCollisionMap = WorldEditInstallDirectory + "/" + ecosystemName + "/collisionmap/"
|
||||||
|
mkPath(log, dstCollisionMap)
|
||||||
|
for continentName in ecosystem[1]:
|
||||||
|
srcCollisionMap = ExportBuildDirectory + "/continents/" + continentName + "/ai_wmap/"
|
||||||
|
mkPath(log, srcCollisionMap)
|
||||||
|
copyFilesExtNoTreeIfNeeded(log, srcCollisionMap, dstCollisionMap, ".tga")
|
||||||
|
copyFilesExtNoTreeIfNeeded(log, srcCollisionMap, dstCollisionMap, ".png")
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
if os.path.isfile("a1_worldedit_data.log"):
|
||||||
|
os.remove("a1_worldedit_data.log")
|
||||||
|
shutil.copy("log.log", time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time())) + "_worldedit_data.log")
|
||||||
|
shutil.move("log.log", "a1_worldedit_data.log")
|
17
code/nel/tools/build_gamedata_linux/all_dev
Executable file
17
code/nel/tools/build_gamedata_linux/all_dev
Executable file
|
@ -0,0 +1,17 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
cd $(dirname $0)
|
||||||
|
|
||||||
|
echo "Build Pipeline: 1_export.py"
|
||||||
|
python 1_export.py
|
||||||
|
echo "Build Pipeline: 2_build.py"
|
||||||
|
python 2_build.py
|
||||||
|
echo "Build Pipeline: 3_install.py"
|
||||||
|
python 3_install.py
|
||||||
|
echo "Build Pipeline: a1_worldedit_data.py"
|
||||||
|
python a1_worldedit_data.py
|
||||||
|
echo "Build Pipeline: b1_client_dev.py"
|
||||||
|
python b1_client_dev.py
|
||||||
|
echo "Build Pipeline: b2_shard_data.py"
|
||||||
|
python b2_shard_data.py
|
||||||
|
echo "Build Pipeline: Ready!!!"
|
9
code/nel/tools/build_gamedata_linux/all_install_dev.bat
Normal file
9
code/nel/tools/build_gamedata_linux/all_install_dev.bat
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
title Ryzom Core: 3_install.py
|
||||||
|
3_install.py
|
||||||
|
title Ryzom Core: a1_worldedit_data.py
|
||||||
|
a1_worldedit_data.py
|
||||||
|
title Ryzom Core: b1_client_dev.py
|
||||||
|
b1_client_dev.py
|
||||||
|
title Ryzom Core: b2_shard_data.py
|
||||||
|
b2_shard_data.py
|
||||||
|
title Ryzom Core: Ready
|
79
code/nel/tools/build_gamedata_linux/b1_client_dev.py
Executable file
79
code/nel/tools/build_gamedata_linux/b1_client_dev.py
Executable file
|
@ -0,0 +1,79 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file b1_client_dev.py
|
||||||
|
# \brief Install to client dev
|
||||||
|
# \date 2009-02-18 16:19GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Install to client dev
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from tools import *
|
||||||
|
|
||||||
|
sys.path.append(WorkspaceDirectory)
|
||||||
|
from projects import *
|
||||||
|
|
||||||
|
# Log error
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Install to client dev")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
if not os.path.isfile(ClientDevDirectory + "/client.cfg"):
|
||||||
|
printLog(log, ">>> Generate client.cfg <<<")
|
||||||
|
cfg = open(ClientDevDirectory + "/client.cfg", "w")
|
||||||
|
cfg.write("RootConfigFilename = \"client_default.cfg\";\n")
|
||||||
|
cfg.write("PreDataPath = {\n")
|
||||||
|
cfg.write("\t\"" + InstallDirectory + "\", \"user\", \"patch\", \"data\", \"examples\" \n")
|
||||||
|
cfg.write("};\n")
|
||||||
|
cfg.write("PatchWanted = 0;\n")
|
||||||
|
cfg.write("DisplayLuaDebugInfo = 1;\n")
|
||||||
|
cfg.write("AllowDebugLua = 1;\n")
|
||||||
|
cfg.write("FullScreen = 0;\n")
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
printLog(log, ">>> Install data <<<")
|
||||||
|
for category in InstallClientData:
|
||||||
|
if (category["UnpackTo"] != None):
|
||||||
|
printLog(log, "CATEGORY " + category["Name"])
|
||||||
|
targetPath = ClientDevDirectory
|
||||||
|
if (category["UnpackTo"] != ""):
|
||||||
|
targetPath += "/" + category["UnpackTo"]
|
||||||
|
mkPath(log, targetPath)
|
||||||
|
for package in category["Packages"]:
|
||||||
|
printLog(log, "PACKAGE " + package[0])
|
||||||
|
mkPath(log, InstallDirectory + "/" + package[0])
|
||||||
|
copyFilesNoTreeIfNeeded(log, InstallDirectory + "/" + package[0], targetPath)
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
if os.path.isfile("b1_client_dev.log"):
|
||||||
|
os.remove("b1_client_dev.log")
|
||||||
|
shutil.copy("log.log", time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time())) + "_client_dev.log")
|
||||||
|
shutil.move("log.log", "b1_client_dev.log")
|
93
code/nel/tools/build_gamedata_linux/b2_shard_data.py
Executable file
93
code/nel/tools/build_gamedata_linux/b2_shard_data.py
Executable file
|
@ -0,0 +1,93 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file b2_shard_data.py
|
||||||
|
# \brief Install shard data
|
||||||
|
# \date 2009-02-18 16:19GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Install shard data
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from tools import *
|
||||||
|
|
||||||
|
sys.path.append(WorkspaceDirectory)
|
||||||
|
from projects import *
|
||||||
|
|
||||||
|
# Log error
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Install shard data")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
for dir in InstallShardDataDirectories:
|
||||||
|
printLog(log, "SHARD PACKAGE " + dir)
|
||||||
|
mkPath(log, ShardInstallDirectory + "/" + dir)
|
||||||
|
printLog(log, "FROM " + dir)
|
||||||
|
mkPath(log, InstallDirectory + "/" + dir)
|
||||||
|
copyFilesNoTreeIfNeeded(log, InstallDirectory + "/" + dir, ShardInstallDirectory + "/" + dir)
|
||||||
|
for package in InstallShardDataFiles:
|
||||||
|
dstDir = package[0]
|
||||||
|
mkPath(log, ShardInstallDirectory + "/" + dstDir)
|
||||||
|
printLog(log, "SHARD PACKAGE " + dstDir)
|
||||||
|
copyFileListNoTreeIfNeeded(log, InstallDirectory, ShardInstallDirectory + "/" + dstDir, package[1])
|
||||||
|
for multiDir in InstallShardDataMultiDirectories:
|
||||||
|
dstDir = multiDir[0]
|
||||||
|
mkPath(log, ShardInstallDirectory + "/" + dstDir)
|
||||||
|
printLog(log, "SHARD PACKAGE " + dstDir)
|
||||||
|
for srcDir in multiDir[1]:
|
||||||
|
printLog(log, "FROM " + srcDir)
|
||||||
|
mkPath(log, InstallDirectory + "/" + srcDir)
|
||||||
|
mkPath(log, ShardInstallDirectory + "/" + dstDir + "/" + srcDir)
|
||||||
|
copyFilesNoTreeIfNeeded(log, InstallDirectory + "/" + srcDir, ShardInstallDirectory + "/" + dstDir + "/" + srcDir)
|
||||||
|
for multiDir in InstallShardDataPrimitivesDirectories:
|
||||||
|
dstDir = multiDir[0]
|
||||||
|
mkPath(log, ShardInstallDirectory + "/" + dstDir)
|
||||||
|
printLog(log, "SHARD PACKAGE " + dstDir)
|
||||||
|
for srcDir in multiDir[1]:
|
||||||
|
printLog(log, "FROM PRIMITIVES " + srcDir)
|
||||||
|
mkPath(log, PrimitivesDirectory + "/" + srcDir)
|
||||||
|
mkPath(log, ShardInstallDirectory + "/" + dstDir + "/" + srcDir)
|
||||||
|
copyFilesNoTreeIfNeeded(log, PrimitivesDirectory + "/" + srcDir, ShardInstallDirectory + "/" + dstDir + "/" + srcDir)
|
||||||
|
for execDir in InstallShardDataExecutables:
|
||||||
|
dstDir = execDir[0]
|
||||||
|
mkPath(log, LinuxServiceExecutableDirectory)
|
||||||
|
mkPath(log, PatchmanCfgDefaultDirectory)
|
||||||
|
mkPath(log, InstallDirectory)
|
||||||
|
mkPath(log, ShardInstallDirectory + "/" + dstDir)
|
||||||
|
printLog(log, "SHARD PACKAGE " + dstDir)
|
||||||
|
copyFileIfNeeded(log, LinuxServiceExecutableDirectory + "/" + execDir[1][1], ShardInstallDirectory + "/" + dstDir + "/" + execDir[1][0])
|
||||||
|
copyFileListNoTreeIfNeeded(log, PatchmanCfgDefaultDirectory, ShardInstallDirectory + "/" + dstDir, execDir[2])
|
||||||
|
copyFileListNoTreeIfNeeded(log, InstallDirectory, ShardInstallDirectory + "/" + dstDir, execDir[3])
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
if os.path.isfile("b2_shard_data.log"):
|
||||||
|
os.remove("b2_shard_data.log")
|
||||||
|
shutil.copy("log.log", time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time())) + "_shard_data.log")
|
||||||
|
shutil.move("log.log", "b2_shard_data.log")
|
114
code/nel/tools/build_gamedata_linux/c1_shard_patch.py
Executable file
114
code/nel/tools/build_gamedata_linux/c1_shard_patch.py
Executable file
|
@ -0,0 +1,114 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file c1_shard_patch.py
|
||||||
|
# \brief Create a new patch for the patchman bridge
|
||||||
|
# \date 2014-02-20 00:27GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Create a new patch for the patchman bridge
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://www.ryzomcore.org/>
|
||||||
|
# Copyright (C) 2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util, tarfile, argparse
|
||||||
|
sys.path.append("configuration")
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(description='Ryzom Core - Build Gamedata - Shard Patch')
|
||||||
|
parser.add_argument('--admininstall', '-ai', action='store_true')
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from tools import *
|
||||||
|
|
||||||
|
sys.path.append(WorkspaceDirectory)
|
||||||
|
from projects import *
|
||||||
|
|
||||||
|
# Log error
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Create a new patch for the patchman bridge")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# List the directories that will be used
|
||||||
|
archiveDirectories = [ ]
|
||||||
|
for dir in InstallShardDataDirectories:
|
||||||
|
if not dir in archiveDirectories:
|
||||||
|
archiveDirectories += [ dir ]
|
||||||
|
for package in InstallShardDataFiles:
|
||||||
|
dstDir = package[0]
|
||||||
|
if not dstDir in archiveDirectories:
|
||||||
|
archiveDirectories += [ dstDir ]
|
||||||
|
for multiDir in InstallShardDataMultiDirectories:
|
||||||
|
dstDir = multiDir[0]
|
||||||
|
if not dstDir in archiveDirectories:
|
||||||
|
archiveDirectories += [ dstDir ]
|
||||||
|
for multiDir in InstallShardDataPrimitivesDirectories:
|
||||||
|
dstDir = multiDir[0]
|
||||||
|
if not dstDir in archiveDirectories:
|
||||||
|
archiveDirectories += [ dstDir ]
|
||||||
|
for execDir in InstallShardDataExecutables:
|
||||||
|
dstDir = execDir[0]
|
||||||
|
if not dstDir in archiveDirectories:
|
||||||
|
archiveDirectories += [ dstDir ]
|
||||||
|
|
||||||
|
printLog(log, ">>> Archive new admin_install.tgz <<<")
|
||||||
|
mkPath(log, PatchmanBridgeServerDirectory)
|
||||||
|
adminInstallTgz = PatchmanBridgeServerDirectory + "/admin_install.tgz"
|
||||||
|
patchmanExecutable = LinuxServiceExecutableDirectory + "/ryzom_patchman_service"
|
||||||
|
if needUpdateDirNoSubdirFile(log, PatchmanCfgAdminDirectory + "/bin", adminInstallTgz) or needUpdateDirNoSubdirFile(log, PatchmanCfgAdminDirectory + "/patchman", adminInstallTgz) or needUpdate(log, patchmanExecutable, adminInstallTgz):
|
||||||
|
printLog(log, "WRITE " + adminInstallTgz)
|
||||||
|
if os.path.isfile(adminInstallTgz):
|
||||||
|
os.remove(adminInstallTgz)
|
||||||
|
tar = tarfile.open(adminInstallTgz, "w:gz")
|
||||||
|
tar.add(PatchmanCfgAdminDirectory + "/bin", arcname = "bin")
|
||||||
|
tar.add(PatchmanCfgAdminDirectory + "/patchman", arcname = "patchman")
|
||||||
|
tar.add(patchmanExecutable, arcname = "patchman/ryzom_patchman_service")
|
||||||
|
tar.close()
|
||||||
|
else:
|
||||||
|
printLog(log, "SKIP " + adminInstallTgz)
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
if not args.admininstall:
|
||||||
|
printLog(log, ">>> Create new version <<<")
|
||||||
|
newVersion = 1
|
||||||
|
vstr = str(newVersion).zfill(6)
|
||||||
|
vpath = PatchmanBridgeServerDirectory + "/" + vstr
|
||||||
|
while os.path.exists(vpath):
|
||||||
|
newVersion = newVersion + 1
|
||||||
|
vstr = str(newVersion).zfill(6)
|
||||||
|
vpath = PatchmanBridgeServerDirectory + "/" + vstr
|
||||||
|
mkPath(log, vpath)
|
||||||
|
for dir in archiveDirectories:
|
||||||
|
mkPath(log, ShardInstallDirectory + "/" + dir)
|
||||||
|
tgzPath = vpath + "/" + dir + ".tgz"
|
||||||
|
printLog(log, "WRITE " + tgzPath)
|
||||||
|
tar = tarfile.open(tgzPath, "w:gz")
|
||||||
|
tar.add(ShardInstallDirectory + "/" + dir, arcname = dir)
|
||||||
|
tar.close()
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
if os.path.isfile("c1_shard_patch.log"):
|
||||||
|
os.remove("c1_shard_patch.log")
|
||||||
|
shutil.copy("log.log", time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time())) + "_shard_patch.log")
|
||||||
|
shutil.move("log.log", "c1_shard_patch.log")
|
11
code/nel/tools/build_gamedata_linux/characters_dev.bat
Normal file
11
code/nel/tools/build_gamedata_linux/characters_dev.bat
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
title Ryzom Core: 1_export.py (CHARACTERS)
|
||||||
|
1_export.py -ipj common/characters common/characters_maps_hr
|
||||||
|
title Ryzom Core: 2_build.py (CHARACTERS)
|
||||||
|
2_build.py -ipj common/characters common/characters_maps_hr
|
||||||
|
title Ryzom Core: 3_install.py (CHARACTERS)
|
||||||
|
3_install.py -ipj common/characters common/characters_maps_hr
|
||||||
|
title Ryzom Core: b1_client_dev.py (CHARACTERS)
|
||||||
|
b1_client_dev.py
|
||||||
|
title Ryzom Core: b2_shard_data.py (CHARACTERS)
|
||||||
|
b2_shard_data.py
|
||||||
|
title Ryzom Core: Ready (CHARACTERS)
|
|
@ -0,0 +1,86 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file site.py
|
||||||
|
# \brief Site configuration
|
||||||
|
# \date 2017-01-19-23-06-GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Site configuration.
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
# *** SITE INSTALLATION ***
|
||||||
|
|
||||||
|
# Use '/' in path name, not ''
|
||||||
|
# Don't put '/' at the end of a directory name
|
||||||
|
|
||||||
|
|
||||||
|
# Quality option for this site (1 for BEST, 0 for DRAFT)
|
||||||
|
BuildQuality = 1
|
||||||
|
|
||||||
|
ToolDirectories = ['/Volumes/SIELA/Khaganat/khaganat/code/build_tools/bin', '/Volumes/SIELA/Khaganat/external/bin']
|
||||||
|
ToolSuffix = ""
|
||||||
|
|
||||||
|
# Build script directory
|
||||||
|
ScriptDirectory = "/Volumes/SIELA/Khaganat/khaganat/code/nel/tools/build_gamedata_linux"
|
||||||
|
WorkspaceDirectory = "/Volumes/SIELA/Khaganat/khanat-data/workspace"
|
||||||
|
|
||||||
|
# Data build directories
|
||||||
|
DatabaseDirectory = "/Volumes/SIELA/Khaganat/khanat-assets/database"
|
||||||
|
ExportBuildDirectory = "/Volumes/SIELA/Khaganat/khanat-build/export"
|
||||||
|
|
||||||
|
# Install directories
|
||||||
|
InstallDirectory = "/Volumes/SIELA/Khaganat/khanat-build/install"
|
||||||
|
ClientDevDirectory = "/Volumes/SIELA/Khaganat/khanat-build/client_dev"
|
||||||
|
ClientPatchDirectory = "/Volumes/SIELA/Khaganat/khanat-build/client_patch"
|
||||||
|
ClientInstallDirectory = "/Volumes/SIELA/Khaganat/khanat-build/client_install"
|
||||||
|
ShardInstallDirectory = "/Volumes/SIELA/Khaganat/khanat-build/shard"
|
||||||
|
WorldEditInstallDirectory = "/Volumes/SIELA/Khaganat/khanat-build/worldedit"
|
||||||
|
|
||||||
|
# Utility directories
|
||||||
|
WorldEditorFilesDirectory = "/Volumes/SIELA/Khaganat/khaganat/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files"
|
||||||
|
|
||||||
|
# Leveldesign directories
|
||||||
|
LeveldesignDirectory = "/Volumes/SIELA/Khaganat/khanat-data/leveldesign"
|
||||||
|
LeveldesignDfnDirectory = "/Volumes/SIELA/Khaganat/khanat-data/leveldesign/DFN"
|
||||||
|
LeveldesignWorldDirectory = "/Volumes/SIELA/Khaganat/khanat-data/leveldesign/world"
|
||||||
|
PrimitivesDirectory = "/Volumes/SIELA/Khaganat/khanat-data/primitives"
|
||||||
|
LeveldesignDataCommonDirectory = "/Volumes/SIELA/Khaganat/khanat-data/common"
|
||||||
|
LeveldesignDataShardDirectory = "/Volumes/SIELA/Khaganat/khanat-data/shard"
|
||||||
|
TranslationDirectory = "/Volumes/SIELA/Khaganat/khanat-data/translation"
|
||||||
|
|
||||||
|
# Misc data directories
|
||||||
|
GamedevDirectory = "/Volumes/SIELA/Khaganat/khaganat/code/ryzom/client/data/gamedev"
|
||||||
|
DataCommonDirectory = "/Volumes/SIELA/Khaganat/khaganat/code/ryzom/common/data_common"
|
||||||
|
DataShardDirectory = "/Volumes/SIELA/Khaganat/khaganat/code/ryzom/server/data_shard"
|
||||||
|
WindowsExeDllCfgDirectories = ['C:/Program Files (x86)/Microsoft Visual Studio 9.0/VC/redist/x86', 'D:/libraries/external/bin', 'R:/build/dev/bin/Release', 'R:/code/ryzom/client', 'R:/code/nel/lib', 'R:/code/ryzom/bin', 'R:/code/ryzom/tools/client/client_config/bin']
|
||||||
|
LinuxServiceExecutableDirectory = "/Volumes/SIELA/Khaganat/khaganat/code/build_linux_server/bin"
|
||||||
|
LinuxClientExecutableDirectory = "/Volumes/SIELA/Khaganat/khaganat/code/build_linux_client/bin"
|
||||||
|
PatchmanCfgAdminDirectory = "/Volumes/SIELA/Khaganat/khaganat/code/ryzom/server/patchman_cfg/admin_install"
|
||||||
|
PatchmanCfgDefaultDirectory = "/Volumes/SIELA/Khaganat/khaganat/code/ryzom/server/patchman_cfg/default"
|
||||||
|
PatchmanBridgeServerDirectory = "/Volumes/SIELA/Khaganat/khanat-build/bridge_server"
|
||||||
|
|
||||||
|
# 3dsMax directives
|
||||||
|
MaxAvailable = 0
|
||||||
|
MaxDirectory = "C:/Program Files (x86)/Autodesk/3ds Max 2010"
|
||||||
|
MaxUserDirectory = "C:/Users/Kaetemi/AppData/Local/Autodesk/3dsMax/2010 - 32bit/enu"
|
||||||
|
MaxExecutable = "3dsmax.exe"
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
587
code/nel/tools/build_gamedata_linux/configuration/scripts.py
Executable file
587
code/nel/tools/build_gamedata_linux/configuration/scripts.py
Executable file
|
@ -0,0 +1,587 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file export.py
|
||||||
|
# \brief Useful scripts
|
||||||
|
# \date 2009-02-18 09:22GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Useful scripts
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
|
||||||
|
ActiveProjectDirectory = os.getenv("NELBUILDACTIVEPROJECT", "configuration/project")
|
||||||
|
sys.path.append(ActiveProjectDirectory)
|
||||||
|
|
||||||
|
def printLog(log, text):
|
||||||
|
log.write(text + "\n")
|
||||||
|
print(text)
|
||||||
|
|
||||||
|
def mkPath(log, path):
|
||||||
|
printLog(log, "DIR " + path)
|
||||||
|
distutils.dir_util.mkpath(path)
|
||||||
|
|
||||||
|
def needUpdate(log, source, dest):
|
||||||
|
if (os.path.isfile(source)):
|
||||||
|
if (os.path.isfile(dest)):
|
||||||
|
if (os.stat(source).st_mtime > os.stat(dest).st_mtime):
|
||||||
|
return 1
|
||||||
|
else:
|
||||||
|
return 0
|
||||||
|
return 1
|
||||||
|
printLog(log, "MISSING " + source)
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def needUpdateRemoveDest(log, source, dest):
|
||||||
|
if (os.path.isfile(source)):
|
||||||
|
if (os.path.isfile(dest)):
|
||||||
|
if (os.stat(source).st_mtime > os.stat(dest).st_mtime):
|
||||||
|
os.remove(dest)
|
||||||
|
return 1
|
||||||
|
else:
|
||||||
|
return 0
|
||||||
|
return 1
|
||||||
|
printLog(log, "MISSING " + source)
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def needUpdateLogRemoveDest(log, source, dest):
|
||||||
|
if (os.path.isfile(source)):
|
||||||
|
if (os.path.isfile(dest)):
|
||||||
|
if (os.stat(source).st_mtime > os.stat(dest).st_mtime):
|
||||||
|
os.remove(dest)
|
||||||
|
printLog(log, source + " -> " + dest)
|
||||||
|
return 1
|
||||||
|
else:
|
||||||
|
printLog(log, "SKIP " + dest)
|
||||||
|
return 0
|
||||||
|
printLog(log, source + " -> " + dest)
|
||||||
|
return 1
|
||||||
|
printLog(log, "MISSING " + source)
|
||||||
|
printLog(log, "SKIP " + dest)
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def copyFileList(log, dir_source, dir_target, files):
|
||||||
|
for fileName in files:
|
||||||
|
if fileName != ".svn" and fileName != ".." and fileName != "." and fileName != "*.*":
|
||||||
|
if (os.path.isfile(dir_source + "/" + fileName)):
|
||||||
|
if needUpdateLogRemoveDest(log, dir_source + "/" + fileName, dir_target + "/" + fileName):
|
||||||
|
shutil.copy(dir_source + "/" + fileName, dir_target + "/" + fileName)
|
||||||
|
|
||||||
|
def copyFileListLogless(log, dir_source, dir_target, files):
|
||||||
|
for fileName in files:
|
||||||
|
if fileName != ".svn" and fileName != ".." and fileName != "." and fileName != "*.*":
|
||||||
|
if (os.path.isfile(dir_source + "/" + fileName)):
|
||||||
|
if needUpdateRemoveDest(log, dir_source + "/" + fileName, dir_target + "/" + fileName):
|
||||||
|
shutil.copy(dir_source + "/" + fileName, dir_target + "/" + fileName)
|
||||||
|
|
||||||
|
def copyFileListNoTree(log, dir_source, dir_target, files):
|
||||||
|
for fileName in files:
|
||||||
|
if fileName != ".svn" and fileName != ".." and fileName != "." and fileName != "*.*":
|
||||||
|
if (os.path.isfile(dir_source + "/" + fileName)):
|
||||||
|
printLog(log, dir_source + "/" + fileName + " -> " + dir_target + "/" + os.path.basename(fileName))
|
||||||
|
shutil.copy(dir_source + "/" + fileName, dir_target + "/" + os.path.basename(fileName))
|
||||||
|
|
||||||
|
def copyFileListNoTreeIfNeeded(log, dir_source, dir_target, files):
|
||||||
|
for fileName in files:
|
||||||
|
if fileName != ".svn" and fileName != ".." and fileName != "." and fileName != "*.*":
|
||||||
|
if (os.path.isfile(dir_source + "/" + fileName)):
|
||||||
|
srcFile = dir_source + "/" + fileName
|
||||||
|
destFile = dir_target + "/" + os.path.basename(fileName)
|
||||||
|
if needUpdateLogRemoveDest(log, srcFile, destFile):
|
||||||
|
shutil.copy(srcFile, destFile)
|
||||||
|
|
||||||
|
def removeFilesRecursive(log, dir_files):
|
||||||
|
files = os.listdir(dir_files)
|
||||||
|
for fileName in files:
|
||||||
|
if (fileName != ".svn" and fileName != ".." and fileName != "." and fileName != "*.*"):
|
||||||
|
if os.path.isdir(dir_files + "/" + fileName):
|
||||||
|
removeFilesRecursive(log, dir_files + "/" + fileName)
|
||||||
|
else:
|
||||||
|
printLog(log, "RM " + dir_files + "/" + fileName)
|
||||||
|
os.remove(dir_files + "/" + fileName)
|
||||||
|
|
||||||
|
def removeFilesDirsRecursive(log, dir_files):
|
||||||
|
files = os.listdir(dir_files)
|
||||||
|
for fileName in files:
|
||||||
|
if (fileName != ".svn" and fileName != ".." and fileName != "." and fileName != "*.*"):
|
||||||
|
if os.path.isdir(dir_files + "/" + fileName):
|
||||||
|
removeFilesRecursive(log, dir_files + "/" + fileName)
|
||||||
|
else:
|
||||||
|
printLog(log, "RM " + dir_files + "/" + fileName)
|
||||||
|
os.remove(dir_files + "/" + fileName)
|
||||||
|
printLog(log, "RMDIR " + dir_files)
|
||||||
|
os.rmdir(dir_files)
|
||||||
|
|
||||||
|
def removeFilesRecursiveExt(log, dir_files, file_ext):
|
||||||
|
files = os.listdir(dir_files)
|
||||||
|
len_file_ext = len(file_ext)
|
||||||
|
for fileName in files:
|
||||||
|
if (fileName != ".svn" and fileName != ".." and fileName != "." and fileName != "*.*"):
|
||||||
|
if os.path.isdir(dir_files + "/" + fileName):
|
||||||
|
removeFilesRecursiveExt(log, dir_files + "/" + fileName, file_ext)
|
||||||
|
elif (fileName[-len_file_ext:].lower() == file_ext.lower()):
|
||||||
|
printLog(log, "RM " + dir_files + "/" + fileName)
|
||||||
|
os.remove(dir_files + "/" + fileName)
|
||||||
|
|
||||||
|
def copyFilesRecursive(log, dir_source, dir_target):
|
||||||
|
files = os.listdir(dir_source)
|
||||||
|
mkPath(log, dir_target)
|
||||||
|
for fileName in files:
|
||||||
|
if (fileName != ".svn" and fileName != ".." and fileName != "." and fileName != "*.*"):
|
||||||
|
if os.path.isdir(dir_source + "/" + fileName):
|
||||||
|
copyFilesRecursive(log, dir_source + "/" + fileName, dir_target + "/" + fileName)
|
||||||
|
else:
|
||||||
|
printLog(log, dir_source + "/" + fileName + " -> " + dir_target + "/" + fileName)
|
||||||
|
shutil.copy(dir_source + "/" + fileName, dir_target + "/" + fileName)
|
||||||
|
|
||||||
|
def copyFiles(log, dir_source, dir_target):
|
||||||
|
copyFileList(log, dir_source, dir_target, os.listdir(dir_source))
|
||||||
|
|
||||||
|
def copyFilesLogless(log, dir_source, dir_target):
|
||||||
|
copyFileListLogless(log, dir_source, dir_target, os.listdir(dir_source))
|
||||||
|
|
||||||
|
def copyFilesExt(log, dir_source, dir_target, file_ext):
|
||||||
|
files = os.listdir(dir_source)
|
||||||
|
len_file_ext = len(file_ext)
|
||||||
|
for fileName in files:
|
||||||
|
if (fileName != ".svn" and fileName != ".." and fileName != "." and fileName != "*.*") and (fileName[-len_file_ext:].lower() == file_ext.lower()):
|
||||||
|
if (os.path.isfile(dir_source + "/" + fileName)):
|
||||||
|
printLog(log, dir_source + "/" + fileName + " -> " + dir_target + "/" + fileName)
|
||||||
|
shutil.copy(dir_source + "/" + fileName, dir_target + "/" + fileName)
|
||||||
|
|
||||||
|
def copyFilesRenamePrefixExt(log, dir_source, dir_target, old_prefix, new_prefix, file_ext):
|
||||||
|
files = os.listdir(dir_source)
|
||||||
|
len_file_ext = len(file_ext)
|
||||||
|
len_prefix = len(old_prefix)
|
||||||
|
for fileName in files:
|
||||||
|
if (fileName != ".svn" and fileName != ".." and fileName != "." and fileName != "*.*") and (fileName[-len_file_ext:].lower() == file_ext.lower()) and ((fileName[:len_prefix].lower() == old_prefix.lower())):
|
||||||
|
if (os.path.isfile(dir_source + "/" + fileName)):
|
||||||
|
printLog(log, dir_source + "/" + fileName + " -> " + dir_target + "/" + new_prefix + fileName[-(len(fileName) - len_prefix):])
|
||||||
|
shutil.copy(dir_source + "/" + fileName, dir_target + "/" + new_prefix + fileName[-(len(fileName) - len_prefix):])
|
||||||
|
|
||||||
|
def copyFilesExtNoSubdir(log, dir_source, dir_target, file_ext):
|
||||||
|
files = findFilesNoSubdir(log, dir_source, file_ext)
|
||||||
|
copyFileListNoTree(log, dir_source, dir_target, files)
|
||||||
|
|
||||||
|
def copyFilesExtNoTree(log, dir_source, dir_target, file_ext):
|
||||||
|
files = findFiles(log, dir_source, "", file_ext)
|
||||||
|
copyFileListNoTree(log, dir_source, dir_target, files)
|
||||||
|
|
||||||
|
def copyFilesExtNoTreeIfNeeded(log, dir_source, dir_target, file_ext):
|
||||||
|
files = findFiles(log, dir_source, "", file_ext)
|
||||||
|
copyFileListNoTreeIfNeeded(log, dir_source, dir_target, files)
|
||||||
|
|
||||||
|
def copyFilesExtNoSubdirIfNeeded(log, dir_source, dir_target, file_ext):
|
||||||
|
files = findFilesNoSubdir(log, dir_source, file_ext)
|
||||||
|
copyFileListNoTreeIfNeeded(log, dir_source, dir_target, files)
|
||||||
|
|
||||||
|
def copyFilesNoTreeIfNeeded(log, dir_source, dir_target):
|
||||||
|
copyFileListNoTreeIfNeeded(log, dir_source, dir_target, os.listdir(dir_source))
|
||||||
|
|
||||||
|
def copyFilesRecursiveNoTreeIfNeeded(log, dir_source, dir_target):
|
||||||
|
files = findFilesRecursive(log, dir_source, "")
|
||||||
|
copyFileListNoTreeIfNeeded(log, dir_source, dir_target, files)
|
||||||
|
|
||||||
|
def copyFileListExtReplaceNoTreeIfNeeded(log, dir_source, dir_target, files, file_ext, target_ext):
|
||||||
|
for fileName in files:
|
||||||
|
if fileName != ".svn" and fileName != ".." and fileName != "." and fileName != "*.*":
|
||||||
|
if (os.path.isfile(dir_source + "/" + fileName)):
|
||||||
|
srcFile = dir_source + "/" + fileName
|
||||||
|
destFile = dir_target + "/" + os.path.basename(fileName)[0:-len(file_ext)] + target_ext
|
||||||
|
if needUpdateLogRemoveDest(log, srcFile, destFile):
|
||||||
|
shutil.copy(srcFile, destFile)
|
||||||
|
|
||||||
|
def copyFilesExtReplaceNoTreeIfNeeded(log, dir_source, dir_target, file_ext, target_ext):
|
||||||
|
files = findFiles(log, dir_source, "", file_ext)
|
||||||
|
copyFileListExtReplaceNoTreeIfNeeded(log, dir_source, dir_target, files, file_ext, target_ext)
|
||||||
|
|
||||||
|
def copyFileIfNeeded(log, srcFile, destFile):
|
||||||
|
if needUpdateLogRemoveDest(log, srcFile, destFile):
|
||||||
|
shutil.copy(srcFile, destFile)
|
||||||
|
|
||||||
|
def moveFileListNoTree(log, dir_source, dir_target, files):
|
||||||
|
for fileName in files:
|
||||||
|
if fileName != ".svn" and fileName != ".." and fileName != "." and fileName != "*.*":
|
||||||
|
if (os.path.isfile(dir_source + "/" + fileName)):
|
||||||
|
printLog(log, "MOVE " + dir_source + "/" + fileName + " -> " + dir_target + "/" + os.path.basename(fileName))
|
||||||
|
shutil.move(dir_source + "/" + fileName, dir_target + "/" + os.path.basename(fileName))
|
||||||
|
|
||||||
|
def moveFilesExtNoTree(log, dir_source, dir_target, file_ext):
|
||||||
|
files = findFiles(log, dir_source, "", file_ext)
|
||||||
|
moveFileListNoTree(log, dir_source, dir_target, files)
|
||||||
|
|
||||||
|
def moveFilesNoSubdir(log, dir_source, dir_target):
|
||||||
|
files = os.listdir(dir_source)
|
||||||
|
moveFileListNoTree(log, dir_source, dir_target, files)
|
||||||
|
|
||||||
|
def moveDir(log, dir_source, dir_target):
|
||||||
|
printLog(log, "MOVE " + dir_source + " -> " + dir_target)
|
||||||
|
shutil.move(dir_source, dir_target)
|
||||||
|
|
||||||
|
def findFilesRecursive(log, dir_where, dir_sub):
|
||||||
|
result = [ ]
|
||||||
|
files = os.listdir(dir_where + "/" + dir_sub)
|
||||||
|
for fileName in files:
|
||||||
|
if fileName != ".svn" and fileName != ".." and fileName != "." and fileName != "*.*":
|
||||||
|
filePath = dir_sub + fileName
|
||||||
|
fileFull = dir_where + "/" + dir_sub + fileName
|
||||||
|
if os.path.isfile(fileFull):
|
||||||
|
result += [ filePath ]
|
||||||
|
elif os.path.isdir(fileFull):
|
||||||
|
result += findFilesRecursive(log, dir_where, filePath + "/")
|
||||||
|
else:
|
||||||
|
printLog(log, "findFilesRecursive: file not dir or file?!" + filePath)
|
||||||
|
return result
|
||||||
|
|
||||||
|
def findFiles(log, dir_where, dir_sub, file_ext):
|
||||||
|
result = [ ]
|
||||||
|
files = os.listdir(dir_where + "/" + dir_sub)
|
||||||
|
len_file_ext = len(file_ext)
|
||||||
|
for fileName in files:
|
||||||
|
if fileName != ".svn" and fileName != ".." and fileName != "." and fileName != "*.*":
|
||||||
|
filePath = dir_sub + fileName
|
||||||
|
fileFull = dir_where + "/" + dir_sub + fileName
|
||||||
|
if os.path.isfile(fileFull):
|
||||||
|
if fileName[-len_file_ext:].lower() == file_ext.lower():
|
||||||
|
result += [ filePath ]
|
||||||
|
elif os.path.isdir(fileFull):
|
||||||
|
result += findFiles(log, dir_where, filePath + "/", file_ext)
|
||||||
|
else:
|
||||||
|
printLog(log, "findFiles: file not dir or file?!" + filePath)
|
||||||
|
return result
|
||||||
|
|
||||||
|
def isLegalFileName(fileName):
|
||||||
|
return fileName != ".svn" and fileName != ".." and fileName != "." and fileName != "*.*"
|
||||||
|
|
||||||
|
def findFilesNoSubdir(log, dir_where, file_ext):
|
||||||
|
result = [ ]
|
||||||
|
files = os.listdir(dir_where)
|
||||||
|
len_file_ext = len(file_ext)
|
||||||
|
for fileName in files:
|
||||||
|
if fileName != ".svn" and fileName != ".." and fileName != "." and fileName != "*.*":
|
||||||
|
fileFull = dir_where + "/" + fileName
|
||||||
|
if os.path.isfile(fileFull):
|
||||||
|
if fileName[-len_file_ext:].lower() == file_ext.lower():
|
||||||
|
result += [ fileName ]
|
||||||
|
elif not os.path.isdir(fileFull):
|
||||||
|
printLog(log, "findFilesNoSubdir: file not dir or file?!" + fileFull)
|
||||||
|
return result
|
||||||
|
|
||||||
|
def findFilesNoSubdirFiltered(log, dir_where, file_ext, filter):
|
||||||
|
if len(filter) == 0:
|
||||||
|
return findFilesNoSubdir(log, dir_where, file_ext)
|
||||||
|
result = [ ]
|
||||||
|
files = os.listdir(dir_where)
|
||||||
|
len_file_ext = len(file_ext)
|
||||||
|
for fileName in files:
|
||||||
|
if fileName != ".svn" and fileName != ".." and fileName != "." and fileName != "*.*":
|
||||||
|
fileFull = dir_where + "/" + fileName
|
||||||
|
if os.path.isfile(fileFull):
|
||||||
|
if fileName[-len_file_ext:].lower() == file_ext.lower():
|
||||||
|
fileNameLower = fileName.lower()
|
||||||
|
for filterWord in filter:
|
||||||
|
if filterWord in fileNameLower:
|
||||||
|
result += [ fileName ]
|
||||||
|
break
|
||||||
|
elif not os.path.isdir(fileFull):
|
||||||
|
printLog(log, "findFilesNoSubdir: file not dir or file?!" + fileFull)
|
||||||
|
return result
|
||||||
|
|
||||||
|
def findFile(log, dir_where, file_name):
|
||||||
|
files = os.listdir(dir_where)
|
||||||
|
for fileName in files:
|
||||||
|
if fileName != ".svn" and fileName != ".." and fileName != "." and fileName != "*.*":
|
||||||
|
filePath = dir_where + "/" + fileName
|
||||||
|
if os.path.isfile(filePath):
|
||||||
|
if fileName == file_name:
|
||||||
|
return filePath
|
||||||
|
elif os.path.isdir(filePath):
|
||||||
|
result = findFile(log, filePath, file_name)
|
||||||
|
if result != "":
|
||||||
|
return result
|
||||||
|
else:
|
||||||
|
printLog(log, "findFile: file not dir or file?! " + filePath)
|
||||||
|
return ""
|
||||||
|
|
||||||
|
def needUpdateDirByLowercaseTagLog(log, dir_source, ext_source, dir_dest, ext_dest):
|
||||||
|
updateCount = 0
|
||||||
|
skipCount = 0
|
||||||
|
lenSrcExt = len(ext_source)
|
||||||
|
sourceFiles = findFilesNoSubdir(log, dir_source, ext_source)
|
||||||
|
destFiles = findFilesNoSubdir(log, dir_dest, ext_dest)
|
||||||
|
for file in sourceFiles:
|
||||||
|
sourceFile = dir_source + "/" + file
|
||||||
|
tagFile = dir_dest + "/" + file[0:-lenSrcExt].lower() + ext_dest
|
||||||
|
if os.path.isfile(tagFile):
|
||||||
|
sourceTime = os.stat(sourceFile).st_mtime
|
||||||
|
tagTime = os.stat(tagFile).st_mtime
|
||||||
|
if (sourceTime > tagTime):
|
||||||
|
updateCount = updateCount + 1
|
||||||
|
else:
|
||||||
|
skipCount = skipCount + 1
|
||||||
|
else:
|
||||||
|
updateCount = updateCount + 1
|
||||||
|
if updateCount > 0:
|
||||||
|
printLog(log, "UPDATE " + str(updateCount) + " / " + str(len(sourceFiles)) + "; SKIP " + str(skipCount) + " / " + str(len(sourceFiles)) + "; DEST " + str(len(destFiles)))
|
||||||
|
return 1
|
||||||
|
else:
|
||||||
|
printLog(log, "SKIP " + str(skipCount) + " / " + str(len(sourceFiles)) + "; DEST " + str(len(destFiles)))
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def needUpdateDirByTagLogFiltered(log, dir_source, ext_source, dir_dest, ext_dest, filter):
|
||||||
|
updateCount = 0
|
||||||
|
skipCount = 0
|
||||||
|
lenSrcExt = len(ext_source)
|
||||||
|
sourceFiles = findFilesNoSubdirFiltered(log, dir_source, ext_source, filter)
|
||||||
|
destFiles = findFilesNoSubdir(log, dir_dest, ext_dest)
|
||||||
|
for file in sourceFiles:
|
||||||
|
sourceFile = dir_source + "/" + file
|
||||||
|
tagFile = dir_dest + "/" + file[0:-lenSrcExt] + ext_dest
|
||||||
|
if os.path.isfile(tagFile):
|
||||||
|
sourceTime = os.stat(sourceFile).st_mtime
|
||||||
|
tagTime = os.stat(tagFile).st_mtime
|
||||||
|
if (sourceTime > tagTime):
|
||||||
|
updateCount = updateCount + 1
|
||||||
|
else:
|
||||||
|
skipCount = skipCount + 1
|
||||||
|
else:
|
||||||
|
updateCount = updateCount + 1
|
||||||
|
if updateCount > 0:
|
||||||
|
printLog(log, "UPDATE " + str(updateCount) + " / " + str(len(sourceFiles)) + "; SKIP " + str(skipCount) + " / " + str(len(sourceFiles)) + "; DEST " + str(len(destFiles)))
|
||||||
|
return 1
|
||||||
|
else:
|
||||||
|
printLog(log, "SKIP " + str(skipCount) + " / " + str(len(sourceFiles)) + "; DEST " + str(len(destFiles)))
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def needUpdateDirByTagLog(log, dir_source, ext_source, dir_dest, ext_dest):
|
||||||
|
updateCount = 0
|
||||||
|
skipCount = 0
|
||||||
|
lenSrcExt = len(ext_source)
|
||||||
|
sourceFiles = findFilesNoSubdir(log, dir_source, ext_source)
|
||||||
|
destFiles = findFilesNoSubdir(log, dir_dest, ext_dest)
|
||||||
|
for file in sourceFiles:
|
||||||
|
sourceFile = dir_source + "/" + file
|
||||||
|
tagFile = dir_dest + "/" + file[0:-lenSrcExt] + ext_dest
|
||||||
|
if os.path.isfile(tagFile):
|
||||||
|
sourceTime = os.stat(sourceFile).st_mtime
|
||||||
|
tagTime = os.stat(tagFile).st_mtime
|
||||||
|
if (sourceTime > tagTime):
|
||||||
|
updateCount = updateCount + 1
|
||||||
|
else:
|
||||||
|
skipCount = skipCount + 1
|
||||||
|
else:
|
||||||
|
updateCount = updateCount + 1
|
||||||
|
if updateCount > 0:
|
||||||
|
printLog(log, "UPDATE " + str(updateCount) + " / " + str(len(sourceFiles)) + "; SKIP " + str(skipCount) + " / " + str(len(sourceFiles)) + "; DEST " + str(len(destFiles)))
|
||||||
|
return 1
|
||||||
|
else:
|
||||||
|
printLog(log, "SKIP " + str(skipCount) + " / " + str(len(sourceFiles)) + "; DEST " + str(len(destFiles)))
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def needUpdateDirNoSubdirFile(log, dir_source, file_dest):
|
||||||
|
if not os.path.isfile(file_dest):
|
||||||
|
return 1
|
||||||
|
destTime = os.stat(file_dest).st_mtime
|
||||||
|
sourceFiles = os.listdir(dir_source)
|
||||||
|
for file in sourceFiles:
|
||||||
|
filePath = dir_source + "/" + file
|
||||||
|
if os.path.isfile(filePath):
|
||||||
|
fileTime = os.stat(filePath).st_mtime
|
||||||
|
if fileTime > destTime:
|
||||||
|
return 1
|
||||||
|
else:
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def needUpdateFileDirNoSubdir(log, file_source, dir_dest):
|
||||||
|
if not os.path.isfile(file_source):
|
||||||
|
printLog(log, "WARNING MISSING " + file_source)
|
||||||
|
return 0
|
||||||
|
sourceTime = os.stat(file_source).st_mtime
|
||||||
|
destFiles = os.listdir(dir_dest)
|
||||||
|
for file in destFiles:
|
||||||
|
filePath = dir_dest + "/" + file
|
||||||
|
if os.path.isfile(filePath):
|
||||||
|
fileTime = os.stat(filePath).st_mtime
|
||||||
|
if sourceTime > fileTime:
|
||||||
|
return 1
|
||||||
|
else:
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def needUpdateDirNoSubdirMultiFile(log, dir_source, root_file, files_dest):
|
||||||
|
for file_dest in files_dest:
|
||||||
|
if needUpdateDirNoSubdirFile(log, dir_source, root_file + "/" + file_dest):
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def needUpdateDirNoSubdirMultiFileExt(log, dir_source, root_file, files_dest, file_ext):
|
||||||
|
for file_dest in files_dest:
|
||||||
|
if needUpdateDirNoSubdirFile(log, dir_source, root_file + "/" + file_dest + file_ext):
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def needUpdateMultiDirNoSubdirFile(log, root_dir, dirs_source, file_dest):
|
||||||
|
for dir_source in dirs_source:
|
||||||
|
if needUpdateDirNoSubdirFile(log, root_dir + "/" + dir_source, file_dest):
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def needUpdateMultiDirNoSubdirMultiFileExt(log, root_dir, dirs_source, root_file, files_dest, file_ext):
|
||||||
|
for file_dest in files_dest:
|
||||||
|
if needUpdateMultiDirNoSubdirFile(log, root_dir, dirs_source, root_file + "/" + file_dest + file_ext):
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def needUpdateMultiDirNoSubdir(log, root_dir, dirs_source, dir_dest):
|
||||||
|
for dir_source in dirs_source:
|
||||||
|
if needUpdateDirNoSubdir(log, root_dir + "/" + dir_source, dir_dest):
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def needUpdateDirNoSubdirExtFile(log, dir_source, dir_ext, file_dest):
|
||||||
|
if not os.path.isfile(file_dest):
|
||||||
|
return 1
|
||||||
|
destTime = os.stat(file_dest).st_mtime
|
||||||
|
sourceFiles = os.listdir(dir_source)
|
||||||
|
for file in sourceFiles:
|
||||||
|
if file.endswith(dir_ext):
|
||||||
|
filePath = dir_source + "/" + file
|
||||||
|
if os.path.isfile(filePath):
|
||||||
|
fileTime = os.stat(filePath).st_mtime
|
||||||
|
if fileTime > destTime:
|
||||||
|
return 1
|
||||||
|
else:
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def needUpdateDirNoSubdirExtMultiFileExt(log, dir_source, dir_ext, root_file, files_dest, file_ext):
|
||||||
|
for file_dest in files_dest:
|
||||||
|
if needUpdateDirNoSubdirExtFile(log, dir_source, dir_ext, root_file + "/" + file_dest + file_ext):
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def needUpdateDirNoSubdir(log, dir_source, dir_dest):
|
||||||
|
latestSourceFile = 0
|
||||||
|
oldestDestFile = 0
|
||||||
|
sourceFiles = os.listdir(dir_source)
|
||||||
|
destFiles = os.listdir(dir_dest)
|
||||||
|
for file in sourceFiles:
|
||||||
|
filePath = dir_source + "/" + file
|
||||||
|
if os.path.isfile(filePath):
|
||||||
|
fileTime = os.stat(filePath).st_mtime
|
||||||
|
if fileTime > latestSourceFile:
|
||||||
|
latestSourceFile = fileTime
|
||||||
|
for file in destFiles:
|
||||||
|
filePath = dir_dest + "/" + file
|
||||||
|
if os.path.isfile(filePath):
|
||||||
|
fileTime = os.stat(filePath).st_mtime
|
||||||
|
if oldestDestFile == 0 or fileTime < oldestDestFile:
|
||||||
|
oldestDestFile = fileTime
|
||||||
|
if latestSourceFile > oldestDestFile:
|
||||||
|
return 1
|
||||||
|
else:
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def needUpdateDirNoSubdirLogExt(log, dir_source, ext_source, dir_dest, ext_dest):
|
||||||
|
latestSourceFile = 0
|
||||||
|
latestDestFile = 0
|
||||||
|
sourceFiles = findFilesNoSubdir(log, dir_source, ext_source)
|
||||||
|
destFiles = findFilesNoSubdir(log, dir_dest, ext_dest)
|
||||||
|
for file in sourceFiles:
|
||||||
|
fileTime = os.stat(dir_source + "/" + file).st_mtime
|
||||||
|
if (fileTime > latestSourceFile):
|
||||||
|
latestSourceFile = fileTime
|
||||||
|
for file in destFiles:
|
||||||
|
fileTime = os.stat(dir_dest + "/" + file).st_mtime
|
||||||
|
if (fileTime > latestDestFile):
|
||||||
|
latestDestFile = fileTime
|
||||||
|
if latestSourceFile > latestDestFile or len(sourceFiles) > len(destFiles):
|
||||||
|
printLog(log, "UPDATE; Source: " + str(latestSourceFile) + ", " + str(len(sourceFiles)) + " files; Dest: " + str(latestDestFile) + ", " + str(len(destFiles)) + " files")
|
||||||
|
return 1
|
||||||
|
else:
|
||||||
|
printLog(log, "SKIP *")
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def needUpdateDirNoSubdirLogExtMultidir(log, all_dir_base, all_dir_source, dir_source, ext_source, dir_dest, ext_dest):
|
||||||
|
latestSourceFile = 0
|
||||||
|
latestDestFile = 0
|
||||||
|
sourceFilesAll = [ ]
|
||||||
|
for dir in all_dir_source:
|
||||||
|
sourceFilesAll += findFilesNoSubdir(log, all_dir_base + "/" + dir, ext_source)
|
||||||
|
sourceFiles = findFilesNoSubdir(log, dir_source, ext_source)
|
||||||
|
destFiles = findFilesNoSubdir(log, dir_dest, ext_dest)
|
||||||
|
for file in sourceFiles:
|
||||||
|
fileTime = os.stat(dir_source + "/" + file).st_mtime
|
||||||
|
if (fileTime > latestSourceFile):
|
||||||
|
latestSourceFile = fileTime
|
||||||
|
for file in destFiles:
|
||||||
|
fileTime = os.stat(dir_dest + "/" + file).st_mtime
|
||||||
|
if (fileTime > latestDestFile):
|
||||||
|
latestDestFile = fileTime
|
||||||
|
if latestSourceFile > latestDestFile or len(sourceFilesAll) > len(destFiles):
|
||||||
|
printLog(log, "UPDATE; Source: " + str(latestSourceFile) + ", " + str(len(sourceFilesAll)) + " files; Dest: " + str(latestDestFile) + ", " + str(len(destFiles)) + " files")
|
||||||
|
return 1
|
||||||
|
else:
|
||||||
|
printLog(log, "SKIP *")
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def findFileMultiDir(log, dirs_where, file_name):
|
||||||
|
try:
|
||||||
|
for dir in dirs_where:
|
||||||
|
file = findFile(log, dir, file_name)
|
||||||
|
if file != "":
|
||||||
|
return file
|
||||||
|
except Exception as e:
|
||||||
|
printLog(log, "EXCEPTION " + str(e))
|
||||||
|
printLog(log, "FILE NOT FOUND " + file_name)
|
||||||
|
return ""
|
||||||
|
|
||||||
|
def findTool(log, dirs_where, file_name, suffix):
|
||||||
|
try:
|
||||||
|
for dir in dirs_where:
|
||||||
|
tool = findFile(log, dir, file_name + suffix)
|
||||||
|
if tool != "":
|
||||||
|
printLog(log, "TOOL " + tool)
|
||||||
|
return tool
|
||||||
|
except Exception as e:
|
||||||
|
printLog(log, "EXCEPTION " + str(e))
|
||||||
|
printLog(log, "TOOL NOT FOUND " + file_name + suffix)
|
||||||
|
return ""
|
||||||
|
|
||||||
|
def findMax(log, dir, file):
|
||||||
|
tool = dir + "/" + file
|
||||||
|
if os.path.isfile(tool):
|
||||||
|
printLog(log, "3DSMAX " + tool)
|
||||||
|
return tool
|
||||||
|
printLog(log, "3DSMAX NOT FOUND " + file)
|
||||||
|
return ""
|
||||||
|
|
||||||
|
def toolLogFail(log, tool, suffix):
|
||||||
|
printLog(log, "FAIL " + tool + suffix + " is not found")
|
||||||
|
|
||||||
|
def askVar(log, name, default):
|
||||||
|
sys.stdout.write(name + " (" + default + "): ")
|
||||||
|
line = sys.stdin.readline()
|
||||||
|
linestrip = line.strip()
|
||||||
|
if linestrip == "--":
|
||||||
|
log.write(name + " (" + default + "): ''\n")
|
||||||
|
return ""
|
||||||
|
elif linestrip == "":
|
||||||
|
log.write(name + " (" + default + "): '" + default + "'\n")
|
||||||
|
return default
|
||||||
|
else:
|
||||||
|
log.write(name + " (" + default + "): '" + linestrip + "'\n")
|
||||||
|
return linestrip
|
95
code/nel/tools/build_gamedata_linux/configuration/tools.py
Executable file
95
code/nel/tools/build_gamedata_linux/configuration/tools.py
Executable file
|
@ -0,0 +1,95 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file process.py
|
||||||
|
# \brief Tools configuration
|
||||||
|
# \date 2009-03-10 11:33GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Tools configuration.
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
# *** PROCESS TIMEOUT ***
|
||||||
|
SkelExportTimeout = 600000
|
||||||
|
SwtExportTimeout = 600000
|
||||||
|
ShapeExportTimeout = 3600000
|
||||||
|
ZoneExportTimeout = 1800000
|
||||||
|
ZoneBuildDependTimeout = 1800000
|
||||||
|
ZoneBuildWeldTimeout = 60000
|
||||||
|
ZoneLightBuildTimeout = 600000
|
||||||
|
ZoneIgLightBuildTimeout = 600000
|
||||||
|
SmallbankBuildTimeout = 60000
|
||||||
|
FarbankBuildTimeout = 180000
|
||||||
|
AnimExportTimeout = 1800000
|
||||||
|
IgExportTimeout = 600000
|
||||||
|
CmbExportTimeout = 60000
|
||||||
|
RbankBuildTesselTimeout = 6000000
|
||||||
|
RbankBuildSmoothTimeout = 6000000
|
||||||
|
RbankBuildProclocalTimeout = 6000000
|
||||||
|
RbankBuildProcglobalTimeout = 18000000
|
||||||
|
RbankBuildIndoorTimeout = 18000000
|
||||||
|
# WmapBuildTimeout = 60000
|
||||||
|
LigoExportTimeout = 3600000
|
||||||
|
LigoBuildTimeout = 1800000
|
||||||
|
PacsPrimExportTimeout = 600000
|
||||||
|
|
||||||
|
MapsBuildTimeout = 60000 # 1min
|
||||||
|
MaxShapeExportTimeout = 600000 # 10min
|
||||||
|
|
||||||
|
# *** TOOLS CONFIGURATION ***
|
||||||
|
|
||||||
|
TgaToDdsTool = "tga2dds"
|
||||||
|
BuildInterfaceTool = "build_interface"
|
||||||
|
ExecTimeoutTool = "exec_timeout"
|
||||||
|
BuildSmallbankTool = "build_smallbank"
|
||||||
|
BuildFarbankTool = "build_far_bank"
|
||||||
|
ZoneDependenciesTool = "zone_dependencies"
|
||||||
|
ZoneWelderTool = "zone_welder"
|
||||||
|
BuildRbankTool = "build_rbank"
|
||||||
|
BuildIndoorRbankTool = "build_indoor_rbank"
|
||||||
|
BuildIgBoxesTool = "build_ig_boxes"
|
||||||
|
GetNeighborsTool = "get_neighbors"
|
||||||
|
ZoneLighterTool = "zone_lighter"
|
||||||
|
ZoneIgLighterTool = "zone_ig_lighter"
|
||||||
|
IgLighterTool = "ig_lighter"
|
||||||
|
AnimBuilderTool = "anim_builder"
|
||||||
|
TileEditTool = "tile_edit"
|
||||||
|
# BuildImagesetTool = "th_build_imageset" # kaetemi stuff, ignore this
|
||||||
|
MakeSheetIdTool = "make_sheet_id"
|
||||||
|
# BuildSheetsTool = "th_build_sheets" # kaetemi stuff, ignore this
|
||||||
|
# BuildSoundTool = "th_build_sound" # kaetemi stuff, ignore this
|
||||||
|
BuildCoarseMeshTool = "build_coarse_mesh"
|
||||||
|
LightmapOptimizerTool = "lightmap_optimizer"
|
||||||
|
BuildClodtexTool = "build_clodtex"
|
||||||
|
BuildShadowSkinTool = "build_shadow_skin"
|
||||||
|
PanoplyMakerTool = "panoply_maker"
|
||||||
|
HlsBankMakerTool = "hls_bank_maker"
|
||||||
|
LandExportTool = "land_export"
|
||||||
|
PrimExportTool = "prim_export"
|
||||||
|
IgElevationTool = "ig_elevation"
|
||||||
|
IgAddTool = "ig_add"
|
||||||
|
BuildClodBankTool = "build_clod_bank"
|
||||||
|
SheetsPackerTool = "sheets_packer"
|
||||||
|
SheetsPackerShardTool = "sheets_packer_shard"
|
||||||
|
BnpMakeTool = "bnp_make"
|
||||||
|
AiBuildWmapTool = "ai_build_wmap"
|
||||||
|
TgaCutTool = "tga_cut"
|
||||||
|
PatchGenTool = "patch_gen"
|
||||||
|
TranslationToolsTool = "translation_tools"
|
||||||
|
BuildWorldPackedColTool = "build_world_packed_col"
|
||||||
|
R2IslandsTexturesTool = "r2_islands_textures"
|
157
code/nel/tools/build_gamedata_linux/d1_client_patch.py
Executable file
157
code/nel/tools/build_gamedata_linux/d1_client_patch.py
Executable file
|
@ -0,0 +1,157 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file d1_client_patch.py
|
||||||
|
# \brief Install to client patch
|
||||||
|
# \date 2009-02-18 16:19GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Install to client patch
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util, argparse
|
||||||
|
sys.path.append("configuration")
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(description='Ryzom Core - Build Gamedata - Client Patch')
|
||||||
|
parser.add_argument('--bnponly', '-bo', action='store_true')
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from tools import *
|
||||||
|
|
||||||
|
sys.path.append(WorkspaceDirectory)
|
||||||
|
from projects import *
|
||||||
|
|
||||||
|
# Log error
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Install to client patch")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# Find tools
|
||||||
|
BnpMake = findTool(log, ToolDirectories, BnpMakeTool, ToolSuffix)
|
||||||
|
PatchGen = findTool(log, ToolDirectories, PatchGenTool, ToolSuffix)
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# Find **** HARDCODED **** WINDOWS **** tools ... TODO: fix patch_gen tool !!!
|
||||||
|
Lzma = findFileMultiDir(log, ToolDirectories + WindowsExeDllCfgDirectories, "lzma.exe")
|
||||||
|
printLog(log, "LZMA " + Lzma)
|
||||||
|
XDelta = findFileMultiDir(log, ToolDirectories + WindowsExeDllCfgDirectories, "xdelta.exe")
|
||||||
|
printLog(log, "XDELTA " + XDelta)
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
if BnpMake == "":
|
||||||
|
toolLogFail(log, BnpMakeTool, ToolSuffix)
|
||||||
|
elif PatchGen == "" and not args.bnponly:
|
||||||
|
toolLogFail(log, PatchGenTool, ToolSuffix)
|
||||||
|
elif Lzma == "" and not args.bnponly:
|
||||||
|
toolLogFail(log, "LZMA", ToolSuffix)
|
||||||
|
elif XDelta == "" and not args.bnponly:
|
||||||
|
toolLogFail(log, "XDELTA", ToolSuffix)
|
||||||
|
elif os.path.dirname(Lzma) != os.path.dirname(XDelta):
|
||||||
|
printLog(log, "FAIL lzma.exe and xdelta.exe must be in the same directory")
|
||||||
|
else:
|
||||||
|
mkPath(log, ClientPatchDirectory)
|
||||||
|
if not args.bnponly:
|
||||||
|
productXml = ClientPatchDirectory + "/" + ProductName + ".xml"
|
||||||
|
if not os.path.isfile(productXml):
|
||||||
|
printLog(log, ">>> Create new product <<<")
|
||||||
|
subprocess.call([ PatchGen, "createNewProduct", productXml ])
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, ">>> Rewrite " + ProductName + ".xml <<<") # because we know better.
|
||||||
|
shutil.move(productXml, productXml + ".old")
|
||||||
|
oldCfg = open(productXml + ".old", "r")
|
||||||
|
cfg = open(productXml, "w")
|
||||||
|
inCategories = 0
|
||||||
|
for line in oldCfg:
|
||||||
|
if not inCategories:
|
||||||
|
if line.strip() == "<_Categories>":
|
||||||
|
inCategories = 1
|
||||||
|
cfg.write("\t<_Categories>\n")
|
||||||
|
for category in InstallClientData:
|
||||||
|
cfg.write("\t\t<_Category>\n")
|
||||||
|
cfg.write("\t\t\t<_Name type=\"STRING\" value=\"" + category["Name"] + "\"/>\n")
|
||||||
|
if category["UnpackTo"] != None:
|
||||||
|
if category["UnpackTo"] != "":
|
||||||
|
cfg.write("\t\t\t<_UnpackTo type=\"STRING\" value=\"./" + category["UnpackTo"] + "/\"/>\n")
|
||||||
|
else:
|
||||||
|
cfg.write("\t\t\t<_UnpackTo type=\"SINT32\" value=\"./\"/>\n")
|
||||||
|
cfg.write("\t\t\t<_IsOptional type=\"SINT32\" value=\"" + str(category["IsOptional"]) + "\"/>\n")
|
||||||
|
cfg.write("\t\t\t<_IsIncremental type=\"SINT32\" value=\"" + str(category["IsIncremental"]) + "\"/>\n")
|
||||||
|
for package in category["Packages"]:
|
||||||
|
if (len(package[1]) > 0):
|
||||||
|
cfg.write("\t\t\t<_Files type=\"STRING\" value=\"" + package[1][0] + "\"/>\n")
|
||||||
|
else:
|
||||||
|
cfg.write("\t\t\t<_Files type=\"STRING\" value=\"" + package[0] + ".bnp\"/>\n")
|
||||||
|
for ref in category["Refs"]:
|
||||||
|
cfg.write("\t\t\t<_Files type=\"STRING\" value=\"" + ref + "_.ref\"/>\n")
|
||||||
|
cfg.write("\t\t</_Category>\n")
|
||||||
|
cfg.write("\t</_Categories>\n")
|
||||||
|
else:
|
||||||
|
cfg.write(line)
|
||||||
|
else:
|
||||||
|
if line.strip() == "</_Categories>":
|
||||||
|
inCategories = 0
|
||||||
|
oldCfg.close()
|
||||||
|
cfg.close()
|
||||||
|
os.remove(productXml + ".old")
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, ">>> Make bnp <<<")
|
||||||
|
targetPath = ClientPatchDirectory + "/bnp"
|
||||||
|
mkPath(log, targetPath)
|
||||||
|
for category in InstallClientData:
|
||||||
|
for package in category["Packages"]:
|
||||||
|
printLog(log, "PACKAGE " + package[0])
|
||||||
|
sourcePath = InstallDirectory + "/" + package[0]
|
||||||
|
mkPath(log, sourcePath)
|
||||||
|
targetBnp = targetPath + "/" + package[0] + ".bnp"
|
||||||
|
if (len(package[1]) > 0):
|
||||||
|
targetBnp = targetPath + "/" + package[1][0]
|
||||||
|
printLog(log, "TARGET " + package[1][0])
|
||||||
|
needUpdateBnp = 1
|
||||||
|
if (len(package) > 2):
|
||||||
|
needUpdateBnp = needUpdate(log, sourcePath + "/" + package[2], targetBnp)
|
||||||
|
else:
|
||||||
|
needUpdateBnp = needUpdateDirNoSubdirFile(log, sourcePath, targetBnp)
|
||||||
|
if (needUpdateBnp):
|
||||||
|
printLog(log, "BNP " + targetBnp)
|
||||||
|
subprocess.call([ BnpMake, "-p", sourcePath, "-o", targetBnp ] + package[1][1:])
|
||||||
|
else:
|
||||||
|
printLog(log, "SKIP " + targetBnp)
|
||||||
|
printLog(log, "")
|
||||||
|
if not args.bnponly:
|
||||||
|
printLog(log, ">>> Update product <<<")
|
||||||
|
cwDir = os.getcwd().replace("\\", "/")
|
||||||
|
toolDir = os.path.dirname(Lzma).replace("\\", "/")
|
||||||
|
os.chdir(toolDir)
|
||||||
|
subprocess.call([ PatchGen, "updateProduct", productXml ])
|
||||||
|
os.chdir(cwDir)
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
if os.path.isfile("d1_client_patch.log"):
|
||||||
|
os.remove("d1_client_patch.log")
|
||||||
|
shutil.copy("log.log", time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time())) + "_client_patch.log")
|
||||||
|
shutil.move("log.log", "d1_client_patch.log")
|
83
code/nel/tools/build_gamedata_linux/d2_client_install.py
Executable file
83
code/nel/tools/build_gamedata_linux/d2_client_install.py
Executable file
|
@ -0,0 +1,83 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file d2_client_install.py
|
||||||
|
# \brief Install to client install
|
||||||
|
# \date 2009-02-18 16:19GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Install to client install
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from tools import *
|
||||||
|
|
||||||
|
sys.path.append(WorkspaceDirectory)
|
||||||
|
from projects import *
|
||||||
|
|
||||||
|
# Log error
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Install to client install")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
for category in InstallClientData:
|
||||||
|
printLog(log, "CATEGORY " + category["Name"])
|
||||||
|
if (category["UnpackTo"] != None):
|
||||||
|
targetPath = ClientInstallDirectory
|
||||||
|
if (category["UnpackTo"] != ""):
|
||||||
|
targetPath += "/" + category["UnpackTo"]
|
||||||
|
mkPath(log, targetPath)
|
||||||
|
for package in category["Packages"]:
|
||||||
|
printLog(log, "PACKAGE " + package[0])
|
||||||
|
mkPath(log, InstallDirectory + "/" + package[0])
|
||||||
|
copyFilesNoTreeIfNeeded(log, InstallDirectory + "/" + package[0], targetPath)
|
||||||
|
else:
|
||||||
|
sourcePath = ClientPatchDirectory + "/bnp"
|
||||||
|
targetPath = ClientInstallDirectory + "/data"
|
||||||
|
mkPath(log, targetPath)
|
||||||
|
for package in category["Packages"]:
|
||||||
|
printLog(log, "PACKAGE " + package[0])
|
||||||
|
sourceBnp = sourcePath + "/" + package[0] + ".bnp"
|
||||||
|
targetBnp = targetPath + "/" + package[0] + ".bnp"
|
||||||
|
if (len(package[1]) > 0):
|
||||||
|
sourceBnp = sourcePath + "/" + package[1][0]
|
||||||
|
targetBnp = targetPath + "/" + package[1][0]
|
||||||
|
printLog(log, "TARGET " + package[1][0])
|
||||||
|
copyFileIfNeeded(log, sourceBnp, targetBnp)
|
||||||
|
for ref in category["Refs"]:
|
||||||
|
printLog(log, "REFERENCE " + ref)
|
||||||
|
sourceRef = sourcePath + "/" + ref + "_.ref"
|
||||||
|
targetRef = targetPath + "/" + ref + "_.ref"
|
||||||
|
copyFileIfNeeded(log, sourceRef, targetRef)
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
if os.path.isfile("d2_client_install.log"):
|
||||||
|
os.remove("d2_client_install.log")
|
||||||
|
shutil.copy("log.log", time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time())) + "_client_install.log")
|
||||||
|
shutil.move("log.log", "d2_client_install.log")
|
7
code/nel/tools/build_gamedata_linux/executables_dev.bat
Normal file
7
code/nel/tools/build_gamedata_linux/executables_dev.bat
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
title Ryzom Core: 3_install.py (EXECUTABLES)
|
||||||
|
3_install.py -ipj common/gamedev common/exedll common/cfg common/data_common
|
||||||
|
title Ryzom Core: b1_client_dev.py
|
||||||
|
b1_client_dev.py
|
||||||
|
title Ryzom Core: b2_shard_data.py
|
||||||
|
b2_shard_data.py
|
||||||
|
title Ryzom Core: Ready
|
32
code/nel/tools/build_gamedata_linux/export_build_install.py
Executable file
32
code/nel/tools/build_gamedata_linux/export_build_install.py
Executable file
|
@ -0,0 +1,32 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file export_build_install.py
|
||||||
|
# \brief Run all processes
|
||||||
|
# \date 2009-02-18 15:28GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Run all processes
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http:#dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http:#www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import shutil, subprocess
|
||||||
|
|
||||||
|
subprocess.call([ "python", "1_export.py" ])
|
||||||
|
subprocess.call([ "python", "2_build.py" ])
|
||||||
|
subprocess.call([ "python", "3_install.py" ])
|
||||||
|
|
|
@ -0,0 +1,220 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# #################################################################
|
||||||
|
# ## %PreGenWarning%
|
||||||
|
# #################################################################
|
||||||
|
#
|
||||||
|
# \file directories.py
|
||||||
|
# \brief Directories configuration
|
||||||
|
# \date %PreGenDateTimeStamp%
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# \date 2001-2005
|
||||||
|
# \author Nevrax
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Directories configuration for '%PreGenEcosystemName%' ecosystem.
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
# *** ECOSYSTEM AND CONTINENT NAMES ***
|
||||||
|
|
||||||
|
EcosystemName = "%PreGenEcosystemName%"
|
||||||
|
EcosystemPath = "ecosystems/" + EcosystemName
|
||||||
|
CommonName = EcosystemName
|
||||||
|
CommonPath = EcosystemPath
|
||||||
|
|
||||||
|
DatabaseRootName = "%PreGenDatabaseRootName%"
|
||||||
|
DatabaseRootPath = "stuff/" + DatabaseRootName
|
||||||
|
|
||||||
|
|
||||||
|
# *** SOURCE DIRECTORIES IN THE DATABASE ***
|
||||||
|
|
||||||
|
# Shape directories
|
||||||
|
ShapeSourceDirectories = [ ]
|
||||||
|
ShapeSourceDirectories += [ DatabaseRootPath + "/decors/vegetations" ]
|
||||||
|
ShapeSourceDirectories += [ "landscape/ligo/" + EcosystemName + "/max" ]
|
||||||
|
|
||||||
|
# Maps directories
|
||||||
|
MapSourceDirectories = [ ]
|
||||||
|
MapSourceDirectories += [ DatabaseRootPath + "/decors/_textures" ]
|
||||||
|
%PreGenMapSubdirectories%MapSourceDirectories += [ "landscape/microveget/" + EcosystemName + "" ]
|
||||||
|
MapSourceDirectories += [ "landscape/water/meshes/" + EcosystemName + "" ]
|
||||||
|
|
||||||
|
MapUncompressedSourceDirectories = [ ]
|
||||||
|
|
||||||
|
# Tiles directories
|
||||||
|
TilesSourceDirectories = [ ]
|
||||||
|
%PreGenTileSourceDirectories%
|
||||||
|
# Tiles root directory
|
||||||
|
TileRootSourceDirectory = "landscape/_texture_tiles/" + EcosystemName
|
||||||
|
|
||||||
|
# Displace directory
|
||||||
|
DisplaceSourceDirectory = "landscape/_texture_tiles/" + EcosystemName + "/displace"
|
||||||
|
|
||||||
|
# Do not use, needs to be removed and fixed in processes
|
||||||
|
DisplaceSourceDirectories = [ ]
|
||||||
|
DisplaceSourceDirectories += [ DisplaceSourceDirectory ]
|
||||||
|
|
||||||
|
# Bank directory
|
||||||
|
BankSourceDirectory = "landscape/_texture_tiles/" + EcosystemName
|
||||||
|
|
||||||
|
# Vegetable set directories
|
||||||
|
VegetSetSourceDirectories = [ ]
|
||||||
|
VegetSetSourceDirectories += [ "landscape/microveget/" + EcosystemName ]
|
||||||
|
|
||||||
|
# Veget directories
|
||||||
|
VegetSourceDirectories = [ ]
|
||||||
|
VegetSourceDirectories += [ "landscape/microveget/" + EcosystemName ]
|
||||||
|
|
||||||
|
# Ligo directories
|
||||||
|
LigoBaseSourceDirectory = "landscape/ligo/" + EcosystemName
|
||||||
|
LigoMaxSourceDirectory = LigoBaseSourceDirectory + "/max"
|
||||||
|
|
||||||
|
# Zone directories
|
||||||
|
ZoneSourceDirectory = [ "landscape/zones/" + EcosystemName ] # For old snowballs style landscape when not using ligo
|
||||||
|
|
||||||
|
# Ig landscape directories
|
||||||
|
IgLandSourceDirectory = "_invalid"
|
||||||
|
|
||||||
|
# Ig other directories
|
||||||
|
IgOtherSourceDirectory = "_invalid"
|
||||||
|
|
||||||
|
# PACS primitives directories
|
||||||
|
PacsPrimSourceDirectories = [ ]
|
||||||
|
PacsPrimSourceDirectories += [ DatabaseRootPath + "/decors/vegetations" ]
|
||||||
|
|
||||||
|
|
||||||
|
# *** LOOKUP DIRECTORIES WITHIN THE BUILD PIPELINE *** (TODO: use these instead of search_pathes in properties(_base).cfg)
|
||||||
|
|
||||||
|
# Ig lookup directories used by rbank
|
||||||
|
IgLookupDirectories = [ ]
|
||||||
|
|
||||||
|
# Shape lookup directories used by rbank
|
||||||
|
ShapeLookupDirectories = [ ]
|
||||||
|
ShapeLookupDirectories += [ EcosystemPath + "/shape_clodtex_build" ]
|
||||||
|
ShapeLookupDirectories += [ EcosystemPath + "/shape_with_coarse_mesh" ]
|
||||||
|
|
||||||
|
# Map lookup directories not yet used
|
||||||
|
MapLookupDirectories = [ ]
|
||||||
|
MapLookupDirectories += [ EcosystemPath + "/map_export" ]
|
||||||
|
MapLookupDirectories += [ EcosystemPath + "/map_uncompressed" ]
|
||||||
|
|
||||||
|
|
||||||
|
# *** EXPORT DIRECTORIES FOR THE BUILD PIPELINE ***
|
||||||
|
|
||||||
|
# Map directories
|
||||||
|
MapExportDirectory = CommonPath + "/map_export"
|
||||||
|
MapUncompressedExportDirectory = CommonPath + "/map_uncompressed"
|
||||||
|
|
||||||
|
# Shape directories
|
||||||
|
ShapeTagExportDirectory = CommonPath + "/shape_tag"
|
||||||
|
ShapeNotOptimizedExportDirectory = CommonPath + "/shape_not_optimized"
|
||||||
|
ShapeWithCoarseMeshExportDirectory = CommonPath + "/shape_with_coarse_mesh"
|
||||||
|
ShapeLightmapNotOptimizedExportDirectory = CommonPath + "/shape_lightmap_not_optimized"
|
||||||
|
ShapeAnimExportDirectory = CommonPath + "/shape_anim"
|
||||||
|
|
||||||
|
# Smallbank directories
|
||||||
|
SmallbankExportDirectory = CommonPath + "/smallbank"
|
||||||
|
|
||||||
|
# Tiles directories
|
||||||
|
TilesExportDirectory = CommonPath + "/tiles"
|
||||||
|
|
||||||
|
# Tiles directories
|
||||||
|
DisplaceExportDirectory = CommonPath + "/diplace"
|
||||||
|
|
||||||
|
# Veget directories
|
||||||
|
VegetExportDirectory = CommonPath + "/veget"
|
||||||
|
VegetTagExportDirectory = CommonPath + "/veget_tag"
|
||||||
|
|
||||||
|
# Veget Set directories
|
||||||
|
VegetSetExportDirectory = CommonPath + "/veget_set"
|
||||||
|
|
||||||
|
# Ligo directories
|
||||||
|
LigoEcosystemExportDirectory = CommonPath + "/ligo_es"
|
||||||
|
LigoEcosystemIgExportDirectory = LigoEcosystemExportDirectory + "/igs"
|
||||||
|
LigoEcosystemZoneExportDirectory = LigoEcosystemExportDirectory + "/zones"
|
||||||
|
LigoEcosystemZoneLigoExportDirectory = LigoEcosystemExportDirectory + "/zoneligos"
|
||||||
|
LigoEcosystemCmbExportDirectory = LigoEcosystemExportDirectory + "/cmb"
|
||||||
|
LigoEcosystemTagExportDirectory = CommonPath + "/ligo_es_tag"
|
||||||
|
|
||||||
|
# Zone directories
|
||||||
|
ZoneExportDirectory = CommonPath + "/zone"
|
||||||
|
|
||||||
|
# PACS primitives directories
|
||||||
|
PacsPrimExportDirectory = CommonPath + "/pacs_prim"
|
||||||
|
PacsPrimTagExportDirectory = CommonPath + "/pacs_prim_tag"
|
||||||
|
|
||||||
|
|
||||||
|
# *** BUILD DIRECTORIES FOR THE BUILD PIPELINE ***
|
||||||
|
|
||||||
|
# Map directories
|
||||||
|
MapBuildDirectory = CommonPath + "/map"
|
||||||
|
MapPanoplyBuildDirectory = CommonPath + "/map_panoply"
|
||||||
|
MapPanoplyHlsInfoBuildDirectory = CommonPath + "/map_panoply_hls_info"
|
||||||
|
MapPanoplyHlsBankBuildDirectory = CommonPath + "/map_panoply_hls_bank"
|
||||||
|
MapPanoplyCacheBuildDirectory = CommonPath + "/map_panoply_cache"
|
||||||
|
MapTagBuildDirectory = CommonPath + "/map_tag"
|
||||||
|
|
||||||
|
# Shape directories
|
||||||
|
ShapeClodtexBuildDirectory = CommonPath + "/shape_clodtex_build"
|
||||||
|
ShapeWithCoarseMeshBuildDirectory = CommonPath + "/shape_with_coarse_mesh_builded"
|
||||||
|
ShapeLightmapBuildDirectory = CommonPath + "/shape_lightmap"
|
||||||
|
ShapeLightmap16BitsBuildDirectory = CommonPath + "/shape_lightmap_16_bits"
|
||||||
|
|
||||||
|
# Farbank directories
|
||||||
|
FarbankBuildDirectory = CommonPath + "/farbank"
|
||||||
|
|
||||||
|
# Ig directories ************** TODO CONFIRM IN IG BUILD PROCESS ************ FIX RBANK IF NEEDED ***********
|
||||||
|
IgLandBuildDirectory = "_invalid"
|
||||||
|
IgOtherBuildDirectory = "_invalid"
|
||||||
|
|
||||||
|
# Rbank directories
|
||||||
|
RbankOutputBuildDirectory = "_invalid"
|
||||||
|
|
||||||
|
# Ligo directories
|
||||||
|
|
||||||
|
|
||||||
|
# *** INSTALL DIRECTORIES IN THE CLIENT DATA ***
|
||||||
|
|
||||||
|
# Map directory
|
||||||
|
MapInstallDirectory = CommonName + "_maps"
|
||||||
|
BitmapInstallDirectory = MapInstallDirectory
|
||||||
|
|
||||||
|
# Shape directory
|
||||||
|
ShapeInstallDirectory = CommonName + "_shapes"
|
||||||
|
|
||||||
|
# Lightmap directory
|
||||||
|
LightmapInstallDirectory = CommonName + "_lightmaps"
|
||||||
|
|
||||||
|
# Tile directory
|
||||||
|
TilesInstallDirectory = CommonName + "_tiles"
|
||||||
|
|
||||||
|
# Displace directory
|
||||||
|
DisplaceInstallDirectory = CommonName + "_displaces"
|
||||||
|
|
||||||
|
# Bank directory
|
||||||
|
BankInstallDirectory = CommonName + "_bank"
|
||||||
|
|
||||||
|
# Vegetable set directory
|
||||||
|
VegetSetInstallDirectory = CommonName + "_vegetable_sets"
|
||||||
|
|
||||||
|
# Vegetable shape directory
|
||||||
|
VegetInstallDirectory = CommonName + "_vegetables"
|
||||||
|
|
||||||
|
# PACS primitives directories
|
||||||
|
PacsPrimInstallDirectory = CommonName + "_pacs_prim"
|
|
@ -0,0 +1,122 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# #################################################################
|
||||||
|
# ## %PreGenWarning%
|
||||||
|
# #################################################################
|
||||||
|
#
|
||||||
|
# \file config.py
|
||||||
|
# \brief Process configuration
|
||||||
|
# \date %PreGenDateTimeStamp%
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Process configuration for '%PreGenEcosystemName%' ecosystem.
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
# *** PROCESS CONFIGURATION ***
|
||||||
|
|
||||||
|
# *** PROCESS CONFIG ***
|
||||||
|
ProcessToComplete = [ ]
|
||||||
|
ProcessToComplete += [ "shape" ]
|
||||||
|
ProcessToComplete += [ "map" ]
|
||||||
|
ProcessToComplete += [ "smallbank" ]
|
||||||
|
ProcessToComplete += [ "farbank" ]
|
||||||
|
ProcessToComplete += [ "tiles" ]
|
||||||
|
ProcessToComplete += [ "displace" ]
|
||||||
|
ProcessToComplete += [ "veget" ]
|
||||||
|
ProcessToComplete += [ "vegetset" ]
|
||||||
|
ProcessToComplete += [ "ligo" ]
|
||||||
|
ProcessToComplete += [ "pacs_prim" ]
|
||||||
|
|
||||||
|
|
||||||
|
# *** ECOSYSTEM AND CONTINENT NAMES ***
|
||||||
|
|
||||||
|
EcosystemName = "%PreGenEcosystemName%"
|
||||||
|
EcosystemPath = "ecosystems/" + EcosystemName
|
||||||
|
CommonName = EcosystemName
|
||||||
|
CommonPath = EcosystemPath
|
||||||
|
|
||||||
|
|
||||||
|
# *** MAP EXPORT OPTIONS ***
|
||||||
|
PanoplyFileList = [ ]
|
||||||
|
HlsBankFileName = ""
|
||||||
|
|
||||||
|
# *** SHAPE EXPORT OPTIONS ***
|
||||||
|
|
||||||
|
# Compute lightmaps ?
|
||||||
|
ShapeExportOptExportLighting = "%PreGenShapeExportOptExportLighting%"
|
||||||
|
|
||||||
|
# Cast shadow in lightmap ?
|
||||||
|
ShapeExportOptShadow = "%PreGenShapeExportOptShadow%"
|
||||||
|
|
||||||
|
# Lighting limits. 0 : normal, 1 : soft shadows
|
||||||
|
ShapeExportOptLightingLimit = %PreGenShapeExportOptLightingLimit%
|
||||||
|
|
||||||
|
# Lightmap lumel size
|
||||||
|
ShapeExportOptLumelSize = "%PreGenShapeExportOptLumelSize%"
|
||||||
|
|
||||||
|
# Oversampling value. Can be 1, 2, 4 or 8
|
||||||
|
ShapeExportOptOversampling = %PreGenShapeExportOptOversampling%
|
||||||
|
|
||||||
|
# Does the lightmap must be generated in 8 bits format ?
|
||||||
|
ShapeExportOpt8BitsLightmap = "%PreGenShapeExportOpt8BitsLightmap%"
|
||||||
|
|
||||||
|
# Does the lightmaps export must generate logs ?
|
||||||
|
ShapeExportOptLightmapLog = "%PreGenShapeExportOptLightmapLog%"
|
||||||
|
|
||||||
|
# Coarse mesh texture mul size
|
||||||
|
TextureMulSizeValue = "%PreGenTextureMulSizeValue%"
|
||||||
|
|
||||||
|
ClodConfigFile = ""
|
||||||
|
|
||||||
|
# *** COARSE MESH TEXTURE NAME ***
|
||||||
|
CoarseMeshTextureNames = [ ]
|
||||||
|
%PreGenCoarseMeshTextureNames%
|
||||||
|
# *** POSTFIX USED BY THE MULTIPLE TILES SYSTEM ***
|
||||||
|
MultipleTilesPostfix = [ ]
|
||||||
|
%PreGenMultipleTilesPostfix%
|
||||||
|
# *** BANK EXPORT OPTIONS ***
|
||||||
|
|
||||||
|
# Name of the tilebank to use
|
||||||
|
BankTileBankName = EcosystemName
|
||||||
|
|
||||||
|
# *** RBANK EXPORT OPTIONS ***
|
||||||
|
|
||||||
|
# Output names
|
||||||
|
RbankRbankName = "_invalid"
|
||||||
|
|
||||||
|
# *** LIGO OPTIONS ***
|
||||||
|
|
||||||
|
LigoExportLand = ""
|
||||||
|
LigoExportOnePass = 0
|
||||||
|
|
||||||
|
# *** MAPS OPTIONS ***
|
||||||
|
|
||||||
|
ReduceBitmapFactor = 0
|
||||||
|
# list all panoply files
|
||||||
|
MapPanoplyFileList = None
|
||||||
|
# name of the .hlsbank to build.
|
||||||
|
MapHlsBankFileName = None
|
||||||
|
|
||||||
|
# *** SHAPE BUILD OPTIONS *
|
||||||
|
|
||||||
|
BuildShadowSkinEnabled = False
|
||||||
|
ClodConfigFile = ""
|
||||||
|
|
||||||
|
# *** PACS_PRIM OPTIONS ***
|
||||||
|
WantLandscapeColPrimPacsList = True
|
65
code/nel/tools/build_gamedata_linux/generators/generate_all.py
Executable file
65
code/nel/tools/build_gamedata_linux/generators/generate_all.py
Executable file
|
@ -0,0 +1,65 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 0_setup.py
|
||||||
|
# \brief Run all setup processes
|
||||||
|
# \date 2009-02-18 15:28GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Run all setup processes
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../configuration")
|
||||||
|
if os.path.isfile("generate_all.log"):
|
||||||
|
os.remove("generate_all.log")
|
||||||
|
log = open("generate_all.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from tools import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Generate all")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
|
||||||
|
try:
|
||||||
|
subprocess.call([ "python", "generate_simple_max_exporters.py" ])
|
||||||
|
except Exception, e:
|
||||||
|
printLog(log, "<" + processName + "> " + str(e))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
|
||||||
|
try:
|
||||||
|
subprocess.call([ "python", "generate_tagged_max_exporters.py" ])
|
||||||
|
except Exception, e:
|
||||||
|
printLog(log, "<" + processName + "> " + str(e))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
|
||||||
|
try:
|
||||||
|
subprocess.call([ "python", "generate_ecosystem_projects.py" ])
|
||||||
|
except Exception, e:
|
||||||
|
printLog(log, "<" + processName + "> " + str(e))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
|
||||||
|
log.close()
|
278
code/nel/tools/build_gamedata_linux/generators/generate_ecosystem_projects.py
Executable file
278
code/nel/tools/build_gamedata_linux/generators/generate_ecosystem_projects.py
Executable file
|
@ -0,0 +1,278 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file generate_ecosystem_projects.py
|
||||||
|
# \brief Run all setup processes
|
||||||
|
# \date 2010-09-02 10:36GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Generate ecosystem projects
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../configuration")
|
||||||
|
if os.path.isfile("generate_ecosystem_projects.log"):
|
||||||
|
os.remove("generate_ecosystem_projects.log")
|
||||||
|
log = open("generate_ecosystem_projects.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from tools import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Generate ecosystem projects")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
templateDir = os.getcwd().replace("\\", "/") + "/ecosystem_project_template"
|
||||||
|
mkPath(log, templateDir)
|
||||||
|
|
||||||
|
os.chdir("..")
|
||||||
|
|
||||||
|
|
||||||
|
# Scroll down to add an ecosystem.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
DefaultShapeExportOptExportLighting = "true"
|
||||||
|
DefaultShapeExportOptShadow = "true"
|
||||||
|
DefaultShapeExportOptLightingLimit = "1"
|
||||||
|
DefaultShapeExportOptLumelSize = "0.25"
|
||||||
|
DefaultShapeExportOptOversampling = "1"
|
||||||
|
DefaultShapeExportOpt8BitsLightmap = "true"
|
||||||
|
DefaultShapeExportOptLightmapLog = "true"
|
||||||
|
DefaultTextureMulSizeValue = "1.5"
|
||||||
|
DefaultSeasonSuffixes = [ "sp" ] + [ "su" ] + [ "au" ] + [ "wi" ]
|
||||||
|
DefaultMapSubdirectories = [ ]
|
||||||
|
DefaultTileDirectories = [ ]
|
||||||
|
|
||||||
|
|
||||||
|
ShapeExportOptExportLighting = DefaultShapeExportOptExportLighting
|
||||||
|
ShapeExportOptShadow = DefaultShapeExportOptShadow
|
||||||
|
ShapeExportOptLightingLimit = DefaultShapeExportOptLightingLimit
|
||||||
|
ShapeExportOptLumelSize = DefaultShapeExportOptLumelSize
|
||||||
|
ShapeExportOptOversampling = DefaultShapeExportOptOversampling
|
||||||
|
ShapeExportOpt8BitsLightmap = DefaultShapeExportOpt8BitsLightmap
|
||||||
|
ShapeExportOptLightmapLog = DefaultShapeExportOptLightmapLog
|
||||||
|
TextureMulSizeValue = DefaultTextureMulSizeValue
|
||||||
|
SeasonSuffixes = DefaultSeasonSuffixes
|
||||||
|
MapSubdirectories = DefaultMapSubdirectories
|
||||||
|
TileDirectories = DefaultTileDirectories
|
||||||
|
|
||||||
|
|
||||||
|
PreGenDateTimeStamp = None
|
||||||
|
PreGenEcosystemName = None
|
||||||
|
PreGenDatabaseRootName = None
|
||||||
|
PreGenCoarseMeshTextureNames = None
|
||||||
|
PreGenMultipleTilesPostfix = None
|
||||||
|
PreGenMapSubdirectories = None
|
||||||
|
PreGenTileSourceDirectories = None
|
||||||
|
|
||||||
|
|
||||||
|
def transformLine(line):
|
||||||
|
newline = line.replace("%PreGenWarning%", "WARNING : this is a generated file, don't change it !")
|
||||||
|
newline = newline.replace("%PreGenDateTimeStamp%", PreGenDateTimeStamp)
|
||||||
|
|
||||||
|
newline = newline.replace("%PreGenEcosystemName%", PreGenEcosystemName)
|
||||||
|
newline = newline.replace("%PreGenDatabaseRootName%", PreGenDatabaseRootName)
|
||||||
|
|
||||||
|
newline = newline.replace("%PreGenCoarseMeshTextureNames%", PreGenCoarseMeshTextureNames)
|
||||||
|
newline = newline.replace("%PreGenMultipleTilesPostfix%", PreGenMultipleTilesPostfix)
|
||||||
|
newline = newline.replace("%PreGenMapSubdirectories%", PreGenMapSubdirectories)
|
||||||
|
newline = newline.replace("%PreGenTileSourceDirectories%", PreGenTileSourceDirectories)
|
||||||
|
|
||||||
|
newline = newline.replace("%PreGenShapeExportOptExportLighting%", ShapeExportOptExportLighting)
|
||||||
|
newline = newline.replace("%PreGenShapeExportOptShadow%", ShapeExportOptShadow)
|
||||||
|
newline = newline.replace("%PreGenShapeExportOptLightingLimit%", ShapeExportOptLightingLimit)
|
||||||
|
newline = newline.replace("%PreGenShapeExportOptLumelSize%", ShapeExportOptLumelSize)
|
||||||
|
newline = newline.replace("%PreGenShapeExportOptOversampling%", ShapeExportOptOversampling)
|
||||||
|
newline = newline.replace("%PreGenShapeExportOpt8BitsLightmap%", ShapeExportOpt8BitsLightmap)
|
||||||
|
newline = newline.replace("%PreGenShapeExportOptLightmapLog%", ShapeExportOptLightmapLog)
|
||||||
|
newline = newline.replace("%PreGenTextureMulSizeValue%", TextureMulSizeValue)
|
||||||
|
newline = newline.replace("%PreGenTileSourceDirectories%", PreGenTileSourceDirectories)
|
||||||
|
|
||||||
|
return newline
|
||||||
|
|
||||||
|
def generateFile(sourceFile, destFile):
|
||||||
|
srcf = open(sourceFile, "r")
|
||||||
|
dstf = open(destFile, "w")
|
||||||
|
printLog(log, "WRITE " + destFile)
|
||||||
|
for line in srcf:
|
||||||
|
dstf.write(transformLine(line))
|
||||||
|
dstf.close()
|
||||||
|
srcf.close()
|
||||||
|
|
||||||
|
def generateEcosystem(ecosystemName, databaseRootName):
|
||||||
|
global PreGenEcosystemName
|
||||||
|
PreGenEcosystemName = ecosystemName
|
||||||
|
global PreGenDatabaseRootName
|
||||||
|
PreGenDatabaseRootName = databaseRootName
|
||||||
|
global PreGenDateTimeStamp
|
||||||
|
PreGenDateTimeStamp = time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time()))
|
||||||
|
|
||||||
|
global PreGenMultipleTilesPostfix
|
||||||
|
PreGenMultipleTilesPostfix = ""
|
||||||
|
global PreGenCoarseMeshTextureNames
|
||||||
|
PreGenCoarseMeshTextureNames = ""
|
||||||
|
global PreGenTileSourceDirectories
|
||||||
|
PreGenTileSourceDirectories = ""
|
||||||
|
for suffix in SeasonSuffixes:
|
||||||
|
PreGenMultipleTilesPostfix += "MultipleTilesPostfix += [ \"_" + suffix + "\" ]\n"
|
||||||
|
PreGenCoarseMeshTextureNames += "CoarseMeshTextureNames += [ \"nel_coarse_mesh_\" + EcosystemName + \"_" + suffix + "\" ]\n"
|
||||||
|
for tiledir in TileDirectories:
|
||||||
|
PreGenTileSourceDirectories += "TilesSourceDirectories += [ \"landscape/_texture_tiles/\" + EcosystemName + \"_" + suffix + "/" + tiledir + "\" ]\n"
|
||||||
|
global PreGenMapSubdirectories
|
||||||
|
PreGenMapSubdirectories = ""
|
||||||
|
for subdir in MapSubdirectories:
|
||||||
|
PreGenMapSubdirectories += "MapSourceDirectories += [ DatabaseRootPath + \"/decors/_textures/" + subdir + "\" ]\n"
|
||||||
|
|
||||||
|
destDir = WorkspaceDirectory + "/ecosystems/" + ecosystemName
|
||||||
|
mkPath(log, destDir)
|
||||||
|
|
||||||
|
generateFile(templateDir + "/process.py", destDir + "/process.py")
|
||||||
|
generateFile(templateDir + "/directories.py", destDir + "/directories.py")
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Add new ecosystems below this line.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# DESERT
|
||||||
|
ShapeExportOptExportLighting = DefaultShapeExportOptExportLighting
|
||||||
|
ShapeExportOptShadow = DefaultShapeExportOptShadow
|
||||||
|
ShapeExportOptLightingLimit = DefaultShapeExportOptLightingLimit
|
||||||
|
ShapeExportOptLumelSize = DefaultShapeExportOptLumelSize
|
||||||
|
ShapeExportOptOversampling = DefaultShapeExportOptOversampling
|
||||||
|
ShapeExportOpt8BitsLightmap = DefaultShapeExportOpt8BitsLightmap
|
||||||
|
ShapeExportOptLightmapLog = DefaultShapeExportOptLightmapLog
|
||||||
|
TextureMulSizeValue = DefaultTextureMulSizeValue
|
||||||
|
SeasonSuffixes = DefaultSeasonSuffixes
|
||||||
|
MapSubdirectories = [ ]
|
||||||
|
MapSubdirectories += [ "vegetations" ]
|
||||||
|
TileDirectories = [ ]
|
||||||
|
TileDirectories += [ "1.5-marecage_profond" ]
|
||||||
|
TileDirectories += [ "1-marecages" ]
|
||||||
|
TileDirectories += [ "2-citees" ]
|
||||||
|
TileDirectories += [ "3-fond_canyon" ]
|
||||||
|
TileDirectories += [ "4.2-boisbandeclair" ]
|
||||||
|
TileDirectories += [ "4.5-desert2boisbande" ]
|
||||||
|
TileDirectories += [ "4-falaise_bois_bande" ]
|
||||||
|
TileDirectories += [ "5-falaise_normales" ]
|
||||||
|
TileDirectories += [ "6.5-desertalternatif" ]
|
||||||
|
TileDirectories += [ "6-desert" ]
|
||||||
|
TileDirectories += [ "7-routes" ]
|
||||||
|
TileDirectories += [ "8-foretbrule" ]
|
||||||
|
generateEcosystem("desert", "fyros")
|
||||||
|
|
||||||
|
|
||||||
|
# JUNGLE
|
||||||
|
ShapeExportOptExportLighting = DefaultShapeExportOptExportLighting
|
||||||
|
ShapeExportOptShadow = DefaultShapeExportOptShadow
|
||||||
|
ShapeExportOptLightingLimit = DefaultShapeExportOptLightingLimit
|
||||||
|
ShapeExportOptLumelSize = DefaultShapeExportOptLumelSize
|
||||||
|
ShapeExportOptOversampling = DefaultShapeExportOptOversampling
|
||||||
|
ShapeExportOpt8BitsLightmap = "false"
|
||||||
|
ShapeExportOptLightmapLog = DefaultShapeExportOptLightmapLog
|
||||||
|
TextureMulSizeValue = DefaultTextureMulSizeValue
|
||||||
|
SeasonSuffixes = DefaultSeasonSuffixes
|
||||||
|
MapSubdirectories = [ ]
|
||||||
|
MapSubdirectories += [ "vegetations" ]
|
||||||
|
TileDirectories = [ ]
|
||||||
|
TileDirectories += [ "10-crevassejungle" ]
|
||||||
|
TileDirectories += [ "11-paroisjungle" ]
|
||||||
|
TileDirectories += [ "12-vasejungle" ]
|
||||||
|
TileDirectories += [ "1-junglemousse" ]
|
||||||
|
TileDirectories += [ "2-junglefeuilles" ]
|
||||||
|
TileDirectories += [ "3-jungleherbesseche" ]
|
||||||
|
TileDirectories += [ "4-jungleherbevieille" ]
|
||||||
|
TileDirectories += [ "5-jungleterreaux" ]
|
||||||
|
TileDirectories += [ "6-junglegoo" ]
|
||||||
|
TileDirectories += [ "7-sciurejungle" ]
|
||||||
|
TileDirectories += [ "8-terrejungle" ]
|
||||||
|
TileDirectories += [ "9-falaisejungle" ]
|
||||||
|
TileDirectories += [ "Transitions" ]
|
||||||
|
generateEcosystem("jungle", "jungle")
|
||||||
|
|
||||||
|
|
||||||
|
# PRIMES RACINES
|
||||||
|
ShapeExportOptExportLighting = DefaultShapeExportOptExportLighting
|
||||||
|
ShapeExportOptShadow = DefaultShapeExportOptShadow
|
||||||
|
ShapeExportOptLightingLimit = DefaultShapeExportOptLightingLimit
|
||||||
|
ShapeExportOptLumelSize = DefaultShapeExportOptLumelSize
|
||||||
|
ShapeExportOptOversampling = DefaultShapeExportOptOversampling
|
||||||
|
ShapeExportOpt8BitsLightmap = "false"
|
||||||
|
ShapeExportOptLightmapLog = DefaultShapeExportOptLightmapLog
|
||||||
|
TextureMulSizeValue = DefaultTextureMulSizeValue
|
||||||
|
SeasonSuffixes = DefaultSeasonSuffixes
|
||||||
|
MapSubdirectories = [ ]
|
||||||
|
MapSubdirectories += [ "vegetations" ]
|
||||||
|
MapSubdirectories += [ "batiments" ]
|
||||||
|
TileDirectories = [ ]
|
||||||
|
TileDirectories += [ "PR-creux" ]
|
||||||
|
TileDirectories += [ "PR-dome-moussu" ]
|
||||||
|
TileDirectories += [ "PR-kitiniere" ]
|
||||||
|
TileDirectories += [ "PR-mousse-licken" ]
|
||||||
|
TileDirectories += [ "PR-mousse-spongieus" ]
|
||||||
|
TileDirectories += [ "PR-parois" ]
|
||||||
|
TileDirectories += [ "PR-sol-mousse" ]
|
||||||
|
TileDirectories += [ "PR-souche" ]
|
||||||
|
TileDirectories += [ "PR-stalagmite" ]
|
||||||
|
TileDirectories += [ "PR-terre" ]
|
||||||
|
TileDirectories += [ "aditif" ]
|
||||||
|
generateEcosystem("primes_racines", "primes_racines")
|
||||||
|
|
||||||
|
|
||||||
|
# LACUSTRE
|
||||||
|
ShapeExportOptExportLighting = DefaultShapeExportOptExportLighting
|
||||||
|
ShapeExportOptShadow = DefaultShapeExportOptShadow
|
||||||
|
ShapeExportOptLightingLimit = "0"
|
||||||
|
ShapeExportOptLumelSize = DefaultShapeExportOptLumelSize
|
||||||
|
ShapeExportOptOversampling = "8"
|
||||||
|
ShapeExportOpt8BitsLightmap = "false"
|
||||||
|
ShapeExportOptLightmapLog = DefaultShapeExportOptLightmapLog
|
||||||
|
TextureMulSizeValue = DefaultTextureMulSizeValue
|
||||||
|
SeasonSuffixes = DefaultSeasonSuffixes
|
||||||
|
MapSubdirectories = [ ]
|
||||||
|
MapSubdirectories += [ "vegetations" ]
|
||||||
|
TileDirectories = [ ]
|
||||||
|
TileDirectories += [ "1a-sable-marin" ]
|
||||||
|
TileDirectories += [ "1-plages" ]
|
||||||
|
TileDirectories += [ "2-iles" ]
|
||||||
|
TileDirectories += [ "2-ilesa" ]
|
||||||
|
TileDirectories += [ "2-iles-marines" ]
|
||||||
|
TileDirectories += [ "3-fondmarin2plage" ]
|
||||||
|
TileDirectories += [ "4-marecages" ]
|
||||||
|
TileDirectories += [ "5-marecages" ]
|
||||||
|
TileDirectories += [ "5-parois-marine" ]
|
||||||
|
TileDirectories += [ "6-fond_marin" ]
|
||||||
|
TileDirectories += [ "7-bassesiles" ]
|
||||||
|
TileDirectories += [ "7-mousseter" ]
|
||||||
|
TileDirectories += [ "7-racines" ]
|
||||||
|
TileDirectories += [ "8-mousse_marine" ]
|
||||||
|
TileDirectories += [ "constructible" ]
|
||||||
|
generateEcosystem("lacustre", "tryker")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
log.close()
|
100
code/nel/tools/build_gamedata_linux/generators/generate_simple_max_exporters.py
Executable file
100
code/nel/tools/build_gamedata_linux/generators/generate_simple_max_exporters.py
Executable file
|
@ -0,0 +1,100 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 0_setup.py
|
||||||
|
# \brief Run all setup processes
|
||||||
|
# \date 2009-02-18 15:28GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Run all setup processes
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../configuration")
|
||||||
|
if os.path.isfile("generate_simple_max_exporters.log"):
|
||||||
|
os.remove("generate_simple_max_exporters.log")
|
||||||
|
log = open("generate_simple_max_exporters.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from tools import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Generate simple max exporters")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
def processLine(line, processName, fileExtension, sourceDirectoriesVariable, exportDirectoryVariable, clientDirectoryVariable, dateTimeStamp):
|
||||||
|
newline = line.replace("%PreGenWarning%", "WARNING : this is a generated file, don't change it !")
|
||||||
|
newline = newline.replace("%PreGenDateTimeStamp%", dateTimeStamp)
|
||||||
|
newline = newline.replace("%PreGenProcessName%", processName)
|
||||||
|
newline = newline.replace("%PreGenFileExtension%", fileExtension)
|
||||||
|
newline = newline.replace("%PreGenSourceDirectoriesVariable%", sourceDirectoriesVariable)
|
||||||
|
newline = newline.replace("%PreGenExportDirectoryVariable%", exportDirectoryVariable)
|
||||||
|
newline = newline.replace("%PreGenInstallDirectoryVariable%", clientDirectoryVariable)
|
||||||
|
return newline
|
||||||
|
|
||||||
|
def generateSimpleMaxExporterFile(sourceFile, destFile, writeMode, processName, fileExtension, sourceDirectoriesVariable, exportDirectoryVariable, clientDirectoryVariable, dateTimeStamp):
|
||||||
|
srcf = open(sourceFile, "r")
|
||||||
|
dstf = open(destFile, writeMode)
|
||||||
|
printLog(log, "WRITE " + destFile + " " + writeMode)
|
||||||
|
for line in srcf:
|
||||||
|
dstf.write(processLine(line, processName, fileExtension, sourceDirectoriesVariable, exportDirectoryVariable, clientDirectoryVariable, dateTimeStamp))
|
||||||
|
dstf.close()
|
||||||
|
srcf.close()
|
||||||
|
|
||||||
|
def generateSimpleMaxExporter(processName, fileExtension, sourceDirectoriesVariable, exportDirectoryVariable, clientDirectoryVariable):
|
||||||
|
dateTimeStamp = time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time()))
|
||||||
|
processDir = ScriptDirectory + "/processes/" + processName
|
||||||
|
mkPath(log, processDir)
|
||||||
|
maxscriptDir = processDir + "/maxscript"
|
||||||
|
mkPath(log, maxscriptDir)
|
||||||
|
templateDir = os.getcwd().replace("\\", "/") + "/simple_max_exporter_template"
|
||||||
|
mkPath(log, templateDir)
|
||||||
|
scriptDir = os.getcwd().replace("\\", "/") + "/max_exporter_scripts"
|
||||||
|
mkPath(log, scriptDir)
|
||||||
|
|
||||||
|
if not os.path.isfile(processDir + "/0_setup.py"):
|
||||||
|
generateSimpleMaxExporterFile(templateDir + "/0_setup.py", processDir + "/0_setup.py", "w", processName, fileExtension, sourceDirectoriesVariable, exportDirectoryVariable, clientDirectoryVariable, dateTimeStamp)
|
||||||
|
|
||||||
|
generateSimpleMaxExporterFile(templateDir + "/1_export_header.py", processDir + "/1_export.py", "w", processName, fileExtension, sourceDirectoriesVariable, exportDirectoryVariable, clientDirectoryVariable, dateTimeStamp)
|
||||||
|
generateSimpleMaxExporterFile(scriptDir + "/" + fileExtension + ".py", processDir + "/1_export.py", "a", processName, fileExtension, sourceDirectoriesVariable, exportDirectoryVariable, clientDirectoryVariable, dateTimeStamp)
|
||||||
|
generateSimpleMaxExporterFile(templateDir + "/1_export_footer.py", processDir + "/1_export.py", "a", processName, fileExtension, sourceDirectoriesVariable, exportDirectoryVariable, clientDirectoryVariable, dateTimeStamp)
|
||||||
|
|
||||||
|
if not os.path.isfile(processDir + "/2_build.py"):
|
||||||
|
generateSimpleMaxExporterFile(templateDir + "/2_build.py", processDir + "/2_build.py", "w", processName, fileExtension, sourceDirectoriesVariable, exportDirectoryVariable, clientDirectoryVariable, dateTimeStamp)
|
||||||
|
if not os.path.isfile(processDir + "/3_install.py"):
|
||||||
|
generateSimpleMaxExporterFile(templateDir + "/3_install.py", processDir + "/3_install.py", "w", processName, fileExtension, sourceDirectoriesVariable, exportDirectoryVariable, clientDirectoryVariable, dateTimeStamp)
|
||||||
|
|
||||||
|
generateSimpleMaxExporterFile(templateDir + "/export_header.ms", maxscriptDir + "/" + fileExtension + "_export.ms", "w", processName, fileExtension, sourceDirectoriesVariable, exportDirectoryVariable, clientDirectoryVariable, dateTimeStamp)
|
||||||
|
generateSimpleMaxExporterFile(scriptDir + "/" + fileExtension + ".ms", maxscriptDir + "/" + fileExtension + "_export.ms", "a", processName, fileExtension, sourceDirectoriesVariable, exportDirectoryVariable, clientDirectoryVariable, dateTimeStamp)
|
||||||
|
generateSimpleMaxExporterFile(templateDir + "/export_footer.ms", maxscriptDir + "/" + fileExtension + "_export.ms", "a", processName, fileExtension, sourceDirectoriesVariable, exportDirectoryVariable, clientDirectoryVariable, dateTimeStamp)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
generateSimpleMaxExporter("skel", "skel", "SkelSourceDirectories", "SkelExportDirectory", "SkelInstallDirectory")
|
||||||
|
|
||||||
|
generateSimpleMaxExporter("swt", "swt", "SwtSourceDirectories", "SwtExportDirectory", "SwtInstallDirectory")
|
||||||
|
|
||||||
|
generateSimpleMaxExporter("zone", "zone", "ZoneSourceDirectory", "ZoneExportDirectory", "ZoneInstallDirectory")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
log.close()
|
120
code/nel/tools/build_gamedata_linux/generators/generate_tagged_max_exporters.py
Executable file
120
code/nel/tools/build_gamedata_linux/generators/generate_tagged_max_exporters.py
Executable file
|
@ -0,0 +1,120 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 0_setup.py
|
||||||
|
# \brief Run all setup processes
|
||||||
|
# \date 2009-02-18 15:28GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Run all setup processes
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../configuration")
|
||||||
|
if os.path.isfile("generate_tagged_max_exporters.log"):
|
||||||
|
os.remove("generate_tagged_max_exporters.log")
|
||||||
|
log = open("generate_tagged_max_exporters.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from tools import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Generate tagged max exporters")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
templateDir = os.getcwd().replace("\\", "/") + "/tagged_max_exporter_template"
|
||||||
|
mkPath(log, templateDir)
|
||||||
|
scriptDir = os.getcwd().replace("\\", "/") + "/max_exporter_scripts"
|
||||||
|
mkPath(log, scriptDir)
|
||||||
|
|
||||||
|
def processLine(line, processName, fileExtension, sourceDirectoriesVariable, exportDirectoryVariable, tagExportDirectoryVariable, clientDirectoryVariable, dateTimeStamp):
|
||||||
|
newline = line.replace("%PreGenWarning%", "WARNING : this is a generated file, don't change it !")
|
||||||
|
newline = newline.replace("%PreGenDateTimeStamp%", dateTimeStamp)
|
||||||
|
newline = newline.replace("%PreGenProcessName%", processName)
|
||||||
|
newline = newline.replace("%PreGenFileExtension%", fileExtension)
|
||||||
|
newline = newline.replace("%PreGenSourceDirectoriesVariable%", sourceDirectoriesVariable)
|
||||||
|
newline = newline.replace("%PreGenExportDirectoryVariable%", exportDirectoryVariable)
|
||||||
|
newline = newline.replace("%PreGenTagExportDirectoryVariable%", tagExportDirectoryVariable)
|
||||||
|
newline = newline.replace("%PreGenInstallDirectoryVariable%", clientDirectoryVariable)
|
||||||
|
return newline
|
||||||
|
|
||||||
|
def generateTaggedMaxExporterFile(sourceFile, destFile, writeMode, processName, fileExtension, sourceDirectoriesVariable, exportDirectoryVariable, tagExportDirectoryVariable, clientDirectoryVariable, dateTimeStamp):
|
||||||
|
srcf = open(sourceFile, "r")
|
||||||
|
dstf = open(destFile, writeMode)
|
||||||
|
printLog(log, "WRITE " + destFile + " " + writeMode)
|
||||||
|
for line in srcf:
|
||||||
|
dstf.write(processLine(line, processName, fileExtension, sourceDirectoriesVariable, exportDirectoryVariable, tagExportDirectoryVariable, clientDirectoryVariable, dateTimeStamp))
|
||||||
|
dstf.close()
|
||||||
|
srcf.close()
|
||||||
|
|
||||||
|
def generateTaggedMaxScriptFile(processDir, processName, fileExtension, sourceDirectoriesVariable, exportDirectoryVariable, tagExportDirectoryVariable, clientDirectoryVariable, dateTimeStamp):
|
||||||
|
maxscriptDir = processDir + "/maxscript"
|
||||||
|
mkPath(log, maxscriptDir)
|
||||||
|
generateTaggedMaxExporterFile(templateDir + "/export_header.ms", maxscriptDir + "/" + fileExtension + "_export.ms", "w", processName, fileExtension, sourceDirectoriesVariable, exportDirectoryVariable, tagExportDirectoryVariable, clientDirectoryVariable, dateTimeStamp)
|
||||||
|
generateTaggedMaxExporterFile(scriptDir + "/" + fileExtension + ".ms", maxscriptDir + "/" + fileExtension + "_export.ms", "a", processName, fileExtension, sourceDirectoriesVariable, exportDirectoryVariable, tagExportDirectoryVariable, clientDirectoryVariable, dateTimeStamp)
|
||||||
|
generateTaggedMaxExporterFile(templateDir + "/export_footer.ms", maxscriptDir + "/" + fileExtension + "_export.ms", "a", processName, fileExtension, sourceDirectoriesVariable, exportDirectoryVariable, tagExportDirectoryVariable, clientDirectoryVariable, dateTimeStamp)
|
||||||
|
|
||||||
|
def generateTaggedMaxScript(processName, fileExtension):
|
||||||
|
dateTimeStamp = time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time()))
|
||||||
|
processDir = ScriptDirectory + "/processes/" + processName
|
||||||
|
mkPath(log, processDir)
|
||||||
|
|
||||||
|
generateTaggedMaxScriptFile(processDir, processName, fileExtension, "_invalid", "_invalid", "_invalid", "_invalid", dateTimeStamp)
|
||||||
|
|
||||||
|
def generateTaggedMaxExporter(processName, fileExtension, sourceDirectoriesVariable, exportDirectoryVariable, tagExportDirectoryVariable, clientDirectoryVariable):
|
||||||
|
dateTimeStamp = time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time()))
|
||||||
|
processDir = ScriptDirectory + "/processes/" + processName
|
||||||
|
mkPath(log, processDir)
|
||||||
|
|
||||||
|
if not os.path.isfile(processDir + "/0_setup.py"):
|
||||||
|
generateTaggedMaxExporterFile(templateDir + "/0_setup.py", processDir + "/0_setup.py", "w", processName, fileExtension, sourceDirectoriesVariable, exportDirectoryVariable, tagExportDirectoryVariable, clientDirectoryVariable, dateTimeStamp)
|
||||||
|
|
||||||
|
generateTaggedMaxExporterFile(templateDir + "/1_export_header.py", processDir + "/1_export.py", "w", processName, fileExtension, sourceDirectoriesVariable, exportDirectoryVariable, tagExportDirectoryVariable, clientDirectoryVariable, dateTimeStamp)
|
||||||
|
generateTaggedMaxExporterFile(scriptDir + "/" + fileExtension + ".py", processDir + "/1_export.py", "a", processName, fileExtension, sourceDirectoriesVariable, exportDirectoryVariable, tagExportDirectoryVariable, clientDirectoryVariable, dateTimeStamp)
|
||||||
|
generateTaggedMaxExporterFile(templateDir + "/1_export_footer.py", processDir + "/1_export.py", "a", processName, fileExtension, sourceDirectoriesVariable, exportDirectoryVariable, tagExportDirectoryVariable, clientDirectoryVariable, dateTimeStamp)
|
||||||
|
|
||||||
|
if not os.path.isfile(processDir + "/2_build.py"):
|
||||||
|
generateTaggedMaxExporterFile(templateDir + "/2_build.py", processDir + "/2_build.py", "w", processName, fileExtension, sourceDirectoriesVariable, exportDirectoryVariable, tagExportDirectoryVariable, clientDirectoryVariable, dateTimeStamp)
|
||||||
|
if not os.path.isfile(processDir + "/3_install.py"):
|
||||||
|
generateTaggedMaxExporterFile(templateDir + "/3_install.py", processDir + "/3_install.py", "w", processName, fileExtension, sourceDirectoriesVariable, exportDirectoryVariable, tagExportDirectoryVariable, clientDirectoryVariable, dateTimeStamp)
|
||||||
|
|
||||||
|
generateTaggedMaxScriptFile(processDir, processName, fileExtension, sourceDirectoriesVariable, exportDirectoryVariable, tagExportDirectoryVariable, clientDirectoryVariable, dateTimeStamp)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
generateTaggedMaxExporter("pacs_prim", "pacs_prim", "PacsPrimSourceDirectories", "PacsPrimExportDirectory", "PacsPrimTagExportDirectory", "PacsPrimInstallDirectory")
|
||||||
|
|
||||||
|
generateTaggedMaxExporter("clodbank", "clod", "ClodSourceDirectories", "ClodExportDirectory", "ClodTagExportDirectory", "ClodInstallDirectory")
|
||||||
|
|
||||||
|
generateTaggedMaxScript("ig", "ig")
|
||||||
|
|
||||||
|
generateTaggedMaxExporter("rbank", "cmb", "RBankCmbSourceDirectories", "RBankCmbExportDirectory", "RBankCmbTagExportDirectory", "PacsInstallDirectory")
|
||||||
|
|
||||||
|
generateTaggedMaxExporter("veget", "veget", "VegetSourceDirectories", "VegetExportDirectory", "VegetTagExportDirectory", "VegetInstallDirectory")
|
||||||
|
|
||||||
|
generateTaggedMaxScript("shape", "shape")
|
||||||
|
|
||||||
|
generateTaggedMaxExporter("anim", "anim", "AnimSourceDirectories", "AnimExportDirectory", "AnimTagExportDirectory", "AnimInstallDirectory")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
log.close()
|
68
code/nel/tools/build_gamedata_linux/generators/max_exporter_scripts/anim.ms
Executable file
68
code/nel/tools/build_gamedata_linux/generators/max_exporter_scripts/anim.ms
Executable file
|
@ -0,0 +1,68 @@
|
||||||
|
|
||||||
|
|
||||||
|
NEL3D_APPDATA_EXPORT_NODE_ANIMATION = 1423062800
|
||||||
|
|
||||||
|
fn runNelMaxExport inputMaxFile =
|
||||||
|
(
|
||||||
|
outputNelFile = ("%OutputDirectory%/" + (getFilenameFile inputMaxFile) + ".%PreGenFileExtension%")
|
||||||
|
tagThisFile = true
|
||||||
|
|
||||||
|
-- Unhide category
|
||||||
|
unhidecategory()
|
||||||
|
|
||||||
|
-- Select Bip01, not very smart
|
||||||
|
if $Bip01 != undefined then
|
||||||
|
(
|
||||||
|
select $Bip01
|
||||||
|
|
||||||
|
-- Always uncheck triangle pelvis
|
||||||
|
if (classof $Bip01) == Biped_Object then
|
||||||
|
(
|
||||||
|
$Bip01.controller.figureMode = true
|
||||||
|
$Bip01.controller.trianglepelvis = false
|
||||||
|
$Bip01.controller.figureMode = false
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
-- For each node
|
||||||
|
for node in objects do
|
||||||
|
(
|
||||||
|
exportNodeAnmation = getappdata node NEL3D_APPDATA_EXPORT_NODE_ANIMATION
|
||||||
|
if (exportNodeAnmation != undefined) then
|
||||||
|
(
|
||||||
|
if (exportNodeAnmation == "1") then
|
||||||
|
(
|
||||||
|
selectmore node
|
||||||
|
|
||||||
|
-- Is it a biped ?
|
||||||
|
if (classof node.controller) == Vertical_Horizontal_Turn then
|
||||||
|
(
|
||||||
|
-- Always uncheck triangle pelvis
|
||||||
|
node.controller.trianglepelvis = false
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
if ((selection as array).count != 0) then
|
||||||
|
(
|
||||||
|
-- Export the animation
|
||||||
|
if (NelExportAnimation (selection as array) outputNelFile false) == false then
|
||||||
|
(
|
||||||
|
nlerror("ERROR exporting animation " + inputMaxFile)
|
||||||
|
tagThisFile = false
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
nlerror("OK " + outputNelFile)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
-- Error
|
||||||
|
nlerror("WARNING exporting animation: no node animated to export in file " + inputMaxFile)
|
||||||
|
)
|
||||||
|
|
||||||
|
return tagThisFile
|
||||||
|
)
|
||||||
|
|
125
code/nel/tools/build_gamedata_linux/generators/max_exporter_scripts/clod.ms
Executable file
125
code/nel/tools/build_gamedata_linux/generators/max_exporter_scripts/clod.ms
Executable file
|
@ -0,0 +1,125 @@
|
||||||
|
|
||||||
|
|
||||||
|
-- Some globals
|
||||||
|
|
||||||
|
NEL3D_APPDATA_DONOTEXPORT = 1423062565 -- do not export me : "undefined" = export me
|
||||||
|
-- "0" = export me
|
||||||
|
-- "1" = DONT export me
|
||||||
|
NEL3D_APPDATA_CHARACTER_LOD = 1423062618 -- "1": I am a character lod if "1". "0" or undefined: I am not.
|
||||||
|
|
||||||
|
|
||||||
|
-- Must export this node ?
|
||||||
|
fn isToBeExported node =
|
||||||
|
(
|
||||||
|
if ((classof node) == RklPatch) then
|
||||||
|
return false
|
||||||
|
|
||||||
|
if ((classof node) == nel_ps) then
|
||||||
|
return false
|
||||||
|
|
||||||
|
if ((classof node) == nel_pacs_cylinder) then
|
||||||
|
return false
|
||||||
|
|
||||||
|
if ((classof node) == nel_pacs_box) then
|
||||||
|
return false
|
||||||
|
|
||||||
|
doNotExport = getappdata node NEL3D_APPDATA_DONOTEXPORT
|
||||||
|
if (doNotExport != undefined) then
|
||||||
|
(
|
||||||
|
if (doNotExport == "1") then
|
||||||
|
return false
|
||||||
|
)
|
||||||
|
return true
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
-- is this node flagged as a LodCharacter ??
|
||||||
|
fn isLodCharacter node =
|
||||||
|
(
|
||||||
|
isCLod = getappdata node NEL3D_APPDATA_CHARACTER_LOD
|
||||||
|
if (isCLod == undefined) then
|
||||||
|
return false
|
||||||
|
if (isCLod == "1") then
|
||||||
|
return true
|
||||||
|
return false
|
||||||
|
)
|
||||||
|
|
||||||
|
fn runNelMaxExport inputMaxFile =
|
||||||
|
(
|
||||||
|
tagThisFile = true
|
||||||
|
|
||||||
|
-- Unhide category
|
||||||
|
unhidelayers()
|
||||||
|
unhidecategory()
|
||||||
|
|
||||||
|
-- Unhide
|
||||||
|
max unhide all
|
||||||
|
|
||||||
|
-- unselect
|
||||||
|
max select none
|
||||||
|
clearSelection()
|
||||||
|
|
||||||
|
-- Exported object count
|
||||||
|
exported = 0
|
||||||
|
|
||||||
|
-- For each node
|
||||||
|
for node in geometry do
|
||||||
|
(
|
||||||
|
-- It is root ?
|
||||||
|
if (node.parent == undefined) then
|
||||||
|
(
|
||||||
|
-- Can be exported ?
|
||||||
|
if (isToBeExported node == true) then
|
||||||
|
(
|
||||||
|
-- Is a Lod character?
|
||||||
|
if ((isLodCharacter node) == true) then
|
||||||
|
(
|
||||||
|
-- Output directory
|
||||||
|
outputNelFile = ("%OutputDirectory%/" + (node.name) + ".clod")
|
||||||
|
|
||||||
|
-- Compare file date
|
||||||
|
if (NeLTestFileDate outputNelFile inputMaxFile) == true then
|
||||||
|
(
|
||||||
|
try
|
||||||
|
(
|
||||||
|
-- Export the shape
|
||||||
|
if (NelExportLodCharacter node outputNelFile false) == true then
|
||||||
|
(
|
||||||
|
nlerror("OK " + outputNelFile)
|
||||||
|
exported = exported+1
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
-- Error
|
||||||
|
nlerror("ERROR exporting .clod " + node.name + " in file " + inputMaxFile)
|
||||||
|
tagThisFile = false
|
||||||
|
)
|
||||||
|
)
|
||||||
|
catch
|
||||||
|
(
|
||||||
|
-- Error
|
||||||
|
nlerror("ERROR fatal error exporting .clod " + node.name + " in file " + inputMaxFile)
|
||||||
|
tagThisFile = false
|
||||||
|
)
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
-- Error
|
||||||
|
nlerror("SKIPPED " + outputNelFile)
|
||||||
|
exported = exported + 1
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
-- Something exported
|
||||||
|
if (exported == 0) then
|
||||||
|
(
|
||||||
|
-- Error
|
||||||
|
nlerror ("WARNING no .clod exported from the file " + inputMaxFile)
|
||||||
|
)
|
||||||
|
|
||||||
|
return tagThisFile
|
||||||
|
)
|
||||||
|
|
60
code/nel/tools/build_gamedata_linux/generators/max_exporter_scripts/cmb.ms
Executable file
60
code/nel/tools/build_gamedata_linux/generators/max_exporter_scripts/cmb.ms
Executable file
|
@ -0,0 +1,60 @@
|
||||||
|
|
||||||
|
|
||||||
|
NEL3D_APPDATA_COLLISION = 1423062613
|
||||||
|
NEL3D_APPDATA_COLLISION_EXTERIOR = 1423062614
|
||||||
|
|
||||||
|
|
||||||
|
-- Must export this node ?
|
||||||
|
fn isToBeExported node =
|
||||||
|
(
|
||||||
|
doNotExport = getappdata node NEL3D_APPDATA_COLLISION
|
||||||
|
if (doNotExport != undefined) then
|
||||||
|
(
|
||||||
|
if (doNotExport == "1") then
|
||||||
|
return true
|
||||||
|
)
|
||||||
|
|
||||||
|
doNotExport = getappdata node NEL3D_APPDATA_COLLISION_EXTERIOR
|
||||||
|
if (doNotExport != undefined) then
|
||||||
|
(
|
||||||
|
if (doNotExport == "1") then
|
||||||
|
return true
|
||||||
|
)
|
||||||
|
|
||||||
|
return false
|
||||||
|
)
|
||||||
|
|
||||||
|
fn runNelMaxExport inputMaxFile =
|
||||||
|
(
|
||||||
|
outputNelDir = "%OutputDirectory%"
|
||||||
|
|
||||||
|
-- Tag this file ?
|
||||||
|
tagThisFile = true
|
||||||
|
|
||||||
|
-- Unhide category
|
||||||
|
unhidecategory()
|
||||||
|
|
||||||
|
-- Select all collision mesh
|
||||||
|
max select none
|
||||||
|
clearSelection()
|
||||||
|
for m in geometry do
|
||||||
|
(
|
||||||
|
if (isToBeExported m) == true then
|
||||||
|
selectmore m
|
||||||
|
)
|
||||||
|
|
||||||
|
-- Export the collision
|
||||||
|
if (NelExportCollision ($selection as array) outputNelDir) == false then
|
||||||
|
(
|
||||||
|
nlerror("ERROR exporting collision " + inputMaxFile)
|
||||||
|
tagThisFile = false
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
nlerror("OK collision in folder " + outputNelDir)
|
||||||
|
)
|
||||||
|
|
||||||
|
return tagThisFile
|
||||||
|
)
|
||||||
|
|
||||||
|
|
175
code/nel/tools/build_gamedata_linux/generators/max_exporter_scripts/ig.ms
Executable file
175
code/nel/tools/build_gamedata_linux/generators/max_exporter_scripts/ig.ms
Executable file
|
@ -0,0 +1,175 @@
|
||||||
|
|
||||||
|
|
||||||
|
-- Some globals
|
||||||
|
|
||||||
|
NEL3D_APPDATA_ACCEL = 1423062561 -- type of accelerator : "32" = is not an accelerator and IS clusterized
|
||||||
|
-- "0" = is not an accelerator and IS NOT clusterized (always visible)
|
||||||
|
-- "1" = is an accelerator type PORTAL
|
||||||
|
-- "2" = is an accelerator type CLUSTER
|
||||||
|
-- "6" = is an accelerator type CLUSTER FATHER-VISIBLE
|
||||||
|
-- "10" = is an accelerator type CLUSTER VISIBLE-FROM-FATHER
|
||||||
|
-- "14" = is an accelerator type CLUSTER FATHER-VISIBLE and VISIBLE-FROM-FATHER
|
||||||
|
-- "17" = is an accelerator type PORTAL DYNAMIC
|
||||||
|
|
||||||
|
NEL3D_APPDATA_DONOTEXPORT = 1423062565 -- do not export me : "undefined" = export me
|
||||||
|
-- "0" = export me
|
||||||
|
-- "1" = DONT export me
|
||||||
|
|
||||||
|
NEL3D_APPDATA_IGNAME = 1423062564 -- string : name of the Instance Group
|
||||||
|
|
||||||
|
NEL3D_APPDATA_LOD_NAME_COUNT_MAX = 10
|
||||||
|
NEL3D_APPDATA_LOD = 1423062537
|
||||||
|
NEL3D_APPDATA_LOD_NAME_COUNT = NEL3D_APPDATA_LOD
|
||||||
|
NEL3D_APPDATA_LOD_NAME = NEL3D_APPDATA_LOD_NAME_COUNT+1
|
||||||
|
NEL3D_APPDATA_LOD_BLEND_IN = NEL3D_APPDATA_LOD_NAME+NEL3D_APPDATA_LOD_NAME_COUNT_MAX
|
||||||
|
NEL3D_APPDATA_LOD_BLEND_OUT = NEL3D_APPDATA_LOD_BLEND_IN+1
|
||||||
|
NEL3D_APPDATA_LOD_COARSE_MESH = NEL3D_APPDATA_LOD_BLEND_OUT+1
|
||||||
|
|
||||||
|
NEL_OBJECT_NAME_DATA = 1970
|
||||||
|
|
||||||
|
|
||||||
|
-- This node is n accelerator ?
|
||||||
|
fn isAccelerator node =
|
||||||
|
(
|
||||||
|
accel = getappdata node NEL3D_APPDATA_ACCEL
|
||||||
|
if (accel != undefined) then
|
||||||
|
(
|
||||||
|
if (accel == "0") or (accel == "32") then
|
||||||
|
return false
|
||||||
|
else
|
||||||
|
return true
|
||||||
|
)
|
||||||
|
return false
|
||||||
|
)
|
||||||
|
|
||||||
|
-- Get the ig name of this object
|
||||||
|
fn getIg node =
|
||||||
|
(
|
||||||
|
return (getappdata node NEL3D_APPDATA_IGNAME)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
fn runNelMaxExport inputMaxFile =
|
||||||
|
(
|
||||||
|
tagThisFile = true
|
||||||
|
|
||||||
|
-- Unhide category
|
||||||
|
unhidelayers()
|
||||||
|
unhidecategory()
|
||||||
|
|
||||||
|
-- Unhide
|
||||||
|
max unhide all
|
||||||
|
|
||||||
|
-- unselect
|
||||||
|
max select none
|
||||||
|
clearSelection()
|
||||||
|
|
||||||
|
-- Exported object count
|
||||||
|
exported = 0
|
||||||
|
|
||||||
|
-- Ig array
|
||||||
|
ig_array = #()
|
||||||
|
|
||||||
|
-- Scan all the ig in this project
|
||||||
|
for node in objects do
|
||||||
|
(
|
||||||
|
ig = getIg node
|
||||||
|
if ( (ig != undefined) and (ig != "") ) then
|
||||||
|
(
|
||||||
|
-- Found ?
|
||||||
|
found = false
|
||||||
|
|
||||||
|
-- Already found ?
|
||||||
|
for j = 1 to ig_array.count do
|
||||||
|
(
|
||||||
|
if (ig_array[j]==ig) then
|
||||||
|
(
|
||||||
|
found = true
|
||||||
|
exit
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
-- Found ?
|
||||||
|
if (found == false) then
|
||||||
|
(
|
||||||
|
append ig_array ig
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
-- Have some ig ?
|
||||||
|
if (ig_array.count != 0) then
|
||||||
|
(
|
||||||
|
-- For each ig
|
||||||
|
for ig = 1 to ig_array.count do
|
||||||
|
(
|
||||||
|
-- Output filename
|
||||||
|
outputNelFile = ("%OutputDirectory%/" + ig_array[ig] + ".ig")
|
||||||
|
|
||||||
|
-- Check date
|
||||||
|
if (NeLTestFileDate outputNelFile inputMaxFile) == true then
|
||||||
|
(
|
||||||
|
-- Select none
|
||||||
|
max select none
|
||||||
|
clearSelection()
|
||||||
|
|
||||||
|
-- Select all node in this ig
|
||||||
|
for node in geometry do
|
||||||
|
(
|
||||||
|
-- Select it if in the ig
|
||||||
|
if ((getIg node) == ig_array[ig]) then
|
||||||
|
selectmore node
|
||||||
|
)
|
||||||
|
-- Select all lights in this ig
|
||||||
|
for node in lights do
|
||||||
|
(
|
||||||
|
-- Select it if in the ig
|
||||||
|
if ((getIg node) == ig_array[ig]) then
|
||||||
|
selectmore node
|
||||||
|
)
|
||||||
|
-- Select all lights in this ig
|
||||||
|
for node in helpers do
|
||||||
|
(
|
||||||
|
-- Select it if in the ig
|
||||||
|
if ((getIg node) == ig_array[ig]) then
|
||||||
|
selectmore node
|
||||||
|
)
|
||||||
|
|
||||||
|
-- Check export
|
||||||
|
try
|
||||||
|
(
|
||||||
|
-- Export the ig
|
||||||
|
instancegroup2export = $selection as array
|
||||||
|
if (NelExportInstanceGroup instancegroup2export outputNelFile) == true then
|
||||||
|
(
|
||||||
|
nlerror("OK " + outputNelFile)
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
-- Error
|
||||||
|
nlerror("ERROR exporting ig " + ig_array[ig] + " in file " + inputMaxFile)
|
||||||
|
tagThisFile = false
|
||||||
|
)
|
||||||
|
)
|
||||||
|
catch
|
||||||
|
(
|
||||||
|
-- Error
|
||||||
|
nlerror("ERROR fatal error exporting ig " + ig_array[ig] + " in file " + inputMaxFile)
|
||||||
|
tagThisFile = false
|
||||||
|
)
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
nlerror("SKIPPED " + outputNelFile)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
-- Error
|
||||||
|
nlerror("WARNING nothing exported from ig max file " + inputMaxFile)
|
||||||
|
)
|
||||||
|
|
||||||
|
return tagThisFile
|
||||||
|
)
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
|
||||||
|
|
||||||
|
fn runNelMaxExport inputMaxFile =
|
||||||
|
(
|
||||||
|
outputNelFile = ("%OutputDirectory%/" + (getFilenameFile inputMaxFile) + ".%PreGenFileExtension%")
|
||||||
|
tagThisFile = false
|
||||||
|
|
||||||
|
-- Unhide category
|
||||||
|
unhidecategory()
|
||||||
|
|
||||||
|
-- Select none
|
||||||
|
max select none
|
||||||
|
clearSelection()
|
||||||
|
|
||||||
|
-- Select all PACS primitives
|
||||||
|
for i in geometry do
|
||||||
|
(
|
||||||
|
if ((classof i) == nel_pacs_cylinder) or ((classof i) == nel_pacs_box) then
|
||||||
|
selectmore i
|
||||||
|
)
|
||||||
|
|
||||||
|
-- Array of node
|
||||||
|
arrayNode = selection as array
|
||||||
|
|
||||||
|
-- Something to export ?
|
||||||
|
if (arrayNode.count != 0) then
|
||||||
|
(
|
||||||
|
-- Export the collision
|
||||||
|
if (NelExportPACSPrimitives arrayNode outputNelFile) == false then
|
||||||
|
(
|
||||||
|
nlerror("ERROR exporting PACS primitives in file " + inputMaxFile)
|
||||||
|
tagThisFile = false
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
nlerror("OK PACS primitives in file " + inputMaxFile)
|
||||||
|
tagThisFile = true
|
||||||
|
)
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
nlerror("WARNING no PACS primitives in file " + inputMaxFile)
|
||||||
|
tagThisFile = true
|
||||||
|
)
|
||||||
|
|
||||||
|
return tagThisFile
|
||||||
|
)
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
|
||||||
|
|
||||||
|
# Remove bad file from previous script version
|
||||||
|
listPath = ExportBuildDirectory + "/" + %PreGenExportDirectoryVariable% + "/landscape_col_prim_pacs_list.txt"
|
||||||
|
if os.path.isfile(listPath):
|
||||||
|
os.remove(listPath)
|
||||||
|
|
392
code/nel/tools/build_gamedata_linux/generators/max_exporter_scripts/shape.ms
Executable file
392
code/nel/tools/build_gamedata_linux/generators/max_exporter_scripts/shape.ms
Executable file
|
@ -0,0 +1,392 @@
|
||||||
|
|
||||||
|
|
||||||
|
-- Some globals
|
||||||
|
|
||||||
|
NEL3D_APPDATA_ACCEL = 1423062561 -- type of accelerator : "32" = is not an accelerator and IS clusterized
|
||||||
|
-- "0" = is not an accelerator and IS NOT clusterized (always visible)
|
||||||
|
-- "1" = is an accelerator type PORTAL
|
||||||
|
-- "2" = is an accelerator type CLUSTER
|
||||||
|
-- "6" = is an accelerator type CLUSTER FATHER-VISIBLE
|
||||||
|
-- "10" = is an accelerator type CLUSTER VISIBLE-FROM-FATHER
|
||||||
|
-- "14" = is an accelerator type CLUSTER FATHER-VISIBLE and VISIBLE-FROM-FATHER
|
||||||
|
-- "17" = is an accelerator type PORTAL DYNAMIC
|
||||||
|
|
||||||
|
NEL3D_APPDATA_DONOTEXPORT = 1423062565 -- do not export me : "undefined" = export me
|
||||||
|
-- "0" = export me
|
||||||
|
-- "1" = DONT export me
|
||||||
|
|
||||||
|
NEL3D_APPDATA_LOD_NAME_COUNT_MAX = 10
|
||||||
|
NEL3D_APPDATA_LOD = 1423062537
|
||||||
|
NEL3D_APPDATA_LOD_NAME_COUNT = NEL3D_APPDATA_LOD
|
||||||
|
NEL3D_APPDATA_LOD_NAME = NEL3D_APPDATA_LOD_NAME_COUNT+1
|
||||||
|
NEL3D_APPDATA_LOD_BLEND_IN = NEL3D_APPDATA_LOD_NAME+NEL3D_APPDATA_LOD_NAME_COUNT_MAX
|
||||||
|
NEL3D_APPDATA_LOD_BLEND_OUT = NEL3D_APPDATA_LOD_BLEND_IN+1
|
||||||
|
NEL3D_APPDATA_LOD_COARSE_MESH = NEL3D_APPDATA_LOD_BLEND_OUT+1
|
||||||
|
NEL3D_APPDATA_COLLISION = 1423062613
|
||||||
|
NEL3D_APPDATA_COLLISION_EXTERIOR = 1423062614
|
||||||
|
NEL3D_APPDATA_AUTOMATIC_ANIMATION = 1423062617
|
||||||
|
|
||||||
|
-- This node is n accelerator ?
|
||||||
|
fn isAccelerator node =
|
||||||
|
(
|
||||||
|
accel = getappdata node NEL3D_APPDATA_ACCEL
|
||||||
|
if (accel != undefined) then
|
||||||
|
(
|
||||||
|
if (accel == "0") or (accel == "32") then
|
||||||
|
return false
|
||||||
|
else
|
||||||
|
return true
|
||||||
|
)
|
||||||
|
return false
|
||||||
|
)
|
||||||
|
|
||||||
|
-- Must export this node ?
|
||||||
|
fn isToBeExported node =
|
||||||
|
(
|
||||||
|
if (isAccelerator node) == true then
|
||||||
|
return false
|
||||||
|
|
||||||
|
if ((classof node) == RklPatch) then
|
||||||
|
return false
|
||||||
|
|
||||||
|
if ((classof node) == nel_ps) then
|
||||||
|
return false
|
||||||
|
|
||||||
|
if ((classof node) == nel_pacs_cylinder) then
|
||||||
|
return false
|
||||||
|
|
||||||
|
if ((classof node) == nel_pacs_box) then
|
||||||
|
return false
|
||||||
|
|
||||||
|
doNotExport = getappdata node NEL3D_APPDATA_DONOTEXPORT
|
||||||
|
if (doNotExport != undefined) then
|
||||||
|
(
|
||||||
|
if (doNotExport == "1") then
|
||||||
|
return false
|
||||||
|
)
|
||||||
|
|
||||||
|
doNotExport = getappdata node NEL3D_APPDATA_COLLISION
|
||||||
|
if (doNotExport != undefined) then
|
||||||
|
(
|
||||||
|
if (doNotExport == "1") then
|
||||||
|
return false
|
||||||
|
)
|
||||||
|
|
||||||
|
doNotExport = getappdata node NEL3D_APPDATA_COLLISION_EXTERIOR
|
||||||
|
if (doNotExport != undefined) then
|
||||||
|
(
|
||||||
|
if (doNotExport == "1") then
|
||||||
|
return false
|
||||||
|
)
|
||||||
|
|
||||||
|
return true
|
||||||
|
)
|
||||||
|
|
||||||
|
-- Must export this node ?
|
||||||
|
fn isAnimToBeExported node =
|
||||||
|
(
|
||||||
|
automaticAnimation = getappdata node NEL3D_APPDATA_AUTOMATIC_ANIMATION
|
||||||
|
if (automaticAnimation == undefined) then
|
||||||
|
return false
|
||||||
|
if (automaticAnimation == "0") then
|
||||||
|
return false
|
||||||
|
|
||||||
|
if (isAccelerator node) == true then
|
||||||
|
return false
|
||||||
|
|
||||||
|
if ((classof node) == nel_pacs_cylinder) then
|
||||||
|
return false
|
||||||
|
|
||||||
|
if ((classof node) == nel_pacs_box) then
|
||||||
|
return false
|
||||||
|
|
||||||
|
doNotExport = getappdata node NEL3D_APPDATA_DONOTEXPORT
|
||||||
|
if (doNotExport != undefined) then
|
||||||
|
(
|
||||||
|
if (doNotExport == "1") then
|
||||||
|
return false
|
||||||
|
)
|
||||||
|
|
||||||
|
doNotExport = getappdata node NEL3D_APPDATA_COLLISION
|
||||||
|
if (doNotExport != undefined) then
|
||||||
|
(
|
||||||
|
if (doNotExport == "1") then
|
||||||
|
return false
|
||||||
|
)
|
||||||
|
|
||||||
|
doNotExport = getappdata node NEL3D_APPDATA_COLLISION_EXTERIOR
|
||||||
|
if (doNotExport != undefined) then
|
||||||
|
(
|
||||||
|
if (doNotExport == "1") then
|
||||||
|
return false
|
||||||
|
)
|
||||||
|
|
||||||
|
return true
|
||||||
|
)
|
||||||
|
|
||||||
|
-- Cast shadow ?
|
||||||
|
fn isCastShadow node =
|
||||||
|
(
|
||||||
|
if (classof node == nel_ps) then
|
||||||
|
return false
|
||||||
|
|
||||||
|
if (isAccelerator node) == true then
|
||||||
|
(
|
||||||
|
return false
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
return true
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
-- List the lod
|
||||||
|
lod_array = #()
|
||||||
|
|
||||||
|
-- is a lod ?
|
||||||
|
fn isLod node =
|
||||||
|
(
|
||||||
|
for i = 1 to lod_array.count do
|
||||||
|
(
|
||||||
|
if (lod_array[i] == node) then
|
||||||
|
return true
|
||||||
|
)
|
||||||
|
return false
|
||||||
|
)
|
||||||
|
|
||||||
|
-- have a coarse mesh ?
|
||||||
|
fn haveCoarseMesh node =
|
||||||
|
(
|
||||||
|
-- Get lod count
|
||||||
|
nodeCount = getappdata node NEL3D_APPDATA_LOD_NAME_COUNT
|
||||||
|
if (nodeCount != undefined) then
|
||||||
|
(
|
||||||
|
-- For each lod
|
||||||
|
nodeCountNum = nodeCount as Integer
|
||||||
|
for lod = 1 to nodeCountNum do
|
||||||
|
(
|
||||||
|
-- Get the lod
|
||||||
|
lod = getappdata node (NEL3D_APPDATA_LOD_NAME+lod-1)
|
||||||
|
|
||||||
|
-- Exist ?
|
||||||
|
if (lod != undefined) then
|
||||||
|
(
|
||||||
|
-- Select a node
|
||||||
|
nd = execute ("$'"+lod+"'")
|
||||||
|
|
||||||
|
-- Node exist ?
|
||||||
|
if (nd != undefined) then
|
||||||
|
(
|
||||||
|
-- Is a coarse mesh ?
|
||||||
|
if (getappdata nd NEL3D_APPDATA_LOD_COARSE_MESH == "1") then
|
||||||
|
return true
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return false
|
||||||
|
)
|
||||||
|
|
||||||
|
fn getRoot node = if isvalidnode node.parent then getRoot node.parent else node
|
||||||
|
|
||||||
|
fn runNelMaxExportSub inputMaxFile retryCount =
|
||||||
|
(
|
||||||
|
tagThisFile = false
|
||||||
|
|
||||||
|
-- Unhide category
|
||||||
|
unhidelayers()
|
||||||
|
unhidecategory()
|
||||||
|
|
||||||
|
-- Unhide
|
||||||
|
max unhide all
|
||||||
|
|
||||||
|
-- unselect
|
||||||
|
max select none
|
||||||
|
clearSelection()
|
||||||
|
|
||||||
|
-- Exported object count
|
||||||
|
exported = 0
|
||||||
|
|
||||||
|
-- Add the lod
|
||||||
|
for node in geometry do
|
||||||
|
(
|
||||||
|
-- Get lod count
|
||||||
|
nodeCount = getappdata node NEL3D_APPDATA_LOD_NAME_COUNT
|
||||||
|
if (nodeCount != undefined) then
|
||||||
|
(
|
||||||
|
-- For each lod
|
||||||
|
nodeCountNum = nodeCount as Integer
|
||||||
|
for lod = 1 to nodeCountNum do
|
||||||
|
(
|
||||||
|
-- Get the lod
|
||||||
|
lod = getappdata node (NEL3D_APPDATA_LOD_NAME+lod-1)
|
||||||
|
|
||||||
|
-- Exist ?
|
||||||
|
if (lod != undefined) then
|
||||||
|
(
|
||||||
|
-- Select a node
|
||||||
|
try
|
||||||
|
(
|
||||||
|
nd = execute("$'"+lod+"'")
|
||||||
|
)
|
||||||
|
catch
|
||||||
|
(
|
||||||
|
nlerror("Error in Execute $'"+lod+"' from node "+node.name)
|
||||||
|
nd = undefined
|
||||||
|
)
|
||||||
|
|
||||||
|
-- Node exist ?
|
||||||
|
if (nd != undefined) then
|
||||||
|
(
|
||||||
|
append lod_array nd
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
-- Select objects for shadows
|
||||||
|
for node in geometry do
|
||||||
|
(
|
||||||
|
if (node.parent == undefined) then
|
||||||
|
(
|
||||||
|
-- Cast shadow ?
|
||||||
|
if (isCastShadow node == true) then
|
||||||
|
(
|
||||||
|
-- Select this node
|
||||||
|
selectmore node
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
-- Tag this file ?
|
||||||
|
tagThisFile = true
|
||||||
|
|
||||||
|
-- Array of node to export
|
||||||
|
array_node = #()
|
||||||
|
|
||||||
|
-- Add geometry
|
||||||
|
for node in geometry do
|
||||||
|
append array_node node
|
||||||
|
|
||||||
|
-- Add shapes
|
||||||
|
for node in shapes do
|
||||||
|
append array_node node
|
||||||
|
|
||||||
|
-- For each node
|
||||||
|
for node in array_node do
|
||||||
|
(
|
||||||
|
-- Is not a skeleton ?
|
||||||
|
if (((substring node.name 1 3) != "Bip") and ((substring (getRoot node).name 1 3) != "Bip")) then
|
||||||
|
(
|
||||||
|
-- Can be exported ?
|
||||||
|
if (isToBeExported node == true) then
|
||||||
|
(
|
||||||
|
-- Not a lod ?
|
||||||
|
if ((isLod node) == false) then
|
||||||
|
(
|
||||||
|
-- Output directory
|
||||||
|
if (haveCoarseMesh node) == true then
|
||||||
|
output = ("%OutputDirectoryWithCoarseMesh%/" + (node.name) + ".shape")
|
||||||
|
else
|
||||||
|
output = ("%OutputDirectoryWithoutCoarseMesh%/" + (node.name) + ".shape")
|
||||||
|
|
||||||
|
-- Compare file date
|
||||||
|
if (NeLTestFileDate output inputMaxFile) == true then
|
||||||
|
(
|
||||||
|
try
|
||||||
|
(
|
||||||
|
-- Export the shape
|
||||||
|
if (NelExportShapeEx node output %ShapeExportOptShadow% %ShapeExportOptExportLighting% "%OutputDirectoryLightmap%" %ShapeExportOptLightingLimit% %ShapeExportOptLumelSize% %ShapeExportOptOversampling% true false %ShapeExportOptLightmapLog%) == true then
|
||||||
|
(
|
||||||
|
nlerror("OK "+output)
|
||||||
|
exported = exported +1
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
-- Error
|
||||||
|
nlerror("ERROR exporting shape " + node.name + " in file " + inputMaxFile)
|
||||||
|
tagThisFile = false
|
||||||
|
)
|
||||||
|
)
|
||||||
|
catch
|
||||||
|
(
|
||||||
|
-- Error
|
||||||
|
nlerror("ERROR fatal error exporting shape " + node.name + " in file " + inputMaxFile)
|
||||||
|
tagThisFile = false
|
||||||
|
)
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
nlerror("SKIPPED " + output)
|
||||||
|
exported = exported + 1
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
-- Export default animations
|
||||||
|
|
||||||
|
for node in objects do
|
||||||
|
(
|
||||||
|
-- Can export it ?
|
||||||
|
if (isAnimToBeExported node) == true then
|
||||||
|
(
|
||||||
|
-- Anim output directory
|
||||||
|
output = ("%OutputDirectoryAnim%/" + (node.name) + ".anim")
|
||||||
|
|
||||||
|
-- Export the animation
|
||||||
|
if (NelExportAnimation #(node) output false) == false then
|
||||||
|
(
|
||||||
|
nlerror ("ERROR exporting animation " + output)
|
||||||
|
tagThisFile = false
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
nlerror("OK " + output)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
-- Something exported
|
||||||
|
if exported == 0 then
|
||||||
|
(
|
||||||
|
-- Error
|
||||||
|
nlerror("WARNING no shape exported from the file " + inputMaxFile)
|
||||||
|
if tagThisFile then
|
||||||
|
(
|
||||||
|
if retryCount < 2 then
|
||||||
|
(
|
||||||
|
nlerror("INFO retry this file")
|
||||||
|
|
||||||
|
-- Free memory and file handles
|
||||||
|
gc()
|
||||||
|
heapfree
|
||||||
|
|
||||||
|
-- Reset 3dsmax
|
||||||
|
resetMAXFile #noprompt
|
||||||
|
|
||||||
|
if (loadMaxFile inputMaxFile quiet:true) == true then
|
||||||
|
(
|
||||||
|
tagThisFile = runNelMaxExportSub inputMaxFile (retryCount + 1)
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
-- Error
|
||||||
|
nlerror("ERROR exporting '%PreGenFileExtension%': can't open the file " + inputMaxFile)
|
||||||
|
nlerror("FAIL Mysterious error occured")
|
||||||
|
NelForceQuitRightNow()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
return tagThisFile
|
||||||
|
)
|
||||||
|
|
||||||
|
fn runNelMaxExport inputMaxFile =
|
||||||
|
(
|
||||||
|
return runNelMaxExportSub inputMaxFile 0
|
||||||
|
)
|
||||||
|
|
53
code/nel/tools/build_gamedata_linux/generators/max_exporter_scripts/skel.ms
Executable file
53
code/nel/tools/build_gamedata_linux/generators/max_exporter_scripts/skel.ms
Executable file
|
@ -0,0 +1,53 @@
|
||||||
|
|
||||||
|
|
||||||
|
fn runNelMaxExport inputMaxFile =
|
||||||
|
(
|
||||||
|
outputNelFile = ("%OutputDirectory%/" + (getFilenameFile inputMaxFile) + ".%PreGenFileExtension%")
|
||||||
|
tagThisFile = false
|
||||||
|
|
||||||
|
-- Unhide category
|
||||||
|
unhidecategory()
|
||||||
|
|
||||||
|
-- Select Bip01, not very smart
|
||||||
|
if $Bip01 != undefined then
|
||||||
|
(
|
||||||
|
-- Select Bip01
|
||||||
|
select $Bip01
|
||||||
|
|
||||||
|
if ($ != undefined) then
|
||||||
|
(
|
||||||
|
-- Set figure mode on
|
||||||
|
if ((classof $) == Biped_Object) then
|
||||||
|
(
|
||||||
|
$.controller.figureMode = true
|
||||||
|
)
|
||||||
|
|
||||||
|
-- Export the skeleton template
|
||||||
|
if (NelExportSkeleton $ outputNelFile) == false then
|
||||||
|
(
|
||||||
|
nlerror("ERROR exporting skeleton " + inputMaxFile)
|
||||||
|
tagThisFile = false
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
nlerror("OK " + outputNelFile)
|
||||||
|
tagThisFile = true
|
||||||
|
)
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
-- Error
|
||||||
|
nlerror("ERROR exporting skeleton: no Bip01 node in file " + inputMaxFile)
|
||||||
|
tagThisFile = false
|
||||||
|
)
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
-- Error
|
||||||
|
nlerror("ERROR exporting skeleton: no Bip01 node in file " + inputMaxFile)
|
||||||
|
tagThisFile = false
|
||||||
|
)
|
||||||
|
|
||||||
|
return tagThisFile
|
||||||
|
)
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
|
||||||
|
|
||||||
|
printLog(log, ">>> Export skel directly <<<")
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + SkelExportDirectory)
|
||||||
|
for dir in SkelSourceDirectories:
|
||||||
|
mkPath(log, DatabaseDirectory + "/" + dir)
|
||||||
|
copyFilesExtNoSubdirIfNeeded(log, DatabaseDirectory + "/" + dir, ExportBuildDirectory + "/" + SkelExportDirectory, ".skel")
|
||||||
|
|
28
code/nel/tools/build_gamedata_linux/generators/max_exporter_scripts/swt.ms
Executable file
28
code/nel/tools/build_gamedata_linux/generators/max_exporter_scripts/swt.ms
Executable file
|
@ -0,0 +1,28 @@
|
||||||
|
|
||||||
|
|
||||||
|
fn runNelMaxExport inputMaxFile =
|
||||||
|
(
|
||||||
|
outputNelFile = ("%OutputDirectory%/" + (getFilenameFile inputMaxFile) + ".%PreGenFileExtension%")
|
||||||
|
tagThisFile = false
|
||||||
|
|
||||||
|
-- Unhide category
|
||||||
|
unhidecategory()
|
||||||
|
|
||||||
|
-- Select all the nodes
|
||||||
|
max select all
|
||||||
|
|
||||||
|
-- Export the skeleton template
|
||||||
|
if NelExportSkeletonWeight ($selection as array) outputNelFile == false then
|
||||||
|
(
|
||||||
|
nlerror("ERROR exporting skeleton weight " + inputMaxFile)
|
||||||
|
tagThisFile = false
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
nlerror("OK " + outputNelFile)
|
||||||
|
tagThisFile = true
|
||||||
|
)
|
||||||
|
|
||||||
|
return tagThisFile
|
||||||
|
)
|
||||||
|
|
115
code/nel/tools/build_gamedata_linux/generators/max_exporter_scripts/veget.ms
Executable file
115
code/nel/tools/build_gamedata_linux/generators/max_exporter_scripts/veget.ms
Executable file
|
@ -0,0 +1,115 @@
|
||||||
|
|
||||||
|
|
||||||
|
-- Some globals
|
||||||
|
|
||||||
|
NEL3D_APPDATA_DONOTEXPORT = 1423062565 -- do not export me : "undefined" = export me
|
||||||
|
-- "0" = export me
|
||||||
|
-- "1" = DONT export me
|
||||||
|
|
||||||
|
NEL3D_APPDATA_VEGETABLE = 1423062580 -- "undefined" = not vegetable
|
||||||
|
-- "0" = not vegetable
|
||||||
|
-- "1" = vegetable
|
||||||
|
|
||||||
|
|
||||||
|
-- Must export this node ?
|
||||||
|
fn isToBeExported node =
|
||||||
|
(
|
||||||
|
if (classof node == nel_ps) then
|
||||||
|
return false
|
||||||
|
|
||||||
|
doNotExport = getappdata node NEL3D_APPDATA_DONOTEXPORT
|
||||||
|
if (doNotExport != undefined) then
|
||||||
|
(
|
||||||
|
if (doNotExport == "1") then
|
||||||
|
return false
|
||||||
|
)
|
||||||
|
|
||||||
|
vegetable = getappdata node NEL3D_APPDATA_VEGETABLE
|
||||||
|
if (vegetable != undefined) then
|
||||||
|
if (vegetable == "1") then
|
||||||
|
return true
|
||||||
|
|
||||||
|
-- Do not export
|
||||||
|
return false
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
fn runNelMaxExport inputMaxFile =
|
||||||
|
(
|
||||||
|
tagThisFile = true
|
||||||
|
|
||||||
|
-- Unhide category
|
||||||
|
unhidelayers()
|
||||||
|
unhidecategory()
|
||||||
|
|
||||||
|
-- Unhide
|
||||||
|
max unhide all
|
||||||
|
|
||||||
|
-- unselect
|
||||||
|
max select none
|
||||||
|
clearSelection()
|
||||||
|
|
||||||
|
-- Exported object count
|
||||||
|
exported = 0
|
||||||
|
|
||||||
|
-- For each node
|
||||||
|
for node in geometry do
|
||||||
|
(
|
||||||
|
-- It is root ?
|
||||||
|
if (node.parent == undefined) then
|
||||||
|
(
|
||||||
|
-- Is not a skeleton ?
|
||||||
|
if (node.name != "Bip01") then
|
||||||
|
(
|
||||||
|
-- Can be exported ?
|
||||||
|
if (isToBeExported node == true) then
|
||||||
|
(
|
||||||
|
-- Output directory
|
||||||
|
outputNelFile = ("%OutputDirectory%/" + (node.name) + ".veget")
|
||||||
|
|
||||||
|
-- Compare file date
|
||||||
|
if (NeLTestFileDate outputNelFile inputMaxFile) == true then
|
||||||
|
(
|
||||||
|
try
|
||||||
|
(
|
||||||
|
-- Export the veget
|
||||||
|
if (NelExportVegetable node outputNelFile false) == true then
|
||||||
|
(
|
||||||
|
nlerror("OK "+outputNelFile)
|
||||||
|
exported = exported+1
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
-- Error
|
||||||
|
nlerror("ERROR exporting veget " + node.name + " in file " + inputMaxFile)
|
||||||
|
tagThisFile = false
|
||||||
|
)
|
||||||
|
)
|
||||||
|
catch
|
||||||
|
(
|
||||||
|
-- Error
|
||||||
|
nlerror("ERROR fata error exporting veget " + node.name + " in file " + inputMaxFile)
|
||||||
|
tagThisFile = false
|
||||||
|
)
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
-- Error
|
||||||
|
nlerror("SKIPPED " + outputNelFile)
|
||||||
|
exported = exported + 1
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
-- Something exported
|
||||||
|
if exported == 0 then
|
||||||
|
(
|
||||||
|
-- Error
|
||||||
|
nlerror("WARNING no veget exported from the file " + inputMaxFile)
|
||||||
|
)
|
||||||
|
|
||||||
|
return tagThisFile
|
||||||
|
)
|
||||||
|
|
87
code/nel/tools/build_gamedata_linux/generators/max_exporter_scripts/zone.ms
Executable file
87
code/nel/tools/build_gamedata_linux/generators/max_exporter_scripts/zone.ms
Executable file
|
@ -0,0 +1,87 @@
|
||||||
|
|
||||||
|
|
||||||
|
-- Find id
|
||||||
|
Fn findID node =
|
||||||
|
(
|
||||||
|
local
|
||||||
|
|
||||||
|
-- Const
|
||||||
|
alphabet="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||||
|
NameTab = filterString node.name "_"
|
||||||
|
Z_ID = -1
|
||||||
|
alpha_letter1 = NameTab[2][1]
|
||||||
|
alpha_letter2 = NameTab[2][2]
|
||||||
|
alpha_letter1_value = findstring alphabet alpha_letter1
|
||||||
|
alpha_letter2_value = findstring alphabet alpha_letter2
|
||||||
|
|
||||||
|
-- Decompose theh name in an array array[1]=numeric string value array[2]=alpha string value
|
||||||
|
-- The index of the engine start at 0 but the script one at 1 so we sub 1 each time
|
||||||
|
alpha_sub_id = (((alpha_letter1_value as integer - 1) * 26 + (alpha_letter2_value as integer)))-1
|
||||||
|
num_sub_id = (NameTab[1] as integer)-1
|
||||||
|
|
||||||
|
-- Array of 256 per 256
|
||||||
|
---------------------------
|
||||||
|
-- 0 1 2 3 ... 255
|
||||||
|
-- 256 257 258 259 ... 511
|
||||||
|
-- 512 513 514 515 ... 767
|
||||||
|
-- ...
|
||||||
|
|
||||||
|
Z_ID = num_sub_id*256 + alpha_sub_id
|
||||||
|
return Z_ID
|
||||||
|
)
|
||||||
|
|
||||||
|
fn runNelMaxExport inputMaxFile =
|
||||||
|
(
|
||||||
|
outputNelFile = ("%OutputDirectory%/" + (getFilenameFile inputMaxFile) + ".%PreGenFileExtension%")
|
||||||
|
tagThisFile = false
|
||||||
|
|
||||||
|
-- Unhide category
|
||||||
|
unhidecategory()
|
||||||
|
|
||||||
|
-- Select none
|
||||||
|
max select none
|
||||||
|
clearSelection()
|
||||||
|
|
||||||
|
-- Found it ?
|
||||||
|
find = false
|
||||||
|
|
||||||
|
-- For each object in the priject
|
||||||
|
for i in geometry do
|
||||||
|
(
|
||||||
|
-- Look for a NeL patch mesh
|
||||||
|
if (classof i) == RklPatch then
|
||||||
|
(
|
||||||
|
-- Error catching
|
||||||
|
try
|
||||||
|
(
|
||||||
|
if (ExportRykolZone i outputNelFile (findID i)) == false then
|
||||||
|
(
|
||||||
|
nlerror("ERROR exporting zone " + i.name + " in file " + inputMaxFile)
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
nlerror("OK " + outputNelFile)
|
||||||
|
tagThisFile = true
|
||||||
|
find = true
|
||||||
|
exit
|
||||||
|
)
|
||||||
|
)
|
||||||
|
catch
|
||||||
|
(
|
||||||
|
-- Error
|
||||||
|
nlerror("ERROR fatal error exporting zone " + i.name + " in file " + inputMaxFile)
|
||||||
|
tagThisFile = false
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
-- Not found ?
|
||||||
|
if (find == false) then
|
||||||
|
(
|
||||||
|
-- Error
|
||||||
|
nlerror("WARNING no zone found in project " + inputMaxFile)
|
||||||
|
tagThisFile = true
|
||||||
|
)
|
||||||
|
|
||||||
|
return tagThisFile
|
||||||
|
)
|
|
@ -0,0 +1,8 @@
|
||||||
|
|
||||||
|
|
||||||
|
printLog(log, ">>> Try to copy ligo zone if any <<<")
|
||||||
|
printLog(log, "********************************")
|
||||||
|
printLog(log, "******** TODO ********")
|
||||||
|
printLog(log, "********************************")
|
||||||
|
printLog(log, "")
|
||||||
|
|
|
@ -0,0 +1,65 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 0_setup.py
|
||||||
|
# \brief setup %PreGenProcessName%
|
||||||
|
# \date %PreGenDateTimeStamp%
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Setup %PreGenProcessName%
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Setup %PreGenProcessName%")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# Setup source directories
|
||||||
|
printLog(log, ">>> Setup source directories <<<")
|
||||||
|
for dir in %PreGenSourceDirectoriesVariable%:
|
||||||
|
mkPath(log, DatabaseDirectory + "/" + dir)
|
||||||
|
|
||||||
|
# Setup export directories
|
||||||
|
printLog(log, ">>> Setup export directories <<<")
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + %PreGenExportDirectoryVariable%)
|
||||||
|
|
||||||
|
# Setup build directories
|
||||||
|
printLog(log, ">>> Setup build directories <<<")
|
||||||
|
|
||||||
|
# Setup client directories
|
||||||
|
printLog(log, ">>> Setup client directories <<<")
|
||||||
|
mkPath(log, InstallDirectory + "/" + %PreGenInstallDirectoryVariable%)
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
|
@ -0,0 +1,7 @@
|
||||||
|
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
|
@ -0,0 +1,92 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# #################################################################
|
||||||
|
# ## %PreGenWarning%
|
||||||
|
# #################################################################
|
||||||
|
#
|
||||||
|
# \file 1_export.py
|
||||||
|
# \brief Export %PreGenProcessName%
|
||||||
|
# \date %PreGenDateTimeStamp%
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Export %PreGenProcessName%
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Export %PreGenProcessName%")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# Find tools
|
||||||
|
# ...
|
||||||
|
|
||||||
|
# Export %PreGenProcessName% 3dsmax
|
||||||
|
if MaxAvailable:
|
||||||
|
# Find tools
|
||||||
|
Max = findMax(log, MaxDirectory, MaxExecutable)
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
printLog(log, ">>> Export %PreGenProcessName% 3dsmax <<<")
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + %PreGenExportDirectoryVariable%)
|
||||||
|
for dir in %PreGenSourceDirectoriesVariable%:
|
||||||
|
mkPath(log, DatabaseDirectory + "/" + dir)
|
||||||
|
if (needUpdateDirByTagLog(log, DatabaseDirectory + "/" + dir, ".max", ExportBuildDirectory + "/" + %PreGenExportDirectoryVariable%, ".%PreGenFileExtension%")):
|
||||||
|
scriptSrc = "maxscript/%PreGenFileExtension%_export.ms"
|
||||||
|
scriptDst = MaxUserDirectory + "/scripts/%PreGenFileExtension%_export.ms"
|
||||||
|
outputLogfile = ScriptDirectory + "/processes/%PreGenProcessName%/log.log"
|
||||||
|
outputDirectory = ExportBuildDirectory + "/" + %PreGenExportDirectoryVariable%
|
||||||
|
maxSourceDir = DatabaseDirectory + "/" + dir
|
||||||
|
tagList = findFiles(log, outputDirectory, "", ".%PreGenFileExtension%")
|
||||||
|
tagLen = len(tagList)
|
||||||
|
if os.path.isfile(scriptDst):
|
||||||
|
os.remove(scriptDst)
|
||||||
|
tagDiff = 1
|
||||||
|
sSrc = open(scriptSrc, "r")
|
||||||
|
sDst = open(scriptDst, "w")
|
||||||
|
for line in sSrc:
|
||||||
|
newline = line.replace("%OutputLogfile%", outputLogfile)
|
||||||
|
newline = newline.replace("%MaxSourceDirectory%", maxSourceDir)
|
||||||
|
newline = newline.replace("%OutputDirectory%", outputDirectory)
|
||||||
|
sDst.write(newline)
|
||||||
|
sSrc.close()
|
||||||
|
sDst.close()
|
||||||
|
while tagDiff > 0:
|
||||||
|
printLog(log, "MAXSCRIPT " + scriptDst)
|
||||||
|
subprocess.call([ Max, "-U", "MAXScript", "%PreGenFileExtension%_export.ms", "-q", "-mi", "-mip" ])
|
||||||
|
tagList = findFiles(log, outputDirectory, "", ".%PreGenFileExtension%")
|
||||||
|
newTagLen = len(tagList)
|
||||||
|
tagDiff = newTagLen - tagLen
|
||||||
|
tagLen = newTagLen
|
||||||
|
printLog(log, "Exported " + str(tagDiff) + " .%PreGenFileExtension% files!")
|
||||||
|
os.remove(scriptDst)
|
||||||
|
|
|
@ -0,0 +1,49 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 2_build.py
|
||||||
|
# \brief Build %PreGenProcessName%
|
||||||
|
# \date %PreGenDateTimeStamp%
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Build %PreGenProcessName%
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Build %PreGenProcessName%")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
|
@ -0,0 +1,57 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 3_install.py
|
||||||
|
# \brief Install %PreGenProcessName%
|
||||||
|
# \date %PreGenDateTimeStamp%
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Install %PreGenProcessName%
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Install %PreGenProcessName%")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
printLog(log, ">>> Install %PreGenProcessName% <<<")
|
||||||
|
exportPath = ExportBuildDirectory + "/" + %PreGenExportDirectoryVariable%
|
||||||
|
mkPath(log, exportPath)
|
||||||
|
installPath = InstallDirectory + "/" + %PreGenInstallDirectoryVariable%
|
||||||
|
mkPath(log, installPath)
|
||||||
|
copyFilesExtNoSubdirIfNeeded(log, exportPath, installPath, ".%PreGenFileExtension%")
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
|
@ -0,0 +1,74 @@
|
||||||
|
|
||||||
|
|
||||||
|
try
|
||||||
|
(
|
||||||
|
-- Get files in the %MaxSourceDirectory% directory
|
||||||
|
files = getFiles "%MaxSourceDirectory%/*.max"
|
||||||
|
gc()
|
||||||
|
|
||||||
|
-- Sort files
|
||||||
|
sort files
|
||||||
|
gc()
|
||||||
|
|
||||||
|
-- No file ?
|
||||||
|
if files.count != 0 then
|
||||||
|
(
|
||||||
|
-- For each files
|
||||||
|
for i = 1 to files.count do
|
||||||
|
(
|
||||||
|
inputMaxFile = files[i]
|
||||||
|
outputNelFile = ("%OutputDirectory%/" + (getFilenameFile inputMaxFile) + ".%PreGenFileExtension%")
|
||||||
|
|
||||||
|
try
|
||||||
|
(
|
||||||
|
-- Compare file date
|
||||||
|
if (NeLTestFileDate outputNelFile inputMaxFile) == true then
|
||||||
|
(
|
||||||
|
-- Free memory and file handles
|
||||||
|
gc()
|
||||||
|
heapfree
|
||||||
|
|
||||||
|
-- Reset 3dsmax
|
||||||
|
resetMAXFile #noprompt
|
||||||
|
|
||||||
|
-- Open the max project
|
||||||
|
nlerror("Scanning file " + inputMaxFile + " ...")
|
||||||
|
if (loadMaxFile inputMaxFile quiet:true) == true then
|
||||||
|
(
|
||||||
|
runNelMaxExport(inputMaxFile)
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
-- Error
|
||||||
|
nlerror("ERROR exporting '%PreGenFileExtension%': can't open the file " + inputMaxFile)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
nlerror("SKIPPED " + inputMaxFile)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
catch
|
||||||
|
(
|
||||||
|
-- Error
|
||||||
|
nlerror("ERROR error exporting '%PreGenFileExtension%' in files " + inputMaxFile)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
nlerror("WARNING no *.max file in folder %MaxSourceDirectory%")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
catch
|
||||||
|
(
|
||||||
|
-- Error
|
||||||
|
nlerror("ERROR fatal error exporting '%PreGenFileExtension%' in folder %MaxSourceDirectory%")
|
||||||
|
)
|
||||||
|
|
||||||
|
-- Bye
|
||||||
|
|
||||||
|
resetMAXFile #noprompt
|
||||||
|
quitMAX #noPrompt
|
||||||
|
quitMAX() #noPrompt
|
||||||
|
|
|
@ -0,0 +1,73 @@
|
||||||
|
|
||||||
|
|
||||||
|
-- #################################################################
|
||||||
|
-- ## %PreGenWarning%
|
||||||
|
-- #################################################################
|
||||||
|
|
||||||
|
|
||||||
|
-- Allocate 20 Me for the script
|
||||||
|
heapSize += 15000000
|
||||||
|
|
||||||
|
nlErrorFilename = "%OutputLogfile%"
|
||||||
|
nlErrorStream = openFile nlErrorFilename mode:"a"
|
||||||
|
if nlErrorStream == undefined then
|
||||||
|
nlErrorStream = createFile nlErrorFilename
|
||||||
|
|
||||||
|
-- Unhide layers
|
||||||
|
fn unhidelayers =
|
||||||
|
(
|
||||||
|
for i = 0 to (LayerManager.count - 1) do
|
||||||
|
(
|
||||||
|
layer = (LayerManager.getLayer i)
|
||||||
|
layer.ishidden = false
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
-- Unhide category
|
||||||
|
fn unhidecategory =
|
||||||
|
(
|
||||||
|
if (geometry.count > 0) then
|
||||||
|
(
|
||||||
|
unhide geometry[1]
|
||||||
|
if (geometry[1].ishidden == true) then
|
||||||
|
max hide object toggle
|
||||||
|
)
|
||||||
|
if (shapes.count > 0) then
|
||||||
|
(
|
||||||
|
unhide shapes[1]
|
||||||
|
if (shapes[1].ishidden == true) then
|
||||||
|
max hide shape toggle
|
||||||
|
)
|
||||||
|
if (lights.count > 0) then
|
||||||
|
(
|
||||||
|
unhide lights[1]
|
||||||
|
if (lights[1].ishidden == true) then
|
||||||
|
max hide light toggle
|
||||||
|
)
|
||||||
|
if (cameras.count > 0) then
|
||||||
|
(
|
||||||
|
unhide cameras[1]
|
||||||
|
if (cameras[1].ishidden == true) then
|
||||||
|
max hide camera toggle
|
||||||
|
)
|
||||||
|
if (helpers.count > 0) then
|
||||||
|
(
|
||||||
|
unhide helpers[1]
|
||||||
|
if (helpers[1].ishidden == true) then
|
||||||
|
max hide helper toggle
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
-- Log a message
|
||||||
|
fn nlerror message =
|
||||||
|
(
|
||||||
|
if nlErrorStream != undefined then
|
||||||
|
(
|
||||||
|
format "%\n" message to:nlErrorStream
|
||||||
|
flush nlErrorStream
|
||||||
|
)
|
||||||
|
|
||||||
|
-- To the console
|
||||||
|
print message
|
||||||
|
)
|
||||||
|
|
|
@ -0,0 +1,66 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 0_setup.py
|
||||||
|
# \brief setup %PreGenProcessName%
|
||||||
|
# \date %PreGenDateTimeStamp%
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Setup %PreGenProcessName%
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Setup %PreGenProcessName%")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# Setup source directories
|
||||||
|
printLog(log, ">>> Setup source directories <<<")
|
||||||
|
for dir in %PreGenSourceDirectoriesVariable%:
|
||||||
|
mkPath(log, DatabaseDirectory + "/" + dir)
|
||||||
|
|
||||||
|
# Setup export directories
|
||||||
|
printLog(log, ">>> Setup export directories <<<")
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + %PreGenExportDirectoryVariable%)
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + %PreGenTagExportDirectoryVariable%)
|
||||||
|
|
||||||
|
# Setup build directories
|
||||||
|
printLog(log, ">>> Setup build directories <<<")
|
||||||
|
|
||||||
|
# Setup client directories
|
||||||
|
printLog(log, ">>> Setup client directories <<<")
|
||||||
|
mkPath(log, InstallDirectory + "/" + %PreGenInstallDirectoryVariable%)
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
|
@ -0,0 +1,9 @@
|
||||||
|
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
shutil.move("temp_log.log", "log.log")
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
|
@ -0,0 +1,130 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# #################################################################
|
||||||
|
# ## %PreGenWarning%
|
||||||
|
# #################################################################
|
||||||
|
#
|
||||||
|
# \file 1_export.py
|
||||||
|
# \brief Export %PreGenProcessName%
|
||||||
|
# \date %PreGenDateTimeStamp%
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Export %PreGenProcessName%
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
if os.path.isfile("temp_log.log"):
|
||||||
|
os.remove("temp_log.log")
|
||||||
|
log = open("temp_log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Export %PreGenProcessName%")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
|
||||||
|
# Find tools
|
||||||
|
# ...
|
||||||
|
|
||||||
|
# Export %PreGenProcessName% 3dsmax
|
||||||
|
if MaxAvailable:
|
||||||
|
# Find tools
|
||||||
|
Max = findMax(log, MaxDirectory, MaxExecutable)
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
printLog(log, ">>> Export %PreGenProcessName% 3dsmax <<<")
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + %PreGenExportDirectoryVariable%)
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + %PreGenTagExportDirectoryVariable%)
|
||||||
|
for dir in %PreGenSourceDirectoriesVariable%:
|
||||||
|
mkPath(log, DatabaseDirectory + "/" + dir)
|
||||||
|
if (needUpdateDirByTagLog(log, DatabaseDirectory + "/" + dir, ".max", ExportBuildDirectory + "/" + %PreGenTagExportDirectoryVariable%, ".max.tag")):
|
||||||
|
scriptSrc = "maxscript/%PreGenFileExtension%_export.ms"
|
||||||
|
scriptDst = MaxUserDirectory + "/scripts/%PreGenFileExtension%_export.ms"
|
||||||
|
outputLogfile = ScriptDirectory + "/processes/%PreGenProcessName%/log.log"
|
||||||
|
outputDirectory = ExportBuildDirectory + "/" + %PreGenExportDirectoryVariable%
|
||||||
|
tagDirectory = ExportBuildDirectory + "/" + %PreGenTagExportDirectoryVariable%
|
||||||
|
maxSourceDir = DatabaseDirectory + "/" + dir
|
||||||
|
maxRunningTagFile = tagDirectory + "/max_running.tag"
|
||||||
|
tagList = findFiles(log, tagDirectory, "", ".max.tag")
|
||||||
|
tagLen = len(tagList)
|
||||||
|
if os.path.isfile(scriptDst):
|
||||||
|
os.remove(scriptDst)
|
||||||
|
tagDiff = 1
|
||||||
|
sSrc = open(scriptSrc, "r")
|
||||||
|
sDst = open(scriptDst, "w")
|
||||||
|
for line in sSrc:
|
||||||
|
newline = line.replace("%OutputLogfile%", outputLogfile)
|
||||||
|
newline = newline.replace("%MaxSourceDirectory%", maxSourceDir)
|
||||||
|
newline = newline.replace("%OutputDirectory%", outputDirectory)
|
||||||
|
newline = newline.replace("%TagDirectory%", tagDirectory)
|
||||||
|
sDst.write(newline)
|
||||||
|
sSrc.close()
|
||||||
|
sDst.close()
|
||||||
|
zeroRetryLimit = 3
|
||||||
|
while tagDiff > 0:
|
||||||
|
mrt = open(maxRunningTagFile, "w")
|
||||||
|
mrt.write("moe-moe-kyun")
|
||||||
|
mrt.close()
|
||||||
|
printLog(log, "MAXSCRIPT " + scriptDst)
|
||||||
|
subprocess.call([ Max, "-U", "MAXScript", "%PreGenFileExtension%_export.ms", "-q", "-mi", "-mip" ])
|
||||||
|
if os.path.exists(outputLogfile):
|
||||||
|
try:
|
||||||
|
lSrc = open(outputLogfile, "r")
|
||||||
|
for line in lSrc:
|
||||||
|
lineStrip = line.strip()
|
||||||
|
if (len(lineStrip) > 0):
|
||||||
|
printLog(log, lineStrip)
|
||||||
|
lSrc.close()
|
||||||
|
os.remove(outputLogfile)
|
||||||
|
except Exception:
|
||||||
|
printLog(log, "ERROR Failed to read 3dsmax log")
|
||||||
|
else:
|
||||||
|
printLog(log, "WARNING No 3dsmax log")
|
||||||
|
tagList = findFiles(log, tagDirectory, "", ".max.tag")
|
||||||
|
newTagLen = len(tagList)
|
||||||
|
tagDiff = newTagLen - tagLen
|
||||||
|
tagLen = newTagLen
|
||||||
|
addTagDiff = 0
|
||||||
|
if os.path.exists(maxRunningTagFile):
|
||||||
|
printLog(log, "FAIL 3ds Max crashed and/or file export failed!")
|
||||||
|
if tagDiff == 0:
|
||||||
|
if zeroRetryLimit > 0:
|
||||||
|
zeroRetryLimit = zeroRetryLimit - 1
|
||||||
|
addTagDiff = 1
|
||||||
|
else:
|
||||||
|
printLog(log, "FAIL Retry limit reached!")
|
||||||
|
else:
|
||||||
|
addTagDiff = 1
|
||||||
|
os.remove(maxRunningTagFile)
|
||||||
|
printLog(log, "Exported " + str(tagDiff) + " .max files!")
|
||||||
|
tagDiff += addTagDiff
|
||||||
|
os.remove(scriptDst)
|
||||||
|
printLog(log, "")
|
||||||
|
|
|
@ -0,0 +1,49 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 2_build.py
|
||||||
|
# \brief Build %PreGenProcessName%
|
||||||
|
# \date %PreGenDateTimeStamp%
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Build %PreGenProcessName%
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Build %PreGenProcessName%")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
|
@ -0,0 +1,57 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 3_install.py
|
||||||
|
# \brief Install %PreGenProcessName%
|
||||||
|
# \date %PreGenDateTimeStamp%
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Install %PreGenProcessName%
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Install %PreGenProcessName%")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
printLog(log, ">>> Install %PreGenProcessName% <<<")
|
||||||
|
exportPath = ExportBuildDirectory + "/" + %PreGenExportDirectoryVariable%
|
||||||
|
mkPath(log, exportPath)
|
||||||
|
installPath = InstallDirectory + "/" + %PreGenInstallDirectoryVariable%
|
||||||
|
mkPath(log, installPath)
|
||||||
|
copyFilesNoTreeIfNeeded(log, exportPath, installPath)
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
|
@ -0,0 +1,127 @@
|
||||||
|
|
||||||
|
|
||||||
|
removeRunningTag = true
|
||||||
|
|
||||||
|
try
|
||||||
|
(
|
||||||
|
undo off
|
||||||
|
(
|
||||||
|
-- Get files in the %MaxSourceDirectory% directory
|
||||||
|
files = getFiles "%MaxSourceDirectory%/*.max"
|
||||||
|
gc()
|
||||||
|
|
||||||
|
-- Sort files
|
||||||
|
sort files
|
||||||
|
gc()
|
||||||
|
|
||||||
|
-- No file ?
|
||||||
|
if files.count != 0 then
|
||||||
|
(
|
||||||
|
-- For each files
|
||||||
|
for i = 1 to files.count do
|
||||||
|
(
|
||||||
|
inputMaxFile = files[i]
|
||||||
|
outputTagFile = ("%TagDirectory%/" + (getFilenameFile inputMaxFile) + (getFilenameType inputMaxFile) + ".tag")
|
||||||
|
|
||||||
|
--try
|
||||||
|
--(
|
||||||
|
-- Compare file date
|
||||||
|
if (NeLTestFileDate outputTagFile inputMaxFile) == true then
|
||||||
|
(
|
||||||
|
-- Free memory and file handles
|
||||||
|
gc()
|
||||||
|
heapfree
|
||||||
|
|
||||||
|
-- Reset 3dsmax
|
||||||
|
resetMAXFile #noprompt
|
||||||
|
|
||||||
|
-- Open the max project
|
||||||
|
nlerror("Scanning file " + inputMaxFile + " ...")
|
||||||
|
if (loadMaxFile inputMaxFile quiet:true) == true then
|
||||||
|
(
|
||||||
|
tagThisFile = runNelMaxExport(inputMaxFile)
|
||||||
|
|
||||||
|
-- Write a tag file
|
||||||
|
if tagThisFile == true then
|
||||||
|
(
|
||||||
|
tagFile = createFile outputTagFile
|
||||||
|
if tagFile == undefined then
|
||||||
|
(
|
||||||
|
nlerror("WARNING can't create tag file " + outputTagFile)
|
||||||
|
removeRunningTag = false
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
print "mukyu" to: tagFile
|
||||||
|
close tagFile
|
||||||
|
)
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
removeRunningTag = false
|
||||||
|
)
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
-- Error
|
||||||
|
nlerror("ERROR exporting '%PreGenFileExtension%': can't open the file " + inputMaxFile)
|
||||||
|
removeRunningTag = false
|
||||||
|
)
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
nlerror("SKIPPED BY TAG " + inputMaxFile)
|
||||||
|
)
|
||||||
|
--)
|
||||||
|
--catch
|
||||||
|
--(
|
||||||
|
-- -- Error
|
||||||
|
-- nlerror("ERROR error exporting '%PreGenFileExtension%' in file " + inputMaxFile)
|
||||||
|
-- removeRunningTag = false
|
||||||
|
--)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
nlerror("WARNING no *.max file in folder %MaxSourceDirectory%")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
catch
|
||||||
|
(
|
||||||
|
-- Error
|
||||||
|
nlerror("ERROR Fatal error exporting '%PreGenFileExtension%' in folder %MaxSourceDirectory%")
|
||||||
|
nlerror("FAIL Fatal error occured")
|
||||||
|
NelForceQuitRightNow()
|
||||||
|
removeRunningTag = false
|
||||||
|
)
|
||||||
|
|
||||||
|
try
|
||||||
|
(
|
||||||
|
if (removeRunningTag) then
|
||||||
|
(
|
||||||
|
resetMAXFile #noPrompt
|
||||||
|
)
|
||||||
|
)
|
||||||
|
catch
|
||||||
|
(
|
||||||
|
nlerror("FAIL Last reset fails")
|
||||||
|
removeRunningTag = false
|
||||||
|
)
|
||||||
|
|
||||||
|
if (removeRunningTag) then
|
||||||
|
(
|
||||||
|
nlerror("SUCCESS All .max files have been successfully exported")
|
||||||
|
deleteFile("%TagDirectory%/max_running.tag")
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
nlerror("FAIL One or more issues occured")
|
||||||
|
NelForceQuitRightNow()
|
||||||
|
)
|
||||||
|
|
||||||
|
-- Bye
|
||||||
|
nlerror("BYE")
|
||||||
|
quitMAX #noPrompt
|
||||||
|
quitMAX() #noPrompt
|
||||||
|
|
|
@ -0,0 +1,76 @@
|
||||||
|
|
||||||
|
|
||||||
|
-- #################################################################
|
||||||
|
-- ## %PreGenWarning%
|
||||||
|
-- #################################################################
|
||||||
|
|
||||||
|
|
||||||
|
-- Allocate 20 Me for the script
|
||||||
|
heapSize += 15000000
|
||||||
|
|
||||||
|
-- In case of error just abort the app and don't show nel report window
|
||||||
|
NelForceQuitOnMsgDisplayer()
|
||||||
|
|
||||||
|
nlErrorFilename = "%OutputLogfile%"
|
||||||
|
nlErrorStream = openFile nlErrorFilename mode:"a"
|
||||||
|
if nlErrorStream == undefined then
|
||||||
|
nlErrorStream = createFile nlErrorFilename
|
||||||
|
|
||||||
|
-- Unhide layers
|
||||||
|
fn unhidelayers =
|
||||||
|
(
|
||||||
|
for i = 0 to (LayerManager.count - 1) do
|
||||||
|
(
|
||||||
|
layer = (LayerManager.getLayer i)
|
||||||
|
layer.ishidden = false
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
-- Unhide category
|
||||||
|
fn unhidecategory =
|
||||||
|
(
|
||||||
|
if (geometry.count > 0) then
|
||||||
|
(
|
||||||
|
unhide geometry[1]
|
||||||
|
if (geometry[1].ishidden == true) then
|
||||||
|
max hide object toggle
|
||||||
|
)
|
||||||
|
if (shapes.count > 0) then
|
||||||
|
(
|
||||||
|
unhide shapes[1]
|
||||||
|
if (shapes[1].ishidden == true) then
|
||||||
|
max hide shape toggle
|
||||||
|
)
|
||||||
|
if (lights.count > 0) then
|
||||||
|
(
|
||||||
|
unhide lights[1]
|
||||||
|
if (lights[1].ishidden == true) then
|
||||||
|
max hide light toggle
|
||||||
|
)
|
||||||
|
if (cameras.count > 0) then
|
||||||
|
(
|
||||||
|
unhide cameras[1]
|
||||||
|
if (cameras[1].ishidden == true) then
|
||||||
|
max hide camera toggle
|
||||||
|
)
|
||||||
|
if (helpers.count > 0) then
|
||||||
|
(
|
||||||
|
unhide helpers[1]
|
||||||
|
if (helpers[1].ishidden == true) then
|
||||||
|
max hide helper toggle
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
-- Log a message
|
||||||
|
fn nlerror message =
|
||||||
|
(
|
||||||
|
if nlErrorStream != undefined then
|
||||||
|
(
|
||||||
|
format "%\n" message to:nlErrorStream
|
||||||
|
flush nlErrorStream
|
||||||
|
)
|
||||||
|
|
||||||
|
-- To the console
|
||||||
|
print message
|
||||||
|
)
|
||||||
|
|
9
code/nel/tools/build_gamedata_linux/interface_dev.bat
Normal file
9
code/nel/tools/build_gamedata_linux/interface_dev.bat
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
title Ryzom Core: 1_export.py (INTERFACE)
|
||||||
|
1_export.py -ipj common/gamedev common/data_common common/exedll common/cfg common/interface common/sfx common/fonts common/outgame
|
||||||
|
title Ryzom Core: 2_build.py (INTERFACE)
|
||||||
|
2_build.py -ipj common/gamedev common/data_common common/exedll common/cfg common/interface common/sfx common/fonts common/outgame
|
||||||
|
title Ryzom Core: 3_install.py (INTERFACE)
|
||||||
|
3_install.py -ipj common/gamedev common/data_common common/exedll common/cfg common/interface common/sfx common/fonts common/outgame
|
||||||
|
title Ryzom Core: b1_client_dev.py
|
||||||
|
b1_client_dev.py
|
||||||
|
title Ryzom Core: Ready
|
11
code/nel/tools/build_gamedata_linux/leveldesign_dev.bat
Normal file
11
code/nel/tools/build_gamedata_linux/leveldesign_dev.bat
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
title Ryzom Core: 1_export.py (LEVELDESIGN)
|
||||||
|
1_export.py -ipj common/gamedev common/data_common common/data_shard common/leveldesign common/exedll common/cfg shard/data_shard shard/data_language shard/data_leveldesign shard/data_game_share
|
||||||
|
title Ryzom Core: 2_build.py (LEVELDESIGN)
|
||||||
|
2_build.py -ipj common/gamedev common/data_common common/data_shard common/leveldesign common/exedll common/cfg shard/data_shard shard/data_language shard/data_leveldesign shard/data_game_share
|
||||||
|
title Ryzom Core: 3_install.py (LEVELDESIGN)
|
||||||
|
3_install.py -ipj common/gamedev common/data_common common/data_shard common/leveldesign common/exedll common/cfg shard/data_shard shard/data_language shard/data_leveldesign shard/data_game_share
|
||||||
|
title Ryzom Core: b1_client_dev.py (LEVELDESIGN)
|
||||||
|
b1_client_dev.py
|
||||||
|
title Ryzom Core: b2_shard_data.py (LEVELDESIGN)
|
||||||
|
b2_shard_data.py
|
||||||
|
title Ryzom Core: Ready
|
11
code/nel/tools/build_gamedata_linux/panoply_dev.bat
Normal file
11
code/nel/tools/build_gamedata_linux/panoply_dev.bat
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
title Ryzom Core: 1_export.py (PANOPLY)
|
||||||
|
1_export.py -ipj common/characters_maps_hr
|
||||||
|
title Ryzom Core: 2_build.py (PANOPLY)
|
||||||
|
2_build.py -ipj common/characters_maps_hr
|
||||||
|
title Ryzom Core: 3_install.py (PANOPLY)
|
||||||
|
3_install.py -ipj common/characters_maps_hr
|
||||||
|
title Ryzom Core: b1_client_dev.py (PANOPLY)
|
||||||
|
b1_client_dev.py
|
||||||
|
title Ryzom Core: b2_shard_data.py (PANOPLY)
|
||||||
|
b2_shard_data.py
|
||||||
|
title Ryzom Core: Ready (PANOPLY)
|
89
code/nel/tools/build_gamedata_linux/processes/0_setup.py
Executable file
89
code/nel/tools/build_gamedata_linux/processes/0_setup.py
Executable file
|
@ -0,0 +1,89 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 0_setup.py
|
||||||
|
# \brief Run all setup processes
|
||||||
|
# \date 2009-02-18 15:28GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Run all setup processes
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util, argparse
|
||||||
|
sys.path.append("../configuration")
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument('--includeprocess', '-ipc', nargs='+')
|
||||||
|
parser.add_argument('--excludeprocess', '-epc', nargs='+')
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
#printLog(log, "")
|
||||||
|
#printLog(log, "-------")
|
||||||
|
#printLog(log, "--- Setup project")
|
||||||
|
#printLog(log, "-------")
|
||||||
|
#printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
#printLog(log, "")
|
||||||
|
|
||||||
|
#printLog(log, "")
|
||||||
|
#printLog(log, "-------")
|
||||||
|
#printLog(log, "--- Setup client directories")
|
||||||
|
#printLog(log, "-------")
|
||||||
|
#printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
#printLog(log, "")
|
||||||
|
#for dir in ClientSetupDirectories:
|
||||||
|
# mkPath(log, InstallDirectory + "/" + dir)
|
||||||
|
#printLog(log, "")
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Run the setup processes")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
# For each process
|
||||||
|
for processName in ProcessToComplete:
|
||||||
|
if ((args.includeprocess == None or processName in args.includeprocess) and (args.excludeprocess == None or not processName in args.excludeprocess)):
|
||||||
|
printLog(log, "PROCESS " + processName)
|
||||||
|
os.chdir(processName)
|
||||||
|
try:
|
||||||
|
subprocess.call([ "python", "0_setup.py" ])
|
||||||
|
except Exception, e:
|
||||||
|
printLog(log, "<" + processName + "> " + str(e))
|
||||||
|
os.chdir("..")
|
||||||
|
try:
|
||||||
|
processLog = open(processName + "/log.log", "r")
|
||||||
|
processLogData = processLog.read()
|
||||||
|
processLog.close()
|
||||||
|
log.write(processLogData)
|
||||||
|
except Exception, e:
|
||||||
|
printLog(log, "<" + processName + "> " + str(e))
|
||||||
|
# subprocess.call("idle.bat")
|
||||||
|
else:
|
||||||
|
printLog(log, "IGNORE PROCESS " + processName)
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
log.close()
|
73
code/nel/tools/build_gamedata_linux/processes/1_export.py
Executable file
73
code/nel/tools/build_gamedata_linux/processes/1_export.py
Executable file
|
@ -0,0 +1,73 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 1_export.py
|
||||||
|
# \brief Run all export processes
|
||||||
|
# \date 2009-02-18 09:22GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Run all export processes
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util, argparse
|
||||||
|
sys.path.append("../configuration")
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument('--includeprocess', '-ipc', nargs='+')
|
||||||
|
parser.add_argument('--excludeprocess', '-epc', nargs='+')
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
# Log error
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Run the export processes")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
# For each process
|
||||||
|
for processName in ProcessToComplete:
|
||||||
|
if ((args.includeprocess == None or processName in args.includeprocess) and (args.excludeprocess == None or not processName in args.excludeprocess)):
|
||||||
|
printLog(log, "PROCESS " + processName)
|
||||||
|
os.chdir(processName)
|
||||||
|
try:
|
||||||
|
subprocess.call([ "python", "1_export.py" ])
|
||||||
|
except Exception, e:
|
||||||
|
printLog(log, "<" + processName + "> " + str(e))
|
||||||
|
os.chdir("..")
|
||||||
|
try:
|
||||||
|
processLog = open(processName + "/log.log", "r")
|
||||||
|
processLogData = processLog.read()
|
||||||
|
processLog.close()
|
||||||
|
log.write(processLogData)
|
||||||
|
except Exception, e:
|
||||||
|
printLog(log, "<" + processName + "> " + str(e))
|
||||||
|
# subprocess.call("idle.bat")
|
||||||
|
else:
|
||||||
|
printLog(log, "IGNORE PROCESS " + processName)
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
log.close()
|
73
code/nel/tools/build_gamedata_linux/processes/2_build.py
Executable file
73
code/nel/tools/build_gamedata_linux/processes/2_build.py
Executable file
|
@ -0,0 +1,73 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 2_build.py
|
||||||
|
# \brief Run all build processes
|
||||||
|
# \date 2009-02-18 09:22GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Run all build processes
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util, argparse
|
||||||
|
sys.path.append("../configuration")
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument('--includeprocess', '-ipc', nargs='+')
|
||||||
|
parser.add_argument('--excludeprocess', '-epc', nargs='+')
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
# Log error
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Run the build processes")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
# For each process
|
||||||
|
for processName in ProcessToComplete:
|
||||||
|
if ((args.includeprocess == None or processName in args.includeprocess) and (args.excludeprocess == None or not processName in args.excludeprocess)):
|
||||||
|
printLog(log, "PROCESS " + processName)
|
||||||
|
os.chdir(processName)
|
||||||
|
try:
|
||||||
|
subprocess.call([ "python", "2_build.py" ])
|
||||||
|
except Exception, e:
|
||||||
|
printLog(log, "<" + processName + "> " + str(e))
|
||||||
|
os.chdir("..")
|
||||||
|
try:
|
||||||
|
processLog = open(processName + "/log.log", "r")
|
||||||
|
processLogData = processLog.read()
|
||||||
|
processLog.close()
|
||||||
|
log.write(processLogData)
|
||||||
|
except Exception, e:
|
||||||
|
printLog(log, "<" + processName + "> " + str(e))
|
||||||
|
# subprocess.call("idle.bat")
|
||||||
|
else:
|
||||||
|
printLog(log, "IGNORE PROCESS " + processName)
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
log.close()
|
72
code/nel/tools/build_gamedata_linux/processes/3_install.py
Executable file
72
code/nel/tools/build_gamedata_linux/processes/3_install.py
Executable file
|
@ -0,0 +1,72 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 3_install.py
|
||||||
|
# \brief Run all install processes
|
||||||
|
# \date 2009-02-18 16:19GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Run all install processes
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util, argparse
|
||||||
|
sys.path.append("../configuration")
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument('--includeprocess', '-ipc', nargs='+')
|
||||||
|
parser.add_argument('--excludeprocess', '-epc', nargs='+')
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Run the install processes")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
# For each process
|
||||||
|
for processName in ProcessToComplete:
|
||||||
|
if ((args.includeprocess == None or processName in args.includeprocess) and (args.excludeprocess == None or not processName in args.excludeprocess)):
|
||||||
|
printLog(log, "PROCESS " + processName)
|
||||||
|
os.chdir(processName)
|
||||||
|
try:
|
||||||
|
subprocess.call([ "python", "3_install.py" ])
|
||||||
|
except Exception, e:
|
||||||
|
printLog(log, "<" + processName + "> " + str(e))
|
||||||
|
os.chdir("..")
|
||||||
|
try:
|
||||||
|
processLog = open(processName + "/log.log", "r")
|
||||||
|
processLogData = processLog.read()
|
||||||
|
processLog.close()
|
||||||
|
log.write(processLogData)
|
||||||
|
except Exception, e:
|
||||||
|
printLog(log, "<" + processName + "> " + str(e))
|
||||||
|
# subprocess.call("idle.bat")
|
||||||
|
else:
|
||||||
|
printLog(log, "IGNORE PROCESS " + processName)
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
log.close()
|
66
code/nel/tools/build_gamedata_linux/processes/_dummy/0_setup.py
Executable file
66
code/nel/tools/build_gamedata_linux/processes/_dummy/0_setup.py
Executable file
|
@ -0,0 +1,66 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 0_setup.py
|
||||||
|
# \brief setup dummy
|
||||||
|
# \date 2010-05-24 13:42GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Setup dummy
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Setup dummy")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# Setup source directories
|
||||||
|
printLog(log, ">>> Setup source directories <<<")
|
||||||
|
#for dir in MapSourceDirectories:
|
||||||
|
# mkPath(log, DatabaseDirectory + "/" + dir)
|
||||||
|
|
||||||
|
# Setup export directories
|
||||||
|
printLog(log, ">>> Setup export directories <<<")
|
||||||
|
#mkPath(log, ExportBuildDirectory + "/" + DummyTagExportDirectory)
|
||||||
|
|
||||||
|
# Setup build directories
|
||||||
|
printLog(log, ">>> Setup build directories <<<")
|
||||||
|
#mkPath(log, ExportBuildDirectory + "/" + DummyWithCoarseMeshBuildDirectory)
|
||||||
|
|
||||||
|
# Setup client directories
|
||||||
|
printLog(log, ">>> Setup client directories <<<")
|
||||||
|
#mkPath(log, InstallDirectory + "/" + DummyInstallDirectory)
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
117
code/nel/tools/build_gamedata_linux/processes/_dummy/1_export.py
Executable file
117
code/nel/tools/build_gamedata_linux/processes/_dummy/1_export.py
Executable file
|
@ -0,0 +1,117 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 1_export.py
|
||||||
|
# \brief Export dummy
|
||||||
|
# \date 2010-05-24 13:42GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Export dummy
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Export dummy")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
if MaxAvailable:
|
||||||
|
# Find tools
|
||||||
|
Max = findMax(log, MaxDirectory, MaxExecutable)
|
||||||
|
# ExecTimeout = findTool(log, ToolDirectories, ExecTimeoutTool, ToolSuffix)
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# Export dummy 3dsmax
|
||||||
|
printLog(log, ">>> Export dummy 3dsmax <<<")
|
||||||
|
|
||||||
|
# Build paths
|
||||||
|
#scriptSrc = "maxscript/dummy_export.ms"
|
||||||
|
# scriptDst = MaxDirectory + "/scripts/dummy_export.ms"
|
||||||
|
#scriptDst = MaxUserDirectory + "/scripts/dummy_export.ms"
|
||||||
|
#logFile = ScriptDirectory + "/processes/dummy/log.log"
|
||||||
|
#outDirTag = ExportBuildDirectory + "/" + DummyTagExportDirectory
|
||||||
|
#mkPath(log, outDirTag)
|
||||||
|
#outDirWithoutCoarse = ExportBuildDirectory + "/" + DummyExportDirectory
|
||||||
|
#mkPath(log, outDirWithoutCoarse)
|
||||||
|
#outDirWithCoarse = ExportBuildDirectory + "/" + DummyWithCoarseMeshExportDirectory
|
||||||
|
#mkPath(log, outDirWithCoarse)
|
||||||
|
#outDirLightmap = ExportBuildDirectory + "/" + DummyLightmapNotOptimizedExportDirectory
|
||||||
|
#mkPath(log, outDirLightmap)
|
||||||
|
#outDirAnim = ExportBuildDirectory + "/" + DummyAnimExportDirectory
|
||||||
|
#mkPath(log, outDirAnim)
|
||||||
|
|
||||||
|
#tagList = findFiles(log, outDirTag, "", ".tag")
|
||||||
|
#tagLen = len(tagList)
|
||||||
|
|
||||||
|
# For each directoy
|
||||||
|
#if os.path.isfile(scriptDst):
|
||||||
|
# os.remove(scriptDst)
|
||||||
|
#for dir in DummySourceDirectories:
|
||||||
|
# tagDiff = 1
|
||||||
|
# dummySourceDir = DatabaseDirectory + "/" + dir
|
||||||
|
# mkPath(log, dummySourceDir)
|
||||||
|
# sSrc = open(scriptSrc, "r")
|
||||||
|
# sDst = open(scriptDst, "w")
|
||||||
|
# for line in sSrc:
|
||||||
|
# newline = line.replace("output_logfile", logFile)
|
||||||
|
# newline = newline.replace("dummy_source_directory", dummySourceDir)
|
||||||
|
# newline = newline.replace("output_directory_tag", outDirTag)
|
||||||
|
# newline = newline.replace("output_directory_without_coarse_mesh", outDirWithoutCoarse)
|
||||||
|
# newline = newline.replace("output_directory_with_coarse_mesh", outDirWithCoarse)
|
||||||
|
# newline = newline.replace("dummy_export_opt_export_lighting", DummyExportOptExportLighting)
|
||||||
|
# newline = newline.replace("dummy_export_opt_shadow", DummyExportOptShadow)
|
||||||
|
# newline = newline.replace("dummy_export_opt_lighting_limit", str(DummyExportOptLightingLimit))
|
||||||
|
# newline = newline.replace("dummy_export_opt_lumel_size", DummyExportOptLumelSize)
|
||||||
|
# newline = newline.replace("dummy_export_opt_oversampling", str(DummyExportOptOversampling))
|
||||||
|
# newline = newline.replace("dummy_export_opt_lightmap_log", DummyExportOptLightmapLog)
|
||||||
|
# newline = newline.replace("dummy_lightmap_path", outDirLightmap)
|
||||||
|
# newline = newline.replace("output_directory_anim", outDirAnim)
|
||||||
|
# sDst.write(newline)
|
||||||
|
# sSrc.close()
|
||||||
|
# sDst.close()
|
||||||
|
# while tagDiff > 0:
|
||||||
|
# printLog(log, "MAXSCRIPT " + scriptDst)
|
||||||
|
# subprocess.call([ Max, "-U", "MAXScript", "dummy_export.ms", "-q", "-mi", "-mip" ])
|
||||||
|
# tagList = findFiles(log, outDirTag, "", ".tag")
|
||||||
|
# newTagLen = len(tagList)
|
||||||
|
# tagDiff = newTagLen - tagLen
|
||||||
|
# tagLen = newTagLen
|
||||||
|
# printLog(log, "Exported " + str(tagDiff) + " .max files!")
|
||||||
|
# tagDiff += hackBdummyTree() # force rerun also when bdummy tree deleted
|
||||||
|
# os.remove(scriptDst)
|
||||||
|
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
96
code/nel/tools/build_gamedata_linux/processes/_dummy/2_build.py
Executable file
96
code/nel/tools/build_gamedata_linux/processes/_dummy/2_build.py
Executable file
|
@ -0,0 +1,96 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 2_build.py
|
||||||
|
# \brief Build dummy
|
||||||
|
# \date 2010-05-24 13:42GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Build dummy
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Build dummy")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# Find tools
|
||||||
|
ExecTimeout = findTool(log, ToolDirectories, ExecTimeoutTool, ToolSuffix)
|
||||||
|
BuildShadowSkin = findTool(log, ToolDirectories, BuildShadowSkinTool, ToolSuffix)
|
||||||
|
BuildClodtex = findTool(log, ToolDirectories, BuildClodtexTool, ToolSuffix)
|
||||||
|
LightmapOptimizer = findTool(log, ToolDirectories, LightmapOptimizerTool, ToolSuffix)
|
||||||
|
TgaToDds = findTool(log, ToolDirectories, TgaToDdsTool, ToolSuffix)
|
||||||
|
BuildCoarseMesh = findTool(log, ToolDirectories, BuildCoarseMeshTool, ToolSuffix)
|
||||||
|
|
||||||
|
#if 1: # todo: CoarseMeshTextureNames length > 0 ...
|
||||||
|
# printLog(log, ">>> Build coarse meshes <<<")
|
||||||
|
# dummyWithCoarseMesh = ExportBuildDirectory + "/" + DummyWithCoarseMeshExportDirectory
|
||||||
|
# mkPath(log, dummyWithCoarseMesh)
|
||||||
|
# dummyWithCoarseMeshBuilded = ExportBuildDirectory + "/" + DummyWithCoarseMeshBuildDirectory
|
||||||
|
# mkPath(log, dummyWithCoarseMeshBuilded)
|
||||||
|
# cf = open("confdummy_generated.cfg", "w")
|
||||||
|
# cf.write("texture_mul_size = " + TextureMulSizeValue + ";\n")
|
||||||
|
# cf.write("\n")
|
||||||
|
# cf.write("search_path = \n")
|
||||||
|
# cf.write("{\n")
|
||||||
|
# cf.write("\t\"" + dummyWithCoarseMesh + "\", \n")
|
||||||
|
# for dir in MapSourceDirectories:
|
||||||
|
# cf.write("\t\"" + DatabaseDirectory + "/" + dir + "\", \n")
|
||||||
|
# cf.write("};\n")
|
||||||
|
# cf.write("\n")
|
||||||
|
# cf.write("list_mesh = \n")
|
||||||
|
# cf.write("{\n")
|
||||||
|
# # For each dummy with coarse mesh
|
||||||
|
# files = findFiles(log, dummyWithCoarseMesh, "", ".dummy")
|
||||||
|
# for file in files:
|
||||||
|
# sourceFile = dummyWithCoarseMesh + "/" + file
|
||||||
|
# if os.path.isfile(sourceFile):
|
||||||
|
# destFile = dummyWithCoarseMeshBuilded + "/" + file
|
||||||
|
# cf.write("\t\"" + file + "\", \"" + destFile + "\", \n")
|
||||||
|
# cf.write("};\n")
|
||||||
|
# cf.write("\n")
|
||||||
|
# cf.write("output_textures = \n")
|
||||||
|
# cf.write("{\n")
|
||||||
|
# # For each dummy with coarse mesh
|
||||||
|
# for tn in CoarseMeshTextureNames:
|
||||||
|
# cf.write("\t\"" + dummyWithCoarseMesh + "/" + tn + ".tga\", \n")
|
||||||
|
# cf.write("};\n")
|
||||||
|
# cf.close()
|
||||||
|
# subprocess.call([ BuildCoarseMesh, "confdummy_generated.cfg" ])
|
||||||
|
# os.remove("confdummy_generated.cfg")
|
||||||
|
# for tn in CoarseMeshTextureNames:
|
||||||
|
# subprocess.call([ TgaToDds, dummyWithCoarseMesh + "/" + tn + ".tga", "-o", dummyWithCoarseMeshBuilded + "/" + tn + ".dds", "-a", "5" ])
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
63
code/nel/tools/build_gamedata_linux/processes/_dummy/3_install.py
Executable file
63
code/nel/tools/build_gamedata_linux/processes/_dummy/3_install.py
Executable file
|
@ -0,0 +1,63 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 3_install.py
|
||||||
|
# \brief Install dummy
|
||||||
|
# \date 2010-05-24 13:42GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Install dummy
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Install dummy")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
#installPath = InstallDirectory + "/" + DummyInstallDirectory
|
||||||
|
#mkPath(log, installPath)
|
||||||
|
|
||||||
|
printLog(log, ">>> Install dummy <<<")
|
||||||
|
#mkPath(log, ExportBuildDirectory + "/" + DummyExportDirectory)
|
||||||
|
#copyFilesExtNoTreeIfNeeded(log, ExportBuildDirectory + "/" + DummyExportDirectory, installPath, ".dummy")
|
||||||
|
#mkPath(log, ExportBuildDirectory + "/" + DummyWithCoarseMeshBuildDirectory)
|
||||||
|
#copyFilesExtNoTreeIfNeeded(log, ExportBuildDirectory + "/" + DummyWithCoarseMeshBuildDirectory, installPath, ".dummy")
|
||||||
|
#copyFilesExtNoTreeIfNeeded(log, ExportBuildDirectory + "/" + DummyWithCoarseMeshBuildDirectory, installPath, ".dds")
|
||||||
|
|
||||||
|
#mkPath(log, ExportBuildDirectory + "/" + DummyAnimExportDirectory)
|
||||||
|
#copyFilesExtNoTreeIfNeeded(log, ExportBuildDirectory + "/" + DummyAnimExportDirectory, installPath, ".anim")
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
98
code/nel/tools/build_gamedata_linux/processes/ai_wmap/0_setup.py
Executable file
98
code/nel/tools/build_gamedata_linux/processes/ai_wmap/0_setup.py
Executable file
|
@ -0,0 +1,98 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 0_setup.py
|
||||||
|
# \brief setup ai_wmap
|
||||||
|
# \date 2010-05-24 13:42GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Setup ai_wmap
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Setup ai_wmap")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# Setup build directories
|
||||||
|
printLog(log, ">>> Setup build directories <<<")
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + RbankOutputBuildDirectory)
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + AiWmapBuildDirectory)
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + AiWmapBuildTagDirectory)
|
||||||
|
|
||||||
|
# Setup lookup directories
|
||||||
|
printLog(log, ">>> Setup lookup directories <<<")
|
||||||
|
for dir in IgLookupDirectories:
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + dir)
|
||||||
|
for dir in PacsPrimLookupDirectories:
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + dir)
|
||||||
|
|
||||||
|
# Setup client directories
|
||||||
|
printLog(log, ">>> Setup install directories <<<")
|
||||||
|
mkPath(log, InstallDirectory + "/" + AiWmapInstallDirectory)
|
||||||
|
|
||||||
|
# Setup client directories
|
||||||
|
printLog(log, ">>> Setup configuration <<<")
|
||||||
|
mkPath(log, InstallDirectory + "/" + AiWmapInstallDirectory)
|
||||||
|
mkPath(log, ActiveProjectDirectory + "/generated")
|
||||||
|
cfg = open(ActiveProjectDirectory + "/generated/ai_build_wmap.cfg", "w")
|
||||||
|
cfg.write("\n")
|
||||||
|
cfg.write("// AI BUILD WMAP CONFIGURATION\n")
|
||||||
|
cfg.write("\n")
|
||||||
|
cfg.write("Paths = {\n")
|
||||||
|
for dir in IgLookupDirectories:
|
||||||
|
cfg.write("\t\"" + ExportBuildDirectory + "/" + dir + "\", \n")
|
||||||
|
cfg.write("\t\"" + ExportBuildDirectory + "/" + RbankOutputBuildDirectory + "\", \n")
|
||||||
|
cfg.write("\t\"" + LeveldesignDirectory + "\", \n")
|
||||||
|
cfg.write("};\n")
|
||||||
|
cfg.write("\n")
|
||||||
|
cfg.write("NoRecursePaths = { };\n")
|
||||||
|
cfg.write("\n")
|
||||||
|
cfg.write("PacsPrimPaths = {\n")
|
||||||
|
for dir in PacsPrimLookupDirectories:
|
||||||
|
cfg.write("\t\"" + ExportBuildDirectory + "/" + dir + "\", \n")
|
||||||
|
cfg.write("};\n")
|
||||||
|
cfg.write("\n")
|
||||||
|
cfg.write("OutputPath = \"" + ExportBuildDirectory + "/" + AiWmapBuildDirectory + "\";\n")
|
||||||
|
cfg.write("\n")
|
||||||
|
cfg.write("Commands = {\n")
|
||||||
|
cfg.write("\t\"Verbose " + str(AiWmapVerbose) + "\", \n")
|
||||||
|
for startPoint in AiWmapStartPoints:
|
||||||
|
cfg.write("\t\"setStartPoint " + startPoint + "\", \n")
|
||||||
|
cfg.write("};\n")
|
||||||
|
cfg.write("\n")
|
||||||
|
cfg.close()
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
49
code/nel/tools/build_gamedata_linux/processes/ai_wmap/1_export.py
Executable file
49
code/nel/tools/build_gamedata_linux/processes/ai_wmap/1_export.py
Executable file
|
@ -0,0 +1,49 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 1_export.py
|
||||||
|
# \brief Export ai_wmap
|
||||||
|
# \date 2010-05-24 13:42GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Export ai_wmap
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Export ai_wmap")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
95
code/nel/tools/build_gamedata_linux/processes/ai_wmap/2_build.py
Executable file
95
code/nel/tools/build_gamedata_linux/processes/ai_wmap/2_build.py
Executable file
|
@ -0,0 +1,95 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 2_build.py
|
||||||
|
# \brief Build ai_wmap
|
||||||
|
# \date 2010-05-24 13:42GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Build ai_wmap
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Build ai_wmap")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# Find tools
|
||||||
|
AiBuildWmap = findTool(log, ToolDirectories, AiBuildWmapTool, ToolSuffix)
|
||||||
|
TgaCut = findTool(log, ToolDirectories, TgaCutTool, ToolSuffix)
|
||||||
|
|
||||||
|
if AiBuildWmap == "":
|
||||||
|
toolLogFail(log, AiBuildWmapTool, ToolSuffix)
|
||||||
|
if TgaCut == "":
|
||||||
|
toolLogFail(log, TgaCutTool, ToolSuffix)
|
||||||
|
else:
|
||||||
|
printLog(log, ">>> Copy ai_build_wmap.cfg <<<")
|
||||||
|
cfgPath = ActiveProjectDirectory + "/generated/ai_build_wmap.cfg"
|
||||||
|
tagPath = ExportBuildDirectory + "/" + AiWmapBuildTagDirectory + "/ai_wmap_build.tag"
|
||||||
|
shutil.copy(cfgPath, "ai_build_wmap.cfg")
|
||||||
|
printLog(log, ">>> Check up packed sheets <<<")
|
||||||
|
subprocess.call([ AiBuildWmap, "checkPackedSheets" ])
|
||||||
|
printLog(log, ">>> Build ai_wmap <<<")
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + RbankOutputBuildDirectory)
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + AiWmapBuildDirectory)
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + AiWmapBuildTagDirectory)
|
||||||
|
if (needUpdate(log, "continents.packed_sheets", tagPath) or needUpdateMultiDirNoSubdirFile(log, ExportBuildDirectory, [ RbankOutputBuildDirectory ] + IgLookupDirectories + PacsPrimLookupDirectories, tagPath)):
|
||||||
|
printLog(log, ">>> Generate wmap <<<")
|
||||||
|
subprocess.call([ AiBuildWmap, "pacsCrunch " + AiWmapContinentName ])
|
||||||
|
printLog(log, ">>> Generate sized wmap <<<")
|
||||||
|
subprocess.call([ AiBuildWmap, "pacsBuildGabarit " + AiWmapContinentName ])
|
||||||
|
printLog(log, ">>> Generate cwmaps for each size <<<")
|
||||||
|
subprocess.call([ AiBuildWmap, "pacsBuildWmap " + AiWmapContinentName + "_0" ])
|
||||||
|
subprocess.call([ AiBuildWmap, "pacsBuildWmap " + AiWmapContinentName + "_1" ])
|
||||||
|
subprocess.call([ AiBuildWmap, "pacsBuildWmap " + AiWmapContinentName + "_2" ])
|
||||||
|
printLog(log, ">>> Generate bitmap for each size <<<")
|
||||||
|
subprocess.call([ AiBuildWmap, "pacsBuildBitmap " + AiWmapContinentName + "_0" ])
|
||||||
|
subprocess.call([ AiBuildWmap, "pacsBuildBitmap " + AiWmapContinentName + "_1" ])
|
||||||
|
subprocess.call([ AiBuildWmap, "pacsBuildBitmap " + AiWmapContinentName + "_2" ])
|
||||||
|
printLog(log, ">>> Clear height maps for size 1 and 2 <<<")
|
||||||
|
subprocess.call([ AiBuildWmap, "pacsClearHeightmap " + AiWmapContinentName ])
|
||||||
|
printLog(log, ">>> Cut tga for world editor <<<")
|
||||||
|
subprocess.call([ TgaCut, ExportBuildDirectory + "/" + AiWmapBuildDirectory + "/" + AiWmapContinentName + "_0.tga" ])
|
||||||
|
moveFilesExtNoTree(log, ".", ExportBuildDirectory + "/" + AiWmapBuildDirectory, ".tga")
|
||||||
|
printLog(log, ">>> Remove wmap <<<")
|
||||||
|
removeFilesRecursiveExt(log, ExportBuildDirectory + "/" + AiWmapBuildDirectory, ".wmap")
|
||||||
|
tagFile = open(tagPath, "w")
|
||||||
|
tagFile.write(time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())) + "\n")
|
||||||
|
tagFile.close()
|
||||||
|
else:
|
||||||
|
printLog(log, "SKIP *")
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
57
code/nel/tools/build_gamedata_linux/processes/ai_wmap/3_install.py
Executable file
57
code/nel/tools/build_gamedata_linux/processes/ai_wmap/3_install.py
Executable file
|
@ -0,0 +1,57 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 3_install.py
|
||||||
|
# \brief Install ai_wmap
|
||||||
|
# \date 2010-05-24 13:42GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Install ai_wmap
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Install ai_wmap")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
installPath = InstallDirectory + "/" + AiWmapInstallDirectory
|
||||||
|
mkPath(log, installPath)
|
||||||
|
|
||||||
|
printLog(log, ">>> Install ai_wmap <<<")
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + AiWmapBuildDirectory)
|
||||||
|
copyFilesNoTreeIfNeeded(log, ExportBuildDirectory + "/" + AiWmapBuildDirectory, installPath)
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
|
@ -0,0 +1,28 @@
|
||||||
|
|
||||||
|
// AI BUILD WMAP CONFIGURATION
|
||||||
|
|
||||||
|
Paths = {
|
||||||
|
"/Volumes/SIELA/Khaganat/khanat-build/export/continents/r2_desert/ig_land",
|
||||||
|
"/Volumes/SIELA/Khaganat/khanat-build/export/continents/r2_desert/ig_other",
|
||||||
|
"/Volumes/SIELA/Khaganat/khanat-build/export/continents/r2_desert/rbank_output",
|
||||||
|
"/Volumes/SIELA/Khaganat/khanat-data/leveldesign",
|
||||||
|
};
|
||||||
|
|
||||||
|
NoRecursePaths = { };
|
||||||
|
|
||||||
|
PacsPrimPaths = {
|
||||||
|
"/Volumes/SIELA/Khaganat/khanat-build/export/ecosystems/desert/pacs_prim",
|
||||||
|
};
|
||||||
|
|
||||||
|
OutputPath = "/Volumes/SIELA/Khaganat/khanat-build/export/continents/r2_desert/ai_wmap";
|
||||||
|
|
||||||
|
Commands = {
|
||||||
|
"Verbose 0",
|
||||||
|
"setStartPoint r2_desert 22996 -1253",
|
||||||
|
"setStartPoint r2_desert 23605 -1206",
|
||||||
|
"setStartPoint r2_desert 28935 -1353",
|
||||||
|
"setStartPoint r2_desert 29736 -1234",
|
||||||
|
"setStartPoint r2_desert 30596 -1353",
|
||||||
|
"setStartPoint r2_desert 30574 -2090",
|
||||||
|
};
|
||||||
|
|
66
code/nel/tools/build_gamedata_linux/processes/anim/0_setup.py
Executable file
66
code/nel/tools/build_gamedata_linux/processes/anim/0_setup.py
Executable file
|
@ -0,0 +1,66 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 0_setup.py
|
||||||
|
# \brief Setup anim
|
||||||
|
# \date 2009-03-10 14:56GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Setup anim
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Setup anim")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# Setup source directories
|
||||||
|
printLog(log, ">>> Setup source directories <<<")
|
||||||
|
for dir in AnimSourceDirectories:
|
||||||
|
mkPath(log, DatabaseDirectory + "/" + dir)
|
||||||
|
|
||||||
|
# Setup export directories
|
||||||
|
printLog(log, ">>> Setup export directories <<<")
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + AnimExportDirectory)
|
||||||
|
|
||||||
|
# Setup build directories
|
||||||
|
printLog(log, ">>> Setup build directories <<<")
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + AnimBuildDirectory)
|
||||||
|
|
||||||
|
# Setup client directories
|
||||||
|
printLog(log, ">>> Setup client directories <<<")
|
||||||
|
mkPath(log, InstallDirectory + "/" + AnimInstallDirectory)
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
139
code/nel/tools/build_gamedata_linux/processes/anim/1_export.py
Executable file
139
code/nel/tools/build_gamedata_linux/processes/anim/1_export.py
Executable file
|
@ -0,0 +1,139 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# #################################################################
|
||||||
|
# ## WARNING : this is a generated file, don't change it !
|
||||||
|
# #################################################################
|
||||||
|
#
|
||||||
|
# \file 1_export.py
|
||||||
|
# \brief Export anim
|
||||||
|
# \date 2015-01-06-16-31-GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Export anim
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
if os.path.isfile("temp_log.log"):
|
||||||
|
os.remove("temp_log.log")
|
||||||
|
log = open("temp_log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Export anim")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
|
||||||
|
# Find tools
|
||||||
|
# ...
|
||||||
|
|
||||||
|
# Export anim 3dsmax
|
||||||
|
if MaxAvailable:
|
||||||
|
# Find tools
|
||||||
|
Max = findMax(log, MaxDirectory, MaxExecutable)
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
printLog(log, ">>> Export anim 3dsmax <<<")
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + AnimExportDirectory)
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + AnimTagExportDirectory)
|
||||||
|
for dir in AnimSourceDirectories:
|
||||||
|
mkPath(log, DatabaseDirectory + "/" + dir)
|
||||||
|
if (needUpdateDirByTagLog(log, DatabaseDirectory + "/" + dir, ".max", ExportBuildDirectory + "/" + AnimTagExportDirectory, ".max.tag")):
|
||||||
|
scriptSrc = "maxscript/anim_export.ms"
|
||||||
|
scriptDst = MaxUserDirectory + "/scripts/anim_export.ms"
|
||||||
|
outputLogfile = ScriptDirectory + "/processes/anim/log.log"
|
||||||
|
outputDirectory = ExportBuildDirectory + "/" + AnimExportDirectory
|
||||||
|
tagDirectory = ExportBuildDirectory + "/" + AnimTagExportDirectory
|
||||||
|
maxSourceDir = DatabaseDirectory + "/" + dir
|
||||||
|
maxRunningTagFile = tagDirectory + "/max_running.tag"
|
||||||
|
tagList = findFiles(log, tagDirectory, "", ".max.tag")
|
||||||
|
tagLen = len(tagList)
|
||||||
|
if os.path.isfile(scriptDst):
|
||||||
|
os.remove(scriptDst)
|
||||||
|
tagDiff = 1
|
||||||
|
sSrc = open(scriptSrc, "r")
|
||||||
|
sDst = open(scriptDst, "w")
|
||||||
|
for line in sSrc:
|
||||||
|
newline = line.replace("%OutputLogfile%", outputLogfile)
|
||||||
|
newline = newline.replace("%MaxSourceDirectory%", maxSourceDir)
|
||||||
|
newline = newline.replace("%OutputDirectory%", outputDirectory)
|
||||||
|
newline = newline.replace("%TagDirectory%", tagDirectory)
|
||||||
|
sDst.write(newline)
|
||||||
|
sSrc.close()
|
||||||
|
sDst.close()
|
||||||
|
zeroRetryLimit = 3
|
||||||
|
while tagDiff > 0:
|
||||||
|
mrt = open(maxRunningTagFile, "w")
|
||||||
|
mrt.write("moe-moe-kyun")
|
||||||
|
mrt.close()
|
||||||
|
printLog(log, "MAXSCRIPT " + scriptDst)
|
||||||
|
subprocess.call([ Max, "-U", "MAXScript", "anim_export.ms", "-q", "-mi", "-mip" ])
|
||||||
|
if os.path.exists(outputLogfile):
|
||||||
|
try:
|
||||||
|
lSrc = open(outputLogfile, "r")
|
||||||
|
for line in lSrc:
|
||||||
|
lineStrip = line.strip()
|
||||||
|
if (len(lineStrip) > 0):
|
||||||
|
printLog(log, lineStrip)
|
||||||
|
lSrc.close()
|
||||||
|
os.remove(outputLogfile)
|
||||||
|
except Exception:
|
||||||
|
printLog(log, "ERROR Failed to read 3dsmax log")
|
||||||
|
else:
|
||||||
|
printLog(log, "WARNING No 3dsmax log")
|
||||||
|
tagList = findFiles(log, tagDirectory, "", ".max.tag")
|
||||||
|
newTagLen = len(tagList)
|
||||||
|
tagDiff = newTagLen - tagLen
|
||||||
|
tagLen = newTagLen
|
||||||
|
addTagDiff = 0
|
||||||
|
if os.path.exists(maxRunningTagFile):
|
||||||
|
printLog(log, "FAIL 3ds Max crashed and/or file export failed!")
|
||||||
|
if tagDiff == 0:
|
||||||
|
if zeroRetryLimit > 0:
|
||||||
|
zeroRetryLimit = zeroRetryLimit - 1
|
||||||
|
addTagDiff = 1
|
||||||
|
else:
|
||||||
|
printLog(log, "FAIL Retry limit reached!")
|
||||||
|
else:
|
||||||
|
addTagDiff = 1
|
||||||
|
os.remove(maxRunningTagFile)
|
||||||
|
printLog(log, "Exported " + str(tagDiff) + " .max files!")
|
||||||
|
tagDiff += addTagDiff
|
||||||
|
os.remove(scriptDst)
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
shutil.move("temp_log.log", "log.log")
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
70
code/nel/tools/build_gamedata_linux/processes/anim/2_build.py
Executable file
70
code/nel/tools/build_gamedata_linux/processes/anim/2_build.py
Executable file
|
@ -0,0 +1,70 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 2_build.py
|
||||||
|
# \brief Build anim
|
||||||
|
# \date 2009-03-10 13:13GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Build anim
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Build anim")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# Find tools
|
||||||
|
AnimBuilder = findTool(log, ToolDirectories, AnimBuilderTool, ToolSuffix)
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# For each anim directory
|
||||||
|
printLog(log, ">>> Build anim <<<")
|
||||||
|
if AnimBuilder == "":
|
||||||
|
toolLogFail(log, AnimBuilderTool, ToolSuffix)
|
||||||
|
else:
|
||||||
|
srcDir = ExportBuildDirectory + "/" + AnimExportDirectory
|
||||||
|
mkPath(log, srcDir)
|
||||||
|
destDir = ExportBuildDirectory + "/" + AnimBuildDirectory
|
||||||
|
mkPath(log, destDir)
|
||||||
|
if DoOptimizeAnimations:
|
||||||
|
printLog(log, ">>> Optimizing animations <<<")
|
||||||
|
subprocess.call([ AnimBuilder, srcDir, destDir, ActiveProjectDirectory + "/anim_builder.cfg" ])
|
||||||
|
else:
|
||||||
|
printLog(log, ">>> Not optimizing animations <<<")
|
||||||
|
copyFilesNoTreeIfNeeded(log, srcDir, destDir)
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
57
code/nel/tools/build_gamedata_linux/processes/anim/3_install.py
Executable file
57
code/nel/tools/build_gamedata_linux/processes/anim/3_install.py
Executable file
|
@ -0,0 +1,57 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 3_install.py
|
||||||
|
# \brief Install anim
|
||||||
|
# \date 2009-03-10 13:13GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Install anim
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Install anim")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
printLog(log, ">>> Install anim <<<")
|
||||||
|
srcDir = ExportBuildDirectory + "/" + AnimBuildDirectory
|
||||||
|
mkPath(log, srcDir)
|
||||||
|
destDir = InstallDirectory + "/" + AnimInstallDirectory
|
||||||
|
mkPath(log, destDir)
|
||||||
|
copyFilesNoTreeIfNeeded(log, srcDir, destDir)
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
271
code/nel/tools/build_gamedata_linux/processes/anim/maxscript/anim_export.ms
Executable file
271
code/nel/tools/build_gamedata_linux/processes/anim/maxscript/anim_export.ms
Executable file
|
@ -0,0 +1,271 @@
|
||||||
|
|
||||||
|
|
||||||
|
-- #################################################################
|
||||||
|
-- ## WARNING : this is a generated file, don't change it !
|
||||||
|
-- #################################################################
|
||||||
|
|
||||||
|
|
||||||
|
-- Allocate 20 Me for the script
|
||||||
|
heapSize += 15000000
|
||||||
|
|
||||||
|
-- In case of error just abort the app and don't show nel report window
|
||||||
|
NelForceQuitOnMsgDisplayer()
|
||||||
|
|
||||||
|
nlErrorFilename = "%OutputLogfile%"
|
||||||
|
nlErrorStream = openFile nlErrorFilename mode:"a"
|
||||||
|
if nlErrorStream == undefined then
|
||||||
|
nlErrorStream = createFile nlErrorFilename
|
||||||
|
|
||||||
|
-- Unhide layers
|
||||||
|
fn unhidelayers =
|
||||||
|
(
|
||||||
|
for i = 0 to (LayerManager.count - 1) do
|
||||||
|
(
|
||||||
|
layer = (LayerManager.getLayer i)
|
||||||
|
layer.ishidden = false
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
-- Unhide category
|
||||||
|
fn unhidecategory =
|
||||||
|
(
|
||||||
|
if (geometry.count > 0) then
|
||||||
|
(
|
||||||
|
unhide geometry[1]
|
||||||
|
if (geometry[1].ishidden == true) then
|
||||||
|
max hide object toggle
|
||||||
|
)
|
||||||
|
if (shapes.count > 0) then
|
||||||
|
(
|
||||||
|
unhide shapes[1]
|
||||||
|
if (shapes[1].ishidden == true) then
|
||||||
|
max hide shape toggle
|
||||||
|
)
|
||||||
|
if (lights.count > 0) then
|
||||||
|
(
|
||||||
|
unhide lights[1]
|
||||||
|
if (lights[1].ishidden == true) then
|
||||||
|
max hide light toggle
|
||||||
|
)
|
||||||
|
if (cameras.count > 0) then
|
||||||
|
(
|
||||||
|
unhide cameras[1]
|
||||||
|
if (cameras[1].ishidden == true) then
|
||||||
|
max hide camera toggle
|
||||||
|
)
|
||||||
|
if (helpers.count > 0) then
|
||||||
|
(
|
||||||
|
unhide helpers[1]
|
||||||
|
if (helpers[1].ishidden == true) then
|
||||||
|
max hide helper toggle
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
-- Log a message
|
||||||
|
fn nlerror message =
|
||||||
|
(
|
||||||
|
if nlErrorStream != undefined then
|
||||||
|
(
|
||||||
|
format "%\n" message to:nlErrorStream
|
||||||
|
flush nlErrorStream
|
||||||
|
)
|
||||||
|
|
||||||
|
-- To the console
|
||||||
|
print message
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
NEL3D_APPDATA_EXPORT_NODE_ANIMATION = 1423062800
|
||||||
|
|
||||||
|
fn runNelMaxExport inputMaxFile =
|
||||||
|
(
|
||||||
|
outputNelFile = ("%OutputDirectory%/" + (getFilenameFile inputMaxFile) + ".anim")
|
||||||
|
tagThisFile = true
|
||||||
|
|
||||||
|
-- Unhide category
|
||||||
|
unhidecategory()
|
||||||
|
|
||||||
|
-- Select Bip01, not very smart
|
||||||
|
if $Bip01 != undefined then
|
||||||
|
(
|
||||||
|
select $Bip01
|
||||||
|
|
||||||
|
-- Always uncheck triangle pelvis
|
||||||
|
if (classof $Bip01) == Biped_Object then
|
||||||
|
(
|
||||||
|
$Bip01.controller.figureMode = true
|
||||||
|
$Bip01.controller.trianglepelvis = false
|
||||||
|
$Bip01.controller.figureMode = false
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
-- For each node
|
||||||
|
for node in objects do
|
||||||
|
(
|
||||||
|
exportNodeAnmation = getappdata node NEL3D_APPDATA_EXPORT_NODE_ANIMATION
|
||||||
|
if (exportNodeAnmation != undefined) then
|
||||||
|
(
|
||||||
|
if (exportNodeAnmation == "1") then
|
||||||
|
(
|
||||||
|
selectmore node
|
||||||
|
|
||||||
|
-- Is it a biped ?
|
||||||
|
if (classof node.controller) == Vertical_Horizontal_Turn then
|
||||||
|
(
|
||||||
|
-- Always uncheck triangle pelvis
|
||||||
|
node.controller.trianglepelvis = false
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
if ((selection as array).count != 0) then
|
||||||
|
(
|
||||||
|
-- Export the animation
|
||||||
|
if (NelExportAnimation (selection as array) outputNelFile false) == false then
|
||||||
|
(
|
||||||
|
nlerror("ERROR exporting animation " + inputMaxFile)
|
||||||
|
tagThisFile = false
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
nlerror("OK " + outputNelFile)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
-- Error
|
||||||
|
nlerror("WARNING exporting animation: no node animated to export in file " + inputMaxFile)
|
||||||
|
)
|
||||||
|
|
||||||
|
return tagThisFile
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
removeRunningTag = true
|
||||||
|
|
||||||
|
try
|
||||||
|
(
|
||||||
|
undo off
|
||||||
|
(
|
||||||
|
-- Get files in the %MaxSourceDirectory% directory
|
||||||
|
files = getFiles "%MaxSourceDirectory%/*.max"
|
||||||
|
gc()
|
||||||
|
|
||||||
|
-- Sort files
|
||||||
|
sort files
|
||||||
|
gc()
|
||||||
|
|
||||||
|
-- No file ?
|
||||||
|
if files.count != 0 then
|
||||||
|
(
|
||||||
|
-- For each files
|
||||||
|
for i = 1 to files.count do
|
||||||
|
(
|
||||||
|
inputMaxFile = files[i]
|
||||||
|
outputTagFile = ("%TagDirectory%/" + (getFilenameFile inputMaxFile) + (getFilenameType inputMaxFile) + ".tag")
|
||||||
|
|
||||||
|
--try
|
||||||
|
--(
|
||||||
|
-- Compare file date
|
||||||
|
if (NeLTestFileDate outputTagFile inputMaxFile) == true then
|
||||||
|
(
|
||||||
|
-- Free memory and file handles
|
||||||
|
gc()
|
||||||
|
heapfree
|
||||||
|
|
||||||
|
-- Reset 3dsmax
|
||||||
|
resetMAXFile #noprompt
|
||||||
|
|
||||||
|
-- Open the max project
|
||||||
|
nlerror("Scanning file " + inputMaxFile + " ...")
|
||||||
|
if (loadMaxFile inputMaxFile quiet:true) == true then
|
||||||
|
(
|
||||||
|
tagThisFile = runNelMaxExport(inputMaxFile)
|
||||||
|
|
||||||
|
-- Write a tag file
|
||||||
|
if tagThisFile == true then
|
||||||
|
(
|
||||||
|
tagFile = createFile outputTagFile
|
||||||
|
if tagFile == undefined then
|
||||||
|
(
|
||||||
|
nlerror("WARNING can't create tag file " + outputTagFile)
|
||||||
|
removeRunningTag = false
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
print "mukyu" to: tagFile
|
||||||
|
close tagFile
|
||||||
|
)
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
removeRunningTag = false
|
||||||
|
)
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
-- Error
|
||||||
|
nlerror("ERROR exporting 'anim': can't open the file " + inputMaxFile)
|
||||||
|
removeRunningTag = false
|
||||||
|
)
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
nlerror("SKIPPED BY TAG " + inputMaxFile)
|
||||||
|
)
|
||||||
|
--)
|
||||||
|
--catch
|
||||||
|
--(
|
||||||
|
-- -- Error
|
||||||
|
-- nlerror("ERROR error exporting 'anim' in file " + inputMaxFile)
|
||||||
|
-- removeRunningTag = false
|
||||||
|
--)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
nlerror("WARNING no *.max file in folder %MaxSourceDirectory%")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
catch
|
||||||
|
(
|
||||||
|
-- Error
|
||||||
|
nlerror("ERROR Fatal error exporting 'anim' in folder %MaxSourceDirectory%")
|
||||||
|
nlerror("FAIL Fatal error occured")
|
||||||
|
NelForceQuitRightNow()
|
||||||
|
removeRunningTag = false
|
||||||
|
)
|
||||||
|
|
||||||
|
try
|
||||||
|
(
|
||||||
|
if (removeRunningTag) then
|
||||||
|
(
|
||||||
|
resetMAXFile #noPrompt
|
||||||
|
)
|
||||||
|
)
|
||||||
|
catch
|
||||||
|
(
|
||||||
|
nlerror("FAIL Last reset fails")
|
||||||
|
removeRunningTag = false
|
||||||
|
)
|
||||||
|
|
||||||
|
if (removeRunningTag) then
|
||||||
|
(
|
||||||
|
nlerror("SUCCESS All .max files have been successfully exported")
|
||||||
|
deleteFile("%TagDirectory%/max_running.tag")
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
nlerror("FAIL One or more issues occured")
|
||||||
|
NelForceQuitRightNow()
|
||||||
|
)
|
||||||
|
|
||||||
|
-- Bye
|
||||||
|
nlerror("BYE")
|
||||||
|
quitMAX #noPrompt
|
||||||
|
quitMAX() #noPrompt
|
||||||
|
|
|
@ -0,0 +1,114 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 0_setup.py
|
||||||
|
# \brief setup cartographer
|
||||||
|
# \date 2014-09-13 13:32GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Setup cartographer
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2014 Jan BOON
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Setup cartographer")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# Setup build directories
|
||||||
|
printLog(log, ">>> Setup build directories <<<")
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + CartographerBuildDirectory)
|
||||||
|
|
||||||
|
# Setup lookup directories
|
||||||
|
printLog(log, ">>> Setup lookup directories <<<")
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + AiWmapBuildDirectory) # IN
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + ZoneLightBuildDirectory) # IN (.zonel)
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + ZoneLightIgLandBuildDirectory) # IN (.ig)
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + SmallbankExportDirectory) # IN
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + FarbankBuildDirectory) # IN
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + DisplaceExportDirectory) # IN
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + TilesExportDirectory) # IN
|
||||||
|
mkPath(log, LeveldesignDataCommonDirectory) # IN
|
||||||
|
mkPath(log, LeveldesignDfnDirectory) # IN
|
||||||
|
mkPath(log, LeveldesignDirectory) # IN
|
||||||
|
for dir in PropertiesExportBuildSearchPaths:
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + dir)
|
||||||
|
|
||||||
|
# Setup client directories
|
||||||
|
printLog(log, ">>> Setup install directories <<<")
|
||||||
|
mkPath(log, InstallDirectory + "/" + CartographerInstallDirectory)
|
||||||
|
|
||||||
|
# Setup client directories
|
||||||
|
printLog(log, ">>> Setup configuration <<<")
|
||||||
|
mkPath(log, ActiveProjectDirectory + "/generated")
|
||||||
|
cfg = open(ActiveProjectDirectory + "/generated/island_screenshots.cfg", "w")
|
||||||
|
cfg.write("\n")
|
||||||
|
cfg.write("// BUILD CARTOGRAPHER CONFIGURATION\n")
|
||||||
|
cfg.write("\n")
|
||||||
|
cfg.write("SearchPaths = {\n")
|
||||||
|
cfg.write("\t\"" + ExportBuildDirectory + "/" + AiWmapBuildDirectory + "\", \n")
|
||||||
|
cfg.write("\t\"" + ExportBuildDirectory + "/" + ZoneLightBuildDirectory + "\", \n")
|
||||||
|
cfg.write("\t\"" + ExportBuildDirectory + "/" + ZoneLightIgLandBuildDirectory + "\", \n")
|
||||||
|
cfg.write("\t\"" + ExportBuildDirectory + "/" + SmallbankExportDirectory + "\", \n")
|
||||||
|
cfg.write("\t\"" + ExportBuildDirectory + "/" + FarbankBuildDirectory + "\", \n")
|
||||||
|
cfg.write("\t\"" + ExportBuildDirectory + "/" + DisplaceExportDirectory + "\", \n")
|
||||||
|
cfg.write("\t\"" + ExportBuildDirectory + "/" + TilesExportDirectory + "\", \n")
|
||||||
|
cfg.write("\t\"" + LeveldesignDataCommonDirectory + "\", \n")
|
||||||
|
cfg.write("\t\"" + LeveldesignDfnDirectory + "\", \n")
|
||||||
|
cfg.write("\t\"" + LeveldesignDirectory + "\", \n")
|
||||||
|
for dir in PropertiesExportBuildSearchPaths:
|
||||||
|
cfg.write("\t\"" + ExportBuildDirectory + "/" + dir + "\", \n")
|
||||||
|
cfg.write("};\n")
|
||||||
|
cfg.write("\n")
|
||||||
|
cfg.write("OutDir = \"" + ExportBuildDirectory + "/" + CartographerBuildDirectory + "\";\n")
|
||||||
|
cfg.write("\n")
|
||||||
|
cfg.write("Continents = {\n")
|
||||||
|
cfg.write("\t\"" + CartographerContinent + "\", \n")
|
||||||
|
cfg.write("};\n")
|
||||||
|
cfg.write("\n")
|
||||||
|
cfg.write("SeasonSuffixes = {\n")
|
||||||
|
for suffix in MultipleTilesPostfix:
|
||||||
|
cfg.write("\t\"" + suffix + "\", \n")
|
||||||
|
cfg.write("};\n")
|
||||||
|
cfg.write("\n")
|
||||||
|
cfg.write("InverseZTest = true;\n")
|
||||||
|
cfg.write("Vegetation = true;\n")
|
||||||
|
cfg.write("MeterPixelSize = 2;\n")
|
||||||
|
cfg.write("\n")
|
||||||
|
cfg.write("CompleteIslandsFile = \"r2_islands.xml\";\n")
|
||||||
|
cfg.write("EntryPointsFile = \"r2_entry_points.txt\";\n")
|
||||||
|
cfg.write("\n")
|
||||||
|
cfg.close()
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
|
@ -0,0 +1,49 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 1_export.py
|
||||||
|
# \brief Export cartographer
|
||||||
|
# \date 2014-09-13 13:32GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Export cartographer
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2014 Jan BOON
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Export cartographer")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
|
@ -0,0 +1,62 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 2_build.py
|
||||||
|
# \brief Build cartographer
|
||||||
|
# \date 2014-09-13 13:32GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Build cartographer
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2014 Jan BOON
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Build cartographer")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# Find tools
|
||||||
|
R2IslandsTextures = findTool(log, ToolDirectories, R2IslandsTexturesTool, ToolSuffix)
|
||||||
|
|
||||||
|
if R2IslandsTextures == "":
|
||||||
|
toolLogFail(log, R2IslandsTexturesTool, ToolSuffix)
|
||||||
|
else:
|
||||||
|
printLog(log, ">>> Copy island_screenshots.cfg <<<")
|
||||||
|
cfgPath = ActiveProjectDirectory + "/generated/island_screenshots.cfg"
|
||||||
|
shutil.copy(cfgPath, "island_screenshots.cfg")
|
||||||
|
printLog(log, ">>> Build cartographer <<<")
|
||||||
|
subprocess.call([ R2IslandsTextures ])
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
|
@ -0,0 +1,57 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 3_install.py
|
||||||
|
# \brief Install cartographer
|
||||||
|
# \date 2014-09-13 13:32GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Install cartographer
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2014 Jan BOON
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Install cartographer")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
installPath = InstallDirectory + "/" + CartographerInstallDirectory
|
||||||
|
mkPath(log, installPath)
|
||||||
|
|
||||||
|
printLog(log, ">>> Install cartographer <<<")
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + CartographerBuildDirectory)
|
||||||
|
copyFilesNoTreeIfNeeded(log, ExportBuildDirectory + "/" + CartographerBuildDirectory, installPath)
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
65
code/nel/tools/build_gamedata_linux/processes/cegui/0_setup.py
Executable file
65
code/nel/tools/build_gamedata_linux/processes/cegui/0_setup.py
Executable file
|
@ -0,0 +1,65 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 0_setup.py
|
||||||
|
# \brief Setup cegui
|
||||||
|
# \date 2009-03-14-17-46-GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Setup cegui
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Setup cegui")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# Setup source directories
|
||||||
|
printLog(log, ">>> Setup source directories <<<")
|
||||||
|
for dir in CeguiImagesetSourceDirectories:
|
||||||
|
mkPath(log, DatabaseDirectory + "/" + dir)
|
||||||
|
|
||||||
|
# Setup export directories
|
||||||
|
printLog(log, ">>> Setup export directories <<<")
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + CeguiImagesetExportDirectory)
|
||||||
|
|
||||||
|
# Setup build directories
|
||||||
|
printLog(log, ">>> Setup build directories <<<")
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + CeguiImagesetBuildDirectory)
|
||||||
|
|
||||||
|
# Setup client directories
|
||||||
|
printLog(log, ">>> Setup client directories <<<")
|
||||||
|
mkPath(log, InstallDirectory + "/" + CeguiImagesetInstallDirectory)
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
67
code/nel/tools/build_gamedata_linux/processes/cegui/1_export.py
Executable file
67
code/nel/tools/build_gamedata_linux/processes/cegui/1_export.py
Executable file
|
@ -0,0 +1,67 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 1_export.py
|
||||||
|
# \brief Export cegui
|
||||||
|
# \date 2009-03-14-17-46-GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Export cegui
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Export cegui")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# For each cegui imageset directory
|
||||||
|
printLog(log, ">>> Export cegui imagesets <<<")
|
||||||
|
destDir = ExportBuildDirectory + "/" + CeguiImagesetExportDirectory
|
||||||
|
mkPath(log, destDir)
|
||||||
|
for dir in CeguiImagesetSourceDirectories:
|
||||||
|
srcDir = DatabaseDirectory + "/" + dir
|
||||||
|
mkPath(log, srcDir)
|
||||||
|
imagesets = findFiles(log, srcDir, "", ".imageset")
|
||||||
|
if (len(imagesets) != 1):
|
||||||
|
printLog(log, "FAIL Cannot find *.imageset, folder must contain at least one and only one imageset xml file")
|
||||||
|
else:
|
||||||
|
niouname = dir.replace("/", "_")
|
||||||
|
newpath = destDir + "/" + niouname
|
||||||
|
mkPath(log, newpath)
|
||||||
|
copyFileIfNeeded(log, srcDir + "/" + imagesets[0], newpath + ".imageset")
|
||||||
|
copyFilesExtNoTreeIfNeeded(log, srcDir, newpath, ".tga")
|
||||||
|
copyFilesExtNoTreeIfNeeded(log, srcDir, newpath, ".png")
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
67
code/nel/tools/build_gamedata_linux/processes/cegui/2_build.py
Executable file
67
code/nel/tools/build_gamedata_linux/processes/cegui/2_build.py
Executable file
|
@ -0,0 +1,67 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 2_build.py
|
||||||
|
# \brief Build cegui
|
||||||
|
# \date 2009-03-14-17-46-GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Build cegui
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Build cegui")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# Find tools
|
||||||
|
BuildImageset = findTool(log, ToolDirectories, BuildImagesetTool, ToolSuffix)
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# For each cegui imageset directory
|
||||||
|
printLog(log, ">>> Build cegui imagesets <<<")
|
||||||
|
if BuildImageset == "":
|
||||||
|
toolLogFail(log, BuildImagesetTool, ToolSuffix)
|
||||||
|
else:
|
||||||
|
srcDir = ExportBuildDirectory + "/" + CeguiImagesetExportDirectory
|
||||||
|
mkPath(log, srcDir)
|
||||||
|
destDir = ExportBuildDirectory + "/" + CeguiImagesetBuildDirectory
|
||||||
|
mkPath(log, destDir)
|
||||||
|
for dir in os.listdir(srcDir):
|
||||||
|
if (os.path.isdir(srcDir + "/" + dir)) and dir != ".svn" and dir != "*.*":
|
||||||
|
mkPath(log, srcDir + "/" + dir)
|
||||||
|
subprocess.call([ BuildImageset, destDir + "/" + dir + ".tga", srcDir + "/" + dir ])
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
56
code/nel/tools/build_gamedata_linux/processes/cegui/3_install.py
Executable file
56
code/nel/tools/build_gamedata_linux/processes/cegui/3_install.py
Executable file
|
@ -0,0 +1,56 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 3_install.py
|
||||||
|
# \brief Install cegui
|
||||||
|
# \date 2009-03-14-17-46-GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Install cegui
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Install cegui")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
printLog(log, ">>> Install cegui imagesets <<<")
|
||||||
|
srcDir = ExportBuildDirectory + "/" + CeguiImagesetBuildDirectory
|
||||||
|
mkPath(log, srcDir)
|
||||||
|
destDir = InstallDirectory + "/" + CeguiImagesetInstallDirectory
|
||||||
|
mkPath(log, destDir)
|
||||||
|
copyFilesNoTreeIfNeeded(log, srcDir, destDir)
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
87
code/nel/tools/build_gamedata_linux/processes/clodbank/0_setup.py
Executable file
87
code/nel/tools/build_gamedata_linux/processes/clodbank/0_setup.py
Executable file
|
@ -0,0 +1,87 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 0_setup.py
|
||||||
|
# \brief Setup clodbank
|
||||||
|
# \date 2009-03-10 14:56GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Setup clodbank
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Setup clodbank")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# Setup source directories
|
||||||
|
printLog(log, ">>> Setup source directories <<<")
|
||||||
|
for dir in ClodSourceDirectories:
|
||||||
|
mkPath(log, DatabaseDirectory + "/" + dir)
|
||||||
|
|
||||||
|
# Setup export directories
|
||||||
|
printLog(log, ">>> Setup export directories <<<")
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + ClodTagExportDirectory)
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + ClodExportDirectory)
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + SkelExportDirectory)
|
||||||
|
|
||||||
|
# Setup build directories
|
||||||
|
printLog(log, ">>> Setup build directories <<<")
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + ClodBankBuildDirectory)
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + AnimBuildDirectory)
|
||||||
|
|
||||||
|
# Setup client directories
|
||||||
|
printLog(log, ">>> Setup client directories <<<")
|
||||||
|
mkPath(log, InstallDirectory + "/" + ShapeInstallDirectory)
|
||||||
|
|
||||||
|
# Setup configuration files
|
||||||
|
printLog(log, ">>> Setup configuration files <<<")
|
||||||
|
mkPath(log, ActiveProjectDirectory + "/generated")
|
||||||
|
cfgOut = open(ActiveProjectDirectory + "/generated/clod_paths.cfg", "w")
|
||||||
|
cfgOut.write("\n")
|
||||||
|
cfgOut.write("// The search pathes, look in the current process\n")
|
||||||
|
cfgOut.write("search_pathes = \n")
|
||||||
|
cfgOut.write("{\n")
|
||||||
|
cfgOut.write("\t\"" + ExportBuildDirectory + "/" + ClodExportDirectory + "\", \n")
|
||||||
|
cfgOut.write("\t\"" + ExportBuildDirectory + "/" + SkelExportDirectory + "\", \n")
|
||||||
|
cfgOut.write("\t\"" + ExportBuildDirectory + "/" + AnimBuildDirectory + "\", \n")
|
||||||
|
cfgOut.write("\t\"" + ExportBuildDirectory + "/" + ShapeOptimizedBuildDirectory + "\", \n")
|
||||||
|
cfgOut.write("\t\"" + ExportBuildDirectory + "/" + ShapeWithCoarseMeshBuildDirectory + "\", \n")
|
||||||
|
cfgOut.write("};\n")
|
||||||
|
cfgOut.write("\n")
|
||||||
|
cfgOut.close()
|
||||||
|
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
139
code/nel/tools/build_gamedata_linux/processes/clodbank/1_export.py
Executable file
139
code/nel/tools/build_gamedata_linux/processes/clodbank/1_export.py
Executable file
|
@ -0,0 +1,139 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# #################################################################
|
||||||
|
# ## WARNING : this is a generated file, don't change it !
|
||||||
|
# #################################################################
|
||||||
|
#
|
||||||
|
# \file 1_export.py
|
||||||
|
# \brief Export clodbank
|
||||||
|
# \date 2015-01-06-16-31-GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Export clodbank
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
if os.path.isfile("temp_log.log"):
|
||||||
|
os.remove("temp_log.log")
|
||||||
|
log = open("temp_log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Export clodbank")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
|
||||||
|
# Find tools
|
||||||
|
# ...
|
||||||
|
|
||||||
|
# Export clodbank 3dsmax
|
||||||
|
if MaxAvailable:
|
||||||
|
# Find tools
|
||||||
|
Max = findMax(log, MaxDirectory, MaxExecutable)
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
printLog(log, ">>> Export clodbank 3dsmax <<<")
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + ClodExportDirectory)
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + ClodTagExportDirectory)
|
||||||
|
for dir in ClodSourceDirectories:
|
||||||
|
mkPath(log, DatabaseDirectory + "/" + dir)
|
||||||
|
if (needUpdateDirByTagLog(log, DatabaseDirectory + "/" + dir, ".max", ExportBuildDirectory + "/" + ClodTagExportDirectory, ".max.tag")):
|
||||||
|
scriptSrc = "maxscript/clod_export.ms"
|
||||||
|
scriptDst = MaxUserDirectory + "/scripts/clod_export.ms"
|
||||||
|
outputLogfile = ScriptDirectory + "/processes/clodbank/log.log"
|
||||||
|
outputDirectory = ExportBuildDirectory + "/" + ClodExportDirectory
|
||||||
|
tagDirectory = ExportBuildDirectory + "/" + ClodTagExportDirectory
|
||||||
|
maxSourceDir = DatabaseDirectory + "/" + dir
|
||||||
|
maxRunningTagFile = tagDirectory + "/max_running.tag"
|
||||||
|
tagList = findFiles(log, tagDirectory, "", ".max.tag")
|
||||||
|
tagLen = len(tagList)
|
||||||
|
if os.path.isfile(scriptDst):
|
||||||
|
os.remove(scriptDst)
|
||||||
|
tagDiff = 1
|
||||||
|
sSrc = open(scriptSrc, "r")
|
||||||
|
sDst = open(scriptDst, "w")
|
||||||
|
for line in sSrc:
|
||||||
|
newline = line.replace("%OutputLogfile%", outputLogfile)
|
||||||
|
newline = newline.replace("%MaxSourceDirectory%", maxSourceDir)
|
||||||
|
newline = newline.replace("%OutputDirectory%", outputDirectory)
|
||||||
|
newline = newline.replace("%TagDirectory%", tagDirectory)
|
||||||
|
sDst.write(newline)
|
||||||
|
sSrc.close()
|
||||||
|
sDst.close()
|
||||||
|
zeroRetryLimit = 3
|
||||||
|
while tagDiff > 0:
|
||||||
|
mrt = open(maxRunningTagFile, "w")
|
||||||
|
mrt.write("moe-moe-kyun")
|
||||||
|
mrt.close()
|
||||||
|
printLog(log, "MAXSCRIPT " + scriptDst)
|
||||||
|
subprocess.call([ Max, "-U", "MAXScript", "clod_export.ms", "-q", "-mi", "-mip" ])
|
||||||
|
if os.path.exists(outputLogfile):
|
||||||
|
try:
|
||||||
|
lSrc = open(outputLogfile, "r")
|
||||||
|
for line in lSrc:
|
||||||
|
lineStrip = line.strip()
|
||||||
|
if (len(lineStrip) > 0):
|
||||||
|
printLog(log, lineStrip)
|
||||||
|
lSrc.close()
|
||||||
|
os.remove(outputLogfile)
|
||||||
|
except Exception:
|
||||||
|
printLog(log, "ERROR Failed to read 3dsmax log")
|
||||||
|
else:
|
||||||
|
printLog(log, "WARNING No 3dsmax log")
|
||||||
|
tagList = findFiles(log, tagDirectory, "", ".max.tag")
|
||||||
|
newTagLen = len(tagList)
|
||||||
|
tagDiff = newTagLen - tagLen
|
||||||
|
tagLen = newTagLen
|
||||||
|
addTagDiff = 0
|
||||||
|
if os.path.exists(maxRunningTagFile):
|
||||||
|
printLog(log, "FAIL 3ds Max crashed and/or file export failed!")
|
||||||
|
if tagDiff == 0:
|
||||||
|
if zeroRetryLimit > 0:
|
||||||
|
zeroRetryLimit = zeroRetryLimit - 1
|
||||||
|
addTagDiff = 1
|
||||||
|
else:
|
||||||
|
printLog(log, "FAIL Retry limit reached!")
|
||||||
|
else:
|
||||||
|
addTagDiff = 1
|
||||||
|
os.remove(maxRunningTagFile)
|
||||||
|
printLog(log, "Exported " + str(tagDiff) + " .max files!")
|
||||||
|
tagDiff += addTagDiff
|
||||||
|
os.remove(scriptDst)
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
shutil.move("temp_log.log", "log.log")
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
68
code/nel/tools/build_gamedata_linux/processes/clodbank/2_build.py
Executable file
68
code/nel/tools/build_gamedata_linux/processes/clodbank/2_build.py
Executable file
|
@ -0,0 +1,68 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 2_build.py
|
||||||
|
# \brief Build clodbank
|
||||||
|
# \date 2009-03-10 13:13GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Build clodbank
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Build clodbank")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# Find tools
|
||||||
|
BuildClodBank = findTool(log, ToolDirectories, BuildClodBankTool, ToolSuffix)
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# Build clodbank
|
||||||
|
printLog(log, ">>> Build clodbank <<<")
|
||||||
|
if BuildClodBank == "":
|
||||||
|
toolLogFail(log, BuildClodBankTool, ToolSuffix)
|
||||||
|
else:
|
||||||
|
srcDir = ExportBuildDirectory + "/" + ClodExportDirectory
|
||||||
|
mkPath(log, srcDir)
|
||||||
|
destDir = ExportBuildDirectory + "/" + ClodBankBuildDirectory
|
||||||
|
mkPath(log, destDir)
|
||||||
|
mkPath(log, ActiveProjectDirectory + "/generated")
|
||||||
|
destFile = destDir + "/" + ClodBankFileName
|
||||||
|
configFile = DatabaseDirectory + "/" + ClodConfigFile
|
||||||
|
subprocess.call([ BuildClodBank, ActiveProjectDirectory + "/generated/clod_paths.cfg", configFile, destFile ])
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
57
code/nel/tools/build_gamedata_linux/processes/clodbank/3_install.py
Executable file
57
code/nel/tools/build_gamedata_linux/processes/clodbank/3_install.py
Executable file
|
@ -0,0 +1,57 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 3_install.py
|
||||||
|
# \brief Install clodbank
|
||||||
|
# \date 2009-03-10 13:13GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Install clodbank
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Install clodbank")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
printLog(log, ">>> Install clodbank <<<")
|
||||||
|
srcDir = ExportBuildDirectory + "/" + ClodBankBuildDirectory
|
||||||
|
mkPath(log, srcDir)
|
||||||
|
destDir = InstallDirectory + "/" + ShapeInstallDirectory
|
||||||
|
mkPath(log, destDir)
|
||||||
|
copyFilesNoTreeIfNeeded(log, srcDir, destDir)
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
328
code/nel/tools/build_gamedata_linux/processes/clodbank/maxscript/clod_export.ms
Executable file
328
code/nel/tools/build_gamedata_linux/processes/clodbank/maxscript/clod_export.ms
Executable file
|
@ -0,0 +1,328 @@
|
||||||
|
|
||||||
|
|
||||||
|
-- #################################################################
|
||||||
|
-- ## WARNING : this is a generated file, don't change it !
|
||||||
|
-- #################################################################
|
||||||
|
|
||||||
|
|
||||||
|
-- Allocate 20 Me for the script
|
||||||
|
heapSize += 15000000
|
||||||
|
|
||||||
|
-- In case of error just abort the app and don't show nel report window
|
||||||
|
NelForceQuitOnMsgDisplayer()
|
||||||
|
|
||||||
|
nlErrorFilename = "%OutputLogfile%"
|
||||||
|
nlErrorStream = openFile nlErrorFilename mode:"a"
|
||||||
|
if nlErrorStream == undefined then
|
||||||
|
nlErrorStream = createFile nlErrorFilename
|
||||||
|
|
||||||
|
-- Unhide layers
|
||||||
|
fn unhidelayers =
|
||||||
|
(
|
||||||
|
for i = 0 to (LayerManager.count - 1) do
|
||||||
|
(
|
||||||
|
layer = (LayerManager.getLayer i)
|
||||||
|
layer.ishidden = false
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
-- Unhide category
|
||||||
|
fn unhidecategory =
|
||||||
|
(
|
||||||
|
if (geometry.count > 0) then
|
||||||
|
(
|
||||||
|
unhide geometry[1]
|
||||||
|
if (geometry[1].ishidden == true) then
|
||||||
|
max hide object toggle
|
||||||
|
)
|
||||||
|
if (shapes.count > 0) then
|
||||||
|
(
|
||||||
|
unhide shapes[1]
|
||||||
|
if (shapes[1].ishidden == true) then
|
||||||
|
max hide shape toggle
|
||||||
|
)
|
||||||
|
if (lights.count > 0) then
|
||||||
|
(
|
||||||
|
unhide lights[1]
|
||||||
|
if (lights[1].ishidden == true) then
|
||||||
|
max hide light toggle
|
||||||
|
)
|
||||||
|
if (cameras.count > 0) then
|
||||||
|
(
|
||||||
|
unhide cameras[1]
|
||||||
|
if (cameras[1].ishidden == true) then
|
||||||
|
max hide camera toggle
|
||||||
|
)
|
||||||
|
if (helpers.count > 0) then
|
||||||
|
(
|
||||||
|
unhide helpers[1]
|
||||||
|
if (helpers[1].ishidden == true) then
|
||||||
|
max hide helper toggle
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
-- Log a message
|
||||||
|
fn nlerror message =
|
||||||
|
(
|
||||||
|
if nlErrorStream != undefined then
|
||||||
|
(
|
||||||
|
format "%\n" message to:nlErrorStream
|
||||||
|
flush nlErrorStream
|
||||||
|
)
|
||||||
|
|
||||||
|
-- To the console
|
||||||
|
print message
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- Some globals
|
||||||
|
|
||||||
|
NEL3D_APPDATA_DONOTEXPORT = 1423062565 -- do not export me : "undefined" = export me
|
||||||
|
-- "0" = export me
|
||||||
|
-- "1" = DONT export me
|
||||||
|
NEL3D_APPDATA_CHARACTER_LOD = 1423062618 -- "1": I am a character lod if "1". "0" or undefined: I am not.
|
||||||
|
|
||||||
|
|
||||||
|
-- Must export this node ?
|
||||||
|
fn isToBeExported node =
|
||||||
|
(
|
||||||
|
if ((classof node) == RklPatch) then
|
||||||
|
return false
|
||||||
|
|
||||||
|
if ((classof node) == nel_ps) then
|
||||||
|
return false
|
||||||
|
|
||||||
|
if ((classof node) == nel_pacs_cylinder) then
|
||||||
|
return false
|
||||||
|
|
||||||
|
if ((classof node) == nel_pacs_box) then
|
||||||
|
return false
|
||||||
|
|
||||||
|
doNotExport = getappdata node NEL3D_APPDATA_DONOTEXPORT
|
||||||
|
if (doNotExport != undefined) then
|
||||||
|
(
|
||||||
|
if (doNotExport == "1") then
|
||||||
|
return false
|
||||||
|
)
|
||||||
|
return true
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
-- is this node flagged as a LodCharacter ??
|
||||||
|
fn isLodCharacter node =
|
||||||
|
(
|
||||||
|
isCLod = getappdata node NEL3D_APPDATA_CHARACTER_LOD
|
||||||
|
if (isCLod == undefined) then
|
||||||
|
return false
|
||||||
|
if (isCLod == "1") then
|
||||||
|
return true
|
||||||
|
return false
|
||||||
|
)
|
||||||
|
|
||||||
|
fn runNelMaxExport inputMaxFile =
|
||||||
|
(
|
||||||
|
tagThisFile = true
|
||||||
|
|
||||||
|
-- Unhide category
|
||||||
|
unhidelayers()
|
||||||
|
unhidecategory()
|
||||||
|
|
||||||
|
-- Unhide
|
||||||
|
max unhide all
|
||||||
|
|
||||||
|
-- unselect
|
||||||
|
max select none
|
||||||
|
clearSelection()
|
||||||
|
|
||||||
|
-- Exported object count
|
||||||
|
exported = 0
|
||||||
|
|
||||||
|
-- For each node
|
||||||
|
for node in geometry do
|
||||||
|
(
|
||||||
|
-- It is root ?
|
||||||
|
if (node.parent == undefined) then
|
||||||
|
(
|
||||||
|
-- Can be exported ?
|
||||||
|
if (isToBeExported node == true) then
|
||||||
|
(
|
||||||
|
-- Is a Lod character?
|
||||||
|
if ((isLodCharacter node) == true) then
|
||||||
|
(
|
||||||
|
-- Output directory
|
||||||
|
outputNelFile = ("%OutputDirectory%/" + (node.name) + ".clod")
|
||||||
|
|
||||||
|
-- Compare file date
|
||||||
|
if (NeLTestFileDate outputNelFile inputMaxFile) == true then
|
||||||
|
(
|
||||||
|
try
|
||||||
|
(
|
||||||
|
-- Export the shape
|
||||||
|
if (NelExportLodCharacter node outputNelFile false) == true then
|
||||||
|
(
|
||||||
|
nlerror("OK " + outputNelFile)
|
||||||
|
exported = exported+1
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
-- Error
|
||||||
|
nlerror("ERROR exporting .clod " + node.name + " in file " + inputMaxFile)
|
||||||
|
tagThisFile = false
|
||||||
|
)
|
||||||
|
)
|
||||||
|
catch
|
||||||
|
(
|
||||||
|
-- Error
|
||||||
|
nlerror("ERROR fatal error exporting .clod " + node.name + " in file " + inputMaxFile)
|
||||||
|
tagThisFile = false
|
||||||
|
)
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
-- Error
|
||||||
|
nlerror("SKIPPED " + outputNelFile)
|
||||||
|
exported = exported + 1
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
-- Something exported
|
||||||
|
if (exported == 0) then
|
||||||
|
(
|
||||||
|
-- Error
|
||||||
|
nlerror ("WARNING no .clod exported from the file " + inputMaxFile)
|
||||||
|
)
|
||||||
|
|
||||||
|
return tagThisFile
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
removeRunningTag = true
|
||||||
|
|
||||||
|
try
|
||||||
|
(
|
||||||
|
undo off
|
||||||
|
(
|
||||||
|
-- Get files in the %MaxSourceDirectory% directory
|
||||||
|
files = getFiles "%MaxSourceDirectory%/*.max"
|
||||||
|
gc()
|
||||||
|
|
||||||
|
-- Sort files
|
||||||
|
sort files
|
||||||
|
gc()
|
||||||
|
|
||||||
|
-- No file ?
|
||||||
|
if files.count != 0 then
|
||||||
|
(
|
||||||
|
-- For each files
|
||||||
|
for i = 1 to files.count do
|
||||||
|
(
|
||||||
|
inputMaxFile = files[i]
|
||||||
|
outputTagFile = ("%TagDirectory%/" + (getFilenameFile inputMaxFile) + (getFilenameType inputMaxFile) + ".tag")
|
||||||
|
|
||||||
|
--try
|
||||||
|
--(
|
||||||
|
-- Compare file date
|
||||||
|
if (NeLTestFileDate outputTagFile inputMaxFile) == true then
|
||||||
|
(
|
||||||
|
-- Free memory and file handles
|
||||||
|
gc()
|
||||||
|
heapfree
|
||||||
|
|
||||||
|
-- Reset 3dsmax
|
||||||
|
resetMAXFile #noprompt
|
||||||
|
|
||||||
|
-- Open the max project
|
||||||
|
nlerror("Scanning file " + inputMaxFile + " ...")
|
||||||
|
if (loadMaxFile inputMaxFile quiet:true) == true then
|
||||||
|
(
|
||||||
|
tagThisFile = runNelMaxExport(inputMaxFile)
|
||||||
|
|
||||||
|
-- Write a tag file
|
||||||
|
if tagThisFile == true then
|
||||||
|
(
|
||||||
|
tagFile = createFile outputTagFile
|
||||||
|
if tagFile == undefined then
|
||||||
|
(
|
||||||
|
nlerror("WARNING can't create tag file " + outputTagFile)
|
||||||
|
removeRunningTag = false
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
print "mukyu" to: tagFile
|
||||||
|
close tagFile
|
||||||
|
)
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
removeRunningTag = false
|
||||||
|
)
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
-- Error
|
||||||
|
nlerror("ERROR exporting 'clod': can't open the file " + inputMaxFile)
|
||||||
|
removeRunningTag = false
|
||||||
|
)
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
nlerror("SKIPPED BY TAG " + inputMaxFile)
|
||||||
|
)
|
||||||
|
--)
|
||||||
|
--catch
|
||||||
|
--(
|
||||||
|
-- -- Error
|
||||||
|
-- nlerror("ERROR error exporting 'clod' in file " + inputMaxFile)
|
||||||
|
-- removeRunningTag = false
|
||||||
|
--)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
nlerror("WARNING no *.max file in folder %MaxSourceDirectory%")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
catch
|
||||||
|
(
|
||||||
|
-- Error
|
||||||
|
nlerror("ERROR Fatal error exporting 'clod' in folder %MaxSourceDirectory%")
|
||||||
|
nlerror("FAIL Fatal error occured")
|
||||||
|
NelForceQuitRightNow()
|
||||||
|
removeRunningTag = false
|
||||||
|
)
|
||||||
|
|
||||||
|
try
|
||||||
|
(
|
||||||
|
if (removeRunningTag) then
|
||||||
|
(
|
||||||
|
resetMAXFile #noPrompt
|
||||||
|
)
|
||||||
|
)
|
||||||
|
catch
|
||||||
|
(
|
||||||
|
nlerror("FAIL Last reset fails")
|
||||||
|
removeRunningTag = false
|
||||||
|
)
|
||||||
|
|
||||||
|
if (removeRunningTag) then
|
||||||
|
(
|
||||||
|
nlerror("SUCCESS All .max files have been successfully exported")
|
||||||
|
deleteFile("%TagDirectory%/max_running.tag")
|
||||||
|
)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
nlerror("FAIL One or more issues occured")
|
||||||
|
NelForceQuitRightNow()
|
||||||
|
)
|
||||||
|
|
||||||
|
-- Bye
|
||||||
|
nlerror("BYE")
|
||||||
|
quitMAX #noPrompt
|
||||||
|
quitMAX() #noPrompt
|
||||||
|
|
76
code/nel/tools/build_gamedata_linux/processes/copy/0_setup.py
Executable file
76
code/nel/tools/build_gamedata_linux/processes/copy/0_setup.py
Executable file
|
@ -0,0 +1,76 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 0_setup.py
|
||||||
|
# \brief setup copy
|
||||||
|
# \date 2010-05-24 13:42GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Setup copy
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Setup copy")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# Setup source directories
|
||||||
|
printLog(log, ">>> Setup source directories <<<")
|
||||||
|
for dir in CopyDirectSourceDirectories:
|
||||||
|
mkPath(log, dir)
|
||||||
|
for file in CopyDirectSourceFiles:
|
||||||
|
mkPath(log, os.path.dirname(file))
|
||||||
|
for dir in CopyLeveldesignSourceDirectories:
|
||||||
|
mkPath(log, LeveldesignDirectory + "/" + dir)
|
||||||
|
for file in CopyLeveldesignSourceFiles:
|
||||||
|
mkPath(log, os.path.dirname(LeveldesignDirectory + "/" + file))
|
||||||
|
for dir in CopyLeveldesignWorldSourceDirectories:
|
||||||
|
mkPath(log, LeveldesignWorldDirectory + "/" + dir)
|
||||||
|
for file in CopyLeveldesignWorldSourceFiles:
|
||||||
|
mkPath(log, os.path.dirname(LeveldesignWorldDirectory + "/" + file))
|
||||||
|
for dir in CopyLeveldesignDfnSourceDirectories:
|
||||||
|
mkPath(log, LeveldesignDfnDirectory + "/" + dir)
|
||||||
|
for file in CopyLeveldesignDfnSourceFiles:
|
||||||
|
mkPath(log, os.path.dirname(LeveldesignDfnDirectory + "/" + file))
|
||||||
|
for dir in CopyDatabaseSourceDirectories:
|
||||||
|
mkPath(log, DatabaseDirectory + "/" + dir)
|
||||||
|
for file in CopyDatabaseSourceFiles:
|
||||||
|
mkPath(log, os.path.dirname(DatabaseDirectory + "/" + file))
|
||||||
|
|
||||||
|
# Setup client directories
|
||||||
|
printLog(log, ">>> Setup client directories <<<")
|
||||||
|
mkPath(log, InstallDirectory + "/" + CopyInstallDirectory)
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
49
code/nel/tools/build_gamedata_linux/processes/copy/1_export.py
Executable file
49
code/nel/tools/build_gamedata_linux/processes/copy/1_export.py
Executable file
|
@ -0,0 +1,49 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 1_export.py
|
||||||
|
# \brief Export copy
|
||||||
|
# \date 2010-05-24 13:42GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Export copy
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Export copy")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
49
code/nel/tools/build_gamedata_linux/processes/copy/2_build.py
Executable file
49
code/nel/tools/build_gamedata_linux/processes/copy/2_build.py
Executable file
|
@ -0,0 +1,49 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 2_build.py
|
||||||
|
# \brief Build copy
|
||||||
|
# \date 2010-05-24 13:42GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Build copy
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Build copy")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
85
code/nel/tools/build_gamedata_linux/processes/copy/3_install.py
Executable file
85
code/nel/tools/build_gamedata_linux/processes/copy/3_install.py
Executable file
|
@ -0,0 +1,85 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 3_install.py
|
||||||
|
# \brief Install copy
|
||||||
|
# \date 2010-05-24 13:42GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Install copy
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Install copy")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
installPath = InstallDirectory + "/" + CopyInstallDirectory
|
||||||
|
mkPath(log, installPath)
|
||||||
|
|
||||||
|
printLog(log, ">>> Install copy <<<")
|
||||||
|
for dir in CopyDirectSourceDirectories:
|
||||||
|
copyFilesRecursiveNoTreeIfNeeded(log, dir, installPath)
|
||||||
|
for file in CopyDirectSourceFiles:
|
||||||
|
copyFileIfNeeded(log, file, installPath + "/" + os.path.basename(file))
|
||||||
|
for dir in CopyLeveldesignSourceDirectories:
|
||||||
|
copyFilesRecursiveNoTreeIfNeeded(log, LeveldesignDirectory + "/" + dir, installPath)
|
||||||
|
for file in CopyLeveldesignSourceFiles:
|
||||||
|
copyFileIfNeeded(log, LeveldesignDirectory + "/" + file, installPath + "/" + os.path.basename(file))
|
||||||
|
for dir in CopyLeveldesignWorldSourceDirectories:
|
||||||
|
copyFilesRecursiveNoTreeIfNeeded(log, LeveldesignWorldDirectory + "/" + dir, installPath)
|
||||||
|
for file in CopyLeveldesignWorldSourceFiles:
|
||||||
|
copyFileIfNeeded(log, LeveldesignWorldDirectory + "/" + file, installPath + "/" + os.path.basename(file))
|
||||||
|
for dir in CopyLeveldesignDfnSourceDirectories:
|
||||||
|
copyFilesRecursiveNoTreeIfNeeded(log, LeveldesignDfnDirectory + "/" + dir, installPath)
|
||||||
|
for file in CopyLeveldesignDfnSourceFiles:
|
||||||
|
copyFileIfNeeded(log, LeveldesignDfnDirectory + "/" + file, installPath + "/" + os.path.basename(file))
|
||||||
|
for dir in CopyDatabaseSourceDirectories:
|
||||||
|
copyFilesRecursiveNoTreeIfNeeded(log, DatabaseDirectory + "/" + dir, installPath)
|
||||||
|
for file in CopyDatabaseSourceFiles:
|
||||||
|
copyFileIfNeeded(log, DatabaseDirectory + "/" + file, installPath + "/" + os.path.basename(file))
|
||||||
|
|
||||||
|
try:
|
||||||
|
CopyWindowsExeDllCfgSourceFiles
|
||||||
|
except NameError:
|
||||||
|
CopyWindowsExeDllCfgSourceFiles = [ ]
|
||||||
|
for file in CopyWindowsExeDllCfgSourceFiles:
|
||||||
|
filePath = findFileMultiDir(log, WindowsExeDllCfgDirectories, file)
|
||||||
|
if (filePath != ""):
|
||||||
|
copyFileIfNeeded(log, filePath, installPath + "/" + os.path.basename(file))
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
65
code/nel/tools/build_gamedata_linux/processes/displace/0_setup.py
Executable file
65
code/nel/tools/build_gamedata_linux/processes/displace/0_setup.py
Executable file
|
@ -0,0 +1,65 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 0_setup.py
|
||||||
|
# \brief Setup displace
|
||||||
|
# \date 2009-03-10-21-45-GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Setup displace
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Setup displace")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# Setup source directories
|
||||||
|
printLog(log, ">>> Setup source directories <<<")
|
||||||
|
for dir in DisplaceSourceDirectories:
|
||||||
|
mkPath(log, DatabaseDirectory + "/" + dir)
|
||||||
|
|
||||||
|
# Setup export directories
|
||||||
|
printLog(log, ">>> Setup export directories <<<")
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + DisplaceExportDirectory)
|
||||||
|
|
||||||
|
# Setup build directories
|
||||||
|
printLog(log, ">>> Setup build directories <<<")
|
||||||
|
|
||||||
|
# Setup client directories
|
||||||
|
printLog(log, ">>> Setup client directories <<<")
|
||||||
|
mkPath(log, InstallDirectory + "/" + DisplaceInstallDirectory)
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
55
code/nel/tools/build_gamedata_linux/processes/displace/1_export.py
Executable file
55
code/nel/tools/build_gamedata_linux/processes/displace/1_export.py
Executable file
|
@ -0,0 +1,55 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 1_export.py
|
||||||
|
# \brief Export displace
|
||||||
|
# \date 2009-03-10-21-45-GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Export displace
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Export displace")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + DisplaceExportDirectory)
|
||||||
|
for dir in DisplaceSourceDirectories:
|
||||||
|
mkPath(log, DatabaseDirectory + "/" + dir)
|
||||||
|
copyFilesExtNoTreeIfNeeded(log, DatabaseDirectory + "/" + dir, ExportBuildDirectory + "/" + DisplaceExportDirectory, ".tga")
|
||||||
|
copyFilesExtNoTreeIfNeeded(log, DatabaseDirectory + "/" + dir, ExportBuildDirectory + "/" + DisplaceExportDirectory, ".png")
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
49
code/nel/tools/build_gamedata_linux/processes/displace/2_build.py
Executable file
49
code/nel/tools/build_gamedata_linux/processes/displace/2_build.py
Executable file
|
@ -0,0 +1,49 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 2_build.py
|
||||||
|
# \brief Build displace
|
||||||
|
# \date 2009-03-10-21-45-GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Build displace
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Build displace")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
57
code/nel/tools/build_gamedata_linux/processes/displace/3_install.py
Executable file
57
code/nel/tools/build_gamedata_linux/processes/displace/3_install.py
Executable file
|
@ -0,0 +1,57 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 3_install.py
|
||||||
|
# \brief Install displace
|
||||||
|
# \date 2009-03-10-21-45-GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Install displace
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Install displace")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
printLog(log, ">>> Install displace <<<")
|
||||||
|
installPath = InstallDirectory + "/" + DisplaceInstallDirectory
|
||||||
|
mkPath(log, installPath)
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + DisplaceExportDirectory)
|
||||||
|
copyFilesExtNoTreeIfNeeded(log, ExportBuildDirectory + "/" + DisplaceExportDirectory, installPath, ".tga")
|
||||||
|
copyFilesExtNoTreeIfNeeded(log, ExportBuildDirectory + "/" + DisplaceExportDirectory, installPath, ".png")
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue