瀏覽代碼

Fixed bugreport:6127 remove the double duration bonus from GC_RESEARCHEWPOISON
Fixed bugreport:6109 GN_CARTBOOST should now give atk bonus and fixed some genetic skills damage ratio and behavior
Fixed bugreport:6121 Rolling cutter's counter should now only be removed by walking and Cross Ripper Slasher
Fixed bugreport:6100 Cart should now can't be removed when character dies

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@16353 54d463be-8e91-2dee-dedb-b68131a5f0ec

rud0lp20 13 年之前
父節點
當前提交
0e6ba7d3ca
共有 5 個文件被更改,包括 13 次插入14 次删除
  1. 9 8
      src/map/battle.c
  2. 0 1
      src/map/map.c
  3. 2 5
      src/map/skill.c
  4. 1 0
      src/map/status.c
  5. 1 0
      src/map/unit.c

+ 9 - 8
src/map/battle.c

@@ -2362,16 +2362,15 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
 					skillratio += 400;
 					break;
 				case GN_CART_TORNADO:
-					if( sd )
-						skillratio += 50 * skill_lv + pc_checkskill(sd, GN_REMODELING_CART) * 100 - 100;
-					RE_LVL_DMOD(100);
-					if( sc && sc->data[SC_GN_CARTBOOST] )
-						skillratio += 10 * sc->data[SC_GN_CARTBOOST]->val1;
+					// ATK [( Skill Level x 50 ) + ( Cart Weight / ( 150 - Caster’s Base STR ))] + ( Cart Remodeling Skill Level x 50 )] %
+					skillratio = 50 * skill_lv;
+					if( sd && sd->cart_weight)
+						 skillratio += sd->cart_weight/10 / (150-sstatus->str) + pc_checkskill(sd, GN_REMODELING_CART) * 50;
 					break;
 				case GN_CARTCANNON:
-					if( sd ) skillratio += 250 + 50 * skill_lv + pc_checkskill(sd, GN_REMODELING_CART) * (sstatus->int_ / 2);
-					if( sc && sc->data[SC_GN_CARTBOOST] )
-						skillratio += 10 * sc->data[SC_GN_CARTBOOST]->val1;
+					// ATK [{( Cart Remodeling Skill Level x 50 ) x ( INT / 40 )} + ( Cart Cannon Skill Level x 60 )] %
+					skillratio = 60 * skill_lv; 
+					if( sd ) skillratio += pc_checkskill(sd, GN_REMODELING_CART) * 50 * (sstatus->int_ / 40);
 					break;
 				case GN_SPORE_EXPLOSION:
 					skillratio += 200 + 100 * skill_lv;
@@ -2695,6 +2694,8 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
 #endif
 				ATK_ADD(20*lv);
 			}
+			if(sc->data[SC_GN_CARTBOOST])
+				ATK_ADD(10*sc->data[SC_GN_CARTBOOST]->val1);
 		}
 
 		//Refine bonus

+ 0 - 1
src/map/map.c

@@ -403,7 +403,6 @@ int map_moveblock(struct block_list *bl, int x1, int y1, unsigned int tick)
 		if (sc->data[SC_PROPERTYWALK] &&
 			sc->data[SC_PROPERTYWALK]->val3 >= skill_get_maxcount(sc->data[SC_PROPERTYWALK]->val1,sc->data[SC_PROPERTYWALK]->val2) )
 			status_change_end(bl,SC_PROPERTYWALK,INVALID_TIMER);
-		status_change_end(bl, SC_ROLLINGCUTTER, INVALID_TIMER); //If you move, you lose your counters.
 	} else
 	if (bl->type == BL_NPC)
 		npc_unsetcells((TBL_NPC*)bl);

+ 2 - 5
src/map/skill.c

@@ -3373,6 +3373,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
 	case CH_TIGERFIST:
 	case PA_SHIELDCHAIN:	// Shield Chain
 	case PA_SACRIFICE:
+	case ASC_EDP:
 	case WS_CARTTERMINATION:	// Cart Termination
 	case AS_VENOMKNIFE:
 	case HT_PHANTASMIC:
@@ -5070,10 +5071,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
 		}
 		break;
 
-	case ASC_EDP:
-		clif_skill_nodamage(src,bl,skillid,skilllv,
-			sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv) + ( sd ? 3000 * pc_checkskill(sd,GC_RESEARCHNEWPOISON) : 0 )));
-		break;
 	case AL_INCAGI:
 	case AL_BLESSING:
 	case MER_INCAGI:
@@ -11208,7 +11205,7 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
 						const struct TimerData* td = tsc->data[type]?get_timer(tsc->data[type]->timer):NULL; 
 						if( td )
 							sec = DIFF_TICK(td->tick, tick);
-						map_moveblock(bl, src->bl.x, src->bl.y, tick);
+						///map_moveblock(bl, src->bl.x, src->bl.y, tick); // in official server it doesn't behave like this. [malufett]
 						clif_fixpos(bl);
 						sg->val2 = bl->id;
 					} else

+ 1 - 0
src/map/status.c

@@ -8411,6 +8411,7 @@ int status_change_clear(struct block_list* bl, int type)
 		case SC_MATKPOTION:
 		case SC_S_LIFEPOTION:
 		case SC_L_LIFEPOTION:
+		case SC_PUSH_CART:
 			continue;
 
 		}

+ 1 - 0
src/map/unit.c

@@ -163,6 +163,7 @@ static int unit_walktoxy_timer(int tid, unsigned int tick, int id, intptr_t data
 	y += dy;
 	map_moveblock(bl, x, y, tick);
 	ud->walk_count++; //walked cell counter, to be used for walk-triggered skills. [Skotlex]
+	status_change_end(bl, SC_ROLLINGCUTTER, INVALID_TIMER); //If you move, you lose your counters. [malufett]
 
 	if (bl->x != x || bl->y != y || ud->walktimer != INVALID_TIMER)
 		return 0; //map_moveblock has altered the object beyond what we expected (moved/warped it)