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)
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 |

View File

@ -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

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 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
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,13 +9305,14 @@ 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);
break;
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);
@ -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