Skip to content
Permalink
Browse files

== 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.
  • Loading branch information...
15peaces committed May 22, 2016
1 parent 8239b70 commit 17eccf201e4592a5e0fddf273a26d44bf7ba1ac8
Showing with 191 additions and 111 deletions.
  1. +23 −0 Changelog-15-3athena.txt
  2. +0 −1 db/elemental_db.txt
  3. +10 −1 db/item_db2.txt
  4. +25 −9 src/char/char.c
  5. +24 −19 src/char_sql/char.c
  6. +41 −2 src/common/mmo.h
  7. +1 −0 src/common/sql.c
  8. +14 −11 src/map/battle.c
  9. +7 −8 src/map/clif.c
  10. +1 −1 src/map/map.c
  11. +14 −4 src/map/skill.c
  12. +29 −17 src/map/status.c
  13. +0 −38 src/map/status.h
  14. +2 −0 src/map/vending.c
@@ -4,6 +4,29 @@
// * Modifications.
// - Details.
//========================================
05/22/2016
r126 [15peaces]
*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.
*Fixed wired bug in elemental_db.
*Added some more missing items.
*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.

05/19/2016
r125 [15peaces]
*Added Renewal Ninja shops.
@@ -2,7 +2,6 @@
//
// Structure of Database:
//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

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
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
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
@@ -1178,7 +1178,7 @@
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); },{},{}
2477,Sabah_Shoes,Sapha Shoes,5,20,,400,,18,,1,0x00001000,63,2,64,,100,1,0,{ bonus bMaxSP,30; bonus bLuk,3; },{},{}
2478,Nab_Shoes,Nab Shoes,5,20,,400,,18,,1,0x00001000,63,2,64,,100,1,0,{ bonus bFlee,3; bonus bInt,2; },{},{}
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; } },{},{}
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; }; },{},{}
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; },{},{}
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; },{},{}
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 @@
12587,Summer_Night_box,A Summer Night's Box,18,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 12246,1; },{},{}
12588,Summer_Night_box2,A Summer Night's Box2,18,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 12103,1; },{},{}
12589,Summer_Night_box3,A Summer Night's Box3,18,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 12106,1; },{},{}
12601,Fresh_Watermelon_Juice,Fresh Watermelon Juice,0,20,,100,,,,,0xFFFFFFFF,63,2,,,,,,{ percentheal 5,5; },{},{}
12602,Special_Box1,Special Box I,11,100,,100,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
12603,Special_Box2,Special Box II,11,100,,100,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
12604,Special_Box3,Special Box III,11,100,,100,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
12605,Special_Box4,Special Box IV,11,100,,100,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
12606,Special_Box5,Special Box V,11,100,,100,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
12607,Lolli_Pop_Box,Delicious Lollipop Box,11,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
12608,Splendid_Box2,Splendid Box2,11,20,,100,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
12613,High_Coin_Pocket,Improved Coin Bag,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ getitempackage(IG_High_Coin_Pocket); },{},{}
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 @@
12782,100T_Zeny_Check,100T Zeny Check,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
12783,10000_Zeny_Check,10000 Zeny Check,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
12784,1000_Zeny_Check,1000 Zeny Check,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
13294,Explosive_Kunai,Explosive Kunai,10,100,,30,50,,,,0x02000000,63,2,32768,,100,,7,{ bonus bAtkEle,Ele_Neutral; },{},{}
13295,Light_Shuriken,Light Shuriken,10,0,,5,5,,,,0xFFFFFFFF,63,2,32768,,,,0,{},{},{}
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; }"; } },{},{}
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; },{},{}
21003,Muramasa_,Muramasa,4,20,,1000,155,,1,2,0x00004082,63,2,34,4,48,1,3,{},{},{}
@@ -1860,7 +1860,7 @@ int count_users(void)
// Writes char data to the buffer in the format used by the client.
// Used in packets 0x6b (chars info) and 0x6d (new char info)
// Returns the size
#define MAX_CHAR_BUF 144 //Max size (for WFIFOHEAD calls)
#define MAX_CHAR_BUF 150 //Max size (for WFIFOHEAD calls)
int mmo_char_tobuf(uint8* buffer, struct mmo_charstatus* p)
{
unsigned short offset = 0;
@@ -1895,7 +1895,16 @@ int mmo_char_tobuf(uint8* buffer, struct mmo_charstatus* p)
WBUFW(buf,50) = DEFAULT_WALK_SPEED; // p->speed;
WBUFW(buf,52) = p->class_;
WBUFW(buf,54) = p->hair;
WBUFW(buf,56) = p->option&0x7E80020 ? 0 : p->weapon; //When the weapon is sent and your option is riding, the client crashes on login!?
#if PACKETVER >= 20141022
WBUFW(buf,56) = p->body; // Body Style, not supported yet [15peaces]
offset+=2;
buf = WBUFP(buffer,offset);
#endif

//When the weapon is sent and your option is riding, the client crashes on login!?
// FIXME[Haru]: is OPTION_HANBOK intended to be part of this list? And if it is, should the list also include other OPTION_ costumes?
WBUFW(buf,56) = (p->option&(OPTION_RIDING|OPTION_DRAGON|OPTION_WUG|OPTION_WUGRIDER|OPTION_MADOGEAR|OPTION_HANBOK)) ? 0 : p->weapon;

WBUFW(buf,58) = p->base_level;
WBUFW(buf,60) = min(p->skill_point, INT16_MAX);
WBUFW(buf,62) = p->head_bottom;
@@ -1932,14 +1941,21 @@ int mmo_char_tobuf(uint8* buffer, struct mmo_charstatus* p)
WBUFL(buf,128) = p->robe;
offset += 4;
#endif
#if PACKETVER >= 20110928
WBUFL(buf,132) = 0; // change slot feature (0 = disabled, otherwise enabled)
offset += 4;
#endif
#if PACKETVER >= 20111025
WBUFL(buf,136) = 0; // unknown purpose (0 = disabled, otherwise displays "Add-Ons" sidebar)
offset += 4;
#if PACKETVER != 20111116 //2011-11-16 wants 136, ask gravity.
#if PACKETVER >= 20110928
WBUFL(buf,132) = ( p->slotchange > 0 ) ? 1 : 0; // change slot feature (0 = disabled, otherwise enabled)
offset += 4;
#endif
#if PACKETVER >= 20111025
WBUFL(buf,136) = ( p->rename > 0 ) ? 1 : 0; // (0 = disabled, otherwise displays "Add-Ons" sidebar)
offset += 4;
#endif
#if PACKETVER >= 20141016
WBUFB(buf,140) = p->sex;// sex - (0 = female, 1 = male, 99 = logindefined)
offset += 1;
#endif
#endif

return 106+offset;
}

@@ -1856,14 +1856,17 @@ int mmo_char_tobuf(uint8* buffer, struct mmo_charstatus* p)
WBUFW(buf,48) = min(p->max_sp, INT16_MAX);
WBUFW(buf,50) = DEFAULT_WALK_SPEED; // p->speed;
WBUFW(buf,52) = p->class_;
#if PACKETVER >= 20141022
WBUFL(buf,54) = p->hair;
offset+=2;
buf = WBUFP(buffer,offset);
#else
WBUFW(buf,54) = p->hair;
#endif
WBUFW(buf,56) = p->option&0x7E80020 ? 0 : p->weapon; //When the weapon is sent and your option is riding, the client crashes on login!?
WBUFW(buf,54) = p->hair;
#if PACKETVER >= 20141022
WBUFW(buf,56) = p->body;
offset+=2;
buf = WBUFP(buffer,offset);
#endif

//When the weapon is sent and your option is riding, the client crashes on login!?
// FIXME[Haru]: is OPTION_HANBOK intended to be part of this list? And if it is, should the list also include other OPTION_ costumes?
WBUFW(buf,56) = (p->option&(OPTION_RIDING|OPTION_DRAGON|OPTION_WUG|OPTION_WUGRIDER|OPTION_MADOGEAR|OPTION_HANBOK)) ? 0 : p->weapon;

WBUFW(buf,58) = p->base_level;
WBUFW(buf,60) = min(p->skill_point, INT16_MAX);
WBUFW(buf,62) = p->head_bottom;
@@ -1900,17 +1903,19 @@ int mmo_char_tobuf(uint8* buffer, struct mmo_charstatus* p)
WBUFL(buf,128) = p->robe;
offset += 4;
#endif
#if PACKETVER >= 20110928
WBUFL(buf,132) = 0; // change slot feature (0 = disabled, otherwise enabled)
offset += 4;
#endif
#if PACKETVER >= 20111025
WBUFL(buf,136) = ( p->rename > 0 ) ? 1 : 0; // (0 = disabled, otherwise displays "Add-Ons" sidebar)
offset += 4;
#endif
#if PACKETVER >= 20141016
WBUFB(buf,140) = p->sex;// sex - (0 = female, 1 = male, 99 = logindefined)
offset += 1;
#if PACKETVER != 20111116 //2011-11-16 wants 136, ask gravity.
#if PACKETVER >= 20110928
WBUFL(buf,132) = ( p->slotchange > 0 ) ? 1 : 0; // change slot feature (0 = disabled, otherwise enabled)
offset += 4;
#endif
#if PACKETVER >= 20111025
WBUFL(buf,136) = ( p->rename > 0 ) ? 1 : 0; // (0 = disabled, otherwise displays "Add-Ons" sidebar)
offset += 4;
#endif
#if PACKETVER >= 20141016
WBUFB(buf,140) = p->sex;// sex - (0 = female, 1 = male, 99 = logindefined)
offset += 1;
#endif
#endif
return 106+offset;
}
@@ -49,7 +49,7 @@

#ifndef PACKETVER
//#define PACKETVER 20131223 //Stable client [15peaces]
#define PACKETVER 20141022 //Experimental / semi-stable [15peaces]
#define PACKETVER 20141022 //Stable client [15peaces]
#endif

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

//OPTION: (EFFECTSTATE_)
enum {
OPTION_NOTHING = 0x00000000,
OPTION_SIGHT = 0x00000001,
OPTION_HIDE = 0x00000002,
OPTION_CLOAK = 0x00000004,
OPTION_CART1 = 0x00000008,
OPTION_FALCON = 0x00000010,
OPTION_RIDING = 0x00000020,
OPTION_INVISIBLE = 0x00000040,
OPTION_CART2 = 0x00000080,
OPTION_CART3 = 0x00000100,
OPTION_CART4 = 0x00000200,
OPTION_CART5 = 0x00000400,
OPTION_ORCISH = 0x00000800,
OPTION_WEDDING = 0x00001000,
OPTION_RUWACH = 0x00002000,
OPTION_CHASEWALK = 0x00004000,
OPTION_FLYING = 0x00008000, //Note that clientside Flying and Xmas are 0x8000 for clients prior to 2007.
OPTION_XMAS = 0x00010000,
OPTION_TRANSFORM = 0x00020000,
OPTION_SUMMER = 0x00040000,
OPTION_DRAGON1 = 0x00080000,
OPTION_WUG = 0x00100000,
OPTION_WUGRIDER = 0x00200000,
OPTION_MADOGEAR = 0x00400000,
OPTION_DRAGON2 = 0x00800000,
OPTION_DRAGON3 = 0x01000000,
OPTION_DRAGON4 = 0x02000000,
OPTION_DRAGON5 = 0x04000000,
OPTION_HANBOK = 0x08000000,
OPTION_OKTOBERFEST = 0x10000000,
// compound constants
OPTION_CART = OPTION_CART1|OPTION_CART2|OPTION_CART3|OPTION_CART4|OPTION_CART5,
OPTION_DRAGON = OPTION_DRAGON1|OPTION_DRAGON2|OPTION_DRAGON3|OPTION_DRAGON4|OPTION_DRAGON5,
OPTION_MASK = ~OPTION_INVISIBLE,
};

struct s_skill {
unsigned short id;
unsigned char lv;
@@ -397,7 +435,7 @@ struct mmo_charstatus {
unsigned int option;
short manner;
unsigned char karma;
short hair,hair_color,clothes_color;
short hair,hair_color,clothes_color,body;
int party_id,guild_id,pet_id,hom_id,mer_id,ele_id;
int fame;

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

time_t delete_date;

@@ -451,6 +451,7 @@ void Sql_Free(Sql* self)
Sql_FreeResult(self);
StringBuf_Destroy(&self->buf);
if( self->keepalive != INVALID_TIMER ) delete_timer(self->keepalive, Sql_P_KeepaliveTimer);
mysql_close(&self->handle);
aFree(self);
}
}
@@ -483,6 +483,7 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,struct Damag
clif_skill_nodamage(bl, bl, RK_MILLENNIUMSHIELD, 1, 1);
sce->val3 -= damage; // absorb damage
d->dmg_lv = ATK_BLOCK;
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.
if( sce->val3 <= 0 ) // Shield Down
{
sce->val2--;
@@ -647,7 +648,7 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,struct Damag
if( (sce = sc->data[SC_STONEHARDSKIN]) && flag&BF_WEAPON && damage > 0 )
{
sce->val2 -= damage;
skill_break_equip(src,EQP_WEAPON,(25 + pc_checkskill(sd,RK_RUNEMASTERY))*100,BCT_SELF);
skill_break_equip(src,EQP_WEAPON,2500,BCT_SELF);

if( sce->val2 <= 0 ) status_change_end(bl, SC_STONEHARDSKIN, INVALID_TIMER);
}
@@ -1680,8 +1681,6 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
wd.damage = (battle_config.skillsbonus_maxhp_RK * 16 / 1000) + (status_get_sp(src) * 192 / 1000);
else
wd.damage = (status_get_hp(src) * 16 / 1000) + (status_get_sp(src) * 192 / 1000);
if( sd )
wd.damage += wd.damage * (5 * pc_checkskill(sd,RK_DRAGONTRAINING)-1) / 100;
break;
case NC_AXEBOOMERANG:
//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
skillratio += 200;
break;
case RK_SONICWAVE: // Sugested formula from irowiki.
skillratio += 400 + (100 * skill_lv); // Base skillratio.
skillratio += 400 + 100 * skill_lv; // Base skillratio.
if( battle_config.max_highlvl_nerf ) // [Pinky]
{
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
if( battle_config.max_highlvl_nerf ) // [Pinky]
{
if(s_level <= battle_config.max_highlvl_nerf)
skillratio *= (1 + (s_level-50) / 20); // Bonus by base level.
skillratio *= 1 + (s_level-50) / 20; // Bonus by base level.
else
skillratio *= (1 + (battle_config.max_highlvl_nerf-50) / 20); // Bonus by base level.
skillratio *= 1 + (battle_config.max_highlvl_nerf-50) / 20; // Bonus by base level.
} else
skillratio *= (1 + (s_level-50) / 20); // Bonus by base level.
break;
case RK_IGNITIONBREAK: // Sugested formula from irowiki.
i = distance_bl(src,target) / 2;
skillratio += ( 100 * skill_lv );
if( i < 4 ) skillratio += (100 * skill_lv);
skillratio += 100 * skill_lv;
if( i < 4 ) skillratio += 100 * skill_lv;
if( i < 2 ) skillratio += 100;
if( battle_config.max_highlvl_nerf ) // [Pinky]
{
@@ -2648,6 +2647,10 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
sc->data[SC_SPIRIT]->val2 == SL_CRUSADER)
ATK_ADDRATE(100);
break;
case RK_DRAGONBREATH:
if( sd && (i = pc_checkskill(sd,RK_DRAGONTRAINING)-1) > 0 )
ATK_ADDRATE(5 * i);
break;
case NC_BOOSTKNUCKLE:
case NC_PILEBUNKER:
case NC_VULCANARM:
@@ -4419,10 +4422,10 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t
}
else
status_change_end(src,SC_SPELLFIST,-1);
}
}
}
if( sd && sc && sc->data[SC_GIANTGROWTH] && wd.flag&(BF_WEAPON|BF_SHORT) && rand()%100 < pc_checkskill(sd,RK_RUNEMASTERY) )
wd.damage *= 3; // Triple Damage - Rate is a suggestion
if( sd && sc && sc->data[SC_GIANTGROWTH] && wd.flag&(BF_WEAPON|BF_SHORT) && rand()%100 < sc->data[SC_GIANTGROWTH]->val2 )
wd.damage *= 3; // Triple Damage

if (sd && sd->state.arrow_atk) //Consume arrow.
battle_consume_ammo(sd, 0, 0);
@@ -6871,7 +6871,7 @@ void clif_vendinglist(struct map_session_data* sd, int id, struct s_vending* ven
WFIFOW(fd,2) = 12+count*22;
WFIFOL(fd,4) = id;
#if PACKETVER >= 20100105
WFIFOL(fd,offset + 4) = vsd->status.char_id; // temporary, could be shop_id??
WFIFOL(fd,offset + 4) = vsd->vender_id;
#endif
for( i = 0; i < count; i++ )
{
@@ -12856,11 +12856,10 @@ void clif_parse_PurchaseReq(int fd, struct map_session_data* sd)

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

vending_purchasereq(sd, aid, uid, data, len/4);
WFIFOHEAD(fd,packet_len(0x908));
WFIFOW(fd,0) = 0x908;
WFIFOW(fd,2) = index+2;
WFIFOL(fd,4) = (sd->status.inventory[index].favorite == 1) ? 0 : 1;
WFIFOB(fd,4) = (sd->status.inventory[index].favorite == 1) ? 0 : 1;
WFIFOSET(fd,packet_len(0x908));
}

#else // for Party booking ( PACKETVER >= 20091229 )
-1, -1, 18, 4, 8, 6, 2, 4, 14, 50, 18, 6, 2, 3, 14, 20,
#endif
3, -1, 8, -1, 86, 2, 6, 6, -1, -1, 4, 10, 10, 22, 8, 0,
3, -1, 8, -1, 86, 2, 6, 6, -1, -1, 4, 10, 10, 0, 0, 0,
0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, -1, -1, 3, 2, 66, 5, 2, 12, 6, 0, 0,
//#0x0840
@@ -2538,7 +2538,7 @@ int map_random_dir(struct block_list *bl, short *x, short *y)
return 0;
}

// gatŒn
// gat system
inline static struct mapcell map_gat2cell(int gat)
{
struct mapcell cell = {0};
Oops, something went wrong.

0 comments on commit 17eccf2

Please sign in to comment.
You can’t perform that action at this time.