· 9 years ago · Oct 01, 2016, 04:04 PM
1#include <amxmodx>
2#include <amxmisc>
3#include <colorchat>
4#include <hamsandwich>
5#include <fakemeta>
6#include <sqlx>
7
8#pragma semicolon 1
9
10#define USE_CONFIG_FILE 1
11
12enum _:PlData {
13 gLoaded,
14 gAuthed,
15 gLifes,
16 gIncreaseLifes,
17 gVip
18}
19enum PluginCvars {
20 PREFIX,
21 GIVE,
22 LIFE,
23 RESPAWN,
24 MYLIFE,
25 MAX_LIFE,
26 KILL_MESSAGE,
27 VIP_FLAG
28}
29enum LifeAwardCvars {
30 KILL,
31 HEADSHOT,
32 HE_GRENADE,
33 AWP
34}
35
36new UserData[ 33 ][ PlData ], iCvars[ PluginCvars ], lifeCvars[ LifeAwardCvars ];
37
38new bool:g_sql_ready = false;
39
40new Handle:g_SqlConnection;
41new Handle:g_SqlTuple;
42
43new g_Error[ 512 ], g_szPrefix[ 32 ], g_iVipFlag[ 7 ];
44
45new g_iMaxPlayers, g_iGiveCmd, g_iLifeCmd, g_iRespawnCmd, g_iMyLifeCmd, g_iMaxLife, g_iKillerMessage, g_iSync;
46new g_iKill, g_iHeadShot, g_iHeGrenade, g_iAwp;
47
48new const PLUGIN[] = "Deathrun: Life System";
49new const VERSION[] = "v1.1b";
50new const AUTHOR[] = "AJW1337//";
51
52public plugin_init()
53{
54 register_plugin( PLUGIN, VERSION, AUTHOR );
55
56 iCvars[ PREFIX ] = register_cvar( "dr_lifes_prefix", " Deathrun: Lifes " );
57 get_pcvar_string( iCvars[ PREFIX ], g_szPrefix, charsmax ( g_szPrefix ) );
58
59 iCvars[ VIP_FLAG ] = register_cvar( "dr_lifes_vip_flag", "t" );
60 get_pcvar_string( iCvars[ VIP_FLAG ], g_iVipFlag, charsmax ( g_iVipFlag ) );
61
62 iCvars[ GIVE ] = register_cvar( "dr_lifes_give_command", "1" );
63 g_iGiveCmd = get_pcvar_num( iCvars[ GIVE ] );
64
65 iCvars[ LIFE ] = register_cvar( "dr_lifes_life_command", "1" );
66 g_iLifeCmd = get_pcvar_num( iCvars[ LIFE ] );
67
68 iCvars[ RESPAWN ] = register_cvar( "dr_lifes_respawn_command", "1" );
69 g_iRespawnCmd = get_pcvar_num( iCvars[ RESPAWN ] );
70
71 iCvars[ MYLIFE ] = register_cvar( "dr_lifes_mylife_command", "1" );
72 g_iMyLifeCmd = get_pcvar_num( iCvars[ MYLIFE ] );
73
74 iCvars[ MAX_LIFE ] = register_cvar( "dr_lifes_max_lifes", "500" );
75 g_iMaxLife = get_pcvar_num( iCvars[ MAX_LIFE ] );
76
77 iCvars[ KILL_MESSAGE ] = register_cvar( "dr_lifes_killer_message", "1" );
78 g_iKillerMessage = get_pcvar_num( iCvars[ KILL_MESSAGE ] );
79
80 lifeCvars[ KILL ] = register_cvar( "dr_lifes_kill_life", "1" );
81 g_iKill = get_pcvar_num( lifeCvars[ KILL ] );
82
83 lifeCvars[ HEADSHOT ] = register_cvar( "dr_lifes_headshot_life", "1" );
84 g_iHeadShot = get_pcvar_num( lifeCvars[ HEADSHOT ] );
85
86 lifeCvars[ HE_GRENADE ] = register_cvar( "dr_lifes_he_grenade_life", "1" );
87 g_iHeGrenade = get_pcvar_num( lifeCvars[ HE_GRENADE ] );
88
89 lifeCvars[ AWP ] = register_cvar( "dr_lifes_awp_life", "1" );
90 g_iAwp = get_pcvar_num( lifeCvars[ AWP ] );
91
92 register_event( "DeathMsg", "HookDeathMsg", "a" );
93 register_forward( FM_Sys_Error, "fw_ServerDown" );
94 register_forward( FM_GameShutdown, "fw_ServerDown" );
95 register_forward( FM_ServerDeactivate, "fw_ServerDown" );
96
97 register_clcmd( "say", "hook_say" );
98 register_clcmd( "say_team", "hook_say" );
99
100 register_concmd( "amx_give_lifes", "cmd_give_lifes", ADMIN_RCON, "<name> <lifes amount>" );
101 register_concmd( "amx_take_lifes", "cmd_take_lifes", ADMIN_RCON, "<name> <lifes amount>" );
102 register_concmd( "amx_give_lifes_all", "cmd_give_lifes_all", ADMIN_RCON, "<lifes amount>" );
103
104
105 g_iSync = CreateHudSyncObj( );
106 set_task( 1.0, "displayHud",_,_, _, "b" );
107
108 g_iMaxPlayers = get_maxplayers( );
109 set_task( 1.0, "MySql_Init" );
110
111 #if USE_CONFIG_FILE == 1
112 set_task( 1.0, "taskLoadFile" );
113 #endif
114}
115public fw_ServerDown( )
116{
117 for ( new i = 0; i <= g_iMaxPlayers; i++ )
118 {
119 if ( is_user_connected( i ) )
120 Save_MySql( i );
121 }
122}
123public displayHud( )
124{
125 new iPlayers[ 32 ], iNum;
126 get_players( iPlayers, iNum, "ach" );
127
128 set_hudmessage( 255, 255, 42, 0.01, 0.92, 0, 1.0, 1.0 );
129 for (new i; i < iNum; i++) ShowSyncHudMsg( iPlayers[i], g_iSync, "Lifes: %i", UserData[ iPlayers[ i ] ][ gLifes ] );
130}
131public client_putinserver( id )
132{
133 UserData[ id ][ gVip ] = ( get_user_flags( id ) & read_flags( g_iVipFlag ) ) ? true : false;
134 UserData[ id ][ gAuthed ] = true;
135 Load_MySql( id );
136}
137public client_disconnect( id )
138{
139 Save_MySql( id );
140}
141public cmd_give_lifes( id, level,cid )
142{
143 if ( !cmd_access ( id, level, cid, 3 ) )
144 return PLUGIN_HANDLED;
145
146 new szArgs[32], szAmount[ 32 ], iTarget, iLifes;
147
148 read_argv( 1, szArgs, charsmax( szArgs ) );
149 read_argv( 2, szAmount, charsmax ( szAmount ) );
150
151 iTarget = cmd_target( id, szArgs, 8 );
152
153 if( !iTarget ) return PLUGIN_HANDLED;
154
155 new szAdminName[ 32 ], szTargetName[ 32 ];
156 get_user_name( id, szAdminName, charsmax ( szAdminName ) );
157 get_user_name( iTarget, szTargetName, charsmax ( szTargetName ) );
158
159 iLifes = str_to_num( szAmount );
160
161 UserData[ iTarget ][ gLifes ] += iLifes;
162 ColorChat( 0, GREY, "^4[%s]^3 ADMIN^4 %s^3: give^4 %i^3 lifes to^4 %s^3.", g_szPrefix, szAdminName, iLifes, szTargetName );
163
164 Save_MySql( id );
165 return PLUGIN_CONTINUE;
166}
167
168public cmd_take_lifes(id, level,cid)
169{
170 if ( !cmd_access ( id, level, cid, 3 ) )
171 return PLUGIN_HANDLED;
172
173 new szArgs[32], szAmount[ 32 ], iTarget, iLifes;
174
175 read_argv( 1, szArgs, charsmax( szArgs ) );
176 read_argv( 2, szAmount, charsmax ( szAmount ) );
177
178 iTarget = cmd_target( id, szArgs, 8 );
179
180 if( !iTarget ) return PLUGIN_HANDLED;
181
182 new szAdminName[ 32 ], szTargetName[ 32 ];
183 get_user_name( id, szAdminName, charsmax ( szAdminName ) );
184 get_user_name( iTarget, szTargetName, charsmax ( szTargetName ) );
185
186 iLifes = str_to_num( szAmount );
187
188 if( UserData[ iTarget ][ gLifes ] < iLifes )
189 {
190 console_print(id, "Player %s doesn't even have %d lifes! He has: %d lifes.", szTargetName, iLifes, UserData[ iTarget ][ gLifes ]);
191 return PLUGIN_HANDLED;
192 }
193 UserData[ iTarget ][ gLifes ] -= iLifes;
194 ColorChat( 0, GREY, "^4[%s]^3 ADMIN^4 %s^3: took^4 %i^3 lifes from^4 %s^3.", g_szPrefix, szAdminName, iLifes, szTargetName );
195
196 Save_MySql( id );
197 return PLUGIN_CONTINUE;
198}
199public cmd_give_lifes_all(id, level, cid)
200{
201 if( !cmd_access( id, level, cid, 2 ) )
202 return PLUGIN_HANDLED;
203
204 new szAmount[32], iLifes;
205
206 read_argv(1, szAmount, charsmax ( szAmount ) );
207
208 new szAdminName[32];
209 get_user_name( id, szAdminName, charsmax ( szAdminName ) );
210
211 iLifes = str_to_num( szAmount );
212
213 new iPlayers[ 32 ], iNum;
214 get_players( iPlayers, iNum, "ch" );
215
216 for( new i; i < iNum; i++ )
217 UserData[ iPlayers[i] ][ gLifes ] += iLifes;
218
219 ColorChat( 0,GREY, "^4[%s]^3 ADMIN ^4%s^3: give^4 %i^3 lifes to ^4all ^3players", g_szPrefix, szAdminName, iLifes );
220
221 Save_MySql( id );
222 return PLUGIN_CONTINUE;
223}
224public hook_say(id)
225{
226 new szArgs[192], szArgCmd[32], szArgName[32], szArgLife[10];
227 read_args(szArgs ,charsmax ( szArgs ) );
228 remove_quotes( szArgs );
229 parse(szArgs, szArgCmd, charsmax ( szArgCmd ), szArgName, charsmax ( szArgName ), szArgLife, charsmax ( szArgLife ) );
230
231 new szName[ 32 ], szTargetName[ 32 ], iTarget, iLifes = str_to_num ( szArgLife );
232 iTarget = cmd_target( id, szArgName, 0 );
233
234 if(g_iGiveCmd && equali( szArgCmd,"/give" ) )
235 {
236 get_user_name( id, szName, charsmax ( szName ) );
237 get_user_name(iTarget, szTargetName, charsmax ( szTargetName ) );
238
239 if ( equal( szArgName, "" ) )
240 {
241 ColorChat( id, GREY,"^4[%s]^3 You must enter a name.", g_szPrefix );
242 return;
243 }
244
245 if ( !iTarget )
246 {
247 ColorChat( id, GREY,"^4[%s]^3 I can't find player with the name^4 %s^3.", g_szPrefix, szArgName );
248 return;
249 }
250
251 if ( id == iTarget )
252 {
253 ColorChat( id, GREY,"^4[%s]^3 You can't give^4 lifes^3 to yourself.", g_szPrefix );
254 return;
255 }
256
257 if ( UserData[ id ][ gLifes ] < iLifes )
258 {
259 ColorChat( id, GREY,"^4[%s]^3 You don't have enough^4 lifes^3.", g_szPrefix );
260 return;
261 }
262
263 if ( iLifes <= 0 )
264 {
265 ColorChat(id, GREY,"^4[%s]^3 You can give only^4 positive life amount^3.", g_szPrefix );
266 return;
267 }
268 if (iLifes >= 0)
269 {
270 UserData[ id ][ gLifes ] -= iLifes;
271 UserData[ iTarget ][ gLifes ] += iLifes;
272 ColorChat( 0, GREEN,"^4[%s]^3 %s^1 give^4 %d^1 lifes to^3 %s^1.", g_szPrefix, szName, iLifes, szTargetName );
273 log_to_file( "LIFES_GIVE.log", "| LOG LIFES | <%s> give <%d> lifes to <%s>", szName, iLifes, szTargetName );
274 }
275 }
276 if( g_iLifeCmd && equali( szArgCmd,"/life" ) )
277 {
278 get_user_name(iTarget, szTargetName, charsmax ( szTargetName ) );
279
280 if( equal( szArgName, "") )
281 {
282 ColorChat( id, GREY,"^4[%s]^3 You must enter a name.", g_szPrefix );
283 return;
284 }
285 if( !iTarget )
286 {
287 ColorChat( id,GREY,"^4[%s]^3 I can't find player with the name^4 %s^3.", g_szPrefix, szArgName );
288 return;
289 }
290 ColorChat( id, GREEN,"^4[%s]^3 %s^1 has^4 %i^1 lifes.", g_szPrefix,szTargetName, UserData[ iTarget ][ gLifes ] );
291 }
292 if(g_iRespawnCmd && equali( szArgCmd, "/respawn") || equali( szArgCmd, "/revive") )
293 {
294 if( is_user_alive( id ) || get_user_team( id ) == 3 )
295 return;
296
297 if( UserData[ id ][ gLifes ] >= 1 )
298 {
299 ExecuteHam( Ham_CS_RoundRespawn, id );
300 UserData[ id ][ gLifes ]--;
301 }
302 else
303 {
304 ColorChat( id, GREY, "^4[%s]^3 You don't have any^4 lifes^3 to^4 respawn^3.", g_szPrefix );
305 }
306 }
307 if(g_iMyLifeCmd && equali( szArgCmd, "/mylifes" ) || equali( szArgCmd, "/lifes" ) )
308 {
309 ColorChat( id, GREY, "^4[%s]^3 Lifes:^4 %d", g_szPrefix, UserData[ id ][ gLifes ] );
310 }
311}
312public HookDeathMsg( )
313{
314 new iKiller = read_data(1);
315 new iVictim = read_data(2);
316 new iHead = read_data(3);
317
318 new kill_message[126], vip_message[126], szVictimName[ 32 ];
319
320 get_user_name( iVictim, szVictimName, charsmax( szVictimName ) );
321
322 if ( iKiller != iVictim && is_user_connected( iKiller ) && UserData[ iKiller ][ gLifes ] <= g_iMaxLife )
323 {
324 new szWeapon[ 32 ];
325 read_data( 4, szWeapon, charsmax ( szWeapon ) );
326
327 if ( equal( szWeapon, "grenade" ) )
328 {
329 UserData[ iKiller ][ gIncreaseLifes ] = g_iHeGrenade;
330 formatex( kill_message, charsmax ( kill_message ), " ^1with^3 HE Grenade^1");
331 }
332 else if ( equal( szWeapon, "awp" ) )
333 {
334 UserData[ iKiller ][ gIncreaseLifes ] = g_iAwp;
335 formatex( kill_message, charsmax ( kill_message ), " ^1with^3 %s^1", iHead ? "Awp HeadShot" : "Awp");
336 }
337 else
338 {
339 UserData[ iKiller ][ gIncreaseLifes ] = iHead ? g_iHeadShot : g_iKill;
340 iHead ? formatex( kill_message, charsmax ( kill_message ), " ^1with^3 HeadShot^1" ) : formatex( kill_message, charsmax ( kill_message ), "" );
341 }
342 UserData[ iKiller ][ gLifes ] += UserData[ iKiller][ gVip ] ? ( UserData[ iKiller ][ gIncreaseLifes ] + 1 ) : UserData[ iKiller ][ gIncreaseLifes ];
343
344 if(g_iKillerMessage)
345 {
346 UserData[ iKiller ][ gVip ] ? formatex( vip_message, charsmax ( vip_message ), " (Bonus:^3 %i Lifes^1 for^4 VIP Users^1)", UserData[ iKiller ][ gIncreaseLifes ] ) : formatex( vip_message, charsmax ( vip_message ), " (buy^4 VIP^1 to get more^3 Lifes^1)" );
347 ColorChat( iKiller, NORMAL, "^4[%s]^1 You received^4 %d Lifes^1 for killing^3 %s%s%s", g_szPrefix, UserData[ iKiller ][ gIncreaseLifes ], szVictimName, kill_message, vip_message );
348 }
349 }
350
351 Save_MySql( iKiller );
352 return PLUGIN_CONTINUE;
353}
354public MySql_Init( )
355{
356 new Host[ 32 ], User[ 32 ], Pass[ 32 ], Db[ 32 ];
357 get_cvar_string( "amx_sql_host", Host, charsmax ( Host ) );
358 get_cvar_string( "amx_sql_user", User, charsmax ( User ) );
359 get_cvar_string( "amx_sql_pass", Pass, charsmax ( Pass ) );
360 get_cvar_string( "amx_sql_db", Db, charsmax (Db));
361
362 g_SqlTuple = SQL_MakeDbTuple( Host, User, Pass, Db );
363
364 new ErrorCode;
365 g_SqlConnection = SQL_Connect( g_SqlTuple, ErrorCode, g_Error, charsmax ( g_Error ) );
366
367 if( g_SqlConnection == Empty_Handle )
368 set_fail_state( g_Error );
369
370 new Handle:Queries;
371
372 Queries = SQL_PrepareQuery( g_SqlConnection, "CREATE TABLE IF NOT EXISTS dr_lifes (name varchar(64), lifes INT(11))" );
373
374 if( !SQL_Execute( Queries ) )
375 {
376 SQL_QueryError( Queries, g_Error, charsmax ( g_Error ) );
377 set_fail_state( g_Error );
378 }
379
380 SQL_FreeHandle( Queries );
381
382 g_sql_ready = true;
383
384 for( new i=1; i <= g_iMaxPlayers; i++ )
385 {
386 if( UserData[ i ][ gAuthed ] )
387 {
388 Load_MySql( i );
389 }
390 }
391}
392public Load_MySql( id )
393{
394 if( g_sql_ready )
395 {
396 if( g_SqlTuple == Empty_Handle )
397 set_fail_state( g_Error );
398
399 new szPlayerName[ 32 ], szQuotedName[ 64 ], szTemp[ 512 ];
400 get_user_name( id, szPlayerName, charsmax ( szPlayerName ) );
401 SQL_QuoteString( g_SqlConnection, szQuotedName, charsmax ( szQuotedName ), szPlayerName );
402
403 new Data[ 1 ];
404 Data[ 0 ] = id;
405
406 format( szTemp,charsmax ( szTemp),"SELECT * FROM `dr_lifes` WHERE `name` = '%s'", szQuotedName );
407 SQL_ThreadQuery( g_SqlTuple,"register_client", szTemp, Data, 1 );
408 }
409}
410public register_client( FailState, Handle:Query, Error[], Errcode, Data[], DataSize)
411{
412 if ( FailState == TQUERY_CONNECT_FAILED )
413 log_amx( "Load - Could not connect to SQL database. [%d] %s", Errcode, Error );
414 else if ( FailState == TQUERY_QUERY_FAILED )
415 log_amx( "Load Query failed. [%d] %s", Errcode, Error );
416
417 new id = Data[ 0 ];
418
419 if ( SQL_NumResults( Query ) < 1 )
420 {
421 new szName[32], szQuotedName[ 64 ];
422 get_user_name( id, szName, charsmax ( szName ) );
423 SQL_QuoteString( g_SqlConnection, szQuotedName, charsmax ( szQuotedName ), szName );
424
425 new szTemp[ 512 ];
426 format( szTemp,charsmax ( szTemp ),"INSERT INTO `dr_lifes` VALUES ('%s','0');", szQuotedName );
427 SQL_ThreadQuery( g_SqlTuple, "IgnoreHandle", szTemp );
428 }
429 else
430 UserData[ id ][ gLifes ] = SQL_ReadResult( Query, 1 );
431
432 UserData[ id ][ gLoaded ] = true;
433
434 return PLUGIN_HANDLED;
435}
436public Save_MySql( id )
437{
438 if( UserData[ id ][ gLoaded ] )
439 {
440 new szTemp[ 512 ], szName[ 32 ], szQuotedName[ 64 ];
441 get_user_name( id, szName, charsmax ( szName ) );
442 SQL_QuoteString( g_SqlConnection, szQuotedName, charsmax ( szQuotedName ), szName );
443
444 if( UserData[ id ][ gLifes ] >= g_iMaxLife ) UserData[ id ][ gLifes ] = g_iMaxLife;
445
446 format( szTemp,charsmax ( szTemp ),"UPDATE `dr_lifes` SET `lifes` = '%i' WHERE `name` = '%s';", UserData[ id ][ gLifes ], szQuotedName );
447 SQL_ThreadQuery( g_SqlTuple,"IgnoreHandle",szTemp );
448 }
449}
450public IgnoreHandle( FailState, Handle:Query,Error[], Errcode,Data[], DataSize )
451{
452 SQL_FreeHandle( Query );
453
454 return PLUGIN_HANDLED;
455}
456public plugin_end( )
457{
458 if( g_SqlConnection != Empty_Handle )
459 SQL_FreeHandle( g_SqlConnection );
460}
461public plugin_natives( )
462{
463 register_library("deathrun_lifes");
464
465 register_native("get_user_lifes", "_get_user_lifes");
466 register_native("set_user_lifes", "_set_user_lifes");
467}
468public _get_user_lifes( plugin, params )
469{
470 return UserData[ get_param( 1 ) ][ gLifes ];
471}
472public _set_user_lifes( plugin, params )
473{
474 new id = get_param( 1 );
475 UserData[ id ][ gLifes ] = max( 0, get_param( 2 ) );
476 return UserData[ id ][ gLifes ];
477}
478public client_infochanged( id )
479{
480 new szNewName[ 32 ], szOldName[ 32 ];
481 get_user_info( id, "name", szNewName, charsmax ( szNewName ) );
482 get_user_name( id, szOldName, charsmax ( szOldName ) );
483
484 if( !equal( szNewName, szOldName ) )
485 {
486 Save_MySql( id );
487 set_task( 0.1, "Load_MySql", id );
488 return PLUGIN_HANDLED;
489 }
490 return PLUGIN_HANDLED;
491}
492#if USE_CONFIG_FILE == 1
493public taskLoadFile( )
494{
495 new szFile[ 124 ], dir[ 124 ];
496 get_configsdir( dir, charsmax( dir ) );
497 formatex( szFile, charsmax ( szFile ), "%s/DeathRun_Lifes.cfg", dir );
498
499 if( file_exists( szFile ) )
500 {
501 server_cmd( "exec %s", szFile );
502 server_exec( );
503 }
504 else
505 {
506 CreateFile( szFile );
507 log_amx( "DeathRun_Lifes.cfg is not found in configs folder. File is created..." );
508 }
509}
510
511CreateFile( const file[ ] )
512{
513 new i = fopen( file, "wt" );
514
515 fprintf( i, "// %s %s by %s^n" , PLUGIN, VERSION, AUTHOR);
516 fprintf( i, "// Do not modify, If you don't know how!!^n^n" );
517
518 fprintf( i, "// DeathRun Lifes Prefix ( Default: ^"Deathrun: Lifes^" )^n");
519 fprintf( i, "dr_lifes_prefix ^"%s^"^n^n", g_szPrefix );
520 fprintf( i, "// Vip Flag for Extra Lifes: ( Default: ^"t^" )^n");
521 fprintf( i, "dr_lifes_vip_flag ^"%s^"^n^n", g_iVipFlag );
522 fprintf( i, "// Killer Message: ( Default: 1 )^n");
523 fprintf( i, "dr_lifes_killer_message ^"%i^"^n^n", g_iKillerMessage );
524 fprintf( i, "// How much Lifes to get on normal kill ( Default: 1 )^n");
525 fprintf( i, "dr_lifes_kill_life ^"%i^"^n^n", g_iKill );
526 fprintf( i, "// How much Lifes to get on headshot kill ( Default: 1 )^n");
527 fprintf( i, "dr_lifes_kill_life ^"%i^"^n^n", g_iHeadShot );
528 fprintf( i, "// How much Lifes to get on he grenade kill ( Default: 1 )^n");
529 fprintf( i, "dr_lifes_he_grenade_life ^"%i^"^n^n", g_iHeGrenade );
530 fprintf( i, "// How much Lifes to get on awp kill ( Default: 1 )^n");
531 fprintf( i, "dr_lifes_awp_life ^"%i^"^n^n", g_iAwp );
532 fprintf( i, "// Max lifes you can have ( Default: 500 )^n");
533 fprintf( i, "dr_lifes_max_lifes ^"%i^"^n^n", g_iMaxLife );
534 fprintf( i, "// Chat Commands:^n// [ /give <nick> <amount> | /lifes, /mylife | /life <nick> | /respawn ]^n^n" );
535 fprintf( i, "// Command: Give ( Default: 1 )^n");
536 fprintf( i, "dr_lifes_give_command ^"%i^"^n^n", g_iGiveCmd );
537 fprintf( i, "// Command: Life / MyLife ( Default: 1 )^n");
538 fprintf( i, "dr_lifes_mylife_command ^"%i^"^n^n", g_iMyLifeCmd );
539 fprintf( i, "// Command: Life < nick > [ Check other player lifes | Needed Access: RCON ] ( Default: 1 )^n");
540 fprintf( i, "dr_lifes_life_command ^"%i^"^n^n", g_iLifeCmd );
541 fprintf( i, "// Command: Respawn ( Default: 1 )^n");
542 fprintf( i, "dr_lifes_respawn_command ^"%i^"^n^n", g_iRespawnCmd );
543
544 fclose( i );
545}
546#endif