- I'm back, and I begin with an implementation of a good old Aegis bug : Assassins should now be able to use the infamous status arrow + Grimtooth method
- Also added some random stuff about storage password system git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@9723 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
6403d303d3
commit
31c12a3859
@ -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.
|
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
|
||||||
|
|
||||||
2007/01/26
|
2007/01/26
|
||||||
|
* Now assassins can equip arrows, and status arrows trigger on any ranged
|
||||||
|
physical attack: mimics Grimtooth + status arrow "Aegis bug" [DracoRPG]
|
||||||
|
* Added some random Storage Password packets thingies [DracoRPG]
|
||||||
|
-> Those 2 things affect too few code to break anything, or so I hope as
|
||||||
|
I can't try compiling atm :s
|
||||||
* Kaite and Assumptio no longer stack. One will remove the other in the
|
* Kaite and Assumptio no longer stack. One will remove the other in the
|
||||||
same way Assumptio and Kyrie do.
|
same way Assumptio and Kyrie do.
|
||||||
* Made homunculus renaming go through the char-server so it can be
|
* Made homunculus renaming go through the char-server so it can be
|
||||||
|
@ -769,29 +769,29 @@
|
|||||||
1726,Hunter_Bow_,Hunter Bow,4,64000,,1500,125,,5,1,0x00000800,7,2,34,3,33,1,11,{},{},{}
|
1726,Hunter_Bow_,Hunter Bow,4,64000,,1500,125,,5,1,0x00000800,7,2,34,3,33,1,11,{},{},{}
|
||||||
1727,Balistar_,Ballista,4,124000,,3500,145,,5,1,0x00080800,7,2,34,4,77,1,11,{},{},{}
|
1727,Balistar_,Ballista,4,124000,,3500,145,,5,1,0x00080800,7,2,34,4,77,1,11,{},{},{}
|
||||||
// Arrows
|
// Arrows
|
||||||
1750,Arrow,Arrow,10,1,,1,25,,,,0x000A0848,7,2,32768,,1,,1,{},{},{}
|
1750,Arrow,Arrow,10,1,,1,25,,,,0x000A1848,7,2,32768,,1,,1,{},{},{}
|
||||||
1751,Silver_Arrow,Silver Arrow,10,3,,2,30,,,,0x000A0848,7,2,32768,,1,,1,{ bonus bAtkEle,Ele_Holy; },{},{}
|
1751,Silver_Arrow,Silver Arrow,10,3,,2,30,,,,0x000A1848,7,2,32768,,1,,1,{ bonus bAtkEle,Ele_Holy; },{},{}
|
||||||
1752,Fire_Arrow,Fire Arrow,10,3,,2,30,,,,0x000A0848,7,2,32768,,1,,1,{ bonus bAtkEle,Ele_Fire; },{},{}
|
1752,Fire_Arrow,Fire Arrow,10,3,,2,30,,,,0x000A1848,7,2,32768,,1,,1,{ bonus bAtkEle,Ele_Fire; },{},{}
|
||||||
1753,Steel_Arrow,Steel Arrow,10,4,,2,40,,,,0x000A0848,7,2,32768,,1,,1,{},{},{}
|
1753,Steel_Arrow,Steel Arrow,10,4,,2,40,,,,0x000A1848,7,2,32768,,1,,1,{},{},{}
|
||||||
1754,Crystal_Arrow,Crystal Arrow,10,3,,2,30,,,,0x000A0848,7,2,32768,,1,,1,{ bonus bAtkEle,Ele_Water; },{},{}
|
1754,Crystal_Arrow,Crystal Arrow,10,3,,2,30,,,,0x000A1848,7,2,32768,,1,,1,{ bonus bAtkEle,Ele_Water; },{},{}
|
||||||
1755,Arrow_Of_Wind,Arrow of Wind,10,3,,2,30,,,,0x000A0848,7,2,32768,,1,,1,{ bonus bAtkEle,Ele_Wind; },{},{}
|
1755,Arrow_Of_Wind,Arrow of Wind,10,3,,2,30,,,,0x000A1848,7,2,32768,,1,,1,{ bonus bAtkEle,Ele_Wind; },{},{}
|
||||||
1756,Stone_Arrow,Stone Arrow,10,3,,2,30,,,,0x000A0848,7,2,32768,,1,,1,{ bonus bAtkEle,Ele_Earth; },{},{}
|
1756,Stone_Arrow,Stone Arrow,10,3,,2,30,,,,0x000A1848,7,2,32768,,1,,1,{ bonus bAtkEle,Ele_Earth; },{},{}
|
||||||
1757,Immatrial_Arrow,Immaterial Arrow,10,3,,1,30,,,,0x000A0848,7,2,32768,,1,,1,{ bonus bAtkEle,Ele_Ghost; },{},{}
|
1757,Immatrial_Arrow,Immaterial Arrow,10,3,,1,30,,,,0x000A1848,7,2,32768,,1,,1,{ bonus bAtkEle,Ele_Ghost; },{},{}
|
||||||
1758,Stun_Arrow,Stun Arrow,10,10,,3,1,,,,0x000A0848,7,2,32768,,1,,1,{ bonus2 bAddEff,Eff_Stun,1000; },{},{}
|
1758,Stun_Arrow,Stun Arrow,10,10,,3,1,,,,0x000A1848,7,2,32768,,1,,1,{ bonus2 bAddEff,Eff_Stun,1000; },{},{}
|
||||||
1759,Freezing_Arrow,Frozen Arrow,10,10,,3,1,,,,0x000A0848,7,2,32768,,1,,1,{ bonus bAtkEle,Ele_Water; bonus2 bAddEff,Eff_Freeze,1000; },{},{}
|
1759,Freezing_Arrow,Frozen Arrow,10,10,,3,1,,,,0x000A1848,7,2,32768,,1,,1,{ bonus bAtkEle,Ele_Water; bonus2 bAddEff,Eff_Freeze,1000; },{},{}
|
||||||
1760,Flash_Arrow,Flash Arrow,10,10,,3,1,,,,0x000A0848,7,2,32768,,1,,1,{ bonus2 bAddEff,Eff_Blind,1000; },{},{}
|
1760,Flash_Arrow,Flash Arrow,10,10,,3,1,,,,0x000A1848,7,2,32768,,1,,1,{ bonus2 bAddEff,Eff_Blind,1000; },{},{}
|
||||||
1761,Curse_Arrow,Cursed Arrow,10,10,,3,1,,,,0x000A0848,7,2,32768,,1,,1,{ bonus2 bAddEff,Eff_Curse,1000; },{},{}
|
1761,Curse_Arrow,Cursed Arrow,10,10,,3,1,,,,0x000A1848,7,2,32768,,1,,1,{ bonus2 bAddEff,Eff_Curse,1000; },{},{}
|
||||||
1762,Rusty_Arrow,Rusty Arrow,10,3,,2,30,,,,0x000A0848,7,2,32768,,1,,1,{ bonus bAtkEle,Ele_Poison; },{},{}
|
1762,Rusty_Arrow,Rusty Arrow,10,3,,2,30,,,,0x000A1848,7,2,32768,,1,,1,{ bonus bAtkEle,Ele_Poison; },{},{}
|
||||||
1763,Poison_Arrow,Poison Arrow,10,10,,3,1,,,,0x000A0848,7,2,32768,,1,,1,{ bonus bAtkEle,Ele_Poison; bonus2 bAddEff,Eff_Poison,2000; },{},{}
|
1763,Poison_Arrow,Poison Arrow,10,10,,3,1,,,,0x000A1848,7,2,32768,,1,,1,{ bonus bAtkEle,Ele_Poison; bonus2 bAddEff,Eff_Poison,2000; },{},{}
|
||||||
1764,Incisive_Arrow,Sharp Arrow,10,20,,3,10,,,,0x000A0848,7,2,32768,,1,,1,{ bonus bCritical,10; },{},{}
|
1764,Incisive_Arrow,Sharp Arrow,10,20,,3,10,,,,0x000A1848,7,2,32768,,1,,1,{ bonus bCritical,10; },{},{}
|
||||||
1765,Oridecon_Arrow,Oridecon Arrow,10,30,,3,50,,,,0x000A0848,7,2,32768,,1,,1,{},{},{}
|
1765,Oridecon_Arrow,Oridecon Arrow,10,30,,3,50,,,,0x000A1848,7,2,32768,,1,,1,{},{},{}
|
||||||
1766,Arrow_Of_Counter_Evil,Arrow of Counter Evil,10,40,,3,50,,,,0x000A0848,7,2,32768,,1,,1,{ bonus bAtkEle,Ele_Holy; },{},{}
|
1766,Arrow_Of_Counter_Evil,Arrow of Counter Evil,10,40,,3,50,,,,0x000A1848,7,2,32768,,1,,1,{ bonus bAtkEle,Ele_Holy; },{},{}
|
||||||
1767,Arrow_Of_Shadow,Shadow Arrow,10,3,,2,30,,,,0x000A0848,7,2,32768,,1,,1,{ bonus bAtkEle,Ele_Dark; },{},{}
|
1767,Arrow_Of_Shadow,Shadow Arrow,10,3,,2,30,,,,0x000A1848,7,2,32768,,1,,1,{ bonus bAtkEle,Ele_Dark; },{},{}
|
||||||
1768,Sleep_Arrow,Sleep Arrow,10,10,,3,1,,,,0x000A0848,7,2,32768,,1,,1,{ bonus2 bAddEff,Eff_Sleep,2000; },{},{}
|
1768,Sleep_Arrow,Sleep Arrow,10,10,,3,1,,,,0x000A1848,7,2,32768,,1,,1,{ bonus2 bAddEff,Eff_Sleep,2000; },{},{}
|
||||||
1769,Silence_Arrow,Mute Arrow,10,10,,3,1,,,,0x000A0848,7,2,32768,,1,,1,{ bonus2 bAddEff,Eff_Silence,1000; },{},{}
|
1769,Silence_Arrow,Mute Arrow,10,10,,3,1,,,,0x000A1848,7,2,32768,,1,,1,{ bonus2 bAddEff,Eff_Silence,1000; },{},{}
|
||||||
1770,Iron_Arrow,Iron Arrow,10,2,,1,30,,,,0x000A0848,7,2,32768,,1,,1,{},{},{}
|
1770,Iron_Arrow,Iron Arrow,10,2,,1,30,,,,0x000A1848,7,2,32768,,1,,1,{},{},{}
|
||||||
1771,Venom_Knife,Venom Knife,10,50,,5,30,,,,0x00001000,7,2,32768,,1,,2,{},{},{}
|
1771,Venom_Knife,Venom Knife,10,50,,5,30,,,,0x00001000,7,2,32768,,1,,2,{},{},{}
|
||||||
1772,Holy_Arrow,Holy Arrow,10,3,,2,50,,,,0x000A0848,7,2,32768,,1,,1,{ bonus bAtkEle,Ele_Holy; bonus2 bAddRace,RC_Demon,5; },{},{}
|
1772,Holy_Arrow,Holy Arrow,10,3,,2,50,,,,0x000A1848,7,2,32768,,1,,1,{ bonus bAtkEle,Ele_Holy; bonus2 bAddRace,RC_Demon,5; },{},{}
|
||||||
// Knuckles
|
// Knuckles
|
||||||
1801,Waghnakh,Waghnak,4,8000,,400,30,,1,3,0x00008100,7,2,2,1,1,1,12,{},{},{}
|
1801,Waghnakh,Waghnak,4,8000,,400,30,,1,3,0x00008100,7,2,2,1,1,1,12,{},{},{}
|
||||||
1802,Waghnakh_,Waghnak,4,8000,,400,30,,1,4,0x00008100,7,2,2,1,1,1,12,{},{},{}
|
1802,Waghnakh_,Waghnak,4,8000,,400,30,,1,4,0x00008100,7,2,2,1,1,1,12,{},{},{}
|
||||||
|
@ -707,6 +707,8 @@ packet_ver: 18
|
|||||||
0x0193,2,closekafra,0
|
0x0193,2,closekafra,0
|
||||||
0x20e,10
|
0x20e,10
|
||||||
0x237,2,rankingpk,0
|
0x237,2,rankingpk,0
|
||||||
|
0x23a,4
|
||||||
|
0x23b,3,storagepassword,0 // 3 is wrong, size to be determined
|
||||||
0x23d,-1
|
0x23d,-1
|
||||||
0x23e,4
|
0x23e,4
|
||||||
//Start mail system?
|
//Start mail system?
|
||||||
|
146
src/map/clif.c
146
src/map/clif.c
@ -1481,71 +1481,6 @@ void clif_homskillup(struct map_session_data *sd, int skill_num) { //[orn]
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void clif_parse_ChangeHomunculusName(int fd, struct map_session_data *sd) {
|
|
||||||
RFIFOHEAD(fd);
|
|
||||||
merc_hom_change_name(sd,RFIFOP(fd,2));
|
|
||||||
}
|
|
||||||
|
|
||||||
void clif_parse_HomMoveToMaster(int fd, struct map_session_data *sd) { //[orn]
|
|
||||||
|
|
||||||
nullpo_retv(sd);
|
|
||||||
|
|
||||||
if(!merc_is_hom_active(sd->hd))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (!unit_can_move(&sd->hd->bl))
|
|
||||||
return;
|
|
||||||
unit_walktoxy(&sd->hd->bl, sd->bl.x,sd->bl.y-1, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void clif_parse_HomMoveTo(int fd,struct map_session_data *sd) { //[orn]
|
|
||||||
int x,y,cmd;
|
|
||||||
RFIFOHEAD(fd);
|
|
||||||
nullpo_retv(sd);
|
|
||||||
|
|
||||||
if(!merc_is_hom_active(sd->hd))
|
|
||||||
return;
|
|
||||||
|
|
||||||
cmd = RFIFOW(fd,0);
|
|
||||||
x = RFIFOB(fd,packet_db[sd->packet_ver][cmd].pos[0]) * 4 +
|
|
||||||
(RFIFOB(fd,packet_db[sd->packet_ver][cmd].pos[0] + 1) >> 6);
|
|
||||||
y = ((RFIFOB(fd,packet_db[sd->packet_ver][cmd].pos[0]+1) & 0x3f) << 4) +
|
|
||||||
(RFIFOB(fd,packet_db[sd->packet_ver][cmd].pos[0] + 2) >> 4);
|
|
||||||
|
|
||||||
if (!unit_can_move(&sd->hd->bl))
|
|
||||||
return;
|
|
||||||
|
|
||||||
unit_walktoxy(&(sd->hd->bl),x,y,0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void clif_parse_HomAttack(int fd,struct map_session_data *sd) { //[orn]
|
|
||||||
struct block_list *target;
|
|
||||||
RFIFOHEAD(fd);
|
|
||||||
nullpo_retv(sd);
|
|
||||||
|
|
||||||
if(!merc_is_hom_active(sd->hd))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if ((target = map_id2bl(RFIFOL(fd,6))) == NULL || status_isdead(target))
|
|
||||||
return;
|
|
||||||
|
|
||||||
merc_stop_walking(sd->hd, 1);
|
|
||||||
merc_stop_attack(sd->hd);
|
|
||||||
unit_attack(&sd->hd->bl,RFIFOL(fd,6),1) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
void clif_parse_HomMenu(int fd, struct map_session_data *sd) { //[orn]
|
|
||||||
int cmd;
|
|
||||||
|
|
||||||
RFIFOHEAD(fd);
|
|
||||||
cmd = RFIFOW(fd,0);
|
|
||||||
|
|
||||||
if(!merc_is_hom_active(sd->hd))
|
|
||||||
return;
|
|
||||||
|
|
||||||
merc_menu(sd,RFIFOB(fd,packet_db[sd->packet_ver][cmd].pos[0]));
|
|
||||||
}
|
|
||||||
|
|
||||||
int clif_hom_food(struct map_session_data *sd,int foodid,int fail) //[orn]
|
int clif_hom_food(struct map_session_data *sd,int foodid,int fail) //[orn]
|
||||||
{
|
{
|
||||||
int fd=sd->fd;
|
int fd=sd->fd;
|
||||||
@ -10289,6 +10224,15 @@ void clif_parse_CloseKafra(int fd, struct map_session_data *sd) {
|
|||||||
storage_guild_storageclose(sd);
|
storage_guild_storageclose(sd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*==========================================
|
||||||
|
* Kafra storage protection password system
|
||||||
|
*------------------------------------------
|
||||||
|
*/
|
||||||
|
void clif_parse_StoragePassword(int fd, struct map_session_data *sd) {
|
||||||
|
//TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*==========================================
|
/*==========================================
|
||||||
* パーティを作る
|
* パーティを作る
|
||||||
*------------------------------------------
|
*------------------------------------------
|
||||||
@ -11685,6 +11629,77 @@ void clif_parse_AdoptRequest(int fd,struct map_session_data *sd) {
|
|||||||
WFIFOSET(fd, packet_len(0x1f9));
|
WFIFOSET(fd, packet_len(0x1f9));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*==========================================
|
||||||
|
* Homunculus packets
|
||||||
|
*------------------------------------------
|
||||||
|
*/
|
||||||
|
void clif_parse_ChangeHomunculusName(int fd, struct map_session_data *sd) {
|
||||||
|
RFIFOHEAD(fd);
|
||||||
|
merc_hom_change_name(sd,RFIFOP(fd,2));
|
||||||
|
}
|
||||||
|
|
||||||
|
void clif_parse_HomMoveToMaster(int fd, struct map_session_data *sd) { //[orn]
|
||||||
|
|
||||||
|
nullpo_retv(sd);
|
||||||
|
|
||||||
|
if(!merc_is_hom_active(sd->hd))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!unit_can_move(&sd->hd->bl))
|
||||||
|
return;
|
||||||
|
unit_walktoxy(&sd->hd->bl, sd->bl.x,sd->bl.y-1, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void clif_parse_HomMoveTo(int fd,struct map_session_data *sd) { //[orn]
|
||||||
|
int x,y,cmd;
|
||||||
|
RFIFOHEAD(fd);
|
||||||
|
nullpo_retv(sd);
|
||||||
|
|
||||||
|
if(!merc_is_hom_active(sd->hd))
|
||||||
|
return;
|
||||||
|
|
||||||
|
cmd = RFIFOW(fd,0);
|
||||||
|
x = RFIFOB(fd,packet_db[sd->packet_ver][cmd].pos[0]) * 4 +
|
||||||
|
(RFIFOB(fd,packet_db[sd->packet_ver][cmd].pos[0] + 1) >> 6);
|
||||||
|
y = ((RFIFOB(fd,packet_db[sd->packet_ver][cmd].pos[0]+1) & 0x3f) << 4) +
|
||||||
|
(RFIFOB(fd,packet_db[sd->packet_ver][cmd].pos[0] + 2) >> 4);
|
||||||
|
|
||||||
|
if (!unit_can_move(&sd->hd->bl))
|
||||||
|
return;
|
||||||
|
|
||||||
|
unit_walktoxy(&(sd->hd->bl),x,y,0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void clif_parse_HomAttack(int fd,struct map_session_data *sd) { //[orn]
|
||||||
|
struct block_list *target;
|
||||||
|
RFIFOHEAD(fd);
|
||||||
|
nullpo_retv(sd);
|
||||||
|
|
||||||
|
if(!merc_is_hom_active(sd->hd))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if ((target = map_id2bl(RFIFOL(fd,6))) == NULL || status_isdead(target))
|
||||||
|
return;
|
||||||
|
|
||||||
|
merc_stop_walking(sd->hd, 1);
|
||||||
|
merc_stop_attack(sd->hd);
|
||||||
|
unit_attack(&sd->hd->bl,RFIFOL(fd,6),1) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
void clif_parse_HomMenu(int fd, struct map_session_data *sd) { //[orn]
|
||||||
|
int cmd;
|
||||||
|
|
||||||
|
RFIFOHEAD(fd);
|
||||||
|
cmd = RFIFOW(fd,0);
|
||||||
|
|
||||||
|
if(!merc_is_hom_active(sd->hd))
|
||||||
|
return;
|
||||||
|
|
||||||
|
merc_menu(sd,RFIFOB(fd,packet_db[sd->packet_ver][cmd].pos[0]));
|
||||||
|
}
|
||||||
|
|
||||||
/*==========================================
|
/*==========================================
|
||||||
* パケットデバッグ
|
* パケットデバッグ
|
||||||
*------------------------------------------
|
*------------------------------------------
|
||||||
@ -12133,6 +12148,7 @@ static int packetdb_readdb(void)
|
|||||||
{clif_parse_HomMoveTo,"hommoveto"},
|
{clif_parse_HomMoveTo,"hommoveto"},
|
||||||
{clif_parse_HomAttack,"homattack"},
|
{clif_parse_HomAttack,"homattack"},
|
||||||
{clif_parse_HomMenu,"hommenu"},
|
{clif_parse_HomMenu,"hommenu"},
|
||||||
|
{clif_parse_StoragePassword,"storagepassword"},
|
||||||
{NULL,NULL}
|
{NULL,NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1369,8 +1369,7 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int
|
|||||||
for(i=0; i < MAX_PC_BONUS && sd->addeff[i].flag; i++)
|
for(i=0; i < MAX_PC_BONUS && sd->addeff[i].flag; i++)
|
||||||
{
|
{
|
||||||
rate = sd->addeff[i].rate;
|
rate = sd->addeff[i].rate;
|
||||||
type = sd->state.arrow_atk; //Ranged?
|
if (attack_type&BF_RANGED) // Any ranged physical attack takes status arrows into account (Grimtooth...) [DracoRPG]
|
||||||
if (type)
|
|
||||||
rate += sd->addeff[i].arrow_rate;
|
rate += sd->addeff[i].arrow_rate;
|
||||||
if (!rate) continue;
|
if (!rate) continue;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user