Skip to content

Commit dbfdc5b

Browse files
committed
Add more detailed startup checks
This should catch failures on signatures on Windows for SM 1.10.
1 parent 68b8422 commit dbfdc5b

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

scripting/tf2utils.sp

+51
Original file line numberDiff line numberDiff line change
@@ -124,26 +124,39 @@ public void OnPluginStart() {
124124
StartPrepSDKCall(SDKCall_Player);
125125
PrepSDKCall_SetFromConf(hGameConf, SDKConf_Signature, "CTFPlayer::TeamFortress_SetSpeed()");
126126
g_SDKCallUpdatePlayerSpeed = EndPrepSDKCall();
127+
if (!g_SDKCallUpdatePlayerSpeed) {
128+
SetFailState("Failed to set up call to " ... "CTFPlayer::TeamFortress_SetSpeed()");
129+
}
127130

128131
StartPrepSDKCall(SDKCall_Player);
129132
PrepSDKCall_SetReturnInfo(SDKType_PlainOldData, SDKPass_Plain);
130133
PrepSDKCall_SetFromConf(hGameConf, SDKConf_Virtual, "CBaseEntity::TakeHealth()");
131134
PrepSDKCall_AddParameter(SDKType_Float, SDKPass_Plain);
132135
PrepSDKCall_AddParameter(SDKType_PlainOldData, SDKPass_Plain);
133136
g_SDKCallPlayerTakeHealth = EndPrepSDKCall();
137+
if (!g_SDKCallPlayerTakeHealth) {
138+
SetFailState("Failed to set up call to " ... "CBaseEntity::TakeHealth()");
139+
}
134140

135141
StartPrepSDKCall(SDKCall_Player);
136142
PrepSDKCall_SetFromConf(hGameConf, SDKConf_Signature, "CTFPlayer::GetMaxAmmo()");
137143
PrepSDKCall_SetReturnInfo(SDKType_PlainOldData, SDKPass_Plain);
138144
PrepSDKCall_AddParameter(SDKType_PlainOldData, SDKPass_Plain);
139145
PrepSDKCall_AddParameter(SDKType_PlainOldData, SDKPass_Plain);
140146
g_SDKCallPlayerGetMaxAmmo = EndPrepSDKCall();
147+
if (!g_SDKCallPlayerGetMaxAmmo) {
148+
SetFailState("Failed to set up call to " ... "CTFPlayer::GetMaxAmmo()");
149+
}
141150

142151
StartPrepSDKCall(SDKCall_Player);
143152
PrepSDKCall_SetFromConf(hGameConf, SDKConf_Virtual,
144153
"CBaseCombatCharacter::Weapon_ShootPosition()");
145154
PrepSDKCall_SetReturnInfo(SDKType_Vector, SDKPass_ByValue);
146155
g_SDKCallPlayerGetShootPosition = EndPrepSDKCall();
156+
if (!g_SDKCallPlayerGetShootPosition) {
157+
SetFailState("Failed to set up call to "
158+
... "CBaseCombatCharacter::Weapon_ShootPosition()");
159+
}
147160

148161
StartPrepSDKCall(SDKCall_Raw);
149162
PrepSDKCall_SetReturnInfo(SDKType_PlainOldData, SDKPass_Plain);
@@ -152,49 +165,76 @@ public void OnPluginStart() {
152165
PrepSDKCall_AddParameter(SDKType_Bool, SDKPass_Plain);
153166
PrepSDKCall_AddParameter(SDKType_Bool, SDKPass_Plain);
154167
g_SDKCallPlayerSharedGetMaxHealth = EndPrepSDKCall();
168+
if (!g_SDKCallPlayerSharedGetMaxHealth) {
169+
SetFailState("Failed to set up call to " ... "CTFPlayerShared::GetMaxBuffedHealth()");
170+
}
155171

156172
StartPrepSDKCall(SDKCall_Raw);
157173
PrepSDKCall_SetFromConf(hGameConf, SDKConf_Signature, "CTFPlayerShared::Burn()");
158174
PrepSDKCall_AddParameter(SDKType_CBasePlayer, SDKPass_Pointer, VDECODE_FLAG_ALLOWNULL);
159175
PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer, VDECODE_FLAG_ALLOWNULL);
160176
PrepSDKCall_AddParameter(SDKType_Float, SDKPass_Plain);
161177
g_SDKCallPlayerSharedBurn = EndPrepSDKCall();
178+
if (!g_SDKCallPlayerSharedBurn) {
179+
SetFailState("Failed to set up call to " ... "CTFPlayerShared::Burn()");
180+
}
162181

163182
StartPrepSDKCall(SDKCall_Raw);
164183
PrepSDKCall_SetFromConf(hGameConf, SDKConf_Signature,
165184
"CTFPlayerShared::IsImmuneToPushback()");
166185
PrepSDKCall_SetReturnInfo(SDKType_Bool, SDKPass_Plain);
167186
g_SDKCallPlayerSharedImmuneToPushback = EndPrepSDKCall();
187+
if (!g_SDKCallPlayerSharedImmuneToPushback) {
188+
SetFailState("Failed to set up call to " ... "CTFPlayerShared::IsImmuneToPushback()");
189+
}
168190

169191
StartPrepSDKCall(SDKCall_Entity);
170192
PrepSDKCall_SetReturnInfo(SDKType_PlainOldData, SDKPass_Plain);
171193
PrepSDKCall_SetFromConf(hGameConf, SDKConf_Virtual, "CBaseEntity::GetMaxHealth()");
172194
g_SDKCallEntityGetMaxHealth = EndPrepSDKCall();
195+
if (!g_SDKCallEntityGetMaxHealth) {
196+
SetFailState("Failed to set up call to " ... "CBaseEntity::GetMaxHealth()");
197+
}
173198

174199
StartPrepSDKCall(SDKCall_Entity);
175200
PrepSDKCall_SetFromConf(hGameConf, SDKConf_Virtual, "CBaseEntity::IsBaseCombatWeapon()");
176201
PrepSDKCall_SetReturnInfo(SDKType_Bool, SDKPass_Plain);
177202
g_SDKCallIsEntityWeapon = EndPrepSDKCall();
203+
if (!g_SDKCallIsEntityWeapon) {
204+
SetFailState("Failed to set up call to " ... "CBaseEntity::IsBaseCombatWeapon()");
205+
}
178206

179207
StartPrepSDKCall(SDKCall_Entity);
180208
PrepSDKCall_SetFromConf(hGameConf, SDKConf_Virtual, "CBaseEntity::IsWearable()");
181209
PrepSDKCall_SetReturnInfo(SDKType_Bool, SDKPass_Plain);
182210
g_SDKCallIsEntityWearable = EndPrepSDKCall();
211+
if (!g_SDKCallIsEntityWearable) {
212+
SetFailState("Failed to set up call to " ... "CBaseEntity::IsWearable()");
213+
}
183214

184215
StartPrepSDKCall(SDKCall_Entity);
185216
PrepSDKCall_SetFromConf(hGameConf, SDKConf_Virtual, "CBaseCombatWeapon::GetSlot()");
186217
PrepSDKCall_SetReturnInfo(SDKType_PlainOldData, SDKPass_Plain);
187218
g_SDKCallWeaponGetSlot = EndPrepSDKCall();
219+
if (!g_SDKCallWeaponGetSlot) {
220+
SetFailState("Failed to set up call to " ... "CBaseCombatWeapon::GetSlot()");
221+
}
188222

189223
StartPrepSDKCall(SDKCall_Entity);
190224
PrepSDKCall_SetFromConf(hGameConf, SDKConf_Virtual, "CTFWeaponBase::GetWeaponID()");
191225
PrepSDKCall_SetReturnInfo(SDKType_PlainOldData, SDKPass_Plain);
192226
g_SDKCallWeaponGetID = EndPrepSDKCall();
227+
if (!g_SDKCallWeaponGetID) {
228+
SetFailState("Failed to set up call to " ... "CTFWeaponBase::GetWeaponID()");
229+
}
193230

194231
StartPrepSDKCall(SDKCall_Entity);
195232
PrepSDKCall_SetFromConf(hGameConf, SDKConf_Virtual, "CTFWeaponBase::GetMaxClip1()");
196233
PrepSDKCall_SetReturnInfo(SDKType_PlainOldData, SDKPass_Plain);
197234
g_SDKCallWeaponGetMaxClip = EndPrepSDKCall();
235+
if (!g_SDKCallWeaponGetMaxClip) {
236+
SetFailState("Failed to set up call to " ... "CTFWeaponBase::GetMaxClip1()");
237+
}
198238

199239
StartPrepSDKCall(SDKCall_Player);
200240
PrepSDKCall_SetFromConf(hGameConf, SDKConf_Signature,
@@ -203,11 +243,17 @@ public void OnPluginStart() {
203243
PrepSDKCall_AddParameter(SDKType_Bool, SDKPass_Plain);
204244
PrepSDKCall_SetReturnInfo(SDKType_CBaseEntity, SDKPass_Pointer);
205245
g_SDKCallPlayerGetEntityForLoadoutSlot = EndPrepSDKCall();
246+
if (!g_SDKCallPlayerGetEntityForLoadoutSlot) {
247+
SetFailState("Failed to set up call to " ... "CTFPlayer::GetEntityForLoadoutSlot()");
248+
}
206249

207250
StartPrepSDKCall(SDKCall_Player);
208251
PrepSDKCall_SetFromConf(hGameConf, SDKConf_Virtual, "CTFPlayer::EquipWearable()");
209252
PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer);
210253
g_SDKCallPlayerEquipWearable = EndPrepSDKCall();
254+
if (!g_SDKCallPlayerEquipWearable) {
255+
SetFailState("Failed to set up call to " ... "CTFPlayer::EquipWearable()");
256+
}
211257

212258
StartPrepSDKCall(SDKCall_Static);
213259
PrepSDKCall_SetFromConf(hGameConf, SDKConf_Signature, "PointInRespawnRoom()");
@@ -216,6 +262,11 @@ public void OnPluginStart() {
216262
PrepSDKCall_AddParameter(SDKType_Vector, SDKPass_ByRef);
217263
PrepSDKCall_AddParameter(SDKType_Bool, SDKPass_Plain);
218264
g_SDKCallPointInRespawnRoom = EndPrepSDKCall();
265+
if (!g_SDKCallPointInRespawnRoom) {
266+
SetFailState("Failed to set up call to " ... "PointInRespawnRoom()");
267+
}
268+
269+
// GameConfGetAddressOffset throws fail state if invalid; no need to validate here
219270

220271
// networked CUtlVector offset support landed in 1.11; try to locate an offset there first
221272
offs_CTFPlayer_hMyWearables =

0 commit comments

Comments
 (0)