void Player::AddWeapon(long weapon_id)  //weapon 1 to 6
{
    char *bonename;
    if (MountNameIndexes[ClassIndex() * 6 + (weapon_id - 1)] == -1)
    {
        LogMessage("Error adding weapon for %s, class not permitted to have weapon #%d\n", Name(), weapon_id);
        return;
    }
    else
    {
        if (ClassIndex() == 8) //TODO: put class indexes on an enum for clarity. 8 = PE
        {
            bonename = mount_names[PEAltMounts[m_Database.ship_data.hull * 6 + (weapon_id - 1)]];
        }
        else
        {
            bonename = mount_names[MountNameIndexes[ClassIndex() * 6 + (weapon_id - 1)]];
        }
    }
    
    ShipIndex()->Inventory.Mounts.SetMount(2+weapon_id, WeaponMount);
    ShipIndex()->Inventory.EquipInv.EquipItem[2+weapon_id].SetItemTemplateID(-1);
    ShipIndex()->Inventory.MountBones.SetMountBoneName(2 + weapon_id, bonename);

	m_WeaponSlots++;
}
Example #2
0
void plLeafController::IWriteUruController(hsStream* S) {
    switch (ClassIndex()) {
    case kEaseController:
        if (fKeys.getSize() == 0) {
            S->writeInt(0);
        } else {
            S->writeInt(1);
            S->writeInt(fKeys.getSize());
            for (size_t i=0; i<fKeys.getSize(); i++)
                fKeys[i]->write(S);
        }
        break;
    case kMatrix33Controller:
        S->writeInt(fKeys.getSize());
        for (size_t i=0; i<fKeys.getSize(); i++)
            fKeys[i]->write(S);
        break;
    case kMatrix44Controller:
        S->writeInt(fKeys.getSize());
        for (size_t i=0; i<fKeys.getSize(); i++)
            fKeys[i]->write(S);
        break;
    case kPoint3Controller:
        if (fKeys.getSize() == 0) {
            S->writeInt(0);
        } else {
            S->writeInt(1);
            S->writeInt(fKeys.getSize());
            for (size_t i=0; i<fKeys.getSize(); i++)
                fKeys[i]->write(S);
        }
        break;
    case kQuatController:
        S->writeInt(fKeys.getSize());
        for (size_t i=0; i<fKeys.getSize(); i++)
            fKeys[i]->write(S);
        break;
    case kScalarController:
        if (fKeys.getSize() == 0) {
            S->writeInt(0);
        } else {
            S->writeInt(1);
            S->writeInt(fKeys.getSize());
            for (size_t i=0; i<fKeys.getSize(); i++)
                fKeys[i]->write(S);
        }
        break;
    case kScaleValueController:
        S->writeInt(fKeys.getSize());
        for (size_t i=0; i<fKeys.getSize(); i++)
            fKeys[i]->write(S);
        break;
    default:
        plString err = plString::Format("Unexpected class type [%04X]", ClassIndex());
        throw hsBadParamException(__FILE__, __LINE__, err);
    }
}
Example #3
0
void plLeafController::IReadUruController(hsStream* S) {
    switch (ClassIndex()) {
    case kEaseController:
        if (S->readInt() != 0) {
            AllocKeys(S->readInt(), hsKeyFrame::kScalarKeyFrame);
            for (size_t i=0; i<fKeys.getSize(); i++)
                fKeys[i]->read(S, fType);
        } else {
            AllocKeys(0, 0);
        }
        break;
    case kMatrix33Controller:
        AllocKeys(S->readInt(), hsKeyFrame::kMatrix33KeyFrame);
        for (size_t i=0; i<fKeys.getSize(); i++)
            fKeys[i]->read(S, fType);
        break;
    case kMatrix44Controller:
        AllocKeys(S->readInt(), hsKeyFrame::kMatrix44KeyFrame);
        for (size_t i=0; i<fKeys.getSize(); i++)
            fKeys[i]->read(S, fType);
        break;
    case kPoint3Controller:
        if (S->readInt() != 0) {
            AllocKeys(S->readInt(), hsKeyFrame::kPoint3KeyFrame);
            for (size_t i=0; i<fKeys.getSize(); i++)
                fKeys[i]->read(S, fType);
        } else {
            AllocKeys(0, 0);
        }
        break;
    case kQuatController:
        AllocKeys(S->readInt(), hsKeyFrame::kQuatKeyFrame);
        for (size_t i=0; i<fKeys.getSize(); i++)
            fKeys[i]->read(S, fType);
        break;
    case kScalarController:
        if (S->readInt() != 0) {
            AllocKeys(S->readInt(), hsKeyFrame::kScalarKeyFrame);
            for (size_t i=0; i<fKeys.getSize(); i++)
                fKeys[i]->read(S, fType);
        } else {
            AllocKeys(0, 0);
        }
        break;
    case kScaleValueController:
        AllocKeys(S->readInt(), hsKeyFrame::kScaleKeyFrame);
        for (size_t i=0; i<fKeys.getSize(); i++)
            fKeys[i]->read(S, fType);
        break;
    default:
        plString err = plString::Format("Unexpected class type [%04X]", ClassIndex());
        throw hsBadParamException(__FILE__, __LINE__, err);
    }

    if (fKeys.getSize() > 0)
        fType = fKeys[0]->getType();
}
float Player::GetFactionStanding(Object *obj)
{
	float standing = 0.0f;
	if (!obj) return standing;

	long faction_id = obj->GetFactionID();
	long faction_count = g_ServerMgr->m_FactionData.GetFactionCount();
	long player_faction_id = faction_list[ClassIndex()];

	//see if this faction is one of the PDA factions
	if (g_ServerMgr->m_FactionData.GetPDA(faction_id))
	{
		long pda_order = m_PDAFactionID[faction_id];
		//this faction can be influenced by the player's actions, read value from player indicies
		standing = PlayerIndex()->Reputation.Factions.Faction[pda_order].GetReaction();
	}
	else
	{
		//read the faction standing from the database
		standing = g_ServerMgr->m_FactionData.GetFactionStanding(player_faction_id, faction_id);
	}

	return standing;

}
Example #5
0
void plLeafController::write(hsStream* S, plResManager* mgr) {
    if (S->getVer().isUniversal()) {
        if (ClassIndex() == kLeafController) {
            S->writeByte(fType);
            S->writeInt(fKeys.getSize());

            for (size_t i=0; i<fKeys.getSize(); i++)
                fKeys[i]->write(S);
        } else {
            S->writeInt(fEaseControllers.getSize());

            for (size_t i=0; i<fEaseControllers.getSize(); i++)
                fEaseControllers[i]->write(S, mgr);
            IWriteUruController(S);
        }
    } else if (S->getVer().isUruSP()) {
        S->writeInt(fUruUnknown);
        S->writeInt(fEaseControllers.getSize());

        for (size_t i=0; i<fEaseControllers.getSize(); i++)
            fEaseControllers[i]->write(S, mgr);

        S->writeInt(0);
        IWriteUruController(S);
    } else {
        if ((S->getVer().isNewPlasma()) && fType >= hsKeyFrame::kCompressedQuatKeyFrame64)
            S->writeByte(fType - 1);
        else
            S->writeByte(fType);
        S->writeInt(fKeys.getSize());

        for (size_t i=0; i<fKeys.getSize(); i++)
            fKeys[i]->write(S);
    }
}
plKey hsKeyedObject::RegisterAsManual(plUoid& meUoid, const plString& p)
{
    hsAssert(meUoid.GetClassType() == ClassIndex(),"Registering as wrong type!");
    // Really should be a NewKey() call just for fixed keys, so change this once player rooms behave
    plKey pkey = hsgResMgr::ResMgr()->ReRegister(p,meUoid);

    if (pkey)
        SetKey(pkey);
    return pkey;
}
void Player::NeatenUpWeaponMounts()
{
    for (int i = 0; i < 6; i++)
    {
        if (MountNameIndexes[ClassIndex() * 6 + i] != -1)
        {
            ShipIndex()->Inventory.MountBones.SetMountBoneName(3 + i, mount_names[MountNameIndexes[ClassIndex() * 6 + i]]);
        }
    }
}
void Player::ResetWeaponMounts()
{
    //now reset each mount
    u32 weapons = 0;
	m_WeaponSlots = 0;
	u32 i;

	for(i=0;i<(u32)WeaponTable[ClassIndex() * 7];i++) 
	{
        AddWeapon(i+1);
	}

	for (i = 1; i <= PlayerIndex()->RPGInfo.GetHullUpgradeLevel(); i++)
	{
		if (WeaponTable[ClassIndex() * 7 + i] != 0)
		{
			AddWeapon(m_WeaponSlots + 1);
		}
	}
}
plKey hsKeyedObject::RegisterAs(plFixedKeyId fixedKey)
{
    plUoid meUoid(fixedKey);

    hsAssert(meUoid.GetClassType() == ClassIndex(), "Registering as wrong type!");
    plKey key = hsgResMgr::ResMgr()->FindKey(meUoid);
    if (key == nil)
    {
        key = hsgResMgr::ResMgr()->NewKey(meUoid, this);
    }
    else
    {
        SetKey(key);
    }

    return key;
}
void Player::ResetDeviceMounts()
{
    //now reset each mount
    u32 devices = 0;
	u32 i;
	m_DeviceSlots = 0;

    for (i = 0; i <= PlayerIndex()->RPGInfo.GetHullUpgradeLevel(); i++)
    {
        devices += DeviceTable[ClassIndex()*7 + i];
    }

	for(i=0;i<devices;i++)
	{
		ShipIndex()->Inventory.Mounts.SetMount(9+i, DeviceMount);
		ShipIndex()->Inventory.EquipInv.EquipItem[9+i].SetItemTemplateID(-1);
		m_DeviceSlots++;
	}
}
Example #11
0
plKey hsKeyedObject::RegisterAs(plFixedKeyId fixedKey)
{
    plUoid meUoid(fixedKey);

    hsAssert(meUoid.GetClassType() == ClassIndex(), "Registering as wrong type!");
    plKey key = hsgResMgr::ResMgr()->FindKey(meUoid);
    if (key == nil)
    {
        key = hsgResMgr::ResMgr()->NewKey(meUoid, this);

        //  the key list "helpfully" assigns us an object id.
        // we don't want one for fixed keys however (initialization order might bite us in the ass)
        static_cast<plKeyImp*>(key)->SetObjectID(0);
    }
    else
    {
        SetKey(key);
    }

    return key;
}
Example #12
0
void plLeafController::read(hsStream* S, plResManager* mgr) {
    if (S->getVer().isUniversal()) {
        if (ClassIndex() == kLeafController) {
            fType = S->readByte();
            unsigned int numKeys = S->readInt();
            AllocKeys(numKeys, fType);

            for (size_t i=0; i<fKeys.getSize(); i++)
                fKeys[i]->read(S, fType);
        } else {
            unsigned int numControllers = S->readInt();
            AllocControllers(numControllers);

            for (size_t i=0; i<fEaseControllers.getSize(); i++)
                fEaseControllers[i]->read(S, mgr);
            IReadUruController(S);
        }
    } else if (S->getVer().isUruSP()) {
        fUruUnknown = S->readInt();
        if (fUruUnknown != 0)
            plDebug::Debug("Found an UruUnknown of %d", fUruUnknown);
        unsigned int numControllers = S->readInt();
        AllocControllers(numControllers);

        for (size_t i=0; i<fEaseControllers.getSize(); i++)
            fEaseControllers[i]->read(S, mgr);

        S->readInt();
        IReadUruController(S);
    } else {
        fType = S->readByte();
        if ((S->getVer().isNewPlasma()) && fType >= hsKeyFrame::kCompressedQuatKeyFrame64)
            fType++;    // Myst V doesn't have hsCompressedQuatKeyFrame64
        unsigned int numKeys = S->readInt();
        AllocKeys(numKeys, fType);

        for (size_t i=0; i<fKeys.getSize(); i++)
            fKeys[i]->read(S, fType);
    }
}
void plNetMessage::IWriteClassIndex(hsStream* stream)
{
    ClassIndexType classIndex=ClassIndex();
    hsAssert(sizeof(classIndex)==sizeof(plNetMessageClassIndex), "somebody changed the size of plCreatable::ClassIndex");
    stream->WriteLE(classIndex);
}
Example #14
0
/* hsKeyedObject */
void hsKeyedObject::init(const plString& name) {
    myKey = new plKeyData();
    myKey->setType(ClassIndex());
    myKey->setName(name);
    myKey->setObj(this);
}