correction du merge

This commit is contained in:
deed 2017-03-21 21:20:08 +01:00
parent 3e9c116530
commit 6a92d08499
91 changed files with 155477 additions and 183810 deletions

View file

@ -48,7 +48,7 @@ MACRO(NL_CONFIGURE_CHECKS)
SET(COPYRIGHT "${YEAR} ${AUTHOR}")
IF(NOT RYZOM_CLIENT_ICON)
SET(RYZOM_CLIENT_ICON "khanat_client")
SET(RYZOM_CLIENT_ICON "ryzom_client")
ENDIF()
CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/config.h.cmake ${CMAKE_BINARY_DIR}/config.h)

View file

@ -1,101 +1,101 @@
# - Find DirectInput
# Find the DirectSound includes and libraries
#
# MAXSDK_DIR - 3DSMAX SDK root directory
# MAXSDK_INCLUDE_DIR - where to find baseinterface.h
# MAXSDK_LIBRARIES - List of libraries when using 3DSMAX.
# MAXSDK_FOUND - True if MAX SDK found.
if(MAXSDK_INCLUDE_DIR)
# Already in cache, be silent
SET(MAXSDK_FIND_QUIETLY TRUE)
endif()
FIND_PATH(MAXSDK_DIR
"include/maxversion.h"
HINTS
"$ENV{MAXSDK_DIR}"
PATHS
"$ENV{ADSK_3DSMAX_SDK_2012}/maxsdk"
"$ENV{3DSMAX_2011_SDK_PATH}/maxsdk"
"$ENV{PROGRAMFILES}/Autodesk/3ds Max 2017 SDK/maxsdk"
"$ENV{PROGRAMFILES}/Autodesk/3ds Max 2010 SDK/maxsdk"
"$ENV{PROGRAMFILES}/Autodesk/3ds Max 2009 SDK/maxsdk"
"$ENV{PROGRAMFILES}/Autodesk/3ds Max 2008 SDK/maxsdk"
"$ENV{PROGRAMFILES}/Autodesk/3ds Max 9 SDK/maxsdk"
)
FIND_PATH(MAXSDK_INCLUDE_DIR
max.h
HINTS
${MAXSDK_DIR}/include
)
FIND_PATH(MAXSDK_CS_INCLUDE_DIR bipexp.h
HINTS
${MAXSDK_DIR}/include/CS
)
IF(TARGET_X64)
SET(MAXSDK_LIBRARY_DIRS ${MAXSDK_DIR}/x64/lib ${MAXSDK_DIR}/lib/x64/Release)
ELSE()
SET(MAXSDK_LIBRARY_DIRS ${MAXSDK_DIR}/lib)
ENDIF()
MACRO(FIND_3DS_LIBRARY MYLIBRARY MYLIBRARYNAME)
FIND_LIBRARY(${MYLIBRARY}
NAMES ${MYLIBRARYNAME}
HINTS
${MAXSDK_LIBRARY_DIRS}
)
ENDMACRO()
FIND_3DS_LIBRARY(MAXSDK_CORE_LIBRARY core)
FIND_3DS_LIBRARY(MAXSDK_GEOM_LIBRARY geom)
FIND_3DS_LIBRARY(MAXSDK_GFX_LIBRARY gfx)
FIND_3DS_LIBRARY(MAXSDK_MESH_LIBRARY mesh)
FIND_3DS_LIBRARY(MAXSDK_MAXUTIL_LIBRARY maxutil)
FIND_3DS_LIBRARY(MAXSDK_MAXSCRIPT_LIBRARY maxscrpt)
FIND_3DS_LIBRARY(MAXSDK_PARAMBLK2_LIBRARY paramblk2)
FIND_3DS_LIBRARY(MAXSDK_BMM_LIBRARY bmm)
# Handle the QUIETLY and REQUIRED arguments and set MAXSDK_FOUND to TRUE if
# all listed variables are TRUE.
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(MAXSDK DEFAULT_MSG
MAXSDK_INCLUDE_DIR MAXSDK_CORE_LIBRARY)
if(MAXSDK_FOUND)
SET(MAXSDK_LIBRARIES
${MAXSDK_CORE_LIBRARY}
${MAXSDK_GEOM_LIBRARY}
${MAXSDK_GFX_LIBRARY}
${MAXSDK_MESH_LIBRARY}
${MAXSDK_MAXUTIL_LIBRARY}
${MAXSDK_MAXSCRIPT_LIBRARY}
${MAXSDK_PARAMBLK2_LIBRARY}
${MAXSDK_BMM_LIBRARY})
# parse maxversion.h to determine SDK version
IF(EXISTS "${MAXSDK_DIR}/include/maxversion.h")
FILE(STRINGS "${MAXSDK_DIR}/include/maxversion.h" LINES REGEX "#define MAX_PRODUCT_YEAR_NUMBER ([0-9]+)")
STRING(REGEX REPLACE ".+MAX_PRODUCT_YEAR_NUMBER ([0-9]+)" "\\1" MAXSDK_VERSION "${LINES}")
UNSET(LINES)
ELSE()
SET(MAXSDK_VERSION "Unknown")
ENDIF()
MESSAGE(STATUS "Found 3dsmax version ${MAXSDK_VERSION} in ${MAXSDK_DIR}")
# 3ds Max 2013 and later are always Unicode
IF(MAXSDK_VERSION VERSION_GREATER 2012)
SET(MAXSDK_DEFINITIONS -DUNICODE -D_UNICODE)
ELSE()
SET(MAXSDK_DEFINITIONS)
ENDIF()
ELSE()
set(MAXSDK_LIBRARIES)
ENDIF()
mark_as_advanced(MAXSDK_INCLUDE_DIR MAXSDK_LIBRARY)
# - Find DirectInput
# Find the DirectSound includes and libraries
#
# MAXSDK_DIR - 3DSMAX SDK root directory
# MAXSDK_INCLUDE_DIR - where to find baseinterface.h
# MAXSDK_LIBRARIES - List of libraries when using 3DSMAX.
# MAXSDK_FOUND - True if MAX SDK found.
if(MAXSDK_INCLUDE_DIR)
# Already in cache, be silent
SET(MAXSDK_FIND_QUIETLY TRUE)
endif()
FIND_PATH(MAXSDK_DIR
"include/maxversion.h"
HINTS
"$ENV{MAXSDK_DIR}"
PATHS
"$ENV{ADSK_3DSMAX_SDK_2012}/maxsdk"
"$ENV{3DSMAX_2011_SDK_PATH}/maxsdk"
"$ENV{PROGRAMFILES}/Autodesk/3ds Max 2017 SDK/maxsdk"
"$ENV{PROGRAMFILES}/Autodesk/3ds Max 2010 SDK/maxsdk"
"$ENV{PROGRAMFILES}/Autodesk/3ds Max 2009 SDK/maxsdk"
"$ENV{PROGRAMFILES}/Autodesk/3ds Max 2008 SDK/maxsdk"
"$ENV{PROGRAMFILES}/Autodesk/3ds Max 9 SDK/maxsdk"
)
FIND_PATH(MAXSDK_INCLUDE_DIR
max.h
HINTS
${MAXSDK_DIR}/include
)
FIND_PATH(MAXSDK_CS_INCLUDE_DIR bipexp.h
HINTS
${MAXSDK_DIR}/include/CS
)
IF(TARGET_X64)
SET(MAXSDK_LIBRARY_DIRS ${MAXSDK_DIR}/x64/lib ${MAXSDK_DIR}/lib/x64/Release)
ELSE()
SET(MAXSDK_LIBRARY_DIRS ${MAXSDK_DIR}/lib)
ENDIF()
MACRO(FIND_3DS_LIBRARY MYLIBRARY MYLIBRARYNAME)
FIND_LIBRARY(${MYLIBRARY}
NAMES ${MYLIBRARYNAME}
HINTS
${MAXSDK_LIBRARY_DIRS}
)
ENDMACRO()
FIND_3DS_LIBRARY(MAXSDK_CORE_LIBRARY core)
FIND_3DS_LIBRARY(MAXSDK_GEOM_LIBRARY geom)
FIND_3DS_LIBRARY(MAXSDK_GFX_LIBRARY gfx)
FIND_3DS_LIBRARY(MAXSDK_MESH_LIBRARY mesh)
FIND_3DS_LIBRARY(MAXSDK_MAXUTIL_LIBRARY maxutil)
FIND_3DS_LIBRARY(MAXSDK_MAXSCRIPT_LIBRARY maxscrpt)
FIND_3DS_LIBRARY(MAXSDK_PARAMBLK2_LIBRARY paramblk2)
FIND_3DS_LIBRARY(MAXSDK_BMM_LIBRARY bmm)
# Handle the QUIETLY and REQUIRED arguments and set MAXSDK_FOUND to TRUE if
# all listed variables are TRUE.
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(MAXSDK DEFAULT_MSG
MAXSDK_INCLUDE_DIR MAXSDK_CORE_LIBRARY)
if(MAXSDK_FOUND)
SET(MAXSDK_LIBRARIES
${MAXSDK_CORE_LIBRARY}
${MAXSDK_GEOM_LIBRARY}
${MAXSDK_GFX_LIBRARY}
${MAXSDK_MESH_LIBRARY}
${MAXSDK_MAXUTIL_LIBRARY}
${MAXSDK_MAXSCRIPT_LIBRARY}
${MAXSDK_PARAMBLK2_LIBRARY}
${MAXSDK_BMM_LIBRARY})
# parse maxversion.h to determine SDK version
IF(EXISTS "${MAXSDK_DIR}/include/maxversion.h")
FILE(STRINGS "${MAXSDK_DIR}/include/maxversion.h" LINES REGEX "#define MAX_PRODUCT_YEAR_NUMBER ([0-9]+)")
STRING(REGEX REPLACE ".+MAX_PRODUCT_YEAR_NUMBER ([0-9]+)" "\\1" MAXSDK_VERSION "${LINES}")
UNSET(LINES)
ELSE()
SET(MAXSDK_VERSION "Unknown")
ENDIF()
MESSAGE(STATUS "Found 3dsmax version ${MAXSDK_VERSION} in ${MAXSDK_DIR}")
# 3ds Max 2013 and later are always Unicode
IF(MAXSDK_VERSION VERSION_GREATER 2012)
SET(MAXSDK_DEFINITIONS -DUNICODE -D_UNICODE)
ELSE()
SET(MAXSDK_DEFINITIONS)
ENDIF()
ELSE()
set(MAXSDK_LIBRARIES)
ENDIF()
mark_as_advanced(MAXSDK_INCLUDE_DIR MAXSDK_LIBRARY)

View file

@ -1,54 +0,0 @@
# - Locate MFC libraries
# This module defines
# MFC_FOUND, if false, do not try to link to MFC
# MFC_LIBRARY_DIR, where to find libraries
# MFC_INCLUDE_DIR, where to find headers
IF(CustomMFC_FIND_REQUIRED)
SET(MFC_FIND_REQUIRED TRUE)
ENDIF()
IF(NOT MFC_DIR)
# If MFC have been found, remember their directory
IF(VC_DIR)
SET(MFC_STANDARD_DIR "${VC_DIR}/atlmfc")
ENDIF()
FIND_PATH(MFC_DIR
include/afxwin.h
HINTS
${MFC_STANDARD_DIR}
)
ENDIF()
# Display an error message if MFC are not found, MFC_FOUND is updated
# User will be able to update MFC_DIR to the correct directory
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(MFC DEFAULT_MSG MFC_DIR)
IF(MFC_FOUND)
SET(MFC_INCLUDE_DIR "${MFC_DIR}/include")
INCLUDE_DIRECTORIES(${MFC_INCLUDE_DIR})
# Using 32 or 64 bits libraries
IF(TARGET_X64)
SET(MFC_LIBRARY_DIR "${MFC_DIR}/lib/amd64")
ELSE()
SET(MFC_LIBRARY_DIR "${MFC_DIR}/lib")
ENDIF()
# Add MFC libraries directory to default library path
LINK_DIRECTORIES(${MFC_LIBRARY_DIR})
# Set definitions for using MFC in DLL
<<<<<<< HEAD
SET(MFC_DEFINITIONS -D_AFXDLL)
=======
SET(MFC_DEFINITIONS -D_AFXDLL -DUNICODE -D_UNICODE)
>>>>>>> ryzomcore
# Set CMake flag to use MFC DLL
SET(CMAKE_MFC_FLAG 2)
ENDIF()
# TODO: create a macro which set MFC_DEFINITIONS, MFC_LIBRARY_DIR and MFC_INCLUDE_DIR for a project

View file

@ -1,50 +0,0 @@
# - Locate MFC libraries
# This module defines
# MFC_FOUND, if false, do not try to link to MFC
# MFC_LIBRARY_DIR, where to find libraries
# MFC_INCLUDE_DIR, where to find headers
IF(CustomMFC_FIND_REQUIRED)
SET(MFC_FIND_REQUIRED TRUE)
ENDIF()
IF(NOT MFC_DIR)
# If MFC have been found, remember their directory
IF(VC_DIR)
SET(MFC_STANDARD_DIR "${VC_DIR}/atlmfc")
ENDIF()
FIND_PATH(MFC_DIR
include/afxwin.h
HINTS
${MFC_STANDARD_DIR}
)
ENDIF()
# Display an error message if MFC are not found, MFC_FOUND is updated
# User will be able to update MFC_DIR to the correct directory
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(MFC DEFAULT_MSG MFC_DIR)
IF(MFC_FOUND)
SET(MFC_INCLUDE_DIR "${MFC_DIR}/include")
INCLUDE_DIRECTORIES(${MFC_INCLUDE_DIR})
# Using 32 or 64 bits libraries
IF(TARGET_X64)
SET(MFC_LIBRARY_DIR "${MFC_DIR}/lib/amd64")
ELSE()
SET(MFC_LIBRARY_DIR "${MFC_DIR}/lib")
ENDIF()
# Add MFC libraries directory to default library path
LINK_DIRECTORIES(${MFC_LIBRARY_DIR})
# Set definitions for using MFC in DLL
SET(MFC_DEFINITIONS -D_AFXDLL)
# Set CMake flag to use MFC DLL
SET(CMAKE_MFC_FLAG 2)
ENDIF()
# TODO: create a macro which set MFC_DEFINITIONS, MFC_LIBRARY_DIR and MFC_INCLUDE_DIR for a project

View file

@ -1,50 +0,0 @@
# - Locate MFC libraries
# This module defines
# MFC_FOUND, if false, do not try to link to MFC
# MFC_LIBRARY_DIR, where to find libraries
# MFC_INCLUDE_DIR, where to find headers
IF(CustomMFC_FIND_REQUIRED)
SET(MFC_FIND_REQUIRED TRUE)
ENDIF()
IF(NOT MFC_DIR)
# If MFC have been found, remember their directory
IF(VC_DIR)
SET(MFC_STANDARD_DIR "${VC_DIR}/atlmfc")
ENDIF()
FIND_PATH(MFC_DIR
include/afxwin.h
HINTS
${MFC_STANDARD_DIR}
)
ENDIF()
# Display an error message if MFC are not found, MFC_FOUND is updated
# User will be able to update MFC_DIR to the correct directory
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(MFC DEFAULT_MSG MFC_DIR)
IF(MFC_FOUND)
SET(MFC_INCLUDE_DIR "${MFC_DIR}/include")
INCLUDE_DIRECTORIES(${MFC_INCLUDE_DIR})
# Using 32 or 64 bits libraries
IF(TARGET_X64)
SET(MFC_LIBRARY_DIR "${MFC_DIR}/lib/amd64")
ELSE()
SET(MFC_LIBRARY_DIR "${MFC_DIR}/lib")
ENDIF()
# Add MFC libraries directory to default library path
LINK_DIRECTORIES(${MFC_LIBRARY_DIR})
# Set definitions for using MFC in DLL
SET(MFC_DEFINITIONS -D_AFXDLL -DUNICODE -D_UNICODE)
# Set CMake flag to use MFC DLL
SET(CMAKE_MFC_FLAG 2)
ENDIF()
# TODO: create a macro which set MFC_DEFINITIONS, MFC_LIBRARY_DIR and MFC_INCLUDE_DIR for a project

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -865,7 +865,7 @@ void loadForm (const std::vector<std::string> &sheetFilters, const std::string &
}
// make sure the CSheetId singleton has been properly initialised
NLMISC::CSheetId::init(updatePackedSheet);
// NLMISC::CSheetId::init(updatePackedSheet);
// load the packed sheet if exists
try

View file

@ -224,9 +224,6 @@ public:
// ** Atom element methods
/// Returns the type of the atom. NULL otherwise.
virtual const class UType *getType () = 0;
/// Returns the type of the atom. NULL otherwise.
virtual const class UType *getType () = 0;

View file

@ -1,875 +0,0 @@
// NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
// Copyright (C) 2010 Winch Gate Property Limited
//
// 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/>.
#ifndef __PRIMITIVE_H__
#define __PRIMITIVE_H__
#include "nel/misc/vector.h"
#include "nel/misc/rgba.h"
// Forward declarations for libxml2
typedef struct _xmlNode xmlNode;
typedef xmlNode *xmlNodePtr;
typedef struct _xmlDoc xmlDoc;
typedef xmlDoc *xmlDocPtr;
#include <vector>
namespace NLLIGO
{
#ifdef NL_DEBUG
# define NLLIGO_DEBUG
#endif
/**
* Ligo primitives are used to add logical geometrical gameplay information.
* Ligo primitives are NODES, POINTS, PATHES or ZONES.
* Ligo primitives have a CLASS.
*
* The primitive class defines the properties attached to the primitive
* The primitive class are defined in the XML file specified in the LigoClass field of the CLigoConfig class.
*/
class CPrimitives;
class CLigoConfig;
// ***************************************************************************
void Register ();
// ***************************************************************************
/*
* This class is a property class for ligo primitive.
*/
class IProperty : public NLMISC::IStreamable
{
public:
IProperty ()
{
Default = false;
}
// This property is set to default
bool Default;
// Force class to be polymorphic
virtual void foo () const = 0;
};
// ***************************************************************************
/*
* This class is a property class for ligo primitive.
* This is a simple string
*/
class CPropertyString : public IProperty
{
public:
CPropertyString () {}
<<<<<<< HEAD
CPropertyString (const char *str);
CPropertyString (const std::string &str);
CPropertyString (const char *str, bool _default);
=======
CPropertyString (const std::string &str);
CPropertyString (const std::string &str, bool _default);
>>>>>>> ryzomcore
virtual ~CPropertyString () {}
std::string String;
NLMISC_DECLARE_CLASS (CPropertyString)
virtual void serial(NLMISC::IStream &f)
{
f.serial(Default);
f.serial(String);
}
// Force class to be polymorphic
virtual void foo () const {}
};
// ***************************************************************************
/*
* This class is a property class for ligo primitive.
* This is a string array
*/
class CPropertyStringArray : public IProperty
{
public:
CPropertyStringArray () {}
virtual ~CPropertyStringArray () {}
CPropertyStringArray (const std::vector<std::string> &stringArray);
CPropertyStringArray (const std::vector<std::string> &stringArray, bool _default);
std::vector<std::string> StringArray;
NLMISC_DECLARE_CLASS (CPropertyStringArray)
virtual void serial(NLMISC::IStream &f)
{
f.serial(Default);
f.serialCont(StringArray);
}
// Force class to be polymorphic
virtual void foo () const {}
};
// ***************************************************************************
/*
* This class is a property class for ligo primitive.
* This is a string array
*/
class CPropertyColor : public IProperty
{
public:
NLMISC::CRGBA Color;
NLMISC_DECLARE_CLASS (CPropertyColor)
virtual void serial(NLMISC::IStream &f)
{
f.serial(Default);
f.serial(Color);
}
// Force class to be polymorphic
virtual void foo () const {}
// ctors
CPropertyColor() {}
CPropertyColor(NLMISC::CRGBA col) : Color(col) {}
};
// ***************************************************************************
class CPrimVector : public NLMISC::CVector
{
public:
CPrimVector ()
{
Selected = false;
}
CPrimVector (const NLMISC::CVector &v)
{
CVector::operator= (v);
Selected = false;
}
void serial(NLMISC::IStream &f)
{
CVector::serial(f);
f.serial(Selected);
}
bool Selected;
};
// ***************************************************************************
/*
* This class is the base class for ligo primitive.
*
* Provide access to common properties.
* Provide access to the primitive hierachy
*/
class IPrimitive : public NLMISC::IStreamable
{
friend class CPrimitives;
public:
// Deprecated
// std::string Layer;
// Deprecated
// std::string Name;
// Expended in the tree view
// bool Expanded;
enum
{
NotAnArray,
AtTheEnd = 0xffffffff,
};
/// \name Hierarchy
IPrimitive ();
virtual ~IPrimitive ();
IPrimitive (const IPrimitive &node);
virtual void operator= (const IPrimitive &node);
/** Get the children primitive count */
uint getNumChildren () const
{
return (uint)_Children.size ();
}
/** Get a child primitive */
bool getChild (const IPrimitive *&result, uint childId) const;
/** Get a child primitive */
bool getChild (IPrimitive *&result, uint childId);
/** Get the parent primitive */
IPrimitive *getParent ()
{
return _Parent;
}
const IPrimitive *getParent () const
{
return _Parent;
}
/** Get the primitive relative to this and the given path */
const IPrimitive *getPrimitive (const std::string &absoluteOrRelativePath) const;
/** Get the id of the child, return 0xffffffff if not found */
bool getChildId (uint &childId, const IPrimitive *child) const;
/** Remove and delete a child primitive */
bool removeChild (IPrimitive *child);
/** Remove and delete a child primitive */
bool removeChild (uint childId);
/// Remove the child primitive from the children list, don't delete it
bool unlinkChild(IPrimitive *child);
/** Remove and delete all children primitives */
void removeChildren ();
/**
* Insert a child primitive before the index.
* The pointer will be deleted by the parent primitive using the ::delete operator.
* return false if the index is invalid
*/
bool insertChild (IPrimitive *primitive, uint index = AtTheEnd);
/// \name Properties
/**
* Get a num properties
**/
uint getNumProperty () const;
/**
* Get a properties by its index
* This method (iterate a list) is slower than getPropertyByName (look up in a map).
**/
bool getProperty (uint index, std::string &property_name, const IProperty *&result) const;
/**
* Get a properties by its index
* This method (iterate a list) is slower than getPropertyByName (look up in a map).
**/
bool getProperty (uint index, std::string &property_name, IProperty *&result);
/** Check the existence of a named property */
bool checkProperty(const std::string &property_name) const;
/**
* Add a property
* If the property already exist, the method does nothing and returns false.
* The pointer will be deleted by the primitive using the ::delete operator.
**/
<<<<<<< HEAD
bool addPropertyByName (const char *property_name, IProperty *result);
=======
bool addPropertyByName (const std::string &property_name, IProperty *result);
>>>>>>> ryzomcore
/**
* Get a property with its name
**/
<<<<<<< HEAD
bool getPropertyByName (const char *property_name, const IProperty *&result) const;
=======
bool getPropertyByName (const std::string &property_name, const IProperty *&result) const;
>>>>>>> ryzomcore
/**
* Get a property with its name
**/
<<<<<<< HEAD
bool getPropertyByName (const char *property_name, IProperty *&result) const;
=======
bool getPropertyByName (const std::string &property_name, IProperty *&result) const;
>>>>>>> ryzomcore
/**
* Get a string property with its name. Return false if the property is not found or is not a string property.
**/
<<<<<<< HEAD
bool getPropertyByName (const char *property_name, std::string *&result) const;
=======
bool getPropertyByName (const std::string &property_name, std::string *&result) const;
>>>>>>> ryzomcore
/**
* Get a string array property with its name. Return false if the property is not found or is not a string array property.
**/
<<<<<<< HEAD
bool getPropertyByName (const char *property_name, std::vector<std::string> *&result) const;
=======
bool getPropertyByName (const std::string &property_name, std::vector<std::string> *&result) const;
>>>>>>> ryzomcore
/**
* Get a string property with its name. Return false if the property is not found or is not a string property.
**/
<<<<<<< HEAD
bool getPropertyByName (const char *property_name, std::string &result) const;
=======
bool getPropertyByName (const std::string &property_name, std::string &result) const;
>>>>>>> ryzomcore
/**
* Get a string array property with its name. Return false if the property is not found or is not a string array property.
**/
<<<<<<< HEAD
bool getPropertyByName (const char *property_name, const std::vector<std::string> *&result) const;
=======
bool getPropertyByName (const std::string &property_name, const std::vector<std::string> *&result) const;
>>>>>>> ryzomcore
/**
* Get a color property with its name. Return false if the property is not found or is not a string array property.
**/
<<<<<<< HEAD
bool getPropertyByName (const char *property_name, NLMISC::CRGBA &result) const;
=======
bool getPropertyByName (const std::string &property_name, NLMISC::CRGBA &result) const;
>>>>>>> ryzomcore
/**
* Remove a property
* This is method (iterate a list) is slower than removePropertyByName (look up in a map).
**/
bool removeProperty (uint index);
/**
* Remove a property by its name
**/
<<<<<<< HEAD
bool removePropertyByName (const char *property_name);
=======
bool removePropertyByName (const std::string &property_name);
>>>>>>> ryzomcore
/**
* Remove all the properties
**/
void removeProperties ();
/* Init default primitive's parameters
*
* This method will add all the properties declared in the primitive class and create default properties.
*/
void initDefaultValues (CLigoConfig &config);
// Read the primitive, calls initDefaultValue (CLigoConfig &config)
<<<<<<< HEAD
virtual bool read (xmlNodePtr xmlNode, const char *filename, uint version, CLigoConfig &config);
// Write the primitive
virtual void write (xmlNodePtr xmlNode, const char *filename) const;
=======
virtual bool read (xmlNodePtr xmlNode, const std::string &property_name, uint version, CLigoConfig &config);
// Write the primitive
virtual void write (xmlNodePtr xmlNode, const std::string &property_name) const;
>>>>>>> ryzomcore
// Get the vertices
virtual uint getNumVector () const = 0;
virtual const CPrimVector *getPrimVector () const = 0;
virtual CPrimVector *getPrimVector () = 0;
// Make a copy
virtual IPrimitive *copy () const = 0;
// used for fast binary save/load (exploitation mode)
void serial(NLMISC::IStream &f);
// shortcut to getPropertyByName("name", ret); return ret;
std::string getName() const;
const std::string &getUnparsedProperties() const;
void setUnparsedProperties(const std::string &unparsedProperties) const;
private:
// callback called just after the node is attach under a parent
virtual void onLinkToParent() {}
// callback called just before the node is removed from it's parent
virtual void onUnlinkFromParent() {}
/// Callback called just after an ancestor is linked
virtual void onBranchLink() {}
/// Callback called just before an ancestor is unlinked
virtual void onBranchUnlink() {}
/// Callback called when the primitive is updated, giving a chance to track the primitive's modifications during the loading
virtual void onModifyPrimitive(CPrimitives &/* primitives */) const {}
// internal recusive call
void branchLink();
void branchUnlink();
// Update child Id
void updateChildId (uint index);
// Child id
uint32 _ChildId;
// Parent
IPrimitive *_Parent;
// Children
std::vector<IPrimitive*> _Children;
// Single properties
std::map<std::string, IProperty*> _Properties;
// Editor specific properties (unparsed)
mutable std::string _UnparsedProperties;
#ifdef NLLIGO_DEBUG
std::string _DebugClassName;
std::string _DebugPrimitiveName;
#endif
};
// ***************************************************************************
// Simple primitive node
class CPrimNode : public IPrimitive
{
public:
// \name From IClassable
NLMISC_DECLARE_CLASS (CPrimNode)
protected:
// void operator= (const CPrimNode &node);
// Get the vertices
virtual uint getNumVector () const;
virtual const CPrimVector *getPrimVector () const;
virtual CPrimVector *getPrimVector ();
// Read the primitive
<<<<<<< HEAD
virtual bool read (xmlNodePtr xmlNode, const char *filename, uint version, CLigoConfig &config);
=======
virtual bool read (xmlNodePtr xmlNode, const std::string &filename, uint version, CLigoConfig &config);
>>>>>>> ryzomcore
// \name From IPrimitive
virtual IPrimitive *copy () const;
};
// ***************************************************************************
class CPrimPoint : public IPrimitive
{
public:
CPrimPoint ()
{
Angle = 0;
}
CPrimVector Point;
float Angle; // Angle on OZ, CCW
public:
void serial (NLMISC::IStream &f);
// void operator= (const CPrimPoint &node);
// \name From IClassable
NLMISC_DECLARE_CLASS (CPrimPoint);
protected:
// Get the vertices
virtual uint getNumVector () const;
virtual const CPrimVector *getPrimVector () const;
virtual CPrimVector *getPrimVector ();
// Read the primitive
<<<<<<< HEAD
virtual bool read (xmlNodePtr xmlNode, const char *filename, uint version, CLigoConfig &config);
// Write the primitive
virtual void write (xmlNodePtr xmlNode, const char *filename) const;
=======
virtual bool read (xmlNodePtr xmlNode, const std::string &filename, uint version, CLigoConfig &config);
// Write the primitive
virtual void write (xmlNodePtr xmlNode, const std::string &filename) const;
>>>>>>> ryzomcore
// \name From IPrimitive
virtual IPrimitive *copy () const;
};
// ***************************************************************************
class CPrimPath : public IPrimitive
{
public:
std::vector<CPrimVector> VPoints;
public:
void serial (NLMISC::IStream &f);
// void operator= (const CPrimPath &node);
// \name From IClassable
NLMISC_DECLARE_CLASS (CPrimPath);
protected:
// Get the vertices
virtual uint getNumVector () const;
virtual const CPrimVector *getPrimVector () const;
virtual CPrimVector *getPrimVector ();
// Read the primitive
<<<<<<< HEAD
virtual bool read (xmlNodePtr xmlNode, const char *filename, uint version, CLigoConfig &config);
// Write the primitive
virtual void write (xmlNodePtr xmlNode, const char *filename) const;
=======
virtual bool read (xmlNodePtr xmlNode, const std::string &filename, uint version, CLigoConfig &config);
// Write the primitive
virtual void write (xmlNodePtr xmlNode, const std::string &filename) const;
>>>>>>> ryzomcore
// \name From IPrimitive
virtual IPrimitive *copy () const;
};
// ***************************************************************************
class CPrimZone : public IPrimitive
{
public:
std::vector<CPrimVector> VPoints;
static float getSegmentDist(const NLMISC::CVector v, const NLMISC::CVector &p1, const NLMISC::CVector &p2, NLMISC::CVector &nearPos);
public:
bool contains (const NLMISC::CVector &v) const { return CPrimZone::contains(v, VPoints); }
bool contains(const NLMISC::CVector &v, float &distance, NLMISC::CVector &nearPos, bool isPath) const { return CPrimZone::contains(v, VPoints, distance, nearPos, isPath); }
// void operator= (const CPrimZone &node);
void serial (NLMISC::IStream &f);
// Returns true if the vector v is inside of the patatoid
static bool contains (const NLMISC::CVector &v, const std::vector<NLMISC::CVector> &points);
// Returns true if the vector v is inside of the patatoid and set the distance of the nearest segment and the position of the nearest point.
static bool contains (const NLMISC::CVector &v, const std::vector<NLMISC::CVector> &points, float &distance, NLMISC::CVector &nearPos, bool isPath);
// Returns true if the vector v is inside of the patatoid
static bool contains (const NLMISC::CVector &v, const std::vector<CPrimVector> &points);
// Returns true if the vector v is inside of the patatoid and set the distance of the nearest segment and the position of the nearest point.
static bool contains (const NLMISC::CVector &v, const std::vector<CPrimVector> &points, float &distance, NLMISC::CVector &nearPos, bool isPath);
/// Returns the barycenter of the zone (warning, it may be outside of the zone if it is not convex). Returns CVector::Null if there is no vertex.
NLMISC::CVector getBarycentre() const;
/// Returns the smallest axis-aligned box containing the zone (z is always set to 0)
void getAABox( NLMISC::CVector& cornerMin, NLMISC::CVector& cornerMax ) const;
/// Return the area of the axis-aligned box containing the zone
float getAreaOfAABox() const;
// \name From IClassable
NLMISC_DECLARE_CLASS (CPrimZone);
protected:
// Get the vertices
virtual uint getNumVector () const;
virtual const CPrimVector *getPrimVector () const;
virtual CPrimVector *getPrimVector ();
// Read the primitive
<<<<<<< HEAD
virtual bool read (xmlNodePtr xmlNode, const char *filename, uint version, CLigoConfig &config);
// Write the primitive
virtual void write (xmlNodePtr xmlNode, const char *filename) const;
=======
virtual bool read (xmlNodePtr xmlNode, const std::string &filename, uint version, CLigoConfig &config);
// Write the primitive
virtual void write (xmlNodePtr xmlNode, const std::string &filename) const;
>>>>>>> ryzomcore
// \name From IPrimitive
virtual IPrimitive *copy () const;
};
// ***************************************************************************
/** This primitive type is used to handle unique alias across a primitive file.
* Usage of this primitive imply the setting of the appropriate 'ligo context'
* before reading or copy/pasting alias.
*/
class CPrimAlias : public IPrimitive
{
friend class CPrimitives;
/// The 'dynamic' part of the alias
uint32 _Alias;
/// The primitive container
class CPrimitives *_Container;
// Needed overloads (not used)
virtual uint getNumVector () const
{
return 0;
};
virtual const CPrimVector *getPrimVector () const
{
return NULL;
}
virtual CPrimVector *getPrimVector ()
{
return NULL;
}
virtual void onBranchLink();
// callback called just before the node is removed from it's parent
virtual void onBranchUnlink();
void regenAlias();
public:
// \name From IClassable
NLMISC_DECLARE_CLASS (CPrimAlias);
// private default constructor
CPrimAlias();
// copy constructor needed
CPrimAlias(const CPrimAlias &other);
~CPrimAlias();
// return the dynamic part of the alias
uint32 getAlias() const;
// Return the full alias, merge of the static and dynamic part
uint32 getFullAlias() const;
// Read the primitive
<<<<<<< HEAD
virtual bool read (xmlNodePtr xmlNode, const char *filename, uint version, CLigoConfig &config);
// Write the primitive
virtual void write (xmlNodePtr xmlNode, const char *filename) const;
=======
virtual bool read (xmlNodePtr xmlNode, const std::string &filename, uint version, CLigoConfig &config);
// Write the primitive
virtual void write (xmlNodePtr xmlNode, const std::string &filename) const;
>>>>>>> ryzomcore
// Create a copy of this primitive
virtual IPrimitive *copy () const;
// serial for binary save
virtual void serial (NLMISC::IStream &f);
};
// ***************************************************************************
/*
This class is deprecated.
*/
class CPrimRegion
{
public:
std::string Name;
std::vector<CPrimPoint> VPoints;
std::vector<CPrimZone> VZones;
std::vector<CPrimPath> VPaths;
std::vector<bool> VHidePoints;
std::vector<bool> VHideZones;
std::vector<bool> VHidePaths;
public:
void serial (NLMISC::IStream &f);
};
// ***************************************************************************
/**
* This class is a ligo primitives set
*/
class CPrimitives
{
public:
CPrimitives ();
CPrimitives (const CPrimitives &other);
~CPrimitives ();
// Operator copy
CPrimitives& operator= (const CPrimitives &other);
// Convert from old format to the new one
void convert (const CPrimRegion &region);
// Read the primitive
<<<<<<< HEAD
bool read (xmlNodePtr xmlNode, const char *filename, CLigoConfig &config);
// Write the primitive
void write (xmlDocPtr xmlNode, const char *filename) const;
// Write the primitive
void write (xmlNodePtr root, const char *filename) const;
=======
bool read (xmlNodePtr xmlNode, const std::string &filename, CLigoConfig &config);
// Write the primitive
void write (xmlDocPtr xmlNode, const std::string &filename) const;
// Write the primitive
void write (xmlNodePtr root, const std::string &filename) const;
>>>>>>> ryzomcore
// serial the primitive. Used for binary files.
void serial(NLMISC::IStream &f);
// Root primitive hierarchy
CPrimNode *RootNode;
// get the static alias part for this primitive
uint32 getAliasStaticPart();
// set the static alias part for this primitive
void setAliasStaticPart(uint32 staticPart);
// Build an alias by combining the static and dynamic part
uint32 buildFullAlias(uint32 dynamicPart);
// Generate a new unique alias (dynamic part only)
uint32 genAlias(IPrimitive *prim, uint32 preferedAlias = 0);
// Reserve an alias and store it in the used alias list (dynamic part only)
// void reserveAlias(uint32 dynamicAlias);
// Remove an alias from the list of alias in use (dynamic part only)
void releaseAlias(IPrimitive *prim, uint32 dynamicAlias);
// Force the assignation of the specified alias to the primitive. If another primitive
// already hold the alias, this other primitive is assigned a new alias.
void forceAlias(CPrimAlias *prim, uint32 alias);
// get the last generated alias value (for debug only)
uint32 getLastGeneratedAlias();
// Return the primitive indexed by the given alias (ie, it doesn't return the alias primitive, but its first parent)
IPrimitive *getPrimitiveByAlias(uint32 primAlias);
// Build the complete list of indexed primitive (ie all primitive that have a primalias child)
void buildPrimitiveWithAliasList(std::map<uint32, IPrimitive*> &result);
private:
// Conversion internal methods
void convertAddPrimitive (IPrimitive *child, const IPrimitive *prim, bool hidden);
void convertPrimitive (const IPrimitive *prim, bool hidden);
/// Optional context information
CLigoConfig *_LigoConfig;
/// Static part alias mapping (can be 0 if no mapping is defined)
uint32 _AliasStaticPart;
/// Last generated Alias, used to compute the next alias
uint32 _LastGeneratedAlias;
/// List of alias in use in the primitive (dynamic part only)
std::map<uint32, IPrimitive*> _AliasInUse;
// Store the filename
// This allows to retrieve the static alias when reloading from binary file
std::string _Filename;
};
// ***************************************************************************
/** Singleton to manage special loading feature related to
* unique alias assignment
*/
class CPrimitiveContext
{
static CPrimitiveContext *_Instance;
// private ctor
CPrimitiveContext();
public:
// get the singleton reference
static CPrimitiveContext &instance()
{
if (!_Instance)
{
_Instance = new CPrimitiveContext;
}
return *_Instance;
}
/// The current ligo configuration file.
CLigoConfig *CurrentLigoConfig;
/// The current primitives container.
CPrimitives *CurrentPrimitive;
};
} // namespace NLLIGO
#endif // __PRIMITIVE_H__

View file

@ -1,781 +0,0 @@
// NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
// Copyright (C) 2010 Winch Gate Property Limited
//
// 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/>.
#ifndef __PRIMITIVE_H__
#define __PRIMITIVE_H__
#include "nel/misc/vector.h"
#include "nel/misc/rgba.h"
// Include from libxml2
#include <libxml/parser.h>
#include <vector>
namespace NLLIGO
{
#ifdef NL_DEBUG
# define NLLIGO_DEBUG
#endif
/**
* Ligo primitives are used to add logical geometrical gameplay informations.
* Ligo primitives are NODES, POINTS, PATHES or ZONES.
* Ligo primitives have a CLASS.
*
* The primitive class defines the properties attached to the primitive
* The primitive class are defined in the XML file specified in the LigoClass field of the CLigoConfig class.
*/
class CPrimitives;
class CLigoConfig;
// ***************************************************************************
void Register ();
// ***************************************************************************
/*
* This class is a property class for ligo primitive.
*/
class IProperty : public NLMISC::IStreamable
{
public:
IProperty ()
{
Default = false;
}
// This property is set to default
bool Default;
// Force class to be polymorphic
virtual void foo () const = 0;
};
// ***************************************************************************
/*
* This class is a property class for ligo primitive.
* This is a simple string
*/
class CPropertyString : public IProperty
{
public:
CPropertyString () {}
CPropertyString (const char *str);
CPropertyString (const std::string &str);
CPropertyString (const char *str, bool _default);
virtual ~CPropertyString () {}
std::string String;
NLMISC_DECLARE_CLASS (CPropertyString)
virtual void serial(NLMISC::IStream &f)
{
f.serial(Default);
f.serial(String);
}
// Force class to be polymorphic
virtual void foo () const {}
};
// ***************************************************************************
/*
* This class is a property class for ligo primitive.
* This is a string array
*/
class CPropertyStringArray : public IProperty
{
public:
CPropertyStringArray () {}
virtual ~CPropertyStringArray () {}
CPropertyStringArray (const std::vector<std::string> &stringArray);
CPropertyStringArray (const std::vector<std::string> &stringArray, bool _default);
std::vector<std::string> StringArray;
NLMISC_DECLARE_CLASS (CPropertyStringArray)
virtual void serial(NLMISC::IStream &f)
{
f.serial(Default);
f.serialCont(StringArray);
}
// Force class to be polymorphic
virtual void foo () const {}
};
// ***************************************************************************
/*
* This class is a property class for ligo primitive.
* This is a string array
*/
class CPropertyColor : public IProperty
{
public:
NLMISC::CRGBA Color;
NLMISC_DECLARE_CLASS (CPropertyColor)
virtual void serial(NLMISC::IStream &f)
{
f.serial(Default);
f.serial(Color);
}
// Force class to be polymorphic
virtual void foo () const {}
// ctors
CPropertyColor() {}
CPropertyColor(NLMISC::CRGBA col) : Color(col) {}
};
// ***************************************************************************
class CPrimVector : public NLMISC::CVector
{
public:
CPrimVector ()
{
Selected = false;
}
CPrimVector (const NLMISC::CVector &v)
{
CVector::operator= (v);
Selected = false;
}
void serial(NLMISC::IStream &f)
{
CVector::serial(f);
f.serial(Selected);
}
bool Selected;
};
// ***************************************************************************
/*
* This class is the base class for ligo primitive.
*
* Provide access to common properties.
* Provide access to the primitive hierachy
*/
class IPrimitive : public NLMISC::IStreamable
{
friend class CPrimitives;
public:
// Deprecated
// std::string Layer;
// Deprecated
// std::string Name;
// Expended in the tree view
// bool Expanded;
enum
{
NotAnArray,
AtTheEnd = 0xffffffff,
};
/// \name Hierarchy
IPrimitive ();
virtual ~IPrimitive ();
IPrimitive (const IPrimitive &node);
virtual void operator= (const IPrimitive &node);
/** Get the children primitive count */
uint getNumChildren () const
{
return _Children.size ();
}
/** Get a child primitive */
bool getChild (const IPrimitive *&result, uint childId) const;
/** Get a child primitive */
bool getChild (IPrimitive *&result, uint childId);
/** Get the parent primitive */
IPrimitive *getParent ()
{
return _Parent;
}
const IPrimitive *getParent () const
{
return _Parent;
}
/** Get the primitive relative to this and the given path */
const IPrimitive *getPrimitive (const std::string &absoluteOrRelativePath) const;
/** Get the id of the child, return 0xffffffff if not found */
bool getChildId (uint &childId, const IPrimitive *child) const;
/** Remove and delete a child primitive */
bool removeChild (IPrimitive *child);
/** Remove and delete a child primitive */
bool removeChild (uint childId);
/// Remove the child primitive from the children list, don't delete it
bool unlinkChild(IPrimitive *child);
/** Remove and delete all children primitives */
void removeChildren ();
/**
* Insert a child primitive before the index.
* The pointer will be deleted by the parent primitive using the ::delete operator.
* return false if the index is invalid
*/
bool insertChild (IPrimitive *primitive, uint index = AtTheEnd);
/// \name Properties
/**
* Get a num properties
**/
uint getNumProperty () const;
/**
* Get a properties by its index
* This method (iterate a list) is slower than getPropertyByName (look up in a map).
**/
bool getProperty (uint index, std::string &property_name, const IProperty *&result) const;
/**
* Get a properties by its index
* This method (iterate a list) is slower than getPropertyByName (look up in a map).
**/
bool getProperty (uint index, std::string &property_name, IProperty *&result);
/** Check the existence of a named property */
bool checkProperty(const std::string &property_name) const;
/**
* Add a property
* If the property already exist, the method does nothing and returns false.
* The pointer will be deleted by the primitive using the ::delete operator.
**/
bool addPropertyByName (const char *property_name, IProperty *result);
/**
* Get a property with its name
**/
bool getPropertyByName (const char *property_name, const IProperty *&result) const;
/**
* Get a property with its name
**/
bool getPropertyByName (const char *property_name, IProperty *&result) const;
/**
* Get a string property with its name. Return false if the property is not found or is not a string property.
**/
bool getPropertyByName (const char *property_name, std::string *&result) const;
/**
* Get a string array property with its name. Return false if the property is not found or is not a string array property.
**/
bool getPropertyByName (const char *property_name, std::vector<std::string> *&result) const;
/**
* Get a string property with its name. Return false if the property is not found or is not a string property.
**/
bool getPropertyByName (const char *property_name, std::string &result) const;
/**
* Get a string array property with its name. Return false if the property is not found or is not a string array property.
**/
bool getPropertyByName (const char *property_name, const std::vector<std::string> *&result) const;
/**
* Get a color property with its name. Return false if the property is not found or is not a string array property.
**/
bool getPropertyByName (const char *property_name, NLMISC::CRGBA &result) const;
/**
* Remove a property
* This is method (iterate a list) is slower than removePropertyByName (look up in a map).
**/
bool removeProperty (uint index);
/**
* Remove a property by its name
**/
bool removePropertyByName (const char *property_name);
/**
* Remove all the properties
**/
void removeProperties ();
/* Init default primitive's parameters
*
* This method will add all the properties declared in the primitive class and create default properties.
*/
void initDefaultValues (CLigoConfig &config);
// Read the primitive, calls initDefaultValue (CLigoConfig &config)
virtual bool read (xmlNodePtr xmlNode, const char *filename, uint version, CLigoConfig &config);
// Write the primitive
virtual void write (xmlNodePtr xmlNode, const char *filename) const;
// Get the vertices
virtual uint getNumVector () const = 0;
virtual const CPrimVector *getPrimVector () const = 0;
virtual CPrimVector *getPrimVector () = 0;
// Make a copy
virtual IPrimitive *copy () const = 0;
// used for fast binary save/load (exploitation mode)
void serial(NLMISC::IStream &f);
// shortcut to getPropertyByName("name", ret); return ret;
std::string getName() const;
const std::string &getUnparsedProperties() const;
void setUnparsedProperties(const std::string &unparsedProperties) const;
private:
// callback called just after the node is attach under a parent
virtual void onLinkToParent() {}
// callback called just before the node is removed from it's parent
virtual void onUnlinkFromParent() {}
/// Callback called just after an ancestor is linked
virtual void onBranchLink() {}
/// Callback called just before an ancestor is unlinked
virtual void onBranchUnlink() {}
/// Callback called when the primitive is updated, giving a chance to track the primitive's modifications during the loading
virtual void onModifyPrimitive(CPrimitives &/* primitives */) const {}
// internal recusive call
void branchLink();
void branchUnlink();
// Update child Id
void updateChildId (uint index);
// Child id
uint32 _ChildId;
// Parent
IPrimitive *_Parent;
// Children
std::vector<IPrimitive*> _Children;
// Single properties
std::map<std::string, IProperty*> _Properties;
// Editor specific properties (unparsed)
mutable std::string _UnparsedProperties;
#ifdef NLLIGO_DEBUG
std::string _DebugClassName;
std::string _DebugPrimitiveName;
#endif
};
// ***************************************************************************
// Simple primitive node
class CPrimNode : public IPrimitive
{
public:
// \name From IClassable
NLMISC_DECLARE_CLASS (CPrimNode)
protected:
// void operator= (const CPrimNode &node);
// Get the vertices
virtual uint getNumVector () const;
virtual const CPrimVector *getPrimVector () const;
virtual CPrimVector *getPrimVector ();
// Read the primitive
virtual bool read (xmlNodePtr xmlNode, const char *filename, uint version, CLigoConfig &config);
// \name From IPrimitive
virtual IPrimitive *copy () const;
};
// ***************************************************************************
class CPrimPoint : public IPrimitive
{
public:
CPrimPoint ()
{
Angle = 0;
}
CPrimVector Point;
float Angle; // Angle on OZ, CCW
public:
void serial (NLMISC::IStream &f);
// void operator= (const CPrimPoint &node);
// \name From IClassable
NLMISC_DECLARE_CLASS (CPrimPoint);
protected:
// Get the vertices
virtual uint getNumVector () const;
virtual const CPrimVector *getPrimVector () const;
virtual CPrimVector *getPrimVector ();
// Read the primitive
virtual bool read (xmlNodePtr xmlNode, const char *filename, uint version, CLigoConfig &config);
// Write the primitive
virtual void write (xmlNodePtr xmlNode, const char *filename) const;
// \name From IPrimitive
virtual IPrimitive *copy () const;
};
// ***************************************************************************
class CPrimPath : public IPrimitive
{
public:
std::vector<CPrimVector> VPoints;
public:
void serial (NLMISC::IStream &f);
// void operator= (const CPrimPath &node);
// \name From IClassable
NLMISC_DECLARE_CLASS (CPrimPath);
protected:
// Get the vertices
virtual uint getNumVector () const;
virtual const CPrimVector *getPrimVector () const;
virtual CPrimVector *getPrimVector ();
// Read the primitive
virtual bool read (xmlNodePtr xmlNode, const char *filename, uint version, CLigoConfig &config);
// Write the primitive
virtual void write (xmlNodePtr xmlNode, const char *filename) const;
// \name From IPrimitive
virtual IPrimitive *copy () const;
};
// ***************************************************************************
class CPrimZone : public IPrimitive
{
public:
std::vector<CPrimVector> VPoints;
static float getSegmentDist(const NLMISC::CVector v, const NLMISC::CVector &p1, const NLMISC::CVector &p2, NLMISC::CVector &nearPos);
public:
bool contains (const NLMISC::CVector &v) const { return CPrimZone::contains(v, VPoints); }
bool contains(const NLMISC::CVector &v, float &distance, NLMISC::CVector &nearPos, bool isPath) const { return CPrimZone::contains(v, VPoints, distance, nearPos, isPath); }
// void operator= (const CPrimZone &node);
void serial (NLMISC::IStream &f);
// Returns true if the vector v is inside of the patatoid
static bool contains (const NLMISC::CVector &v, const std::vector<NLMISC::CVector> &points);
// Returns true if the vector v is inside of the patatoid and set the distance of the nearest segment and the position of the nearest point.
static bool contains (const NLMISC::CVector &v, const std::vector<NLMISC::CVector> &points, float &distance, NLMISC::CVector &nearPos, bool isPath);
// Returns true if the vector v is inside of the patatoid
static bool contains (const NLMISC::CVector &v, const std::vector<CPrimVector> &points);
// Returns true if the vector v is inside of the patatoid and set the distance of the nearest segment and the position of the nearest point.
static bool contains (const NLMISC::CVector &v, const std::vector<CPrimVector> &points, float &distance, NLMISC::CVector &nearPos, bool isPath);
/// Returns the barycenter of the zone (warning, it may be outside of the zone if it is not convex). Returns CVector::Null if there is no vertex.
NLMISC::CVector getBarycentre() const;
/// Returns the smallest axis-aligned box containing the zone (z is always set to 0)
void getAABox( NLMISC::CVector& cornerMin, NLMISC::CVector& cornerMax ) const;
/// Return the area of the axis-aligned box containing the zone
float getAreaOfAABox() const;
// \name From IClassable
NLMISC_DECLARE_CLASS (CPrimZone);
protected:
// Get the vertices
virtual uint getNumVector () const;
virtual const CPrimVector *getPrimVector () const;
virtual CPrimVector *getPrimVector ();
// Read the primitive
virtual bool read (xmlNodePtr xmlNode, const char *filename, uint version, CLigoConfig &config);
// Write the primitive
virtual void write (xmlNodePtr xmlNode, const char *filename) const;
// \name From IPrimitive
virtual IPrimitive *copy () const;
};
// ***************************************************************************
/** This primitive type is used to handle unique alias across a primitive file.
* Usage of this primitive imply the setting of the appropriate 'ligo context'
* before reading or copy/pasting alias.
*/
class CPrimAlias : public IPrimitive
{
friend class CPrimitives;
/// The 'dynamic' part of the alias
uint32 _Alias;
/// The primitive container
class CPrimitives *_Container;
// Needed overloads (not used)
virtual uint getNumVector () const
{
return 0;
};
virtual const CPrimVector *getPrimVector () const
{
return NULL;
}
virtual CPrimVector *getPrimVector ()
{
return NULL;
}
virtual void onBranchLink();
// callback called just before the node is removed from it's parent
virtual void onBranchUnlink();
void regenAlias();
public:
// \name From IClassable
NLMISC_DECLARE_CLASS (CPrimAlias);
// private default constructor
CPrimAlias();
// copy constructor needed
CPrimAlias(const CPrimAlias &other);
~CPrimAlias();
// return the dynamic part of the alias
uint32 getAlias() const;
// Return the full alias, merge of the static and dynamic part
uint32 getFullAlias() const;
// Read the primitive
virtual bool read (xmlNodePtr xmlNode, const char *filename, uint version, CLigoConfig &config);
// Write the primitive
virtual void write (xmlNodePtr xmlNode, const char *filename) const;
// Create a copy of this primitive
virtual IPrimitive *copy () const;
// serial for binary save
virtual void serial (NLMISC::IStream &f);
};
// ***************************************************************************
/*
This class is deprecated.
*/
class CPrimRegion
{
public:
std::string Name;
std::vector<CPrimPoint> VPoints;
std::vector<CPrimZone> VZones;
std::vector<CPrimPath> VPaths;
std::vector<bool> VHidePoints;
std::vector<bool> VHideZones;
std::vector<bool> VHidePaths;
public:
void serial (NLMISC::IStream &f);
};
// ***************************************************************************
/**
* This class is a ligo primitives set
*/
class CPrimitives
{
public:
CPrimitives ();
CPrimitives (const CPrimitives &other);
~CPrimitives ();
// Operator copy
CPrimitives& operator= (const CPrimitives &other);
// Convert from old format to the new one
void convert (const CPrimRegion &region);
// Read the primitive
bool read (xmlNodePtr xmlNode, const char *filename, CLigoConfig &config);
// Write the primitive
void write (xmlDocPtr xmlNode, const char *filename) const;
// Write the primitive
void write (xmlNodePtr root, const char *filename) const;
// serial the primitive. Used for binary files.
void serial(NLMISC::IStream &f);
// Root primitive hierarchy
CPrimNode *RootNode;
// get the static alias part for this primitive
uint32 getAliasStaticPart();
// set the static alias part for this primitive
void setAliasStaticPart(uint32 staticPart);
// Build an alias by combining the static and dynamic part
uint32 buildFullAlias(uint32 dynamicPart);
// Generate a new unique alias (dynamic part only)
uint32 genAlias(IPrimitive *prim, uint32 preferedAlias = 0);
// Reserve an alias and store it in the used alias list (dynamic part only)
// void reserveAlias(uint32 dynamicAlias);
// Remove an alias from the list of alias in use (dynamic part only)
void releaseAlias(IPrimitive *prim, uint32 dynamicAlias);
// Force the assignation of the specified alias the the primitive. If another primitive
// already hold the alias, this other primitive is assigned a new alias.
void forceAlias(CPrimAlias *prim, uint32 alias);
// get the last generated alias value (for debug only)
uint32 getLastGeneratedAlias();
// Return the primitive indexed by the given alias (ie, it doesn't return the alias primitive, but its first parent)
IPrimitive *getPrimitiveByAlias(uint32 primAlias);
// Build the complete list of indexed primitive (ie all primitive that have a primalias child)
void buildPrimitiveWithAliasList(std::map<uint32, IPrimitive*> &result);
private:
// Conversion internal methods
void convertAddPrimitive (IPrimitive *child, const IPrimitive *prim, bool hidden);
void convertPrimitive (const IPrimitive *prim, bool hidden);
/// Optional context information
CLigoConfig *_LigoConfig;
/// Static part alias mapping (can be 0 if no mapping is defined)
uint32 _AliasStaticPart;
/// Last generated Alias, used to compute the next alias
uint32 _LastGeneratedAlias;
/// List of alias in use in the primitive (dynamic part only)
std::map<uint32, IPrimitive*> _AliasInUse;
// Store the filename
// This allows to retrieve the static alias when reloading from binary file
std::string _Filename;
};
// ***************************************************************************
/** Singleton to manage special loading feature related to
* unique alias assignment
*/
class CPrimitiveContext
{
static CPrimitiveContext *_Instance;
// private ctor
CPrimitiveContext();
public:
// get the singleton reference
static CPrimitiveContext &instance()
{
if (!_Instance)
{
_Instance = new CPrimitiveContext;
}
return *_Instance;
}
/// The current ligo configuration file.
CLigoConfig *CurrentLigoConfig;
/// The current primitives container.
CPrimitives *CurrentPrimitive;
};
} // namespace NLLIGO
#endif // __PRIMITIVE_H__

View file

@ -1,786 +0,0 @@
// NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
// Copyright (C) 2010 Winch Gate Property Limited
//
// 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/>.
#ifndef __PRIMITIVE_H__
#define __PRIMITIVE_H__
#include "nel/misc/vector.h"
#include "nel/misc/rgba.h"
// Forward declarations for libxml2
typedef struct _xmlNode xmlNode;
typedef xmlNode *xmlNodePtr;
typedef struct _xmlDoc xmlDoc;
typedef xmlDoc *xmlDocPtr;
#include <vector>
namespace NLLIGO
{
#ifdef NL_DEBUG
# define NLLIGO_DEBUG
#endif
/**
* Ligo primitives are used to add logical geometrical gameplay information.
* Ligo primitives are NODES, POINTS, PATHES or ZONES.
* Ligo primitives have a CLASS.
*
* The primitive class defines the properties attached to the primitive
* The primitive class are defined in the XML file specified in the LigoClass field of the CLigoConfig class.
*/
class CPrimitives;
class CLigoConfig;
// ***************************************************************************
void Register ();
// ***************************************************************************
/*
* This class is a property class for ligo primitive.
*/
class IProperty : public NLMISC::IStreamable
{
public:
IProperty ()
{
Default = false;
}
// This property is set to default
bool Default;
// Force class to be polymorphic
virtual void foo () const = 0;
};
// ***************************************************************************
/*
* This class is a property class for ligo primitive.
* This is a simple string
*/
class CPropertyString : public IProperty
{
public:
CPropertyString () {}
CPropertyString (const char *str);
CPropertyString (const std::string &str);
CPropertyString (const char *str, bool _default);
virtual ~CPropertyString () {}
std::string String;
NLMISC_DECLARE_CLASS (CPropertyString)
virtual void serial(NLMISC::IStream &f)
{
f.serial(Default);
f.serial(String);
}
// Force class to be polymorphic
virtual void foo () const {}
};
// ***************************************************************************
/*
* This class is a property class for ligo primitive.
* This is a string array
*/
class CPropertyStringArray : public IProperty
{
public:
CPropertyStringArray () {}
virtual ~CPropertyStringArray () {}
CPropertyStringArray (const std::vector<std::string> &stringArray);
CPropertyStringArray (const std::vector<std::string> &stringArray, bool _default);
std::vector<std::string> StringArray;
NLMISC_DECLARE_CLASS (CPropertyStringArray)
virtual void serial(NLMISC::IStream &f)
{
f.serial(Default);
f.serialCont(StringArray);
}
// Force class to be polymorphic
virtual void foo () const {}
};
// ***************************************************************************
/*
* This class is a property class for ligo primitive.
* This is a string array
*/
class CPropertyColor : public IProperty
{
public:
NLMISC::CRGBA Color;
NLMISC_DECLARE_CLASS (CPropertyColor)
virtual void serial(NLMISC::IStream &f)
{
f.serial(Default);
f.serial(Color);
}
// Force class to be polymorphic
virtual void foo () const {}
// ctors
CPropertyColor() {}
CPropertyColor(NLMISC::CRGBA col) : Color(col) {}
};
// ***************************************************************************
class CPrimVector : public NLMISC::CVector
{
public:
CPrimVector ()
{
Selected = false;
}
CPrimVector (const NLMISC::CVector &v)
{
CVector::operator= (v);
Selected = false;
}
void serial(NLMISC::IStream &f)
{
CVector::serial(f);
f.serial(Selected);
}
bool Selected;
};
// ***************************************************************************
/*
* This class is the base class for ligo primitive.
*
* Provide access to common properties.
* Provide access to the primitive hierachy
*/
class IPrimitive : public NLMISC::IStreamable
{
friend class CPrimitives;
public:
// Deprecated
// std::string Layer;
// Deprecated
// std::string Name;
// Expended in the tree view
// bool Expanded;
enum
{
NotAnArray,
AtTheEnd = 0xffffffff,
};
/// \name Hierarchy
IPrimitive ();
virtual ~IPrimitive ();
IPrimitive (const IPrimitive &node);
virtual void operator= (const IPrimitive &node);
/** Get the children primitive count */
uint getNumChildren () const
{
return (uint)_Children.size ();
}
/** Get a child primitive */
bool getChild (const IPrimitive *&result, uint childId) const;
/** Get a child primitive */
bool getChild (IPrimitive *&result, uint childId);
/** Get the parent primitive */
IPrimitive *getParent ()
{
return _Parent;
}
const IPrimitive *getParent () const
{
return _Parent;
}
/** Get the primitive relative to this and the given path */
const IPrimitive *getPrimitive (const std::string &absoluteOrRelativePath) const;
/** Get the id of the child, return 0xffffffff if not found */
bool getChildId (uint &childId, const IPrimitive *child) const;
/** Remove and delete a child primitive */
bool removeChild (IPrimitive *child);
/** Remove and delete a child primitive */
bool removeChild (uint childId);
/// Remove the child primitive from the children list, don't delete it
bool unlinkChild(IPrimitive *child);
/** Remove and delete all children primitives */
void removeChildren ();
/**
* Insert a child primitive before the index.
* The pointer will be deleted by the parent primitive using the ::delete operator.
* return false if the index is invalid
*/
bool insertChild (IPrimitive *primitive, uint index = AtTheEnd);
/// \name Properties
/**
* Get a num properties
**/
uint getNumProperty () const;
/**
* Get a properties by its index
* This method (iterate a list) is slower than getPropertyByName (look up in a map).
**/
bool getProperty (uint index, std::string &property_name, const IProperty *&result) const;
/**
* Get a properties by its index
* This method (iterate a list) is slower than getPropertyByName (look up in a map).
**/
bool getProperty (uint index, std::string &property_name, IProperty *&result);
/** Check the existence of a named property */
bool checkProperty(const std::string &property_name) const;
/**
* Add a property
* If the property already exist, the method does nothing and returns false.
* The pointer will be deleted by the primitive using the ::delete operator.
**/
bool addPropertyByName (const char *property_name, IProperty *result);
/**
* Get a property with its name
**/
bool getPropertyByName (const char *property_name, const IProperty *&result) const;
/**
* Get a property with its name
**/
bool getPropertyByName (const char *property_name, IProperty *&result) const;
/**
* Get a string property with its name. Return false if the property is not found or is not a string property.
**/
bool getPropertyByName (const char *property_name, std::string *&result) const;
/**
* Get a string array property with its name. Return false if the property is not found or is not a string array property.
**/
bool getPropertyByName (const char *property_name, std::vector<std::string> *&result) const;
/**
* Get a string property with its name. Return false if the property is not found or is not a string property.
**/
bool getPropertyByName (const char *property_name, std::string &result) const;
/**
* Get a string array property with its name. Return false if the property is not found or is not a string array property.
**/
bool getPropertyByName (const char *property_name, const std::vector<std::string> *&result) const;
/**
* Get a color property with its name. Return false if the property is not found or is not a string array property.
**/
bool getPropertyByName (const char *property_name, NLMISC::CRGBA &result) const;
/**
* Remove a property
* This is method (iterate a list) is slower than removePropertyByName (look up in a map).
**/
bool removeProperty (uint index);
/**
* Remove a property by its name
**/
bool removePropertyByName (const char *property_name);
/**
* Remove all the properties
**/
void removeProperties ();
/* Init default primitive's parameters
*
* This method will add all the properties declared in the primitive class and create default properties.
*/
void initDefaultValues (CLigoConfig &config);
// Read the primitive, calls initDefaultValue (CLigoConfig &config)
virtual bool read (xmlNodePtr xmlNode, const char *filename, uint version, CLigoConfig &config);
// Write the primitive
virtual void write (xmlNodePtr xmlNode, const char *filename) const;
// Get the vertices
virtual uint getNumVector () const = 0;
virtual const CPrimVector *getPrimVector () const = 0;
virtual CPrimVector *getPrimVector () = 0;
// Make a copy
virtual IPrimitive *copy () const = 0;
// used for fast binary save/load (exploitation mode)
void serial(NLMISC::IStream &f);
// shortcut to getPropertyByName("name", ret); return ret;
std::string getName() const;
const std::string &getUnparsedProperties() const;
void setUnparsedProperties(const std::string &unparsedProperties) const;
private:
// callback called just after the node is attach under a parent
virtual void onLinkToParent() {}
// callback called just before the node is removed from it's parent
virtual void onUnlinkFromParent() {}
/// Callback called just after an ancestor is linked
virtual void onBranchLink() {}
/// Callback called just before an ancestor is unlinked
virtual void onBranchUnlink() {}
/// Callback called when the primitive is updated, giving a chance to track the primitive's modifications during the loading
virtual void onModifyPrimitive(CPrimitives &/* primitives */) const {}
// internal recusive call
void branchLink();
void branchUnlink();
// Update child Id
void updateChildId (uint index);
// Child id
uint32 _ChildId;
// Parent
IPrimitive *_Parent;
// Children
std::vector<IPrimitive*> _Children;
// Single properties
std::map<std::string, IProperty*> _Properties;
// Editor specific properties (unparsed)
mutable std::string _UnparsedProperties;
#ifdef NLLIGO_DEBUG
std::string _DebugClassName;
std::string _DebugPrimitiveName;
#endif
};
// ***************************************************************************
// Simple primitive node
class CPrimNode : public IPrimitive
{
public:
// \name From IClassable
NLMISC_DECLARE_CLASS (CPrimNode)
protected:
// void operator= (const CPrimNode &node);
// Get the vertices
virtual uint getNumVector () const;
virtual const CPrimVector *getPrimVector () const;
virtual CPrimVector *getPrimVector ();
// Read the primitive
virtual bool read (xmlNodePtr xmlNode, const char *filename, uint version, CLigoConfig &config);
// \name From IPrimitive
virtual IPrimitive *copy () const;
};
// ***************************************************************************
class CPrimPoint : public IPrimitive
{
public:
CPrimPoint ()
{
Angle = 0;
}
CPrimVector Point;
float Angle; // Angle on OZ, CCW
public:
void serial (NLMISC::IStream &f);
// void operator= (const CPrimPoint &node);
// \name From IClassable
NLMISC_DECLARE_CLASS (CPrimPoint);
protected:
// Get the vertices
virtual uint getNumVector () const;
virtual const CPrimVector *getPrimVector () const;
virtual CPrimVector *getPrimVector ();
// Read the primitive
virtual bool read (xmlNodePtr xmlNode, const char *filename, uint version, CLigoConfig &config);
// Write the primitive
virtual void write (xmlNodePtr xmlNode, const char *filename) const;
// \name From IPrimitive
virtual IPrimitive *copy () const;
};
// ***************************************************************************
class CPrimPath : public IPrimitive
{
public:
std::vector<CPrimVector> VPoints;
public:
void serial (NLMISC::IStream &f);
// void operator= (const CPrimPath &node);
// \name From IClassable
NLMISC_DECLARE_CLASS (CPrimPath);
protected:
// Get the vertices
virtual uint getNumVector () const;
virtual const CPrimVector *getPrimVector () const;
virtual CPrimVector *getPrimVector ();
// Read the primitive
virtual bool read (xmlNodePtr xmlNode, const char *filename, uint version, CLigoConfig &config);
// Write the primitive
virtual void write (xmlNodePtr xmlNode, const char *filename) const;
// \name From IPrimitive
virtual IPrimitive *copy () const;
};
// ***************************************************************************
class CPrimZone : public IPrimitive
{
public:
std::vector<CPrimVector> VPoints;
static float getSegmentDist(const NLMISC::CVector v, const NLMISC::CVector &p1, const NLMISC::CVector &p2, NLMISC::CVector &nearPos);
public:
bool contains (const NLMISC::CVector &v) const { return CPrimZone::contains(v, VPoints); }
bool contains(const NLMISC::CVector &v, float &distance, NLMISC::CVector &nearPos, bool isPath) const { return CPrimZone::contains(v, VPoints, distance, nearPos, isPath); }
// void operator= (const CPrimZone &node);
void serial (NLMISC::IStream &f);
// Returns true if the vector v is inside of the patatoid
static bool contains (const NLMISC::CVector &v, const std::vector<NLMISC::CVector> &points);
// Returns true if the vector v is inside of the patatoid and set the distance of the nearest segment and the position of the nearest point.
static bool contains (const NLMISC::CVector &v, const std::vector<NLMISC::CVector> &points, float &distance, NLMISC::CVector &nearPos, bool isPath);
// Returns true if the vector v is inside of the patatoid
static bool contains (const NLMISC::CVector &v, const std::vector<CPrimVector> &points);
// Returns true if the vector v is inside of the patatoid and set the distance of the nearest segment and the position of the nearest point.
static bool contains (const NLMISC::CVector &v, const std::vector<CPrimVector> &points, float &distance, NLMISC::CVector &nearPos, bool isPath);
/// Returns the barycenter of the zone (warning, it may be outside of the zone if it is not convex). Returns CVector::Null if there is no vertex.
NLMISC::CVector getBarycentre() const;
/// Returns the smallest axis-aligned box containing the zone (z is always set to 0)
void getAABox( NLMISC::CVector& cornerMin, NLMISC::CVector& cornerMax ) const;
/// Return the area of the axis-aligned box containing the zone
float getAreaOfAABox() const;
// \name From IClassable
NLMISC_DECLARE_CLASS (CPrimZone);
protected:
// Get the vertices
virtual uint getNumVector () const;
virtual const CPrimVector *getPrimVector () const;
virtual CPrimVector *getPrimVector ();
// Read the primitive
virtual bool read (xmlNodePtr xmlNode, const char *filename, uint version, CLigoConfig &config);
// Write the primitive
virtual void write (xmlNodePtr xmlNode, const char *filename) const;
// \name From IPrimitive
virtual IPrimitive *copy () const;
};
// ***************************************************************************
/** This primitive type is used to handle unique alias across a primitive file.
* Usage of this primitive imply the setting of the appropriate 'ligo context'
* before reading or copy/pasting alias.
*/
class CPrimAlias : public IPrimitive
{
friend class CPrimitives;
/// The 'dynamic' part of the alias
uint32 _Alias;
/// The primitive container
class CPrimitives *_Container;
// Needed overloads (not used)
virtual uint getNumVector () const
{
return 0;
};
virtual const CPrimVector *getPrimVector () const
{
return NULL;
}
virtual CPrimVector *getPrimVector ()
{
return NULL;
}
virtual void onBranchLink();
// callback called just before the node is removed from it's parent
virtual void onBranchUnlink();
void regenAlias();
public:
// \name From IClassable
NLMISC_DECLARE_CLASS (CPrimAlias);
// private default constructor
CPrimAlias();
// copy constructor needed
CPrimAlias(const CPrimAlias &other);
~CPrimAlias();
// return the dynamic part of the alias
uint32 getAlias() const;
// Return the full alias, merge of the static and dynamic part
uint32 getFullAlias() const;
// Read the primitive
virtual bool read (xmlNodePtr xmlNode, const char *filename, uint version, CLigoConfig &config);
// Write the primitive
virtual void write (xmlNodePtr xmlNode, const char *filename) const;
// Create a copy of this primitive
virtual IPrimitive *copy () const;
// serial for binary save
virtual void serial (NLMISC::IStream &f);
};
// ***************************************************************************
/*
This class is deprecated.
*/
class CPrimRegion
{
public:
std::string Name;
std::vector<CPrimPoint> VPoints;
std::vector<CPrimZone> VZones;
std::vector<CPrimPath> VPaths;
std::vector<bool> VHidePoints;
std::vector<bool> VHideZones;
std::vector<bool> VHidePaths;
public:
void serial (NLMISC::IStream &f);
};
// ***************************************************************************
/**
* This class is a ligo primitives set
*/
class CPrimitives
{
public:
CPrimitives ();
CPrimitives (const CPrimitives &other);
~CPrimitives ();
// Operator copy
CPrimitives& operator= (const CPrimitives &other);
// Convert from old format to the new one
void convert (const CPrimRegion &region);
// Read the primitive
bool read (xmlNodePtr xmlNode, const char *filename, CLigoConfig &config);
// Write the primitive
void write (xmlDocPtr xmlNode, const char *filename) const;
// Write the primitive
void write (xmlNodePtr root, const char *filename) const;
// serial the primitive. Used for binary files.
void serial(NLMISC::IStream &f);
// Root primitive hierarchy
CPrimNode *RootNode;
// get the static alias part for this primitive
uint32 getAliasStaticPart();
// set the static alias part for this primitive
void setAliasStaticPart(uint32 staticPart);
// Build an alias by combining the static and dynamic part
uint32 buildFullAlias(uint32 dynamicPart);
// Generate a new unique alias (dynamic part only)
uint32 genAlias(IPrimitive *prim, uint32 preferedAlias = 0);
// Reserve an alias and store it in the used alias list (dynamic part only)
// void reserveAlias(uint32 dynamicAlias);
// Remove an alias from the list of alias in use (dynamic part only)
void releaseAlias(IPrimitive *prim, uint32 dynamicAlias);
// Force the assignation of the specified alias to the primitive. If another primitive
// already hold the alias, this other primitive is assigned a new alias.
void forceAlias(CPrimAlias *prim, uint32 alias);
// get the last generated alias value (for debug only)
uint32 getLastGeneratedAlias();
// Return the primitive indexed by the given alias (ie, it doesn't return the alias primitive, but its first parent)
IPrimitive *getPrimitiveByAlias(uint32 primAlias);
// Build the complete list of indexed primitive (ie all primitive that have a primalias child)
void buildPrimitiveWithAliasList(std::map<uint32, IPrimitive*> &result);
private:
// Conversion internal methods
void convertAddPrimitive (IPrimitive *child, const IPrimitive *prim, bool hidden);
void convertPrimitive (const IPrimitive *prim, bool hidden);
/// Optional context information
CLigoConfig *_LigoConfig;
/// Static part alias mapping (can be 0 if no mapping is defined)
uint32 _AliasStaticPart;
/// Last generated Alias, used to compute the next alias
uint32 _LastGeneratedAlias;
/// List of alias in use in the primitive (dynamic part only)
std::map<uint32, IPrimitive*> _AliasInUse;
// Store the filename
// This allows to retrieve the static alias when reloading from binary file
std::string _Filename;
};
// ***************************************************************************
/** Singleton to manage special loading feature related to
* unique alias assignment
*/
class CPrimitiveContext
{
static CPrimitiveContext *_Instance;
// private ctor
CPrimitiveContext();
public:
// get the singleton reference
static CPrimitiveContext &instance()
{
if (!_Instance)
{
_Instance = new CPrimitiveContext;
}
return *_Instance;
}
/// The current ligo configuration file.
CLigoConfig *CurrentLigoConfig;
/// The current primitives container.
CPrimitives *CurrentPrimitive;
};
} // namespace NLLIGO
#endif // __PRIMITIVE_H__

View file

@ -1,785 +0,0 @@
// NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
// Copyright (C) 2010 Winch Gate Property Limited
//
// 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/>.
#ifndef __PRIMITIVE_H__
#define __PRIMITIVE_H__
#include "nel/misc/vector.h"
#include "nel/misc/rgba.h"
// Forward declarations for libxml2
typedef struct _xmlNode xmlNode;
typedef xmlNode *xmlNodePtr;
typedef struct _xmlDoc xmlDoc;
typedef xmlDoc *xmlDocPtr;
#include <vector>
namespace NLLIGO
{
#ifdef NL_DEBUG
# define NLLIGO_DEBUG
#endif
/**
* Ligo primitives are used to add logical geometrical gameplay information.
* Ligo primitives are NODES, POINTS, PATHES or ZONES.
* Ligo primitives have a CLASS.
*
* The primitive class defines the properties attached to the primitive
* The primitive class are defined in the XML file specified in the LigoClass field of the CLigoConfig class.
*/
class CPrimitives;
class CLigoConfig;
// ***************************************************************************
void Register ();
// ***************************************************************************
/*
* This class is a property class for ligo primitive.
*/
class IProperty : public NLMISC::IStreamable
{
public:
IProperty ()
{
Default = false;
}
// This property is set to default
bool Default;
// Force class to be polymorphic
virtual void foo () const = 0;
};
// ***************************************************************************
/*
* This class is a property class for ligo primitive.
* This is a simple string
*/
class CPropertyString : public IProperty
{
public:
CPropertyString () {}
CPropertyString (const std::string &str);
CPropertyString (const std::string &str, bool _default);
virtual ~CPropertyString () {}
std::string String;
NLMISC_DECLARE_CLASS (CPropertyString)
virtual void serial(NLMISC::IStream &f)
{
f.serial(Default);
f.serial(String);
}
// Force class to be polymorphic
virtual void foo () const {}
};
// ***************************************************************************
/*
* This class is a property class for ligo primitive.
* This is a string array
*/
class CPropertyStringArray : public IProperty
{
public:
CPropertyStringArray () {}
virtual ~CPropertyStringArray () {}
CPropertyStringArray (const std::vector<std::string> &stringArray);
CPropertyStringArray (const std::vector<std::string> &stringArray, bool _default);
std::vector<std::string> StringArray;
NLMISC_DECLARE_CLASS (CPropertyStringArray)
virtual void serial(NLMISC::IStream &f)
{
f.serial(Default);
f.serialCont(StringArray);
}
// Force class to be polymorphic
virtual void foo () const {}
};
// ***************************************************************************
/*
* This class is a property class for ligo primitive.
* This is a string array
*/
class CPropertyColor : public IProperty
{
public:
NLMISC::CRGBA Color;
NLMISC_DECLARE_CLASS (CPropertyColor)
virtual void serial(NLMISC::IStream &f)
{
f.serial(Default);
f.serial(Color);
}
// Force class to be polymorphic
virtual void foo () const {}
// ctors
CPropertyColor() {}
CPropertyColor(NLMISC::CRGBA col) : Color(col) {}
};
// ***************************************************************************
class CPrimVector : public NLMISC::CVector
{
public:
CPrimVector ()
{
Selected = false;
}
CPrimVector (const NLMISC::CVector &v)
{
CVector::operator= (v);
Selected = false;
}
void serial(NLMISC::IStream &f)
{
CVector::serial(f);
f.serial(Selected);
}
bool Selected;
};
// ***************************************************************************
/*
* This class is the base class for ligo primitive.
*
* Provide access to common properties.
* Provide access to the primitive hierachy
*/
class IPrimitive : public NLMISC::IStreamable
{
friend class CPrimitives;
public:
// Deprecated
// std::string Layer;
// Deprecated
// std::string Name;
// Expended in the tree view
// bool Expanded;
enum
{
NotAnArray,
AtTheEnd = 0xffffffff,
};
/// \name Hierarchy
IPrimitive ();
virtual ~IPrimitive ();
IPrimitive (const IPrimitive &node);
virtual void operator= (const IPrimitive &node);
/** Get the children primitive count */
uint getNumChildren () const
{
return (uint)_Children.size ();
}
/** Get a child primitive */
bool getChild (const IPrimitive *&result, uint childId) const;
/** Get a child primitive */
bool getChild (IPrimitive *&result, uint childId);
/** Get the parent primitive */
IPrimitive *getParent ()
{
return _Parent;
}
const IPrimitive *getParent () const
{
return _Parent;
}
/** Get the primitive relative to this and the given path */
const IPrimitive *getPrimitive (const std::string &absoluteOrRelativePath) const;
/** Get the id of the child, return 0xffffffff if not found */
bool getChildId (uint &childId, const IPrimitive *child) const;
/** Remove and delete a child primitive */
bool removeChild (IPrimitive *child);
/** Remove and delete a child primitive */
bool removeChild (uint childId);
/// Remove the child primitive from the children list, don't delete it
bool unlinkChild(IPrimitive *child);
/** Remove and delete all children primitives */
void removeChildren ();
/**
* Insert a child primitive before the index.
* The pointer will be deleted by the parent primitive using the ::delete operator.
* return false if the index is invalid
*/
bool insertChild (IPrimitive *primitive, uint index = AtTheEnd);
/// \name Properties
/**
* Get a num properties
**/
uint getNumProperty () const;
/**
* Get a properties by its index
* This method (iterate a list) is slower than getPropertyByName (look up in a map).
**/
bool getProperty (uint index, std::string &property_name, const IProperty *&result) const;
/**
* Get a properties by its index
* This method (iterate a list) is slower than getPropertyByName (look up in a map).
**/
bool getProperty (uint index, std::string &property_name, IProperty *&result);
/** Check the existence of a named property */
bool checkProperty(const std::string &property_name) const;
/**
* Add a property
* If the property already exist, the method does nothing and returns false.
* The pointer will be deleted by the primitive using the ::delete operator.
**/
bool addPropertyByName (const std::string &property_name, IProperty *result);
/**
* Get a property with its name
**/
bool getPropertyByName (const std::string &property_name, const IProperty *&result) const;
/**
* Get a property with its name
**/
bool getPropertyByName (const std::string &property_name, IProperty *&result) const;
/**
* Get a string property with its name. Return false if the property is not found or is not a string property.
**/
bool getPropertyByName (const std::string &property_name, std::string *&result) const;
/**
* Get a string array property with its name. Return false if the property is not found or is not a string array property.
**/
bool getPropertyByName (const std::string &property_name, std::vector<std::string> *&result) const;
/**
* Get a string property with its name. Return false if the property is not found or is not a string property.
**/
bool getPropertyByName (const std::string &property_name, std::string &result) const;
/**
* Get a string array property with its name. Return false if the property is not found or is not a string array property.
**/
bool getPropertyByName (const std::string &property_name, const std::vector<std::string> *&result) const;
/**
* Get a color property with its name. Return false if the property is not found or is not a string array property.
**/
bool getPropertyByName (const std::string &property_name, NLMISC::CRGBA &result) const;
/**
* Remove a property
* This is method (iterate a list) is slower than removePropertyByName (look up in a map).
**/
bool removeProperty (uint index);
/**
* Remove a property by its name
**/
bool removePropertyByName (const std::string &property_name);
/**
* Remove all the properties
**/
void removeProperties ();
/* Init default primitive's parameters
*
* This method will add all the properties declared in the primitive class and create default properties.
*/
void initDefaultValues (CLigoConfig &config);
// Read the primitive, calls initDefaultValue (CLigoConfig &config)
virtual bool read (xmlNodePtr xmlNode, const std::string &property_name, uint version, CLigoConfig &config);
// Write the primitive
virtual void write (xmlNodePtr xmlNode, const std::string &property_name) const;
// Get the vertices
virtual uint getNumVector () const = 0;
virtual const CPrimVector *getPrimVector () const = 0;
virtual CPrimVector *getPrimVector () = 0;
// Make a copy
virtual IPrimitive *copy () const = 0;
// used for fast binary save/load (exploitation mode)
void serial(NLMISC::IStream &f);
// shortcut to getPropertyByName("name", ret); return ret;
std::string getName() const;
const std::string &getUnparsedProperties() const;
void setUnparsedProperties(const std::string &unparsedProperties) const;
private:
// callback called just after the node is attach under a parent
virtual void onLinkToParent() {}
// callback called just before the node is removed from it's parent
virtual void onUnlinkFromParent() {}
/// Callback called just after an ancestor is linked
virtual void onBranchLink() {}
/// Callback called just before an ancestor is unlinked
virtual void onBranchUnlink() {}
/// Callback called when the primitive is updated, giving a chance to track the primitive's modifications during the loading
virtual void onModifyPrimitive(CPrimitives &/* primitives */) const {}
// internal recusive call
void branchLink();
void branchUnlink();
// Update child Id
void updateChildId (uint index);
// Child id
uint32 _ChildId;
// Parent
IPrimitive *_Parent;
// Children
std::vector<IPrimitive*> _Children;
// Single properties
std::map<std::string, IProperty*> _Properties;
// Editor specific properties (unparsed)
mutable std::string _UnparsedProperties;
#ifdef NLLIGO_DEBUG
std::string _DebugClassName;
std::string _DebugPrimitiveName;
#endif
};
// ***************************************************************************
// Simple primitive node
class CPrimNode : public IPrimitive
{
public:
// \name From IClassable
NLMISC_DECLARE_CLASS (CPrimNode)
protected:
// void operator= (const CPrimNode &node);
// Get the vertices
virtual uint getNumVector () const;
virtual const CPrimVector *getPrimVector () const;
virtual CPrimVector *getPrimVector ();
// Read the primitive
virtual bool read (xmlNodePtr xmlNode, const std::string &filename, uint version, CLigoConfig &config);
// \name From IPrimitive
virtual IPrimitive *copy () const;
};
// ***************************************************************************
class CPrimPoint : public IPrimitive
{
public:
CPrimPoint ()
{
Angle = 0;
}
CPrimVector Point;
float Angle; // Angle on OZ, CCW
public:
void serial (NLMISC::IStream &f);
// void operator= (const CPrimPoint &node);
// \name From IClassable
NLMISC_DECLARE_CLASS (CPrimPoint);
protected:
// Get the vertices
virtual uint getNumVector () const;
virtual const CPrimVector *getPrimVector () const;
virtual CPrimVector *getPrimVector ();
// Read the primitive
virtual bool read (xmlNodePtr xmlNode, const std::string &filename, uint version, CLigoConfig &config);
// Write the primitive
virtual void write (xmlNodePtr xmlNode, const std::string &filename) const;
// \name From IPrimitive
virtual IPrimitive *copy () const;
};
// ***************************************************************************
class CPrimPath : public IPrimitive
{
public:
std::vector<CPrimVector> VPoints;
public:
void serial (NLMISC::IStream &f);
// void operator= (const CPrimPath &node);
// \name From IClassable
NLMISC_DECLARE_CLASS (CPrimPath);
protected:
// Get the vertices
virtual uint getNumVector () const;
virtual const CPrimVector *getPrimVector () const;
virtual CPrimVector *getPrimVector ();
// Read the primitive
virtual bool read (xmlNodePtr xmlNode, const std::string &filename, uint version, CLigoConfig &config);
// Write the primitive
virtual void write (xmlNodePtr xmlNode, const std::string &filename) const;
// \name From IPrimitive
virtual IPrimitive *copy () const;
};
// ***************************************************************************
class CPrimZone : public IPrimitive
{
public:
std::vector<CPrimVector> VPoints;
static float getSegmentDist(const NLMISC::CVector v, const NLMISC::CVector &p1, const NLMISC::CVector &p2, NLMISC::CVector &nearPos);
public:
bool contains (const NLMISC::CVector &v) const { return CPrimZone::contains(v, VPoints); }
bool contains(const NLMISC::CVector &v, float &distance, NLMISC::CVector &nearPos, bool isPath) const { return CPrimZone::contains(v, VPoints, distance, nearPos, isPath); }
// void operator= (const CPrimZone &node);
void serial (NLMISC::IStream &f);
// Returns true if the vector v is inside of the patatoid
static bool contains (const NLMISC::CVector &v, const std::vector<NLMISC::CVector> &points);
// Returns true if the vector v is inside of the patatoid and set the distance of the nearest segment and the position of the nearest point.
static bool contains (const NLMISC::CVector &v, const std::vector<NLMISC::CVector> &points, float &distance, NLMISC::CVector &nearPos, bool isPath);
// Returns true if the vector v is inside of the patatoid
static bool contains (const NLMISC::CVector &v, const std::vector<CPrimVector> &points);
// Returns true if the vector v is inside of the patatoid and set the distance of the nearest segment and the position of the nearest point.
static bool contains (const NLMISC::CVector &v, const std::vector<CPrimVector> &points, float &distance, NLMISC::CVector &nearPos, bool isPath);
/// Returns the barycenter of the zone (warning, it may be outside of the zone if it is not convex). Returns CVector::Null if there is no vertex.
NLMISC::CVector getBarycentre() const;
/// Returns the smallest axis-aligned box containing the zone (z is always set to 0)
void getAABox( NLMISC::CVector& cornerMin, NLMISC::CVector& cornerMax ) const;
/// Return the area of the axis-aligned box containing the zone
float getAreaOfAABox() const;
// \name From IClassable
NLMISC_DECLARE_CLASS (CPrimZone);
protected:
// Get the vertices
virtual uint getNumVector () const;
virtual const CPrimVector *getPrimVector () const;
virtual CPrimVector *getPrimVector ();
// Read the primitive
virtual bool read (xmlNodePtr xmlNode, const std::string &filename, uint version, CLigoConfig &config);
// Write the primitive
virtual void write (xmlNodePtr xmlNode, const std::string &filename) const;
// \name From IPrimitive
virtual IPrimitive *copy () const;
};
// ***************************************************************************
/** This primitive type is used to handle unique alias across a primitive file.
* Usage of this primitive imply the setting of the appropriate 'ligo context'
* before reading or copy/pasting alias.
*/
class CPrimAlias : public IPrimitive
{
friend class CPrimitives;
/// The 'dynamic' part of the alias
uint32 _Alias;
/// The primitive container
class CPrimitives *_Container;
// Needed overloads (not used)
virtual uint getNumVector () const
{
return 0;
};
virtual const CPrimVector *getPrimVector () const
{
return NULL;
}
virtual CPrimVector *getPrimVector ()
{
return NULL;
}
virtual void onBranchLink();
// callback called just before the node is removed from it's parent
virtual void onBranchUnlink();
void regenAlias();
public:
// \name From IClassable
NLMISC_DECLARE_CLASS (CPrimAlias);
// private default constructor
CPrimAlias();
// copy constructor needed
CPrimAlias(const CPrimAlias &other);
~CPrimAlias();
// return the dynamic part of the alias
uint32 getAlias() const;
// Return the full alias, merge of the static and dynamic part
uint32 getFullAlias() const;
// Read the primitive
virtual bool read (xmlNodePtr xmlNode, const std::string &filename, uint version, CLigoConfig &config);
// Write the primitive
virtual void write (xmlNodePtr xmlNode, const std::string &filename) const;
// Create a copy of this primitive
virtual IPrimitive *copy () const;
// serial for binary save
virtual void serial (NLMISC::IStream &f);
};
// ***************************************************************************
/*
This class is deprecated.
*/
class CPrimRegion
{
public:
std::string Name;
std::vector<CPrimPoint> VPoints;
std::vector<CPrimZone> VZones;
std::vector<CPrimPath> VPaths;
std::vector<bool> VHidePoints;
std::vector<bool> VHideZones;
std::vector<bool> VHidePaths;
public:
void serial (NLMISC::IStream &f);
};
// ***************************************************************************
/**
* This class is a ligo primitives set
*/
class CPrimitives
{
public:
CPrimitives ();
CPrimitives (const CPrimitives &other);
~CPrimitives ();
// Operator copy
CPrimitives& operator= (const CPrimitives &other);
// Convert from old format to the new one
void convert (const CPrimRegion &region);
// Read the primitive
bool read (xmlNodePtr xmlNode, const std::string &filename, CLigoConfig &config);
// Write the primitive
void write (xmlDocPtr xmlNode, const std::string &filename) const;
// Write the primitive
void write (xmlNodePtr root, const std::string &filename) const;
// serial the primitive. Used for binary files.
void serial(NLMISC::IStream &f);
// Root primitive hierarchy
CPrimNode *RootNode;
// get the static alias part for this primitive
uint32 getAliasStaticPart();
// set the static alias part for this primitive
void setAliasStaticPart(uint32 staticPart);
// Build an alias by combining the static and dynamic part
uint32 buildFullAlias(uint32 dynamicPart);
// Generate a new unique alias (dynamic part only)
uint32 genAlias(IPrimitive *prim, uint32 preferedAlias = 0);
// Reserve an alias and store it in the used alias list (dynamic part only)
// void reserveAlias(uint32 dynamicAlias);
// Remove an alias from the list of alias in use (dynamic part only)
void releaseAlias(IPrimitive *prim, uint32 dynamicAlias);
// Force the assignation of the specified alias to the primitive. If another primitive
// already hold the alias, this other primitive is assigned a new alias.
void forceAlias(CPrimAlias *prim, uint32 alias);
// get the last generated alias value (for debug only)
uint32 getLastGeneratedAlias();
// Return the primitive indexed by the given alias (ie, it doesn't return the alias primitive, but its first parent)
IPrimitive *getPrimitiveByAlias(uint32 primAlias);
// Build the complete list of indexed primitive (ie all primitive that have a primalias child)
void buildPrimitiveWithAliasList(std::map<uint32, IPrimitive*> &result);
private:
// Conversion internal methods
void convertAddPrimitive (IPrimitive *child, const IPrimitive *prim, bool hidden);
void convertPrimitive (const IPrimitive *prim, bool hidden);
/// Optional context information
CLigoConfig *_LigoConfig;
/// Static part alias mapping (can be 0 if no mapping is defined)
uint32 _AliasStaticPart;
/// Last generated Alias, used to compute the next alias
uint32 _LastGeneratedAlias;
/// List of alias in use in the primitive (dynamic part only)
std::map<uint32, IPrimitive*> _AliasInUse;
// Store the filename
// This allows to retrieve the static alias when reloading from binary file
std::string _Filename;
};
// ***************************************************************************
/** Singleton to manage special loading feature related to
* unique alias assignment
*/
class CPrimitiveContext
{
static CPrimitiveContext *_Instance;
// private ctor
CPrimitiveContext();
public:
// get the singleton reference
static CPrimitiveContext &instance()
{
if (!_Instance)
{
_Instance = new CPrimitiveContext;
}
return *_Instance;
}
/// The current ligo configuration file.
CLigoConfig *CurrentLigoConfig;
/// The current primitives container.
CPrimitives *CurrentPrimitive;
};
} // namespace NLLIGO
#endif // __PRIMITIVE_H__

View file

@ -521,20 +521,6 @@ public:
*/
static bool isAbsolutePath (const std::string &path);
/** Make path absolute
* \param relativePath - The relative path
* \param directory - the directory to which the path is relative to
* \param simplify - if we should simplify or not the path (convert . and .. in path)
* returns the absolute path, or empty if something went wrong.
*/
static std::string makePathAbsolute (const std::string &relativePath, const std::string &directory, bool simplify = false );
/** Return if a path is absolute or not.
* \param path - The path
* returns true if path is absolute or false if relative.
*/
static bool isAbsolutePath (const std::string &path);
/** If File in this list is added more than one in an addSearchPath, it doesn't launch a warning.
*/
static void addIgnoredDoubleFile(const std::string &ignoredFile);

View file

@ -102,6 +102,10 @@ CBloomEffect::~CBloomEffect()
if (_Driver) _Driver->deleteMaterial(_BlurMat);
}
}
}
//-----------------------------------------------------------------------------------------------------------
void CBloomEffect::init()
{
if (!((CDriverUser *)_Driver)->getDriver()->supportBloomEffect())

View file

@ -31,6 +31,7 @@ using namespace std;
#ifdef DEBUG_NEW
#define new DEBUG_NEW
#endif
namespace NL3D
{

View file

@ -1,152 +0,0 @@
// NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
// Copyright (C) 2010 Winch Gate Property Limited
//
// 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/>.
#include "../stdopengl.h"
#include "../driver_opengl.h"
#import "cocoa_opengl_view.h"
static void viewDidResize(NSView* view, CDriverGL* driver)
{
NSRect rect = [[view superview] frame];
driver->_CurrentMode.Height = rect.size.height;
driver->_CurrentMode.Width = rect.size.width;
}
@implementation CocoaOpenGLView
-(id)initWithFrame:(NSRect)frame
{
if((self = [super initWithFrame:frame]))
{
_characterStorage = [[NSMutableAttributedString alloc] initWithString:@""];
_driver = nil;
return self;
}
return nil;
}
-(void)dealloc
{
[_characterStorage release];
[super dealloc];
}
-(void)keyDown:(NSEvent*)event
{
#ifdef NL_MAC_VERSION_10_6_UP
[[self inputContext] handleEvent:event];
#endif
}
-(void)setDriver:(CDriverGL*)driver
{
_driver = driver;
}
-(void)resizeWithOldSuperviewSize:(NSSize)oldBoundsSize
{
[super resizeWithOldSuperviewSize:oldBoundsSize];
if(!_driver)
return;
viewDidResize(self, _driver);
}
/******************************************************************************/
/* NSTextInputClient Protocol */
-(BOOL)hasMarkedText
{
return (_markedRange.location == NSNotFound ? NO : YES);
}
-(NSRange)markedRange
{
return _markedRange;
}
-(NSRange)selectedRange
{
return NSMakeRange(NSNotFound, 0);
}
-(void)setMarkedText:(id)aString
selectedRange:(NSRange)newSelection
replacementRange:(NSRange)replacementRange
{
if(replacementRange.location == NSNotFound)
replacementRange = _markedRange;
if([aString length] == 0)
{
[_characterStorage deleteCharactersInRange:replacementRange];
[self unmarkText];
}
else
{
_markedRange = NSMakeRange(replacementRange.location, [aString length]);
[_characterStorage replaceCharactersInRange:replacementRange
withString:aString];
}
}
-(void)unmarkText
{
_markedRange = NSMakeRange(NSNotFound, 0);
[[self inputContext] discardMarkedText];
}
-(NSArray*)validAttributesForMarkedText
{
return [NSArray arrayWithObjects:
NSMarkedClauseSegmentAttributeName, NSGlyphInfoAttributeName, nil];
}
-(NSAttributedString*)attributedSubstringForProposedRange:(NSRange)aRange
actualRange:(NSRangePointer)actualRange
{
return [_characterStorage attributedSubstringFromRange:aRange];
}
-(void)insertText:(id)aString
replacementRange:(NSRange)replacementRange
{
if(replacementRange.location == NSNotFound)
replacementRange = _markedRange;
[_characterStorage replaceCharactersInRange:replacementRange
withString:aString];
}
-(NSUInteger)characterIndexForPoint:(NSPoint)aPoint
{
return 0;
}
-(NSRect)firstRectForCharacterRange:(NSRange)aRange
actualRange:(NSRangePointer)actualRange
{
return NSMakeRect(0, 0, 0, 0);
}
-(void)doCommandBySelector:(SEL)aSelector
{
[super doCommandBySelector:aSelector];
}
@end

View file

@ -25,7 +25,7 @@ BEGIN
VALUE "OriginalFilename", "nel_drv_opengl_win_d.dll"
#else
VALUE "OriginalFilename", "nel_drv_opengl_win_r.dll"
#endif
#endif
VALUE "ProductName", "Ryzom Core"
VALUE "ProductVersion", NL_VERSION
END

View file

@ -34,7 +34,7 @@
#include "nel/3d/water_pool_manager.h"
#include "nel/3d/u_camera.h"
#include "nel/3d/debug_vb.h"
#include "nel/misc/event_emitter.h"
#include "nel/misc/hierarchical_timer.h"
#include "nel/misc/event_emitter.h"

View file

@ -3785,8 +3785,6 @@ uint CZoneLighter::getAPatch (uint process)
nlassert(index < _PatchInfo.size());
nlassert(index < _PatchInfo.size());
if (access.value().empty())
// no more patches
return 0xffffffff;

View file

@ -496,7 +496,6 @@ void CZoneBank::reset ()
_Selection.clear ();
}
#ifdef NL_OS_WINDOWS
// ---------------------------------------------------------------------------
bool CZoneBank::initFromPath(const std::string &sPathName, std::string &error)
{
@ -516,7 +515,6 @@ bool CZoneBank::initFromPath(const std::string &sPathName, std::string &error)
return true;
}
#endif // NL_OS_WINDOWS
// ---------------------------------------------------------------------------
bool CZoneBank::addElement (const std::string &elementName, std::string &error)

View file

@ -23,8 +23,6 @@
#include "nel/misc/o_xml.h"
#include "nel/misc/o_xml.h"
using namespace NLMISC;
using namespace std;

View file

@ -1,48 +0,0 @@
/**
* \file fast_id_map.cpp
* \brief CFastIdMap
* \date 2012-04-10 19:28GMT
* \author Jan Boon (Kaetemi)
* CFastIdMap
*/
/*
* Copyright (C) 2012 by authors
*
* This file is part of RYZOM CORE.
* RYZOM CORE 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.
*
* RYZOM CORE 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 RYZOM CORE. If not, see
* <http://www.gnu.org/licenses/>.
*/
#include <nel/misc/types_nl.h>
#include <nel/misc/fast_id_map.h>
// STL includes
// NeL includes
// #include <nel/misc/debug.h>
// Project includes
#ifdef DEBUG_NEW
#define new DEBUG_NEW
#endif
namespace NLMISC {
void dummytoavoidthecompilerwarningfastidmap() { }
} /* namespace NLMISC */
/* end of file */

View file

@ -1854,84 +1854,6 @@ std::string CFileContainer::getTemporaryDirectory()
return path;
}
std::string CPath::getApplicationDirectory(const std::string &appName, bool local)
{
return getInstance()->_FileContainer.getApplicationDirectory(appName, local);
}
std::string CFileContainer::getApplicationDirectory(const std::string &appName, bool local)
{
static std::string appPaths[2];
std::string &appPath = appPaths[local ? 1 : 0];
if (appPath.empty())
{
#ifdef NL_OS_WINDOWS
wchar_t buffer[MAX_PATH];
#ifdef CSIDL_LOCAL_APPDATA
if (local)
{
SHGetSpecialFolderPathW(NULL, buffer, CSIDL_LOCAL_APPDATA, TRUE);
}
else
#endif
{
SHGetSpecialFolderPathW(NULL, buffer, CSIDL_APPDATA, TRUE);
}
appPath = CPath::standardizePath(wideToUtf8(buffer));
#else
// get user home directory from HOME environment variable
const char* homePath = getenv("HOME");
appPath = CPath::standardizePath(homePath ? homePath : ".");
#if defined(NL_OS_MAC)
appPath += "Library/Application Support/";
#else
// recommended for applications data that are owned by user
appPath += ".local/share/";
#endif
#endif
}
return CPath::standardizePath(appPath + appName);
}
std::string CPath::getTemporaryDirectory()
{
return getInstance()->_FileContainer.getTemporaryDirectory();
}
std::string CFileContainer::getTemporaryDirectory()
{
static std::string path;
if (path.empty())
{
const char *temp = getenv("TEMP");
const char *tmp = getenv("TMP");
std::string tempDir;
if (temp)
tempDir = temp;
if (tempDir.empty() && tmp)
tempDir = tmp;
#ifdef NL_OS_UNIX
if (tempDir.empty())
tempDir = "/tmp";
#else
if (tempDir.empty())
tempDir = ".";
#endif
path = CPath::standardizePath(tempDir);
}
return path;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////

View file

@ -24,10 +24,6 @@ using namespace std;
#define new DEBUG_NEW
#endif
#ifdef DEBUG_NEW
#define new DEBUG_NEW
#endif
namespace NLMISC {

View file

@ -29,10 +29,6 @@ using namespace std;
const string DefaultColTitle = "name";
#ifdef DEBUG_NEW
#define new DEBUG_NEW
#endif
namespace NLMISC {
NL_INSTANCE_COUNTER_IMPL(CWordsDictionary);

View file

@ -233,50 +233,6 @@ void EditPatchMod::SetSelLevel(DWORD level)
// ------------------------------------------------------------------------------------------------------------------------------------------------------
void EditPatchMod::SelectSubPatch(int index)
{
if (!ip)
return;
TimeValue t = ip->GetTime();
ip->ClearCurNamedSelSet();
ModContextList mcList;
INodeTab nodes;
ip->GetModContexts(mcList, nodes);
for (int i = 0; i < mcList.Count(); i++)
{
EditPatchData *patchData =(EditPatchData*)mcList[i]->localData;
if (!patchData)
return;
RPatchMesh *rpatch;
PatchMesh *patch = patchData->TempData(this)->GetPatch(t, rpatch);
if (!patch)
return;
patchData->BeginEdit(t);
if (theHold.Holding())
theHold.Put(new PatchRestore(patchData, this, patch, rpatch, "SelectSubComponent"));
patch->patchSel.Set(index);
patchData->UpdateChanges(patch, rpatch, FALSE);
if (patchData->tempData)
{
patchData->tempData->Invalidate(PART_SELECT);
}
}
PatchSelChanged();
UpdateSelectDisplay();
NotifyDependents(FOREVER, PART_SELECT, REFMSG_CHANGE);
}
// ------------------------------------------------------------------------------------------------------------------------------------------------------
void EditPatchMod::SelectSubPatch(int index)
{
if (!ip)

File diff suppressed because it is too large Load diff

View file

@ -1,378 +1,378 @@
NEL3D_APPDATA_INTERFACE_FILE = 1423062700
-- Allocate 20 Me for the script
heapSize += 15000000
nlErrorFilename = "W:/database/conversion.log"
nlErrorStream = openFile nlErrorFilename mode:"w"
if nlErrorStream == undefined then
nlErrorStream = createFile nlErrorFilename
-- Log a message
fn nllog message =
(
if nlErrorStream != undefined then
(
format "%\n" message to:nlErrorStream
flush nlErrorStream
)
-- To the console
print message
)
include "nel_utility.ms"
fn findFile dir fileName =
(
if (doesFileExist (dir + "\\" + fileName)) then
(
return (dir + "\\" + fileName)
)
dirArr = GetDirectories (dir + "\\*")
for d in dirArr do
(
local fileFound = findFile d fileName
if (fileFound != "") then
return fileFound
)
return ""
)
fn getFixedPath ps =
(
if not (doesFileExist ps) then
(
local fileName = filenameFromPath ps
local fileFound = findFile "W:\\database\\sfx" fileName
if (fileFound != "") then
return fileFound
else
return fileName
)
else
(
return ps
)
)
fn renameParticleSystem ps =
(
local newFileName = getFixedPath ps.ps_file_name
if (newFileName != ps.ps_file_name) then
(
ps.ps_file_name = newFileName
return 1
)
else
(
return 0
)
)
rollout assets_ps_rollout "Properties"
(
fn do_it =
(
local result = 0
for m in getClassInstances nel_ps do
(
if (renameParticleSystem m) == 1 then
result = 1
)
max select none
actionMan.executeAction 0 "40021" -- Selection: Select All
actionMan.executeAction 0 "311" -- Tools: Zoom Extents All Selected
actionMan.executeAction 0 "40807" -- Views: Activate All Maps
actionMan.executeAction 0 "63508" -- Views: Standard Display with Maps
actionMan.executeAction 0 "40043" -- Selection: Select None
max views redraw
return result
)
-- This script is a base script to include to add multiple functionality to your script
-- To use this script
-- Include it in your script into the rollout at the beginning.
-- Implement a do_it function to do the job in your rollout.
-- The function should retun -1 if an arror occurred, else the count of modification done
-- It the function returns <1, the project will not be overwritten
Group "Running properties"
(
RadioButtons SourceFiles "Source projects" labels:#("Current project", "All Projects in a folder") align:#left
Label DirectoryLabel "Source directory" align:#left
EditText Directory "" width:500 align:#left enabled:false
Button BrowseDirectory "Browse..." align:#left enabled:false
CheckBox Recurse "Look in subfolders" checked:true enabled:false
CheckBox Test "Test only, do not save" checked:false enabled:false
CheckBox BackupFiles "Backup files" checked:false enabled:false
CheckBox StopOnError "Stop on error" checked:false enabled:false
CheckBox UseTag "Use tag" checked:false enabled:false
Label ProgressText width:500 align:#left
ProgressBar Progress width:500 align:#left
Button GoButton "Go" width:500 align:#left
)
local countModifications
local countErrors
local fileModified
local fileParsed
fn UpdateData =
(
if SourceFiles.state == 2 then
isSourceDir = true
else
isSourceDir = false
if Test.checked == true then
isTest = true
else
isTest = false
Directory.enabled = isSourceDir
BrowseDirectory.enabled = isSourceDir
Recurse.enabled = isSourceDir
Test.enabled = isSourceDir
BackupFiles.enabled = isSourceDir and (isTest == false)
StopOnError.enabled = isSourceDir
UseTag.enabled = isSourceDir
)
on SourceFiles changed state do
(
UpdateData ()
)
on Test changed state do
(
UpdateData ()
)
fn call_do_it =
(
local result
-- One more project
fileParsed = fileParsed + 1
-- Call it
result = do_it ()
-- Error ?
if result < 0 then
countErrors = countErrors + 1
else
countModifications = countModifications + result
-- Return result
return result
)
fn BackupFile file =
(
local i
local newFilename
i = 0
while true do
(
-- New file name
newFilename = file + ".backup_" + (i as string)
-- File exist ?
if (fileExist newFilename) == false then
(
if (copyFile file newFilename) == false then
return false
else
return true
)
i = i + 1
)
)
fn RecurseFolder currentDirectory =
(
resetMAXFile #noprompt
local result
local file
local files
local origAnimStart
local origAnimEnd
local origFrameRate
-- Parse files
files = getFiles (currentDirectory+"/*.max")
-- For each files
for i = 1 to files.count do
(
-- File name
file = files[i]
-- Progress bar
ProgressText.text = "In directory "+currentDirectory+", compute file \"" + (getFilenameFile file) + "\""
Progress.value = i*100/files.count
if (UseTag.checked == false) or ((NeLTestFileDate file "W:/database/conversion.tag") == true) then
(
resetMAXFile #noprompt
nllog("CONVERT " + file)
-- Open the max project
if loadMaxFile file quiet:true == true then
(
objXRefMgr.UpdateAllRecords()
result = call_do_it ()
-- Error ?
if result < 0 then
(
if StopOnError.checked == true then
Messagebox ("Error in file " + file)
)
else
(
-- Save the max project ?
if (Test.checked == false) and (result != 0) then
(
-- Backup the max project ?
local ok
ok = true
if BackupFiles.checked == true then
(
-- Backup the file
if (BackupFile file) == false then
(
-- Don't save the file because backup has failed
ok = false
if StopOnError.checked == true then
Messagebox ("Can't backup file " + file)
-- One more error
countErrors = countErrors + 1
)
)
-- Save the max project ?
if ok == true then
(
if (saveMaxFile file) == true then
(
fileModified = fileModified + 1
)
else
(
if StopOnError.checked == true then
Messagebox ("Can't write file " + file)
-- One more error
countErrors = countErrors + 1
)
)
)
)
)
else
(
if StopOnError.checked == true then
Messagebox ("Can't load file " + file)
-- One more error
countErrors = countErrors + 1
)
)
else
(
nllog("SKIP " + file + " by tag")
)
)
-- Parse sub directory ?
if (Recurse.checked == true) then
(
local directories
-- Get the directories
directories = getDirectories (currentDirectory+"/*")
-- For each directories
for dir in directories do
(
RecurseFolder dir
)
)
)
on BrowseDirectory pressed do
(
local dir
try
(
dir = getSavePath () -- caption:"Select the projects directory"
if dir != undefined then
Directory.text = dir
)
catch
(
)
)
on GoButton pressed do
(
-- Reset count
countModifications = 0
countErrors = 0
fileModified = 0
fileParsed = 0
-- Get files in the shape_source_directory
if SourceFiles.state == 2 then
(
-- Should warning user ?
if (SourceFiles.state == 2) and (Test.checked == false) then
(
-- Warning !
if ((queryBox "Warning, all the files in the specified folders will be overwrited.\nYou should backup your files before executing this script.\nDo you want to continue executing this script ?" beep:true) == true) then
RecurseFolder (adjustPathStringForScript Directory.text)
)
else
(
RecurseFolder (adjustPathStringForScript Directory.text)
)
)
else
(
-- Just compute the current project
call_do_it ()
)
-- Show errors
ProgressText.text = (fileParsed as string) + " project(s) opened, " + (countModifications as string) + " project modification(s), " + (fileModified as string) + " project(s) saved, " + (countErrors as string) + " error(s)."
Progress.value = 100
)
)
assets_ps_floater = newRolloutFloater "NeL Assets PS Database" 550 400
addrollout assets_ps_rollout assets_ps_floater rolledUp:false
NEL3D_APPDATA_INTERFACE_FILE = 1423062700
-- Allocate 20 Me for the script
heapSize += 15000000
nlErrorFilename = "W:/database/conversion.log"
nlErrorStream = openFile nlErrorFilename mode:"w"
if nlErrorStream == undefined then
nlErrorStream = createFile nlErrorFilename
-- Log a message
fn nllog message =
(
if nlErrorStream != undefined then
(
format "%\n" message to:nlErrorStream
flush nlErrorStream
)
-- To the console
print message
)
include "nel_utility.ms"
fn findFile dir fileName =
(
if (doesFileExist (dir + "\\" + fileName)) then
(
return (dir + "\\" + fileName)
)
dirArr = GetDirectories (dir + "\\*")
for d in dirArr do
(
local fileFound = findFile d fileName
if (fileFound != "") then
return fileFound
)
return ""
)
fn getFixedPath ps =
(
if not (doesFileExist ps) then
(
local fileName = filenameFromPath ps
local fileFound = findFile "W:\\database\\sfx" fileName
if (fileFound != "") then
return fileFound
else
return fileName
)
else
(
return ps
)
)
fn renameParticleSystem ps =
(
local newFileName = getFixedPath ps.ps_file_name
if (newFileName != ps.ps_file_name) then
(
ps.ps_file_name = newFileName
return 1
)
else
(
return 0
)
)
rollout assets_ps_rollout "Properties"
(
fn do_it =
(
local result = 0
for m in getClassInstances nel_ps do
(
if (renameParticleSystem m) == 1 then
result = 1
)
max select none
actionMan.executeAction 0 "40021" -- Selection: Select All
actionMan.executeAction 0 "311" -- Tools: Zoom Extents All Selected
actionMan.executeAction 0 "40807" -- Views: Activate All Maps
actionMan.executeAction 0 "63508" -- Views: Standard Display with Maps
actionMan.executeAction 0 "40043" -- Selection: Select None
max views redraw
return result
)
-- This script is a base script to include to add multiple functionality to your script
-- To use this script
-- Include it in your script into the rollout at the beginning.
-- Implement a do_it function to do the job in your rollout.
-- The function should retun -1 if an arror occurred, else the count of modification done
-- It the function returns <1, the project will not be overwritten
Group "Running properties"
(
RadioButtons SourceFiles "Source projects" labels:#("Current project", "All Projects in a folder") align:#left
Label DirectoryLabel "Source directory" align:#left
EditText Directory "" width:500 align:#left enabled:false
Button BrowseDirectory "Browse..." align:#left enabled:false
CheckBox Recurse "Look in subfolders" checked:true enabled:false
CheckBox Test "Test only, do not save" checked:false enabled:false
CheckBox BackupFiles "Backup files" checked:false enabled:false
CheckBox StopOnError "Stop on error" checked:false enabled:false
CheckBox UseTag "Use tag" checked:false enabled:false
Label ProgressText width:500 align:#left
ProgressBar Progress width:500 align:#left
Button GoButton "Go" width:500 align:#left
)
local countModifications
local countErrors
local fileModified
local fileParsed
fn UpdateData =
(
if SourceFiles.state == 2 then
isSourceDir = true
else
isSourceDir = false
if Test.checked == true then
isTest = true
else
isTest = false
Directory.enabled = isSourceDir
BrowseDirectory.enabled = isSourceDir
Recurse.enabled = isSourceDir
Test.enabled = isSourceDir
BackupFiles.enabled = isSourceDir and (isTest == false)
StopOnError.enabled = isSourceDir
UseTag.enabled = isSourceDir
)
on SourceFiles changed state do
(
UpdateData ()
)
on Test changed state do
(
UpdateData ()
)
fn call_do_it =
(
local result
-- One more project
fileParsed = fileParsed + 1
-- Call it
result = do_it ()
-- Error ?
if result < 0 then
countErrors = countErrors + 1
else
countModifications = countModifications + result
-- Return result
return result
)
fn BackupFile file =
(
local i
local newFilename
i = 0
while true do
(
-- New file name
newFilename = file + ".backup_" + (i as string)
-- File exist ?
if (fileExist newFilename) == false then
(
if (copyFile file newFilename) == false then
return false
else
return true
)
i = i + 1
)
)
fn RecurseFolder currentDirectory =
(
resetMAXFile #noprompt
local result
local file
local files
local origAnimStart
local origAnimEnd
local origFrameRate
-- Parse files
files = getFiles (currentDirectory+"/*.max")
-- For each files
for i = 1 to files.count do
(
-- File name
file = files[i]
-- Progress bar
ProgressText.text = "In directory "+currentDirectory+", compute file \"" + (getFilenameFile file) + "\""
Progress.value = i*100/files.count
if (UseTag.checked == false) or ((NeLTestFileDate file "W:/database/conversion.tag") == true) then
(
resetMAXFile #noprompt
nllog("CONVERT " + file)
-- Open the max project
if loadMaxFile file quiet:true == true then
(
objXRefMgr.UpdateAllRecords()
result = call_do_it ()
-- Error ?
if result < 0 then
(
if StopOnError.checked == true then
Messagebox ("Error in file " + file)
)
else
(
-- Save the max project ?
if (Test.checked == false) and (result != 0) then
(
-- Backup the max project ?
local ok
ok = true
if BackupFiles.checked == true then
(
-- Backup the file
if (BackupFile file) == false then
(
-- Don't save the file because backup has failed
ok = false
if StopOnError.checked == true then
Messagebox ("Can't backup file " + file)
-- One more error
countErrors = countErrors + 1
)
)
-- Save the max project ?
if ok == true then
(
if (saveMaxFile file) == true then
(
fileModified = fileModified + 1
)
else
(
if StopOnError.checked == true then
Messagebox ("Can't write file " + file)
-- One more error
countErrors = countErrors + 1
)
)
)
)
)
else
(
if StopOnError.checked == true then
Messagebox ("Can't load file " + file)
-- One more error
countErrors = countErrors + 1
)
)
else
(
nllog("SKIP " + file + " by tag")
)
)
-- Parse sub directory ?
if (Recurse.checked == true) then
(
local directories
-- Get the directories
directories = getDirectories (currentDirectory+"/*")
-- For each directories
for dir in directories do
(
RecurseFolder dir
)
)
)
on BrowseDirectory pressed do
(
local dir
try
(
dir = getSavePath () -- caption:"Select the projects directory"
if dir != undefined then
Directory.text = dir
)
catch
(
)
)
on GoButton pressed do
(
-- Reset count
countModifications = 0
countErrors = 0
fileModified = 0
fileParsed = 0
-- Get files in the shape_source_directory
if SourceFiles.state == 2 then
(
-- Should warning user ?
if (SourceFiles.state == 2) and (Test.checked == false) then
(
-- Warning !
if ((queryBox "Warning, all the files in the specified folders will be overwrited.\nYou should backup your files before executing this script.\nDo you want to continue executing this script ?" beep:true) == true) then
RecurseFolder (adjustPathStringForScript Directory.text)
)
else
(
RecurseFolder (adjustPathStringForScript Directory.text)
)
)
else
(
-- Just compute the current project
call_do_it ()
)
-- Show errors
ProgressText.text = (fileParsed as string) + " project(s) opened, " + (countModifications as string) + " project modification(s), " + (fileModified as string) + " project(s) saved, " + (countErrors as string) + " error(s)."
Progress.value = 100
)
)
assets_ps_floater = newRolloutFloater "NeL Assets PS Database" 550 400
addrollout assets_ps_rollout assets_ps_floater rolledUp:false

View file

@ -1,329 +1,329 @@
NEL3D_APPDATA_INTERFACE_FILE = 1423062700
-- Allocate 20 Me for the script
heapSize += 15000000
nlErrorFilename = "W:/database/conversion.log"
nlErrorStream = openFile nlErrorFilename mode:"w"
if nlErrorStream == undefined then
nlErrorStream = createFile nlErrorFilename
-- Log a message
fn nllog message =
(
if nlErrorStream != undefined then
(
format "%\n" message to:nlErrorStream
flush nlErrorStream
)
-- To the console
print message
)
include "nel_utility.ms"
rollout assets_resave_rollout "Properties"
(
fn do_it =
(
max select none
actionMan.executeAction 0 "40021" -- Selection: Select All
actionMan.executeAction 0 "311" -- Tools: Zoom Extents All Selected
actionMan.executeAction 0 "40807" -- Views: Activate All Maps
actionMan.executeAction 0 "63508" -- Views: Standard Display with Maps
actionMan.executeAction 0 "40043" -- Selection: Select None
max views redraw
return 1
)
-- This script is a base script to include to add multiple functionality to your script
-- To use this script
-- Include it in your script into the rollout at the beginning.
-- Implement a do_it function to do the job in your rollout.
-- The function should retun -1 if an arror occurred, else the count of modification done
-- It the function returns <1, the project will not be overwritten
Group "Running properties"
(
RadioButtons SourceFiles "Source projects" labels:#("Current project", "All Projects in a folder") align:#left
Label DirectoryLabel "Source directory" align:#left
EditText Directory "" width:500 align:#left enabled:false
Button BrowseDirectory "Browse..." align:#left enabled:false
CheckBox Recurse "Look in subfolders" checked:true enabled:false
CheckBox Test "Test only, do not save" checked:false enabled:false
CheckBox BackupFiles "Backup files" checked:false enabled:false
CheckBox StopOnError "Stop on error" checked:false enabled:false
CheckBox UseTag "Use tag" checked:false enabled:false
Label ProgressText width:500 align:#left
ProgressBar Progress width:500 align:#left
Button GoButton "Go" width:500 align:#left
)
local countModifications
local countErrors
local fileModified
local fileParsed
fn UpdateData =
(
if SourceFiles.state == 2 then
isSourceDir = true
else
isSourceDir = false
if Test.checked == true then
isTest = true
else
isTest = false
Directory.enabled = isSourceDir
BrowseDirectory.enabled = isSourceDir
Recurse.enabled = isSourceDir
Test.enabled = isSourceDir
BackupFiles.enabled = isSourceDir and (isTest == false)
StopOnError.enabled = isSourceDir
UseTag.enabled = isSourceDir
)
on SourceFiles changed state do
(
UpdateData ()
)
on Test changed state do
(
UpdateData ()
)
fn call_do_it =
(
local result
-- One more project
fileParsed = fileParsed + 1
-- Call it
result = do_it ()
-- Error ?
if result < 0 then
countErrors = countErrors + 1
else
countModifications = countModifications + result
-- Return result
return result
)
fn BackupFile file =
(
local i
local newFilename
i = 0
while true do
(
-- New file name
newFilename = file + ".backup_" + (i as string)
-- File exist ?
if (fileExist newFilename) == false then
(
if (copyFile file newFilename) == false then
return false
else
return true
)
i = i + 1
)
)
fn RecurseFolder currentDirectory =
(
resetMAXFile #noprompt
local result
local file
local files
local origAnimStart
local origAnimEnd
local origFrameRate
-- Parse files
files = getFiles (currentDirectory+"/*.max")
-- For each files
for i = 1 to files.count do
(
-- File name
file = files[i]
-- Progress bar
ProgressText.text = "In directory "+currentDirectory+", compute file \"" + (getFilenameFile file) + "\""
Progress.value = i*100/files.count
if (UseTag.checked == false) or ((NeLTestFileDate file "W:/database/conversion.tag") == true) then
(
resetMAXFile #noprompt
nllog("CONVERT " + file)
-- Open the max project
if loadMaxFile file quiet:true == true then
(
origAnimStart = animationRange.start
origAnimEnd = animationRange.end
origFrameRate = frameRate
resetMAXFile #noprompt
animationRange = interval origAnimStart origAnimEnd
frameRate = origFrameRate
-- Merge the max project
if mergeMaxFile file quiet:true == true then
(
result = call_do_it ()
-- Error ?
if result < 0 then
(
if StopOnError.checked == true then
Messagebox ("Error in file " + file)
)
else
(
-- Save the max project ?
if (Test.checked == false) and (result != 0) then
(
-- Backup the max project ?
local ok
ok = true
if BackupFiles.checked == true then
(
-- Backup the file
if (BackupFile file) == false then
(
-- Don't save the file because backup has failed
ok = false
if StopOnError.checked == true then
Messagebox ("Can't backup file " + file)
-- One more error
countErrors = countErrors + 1
)
)
-- Save the max project ?
if ok == true then
(
if (saveMaxFile file) == true then
(
fileModified = fileModified + 1
)
else
(
if StopOnError.checked == true then
Messagebox ("Can't write file " + file)
-- One more error
countErrors = countErrors + 1
)
)
)
)
)
else
(
if StopOnError.checked == true then
Messagebox ("Can't load file " + file)
-- One more error
countErrors = countErrors + 1
)
)
)
else
(
nllog("SKIP " + file + " by tag")
)
)
-- Parse sub directory ?
if (Recurse.checked == true) then
(
local directories
-- Get the directories
directories = getDirectories (currentDirectory+"/*")
-- For each directories
for dir in directories do
(
RecurseFolder dir
)
)
)
on BrowseDirectory pressed do
(
local dir
try
(
dir = getSavePath () -- caption:"Select the projects directory"
if dir != undefined then
Directory.text = dir
)
catch
(
)
)
on GoButton pressed do
(
-- Reset count
countModifications = 0
countErrors = 0
fileModified = 0
fileParsed = 0
-- Get files in the shape_source_directory
if SourceFiles.state == 2 then
(
-- Should warning user ?
if (SourceFiles.state == 2) and (Test.checked == false) then
(
-- Warning !
if ((queryBox "Warning, all the files in the specified folders will be overwrited.\nYou should backup your files before executing this script.\nDo you want to continue executing this script ?" beep:true) == true) then
RecurseFolder (adjustPathStringForScript Directory.text)
)
else
(
RecurseFolder (adjustPathStringForScript Directory.text)
)
)
else
(
-- Just compute the current project
call_do_it ()
)
-- Show errors
ProgressText.text = (fileParsed as string) + " project(s) opened, " + (countModifications as string) + " project modification(s), " + (fileModified as string) + " project(s) saved, " + (countErrors as string) + " error(s)."
Progress.value = 100
)
)
assets_resave_floater = newRolloutFloater "NeL Assets Resave Database" 550 874
addrollout assets_resave_rollout assets_resave_floater rolledUp:false
NEL3D_APPDATA_INTERFACE_FILE = 1423062700
-- Allocate 20 Me for the script
heapSize += 15000000
nlErrorFilename = "W:/database/conversion.log"
nlErrorStream = openFile nlErrorFilename mode:"w"
if nlErrorStream == undefined then
nlErrorStream = createFile nlErrorFilename
-- Log a message
fn nllog message =
(
if nlErrorStream != undefined then
(
format "%\n" message to:nlErrorStream
flush nlErrorStream
)
-- To the console
print message
)
include "nel_utility.ms"
rollout assets_resave_rollout "Properties"
(
fn do_it =
(
max select none
actionMan.executeAction 0 "40021" -- Selection: Select All
actionMan.executeAction 0 "311" -- Tools: Zoom Extents All Selected
actionMan.executeAction 0 "40807" -- Views: Activate All Maps
actionMan.executeAction 0 "63508" -- Views: Standard Display with Maps
actionMan.executeAction 0 "40043" -- Selection: Select None
max views redraw
return 1
)
-- This script is a base script to include to add multiple functionality to your script
-- To use this script
-- Include it in your script into the rollout at the beginning.
-- Implement a do_it function to do the job in your rollout.
-- The function should retun -1 if an arror occurred, else the count of modification done
-- It the function returns <1, the project will not be overwritten
Group "Running properties"
(
RadioButtons SourceFiles "Source projects" labels:#("Current project", "All Projects in a folder") align:#left
Label DirectoryLabel "Source directory" align:#left
EditText Directory "" width:500 align:#left enabled:false
Button BrowseDirectory "Browse..." align:#left enabled:false
CheckBox Recurse "Look in subfolders" checked:true enabled:false
CheckBox Test "Test only, do not save" checked:false enabled:false
CheckBox BackupFiles "Backup files" checked:false enabled:false
CheckBox StopOnError "Stop on error" checked:false enabled:false
CheckBox UseTag "Use tag" checked:false enabled:false
Label ProgressText width:500 align:#left
ProgressBar Progress width:500 align:#left
Button GoButton "Go" width:500 align:#left
)
local countModifications
local countErrors
local fileModified
local fileParsed
fn UpdateData =
(
if SourceFiles.state == 2 then
isSourceDir = true
else
isSourceDir = false
if Test.checked == true then
isTest = true
else
isTest = false
Directory.enabled = isSourceDir
BrowseDirectory.enabled = isSourceDir
Recurse.enabled = isSourceDir
Test.enabled = isSourceDir
BackupFiles.enabled = isSourceDir and (isTest == false)
StopOnError.enabled = isSourceDir
UseTag.enabled = isSourceDir
)
on SourceFiles changed state do
(
UpdateData ()
)
on Test changed state do
(
UpdateData ()
)
fn call_do_it =
(
local result
-- One more project
fileParsed = fileParsed + 1
-- Call it
result = do_it ()
-- Error ?
if result < 0 then
countErrors = countErrors + 1
else
countModifications = countModifications + result
-- Return result
return result
)
fn BackupFile file =
(
local i
local newFilename
i = 0
while true do
(
-- New file name
newFilename = file + ".backup_" + (i as string)
-- File exist ?
if (fileExist newFilename) == false then
(
if (copyFile file newFilename) == false then
return false
else
return true
)
i = i + 1
)
)
fn RecurseFolder currentDirectory =
(
resetMAXFile #noprompt
local result
local file
local files
local origAnimStart
local origAnimEnd
local origFrameRate
-- Parse files
files = getFiles (currentDirectory+"/*.max")
-- For each files
for i = 1 to files.count do
(
-- File name
file = files[i]
-- Progress bar
ProgressText.text = "In directory "+currentDirectory+", compute file \"" + (getFilenameFile file) + "\""
Progress.value = i*100/files.count
if (UseTag.checked == false) or ((NeLTestFileDate file "W:/database/conversion.tag") == true) then
(
resetMAXFile #noprompt
nllog("CONVERT " + file)
-- Open the max project
if loadMaxFile file quiet:true == true then
(
origAnimStart = animationRange.start
origAnimEnd = animationRange.end
origFrameRate = frameRate
resetMAXFile #noprompt
animationRange = interval origAnimStart origAnimEnd
frameRate = origFrameRate
-- Merge the max project
if mergeMaxFile file quiet:true == true then
(
result = call_do_it ()
-- Error ?
if result < 0 then
(
if StopOnError.checked == true then
Messagebox ("Error in file " + file)
)
else
(
-- Save the max project ?
if (Test.checked == false) and (result != 0) then
(
-- Backup the max project ?
local ok
ok = true
if BackupFiles.checked == true then
(
-- Backup the file
if (BackupFile file) == false then
(
-- Don't save the file because backup has failed
ok = false
if StopOnError.checked == true then
Messagebox ("Can't backup file " + file)
-- One more error
countErrors = countErrors + 1
)
)
-- Save the max project ?
if ok == true then
(
if (saveMaxFile file) == true then
(
fileModified = fileModified + 1
)
else
(
if StopOnError.checked == true then
Messagebox ("Can't write file " + file)
-- One more error
countErrors = countErrors + 1
)
)
)
)
)
else
(
if StopOnError.checked == true then
Messagebox ("Can't load file " + file)
-- One more error
countErrors = countErrors + 1
)
)
)
else
(
nllog("SKIP " + file + " by tag")
)
)
-- Parse sub directory ?
if (Recurse.checked == true) then
(
local directories
-- Get the directories
directories = getDirectories (currentDirectory+"/*")
-- For each directories
for dir in directories do
(
RecurseFolder dir
)
)
)
on BrowseDirectory pressed do
(
local dir
try
(
dir = getSavePath () -- caption:"Select the projects directory"
if dir != undefined then
Directory.text = dir
)
catch
(
)
)
on GoButton pressed do
(
-- Reset count
countModifications = 0
countErrors = 0
fileModified = 0
fileParsed = 0
-- Get files in the shape_source_directory
if SourceFiles.state == 2 then
(
-- Should warning user ?
if (SourceFiles.state == 2) and (Test.checked == false) then
(
-- Warning !
if ((queryBox "Warning, all the files in the specified folders will be overwrited.\nYou should backup your files before executing this script.\nDo you want to continue executing this script ?" beep:true) == true) then
RecurseFolder (adjustPathStringForScript Directory.text)
)
else
(
RecurseFolder (adjustPathStringForScript Directory.text)
)
)
else
(
-- Just compute the current project
call_do_it ()
)
-- Show errors
ProgressText.text = (fileParsed as string) + " project(s) opened, " + (countModifications as string) + " project modification(s), " + (fileModified as string) + " project(s) saved, " + (countErrors as string) + " error(s)."
Progress.value = 100
)
)
assets_resave_floater = newRolloutFloater "NeL Assets Resave Database" 550 874
addrollout assets_resave_rollout assets_resave_floater rolledUp:false

View file

@ -1,316 +1,316 @@
NEL3D_APPDATA_INTERFACE_FILE = 1423062700
-- Allocate 20 Me for the script
heapSize += 15000000
nlErrorFilename = "W:/database/conversion.log"
nlErrorStream = openFile nlErrorFilename mode:"w"
if nlErrorStream == undefined then
nlErrorStream = createFile nlErrorFilename
-- Log a message
fn nllog message =
(
if nlErrorStream != undefined then
(
format "%\n" message to:nlErrorStream
flush nlErrorStream
)
-- To the console
print message
)
include "nel_utility.ms"
rollout assets_resave_rollout "Properties"
(
fn do_it =
(
max select none
actionMan.executeAction 0 "40021" -- Selection: Select All
actionMan.executeAction 0 "311" -- Tools: Zoom Extents All Selected
actionMan.executeAction 0 "40807" -- Views: Activate All Maps
actionMan.executeAction 0 "63508" -- Views: Standard Display with Maps
actionMan.executeAction 0 "40043" -- Selection: Select None
max views redraw
return 1
)
-- This script is a base script to include to add multiple functionality to your script
-- To use this script
-- Include it in your script into the rollout at the beginning.
-- Implement a do_it function to do the job in your rollout.
-- The function should retun -1 if an arror occurred, else the count of modification done
-- It the function returns <1, the project will not be overwritten
Group "Running properties"
(
RadioButtons SourceFiles "Source projects" labels:#("Current project", "All Projects in a folder") align:#left
Label DirectoryLabel "Source directory" align:#left
EditText Directory "" width:500 align:#left enabled:false
Button BrowseDirectory "Browse..." align:#left enabled:false
CheckBox Recurse "Look in subfolders" checked:true enabled:false
CheckBox Test "Test only, do not save" checked:false enabled:false
CheckBox BackupFiles "Backup files" checked:false enabled:false
CheckBox StopOnError "Stop on error" checked:false enabled:false
CheckBox UseTag "Use tag" checked:false enabled:false
Label ProgressText width:500 align:#left
ProgressBar Progress width:500 align:#left
Button GoButton "Go" width:500 align:#left
)
local countModifications
local countErrors
local fileModified
local fileParsed
fn UpdateData =
(
if SourceFiles.state == 2 then
isSourceDir = true
else
isSourceDir = false
if Test.checked == true then
isTest = true
else
isTest = false
Directory.enabled = isSourceDir
BrowseDirectory.enabled = isSourceDir
Recurse.enabled = isSourceDir
Test.enabled = isSourceDir
BackupFiles.enabled = isSourceDir and (isTest == false)
StopOnError.enabled = isSourceDir
UseTag.enabled = isSourceDir
)
on SourceFiles changed state do
(
UpdateData ()
)
on Test changed state do
(
UpdateData ()
)
fn call_do_it =
(
local result
-- One more project
fileParsed = fileParsed + 1
-- Call it
result = do_it ()
-- Error ?
if result < 0 then
countErrors = countErrors + 1
else
countModifications = countModifications + result
-- Return result
return result
)
fn BackupFile file =
(
local i
local newFilename
i = 0
while true do
(
-- New file name
newFilename = file + ".backup_" + (i as string)
-- File exist ?
if (fileExist newFilename) == false then
(
if (copyFile file newFilename) == false then
return false
else
return true
)
i = i + 1
)
)
fn RecurseFolder currentDirectory =
(
resetMAXFile #noprompt
local result
local file
local files
local origAnimStart
local origAnimEnd
local origFrameRate
-- Parse files
files = getFiles (currentDirectory+"/*.max")
-- For each files
for i = 1 to files.count do
(
-- File name
file = files[i]
-- Progress bar
ProgressText.text = "In directory "+currentDirectory+", compute file \"" + (getFilenameFile file) + "\""
Progress.value = i*100/files.count
if (UseTag.checked == false) or ((NeLTestFileDate file "W:/database/conversion.tag") == true) then
(
resetMAXFile #noprompt
nllog("CONVERT " + file)
-- Merge the max project
if mergeMaxFile file quiet:true == true then
(
result = call_do_it ()
-- Error ?
if result < 0 then
(
if StopOnError.checked == true then
Messagebox ("Error in file " + file)
)
else
(
-- Save the max project ?
if (Test.checked == false) and (result != 0) then
(
-- Backup the max project ?
local ok
ok = true
if BackupFiles.checked == true then
(
-- Backup the file
if (BackupFile file) == false then
(
-- Don't save the file because backup has failed
ok = false
if StopOnError.checked == true then
Messagebox ("Can't backup file " + file)
-- One more error
countErrors = countErrors + 1
)
)
-- Save the max project ?
if ok == true then
(
if (saveMaxFile file) == true then
(
fileModified = fileModified + 1
)
else
(
if StopOnError.checked == true then
Messagebox ("Can't write file " + file)
-- One more error
countErrors = countErrors + 1
)
)
)
)
)
else
(
if StopOnError.checked == true then
Messagebox ("Can't load file " + file)
-- One more error
countErrors = countErrors + 1
)
)
else
(
nllog("SKIP " + file + " by tag")
)
)
-- Parse sub directory ?
if (Recurse.checked == true) then
(
local directories
-- Get the directories
directories = getDirectories (currentDirectory+"/*")
-- For each directories
for dir in directories do
(
RecurseFolder dir
)
)
)
on BrowseDirectory pressed do
(
local dir
try
(
dir = getSavePath () -- caption:"Select the projects directory"
if dir != undefined then
Directory.text = dir
)
catch
(
)
)
on GoButton pressed do
(
-- Reset count
countModifications = 0
countErrors = 0
fileModified = 0
fileParsed = 0
-- Get files in the shape_source_directory
if SourceFiles.state == 2 then
(
-- Should warning user ?
if (SourceFiles.state == 2) and (Test.checked == false) then
(
-- Warning !
if ((queryBox "Warning, all the files in the specified folders will be overwrited.\nYou should backup your files before executing this script.\nDo you want to continue executing this script ?" beep:true) == true) then
RecurseFolder (adjustPathStringForScript Directory.text)
)
else
(
RecurseFolder (adjustPathStringForScript Directory.text)
)
)
else
(
-- Just compute the current project
call_do_it ()
)
-- Show errors
ProgressText.text = (fileParsed as string) + " project(s) opened, " + (countModifications as string) + " project modification(s), " + (fileModified as string) + " project(s) saved, " + (countErrors as string) + " error(s)."
Progress.value = 100
)
)
assets_resave_floater = newRolloutFloater "NeL Assets Resave Database Hard" 550 874
addrollout assets_resave_rollout assets_resave_floater rolledUp:false
NEL3D_APPDATA_INTERFACE_FILE = 1423062700
-- Allocate 20 Me for the script
heapSize += 15000000
nlErrorFilename = "W:/database/conversion.log"
nlErrorStream = openFile nlErrorFilename mode:"w"
if nlErrorStream == undefined then
nlErrorStream = createFile nlErrorFilename
-- Log a message
fn nllog message =
(
if nlErrorStream != undefined then
(
format "%\n" message to:nlErrorStream
flush nlErrorStream
)
-- To the console
print message
)
include "nel_utility.ms"
rollout assets_resave_rollout "Properties"
(
fn do_it =
(
max select none
actionMan.executeAction 0 "40021" -- Selection: Select All
actionMan.executeAction 0 "311" -- Tools: Zoom Extents All Selected
actionMan.executeAction 0 "40807" -- Views: Activate All Maps
actionMan.executeAction 0 "63508" -- Views: Standard Display with Maps
actionMan.executeAction 0 "40043" -- Selection: Select None
max views redraw
return 1
)
-- This script is a base script to include to add multiple functionality to your script
-- To use this script
-- Include it in your script into the rollout at the beginning.
-- Implement a do_it function to do the job in your rollout.
-- The function should retun -1 if an arror occurred, else the count of modification done
-- It the function returns <1, the project will not be overwritten
Group "Running properties"
(
RadioButtons SourceFiles "Source projects" labels:#("Current project", "All Projects in a folder") align:#left
Label DirectoryLabel "Source directory" align:#left
EditText Directory "" width:500 align:#left enabled:false
Button BrowseDirectory "Browse..." align:#left enabled:false
CheckBox Recurse "Look in subfolders" checked:true enabled:false
CheckBox Test "Test only, do not save" checked:false enabled:false
CheckBox BackupFiles "Backup files" checked:false enabled:false
CheckBox StopOnError "Stop on error" checked:false enabled:false
CheckBox UseTag "Use tag" checked:false enabled:false
Label ProgressText width:500 align:#left
ProgressBar Progress width:500 align:#left
Button GoButton "Go" width:500 align:#left
)
local countModifications
local countErrors
local fileModified
local fileParsed
fn UpdateData =
(
if SourceFiles.state == 2 then
isSourceDir = true
else
isSourceDir = false
if Test.checked == true then
isTest = true
else
isTest = false
Directory.enabled = isSourceDir
BrowseDirectory.enabled = isSourceDir
Recurse.enabled = isSourceDir
Test.enabled = isSourceDir
BackupFiles.enabled = isSourceDir and (isTest == false)
StopOnError.enabled = isSourceDir
UseTag.enabled = isSourceDir
)
on SourceFiles changed state do
(
UpdateData ()
)
on Test changed state do
(
UpdateData ()
)
fn call_do_it =
(
local result
-- One more project
fileParsed = fileParsed + 1
-- Call it
result = do_it ()
-- Error ?
if result < 0 then
countErrors = countErrors + 1
else
countModifications = countModifications + result
-- Return result
return result
)
fn BackupFile file =
(
local i
local newFilename
i = 0
while true do
(
-- New file name
newFilename = file + ".backup_" + (i as string)
-- File exist ?
if (fileExist newFilename) == false then
(
if (copyFile file newFilename) == false then
return false
else
return true
)
i = i + 1
)
)
fn RecurseFolder currentDirectory =
(
resetMAXFile #noprompt
local result
local file
local files
local origAnimStart
local origAnimEnd
local origFrameRate
-- Parse files
files = getFiles (currentDirectory+"/*.max")
-- For each files
for i = 1 to files.count do
(
-- File name
file = files[i]
-- Progress bar
ProgressText.text = "In directory "+currentDirectory+", compute file \"" + (getFilenameFile file) + "\""
Progress.value = i*100/files.count
if (UseTag.checked == false) or ((NeLTestFileDate file "W:/database/conversion.tag") == true) then
(
resetMAXFile #noprompt
nllog("CONVERT " + file)
-- Merge the max project
if mergeMaxFile file quiet:true == true then
(
result = call_do_it ()
-- Error ?
if result < 0 then
(
if StopOnError.checked == true then
Messagebox ("Error in file " + file)
)
else
(
-- Save the max project ?
if (Test.checked == false) and (result != 0) then
(
-- Backup the max project ?
local ok
ok = true
if BackupFiles.checked == true then
(
-- Backup the file
if (BackupFile file) == false then
(
-- Don't save the file because backup has failed
ok = false
if StopOnError.checked == true then
Messagebox ("Can't backup file " + file)
-- One more error
countErrors = countErrors + 1
)
)
-- Save the max project ?
if ok == true then
(
if (saveMaxFile file) == true then
(
fileModified = fileModified + 1
)
else
(
if StopOnError.checked == true then
Messagebox ("Can't write file " + file)
-- One more error
countErrors = countErrors + 1
)
)
)
)
)
else
(
if StopOnError.checked == true then
Messagebox ("Can't load file " + file)
-- One more error
countErrors = countErrors + 1
)
)
else
(
nllog("SKIP " + file + " by tag")
)
)
-- Parse sub directory ?
if (Recurse.checked == true) then
(
local directories
-- Get the directories
directories = getDirectories (currentDirectory+"/*")
-- For each directories
for dir in directories do
(
RecurseFolder dir
)
)
)
on BrowseDirectory pressed do
(
local dir
try
(
dir = getSavePath () -- caption:"Select the projects directory"
if dir != undefined then
Directory.text = dir
)
catch
(
)
)
on GoButton pressed do
(
-- Reset count
countModifications = 0
countErrors = 0
fileModified = 0
fileParsed = 0
-- Get files in the shape_source_directory
if SourceFiles.state == 2 then
(
-- Should warning user ?
if (SourceFiles.state == 2) and (Test.checked == false) then
(
-- Warning !
if ((queryBox "Warning, all the files in the specified folders will be overwrited.\nYou should backup your files before executing this script.\nDo you want to continue executing this script ?" beep:true) == true) then
RecurseFolder (adjustPathStringForScript Directory.text)
)
else
(
RecurseFolder (adjustPathStringForScript Directory.text)
)
)
else
(
-- Just compute the current project
call_do_it ()
)
-- Show errors
ProgressText.text = (fileParsed as string) + " project(s) opened, " + (countModifications as string) + " project modification(s), " + (fileModified as string) + " project(s) saved, " + (countErrors as string) + " error(s)."
Progress.value = 100
)
)
assets_resave_floater = newRolloutFloater "NeL Assets Resave Database Hard" 550 874
addrollout assets_resave_rollout assets_resave_floater rolledUp:false

View file

@ -1,251 +1,251 @@
-- This script is a base script to include to add multiple functionality to your script
-- To use this script
-- Include it in your script into the rollout at the beginning.
-- Implement a do_it function to do the job in your rollout.
-- The function should retun -1 if an arror occurred, else the count of modification done
-- It the function returns <1, the project will not be overwritten
Group "Running properties"
(
RadioButtons SourceFiles "Source projects" labels:#("Current project", "All Projects in a folder") align:#left
Label DirectoryLabel "Source directory" align:#left
EditText Directory "" width:500 align:#left enabled:false
Button BrowseDirectory "Browse..." align:#left enabled:false
CheckBox Recurse "Look in subfolders" checked:false enabled:false
CheckBox Test "Test only, do not save" checked:true enabled:false
CheckBox BackupFiles "Backup files" checked:true enabled:false
CheckBox StopOnError "Stop on error" checked:true enabled:false
Label ProgressText width:500 align:#left
ProgressBar Progress width:500 align:#left
Button GoButton "Go" width:500 align:#left
)
local countModifications
local countErrors
local fileModified
local fileParsed
fn UpdateData =
(
if SourceFiles.state == 2 then
isSourceDir = true
else
isSourceDir = false
if Test.checked == true then
isTest = true
else
isTest = false
Directory.enabled = isSourceDir
BrowseDirectory.enabled = isSourceDir
Recurse.enabled = isSourceDir
Test.enabled = isSourceDir
BackupFiles.enabled = isSourceDir and (isTest == false)
StopOnError.enabled = isSourceDir
)
on SourceFiles changed state do
(
UpdateData ()
)
on Test changed state do
(
UpdateData ()
)
fn call_do_it =
(
local result
-- One more project
fileParsed = fileParsed + 1
-- Call it
result = do_it ()
-- Error ?
if result < 0 then
countErrors = countErrors + 1
else
countModifications = countModifications + result
-- Return result
return result
)
fn BackupFile file =
(
local i
local newFilename
i = 0
while true do
(
-- New file name
newFilename = file + ".backup_" + (i as string)
-- File exist ?
if (fileExist newFilename) == false then
(
if (copyFile file newFilename) == false then
return false
else
return true
)
i = i + 1
)
)
fn RecurseFolder currentDirectory =
(
local result
local file
local files
-- Parse files
files = getFiles (currentDirectory+"/*.max")
-- For each files
for i = 1 to files.count do
(
-- File name
file = files[i]
-- Progress bar
ProgressText.text = "In directory "+currentDirectory+", compute file \"" + (getFilenameFile file) + "\""
Progress.value = i*100/files.count
resetMAXFile #noprompt
-- Open the max project
if mergeMaxFile file quiet:true == true then
(
result = call_do_it ()
-- Error ?
if result < 0 then
(
if StopOnError.checked == true then
Messagebox ("Error in file " + file)
)
else
(
-- Save the max project ?
if (Test.checked == false) and (result != 0) then
(
-- Backup the max project ?
local ok
ok = true
if BackupFiles.checked == true then
(
-- Backup the file
if (BackupFile file) == false then
(
-- Don't save the file because backup has failed
ok = false
if StopOnError.checked == true then
Messagebox ("Can't backup file " + file)
-- One more error
countErrors = countErrors + 1
)
)
-- Save the max project ?
if ok == true then
(
if (saveMaxFile file) == true then
(
fileModified = fileModified + 1
)
else
(
if StopOnError.checked == true then
Messagebox ("Can't write file " + file)
-- One more error
countErrors = countErrors + 1
)
)
)
)
)
else
(
if StopOnError.checked == true then
Messagebox ("Can't load file " + file)
-- One more error
countErrors = countErrors + 1
)
)
-- Parse sub directory ?
if (Recurse.checked == true) then
(
local directories
-- Get the directories
directories = getDirectories (currentDirectory+"/*")
-- For each directories
for dir in directories do
(
RecurseFolder dir
)
)
)
on BrowseDirectory pressed do
(
local dir
try
(
dir = getSavePath () -- caption:"Select the projects directory"
if dir != undefined then
Directory.text = dir
)
catch
(
)
)
on GoButton pressed do
(
-- Reset count
countModifications = 0
countErrors = 0
fileModified = 0
fileParsed = 0
-- Get files in the shape_source_directory
if SourceFiles.state == 2 then
(
-- Should warning user ?
if (SourceFiles.state == 2) and (Test.checked == false) then
(
-- Warning !
if ((queryBox "Warning, all the files in the specified folders will be overwrited.\nYou should backup your files before executing this script.\nDo you want to continue executing this script ?" beep:true) == true) then
RecurseFolder (adjustPathStringForScript Directory.text)
)
else
(
RecurseFolder (adjustPathStringForScript Directory.text)
)
)
else
(
-- Just compute the current project
call_do_it ()
)
-- Show errors
ProgressText.text = (fileParsed as string) + " project(s) opened, " + (countModifications as string) + " project modification(s), " + (fileModified as string) + " project(s) saved, " + (countErrors as string) + " error(s)."
Progress.value = 100
)
-- This script is a base script to include to add multiple functionality to your script
-- To use this script
-- Include it in your script into the rollout at the beginning.
-- Implement a do_it function to do the job in your rollout.
-- The function should retun -1 if an arror occurred, else the count of modification done
-- It the function returns <1, the project will not be overwritten
Group "Running properties"
(
RadioButtons SourceFiles "Source projects" labels:#("Current project", "All Projects in a folder") align:#left
Label DirectoryLabel "Source directory" align:#left
EditText Directory "" width:500 align:#left enabled:false
Button BrowseDirectory "Browse..." align:#left enabled:false
CheckBox Recurse "Look in subfolders" checked:false enabled:false
CheckBox Test "Test only, do not save" checked:true enabled:false
CheckBox BackupFiles "Backup files" checked:true enabled:false
CheckBox StopOnError "Stop on error" checked:true enabled:false
Label ProgressText width:500 align:#left
ProgressBar Progress width:500 align:#left
Button GoButton "Go" width:500 align:#left
)
local countModifications
local countErrors
local fileModified
local fileParsed
fn UpdateData =
(
if SourceFiles.state == 2 then
isSourceDir = true
else
isSourceDir = false
if Test.checked == true then
isTest = true
else
isTest = false
Directory.enabled = isSourceDir
BrowseDirectory.enabled = isSourceDir
Recurse.enabled = isSourceDir
Test.enabled = isSourceDir
BackupFiles.enabled = isSourceDir and (isTest == false)
StopOnError.enabled = isSourceDir
)
on SourceFiles changed state do
(
UpdateData ()
)
on Test changed state do
(
UpdateData ()
)
fn call_do_it =
(
local result
-- One more project
fileParsed = fileParsed + 1
-- Call it
result = do_it ()
-- Error ?
if result < 0 then
countErrors = countErrors + 1
else
countModifications = countModifications + result
-- Return result
return result
)
fn BackupFile file =
(
local i
local newFilename
i = 0
while true do
(
-- New file name
newFilename = file + ".backup_" + (i as string)
-- File exist ?
if (fileExist newFilename) == false then
(
if (copyFile file newFilename) == false then
return false
else
return true
)
i = i + 1
)
)
fn RecurseFolder currentDirectory =
(
local result
local file
local files
-- Parse files
files = getFiles (currentDirectory+"/*.max")
-- For each files
for i = 1 to files.count do
(
-- File name
file = files[i]
-- Progress bar
ProgressText.text = "In directory "+currentDirectory+", compute file \"" + (getFilenameFile file) + "\""
Progress.value = i*100/files.count
resetMAXFile #noprompt
-- Open the max project
if mergeMaxFile file quiet:true == true then
(
result = call_do_it ()
-- Error ?
if result < 0 then
(
if StopOnError.checked == true then
Messagebox ("Error in file " + file)
)
else
(
-- Save the max project ?
if (Test.checked == false) and (result != 0) then
(
-- Backup the max project ?
local ok
ok = true
if BackupFiles.checked == true then
(
-- Backup the file
if (BackupFile file) == false then
(
-- Don't save the file because backup has failed
ok = false
if StopOnError.checked == true then
Messagebox ("Can't backup file " + file)
-- One more error
countErrors = countErrors + 1
)
)
-- Save the max project ?
if ok == true then
(
if (saveMaxFile file) == true then
(
fileModified = fileModified + 1
)
else
(
if StopOnError.checked == true then
Messagebox ("Can't write file " + file)
-- One more error
countErrors = countErrors + 1
)
)
)
)
)
else
(
if StopOnError.checked == true then
Messagebox ("Can't load file " + file)
-- One more error
countErrors = countErrors + 1
)
)
-- Parse sub directory ?
if (Recurse.checked == true) then
(
local directories
-- Get the directories
directories = getDirectories (currentDirectory+"/*")
-- For each directories
for dir in directories do
(
RecurseFolder dir
)
)
)
on BrowseDirectory pressed do
(
local dir
try
(
dir = getSavePath () -- caption:"Select the projects directory"
if dir != undefined then
Directory.text = dir
)
catch
(
)
)
on GoButton pressed do
(
-- Reset count
countModifications = 0
countErrors = 0
fileModified = 0
fileParsed = 0
-- Get files in the shape_source_directory
if SourceFiles.state == 2 then
(
-- Should warning user ?
if (SourceFiles.state == 2) and (Test.checked == false) then
(
-- Warning !
if ((queryBox "Warning, all the files in the specified folders will be overwrited.\nYou should backup your files before executing this script.\nDo you want to continue executing this script ?" beep:true) == true) then
RecurseFolder (adjustPathStringForScript Directory.text)
)
else
(
RecurseFolder (adjustPathStringForScript Directory.text)
)
)
else
(
-- Just compute the current project
call_do_it ()
)
-- Show errors
ProgressText.text = (fileParsed as string) + " project(s) opened, " + (countModifications as string) + " project modification(s), " + (fileModified as string) + " project(s) saved, " + (countErrors as string) + " error(s)."
Progress.value = 100
)

View file

@ -1,392 +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 occurred")
NelForceQuitRightNow()
)
)
)
)
return tagThisFile
)
fn runNelMaxExport inputMaxFile =
(
return runNelMaxExportSub inputMaxFile 0
)
-- 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 occurred")
NelForceQuitRightNow()
)
)
)
)
return tagThisFile
)
fn runNelMaxExport inputMaxFile =
(
return runNelMaxExportSub inputMaxFile 0
)

View file

@ -1,127 +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 occurred")
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 occurred")
NelForceQuitRightNow()
)
-- Bye
nlerror("BYE")
quitMAX #noPrompt
quitMAX() #noPrompt
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 occurred")
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 occurred")
NelForceQuitRightNow()
)
-- Bye
nlerror("BYE")
quitMAX #noPrompt
quitMAX() #noPrompt

View file

@ -1,271 +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 occurred")
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 occurred")
NelForceQuitRightNow()
)
-- Bye
nlerror("BYE")
quitMAX #noPrompt
quitMAX() #noPrompt
-- #################################################################
-- ## 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 occurred")
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 occurred")
NelForceQuitRightNow()
)
-- Bye
nlerror("BYE")
quitMAX #noPrompt
quitMAX() #noPrompt

View file

@ -1,328 +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 occurred")
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 occurred")
NelForceQuitRightNow()
)
-- Bye
nlerror("BYE")
quitMAX #noPrompt
quitMAX() #noPrompt
-- #################################################################
-- ## 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 occurred")
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 occurred")
NelForceQuitRightNow()
)
-- Bye
nlerror("BYE")
quitMAX #noPrompt
quitMAX() #noPrompt

View file

@ -1,378 +1,378 @@
-- #################################################################
-- ## 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_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
)
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 'ig': can't open the file " + inputMaxFile)
removeRunningTag = false
)
)
else
(
nlerror("SKIPPED BY TAG " + inputMaxFile)
)
--)
--catch
--(
-- -- Error
-- nlerror("ERROR error exporting 'ig' in file " + inputMaxFile)
-- removeRunningTag = false
--)
)
)
else
(
nlerror("WARNING no *.max file in folder %MaxSourceDirectory%")
)
)
)
catch
(
-- Error
nlerror("ERROR Fatal error exporting 'ig' in folder %MaxSourceDirectory%")
nlerror("FAIL Fatal error occurred")
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 occurred")
NelForceQuitRightNow()
)
-- Bye
nlerror("BYE")
quitMAX #noPrompt
quitMAX() #noPrompt
-- #################################################################
-- ## 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_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
)
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 'ig': can't open the file " + inputMaxFile)
removeRunningTag = false
)
)
else
(
nlerror("SKIPPED BY TAG " + inputMaxFile)
)
--)
--catch
--(
-- -- Error
-- nlerror("ERROR error exporting 'ig' in file " + inputMaxFile)
-- removeRunningTag = false
--)
)
)
else
(
nlerror("WARNING no *.max file in folder %MaxSourceDirectory%")
)
)
)
catch
(
-- Error
nlerror("ERROR Fatal error exporting 'ig' in folder %MaxSourceDirectory%")
nlerror("FAIL Fatal error occurred")
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 occurred")
NelForceQuitRightNow()
)
-- Bye
nlerror("BYE")
quitMAX #noPrompt
quitMAX() #noPrompt

View file

@ -1,251 +1,251 @@
-- #################################################################
-- ## 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
)
fn runNelMaxExport inputMaxFile =
(
outputNelFile = ("%OutputDirectory%/" + (getFilenameFile inputMaxFile) + ".pacs_prim")
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
)
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 'pacs_prim': can't open the file " + inputMaxFile)
removeRunningTag = false
)
)
else
(
nlerror("SKIPPED BY TAG " + inputMaxFile)
)
--)
--catch
--(
-- -- Error
-- nlerror("ERROR error exporting 'pacs_prim' in file " + inputMaxFile)
-- removeRunningTag = false
--)
)
)
else
(
nlerror("WARNING no *.max file in folder %MaxSourceDirectory%")
)
)
)
catch
(
-- Error
nlerror("ERROR Fatal error exporting 'pacs_prim' in folder %MaxSourceDirectory%")
nlerror("FAIL Fatal error occurred")
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 occurred")
NelForceQuitRightNow()
)
-- Bye
nlerror("BYE")
quitMAX #noPrompt
quitMAX() #noPrompt
-- #################################################################
-- ## 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
)
fn runNelMaxExport inputMaxFile =
(
outputNelFile = ("%OutputDirectory%/" + (getFilenameFile inputMaxFile) + ".pacs_prim")
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
)
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 'pacs_prim': can't open the file " + inputMaxFile)
removeRunningTag = false
)
)
else
(
nlerror("SKIPPED BY TAG " + inputMaxFile)
)
--)
--catch
--(
-- -- Error
-- nlerror("ERROR error exporting 'pacs_prim' in file " + inputMaxFile)
-- removeRunningTag = false
--)
)
)
else
(
nlerror("WARNING no *.max file in folder %MaxSourceDirectory%")
)
)
)
catch
(
-- Error
nlerror("ERROR Fatal error exporting 'pacs_prim' in folder %MaxSourceDirectory%")
nlerror("FAIL Fatal error occurred")
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 occurred")
NelForceQuitRightNow()
)
-- Bye
nlerror("BYE")
quitMAX #noPrompt
quitMAX() #noPrompt

View file

@ -1,263 +1,263 @@
-- #################################################################
-- ## 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_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
)
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 'cmb': can't open the file " + inputMaxFile)
removeRunningTag = false
)
)
else
(
nlerror("SKIPPED BY TAG " + inputMaxFile)
)
--)
--catch
--(
-- -- Error
-- nlerror("ERROR error exporting 'cmb' in file " + inputMaxFile)
-- removeRunningTag = false
--)
)
)
else
(
nlerror("WARNING no *.max file in folder %MaxSourceDirectory%")
)
)
)
catch
(
-- Error
nlerror("ERROR Fatal error exporting 'cmb' in folder %MaxSourceDirectory%")
nlerror("FAIL Fatal error occurred")
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 occurred")
NelForceQuitRightNow()
)
-- Bye
nlerror("BYE")
quitMAX #noPrompt
quitMAX() #noPrompt
-- #################################################################
-- ## 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_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
)
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 'cmb': can't open the file " + inputMaxFile)
removeRunningTag = false
)
)
else
(
nlerror("SKIPPED BY TAG " + inputMaxFile)
)
--)
--catch
--(
-- -- Error
-- nlerror("ERROR error exporting 'cmb' in file " + inputMaxFile)
-- removeRunningTag = false
--)
)
)
else
(
nlerror("WARNING no *.max file in folder %MaxSourceDirectory%")
)
)
)
catch
(
-- Error
nlerror("ERROR Fatal error exporting 'cmb' in folder %MaxSourceDirectory%")
nlerror("FAIL Fatal error occurred")
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 occurred")
NelForceQuitRightNow()
)
-- Bye
nlerror("BYE")
quitMAX #noPrompt
quitMAX() #noPrompt

View file

@ -1,318 +1,318 @@
-- #################################################################
-- ## 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_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
)
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 'veget': can't open the file " + inputMaxFile)
removeRunningTag = false
)
)
else
(
nlerror("SKIPPED BY TAG " + inputMaxFile)
)
--)
--catch
--(
-- -- Error
-- nlerror("ERROR error exporting 'veget' in file " + inputMaxFile)
-- removeRunningTag = false
--)
)
)
else
(
nlerror("WARNING no *.max file in folder %MaxSourceDirectory%")
)
)
)
catch
(
-- Error
nlerror("ERROR Fatal error exporting 'veget' in folder %MaxSourceDirectory%")
nlerror("FAIL Fatal error occurred")
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 occurred")
NelForceQuitRightNow()
)
-- Bye
nlerror("BYE")
quitMAX #noPrompt
quitMAX() #noPrompt
-- #################################################################
-- ## 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_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
)
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 'veget': can't open the file " + inputMaxFile)
removeRunningTag = false
)
)
else
(
nlerror("SKIPPED BY TAG " + inputMaxFile)
)
--)
--catch
--(
-- -- Error
-- nlerror("ERROR error exporting 'veget' in file " + inputMaxFile)
-- removeRunningTag = false
--)
)
)
else
(
nlerror("WARNING no *.max file in folder %MaxSourceDirectory%")
)
)
)
catch
(
-- Error
nlerror("ERROR Fatal error exporting 'veget' in folder %MaxSourceDirectory%")
nlerror("FAIL Fatal error occurred")
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 occurred")
NelForceQuitRightNow()
)
-- Bye
nlerror("BYE")
quitMAX #noPrompt
quitMAX() #noPrompt

View file

@ -1,430 +0,0 @@
// Condition.cpp: implementation of the CCondition class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "logic_editor.h"
#include "condition.h"
#include "nel/logic/logic_condition.h"
#include <vector>
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
using namespace std;
using namespace NLLOGIC;
//////////////////////////////////////////////////////////////////////
// CConditionNode implementation
//////////////////////////////////////////////////////////////////////
CConditionNode::CConditionNode(const CConditionNode &node)
{
this->m_dComparand = node.m_dComparand;
this->m_pParentNode = node.m_pParentNode;
this->m_sConditionName = node.m_sConditionName;
this->m_sOperator = node.m_sOperator;
this->m_sVariableName = node.m_sVariableName;
this->m_type = node.m_type;
// copy sub condition node tree
CConditionNode *pNode, *newNode;
POSITION pos = node.m_ctSubTree.GetHeadPosition();
while (pos != NULL)
{
pNode = m_ctSubTree.GetNext( pos );
if (pNode != NULL)
{
newNode = new CConditionNode( *pNode );
this->m_ctSubTree.AddTail( newNode );
newNode->m_pParentNode = this;
}
}
}
CConditionNode::~CConditionNode()
{
CConditionNode *pNode = NULL;
// delete all sub nodes
POSITION pos = m_ctSubTree.GetHeadPosition();
while (pos != NULL)
{
pNode = m_ctSubTree.GetNext( pos );
if (pNode != NULL)
{
delete pNode;
pNode = NULL;
}
}
}
const CString & CConditionNode::getNodeAsString() const
{
m_sNodeString.Empty();
if (m_type == NOT)
m_sNodeString = "NOT";
else if (m_type == TERMINATOR)
m_sNodeString = "term";
else if (m_type == SUB_CONDITION)
m_sNodeString = m_sConditionName;
else // comparison
{
<<<<<<< HEAD
m_sNodeString.Format("%s %s %g",LPCTSTR(m_sVariableName),LPCTSTR(m_sOperator), m_dComparand );
=======
m_sNodeString.Format(_T("%s %s %g"),LPCTSTR(m_sVariableName),LPCTSTR(m_sOperator), m_dComparand );
>>>>>>> ryzomcore
}
return m_sNodeString;
}
void CConditionNode::changeConditionName( const CString &old, const CString &newName)
{
CConditionNode *pNode = NULL;
POSITION pos = m_ctSubTree.GetHeadPosition();
while (pos != NULL)
{
pNode = m_ctSubTree.GetNext( pos );
if (pNode != NULL)
{
pNode->changeConditionName(old, newName);
}
}
//
if ( m_sConditionName == old)
m_sConditionName = newName;
}
void CConditionNode::conditionDeleted( const CString &name)
{
CConditionNode *pNode = NULL;
POSITION oldpos;
POSITION pos = m_ctSubTree.GetHeadPosition();
while (pos != NULL)
{
oldpos = pos;
pNode = m_ctSubTree.GetNext( pos );
if (pNode != NULL)
{
if ( pNode->m_sConditionName != name)
pNode->conditionDeleted(name);
else
{
this->m_ctSubTree.RemoveAt( oldpos );
delete pNode;
pNode = NULL;
}
}
}
}
//////////////////////////////////////////////////////////////////////
// CCondition implementation
//////////////////////////////////////////////////////////////////////
CCondition::CCondition()
{
}
CCondition::CCondition( const CCondition &cond)
{
this->m_sName = cond.m_sName;
// copy sub condition node tree
CConditionNode *pNode, *newNode;
POSITION pos = cond.m_ctConditionTree.GetHeadPosition();
while (pos != NULL)
{
pNode = m_ctConditionTree.GetNext( pos );
if (pNode != NULL)
{
newNode = new CConditionNode( *pNode );
this->m_ctConditionTree.AddTail( newNode );
}
}
}
CCondition::~CCondition()
{
CConditionNode *pNode = NULL;
// delete all sub nodes
POSITION pos = m_ctConditionTree.GetHeadPosition();
while (pos != NULL)
{
pNode = m_ctConditionTree.GetNext( pos );
if (pNode != NULL)
{
delete pNode;
pNode = NULL;
}
}
}
void CCondition::changeConditionName( CString old, const CString &newName) const
{
CConditionNode *pNode = NULL;
POSITION pos = m_ctConditionTree.GetHeadPosition();
while (pos != NULL)
{
pNode = m_ctConditionTree.GetNext( pos );
if (pNode != NULL)
{
pNode->changeConditionName( old, newName);
}
}
}
void CCondition::conditionDeleted( CString name)
{
CConditionNode *pNode = NULL;
POSITION oldpos;
POSITION pos = m_ctConditionTree.GetHeadPosition();
while (pos != NULL)
{
oldpos = pos;
pNode = m_ctConditionTree.GetNext( pos );
if (pNode != NULL)
{
if ( pNode->m_sConditionName != name)
pNode->conditionDeleted(name);
else
{
this->m_ctConditionTree.RemoveAt( oldpos );
delete pNode;
pNode = NULL;
}
}
}
}
//-----------------------------------------------------
// cConditionNodeToCLogicConditionNode (Editor --> Service)
//
//-----------------------------------------------------
void cConditionNodeToCLogicConditionNode(CConditionNode * conditionNode, CLogicConditionNode * logicConditionNode )
{
// if this node is a terminator node
if( conditionNode->m_type == CConditionNode::TERMINATOR )
{
logicConditionNode->Type = CLogicConditionNode::TERMINATOR;
}
else
// this node is a logic node
{
logicConditionNode->Type = CLogicConditionNode::LOGIC_NODE;
// part 1 : a logic block(not/comparison/subcondition)
switch( conditionNode->m_type )
{
case CConditionNode::NOT :
{
logicConditionNode->LogicBlock.Type = CLogicConditionLogicBlock::NOT;
}
break;
case CConditionNode::COMPARISON :
{
logicConditionNode->LogicBlock.Type = CLogicConditionLogicBlock::COMPARISON;
<<<<<<< HEAD
logicConditionNode->LogicBlock.ComparisonBlock.VariableName = string( (LPCSTR)conditionNode->m_sVariableName );
logicConditionNode->LogicBlock.ComparisonBlock.Operator = string( (LPCSTR)conditionNode->m_sOperator );
=======
logicConditionNode->LogicBlock.ComparisonBlock.VariableName = tStrToUtf8(conditionNode->m_sVariableName);
logicConditionNode->LogicBlock.ComparisonBlock.Operator = tStrToUtf8(conditionNode->m_sOperator);
>>>>>>> ryzomcore
logicConditionNode->LogicBlock.ComparisonBlock.Comparand = (sint64)conditionNode->m_dComparand;
}
break;
case CConditionNode::SUB_CONDITION :
{
logicConditionNode->LogicBlock.Type = CLogicConditionLogicBlock::SUB_CONDITION;
<<<<<<< HEAD
logicConditionNode->LogicBlock.SubCondition = string( (LPCSTR)conditionNode->m_sConditionName );
=======
logicConditionNode->LogicBlock.SubCondition = tStrToUtf8(conditionNode->m_sConditionName);
>>>>>>> ryzomcore
}
break;
}
// part 2 : a condition sub tree
POSITION pos;
for( pos = conditionNode->m_ctSubTree.GetHeadPosition(); pos != NULL; )
{
CConditionNode * pConditionNode = conditionNode->m_ctSubTree.GetNext( pos );
CLogicConditionNode * logicConditionNodeTmp = new CLogicConditionNode();
cConditionNodeToCLogicConditionNode( pConditionNode, logicConditionNodeTmp );
logicConditionNode->addNode( logicConditionNodeTmp );
}
}
} // cConditionNodeToCLogicConditionNode //
//-----------------------------------------------------
// cConditionToCLogicCondition (Editor --> Service)
//
//-----------------------------------------------------
void cConditionToCLogicCondition( CCondition& condition, CLogicCondition& logicCondition )
{
// condition name
<<<<<<< HEAD
logicCondition.setName( string( (LPCSTR)condition.m_sName ) );
=======
logicCondition.setName(tStrToUtf8(condition.m_sName));
>>>>>>> ryzomcore
// nodes
POSITION pos;
for( pos = condition.m_ctConditionTree.GetHeadPosition(); pos != NULL; )
{
// get the node
CConditionNode * pConditionNode = condition.m_ctConditionTree.GetNext( pos );
// convert the node
CLogicConditionNode * logicConditionNode = new CLogicConditionNode();
cConditionNodeToCLogicConditionNode( pConditionNode, logicConditionNode );
// add the node
logicCondition.addNode( *logicConditionNode );
}
} // cConditionToCLogicCondition //
//-----------------------------------------------------
// cLogicConditionNodeToCConditionNode (Service --> Editor)
//
//-----------------------------------------------------
void cLogicConditionNodeToCConditionNode( const CLogicConditionNode * logicConditionNode, CConditionNode * node )
{
// terminator node
if(logicConditionNode->Type == CLogicConditionNode::TERMINATOR)
{
node->m_type = CConditionNode::TERMINATOR;
}
// logic block with condition sub tree
else
{
// part 1 : a logic block(not/comparison/subcondition)
switch( logicConditionNode->LogicBlock.Type )
{
case CLogicConditionLogicBlock::NOT :
{
node->m_type = CConditionNode::NOT;
};
break;
case CLogicConditionLogicBlock::COMPARISON :
{
node->m_type = CConditionNode::COMPARISON;
node->m_sVariableName = CString(logicConditionNode->LogicBlock.ComparisonBlock.VariableName.c_str());
node->m_sOperator = CString(logicConditionNode->LogicBlock.ComparisonBlock.Operator.c_str());
node->m_dComparand = (double)logicConditionNode->LogicBlock.ComparisonBlock.Comparand;
};
break;
case CLogicConditionLogicBlock::SUB_CONDITION :
{
node->m_type = CConditionNode::SUB_CONDITION;
node->m_sConditionName = CString(logicConditionNode->LogicBlock.SubCondition.c_str());
};
break;
default :
{
node->m_type = CConditionNode::TERMINATOR;
}
}
// part 2 : a condition sub tree
vector<CLogicConditionNode *>::const_iterator itNode;
for( itNode = logicConditionNode->_Nodes.begin(); itNode != logicConditionNode->_Nodes.end(); ++itNode )
{
CConditionNode * nodeTmp = new CConditionNode();
cLogicConditionNodeToCConditionNode( *itNode, nodeTmp );
nodeTmp->m_pParentNode = node;
node->m_ctSubTree.AddTail( nodeTmp );
}
}
} // cLogicConditionNodeToCConditionNode //
//-----------------------------------------------
// cLogicConditionToCCondition
//
//-----------------------------------------------
void cLogicConditionToCCondition( const CLogicCondition& logicCondition, CCondition& condition )
{
// condition name
condition.m_sName = CString( logicCondition.getName().c_str() );
// condition tree
vector<CLogicConditionNode>::const_iterator itNode;
for( itNode = logicCondition.Nodes.begin(); itNode != logicCondition.Nodes.end(); ++itNode )
{
// convert the node
CConditionNode * node = new CConditionNode();
cLogicConditionNodeToCConditionNode( &(*itNode), node );
// add the node
condition.m_ctConditionTree.AddTail( node );
}
} // cLogicConditionToCCondition //

View file

@ -1,413 +0,0 @@
// Condition.cpp: implementation of the CCondition class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "logic_editor.h"
#include "condition.h"
#include "nel/logic/logic_condition.h"
#include <vector>
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
using namespace std;
using namespace NLLOGIC;
//////////////////////////////////////////////////////////////////////
// CConditionNode implementation
//////////////////////////////////////////////////////////////////////
CConditionNode::CConditionNode(const CConditionNode &node)
{
this->m_dComparand = node.m_dComparand;
this->m_pParentNode = node.m_pParentNode;
this->m_sConditionName = node.m_sConditionName;
this->m_sOperator = node.m_sOperator;
this->m_sVariableName = node.m_sVariableName;
this->m_type = node.m_type;
// copy sub condition node tree
CConditionNode *pNode, *newNode;
POSITION pos = node.m_ctSubTree.GetHeadPosition();
while (pos != NULL)
{
pNode = m_ctSubTree.GetNext( pos );
if (pNode != NULL)
{
newNode = new CConditionNode( *pNode );
this->m_ctSubTree.AddTail( newNode );
newNode->m_pParentNode = this;
}
}
}
CConditionNode::~CConditionNode()
{
CConditionNode *pNode = NULL;
// delete all sub nodes
POSITION pos = m_ctSubTree.GetHeadPosition();
while (pos != NULL)
{
pNode = m_ctSubTree.GetNext( pos );
if (pNode != NULL)
{
delete pNode;
pNode = NULL;
}
}
}
const CString & CConditionNode::getNodeAsString() const
{
m_sNodeString.Empty();
if (m_type == NOT)
m_sNodeString = "NOT";
else if (m_type == TERMINATOR)
m_sNodeString = "term";
else if (m_type == SUB_CONDITION)
m_sNodeString = m_sConditionName;
else // comparison
{
m_sNodeString.Format("%s %s %g",LPCTSTR(m_sVariableName),LPCTSTR(m_sOperator), m_dComparand );
}
return m_sNodeString;
}
void CConditionNode::changeConditionName( const CString &old, const CString &newName)
{
CConditionNode *pNode = NULL;
POSITION pos = m_ctSubTree.GetHeadPosition();
while (pos != NULL)
{
pNode = m_ctSubTree.GetNext( pos );
if (pNode != NULL)
{
pNode->changeConditionName(old, newName);
}
}
//
if ( m_sConditionName == old)
m_sConditionName = newName;
}
void CConditionNode::conditionDeleted( const CString &name)
{
CConditionNode *pNode = NULL;
POSITION oldpos;
POSITION pos = m_ctSubTree.GetHeadPosition();
while (pos != NULL)
{
oldpos = pos;
pNode = m_ctSubTree.GetNext( pos );
if (pNode != NULL)
{
if ( pNode->m_sConditionName != name)
pNode->conditionDeleted(name);
else
{
this->m_ctSubTree.RemoveAt( oldpos );
delete pNode;
pNode = NULL;
}
}
}
}
//////////////////////////////////////////////////////////////////////
// CCondition implementation
//////////////////////////////////////////////////////////////////////
CCondition::CCondition()
{
}
CCondition::CCondition( const CCondition &cond)
{
this->m_sName = cond.m_sName;
// copy sub condition node tree
CConditionNode *pNode, *newNode;
POSITION pos = cond.m_ctConditionTree.GetHeadPosition();
while (pos != NULL)
{
pNode = m_ctConditionTree.GetNext( pos );
if (pNode != NULL)
{
newNode = new CConditionNode( *pNode );
this->m_ctConditionTree.AddTail( newNode );
}
}
}
CCondition::~CCondition()
{
CConditionNode *pNode = NULL;
// delete all sub nodes
POSITION pos = m_ctConditionTree.GetHeadPosition();
while (pos != NULL)
{
pNode = m_ctConditionTree.GetNext( pos );
if (pNode != NULL)
{
delete pNode;
pNode = NULL;
}
}
}
void CCondition::changeConditionName( CString old, const CString &newName) const
{
CConditionNode *pNode = NULL;
POSITION pos = m_ctConditionTree.GetHeadPosition();
while (pos != NULL)
{
pNode = m_ctConditionTree.GetNext( pos );
if (pNode != NULL)
{
pNode->changeConditionName( old, newName);
}
}
}
void CCondition::conditionDeleted( CString name)
{
CConditionNode *pNode = NULL;
POSITION oldpos;
POSITION pos = m_ctConditionTree.GetHeadPosition();
while (pos != NULL)
{
oldpos = pos;
pNode = m_ctConditionTree.GetNext( pos );
if (pNode != NULL)
{
if ( pNode->m_sConditionName != name)
pNode->conditionDeleted(name);
else
{
this->m_ctConditionTree.RemoveAt( oldpos );
delete pNode;
pNode = NULL;
}
}
}
}
//-----------------------------------------------------
// cConditionNodeToCLogicConditionNode (Editor --> Service)
//
//-----------------------------------------------------
void cConditionNodeToCLogicConditionNode(CConditionNode * conditionNode, CLogicConditionNode * logicConditionNode )
{
// if this node is a terminator node
if( conditionNode->m_type == CConditionNode::TERMINATOR )
{
logicConditionNode->Type = CLogicConditionNode::TERMINATOR;
}
else
// this node is a logic node
{
logicConditionNode->Type = CLogicConditionNode::LOGIC_NODE;
// part 1 : a logic block(not/comparison/subcondition)
switch( conditionNode->m_type )
{
case CConditionNode::NOT :
{
logicConditionNode->LogicBlock.Type = CLogicConditionLogicBlock::NOT;
}
break;
case CConditionNode::COMPARISON :
{
logicConditionNode->LogicBlock.Type = CLogicConditionLogicBlock::COMPARISON;
logicConditionNode->LogicBlock.ComparisonBlock.VariableName = string( (LPCSTR)conditionNode->m_sVariableName );
logicConditionNode->LogicBlock.ComparisonBlock.Operator = string( (LPCSTR)conditionNode->m_sOperator );
logicConditionNode->LogicBlock.ComparisonBlock.Comparand = (sint64)conditionNode->m_dComparand;
}
break;
case CConditionNode::SUB_CONDITION :
{
logicConditionNode->LogicBlock.Type = CLogicConditionLogicBlock::SUB_CONDITION;
logicConditionNode->LogicBlock.SubCondition = string( (LPCSTR)conditionNode->m_sConditionName );
}
break;
}
// part 2 : a condition sub tree
POSITION pos;
for( pos = conditionNode->m_ctSubTree.GetHeadPosition(); pos != NULL; )
{
CConditionNode * pConditionNode = conditionNode->m_ctSubTree.GetNext( pos );
CLogicConditionNode * logicConditionNodeTmp = new CLogicConditionNode();
cConditionNodeToCLogicConditionNode( pConditionNode, logicConditionNodeTmp );
logicConditionNode->addNode( logicConditionNodeTmp );
}
}
} // cConditionNodeToCLogicConditionNode //
//-----------------------------------------------------
// cConditionToCLogicCondition (Editor --> Service)
//
//-----------------------------------------------------
void cConditionToCLogicCondition( CCondition& condition, CLogicCondition& logicCondition )
{
// condition name
logicCondition.setName( string( (LPCSTR)condition.m_sName ) );
// nodes
POSITION pos;
for( pos = condition.m_ctConditionTree.GetHeadPosition(); pos != NULL; )
{
// get the node
CConditionNode * pConditionNode = condition.m_ctConditionTree.GetNext( pos );
// convert the node
CLogicConditionNode * logicConditionNode = new CLogicConditionNode();
cConditionNodeToCLogicConditionNode( pConditionNode, logicConditionNode );
// add the node
logicCondition.addNode( *logicConditionNode );
}
} // cConditionToCLogicCondition //
//-----------------------------------------------------
// cLogicConditionNodeToCConditionNode (Service --> Editor)
//
//-----------------------------------------------------
void cLogicConditionNodeToCConditionNode( const CLogicConditionNode * logicConditionNode, CConditionNode * node )
{
// terminator node
if(logicConditionNode->Type == CLogicConditionNode::TERMINATOR)
{
node->m_type = CConditionNode::TERMINATOR;
}
// logic block with condition sub tree
else
{
// part 1 : a logic block(not/comparison/subcondition)
switch( logicConditionNode->LogicBlock.Type )
{
case CLogicConditionLogicBlock::NOT :
{
node->m_type = CConditionNode::NOT;
};
break;
case CLogicConditionLogicBlock::COMPARISON :
{
node->m_type = CConditionNode::COMPARISON;
node->m_sVariableName = CString(logicConditionNode->LogicBlock.ComparisonBlock.VariableName.c_str());
node->m_sOperator = CString(logicConditionNode->LogicBlock.ComparisonBlock.Operator.c_str());
node->m_dComparand = (double)logicConditionNode->LogicBlock.ComparisonBlock.Comparand;
};
break;
case CLogicConditionLogicBlock::SUB_CONDITION :
{
node->m_type = CConditionNode::SUB_CONDITION;
node->m_sConditionName = CString(logicConditionNode->LogicBlock.SubCondition.c_str());
};
break;
default :
{
node->m_type = CConditionNode::TERMINATOR;
}
}
// part 2 : a condition sub tree
vector<CLogicConditionNode *>::const_iterator itNode;
for( itNode = logicConditionNode->_Nodes.begin(); itNode != logicConditionNode->_Nodes.end(); ++itNode )
{
CConditionNode * nodeTmp = new CConditionNode();
cLogicConditionNodeToCConditionNode( *itNode, nodeTmp );
nodeTmp->m_pParentNode = node;
node->m_ctSubTree.AddTail( nodeTmp );
}
}
} // cLogicConditionNodeToCConditionNode //
//-----------------------------------------------
// cLogicConditionToCCondition
//
//-----------------------------------------------
void cLogicConditionToCCondition( const CLogicCondition& logicCondition, CCondition& condition )
{
// condition name
condition.m_sName = CString( logicCondition.getName().c_str() );
// condition tree
vector<CLogicConditionNode>::const_iterator itNode;
for( itNode = logicCondition.Nodes.begin(); itNode != logicCondition.Nodes.end(); ++itNode )
{
// convert the node
CConditionNode * node = new CConditionNode();
cLogicConditionNodeToCConditionNode( &(*itNode), node );
// add the node
condition.m_ctConditionTree.AddTail( node );
}
} // cLogicConditionToCCondition //

View file

@ -1,413 +0,0 @@
// Condition.cpp: implementation of the CCondition class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "logic_editor.h"
#include "condition.h"
#include "nel/logic/logic_condition.h"
#include <vector>
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
using namespace std;
using namespace NLLOGIC;
//////////////////////////////////////////////////////////////////////
// CConditionNode implementation
//////////////////////////////////////////////////////////////////////
CConditionNode::CConditionNode(const CConditionNode &node)
{
this->m_dComparand = node.m_dComparand;
this->m_pParentNode = node.m_pParentNode;
this->m_sConditionName = node.m_sConditionName;
this->m_sOperator = node.m_sOperator;
this->m_sVariableName = node.m_sVariableName;
this->m_type = node.m_type;
// copy sub condition node tree
CConditionNode *pNode, *newNode;
POSITION pos = node.m_ctSubTree.GetHeadPosition();
while (pos != NULL)
{
pNode = m_ctSubTree.GetNext( pos );
if (pNode != NULL)
{
newNode = new CConditionNode( *pNode );
this->m_ctSubTree.AddTail( newNode );
newNode->m_pParentNode = this;
}
}
}
CConditionNode::~CConditionNode()
{
CConditionNode *pNode = NULL;
// delete all sub nodes
POSITION pos = m_ctSubTree.GetHeadPosition();
while (pos != NULL)
{
pNode = m_ctSubTree.GetNext( pos );
if (pNode != NULL)
{
delete pNode;
pNode = NULL;
}
}
}
const CString & CConditionNode::getNodeAsString() const
{
m_sNodeString.Empty();
if (m_type == NOT)
m_sNodeString = "NOT";
else if (m_type == TERMINATOR)
m_sNodeString = "term";
else if (m_type == SUB_CONDITION)
m_sNodeString = m_sConditionName;
else // comparison
{
m_sNodeString.Format("%s %s %g",LPCTSTR(m_sVariableName),LPCTSTR(m_sOperator), m_dComparand );
}
return m_sNodeString;
}
void CConditionNode::changeConditionName( const CString &old, const CString &newName)
{
CConditionNode *pNode = NULL;
POSITION pos = m_ctSubTree.GetHeadPosition();
while (pos != NULL)
{
pNode = m_ctSubTree.GetNext( pos );
if (pNode != NULL)
{
pNode->changeConditionName(old, newName);
}
}
//
if ( m_sConditionName == old)
m_sConditionName = newName;
}
void CConditionNode::conditionDeleted( const CString &name)
{
CConditionNode *pNode = NULL;
POSITION oldpos;
POSITION pos = m_ctSubTree.GetHeadPosition();
while (pos != NULL)
{
oldpos = pos;
pNode = m_ctSubTree.GetNext( pos );
if (pNode != NULL)
{
if ( pNode->m_sConditionName != name)
pNode->conditionDeleted(name);
else
{
this->m_ctSubTree.RemoveAt( oldpos );
delete pNode;
pNode = NULL;
}
}
}
}
//////////////////////////////////////////////////////////////////////
// CCondition implementation
//////////////////////////////////////////////////////////////////////
CCondition::CCondition()
{
}
CCondition::CCondition( const CCondition &cond)
{
this->m_sName = cond.m_sName;
// copy sub condition node tree
CConditionNode *pNode, *newNode;
POSITION pos = cond.m_ctConditionTree.GetHeadPosition();
while (pos != NULL)
{
pNode = m_ctConditionTree.GetNext( pos );
if (pNode != NULL)
{
newNode = new CConditionNode( *pNode );
this->m_ctConditionTree.AddTail( newNode );
}
}
}
CCondition::~CCondition()
{
CConditionNode *pNode = NULL;
// delete all sub nodes
POSITION pos = m_ctConditionTree.GetHeadPosition();
while (pos != NULL)
{
pNode = m_ctConditionTree.GetNext( pos );
if (pNode != NULL)
{
delete pNode;
pNode = NULL;
}
}
}
void CCondition::changeConditionName( CString old, const CString &newName) const
{
CConditionNode *pNode = NULL;
POSITION pos = m_ctConditionTree.GetHeadPosition();
while (pos != NULL)
{
pNode = m_ctConditionTree.GetNext( pos );
if (pNode != NULL)
{
pNode->changeConditionName( old, newName);
}
}
}
void CCondition::conditionDeleted( CString name)
{
CConditionNode *pNode = NULL;
POSITION oldpos;
POSITION pos = m_ctConditionTree.GetHeadPosition();
while (pos != NULL)
{
oldpos = pos;
pNode = m_ctConditionTree.GetNext( pos );
if (pNode != NULL)
{
if ( pNode->m_sConditionName != name)
pNode->conditionDeleted(name);
else
{
this->m_ctConditionTree.RemoveAt( oldpos );
delete pNode;
pNode = NULL;
}
}
}
}
//-----------------------------------------------------
// cConditionNodeToCLogicConditionNode (Editor --> Service)
//
//-----------------------------------------------------
void cConditionNodeToCLogicConditionNode(CConditionNode * conditionNode, CLogicConditionNode * logicConditionNode )
{
// if this node is a terminator node
if( conditionNode->m_type == CConditionNode::TERMINATOR )
{
logicConditionNode->Type = CLogicConditionNode::TERMINATOR;
}
else
// this node is a logic node
{
logicConditionNode->Type = CLogicConditionNode::LOGIC_NODE;
// part 1 : a logic block(not/comparison/subcondition)
switch( conditionNode->m_type )
{
case CConditionNode::NOT :
{
logicConditionNode->LogicBlock.Type = CLogicConditionLogicBlock::NOT;
}
break;
case CConditionNode::COMPARISON :
{
logicConditionNode->LogicBlock.Type = CLogicConditionLogicBlock::COMPARISON;
logicConditionNode->LogicBlock.ComparisonBlock.VariableName = string( (LPCSTR)conditionNode->m_sVariableName );
logicConditionNode->LogicBlock.ComparisonBlock.Operator = string( (LPCSTR)conditionNode->m_sOperator );
logicConditionNode->LogicBlock.ComparisonBlock.Comparand = (sint64)conditionNode->m_dComparand;
}
break;
case CConditionNode::SUB_CONDITION :
{
logicConditionNode->LogicBlock.Type = CLogicConditionLogicBlock::SUB_CONDITION;
logicConditionNode->LogicBlock.SubCondition = string( (LPCSTR)conditionNode->m_sConditionName );
}
break;
}
// part 2 : a condition sub tree
POSITION pos;
for( pos = conditionNode->m_ctSubTree.GetHeadPosition(); pos != NULL; )
{
CConditionNode * pConditionNode = conditionNode->m_ctSubTree.GetNext( pos );
CLogicConditionNode * logicConditionNodeTmp = new CLogicConditionNode();
cConditionNodeToCLogicConditionNode( pConditionNode, logicConditionNodeTmp );
logicConditionNode->addNode( logicConditionNodeTmp );
}
}
} // cConditionNodeToCLogicConditionNode //
//-----------------------------------------------------
// cConditionToCLogicCondition (Editor --> Service)
//
//-----------------------------------------------------
void cConditionToCLogicCondition( CCondition& condition, CLogicCondition& logicCondition )
{
// condition name
logicCondition.setName( string( (LPCSTR)condition.m_sName ) );
// nodes
POSITION pos;
for( pos = condition.m_ctConditionTree.GetHeadPosition(); pos != NULL; )
{
// get the node
CConditionNode * pConditionNode = condition.m_ctConditionTree.GetNext( pos );
// convert the node
CLogicConditionNode * logicConditionNode = new CLogicConditionNode();
cConditionNodeToCLogicConditionNode( pConditionNode, logicConditionNode );
// add the node
logicCondition.addNode( *logicConditionNode );
}
} // cConditionToCLogicCondition //
//-----------------------------------------------------
// cLogicConditionNodeToCConditionNode (Service --> Editor)
//
//-----------------------------------------------------
void cLogicConditionNodeToCConditionNode( const CLogicConditionNode * logicConditionNode, CConditionNode * node )
{
// terminator node
if(logicConditionNode->Type == CLogicConditionNode::TERMINATOR)
{
node->m_type = CConditionNode::TERMINATOR;
}
// logic block with condition sub tree
else
{
// part 1 : a logic block(not/comparison/subcondition)
switch( logicConditionNode->LogicBlock.Type )
{
case CLogicConditionLogicBlock::NOT :
{
node->m_type = CConditionNode::NOT;
};
break;
case CLogicConditionLogicBlock::COMPARISON :
{
node->m_type = CConditionNode::COMPARISON;
node->m_sVariableName = CString(logicConditionNode->LogicBlock.ComparisonBlock.VariableName.c_str());
node->m_sOperator = CString(logicConditionNode->LogicBlock.ComparisonBlock.Operator.c_str());
node->m_dComparand = (double)logicConditionNode->LogicBlock.ComparisonBlock.Comparand;
};
break;
case CLogicConditionLogicBlock::SUB_CONDITION :
{
node->m_type = CConditionNode::SUB_CONDITION;
node->m_sConditionName = CString(logicConditionNode->LogicBlock.SubCondition.c_str());
};
break;
default :
{
node->m_type = CConditionNode::TERMINATOR;
}
}
// part 2 : a condition sub tree
vector<CLogicConditionNode *>::const_iterator itNode;
for( itNode = logicConditionNode->_Nodes.begin(); itNode != logicConditionNode->_Nodes.end(); ++itNode )
{
CConditionNode * nodeTmp = new CConditionNode();
cLogicConditionNodeToCConditionNode( *itNode, nodeTmp );
nodeTmp->m_pParentNode = node;
node->m_ctSubTree.AddTail( nodeTmp );
}
}
} // cLogicConditionNodeToCConditionNode //
//-----------------------------------------------
// cLogicConditionToCCondition
//
//-----------------------------------------------
void cLogicConditionToCCondition( const CLogicCondition& logicCondition, CCondition& condition )
{
// condition name
condition.m_sName = CString( logicCondition.getName().c_str() );
// condition tree
vector<CLogicConditionNode>::const_iterator itNode;
for( itNode = logicCondition.Nodes.begin(); itNode != logicCondition.Nodes.end(); ++itNode )
{
// convert the node
CConditionNode * node = new CConditionNode();
cLogicConditionNodeToCConditionNode( &(*itNode), node );
// add the node
condition.m_ctConditionTree.AddTail( node );
}
} // cLogicConditionToCCondition //

View file

@ -1,413 +0,0 @@
// Condition.cpp: implementation of the CCondition class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "logic_editor.h"
#include "condition.h"
#include "nel/logic/logic_condition.h"
#include <vector>
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
using namespace std;
using namespace NLLOGIC;
//////////////////////////////////////////////////////////////////////
// CConditionNode implementation
//////////////////////////////////////////////////////////////////////
CConditionNode::CConditionNode(const CConditionNode &node)
{
this->m_dComparand = node.m_dComparand;
this->m_pParentNode = node.m_pParentNode;
this->m_sConditionName = node.m_sConditionName;
this->m_sOperator = node.m_sOperator;
this->m_sVariableName = node.m_sVariableName;
this->m_type = node.m_type;
// copy sub condition node tree
CConditionNode *pNode, *newNode;
POSITION pos = node.m_ctSubTree.GetHeadPosition();
while (pos != NULL)
{
pNode = m_ctSubTree.GetNext( pos );
if (pNode != NULL)
{
newNode = new CConditionNode( *pNode );
this->m_ctSubTree.AddTail( newNode );
newNode->m_pParentNode = this;
}
}
}
CConditionNode::~CConditionNode()
{
CConditionNode *pNode = NULL;
// delete all sub nodes
POSITION pos = m_ctSubTree.GetHeadPosition();
while (pos != NULL)
{
pNode = m_ctSubTree.GetNext( pos );
if (pNode != NULL)
{
delete pNode;
pNode = NULL;
}
}
}
const CString & CConditionNode::getNodeAsString() const
{
m_sNodeString.Empty();
if (m_type == NOT)
m_sNodeString = "NOT";
else if (m_type == TERMINATOR)
m_sNodeString = "term";
else if (m_type == SUB_CONDITION)
m_sNodeString = m_sConditionName;
else // comparison
{
m_sNodeString.Format(_T("%s %s %g"),LPCTSTR(m_sVariableName),LPCTSTR(m_sOperator), m_dComparand );
}
return m_sNodeString;
}
void CConditionNode::changeConditionName( const CString &old, const CString &newName)
{
CConditionNode *pNode = NULL;
POSITION pos = m_ctSubTree.GetHeadPosition();
while (pos != NULL)
{
pNode = m_ctSubTree.GetNext( pos );
if (pNode != NULL)
{
pNode->changeConditionName(old, newName);
}
}
//
if ( m_sConditionName == old)
m_sConditionName = newName;
}
void CConditionNode::conditionDeleted( const CString &name)
{
CConditionNode *pNode = NULL;
POSITION oldpos;
POSITION pos = m_ctSubTree.GetHeadPosition();
while (pos != NULL)
{
oldpos = pos;
pNode = m_ctSubTree.GetNext( pos );
if (pNode != NULL)
{
if ( pNode->m_sConditionName != name)
pNode->conditionDeleted(name);
else
{
this->m_ctSubTree.RemoveAt( oldpos );
delete pNode;
pNode = NULL;
}
}
}
}
//////////////////////////////////////////////////////////////////////
// CCondition implementation
//////////////////////////////////////////////////////////////////////
CCondition::CCondition()
{
}
CCondition::CCondition( const CCondition &cond)
{
this->m_sName = cond.m_sName;
// copy sub condition node tree
CConditionNode *pNode, *newNode;
POSITION pos = cond.m_ctConditionTree.GetHeadPosition();
while (pos != NULL)
{
pNode = m_ctConditionTree.GetNext( pos );
if (pNode != NULL)
{
newNode = new CConditionNode( *pNode );
this->m_ctConditionTree.AddTail( newNode );
}
}
}
CCondition::~CCondition()
{
CConditionNode *pNode = NULL;
// delete all sub nodes
POSITION pos = m_ctConditionTree.GetHeadPosition();
while (pos != NULL)
{
pNode = m_ctConditionTree.GetNext( pos );
if (pNode != NULL)
{
delete pNode;
pNode = NULL;
}
}
}
void CCondition::changeConditionName( CString old, const CString &newName) const
{
CConditionNode *pNode = NULL;
POSITION pos = m_ctConditionTree.GetHeadPosition();
while (pos != NULL)
{
pNode = m_ctConditionTree.GetNext( pos );
if (pNode != NULL)
{
pNode->changeConditionName( old, newName);
}
}
}
void CCondition::conditionDeleted( CString name)
{
CConditionNode *pNode = NULL;
POSITION oldpos;
POSITION pos = m_ctConditionTree.GetHeadPosition();
while (pos != NULL)
{
oldpos = pos;
pNode = m_ctConditionTree.GetNext( pos );
if (pNode != NULL)
{
if ( pNode->m_sConditionName != name)
pNode->conditionDeleted(name);
else
{
this->m_ctConditionTree.RemoveAt( oldpos );
delete pNode;
pNode = NULL;
}
}
}
}
//-----------------------------------------------------
// cConditionNodeToCLogicConditionNode (Editor --> Service)
//
//-----------------------------------------------------
void cConditionNodeToCLogicConditionNode(CConditionNode * conditionNode, CLogicConditionNode * logicConditionNode )
{
// if this node is a terminator node
if( conditionNode->m_type == CConditionNode::TERMINATOR )
{
logicConditionNode->Type = CLogicConditionNode::TERMINATOR;
}
else
// this node is a logic node
{
logicConditionNode->Type = CLogicConditionNode::LOGIC_NODE;
// part 1 : a logic block(not/comparison/subcondition)
switch( conditionNode->m_type )
{
case CConditionNode::NOT :
{
logicConditionNode->LogicBlock.Type = CLogicConditionLogicBlock::NOT;
}
break;
case CConditionNode::COMPARISON :
{
logicConditionNode->LogicBlock.Type = CLogicConditionLogicBlock::COMPARISON;
logicConditionNode->LogicBlock.ComparisonBlock.VariableName = tStrToUtf8(conditionNode->m_sVariableName);
logicConditionNode->LogicBlock.ComparisonBlock.Operator = tStrToUtf8(conditionNode->m_sOperator);
logicConditionNode->LogicBlock.ComparisonBlock.Comparand = (sint64)conditionNode->m_dComparand;
}
break;
case CConditionNode::SUB_CONDITION :
{
logicConditionNode->LogicBlock.Type = CLogicConditionLogicBlock::SUB_CONDITION;
logicConditionNode->LogicBlock.SubCondition = tStrToUtf8(conditionNode->m_sConditionName);
}
break;
}
// part 2 : a condition sub tree
POSITION pos;
for( pos = conditionNode->m_ctSubTree.GetHeadPosition(); pos != NULL; )
{
CConditionNode * pConditionNode = conditionNode->m_ctSubTree.GetNext( pos );
CLogicConditionNode * logicConditionNodeTmp = new CLogicConditionNode();
cConditionNodeToCLogicConditionNode( pConditionNode, logicConditionNodeTmp );
logicConditionNode->addNode( logicConditionNodeTmp );
}
}
} // cConditionNodeToCLogicConditionNode //
//-----------------------------------------------------
// cConditionToCLogicCondition (Editor --> Service)
//
//-----------------------------------------------------
void cConditionToCLogicCondition( CCondition& condition, CLogicCondition& logicCondition )
{
// condition name
logicCondition.setName(tStrToUtf8(condition.m_sName));
// nodes
POSITION pos;
for( pos = condition.m_ctConditionTree.GetHeadPosition(); pos != NULL; )
{
// get the node
CConditionNode * pConditionNode = condition.m_ctConditionTree.GetNext( pos );
// convert the node
CLogicConditionNode * logicConditionNode = new CLogicConditionNode();
cConditionNodeToCLogicConditionNode( pConditionNode, logicConditionNode );
// add the node
logicCondition.addNode( *logicConditionNode );
}
} // cConditionToCLogicCondition //
//-----------------------------------------------------
// cLogicConditionNodeToCConditionNode (Service --> Editor)
//
//-----------------------------------------------------
void cLogicConditionNodeToCConditionNode( const CLogicConditionNode * logicConditionNode, CConditionNode * node )
{
// terminator node
if(logicConditionNode->Type == CLogicConditionNode::TERMINATOR)
{
node->m_type = CConditionNode::TERMINATOR;
}
// logic block with condition sub tree
else
{
// part 1 : a logic block(not/comparison/subcondition)
switch( logicConditionNode->LogicBlock.Type )
{
case CLogicConditionLogicBlock::NOT :
{
node->m_type = CConditionNode::NOT;
};
break;
case CLogicConditionLogicBlock::COMPARISON :
{
node->m_type = CConditionNode::COMPARISON;
node->m_sVariableName = CString(logicConditionNode->LogicBlock.ComparisonBlock.VariableName.c_str());
node->m_sOperator = CString(logicConditionNode->LogicBlock.ComparisonBlock.Operator.c_str());
node->m_dComparand = (double)logicConditionNode->LogicBlock.ComparisonBlock.Comparand;
};
break;
case CLogicConditionLogicBlock::SUB_CONDITION :
{
node->m_type = CConditionNode::SUB_CONDITION;
node->m_sConditionName = CString(logicConditionNode->LogicBlock.SubCondition.c_str());
};
break;
default :
{
node->m_type = CConditionNode::TERMINATOR;
}
}
// part 2 : a condition sub tree
vector<CLogicConditionNode *>::const_iterator itNode;
for( itNode = logicConditionNode->_Nodes.begin(); itNode != logicConditionNode->_Nodes.end(); ++itNode )
{
CConditionNode * nodeTmp = new CConditionNode();
cLogicConditionNodeToCConditionNode( *itNode, nodeTmp );
nodeTmp->m_pParentNode = node;
node->m_ctSubTree.AddTail( nodeTmp );
}
}
} // cLogicConditionNodeToCConditionNode //
//-----------------------------------------------
// cLogicConditionToCCondition
//
//-----------------------------------------------
void cLogicConditionToCCondition( const CLogicCondition& logicCondition, CCondition& condition )
{
// condition name
condition.m_sName = CString( logicCondition.getName().c_str() );
// condition tree
vector<CLogicConditionNode>::const_iterator itNode;
for( itNode = logicCondition.Nodes.begin(); itNode != logicCondition.Nodes.end(); ++itNode )
{
// convert the node
CConditionNode * node = new CConditionNode();
cLogicConditionNodeToCConditionNode( &(*itNode), node );
// add the node
condition.m_ctConditionTree.AddTail( node );
}
} // cLogicConditionToCCondition //

View file

@ -1,68 +1,68 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CrashReportWidget</class>
<widget class="QWidget" name="CrashReportWidget">
<property name="windowModality">
<enum>Qt::ApplicationModal</enum>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>406</width>
<height>430</height>
</rect>
</property>
<property name="windowTitle">
<string>NeL report</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0" colspan="2">
<widget class="QLabel" name="descrLabel">
<property name="text">
<string>What were you doing when the crash occurred?</string>
</property>
</widget>
</item>
<item row="2" column="0" colspan="2">
<widget class="QLabel" name="reportLabel">
<property name="text">
<string>Contents of the report ( automatically generated )</string>
</property>
</widget>
</item>
<item row="1" column="0" colspan="3">
<widget class="QPlainTextEdit" name="descriptionEdit"/>
</item>
<item row="4" column="0" colspan="3">
<widget class="QCheckBox" name="emailCB">
<property name="text">
<string>Email me if you have further questions, or updates on this issue</string>
</property>
</widget>
</item>
<item row="5" column="0" colspan="3">
<widget class="QLineEdit" name="emailEdit">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Enter your email address here</string>
</property>
</widget>
</item>
<item row="3" column="0" colspan="3">
<widget class="QPlainTextEdit" name="reportEdit">
<property name="enabled">
<bool>true</bool>
</property>
<property name="textInteractionFlags">
<set>Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CrashReportWidget</class>
<widget class="QWidget" name="CrashReportWidget">
<property name="windowModality">
<enum>Qt::ApplicationModal</enum>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>406</width>
<height>430</height>
</rect>
</property>
<property name="windowTitle">
<string>NeL report</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0" colspan="2">
<widget class="QLabel" name="descrLabel">
<property name="text">
<string>What were you doing when the crash occurred?</string>
</property>
</widget>
</item>
<item row="2" column="0" colspan="2">
<widget class="QLabel" name="reportLabel">
<property name="text">
<string>Contents of the report ( automatically generated )</string>
</property>
</widget>
</item>
<item row="1" column="0" colspan="3">
<widget class="QPlainTextEdit" name="descriptionEdit"/>
</item>
<item row="4" column="0" colspan="3">
<widget class="QCheckBox" name="emailCB">
<property name="text">
<string>Email me if you have further questions, or updates on this issue</string>
</property>
</widget>
</item>
<item row="5" column="0" colspan="3">
<widget class="QLineEdit" name="emailEdit">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Enter your email address here</string>
</property>
</widget>
</item>
<item row="3" column="0" colspan="3">
<widget class="QPlainTextEdit" name="reportEdit">
<property name="enabled">
<bool>true</bool>
</property>
<property name="textInteractionFlags">
<set>Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View file

@ -157,8 +157,6 @@ int main(int argc, char **argv)
// init the Nel context
CApplicationContext *appContext = new CApplicationContext;
DisableNLDebug = true;
#endif
// disable nldebug messages in logs in Release
#ifdef NL_RELEASE
@ -169,17 +167,12 @@ int main(int argc, char **argv)
createDebug(NULL, false);
INelContext::getInstance().setWindowedApplication(true);
INelContext::getInstance().getDebugLog()->removeDisplayer("DEFAULT_SD");
INelContext::getInstance().getInfoLog()->removeDisplayer("DEFAULT_SD");
INelContext::getInstance().getWarningLog()->removeDisplayer("DEFAULT_SD");
#endif // NL_DEBUG
#ifndef NL_DEBUG
INelContext::getInstance().getDebugLog()->removeDisplayer("DEFAULT_SD");
INelContext::getInstance().getInfoLog()->removeDisplayer("DEFAULT_SD");
INelContext::getInstance().getWarningLog()->removeDisplayer("DEFAULT_SD");
#endif // NL_DEBUG
Args.addAdditionalArg("shard_id", "Shard ID to use", true, false);
Args.setVersion(getDisplayVersion());
Args.setDescription("Ryzom client");
@ -207,12 +200,10 @@ int main(int argc, char **argv)
if (Args.haveAdditionalArg("login"))
{
LoginLogin = Args.getAdditionalArg("login").front();
LoginPassword = Args.getAdditionalArg("password").front();
if (Args.haveAdditionalArg("password"))
{
LoginPassword = Args.getAdditionalArg("password").front();
LoginShardId = std::numeric_limits<uint32>::max();
if (Args.haveAdditionalArg("shard_id"))
sLoginShardId = Args.getAdditionalArg("shard_id").front();
@ -226,11 +217,13 @@ int main(int argc, char **argv)
if (Args.haveArg("p") || !CFile::isExists("client_default.cfg"))
{
std::string currentPath = CPath::getApplicationDirectory("Khanat");
// create parent directory
if (!CFile::isExists(currentPath)) CFile::createDirectory(currentPath);
// append profile ID to directory
if (Args.haveArg("p"))
{
currentPath = NLMISC::CPath::standardizePath(currentPath) + Args.getArg("p").front();
if (!CFile::isExists(currentPath)) CFile::createDirectory(currentPath);

View file

@ -1198,52 +1198,6 @@ NLMISC_COMMAND(db, "Modify Database","<Property> <Value>")
return true;
}
NLMISC_COMMAND(setItemName, "set name of items, sbrick, etc..","<sheet_id> <name> <desc> <desc2>")
{
if (args.size() < 2) return false;
CSheetId id(args[0]);
ucstring name;
name.fromUtf8(args[1]);
ucstring desc;
ucstring desc2;
if (args.size() > 2)
desc.fromUtf8(args[2]);
if (args.size() > 2)
desc2.fromUtf8(args[3]);
STRING_MANAGER::CStringManagerClient *pSMC = STRING_MANAGER::CStringManagerClient::instance();
if (pSMC)
pSMC->replaceSBrickName(id, name, desc, desc2);
else
else
{
ChatMngr.updateChatModeAndButton(CChatGroup::dyn_chat, nb);
}
return false;
return true;
}
NLMISC_COMMAND(setMissingDynstringText, "set text of missing dynamic string"," <name> <text>")
{
if (args.size() < 2) return false;
ucstring name;
name.fromUtf8(args[0]);
ucstring text;
text.fromUtf8(args[1]);
STRING_MANAGER::CStringManagerClient *pSMC = STRING_MANAGER::CStringManagerClient::instance();
if (pSMC)
pSMC->replaceDynString(name, text);
else
return false;
return true;
}
NLMISC_COMMAND(setItemName, "set name of items, sbrick, etc..","<sheet_id> <name> <desc> <desc2>")
{
if (args.size() < 2) return false;
@ -4304,8 +4258,8 @@ NLMISC_COMMAND(debugItemInfo, "simulate a ItemInfo received from server", "itemS
itemInfo.DesertMagicResistance= 133;
itemInfo.ForestMagicResistance= 500;
itemInfo.PrimaryRootMagicResistance= 341;
itemInfo.Hp= 66;
itemInfo.HpMax= 100;
itemInfo.ChaScore1= 66;
itemInfo.ChaScore1Max= 100;
itemInfo.Range= 169;
itemInfo.SapLoadCurrent= 6;
itemInfo.SapLoadMax= 30;
@ -5747,74 +5701,7 @@ NLMISC_COMMAND(em, "emote command", "<emote phrase>")
return false;
}
NLMISC_COMMAND(me, "emote command", "<emote phrase>")
{
if (args.size() < 1) return false;
CInterfaceManager *pIM = CInterfaceManager::getInstance();
if( pIM )
{
string emotePhrase;
if( args.size() > 0 )
{
emotePhrase = args[0];
}
for(uint i = 1; i < args.size(); ++i )
{
emotePhrase += " ";
emotePhrase += args[i];
}
CAHManager::getInstance()->runActionHandler("emote", NULL, "nb=0|behav=255|custom_phrase="+emotePhrase);
return true;
}
return false;
}
NLMISC_COMMAND(emote, "emote command", "<emote phrase>")
{
if (args.size() < 1) return false;
NLMISC_COMMAND(guildmotd, "Set or see the guild message of the day","<msg of the day>")
if( pIM )
{
string emotePhrase;
if( args.size() > 0 )
{
emotePhrase = args[0];
}
for(uint i = 1; i < args.size(); ++i )
{
emotePhrase += " ";
emotePhrase += args[i];
}
CAHManager::getInstance()->runActionHandler("emote", NULL, "nb=0|behav=255|custom_phrase="+emotePhrase);
return true;
}
return false;
}
NLMISC_COMMAND(m, "emote command", "<emote phrase>")
{
if (args.size() < 1) return false;
CInterfaceManager *pIM = CInterfaceManager::getInstance();
if( pIM )
{
string emotePhrase;
if( args.size() > 0 )
{
emotePhrase = args[0];
}
for(uint i = 1; i < args.size(); ++i )
{
emotePhrase += " ";
emotePhrase += args[i];
}
CAHManager::getInstance()->runActionHandler("emote", NULL, "nb=0|behav=255|custom_phrase="+emotePhrase);
return true;
}
return false;
}
NLMISC_COMMAND(guildmotd, "Set or see the guild message of the day","<msg of the day>")

View file

@ -258,8 +258,6 @@ void CLoginStateMachine::run()
SM_END_EVENT_TABLE
}
else
{
if (LoginCustomParameters.empty())
{
// standard procedure
SM_BEGIN_EVENT_TABLE
@ -268,16 +266,6 @@ void CLoginStateMachine::run()
SM_EVENT(ev_quit, st_end);
SM_END_EVENT_TABLE
}
}
else
{
// alternate login procedure
SM_BEGIN_EVENT_TABLE
SM_EVENT(ev_init_done, st_alt_login);
SM_EVENT(ev_skip_all_login, st_ingame);
SM_EVENT(ev_quit, st_end);
SM_END_EVENT_TABLE
}
}
else
{

View file

@ -355,38 +355,15 @@ CViewBase *CChatTextManager::createMsgTextSimple(const ucstring &msg, NLMISC::CR
vt->setMultiLineSpace(getTextMultiLineSpace());
vt->setModulateGlobalColor(false);
ucstring cur_time;
if (showTimestamps())
{
CCDBNodeLeaf *node = NLGUI::CDBManager::getInstance()->getDbProp("UI:SAVE:SHOW_CLOCK_12H", false);
if (node && node->getValueBool())
cur_time = CInterfaceManager::getTimestampHuman("[%I:%M:%S %p] ");
else
cur_time = CInterfaceManager::getTimestampHuman();
}
// if text contain any color code, set the text formated and white,
// otherwise, set text normal and apply global color
size_t codePos = msg.find(ucstring("@{"));
if (codePos != ucstring::npos)
if (msg.find(ucstring("@{")) != ucstring::npos)
{
// Prepend the current time (do it after the color if the color at first position.
if (codePos == 0)
{
codePos = msg.find(ucstring("}"));
msg = msg.substr(0, codePos + 1) + cur_time + msg.substr(codePos + 1, msg.length() - codePos);
}
else
{
msg = cur_time + msg;
}
vt->setTextFormatTaged(msg);
vt->setColor(NLMISC::CRGBA::White);
}
else
{
msg = cur_time + msg;
vt->setText(msg);
vt->setColor(col);
}

View file

@ -134,13 +134,6 @@ int CDBCtrlSheet::luaGetDraggedSheet(CLuaState &ls)
return 1;
}
// ***************************************************************************
int CDBCtrlSheet::luaGetDraggedSheet(CLuaState &ls)
{
CLuaIHM::pushUIOnStack(ls, dynamic_cast<CInterfaceElement *>( dynamic_cast< CDBCtrlSheet* >( CCtrlDraggable::getDraggedSheet() ) ));
return 1;
}
// ***************************************************************************
int CDBCtrlSheet::luaGetChaScore1Buff(CLuaState &ls)
{

View file

@ -682,34 +682,6 @@ CGroupInSceneUserInfo *CGroupInSceneUserInfo::build (CEntityCL *entity)
}
else
pvpFactionLogo->setActive(false);
}
else if (pPlayer->getPvpMode() & PVP_MODE::PvpFaction)
{
if (pPlayer->getPvpMode() & PVP_MODE::PvpZoneSafe)
pvpFactionBitmap->setTexture("pvp_neutral.tga");
else
pvpFactionBitmap->setTexture("pvp_enemy_tag.tga");
}
else if (pPlayer->getPvpMode() & PVP_MODE::PvpFactionFlagged)
{
if (pPlayer->getPvpMode() & PVP_MODE::PvpChallenge)
pvpFactionBitmap->setTexture("ico_curse.tga");
else if (pPlayer->isNeutralPVP())
pvpFactionBitmap->setTexture("pvp_neutral.tga");
else if (pPlayer->isAlly() && (pPlayer->getPvpMode() & PVP_MODE::PvpFactionFlagged))
pvpFactionBitmap->setTexture("pvp_ally_flag.tga");
else if (pPlayer->isAlly() && (pPlayer->getPvpMode() & PVP_MODE::PvpFaction))
pvpFactionBitmap->setTexture("pvp_ally_tag.tga");
else if (pPlayer->isEnemy() && (pPlayer->getPvpMode() & PVP_MODE::PvpFactionFlagged))
pvpFactionBitmap->setTexture("pvp_enemy_flag.tga");
else if (pPlayer->isEnemy() && (pPlayer->getPvpMode() & PVP_MODE::PvpFaction))
pvpFactionBitmap->setTexture("pvp_enemy_tag.tga");
else if (pPlayer->getPvpMode() & PVP_MODE::PvpFactionFlagged)
pvpFactionBitmap->setTexture("pvp_enemy_flag.tga");
else if (pPlayer->getPvpMode() & PVP_MODE::PvpFaction)
pvpFactionBitmap->setTexture("pvp_enemy_tag.tga");
else
pvpFactionLogo->setActive(false);
}
else
{
@ -733,7 +705,6 @@ CGroupInSceneUserInfo *CGroupInSceneUserInfo::build (CEntityCL *entity)
pvpFactionLogo->setActive(false);
}
}
}
}
if (pvpOutpostLogo)

View file

@ -1,125 +0,0 @@
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010 Winch Gate Property Limited
//
// 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/>.
#ifndef CL_GROUP_IN_SCENE_USER_INFO_HELP_H
#define CL_GROUP_IN_SCENE_USER_INFO_HELP_H
#include "nel/misc/types_nl.h"
#include "group_in_scene.h"
/**
* Compas group
* \author Cyril 'Hulud' Corvazier
* \author Nevrax France
* \date 2003
*/
class CGroupInSceneUserInfo : public CGroupInScene
{
public:
DECLARE_UI_CLASS(CGroupInSceneUserInfo)
// Constructor
CGroupInSceneUserInfo(const TCtorParam &param);
~CGroupInSceneUserInfo();
// Build the bar
// You must rebuild if guild or title change
static CGroupInSceneUserInfo *build (class CEntityCL *entity);
// release a group in scene. The group is then put in cache for futur reuse
//static void release(CGroupInSceneUserInfo *group);
// Show or hide the bar group
void setLeftGroupActive( bool active );
// Update dynamic data : "Selection", "Bars"
// Call it at each frame for visible title
void updateDynamicData ();
// Tells if this group actually want guildName or guildSymbol => must rebuild interface if changes
bool needGuildNameId() const {return _NeedGuildNameId;}
bool needGuildSymbolId() const {return _NeedGuildSymbolId;}
bool isLeftGroupActive() const {return _IsLeftGroupActive;}
virtual void serial(NLMISC::IStream &f);
protected:
enum TBar
{
// Living entity Forage source
<<<<<<< HEAD
ChaScore1 = 0, Time = ChaScore1, // If making changes to this enum, please update
ChaScore3, Amount = ChaScore3, // CForageSourceCL::updateVisualPropertyBars() and
ChaScore2, Life = ChaScore2, // updateVisiblePostPos() because the ChaScore1/ChaScore3/ChaScore2
ChaScore4, Danger = ChaScore4, // properties are *not* in an array in CEntityCL.
=======
HP = 0, Time = HP, // If making changes to this enum, please update
SAP, Amount = SAP, // CForageSourceCL::updateVisualPropertyBars() and
STA, Life = STA, // updateVisiblePostPos() because the HP/SAP/STA
Focus, Danger = Focus, // properties are *not* in an array in CEntityCL.
>>>>>>> ryzomcore
Action, Spawn = Action,
NumBars
};
/// Fill NumBars elements into bars and set dbEntry
static void getBarSettings( CInterfaceManager* pIM, bool isUser, bool isPlayer, bool isFriend, int &dbEntry, bool *bars );
// The entity (character or forage source)
CEntityCL *_Entity;
// View text
class CViewText *_Name;
class CViewText *_Title;
class CViewText *_GuildName;
class CViewText *_TribeName;
class CViewText *_EventFaction;
// for Ring, symbol of permanent content
class CViewBitmap *_PermanentContent;
class CViewBitmap *_Bars[NumBars];
class CViewBitmap *_Target;
class CViewBitmap *_MissionTarget;
static uint _BatLength;
static NLMISC::CRGBA BarColor[NumBars];
<<<<<<< HEAD
static NLMISC::CRGBA BarColorChaScore1Negative;
=======
static NLMISC::CRGBA BarColorHPNegative;
>>>>>>> ryzomcore
// Node user leaf
static NLMISC::CCDBNodeLeaf *_Value;
static NLMISC::CCDBNodeLeaf *_ValueBegin;
static NLMISC::CCDBNodeLeaf *_ValueEnd;
// Guild icon leafs
static NLMISC::CRefPtr<NLMISC::CCDBNodeLeaf> _GuildIconLeaf[256];
// Special guild
bool _NeedGuildNameId;
bool _NeedGuildSymbolId;
bool _IsLeftGroupActive;
static CGroupInSceneUserInfo *newGroupInScene(const std::string &templateName, const std::string &id);
};
#endif // CL_GROUP_IN_SCENE_USER_INFO_HELP_H

View file

@ -1,111 +0,0 @@
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010 Winch Gate Property Limited
//
// 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/>.
#ifndef CL_GROUP_IN_SCENE_USER_INFO_HELP_H
#define CL_GROUP_IN_SCENE_USER_INFO_HELP_H
#include "nel/misc/types_nl.h"
#include "group_in_scene.h"
/**
* Compas group
* \author Cyril 'Hulud' Corvazier
* \author Nevrax France
* \date 2003
*/
class CGroupInSceneUserInfo : public CGroupInScene
{
public:
DECLARE_UI_CLASS(CGroupInSceneUserInfo)
// Constructor
CGroupInSceneUserInfo(const TCtorParam &param);
~CGroupInSceneUserInfo();
// Build the bar
// You must rebuild if guild or title change
static CGroupInSceneUserInfo *build (class CEntityCL *entity);
// release a group in scene. The group is then put in cache for futur reuse
//static void release(CGroupInSceneUserInfo *group);
// Show or hide the bar group
void setLeftGroupActive( bool active );
// Update dynamic data : "Selection", "Bars"
// Call it at each frame for visible title
void updateDynamicData ();
// Tells if this group actually want guildName or guildSymbol => must rebuild interface if changes
bool needGuildNameId() const {return _NeedGuildNameId;}
bool needGuildSymbolId() const {return _NeedGuildSymbolId;}
bool isLeftGroupActive() const {return _IsLeftGroupActive;}
virtual void serial(NLMISC::IStream &f);
protected:
enum TBar
{
// Living entity Forage source
HP = 0, Time = HP, // If making changes to this enum, please update
SAP, Amount = SAP, // CForageSourceCL::updateVisualPropertyBars() and
STA, Life = STA, // updateVisiblePostPos() because the HP/SAP/STA
Focus, Danger = Focus, // properties are *not* in an array in CEntityCL.
Action, Spawn = Action,
NumBars
};
/// Fill NumBars elements into bars and set dbEntry
static void getBarSettings( CInterfaceManager* pIM, bool isUser, bool isPlayer, bool isFriend, std::string& dbEntry, bool *bars );
// The entity (character or forage source)
CEntityCL *_Entity;
// View text
class CViewText *_Name;
class CViewText *_Title;
class CViewText *_GuildName;
class CViewText *_TribeName;
class CViewText *_EventFaction;
// for Ring, symbol of permanent content
class CViewBitmap *_PermanentContent;
class CViewBitmap *_Bars[NumBars];
class CViewBitmap *_Target;
class CViewBitmap *_MissionTarget;
static uint _BatLength;
static NLMISC::CRGBA BarColor[NumBars];
static NLMISC::CRGBA BarColorHPNegative;
// Node user leaf
static CCDBNodeLeaf *_Value;
static CCDBNodeLeaf *_ValueBegin;
static CCDBNodeLeaf *_ValueEnd;
// Special guild
bool _NeedGuildNameId;
bool _NeedGuildSymbolId;
bool _IsLeftGroupActive;
static CGroupInSceneUserInfo *newGroupInScene(const std::string &templateName, const std::string &id);
};
#endif // CL_GROUP_IN_SCENE_USER_INFO_HELP_H

View file

@ -1,114 +0,0 @@
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010 Winch Gate Property Limited
//
// 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/>.
#ifndef CL_GROUP_IN_SCENE_USER_INFO_HELP_H
#define CL_GROUP_IN_SCENE_USER_INFO_HELP_H
#include "nel/misc/types_nl.h"
#include "group_in_scene.h"
/**
* Compas group
* \author Cyril 'Hulud' Corvazier
* \author Nevrax France
* \date 2003
*/
class CGroupInSceneUserInfo : public CGroupInScene
{
public:
DECLARE_UI_CLASS(CGroupInSceneUserInfo)
// Constructor
CGroupInSceneUserInfo(const TCtorParam &param);
~CGroupInSceneUserInfo();
// Build the bar
// You must rebuild if guild or title change
static CGroupInSceneUserInfo *build (class CEntityCL *entity);
// release a group in scene. The group is then put in cache for futur reuse
//static void release(CGroupInSceneUserInfo *group);
// Show or hide the bar group
void setLeftGroupActive( bool active );
// Update dynamic data : "Selection", "Bars"
// Call it at each frame for visible title
void updateDynamicData ();
// Tells if this group actually want guildName or guildSymbol => must rebuild interface if changes
bool needGuildNameId() const {return _NeedGuildNameId;}
bool needGuildSymbolId() const {return _NeedGuildSymbolId;}
bool isLeftGroupActive() const {return _IsLeftGroupActive;}
virtual void serial(NLMISC::IStream &f);
protected:
enum TBar
{
// Living entity Forage source
ChaScore1 = 0, Time = ChaScore1, // If making changes to this enum, please update
ChaScore3, Amount = ChaScore3, // CForageSourceCL::updateVisualPropertyBars() and
ChaScore2, Life = ChaScore2, // updateVisiblePostPos() because the ChaScore1/ChaScore3/ChaScore2
ChaScore4, Danger = ChaScore4, // properties are *not* in an array in CEntityCL.
Action, Spawn = Action,
NumBars
};
/// Fill NumBars elements into bars and set dbEntry
static void getBarSettings( CInterfaceManager* pIM, bool isUser, bool isPlayer, bool isFriend, int &dbEntry, bool *bars );
// The entity (character or forage source)
CEntityCL *_Entity;
// View text
class CViewText *_Name;
class CViewText *_Title;
class CViewText *_GuildName;
class CViewText *_TribeName;
class CViewText *_EventFaction;
// for Ring, symbol of permanent content
class CViewBitmap *_PermanentContent;
class CViewBitmap *_Bars[NumBars];
class CViewBitmap *_Target;
class CViewBitmap *_MissionTarget;
static uint _BatLength;
static NLMISC::CRGBA BarColor[NumBars];
static NLMISC::CRGBA BarColorChaScore1Negative;
// Node user leaf
static NLMISC::CCDBNodeLeaf *_Value;
static NLMISC::CCDBNodeLeaf *_ValueBegin;
static NLMISC::CCDBNodeLeaf *_ValueEnd;
// Guild icon leafs
static NLMISC::CRefPtr<NLMISC::CCDBNodeLeaf> _GuildIconLeaf[256];
// Special guild
bool _NeedGuildNameId;
bool _NeedGuildSymbolId;
bool _IsLeftGroupActive;
static CGroupInSceneUserInfo *newGroupInScene(const std::string &templateName, const std::string &id);
};
#endif // CL_GROUP_IN_SCENE_USER_INFO_HELP_H

View file

@ -1,114 +0,0 @@
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010 Winch Gate Property Limited
//
// 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/>.
#ifndef CL_GROUP_IN_SCENE_USER_INFO_HELP_H
#define CL_GROUP_IN_SCENE_USER_INFO_HELP_H
#include "nel/misc/types_nl.h"
#include "group_in_scene.h"
/**
* Compas group
* \author Cyril 'Hulud' Corvazier
* \author Nevrax France
* \date 2003
*/
class CGroupInSceneUserInfo : public CGroupInScene
{
public:
DECLARE_UI_CLASS(CGroupInSceneUserInfo)
// Constructor
CGroupInSceneUserInfo(const TCtorParam &param);
~CGroupInSceneUserInfo();
// Build the bar
// You must rebuild if guild or title change
static CGroupInSceneUserInfo *build (class CEntityCL *entity);
// release a group in scene. The group is then put in cache for futur reuse
//static void release(CGroupInSceneUserInfo *group);
// Show or hide the bar group
void setLeftGroupActive( bool active );
// Update dynamic data : "Selection", "Bars"
// Call it at each frame for visible title
void updateDynamicData ();
// Tells if this group actually want guildName or guildSymbol => must rebuild interface if changes
bool needGuildNameId() const {return _NeedGuildNameId;}
bool needGuildSymbolId() const {return _NeedGuildSymbolId;}
bool isLeftGroupActive() const {return _IsLeftGroupActive;}
virtual void serial(NLMISC::IStream &f);
protected:
enum TBar
{
// Living entity Forage source
HP = 0, Time = HP, // If making changes to this enum, please update
SAP, Amount = SAP, // CForageSourceCL::updateVisualPropertyBars() and
STA, Life = STA, // updateVisiblePostPos() because the HP/SAP/STA
Focus, Danger = Focus, // properties are *not* in an array in CEntityCL.
Action, Spawn = Action,
NumBars
};
/// Fill NumBars elements into bars and set dbEntry
static void getBarSettings( CInterfaceManager* pIM, bool isUser, bool isPlayer, bool isFriend, int &dbEntry, bool *bars );
// The entity (character or forage source)
CEntityCL *_Entity;
// View text
class CViewText *_Name;
class CViewText *_Title;
class CViewText *_GuildName;
class CViewText *_TribeName;
class CViewText *_EventFaction;
// for Ring, symbol of permanent content
class CViewBitmap *_PermanentContent;
class CViewBitmap *_Bars[NumBars];
class CViewBitmap *_Target;
class CViewBitmap *_MissionTarget;
static uint _BatLength;
static NLMISC::CRGBA BarColor[NumBars];
static NLMISC::CRGBA BarColorHPNegative;
// Node user leaf
static NLMISC::CCDBNodeLeaf *_Value;
static NLMISC::CCDBNodeLeaf *_ValueBegin;
static NLMISC::CCDBNodeLeaf *_ValueEnd;
// Guild icon leafs
static NLMISC::CRefPtr<NLMISC::CCDBNodeLeaf> _GuildIconLeaf[256];
// Special guild
bool _NeedGuildNameId;
bool _NeedGuildSymbolId;
bool _IsLeftGroupActive;
static CGroupInSceneUserInfo *newGroupInScene(const std::string &templateName, const std::string &id);
};
#endif // CL_GROUP_IN_SCENE_USER_INFO_HELP_H

View file

@ -1497,14 +1497,7 @@ void CInterfaceManager::updateFrameEvents()
// literal version
// str = CI18N::get("uiDate");
/* str += toString("%02d", (sint)RT.getRyzomTime()) + CI18N::get("uiMissionTimerHour") + " - ";
str += CI18N::get("ui"+WEEKDAY::toString( (WEEKDAY::EWeekDay)RT.getRyzomDayOfWeek() )) + ", ";
str += CI18N::get("ui"+MONTH::toString( (MONTH::EMonth)RT.getRyzomMonthInCurrentCycle() )) + " ";
str += toString("%02d", RT.getRyzomDayOfMonth()+1) + ", ";
str += CI18N::get("uiAtysianCycle" + toString(RT.getRyzomCycle()+1) + "Ordinal") + " " + CI18N::get("uiAtysianCycle") + " ";
str += toString("%04d", RT.getRyzomYear());*/
pVT = dynamic_cast<CViewText*>(CWidgetManager::getInstance()->getElementFromId("ui:interface:map:content:map_content:time"));
str += toString("%02d", (sint)RT.getRyzomTime()) + CI18N::get("uiMissionTimerHour") + " - ";
str += toString("%d", (sint)RT.getRyzomWeek()) + " ";
str += CI18N::get("ui"+WEEKDAY::toString( (WEEKDAY::EWeekDay)RT.getRyzomDayOfWeek() )) + " - ";
ucstring year = RT.getRyzomYearStr();
@ -1529,8 +1522,6 @@ void CInterfaceManager::updateFrameEvents()
pVT->setText(str);
}
}
}
}
}
}
@ -1961,19 +1952,22 @@ bool CInterfaceManager::saveConfig (const string &filename)
{
nlwarning("Bad user dyn chat saving");
return false;
catch(const NLMISC::EStream &)
{
nlwarning("Bad user dyn chat saving");
return false;
}
f.close();
}
catch(const NLMISC::EStream &)
{
nlwarning("Config saving failed.");
return false;
}
ContinentMngr.serialFOWMaps();
return true;
}
// ------------------------------------------------------------------------------------------------
void CInterfaceManager::drawViews(NL3D::UCamera camera)
{
IngameDbMngr.flushObserverCalls();
@ -2062,6 +2056,7 @@ public:
{
this->reset = reset;
}
void visitGroup( CInterfaceGroup *group )
{
const std::vector< CViewBase* > &vs = group->getViews();

View file

@ -896,55 +896,6 @@ void initAltLogin()
LoginSM.pushEvent(CLoginStateMachine::ev_login_not_alt);
}
void initAltLogin()
{
// Check the alt param
if (!LoginCustomParameters.empty())
{
// don't use login and password for alternate login
string res = checkLogin("", "", ClientApp, LoginCustomParameters);
if (res.empty())
{
if (ClientCfg.R2Mode)
{
LoginSM.pushEvent(CLoginStateMachine::ev_login_ok);
}
else
{
// Select good shard
ShardSelected = -1;
for (uint32 i = 0; i < Shards.size(); ++i)
{
if (Shards[i].ShardId == LoginShardId)
{
ShardSelected = i;
break;
}
}
if (ShardSelected == -1)
{
CInterfaceManager *pIM = CInterfaceManager::getInstance();
pIM->messageBoxWithHelp(CI18N::get("uiErrServerLost"), "ui:login");
LoginSM.pushEvent(CLoginStateMachine::ev_quit);
}
else
{
LoginSM.pushEvent(CLoginStateMachine::ev_login_ok);
}
}
return;
}
}
// close the socket in case of error
HttpClient.disconnect();
// ignore error
LoginSM.pushEvent(CLoginStateMachine::ev_login_not_alt);
}
// ***************************************************************************
// Called from client.cpp
@ -1195,7 +1146,7 @@ void initShardDisplay()
for (uint fff = 0; fff < 20; ++fff)
{
CShard s ( toString("%05d",fff), fff%3, fff+32, toString("%s%d","pipo",fff),
32*fff%46546, "32.32.32.32", "http://www.ryzomcore.org" );
32*fff%46546, "32.32.32.32", "http://www.ryzom.com" );
Shards.push_back(s);
}*/
@ -1322,7 +1273,7 @@ void onlogin(bool vanishScreen = true)
// for (uint fff = 0; fff < 20; ++fff)
// {
// CShard s ( toString("%05d",fff), fff%3, fff+32, toString("%s%d","pipo",fff),
// 32*fff%46546, "32.32.32.32", "http://www.ryzomcore.org" );
// 32*fff%46546, "32.32.32.32", "http://www.ryzom.com" );
// Shards.push_back(s);
// }*/
//

View file

@ -323,152 +323,6 @@ static void ConvertFileTimeToString(const CNtfsFileTime *nt, char *s)
UIntToStr_2(s, sec); s[2] = 0;
}
#ifdef _WIN32
#ifndef USE_WINDOWS_FILE
static UINT g_FileCodePage = CP_ACP;
#endif
#define MY_FILE_CODE_PAGE_PARAM ,g_FileCodePage
#else
#define MY_FILE_CODE_PAGE_PARAM
#endif
static WRes MyCreateDir(const UInt16 *name)
{
#ifdef USE_WINDOWS_FILE
return CreateDirectoryW((LPCWSTR)name, NULL) ? 0 : GetLastError();
#else
CBuf buf;
WRes res;
Buf_Init(&buf);
RINOK(Utf16_To_Char(&buf, name MY_FILE_CODE_PAGE_PARAM));
res =
#ifdef _WIN32
_mkdir((const char *)buf.data)
#else
mkdir((const char *)buf.data, 0777)
#endif
== 0 ? 0 : errno;
Buf_Free(&buf, &g_Alloc);
return res;
#endif
}
static WRes OutFile_OpenUtf16(CSzFile *p, const UInt16 *name)
{
#ifdef USE_WINDOWS_FILE
return OutFile_OpenW(p, (const WCHAR *)name);
#else
CBuf buf;
WRes res;
Buf_Init(&buf);
RINOK(Utf16_To_Char(&buf, name MY_FILE_CODE_PAGE_PARAM));
res = OutFile_Open(p, (const char *)buf.data);
Buf_Free(&buf, &g_Alloc);
return res;
#endif
}
static SRes PrintString(const UInt16 *s)
{
CBuf buf;
SRes res;
Buf_Init(&buf);
res = Utf16_To_Char(&buf, s
#ifndef _USE_UTF8
, CP_OEMCP
#endif
);
if (res == SZ_OK)
fputs((const char *)buf.data, stdout);
Buf_Free(&buf, &g_Alloc);
return res;
}
static void UInt64ToStr(UInt64 value, char *s)
{
char temp[32];
int pos = 0;
do
{
temp[pos++] = (char)('0' + (unsigned)(value % 10));
value /= 10;
}
while (value != 0);
do
*s++ = temp[--pos];
while (pos);
*s = '\0';
}
static char *UIntToStr(char *s, unsigned value, int numDigits)
{
char temp[16];
int pos = 0;
do
temp[pos++] = (char)('0' + (value % 10));
while (value /= 10);
for (numDigits -= pos; numDigits > 0; numDigits--)
*s++ = '0';
do
*s++ = temp[--pos];
while (pos);
*s = '\0';
return s;
}
static void UIntToStr_2(char *s, unsigned value)
{
s[0] = (char)('0' + (value / 10));
s[1] = (char)('0' + (value % 10));
}
#define PERIOD_4 (4 * 365 + 1)
#define PERIOD_100 (PERIOD_4 * 25 - 1)
#define PERIOD_400 (PERIOD_100 * 4 + 1)
static void ConvertFileTimeToString(const CNtfsFileTime *nt, char *s)
{
unsigned year, mon, hour, min, sec;
Byte ms[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
unsigned t;
UInt32 v;
UInt64 v64 = nt->Low | ((UInt64)nt->High << 32);
v64 /= 10000000;
sec = (unsigned)(v64 % 60); v64 /= 60;
min = (unsigned)(v64 % 60); v64 /= 60;
hour = (unsigned)(v64 % 24); v64 /= 24;
v = (UInt32)v64;
year = (unsigned)(1601 + v / PERIOD_400 * 400);
v %= PERIOD_400;
t = v / PERIOD_100; if (t == 4) t = 3; year += t * 100; v -= t * PERIOD_100;
t = v / PERIOD_4; if (t == 25) t = 24; year += t * 4; v -= t * PERIOD_4;
t = v / 365; if (t == 4) t = 3; year += t; v -= t * 365;
if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0))
ms[1] = 29;
for (mon = 0;; mon++)
{
unsigned d = ms[mon];
if (v < d)
break;
v -= d;
}
s = UIntToStr(s, year, 4); *s++ = '-';
UIntToStr_2(s, mon + 1); s[2] = '-'; s += 3;
UIntToStr_2(s, (unsigned)v + 1); s[2] = ' '; s += 3;
UIntToStr_2(s, hour); s[2] = ':'; s += 3;
UIntToStr_2(s, min); s[2] = ':'; s += 3;
UIntToStr_2(s, sec); s[2] = 0;
}
void PrintError(const char *sz)
{
printf("\nERROR: %s\n", sz);

View file

@ -1626,17 +1626,10 @@ Arguments: s(actionName),s(url) ->
()setUrl("Click on Me", "http://www.domain.com/script.pChaScore1");
@endcode
*/
// CGroup
void setUrl_ss_(CStateInstance* entity, CScriptStack& stack)
{
std::string url = (std::string)stack.top();stack.pop();
std::string actionName = (std::string)stack.top();stack.pop();
CSpawnBot* pbot = botIt->getSpawnObj();
if (pbot!=NULL)
{
msg.Entities.push_back(pbot->dataSetRow());
}
}
std::string url = (std::string)stack.top();stack.pop();
std::string actionName = (std::string)stack.top();stack.pop();

View file

@ -952,19 +952,19 @@ ENTITY_VARIABLE(ChaScore1, "ChaScore1 of a player")
}
}
ENTITY_VARIABLE(MaxHP, "Max hit points of a player")
ENTITY_VARIABLE(MaxChaScore1, "Max ChaScore1 of a player")
{
ENTITY_GET_ENTITY
if (get)
{
value = toString (e->maxHp());
value = toString (e->maxChaScore1());
}
else
{
sint32 v;
NLMISC::fromString(value, v);
e->getScores()._PhysicalScores[SCORES::hit_points].Max = v;
e->getScores()._PhysicalScores[SCORES::cha_score1].Max = v;
}
}
@ -2801,7 +2801,7 @@ NLMISC_COMMAND(respawnAfterDeath,"respawnAfterDeath at re-spawn point name, it m
//-----------------------------------------------
// Simulate Resurrection by other PC until UI is ready
//-----------------------------------------------
NLMISC_COMMAND(resurrected,"Another PC resurrect PC by giving some energy","<player id(id:type:crea:dyn)><Hp gived><Sta gived><Sap gived><Focus gived>")
NLMISC_COMMAND(resurrected,"Another PC resurrect PC by giving some energy","<player id(id:type:crea:dyn)><ChaScore1 removed><ChaScore2 removed><ChaScore3 removed><ChaScore4 gived>")
{
if( args.size() == 1 )
{

View file

@ -1359,16 +1359,6 @@ void addParam(const std::string &paramStr, std::vector<TBrickParam::IIdPtr> &Par
Params.push_back(new CSBrickParamChaScore3Aura2(tail));
break;
case TBrickParam::SP_SAP_AURA2:
// $*STRUCT CSBrickParamSapAura2 TBrickParam::SP_SAP_AURA2
// $*-i uint16 RegenMod // regen modifier (in %) proportionally to item level
// $*-f float Duration // duration in seconds
// $*-f float Radius // aura radius in meters
// $*-f float TargetDisableTime // disable life aura for x seconds on targets
// $*-f float UserDisableTime // disable life aura for x seconds on user
Params.push_back(new CSBrickParamSapAura2(tail));
break;
case TBrickParam::SP_SPEEDING_UP:
// $*STRUCT CSBrickParamSpeedingUp TBrickParam::SP_SPEEDING_UP
// $*-i uint16 SpeedMod // speed modifier (in %)

View file

@ -3851,53 +3851,7 @@ struct CSBrickParamChaScore1Aura : public TBrickParam::IId
struct CSBrickParamChaScore1Aura2 : public TBrickParam::IId
{
// regen modifier (in %)
uint16 RegenMod;
// duration in seconds
float Duration;
// aura radius in meters
float Radius;
// disable life aura for x seconds on targets
float TargetDisableTime;
// disable life aura for x seconds on user
float UserDisableTime;
CSBrickParamLifeAura2():
RegenMod(),
Duration(),
Radius(),
TargetDisableTime(),
UserDisableTime()
{
_Id = TBrickParam::SP_LIFE_AURA2;
}
CSBrickParamLifeAura2(const std::string&str)
{
*this=CSBrickParamLifeAura2();
*this=str;
}
const CSBrickParamLifeAura2& operator=(const std::string& input)
{
std::vector<std::string> args;
convertInput(args, input);
if (args.size()!=5)
return *this;
ParsedOk=true;
RegenMod=atoi(args[0].c_str());
Duration=(float)atof(args[1].c_str());
Radius=(float)atof(args[2].c_str());
TargetDisableTime=(float)atof(args[3].c_str());
UserDisableTime=(float)atof(args[4].c_str());
return *this;
}
};
{
// regen modifier (in %)
uint16 RegenMod;
// duration in seconds

View file

@ -198,25 +198,6 @@ void CSpecialPowerPhrase::processParams(const vector<TBrickParam::IIdPtr> &param
}
break;
case TBrickParam::SP_LIFE_AURA2:
{
// $*STRUCT CSBrickParamLifeAura: public TBrickParam::CId <TBrickParam::SP_LIFE_AURA2>
// $*-i uint16 RegenMod // regen modifier proportionally to item level
// $*-f float Duration // duration in seconds
// $*-f float Radius // aura radius in meters
// $*-f float TargetDisableTime // disable life aura for x seconds on targets
// $*-f float UserDisableTime // disable life aura for x seconds on user
CSpecialPowerBasicAura *lifeAura = new CSpecialPowerBasicAura(_ActorRowId, this, ((CSBrickParamLifeAura *)param)->Duration, ((CSBrickParamLifeAura *)param)->UserDisableTime, ((CSBrickParamLifeAura *)param)->TargetDisableTime, POWERS::LifeAura);
if (lifeAura)
{
lifeAura->setRadius(((CSBrickParamLifeAura *)param)->Radius);
lifeAura->setFamilies(EFFECT_FAMILIES::PowerRootLifeAura,EFFECT_FAMILIES::PowerLifeAura );
lifeAura->setParamValue(((CSBrickParamLifeAura *)param)->RegenMod*quality);
lifeAura->setByPass(isConsumable);
}
}
break;
case TBrickParam::SP_ChaScore1_AURA2:
{
// $*STRUCT CSBrickParamChaSCore1Aura: public TBrickParam::CId <TBrickParam::SP_ChaScore1_AURA2>
@ -237,19 +218,6 @@ void CSpecialPowerPhrase::processParams(const vector<TBrickParam::IIdPtr> &param
}
break;
case TBrickParam::SP_STAMINA_AURA2:
{
CSpecialPowerBasicAura *staminaAura = new CSpecialPowerBasicAura(_ActorRowId, this, ((CSBrickParamStaminaAura*)param)->Duration, ((CSBrickParamLifeAura *)param)->UserDisableTime, ((CSBrickParamStaminaAura *)param)->TargetDisableTime, POWERS::StaminaAura);
if (staminaAura)
{
staminaAura->setRadius(((CSBrickParamStaminaAura *)param)->Radius);
staminaAura->setFamilies(EFFECT_FAMILIES::PowerRootStaminaAura,EFFECT_FAMILIES::PowerStaminaAura );
staminaAura->setParamValue(((CSBrickParamStaminaAura *)param)->RegenMod*quality);
staminaAura->setByPass(isConsumable);
}
}
break;
case TBrickParam::SP_ChaScore2_AURA:
{
CSpecialPowerBasicAura *ChaScore2Aura = new CSpecialPowerBasicAura(_ActorRowId, this, ((CSBrickParamChaScore2Aura*)param)->Duration, ((CSBrickParamChaScore1Aura *)param)->UserDisableTime, ((CSBrickParamChaScore2Aura *)param)->TargetDisableTime, POWERS::ChaScore2Aura);

View file

@ -15886,18 +15886,6 @@ bool CCharacter::isFriendOf(const NLMISC::CEntityId &id)
return false;
}
//--------------------------------------------------------------
// CCharacter::referencedAsFriendBy()
//--------------------------------------------------------------
void CCharacter::referencedAsFriendBy( const NLMISC::CEntityId &id)
{
if (isFriendOf(id))
{
return;
}
return false;
}
//--------------------------------------------------------------
// CCharacter::referencedAsFriendBy()
//--------------------------------------------------------------
@ -19565,6 +19553,9 @@ void CCharacter::setLeagueId(TChanID id, bool removeIfEmpty)
CPVPManager2::getInstance()->broadcastMessage(id, string("<INFO>"), "<-- "+name);
}
_LeagueId = id;
updatePVPClanVP();
}
//------------------------------------------------------------------------------

View file

@ -528,15 +528,6 @@ void CPVPManager2::removeFactionChannelForCharacter(TChanID channel, CCharacter
_CharacterChannels.erase(user->getId());
_CharacterChannels.insert(make_pair(user->getId(), currentChannels));
}
// Update channel list for player
currentChannels.erase(currentChannels.begin() + i);
std::map< NLMISC::CEntityId, std::vector<TChanID> >::iterator it = _CharacterChannels.find(user->getId());
if( it != _CharacterChannels.end() )
{
_CharacterChannels.erase(user->getId());
_CharacterChannels.insert(make_pair(user->getId(), currentChannels));
}
}
}
@ -778,7 +769,6 @@ PVP_RELATION::TPVPRelation CPVPManager2::getPVPRelation( CCharacter * actor, CEn
relationTmp = PVP_RELATION::NeutralPVP;
}
relation = relationTmp;
}
}
////////////////////////////////////////////////////////
}

View file

@ -1,43 +0,0 @@
*HASH_VALUE bodypartID name ia da p pia pda description
_ACB9BC721BA65099 HHead head a the heads \d the
_278A7C5D654814CD HChest chest a the chests \d the
_A2D940906B29B889 HArms arms \d the arms \d the
_B1CAFC85DB767C9C HHands hands \d the hands \d the
_20A8389BAC987C9F HLegs legs \d the legs \d the
_E18820962C586494 HFeet feet \d the feet \d the
_ACB9BC7B1B375099 QHead head a the heads \d the
_E80BB4A21A9838B5 QBody body a the bodies \d the
_C96F0919D2F8DC71 QFrontPaws forelegs \d the forelegs \d the
_08A1A8FEABC3CD11 QFrontHooves forelegs \d the forelegs \d the
_23B95F02A87957B0 QRearPaws hind legs \d the hind legs \d the
_D880990C5BE9DCB7 QRearHooves hind legs \d the hind legs \d the
_2836645DDE8874AD LKHead head a the heads \d the
_ED86C05FE298A4B9 LKBody body a the bodies \d the
_39BFC0EBE486B512 LKFrontPaws1 forelegs \d the forelegs \d the
_79BFC0EBE486B512 LKFrontPaws2 forelegs \d the forelegs \d the
_D92BB508D8F884A6 LKRearPaws1 hind legs \d the hind legs \d the
_D93BB508D8F884A6 LKRearPaws2 hind legs \d the hind legs \d the
_283664575C8874AD FKHead head a the heads \d the
_ED86C0596098A4B9 FKBody body a the bodies \d the
_DBBA7473640310B0 FKPaws1 legs \d the legs \d the
_1BBA7473641310B0 FKPaws2 legs \d the legs \d the
_66B6A47A4A7ADCC2 FKWings1 wings \d the wings \d the
_66B6A47ACA7ADCC2 FKWings2 wings \d the wings \d the
_ACB9BC701B865099 FHead head a the heads \d the
_E80BB4971AE738B5 FBody body a the bodies \d the
_C40D15A82A36DF2C FFrontFins1 fore fins \d the fore fins \d the
_C41D15A82A36DF2C FFrontFins2 fore fins \d the fore fins \d the
_67B624EBAAF630A4 FRearFins1 hind fins \d the hind fins \d the
_67B628EBAAF630A4 FRearFins2 hind fins \d the hind fins \d the
_ACB9BC6C1B465099 BHead head a the heads \d the
_E80BB4931AA738B5 BBody body a the bodies \d the
_25897F8F25594780 BFeet1 feet \d the feet \d the
_2589838F25594B80 BFeet2 feet \d the feet \d the
_2C68746BA436D3C2 BWings1 wings \d the wings \d the
_2C68746BA446D7C2 BWings2 wings \d the wings \d the
_8061E6E18C3EA521 PUpperTrunk upper trunk an the upper trunks \d the
_ECEA3087A666CCC3 Ptrunk trunk a the trunks \d the
_E7469C4D9B5A0C9D PLeaves1 leaf a the leaves \d the
_E7469C4DDB5A0C9D PLeaves2 leaf a the leaves \d the
_C3EE9906771FB524 PLowerTrunk lower trunk a the lower trunks \d the
_DFA67A5CC7DECDE6 PVisibleRoots visible root a the visible roots \d the

View file

@ -0,0 +1,9 @@
*HASH_VALUE career ID name * noms français ia da p pia pda
_1700C956C37FB64F MeleeFighter Melee Fighter Combattant Contact a the Melee Fighters the
_9720B95DC35FBA54 RangeFighter Range Fighter Combattant Distance a the Range Fighters the
_D32171700AD23D57 AttackCaster Attack Caster Caster Attaque an the Attack Casters the
_9A511D668371AE04 BufferCaster Buffer Caster Caster Buffer a the Buffer Casters the
_1C01F56701816E0A HealerCaster Healer Caster Caster Healer a the Healer Casters the
_A6473C7A6A380099 Ranger Ranger Ranger a the Rangers the
_EA665D00EAE788B3 Shopkeeper Merchant Marchand a the Merchants the
_2D28B08D636AEC9E Artisan Crafter Crafter a the Crafters the

View file

@ -0,0 +1,9 @@
*HASH_VALUE characteristic_ID name
_B009C46E316AACBF Constitution constitution
_661AAC8EE6098C96 Metabolism metabolism
_E45ADC6364A9D4A6 Intelligence intelligence
_E7DB9090281BA0A8 Wisdom wisdom
_649C448C681C74B8 Strength strength
_6A880849E7D8DC86 WellBalanced balance
_ADB8DC9A6C5A10B6 Dexterity dexterity
_6C18945C6C1894DC Will will

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,33 @@
*HASH_VALUE job ID name * noms français ia da p pia pda
_7B0C6949087BEF17 IreFighter Ire Fighter guerrier fou an the Ire Fighters the
_DA264262C82FA5E4 Swashbuckler Swashbuckler bretteur a the Swashbucklers the
_FF1001FD1B8460C5 KamicFist Kamic Fist poing kamique a the Kamic Fists the
_E9959ADC3E303D21 BladeBearer Blade Bearer porte lame a the Blade Bearers the
_AF5E35F1250C04D2 WindChild Wind Child enfant des vents a the Wind Children the
_2F47F87A6F381C99 Runner Runner courreur a the Runners the
_73AAF09AE4B710A3 Scout Scout éclaireur a the Scouts the
_C66185C2249CA8A6 FireLance Fire Lancer lance-feu a the Fire Lancers the
_296AE474AB790894 Witherer Witherer fletrisseur a the Witherers the
_AD68C069ED7714A0 Fouler Fouler pestilent a the Foulers the
_B290F10227B8C8B3 Disturber Disturber troubleur d'esprit a the Disturbers the
_0250C5039B06F5C8 KamicFury Kamic Fury furie kamique a the Kamic Furies the
_757B279C53FC9BAB SpiritualShield Spiritual Shield bouclier spirituel a the Spiritual Shields the
_EE4990771C86D494 Faker Faker trompeur a the Fakers the
_A045250E026EC63E WindGuardian Wind Guardian gardien des vents a the Wind Guardians the
_0B806EC710885A48 KamicGuardian Kamic Guardian bouclier kamique a the Kamic Guardians the
_C4438A71C41C6642 SecondBreath Second Breath second souffle a the Second Breaths the
_2FE51E469C502DFD LifeStealer Life Stealer voleur de vie a the Life Stealers the
_FEBE4D8AEEBD5D18 SecondLife Second Life seconde vie a the Second Lives the
_B7AF21058A5F88E1 SapCristal Sap Crystal cristal de sève a the Sap Crystals the
_DE48CAEB05734249 ScarletHunter Scarlet Hunter chasseur écarlate a the Scarlet Hunters the
_31D7E2E30551753A GreenHunter Green Hunter chasseur vert a the Green Hunters the
_06635A6B444DEE4C ShadowHunter Shadow Hunter chasseur de l'ombre a the Shadow Hunters the
_99D26A1506D4F24B AtysGuardian Atys Guardian gardien d'atys an the Atys Guardians the
_2BB7F7E25BC3D54D SandCaravanner Sand Karavanner caravanier des sables a the Sand Karavanners the
_7CD608D036D57BF2 ImperialSupplier Imperial Supplier pourvoyeur impérial an the Imperial Suppliers the
_6C49C893E6B9849D Steward Steward intendants a the Stewards the
_A8C84C6F6A9710A2 Hawker Hawker colporteurs a the Hawkers the
_44BE25E43BDAF009 FireMaster Fire Master maitre du feu a the Fire Masters the
_0BF32E6C860E7A26 FlowerMaster Flower Master maitre des fleurs a the Flower Masters the
_802D1DEA3BDAF002 LakeMaster Lake Master maitre des lacs a the Lake Masters the
_348DF50C62FA70BB SapMaster Sap Master maitre de la sève a the Sap Masters the

View file

@ -0,0 +1,5 @@
*HASH_VALUE score_ID name point ia points
_BE6C89EE2F599BBE HitPoints HP hit point a hit points
_B0DF4A6ECA004C1B Stamina stamina stamina point a stamina points
_174A57AA672A04AA Sap sap sap point a sap points
_DB69E9025629B0BA Focus focus focus point a focus points

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff