Pārlūkot izejas kodu

Resubmitting changes from /trunk to /branches/stable =p

git-svn-id: https://svn.code.sf.net/p/rathena/svn/branches/stable@405 54d463be-8e91-2dee-dedb-b68131a5f0ec
celest 20 gadi atpakaļ
vecāks
revīzija
eade9859d8
5 mainītis faili ar 56 papildinājumiem un 29 dzēšanām
  1. 7 0
      Changelog.txt
  2. 5 0
      Dev/bugs.txt
  3. 12 9
      src/map/battle.c
  4. 15 5
      src/map/pc.c
  5. 17 15
      src/map/skill.c

+ 7 - 0
Changelog.txt

@@ -6,6 +6,13 @@ Date	Added
 	* Changed Suilds Extention Skill to +6 people per level. [Lupus]
 	  (tested it for 2 weeks! or a big server)
 	* Added a fix for gettimeofday() for WIN32 [Codemaster]
+        * skill Updates:
+          - Updated Slow Poison, modified checks for skill_unit_onplace abit. [celest]
+          - Updated Finger Offensive, thanks to orn  [celest]
+        * Updated packet_ver_flag's default value, thanks to iscandium  [celest]
+        * Added warning if motd.txt was not found  [celest]
+          (Turn on error_log in battle_athena.conf to enable it)
+
 11/27
 	* Fixed a few map crashes when char-server crashes [Wizputer]
 	* Added fix of 0x2aff and 0x2af8 flooding [Wizputer - thanks Toster] 

+ 5 - 0
Dev/bugs.txt

@@ -83,3 +83,8 @@ http://eathena.deltaanime.net/forum/viewtopic.php?p=79951#79951)
 Problem:	@disguise has no death sprite so the client crashes when you die, a solution would be that upon death before the sprites change you're undisguised.
 Assigned:	N/a
 Progess:	0%
+
+Problem:        Changing email and Broadcast both use the same packets / Packet 0x3000 assigned to changing email instead of broadcasting?
+Notes:          Refer to char.c line 2272 and line 2416, intif.c line 107, chrif.c line 377
+Assigned:       N/A
+Progress:       0%

+ 12 - 9
src/map/battle.c

@@ -2057,8 +2057,9 @@ static struct Damage battle_calc_pet_weapon_attack(
 				damage2 = damage2*(100+ 40*skill_lv)/100;
 				break;
 			case MO_FINGEROFFENSIVE:	//Žw’e
-				damage = damage * (100 + 50 * skill_lv) / 100;
+				damage = damage * (125 + 25 * skill_lv) / 100;
 				div_ = 1;
+				flag=(flag&~BF_RANGEMASK)|BF_LONG;   //orn
 				break;
 			case MO_INVESTIGATE:	// ”­ ™¤
 				if(def1 < 1000000)
@@ -2549,8 +2550,9 @@ static struct Damage battle_calc_mob_weapon_attack(
 				damage2 = damage2*(100+ 40*skill_lv)/100;
 				break;
 			case MO_FINGEROFFENSIVE:	//Žw’e
-				damage = damage * (100 + 50 * skill_lv) / 100;
+				damage = damage * (125 + 25 * skill_lv) / 100;
 				div_ = 1;
+				flag=(flag&~BF_RANGEMASK)|BF_LONG;   //orn
 				break;
 			case MO_INVESTIGATE:	// ”­ ™¤
 				if(def1 < 1000000)
@@ -3329,15 +3331,16 @@ static struct Damage battle_calc_pc_weapon_attack(
 				break;
 			case MO_FINGEROFFENSIVE:	//Žw’e
 				if(battle_config.finger_offensive_type == 0) {
-					damage = damage * (100 + 50 * skill_lv) / 100 * sd->spiritball_old;
-					damage2 = damage2 * (100 + 50 * skill_lv) / 100 * sd->spiritball_old;
+					damage = damage * (125 + 25 * skill_lv) / 100 * sd->spiritball_old;
+					damage2 = damage2 * (125 + 25 * skill_lv) / 100 * sd->spiritball_old;
 					div_ = sd->spiritball_old;
 				}
 				else {
-					damage = damage * (100 + 50 * skill_lv) / 100;
-					damage2 = damage2 * (100 + 50 * skill_lv) / 100;
+					damage = damage * (125 + 25 * skill_lv) / 100;
+					damage2 = damage2 * (125 + 25 * skill_lv) / 100;
 					div_ = 1;
 				}
+				flag=(flag&~BF_RANGEMASK)|BF_LONG;   //orn
 				break;
 			case MO_INVESTIGATE:	// ”­ ™¤
 				if(def1 < 1000000) {
@@ -5418,7 +5421,7 @@ void battle_set_defaults() {
 	battle_config.ban_spoof_namer = 5; // added by [Yor] (default: 5 minutes)
 	battle_config.hack_info_GM_level = 60; // added by [Yor] (default: 60, GM level)
 	battle_config.any_warp_GM_min_level = 20; // added by [Yor]
-	battle_config.packet_ver_flag = 63; // added by [Yor]
+	battle_config.packet_ver_flag = 511; // added by [Yor]
 	battle_config.min_hair_style = 0;
 	battle_config.max_hair_style = 20;
 	battle_config.min_hair_color = 0;
@@ -5548,8 +5551,8 @@ void battle_validate_conf() {
 		battle_config.any_warp_GM_min_level = 100;
 
 	// at least 1 client must be accepted
-	if ((battle_config.packet_ver_flag & 63) == 0) // added by [Yor]
-		battle_config.packet_ver_flag = 63; // accept all clients
+	if ((battle_config.packet_ver_flag & 511) == 0) // added by [Yor]
+		battle_config.packet_ver_flag = 511; // accept all clients
 	
 	if (battle_config.night_darkness_level > 10) // Celest
 		battle_config.night_darkness_level = 10;

+ 15 - 5
src/map/pc.c

@@ -31,6 +31,7 @@
 #include "nullpo.h"
 #include "atcommand.h"
 #include "log.h"
+#include "showmsg.h"
 
 #ifndef TXT_ONLY // mail system [Valaris]
 #include "mail.h"
@@ -841,6 +842,10 @@ int pc_authok(int id, int login_id2, time_t connect_until_time, struct mmo_chars
 			}
 			fclose(fp);
 		}
+		else if(battle_config.error_log) {
+			sprintf(buf, "%s not found\n", motd_txt);
+			ShowWarning (buf);
+		}
 	}
 
 #ifndef TXT_ONLY
@@ -5947,10 +5952,15 @@ int pc_jobchange(struct map_session_data *sd,int job, int upper)
 		return 1;
 
 	// check if we are changing from 1st to 2nd job
-	if (s_class.job > 0 && s_class.job < 7 && job >= 7 && job <= 21)
-		sd->change_level = sd->status.job_level;
-	else
-		sd->change_level = 0;
+	if (job >= 7 && job <= 21) {
+		if (s_class.job > 0 && s_class.job < 7)
+			sd->change_level = sd->status.job_level;
+		else
+			sd->change_level = 40;
+	}
+ 	else
+ 		sd->change_level = 0;
+
 	pc_setglobalreg (sd, "jobchange_level", sd->change_level);		
 	
 	sd->status.class = sd->view_class = b_class;
@@ -7341,7 +7351,7 @@ static int pc_natural_heal_sub(struct map_session_data *sd,va_list ap) {
 	if ((battle_config.natural_heal_weight_rate > 100 || sd->weight*100/sd->max_weight < battle_config.natural_heal_weight_rate) &&
 		!pc_isdead(sd) && 
 		!pc_ishiding(sd) && 
-		sd->sc_data[SC_POISON].timer == -1 &&
+		!(sd->sc_data[SC_POISON].timer != -1 && sd->sc_data[SC_SLOWPOISON].timer == -1) &&
 		sd->sc_data[SC_BERSERK].timer == -1 ) {
 		pc_natural_heal_hp(sd);
 		if( sd->sc_data && sd->sc_data[SC_EXTREMITYFIST].timer == -1 &&	//阿修羅?態ではSPが回復しない

+ 17 - 15
src/map/skill.c

@@ -2384,16 +2384,16 @@ int skill_castend_damage_id( struct block_list* src, struct block_list *bl,int s
 		{
 			struct status_change *sc_data = battle_get_sc_data(src);
 
-		if(!battle_config.finger_offensive_type)
-			skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
-		else {
-			skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
-			if(sd) {
-				for(i=1;i<sd->spiritball_old;i++)
-					skill_addtimerskill(src,tick+i*200,bl->id,0,0,skillid,skilllv,BF_WEAPON,flag);
-				sd->canmove_tick = tick + (sd->spiritball_old-1)*200;
+			if(!battle_config.finger_offensive_type)
+				skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
+			else {
+				skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
+				if(sd) {
+					for(i=1;i<sd->spiritball_old;i++)
+						skill_addtimerskill(src,tick+i*200,bl->id,0,0,skillid,skilllv,BF_WEAPON,flag);
+					sd->canmove_tick = tick + (sd->spiritball_old-1)*200;
+				}
 			}
-		}
 			if(sc_data && sc_data[SC_BLADESTOP].timer != -1)
 				skill_status_change_end(src,SC_BLADESTOP,-1);
 		}
@@ -5965,14 +5965,16 @@ int skill_unit_onplace(struct skill_unit *src,struct block_list *bl,unsigned int
 			int type=SkillStatusChangeTable[sg->skill_id];
 			if(sg->src_id == bl->id)
 				break;
-			if(sc_data && sc_data[type].timer==-1)
-				skill_status_change_start(bl,type,sg->skill_lv,sg->val1,sg->val2,
-					(int)src,skill_get_time2(sg->skill_id,sg->skill_lv),0);
-			else if( (unit2=(struct skill_unit *)sc_data[type].val4) && unit2 != src ){
-				if( unit2->group && DIFF_TICK(sg->tick,unit2->group->tick)>0 )
+			if(sc_data) {
+				if (sc_data[type].timer==-1)
 					skill_status_change_start(bl,type,sg->skill_lv,sg->val1,sg->val2,
 						(int)src,skill_get_time2(sg->skill_id,sg->skill_lv),0);
-				ts->tick-=sg->interval;
+				else if( (unit2=(struct skill_unit *)sc_data[type].val4) && unit2 != src ){
+					if( unit2->group && DIFF_TICK(sg->tick,unit2->group->tick)>0 )
+						skill_status_change_start(bl,type,sg->skill_lv,sg->val1,sg->val2,
+							(int)src,skill_get_time2(sg->skill_id,sg->skill_lv),0);
+					ts->tick-=sg->interval;
+				}
 			}
 		} break;