#include "pch.h"
TC_OBJECT_EXTERN_NON_CREATEABLE_IMPL(CAdminUser)
STDMETHODIMP CAdminUser::InterfaceSupportsErrorInfo(REFIID riid)
{
static const IID* arr[] =
{
&IID_IAdminUser
};
for (int i=0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
if (InlineIsEqualGUID(*arr[i],riid))
return S_OK;
}
return S_FALSE;
}
void CAdminUser::Init(CFSPlayer *pPlayer)
{
m_pPlayer=pPlayer;
m_pIshipIGC=pPlayer->GetIGCShip();
}
STDMETHODIMP CAdminUser::get_Name(BSTR* pbstr)
{
CComBSTR bstrTemp(m_pPlayer->GetName());
*pbstr = bstrTemp.Copy();
return S_OK;
}
STDMETHODIMP CAdminUser::get_Ship( IAdminShip** ppShip)
{
assert(m_pPlayer);
IshipIGC * pIshipIGC = m_pPlayer->GetIGCShip();
if (pIshipIGC == NULL) {
*ppShip = NULL;
return S_OK;
}
return GetAGCGlobal()->GetAGCObject(pIshipIGC, IID_IAdminShip,
(void**)ppShip);
}
STDMETHODIMP CAdminUser::SendMsg(BSTR bstrMessage)
{
assert(m_pPlayer);
USES_CONVERSION;
m_pPlayer->GetMission()->GetSite()->SendChat(NULL, CHAT_INDIVIDUAL, m_pPlayer->GetIGCShip()->GetObjectID(),
NA, OLE2A(bstrMessage),
c_cidNone,
NA,
NA,
NULL,
true); return S_OK;
}
STDMETHODIMP CAdminUser :: get_isReady(VARIANT_BOOL* pVal)
{
assert(m_pPlayer);
*pVal = VARBOOL(m_pPlayer->GetReady());
return S_OK;
}
STDMETHODIMP CAdminUser :: put_isReady(VARIANT_BOOL Val)
{
assert(m_pPlayer);
m_pPlayer->SetReady(!!Val);
return S_OK;
}
STDMETHODIMP CAdminUser::Boot()
{
if (m_pPlayer)
{
CFSMission * pfsMission = m_pPlayer->GetMission();
pfsMission->RemovePlayerFromMission(m_pPlayer, QSR_AdminBooted);
m_pPlayer = NULL;
}
return S_OK;
}
STDMETHODIMP CAdminUser::get_UserID(AdminUserID *userid)
{
*userid = DetermineID(m_pPlayer);
return S_OK;
}
STDMETHODIMP CAdminUser::get_UniqueID(AGCUniqueID *uniqueID)
{
*uniqueID = static_cast<AGCUniqueID>(static_cast<USHORT>(DetermineID(m_pPlayer)) | static_cast<DWORD>(AGC_AdminUser << 16));
return S_OK;
}
STDMETHODIMP CAdminUser::get_PlayerStats(IAGCEvent** ppStats)
{
IAGCEventCreatePtr spEvent;
RETURN_FAILED(spEvent.CreateInstance(CLSID_AGCEvent));
RETURN_FAILED(spEvent->Init());
PlayerScoreObject* ppso = m_pPlayer->GetPlayerScoreObject();
CComVariant varShort(static_cast<short>(0));
V_I2(&varShort) = ppso->GetPilotBaseKills();
RETURN_FAILED(spEvent->AddProperty(CComBSTR(L"PilotBaseKills"), &varShort));
V_I2(&varShort) = ppso->GetPilotBaseCaptures();
RETURN_FAILED(spEvent->AddProperty(CComBSTR(L"PilotBaseCaptures"), &varShort));
V_I2(&varShort) = ppso->GetTechsRecovered();
RETURN_FAILED(spEvent->AddProperty(CComBSTR(L"TechsRecovered"), &varShort));
V_I2(&varShort) = ppso->GetFlags();
RETURN_FAILED(spEvent->AddProperty(CComBSTR(L"Flags"), &varShort));
V_I2(&varShort) = ppso->GetArtifacts();
RETURN_FAILED(spEvent->AddProperty(CComBSTR(L"Artifacts"), &varShort));
V_I2(&varShort) = ppso->GetRescues();
RETURN_FAILED(spEvent->AddProperty(CComBSTR(L"Rescues"), &varShort));
V_I2(&varShort) = ppso->GetKills();
RETURN_FAILED(spEvent->AddProperty(CComBSTR(L"Kills"), &varShort));
V_I2(&varShort) = ppso->GetAssists();
RETURN_FAILED(spEvent->AddProperty(CComBSTR(L"Assists"), &varShort));
V_I2(&varShort) = ppso->GetDeaths();
RETURN_FAILED(spEvent->AddProperty(CComBSTR(L"Deaths"), &varShort));
V_I2(&varShort) = ppso->GetEjections();
RETURN_FAILED(spEvent->AddProperty(CComBSTR(L"Ejections"), &varShort));
CComVariant varFloat(static_cast<float>(0.f));
V_R4(&varFloat) = ppso->GetCombatRating();
RETURN_FAILED(spEvent->AddProperty(CComBSTR(L"CombatRating"), &varFloat));
V_R4(&varFloat) = ppso->GetWarpsSpotted();
RETURN_FAILED(spEvent->AddProperty(CComBSTR(L"WarpsSpotted"), &varFloat));
V_R4(&varFloat) = ppso->GetAsteroidsSpotted();
RETURN_FAILED(spEvent->AddProperty(CComBSTR(L"AsteroidsSpotted"), &varFloat));
V_R4(&varFloat) = ppso->GetMinerKills();
RETURN_FAILED(spEvent->AddProperty(CComBSTR(L"MinerKills"), &varFloat));
V_R4(&varFloat) = ppso->GetBuilderKills();
RETURN_FAILED(spEvent->AddProperty(CComBSTR(L"BuilderKills"), &varFloat));
V_R4(&varFloat) = ppso->GetLayerKills();
RETURN_FAILED(spEvent->AddProperty(CComBSTR(L"LayerKills"), &varFloat));
V_R4(&varFloat) = ppso->GetCarrierKills();
RETURN_FAILED(spEvent->AddProperty(CComBSTR(L"CarrierKills"), &varFloat));
V_R4(&varFloat) = ppso->GetPlayerKills();
RETURN_FAILED(spEvent->AddProperty(CComBSTR(L"PlayerKills"), &varFloat));
V_R4(&varFloat) = ppso->GetBaseKills();
RETURN_FAILED(spEvent->AddProperty(CComBSTR(L"BaseKills"), &varFloat));
V_R4(&varFloat) = ppso->GetBaseCaptures();
RETURN_FAILED(spEvent->AddProperty(CComBSTR(L"BaseCaptures"), &varFloat));
return spEvent->QueryInterface(IID_IAGCEvent, (void**)ppStats);
}
AdminUserID CAdminUser::DetermineID(CFSPlayer * pPlayer)
{
int nTemp = (int) pPlayer ^ (int) (pPlayer->GetConnection()->GetID());
return (AdminUserID) nTemp; }