* Updated Sphere Mine

* Updated Wind Walk
* Added effect for Deadly poison bottle and Ice cream

git-svn-id: https://svn.code.sf.net/p/rathena/svn/branches/stable@594 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
celest 2004-12-17 10:15:48 +00:00
parent 4d61ade16c
commit 0fbbeca96d
11 changed files with 148 additions and 122 deletions

View File

@ -1,6 +1,9 @@
Date Added Date Added
12/17 12/17
* Added a fix for map loading, thanks to 'Guest' [celest] * Reverted a change in map.c causing problems, sorry >.< [celest]
* Updated Sphere Mine - it'll now move in the opposite direction if
being hit by its master [celest]
* Updated Wind Walk [celest]
* Fixed skill #301 causing crashes [MouseJstr] * Fixed skill #301 causing crashes [MouseJstr]
* Fixed documentation error on gm_skills_unconditionl [MouseJstr] * Fixed documentation error on gm_skills_unconditionl [MouseJstr]
* added @grind test command.. only for testing [MouseJstr] * added @grind test command.. only for testing [MouseJstr]

View File

@ -5,6 +5,8 @@
Ayathoya items == Added but no effect ( all are "ect" itens) Ayathoya items == Added but no effect ( all are "ect" itens)
Skill databases == celest working on them i believe. Skill databases == celest working on them i believe.
12/17 * Added effect for Deadly poison bottle and Ice cream [celest]
12/15 * Updated Steel Body, Thunderstorm, Investigate and Magic Crasher, thanks 12/15 * Updated Steel Body, Thunderstorm, Investigate and Magic Crasher, thanks
to midas to midas
* Removed elunium and oridecon from produce_db, thanks to Draco * Removed elunium and oridecon from produce_db, thanks to Draco

View File

@ -252,6 +252,7 @@ SC_Blind 136
SC_SpeedPot0 37 SC_SpeedPot0 37
SC_SpeedPot1 38 SC_SpeedPot1 38
SC_SpeedPot2 39 SC_SpeedPot2 39
SC_SpeedPot3 40
SC_ATKPot 185 SC_ATKPot 185
SC_MATKPot 186 SC_MATKPot 186
SC_EncPoison 6 SC_EncPoison 6

View File

@ -37,7 +37,7 @@
533,Grape_Juice,Grape Juice,0,250,0,40,,,,,10477567,2,,,,,{ itemheal 0,rand(15,24); },{} 533,Grape_Juice,Grape Juice,0,250,0,40,,,,,10477567,2,,,,,{ itemheal 0,rand(15,24); },{}
534,Carrot_Juice,Carrot Juice,0,20,0,40,,,,,10477567,2,,,,,{ itemheal rand(27,32),0; },{} 534,Carrot_Juice,Carrot Juice,0,20,0,40,,,,,10477567,2,,,,,{ itemheal rand(27,32),0; },{}
535,Pumkin,Pumpkin,0,15,0,20,,,,,10477567,2,,,,,{ itemheal 19,0; },{} 535,Pumkin,Pumpkin,0,15,0,20,,,,,10477567,2,,,,,{ itemheal 19,0; },{}
536,Ice_Cream,Ice Cream,0,150,0,80,,,,,10477567,2,,,,,{ itemheal rand(105,144),0; },{} 536,Ice_Cream,Ice Cream,0,150,0,80,,,,,10477567,2,,,,,{ itemheal rand(105,144),0; if (rand(100)<3) goto FR; end; FR: sc_start SC_Freeze,10000,0; },{}
537,Pet_Food,Pet Food,0,1000,0,10,,,,,10477567,2,,,,,{ itemheal rand(50,89),0; },{} 537,Pet_Food,Pet Food,0,1000,0,10,,,,,10477567,2,,,,,{ itemheal rand(50,89),0; },{}
538,Well-baked_Cookie,Well-baked Cookie,0,1000,0,30,,,,,10477567,2,,,,,{ itemheal rand(160,199),0; },{} 538,Well-baked_Cookie,Well-baked Cookie,0,1000,0,30,,,,,10477567,2,,,,,{ itemheal rand(160,199),0; },{}
539,Piece_of_Cake,Piece of Cake,0,3000,0,100,,,,,10477567,2,,,,,{ itemheal rand(270,329),0; },{} 539,Piece_of_Cake,Piece of Cake,0,3000,0,100,,,,,10477567,2,,,,,{ itemheal rand(270,329),0; },{}
@ -148,7 +148,7 @@
675,Silver_Coin,Silver Coin,2,20,0,40,,,,,0,3,,,,,{},{} 675,Silver_Coin,Silver Coin,2,20,0,40,,,,,0,3,,,,,{},{}
676,Silver_Coin_Pouch,Silver Coin Pouch,2,20,0,400,,,,,0,3,,,,,{},{} 676,Silver_Coin_Pouch,Silver Coin Pouch,2,20,0,400,,,,,0,3,,,,,{},{}
677,Platinum_Coin,Platinum Coin,2,20,0,40,,,,,0,3,,,,,{},{} 677,Platinum_Coin,Platinum Coin,2,20,0,40,,,,,0,3,,,,,{},{}
678,Deadly_Poison_Bottle,Deadly Poison Bottle,2,20,0,100,,,,,10477567,2,,,,,{ sc_start 193,60000,0; },{} 678,Deadly_Poison_Bottle,Deadly Poison Bottle,2,20,0,100,,,,,10477567,2,,,,,{ if(Class!=4013) goto Not_ASC; sc_start SC_Poison,600000,0; sc_start SC_SpeedPot0,30,0; end; Not_ASC: percentheal -100,0; },{}
679,Recall_Pills,Recall Pills,2,20,0,300,,,,,0,3,,,,,{},{} 679,Recall_Pills,Recall Pills,2,20,0,300,,,,,0,3,,,,,{},{}
680,Carnation,Carnation,2,20,0,1000,,,,,0,3,,,,,{},{} 680,Carnation,Carnation,2,20,0,1000,,,,,0,3,,,,,{},{}
681,Wedding_Photo_Album,Wedding_Photo_Album,2,20,0,10,,,,,0,3,,,,,{},{} 681,Wedding_Photo_Album,Wedding_Photo_Album,2,20,0,10,,,,,0,3,,,,,{},{}

View File

@ -144,7 +144,7 @@
230,1000,0,3:7:10:12:13,60000 //AM_ACIDTERROR#アシッドテラー# 230,1000,0,3:7:10:12:13,60000 //AM_ACIDTERROR#アシッドテラー#
232,2000,500,40000:50000:60000:70000:80000,0 //AM_CANNIBALIZE#バイオプラント# 232,2000,500,40000:50000:60000:70000:80000,0 //AM_CANNIBALIZE#バイオプラント#
233,2000,500,30000,0 //AM_SPHEREMINE#スフィアーマイン# 233,2000,500,40000:50000:60000:70000:80000,0 //AM_SPHEREMINE#スフィアーマイン#
234,2000,0,120000:240000:360000:480000:600000,0 //AM_CP_WEAPON#ケミカルウェポンチャージ# 234,2000,0,120000:240000:360000:480000:600000,0 //AM_CP_WEAPON#ケミカルウェポンチャージ#
235,2000,0,120000:240000:360000:480000:600000,0 //AM_CP_SHIELD#ケミカルシールドチャージ# 235,2000,0,120000:240000:360000:480000:600000,0 //AM_CP_SHIELD#ケミカルシールドチャージ#
236,2000,0,120000:240000:360000:480000:600000,0 //AM_CP_ARMOR#ケミカルアーマーチャージ# 236,2000,0,120000:240000:360000:480000:600000,0 //AM_CP_ARMOR#ケミカルアーマーチャージ#

View File

@ -931,7 +931,7 @@ int battle_get_speed(struct block_list *bl)
if(sc_data[SC_CURSE].timer!=-1) if(sc_data[SC_CURSE].timer!=-1)
speed = speed + 450; speed = speed + 450;
//ウィンドウォーク時はLv*2%減算 //ウィンドウォーク時はLv*2%減算
if(sc_data[SC_WINDWALK].timer!=-1) if(sc_data[SC_WINDWALK].timer!=-1 && sc_data[SC_INCREASEAGI].timer==-1)
speed -= (speed*(sc_data[SC_WINDWALK].val1*2))/100; speed -= (speed*(sc_data[SC_WINDWALK].val1*2))/100;
if(sc_data[SC_SLOWDOWN].timer!=-1) if(sc_data[SC_SLOWDOWN].timer!=-1)
speed = speed*150/100; speed = speed*150/100;
@ -990,7 +990,7 @@ int battle_get_adelay(struct block_list *bl)
if(sc_data[SC_STEELBODY].timer!=-1) // 金剛 if(sc_data[SC_STEELBODY].timer!=-1) // 金剛
aspd_rate += 25; aspd_rate += 25;
//増速ポーション使用時は減算 //増速ポーション使用時は減算
if( sc_data[i=SC_SPEEDPOTION2].timer!=-1 || sc_data[i=SC_SPEEDPOTION1].timer!=-1 || sc_data[i=SC_SPEEDPOTION0].timer!=-1) if( sc_data[i=SC_SPEEDPOTION3].timer!=-1 || sc_data[i=SC_SPEEDPOTION2].timer!=-1 || sc_data[i=SC_SPEEDPOTION1].timer!=-1 || sc_data[i=SC_SPEEDPOTION0].timer!=-1)
aspd_rate -= sc_data[i].val2; aspd_rate -= sc_data[i].val2;
//ディフェンダー時は加算 //ディフェンダー時は加算
if(sc_data[SC_DEFENDER].timer != -1) if(sc_data[SC_DEFENDER].timer != -1)
@ -1037,7 +1037,7 @@ int battle_get_amotion(struct block_list *bl)
aspd_rate += sc_data[SC_DONTFORGETME].val1*3 + sc_data[SC_DONTFORGETME].val2 + (sc_data[SC_DONTFORGETME].val3>>16); aspd_rate += sc_data[SC_DONTFORGETME].val1*3 + sc_data[SC_DONTFORGETME].val2 + (sc_data[SC_DONTFORGETME].val3>>16);
if(sc_data[SC_STEELBODY].timer!=-1) // 金剛 if(sc_data[SC_STEELBODY].timer!=-1) // 金剛
aspd_rate += 25; aspd_rate += 25;
if( sc_data[i=SC_SPEEDPOTION2].timer!=-1 || sc_data[i=SC_SPEEDPOTION1].timer!=-1 || sc_data[i=SC_SPEEDPOTION0].timer!=-1) if( sc_data[i=SC_SPEEDPOTION3].timer!=-1 || sc_data[i=SC_SPEEDPOTION2].timer!=-1 || sc_data[i=SC_SPEEDPOTION1].timer!=-1 || sc_data[i=SC_SPEEDPOTION0].timer!=-1)
aspd_rate -= sc_data[i].val2; aspd_rate -= sc_data[i].val2;
if(sc_data[SC_DEFENDER].timer != -1) if(sc_data[SC_DEFENDER].timer != -1)
amotion += (550 - sc_data[SC_DEFENDER].val1*50); amotion += (550 - sc_data[SC_DEFENDER].val1*50);

View File

@ -407,6 +407,7 @@ struct mob_data {
} state; } state;
int timer; int timer;
short to_x,to_y; short to_x,to_y;
short target_dir;
short speed; short speed;
int hp; int hp;
int target_id,attacked_id; int target_id,attacked_id;

View File

@ -928,6 +928,7 @@ int mob_spawn(int id)
md->to_x=md->bl.x=x; md->to_x=md->bl.x=x;
md->to_y=md->bl.y=y; md->to_y=md->bl.y=y;
md->dir=0; md->dir=0;
md->target_dir=0;
map_addblock(&md->bl); map_addblock(&md->bl);
@ -1492,17 +1493,28 @@ static int mob_randomwalk(struct mob_data *md,int tick)
speed=battle_get_speed(&md->bl); speed=battle_get_speed(&md->bl);
if(DIFF_TICK(md->next_walktime,tick)<0){ if(DIFF_TICK(md->next_walktime,tick)<0){
int i,x,y,c,d=12-md->move_fail_count; int i,x,y,c,d=12-md->move_fail_count;
int mask[8][2] = {{0,1},{-1,1},{-1,0},{-1,-1},{0,-1},{1,-1},{1,0},{1,1}};
if(d<5) d=5; if(d<5) d=5;
for(i=0;i<retrycount;i++){ // Search of a movable place for(i=0;i<retrycount;i++){ // Search of a movable place
int r=rand(); int r=rand();
x=md->bl.x+r%(d*2+1)-d; x=r%(d*2+1)-d;
y=md->bl.y+r/(d*2+1)%(d*2+1)-d; y=r/(d*2+1)%(d*2+1)-d;
if (md->target_dir){
if (x<0) x=0-x;
if (y<0) y=0-y;
x *= mask[md->target_dir-1][0];
y *= mask[md->target_dir-1][1];
}
x+=md->bl.x;
y+=md->bl.y;
if((c=map_getcell(md->bl.m,x,y))!=1 && c!=5 && mob_walktoxy(md,x,y,1)==0){ if((c=map_getcell(md->bl.m,x,y))!=1 && c!=5 && mob_walktoxy(md,x,y,1)==0){
md->move_fail_count=0; md->move_fail_count=0;
break; break;
} }
if(i+1>=retrycount){ if(i+1>=retrycount){
md->move_fail_count++; md->move_fail_count++;
md->target_dir = 0;
if(md->move_fail_count>1000){ if(md->move_fail_count>1000){
if(battle_config.error_log) if(battle_config.error_log)
printf("MOB cant move. random spawn %d, class = %d\n",md->bl.id,md->class); printf("MOB cant move. random spawn %d, class = %d\n",md->bl.id,md->class);
@ -2278,6 +2290,8 @@ int mob_damage(struct block_list *src,struct mob_data *md,int damage,int type)
mobskill_use_id(md,&md->bl,skillidx);//Ž©”š‰r<E280B0>¥ŠJŽn mobskill_use_id(md,&md->bl,skillidx);//Ž©”š‰r<E280B0>¥ŠJŽn
md->state.special_mob_ai++; md->state.special_mob_ai++;
} }
if (md->master_id==src->id)
md->target_dir=map_calc_dir(src,md->bl.x,md->bl.y)+1;
} }
if(md->hp>0){ if(md->hp>0){

View File

@ -1888,11 +1888,12 @@ int pc_calcstatus(struct map_session_data* sd,int first)
aspd_rate += sd->sc_data[SC_DONTFORGETME].val1*3 + sd->sc_data[SC_DONTFORGETME].val2 + (sd->sc_data[SC_DONTFORGETME].val3>>16); aspd_rate += sd->sc_data[SC_DONTFORGETME].val1*3 + sd->sc_data[SC_DONTFORGETME].val2 + (sd->sc_data[SC_DONTFORGETME].val3>>16);
sd->speed= sd->speed*(100+sd->sc_data[SC_DONTFORGETME].val1*2 + sd->sc_data[SC_DONTFORGETME].val2 + (sd->sc_data[SC_DONTFORGETME].val3&0xffff))/100; sd->speed= sd->speed*(100+sd->sc_data[SC_DONTFORGETME].val1*2 + sd->sc_data[SC_DONTFORGETME].val2 + (sd->sc_data[SC_DONTFORGETME].val3&0xffff))/100;
} }
if( sd->sc_data[i=SC_SPEEDPOTION2].timer!=-1 || if( sd->sc_data[i=SC_SPEEDPOTION3].timer!=-1 ||
sd->sc_data[i=SC_SPEEDPOTION2].timer!=-1 ||
sd->sc_data[i=SC_SPEEDPOTION1].timer!=-1 || sd->sc_data[i=SC_SPEEDPOTION1].timer!=-1 ||
sd->sc_data[i=SC_SPEEDPOTION0].timer!=-1) // ? ‘¬ƒ|?ƒVƒ‡ƒ“ sd->sc_data[i=SC_SPEEDPOTION0].timer!=-1) // ? ‘¬ƒ|?ƒVƒ‡ƒ“
aspd_rate -= sd->sc_data[i].val2; aspd_rate -= sd->sc_data[i].val2;
if(sd->sc_data[SC_WINDWALK].timer!=-1) //ウィンドウォ?ク時はLv*2%減算 if(sd->sc_data[SC_WINDWALK].timer!=-1 && sd->sc_data[SC_INCREASEAGI].timer==-1) //ウィンドウォ?ク時はLv*2%減算
sd->speed -= sd->speed *(sd->sc_data[SC_WINDWALK].val1*2)/100; sd->speed -= sd->speed *(sd->sc_data[SC_WINDWALK].val1*2)/100;
if(sd->sc_data[SC_CARTBOOST].timer!=-1) // ƒJ?ƒgƒu?ƒXƒg if(sd->sc_data[SC_CARTBOOST].timer!=-1) // ƒJ?ƒgƒu?ƒXƒg
sd->speed -= (DEFAULT_WALK_SPEED * 20)/100; sd->speed -= (DEFAULT_WALK_SPEED * 20)/100;
@ -2162,7 +2163,7 @@ int pc_calcspeed (struct map_session_data *sd)
if(sd->sc_data[SC_QUAGMIRE].timer!=-1){ if(sd->sc_data[SC_QUAGMIRE].timer!=-1){
sd->speed = sd->speed*3/2; sd->speed = sd->speed*3/2;
} }
if(sd->sc_data[SC_WINDWALK].timer!=-1) { if(sd->sc_data[SC_WINDWALK].timer!=-1 && sd->sc_data[SC_INCREASEAGI].timer==-1) {
sd->speed -= sd->speed *(sd->sc_data[SC_WINDWALK].val1*2)/100; sd->speed -= sd->speed *(sd->sc_data[SC_WINDWALK].val1*2)/100;
} }
if(sd->sc_data[SC_CARTBOOST].timer!=-1) { if(sd->sc_data[SC_CARTBOOST].timer!=-1) {

View File

@ -8667,6 +8667,7 @@ int skill_status_change_end(struct block_list* bl, int type, int tid)
case SC_SPEEDPOTION0: /* ?速ポ?ション */ case SC_SPEEDPOTION0: /* ?速ポ?ション */
case SC_SPEEDPOTION1: case SC_SPEEDPOTION1:
case SC_SPEEDPOTION2: case SC_SPEEDPOTION2:
case SC_SPEEDPOTION3:
case SC_APPLEIDUN: /* イドゥンの林檎 */ case SC_APPLEIDUN: /* イドゥンの林檎 */
case SC_RIDING: case SC_RIDING:
case SC_BLADESTOP_WAIT: case SC_BLADESTOP_WAIT:
@ -9500,7 +9501,7 @@ int skill_status_change_start(struct block_list *bl, int type, int val1, int val
if(sc_data[type].timer != -1){ /* すでに同じ異常になっている場合タイマ解除 */ if(sc_data[type].timer != -1){ /* すでに同じ異常になっている場合タイマ解除 */
if(sc_data[type].val1 > val1 && type != SC_COMBO && type != SC_DANCING && type != SC_DEVOTION && if(sc_data[type].val1 > val1 && type != SC_COMBO && type != SC_DANCING && type != SC_DEVOTION &&
type != SC_SPEEDPOTION0 && type != SC_SPEEDPOTION1 && type != SC_SPEEDPOTION2 type != SC_SPEEDPOTION0 && type != SC_SPEEDPOTION1 && type != SC_SPEEDPOTION2 && type != SC_SPEEDPOTION3
&& type != SC_ATKPOT && type != SC_MATKPOT) // added atk and matk potions [Valaris] && type != SC_ATKPOT && type != SC_MATKPOT) // added atk and matk potions [Valaris]
return 0; return 0;
if ((type >=SC_STAN && type <= SC_BLIND) || type == SC_DPOISON) if ((type >=SC_STAN && type <= SC_BLIND) || type == SC_DPOISON)
@ -9553,8 +9554,9 @@ int skill_status_change_start(struct block_list *bl, int type, int val1, int val
calc_flag = 1; calc_flag = 1;
if(sc_data[SC_DECREASEAGI].timer!=-1 ) if(sc_data[SC_DECREASEAGI].timer!=-1 )
skill_status_change_end(bl,SC_DECREASEAGI,-1); skill_status_change_end(bl,SC_DECREASEAGI,-1);
if(sc_data[SC_WINDWALK].timer!=-1 ) /* ウインドウォ?ク */ // the effect will still remain [celest]
skill_status_change_end(bl,SC_WINDWALK,-1); // if(sc_data[SC_WINDWALK].timer!=-1 ) /* ウインドウォ?ク */
// skill_status_change_end(bl,SC_WINDWALK,-1);
break; break;
case SC_DECREASEAGI: /* 速度減少 */ case SC_DECREASEAGI: /* 速度減少 */
if (bl->type == BL_PC) // Celest if (bl->type == BL_PC) // Celest
@ -9840,6 +9842,7 @@ int skill_status_change_start(struct block_list *bl, int type, int val1, int val
case SC_SPEEDPOTION0: /* ?速ポ?ション */ case SC_SPEEDPOTION0: /* ?速ポ?ション */
case SC_SPEEDPOTION1: case SC_SPEEDPOTION1:
case SC_SPEEDPOTION2: case SC_SPEEDPOTION2:
case SC_SPEEDPOTION3:
calc_flag = 1; calc_flag = 1;
tick = 1000 * tick; tick = 1000 * tick;
val2 = 5*(2+type-SC_SPEEDPOTION0); val2 = 5*(2+type-SC_SPEEDPOTION0);

View File

@ -222,6 +222,7 @@ enum { // struct map_session_data
SC_SPEEDPOTION0 = 37, SC_SPEEDPOTION0 = 37,
SC_SPEEDPOTION1 = 38, SC_SPEEDPOTION1 = 38,
SC_SPEEDPOTION2 = 39, SC_SPEEDPOTION2 = 39,
SC_SPEEDPOTION3 = 40,
SC_STRIPWEAPON = 50, SC_STRIPWEAPON = 50,
SC_STRIPSHIELD = 51, SC_STRIPSHIELD = 51,
SC_STRIPARMOR = 52, SC_STRIPARMOR = 52,