You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

317 lines
7.6 KiB

/*==LICENSE==*
CyanWorlds.com Engine - MMOG client, server and tools
Copyright (C) 2011 Cyan Worlds, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
You can contact Cyan Worlds, Inc. by email legal@cyan.com
or by snail mail at:
Cyan Worlds, Inc.
14617 N Newport Hwy
Mead, WA 99021
*==LICENSE==*/
//////////////////////////////////////////////////////////////////////
//
// pyVaultPlayerNode - a wrapper class to provide interface to the RelVaultNode
//
//////////////////////////////////////////////////////////////////////
#include "pyVaultPlayerNode.h"
#ifndef BUILDING_PYPLASMA
#include "pyVault.h"
#endif
#include "../pfPython/pyAgeInfoStruct.h"
#include "../pfPython/pyVaultAgeLinkNode.h"
#include "../pfPython/pyVaultPlayerInfoNode.h"
#include "../pfPython/pyVaultPlayerInfoListNode.h"
#include "../pfPython/pyVaultFolderNode.h"
#include "../pfPython/pyVaultChronicleNode.h"
#include "../pfPython/pyVaultSDLNode.h"
#include "../pfPython/pyAgeLinkStruct.h"
#include "../plVault/plVault.h"
//============================================================================
static PyObject * GetPlayerVaultFolder (unsigned folderType) {
PyObject * result = nil;
if (RelVaultNode * rvnPlr = VaultGetPlayerNodeIncRef()) {
if (RelVaultNode * rvnFldr = rvnPlr->GetChildFolderNodeIncRef(folderType, 1)) {
result = pyVaultFolderNode::New(rvnFldr);
rvnFldr->DecRef();
}
rvnPlr->DecRef();
}
return result;
}
pyVaultPlayerNode::pyVaultPlayerNode(RelVaultNode *nfsNode)
: pyVaultNode(nfsNode)
{
}
//create from the Python side
pyVaultPlayerNode::pyVaultPlayerNode()
: pyVaultNode(nil) // may not create player nodes from python
{
}
//==================================================================
// class RelVaultNode : public plVaultNode
//
PyObject *pyVaultPlayerNode::GetInbox()
{
if (PyObject * result = GetPlayerVaultFolder(plVault::kInboxFolder))
return result;
PYTHON_RETURN_NONE;
}
PyObject *pyVaultPlayerNode::GetAvatarOutfitFolder()
{
if (PyObject * result = GetPlayerVaultFolder(plVault::kAvatarOutfitFolder))
return result;
PYTHON_RETURN_NONE;
}
PyObject *pyVaultPlayerNode::GetAvatarClosetFolder()
{
if (PyObject * result = GetPlayerVaultFolder(plVault::kAvatarClosetFolder))
return result;
PYTHON_RETURN_NONE;
}
PyObject *pyVaultPlayerNode::GetChronicleFolder()
{
if (PyObject * result = GetPlayerVaultFolder(plVault::kChronicleFolder))
return result;
PYTHON_RETURN_NONE;
}
PyObject *pyVaultPlayerNode::GetAgeJournalsFolder()
{
if (PyObject * result = GetPlayerVaultFolder(plVault::kAgeJournalsFolder))
return result;
PYTHON_RETURN_NONE;
}
PyObject *pyVaultPlayerNode::GetIgnoreListFolder()
{
if (PyObject * result = GetPlayerVaultFolder(plVault::kIgnoreListFolder))
return result;
PYTHON_RETURN_NONE;
}
PyObject *pyVaultPlayerNode::GetBuddyListFolder()
{
if (PyObject * result = GetPlayerVaultFolder(plVault::kBuddyListFolder))
return result;
PYTHON_RETURN_NONE;
}
PyObject *pyVaultPlayerNode::GetPeopleIKnowAboutFolder()
{
if (PyObject * result = GetPlayerVaultFolder(plVault::kPeopleIKnowAboutFolder))
return result;
PYTHON_RETURN_NONE;
}
PyObject *pyVaultPlayerNode::GetAgesICanVisitFolder()
{
if (PyObject * result = GetPlayerVaultFolder(plVault::kAgesICanVisitFolder))
return result;
PYTHON_RETURN_NONE;
}
PyObject *pyVaultPlayerNode::GetAgesIOwnFolder()
{
if (PyObject * result = GetPlayerVaultFolder(plVault::kAgesIOwnFolder))
return result;
PYTHON_RETURN_NONE;
}
PyObject *pyVaultPlayerNode::GetPlayerInfo()
{
if (RelVaultNode * rvn = VaultGetPlayerInfoNodeIncRef()) {
PyObject * result = pyVaultPlayerInfoNode::New(rvn);
rvn->DecRef();
return result;
}
PYTHON_RETURN_NONE;
}
PyObject *pyVaultPlayerNode::GetLinkToMyNeighborhood()
{
plAgeLinkStruct * link = NEW(plAgeLinkStruct);
if (VaultGetLinkToMyNeighborhood(link)) {
PyObject * result = pyAgeLinkStruct::New(link);
return result;
}
DEL(link);
PYTHON_RETURN_NONE;
}
PyObject *pyVaultPlayerNode::GetLinkToCity()
{
plAgeLinkStruct * link = NEW(plAgeLinkStruct);
if (VaultGetLinkToCity(link)) {
PyObject * result = pyAgeLinkStruct::New(link);
return result;
}
DEL(link);
PYTHON_RETURN_NONE;
}
PyObject *pyVaultPlayerNode::GetOwnedAgeLink(const pyAgeInfoStruct *info)
{
plAgeLinkStruct link;
if (VaultGetOwnedAgeLink(info->GetAgeInfo(), &link))
return pyAgeLinkStruct::New(&link);
PYTHON_RETURN_NONE;
}
void pyVaultPlayerNode::RemoveOwnedAgeLink(const char* ageFilename)
{
plAgeInfoStruct info;
info.SetAgeFilename(ageFilename);
VaultUnregisterOwnedAgeAndWait(&info);
}
PyObject *pyVaultPlayerNode::GetVisitAgeLink(const pyAgeInfoStruct *info)
{
if (RelVaultNode * rvn = VaultGetVisitAgeLinkIncRef(info->GetAgeInfo())) {
PyObject * result = pyVaultAgeLinkNode::New(rvn);
rvn->DecRef();
return result;
}
PYTHON_RETURN_NONE;
}
void pyVaultPlayerNode::RemoveVisitAgeLink(const char *guidstr)
{
Uuid uuid;
GuidFromString(guidstr, &uuid);
plAgeInfoStruct info;
info.SetAgeInstanceGuid(&plUUID(uuid));
VaultUnregisterOwnedAgeAndWait(&info);
}
PyObject *pyVaultPlayerNode::FindChronicleEntry(const char *entryName)
{
wchar wStr[MAX_PATH];
StrToUnicode(wStr, entryName, arrsize(wStr));
if (RelVaultNode * rvn = VaultFindChronicleEntryIncRef(wStr)) {
PyObject * result = pyVaultChronicleNode::New(rvn);
rvn->DecRef();
return result;
}
PYTHON_RETURN_NONE;
}
void pyVaultPlayerNode::SetPlayerName(const char *value)
{
hsAssert(false, "python may not change a player's name this way");
}
std::string pyVaultPlayerNode::GetPlayerName()
{
if (!fNode)
return "";
VaultPlayerNode player(fNode);
char ansiStr[MAX_PATH];
StrToAnsi(ansiStr, player.playerName, arrsize(ansiStr));
return ansiStr;
}
void pyVaultPlayerNode::SetAvatarShapeName(const char *value)
{
hsAssert(false, "python may not change a player's avatar this way");
}
std::string pyVaultPlayerNode::GetAvatarShapeName()
{
if (!fNode)
return "";
VaultPlayerNode player(fNode);
char ansiStr[MAX_PATH];
StrToAnsi(ansiStr, player.avatarShapeName, arrsize(ansiStr));
return ansiStr;
}
void pyVaultPlayerNode::SetDisabled(bool value)
{
hsAssert(false, "python may not change a player's disable state this way");
}
bool pyVaultPlayerNode::IsDisabled()
{
if (!fNode)
return false;
VaultPlayerNode player(fNode);
return player.disabled;
}
void pyVaultPlayerNode::SetOnlineTime(UInt32 value)
{
hsAssert(false, "python may not change a player's online time this way");
}
UInt32 pyVaultPlayerNode::GetOnlineTime()
{
if (!fNode)
return 0;
VaultPlayerNode player(fNode);
return player.onlineTime;
}
void pyVaultPlayerNode::SetExplorer (bool b) {
if (!fNode)
return;
VaultPlayerNode player(fNode);
player.SetExplorer(b);
}
hsBool pyVaultPlayerNode::IsExplorer () {
if (!fNode)
return false;
VaultPlayerNode player(fNode);
return player.explorer;
}