2
3
mirror of https://foundry.openuru.org/gitblit/r/CWE-ou-minkata.git synced 2025-07-14 02:27:40 -04:00

Initial port of Mystler's code

Add coding from Mystler's original commits

(cherry picked from commit 6b3b966f81)
This commit is contained in:
Mystler
2022-02-03 20:47:39 -05:00
committed by rarified
parent dfc89b363c
commit b0511ea068
3 changed files with 83 additions and 1 deletions

View File

@ -1600,6 +1600,60 @@ void cyAvatar::PlaySimpleAnimation(const char* animName)
} }
} }
/////////////////////////////////////////////////////////////////////////////
//
// Function : SaveClothingToFile
// PARAMETERS : filename - file to save to
//
// PURPOSE : Save the avatar's clothing to a file. If only a filename is
// given, it will write to UserData/Avatars.
//
bool cyAvatar::SaveClothingToFile(plFileName filename)
{
if (fRecvr.Count() > 0) {
plArmatureMod* avatar = plAvatarMgr::FindAvatar(fRecvr[0]);
if (avatar) {
plClothingOutfit* cl = avatar->GetClothingOutfit();
if (cl) {
// Save file in UserData/Avatars if only a filename is given
if (!filename.StripFileName().IsValid()) {
plFileName path = plFileName::Join(plFileSystem::GetUserDataPath(), "Avatars");
plFileSystem::CreateDir(path, true);
filename = plFileName::Join(path, filename);
}
return cl->WriteToFile(filename);
}
}
}
return false;
}
/////////////////////////////////////////////////////////////////////////////
//
// Function : LoadClothingFromFile
// PARAMETERS : filename - file to load from
//
// PURPOSE : Load the avatar's clothing from a file. If only a filename is
// given, it will read from UserData/Avatars.
//
bool cyAvatar::LoadClothingFromFile(plFileName filename)
{
if (fRecvr.Count() > 0) {
plArmatureMod* avatar = plAvatarMgr::FindAvatar(fRecvr[0]);
if (avatar) {
plClothingOutfit* cl = avatar->GetClothingOutfit();
if (cl) {
// Search for file in UserData/Avatars if only a filename is given
if (!filename.StripFileName().IsValid())
filename = plFileName::Join(plFileSystem::GetUserDataPath(), "Avatars", filename);
cl->SetClothingFile(filename);
return cl->ReadClothing();
}
}
}
return false;
}
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// //
// Function : ChangeAvatar // Function : ChangeAvatar

View File

@ -414,6 +414,9 @@ public:
virtual void PlaySimpleAnimation(const char* animName); virtual void PlaySimpleAnimation(const char* animName);
virtual bool SaveClothingToFile(plFileName filename);
virtual bool LoadClothingFromFile(plFileName filename);
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// //
// Function : ChangeAvatar // Function : ChangeAvatar

View File

@ -607,6 +607,29 @@ PYTHON_METHOD_DEFINITION(ptAvatar, setDontPanicLink, args)
self->fThis->SetDontPanicLink(value); self->fThis->SetDontPanicLink(value);
PYTHON_RETURN_NONE; PYTHON_RETURN_NONE;
PYTHON_METHOD_DEFINITION(ptAvatar, saveClothingToFile, args)
{
PyObject* filename;
if (!PyArg_ParseTuple(args, "O", &filename) || !PyString_CheckEx(filename))
{
PyErr_SetString(PyExc_TypeError, "saveClothingToFile expects a string object");
PYTHON_RETURN_ERROR;
}
PYTHON_RETURN_BOOL(self->fThis->SaveClothingToFile(PyString_AsStringEx(filename)));
}
PYTHON_METHOD_DEFINITION(ptAvatar, loadClothingFromFile, args)
{
PyObject* filename;
if (!PyArg_ParseTuple(args, "O", &filename) || !PyString_CheckEx(filename))
{
PyErr_SetString(PyExc_TypeError, "loadClothingFromFile expects a string object");
PYTHON_RETURN_ERROR;
}
PYTHON_RETURN_BOOL(self->fThis->LoadClothingFromFile(PyString_AsStringEx(filename)));
} }
PYTHON_START_METHODS_TABLE(ptAvatar) PYTHON_START_METHODS_TABLE(ptAvatar)
@ -665,6 +688,8 @@ PYTHON_START_METHODS_TABLE(ptAvatar)
PYTHON_METHOD(ptAvatar, playSimpleAnimation, "Params: animName\nPlay simple animation on avatar"), PYTHON_METHOD(ptAvatar, playSimpleAnimation, "Params: animName\nPlay simple animation on avatar"),
PYTHON_METHOD(ptAvatar, setDontPanicLink, "Params: value\nDisables panic linking to Personal Age (warps the avatar back to the start instead)"), PYTHON_METHOD(ptAvatar, setDontPanicLink, "Params: value\nDisables panic linking to Personal Age (warps the avatar back to the start instead)"),
PYTHON_METHOD(ptAvatar, saveClothingToFile, "Params: filename\nSave avatar clothing to a file"),
PYTHON_METHOD(ptAvatar, loadClothingFromFile, "Params: filename\nLoad avatar clothing from a file"),
PYTHON_END_METHODS_TABLE; PYTHON_END_METHODS_TABLE;
PYTHON_GLOBAL_METHOD_DEFINITION(PtSetBehaviorLoopCount, args, "Params: behaviorKey,stage,loopCount,netForce\nThis will set the loop count for a particular stage in a multistage behavior") PYTHON_GLOBAL_METHOD_DEFINITION(PtSetBehaviorLoopCount, args, "Params: behaviorKey,stage,loopCount,netForce\nThis will set the loop count for a particular stage in a multistage behavior")
@ -913,4 +938,4 @@ void cyAvatar::AddPlasmaConstantsClasses(PyObject *m)
PYTHON_ENUM_ELEMENT(PtBehaviorTypes, kBehaviorTypeLinkIn, plHBehavior::kBehaviorTypeLinkIn); PYTHON_ENUM_ELEMENT(PtBehaviorTypes, kBehaviorTypeLinkIn, plHBehavior::kBehaviorTypeLinkIn);
PYTHON_ENUM_ELEMENT(PtBehaviorTypes, kBehaviorTypeLinkOut, plHBehavior::kBehaviorTypeLinkOut); PYTHON_ENUM_ELEMENT(PtBehaviorTypes, kBehaviorTypeLinkOut, plHBehavior::kBehaviorTypeLinkOut);
PYTHON_ENUM_END(m, PtBehaviorTypes); PYTHON_ENUM_END(m, PtBehaviorTypes);
} }