Force session host and improve protections (#593)

* Add force session host and update protections

* Remove old popgroup protection

* Harden script patcher

* Replace looped options with script patches

* Missing break

* Use enums

* Forgot to break again...

* Add tooltip for force session host

Co-authored-by: user <email@hostname>
This commit is contained in:
maybegreat48
2022-11-13 16:34:44 +00:00
committed by GitHub
parent ddc70a76e0
commit eb41c69e09
40 changed files with 467 additions and 250 deletions

View File

@ -671,94 +671,121 @@ enum class NetObjEntityType : uint16_t
enum class eNetworkEvents : uint16_t
{
CObjectIdFreedEvent,
CObjectIdRequestEvent,
CArrayDataVerifyEvent,
CScriptArrayDataVerifyEvent,
CRequestControlEvent,
CGiveControlEvent,
CWeaponDamageEvent,
CRequestPickupEvent,
CRequestMapPickupEvent,
CGameClockEvent,
CGameWeatherEvent,
CRespawnPlayerPedEvent,
CGiveWeaponEvent,
CRemoveWeaponEvent,
CRemoveAllWeaponsEvent,
CVehicleComponentControlEvent,
CFireEvent,
CExplosionEvent,
CStartProjectileEvent,
CUpdateProjectileTargetEvent,
CRemoveProjectileEntityEvent,
CBreakProjectileTargetLockEvent,
CAlterWantedLevelEvent,
CChangeRadioStationEvent,
CRagdollRequestEvent,
CPlayerTauntEvent,
CPlayerCardStatEvent,
CDoorBreakEvent,
CScriptedGameEvent,
CRemoteScriptInfoEvent,
CRemoteScriptLeaveEvent,
CMarkAsNoLongerNeededEvent,
CConvertToScriptEntityEvent,
CScriptWorldStateEvent,
CClearAreaEvent,
CClearRectangleAreaEvent,
CNetworkRequestSyncedSceneEvent,
CNetworkStartSyncedSceneEvent,
CNetworkStopSyncedSceneEvent,
CNetworkUpdateSyncedSceneEvent,
CIncidentEntityEvent,
CGivePedScriptedTaskEvent,
CGivePedSequenceTaskEvent,
CNetworkClearPedTasksEvent,
CNetworkStartPedArrestEvent,
CNetworkStartPedUncuffEvent,
CNetworkSoundCarHornEvent,
CNetworkEntityAreaStatusEvent,
CNetworkGarageOccupiedStatusEvent,
CPedConversationLineEvent,
CScriptEntityStateChangeEvent,
CNetworkPlaySoundEvent,
CNetworkStopSoundEvent,
CNetworkPlayAirdefenseFireEvent,
CNetworkBankRequestEvent,
CNetworkAudioBarkEvent,
CRequestDoorEvent,
CNetworkTrainReportEvent,
CNetworkTrainRequestEvent,
CNetworkIncrementStatEvent,
CModifyVehicleLockWordStateData,
CModifyPtfxWordStateDataScriptedEvolveEvent,
CRequestPhoneExplosionEvent,
CRequestDetachmentEvent,
CKickVotesEvent,
CGivePickupRewardsEvent,
CNetworkCrcHashCheckEvent,
CBlowUpVehicleEvent,
CNetworkSpecialFireEquippedWeapon,
CNetworkRespondedToThreatEvent,
CNetworkShoutTargetPosition,
CVoiceDrivenMouthMovementFinishedEvent,
CPickupDestroyedEvent,
CUpdatePlayerScarsEvent,
CNetworkCheckExeSizeEvent,
CNetworkPtfxEvent,
CNetworkPedSeenDeadPedEvent,
CRemoveStickyBombEvent,
CNetworkCheckCodeCrcsEvent,
CInformSilencedGunshotEvent,
CPedPlayPainEvent,
CCachePlayerHeadBlendDataEvent,
CRemovePedFromPedgroupEvent,
CUpdateFxnEvent,
CReportCashSpawnEvent,
CActivateVehicleSpecialAbilityEvent,
CBlockWeaponSelection,
CNetworkCheckCatalogCrc
OBJECT_ID_FREED_EVENT,
OBJECT_ID_REQUEST_EVENT,
ARRAY_DATA_VERIFY_EVENT,
SCRIPT_ARRAY_DATA_VERIFY_EVENT,
REQUEST_CONTROL_EVENT,
GIVE_CONTROL_EVENT,
WEAPON_DAMAGE_EVENT,
REQUEST_PICKUP_EVENT,
REQUEST_MAP_PICKUP_EVENT,
GAME_CLOCK_EVENT,
GAME_WEATHER_EVENT,
RESPAWN_PLAYER_PED_EVENT,
GIVE_WEAPON_EVENT,
REMOVE_WEAPON_EVENT,
REMOVE_ALL_WEAPONS_EVENT,
VEHICLE_COMPONENT_CONTROL_EVENT,
FIRE_EVENT,
EXPLOSION_EVENT,
START_PROJECTILE_EVENT,
UPDATE_PROJECTILE_TARGET_EVENT,
REMOVE_PROJECTILE_ENTITY_EVENT,
BREAK_PROJECTILE_TARGET_LOCK_EVENT,
ALTER_WANTED_LEVEL_EVENT,
CHANGE_RADIO_STATION_EVENT,
RAGDOLL_REQUEST_EVENT,
PLAYER_TAUNT_EVENT,
PLAYER_CARD_STAT_EVENT,
DOOR_BREAK_EVENT,
SCRIPTED_GAME_EVENT,
REMOTE_SCRIPT_INFO_EVENT,
REMOTE_SCRIPT_LEAVE_EVENT,
MARK_AS_NO_LONGER_NEEDED_EVENT,
CONVERT_TO_SCRIPT_ENTITY_EVENT,
SCRIPT_WORLD_STATE_EVENT,
CLEAR_AREA_EVENT,
CLEAR_RECTANGLE_AREA_EVENT,
NETWORK_REQUEST_SYNCED_SCENE_EVENT,
NETWORK_START_SYNCED_SCENE_EVENT,
NETWORK_STOP_SYNCED_SCENE_EVENT,
NETWORK_UPDATE_SYNCED_SCENE_EVENT,
INCIDENT_ENTITY_EVENT,
GIVE_PED_SCRIPTED_TASK_EVENT,
GIVE_PED_SEQUENCE_TASK_EVENT,
NETWORK_CLEAR_PED_TASKS_EVENT,
NETWORK_START_PED_ARREST_EVENT,
NETWORK_START_PED_UNCUFF_EVENT,
NETWORK_SOUND_CAR_HORN_EVENT,
NETWORK_ENTITY_AREA_STATUS_EVENT,
NETWORK_GARAGE_OCCUPIED_STATUS_EVENT,
PED_CONVERSATION_LINE_EVENT,
SCRIPT_ENTITY_STATE_CHANGE_EVENT,
NETWORK_PLAY_SOUND_EVENT,
NETWORK_STOP_SOUND_EVENT,
NETWORK_PLAY_AIRDEFENSE_FIRE_EVENT,
NETWORK_BANK_REQUEST_EVENT,
NETWORK_AUDIO_BARK_EVENT,
REQUEST_DOOR_EVENT,
NETWORK_TRAIN_REPORT_EVENT,
NETWORK_TRAIN_REQUEST_EVENT,
NETWORK_INCREMENT_STAT_EVENT,
MODIFY_VEHICLE_LOCK_WORD_STATE_DATA,
MODIFY_PTFX_WORD_STATE_DATA_SCRIPTED_EVOLVE_EVENT,
REQUEST_PHONE_EXPLOSION_EVENT,
REQUEST_DETACHMENT_EVENT,
KICK_VOTES_EVENT,
GIVE_PICKUP_REWARDS_EVENT,
NETWORK_CRC_HASH_CHECK_EVENT,
BLOW_UP_VEHICLE_EVENT,
NETWORK_SPECIAL_FIRE_EQUIPPED_WEAPON,
NETWORK_RESPONDED_TO_THREAT_EVENT,
NETWORK_SHOUT_TARGET_POSITION,
VOICE_DRIVEN_MOUTH_MOVEMENT_FINISHED_EVENT,
PICKUP_DESTROYED_EVENT,
UPDATE_PLAYER_SCARS_EVENT,
NETWORK_CHECK_EXE_SIZE_EVENT,
NETWORK_PTFX_EVENT,
NETWORK_PED_SEEN_DEAD_PED_EVENT,
REMOVE_STICKY_BOMB_EVENT,
NETWORK_CHECK_CODE_CRCS_EVENT,
INFORM_SILENCED_GUNSHOT_EVENT,
PED_PLAY_PAIN_EVENT,
CACHE_PLAYER_HEAD_BLEND_DATA_EVENT,
REMOVE_PED_FROM_PEDGROUP_EVENT,
REPORT_MYSELF_EVENT,
REPORT_CASH_SPAWN_EVENT,
ACTIVATE_VEHICLE_SPECIAL_ABILITY_EVENT,
BLOCK_WEAPON_SELECTION,
NETWORK_CHECK_CATALOG_CRC
};
enum class ScriptEntityChangeType
{
BlockingOfNonTemporaryEvents,
SettingOfPedRelationshipGroupHash,
SettingOfDriveTaskCruiseSpeed,
SettingOfLookAtEntity,
SettingOfPlaneMinHeightAboveTerrain,
SetPedRagdollBlockFlag,
SettingOfTaskVehicleTempAction,
SetPedFacialIdleAnimOverride,
SetVehicleLockState,
SetVehicleExclusiveDriver
};
enum class WorldStateDataType
{
CarGen,
EntityArea,
PopGroupOverride,
PopMultiplierArea,
PTFX,
RoadNode,
Rope,
ScenarioBlockingArea,
VehiclePlayerLocking
};
enum class BlipIcons

View File

@ -156,6 +156,17 @@ namespace rage
return T(val);
}
template<typename T>
inline T ReadSigned(int length)
{
static_assert(sizeof(T) <= 4, "maximum of 32 bit read");
int val = 0;
ReadInt32(&val, length);
return T(val);
}
public:
uint8_t* m_data; //0x0000
uint32_t m_bitOffset; //0x0008

View File

@ -15,16 +15,16 @@ namespace rage
virtual void assume_thread_identity(scrThread*) {}; // 1 (0x08)
// Returns whether the hash of the script id is valid.
virtual bool is_valid() {}; // 2 (0x10)
virtual bool is_valid() { return false; }; // 2 (0x10)
// Gets the hash of the script id.
virtual joaat_t *get_hash(joaat_t *out) {}; // 3 (0x18)
virtual joaat_t* get_hash(joaat_t* out) { return 0; }; // 3 (0x18)
// Gets an unknown value from the script id.
virtual std::uint32_t *get_hash2(std::uint32_t *out) {}; // 4 (0x20)
virtual std::uint32_t* get_hash2(std::uint32_t* out) { return 0; }; // 4 (0x20)
// Gets the name of the script id.
virtual const char *get_name() {}; // 5 (0x28)
virtual const char* get_name() { return nullptr; }; // 5 (0x28)
// Serializes the script id from the buffer.
virtual void deserialize(datBitBuffer* buffer) {}; // 6 (0x30)
@ -33,10 +33,10 @@ namespace rage
virtual void serialize(datBitBuffer* buffer) {}; // 7 (0x38)
// Calculates some information with the position hash & instance id.
virtual std::uint32_t _0x40() {}; // 8 (0x40)
virtual std::uint32_t _0x40() { return 0; }; // 8 (0x40)
// Calls _0x40 and returns it's value added to another value.
virtual std::uint32_t _0x48() {}; // 9 (0x48)
virtual std::uint32_t _0x48() { return 0; }; // 9 (0x48)
// Logs some information about the script id.
virtual void log_information(netLoggingInterface* logger) {}; // 10 (0x50)
@ -45,9 +45,9 @@ namespace rage
virtual void copy_data(scriptIdBase *other) {} // 11 (0x58)
// Returns whether the other script id is equal.
virtual bool operator==(scriptIdBase*) {}; // 12 (0x60)
virtual bool operator==(scriptIdBase*) { return false; }; // 12 (0x60)
virtual bool _0x68(void*) {}; // 13 (0x68)
virtual bool _0x68(void*) { return false; }; // 13 (0x68)
};
class scriptId : public scriptIdBase