diff options
author | glighta <glighta@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2012-11-01 01:40:29 +0000 |
---|---|---|
committer | glighta <glighta@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2012-11-01 01:40:29 +0000 |
commit | 85ae075fd230f7e1d08a84dde6a2cfdce8280ecd (patch) | |
tree | 566de83b27be9f1c2449ddef90a8f7a041ab2ca8 /src/map/clif.c | |
parent | a0fb6bc388fb1d4f0fcfd7d3d8af71a9c8cf86ca (diff) | |
download | hercules-85ae075fd230f7e1d08a84dde6a2cfdce8280ecd.tar.gz hercules-85ae075fd230f7e1d08a84dde6a2cfdce8280ecd.tar.bz2 hercules-85ae075fd230f7e1d08a84dde6a2cfdce8280ecd.tar.xz hercules-85ae075fd230f7e1d08a84dde6a2cfdce8280ecd.zip |
-Fix bugreport:6547 (bloodylust) upd bloodylust effect to berserk
-Fix bugreport:6208, bugreport:6805 (chaos panic) fix range effect
-Partial Fix bugreport:5275 (toxin now won't interupt unbreackable castskill)
-Folllow up r16847 fix UNT_ZEPHYR get some unwanted bonus, fix Insignia unit range
-Add UF_RANGEDSINGLEUNIT unit propriety thx to 3ceam, workaround to fix ranged unit without timer.
-Prevent WM_SOUND_OF_DESTRUCTION, SC_MANHOLE, WM_LULLABY_DEEPSLEEP being cast in non pvp map
-Fix SC_MAGICMUSHROOM shouldn't force skill if sit
-Replace some hardcoded mobid by enum
-add some mob_is definition for quicker search (gvg and treasure)
-Remove some duplicate check for status_heal (if berserk already done in status heal)
-Upd few documentation
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@16855 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src/map/clif.c')
-rw-r--r-- | src/map/clif.c | 449 |
1 files changed, 225 insertions, 224 deletions
diff --git a/src/map/clif.c b/src/map/clif.c index 07e2591c5..2b9bb886c 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -191,9 +191,6 @@ int map_fd; static int clif_parse (int fd); /*========================================== - * map�I��ip�ݒ� - *------------------------------------------*/ -/*========================================== * Ip setting of map-server *------------------------------------------*/ int clif_setip(const char* ip) @@ -357,7 +354,7 @@ static int clif_send_sub(struct block_list *bl, va_list ap) /*========================================== * Packet Delegation (called on all packets that require data to be sent to more than one client) - * functions that are sent solely to one use whose ID it posses use WFIFOSET + * functions that are sent solely to one use whose ID it posses use WFIFOSET *------------------------------------------*/ int clif_send(const uint8* buf, int len, struct block_list* bl, enum send_target type) { @@ -470,7 +467,7 @@ int clif_send(const uint8* buf, int len, struct block_list* bl, enum send_target case PARTY_SAMEMAP_WOS: if (sd && sd->status.party_id) p = party_search(sd->status.party_id); - + if (p) { for(i=0;i<MAX_PARTY;i++){ if( (sd = p->data[i].sd) == NULL ) @@ -481,13 +478,13 @@ int clif_send(const uint8* buf, int len, struct block_list* bl, enum send_target if( sd->bl.id == bl->id && (type == PARTY_WOS || type == PARTY_SAMEMAP_WOS || type == PARTY_AREA_WOS) ) continue; - + if( type != PARTY && type != PARTY_WOS && bl->m != sd->bl.m ) continue; - + if( (type == PARTY_AREA || type == PARTY_AREA_WOS) && (sd->bl.x < x0 || sd->bl.y < y0 || sd->bl.x > x1 || sd->bl.y > y1) ) continue; - + if( packet_db[sd->packet_ver][RBUFW(buf,0)].len ) { // packet must exist for the client version WFIFOHEAD(fd,len); @@ -560,13 +557,13 @@ int clif_send(const uint8* buf, int len, struct block_list* bl, enum send_target { if( !(fd=sd->fd) ) continue; - + if( type == GUILD_NOBG && sd->bg_id ) continue; if( sd->bl.id == bl->id && (type == GUILD_WOS || type == GUILD_SAMEMAP_WOS || type == GUILD_AREA_WOS) ) continue; - + if( type != GUILD && type != GUILD_NOBG && type != GUILD_WOS && sd->bl.m != bl->m ) continue; @@ -869,7 +866,7 @@ void clif_get_weapon_view(struct map_session_data* sd, unsigned short *rhand, un *lhand = sd->status.shield; #else if (sd->equip_index[EQI_HAND_R] >= 0 && - sd->inventory_data[sd->equip_index[EQI_HAND_R]]) + sd->inventory_data[sd->equip_index[EQI_HAND_R]]) { struct item_data* id = sd->inventory_data[sd->equip_index[EQI_HAND_R]]; if (id->view_id > 0) @@ -881,7 +878,7 @@ void clif_get_weapon_view(struct map_session_data* sd, unsigned short *rhand, un if (sd->equip_index[EQI_HAND_L] >= 0 && sd->equip_index[EQI_HAND_L] != sd->equip_index[EQI_HAND_R] && - sd->inventory_data[sd->equip_index[EQI_HAND_L]]) + sd->inventory_data[sd->equip_index[EQI_HAND_L]]) { struct item_data* id = sd->inventory_data[sd->equip_index[EQI_HAND_L]]; if (id->view_id > 0) @@ -1272,7 +1269,7 @@ static void clif_talisman_single(int fd, struct map_session_data *sd, short type static void clif_weather_check(struct map_session_data *sd) { int m = sd->bl.m, fd = sd->fd; - + if (map[m].flag.snow || map[m].flag.clouds || map[m].flag.fog @@ -1337,13 +1334,13 @@ int clif_spawn(struct block_list *bl) vd = status_get_viewdata(bl); if( !vd || vd->class_ == INVISIBLE_CLASS ) return 0; - + /** * Hide NPC from maya purple card. **/ if(bl->type == BL_NPC && !((TBL_NPC*)bl)->chat_id && (((TBL_NPC*)bl)->sc.option&OPTION_INVISIBLE)) return 0; - + len = clif_set_unit_idle(bl, buf,true); clif_send(buf, len, bl, AREA_WOS); if (disguised(bl)) @@ -1351,7 +1348,7 @@ int clif_spawn(struct block_list *bl) if (vd->cloth_color) clif_refreshlook(bl,bl->id,LOOK_CLOTHES_COLOR,vd->cloth_color,AREA_WOS); - + switch (bl->type) { case BL_PC: @@ -1380,7 +1377,7 @@ int clif_spawn(struct block_list *bl) #endif #if PACKETVER <= 20120207 if (sd->status.robe) - clif_refreshlook(bl,bl->id,LOOK_ROBE,sd->status.robe,AREA); + clif_refreshlook(bl,bl->id,LOOK_ROBE,sd->status.robe,AREA); #endif } break; @@ -1417,7 +1414,7 @@ void clif_hominfo(struct map_session_data *sd, struct homun_data *hd, int flag) struct status_data *status; unsigned char buf[128]; int m_class; - + nullpo_retv(hd); status = &hd->battle_status; @@ -1500,7 +1497,7 @@ int clif_homskillinfoblock(struct map_session_data *sd) WFIFOHEAD(fd, 4+37*MAX_HOMUNSKILL); hd = sd->hd; - if ( !hd ) + if ( !hd ) return 0 ; WFIFOW(fd,0)=0x235; @@ -1575,12 +1572,12 @@ static void clif_move2(struct block_list *bl, struct view_data *vd, struct unit_ { uint8 buf[128]; int len; - + len = clif_set_unit_walking(bl,ud,buf); clif_send(buf,len,bl,AREA_WOS); if (disguised(bl)) clif_setdisguise(bl, buf, len); - + if(vd->cloth_color) clif_refreshlook(bl,bl->id,LOOK_CLOTHES_COLOR,vd->cloth_color,AREA_WOS); @@ -1608,7 +1605,7 @@ static void clif_move2(struct block_list *bl, struct view_data *vd, struct unit_ case BL_PET: if( vd->head_bottom ) {// needed to display pet equip properly - clif_pet_equip_area((TBL_PET*)bl); + clif_pet_equip_area((TBL_PET*)bl); } break; } @@ -1627,13 +1624,13 @@ void clif_move(struct unit_data *ud) vd = status_get_viewdata(bl); if (!vd || vd->class_ == INVISIBLE_CLASS) return; //This performance check is needed to keep GM-hidden objects from being notified to bots. - + /** * Hide NPC from maya purple card. **/ if(bl->type == BL_NPC && !((TBL_NPC*)bl)->chat_id && (((TBL_NPC*)bl)->sc.option&OPTION_INVISIBLE)) return; - + if (ud->state.speed_changed) { // Since we don't know how to update the speed of other objects, // use the old walk packet to update the data. @@ -1997,7 +1994,7 @@ void clif_scriptinput(struct map_session_data *sd, int npcid) bl->x<sd->bl.x-AREA_SIZE-1 || bl->x>sd->bl.x+AREA_SIZE+1 || bl->y<sd->bl.y-AREA_SIZE-1 || bl->y>sd->bl.y+AREA_SIZE+1)))) clif_sendfakenpc(sd, npcid); - + fd=sd->fd; WFIFOHEAD(fd, packet_len(0x142)); WFIFOW(fd,0)=0x142; @@ -2077,8 +2074,8 @@ void clif_viewpoint(struct map_session_data *sd, int npc_id, int type, int x, in /// 4 = middle of screen, movable with a close button, chrome-less void clif_cutin(struct map_session_data* sd, const char* image, int type) { - int fd; - + int fd; + nullpo_retv(sd); fd=sd->fd; @@ -2255,9 +2252,9 @@ void clif_delitem(struct map_session_data *sd,int n,int amount, short reason) int fd; nullpo_retv(sd); - + fd=sd->fd; - + WFIFOHEAD(fd, packet_len(0x7fa)); WFIFOW(fd,0)=0x7fa; WFIFOW(fd,2)=reason; @@ -2269,7 +2266,7 @@ void clif_delitem(struct map_session_data *sd,int n,int amount, short reason) // Simplifies inventory/cart/storage packets by handling the packet section relevant to items. [Skotlex] -// Equip is >= 0 for equippable items (holds the equip-point, is 0 for pet +// Equip is >= 0 for equippable items (holds the equip-point, is 0 for pet // armor/egg) -1 for stackable items, -2 for stackable items where arrows must send in the equip-point. void clif_item_sub(unsigned char *buf, int n, struct item *i, struct item_data *id, int equip) { @@ -2279,7 +2276,7 @@ void clif_item_sub(unsigned char *buf, int n, struct item *i, struct item_data * WBUFW(buf,n)=i->nameid; WBUFB(buf,n+2)=itemtype(id->type); WBUFB(buf,n+3)=i->identify; - if (equip >= 0) { //Equippable item + if (equip >= 0) { //Equippable item WBUFW(buf,n+4)=equip; WBUFW(buf,n+6)=i->equip; WBUFB(buf,n+8)=i->attribute; @@ -2318,7 +2315,7 @@ void clif_inventorylist(struct map_session_data *sd) buf = (unsigned char*)aMalloc(MAX_INVENTORY * s + 4); bufe = (unsigned char*)aMalloc(MAX_INVENTORY * se + 4); - + for( i = 0, n = 0, ne = 0; i < MAX_INVENTORY; i++ ) { if( sd->status.inventory[i].nameid <=0 || sd->inventory_data[i] == NULL ) @@ -2385,12 +2382,12 @@ void clif_inventorylist(struct map_session_data *sd) for( i = 0; i < MAX_INVENTORY; i++ ) { if( sd->status.inventory[i].nameid <= 0 || sd->inventory_data[i] == NULL ) continue; - + if ( sd->status.inventory[i].favorite ) clif_favorite_item(sd, i); } #endif - + if( buf ) aFree(buf); if( bufe ) aFree(bufe); } @@ -2413,9 +2410,9 @@ void clif_equiplist(struct map_session_data *sd) for(i=0,n=0;i<MAX_INVENTORY;i++){ if (sd->status.inventory[i].nameid <=0 || sd->inventory_data[i] == NULL) - continue; - - if(itemdb_isstackable2(sd->inventory_data[i])) + continue; + + if(itemdb_isstackable2(sd->inventory_data[i])) continue; //Equippable WBUFW(buf,n*cmd+4)=i+2; @@ -2547,7 +2544,7 @@ void clif_cartlist(struct map_session_data *sd) buf = (unsigned char*)aMalloc(MAX_CART * s + 4); bufe = (unsigned char*)aMalloc(MAX_CART * cmd + 4); - + for( i = 0, n = 0, ne = 0; i < MAX_CART; i++ ) { if( sd->status.cart[i].nameid <= 0 ) @@ -2823,8 +2820,8 @@ void clif_updatestatus(struct map_session_data *sd,int type) //negative check (in case you have something like Berserk active) int mdef2 = pc_rightside_mdef(sd); - WFIFOL(fd,4)= -#ifndef RENEWAL + WFIFOL(fd,4)= +#ifndef RENEWAL ( mdef2 < 0 ) ? 0 : #endif mdef2; @@ -3175,11 +3172,11 @@ void clif_initialstatus(struct map_session_data *sd) WBUFW(buf,26) = pc_rightside_def(sd); WBUFW(buf,28) = pc_leftside_mdef(sd); mdef2 = pc_rightside_mdef(sd); - WBUFW(buf,30) = + WBUFW(buf,30) = #ifndef RENEWAL ( mdef2 < 0 ) ? 0 : //Negative check for Frenzy'ed characters. #endif - mdef2; + mdef2; WBUFW(buf,32) = sd->battle_status.hit; WBUFW(buf,34) = sd->battle_status.flee; WBUFW(buf,36) = sd->battle_status.flee2/10; @@ -3391,7 +3388,7 @@ void clif_changeoption(struct block_list* bl) sc = status_get_sc(bl); if (!sc) return; //How can an option change if there's no sc? sd = BL_CAST(BL_PC, bl); - + #if PACKETVER >= 7 WBUFW(buf,0) = 0x229; WBUFL(buf,2) = bl->id; @@ -3434,7 +3431,7 @@ void clif_changeoption2(struct block_list* bl) { unsigned char buf[20]; struct status_change *sc; - + sc = status_get_sc(bl); if (!sc) return; //How can an option change if there's no sc? @@ -3749,7 +3746,7 @@ void clif_traderequest(struct map_session_data* sd, const char* name) #else struct map_session_data* tsd = map_id2sd(sd->trade_partner); if( !tsd ) return; - + WFIFOHEAD(fd,packet_len(0x1f4)); WFIFOW(fd,0) = 0x1f4; safestrncpy((char*)WFIFOP(fd,2), name, NAME_LENGTH); @@ -4080,11 +4077,11 @@ void clif_getareachar_unit(struct map_session_data* sd,struct block_list *bl) struct unit_data *ud; struct view_data *vd; int len; - + vd = status_get_viewdata(bl); if (!vd || vd->class_ == INVISIBLE_CLASS) return; - + /** * Hide NPC from maya purple card. **/ @@ -4167,14 +4164,14 @@ static int clif_calc_walkdelay(struct block_list *bl,int delay, int type, int da { if (type == 4 || type == 9 || damage <=0) return 0; - + if (bl->type == BL_PC) { if (battle_config.pc_walk_delay_rate != 100) delay = delay*battle_config.pc_walk_delay_rate/100; } else if (battle_config.walk_delay_rate != 100) delay = delay*battle_config.walk_delay_rate/100; - + if (div_ > 1) //Multi-hit skills mean higher delays. delay += battle_config.multihit_delay*(div_-1); @@ -4422,6 +4419,8 @@ static void clif_getareachar_skillunit(struct map_session_data *sd, struct skill WFIFOW(fd,12)=unit->bl.y; if (battle_config.traps_setting&1 && skill_get_inf2(unit->group->skill_id)&INF2_TRAP) WFIFOB(fd,14)=UNT_DUMMYSKILL; //Use invisible unit id for traps. + else if (skill_get_unit_flag(unit->group->skill_id) & UF_RANGEDSINGLEUNIT && !(unit->val2 & UF_RANGEDSINGLEUNIT)) + WFIFOB(fd,14)=UNT_DUMMYSKILL; //Use invisible unit id for traps. else WFIFOB(fd,14)=unit->group->unit_id; WFIFOB(fd,15)=1; // ignored by client (always gets set to 1) @@ -4573,7 +4572,7 @@ int clif_insight(struct block_list *bl,va_list ap) tbl=va_arg(ap,struct block_list*); if (bl == tbl) return 0; - + sd = BL_CAST(BL_PC, bl); tsd = BL_CAST(BL_PC, tbl); @@ -4643,7 +4642,7 @@ void clif_skillinfoblock(struct map_session_data *sd) if( (id = sd->status.skill[i].id) != 0 ) { clif_addskill(sd, id); - clif_skillinfo(sd, id, 0); + clif_skillinfo(sd, id, 0); } } } @@ -4829,11 +4828,11 @@ void clif_skill_fail(struct map_session_data *sd,int skill_id,enum useskill_fail { int fd; - if (!sd) { //Since this is the most common nullpo.... + if (!sd) { //Since this is the most common nullpo.... ShowDebug("clif_skill_fail: Error, received NULL sd for skill %d\n", skill_id); return; } - + fd=sd->fd; if (!fd) return; @@ -4842,7 +4841,7 @@ void clif_skill_fail(struct map_session_data *sd,int skill_id,enum useskill_fail if(cause==USESKILL_FAIL_SKILLINTERVAL && !sd->state.showdelay) return; //Disable delay failed messages - + if(skill_id == RG_SNATCHER && battle_config.display_skill_fail&4) return; @@ -4921,7 +4920,7 @@ int clif_skill_damage(struct block_list *src,struct block_list *dst,unsigned int if(disguised(src)) { WBUFL(buf,4)=-src->id; - if (disguised(dst)) + if (disguised(dst)) WBUFL(buf,8)=dst->id; if(damage > 0) WBUFW(buf,24)=-1; @@ -5116,6 +5115,8 @@ void clif_skill_setunit(struct skill_unit *unit) WBUFW(buf,12)=unit->bl.y; if (unit->group->state.song_dance&0x1 && unit->val2&UF_ENSEMBLE) WBUFB(buf,14)=unit->val2&UF_SONG?UNT_DISSONANCE:UNT_UGLYDANCE; + else if (skill_get_unit_flag(unit->group->skill_id) & UF_RANGEDSINGLEUNIT && !(unit->val2 & UF_RANGEDSINGLEUNIT)) + WBUFB(buf, 14) = UNT_DUMMYSKILL; // Only display the unit at center. else WBUFB(buf,14)=unit->group->unit_id; WBUFB(buf,15)=1; // ignored by client (always gets set to 1) @@ -5289,32 +5290,32 @@ void clif_cooking_list(struct map_session_data *sd, int trigger, int skill_id, i int fd; int i, c; int view; - + nullpo_retv(sd); fd = sd->fd; - + WFIFOHEAD(fd, 6 + 2 * MAX_SKILL_PRODUCE_DB); WFIFOW(fd,0) = 0x25a; WFIFOW(fd,4) = list_type; // list type - + c = 0; for( i = 0; i < MAX_SKILL_PRODUCE_DB; i++ ) { if( !skill_can_produce_mix(sd,skill_produce_db[i].nameid,trigger, qty) ) continue; - + if( (view = itemdb_viewid(skill_produce_db[i].nameid)) > 0 ) WFIFOW(fd, 6 + 2 * c) = view; else WFIFOW(fd, 6 + 2 * c) = skill_produce_db[i].nameid; - + c++; } - + if( skill_id == AM_PHARMACY ) { // Only send it while Cooking else check for c. WFIFOW(fd,2) = 6 + 2 * c; WFIFOSET(fd,WFIFOW(fd,2)); } - + if( c > 0 ) { sd->menuskill_id = skill_id; sd->menuskill_val = trigger; @@ -5386,7 +5387,7 @@ void clif_status_change(struct block_list *bl,int type,int flag,int tick,int val void clif_displaymessage(const int fd, const char* mes) { nullpo_retv(mes); - + //Scrapped, as these are shared by disconnected players =X [Skotlex] if (fd == 0) ; @@ -5398,7 +5399,7 @@ void clif_displaymessage(const int fd, const char* mes) while(line != NULL) { // Limit message to 255+1 characters (otherwise it causes a buffer overflow in the client) int len = strnlen(line, 255); - + if (len > 0) { // don't send a void message (it's not displaying on the client chat). @help can send void line. WFIFOHEAD(fd, 5 + len); WFIFOW(fd,0) = 0x8e; @@ -5427,7 +5428,7 @@ void clif_broadcast(struct block_list* bl, const char* mes, int len, int type, e WBUFL(buf,4) = 0x73737373; //If there's "ssss", game client will recognize message as 'WoE broadcast'. memcpy(WBUFP(buf, 4 + lp), mes, len); clif_send(buf, WBUFW(buf,2), bl, target); - + if (buf) aFree(buf); } @@ -5469,10 +5470,10 @@ void clif_MainChatMessage(const char* message) { uint8 buf[200]; int len; - + if(!message) return; - + len = strlen(message)+1; if (len+8 > sizeof(buf)) { ShowDebug("clif_MainChatMessage: Received message too long (len %d): %s\n", len, message); @@ -5723,7 +5724,7 @@ void clif_use_card(struct map_session_data *sd,int idx) if (!sd->inventory_data[idx] || sd->inventory_data[idx]->type != IT_CARD) return; //Avoid parsing invalid item indexes (no card/no item) - + ep=sd->inventory_data[idx]->equip; WFIFOHEAD(fd,MAX_INVENTORY * 2 + 4); WFIFOW(fd,0)=0x17b; @@ -5875,7 +5876,7 @@ void clif_item_repaireffect(struct map_session_data *sd,int idx,int flag) WFIFOW(fd, 2)=idx+2; WFIFOB(fd, 4)=flag; WFIFOSET(fd,packet_len(0x1fe)); - + } @@ -6865,7 +6866,7 @@ void clif_devotion(struct block_list *src, struct map_session_data *tsd) { unsigned char buf[56]; int i; - + nullpo_retv(src); memset(buf,0,packet_len(0x1cf)); @@ -7097,23 +7098,23 @@ void clif_guild_memberlogin_notice(struct guild *g,int idx,int flag) // But at the 1st time (after a player login or map changing) // the client won't show the message. // So I suggest use this function for sending "first-time-info" -// to some player on entering the game or changing location. +// to some player on entering the game or changing location. // At next time the client would always show the message. -// The function sends all the statuses in the single packet +// The function sends all the statuses in the single packet // to economize traffic. [LuzZza] void clif_guild_send_onlineinfo(struct map_session_data *sd) { struct guild *g; unsigned char buf[14*128]; int i, count=0, p_len; - + nullpo_retv(sd); p_len = packet_len(0x16d); if(!(g = guild_search(sd->status.guild_id))) return; - + for(i=0; i<g->max_member; i++) { if(g->member[i].account_id > 0 && @@ -7126,7 +7127,7 @@ void clif_guild_send_onlineinfo(struct map_session_data *sd) count++; } } - + clif_send(buf, p_len*count, &sd->bl, SELF); } @@ -7434,7 +7435,7 @@ void clif_guild_skillinfo(struct map_session_data* sd) { int id = g->skill[i].id; int p = 6 + c*37; - WFIFOW(fd,p+0) = id; + WFIFOW(fd,p+0) = id; WFIFOL(fd,p+2) = skill_get_inf(id); WFIFOW(fd,p+6) = g->skill[i].lv; WFIFOW(fd,p+8) = skill_get_sp(id, g->skill[i].lv); @@ -7462,7 +7463,7 @@ void clif_guild_notice(struct map_session_data* sd, struct guild* g) if ( !session_isActive(fd) ) return; - + if(g->mes1[0] == '\0' && g->mes2[0] == '\0') return; @@ -7966,7 +7967,7 @@ void clif_manner_message(struct map_session_data* sd, uint32 type) { int fd; nullpo_retv(sd); - + fd = sd->fd; WFIFOHEAD(fd,packet_len(0x14a)); WFIFOW(fd,0) = 0x14a; @@ -8300,7 +8301,7 @@ void clif_charnameack (int fd, struct block_list *bl) struct map_session_data *ssd = (struct map_session_data *)bl; struct party_data *p = NULL; struct guild *g = NULL; - + //Requesting your own "shadow" name. [Skotlex] if (ssd->fd == fd && ssd->disguise) WBUFL(buf,2) = -bl->id; @@ -8334,13 +8335,13 @@ void clif_charnameack (int fd, struct block_list *bl) if (p == NULL && g == NULL) break; - + WBUFW(buf, 0) = cmd = 0x195; if (p) memcpy(WBUFP(buf,30), p->party.name, NAME_LENGTH); else WBUFB(buf,30) = 0; - + if (g && ps >= 0 && ps < MAX_GUILDPOSITION) { memcpy(WBUFP(buf,54), g->name,NAME_LENGTH); @@ -8405,7 +8406,7 @@ void clif_charnameack (int fd, struct block_list *bl) return; case BL_ELEM: memcpy(WBUFP(buf,6), ((TBL_ELEM*)bl)->db->name, NAME_LENGTH); - break; + break; default: ShowError("clif_charnameack: bad type %d(%d)\n", bl->type, bl->id); return; @@ -8440,7 +8441,7 @@ void clif_charnameupdate (struct map_session_data *ssd) WBUFL(buf,2) = ssd->bl.id; memcpy(WBUFP(buf,6), ssd->status.name, NAME_LENGTH); - + if (!battle_config.display_party_name) { if (ssd->status.party_id > 0 && ssd->status.guild_id > 0 && (g = guild_search(ssd->status.guild_id)) != NULL) p = party_search(ssd->status.party_id); @@ -8523,13 +8524,13 @@ void clif_disp_overhead(struct map_session_data *sd, const char* mes) // send back message to the speaker WBUFW(buf,0) = 0x8e; WBUFW(buf, 2) = len_mes + 4; - safestrncpy((char*)WBUFP(buf,4), mes, len_mes); + safestrncpy((char*)WBUFP(buf,4), mes, len_mes); clif_send(buf, WBUFW(buf,2), &sd->bl, SELF); } /*========================== * Minimap fix [Kevin] - * Remove dot from minimap + * Remove dot from minimap *--------------------------*/ void clif_party_xy_remove(struct map_session_data *sd) { @@ -8715,7 +8716,7 @@ void clif_viewequip_ack(struct map_session_data* sd, struct map_session_data* ts nullpo_retv(sd); nullpo_retv(tsd); fd = sd->fd; - + WFIFOHEAD(fd, MAX_INVENTORY * s + 43); buf = WFIFOP(fd,0); @@ -8738,14 +8739,14 @@ void clif_viewequip_ack(struct map_session_data* sd, struct map_session_data* ts WBUFW(buf,38) = tsd->vd.hair_color; WBUFW(buf,40) = tsd->vd.cloth_color; WBUFB(buf,42) = tsd->vd.sex; - + for(i=0,n=0; i < MAX_INVENTORY; i++) { if (tsd->status.inventory[i].nameid <= 0 || tsd->inventory_data[i] == NULL) // Item doesn't exist continue; if (!itemdb_isequip2(tsd->inventory_data[i])) // Is not equippable continue; - + // Inventory position WBUFW(buf, n*s+43) = i + 2; // Add refine, identify flag, element, etc. @@ -8979,7 +8980,7 @@ static int clif_guess_PacketVer(int fd, int get_previous, int *error) //define CHECK_PACKET_VER CHECK_PACKET_VER();//Default packet version found. - + for (packet_ver = MAX_PACKET_VER; packet_ver > 0; packet_ver--) { //Start guessing the version, giving priority to the newer ones. [Skotlex] CHECK_PACKET_VER(); @@ -9056,7 +9057,7 @@ void clif_parse_WantToConnection(int fd, TBL_PC* sd) return; } - if (bl || + if (bl || ((node=chrif_search(account_id)) && //An already existing node is valid only if it is for this login. !(node->account_id == account_id && node->char_id == char_id && node->state == ST_LOGIN))) { @@ -9092,7 +9093,7 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) { if(sd->bl.prev != NULL) return; - + if (!sd->state.active) { //Character loading is not complete yet! //Let pc_reg_received reinvoke this when ready. @@ -9106,7 +9107,7 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) clif_changemap(sd, sd->mapindex, sd->bl.x, sd->bl.y); return; } - + sd->state.warping = 0; // look @@ -9123,7 +9124,7 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) // item clif_inventorylist(sd); // inventory list first, otherwise deleted items in pc_checkitem show up as 'unknown item' pc_checkitem(sd); - + // cart if(pc_iscarton(sd)) { clif_cartlist(sd); @@ -9158,7 +9159,7 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) instance_check_idle(map[sd->bl.m].instance_id); } sd->state.debug_remove_map = 0; // temporary state to track double remove_map's [FlavioJS] - + // reset the callshop flag if the player changes map sd->state.callshop = 0; @@ -9248,7 +9249,7 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) clif_hpmeter_single(sd->fd,sd->ed->bl.id,sd->ed->battle_status.hp,sd->ed->battle_status.matk_max); clif_elemental_updatestatus(sd,SP_SP); } - + if(sd->state.connect_new) { int lv; sd->state.connect_new = 0; @@ -9290,7 +9291,7 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) sd->state.night = 1; clif_status_load(&sd->bl, SI_NIGHT, 1); } - + // Notify everyone that this char logged in [Skotlex]. map_foreachpc(clif_friendslist_toggle_sub, sd->status.account_id, sd->status.char_id, 1); @@ -9304,7 +9305,7 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) clif_updatestatus(sd,SP_INT); clif_updatestatus(sd,SP_DEX); clif_updatestatus(sd,SP_LUK); - + // abort currently running script sd->state.using_fake_npc = 0; sd->state.menu_or_input = 0; @@ -9355,7 +9356,7 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) map_iwall_get(sd); // Updates Walls Info on this Map to Client sd->state.changemap = false; } - + mail_clear(sd); /* Guild Aura Init */ @@ -9370,7 +9371,7 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) clif_openvending(sd,sd->bl.id,sd->vending); clif_showvendingboard(&sd->bl,sd->message,0); } - + if(map[sd->bl.m].flag.loadevent) // Lance npc_script_event(sd, NPCE_LOADMAP); @@ -9381,7 +9382,7 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) clif_changeoption(&sd->bl); clif_weather_check(sd); - + // For automatic triggering of NPCs after map loading (so you don't need to walk 1 step first) if (map_getcell(sd->bl.m,sd->bl.x,sd->bl.y,CELL_CHKNPC)) npc_touch_areanpc(sd,sd->bl.m,sd->bl.x,sd->bl.y); @@ -9536,7 +9537,7 @@ void clif_parse_WalkToXY(int fd, struct map_session_data *sd) //Set last idle time... [Skotlex] sd->idletime = last_tick; - + unit_walktoxy(&sd->bl, x, y, 4); } @@ -9572,7 +9573,7 @@ void clif_parse_GetCharNameRequest(int fd, struct map_session_data *sd) int id = RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); struct block_list* bl; //struct status_change *sc; - + if( id < 0 && -id == sd->bl.id ) // for disguises [Valaris] id = sd->bl.id; @@ -9623,7 +9624,7 @@ void clif_parse_GlobalMessage(int fd, struct map_session_data* sd) if( is_atcommand(fd, sd, message, 1) ) return; - if( sd->sc.data[SC_BERSERK] || (sd->sc.data[SC_NOCHAT] && sd->sc.data[SC_NOCHAT]->val1&MANNER_NOCHAT) ) + if( sd->sc.data[SC_BERSERK] || sd->sc.data[SC__BLOODYLUST] || (sd->sc.data[SC_NOCHAT] && sd->sc.data[SC_NOCHAT]->val1&MANNER_NOCHAT) ) return; if( battle_config.min_chat_delay ) @@ -9792,7 +9793,7 @@ void clif_parse_ActionRequest_sub(struct map_session_data *sd, int action_type, (sd->sc.data[SC_TRICKDEAD] || sd->sc.data[SC_AUTOCOUNTER] || sd->sc.data[SC_BLADESTOP] || - sd->sc.data[SC__MANHOLE] || + sd->sc.data[SC__MANHOLE] || sd->sc.data[SC_CURSEDCIRCLE_ATKER] || sd->sc.data[SC_CURSEDCIRCLE_TARGET] )) return; @@ -9860,7 +9861,7 @@ void clif_parse_ActionRequest_sub(struct map_session_data *sd, int action_type, return; } pc_setstand(sd); - skill_sit(sd,0); + skill_sit(sd,0); clif_standing(&sd->bl); break; } @@ -9934,7 +9935,7 @@ void clif_parse_WisMessage(int fd, struct map_session_data* sd) if ( is_atcommand(fd, sd, message, 1) ) return; - if (sd->sc.data[SC_BERSERK] || (sd->sc.data[SC_NOCHAT] && sd->sc.data[SC_NOCHAT]->val1&MANNER_NOCHAT)) + if (sd->sc.data[SC_BERSERK] || sd->sc.data[SC__BLOODYLUST] || (sd->sc.data[SC_NOCHAT] && sd->sc.data[SC_NOCHAT]->val1&MANNER_NOCHAT)) return; if (battle_config.min_chat_delay) { //[Skotlex] @@ -9975,12 +9976,12 @@ void clif_parse_WisMessage(int fd, struct map_session_data* sd) safestrncpy(split_data[i], str, ARRAYLENGTH(split_data[i])); str = split+1; } - + for( i = 0; i < NUM_WHISPER_VAR; ++i ) { sprintf(output, "@whispervar%d$", i); set_var(sd,output,(char *) split_data[i]); } - + sprintf(output, "%s::OnWhisperGlobal", npc->exname); npc_event(sd,output,0); // Calls the NPC label @@ -10009,7 +10010,7 @@ void clif_parse_WisMessage(int fd, struct map_session_data* sd) intif_wis_message(sd, target, message, messagelen); return; } - + // if player ignores everyone if (dstsd->state.ignoreAll) { if (dstsd->sc.option & OPTION_INVISIBLE && pc_get_group_level(sd) < pc_get_group_level(dstsd)) @@ -10018,7 +10019,7 @@ void clif_parse_WisMessage(int fd, struct map_session_data* sd) clif_wis_end(fd, 3); // 3: everyone ignored by target return; } - + // if player is autotrading if( dstsd->state.autotrade == 1 ) { char output[256]; @@ -10026,14 +10027,14 @@ void clif_parse_WisMessage(int fd, struct map_session_data* sd) clif_wis_message(fd, wisp_server_name, output, strlen(output) + 1); return; } - + // if player ignores the source character ARR_FIND(0, MAX_IGNORE_LIST, i, dstsd->ignore[i].name[0] == '\0' || strcmp(dstsd->ignore[i].name, sd->status.name) == 0); if(i < MAX_IGNORE_LIST && dstsd->ignore[i].name[0] != '\0') { // source char present in ignore list clif_wis_end(fd, 2); // 2: ignored by target return; } - + // notify sender of success clif_wis_end(fd, 0); // 0: success to send wisper @@ -10052,7 +10053,7 @@ void clif_parse_Broadcast(int fd, struct map_session_data* sd) { // as the length varies depending on the command used, just block unreasonably long strings mes_len_check(msg, len, CHAT_SIZE_MAX); - + sprintf(command, "%ckami %s", atcommand_symbol, msg); is_atcommand(fd, sd, command, 1); } @@ -10068,7 +10069,7 @@ void clif_parse_TakeItem(int fd, struct map_session_data *sd) int map_object_id; map_object_id = RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); - + fitem = (struct flooritem_data*)map_id2bl(map_object_id); do { @@ -10082,7 +10083,7 @@ void clif_parse_TakeItem(int fd, struct map_session_data *sd) if( sd->sc.cant.pickup ) break; - + if (pc_cant_act(sd)) break; @@ -10145,7 +10146,7 @@ void clif_parse_UseItem(int fd, struct map_session_data *sd) if (sd->sc.opt1 > 0 && sd->sc.opt1 != OPT1_STONEWAIT && sd->sc.opt1 != OPT1_BURNING) return; - + //This flag enables you to use items while in an NPC. [Skotlex] if (sd->npc_id) { if (sd->npc_id != sd->npc_item_flag) @@ -10157,7 +10158,7 @@ void clif_parse_UseItem(int fd, struct map_session_data *sd) //Whether the item is used or not is irrelevant, the char ain't idle. [Skotlex] sd->idletime = last_tick; n = RFIFOW(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0])-2; - + if(n <0 || n >= MAX_INVENTORY) return; if (!pc_useitem(sd,n)) @@ -10175,10 +10176,10 @@ void clif_parse_EquipItem(int fd,struct map_session_data *sd) clif_clearunit_area(&sd->bl,CLR_DEAD); return; } - index = RFIFOW(fd,2)-2; + index = RFIFOW(fd,2)-2; if (index < 0 || index >= MAX_INVENTORY) return; //Out of bounds check. - + if(sd->npc_id) { if (sd->npc_id != sd->npc_item_flag) return; @@ -10199,7 +10200,7 @@ void clif_parse_EquipItem(int fd,struct map_session_data *sd) pet_equipitem(sd,index); return; } - + //Client doesn't send the position for ammo. if(sd->inventory_data[index]->type == IT_AMMO) pc_equipitem(sd,index,EQP_AMMO); @@ -10320,7 +10321,7 @@ void clif_parse_NpcSellListSend(int fd,struct map_session_data *sd) fail = 1; else fail = npc_selllist(sd,n,item_list); - + sd->npc_shopid = 0; //Clear shop data. WFIFOHEAD(fd,packet_len(0xcb)); @@ -10427,7 +10428,7 @@ void clif_parse_ChatLeave(int fd, struct map_session_data* sd) //Handles notifying asker and rejecter of what has just ocurred. //Type is used to determine the correct msg_txt to use: -//0: +//0: static void clif_noask_sub(struct map_session_data *src, struct map_session_data *target, int type) { const char* msg; @@ -10446,7 +10447,7 @@ static void clif_noask_sub(struct map_session_data *src, struct map_session_data void clif_parse_TradeRequest(int fd,struct map_session_data *sd) { struct map_session_data *t_sd; - + t_sd = map_id2sd(RFIFOL(fd,2)); if(!sd->chatID && pc_cant_act(sd)) @@ -10463,7 +10464,7 @@ void clif_parse_TradeRequest(int fd,struct map_session_data *sd) clif_skill_fail(sd,1,USESKILL_FAIL_LEVEL,0); return; } - + trade_traderequest(sd,t_sd); } @@ -10557,7 +10558,7 @@ void clif_parse_RemoveOption(int fd,struct map_session_data *sd) #ifdef NEW_CARTS pc_setoption(sd,sd->sc.option&~(OPTION_RIDING|OPTION_FALCON|OPTION_DRAGON|OPTION_MADOGEAR)); if( sd->sc.data[SC_PUSH_CART] ) - pc_setcart(sd,0); + pc_setcart(sd,0); #else pc_setoption(sd,sd->sc.option&~(OPTION_CART|OPTION_RIDING|OPTION_FALCON|OPTION_DRAGON|OPTION_MADOGEAR)); #endif @@ -10583,7 +10584,7 @@ void clif_parse_ChangeCart(int fd,struct map_session_data *sd) (type == 4 && sd->status.base_level > 80) || (type == 3 && sd->status.base_level > 65) || (type == 2 && sd->status.base_level > 40) || - (type == 1)) + (type == 1)) #else if( (type == 5 && sd->status.base_level > 90) || (type == 4 && sd->status.base_level > 80) || @@ -10650,7 +10651,7 @@ static void clif_parse_UseSkillToPos_homun(struct homun_data *hd, struct map_ses if( skillnum != SA_CASTCANCEL && skillnum != SO_SPELLFIST ) return; } else if( DIFF_TICK(tick, hd->ud.canact_tick) < 0 ) return; - + if( hd->sc.data[SC_BASILICA] ) return; lv = merc_hom_checkskill(hd, skillnum); @@ -10754,10 +10755,10 @@ void clif_parse_UseSkillToId(int fd, struct map_session_data *sd) if( sd->bl.id != target_id && tmp&INF_SELF_SKILL ) target_id = sd->bl.id; // never trust the client - + if( target_id < 0 && -target_id == sd->bl.id ) // for disguises [Valaris] target_id = sd->bl.id; - + if( sd->ud.skilltimer != INVALID_TIMER ) { if( skillnum != SA_CASTCANCEL && skillnum != SO_SPELLFIST ) @@ -10821,7 +10822,7 @@ static void clif_parse_UseSkillToPosSub(int fd, struct map_session_data *sd, sho if( !(skill_get_inf(skillnum)&INF_GROUND_SKILL) ) return; //Using a target skill on the ground? WRONG. - + if( skillnum >= HM_SKILLBASE && skillnum < HM_SKILLBASE + MAX_HOMUNSKILL ) { clif_parse_UseSkillToPos_homun(sd->hd, sd, tick, skillnum, skilllv, x, y, skillmoreinfo); return; @@ -10921,7 +10922,7 @@ void clif_parse_UseSkillToPosMoreInfo(int fd, struct map_session_data *sd) return; if (pc_issit(sd)) return; - + clif_parse_UseSkillToPosSub(fd, sd, RFIFOW(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]), //Skill lv RFIFOW(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[1]), //Skill num @@ -10940,7 +10941,7 @@ void clif_parse_UseSkillMap(int fd, struct map_session_data* sd) char map_name[MAP_NAME_LENGTH]; mapindex_getmapname((char*)RFIFOP(fd,4), map_name); - if(skill_num != sd->menuskill_id) + if(skill_num != sd->menuskill_id) return; if( pc_cant_act(sd) ) { @@ -11002,7 +11003,7 @@ void clif_parse_Cooking(int fd,struct map_session_data *sd) { int amount = sd->menuskill_val2?sd->menuskill_val2:1; if( type == 6 && sd->menuskill_id != GN_MIX_COOKING && sd->menuskill_id != GN_S_PHARMACY ) return; - + if (pc_istrading(sd)) { //Make it fail to avoid shop exploits where you sell something different than you see. clif_skill_fail(sd,sd->ud.skillid,USESKILL_FAIL_LEVEL,0); @@ -11104,7 +11105,7 @@ void clif_parse_NpcStringInput(int fd, struct map_session_data* sd) int message_len = RFIFOW(fd,2)-8; int npcid = RFIFOL(fd,4); const char* message = (char*)RFIFOP(fd,8); - + if( message_len <= 0 ) return; // invalid input @@ -11118,7 +11119,7 @@ void clif_parse_NpcStringInput(int fd, struct map_session_data* sd) void clif_parse_NpcCloseClicked(int fd,struct map_session_data *sd) { if (!sd->npc_id) //Avoid parsing anything when the script was done with. [Skotlex] - return; + return; npc_scriptcont(sd,RFIFOL(fd,2)); } @@ -11226,7 +11227,7 @@ void clif_parse_SolveCharName(int fd, struct map_session_data *sd) /// 1 = skill void clif_parse_ResetChar(int fd, struct map_session_data *sd) { char cmd[15]; - + if( RFIFOW(fd,2) ) sprintf(cmd,"%cresetskill",atcommand_symbol); else @@ -11244,7 +11245,7 @@ void clif_parse_LocalBroadcast(int fd, struct map_session_data* sd) char command[CHAT_SIZE_MAX+16]; char* msg = (char*)RFIFOP(fd,4); unsigned int len = RFIFOW(fd,2)-4; - + // as the length varies depending on the command used, just block unreasonably long strings mes_len_check(msg, len, CHAT_SIZE_MAX); @@ -11263,7 +11264,7 @@ void clif_parse_MoveToKafra(int fd, struct map_session_data *sd) if (pc_istrading(sd)) return; - + item_index = RFIFOW(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0])-2; item_amount = RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[1]); if (item_index < 0 || item_index >= MAX_INVENTORY || item_amount < 1) @@ -11445,7 +11446,7 @@ void clif_parse_CreateParty2(int fd, struct map_session_data *sd) void clif_parse_PartyInvite(int fd, struct map_session_data *sd) { struct map_session_data *t_sd; - + if(map[sd->bl.m].flag.partylock) {// Party locked. clif_displaymessage(fd, msg_txt(227)); @@ -11459,7 +11460,7 @@ void clif_parse_PartyInvite(int fd, struct map_session_data *sd) clif_noask_sub(sd, t_sd, 1); return; } - + party_invite(sd, t_sd); } @@ -11482,7 +11483,7 @@ void clif_parse_PartyInvite2(int fd, struct map_session_data *sd) clif_noask_sub(sd, t_sd, 1); return; } - + party_invite(sd, t_sd); } @@ -11578,7 +11579,7 @@ void clif_parse_PartyMessage(int fd, struct map_session_data* sd) if( is_atcommand(fd, sd, message, 1) ) return; - if( sd->sc.data[SC_BERSERK] || (sd->sc.data[SC_NOCHAT] && sd->sc.data[SC_NOCHAT]->val1&MANNER_NOCHAT) ) + if( sd->sc.data[SC_BERSERK] || sd->sc.data[SC__BLOODYLUST] || (sd->sc.data[SC_NOCHAT] && sd->sc.data[SC_NOCHAT]->val1&MANNER_NOCHAT) ) return; if( battle_config.min_chat_delay ) @@ -11611,7 +11612,7 @@ void clif_parse_PartyBookingRegisterReq(int fd, struct map_session_data* sd) short mapid = RFIFOW(fd,4); short job[PARTY_BOOKING_JOBS]; int i; - + for(i=0; i<PARTY_BOOKING_JOBS; i++) job[i] = RFIFOB(fd,6+i*2); @@ -11712,7 +11713,7 @@ void clif_parse_PartyBookingUpdateReq(int fd, struct map_session_data* sd) { short job[PARTY_BOOKING_JOBS]; int i; - + for(i=0; i<PARTY_BOOKING_JOBS; i++) job[i] = RFIFOW(fd,2+i*2); @@ -11737,7 +11738,7 @@ void clif_PartyBookingInsertNotify(struct map_session_data* sd, struct party_boo WBUFW(buf,36) = pb_ad->p_detail.mapid; for(i=0; i<PARTY_BOOKING_JOBS; i++) WBUFW(buf,38+i*2) = pb_ad->p_detail.job[i]; - + clif_send(buf, packet_len(0x809), &sd->bl, ALL_CLIENT); } @@ -11767,7 +11768,7 @@ void clif_PartyBookingDeleteNotify(struct map_session_data* sd, int index) WBUFW(buf,0) = 0x80b; WBUFL(buf,2) = index; - + clif_send(buf, packet_len(0x80b), &sd->bl, ALL_CLIENT); // Now UPDATE all client. } @@ -11904,22 +11905,22 @@ void clif_parse_GuildRequestInfo(int fd, struct map_session_data *sd) switch( RFIFOL(fd,2) ) { - case 0: // �M���h��{���A�����G�Ώ�� + case 0: // Basic Information Guild, hostile alliance information clif_guild_basicinfo(sd); clif_guild_allianceinfo(sd); break; - case 1: // �����o�[���X�g�A��E�����X�g + case 1: // Members list, list job title clif_guild_positionnamelist(sd); clif_guild_memberlist(sd); break; - case 2: // ��E�����X�g�A��E��X�g + case 2: // List job title, title information list clif_guild_positionnamelist(sd); clif_guild_positioninfolist(sd); break; - case 3: // �X�L�����X�g + case 3: // Skill list clif_guild_skillinfo(sd); break; - case 4: // �Ǖ�X�g + case 4: // Expulsion list clif_guild_expulsionlist(sd); break; default: @@ -11949,7 +11950,7 @@ void clif_parse_GuildChangePositionInfo(int fd, struct map_session_data *sd) void clif_parse_GuildChangeMemberPosition(int fd, struct map_session_data *sd) { int i; - + if(!sd->state.gmaster_flag) return; @@ -12034,7 +12035,7 @@ void clif_parse_GuildChangeNotice(int fd, struct map_session_data* sd) void clif_parse_GuildInvite(int fd,struct map_session_data *sd) { struct map_session_data *t_sd; - + if(map[sd->bl.m].flag.guildlock) { //Guild locked. clif_displaymessage(fd, msg_txt(228)); @@ -12113,7 +12114,7 @@ void clif_parse_GuildMessage(int fd, struct map_session_data* sd) if( is_atcommand(fd, sd, message, 1) ) return; - if( sd->sc.data[SC_BERSERK] || (sd->sc.data[SC_NOCHAT] && sd->sc.data[SC_NOCHAT]->val1&MANNER_NOCHAT) ) + if( sd->sc.data[SC_BERSERK] || sd->sc.data[SC__BLOODYLUST] || (sd->sc.data[SC_NOCHAT] && sd->sc.data[SC_NOCHAT]->val1&MANNER_NOCHAT) ) return; if( battle_config.min_chat_delay ) @@ -12135,7 +12136,7 @@ void clif_parse_GuildMessage(int fd, struct map_session_data* sd) void clif_parse_GuildRequestAlliance(int fd, struct map_session_data *sd) { struct map_session_data *t_sd; - + if(!sd->state.gmaster_flag) return; @@ -12152,7 +12153,7 @@ void clif_parse_GuildRequestAlliance(int fd, struct map_session_data *sd) clif_noask_sub(sd, t_sd, 3); return; } - + guild_reqalliance(sd,t_sd); } @@ -12209,7 +12210,7 @@ void clif_parse_GuildOpposition(int fd, struct map_session_data *sd) clif_noask_sub(sd, t_sd, 4); return; } - + guild_opposition(sd,t_sd); } @@ -12388,7 +12389,7 @@ void clif_parse_GMShift(int fd, struct map_session_data *sd) player_name = (char*)RFIFOP(fd,2); player_name[NAME_LENGTH-1] = '\0'; - + sprintf(command, "%cjumpto %s", atcommand_symbol, player_name); is_atcommand(fd, sd, command, 1); } @@ -12426,7 +12427,7 @@ void clif_parse_GMRecall(int fd, struct map_session_data *sd) player_name = (char*)RFIFOP(fd,2); player_name[NAME_LENGTH-1] = '\0'; - + sprintf(command, "%crecall %s", atcommand_symbol, player_name); is_atcommand(fd, sd, command, 1); } @@ -12485,9 +12486,9 @@ void clif_parse_GM_Monster_Item(int fd, struct map_session_data *sd) /// TODO: Any OPTION_* ? void clif_parse_GMHide(int fd, struct map_session_data *sd) { char cmd[6]; - + sprintf(cmd,"%chide",atcommand_symbol); - + is_atcommand(fd, sd, cmd, 1); } @@ -12601,7 +12602,7 @@ void clif_parse_PMIgnore(int fd, struct map_session_data* sd) WFIFOHEAD(fd,packet_len(0xd1)); WFIFOW(fd,0) = 0x0d1; WFIFOB(fd,2) = type; - + if( type == 0 ) { // Add name to ignore list (block) if (strcmp(wisp_server_name, nick) == 0) { @@ -12783,7 +12784,7 @@ void clif_friendslist_toggle(struct map_session_data *sd,int account_id, int cha WFIFOW(fd, 0) = 0x206; WFIFOL(fd, 2) = sd->status.friends[i].account_id; WFIFOL(fd, 6) = sd->status.friends[i].char_id; - WFIFOB(fd,10) = !online; //Yeah, a 1 here means "logged off", go figure... + WFIFOB(fd,10) = !online; //Yeah, a 1 here means "logged off", go figure... WFIFOSET(fd, packet_len(0x206)); } @@ -12805,7 +12806,7 @@ int clif_friendslist_toggle_sub(struct map_session_data *sd,va_list ap) void clif_friendslist_send(struct map_session_data *sd) { int i = 0, n, fd = sd->fd; - + // Send friends list WFIFOHEAD(fd, MAX_FRIENDS * 32 + 4); WFIFOW(fd, 0) = 0x201; @@ -12820,7 +12821,7 @@ void clif_friendslist_send(struct map_session_data *sd) WFIFOW(fd,2) = 4 + 32 * i; WFIFOSET(fd, WFIFOW(fd,2)); } - + for (n = 0; n < i; n++) { //Sending the online players if (map_charid2sd(sd->status.friends[n].char_id)) @@ -12938,7 +12939,7 @@ void clif_parse_FriendsListReply(int fd, struct map_session_data *sd) f_sd = map_id2sd(account_id); //The account id is the same as the bl.id of players. if (f_sd == NULL) return; - + if (reply == 0 || !( sd->friend_req == f_sd->status.char_id && f_sd->friend_req == sd->status.char_id ) ) clif_friendslist_reqack(f_sd, sd, 1); else { @@ -13365,7 +13366,7 @@ void clif_parse_AutoRevive(int fd, struct map_session_data *sd) if (!status_revive(&sd->bl, 100, 100)) return; - + clif_skill_nodamage(&sd->bl,&sd->bl,ALL_RESURRECTION,4,1); pc_delitem(sd, item_position, 1, 0, 1, LOG_TYPE_CONSUME); } @@ -13705,7 +13706,7 @@ void clif_parse_Mail_getattach(int fd, struct map_session_data *sd) clif_Mail_getattachment(fd, 1); return; } - + if( sd->mail.inbox.msg[i].item.nameid > 0 ) { struct item_data *data; @@ -13767,7 +13768,7 @@ void clif_parse_Mail_delete(int fd, struct map_session_data *sd) clif_Mail_delete(sd->fd, mail_id, 1); return; } - + intif_Mail_delete(sd->status.char_id, mail_id); } } @@ -13867,12 +13868,12 @@ void clif_parse_Mail_send(int fd, struct map_session_data *sd) safestrncpy(msg.send_name, sd->status.name, NAME_LENGTH); safestrncpy(msg.dest_name, (char*)RFIFOP(fd,4), NAME_LENGTH); safestrncpy(msg.title, (char*)RFIFOP(fd,28), MAIL_TITLE_LENGTH); - + if (body_len) safestrncpy(msg.body, (char*)RFIFOP(fd,69), body_len + 1); else memset(msg.body, 0x00, MAIL_BODY_LENGTH); - + msg.timestamp = time(NULL); if( !intif_Mail_send(sd->status.account_id, &msg) ) mail_deliveryfail(sd, &msg); @@ -14008,14 +14009,14 @@ void clif_parse_Auction_setitem(int fd, struct map_session_data *sd) clif_Auction_setitem(sd->fd, idx, true); return; } - + if( !pc_can_give_items(sd) || sd->status.inventory[idx].expire_time || !sd->status.inventory[idx].identify || !itemdb_canauction(&sd->status.inventory[idx],pc_get_group_level(sd)) ) { // Quest Item or something else clif_Auction_setitem(sd->fd, idx, true); return; } - + sd->auction.index = idx; sd->auction.amount = amount; clif_Auction_setitem(fd, idx + 2, false); @@ -14203,7 +14204,7 @@ void clif_parse_Auction_search(int fd, struct map_session_data* sd) int price = RFIFOL(fd,4); // FIXME: bug #5071 clif_parse_Auction_cancelreg(fd, sd); - + safestrncpy(search_text, (char*)RFIFOP(fd,8), sizeof(search_text)); intif_Auction_requestlist(sd->status.char_id, type, price, search_text, page); } @@ -14326,7 +14327,7 @@ void clif_parse_cashshop_buy(int fd, struct map_session_data *sd) fail = npc_cashshop_buylist(sd,points,count,item_list); #endif } - + clif_cashshop_ack(sd,fail); } @@ -14463,7 +14464,7 @@ void clif_parse_ViewPlayerEquip(int fd, struct map_session_data* sd) { int charid = RFIFOL(fd, 2); struct map_session_data* tsd = map_id2sd(charid); - + if (!tsd) return; @@ -14790,7 +14791,7 @@ void clif_mercenary_skillblock(struct map_session_data *sd) if( sd == NULL || (md = sd->md) == NULL ) return; - + fd = sd->fd; WFIFOHEAD(fd,4+37*MAX_MERCSKILL); WFIFOW(fd,0) = 0x29d; @@ -14978,7 +14979,7 @@ void clif_parse_BattleChat(int fd, struct map_session_data* sd) if( is_atcommand(fd, sd, message, 1) ) return; - if( sd->sc.data[SC_BERSERK] || (sd->sc.data[SC_NOCHAT] && sd->sc.data[SC_NOCHAT]->val1&MANNER_NOCHAT) ) + if( sd->sc.data[SC_BERSERK] || sd->sc.data[SC__BLOODYLUST] || (sd->sc.data[SC_NOCHAT] && sd->sc.data[SC_NOCHAT]->val1&MANNER_NOCHAT) ) return; if( battle_config.min_chat_delay ) @@ -15256,20 +15257,20 @@ void clif_parse_ItemListWindowSelected(int fd, struct map_session_data* sd) { int type = RFIFOL(fd,4); int flag = RFIFOL(fd,8); // Button clicked: 0 = Cancel, 1 = OK unsigned short* item_list = (unsigned short*)RFIFOP(fd,12); - + if( sd->state.trading || sd->npc_shopid ) return; - + if( flag == 0 || n == 0) { clif_menuskill_clear(sd); return; // Canceled by player. } - - if( sd->menuskill_id != SO_EL_ANALYSIS && sd->menuskill_id != GN_CHANGEMATERIAL ) { + + if( sd->menuskill_id != SO_EL_ANALYSIS && sd->menuskill_id != GN_CHANGEMATERIAL ) { clif_menuskill_clear(sd); return; // Prevent hacking. } - + switch( type ) { case 0: // Change Material skill_changematerial(sd,n,item_list); @@ -15280,7 +15281,7 @@ void clif_parse_ItemListWindowSelected(int fd, struct map_session_data* sd) { break; } clif_menuskill_clear(sd); - + return; } @@ -15291,10 +15292,10 @@ void clif_elemental_updatestatus(struct map_session_data *sd, int type) { struct elemental_data *ed; struct status_data *status; int fd; - + if( sd == NULL || (ed = sd->ed) == NULL ) return; - + fd = sd->fd; status = &ed->battle_status; WFIFOHEAD(fd,8); @@ -15321,13 +15322,13 @@ void clif_elemental_info(struct map_session_data *sd) { int fd; struct elemental_data *ed; struct status_data *status; - + if( sd == NULL || (ed = sd->ed) == NULL ) return; - + fd = sd->fd; status = &ed->battle_status; - + WFIFOHEAD(fd,22); WFIFOW(fd, 0) = 0x81d; WFIFOL(fd, 2) = ed->bl.id; @@ -15868,7 +15869,7 @@ void clif_parse_debug(int fd,struct map_session_data *sd) *------------------------------------------*/ int clif_elementalconverter_list(struct map_session_data *sd) { int i,c,view,fd; - + nullpo_ret(sd); @@ -15929,12 +15930,12 @@ int clif_spellbook_list(struct map_session_data *sd) for( i = 0, c = 0; i < MAX_INVENTORY; i ++ ) { if( itemdb_is_spellbook(sd->status.inventory[i].nameid) ) - { + { WFIFOW(fd, c * 2 + 4) = sd->status.inventory[i].nameid; c ++; } } - + if( c > 0 ) { WFIFOW(fd,2) = c * 2 + 4; @@ -15966,7 +15967,7 @@ int clif_magicdecoy_list(struct map_session_data *sd, int skill_lv, short x, sho WFIFOW(fd,0) = 0x1ad; // This is the official packet. [pakpil] for( i = 0, c = 0; i < MAX_INVENTORY; i ++ ) { - if( itemdb_is_element(sd->status.inventory[i].nameid) ) { + if( itemdb_is_element(sd->status.inventory[i].nameid) ) { WFIFOW(fd, c * 2 + 4) = sd->status.inventory[i].nameid; c ++; } @@ -16002,7 +16003,7 @@ int clif_poison_list(struct map_session_data *sd, int skill_lv) { WFIFOW(fd,0) = 0x1ad; // This is the official packet. [pakpil] for( i = 0, c = 0; i < MAX_INVENTORY; i ++ ) { - if( itemdb_is_poison(sd->status.inventory[i].nameid) ) { + if( itemdb_is_poison(sd->status.inventory[i].nameid) ) { WFIFOW(fd, c * 2 + 4) = sd->status.inventory[i].nameid; c ++; } @@ -16059,26 +16060,26 @@ int clif_skill_itemlistwindow( struct map_session_data *sd, int skill_id, int sk { #if PACKETVER >= 20090922 int fd; - + nullpo_ret(sd); - + sd->menuskill_id = skill_id; // To prevent hacking. sd->menuskill_val = skill_lv; - + if( skill_id == GN_CHANGEMATERIAL ) skill_lv = 0; // Changematerial - + fd = sd->fd; WFIFOHEAD(fd,packet_len(0x7e3)); WFIFOW(fd,0) = 0x7e3; WFIFOL(fd,2) = skill_lv; WFIFOL(fd,4) = 0; WFIFOSET(fd,packet_len(0x7e3)); - + #endif - + return 1; - + } /** * Sends a new status without a tick (currently used by the new mounts) @@ -16139,7 +16140,7 @@ void clif_msgtable_num(int fd, int line, int num) { * RFIFOL(fd,2) - flag (currently not used) *------------------------------------------*/ void clif_parse_SkillSelectMenu(int fd, struct map_session_data *sd) { - + if( sd->menuskill_id != SC_AUTOSHADOWSPELL ) return; @@ -16148,9 +16149,9 @@ void clif_parse_SkillSelectMenu(int fd, struct map_session_data *sd) { clif_menuskill_clear(sd); return; } - + skill_select_menu(sd,RFIFOW(fd,6)); - + clif_menuskill_clear(sd); } /*========================================== @@ -16178,24 +16179,24 @@ void clif_talisman(struct map_session_data *sd,short type) void clif_parse_MoveItem(int fd, struct map_session_data *sd) { #if PACKETVER >= 20111122 int index; - + /* can't move while dead. */ if(pc_isdead(sd)) { return; } - + index = RFIFOW(fd,2)-2; - + if (index < 0 || index >= MAX_INVENTORY) return; - + if ( sd->status.inventory[index].favorite && RFIFOB(fd, 4) == 1 ) sd->status.inventory[index].favorite = 0; else if( RFIFOB(fd, 4) == 0 ) sd->status.inventory[index].favorite = 1; else return;/* nothing to do. */ - + clif_favorite_item(sd, index); #endif } @@ -16205,7 +16206,7 @@ void clif_parse_MoveItem(int fd, struct map_session_data *sd) { /// 0900 <index>.W <favorite>.B void clif_favorite_item(struct map_session_data* sd, unsigned short index) { int fd = sd->fd; - + WFIFOHEAD(fd,packet_len(0x908)); WFIFOW(fd,0) = 0x908; WFIFOW(fd,2) = index+2; @@ -16220,19 +16221,19 @@ void clif_snap( struct block_list *bl, short x, short y ) { WBUFL(buf,2) = bl->id; WBUFW(buf,6) = x; WBUFW(buf,8) = y; - + clif_send(buf,packet_len(0x8d2),bl,AREA); } void clif_monster_hp_bar( struct mob_data* md, int fd ) { -#if PACKETVER >= 20120404 +#if PACKETVER >= 20120404 WFIFOHEAD(fd,packet_len(0x977)); - + WFIFOW(fd,0) = 0x977; WFIFOL(fd,2) = md->bl.id; WFIFOL(fd,6) = md->status.hp; WFIFOL(fd,10) = md->status.max_hp; - + WFIFOSET(fd,packet_len(0x977)); #endif } @@ -16303,11 +16304,11 @@ static int clif_parse(int fd) WFIFOW(fd,0) = 0x6a; WFIFOB(fd,2) = 3; // Rejected from Server WFIFOSET(fd,packet_len(0x6a)); - + #ifdef DUMP_INVALID_PACKET ShowDump(RFIFOP(fd,0), RFIFOREST(fd)); #endif - + RFIFOSKIP(fd, RFIFOREST(fd)); set_eof(fd); return 0; @@ -16342,7 +16343,7 @@ static int clif_parse(int fd) } if ((int)RFIFOREST(fd) < packet_len) return 0; // not enough data received to form the packet - + if( packet_db[packet_ver][cmd].func == clif_parse_debug ) packet_db[packet_ver][cmd].func(fd, sd); else if( packet_db[packet_ver][cmd].func != NULL ) { @@ -16355,7 +16356,7 @@ static int clif_parse(int fd) if( sd && session[sd->fd]->flag.eof ) ; //No more packets accepted else - packet_db[packet_ver][cmd].func(fd, sd); + packet_db[packet_ver][cmd].func(fd, sd); } #ifdef DUMP_UNKNOWN_PACKET else { @@ -16422,7 +16423,7 @@ static int packetdb_readdb(void) #endif #if PACKETVER < 2 3, 28, 19, 11, 3, -1, 9, 5, 52, 51, 56, 58, 41, 2, 6, 6, -#elif PACKETVER < 20071106 // 78-7b �T���ȍ~ lv99�G�t�F�N�g�p +#elif PACKETVER < 20071106 // 78-7b Lv99 effect for later Kameshima 3, 28, 19, 11, 3, -1, 9, 5, 54, 53, 58, 60, 41, 2, 6, 6, #elif PACKETVER <= 20081217 // change in 0x78 and 0x7c 3, 28, 19, 11, 3, -1, 9, 5, 55, 53, 58, 60, 42, 2, 6, 6, @@ -16457,7 +16458,7 @@ static int packetdb_readdb(void) 6, 3,106, 10, 10, 34, 0, 6, 8, 4, 4, 4, 29, -1, 10, 6, #if PACKETVER < 1 90, 86, 24, 6, 30,102, 8, 4, 8, 4, 14, 10, -1, 6, 2, 6, -#else // 196 comodo�ȍ~ ��ԕ\���A�C�R���p +#else // 196 comodo icon status display for later 90, 86, 24, 6, 30,102, 9, 4, 8, 4, 14, 10, -1, 6, 2, 6, #endif #if PACKETVER < 20081126 @@ -16905,7 +16906,7 @@ static int packetdb_readdb(void) clif_config.packet_db_ver = MAX_PACKET_VER; else // to manually set the packet DB version clif_config.packet_db_ver = cap_value(atoi(w2), 0, MAX_PACKET_VER); - + continue; } } @@ -16948,7 +16949,7 @@ static int packetdb_readdb(void) // set the identifying cmd for the packet_db version if (strcmp(str[2],"wanttoconnection")==0) clif_config.connect_cmd[packet_ver] = cmd; - + if(str[3]==NULL){ ShowError("packet_db: packet error\n"); exit(EXIT_FAILURE); @@ -16979,7 +16980,7 @@ static int packetdb_readdb(void) if (!clif_config.connect_cmd[clif_config.packet_db_ver]) { //Locate the nearest version that we still support. [Skotlex] for(j = clif_config.packet_db_ver; j >= 0 && !clif_config.connect_cmd[j]; j--); - + clif_config.packet_db_ver = j?j:MAX_PACKET_VER; } ShowStatus("Done reading packet database from '"CL_WHITE"%s"CL_RESET"'. Using default packet version: "CL_WHITE"%d"CL_RESET".\n", "packet_db.txt", clif_config.packet_db_ver); @@ -17017,7 +17018,7 @@ int do_init_clif(void) { add_timer_func_list(clif_delayquit, "clif_delayquit"); delay_clearunit_ers = ers_new(sizeof(struct block_list),"clif.c::delay_clearunit_ers",ERS_OPT_CLEAR); - + return 0; } |