Przeglądaj źródła

- You now can't use other skills while a skill-induced "window" is up (teleport, refining, etc). However, be warned that we aren't quite sure how the server will clear this out if you decide to hit cancel on the window, so skill-blockage is likely to happen (temporary solution: whenever you change maps or warp the state is reset server-side).

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@9276 54d463be-8e91-2dee-dedb-b68131a5f0ec
skotlex 18 lat temu
rodzic
commit
12e7c68c78
4 zmienionych plików z 12 dodań i 1 usunięć
  1. 5 0
      Changelog-Trunk.txt
  2. 4 1
      src/map/skill.c
  3. 1 0
      src/map/skill.h
  4. 2 0
      src/map/unit.c

+ 5 - 0
Changelog-Trunk.txt

@@ -4,6 +4,11 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK.  ALL UNTESTED BUGFIXES/FEATURES GO
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 
 2006/11/20
+	* You now can't use other skills while a skill-induced "window" is up
+	  (teleport, refining, etc). However, be warned that we aren't quite sure how
+	  the server will clear this out if you decide to hit cancel on the window,
+	  so skill-blockage is likely to happen (temporary solution: whenever you
+	  change maps or warp the state is reset server-side). [Skotlex]
 	* Fixed itemskill variable being cleared before parsing the skill, this
 	  causes auto-casted teleport to fail to skip the skill menu. It is now
 	  cleared on castend_pos/id directly. [Skotlex]

+ 4 - 1
src/map/skill.c

@@ -852,6 +852,9 @@ int skillnotok (int skillid, struct map_session_data *sd)
 	if (battle_config.gm_skilluncond && pc_isGM(sd) >= battle_config.gm_skilluncond)
 		return 0;  // gm's can do anything damn thing they want
 
+	if(sd->menuskill_id && skillid != sd->menuskill_id)
+		return 1; //Can't use skills while a menu is open.
+
 	// Check skill restrictions [Celest]
 	if(!map_flag_vs(m) && skill_get_nocast (skillid) & 1)
 		return 1;
@@ -8309,7 +8312,7 @@ int skill_check_condition (struct map_session_data *sd, int skill, int lv, int t
 	case GD_BATTLEORDER:
 	case GD_REGENERATION:
 	case GD_RESTORE:
-		//Emergency Recall is handled on skill_notok
+		//Emergency Recall is handled on skillnotok
 		if (!agit_flag) {
 			clif_skill_fail(sd,skill,0,0);
 			return 0;

+ 1 - 0
src/map/skill.h

@@ -157,6 +157,7 @@ int	skill_get_splash( int id , int lv );
 int	skill_get_hp( int id ,int lv );
 int	skill_get_mhp( int id ,int lv );
 int	skill_get_sp( int id ,int lv );
+int	skill_get_state(int id);
 int	skill_get_zeny( int id ,int lv );
 int	skill_get_num( int id ,int lv );
 int	skill_get_cast( int id ,int lv );

+ 2 - 0
src/map/unit.c

@@ -1620,6 +1620,8 @@ int unit_remove_map(struct block_list *bl, int clrtype) {
 			guild_reply_invite(sd,sd->guild_invite,0);
 		if(sd->guild_alliance>0)
 			guild_reply_reqalliance(sd,sd->guild_alliance_account,0);
+		if(sd->menuskill_id)
+			sd->menuskill_id = sd->menuskill_lv = 0;
 
 		pc_delinvincibletimer(sd);