Browse Source

Jack Frost, Status Traps, Stone Fling, Leap, Cannon Spear
* Fixed status base chances of Jack Frost and Status Traps (fixes #997)
-- Jack Frost: 200% freeze chance instead of 100%
-- Land Mine: 10% stun chance instead of 35%-55%
-- Flasher: 100% blind chance instead of 40%-80%
-- Freezing Trap: 100% freeze chance of instead 38%-50%
* Sandman Sleep and Throw Stone Blind base duration is now 30s in pre-re and 20s in renewal
* Leap now has a shorter distance when used diagonally (fixes #1007)
* Cannon Spear now shows the skill animation even if it doesn't hit anything (fixes #1004)

Playtester 9 years ago
parent
commit
61a48b9b0b
3 changed files with 23 additions and 11 deletions
  1. 3 3
      db/pre-re/skill_cast_db.txt
  2. 2 2
      db/re/skill_cast_db.txt
  3. 18 6
      src/map/skill.c

+ 3 - 3
db/pre-re/skill_cast_db.txt

@@ -207,7 +207,7 @@
 //-- HT_SHOCKWAVE
 118,0,0,0,200000:160000:120000:80000:40000,0,0
 //-- HT_SANDMAN
-119,0,0,0,150000:120000:90000:60000:30000,12000:14000:16000:18000:20000,0
+119,0,0,0,150000:120000:90000:60000:30000,30000,0
 //-- HT_FLASHER
 120,0,0,0,150000:120000:90000:60000:30000,30000,0
 //-- HT_FREEZINGTRAP
@@ -257,7 +257,7 @@
 //-- TF_PICKSTONE
 151,500,0,0,0,0,0
 //-- TF_THROWSTONE
-152,0,0,0,5000,8000,0
+152,0,0,0,5000,30000,0
 
 //-- MC_LOUD
 155,0,0,0,300000,0,0
@@ -297,7 +297,7 @@
 177,0,0,0,0,30000,0
 //-- NPC_SILENCEATTACK
 178,0,0,0,0,30000,0
-//-- NPC0,_STUNATTACK
+//-- NPC_STUNATTACK
 179,0,0,0,0,5000,0
 //-- NPC_PETRIFYATTACK
 180,0,0,0,0,20000,0

+ 2 - 2
db/re/skill_cast_db.txt

@@ -208,7 +208,7 @@
 //-- HT_SHOCKWAVE
 118,0,0,0,200000:160000:120000:80000:40000,0,0,0
 //-- HT_SANDMAN
-119,0,0,0,150000:120000:90000:60000:30000,12000:14000:16000:18000:20000,0,0
+119,0,0,0,150000:120000:90000:60000:30000,20000,0,0
 //-- HT_FLASHER
 120,0,0,0,150000:120000:90000:60000:30000,20000,0,0
 //-- HT_FREEZINGTRAP
@@ -255,7 +255,7 @@
 //-- TF_PICKSTONE
 151,0,0,0,0,0,0,500
 //-- TF_THROWSTONE
-152,0,100,0,5000,8000,0,0
+152,0,100,0,5000,20000,0,0
 
 //-- MC_LOUD
 155,0,0,0,300000,0,0,0

+ 18 - 6
src/map/skill.c

@@ -1164,16 +1164,16 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1
 
 	case HT_FREEZINGTRAP:
 	case MA_FREEZINGTRAP:
-		sc_start(src,bl,SC_FREEZE,(3*skill_lv+35),skill_lv,skill_get_time2(skill_id,skill_lv));
+		sc_start(src,bl,SC_FREEZE,100,skill_lv,skill_get_time2(skill_id,skill_lv));
 		break;
 
 	case HT_FLASHER:
-		sc_start(src,bl,SC_BLIND,(10*skill_lv+30),skill_lv,skill_get_time2(skill_id,skill_lv));
+		sc_start(src,bl,SC_BLIND,100,skill_lv,skill_get_time2(skill_id,skill_lv));
 		break;
 
 	case HT_LANDMINE:
 	case MA_LANDMINE:
-		sc_start(src,bl,SC_STUN,(5*skill_lv+30),skill_lv,skill_get_time2(skill_id,skill_lv));
+		sc_start(src,bl,SC_STUN,10,skill_lv,skill_get_time2(skill_id,skill_lv));
 		break;
 
 	case HT_SHOCKWAVE:
@@ -1453,7 +1453,7 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1
 		}
 		break;
 	case WL_JACKFROST:
-		sc_start(src,bl,SC_FREEZE,100,skill_lv,skill_get_time(skill_id,skill_lv));
+		sc_start(src,bl,SC_FREEZE,200,skill_lv,skill_get_time(skill_id,skill_lv));
 		break;
 	case RA_WUGBITE: {
 			int wug_rate = (50 + 10 * skill_lv) + 2 * ((sd) ? pc_checkskill(sd,RA_TOOTHOFWUG)*2 : skill_get_max(RA_TOOTHOFWUG)) - (status_get_agi(bl) / 4);
@@ -4468,6 +4468,8 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 	case NC_FLAMELAUNCHER:
 		if (sd) pc_overheat(sd,1);
 	case LG_CANNONSPEAR:
+		if(skill_id == LG_CANNONSPEAR)
+			clif_skill_damage(src, bl, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, 6);
 		skill_area_temp[1] = bl->id;
 		if (battle_config.skill_eightpath_algorithm) {
 			//Use official AoE algorithm
@@ -7675,6 +7677,10 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
 			) {
 				x = src->x;
 				y = src->y;
+			} else if(dir%2) {
+				//Diagonal
+				x = src->x + dirx[dir]*(skill_lv*4)/3;
+				y = src->y + diry[dir]*(skill_lv*4)/3;
 			} else {
 				x = src->x + dirx[dir]*skill_lv*2;
 				y = src->y + diry[dir]*skill_lv*2;
@@ -16612,8 +16618,14 @@ int skill_attack_area(struct block_list *bl, va_list ap)
 	flag = va_arg(ap,int);
 	type = va_arg(ap,int);
 
-	if (skill_area_temp[1] == bl->id) //This is the target of the skill, do a full attack and skip target checks.
-		return (int)skill_attack(atk_type,src,dsrc,bl,skill_id,skill_lv,tick,flag);
+	if (skill_area_temp[1] == bl->id) { //This is the target of the skill, do a full attack and skip target checks.
+		switch (skill_id) {
+			case LG_CANNONSPEAR:
+				return (int)skill_attack(atk_type,src,dsrc,bl,skill_id,skill_lv,tick,flag|SD_ANIMATION);
+			default:
+				return (int)skill_attack(atk_type,src,dsrc,bl,skill_id,skill_lv,tick,flag);
+		}
+	}
 
 	if(battle_check_target(dsrc,bl,type) <= 0 ||
 		!status_check_skilluse(NULL, bl, skill_id, 2))