Add WaitingForPlayers forwards to TF2 extension (bug 4704, r=pred)
This commit is contained in:
parent
6267c17c6b
commit
c9eaca0e56
@ -17,6 +17,7 @@ binary.AddSourceFiles('extensions/tf2', [
|
||||
'util.cpp',
|
||||
'criticals.cpp',
|
||||
'holiday.cpp',
|
||||
'gameplayrules.cpp'
|
||||
'CDetour/detours.cpp',
|
||||
'sdk/smsdk_ext.cpp',
|
||||
'asm/asm.c'
|
||||
|
@ -19,7 +19,7 @@ PROJECT = game.tf2
|
||||
USEMETA = true
|
||||
|
||||
OBJECTS = sdk/smsdk_ext.cpp extension.cpp natives.cpp RegNatives.cpp criticals.cpp \
|
||||
holiday.cpp util.cpp CDetour/detours.cpp asm/asm.c
|
||||
holiday.cpp gameplayrules.cpp util.cpp CDetour/detours.cpp asm/asm.c
|
||||
|
||||
##############################################
|
||||
### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
|
||||
|
@ -37,6 +37,7 @@
|
||||
#include "sm_trie_tpl.h"
|
||||
#include "criticals.h"
|
||||
#include "holiday.h"
|
||||
#include "gameplayrules.h"
|
||||
#include "CDetour/detours.h"
|
||||
|
||||
/**
|
||||
@ -110,11 +111,14 @@ bool TF2Tools::SDK_OnLoad(char *error, size_t maxlength, bool late)
|
||||
|
||||
g_critForward = forwards->CreateForward("TF2_CalcIsAttackCritical", ET_Hook, 4, NULL, Param_Cell, Param_Cell, Param_String, Param_CellByRef);
|
||||
g_getHolidayForward = forwards->CreateForward("TF2_OnGetHoliday", ET_Event, 1, NULL, Param_CellByRef);
|
||||
g_waitingPlayersStartForward = forwards->CreateForward("TF2_OnWaitingForPlayersStart", ET_Ignore, 0, NULL);
|
||||
g_waitingPlayersEndForward = forwards->CreateForward("TF2_OnWaitingForPlayersEnd", ET_Ignore, 0, NULL);
|
||||
|
||||
g_pCVar = icvar;
|
||||
|
||||
m_CritDetoursEnabled = false;
|
||||
m_GetHolidayDetourEnabled = false;
|
||||
m_RulesDetoursEnabled = false;
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -159,6 +163,8 @@ void TF2Tools::SDK_OnUnload()
|
||||
|
||||
forwards->ReleaseForward(g_critForward);
|
||||
forwards->ReleaseForward(g_getHolidayForward);
|
||||
forwards->ReleaseForward(g_waitingPlayersStartForward);
|
||||
forwards->ReleaseForward(g_waitingPlayersEndForward);
|
||||
}
|
||||
|
||||
void TF2Tools::SDK_OnAllLoaded()
|
||||
@ -311,6 +317,14 @@ void TF2Tools::OnPluginLoaded(IPlugin *plugin)
|
||||
InitialiseGetHolidayDetour();
|
||||
m_GetHolidayDetourEnabled = true;
|
||||
}
|
||||
if (!m_RulesDetoursEnabled)
|
||||
{
|
||||
if(g_waitingPlayersStartForward->GetFunctionCount() || g_waitingPlayersEndForward->GetFunctionCount())
|
||||
{
|
||||
InitialiseRulesDetours();
|
||||
m_RulesDetoursEnabled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void TF2Tools::OnPluginUnloaded(IPlugin *plugin)
|
||||
@ -325,6 +339,14 @@ void TF2Tools::OnPluginUnloaded(IPlugin *plugin)
|
||||
RemoveGetHolidayDetour();
|
||||
m_GetHolidayDetourEnabled = false;
|
||||
}
|
||||
if (m_RulesDetoursEnabled)
|
||||
{
|
||||
if(!g_waitingPlayersStartForward->GetFunctionCount() || !g_waitingPlayersEndForward->GetFunctionCount())
|
||||
{
|
||||
RemoveRulesDetours();
|
||||
m_RulesDetoursEnabled = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
int FindResourceEntity()
|
||||
{
|
||||
|
@ -114,6 +114,7 @@ public:
|
||||
private:
|
||||
bool m_CritDetoursEnabled;
|
||||
bool m_GetHolidayDetourEnabled;
|
||||
bool m_RulesDetoursEnabled;
|
||||
};
|
||||
|
||||
enum TFClassType
|
||||
|
83
extensions/tf2/gameplayrules.cpp
Normal file
83
extensions/tf2/gameplayrules.cpp
Normal file
@ -0,0 +1,83 @@
|
||||
/**
|
||||
* vim: set ts=4 :
|
||||
* =============================================================================
|
||||
* SourceMod Team Fortress 2 Extension
|
||||
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||
* =============================================================================
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License, version 3.0, as published by the
|
||||
* Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* As a special exception, AlliedModders LLC gives you permission to link the
|
||||
* code of this program (as well as its derivative works) to "Half-Life 2," the
|
||||
* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
|
||||
* by the Valve Corporation. You must obey the GNU General Public License in
|
||||
* all respects for all other code used. Additionally, AlliedModders LLC grants
|
||||
* this exception to all derivative works. AlliedModders LLC defines further
|
||||
* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
|
||||
* or <http://www.sourcemod.net/license.php>.
|
||||
*
|
||||
* Version: $Id$
|
||||
*/
|
||||
|
||||
#include "gameplayrules.h"
|
||||
|
||||
CDetour *setInWaitingForPlayersDetour = NULL;
|
||||
|
||||
IForward *g_waitingPlayersStartForward = NULL;
|
||||
IForward *g_waitingPlayersEndForward = NULL;
|
||||
|
||||
DETOUR_DECL_MEMBER1(SetInWaitingForPlayers, void, bool, bWaitingForPlayers)
|
||||
{
|
||||
DETOUR_MEMBER_CALL(SetInWaitingForPlayers)(bWaitingForPlayers);
|
||||
|
||||
if (bWaitingForPlayers)
|
||||
{
|
||||
if (!g_waitingPlayersStartForward)
|
||||
{
|
||||
g_pSM->LogMessage(myself, "Invalid Forward");
|
||||
}
|
||||
else
|
||||
{
|
||||
g_waitingPlayersStartForward->Execute(NULL);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!g_waitingPlayersEndForward)
|
||||
{
|
||||
g_pSM->LogMessage(myself, "Invalid Forward");
|
||||
}
|
||||
else
|
||||
{
|
||||
g_waitingPlayersEndForward->Execute(NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void InitialiseRulesDetours()
|
||||
{
|
||||
setInWaitingForPlayersDetour = DETOUR_CREATE_MEMBER(SetInWaitingForPlayers, "SetInWaitingForPlayers");
|
||||
|
||||
if (setInWaitingForPlayersDetour != NULL)
|
||||
{
|
||||
setInWaitingForPlayersDetour->EnableDetour();
|
||||
return;
|
||||
}
|
||||
|
||||
g_pSM->LogError(myself, "No Gameplay Rules detours could be initialized - Disabled Gameplay Rules functions");
|
||||
}
|
||||
|
||||
void RemoveRulesDetours()
|
||||
{
|
||||
setInWaitingForPlayersDetour->Destroy();
|
||||
}
|
46
extensions/tf2/gameplayrules.h
Normal file
46
extensions/tf2/gameplayrules.h
Normal file
@ -0,0 +1,46 @@
|
||||
/**
|
||||
* vim: set ts=4 :
|
||||
* =============================================================================
|
||||
* SourceMod Team Fortress 2 Extension
|
||||
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||
* =============================================================================
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License, version 3.0, as published by the
|
||||
* Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* As a special exception, AlliedModders LLC gives you permission to link the
|
||||
* code of this program (as well as its derivative works) to "Half-Life 2," the
|
||||
* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
|
||||
* by the Valve Corporation. You must obey the GNU General Public License in
|
||||
* all respects for all other code used. Additionally, AlliedModders LLC grants
|
||||
* this exception to all derivative works. AlliedModders LLC defines further
|
||||
* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
|
||||
* or <http://www.sourcemod.net/license.php>.
|
||||
*
|
||||
* Version: $Id$
|
||||
*/
|
||||
|
||||
#ifndef _INCLUDE_SOURCEMOD_GAMEPLAY_RULES_H_
|
||||
#define _INCLUDE_SOURCEMOD_GAMEPLAY_RULES_H_
|
||||
|
||||
#include "extension.h"
|
||||
#include <jit/jit_helpers.h>
|
||||
#include <jit/x86/x86_macros.h>
|
||||
#include "CDetour/detours.h"
|
||||
|
||||
void InitialiseRulesDetours();
|
||||
void RemoveRulesDetours();
|
||||
|
||||
extern IForward *g_waitingPlayersStartForward;
|
||||
extern IForward *g_waitingPlayersEndForward;
|
||||
|
||||
#endif //_INCLUDE_SOURCEMOD_GAMEPLAY_RULES_H_
|
@ -59,6 +59,7 @@
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="BINARY_NAME=\"$(TargetFileName)\""
|
||||
AdditionalIncludeDirectories=""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
@ -194,6 +195,10 @@
|
||||
RelativePath="..\extension.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\gameplayrules.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\holiday.cpp"
|
||||
>
|
||||
@ -224,6 +229,10 @@
|
||||
RelativePath="..\extension.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\gameplayrules.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\holiday.h"
|
||||
>
|
||||
|
@ -280,6 +280,20 @@ forward Action:TF2_OnGetHoliday(&TFHoliday:holiday);
|
||||
*/
|
||||
native bool:TF2_IsPlayerInDuel(client);
|
||||
|
||||
/**
|
||||
* Called when the server enters the Waiting for Players round state
|
||||
*
|
||||
* @noreturn
|
||||
*/
|
||||
forward TF2_OnWaitingForPlayersStart();
|
||||
|
||||
/**
|
||||
* Called when the server exits the Waiting for Players round state
|
||||
*
|
||||
* @noreturn
|
||||
*/
|
||||
forward TF2_OnWaitingForPlayersEnd();
|
||||
|
||||
/**
|
||||
* Do not edit below this line!
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user