Explorar o código

* Fixed skill_require_db reading somehow getting corrupted if weapons usable for the skill is more than 20
* Fixed @killmonster crashing the server with summoned monsters

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

celest %!s(int64=20) %!d(string=hai) anos
pai
achega
708fccfa6e
Modificáronse 6 ficheiros con 32 adicións e 4 borrados
  1. 9 0
      Changelog.txt
  2. 6 1
      src/map/battle.c
  3. 1 0
      src/map/battle.h
  4. 1 1
      src/map/map.h
  5. 1 1
      src/map/mob.c
  6. 14 1
      src/map/pc.c

+ 9 - 0
Changelog.txt

@@ -1,8 +1,17 @@
 Date	Added
+01/05
+        * Fixed skill_require_db reading somehow getting corrupted if weapons usable
+          for the skill is more than 20, thus causing the skills to fail everytime 
+          [celest]
+        * Fixed @killmonster crashing the server with summoned monsters, thanks to 
+          Alex14 [celest]
+        * Added double_connection_system to battle_athena (not completed yet) [celest]
+
 01/04
 	* Fixed GM Command Logging (Not sure why TXT logging still isn't working properly :( ) [Codemaster] [SVN 907]
 	* Fixed one of Lupus' additions to the item_db [Codemaster] [SVN 907]
         * Fixed Seismic Weapon Skill (it 100% didn't break target's weapon at 4 level of the skill) [Lupus]
+
 01/02
         * Re-fixed map-server crashing if an empty line is in skill_castnodex.txt,
           thanks to Alex14 for pointing it out (SVN 899) [celest]

+ 6 - 1
src/map/battle.c

@@ -5325,7 +5325,8 @@ static const struct {
 	{ "motd_type",              &battle_config.motd_type}, // [celest]
 	{ "allow_atcommand_when_mute",			&battle_config.allow_atcommand_when_mute}, // [celest]
 	{ "finding_ore_rate",       &battle_config.finding_ore_rate}, // [celest]
-	{ "exp_calc_type",       &battle_config.exp_calc_type}, // [celest]
+	{ "exp_calc_type",          &battle_config.exp_calc_type}, // [celest]
+	{ "double_login_system",    &battle_config.double_login_system}, // [celest]
 
 //SQL-only options start
 #ifndef TXT_ONLY 
@@ -5586,6 +5587,7 @@ void battle_set_defaults() {
 	battle_config.castrate_dex_scale = 150;
 	battle_config.area_size = 14;
 	battle_config.exp_calc_type = 1;
+	battle_config.double_login_system = 0;
 
 //SQL-only options start
 #ifndef TXT_ONLY 
@@ -5723,6 +5725,9 @@ void battle_validate_conf() {
 	if (battle_config.vending_max_value > 10000000 || battle_config.vending_max_value<=0) // Lupus & Kobra_k88
 		battle_config.vending_max_value = 10000000;
 
+	if (battle_config.double_login_system < 0)
+		battle_config.double_login_system = 0;
+
 }
 
 /*==========================================

+ 1 - 0
src/map/battle.h

@@ -357,6 +357,7 @@ extern struct Battle_Config {
 	int allow_atcommand_when_mute; // [celest]
 	int finding_ore_rate; // orn
 	int exp_calc_type;
+	int double_login_system;
 
 #ifndef TXT_ONLY /* SQL-only options */
 	int mail_system; // [Valaris]

+ 1 - 1
src/map/map.h

@@ -16,7 +16,7 @@
 #define LIFETIME_FLOORITEM 60
 #define DAMAGELOG_SIZE 30
 #define LOOTITEM_SIZE 10
-#define MAX_SKILL_LEVEL 10
+#define MAX_SKILL_LEVEL 20
 #define MAX_STATUSCHANGE 210
 #define MAX_SKILLUNITGROUP 32
 #define MAX_MOBSKILLUNITGROUP 8

+ 1 - 1
src/map/mob.c

@@ -2298,7 +2298,7 @@ int mob_damage(struct block_list *src,struct mob_data *md,int damage,int type)
 			mobskill_use_id(md,&md->bl,skillidx);//Ž©”š‰r�¥ŠJŽn
 			md->state.special_mob_ai++;
 		}
-		if (md->master_id==src->id)
+		if (src && md->master_id==src->id)
 			md->target_dir=map_calc_dir(src,md->bl.x,md->bl.y)+1;
 	}
 

+ 14 - 1
src/map/pc.c

@@ -720,8 +720,14 @@ int pc_authok(int id, int login_id2, time_t connect_until_time, struct mmo_chars
 	sd = map_id2sd(id);
 	nullpo_retr(1, sd);
 
+	// check if double login occured
+	if(sd->new_fd){
+		// 2重login状態だったので、両方落す
+		clif_authfail_fd(sd->fd,2);	// same id
+		clif_authfail_fd(sd->new_fd,8);	// same id
+		return 1;
+	}
 	sd->login_id2 = login_id2;
-
 	memcpy(&sd->status, st, sizeof(*st));
 
 	if (sd->status.sex != sd->sex) {
@@ -945,6 +951,13 @@ int pc_authfail(int id) {
 	if (sd == NULL)
 		return 1;
 
+	if(sd->new_fd){
+		// 2重login状態だったので、新しい接続のみ落す
+		clif_authfail_fd(sd->new_fd,0);
+		sd->new_fd=0;
+		return 0;
+	}
+
 	clif_authfail_fd(sd->fd, 0);
 
 	return 0;