Browse Source

Fixed VIP gemstone requirement setting (fixes #1846)
* Resolves the VIP gemstone requirement setting get reset on each status_calc_pc.
* Removed some duplicate code during gemstone avoidance calculation.
Thanks to @Everade!

aleos 8 years ago
parent
commit
320bf9073b
3 changed files with 5 additions and 11 deletions
  1. 0 3
      src/map/chrif.c
  2. 1 8
      src/map/skill.c
  3. 4 0
      src/map/status.c

+ 0 - 3
src/map/chrif.c

@@ -1604,9 +1604,6 @@ void chrif_parse_ack_vipActive(int fd) {
 				ShowError("intif_parse_ack_vipActive: Storage size for player %s (%d:%d) is larger than MAX_STORAGE. Storage size has been set to MAX_STORAGE.\n", sd->status.name, sd->status.account_id, sd->status.char_id);
 				sd->storage.max_amount = MAX_STORAGE;
 			}
-			// Magic Stone requirement avoidance for VIP.
-			if (battle_config.vip_gemstone)
-				sd->special_state.no_gemstone = 2; // need to be done after status_calc_bl(bl,first);
 		} else if (sd->vip.enabled) {
 			sd->vip.enabled = 0;
 			sd->vip.time = 0;

+ 1 - 8
src/map/skill.c

@@ -16039,20 +16039,13 @@ struct skill_condition skill_get_requirement(struct map_session_data* sd, uint16
 					if( sd->special_state.no_gemstone == 2 ) // Remove all Magic Stone required for all skills for VIP.
 						req.itemid[i] = req.amount[i] = 0;
 					else {
-						if( sd->special_state.no_gemstone )
+						if( sd->special_state.no_gemstone || (sc && sc->data[SC_INTOABYSS]) )
 						{	// All gem skills except Hocus Pocus and Ganbantein can cast for free with Mistress card -helvetica
 							if( skill_id != SA_ABRACADABRA )
 		 						req.itemid[i] = req.amount[i] = 0;
 							else if( --req.amount[i] < 1 )
 								req.amount[i] = 1; // Hocus Pocus always use at least 1 gem
 						}
-						if(sc && sc->data[SC_INTOABYSS])
-						{
-							if( skill_id != SA_ABRACADABRA )
-								req.itemid[i] = req.amount[i] = 0;
-							else if( --req.amount[i] < 1 )
-								req.amount[i] = 1; // Hocus Pocus always use at least 1 gem
-						}
 					}
 				}
 				// Check requirement for Magic Gear Fuel

+ 4 - 0
src/map/status.c

@@ -3322,6 +3322,10 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt)
 
 	memset(&sd->special_state,0,sizeof(sd->special_state));
 
+	// Magic Stone requirement avoidance for VIP.
+	if (pc_isvip(sd) && battle_config.vip_gemstone)
+		sd->special_state.no_gemstone = 2;
+
 	if (!sd->state.permanent_speed) {
 		memset(&base_status->max_hp, 0, sizeof(struct status_data)-(sizeof(base_status->hp)+sizeof(base_status->sp)));
 		base_status->speed = DEFAULT_WALK_SPEED;