- 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
This commit is contained in:
parent
605f912e22
commit
9c8f2cbb52
@ -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.
|
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
|
||||||
|
|
||||||
2007/04/25
|
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]
|
* Added missing Rachel quest map [Playtester]
|
||||||
* Ganbantein now deletes individual skill cells instead of the whole skill
|
* Ganbantein now deletes individual skill cells instead of the whole skill
|
||||||
in the area it is casted.
|
in the area it is casted.
|
||||||
|
@ -323,6 +323,9 @@
|
|||||||
//-- NPC_SLEEPATTACK
|
//-- NPC_SLEEPATTACK
|
||||||
182,0,0,0,0,8000:10000:12000:14000:16000:18000:20000:22000:24000:26000
|
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
|
//-- NPC_KEEPING
|
||||||
201,0,0,0,60000:70000:80000:90000:100000:110000:120000:130000:140000:150000,0
|
201,0,0,0,60000:70000:80000:90000:100000:110000:120000:130000:140000:150000,0
|
||||||
|
|
||||||
|
@ -2899,8 +2899,12 @@ int battle_weapon_attack(struct block_list* src, struct block_list* target, unsi
|
|||||||
if (rand()%100 < triple_rate)
|
if (rand()%100 < triple_rate)
|
||||||
return skill_attack(BF_WEAPON,src,src,target,MO_TRIPLEATTACK,damage,tick,0);
|
return skill_attack(BF_WEAPON,src,src,target,MO_TRIPLEATTACK,damage,tick,0);
|
||||||
}
|
}
|
||||||
else if (sc && sc->data[SC_SACRIFICE].timer != -1)
|
else if (sc) {
|
||||||
return skill_attack(BF_WEAPON,src,src,target,PA_SACRIFICE,sc->data[SC_SACRIFICE].val1,tick,0);
|
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);
|
wd = battle_calc_weapon_attack(src, target, 0, 0, flag);
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ struct Clif_Config {
|
|||||||
struct packet_db packet_db[MAX_PACKET_VER + 1][MAX_PACKET_DB + 1];
|
struct packet_db packet_db[MAX_PACKET_VER + 1][MAX_PACKET_DB + 1];
|
||||||
|
|
||||||
//Converts item type in case of pet eggs.
|
//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) \
|
#define WBUFPOS(p,pos,x,y,dir) \
|
||||||
do { \
|
do { \
|
||||||
|
@ -3133,7 +3133,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
|
|||||||
case AL_HOLYLIGHT:
|
case AL_HOLYLIGHT:
|
||||||
case WZ_JUPITEL:
|
case WZ_JUPITEL:
|
||||||
case NPC_DARKTHUNDER:
|
case NPC_DARKTHUNDER:
|
||||||
case NPC_MAGICALATTACK:
|
|
||||||
case PR_ASPERSIO:
|
case PR_ASPERSIO:
|
||||||
case MG_FROSTDIVER:
|
case MG_FROSTDIVER:
|
||||||
case WZ_SIGHTBLASTER:
|
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);
|
skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag);
|
||||||
break;
|
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]
|
case HVAN_CAPRICE: //[blackhole89]
|
||||||
{
|
{
|
||||||
int ran=rand()%4;
|
int ran=rand()%4;
|
||||||
|
@ -212,6 +212,7 @@ void initChangeTables(void) {
|
|||||||
add_sc(NPC_PETRIFYATTACK, SC_STONE);
|
add_sc(NPC_PETRIFYATTACK, SC_STONE);
|
||||||
add_sc(NPC_CURSEATTACK, SC_CURSE);
|
add_sc(NPC_CURSEATTACK, SC_CURSE);
|
||||||
add_sc(NPC_SLEEPATTACK, SC_SLEEP);
|
add_sc(NPC_SLEEPATTACK, SC_SLEEP);
|
||||||
|
add_sc(NPC_MAGICALATTACK, SC_MAGICALATTACK);
|
||||||
set_sc(NPC_KEEPING, SC_KEEPING, SI_BLANK, SCB_DEF);
|
set_sc(NPC_KEEPING, SC_KEEPING, SI_BLANK, SCB_DEF);
|
||||||
add_sc(NPC_DARKBLESSING, SC_COMA);
|
add_sc(NPC_DARKBLESSING, SC_COMA);
|
||||||
set_sc(NPC_BARRIER, SC_BARRIER, SI_BLANK, SCB_MDEF|SCB_DEF);
|
set_sc(NPC_BARRIER, SC_BARRIER, SI_BLANK, SCB_MDEF|SCB_DEF);
|
||||||
|
@ -259,6 +259,7 @@ enum {
|
|||||||
SC_INCDEXRATE,
|
SC_INCDEXRATE,
|
||||||
SC_JAILED,
|
SC_JAILED,
|
||||||
SC_ENCHANTARMS,
|
SC_ENCHANTARMS,
|
||||||
|
SC_MAGICALATTACK,
|
||||||
SC_MAX, //Automatically updated max, used in for's and at startup to check we are within bounds. [Skotlex]
|
SC_MAX, //Automatically updated max, used in for's and at startup to check we are within bounds. [Skotlex]
|
||||||
};
|
};
|
||||||
int SkillStatusChangeTable(int skill);
|
int SkillStatusChangeTable(int skill);
|
||||||
|
@ -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)) {
|
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;
|
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
|
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));
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user