* Updated damage calculation for Magnum Break

* Fixed #item not working properly

git-svn-id: https://svn.code.sf.net/p/rathena/svn/branches/stable@1331 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
celest 2005-03-29 15:23:08 +00:00
parent b67e747ea7
commit a7dcc90c58
4 changed files with 37 additions and 25 deletions

View File

@ -1,6 +1,8 @@
Date Added Date Added
03/29 03/29
* Updated damage calculation for Magnum Break [celest]
* Fixed #item not working properly, thanks to TripleOxygen
* Fixed a lot of compile time problems with our mixed C++/C * Fixed a lot of compile time problems with our mixed C++/C
conformance [1328: MouseJstr] conformance [1328: MouseJstr]
* Fixed use of storage variable to conform to ANSI C spec * Fixed use of storage variable to conform to ANSI C spec

View File

@ -740,7 +740,8 @@ static struct Damage battle_calc_pet_weapon_attack(
hitrate = (hitrate*(100+5*skill_lv))/100; hitrate = (hitrate*(100+5*skill_lv))/100;
break; break;
case SM_MAGNUM: // マグナムブレイク case SM_MAGNUM: // マグナムブレイク
damage = damage*(5*skill_lv + (wflag?65:115))/100; damage = damage*(wflag > 1 ? 5*skill_lv+115 : 30*skill_lv+100)/100;
hitrate = (hitrate*(100+10*skill_lv))/100;
break; break;
case MC_MAMMONITE: // メマーナイト case MC_MAMMONITE: // メマーナイト
damage = damage*(100+ 50*skill_lv)/100; damage = damage*(100+ 50*skill_lv)/100;
@ -1236,7 +1237,8 @@ static struct Damage battle_calc_mob_weapon_attack(
hitrate = (hitrate*(100+5*skill_lv))/100; hitrate = (hitrate*(100+5*skill_lv))/100;
break; break;
case SM_MAGNUM: // マグナムブレイク case SM_MAGNUM: // マグナムブレイク
damage = damage*(5*skill_lv +(wflag?65:115))/100; damage = damage*(wflag > 1 ? 5*skill_lv+115 : 30*skill_lv+100)/100;
hitrate = (hitrate*(100+10*skill_lv))/100;
break; break;
case MC_MAMMONITE: // メマーナイト case MC_MAMMONITE: // メマーナイト
damage = damage*(100+ 50*skill_lv)/100; damage = damage*(100+ 50*skill_lv)/100;
@ -1965,8 +1967,10 @@ static struct Damage battle_calc_pc_weapon_attack(
hitrate = (hitrate*(100+5*skill_lv))/100; hitrate = (hitrate*(100+5*skill_lv))/100;
break; break;
case SM_MAGNUM: // マグナムブレイク case SM_MAGNUM: // マグナムブレイク
damage = damage*(5*skill_lv +(wflag?65:115) )/100; // 20*skill level+100? i think this will do for now [based on jRO info]
damage2 = damage2*(5*skill_lv +(wflag?65:115) )/100; damage = damage*(wflag > 1 ? 5*skill_lv+115 : 30*skill_lv+100)/100;
damage2 = damage2*(wflag > 1 ? 5*skill_lv+115 : 30*skill_lv+100)/100;
hitrate = (hitrate*(100+10*skill_lv))/100;
break; break;
case MC_MAMMONITE: // メマーナイト case MC_MAMMONITE: // メマーナイト
damage = damage*(100+ 50*skill_lv)/100; damage = damage*(100+ 50*skill_lv)/100;

View File

@ -32,7 +32,7 @@
static char command_symbol = '#'; static char command_symbol = '#';
extern char msg_table[1000][256]; // Server messages (0-499 reserved for GM commands, 500-999 reserved for others) extern char *msg_table[1000]; // Server messages (0-499 reserved for GM commands, 500-999 reserved for others)
#define CCMD_FUNC(x) int charcommand_ ## x (const int fd, struct map_session_data* sd, const char* command, const char* message) #define CCMD_FUNC(x) int charcommand_ ## x (const int fd, struct map_session_data* sd, const char* command, const char* message)
@ -1067,8 +1067,8 @@ int charcommand_item(
for (i = 0; i < number; i += get_count) { for (i = 0; i < number; i += get_count) {
// if pet egg // if pet egg
if (pet_id >= 0) { if (pet_id >= 0) {
sd->catch_target_class = pet_db[pet_id].class_; pl_sd->catch_target_class = pet_db[pet_id].class_;
intif_create_pet(sd->status.account_id, sd->status.char_id, intif_create_pet(pl_sd->status.account_id, pl_sd->status.char_id,
(short)pet_db[pet_id].class_, (short)mob_db[pet_db[pet_id].class_].lv, (short)pet_db[pet_id].class_, (short)mob_db[pet_db[pet_id].class_].lv,
(short)pet_db[pet_id].EggID, 0, (short)pet_db[pet_id].intimate, (short)pet_db[pet_id].EggID, 0, (short)pet_db[pet_id].intimate,
100, 0, 1, pet_db[pet_id].jname); 100, 0, 1, pet_db[pet_id].jname);
@ -1077,8 +1077,8 @@ int charcommand_item(
memset(&item_tmp, 0, sizeof(item_tmp)); memset(&item_tmp, 0, sizeof(item_tmp));
item_tmp.nameid = item_id; item_tmp.nameid = item_id;
item_tmp.identify = 1; item_tmp.identify = 1;
if ((flag = pc_additem((struct map_session_data*)sd, &item_tmp, get_count))) if ((flag = pc_additem(pl_sd, &item_tmp, get_count)))
clif_additem((struct map_session_data*)sd, 0, 0, flag); clif_additem(pl_sd, 0, 0, flag);
} }
} }
clif_displaymessage(fd, msg_table[18]); // Item created. clif_displaymessage(fd, msg_table[18]); // Item created.

View File

@ -807,6 +807,14 @@ int skill_additional_effect( struct block_list* src, struct block_list *bl,int s
status_change_start(bl,SC_STAN,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0); status_change_start(bl,SC_STAN,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
break; break;
case AS_GRIMTOOTH:
if (bl->type == BL_MOB) {
struct status_change *sc_data = status_get_sc_data(bl);
if (sc_data && sc_data[SC_SLOWDOWN].timer == -1)
status_change_start(bl,SC_SLOWDOWN,0,0,0,0,1000,0);
}
break;
case HT_FREEZINGTRAP: /* フリ?ジングトラップ */ case HT_FREEZINGTRAP: /* フリ?ジングトラップ */
rate=skilllv*3+35; rate=skilllv*3+35;
if(rand()%100 < rate*sc_def_mdef/100) if(rand()%100 < rate*sc_def_mdef/100)
@ -2346,17 +2354,11 @@ int skill_castend_damage_id( struct block_list* src, struct block_list *bl,int s
if(flag&1){ if(flag&1){
/* 個別にダメ?ジを?える */ /* 個別にダメ?ジを?える */
if(bl->id!=skill_area_temp[1]){ if(bl->id!=skill_area_temp[1]){
int dist=0;
skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick, skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,
0x0500|dist ); 0x0500);
if (bl->type == BL_MOB && skillid == AS_GRIMTOOTH) {
struct status_change *sc_data = status_get_sc_data(bl);
if (sc_data && sc_data[SC_SLOWDOWN].timer == -1)
status_change_start(bl,SC_SLOWDOWN,0,0,0,0,1000,0);
}
} }
} else { } else {
int ar; int ar = 1;
int x = bl->x, y = bl->y; int x = bl->x, y = bl->y;
switch (skillid) { switch (skillid) {
case AC_SHOWER: case AC_SHOWER:
@ -2365,9 +2367,6 @@ int skill_castend_damage_id( struct block_list* src, struct block_list *bl,int s
case NPC_SPLASHATTACK: case NPC_SPLASHATTACK:
ar=3; ar=3;
break; break;
default:
ar=1;
break;
} }
skill_area_temp[1]=bl->id; skill_area_temp[1]=bl->id;
@ -2384,13 +2383,20 @@ int skill_castend_damage_id( struct block_list* src, struct block_list *bl,int s
break; break;
case SM_MAGNUM: /* マグナムブレイク [celest] */ case SM_MAGNUM: /* マグナムブレイク [celest] */
{ if(flag&1 && bl->id != skill_area_temp[1]){
int dist = 0;
int dx = abs( bl->x - skill_area_temp[2] ); int dx = abs( bl->x - skill_area_temp[2] );
int dy = abs( bl->y - skill_area_temp[3] ); int dy = abs( bl->y - skill_area_temp[3] );
dist = ((dx>dy)?dx:dy); int dist = ((dx>dy)?dx:dy);
map_foreachinarea (skill_attack_area,src->m,src->x-1,src->y-1,src->x+1,src->y+1,0, skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,
BF_WEAPON,src,src,skillid,skilllv,tick,0x0500|dist,BCT_ENEMY); 0x0500|dist);
} else {
skill_area_temp[1]=src->id;
skill_area_temp[2]=src->x;
skill_area_temp[3]=src->y;
map_foreachinarea(skill_area_sub,
src->m,src->x-2,src->y-2,src->x+2,src->y+2,0,
src,skillid,skilllv,tick, flag|BCT_ENEMY|1,
skill_castend_damage_id);
status_change_start (src,SC_FLAMELAUNCHER,0,0,0,0,10000,0); status_change_start (src,SC_FLAMELAUNCHER,0,0,0,0,10000,0);
clif_skill_nodamage (src,src,skillid,skilllv,1); clif_skill_nodamage (src,src,skillid,skilllv,1);
} }