Browse Source

* Updated Stone Curse, Soul Drain, Auto Berserk
* Fixed MVP exp being multiplied twice

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

celest 20 years ago
parent
commit
18788ab4ea
9 changed files with 59 additions and 21 deletions
  1. 4 0
      Changelog.txt
  2. 2 0
      db/Changelog.txt
  3. 2 2
      db/skill_db.txt
  4. 1 0
      db/skill_require_db.txt
  5. 2 2
      db/skill_tree.txt
  6. 2 2
      src/map/mob.c
  7. 4 2
      src/map/pc.c
  8. 30 2
      src/map/skill.c
  9. 12 11
      src/map/skill.h

+ 4 - 0
Changelog.txt

@@ -1,4 +1,8 @@
 Date	Added
+12/3
+        * Updated Stone Curse, Soul Drain, Auto Berserk [celest]
+        * Added a fix for MVP exp being multiplied twice by Gengar
+
 12/2
 	* Fixed double login feature, resets online users when map connects to char [Wizputer]
 	* Changed all LOGS inserts to INSERT DELAYED (MySQL has this feature and cache unimportant queries, then 

+ 2 - 0
db/Changelog.txt

@@ -5,6 +5,8 @@
 	Ayathoya items == Added but no effect ( all are "ect" itens)
 	Skill databases == celest working on them i believe.
 
+12/3    * corrected Spider Web's maximum level [celest]
+        * Removed Soul Drain from Professor's skill tree [celest]
 
 12/2    * Updated skill tree prerequisites for the new kRO skills [celest]
 

+ 2 - 2
db/skill_db.txt

@@ -145,7 +145,7 @@
 143,0,6,4,0,1,1,1,no,0,1,0,none,0	//NV_TRICKDEAD#?んだふり#
 144,0,0,0,0,0,1,0,no,0,1,0,none,0	//SM_MOVINGRECOVERY#移動時HP回復#
 145,0,0,0,0,0,1,0,no,0,1,0,weapon,0	//SM_FATALBLOW#?所攻撃#
-146,0,0,0,0,0,1,0,no,0,1,0,weapon,0	//SM_AUTOBERSERK#オ?トバ?サ?ク#
+146,0,6,4,0,1,1,1,no,0,1,0,weapon,0	//SM_AUTOBERSERK#オ?トバ?サ?ク#
 147,0,0,4,0,1,1,0,no,0,1,0,weapon,0	//AC_MAKINGARROW#矢作成#
 148,-3,6,1,0,2,1,1,no,0,1,0,weapon,6	//AC_CHARGEARROW#?ャ?ジアロ?#
 149,8,6,1,2,0,1,1,no,0,1,0,weapon,0	//TF_SPRINKLESAND#砂まき#
@@ -439,7 +439,7 @@
 402,8,6,1,0,1,10,1,no,0,0,0,none,0	//PF_MINDBREAKER#?インドブレ?カ?#
 403,0,0,4,0,1,1,1,yes,0,0,0,magic,0	//PF_MEMORIZE#メモライズ#
 404,3,6,2,2,1,5,1,yes,0,256,1,magic,0	//PF_FOGWALL#フォグウォ?ル#
-405,3,6,2,0,1,5,1,no,0,128,2,misc,0	//PF_SPIDERWEB#スパイ??ウェッブ#
+405,3,6,2,0,1,1,1,no,0,128,2,misc,0	//PF_SPIDERWEB#スパイ??ウェッブ#
 406,-1,6,1,0,2,10,1,no,33,0,0,weapon,0	//ASC_METEORASSAULT#メテオアサルト#
 407,0,6,4,0,1,10,0,no,0,0,0,none,0	//ASC_CDP#デッドリ??イズン製造#
 408,0,0,4,0,1,1,1,yes,0,0,0,magic,0	//WE_BABY##

+ 1 - 0
db/skill_require_db.txt

@@ -116,6 +116,7 @@
 142,0,0,3,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NV_FIRSTAID#?急手?#
 143,0,0,5,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NV_TRICKDEAD#死んだふり#
 
+146,0,0,5,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//SM_AUTOBERSERK#オ?トバ?サ?ク#
 147,0,0,10,0,0,0,99,recover_weight_rate,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//AC_MAKINGARROW#矢作成#
 148,0,0,15,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//AC_CHARGEARROW#チャ?ジアロ?#
 149,0,0,9,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//TF_SPRINKLESAND#砂まき#

+ 2 - 2
db/skill_tree.txt

@@ -1037,14 +1037,14 @@
 4017,288,5,285,3,286,3,287,3,0,0,0,0//SA_LANDPROTECTOR	#ランドプロテクター#
 4017,289,5,277,3,0,0,0,0,0,0,0,0//SA_DISPELL	#ディスペル#
 4017,290,10,279,5,288,1,289,1,0,0,0,0//SA_ABRACADABRA	#アブラカタブラ#
-4017,364,10,9,5,13,7,0,0,0,0,0,0//HW_SOULDRAIN	#ソウルドレイン#
+//4017,364,10,9,5,13,7,0,0,0,0,0,0//HW_SOULDRAIN	#ソウルドレイン#
 4017,373,5,9,1,276,1,0,0,0,0,0,0//PF_HPCONVERSION	#ライフ置き換え#
 4017,374,1,276,3,277,2,0,0,0,0,0,0//PF_SOULCHANGE	#ソウルチェンジ#
 4017,375,5,275,5,276,3,277,3,0,0,0,0//PF_SOULBURN	#ソウルバーン#
 4017,402,1,9,3,289,2,0,0,0,0,0,0//PF_MINDBREAKER	#マインドブレーカー#
 4017,403,1,274,5,278,5,279,1,0,0,0,0//PF_MEMORIZE	#メモライズ#
 4017,404,1,286,2,287,2,0,0,0,0,0,0//PF_FOGWALL	#フォグウォール#
-4017,405,5,284,4,0,0,0,0,0,0,0,0//PF_SPIDERWEB	#スパイダーウェッブ#
+4017,405,1,284,4,0,0,0,0,0,0,0,0//PF_SPIDERWEB	#スパイダーウェッブ#
 //Stalker
 4018,1,9,0,0,0,0,0,0,0,0,0,0//NV_BASIC		#基本スキル#
 4018,142,1,0,0,0,0,0,0,0,0,0,0//NV_FIRSTAID	#応急手当#

+ 2 - 2
src/map/mob.c

@@ -2295,7 +2295,7 @@ int mob_damage(struct block_list *src,struct mob_data *md,int damage,int type)
 		mob_unlocktarget((struct mob_data *)src,tick);
 
 	/* ソウルドレイン */
-	if(sd && (skill=pc_checkskill(sd,HW_SOULDRAIN))>0){
+	if(sd && sd->state.attack_type == BF_MAGIC && (skill=pc_checkskill(sd,HW_SOULDRAIN))>0){
 		clif_skill_nodamage(src,&md->bl,HW_SOULDRAIN,skill,1);
 		sp = (battle_get_lv(&md->bl))*(65+15*skill)/100;
 		if(sd->status.sp + sp > sd->status.max_sp)
@@ -2529,7 +2529,7 @@ int mob_damage(struct block_list *src,struct mob_data *md,int damage,int type)
 		int log_mvp[2] = {0};
 		int j;
 		int mexp;
-		temp = ((double)mob_db[md->class].mexp * (double)battle_config.mvp_exp_rate * (9.+(double)count)/1000.);
+		temp = ((double)mob_db[md->class].mexp * (9.+(double)count)/10.);	//[Gengar] 
 		mexp = (temp > 2147483647.)? 0x7fffffff:(int)temp;
 		if(mexp < 1) mexp = 1;
 		clif_mvp_effect(mvp_sd);					// エフェクト

+ 4 - 2
src/map/pc.c

@@ -2098,7 +2098,8 @@ int pc_calcstatus(struct map_session_data* sd,int first)
 		before.cart_weight != before.cart_weight || before.cart_max_weight != before.cart_max_weight )
 		clif_updatestatus(sd,SP_CARTINFO);*/
 
-	if(sd->status.hp<sd->status.max_hp>>2 && pc_checkskill(sd,SM_AUTOBERSERK)>0 &&
+	//if(sd->status.hp<sd->status.max_hp>>2 && pc_checkskill(sd,SM_AUTOBERSERK)>0 &&
+	if(sd->status.hp<sd->status.max_hp>>2 && sd->sc_data[SC_AUTOBERSERK].timer != -1 &&			
 		(sd->sc_data[SC_PROVOKE].timer==-1 || sd->sc_data[SC_PROVOKE].val2==0 ) && !pc_isdead(sd))
 		// オ?トバ?サ?ク?動
 		skill_status_change_start(&sd->bl,SC_PROVOKE,10,1,0,0,0,0);
@@ -5339,7 +5340,8 @@ int pc_damage(struct block_list *src,struct map_session_data *sd,int damage)
 		// まだ生きているならHP更新
 		clif_updatestatus(sd,SP_HP);
 
-		if(sd->status.hp<sd->status.max_hp>>2 && pc_checkskill(sd,SM_AUTOBERSERK)>0 &&
+		//if(sd->status.hp<sd->status.max_hp>>2 && pc_checkskill(sd,SM_AUTOBERSERK)>0 &&
+		if(sd->status.hp<sd->status.max_hp>>2 && sd->sc_data[SC_AUTOBERSERK].timer != -1 &&
 			(sd->sc_data[SC_PROVOKE].timer==-1 || sd->sc_data[SC_PROVOKE].val2==0 ))
 			// オ?トバ?サ?ク?動
 			skill_status_change_start(&sd->bl,SC_PROVOKE,10,1,0,0,0,0);

+ 30 - 2
src/map/skill.c

@@ -1,4 +1,4 @@
-// $Id: skill.c,v 1.8 2004/12/2 12:58:19 AM Celestia Exp $
+// $Id: skill.c,v 1.8 2004/12/3 7:53:42 PM Celestia Exp $
 /* スキル?係 */
 
 #include <stdio.h>
@@ -114,7 +114,7 @@ int SkillStatusChangeTable[]={	/* skill.h
 	SC_SPLASHER,		/* ベナムスプラッシャ? */
 	-1,
 	SC_TRICKDEAD,		/* 死んだふり */
-	-1,-1,-1,-1,-1,-1,
+	-1,-1,SC_AUTOBERSERK,-1,-1,-1,
 /* 150- */
 	-1,-1,-1,-1,-1,
 	SC_LOUD,			/* ラウドボイス */
@@ -3218,6 +3218,19 @@ int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int
 		skill_status_change_start(src,SC_BLOCKSKILL,skilllv,0,skillid,0,10000,0 );
 		break;
 		
+	case SM_AUTOBERSERK:	// Celest
+		{
+			struct status_change *tsc_data = battle_get_sc_data(bl);
+			int sc=SkillStatusChangeTable[skillid];
+			clif_skill_nodamage(src,bl,skillid,skilllv,1);
+			if( tsc_data ){
+				if( tsc_data[sc].timer==-1 )
+					skill_status_change_start(bl,sc,skilllv,0,0,0,0,0);
+				else
+					skill_status_change_end(bl, sc, -1);
+			}
+		}
+		break;
 	
 	case AS_ENCHANTPOISON: // Prevent spamming [Valaris]
 		if(bl->type==BL_PC) {
@@ -3693,6 +3706,8 @@ int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int
 			skill_status_change_start(bl,SC_STONE,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
 		else if(sd)
 			clif_skill_fail(sd,skillid,0,0);
+		if (dstmd)
+			mob_target(dstmd,src,skill_get_range(skillid,skilllv));
 		break;
 
 	case NV_FIRSTAID:			/* ?急手? */
@@ -8542,6 +8557,10 @@ int skill_status_change_end(struct block_list* bl, int type, int tid)
 			case SC_REGENERATION:
 				calc_flag = 1;
 				break;
+			case SC_AUTOBERSERK:
+				if (sc_data[SC_PROVOKE].timer != -1)
+					skill_status_change_end(bl,SC_PROVOKE,-1);
+				break;
 			case SC_BERSERK:			/* バ?サ?ク */
 				calc_flag = 1;
 				clif_status_change(bl,SC_INCREASEAGI,0);	/* アイコン消去 */
@@ -8870,6 +8889,7 @@ int skill_status_change_timer(int tid, unsigned int tick, int id, int data)
 		break;
 
 	case SC_ENDURE:	/* インデュア */
+	case SC_AUTOBERSERK: // Celest
 		if(sd && sd->special_state.infinite_endure) {
 			sc_data[type].timer=add_timer( 1000*60+tick,skill_status_change_timer, bl->id, data );
 			//sc_data[type].val2=1;
@@ -9305,6 +9325,14 @@ int skill_status_change_start(struct block_list *bl, int type, int val1, int val
 			calc_flag = 1; // for updating mdef
 			val2 = 7; // [Celest]
 			break;
+		case SC_AUTOBERSERK:
+			{
+				tick = 60*1000;
+				if (bl->type == BL_PC && sd->status.hp<sd->status.max_hp>>2 &&
+					(sc_data[SC_PROVOKE].timer==-1 || sc_data[SC_PROVOKE].val2==0))
+					skill_status_change_start(bl,SC_PROVOKE,10,1,0,0,0,0);
+			}
+			break;
 		case SC_CONCENTRATE:		/* 集中力向上 */
 			calc_flag = 1;
 			break;

+ 12 - 11
src/map/skill.h

@@ -1,4 +1,4 @@
-// $Id: skill.h,v 1.5 2004/11/26 5:47:12 PM Celestia Exp $
+// $Id: skill.h,v 1.5 2004/12/3 7:53:26 PM Celestia $
 #ifndef _SKILL_H_
 #define _SKILL_H_
 
@@ -326,6 +326,7 @@ enum {	// struct map_session_data 
 	SC_BROKNARMOR		=32,
 	SC_BROKNWEAPON		=33,
 	SC_SLOWDOWN			=45, // for skill slowdown
+	SC_AUTOBERSERK		=46,
 	SC_SIGHTTRASHER		=73,
 //	SC_BASILICA			=125, // 125 is the same id as joint break
 	SC_BASILICA			=102, // temporarily use this before an actual id is found [celest]
@@ -343,18 +344,18 @@ enum {	// struct map_session_data 
 	SC_SPELLBREAKER		=192,
 	SC_DPOISON			=193, /* –Ò“Å */
 	SC_BLOCKSKILL		=194, // for disallowing the use of a skill for a time period
+	SC_LEADERSHIP		=196,
+	SC_GLORYWOUNDS		=197,
+	SC_SOULCOLD			=198,
+	SC_HAWKEYES			=199,
+	SC_BATTLEORDERS		=200,
+	SC_REGENERATION		=201,
+	SC_PRESERVE         =202,
 
 // [Celest]
-	SC_BLEEDING			= 124, // Temporarily same id as headcrush	
-	SC_MOONLIT			= 195,
-	SC_LEADERSHIP		= 196,
-	SC_GLORYWOUNDS		= 197,
-	SC_SOULCOLD			= 198,
-	SC_HAWKEYES			= 199,
-	SC_BATTLEORDERS		= 200,
-	SC_REGENERATION		= 201,
-	SC_PRESERVE         = 202,
-
+	SC_BLEEDING			= 124, // Temporarily same id as headcrush
+	SC_MOONLIT			=195,
+	
 // -- testing various SC effects
 //	SC_AURABLADE			=81,
 //	SC_CONCENTRATION		=83,