4
4
#include < server/configuration/configuration.h>
5
5
#include < sdk/schema.h>
6
6
#include < entities/system.h>
7
- #include < public/entity2/entitykeyvalues.h>
7
+
8
+ std::vector<CEntityKeyValues*> scheduleForDelete;
8
9
9
10
ScreenText::~ScreenText ()
10
11
{
@@ -28,6 +29,8 @@ void ScreenText::Create(Color color, std::string font, int size, bool drawBackgr
28
29
29
30
CEntityKeyValues* pMenuKV = new CEntityKeyValues ();
30
31
32
+ scheduleForDelete.push_back (pMenuKV);
33
+
31
34
pMenuKV->SetBool (" enabled" , true );
32
35
pMenuKV->SetFloat (" world_units_per_pixel" , (0.25 / 1050 ) * size);
33
36
pMenuKV->SetInt (" justify_horizontal" , 0 );
@@ -38,13 +41,14 @@ void ScreenText::Create(Color color, std::string font, int size, bool drawBackgr
38
41
pMenuKV->SetString (" font_name" , font.c_str ());
39
42
pMenuKV->SetColor (" color" , color);
40
43
41
- if (drawBackground) {
44
+ if (drawBackground) {
42
45
pMenuKV->SetBool (" draw_background" , true );
43
46
44
- if (isMenu) {
47
+ if (isMenu) {
45
48
pMenuKV->SetFloat (" background_border_width" , 0.2 );
46
49
pMenuKV->SetFloat (" background_border_height" , 0.15 );
47
- } else {
50
+ }
51
+ else {
48
52
pMenuKV->SetFloat (" background_border_width" , g_Config.FetchValue <float >(" core.vgui.textBackground.paddingX" ));
49
53
pMenuKV->SetFloat (" background_border_height" , g_Config.FetchValue <float >(" core.vgui.textBackground.paddingY" ));
50
54
}
@@ -68,7 +72,7 @@ void ScreenText::SetupViewForPlayer(Player* player)
68
72
if (!pViewModel) return ;
69
73
70
74
g_entSystem.AcceptInput (pScreenEntity, " SetParent" , pViewModel, nullptr , " !activator" , 0 );
71
- schema::SetProp<CHandle<CEntityInstance>>(pScreenEntity, " CBaseEntity" , " m_hOwnerEntity" , ((CEntityInstance*)pViewModel)->GetRefEHandle ());
75
+ schema::SetProp<CHandle<CEntityInstance>>(pScreenEntity, " CBaseEntity" , " m_hOwnerEntity" , ((CEntityInstance*)( pViewModel) )->GetRefEHandle ());
72
76
}
73
77
74
78
void ScreenText::SetText (std::string text)
@@ -88,31 +92,31 @@ void ScreenText::SetPosition(float posX, float posY)
88
92
89
93
if (!m_player) return ;
90
94
if (m_player->IsFakeClient ()) return ;
91
- if (!pScreenEntity) return ;
95
+ if (!pScreenEntity) return ;
92
96
93
97
auto pawn = m_player->GetPlayerPawn ();
94
- if (!pawn) return ;
98
+ if (!pawn) return ;
95
99
96
- if (schema::GetProp<uint32_t >(pawn, " CBaseEntity" , " m_lifeState" ) == 2 ) {
100
+ if (schema::GetProp<uint32_t >(pawn, " CBaseEntity" , " m_lifeState" ) == 2 ) {
97
101
auto controller = m_player->GetController ();
98
- if (!controller) return ;
99
- if (schema::GetProp<bool >(controller, " CCSPlayerController" , " m_bControllingBot" )) return ;
102
+ if (!controller) return ;
103
+ if (schema::GetProp<bool >(controller, " CCSPlayerController" , " m_bControllingBot" )) return ;
100
104
101
105
auto observerServices = schema::GetProp<void *>(pawn, " CBasePlayerPawn" , " m_pObserverServices" );
102
- if (!observerServices) return ;
106
+ if (!observerServices) return ;
103
107
104
108
CHandle<CEntityInstance> observerTarget = schema::GetProp<CHandle<CEntityInstance>>(observerServices, " CPlayer_ObserverServices" , " m_hObserverTarget" );
105
- if (!observerTarget) return ;
109
+ if (!observerTarget) return ;
106
110
107
111
auto observerController = schema::GetProp<CHandle<CEntityInstance>>(observerTarget.Get (), " CCSPlayerPawnBase" , " m_hOriginalController" );
108
- if (!observerController) return ;
112
+ if (!observerController) return ;
109
113
110
114
CHandle<CEntityInstance> pawnHandle = schema::GetProp<CHandle<CEntityInstance>>(observerController, " CCSPlayerController" , " m_hPlayerPawn" );
111
- if (!pawnHandle) return ;
115
+ if (!pawnHandle) return ;
112
116
pawn = (void *)(pawnHandle.Get ());
113
117
}
114
118
115
- if (!pawn) return ;
119
+ if (!pawn) return ;
116
120
117
121
QAngle eyeAngles = schema::GetProp<QAngle>(pawn, " CCSPlayerPawnBase" , " m_angEyeAngles" );
118
122
Vector fwd, right, up;
@@ -126,13 +130,13 @@ void ScreenText::SetPosition(float posX, float posY)
126
130
QAngle ang (0 , eyeAngles.y + 270 , 90 - eyeAngles.x );
127
131
128
132
void * bodyComponent = schema::GetProp<void *>(pawn, " CBaseEntity" , " m_CBodyComponent" );
129
- if ( bodyComponent) return ;
133
+ if (! bodyComponent) return ;
130
134
131
135
void * sceneNode = schema::GetProp<void *>(bodyComponent, " CBodyComponent" , " m_pSceneNode" );
132
- if (!sceneNode) return ;
136
+ if (!sceneNode) return ;
133
137
134
138
void * camServices = schema::GetProp<void *>(pawn, " CBasePlayerPawn" , " m_pCameraServices" );
135
- if (!camServices) return ;
139
+ if (!camServices) return ;
136
140
137
141
float oldZ = schema::GetProp<float >(camServices, " CPlayer_CameraServices" , " m_flOldPlayerViewOffsetZ" );
138
142
@@ -190,4 +194,11 @@ bool ScreenText::IsRenderingTo(CHandle<CEntityInstance> renderingTo)
190
194
void ScreenText::SetRenderingTo (CEntityInstance* ent)
191
195
{
192
196
pRenderingTo.Set (ent);
197
+ }
198
+
199
+ void EraseScheduledCEntKeyVals () {
200
+ for (auto e : scheduleForDelete) {
201
+ delete e;
202
+ }
203
+ scheduleForDelete.clear ();
193
204
}
0 commit comments