📄 clif.c
字号:
break;
case SP_DEX:
WFIFOW(fd,0)=0x141;
WFIFOL(fd,2)=type;
WFIFOL(fd,6)=sd->status.dex;
WFIFOL(fd,10)=sd->paramb[4] + sd->parame[4];
len=14;
break;
case SP_LUK:
WFIFOW(fd,0)=0x141;
WFIFOL(fd,2)=type;
WFIFOL(fd,6)=sd->status.luk;
WFIFOL(fd,10)=sd->paramb[5] + sd->parame[5];
len=14;
break;
case SP_CARTINFO:
WFIFOW(fd,0)=0x121;
WFIFOW(fd,2)=sd->cart_num;
WFIFOW(fd,4)=sd->cart_max_num;
WFIFOL(fd,6)=sd->cart_weight;
WFIFOL(fd,10)=sd->cart_max_weight;
len=14;
break;
default:
if(battle_config.error_log)
printf("clif_updatestatus : make %d routine\n",type);
return 1;
}
WFIFOSET(fd,len);
return 0;
}
/*==========================================
*
*------------------------------------------
*/
int clif_changelook(struct block_list *bl,int type,int val)
{
unsigned char buf[32];
struct map_session_data *sd = NULL;
if(bl->type == BL_PC)
sd = (struct map_session_data *)bl;
#if PACKETVER < 4
if(sd && (type == LOOK_WEAPON || type == LOOK_SHIELD) && sd->view_class == 22)
val =0;
WBUFW(buf,0)=0xc3;
WBUFL(buf,2)=bl->id;
WBUFB(buf,6)=type;
WBUFB(buf,7)=val;
clif_send(buf,packet_len_table[0xc3],bl,AREA);
#else
if(sd && (type == LOOK_WEAPON || type == LOOK_SHIELD || type == LOOK_SHOES)) {
WBUFW(buf,0)=0x1d7;
WBUFL(buf,2)=bl->id;
if(type == LOOK_SHOES) {
WBUFB(buf,6)=9;
if(sd->equip_index[2] >= 0 && sd->inventory_data[sd->equip_index[2]]) {
if(sd->inventory_data[sd->equip_index[2]]->view_id > 0)
WBUFW(buf,7)=sd->inventory_data[sd->equip_index[2]]->view_id;
else
WBUFW(buf,7)=sd->status.inventory[sd->equip_index[2]].nameid;
}
else
WBUFW(buf,7)=0;
WBUFW(buf,9)=0;
}
else {
WBUFB(buf,6)=2;
if(sd->equip_index[9] >= 0 && sd->inventory_data[sd->equip_index[9]] && sd->view_class != 22) {
if(sd->inventory_data[sd->equip_index[9]]->view_id > 0)
WBUFW(buf,7)=sd->inventory_data[sd->equip_index[9]]->view_id;
else
WBUFW(buf,7)=sd->status.inventory[sd->equip_index[9]].nameid;
}
else
WBUFW(buf,7)=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) {
if(sd->inventory_data[sd->equip_index[8]]->view_id > 0)
WBUFW(buf,9)=sd->inventory_data[sd->equip_index[8]]->view_id;
else
WBUFW(buf,9)=sd->status.inventory[sd->equip_index[8]].nameid;
}
else
WBUFW(buf,9)=0;
}
clif_send(buf,packet_len_table[0x1d7],bl,AREA);
}
else {
WBUFW(buf,0)=0xc3;
WBUFL(buf,2)=bl->id;
WBUFB(buf,6)=type;
WBUFB(buf,7)=val;
clif_send(buf,packet_len_table[0xc3],bl,AREA);
}
#endif
return 0;
}
/*==========================================
*
*------------------------------------------
*/
int clif_initialstatus(struct map_session_data *sd)
{
int fd=sd->fd;
unsigned char *buf = WFIFOP(fd,0);
WBUFW(buf,0)=0xbd;
WBUFW(buf,2)=sd->status.status_point;
WBUFB(buf,4)=(sd->status.str > 255)? 255:sd->status.str;
WBUFB(buf,5)=pc_need_status_point(sd,SP_STR);
WBUFB(buf,6)=(sd->status.agi > 255)? 255:sd->status.agi;
WBUFB(buf,7)=pc_need_status_point(sd,SP_AGI);
WBUFB(buf,8)=(sd->status.vit > 255)? 255:sd->status.vit;
WBUFB(buf,9)=pc_need_status_point(sd,SP_VIT);
WBUFB(buf,10)=(sd->status.int_ > 255)? 255:sd->status.int_;
WBUFB(buf,11)=pc_need_status_point(sd,SP_INT);
WBUFB(buf,12)=(sd->status.dex > 255)? 255:sd->status.dex;
WBUFB(buf,13)=pc_need_status_point(sd,SP_DEX);
WBUFB(buf,14)=(sd->status.luk > 255)? 255:sd->status.luk;
WBUFB(buf,15)=pc_need_status_point(sd,SP_LUK);
WBUFW(buf,16) = sd->base_atk + sd->watk;
WBUFW(buf,18) = sd->watk2; //atk bonus
WBUFW(buf,20) = sd->matk1;
WBUFW(buf,22) = sd->matk2;
WBUFW(buf,24) = sd->def; // def
WBUFW(buf,26) = sd->def2;
WBUFW(buf,28) = sd->mdef; // mdef
WBUFW(buf,30) = sd->mdef2;
WBUFW(buf,32) = sd->hit;
WBUFW(buf,34) = sd->flee;
WBUFW(buf,36) = sd->flee2/10;
WBUFW(buf,38) = sd->critical/10;
WBUFW(buf,40) = sd->status.karma;
WBUFW(buf,42) = sd->status.manner;
WFIFOSET(fd,packet_len_table[0xbd]);
clif_updatestatus(sd,SP_STR);
clif_updatestatus(sd,SP_AGI);
clif_updatestatus(sd,SP_VIT);
clif_updatestatus(sd,SP_INT);
clif_updatestatus(sd,SP_DEX);
clif_updatestatus(sd,SP_LUK);
clif_updatestatus(sd,SP_ATTACKRANGE);
clif_updatestatus(sd,SP_ASPD);
return 0;
}
/*==========================================
*栴憰旛
*------------------------------------------
*/
int clif_arrowequip(struct map_session_data *sd,int val)
{
int fd=sd->fd;
WFIFOW(fd,0)=0x013c;
WFIFOW(fd,2)=val+2;//栴偺傾僀僥儉ID
WFIFOSET(fd,packet_len_table[0x013c]);
return 0;
}
/*==========================================
*
*------------------------------------------
*/
int clif_arrow_fail(struct map_session_data *sd,int type)
{
int fd=sd->fd;
WFIFOW(fd,0)=0x013b;
WFIFOW(fd,2)=type;
WFIFOSET(fd,packet_len_table[0x013b]);
return 0;
}
/*==========================================
* 嶌惉壜擻 栴儕僗僩憲怣
*------------------------------------------
*/
int clif_arrow_create_list(struct map_session_data *sd)
{
int i,c,view;
int fd=sd->fd;
WFIFOW(fd,0)=0x1ad;
for(i=0,c=0;i<MAX_SKILL_ARROW_DB;i++){
if(skill_arrow_db[i].nameid > 0 && pc_search_inventory(sd,skill_arrow_db[i].nameid)>=0){
if((view = itemdb_viewid(skill_arrow_db[i].nameid)) > 0)
WFIFOW(fd,c*2+4) = view;
else
WFIFOW(fd,c*2+4) = skill_arrow_db[i].nameid;
c++;
}
}
WFIFOW(fd,2)=c*2+4;
WFIFOSET(fd,WFIFOW(fd,2));
if(c > 0) sd->state.make_arrow_flag = 1;
return 0;
}
/*==========================================
*
*------------------------------------------
*/
int clif_statusupack(struct map_session_data *sd,int type,int ok,int val)
{
int fd=sd->fd;
WFIFOW(fd,0)=0xbc;
WFIFOW(fd,2)=type;
WFIFOB(fd,4)=ok;
WFIFOB(fd,5)=val;
WFIFOSET(fd,packet_len_table[0xbc]);
return 0;
}
/*==========================================
*
*------------------------------------------
*/
int clif_equipitemack(struct map_session_data *sd,int n,int pos,int ok)
{
int fd=sd->fd;
WFIFOW(fd,0)=0xaa;
WFIFOW(fd,2)=n+2;
WFIFOW(fd,4)=pos;
WFIFOB(fd,6)=ok;
WFIFOSET(fd,packet_len_table[0xaa]);
return 0;
}
/*==========================================
*
*------------------------------------------
*/
int clif_unequipitemack(struct map_session_data *sd,int n,int pos,int ok)
{
int fd=sd->fd;
WFIFOW(fd,0)=0xac;
WFIFOW(fd,2)=n+2;
WFIFOW(fd,4)=pos;
WFIFOB(fd,6)=ok;
WFIFOSET(fd,packet_len_table[0xac]);
return 0;
}
/*==========================================
*
*------------------------------------------
*/
int clif_misceffect(struct block_list* bl,int type)
{
char buf[32];
WBUFW(buf,0) = 0x19b;
WBUFL(buf,2) = bl->id;
WBUFL(buf,6) = type;
clif_send(buf,packet_len_table[0x19b],bl,AREA);
return 0;
}
/*==========================================
* 昞帵僆僾僔儑儞曄峏
*------------------------------------------
*/
int clif_changeoption(struct block_list* bl)
{
char buf[32];
short option = *battle_get_option(bl);
struct status_change *sc_data = battle_get_sc_data(bl);
static const int omask[]={ 0x10,0x20 };
static const int scnum[]={ SC_FALCON, SC_RIDING };
int i;
WBUFW(buf,0) = 0x119;
WBUFL(buf,2) = bl->id;
WBUFW(buf,6) = *battle_get_opt1(bl);
WBUFW(buf,8) = *battle_get_opt2(bl);
WBUFW(buf,10) = option;
WBUFB(buf,12) = 0; // ??
clif_send(buf,packet_len_table[0x119],bl,AREA);
// 傾僀僐儞偺昞帵
for(i=0;i<sizeof(omask)/sizeof(omask[0]);i++){
if( option&omask[i] ){
if( sc_data[scnum[i]].timer==-1)
skill_status_change_start(bl,scnum[i],0,0,0,0,0,0);
}else{
skill_status_change_end(bl,scnum[i],-1);
}
}
return 0;
}
/*==========================================
*
*------------------------------------------
*/
int clif_useitemack(struct map_session_data *sd,int index,int amount,int ok)
{
if(!ok) {
int fd=sd->fd;
WFIFOW(fd,0)=0xa8;
WFIFOW(fd,2)=index+2;
WFIFOW(fd,4)=amount;
WFIFOB(fd,6)=ok;
WFIFOSET(fd,packet_len_table[0xa8]);
}
else {
#if PACKETVER < 3
int fd=sd->fd;
WFIFOW(fd,0)=0xa8;
WFIFOW(fd,2)=index+2;
WFIFOW(fd,4)=amount;
WFIFOB(fd,6)=ok;
WFIFOSET(fd,packet_len_table[0xa8]);
#else
char buf[32];
WBUFW(buf,0)=0x1c8;
WBUFW(buf,2)=index+2;
if(sd->inventory_data[index] && sd->inventory_data[index]->view_id > 0)
WBUFW(buf,4)=sd->inventory_data[index]->view_id;
else
WBUFW(buf,4)=sd->status.inventory[index].nameid;
WBUFL(buf,6)=sd->bl.id;
WBUFW(buf,10)=amount;
WBUFB(buf,12)=ok;
clif_send(buf,packet_len_table[0x1c8],&sd->bl,AREA);
#endif
}
return 0;
}
/*==========================================
*
*------------------------------------------
*/
int clif_createchat(struct map_session_data *sd,int fail)
{
int fd=sd->fd;
WFIFOW(fd,0)=0xd6;
WFIFOB(fd,2)=fail;
WFIFOSET(fd,packet_len_table[0xd6]);
return 0;
}
/*==========================================
*
*------------------------------------------
*/
int clif_dispchat(struct chat_data *cd,int fd)
{
char buf[128]; // 嵟戝title(60僶僀僩)+17
if(cd==NULL || *cd->owner==NULL)
return 1;
WBUFW(buf,0)=0xd7;
WBUFW(buf,2)=strlen(cd->title)+17;
WBUFL(buf,4)=(*cd->owner)->id;
WBUFL(buf,8)=cd->bl.id;
WBUFW(buf,12)=cd->limit;
WBUFW(buf,14)=cd->users;
WBUFB(buf,16)=cd->pub;
strcpy(WBUFP(buf,17),cd->title);
if(fd){
memcpy(WFIFOP(fd,0),buf,WBUFW(buf,2));
WFIFOSET(fd,WBUFW(buf,2));
} else {
clif_send(buf,WBUFW(buf,2),*cd->owner,AREA_WOSC);
}
return 0;
}
/*==========================================
* chat偺忬懺曄峏惉岟
* 奜晹偺恖梡偲柦椷僐乕僪(d7->df)偑堘偆偩偗
*------------------------------------------
*/
int clif_changechatstatus(struct chat_data *cd)
{
char buf[128]; // 嵟戝title(60僶僀僩)+17
if(cd==NULL || cd->usersd[0]==NULL)
return 1;
WBUFW(buf,0)=0xdf;
WBUFW(buf,2)=strlen(cd->title)+17;
WBUFL(buf,4)=cd->usersd[0]->bl.id;
WBUFL(buf,8)=cd->bl.id;
WBUFW(buf,12)=cd->limit;
WBUFW(buf,14)=cd->users;
WBUFB(buf,16)=cd->pub;
strcpy(WBUFP(buf,17),cd->title);
clif_send(buf,WBUFW(buf,2),&cd->usersd[0]->bl,CHAT);
return 0;
}
/*==========================================
*
*------------------------------------------
*/
int clif_clearchat(struct chat_data *cd,int fd)
{
char buf[32];
WBUFW(buf,0)=0xd8;
WBUFL(buf,2)=cd->bl.id;
if(fd){
memcpy(WFIFOP(fd,0),buf,packet_len_table[0xd8]);
WFIFOSET(fd,packet_len_table[0xd8]);
} else {
clif_send(buf,packet_len_table[0xd8],*cd->owner,AREA_WOSC);
}
return 0;
}
/*==========================================
*
*------------------------------------------
*/
int clif_joinchatfail(struct map_session_data *sd,int fail)
{
int fd=sd->fd;
WFIFOW(fd,0)=0xda;
WFIFOB(fd,2)=fail;
WFIFOSET(fd,packet_len_table[0xda]);
return 0;
}
/*==========================================
*
*------------------------------------------
*/
int clif_joinchatok(struct map_session_data *sd,struct chat_data* cd)
{
int fd=sd->fd;
int i;
WFIFOW(fd,0)=0xdb;
WFIFOW(fd,2)=8+(28*cd->users);
WFIFOL(fd,4)=cd->bl.id;
for(i = 0;i < cd->users;i++){
WFIFOL(fd,8+i*28) = (i!=0)||((*cd->owner)->type==BL_NPC);
memcpy(WFIFOP(fd,8+i*28+4),cd->usersd[i]->status.name,24);
}
WFIFOSET(fd,WFIFOW(fd,2));
return 0;
}
/*==========================================
*
*------------------------------------------
*/
int clif_addchat(struct chat_data* cd,struct map_session_data *sd)
{
char buf[32];
WBUFW(buf, 0) = 0x0dc;
WBUFW(buf, 2) = cd->users;
memcpy(WBUFP(buf, 4),sd->status.name,24);
clif_send(buf,packet_len_table[0xdc],&sd->bl,CHAT_WOS);
return 0;
}
/*==========================================
*
*------------------------------------------
*/
int clif_changechatowner(struct chat_data* cd,struct map_session_data *sd)
{
char buf[64];
WBUFW(buf, 0) = 0xe1;
WBUFL(buf, 2) = 1;
memcpy(WBUFP(buf,6),cd->usersd[0]->status.name,24);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -