Преглед изворни кода

Fix Granitic Armor's status effect, wrong calculation that not causing damage taken at the end of status (bugreport:7786)
Fix Pyroclastic's status effect: "can't switch the weapon equipped" (http://irowiki.org/wiki/Pyroclastic), still need more info
update map messages for IDN (conf/msg_conf/map_msg_idn.conf)

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

cydh пре 12 година
родитељ
комит
a59ae7bee1
3 измењених фајлова са 32 додато и 24 уклоњено
  1. 5 2
      conf/msg_conf/map_msg_idn.conf
  2. 13 9
      src/map/pc.c
  3. 14 13
      src/map/status.c

+ 5 - 2
conf/msg_conf/map_msg_idn.conf

@@ -498,9 +498,13 @@
 // Sistem surat (e-mail)
 510: Kamu memiliki %d pesan baru (ada %d pesan yang belum dibaca)
 
+// Instancing
+515: Intance kamu sudha dimuat ulang.
+516: Database Instance sudah dimuat ulang.
+
 // Pesan yang berhubungan dengan deteksi Bot (Saat ini belum diimplementasikan)
 535: Kemungkinan BOT (99%%) atau client yang digunakan sudah dimodifikasi '%s' (akun: %d, char_id: %d). Pemain ini bisa melihat nama kamu saat kamu sedang tidak terlihat.
-536: Karakter '%s' (akun: %d) sedang mencoba menggunakan bot (Pemain ini sedang mencoba mendeteksi player umpan).
+536: Karakter '%s' (akun: %d) sedang mencoba menggunakan bot (Pemain ini sedang mencoba mendeteksi pemain umpan).
 537: Karakter '%s' (akun: %d) sedang mencoba menggunakan bot (Pemain ini sedang mencoba mendeteksi monster umpan).
 
 // Pesan tentang pelanggaran transaksi.
@@ -927,7 +931,6 @@
 1096: PartyLock | 
 1097: GuildLock | 
 1098: Loadevent |
-1099: Src4instance |
 1100: Chmautojoin |
 1101: nousecart |
 1102: noitemconsumption |

+ 13 - 9
src/map/pc.c

@@ -8540,6 +8540,11 @@ int pc_equipitem(struct map_session_data *sd,int n,int req_pos)
 		return 0;
 	}
 
+	if( sd->sc.count && sd->sc.data[SC_PYROCLASTIC] && sd->inventory_data[n]->type == IT_WEAPON ) {
+		clif_equipitemack(sd,0,0,0);
+		return 0;
+	}
+
 	if( DIFF_TICK(sd->canequip_tick,gettick()) > 0 )
 	{
 		clif_equipitemack(sd,n,0,0);
@@ -8749,14 +8754,13 @@ int pc_unequipitem(struct map_session_data *sd,int n,int flag) {
 		return 0;
 	}
 
-	// if player is berserk then cannot unequip
-	if (!(flag & 2) && sd->sc.count && (sd->sc.data[SC_BERSERK] || sd->sc.data[SC_SATURDAYNIGHTFEVER] || sd->sc.data[SC__BLOODYLUST]))
-	{
-		clif_unequipitemack(sd,n,0,0);
-		return 0;
-	}
-
-	if( !(flag&2) && sd->sc.count && sd->sc.data[SC_KYOUGAKU] )
+	// status change that makes player cannot unequip equipment
+	if( !(flag&2) && sd->sc.count && (
+		sd->sc.data[SC_BERSERK] ||
+		sd->sc.data[SC_SATURDAYNIGHTFEVER] ||
+		sd->sc.data[SC__BLOODYLUST] ||
+		sd->sc.data[SC_KYOUGAKU] ||
+		(sd->sc.data[SC_PYROCLASTIC] && sd->inventory_data[n]->type == IT_WEAPON)) )	// can't switch weapon
 	{
 		clif_unequipitemack(sd,n,0,0);
 		return 0;
@@ -9856,7 +9860,7 @@ static bool pc_readdb_job_exp(char* fields[], int columns, int current)
 
 /*==========================================
  * pc DB reading.
- * exp.txt		- required experience values
+ * job_exp.txt		- required experience values
  * skill_tree.txt	- skill tree for every class
  * attr_fix.txt		- elemental adjustment table
  * job_db1.txt		- job,weight,hp_factor,hp_multiplicator,sp_factor,aspds/lvl

+ 14 - 13
src/map/status.c

@@ -7860,7 +7860,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 		{
 			struct block_list *src = val2?map_id2bl(val2):NULL;
 			struct status_change *sc2 = src?status_get_sc(src):NULL;
-			int type2 = ((type == SC_TINDER_BREAKER2)?SC_TINDER_BREAKER:SC_CLOSECONFINE);
+			enum sc_type type2 = ((type == SC_TINDER_BREAKER2)?SC_TINDER_BREAKER:SC_CLOSECONFINE);
 			struct status_change_entry *sce2 = sc2?sc2->data[type2]:NULL;
 
 			if (src && sc2) {
@@ -8724,15 +8724,15 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 			val4 = 50; //def reduc %
 			break;
 		case SC_GRANITIC_ARMOR:
-			val2 = 2*val1; //dmg hp reduction
-			val3 = (6*status_get_max_hp(src))/100; //dmg hp on status end
-			val4 = 5 * val1; //unknow formula
+			val2 = 2*val1; //dmg reduction
+			val3 = 6*val1; //dmg taken on status end (6%:12%:18%:24%:30%)
+			val4 = 5*val1; //unknow formula
 			break;
 		case SC_MAGMA_FLOW:
 			val2 = 3*val1; //activation chance
 			break;
 		case SC_PYROCLASTIC:
-			val2 += 10*val1+status_get_lv(src); //atk bonus
+			val2 += 10*val1; //atk bonus
 			val3 = 2*val1;//Chance To AutoCast Hammer Fall %
 			break;
 		case SC_PARALYSIS: //[Lighta] need real info
@@ -9305,16 +9305,17 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
 	vd = status_get_viewdata(bl);
 	calc_flag = StatusChangeFlagTable[type];
 	switch(type){
-		case SC_GRANITIC_ARMOR:{
-		    int dammage = status->max_hp*sce->val3/100;
-		    if(status->hp < dammage) //to not kill him
-			dammage = status->hp-1;
-		    status_damage(NULL, bl, dammage,0,0,1);
+		case SC_GRANITIC_ARMOR:
+			{
+				int damage = status->max_hp*sce->val3/100;
+				if(status->hp < damage) //to not kill him
+					damage = status->hp-1;
+				status_damage(NULL,bl,damage,0,0,1);
+			}
 		    break;
-		}
 		case SC_PYROCLASTIC:
 		    if(bl->type == BL_PC)
-			skill_break_equip(bl,bl,EQP_WEAPON,10000,BCT_SELF);
+				skill_break_equip(bl,bl,EQP_WEAPON,10000,BCT_SELF);
 		    break;
 		case SC_WEDDING:
 		case SC_XMAS:
@@ -9498,7 +9499,7 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
 		case SC_CLOSECONFINE2:{
 			struct block_list *src = sce->val2?map_id2bl(sce->val2):NULL;
 			struct status_change *sc2 = src?status_get_sc(src):NULL;
-			int type2 = ((type==SC_CLOSECONFINE2)?SC_CLOSECONFINE:SC_TINDER_BREAKER);
+			enum sc_type type2 = ((type==SC_CLOSECONFINE2)?SC_CLOSECONFINE:SC_TINDER_BREAKER);
 			if (src && sc2 && sc2->data[type2]) {
 				//If status was already ended, do nothing.
 				//Decrease count