14
14
// *********************************
15
15
// Definitions
16
16
// *********************************
17
- #define TOTAL_TABLES 14
17
+ #define TOTAL_TABLES 15
18
18
#define TOTAL_INSERTONCE 5
19
- #define TOTAL_RESETTABLES 6
19
+ #define TOTAL_RESETTABLES 7
20
20
21
21
void cdb_start_connection ();
22
22
@@ -34,15 +34,16 @@ const char* VSFU_CREATEDBQUERY[TOTAL_TABLES] =
34
34
"CREATE TABLE [userdata] ( [char_idx] INTEGER,[title] CHAR(24), [playername] CHAR(64), [password] CHAR(24), [email] CHAR(64), [owner] CHAR(24), [member_since] CHAR(30), [last_played] CHAR(30), [playtime_total] INTEGER,[playingtime] INTEGER)" ,
35
35
"CREATE TABLE [weapon_meta] ([char_idx] INTEGER,[index] INTEGER, [disable] INTEGER)" ,
36
36
"CREATE TABLE [weapon_mods] ([char_idx] INTEGER,[weapon_index] INTEGER, [modindex] INTEGER, [level] INTEGER, [soft_max] INTEGER, [hard_max] INTEGER)" ,
37
- "CREATE TABLE [character_data] ([char_idx] INTEGER, [respawns] INTEGER, [health] INTEGER, [maxhealth] INTEGER, [armour] INTEGER, [maxarmour] INTEGER, [nerfme] INTEGER, [adminlevel] INTEGER, [bosslevel] INTEGER)" ,
37
+ "CREATE TABLE [character_data] ([char_idx] INTEGER, [respawns] INTEGER, [health] INTEGER, [maxhealth] INTEGER, [armour] INTEGER, [maxarmour] INTEGER, [nerfme] INTEGER, [adminlevel] INTEGER, [bosslevel] INTEGER, [prestigelevel] INTEGER, [prestigepoints] INTEGER)" ,
38
+ "create table [prestige](char_idx int not null, pindex int not null, param int not null, level int not null, primary key (char_idx, pindex, param))" ,
38
39
"create table stash( char_idx int not null, lock_char_id int null, primary key (char_idx));" ,
39
40
"create table stash_runes_meta( char_idx int not null, stash_index int not null, itemtype int null, itemlevel int null, quantity int null, untradeable int null, id char(16) null, name char(24) null, nummods int null, setcode int null, classnum int null, primary key (char_idx, stash_index));" ,
40
41
"create table stash_runes_mods( char_idx int not null, stash_index int not null, rune_mod_index int not null, type int null, mod_index int null, value int null, [set] int null, primary key (char_idx, stash_index, rune_mod_index));"
41
42
};
42
43
43
44
// SAVING
44
45
45
- const char * CreateCharacterData = "INSERT INTO character_data VALUES (%d,0,0,0,0,0,0,0,0)" ;
46
+ const char * CreateCharacterData = "INSERT INTO character_data VALUES (%d,0,0,0,0,0,0,0,0,0,0 )" ;
46
47
const char * CreateCtfStats = "INSERT INTO ctf_stats VALUES (%d,0,0,0,0,0,0,0)" ;
47
48
const char * CreateGameStats = "INSERT INTO game_stats VALUES (%d,0,0,0,0,0,0,0,0,0,0,0,0)" ;
48
49
const char * CreatePointData = "INSERT INTO point_data VALUES (%d,0,0,0,0,0,0,0,0,0)" ;
@@ -53,6 +54,7 @@ const char* VSFU_RESETTABLES[TOTAL_RESETTABLES] =
53
54
{
54
55
"DELETE FROM abilities WHERE char_idx=%d;" ,
55
56
"DELETE FROM talents WHERE char_idx=%d;" ,
57
+ "DELETE FROM prestige WHERE char_idx=%d;" ,
56
58
"DELETE FROM runes_meta WHERE char_idx=%d;" ,
57
59
"DELETE FROM runes_mods WHERE char_idx=%d;" ,
58
60
"DELETE FROM weapon_meta WHERE char_idx=%d;" ,
@@ -80,7 +82,9 @@ const char* VSFU_INSERTRMOD = "INSERT INTO runes_mods VALUES (%d,%d,%d,%d,%d,%d)
80
82
const char * VSFU_INSERTRMODEX = "INSERT INTO runes_mods VALUES (%d,%d,0,%d,%d,%d,%d);" ;
81
83
82
84
83
- const char * VSFU_UPDATECDATA = "UPDATE character_data SET respawns=%d, health=%d, maxhealth=%d, armour=%d, maxarmour=%d, nerfme=%d, adminlevel=%d, bosslevel=%d WHERE char_idx=%d;" ;
85
+ const char * VSFU_UPDATECDATA = "UPDATE character_data SET respawns=%d, health=%d, maxhealth=%d, armour=%d, "
86
+ "maxarmour=%d, nerfme=%d, adminlevel=%d, bosslevel=%d, prestigelevel=%d, prestigepoints=%d"
87
+ " WHERE char_idx=%d;" ;
84
88
85
89
const char * VSFU_UPDATESTATS = "UPDATE game_stats SET shots=%d, shots_hit=%d, frags=%d, fragged=%d, num_sprees=%d, max_streak=%d, spree_wars=%d, broken_sprees=%d, broken_spreewars=%d, suicides=%d, teleports=%d, num_2fers=%d WHERE char_idx=%d;" ;
86
90
@@ -326,7 +330,10 @@ qboolean cdb_save_player(edict_t* player)
326
330
MAX_ARMOR (player ),
327
331
player -> myskills .nerfme ,
328
332
player -> myskills .administrator , // flags
329
- player -> myskills .boss , id ));
333
+ player -> myskills .boss ,
334
+ player -> myskills .prestige .total ,
335
+ player -> myskills .prestige .points ,
336
+ id ));
330
337
331
338
332
339
//*****************************
@@ -437,6 +444,34 @@ qboolean cdb_save_player(edict_t* player)
437
444
player -> myskills .defense_kills ,
438
445
player -> myskills .assists , id ));
439
446
447
+ // prestige
448
+ QUERY (va ("INSERT INTO prestige(char_idx, pindex, param, level) VALUES (%d, %d, %d, %d);" ,
449
+ id , PRESTIGE_CREDITS , 0 , player -> myskills .prestige .creditLevel ));
450
+
451
+ QUERY (va ("INSERT INTO prestige(char_idx, pindex, param, level) VALUES (%d, %d, %d, %d);" ,
452
+ id , PRESTIGE_ABILITY_POINTS , 0 , player -> myskills .prestige .abilityPoints ));
453
+
454
+ QUERY (va ("INSERT INTO prestige(char_idx, pindex, param, level) VALUES (%d, %d, %d, %d);" ,
455
+ id , PRESTIGE_WEAPON_POINTS , 0 , player -> myskills .prestige .weaponPoints ));
456
+
457
+ // softmax bump points - param is the ab index, level is the bump
458
+ for (i = 0 ; i < MAX_ABILITIES ; i ++ )
459
+ {
460
+ if (player -> myskills .prestige .softmaxBump [i ] > 0 ) {
461
+ QUERY (va ("INSERT INTO prestige(char_idx, pindex, param, level) VALUES (%d, %d, %d, %d);" ,
462
+ id , PRESTIGE_SOFTMAX_BUMP , i , player -> myskills .prestige .softmaxBump [i ]));
463
+ }
464
+ }
465
+
466
+ // class skills - param is the ab index, level is always 0
467
+ for (i = 0 ; i < MAX_ABILITIES ; i ++ )
468
+ {
469
+ if (player -> myskills .prestige .classSkill [i / 32 ] & (1 << (i % 32 )))
470
+ {
471
+ QUERY (va ("INSERT INTO prestige(char_idx, pindex, param, level) VALUES (%d, %d, %d, %d);" ,
472
+ id , PRESTIGE_CLASS_SKILL , i , 0 ));
473
+ }
474
+ }
440
475
441
476
} // end saving
442
477
@@ -749,6 +784,10 @@ qboolean cdb_load_player(edict_t* player)
749
784
//boss flag
750
785
player -> myskills .boss = sqlite3_column_int (statement , 8 );
751
786
787
+ // prestige
788
+ player -> myskills .prestige .total = sqlite3_column_int (statement , 9 );
789
+ player -> myskills .prestige .points = sqlite3_column_int (statement , 10 );
790
+
752
791
//*****************************
753
792
//stats
754
793
//*****************************
@@ -804,10 +843,42 @@ qboolean cdb_load_player(edict_t* player)
804
843
805
844
sqlite3_finalize (statement );
806
845
846
+ // prestige
847
+ format = va ("SELECT * FROM prestige WHERE char_idx=%d" , id );
848
+
849
+ r = sqlite3_prepare_v2 (db , format , strlen (format ), & statement , NULL );
850
+ while (sqlite3_step (statement ) == SQLITE_ROW ) {
851
+ int pindex = sqlite3_column_int (statement , 1 );
852
+ int param = sqlite3_column_int (statement , 2 );
853
+ int level = sqlite3_column_int (statement , 3 );
854
+
855
+ switch (pindex )
856
+ {
857
+ case PRESTIGE_CREDITS :
858
+ player -> myskills .prestige .creditLevel = level ;
859
+ break ;
860
+ case PRESTIGE_ABILITY_POINTS :
861
+ player -> myskills .prestige .abilityPoints = level ;
862
+ break ;
863
+ case PRESTIGE_WEAPON_POINTS :
864
+ player -> myskills .prestige .weaponPoints = level ;
865
+ break ;
866
+ case PRESTIGE_SOFTMAX_BUMP :
867
+ player -> myskills .prestige .softmaxBump [param ] = level ;
868
+ break ;
869
+ case PRESTIGE_CLASS_SKILL :
870
+ player -> myskills .prestige .classSkill [param / 32 ] |= (1 << (param % 32 ));
871
+ break ;
872
+ default : break ;
873
+ }
874
+ }
875
+
876
+
877
+
807
878
//Apply runes
808
- V_ResetAllStats (player );
879
+ vrx_runes_unapply (player );
809
880
for (i = 0 ; i < 4 ; ++ i )
810
- V_ApplyRune (player , & player -> myskills .items [i ]);
881
+ vrx_runes_apply (player , & player -> myskills .items [i ]);
811
882
812
883
//Apply health
813
884
if (player -> myskills .current_health > MAX_HEALTH (player ))
0 commit comments