Bladeren bron

Follow up of skillcooldown

-Fix skillcooldown mistmatch
-Add safecheck for variance atk calc
lighta 11 jaren geleden
bovenliggende
commit
06c8b21ace
4 gewijzigde bestanden met toevoegingen van 13 en 23 verwijderingen
  1. 2 2
      src/map/battle.c
  2. 5 4
      src/map/pc.c
  3. 1 5
      src/map/pc.h
  4. 5 12
      src/map/skill.c

+ 2 - 2
src/map/battle.c

@@ -1543,8 +1543,8 @@ static int battle_calc_base_weapon_attack(struct block_list *src, struct status_
 
 	if (sd->equip_index[type] >= 0 && sd->inventory_data[sd->equip_index[type]]) {
 		int variance =   wa->atk * (sd->inventory_data[sd->equip_index[type]]->wlv*5)/100;
-		atkmin -= variance;
-		atkmax += variance;
+		atkmin = max(0,atkmin-variance);
+		atkmin = min(UINT16_MAX,atkmax+variance);
 
 		if (sc && sc->data[SC_MAXIMIZEPOWER])
 			damage = atkmax;

+ 5 - 4
src/map/pc.c

@@ -4884,10 +4884,11 @@ int pc_setpos(struct map_session_data* sd, unsigned short mapindex, int x, int y
 			status_change_end(&sd->bl, SC_CLOAKING, INVALID_TIMER);
 			status_change_end(&sd->bl, SC_CLOAKINGEXCEED, INVALID_TIMER);
 		}
-		for (i = 0; i < EQI_MAX; i++)
-			if (sd->equip_index[i] >= 0)
-				if (!pc_isequip(sd,sd->equip_index[i]))
-					pc_unequipitem(sd,sd->equip_index[i],2);
+		for( i = 0; i < EQI_MAX; i++ ) {
+			if( sd->equip_index[ i ] >= 0 )
+				if( !pc_isequip( sd , sd->equip_index[ i ] ) )
+					pc_unequipitem( sd , sd->equip_index[ i ] , 2 );
+		}
 		if (battle_config.clear_unit_onwarp&BL_PC)
 			skill_clear_unitgroup(&sd->bl);
 		party_send_dot_remove(sd); //minimap dot fix [Kevin]

+ 1 - 5
src/map/pc.h

@@ -249,7 +249,7 @@ struct map_session_data {
 	uint16 skill_id_old,skill_lv_old;
 	uint16 skill_id_dance,skill_lv_dance;
 	short cook_mastery; // range: [0,1999] [Inkfish]
-    struct skill_cooldown_entry * scd[MAX_SKILLCOOLDOWN]; // Skill Cooldown
+	struct skill_cooldown_entry * scd[MAX_SKILLCOOLDOWN]; // Skill Cooldown
 	int cloneskill_id, reproduceskill_id;
 	int menuskill_id, menuskill_val, menuskill_val2;
 
@@ -326,10 +326,6 @@ struct map_session_data {
 		short flag, rate;
 		unsigned char ele;
 	} subele2[MAX_PC_BONUS];
-	struct {
-		int id;
-		int val;
-	} cooldown[MAX_PC_BONUS];
 	struct {
 		short value;
 		int rate, tick;

+ 5 - 12
src/map/skill.c

@@ -254,9 +254,9 @@ int skill_get_cooldown_(struct map_session_data *sd, int id, int lv) {
 	if (skill_db[idx].cooldown[lv - 1])
 		cooldown = skill_db[idx].cooldown[lv - 1];
 
-	for (i = 0; i < ARRAYLENGTH(sd->cooldown) && sd->cooldown[i].id; i++) {
-		if (sd->cooldown[i].id == id) {
-			cooldown += sd->cooldown[i].val;
+	for (i = 0; i < ARRAYLENGTH(sd->skillcooldown) && sd->skillcooldown[i].id; i++) {
+		if (sd->skillcooldown[i].id == id) {
+			cooldown += sd->skillcooldown[i].val;
 			if (cooldown < 0)
 				cooldown = 0;
 			break;
@@ -10065,15 +10065,8 @@ int skill_castend_pos(int tid, unsigned int tick, int id, intptr_t data)
 		if( !sd || sd->skillitem != ud->skill_id || skill_get_delay(ud->skill_id,ud->skill_lv) )
 			ud->canact_tick = tick + skill_delayfix(src, ud->skill_id, ud->skill_lv);
 		if (sd) { //Cooldown application
-			int i, cooldown = skill_get_cooldown(ud->skill_id, ud->skill_lv);
-			for (i = 0; i < ARRAYLENGTH(sd->skillcooldown) && sd->skillcooldown[i].id; i++) { // Increases/Decreases cooldown of a skill by item/card bonuses.
-				if (sd->skillcooldown[i].id == ud->skill_id){
-					cooldown += sd->skillcooldown[i].val;
-					break;
-				}
-			}
-			if(cooldown)
-			skill_blockpc_start(sd, ud->skill_id, cooldown);
+			int cooldown = skill_get_cooldown_(sd,ud->skill_id, ud->skill_lv);
+			if(cooldown) skill_blockpc_start(sd, ud->skill_id, cooldown);
 		}
 		if( battle_config.display_status_timers && sd )
 			clif_status_change(src, SI_ACTIONDELAY, 1, skill_delayfix(src, ud->skill_id, ud->skill_lv), 0, 0, 0);