Skip to content

Commit 17eccf2

Browse files
committed
== 2014-10-22 ragexe finally stable! ==
=General: *Merged missing changes from 3ceam rev. 489 *Some more updating and fixing on 2014-10-22 ragexe and some others -I guess we can now say the 2014-10-22 ragexe should be stable and ready for public use... FINALLY! ^_^ -updated mmo_char_tobuf to send all data for this client correctly to buffer. (Some of this data are placeholders for now and might be used later as I add these features in.) -Fix sending 0x908 packet. -Fixed Vending system. *Fix memory leak after closing mysql connection. Thanks to @4144 / @HerculesWS *Added some messages I needed for debugging. =Database: *Fixed wired bug in elemental_db. *Added some more missing items. =Skills: *Updated some Rune Knight skills: -RK_DRAGONBREATH: Adjusted casting time. The effect of Dragon Training applies in the final damage. Ignores target's def cards. -RK_MILLENNIUMSHIELD: Have a chance to cause stun when one shied is broken. -RK_STONEHARDSKIN: Breaking target's weapon rate is 25% and does not depends on RK_RUNEMASTERY. -RK_GIANTGROWTH: Triple damage rate is 10%. Breaking self weapon rate is 1%. -RK_FIGHTINGSPIRIT: Aspd rate is 40 * Rune Mastery level. -RK_CRUSHSTRIKE: If you use this rune without any weapon equipped, the skill fails and the rune is consumed. -RK_REFRESH: Updated the list of status that this can block. Can't remove divests. -RK_FIGHTINGSPIRIT: If two or more Rune Knights in the same party uses it, only the last one gets 7 * party members bonus. -RK_ABUNDANCE: Doesn't recovery SP if you have Frenzy activated.
1 parent 8239b70 commit 17eccf2

File tree

14 files changed

+191
-111
lines changed

14 files changed

+191
-111
lines changed

Changelog-15-3athena.txt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,29 @@
44
// * Modifications.
55
// - Details.
66
//========================================
7+
05/22/2016
8+
r126 [15peaces]
9+
*Merged missing changes from 3ceam rev. 489
10+
*Some more updating and fixing on 2014-10-22 ragexe and some others
11+
-I guess we can now say the 2014-10-22 ragexe should be stable and ready for public use... FINALLY! ^_^
12+
-updated mmo_char_tobuf to send all data for this client correctly to buffer. (Some of this data are placeholders for now and might be used later as I add these features in.)
13+
-Fix sending 0x908 packet.
14+
-Fixed Vending system.
15+
*Fix memory leak after closing mysql connection. Thanks to @4144 / @HerculesWS
16+
*Added some messages I needed for debugging.
17+
*Fixed wired bug in elemental_db.
18+
*Added some more missing items.
19+
*Updated some Rune Knight skills:
20+
-RK_DRAGONBREATH: Adjusted casting time. The effect of Dragon Training applies in the final damage. Ignores target's def cards.
21+
-RK_MILLENNIUMSHIELD: Have a chance to cause stun when one shied is broken.
22+
-RK_STONEHARDSKIN: Breaking target's weapon rate is 25% and does not depends on RK_RUNEMASTERY.
23+
-RK_GIANTGROWTH: Triple damage rate is 10%. Breaking self weapon rate is 1%.
24+
-RK_FIGHTINGSPIRIT: Aspd rate is 40 * Rune Mastery level.
25+
-RK_CRUSHSTRIKE: If you use this rune without any weapon equipped, the skill fails and the rune is consumed.
26+
-RK_REFRESH: Updated the list of status that this can block. Can't remove divests.
27+
-RK_FIGHTINGSPIRIT: If two or more Rune Knights in the same party uses it, only the last one gets 7 * party members bonus.
28+
-RK_ABUNDANCE: Doesn't recovery SP if you have Frenzy activated.
29+
730
05/19/2016
831
r125 [15peaces]
932
*Added Renewal Ninja shops.

db/elemental_db.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
//
33
// Structure of Database:
44
//ID,Sprite_Name,Name,LV,HP,SP,Range1,ATK1,ATK2,DEF,MDEF,STR,AGI,VIT,INT,DEX,LUK,Range2,Range3,Scale,Race,Element,Speed,aDelay,aMotion,dMotion
5-
65
2114,EL_AGNI_S,Agni,100,4341,422,10,400,600,7,5,1,16,5,1,28,8,10,0,0,7,63,150,900,432,300
76
2115,EL_AGNI_M,Agni,100,4610,422,10,500,700,11,7,1,18,8,1,40,11,10,1,0,7,63,150,900,432,300
87
2116,EL_AGNI_L,Agni,100,4880,422,10,600,700,15,9,3,21,12,4,52,17,10,2,0,7,63,150,900,432,300

db/item_db2.txt

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1178,7 +1178,7 @@
11781178
2476,Peuz_Greave,Peuz's Greaves,5,20,,900,,32,,1,0x00000080,56,2,64,,100,1,0,{ bonus bMaxSP,40; set .@r, getrefine(); bonus bAgi,(.@r<=7?.@r-7:1); },{},{}
11791179
2477,Sabah_Shoes,Sapha Shoes,5,20,,400,,18,,1,0x00001000,63,2,64,,100,1,0,{ bonus bMaxSP,30; bonus bLuk,3; },{},{}
11801180
2478,Nab_Shoes,Nab Shoes,5,20,,400,,18,,1,0x00001000,63,2,64,,100,1,0,{ bonus bFlee,3; bonus bInt,2; },{},{}
1181-
2479,White_Wing_Boots,White Wing Boots,5,20,,400,,18,,1,0x00000800,63,2,64,,100,1,0,{ bonus bAgi,2; bonus2 bSkillUseSP,"RA_AIMEDBOLT",10; if(isequipped(2580) && isequipped(2890) && isequipped(15042)) { bonus bAspd,2; bonus2 bSkillAtk,"RA_ARROWSTORM",50; bonus bLongAtkRate,30; bonus3 bAutoSpell,"AC_DOUBLE",max(getskilllv("AC_DOUBLE"),3),20; } },{},{}
1181+
2479,White_Wing_Boots,White Wing Boots,5,20,,400,,18,,1,0x00000800,63,2,64,,100,1,0,{ bonus bAgi,2; bonus2 bSkillUseSP,"RA_AIMEDBOLT",10; if(isequipped(2580,2890,15042)) { bonus bAspd,2; bonus2 bSkillAtk,"RA_ARROWSTORM",50; bonus bLongAtkRate,30; bonus3 bAutoSpell,"AC_DOUBLE",max(getskilllv("AC_DOUBLE"),3),20; }; },{},{}
11821182
2480,Black_Wing_Boots,Black Wing Boots,5,20,,400,,18,,1,0x00000800,56,2,64,,100,1,0,{ bonus bInt,2; bonus bMaxSPrate,5; },{},{}
11831183
2568,Muffler_Of_Roki,Loki's Muffler,5,20,,400,,10,,0,0xFFFFFFFF,63,2,4,,100,0,0,{ bonus bAgi,1; bonus2 bSkillAtk,"ASC_BREAKER",5; bonus2 bSkillAtk,"GC_CROSSIMPACT",5; },{},{}
11841184
2569,Shawl_Of_Affection,Shawl Of Affection,5,20,,400,,12,,0,0x00000100,63,2,4,,100,1,0,{ bonus bFlee2,5; bonus5 bAutoSpellWhenHit,"AB_RENOVATIO",1,30,BF_WEAPON,0; bonus5 bAutoSpellWhenHit,"AB_RENOVATIO",1,40,BF_MAGIC,0; },{},{}
@@ -2123,6 +2123,13 @@
21232123
12587,Summer_Night_box,A Summer Night's Box,18,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 12246,1; },{},{}
21242124
12588,Summer_Night_box2,A Summer Night's Box2,18,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 12103,1; },{},{}
21252125
12589,Summer_Night_box3,A Summer Night's Box3,18,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 12106,1; },{},{}
2126+
12601,Fresh_Watermelon_Juice,Fresh Watermelon Juice,0,20,,100,,,,,0xFFFFFFFF,63,2,,,,,,{ percentheal 5,5; },{},{}
2127+
12602,Special_Box1,Special Box I,11,100,,100,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
2128+
12603,Special_Box2,Special Box II,11,100,,100,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
2129+
12604,Special_Box3,Special Box III,11,100,,100,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
2130+
12605,Special_Box4,Special Box IV,11,100,,100,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
2131+
12606,Special_Box5,Special Box V,11,100,,100,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
2132+
12607,Lolli_Pop_Box,Delicious Lollipop Box,11,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
21262133
12608,Splendid_Box2,Splendid Box2,11,20,,100,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
21272134
12613,High_Coin_Pocket,Improved Coin Bag,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ getitempackage(IG_High_Coin_Pocket); },{},{}
21282135
12675,Sg_Weapon_Supply_Box,WoE Weapon Supply Box,2,20,,500,,,,,0xFFFFFFFF,63,2,,,,,,{ getitempackage(IG_Sg_Weapon_Supply_Box); },{},{}
@@ -2154,6 +2161,8 @@
21542161
12782,100T_Zeny_Check,100T Zeny Check,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
21552162
12783,10000_Zeny_Check,10000 Zeny Check,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
21562163
12784,1000_Zeny_Check,1000 Zeny Check,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
2164+
13294,Explosive_Kunai,Explosive Kunai,10,100,,30,50,,,,0x02000000,63,2,32768,,100,,7,{ bonus bAtkEle,Ele_Neutral; },{},{}
2165+
13295,Light_Shuriken,Light Shuriken,10,0,,5,5,,,,0xFFFFFFFF,63,2,32768,,,,0,{},{},{}
21572166
21001,Velum_Claymore,Vellum Claymore,4,20,,3500,260,,1,0,0x00004082,63,2,34,4,95,1,3,{ bonus2 bAddRace,RC_Player,80; bonus2 bIgnoreDefRaceRate,RC_Player,30; set .@r, getrefine(); if(.@r>=6) { bonus2 bAddRace,RC_Player,40; } if(.@r>=9) { autobonus2 "{ bonus bShortWeaponDamageReturn,20; bonus bMagicDamageReturn,20; }",6000,2000,BF_WEAPON,"{ specialeffect2 EF_REFLECTSHIELD; }"; } },{},{}
21582167
21002,Velum_Katzbalger,Vellum Katzbalger,4,20,,2500,100,,1,0,0x00004082,63,2,34,4,95,1,3,{ bonus3 bHPVanishRaceRate,RC_Player,10000,8; },{},{}
21592168
21003,Muramasa_,Muramasa,4,20,,1000,155,,1,2,0x00004082,63,2,34,4,48,1,3,{},{},{}

src/char/char.c

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1860,7 +1860,7 @@ int count_users(void)
18601860
// Writes char data to the buffer in the format used by the client.
18611861
// Used in packets 0x6b (chars info) and 0x6d (new char info)
18621862
// Returns the size
1863-
#define MAX_CHAR_BUF 144 //Max size (for WFIFOHEAD calls)
1863+
#define MAX_CHAR_BUF 150 //Max size (for WFIFOHEAD calls)
18641864
int mmo_char_tobuf(uint8* buffer, struct mmo_charstatus* p)
18651865
{
18661866
unsigned short offset = 0;
@@ -1895,7 +1895,16 @@ int mmo_char_tobuf(uint8* buffer, struct mmo_charstatus* p)
18951895
WBUFW(buf,50) = DEFAULT_WALK_SPEED; // p->speed;
18961896
WBUFW(buf,52) = p->class_;
18971897
WBUFW(buf,54) = p->hair;
1898-
WBUFW(buf,56) = p->option&0x7E80020 ? 0 : p->weapon; //When the weapon is sent and your option is riding, the client crashes on login!?
1898+
#if PACKETVER >= 20141022
1899+
WBUFW(buf,56) = p->body; // Body Style, not supported yet [15peaces]
1900+
offset+=2;
1901+
buf = WBUFP(buffer,offset);
1902+
#endif
1903+
1904+
//When the weapon is sent and your option is riding, the client crashes on login!?
1905+
// FIXME[Haru]: is OPTION_HANBOK intended to be part of this list? And if it is, should the list also include other OPTION_ costumes?
1906+
WBUFW(buf,56) = (p->option&(OPTION_RIDING|OPTION_DRAGON|OPTION_WUG|OPTION_WUGRIDER|OPTION_MADOGEAR|OPTION_HANBOK)) ? 0 : p->weapon;
1907+
18991908
WBUFW(buf,58) = p->base_level;
19001909
WBUFW(buf,60) = min(p->skill_point, INT16_MAX);
19011910
WBUFW(buf,62) = p->head_bottom;
@@ -1932,14 +1941,21 @@ int mmo_char_tobuf(uint8* buffer, struct mmo_charstatus* p)
19321941
WBUFL(buf,128) = p->robe;
19331942
offset += 4;
19341943
#endif
1935-
#if PACKETVER >= 20110928
1936-
WBUFL(buf,132) = 0; // change slot feature (0 = disabled, otherwise enabled)
1937-
offset += 4;
1938-
#endif
1939-
#if PACKETVER >= 20111025
1940-
WBUFL(buf,136) = 0; // unknown purpose (0 = disabled, otherwise displays "Add-Ons" sidebar)
1941-
offset += 4;
1944+
#if PACKETVER != 20111116 //2011-11-16 wants 136, ask gravity.
1945+
#if PACKETVER >= 20110928
1946+
WBUFL(buf,132) = ( p->slotchange > 0 ) ? 1 : 0; // change slot feature (0 = disabled, otherwise enabled)
1947+
offset += 4;
1948+
#endif
1949+
#if PACKETVER >= 20111025
1950+
WBUFL(buf,136) = ( p->rename > 0 ) ? 1 : 0; // (0 = disabled, otherwise displays "Add-Ons" sidebar)
1951+
offset += 4;
1952+
#endif
1953+
#if PACKETVER >= 20141016
1954+
WBUFB(buf,140) = p->sex;// sex - (0 = female, 1 = male, 99 = logindefined)
1955+
offset += 1;
1956+
#endif
19421957
#endif
1958+
19431959
return 106+offset;
19441960
}
19451961

src/char_sql/char.c

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1856,14 +1856,17 @@ int mmo_char_tobuf(uint8* buffer, struct mmo_charstatus* p)
18561856
WBUFW(buf,48) = min(p->max_sp, INT16_MAX);
18571857
WBUFW(buf,50) = DEFAULT_WALK_SPEED; // p->speed;
18581858
WBUFW(buf,52) = p->class_;
1859-
#if PACKETVER >= 20141022
1860-
WBUFL(buf,54) = p->hair;
1861-
offset+=2;
1862-
buf = WBUFP(buffer,offset);
1863-
#else
1864-
WBUFW(buf,54) = p->hair;
1865-
#endif
1866-
WBUFW(buf,56) = p->option&0x7E80020 ? 0 : p->weapon; //When the weapon is sent and your option is riding, the client crashes on login!?
1859+
WBUFW(buf,54) = p->hair;
1860+
#if PACKETVER >= 20141022
1861+
WBUFW(buf,56) = p->body;
1862+
offset+=2;
1863+
buf = WBUFP(buffer,offset);
1864+
#endif
1865+
1866+
//When the weapon is sent and your option is riding, the client crashes on login!?
1867+
// FIXME[Haru]: is OPTION_HANBOK intended to be part of this list? And if it is, should the list also include other OPTION_ costumes?
1868+
WBUFW(buf,56) = (p->option&(OPTION_RIDING|OPTION_DRAGON|OPTION_WUG|OPTION_WUGRIDER|OPTION_MADOGEAR|OPTION_HANBOK)) ? 0 : p->weapon;
1869+
18671870
WBUFW(buf,58) = p->base_level;
18681871
WBUFW(buf,60) = min(p->skill_point, INT16_MAX);
18691872
WBUFW(buf,62) = p->head_bottom;
@@ -1900,17 +1903,19 @@ int mmo_char_tobuf(uint8* buffer, struct mmo_charstatus* p)
19001903
WBUFL(buf,128) = p->robe;
19011904
offset += 4;
19021905
#endif
1903-
#if PACKETVER >= 20110928
1904-
WBUFL(buf,132) = 0; // change slot feature (0 = disabled, otherwise enabled)
1905-
offset += 4;
1906-
#endif
1907-
#if PACKETVER >= 20111025
1908-
WBUFL(buf,136) = ( p->rename > 0 ) ? 1 : 0; // (0 = disabled, otherwise displays "Add-Ons" sidebar)
1909-
offset += 4;
1910-
#endif
1911-
#if PACKETVER >= 20141016
1912-
WBUFB(buf,140) = p->sex;// sex - (0 = female, 1 = male, 99 = logindefined)
1913-
offset += 1;
1906+
#if PACKETVER != 20111116 //2011-11-16 wants 136, ask gravity.
1907+
#if PACKETVER >= 20110928
1908+
WBUFL(buf,132) = ( p->slotchange > 0 ) ? 1 : 0; // change slot feature (0 = disabled, otherwise enabled)
1909+
offset += 4;
1910+
#endif
1911+
#if PACKETVER >= 20111025
1912+
WBUFL(buf,136) = ( p->rename > 0 ) ? 1 : 0; // (0 = disabled, otherwise displays "Add-Ons" sidebar)
1913+
offset += 4;
1914+
#endif
1915+
#if PACKETVER >= 20141016
1916+
WBUFB(buf,140) = p->sex;// sex - (0 = female, 1 = male, 99 = logindefined)
1917+
offset += 1;
1918+
#endif
19141919
#endif
19151920
return 106+offset;
19161921
}

src/common/mmo.h

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949

5050
#ifndef PACKETVER
5151
//#define PACKETVER 20131223 //Stable client [15peaces]
52-
#define PACKETVER 20141022 //Experimental / semi-stable [15peaces]
52+
#define PACKETVER 20141022 //Stable client [15peaces]
5353
#endif
5454

5555
// backward compatible PACKETVER 8 and 9
@@ -259,6 +259,44 @@ enum e_skill_flag
259259
//...
260260
};
261261

262+
//OPTION: (EFFECTSTATE_)
263+
enum {
264+
OPTION_NOTHING = 0x00000000,
265+
OPTION_SIGHT = 0x00000001,
266+
OPTION_HIDE = 0x00000002,
267+
OPTION_CLOAK = 0x00000004,
268+
OPTION_CART1 = 0x00000008,
269+
OPTION_FALCON = 0x00000010,
270+
OPTION_RIDING = 0x00000020,
271+
OPTION_INVISIBLE = 0x00000040,
272+
OPTION_CART2 = 0x00000080,
273+
OPTION_CART3 = 0x00000100,
274+
OPTION_CART4 = 0x00000200,
275+
OPTION_CART5 = 0x00000400,
276+
OPTION_ORCISH = 0x00000800,
277+
OPTION_WEDDING = 0x00001000,
278+
OPTION_RUWACH = 0x00002000,
279+
OPTION_CHASEWALK = 0x00004000,
280+
OPTION_FLYING = 0x00008000, //Note that clientside Flying and Xmas are 0x8000 for clients prior to 2007.
281+
OPTION_XMAS = 0x00010000,
282+
OPTION_TRANSFORM = 0x00020000,
283+
OPTION_SUMMER = 0x00040000,
284+
OPTION_DRAGON1 = 0x00080000,
285+
OPTION_WUG = 0x00100000,
286+
OPTION_WUGRIDER = 0x00200000,
287+
OPTION_MADOGEAR = 0x00400000,
288+
OPTION_DRAGON2 = 0x00800000,
289+
OPTION_DRAGON3 = 0x01000000,
290+
OPTION_DRAGON4 = 0x02000000,
291+
OPTION_DRAGON5 = 0x04000000,
292+
OPTION_HANBOK = 0x08000000,
293+
OPTION_OKTOBERFEST = 0x10000000,
294+
// compound constants
295+
OPTION_CART = OPTION_CART1|OPTION_CART2|OPTION_CART3|OPTION_CART4|OPTION_CART5,
296+
OPTION_DRAGON = OPTION_DRAGON1|OPTION_DRAGON2|OPTION_DRAGON3|OPTION_DRAGON4|OPTION_DRAGON5,
297+
OPTION_MASK = ~OPTION_INVISIBLE,
298+
};
299+
262300
struct s_skill {
263301
unsigned short id;
264302
unsigned char lv;
@@ -397,7 +435,7 @@ struct mmo_charstatus {
397435
unsigned int option;
398436
short manner;
399437
unsigned char karma;
400-
short hair,hair_color,clothes_color;
438+
short hair,hair_color,clothes_color,body;
401439
int party_id,guild_id,pet_id,hom_id,mer_id,ele_id;
402440
int fame;
403441

@@ -430,6 +468,7 @@ struct mmo_charstatus {
430468
#endif
431469
bool show_equip;
432470
short rename;
471+
unsigned short slotchange;
433472

434473
time_t delete_date;
435474

src/common/sql.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -451,6 +451,7 @@ void Sql_Free(Sql* self)
451451
Sql_FreeResult(self);
452452
StringBuf_Destroy(&self->buf);
453453
if( self->keepalive != INVALID_TIMER ) delete_timer(self->keepalive, Sql_P_KeepaliveTimer);
454+
mysql_close(&self->handle);
454455
aFree(self);
455456
}
456457
}

src/map/battle.c

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -483,6 +483,7 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,struct Damag
483483
clif_skill_nodamage(bl, bl, RK_MILLENNIUMSHIELD, 1, 1);
484484
sce->val3 -= damage; // absorb damage
485485
d->dmg_lv = ATK_BLOCK;
486+
sc_start(bl,SC_STUN,15,0,skill_get_time2(RK_MILLENNIUMSHIELD,sce->val1)); // There is a chance to be stuned when one shield is broken.
486487
if( sce->val3 <= 0 ) // Shield Down
487488
{
488489
sce->val2--;
@@ -647,7 +648,7 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,struct Damag
647648
if( (sce = sc->data[SC_STONEHARDSKIN]) && flag&BF_WEAPON && damage > 0 )
648649
{
649650
sce->val2 -= damage;
650-
skill_break_equip(src,EQP_WEAPON,(25 + pc_checkskill(sd,RK_RUNEMASTERY))*100,BCT_SELF);
651+
skill_break_equip(src,EQP_WEAPON,2500,BCT_SELF);
651652

652653
if( sce->val2 <= 0 ) status_change_end(bl, SC_STONEHARDSKIN, INVALID_TIMER);
653654
}
@@ -1680,8 +1681,6 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
16801681
wd.damage = (battle_config.skillsbonus_maxhp_RK * 16 / 1000) + (status_get_sp(src) * 192 / 1000);
16811682
else
16821683
wd.damage = (status_get_hp(src) * 16 / 1000) + (status_get_sp(src) * 192 / 1000);
1683-
if( sd )
1684-
wd.damage += wd.damage * (5 * pc_checkskill(sd,RK_DRAGONTRAINING)-1) / 100;
16851684
break;
16861685
case NC_AXEBOOMERANG:
16871686
//TODO: Need to get official value of weight % as addition to skill damage. [Jobbie]
@@ -2449,7 +2448,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
24492448
skillratio += 200;
24502449
break;
24512450
case RK_SONICWAVE: // Sugested formula from irowiki.
2452-
skillratio += 400 + (100 * skill_lv); // Base skillratio.
2451+
skillratio += 400 + 100 * skill_lv; // Base skillratio.
24532452
if( battle_config.max_highlvl_nerf ) // [Pinky]
24542453
{
24552454
if( s_level > 100 && s_level <= battle_config.max_highlvl_nerf)
@@ -2485,16 +2484,16 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
24852484
if( battle_config.max_highlvl_nerf ) // [Pinky]
24862485
{
24872486
if(s_level <= battle_config.max_highlvl_nerf)
2488-
skillratio *= (1 + (s_level-50) / 20); // Bonus by base level.
2487+
skillratio *= 1 + (s_level-50) / 20; // Bonus by base level.
24892488
else
2490-
skillratio *= (1 + (battle_config.max_highlvl_nerf-50) / 20); // Bonus by base level.
2489+
skillratio *= 1 + (battle_config.max_highlvl_nerf-50) / 20; // Bonus by base level.
24912490
} else
24922491
skillratio *= (1 + (s_level-50) / 20); // Bonus by base level.
24932492
break;
24942493
case RK_IGNITIONBREAK: // Sugested formula from irowiki.
24952494
i = distance_bl(src,target) / 2;
2496-
skillratio += ( 100 * skill_lv );
2497-
if( i < 4 ) skillratio += (100 * skill_lv);
2495+
skillratio += 100 * skill_lv;
2496+
if( i < 4 ) skillratio += 100 * skill_lv;
24982497
if( i < 2 ) skillratio += 100;
24992498
if( battle_config.max_highlvl_nerf ) // [Pinky]
25002499
{
@@ -2648,6 +2647,10 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
26482647
sc->data[SC_SPIRIT]->val2 == SL_CRUSADER)
26492648
ATK_ADDRATE(100);
26502649
break;
2650+
case RK_DRAGONBREATH:
2651+
if( sd && (i = pc_checkskill(sd,RK_DRAGONTRAINING)-1) > 0 )
2652+
ATK_ADDRATE(5 * i);
2653+
break;
26512654
case NC_BOOSTKNUCKLE:
26522655
case NC_PILEBUNKER:
26532656
case NC_VULCANARM:
@@ -4419,10 +4422,10 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t
44194422
}
44204423
else
44214424
status_change_end(src,SC_SPELLFIST,-1);
4422-
}
4425+
}
44234426
}
4424-
if( sd && sc && sc->data[SC_GIANTGROWTH] && wd.flag&(BF_WEAPON|BF_SHORT) && rand()%100 < pc_checkskill(sd,RK_RUNEMASTERY) )
4425-
wd.damage *= 3; // Triple Damage - Rate is a suggestion
4427+
if( sd && sc && sc->data[SC_GIANTGROWTH] && wd.flag&(BF_WEAPON|BF_SHORT) && rand()%100 < sc->data[SC_GIANTGROWTH]->val2 )
4428+
wd.damage *= 3; // Triple Damage
44264429

44274430
if (sd && sd->state.arrow_atk) //Consume arrow.
44284431
battle_consume_ammo(sd, 0, 0);

src/map/clif.c

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6871,7 +6871,7 @@ void clif_vendinglist(struct map_session_data* sd, int id, struct s_vending* ven
68716871
WFIFOW(fd,2) = 12+count*22;
68726872
WFIFOL(fd,4) = id;
68736873
#if PACKETVER >= 20100105
6874-
WFIFOL(fd,offset + 4) = vsd->status.char_id; // temporary, could be shop_id??
6874+
WFIFOL(fd,offset + 4) = vsd->vender_id;
68756875
#endif
68766876
for( i = 0; i < count; i++ )
68776877
{
@@ -12856,11 +12856,10 @@ void clif_parse_PurchaseReq(int fd, struct map_session_data* sd)
1285612856

1285712857
/// Shop item(s) purchase request (CZ_PC_PURCHASE_ITEMLIST_FROMMC2).
1285812858
/// 0801 <packet len>.W <account id>.L <unique id>.L { <amount>.W <index>.W }*
12859-
void clif_parse_PurchaseReq2(int fd, struct map_session_data* sd)
12860-
{
12861-
int len = (int)RFIFOW(fd,2) - 12;
12862-
int aid = (int)RFIFOL(fd,4);
12863-
int uid = (int)RFIFOL(fd,8);
12859+
void clif_parse_PurchaseReq2(int fd, struct map_session_data* sd) {
12860+
int len = (int)RFIFOW(fd,2) - 12;
12861+
int aid = (int)RFIFOL(fd,4);
12862+
int uid = (int)RFIFOL(fd,8);
1286412863
const uint8* data = (uint8*)RFIFOP(fd,12);
1286512864

1286612865
vending_purchasereq(sd, aid, uid, data, len/4);
@@ -17978,7 +17977,7 @@ void clif_favorite_item(struct map_session_data* sd, unsigned short index) {
1797817977
WFIFOHEAD(fd,packet_len(0x908));
1797917978
WFIFOW(fd,0) = 0x908;
1798017979
WFIFOW(fd,2) = index+2;
17981-
WFIFOL(fd,4) = (sd->status.inventory[index].favorite == 1) ? 0 : 1;
17980+
WFIFOB(fd,4) = (sd->status.inventory[index].favorite == 1) ? 0 : 1;
1798217981
WFIFOSET(fd,packet_len(0x908));
1798317982
}
1798417983

@@ -18365,7 +18364,7 @@ static int packetdb_readdb(void)
1836518364
#else // for Party booking ( PACKETVER >= 20091229 )
1836618365
-1, -1, 18, 4, 8, 6, 2, 4, 14, 50, 18, 6, 2, 3, 14, 20,
1836718366
#endif
18368-
3, -1, 8, -1, 86, 2, 6, 6, -1, -1, 4, 10, 10, 22, 8, 0,
18367+
3, -1, 8, -1, 86, 2, 6, 6, -1, -1, 4, 10, 10, 0, 0, 0,
1836918368
0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1837018369
0, 0, 0, 0, 0, -1, -1, 3, 2, 66, 5, 2, 12, 6, 0, 0,
1837118370
//#0x0840

src/map/map.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2538,7 +2538,7 @@ int map_random_dir(struct block_list *bl, short *x, short *y)
25382538
return 0;
25392539
}
25402540

2541-
// gatŒn
2541+
// gat system
25422542
inline static struct mapcell map_gat2cell(int gat)
25432543
{
25442544
struct mapcell cell = {0};

0 commit comments

Comments
 (0)