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
This commit is contained in:
cydh 2013-07-02 06:11:10 +00:00
parent e18cb74516
commit a59ae7bee1
3 changed files with 32 additions and 24 deletions

View File

@ -498,9 +498,13 @@
// Sistem surat (e-mail) // Sistem surat (e-mail)
510: Kamu memiliki %d pesan baru (ada %d pesan yang belum dibaca) 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) // 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. 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). 537: Karakter '%s' (akun: %d) sedang mencoba menggunakan bot (Pemain ini sedang mencoba mendeteksi monster umpan).
// Pesan tentang pelanggaran transaksi. // Pesan tentang pelanggaran transaksi.
@ -927,7 +931,6 @@
1096: PartyLock | 1096: PartyLock |
1097: GuildLock | 1097: GuildLock |
1098: Loadevent | 1098: Loadevent |
1099: Src4instance |
1100: Chmautojoin | 1100: Chmautojoin |
1101: nousecart | 1101: nousecart |
1102: noitemconsumption | 1102: noitemconsumption |

View File

@ -8540,6 +8540,11 @@ int pc_equipitem(struct map_session_data *sd,int n,int req_pos)
return 0; 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 ) if( DIFF_TICK(sd->canequip_tick,gettick()) > 0 )
{ {
clif_equipitemack(sd,n,0,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; return 0;
} }
// if player is berserk then cannot unequip // 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])) if( !(flag&2) && sd->sc.count && (
{ sd->sc.data[SC_BERSERK] ||
clif_unequipitemack(sd,n,0,0); sd->sc.data[SC_SATURDAYNIGHTFEVER] ||
return 0; 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
if( !(flag&2) && sd->sc.count && sd->sc.data[SC_KYOUGAKU] )
{ {
clif_unequipitemack(sd,n,0,0); clif_unequipitemack(sd,n,0,0);
return 0; return 0;
@ -9856,7 +9860,7 @@ static bool pc_readdb_job_exp(char* fields[], int columns, int current)
/*========================================== /*==========================================
* pc DB reading. * pc DB reading.
* exp.txt - required experience values * job_exp.txt - required experience values
* skill_tree.txt - skill tree for every class * skill_tree.txt - skill tree for every class
* attr_fix.txt - elemental adjustment table * attr_fix.txt - elemental adjustment table
* job_db1.txt - job,weight,hp_factor,hp_multiplicator,sp_factor,aspds/lvl * job_db1.txt - job,weight,hp_factor,hp_multiplicator,sp_factor,aspds/lvl

View File

@ -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 block_list *src = val2?map_id2bl(val2):NULL;
struct status_change *sc2 = src?status_get_sc(src):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; struct status_change_entry *sce2 = sc2?sc2->data[type2]:NULL;
if (src && sc2) { 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 % val4 = 50; //def reduc %
break; break;
case SC_GRANITIC_ARMOR: case SC_GRANITIC_ARMOR:
val2 = 2*val1; //dmg hp reduction val2 = 2*val1; //dmg reduction
val3 = (6*status_get_max_hp(src))/100; //dmg hp on status end val3 = 6*val1; //dmg taken on status end (6%:12%:18%:24%:30%)
val4 = 5 * val1; //unknow formula val4 = 5*val1; //unknow formula
break; break;
case SC_MAGMA_FLOW: case SC_MAGMA_FLOW:
val2 = 3*val1; //activation chance val2 = 3*val1; //activation chance
break; break;
case SC_PYROCLASTIC: 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 % val3 = 2*val1;//Chance To AutoCast Hammer Fall %
break; break;
case SC_PARALYSIS: //[Lighta] need real info 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); vd = status_get_viewdata(bl);
calc_flag = StatusChangeFlagTable[type]; calc_flag = StatusChangeFlagTable[type];
switch(type){ switch(type){
case SC_GRANITIC_ARMOR:{ case SC_GRANITIC_ARMOR:
int dammage = status->max_hp*sce->val3/100; {
if(status->hp < dammage) //to not kill him int damage = status->max_hp*sce->val3/100;
dammage = status->hp-1; if(status->hp < damage) //to not kill him
status_damage(NULL, bl, dammage,0,0,1); damage = status->hp-1;
status_damage(NULL,bl,damage,0,0,1);
}
break; break;
}
case SC_PYROCLASTIC: case SC_PYROCLASTIC:
if(bl->type == BL_PC) 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; break;
case SC_WEDDING: case SC_WEDDING:
case SC_XMAS: 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:{ case SC_CLOSECONFINE2:{
struct block_list *src = sce->val2?map_id2bl(sce->val2):NULL; struct block_list *src = sce->val2?map_id2bl(sce->val2):NULL;
struct status_change *sc2 = src?status_get_sc(src):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 (src && sc2 && sc2->data[type2]) {
//If status was already ended, do nothing. //If status was already ended, do nothing.
//Decrease count //Decrease count