· 7 years ago · Oct 26, 2018, 10:44 PM
1/* ===========================================================================
2
3 ----------------------------
4 -*- [ZP] Gameplay Custom -*-
5 ----------------------------
6
7 (c) 2017 - Taurus
8 Websites: http://8bits-gaming.com | http://cssick.com
9
10=========================================================================== */
11
12#include < amxmodx >
13#include < sqlx >
14#include < fakemeta >
15#define LIBRARY_GRENADE_FLARE "zp50_grenade_flare"
16#include < zp50_grenade_flare >
17#define LIBRARY_EFFECTS_LIGHTING "zp_effects_lighting"
18#include < zp_effects_lighting >
19#define LIBRARY_FLASHLIGHT "zp_flashlight"
20#include < zp_flashlight >
21#define LIBRARY_ITEM_ZOMBIE_MADNESS "zp50_item_zombie_madness"
22#include < zp50_item_zombie_madness >
23#include <zp_color>
24
25//#pragma semicolon 1;
26
27const _Offset_Linux = 5;
28const _Offset_CSMenu = 205;
29
30#define SQL_HOSTNAME "127.0.0.1"
31#define SQL_USERNAME "lgk"
32#define SQL_PASSWORD "HIOUyZwctgfMu0cP"
33#define SQL_DATABASE "zp_aps"
34
35// Pointer CVars! :)
36
37new g_iFlashlightCustom;
38new g_iMadnessAura;
39new g_szLightingOn[ 2 ];
40new g_szLightingOff[ 2 ];
41new bool:g_bIsLoaded[33]
42new Handle:g_hSQLTuple;
43
44public plugin_init( )
45{
46 register_plugin( "[ZP] Gameplay Custom", ZP_VERSION_STRING, "Taurus" );
47
48 register_clcmd( "say /gameplay_custom", "ClientCommand_GameplayCustom" );
49 register_clcmd( "say gameplay_custom", "ClientCommand_GameplayCustom" );
50 register_clcmd( "say /fps", "ClientCommand_GameplayCustom" );
51 register_clcmd( "say fps", "ClientCommand_GameplayCustom" );
52
53 SQL_CreateDatabase()
54}
55
56public plugin_cfg( )
57{
58 // Get cvars
59 bind_pcvar_num( get_cvar_pointer( "zp_flashlight_custom" ), g_iFlashlightCustom );
60 bind_pcvar_num( get_cvar_pointer( "zp_zombie_madness_aura" ), g_iMadnessAura );
61 bind_pcvar_string( get_cvar_pointer( "zp_lighting_on" ), g_szLightingOn, charsmax( g_szLightingOn ) );
62 bind_pcvar_string( get_cvar_pointer( "zp_lighting_off" ), g_szLightingOff, charsmax( g_szLightingOff ) );
63}
64
65public plugin_natives( )
66{
67 register_library( "zp_gameplay_custom" );
68
69 register_native( "zp_gameplay_custom_show_menu", "_gameplay_custom_show_menu" );
70 set_module_filter( "module_filter" );
71 set_native_filter( "native_filter" );
72}
73
74public ClientCommand_GameplayCustom( id )
75{
76 show_menu_gameplay_custom( id );
77}
78
79
80// We are going to integrate this stuff to the main menu! SO!!! :D
81public _gameplay_custom_show_menu( plugin_id, iParameter )
82{
83 new id = get_param( 1 );
84
85 if( !is_user_connected( id ) )
86 {
87 log_error( AMX_ERR_NATIVE, "[ZP] Player is not in-game (%d)", id );
88 return false;
89 }
90
91 show_menu_gameplay_custom( id );
92 return true;
93}
94
95public module_filter( const module[ ] )
96{
97 if( equal( module, LIBRARY_GRENADE_FLARE ) || equal( module, LIBRARY_EFFECTS_LIGHTING ) || equal( module, LIBRARY_FLASHLIGHT ) || equal( module, LIBRARY_ITEM_ZOMBIE_MADNESS ) )
98 return PLUGIN_HANDLED;
99
100 return PLUGIN_CONTINUE;
101}
102
103public native_filter( const native_name[ ], id, trap )
104{
105 if( !trap )
106 return PLUGIN_HANDLED;
107
108 return PLUGIN_CONTINUE;
109}
110
111public _menu_gameplay_custom( id, menu_id, iKey )
112{
113 if( iKey == MENU_EXIT )
114 {
115 menu_destroy( menu_id );
116 return PLUGIN_HANDLED;
117 }
118
119 static szItemData[ 2 ], iDummy, item_id;
120 menu_item_getinfo( menu_id, iKey, iDummy, szItemData, charsmax( szItemData ), _, _, iDummy );
121
122 item_id = szItemData[ 0 ];
123
124 switch( item_id )
125 {
126 // Flare grenade aura
127 case 0:
128 {
129 if( LibraryExists( LIBRARY_GRENADE_FLARE, LibType_Library ) )
130 {
131 zp_grenade_flare_set_aura( id, (zp_grenade_flare_get_aura( id ) < 1) ? false : true );
132
133 if( zp_grenade_flare_get_aura( id ) > 1 )
134 zp_color( id, "%L", id, "MSG_FLARE_AURA_ON" );
135 else
136 zp_color( id, "%L", id, "MSG_FLARE_AURA_OFF" );
137
138 show_menu_gameplay_custom( id );
139 }
140 else
141 show_menu_gameplay_custom( id );
142 }
143
144 // Map lighting
145 case 1:
146 {
147 if( LibraryExists( LIBRARY_EFFECTS_LIGHTING, LibType_Library ) && ( g_szLightingOn[ 0 ] != '0' && ( g_szLightingOn[ 0 ] != g_szLightingOff[ 0 ] ) ) )
148 {
149 zp_lighting_set( id, (zp_lighting_get( id ) < 1) ? false : true );
150
151 if( zp_lighting_get( id ) > 1 )
152 zp_color( id, "%L", id, "MSG_LIGHTING_ON" );
153 else
154 zp_color( id, "%L", id, "MSG_LIGHTING_OFF" );
155
156 show_menu_gameplay_custom( id );
157 }
158 else
159 show_menu_gameplay_custom( id );
160 }
161
162 // Flashlight
163 case 2:
164 {
165 if( LibraryExists( LIBRARY_FLASHLIGHT, LibType_Library ) && g_iFlashlightCustom )
166 {
167 zp_flashlight_set_aura( id, (zp_flashlight_get_aura( id ) < 1) ? false : true );
168
169 if( zp_flashlight_get_aura( id ) > 1 )
170 zp_color( id, "%L", id, "MSG_FLASHLIGHT_AURA_ON" );
171 else
172 zp_color( id, "%L", id, "MSG_FLASHLIGHT_AURA_OFF" );
173
174 show_menu_gameplay_custom( id );
175 }
176 else
177 show_menu_gameplay_custom( id );
178 }
179
180 // Zombie Madness
181 case 3:
182 {
183 if( LibraryExists( LIBRARY_ITEM_ZOMBIE_MADNESS, LibType_Library ) && g_iMadnessAura )
184 {
185 zp_item_zombie_madness_set_aura( id, (zp_item_zombie_madness_get_aura( id ) < 1) ? false : true );
186
187 if( zp_item_zombie_madness_get_aura( id ) > 1 )
188 zp_color( id, "%L", id, "MSG_MADNESS_AURA_ON" );
189 else
190 zp_color( id, "%L", id, "MSG_MADNESS_AURA_OFF" );
191
192 show_menu_gameplay_custom( id );
193 }
194 else
195 show_menu_gameplay_custom( id );
196 }
197 }
198
199 menu_destroy( menu_id );
200 return PLUGIN_HANDLED;
201}
202
203show_menu_gameplay_custom( id )
204{
205 static szMenuItem[ 128 ], szItemData[ 2 ];
206 formatex( szMenuItem, charsmax( szMenuItem ), "%s^n%L:\r", get_mode_name( ), id, "MENU_TITLE_GAMEPLAY_CUSTOM" );
207
208 new menu_id = menu_create( szMenuItem, "_menu_gameplay_custom" );
209
210 new const szMenuItemTranskey[ ][ ] =
211 {
212 "MSG_TOGGLE_FLARE_AURA",
213 "MSG_TOGGLE_MAP_LIGHTING",
214 "MSG_TOGGLE_FLASHLIGHT_AURA",
215 "MSG_TOGGLE_MADNESS_AURA"
216 };
217
218 for( new iLoop = 0; iLoop < sizeof( szMenuItemTranskey ); iLoop ++ )
219 {
220 switch( iLoop )
221 {
222 // Flare grenade aura
223 case 0:
224 {
225 if( LibraryExists( LIBRARY_GRENADE_FLARE, LibType_Library ) )
226 formatex( szMenuItem, charsmax( szMenuItem ), "\r%L \y[%L]", id, szMenuItemTranskey[ iLoop ], id, (zp_grenade_flare_get_aura( id ) > 0) ? "MSG_ENABLED" : "MSG_DISABLED" );
227 else
228 formatex( szMenuItem, charsmax( szMenuItem ), "\d%L", id, szMenuItemTranskey[ iLoop ] );
229 }
230
231 // Map lighting
232 case 1:
233 {
234 if( LibraryExists( LIBRARY_EFFECTS_LIGHTING, LibType_Library ) && ( g_szLightingOn[ 0 ] != '0' && ( g_szLightingOn[ 0 ] != g_szLightingOff[ 0 ] ) ) )
235 formatex( szMenuItem, charsmax( szMenuItem ), "\r%L \y[%L]", id, szMenuItemTranskey[ iLoop ], id, (zp_lighting_get( id ) > 0) ? "MSG_ENABLED" : "MSG_DISABLED" );
236 else
237 formatex( szMenuItem, charsmax( szMenuItem ), "\d%L", id, szMenuItemTranskey[ iLoop ] );
238 }
239
240 // Flashlight
241 case 2:
242 {
243 if( LibraryExists( LIBRARY_FLASHLIGHT, LibType_Library ) && g_iFlashlightCustom )
244 formatex( szMenuItem, charsmax( szMenuItem ), "\r%L \y[%L]", id, szMenuItemTranskey[ iLoop ], id, (zp_flashlight_get_aura( id ) > 0) ? "MSG_ENABLED" : "MSG_DISABLED" );
245 else
246 formatex( szMenuItem, charsmax( szMenuItem ), "\d%L", id, szMenuItemTranskey[ iLoop ] );
247 }
248
249 // Zombie Madness
250 case 3:
251 {
252 if( LibraryExists( LIBRARY_ITEM_ZOMBIE_MADNESS, LibType_Library ) && g_iMadnessAura )
253 formatex( szMenuItem, charsmax( szMenuItem ), "\r%L \y[%L]", id, szMenuItemTranskey[ iLoop ], id, (zp_item_zombie_madness_get_aura( id ) > 0) ? "MSG_ENABLED" : "MSG_DISABLED" );
254 else
255 formatex( szMenuItem, charsmax( szMenuItem ), "\d%L", id, szMenuItemTranskey[ iLoop ] );
256 }
257 }
258
259 szItemData[ 0 ] = iLoop;
260 szItemData[ 1 ] = 0;
261
262 menu_additem( menu_id, szMenuItem, szItemData );
263 }
264
265 if( menu_items( menu_id ) <= 0 )
266 {
267 menu_destroy( menu_id );
268 return;
269 }
270
271 // formatex( szMenuItem, charsmax( szMenuItem ), "%L", id, "MENU_BACK" );
272 // menu_setprop( menu_id, MPROP_BACKNAME, szMenuItem );
273
274 // formatex( szMenuItem, charsmax( szMenuItem ), "%L", id, "MENU_NEXT" );
275 // menu_setprop( menu_id, MPROP_NEXTNAME, szMenuItem );
276
277 formatex( szMenuItem, charsmax( szMenuItem ), "\r%L", id, "MENU_EXIT" );
278 menu_setprop( menu_id, MPROP_EXITNAME, szMenuItem );
279 menu_setprop(menu_id, MPROP_NUMBER_COLOR, "\y")
280
281 set_pdata_int( id, _Offset_CSMenu, 0, _Offset_Linux );
282 menu_display( id, menu_id );
283}
284
285get_mode_name( )
286{
287 static szModeName[ 32 ];
288 formatex( szModeName, charsmax( szModeName ), "Legend Killers" );
289
290 return szModeName;
291}
292
293public client_disconnected(id)
294{
295 if (g_bIsLoaded[id])
296 {
297 SQL_UpdatePlayer(id)
298 g_bIsLoaded[id] = false
299 }
300}
301
302public client_putinserver(id)
303{
304 g_bIsLoaded[id] = true
305 SQL_InsertPlayer(id)
306}
307
308public plugin_end()
309{
310 if (g_hSQLTuple)
311 SQL_FreeHandle(g_hSQLTuple)
312}
313
314public SQL_ThreadQuery_Select( iFailState, Handle:hQuery, szError[ ], iError, szData[ ], iData )
315{
316 if( iFailState != TQUERY_SUCCESS )
317 {
318 set_fail_state( szError );
319 return;
320 }
321
322 static id, iUser;
323 id = szData[ 0 ];
324 iUser = szData[ 1 ];
325
326 if( get_user_userid( id ) != iUser )
327 return;
328
329 new bFlare[33], bLighting[33], bFlashlight[33], bMadness[33]
330
331 bFlare[ id ] = SQL_ReadResult( hQuery, SQL_FieldNameToNum( hQuery, "flare_aura" ) );
332 bLighting[ id ] = SQL_ReadResult( hQuery, SQL_FieldNameToNum( hQuery, "lighting_map" ) );
333 bFlashlight[ id ] = SQL_ReadResult( hQuery, SQL_FieldNameToNum( hQuery, "flashlight" ) );
334 bMadness[ id ] = SQL_ReadResult( hQuery, SQL_FieldNameToNum( hQuery, "madness_aura" ) );
335
336 zp_grenade_flare_set_aura( id, bFlare[ id ] ? 0 : 1 );
337 zp_lighting_set( id, bLighting[ id ] ? 0 : 1 );
338 zp_flashlight_set_aura( id, bFlashlight[ id ] ? 0 : 1 );
339 zp_item_zombie_madness_set_aura( id, bMadness[ id ] ? 0 : 1 );
340
341 // Set that the data has been loaded
342 g_bIsLoaded[id] = true
343
344 SQL_FreeHandle( hQuery );
345}
346
347SQL_CreateDatabase( )
348{
349 g_hSQLTuple = SQL_MakeDbTuple( SQL_HOSTNAME, SQL_USERNAME, SQL_PASSWORD, SQL_DATABASE );
350
351 if( !g_hSQLTuple )
352 {
353 set_fail_state( "Could not make database tuple" );
354 SQL_FreeHandle( g_hSQLTuple );
355 return;
356 }
357
358 static szQuery[ 512 ];
359 formatex( szQuery, charsmax( szQuery ), "CREATE TABLE IF NOT EXISTS `cs_zp_stats` ( `auth_id` VARCHAR( 32 ), `player_name` VARCHAR( 32 ), `flare_aura` INT( 11 ) NOT NULL DEFAULT 0, `lighting_map` INT( 11 ) NOT NULL DEFAULT 0, `flashlight` INT( 11 ) NOT NULL DEFAULT 0, `madness_aura` INT( 11 ) NOT NULL DEFAULT 0, UNIQUE( `auth_id` ) );" );
360 SQL_ThreadQuery( g_hSQLTuple, "SQL_ThreadQuery_Empty", szQuery );
361}
362
363SQL_InsertPlayer( id )
364{
365 static szAuth[ 32 ];
366 get_user_authid( id, szAuth, charsmax( szAuth ) );
367
368// if( !is_steam_valid( szAuth ) )
369// return;
370
371 static szName[ 64 ];
372 get_user_name( id, szName, charsmax( szName ) );
373
374 replace_all( szName, charsmax( szName ), "'", "''" );
375
376 static szData[ 2 ], szQuery[ 256 ];
377 szData[ 0 ] = id;
378 szData[ 1 ] = get_user_userid( id );
379
380 formatex( szQuery, charsmax( szQuery ), "INSERT INTO `cs_zp_stats` ( `auth_id`, `player_name` ) VALUES ( '%s', '%s' ) ON DUPLICATE KEY UPDATE `player_name` = '%s';", szAuth, szName, szName );
381 SQL_ThreadQuery( g_hSQLTuple, "SQL_ThreadQuery_Insert", szQuery, szData, sizeof( szData ) );
382}
383
384SQL_UpdatePlayer( id )
385{
386 static szAuth[ 32 ];
387 get_user_authid( id, szAuth, charsmax( szAuth ) );
388
389// if( !is_steam_valid( szAuth ) )
390// return;
391
392 static szName[ 64 ], szQuery[ 512 ];
393 get_user_name( id, szName, charsmax( szName ) );
394
395 replace_all( szName, charsmax( szName ), "'", "''" );
396
397 formatex( szQuery, charsmax( szQuery ), "UPDATE `cs_zp_stats` SET `player_name` = '%s', `flare_aura` = %d, `lighting_map` = %d, `flashlight` = %d, `madness_aura` = %d WHERE `auth_id` = '%s';", szName, zp_grenade_flare_get_aura(id), zp_lighting_get(id), zp_flashlight_get_aura(id), zp_item_zombie_madness_get_aura(id), szAuth );
398 SQL_ThreadQuery( g_hSQLTuple, "SQL_ThreadQuery_Empty", szQuery );
399}
400
401public SQL_ThreadQuery_Empty( iFailState, Handle:hQuery, szError[ ], iError, szData[ ], iData )
402{
403 if( iFailState != TQUERY_SUCCESS )
404 {
405 set_fail_state( szError );
406 return;
407 }
408
409 SQL_FreeHandle( hQuery );
410}
411
412public SQL_ThreadQuery_Insert( iFailState, Handle:hQuery, szError[ ], iError, szData[ ], iData )
413{
414 if( iFailState != TQUERY_SUCCESS )
415 {
416 set_fail_state( szError );
417 return;
418 }
419
420 static id, iUser;
421 id = szData[ 0 ];
422 iUser = szData[ 1 ];
423
424 if( get_user_userid( id ) != iUser )
425 return;
426
427 static szAuth[ 32 ], szQuery[ 256 ];
428 get_user_authid( id, szAuth, charsmax( szAuth ) );
429
430 formatex( szQuery, charsmax( szQuery ), "SELECT `flare_aura`, `lighting_map`, `flashlight`, `madness_aura` FROM `cs_zp_stats` WHERE `auth_id` = '%s';", szAuth );
431 SQL_ThreadQuery( g_hSQLTuple, "SQL_ThreadQuery_Select", szQuery, szData, iData );
432
433 SQL_FreeHandle( hQuery );
434}