diff options
author | DracoRPG <DracoRPG@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2007-01-27 03:12:38 +0000 |
---|---|---|
committer | DracoRPG <DracoRPG@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2007-01-27 03:12:38 +0000 |
commit | d47798d24da91a2f14ef95f3a8d5cd7cef1a2978 (patch) | |
tree | f64e79957a69f5c6da7db06bd10425240115bb55 | |
parent | 1d699d1f9ba6facaba5f6e817d9b6b2730d6872e (diff) | |
download | hercules-d47798d24da91a2f14ef95f3a8d5cd7cef1a2978.tar.gz hercules-d47798d24da91a2f14ef95f3a8d5cd7cef1a2978.tar.bz2 hercules-d47798d24da91a2f14ef95f3a8d5cd7cef1a2978.tar.xz hercules-d47798d24da91a2f14ef95f3a8d5cd7cef1a2978.zip |
- 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://rathena.svn.sourceforge.net/svnroot/rathena/trunk@9723 54d463be-8e91-2dee-dedb-b68131a5f0ec
-rw-r--r-- | Changelog-Trunk.txt | 5 | ||||
-rw-r--r-- | db/item_db.txt | 44 | ||||
-rw-r--r-- | db/packet_db.txt | 2 | ||||
-rw-r--r-- | src/map/clif.c | 146 | ||||
-rw-r--r-- | src/map/skill.c | 3 |
5 files changed, 111 insertions, 89 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 0215c7f8d..ae7b4ce13 100644 --- a/Changelog-Trunk.txt +++ b/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. 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 same way Assumptio and Kyrie do. * Made homunculus renaming go through the char-server so it can be diff --git a/db/item_db.txt b/db/item_db.txt index 9d307ff06..5c5c510b4 100644 --- a/db/item_db.txt +++ b/db/item_db.txt @@ -769,29 +769,29 @@ 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,{},{},{} // Arrows -1750,Arrow,Arrow,10,1,,1,25,,,,0x000A0848,7,2,32768,,1,,1,{},{},{} -1751,Silver_Arrow,Silver Arrow,10,3,,2,30,,,,0x000A0848,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; },{},{} -1753,Steel_Arrow,Steel Arrow,10,4,,2,40,,,,0x000A0848,7,2,32768,,1,,1,{},{},{} -1754,Crystal_Arrow,Crystal Arrow,10,3,,2,30,,,,0x000A0848,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; },{},{} -1756,Stone_Arrow,Stone Arrow,10,3,,2,30,,,,0x000A0848,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; },{},{} -1758,Stun_Arrow,Stun Arrow,10,10,,3,1,,,,0x000A0848,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; },{},{} -1760,Flash_Arrow,Flash Arrow,10,10,,3,1,,,,0x000A0848,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; },{},{} -1762,Rusty_Arrow,Rusty Arrow,10,3,,2,30,,,,0x000A0848,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; },{},{} -1764,Incisive_Arrow,Sharp Arrow,10,20,,3,10,,,,0x000A0848,7,2,32768,,1,,1,{ bonus bCritical,10; },{},{} -1765,Oridecon_Arrow,Oridecon Arrow,10,30,,3,50,,,,0x000A0848,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; },{},{} -1767,Arrow_Of_Shadow,Shadow Arrow,10,3,,2,30,,,,0x000A0848,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; },{},{} -1769,Silence_Arrow,Mute Arrow,10,10,,3,1,,,,0x000A0848,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,{},{},{} +1750,Arrow,Arrow,10,1,,1,25,,,,0x000A1848,7,2,32768,,1,,1,{},{},{} +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,,,,0x000A1848,7,2,32768,,1,,1,{ bonus bAtkEle,Ele_Fire; },{},{} +1753,Steel_Arrow,Steel Arrow,10,4,,2,40,,,,0x000A1848,7,2,32768,,1,,1,{},{},{} +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,,,,0x000A1848,7,2,32768,,1,,1,{ bonus bAtkEle,Ele_Wind; },{},{} +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,,,,0x000A1848,7,2,32768,,1,,1,{ bonus bAtkEle,Ele_Ghost; },{},{} +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,,,,0x000A1848,7,2,32768,,1,,1,{ bonus bAtkEle,Ele_Water; bonus2 bAddEff,Eff_Freeze,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,,,,0x000A1848,7,2,32768,,1,,1,{ bonus2 bAddEff,Eff_Curse,1000; },{},{} +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,,,,0x000A1848,7,2,32768,,1,,1,{ bonus bAtkEle,Ele_Poison; bonus2 bAddEff,Eff_Poison,2000; },{},{} +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,,,,0x000A1848,7,2,32768,,1,,1,{},{},{} +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,,,,0x000A1848,7,2,32768,,1,,1,{ bonus bAtkEle,Ele_Dark; },{},{} +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,,,,0x000A1848,7,2,32768,,1,,1,{ bonus2 bAddEff,Eff_Silence,1000; },{},{} +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,{},{},{} -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 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,{},{},{} diff --git a/db/packet_db.txt b/db/packet_db.txt index 45684f9b6..5a6c9a4cb 100644 --- a/db/packet_db.txt +++ b/db/packet_db.txt @@ -707,6 +707,8 @@ packet_ver: 18 0x0193,2,closekafra,0 0x20e,10 0x237,2,rankingpk,0 +0x23a,4 +0x23b,3,storagepassword,0 // 3 is wrong, size to be determined 0x23d,-1 0x23e,4 //Start mail system? diff --git a/src/map/clif.c b/src/map/clif.c index 4ca568318..fe0c5a1f6 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -1481,71 +1481,6 @@ void clif_homskillup(struct map_session_data *sd, int skill_num) { //[orn] 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 fd=sd->fd; @@ -10290,6 +10225,15 @@ void clif_parse_CloseKafra(int fd, struct map_session_data *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)); } } + + +/*========================================== + * 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_HomAttack,"homattack"}, {clif_parse_HomMenu,"hommenu"}, + {clif_parse_StoragePassword,"storagepassword"}, {NULL,NULL} }; diff --git a/src/map/skill.c b/src/map/skill.c index c144b4c5d..f3e2f24d8 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -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++) { rate = sd->addeff[i].rate; - type = sd->state.arrow_atk; //Ranged? - if (type) + if (attack_type&BF_RANGED) // Any ranged physical attack takes status arrows into account (Grimtooth...) [DracoRPG] rate += sd->addeff[i].arrow_rate; if (!rate) continue; |