--.--.-- *--*
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

disguise修正点

2010.12.07 *Tue*
popori氏の disguiseを10-13aに対応させる場合の修正点
(日記コメ返信用)

map.h
#define disguised(bl) ((bl)->type == BL_PC && ((struct map_session_data*)bl)->state.disguise_id)

clif.c

/*==========================================
*
*------------------------------------------
*/
void clif_spawnpc(struct map_session_data *sd)
{

~~~~~~~ 略 ~~~~~~~
#elif PACKETVER < 23
if(sd->state.disguise_id) {
memset(WFIFOP(sd->fd,0),0,packet_db[0x7c].len);
WFIFOW(sd->fd,0)=0x7c;
WFIFOB(sd->fd,2)=5;
WFIFOL(sd->fd,3)=sd->bl.id;
WFIFOW(sd->fd,7)=sd->speed;
WFIFOW(sd->fd,13)=sd->sc.option;
WFIFOW(sd->fd,21)=sd->state.disguise_id;
WFIFOPOS(sd->fd,37,sd->bl.x,sd->bl.y,sd->dir);
clif_send(WFIFOP(sd->fd,0),packet_db[0x7c].len,&sd->bl,AREA_WOS);
WFIFOL(sd->fd,3)=-sd->bl.id;
clif_send(WFIFOP(sd->fd,0),packet_db[0x7c].len,&sd->bl,SELF);
} else {
WFIFOW(sd->fd,0)=0x2ed;
WFIFOW(sd->fd,55)=(sd->status.base_level>99?
(sd->status.base_level<150?99:150): sd->status.base_level);
clif_send(WFIFOP(sd->fd,0),packet_db[0x2ed].len,&sd->bl,AREA_WOS);
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

/*==========================================
*
*------------------------------------------
*/
void clif_move(struct block_list *bl)
{

~~~~~~~ 略 ~~~~~~~

#if PACKETVER < 23
ud = unit_bl2ud(bl);
if(ud && ud->state.change_speed) {
int len;

// 速度が変更されたときは古い歩行パケットを送信する
if(bl->type == BL_PC) {
struct map_session_data *sd = (struct map_session_data *)bl;
int fd = sd->fd;
len = clif_set007b(sd,WFIFOP(fd,0));
clif_send(WFIFOP(fd,0),len,&sd->bl,AREA_WOS);
if(disguised(bl)) {
WFIFOL(fd,3)=-sd->bl.id;
clif_send(WFIFOP(fd,0),len,&sd->bl,SELF);
}
} else if(bl->type == BL_MOB) {
struct mob_data *md = (struct mob_data *)bl;
len = clif_mob007b(md,buf);
clif_send(buf,len,&md->bl,AREA_WOS);
} else if(bl->type == BL_PET) {
struct pet_data *pd = (struct pet_data *)bl;
len = clif_pet007b(pd,buf);
clif_send(buf,len,&pd->bl,AREA_WOS);
} else if(bl->type == BL_HOM) {
struct homun_data *hd = (struct homun_data *)bl;
len = clif_hom007b(hd,buf);
clif_send(buf,len,&hd->bl,AREA_WOS);
} else if(bl->type == BL_MERC) {
struct merc_data *mcd = (struct merc_data *)bl;
len = clif_merc007b(mcd,buf);
clif_send(buf,len,&mcd->bl,AREA_WOS);
}
ud->state.change_speed = 0;
}

WBUFW(buf,0)=0x86;
WBUFL(buf,2)=bl->id;
WBUFPOS2(buf,6,bl->x,bl->y,ud->to_x,ud->to_y,8,8);
WBUFL(buf,12)=gettick();
clif_send(buf, packet_db[0x86].len, bl, AREA_WOS);

if(disguised(bl)) {
struct map_session_data *sd = (struct map_session_data *)bl;
WBUFL(buf,2)=-sd->bl.id;
clif_send(buf, packet_db[0x86].len, bl,SELF);
}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

/*==========================================
*
*------------------------------------------
*/
static int clif_set0078(struct map_session_data *sd,unsigned char *buf)
{
~~~~~~~ 略 ~~~~~~~

#elif PACKETVER < 23
WBUFW(buf,0)=0x2ee;
WBUFL(buf,2)=sd->bl.id;
WBUFW(buf,6)=sd->speed;
WBUFW(buf,8)=sd->sc.opt1;
WBUFW(buf,10)=sd->sc.opt2;
WBUFL(buf,12)=sd->sc.option;
if(sd->state.disguise_id)
WBUFW(buf,16)=sd->state.disguise_id;
else
WBUFW(buf,16)=sd->view_class;
WBUFW(buf,18)=sd->status.hair;
if(sd->equip_index[9] >= 0
&& sd->inventory_data[sd->equip_index[9]]
&& sd->view_class != 22
&& sd->view_class != 26
&& sd->view_class != 27
&& sd->view_class != 4048) {
if(sd->inventory_data[sd->equip_index[9]]->view_id > 0)
WBUFW(buf,20)=sd->inventory_data[sd->equip_index[9]]->view_id;
else
WBUFW(buf,20)=sd->status.inventory[sd->equip_index[9]].nameid;
}
else
WBUFW(buf,20)=0;
if(sd->equip_index[8] >= 0
&& sd->equip_index[8] != sd->equip_index[9]
&& sd->inventory_data[sd->equip_index[8]]
&& sd->view_class != 22
&& sd->view_class != 26
&& sd->view_class != 27
&& sd->view_class != 4048) {
if(sd->inventory_data[sd->equip_index[8]]->view_id > 0)
WBUFW(buf,22)=sd->inventory_data[sd->equip_index[8]]->view_id;
else
WBUFW(buf,22)=sd->status.inventory[sd->equip_index[8]].nameid;
}
else
WBUFW(buf,22)=0;
WBUFW(buf,24)=sd->status.head_bottom;
WBUFW(buf,26)=sd->status.head_top;
WBUFW(buf,28)=sd->status.head_mid;
WBUFW(buf,30)=sd->status.hair_color;
WBUFW(buf,32)=sd->status.clothes_color;
WBUFW(buf,34)=sd->head_dir;
WBUFL(buf,36)=sd->status.guild_id;
WBUFW(buf,40)=sd->guild_emblem_id;
WBUFW(buf,42)=sd->status.manner;
WBUFL(buf,44)=sd->sc.opt3;
WBUFB(buf,48)=(unsigned char)sd->status.karma;
WBUFB(buf,49)=sd->sex;
WBUFPOS(buf,50,sd->bl.x,sd->bl.y,sd->dir);
WBUFB(buf,53)=5;
WBUFB(buf,54)=5;
WBUFB(buf,55)=sd->state.dead_sit;
WBUFW(buf,56)=(sd->s_class.upper<3 ? (sd->status.base_level>99)?
99:sd->status.base_level : (sd->status.base_level>150) ?
150:sd->status.base_level );
WBUFW(buf,58)=0;

return packet_db[0x2ee].len;

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

/*==========================================
*
*------------------------------------------
*/
static int clif_set007b(struct map_session_data *sd,unsigned char *buf)
{


~~~~~~~ 略 ~~~~~~~

#elif PACKETVER < 23
WBUFW(buf,0)=0x2ec;
WBUFB(buf,2)=0;
WBUFL(buf,3)=sd->bl.id;
WBUFW(buf,7)=sd->speed;
WBUFW(buf,9)=sd->sc.opt1;
WBUFW(buf,11)=sd->sc.opt2;
WBUFL(buf,13)=sd->sc.option;
if(sd->state.disguise_id){
WBUFW(buf,17)=sd->state.disguise_id;
WBUFW(buf,19)=mob_get_hair(sd->state.disguise_id);
WBUFW(buf,21)=mob_get_weapon(sd->state.disguise_id);
WBUFW(buf,23)=mob_get_shield(sd->state.disguise_id);
WBUFW(buf,25)=mob_get_head_bottom(sd->state.disguise_id);
WBUFW(buf,31)=mob_get_head_top(sd->state.disguise_id);
WBUFW(buf,33)=mob_get_head_mid(sd->state.disguise_id);
WBUFW(buf,35)=mob_get_hair_color(sd->state.disguise_id);
WBUFW(buf,37)=mob_get_clothes_color(sd->state.disguise_id);
WBUFB(buf,54)=mob_get_sex(sd->state.disguise_id);
} else {
WBUFW(buf,17)=sd->view_class;
WBUFW(buf,19)=sd->status.hair;
if(sd->equip_index[9] >= 0
&& sd->inventory_data[sd->equip_index[9]]
&& sd->view_class != 22
&& sd->view_class != 26
&& sd->view_class != 27
&& sd->view_class != 4048) {
if(sd->inventory_data[sd->equip_index[9]]->view_id > 0)
WBUFW(buf,21)=sd->inventory_data[sd->equip_index[9]]->view_id;
else
WBUFW(buf,21)=sd->status.inventory[sd->equip_index[9]].nameid;
}
else
WBUFW(buf,21)=0;
if(sd->equip_index[8] >= 0
&& sd->equip_index[8] != sd->equip_index[9]
&& sd->inventory_data[sd->equip_index[8]]
&& sd->view_class != 22
&& sd->view_class != 26
&& sd->view_class != 27
&& sd->view_class != 4048) {
if(sd->inventory_data[sd->equip_index[8]]->view_id > 0)
WBUFW(buf,23)=sd->inventory_data[sd->equip_index[8]]->view_id;
else
WBUFW(buf,23)=sd->status.inventory[sd->equip_index[8]].nameid;
}
else
WBUFW(buf,23)=0;
WBUFW(buf,25)=sd->status.head_bottom;
WBUFW(buf,31)=sd->status.head_top;
WBUFW(buf,33)=sd->status.head_mid;
WBUFW(buf,35)=sd->status.hair_color;
WBUFW(buf,37)=sd->status.clothes_color;
WBUFB(buf,54)=sd->sex;
}
WBUFL(buf,27)=gettick();
WBUFW(buf,39)=sd->head_dir;
WBUFL(buf,41)=sd->status.guild_id;
WBUFW(buf,45)=sd->guild_emblem_id;
WBUFW(buf,47)=sd->status.manner;
WBUFL(buf,49)=sd->sc.opt3;
WBUFB(buf,53)=(unsigned char)sd->status.karma;
WBUFPOS2(buf,55,sd->bl.x,sd->bl.y,sd->ud.to_x,sd->ud.to_y,8,8);
WBUFB(buf,61)=0;
WBUFB(buf,62)=0;
WBUFW(buf,63)=(sd->s_class.upper<3 ? (sd->status.base_level>99)?
99:sd->status.base_level : (sd->status.base_level>150) ?
150:sd->status.base_level );
WBUFW(buf,65)=0;

return packet_db[0x2ec].len;

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

/*==========================================
*
*------------------------------------------
*/
static void clif_parse_GetCharNameRequest(int fd,struct map_session_data *sd, int cmd)
{
struct block_list *bl;
int account_id;

account_id = RFIFOL(fd,GETPACKETPOS(cmd,0));
bl=map_id2bl(account_id);

- if(bl==NULL)
- return;
+ if(bl==NULL){
+ bl=map_id2bl(-account_id);
+ if(bl==NULL)
+ return;
+ }



関連記事
| Auriga |

COMMENT

Comment Form


秘密にする
 


TRACKBACK

TrackBack List



プロフィール

Author:みのり

すごく面倒臭がりで大雑把です。
なので、すぐ楽をしようとして
ツールを作り始めます。
ツールを作る時間と手作業で費やす時間
はたしてどちらが短いのか……


-構築環境-

Auriga0945 MySQL 5.5
with 2011-12-20bRagexeRE

3CeAM rev525
with 2010-07-30aRagexeRE



カテゴリ

未分類 (9)
RagexeRE (9)
eAthena (1)
Auriga (5)
ツール:eAthena用 (4)
ツール:Auriga用 (6)
ツール:その他 (14)
はじめてのAurigaスクリプト (8)
はじめてのAurigaスクリプト基本編 (21)
はじめてのAurigaスクリプト応用編 (7)
Aurigaスクリプト (3)
本鯖 (7)
Aurigaスクリプト:冒険者アカデミー (6)
ドラクエ10 (2)
新生FF14 (3)
EVE Online (2)



最新記事



最新コメント



月別アーカイブ



検索フォーム



リンク

このブログをリンクに追加する



ブロとも申請フォーム

この人とブロともになる



QRコード

QR



12
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Copyright © Rocco di Forte All Rights Reserved.
テンプレート配布者: サリイ  ・・・  素材: HELIUM  ・・・ 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。