Sfoglia il codice sorgente

- NPC_MAGICALATTACK now starts a state similar to Sacrificial Ritual, in the sense that every normal attack afterwards becomes a Magical Attack. The skill duration is 15 secs.
- Corrected some trade-cancel calls in trade_traderequest.


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

skotlex 18 anni fa
parent
commit
9c8f2cbb52
8 ha cambiato i file con 22 aggiunte e 6 eliminazioni
  1. 3 0
      Changelog-Trunk.txt
  2. 3 0
      db/skill_cast_db.txt
  3. 6 2
      src/map/battle.c
  4. 1 1
      src/map/clif.c
  5. 5 1
      src/map/skill.c
  6. 1 0
      src/map/status.c
  7. 1 0
      src/map/status.h
  8. 2 2
      src/map/trade.c

+ 3 - 0
Changelog-Trunk.txt

@@ -4,6 +4,9 @@ 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.
 
 2007/04/25
+	* NPC_MAGICALATTACK now starts a state similar to Sacrificial Ritual, in
+	  the sense that every normal attack afterwards becomes a Magical Attack. The
+	  skill duration is 15 secs. [Skotlex]
 	* Added missing Rachel quest map [Playtester] 
 	* Ganbantein now deletes individual skill cells instead of the whole skill
 	  in the area it is casted.

+ 3 - 0
db/skill_cast_db.txt

@@ -323,6 +323,9 @@
 //-- NPC_SLEEPATTACK
 182,0,0,0,0,8000:10000:12000:14000:16000:18000:20000:22000:24000:26000
 
+//-- NPC_MAGICALATTACK
+192,0,0,0,15000,0
+
 //-- NPC_KEEPING
 201,0,0,0,60000:70000:80000:90000:100000:110000:120000:130000:140000:150000,0
 

+ 6 - 2
src/map/battle.c

@@ -2899,8 +2899,12 @@ int battle_weapon_attack(struct block_list* src, struct block_list* target, unsi
 		if (rand()%100 < triple_rate)
 			return skill_attack(BF_WEAPON,src,src,target,MO_TRIPLEATTACK,damage,tick,0);
 	}
-	else if (sc && sc->data[SC_SACRIFICE].timer != -1)
-		return skill_attack(BF_WEAPON,src,src,target,PA_SACRIFICE,sc->data[SC_SACRIFICE].val1,tick,0);
+	else if (sc) {
+		if (sc->data[SC_SACRIFICE].timer != -1)
+			return skill_attack(BF_WEAPON,src,src,target,PA_SACRIFICE,sc->data[SC_SACRIFICE].val1,tick,0);
+		if (sc->data[SC_MAGICALATTACK].timer != -1)
+			return skill_attack(BF_MAGIC,src,src,target,NPC_MAGICALATTACK,sc->data[SC_MAGICALATTACK].val1,tick,0);
+	}
 
 	wd = battle_calc_weapon_attack(src, target, 0, 0, flag);
 

+ 1 - 1
src/map/clif.c

@@ -53,7 +53,7 @@ struct Clif_Config {
 struct packet_db packet_db[MAX_PACKET_VER + 1][MAX_PACKET_DB + 1];
 
 //Converts item type in case of pet eggs.
-#define itemtype(a) (a == 7)?4:a
+#define itemtype(a) (a == IT_PETEGG)?IT_WEAPON:a
 
 #define WBUFPOS(p,pos,x,y,dir) \
 	do { \

+ 5 - 1
src/map/skill.c

@@ -3133,7 +3133,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
 	case AL_HOLYLIGHT:
 	case WZ_JUPITEL:
 	case NPC_DARKTHUNDER:
-	case NPC_MAGICALATTACK:
 	case PR_ASPERSIO:
 	case MG_FROSTDIVER:
 	case WZ_SIGHTBLASTER:
@@ -3144,6 +3143,11 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
 		skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag);
 		break;
 
+	case NPC_MAGICALATTACK:
+		skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag);
+		sc_start(src,SkillStatusChangeTable(skillid),100,skilllv,skill_get_time(skillid,skilllv));
+		break;
+
 	case HVAN_CAPRICE: //[blackhole89]
 		{
 			int ran=rand()%4;

+ 1 - 0
src/map/status.c

@@ -212,6 +212,7 @@ void initChangeTables(void) {
 	add_sc(NPC_PETRIFYATTACK, SC_STONE);
 	add_sc(NPC_CURSEATTACK, SC_CURSE);
 	add_sc(NPC_SLEEPATTACK, SC_SLEEP);
+	add_sc(NPC_MAGICALATTACK, SC_MAGICALATTACK);
 	set_sc(NPC_KEEPING, SC_KEEPING, SI_BLANK, SCB_DEF);
 	add_sc(NPC_DARKBLESSING, SC_COMA);
 	set_sc(NPC_BARRIER, SC_BARRIER, SI_BLANK, SCB_MDEF|SCB_DEF);

+ 1 - 0
src/map/status.h

@@ -259,6 +259,7 @@ enum {
 	SC_INCDEXRATE,
 	SC_JAILED,
 	SC_ENCHANTARMS,
+	SC_MAGICALATTACK,
 	SC_MAX, //Automatically updated max, used in for's and at startup to check we are within bounds. [Skotlex]
 };
 int SkillStatusChangeTable(int skill);

+ 2 - 2
src/map/trade.c

@@ -54,7 +54,7 @@ void trade_traderequest(struct map_session_data *sd, struct map_session_data *ta
 	}
 
 	if ((target_sd->trade_partner != 0) || (sd->trade_partner != 0)) {
-		trade_tradecancel(sd); // person is in another trade
+		clif_tradestart(sd, 2); //  person is in another trade
 		return;
 	}
 
@@ -62,7 +62,7 @@ void trade_traderequest(struct map_session_data *sd, struct map_session_data *ta
 	if ( pc_can_give_items(level) || pc_can_give_items(pc_isGM(target_sd)) ) //check if both GMs are allowed to trade
 	{
 		clif_displaymessage(sd->fd, msg_txt(246));
-		trade_tradecancel(sd); // GM is not allowed to trade
+		clif_tradestart(sd, 2); // GM is not allowed to trade
 		return;
 	}