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++; }
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); } }
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; }
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++; } }
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; }
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); }
/* hsKeyedObject */ void hsKeyedObject::init(const plString& name) { myKey = new plKeyData(); myKey->setType(ClassIndex()); myKey->setName(name); myKey->setObj(this); }