Prechádzať zdrojové kódy

* char-server -UNTESTED- [Wizputer]
* new method for getting GMs [Wizputer]
* Added unique key for Char names [Wizputer]

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@529 54d463be-8e91-2dee-dedb-b68131a5f0ec

wizputer 20 rokov pred
rodič
commit
caf03e7095
4 zmenil súbory, kde vykonal 580 pridanie a 403 odobranie
  1. 5 0
      Changelog.txt
  2. 2 1
      sql-files/main-new.sql
  3. 536 394
      src/char_sql/char.c
  4. 37 8
      src/login_sql/login.c

+ 5 - 0
Changelog.txt

@@ -1,4 +1,9 @@
 Date	Added
+12/09
+	* char-server -UNTESTED- [Wizputer]
+	* new method for getting GMs [Wizputer]
+	* Added unique key for Char names [Wizputer]
+
 12/08
 	* Started optimizing char-server [Wizputer]
 

+ 2 - 1
sql-files/main-new.sql

@@ -187,9 +187,10 @@ CREATE TABLE `char` (
   KEY (`partner_id`),
   KEY (`party_id`),
   KEY (`guild_id`),
+  UNIQUE (`name`),
   FOREIGN KEY (`account_id`) REFERENCES `login` (`account_id`) ON DELETE CASCADE ON UPDATE CASCADE,
   FOREIGN KEY (`partner_id`) REFERENCES `char` (`char_id`) ON DELETE SET NULL
-) TYPE=INNODB AUTO_INCREMENT=150001; 
+) TYPE=INNODB AUTO_INCREMENT=150000; 
 
 CREATE TABLE `friend` (
   `char_id` mediumint(6) UNSIGNED NOT NULL default '0',

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 536 - 394
src/char_sql/char.c


+ 37 - 8
src/login_sql/login.c

@@ -188,22 +188,55 @@ unsigned char isGM(int account_id) {
 	return *level;
 }
 
-void read_GMs(void) {
+static int gmdb_final(void *key,void *data,va_list ap) {
+	unsigned char *level;
+
+	nullpo_retr(0, level=data);
+
+	free(level);
+
+	return 0;
+}
+
+void do_final_gmdb(void) {
+	if(gm_db){
+		numdb_final(gm_db,gmdb_final);
+		gm_db=NULL;
+	}
+}
+
+void read_GMs(int fd) {
     unsigned char *level;
-    level = malloc(sizeof(unsigned char));
+    int i=0;
+        
+    if(gm_db)
+        do_final_gmdb();
+        
+    gm_db = numdb_init();
     
-    sprintf(tmpsql,"SELECT `%s`,`%s` FROM `%s` WHERE `%s` > 0", login_db_account_id, login_db_level, login_db,login_db_level);
+    sprintf(tmpsql,"SELECT `%s`,`%s` FROM `%s` WHERE `%s` > '%d'", login_db_account_id, login_db_level, login_db,login_db_level,lowest_gm_level);
     sql_query(tmpsql,"read_GMs");
     
+    WFIFOW(fd, 0) = 0x2732;
+    
     if ((sql_res = mysql_store_result(&mysql_handle))) {
-        while((sql_row = mysql_fetch_row(sql_res))) {
+        for(i=0;(sql_row = mysql_fetch_row(sql_res));i++) {
+            level = malloc(sizeof(unsigned char));
+            
             if( (*level = atoi(sql_row[1])) > 99 )
                 *level = 99;
 
             numdb_insert(gm_db, atoi(sql_row[0]), level);
+            
+            WFIFOL(fd,6+5*i) = atoi(sql_row[0]);
+            WFIFOB(fd,10+5*i) = *level;
         }
+        
+        WFIFOW(fd,2) = i;
     }
     
+    WFIFOSET(fd,6+5*i);
+    
     mysql_free_result(sql_res);
 }    
     
@@ -931,10 +964,6 @@ int do_init(int argc,char **argv){
     free(online_db);
 	online_db = numdb_init();
 	
-	// GM database init
-    free(gm_db);
-	gm_db = numdb_init();
-	
 	// Read GMs from table
 	read_GMs();
 	

Niektoré súbory nie sú zobrazené, pretože je v týchto rozdielových dátach zmenené mnoho súborov