Pārlūkot izejas kodu

Finished updating Basilica.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/athena@258 54d463be-8e91-2dee-dedb-b68131a5f0ec
celest 20 gadi atpakaļ
vecāks
revīzija
94a793b2cf
3 mainītis faili ar 194 papildinājumiem un 154 dzēšanām
  1. 2 1
      Changelog.txt
  2. 155 144
      src/map/pc.c
  3. 37 9
      src/map/skill.c

+ 2 - 1
Changelog.txt

@@ -12,7 +12,8 @@ Date	Added
 	* Skill updates [celest]
 	  - Updated Cloaking (thanks to orn), Endure
           - Pneuma (thanks to DracoRPG)
-          - Changed sc_ id for Basilica (80%)
+          - Changed sc_ id for Basilica
+          - Cancel Basilica (100%) when caster moves or uses another skill
 	* Modified pc_attack to fix monster npc's not working in certain exes, thanks
 	  to leinsirk10 [celest]
 	* Moved mapflags organized by type to main mapflag folder and removed "type" folder.

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 155 - 144
src/map/pc.c


+ 37 - 9
src/map/skill.c

@@ -5003,7 +5003,7 @@ struct skill_unit_group *skill_unitsetting( struct block_list *src, int skillid,
 		range=3;
 		//Fix to prevent the priest from walking while Basilica is up.
 		battle_stopwalking(src,1);
-		skill_status_change_start(src,SC_ANKLE,skilllv,0,0,0,limit,0);
+		//skill_status_change_start(src,SC_ANKLE,skilllv,0,0,0,limit,0);
 		//sd->canmove_tick = gettick() + limit; // added later [celest]
 		break;
 	case PA_GOSPEL:		/* ゴスペル */
@@ -5258,6 +5258,12 @@ struct skill_unit_group *skill_unitsetting( struct block_list *src, int skillid,
 			unit->val2=val2;
 			unit->limit=limit;
 			unit->range=range;
+
+			// [celest]
+			if (sc_data) {
+				if (sc_data[SC_BASILICA].timer!=-1) // attach Basilica's id to the caster
+					sc_data[SC_BASILICA].val4 = (int)unit;
+			}
 		}
 	}
 	return group;
@@ -6722,14 +6728,25 @@ int skill_use_id( struct map_session_data *sd, int target_id,
 		}
 
 		if(sc_data[SC_BLADESTOP].timer != -1){
-		int lv = sc_data[SC_BLADESTOP].val1;
-		if(sc_data[SC_BLADESTOP].val2==1) return 0;//白羽された側なのでダメ
-		if(lv==1) return 0;
-		if(lv==2 && skill_num!=MO_FINGEROFFENSIVE) return 0;
-		if(lv==3 && skill_num!=MO_FINGEROFFENSIVE && skill_num!=MO_INVESTIGATE) return 0;
-		if(lv==4 && skill_num!=MO_FINGEROFFENSIVE && skill_num!=MO_INVESTIGATE && skill_num!=MO_CHAINCOMBO) return 0;
-		if(lv==5 && skill_num!=MO_FINGEROFFENSIVE && skill_num!=MO_INVESTIGATE && skill_num!=MO_CHAINCOMBO && skill_num!=MO_EXTREMITYFIST) return 0;
-	}
+			int lv = sc_data[SC_BLADESTOP].val1;
+			if(sc_data[SC_BLADESTOP].val2==1) return 0;//白羽された側なのでダメ
+			if(lv==1) return 0;
+			if(lv==2 && skill_num!=MO_FINGEROFFENSIVE) return 0;
+			if(lv==3 && skill_num!=MO_FINGEROFFENSIVE && skill_num!=MO_INVESTIGATE) return 0;
+			if(lv==4 && skill_num!=MO_FINGEROFFENSIVE && skill_num!=MO_INVESTIGATE && skill_num!=MO_CHAINCOMBO) return 0;
+			if(lv==5 && skill_num!=MO_FINGEROFFENSIVE && skill_num!=MO_INVESTIGATE && skill_num!=MO_CHAINCOMBO && skill_num!=MO_EXTREMITYFIST) return 0;
+		}
+
+		if (sc_data[SC_BASILICA].timer != -1) { // Basilica cancels if caster moves [celest]
+			struct skill_unit *su;
+			if ((su = (struct skill_unit *)sc_data[SC_BASILICA].val4)) {
+				struct skill_unit_group *sg;
+				if ((sg = su->group) && sg->src_id == sd->bl.id) {
+					skill_status_change_end(&sd->bl,SC_BASILICA,-1);
+					skill_delunitgroup (sg);
+				}
+			}
+		}
 	}
 
 	if(sd->status.option&4 && skill_num==TF_HIDING)
@@ -7014,6 +7031,17 @@ int skill_use_pos( struct map_session_data *sd,
 			sc_data[SC_BERSERK].timer != -1  ||
 			sd->sc_data[SC_MARIONETTE].timer != -1)
 			return 0;	/* ?態異常や沈?など */
+
+		if (sc_data[SC_BASILICA].timer != -1) { // Basilica cancels if caster moves [celest]
+			struct skill_unit *su;
+			if ((su = (struct skill_unit *)sc_data[SC_BASILICA].val4)) {
+				struct skill_unit_group *sg;
+				if ((sg = su->group) && sg->src_id == sd->bl.id) {
+					skill_status_change_end(&sd->bl,SC_BASILICA,-1);
+					skill_delunitgroup (sg);
+				}
+			}
+		}
 	}
 
 	if(sd->status.option&2)

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels