📄 clif.c
字号:
WBUFPOS(buf,36,md->bl.x,md->bl.y);
clif_send(buf,packet_len_table[0x7c],&md->bl,AREA);
}
len = clif_mob0078(md,buf);
clif_send(buf,len,&md->bl,AREA);
return 0;
}
// pet
/*==========================================
*
*------------------------------------------
*/
int clif_spawnpet(struct pet_data *pd)
{
unsigned char buf[64];
int len;
if(mob_get_viewclass(pd->class) >= MAX_PC_CLASS) {
memset(buf,0,packet_len_table[0x7c]);
WBUFW(buf,0)=0x7c;
WBUFL(buf,2)=pd->bl.id;
WBUFW(buf,6)=pd->speed;
WBUFW(buf,20)=mob_get_viewclass(pd->class);
WBUFPOS(buf,36,pd->bl.x,pd->bl.y);
clif_send(buf,packet_len_table[0x7c],&pd->bl,AREA);
}
len = clif_pet0078(pd,buf);
clif_send(buf,len,&pd->bl,AREA);
return 0;
}
/*==========================================
*
*------------------------------------------
*/
int clif_movepet(struct pet_data *pd)
{
unsigned char buf[256];
int len;
len = clif_pet007b(pd,buf);
clif_send(buf,len,&pd->bl,AREA);
return 0;
}
/*==========================================
*
*------------------------------------------
*/
int clif_servertick(struct map_session_data *sd)
{
int fd=sd->fd;
WFIFOW(fd,0)=0x7f;
WFIFOL(fd,2)=sd->server_tick;
WFIFOSET(fd,packet_len_table[0x7f]);
return 0;
}
/*==========================================
*
*------------------------------------------
*/
int clif_walkok(struct map_session_data *sd)
{
int fd=sd->fd;
WFIFOW(fd,0)=0x87;
WFIFOL(fd,2)=gettick();;
WFIFOPOS2(fd,6,sd->bl.x,sd->bl.y,sd->to_x,sd->to_y);
WFIFOB(fd,11)=0;
WFIFOSET(fd,packet_len_table[0x87]);
return 0;
}
/*==========================================
*
*------------------------------------------
*/
int clif_movechar(struct map_session_data *sd)
{
int fd=sd->fd;
int len;
len = clif_set007b(sd,WFIFOP(fd,0));
clif_send(WFIFOP(fd,0),len,&sd->bl,AREA_WOS);
return 0;
}
/*==========================================
*
*------------------------------------------
*/
void clif_quitsave(int fd,struct map_session_data *sd)
{
map_quit(sd);
}
/*==========================================
*
*------------------------------------------
*/
static int clif_waitclose(int tid,unsigned int tick,int id,int data)
{
if(session[id])
session[id]->eof=1;
close(id);
return 0;
}
/*==========================================
*
*------------------------------------------
*/
void clif_setwaitclose(int fd)
{
add_timer(gettick()+5000,clif_waitclose,fd,0);
}
/*==========================================
*
*------------------------------------------
*/
int clif_changemap(struct map_session_data *sd,char *mapname,int x,int y)
{
int fd=sd->fd;
WFIFOW(fd,0)=0x91;
memcpy(WFIFOP(fd,2),mapname,16);
WFIFOW(fd,18)=x;
WFIFOW(fd,20)=y;
WFIFOSET(fd,packet_len_table[0x91]);
return 0;
}
/*==========================================
*
*------------------------------------------
*/
int clif_changemapserver(struct map_session_data *sd,char *mapname,int x,int y,int ip,int port)
{
int fd=sd->fd;
WFIFOW(fd,0)=0x92;
memcpy(WFIFOP(fd,2),mapname,16);
WFIFOW(fd,18)=x;
WFIFOW(fd,20)=y;
WFIFOL(fd,22)=ip;
WFIFOW(fd,26)=port;
WFIFOSET(fd,packet_len_table[0x92]);
return 0;
}
/*==========================================
*
*------------------------------------------
*/
int clif_fixpos(struct block_list *bl)
{
char buf[16];
WBUFW(buf,0)=0x88;
WBUFL(buf,2)=bl->id;
WBUFW(buf,6)=bl->x;
WBUFW(buf,8)=bl->y;
clif_send(buf,packet_len_table[0x88],bl,AREA);
return 0;
}
/*==========================================
*
*------------------------------------------
*/
int clif_npcbuysell(struct map_session_data* sd,int id)
{
int fd=sd->fd;
WFIFOW(fd,0)=0xc4;
WFIFOL(fd,2)=id;
WFIFOSET(fd,packet_len_table[0xc4]);
return 0;
}
/*==========================================
*
*------------------------------------------
*/
int clif_buylist(struct map_session_data *sd,struct npc_data *nd)
{
struct item_data *id;
int fd=sd->fd,i,val;
WFIFOW(fd,0)=0xc6;
for(i=0;nd->u.shop_item[i].nameid > 0;i++){
id = itemdb_search(nd->u.shop_item[i].nameid);
val=nd->u.shop_item[i].value;
WFIFOL(fd,4+i*11)=val;
if ( ! id->flag.value_notdc)
val=pc_modifybuyvalue(sd,val);
WFIFOL(fd,8+i*11)=val;
WFIFOB(fd,12+i*11)=id->type;
if(id->view_id > 0)
WFIFOW(fd,13+i*11)=id->view_id;
else
WFIFOW(fd,13+i*11)=nd->u.shop_item[i].nameid;
}
WFIFOW(fd,2)=i*11+4;
WFIFOSET(fd,WFIFOW(fd,2));
return 0;
}
/*==========================================
*
*------------------------------------------
*/
int clif_selllist(struct map_session_data *sd)
{
int fd=sd->fd,i,c=0,val;
WFIFOW(fd,0)=0xc7;
for(i=0;i<MAX_INVENTORY;i++) {
if(sd->status.inventory[i].nameid > 0 && sd->inventory_data[i]) {
val=sd->inventory_data[i]->value_sell;
if(val < 0)
continue;
WFIFOW(fd,4+c*10)=i+2;
WFIFOL(fd,6+c*10)=val;
if ( !sd->inventory_data[i]->flag.value_notoc)
val=pc_modifysellvalue(sd,val);
WFIFOL(fd,10+c*10)=val;
c++;
}
}
WFIFOW(fd,2)=c*10+4;
WFIFOSET(fd,WFIFOW(fd,2));
return 0;
}
/*==========================================
*
*------------------------------------------
*/
int clif_scriptmes(struct map_session_data *sd,int npcid,char *mes)
{
int fd=sd->fd;
WFIFOW(fd,0)=0xb4;
WFIFOW(fd,2)=strlen(mes)+9;
WFIFOL(fd,4)=npcid;
strcpy(WFIFOP(fd,8),mes);
WFIFOSET(fd,WFIFOW(fd,2));
return 0;
}
/*==========================================
*
*------------------------------------------
*/
int clif_scriptnext(struct map_session_data *sd,int npcid)
{
int fd=sd->fd;
WFIFOW(fd,0)=0xb5;
WFIFOL(fd,2)=npcid;
WFIFOSET(fd,packet_len_table[0xb5]);
return 0;
}
/*==========================================
*
*------------------------------------------
*/
int clif_scriptclose(struct map_session_data *sd,int npcid)
{
int fd=sd->fd;
WFIFOW(fd,0)=0xb6;
WFIFOL(fd,2)=npcid;
WFIFOSET(fd,packet_len_table[0xb6]);
return 0;
}
/*==========================================
*
*------------------------------------------
*/
int clif_scriptmenu(struct map_session_data *sd,int npcid,char *mes)
{
int fd=sd->fd;
WFIFOW(fd,0)=0xb7;
WFIFOW(fd,2)=strlen(mes)+8;
WFIFOL(fd,4)=npcid;
strcpy(WFIFOP(fd,8),mes);
WFIFOSET(fd,WFIFOW(fd,2));
return 0;
}
/*==========================================
*
*------------------------------------------
*/
int clif_scriptinput(struct map_session_data *sd,int npcid)
{
int fd=sd->fd;
WFIFOW(fd,0)=0x142;
WFIFOL(fd,2)=npcid;
WFIFOSET(fd,packet_len_table[0x142]);
return 0;
}
/*==========================================
*
*------------------------------------------
*/
int clif_scriptinputstr(struct map_session_data *sd,int npcid)
{
int fd=sd->fd;
WFIFOW(fd,0)=0x1d4;
WFIFOL(fd,2)=npcid;
WFIFOSET(fd,packet_len_table[0x1d4]);
return 0;
}
/*==========================================
*
*------------------------------------------
*/
int clif_viewpoint(struct map_session_data *sd,int npc_id,int type,int x,int y,int id,int color)
{
int fd=sd->fd;
WFIFOW(fd,0)=0x144;
WFIFOL(fd,2)=npc_id;
WFIFOL(fd,6)=type;
WFIFOL(fd,10)=x;
WFIFOL(fd,14)=y;
WFIFOB(fd,18)=id;
WFIFOL(fd,19)=color;
WFIFOSET(fd,packet_len_table[0x144]);
return 0;
}
/*==========================================
*
*------------------------------------------
*/
int clif_cutin(struct map_session_data *sd,char *image,int type)
{
int fd=sd->fd;
WFIFOW(fd,0)=0x145;
memcpy(WFIFOP(fd,2),image,16);
WFIFOB(fd,18)=type;
WFIFOSET(fd,packet_len_table[0x145]);
return 0;
}
/*==========================================
*
*------------------------------------------
*/
int clif_additem(struct map_session_data *sd,int n,int amount,int fail)
{
int fd=sd->fd,j;
unsigned char *buf=WFIFOP(fd,0);
if(fail) {
WBUFW(buf,0)=0xa0;
WBUFW(buf,2)=n+2;
WBUFW(buf,4)=amount;
WBUFW(buf,6)=0;
WBUFB(buf,8)=0;
WBUFB(buf,9)=0;
WBUFB(buf,10)=0;
WBUFW(buf,11)=0;
WBUFW(buf,13)=0;
WBUFW(buf,15)=0;
WBUFW(buf,17)=0;
WBUFW(buf,19)=0;
WBUFB(buf,21)=0;
WBUFB(buf,22)=fail;
}
else {
if(n<0 || n>=MAX_INVENTORY || sd->status.inventory[n].nameid <=0 || sd->inventory_data[n] == NULL)
return 1;
WBUFW(buf,0)=0xa0;
WBUFW(buf,2)=n+2;
WBUFW(buf,4)=amount;
if(sd->inventory_data[n]->view_id > 0)
WBUFW(buf,6)=sd->inventory_data[n]->view_id;
else
WBUFW(buf,6)=sd->status.inventory[n].nameid;
WBUFB(buf,8)=sd->status.inventory[n].identify;
WBUFB(buf,9)=sd->status.inventory[n].attribute;
WBUFB(buf,10)=sd->status.inventory[n].refine;
if(sd->status.inventory[n].card[0]==0x00ff || sd->status.inventory[n].card[0]==0x00fe || sd->status.inventory[n].card[0]==(short)0xff00) {
WBUFW(buf,11)=sd->status.inventory[n].card[0];
WBUFW(buf,13)=sd->status.inventory[n].card[1];
WBUFW(buf,15)=sd->status.inventory[n].card[2];
WBUFW(buf,17)=sd->status.inventory[n].card[3];
}
else {
if(sd->status.inventory[n].card[0] > 0 && (j=itemdb_viewid(sd->status.inventory[n].card[0])) > 0)
WBUFW(buf,11)=j;
else
WBUFW(buf,11)=sd->status.inventory[n].card[0];
if(sd->status.inventory[n].card[1] > 0 && (j=itemdb_viewid(sd->status.inventory[n].card[1])) > 0)
WBUFW(buf,13)=j;
else
WBUFW(buf,13)=sd->status.inventory[n].card[1];
if(sd->status.inventory[n].card[2] > 0 && (j=itemdb_viewid(sd->status.inventory[n].card[2])) > 0)
WBUFW(buf,15)=j;
else
WBUFW(buf,15)=sd->status.inventory[n].card[2];
if(sd->status.inventory[n].card[3] > 0 && (j=itemdb_viewid(sd->status.inventory[n].card[3])) > 0)
WBUFW(buf,17)=j;
else
WBUFW(buf,17)=sd->status.inventory[n].card[3];
}
WBUFW(buf,19)=pc_equippoint(sd,n);
WBUFB(buf,21)=(sd->inventory_data[n]->type == 7)? 4:sd->inventory_data[n]->type;
WBUFB(buf,22)=fail;
}
WFIFOSET(fd,packet_len_table[0xa0]);
return 0;
}
/*==========================================
*
*------------------------------------------
*/
int clif_delitem(struct map_session_data *sd,int n,int amount)
{
int fd=sd->fd;
WFIFOW(fd,0)=0xaf;
WFIFOW(fd,2)=n+2;
WFIFOW(fd,4)=amount;
WFIFOSET(fd,packet_len_table[0xaf]);
return 0;
}
/*==========================================
*
*------------------------------------------
*/
int clif_itemlist(struct map_session_data *sd)
{
int i,n,fd=sd->fd,arrow=-1;
unsigned char *buf = WFIFOP(fd,0);
#if PACKETVER < 5
WBUFW(buf,0)=0xa3;
for(i=0,n=0;i<MAX_INVENTORY;i++){
if(sd->status.inventory[i].nameid <=0 || sd->inventory_data[i] == NULL || itemdb_isequip2(sd->inventory_data[i]))
continue;
WBUFW(buf,n*10+4)=i+2;
if(sd->inventory_data[i]->view_id > 0)
WBUFW(buf,n*10+6)=sd->inventory_data[i]->view_id;
else
WBUFW(buf,n*10+6)=sd->status.inventory[i].nameid;
WBUFB(buf,n*10+8)=sd->inventory_data[i]->type;
WBUFB(buf,n*10+9)=sd->status.inventory[i].identify;
WBUFW(buf,n*10+10)=sd->status.inventory[i].amount;
if(sd->inventory_data[i]->equip == 0x8000){
WBUFW(buf,n*10+12)=0x8000;
if(sd->status.inventory[i].equip) arrow=i; // 偮偄偱偵栴憰旛僠僃僢僋
}
else
WBUFW(buf,n*10+12)=0;
n++;
}
if(n){
WBUFW(buf,2)=4+n*10;
WFIFOSET(fd,WFIFOW(fd,2));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -