map2.c
来自「CS反恐精英1.6的部分C源代码。」· C语言 代码 · 共 2,313 行 · 第 1/5 页
C
2,313 行
continue;
memcpy(WFIFOP(fd,0),dat,len);
WFIFOSET(fd,len);
c++;
}
}
return c;
}
// wos = without self 0 - include srcfd 1- exclude srcfd
// 2- exclude all in chat users 3- exclude same chat joined user
int mmo_map_sendarea(int srcfd,char *dat,int len,int wos)
{
struct map_session_data *srcsd;
int bx,by,i,j;
srcsd=session[srcfd]->session_data;
for(by=srcsd->y/BLOCK_SIZE-AREA_SIZE,i=0;i<(AREA_SIZE*2+1);by++,i++){
if(by < 0 || by >= map_data[srcsd->mapno].bys)
continue;
for(bx=srcsd->x/BLOCK_SIZE-AREA_SIZE,j=0;j<(AREA_SIZE*2+1);bx++,j++){
if(bx < 0 || bx >= map_data[srcsd->mapno].bxs)
continue;
mmo_map_sendblock(srcsd->mapno,bx,by,dat,len,srcfd,wos);
}
}
return 0;
}
int mmo_map_sendchat(int srcfd,char *dat,int len,int wos)
{
struct map_session_data *srcsd,*dstsd;
struct mmo_chat* chat;
int fd,i;
srcsd=session[srcfd]->session_data;
if((chat=(struct mmo_chat*)srcsd->chatID) == NULL)
return 0;
for(i=0;i<chat->users;i++){
fd=chat->usersfd[i];
if(!session[fd] || !(dstsd=session[fd]->session_data))
continue;
if(wos && fd==srcfd)
continue;
memcpy(WFIFOP(fd,0),dat,len);
WFIFOSET(fd,len);
}
return 0;
}
int mmo_map_sendarea_mxy(int m,int x,int y,char *dat,int len)
{
int bx,by,i,j;
for(by=y/BLOCK_SIZE-AREA_SIZE,i=0;i<(AREA_SIZE*2+1);by++,i++){
if(by < 0 || by >= map_data[m].bys)
continue;
for(bx=x/BLOCK_SIZE-AREA_SIZE,j=0;j<(AREA_SIZE*2+1);bx++,j++){
if(bx < 0 || bx >= map_data[m].bxs)
continue;
mmo_map_sendblock(m,bx,by,dat,len,0,0);
}
}
return 0;
}
int mmo_map_sendall(int srcfd,char *dat,int len,int wos)
{
struct map_session_data *srcsd,*dstsd;
int fd;
srcsd=session[srcfd]->session_data;
for(fd=0;fd<FD_SETSIZE;fd++){
if(!session[fd] || !(dstsd=session[fd]->session_data))
continue;
if(wos && fd==srcfd)
continue;
memcpy(WFIFOP(fd,0),dat,len);
WFIFOSET(fd,len);
}
return 0;
}
int mmo_map_set_frameinitem(int fd,unsigned char *buf,struct flooritem_data *fitem)
{
if(fitem->item_data.nameid==0)
return 0;
//009d <ID>.l <name ID>.w <identify flag>.B <X>.w <Y>.w <amount>.w <subX>.B <subY>.B
WBUFW(buf,0)=0x9d;
WBUFL(buf,2)=fitem->id;
WBUFW(buf,6)=fitem->item_data.nameid;
WBUFB(buf,8)=fitem->item_data.identify;
WBUFW(buf,9)=fitem->x;
WBUFW(buf,11)=fitem->y;
WBUFW(buf,13)=fitem->item_data.amount;
WBUFB(buf,15)=fitem->subx;
WBUFB(buf,16)=fitem->suby;
return 17;
}
int mmo_map_set_dropitem(int fd,unsigned char *buf,struct flooritem_data *fitem)
{
if(fitem->item_data.nameid==0)
return 0;
//009e <ID>.l <name ID>.w <identify flag>.B <X>.w <Y>.w <subX>.B <subY>.B <amount>.w
WBUFW(buf,0)=0x9e;
WBUFL(buf,2)=fitem->id;
WBUFW(buf,6)=fitem->item_data.nameid;
WBUFB(buf,8)=fitem->item_data.identify;
WBUFW(buf,9)=fitem->x;
WBUFW(buf,11)=fitem->y;
WBUFB(buf,13)=fitem->subx;
WBUFB(buf,14)=fitem->suby;
WBUFW(buf,15)=fitem->item_data.amount;
return 17;
}
int mmo_map_set_npc(int fd,unsigned char *buf,unsigned long id, unsigned long class, int x, int y,int dir)
{
WBUFW(buf,0)=0x78;
WBUFL(buf,2)=id;
WBUFW(buf,6)=200;
WBUFW(buf,8)=0;
WBUFW(buf,10)=0;
WBUFW(buf,12)=0;
WBUFW(buf,14)=class;
WBUFW(buf,16)=0;
WBUFW(buf,18)=0;
WBUFW(buf,20)=0;
WBUFW(buf,22)=0;
WBUFW(buf,24)=0;
WBUFW(buf,26)=0;
WBUFW(buf,28)=0;
WBUFW(buf,30)=0;
WBUFW(buf,32)=0;
WBUFW(buf,34)=0;
WBUFW(buf,36)=0;
WBUFW(buf,38)=0;
WBUFW(buf,40)=0;
WBUFW(buf,42)=0;
WBUFB(buf,44)=0;
WBUFB(buf,45)=0;
set_pos(WBUFP(buf,46),x,y);
WBUFB(buf,48)|=dir&0x0f;
WBUFB(buf,49)=5;
WBUFB(buf,50)=5;
WBUFB(buf,51)=0;
return 52;
}
int mmo_map_set_npc007c(int fd,unsigned char *buf,unsigned long id, unsigned long class, int x, int y)
{
WBUFW(buf,0)=0x7c;
WBUFL(buf,2)=id;
WBUFW(buf,6)=200;
WBUFW(buf,8)=0;
WBUFW(buf,10)=0;
WBUFW(buf,12)=0;
WBUFW(buf,14)=0;
WBUFW(buf,16)=0;
WBUFW(buf,18)=0;
WBUFW(buf,20)=class;
WBUFW(buf,22)=0;
WBUFW(buf,24)=0;
WBUFW(buf,26)=0;
WBUFW(buf,28)=0;
WBUFW(buf,30)=0;
WBUFW(buf,32)=0;
WBUFW(buf,34)=0;
set_pos(WBUFP(buf,36),x,y);
WBUFB(buf,39)=0;
WBUFB(buf,40)=0;
return 41;
}
int mmo_map_set00b1(int fd,int type,int val)
{
WFIFOW(fd,0) = 0xb1;
WFIFOW(fd,2) = type;
WFIFOL(fd,4) = val;
WFIFOSET(fd,8);
return 0;
}
/*various character settings */
int mmo_map_set0078(int fd,unsigned char *buf)
{
struct map_session_data *sd;
sd=session[fd]->session_data;
WBUFW(buf,0)=0x78;
WBUFL(buf,2)=sd->account_id;
WBUFW(buf,6)=sd->speed;
WBUFW(buf,8)=0;
WBUFW(buf,10)=0;
WBUFW(buf,12)=sd->status.option;
WBUFW(buf,14)=sd->status.class;
WBUFW(buf,16)=sd->status.hair;
WBUFW(buf,18)=sd->status.weapon;
WBUFW(buf,20)=sd->status.head_bottom;
WBUFW(buf,22)=sd->status.sheild;
WBUFW(buf,24)=sd->status.head_top;
WBUFW(buf,26)=sd->status.head_mid;
WBUFW(buf,28)=sd->status.hair_color;
WBUFW(buf,30)=sd->status.clothes_color;
WBUFW(buf,32)=sd->head_dir;
WBUFW(buf,34)=sd->status.guild_id;
WBUFW(buf,36)=0;
WBUFW(buf,38)=0;
WBUFW(buf,40)=sd->status.manner;
WBUFW(buf,42)=sd->status.karma;
WBUFB(buf,44)=0;
WBUFB(buf,45)=sd->sex;
set_pos(WBUFP(buf,46),sd->x,sd->y);
WBUFB(buf,48)|=sd->dir&0x0f;
WBUFB(buf,49)=5;
WBUFB(buf,50)=5;
WBUFB(buf,51)=sd->sitting;
return 0;
}
int mmo_map_set0079(int fd,unsigned char *buf)
{
mmo_map_set0078(fd,buf);
WBUFW(buf,0)=0x79;
return 0;
}
int mmo_map_set007b(int fd,unsigned char *buf,unsigned long tick,int x0,int y0,int x1,int y1)
{
struct map_session_data *sd;
sd=session[fd]->session_data;
WBUFW(buf,0)=0x7b;
WBUFL(buf,2)=sd->account_id;
WBUFW(buf,6)=sd->speed;
WBUFW(buf,8)=0;
WBUFW(buf,10)=0;
WBUFW(buf,12)=sd->status.option;
WBUFW(buf,14)=sd->status.class;
WBUFW(buf,16)=sd->status.hair;
WBUFW(buf,18)=sd->status.weapon;
WBUFW(buf,20)=sd->status.head_bottom;
WBUFL(buf,22)=tick;
WBUFW(buf,26)=sd->status.sheild;
WBUFW(buf,28)=sd->status.head_top;
WBUFW(buf,30)=sd->status.head_mid;
WBUFW(buf,32)=sd->status.hair_color;
WBUFW(buf,34)=sd->status.clothes_color;
WBUFW(buf,36)=sd->head_dir;
WBUFW(buf,38)=sd->status.guild_id;
WBUFW(buf,40)=0;
WBUFW(buf,42)=0;
WBUFW(buf,44)=sd->status.manner;
WBUFW(buf,46)=sd->status.karma;
WBUFB(buf,48)=0;
WBUFB(buf,49)=sd->sex;
set_2pos(WBUFP(buf,50),x0,y0,x1,y1);
WBUFB(buf,55)=0;
WBUFB(buf,56)=5;
WBUFB(buf,57)=5;
return 0;
}
/**********************************************
acquire name function
**********************************************/
int mmo_map_send0095(int fd,unsigned long id)
{
int i,char_id=0;
struct map_session_data *sd;
sd = NULL;
//printf("fd:%d,ID:%d\n",fd,id);
//Fred Fix5 (Username Showing in Map)
for(i=5;i<FD_SETSIZE;i++){
if(session[i] && (sd=session[i]->session_data) && sd->account_id==id){
char_id=sd->char_id;
break;
}
}
if(char_id){ // PC
if(strcmp(sd->status.guild_name,"not post")!=0){//if guild post
//printf("%s\n%s\n%s\n%s",sd->status.name,sd->status.party_name,sd->status.guild_name,sd->status.class_name);
WFIFOW(fd,0)=0x195;//name packet
WFIFOL(fd,2)=id;
memcpy(WFIFOP(fd,6),sd->status.name,24);//increases as it sends name
memcpy(WFIFOP(fd,30),sd->status.party_name,24);
memcpy(WFIFOP(fd,54),sd->status.guild_name,24);
memcpy(WFIFOP(fd,78),sd->status.class_name,24);
WFIFOSET(fd,packet_len_table[0x195]);
}else{
WFIFOW(fd,0)=0x95;//name packet
WFIFOL(fd,2)=id;
memcpy(WFIFOP(fd,6),sd->status.name,24);//increases as it sends name
WFIFOSET(fd,packet_len_table[0x95]);
}
return 0;
} else { // NPC
sd=session[fd]->session_data;
for(i=0;i<map_data[sd->mapno].npc_num;i++){
if(map_data[sd->mapno].npc[i]->id==id){
WFIFOW(fd,0)=0x95;
WFIFOL(fd,2)=id;
memcpy(WFIFOP(fd,6),map_data[sd->mapno].npc[i]->name,24);
WFIFOSET(fd,30);
return 0;
}
}
}
return -1;
}
void equip_check(int fd){
int i;
struct map_session_data *sd;
sd=session[fd]->session_data;
// equip check&modify
for(i=0;i<100;i++){
if(sd->status.inventory[i].nameid &&
(sd->status.inventory[i].equip)){
mmo_map_calc_status(fd,sd->status.inventory[i].nameid,1);//status addition
}
}
}
int mmo_map_set_look(int fd,unsigned char *buf,int id,int type,int val)
{
//printf("mmo_map_set_look : %d,%d,%d\n",id,type,val);
WBUFW(buf,0)=0xc3;
WBUFL(buf,2)=id;
WBUFB(buf,6)=type;
WBUFB(buf,7)=val;
return 8;
}
int calc_need_status_point(struct map_session_data *sd,int type)
{
int val;
if(type<SP_STR || type>SP_LUK)
return -1;
val =
type==SP_STR ? sd->status.str :
type==SP_AGI ? sd->status.agi :
type==SP_VIT ? sd->status.vit :
type==SP_INT ? sd->status.int_:
type==SP_DEX ? sd->status.dex : sd->status.luk;
return (val+9)/10+1;
}
/*parameter setting*/
int mmo_map_set_param(int fd,unsigned char *buf,int type)
{
int len=8;
struct map_session_data *sd;
sd=session[fd]->session_data;
WBUFW(buf,0)=0xb0;
WBUFW(buf,2)=type;
switch(type){
case SP_STATUSPOINT:
WBUFL(buf,4)=sd->status.status_point;
break;
case SP_ASPD:
WBUFL(buf,4)=sd->status.aspd;
break;
case SP_ATK1:
WBUFW(buf,4)=sd->status.atk1;
break;
case SP_MATK1:
WBUFL(buf,4)=sd->status.matk1;
break;
case SP_MATK2:
WBUFL(buf,4)=sd->status.matk2;
break;
case SP_DEF2:
WBUFW(buf,4) = sd->status.def2;
break;
case SP_MDEF2:
WBUFW(buf,4) = sd->status.mdef2;
break;
case SP_HIT:
WBUFL(buf,4) = sd->status.hit;
case SP_FLEE1:
WBUFW(buf,4) = sd->status.flee1;
break;
case SP_FLEE2:
WBUFW(buf,4) = sd->status.flee2;
break;
case SP_SKILLPOINT:
WBUFL(buf,4)=sd->status.skill_point;
break;
case SP_ZENY:
WBUFW(buf,0)=0xb1;
WBUFL(buf,4)=sd->status.zeny;
break;
case SP_WEIGHT:
WBUFL(buf,4)=sd->weight;
break;
case SP_MAXWEIGHT:
WBUFL(buf,4)=sd->max_weight;
break;
case SP_STR:
WBUFW(buf,0)=0x141;
WBUFL(buf,2)=type;
WBUFL(buf,6)=sd->status.str;
WBUFL(buf,10)=0; // str bonus
len=14;
break;
case SP_AGI:
WBUFW(buf,0)=0x141;
WBUFL(buf,2)=type;
WBUFL(buf,6)=sd->status.agi;
WBUFL(buf,10)=0; // agi bonus
len=14;
break;
case SP_VIT:
WBUFW(buf,0)=0x141;
WBUFL(buf,2)=type;
WBUFL(buf,6)=sd->status.vit;
WBUFL(buf,10)=0; // vit bonus
len=14;
break;
case SP_INT:
WBUFW(buf,0)=0x141;
WBUFL(buf,2)=type;
WBUFL(buf,6)=sd->status.int_;
WBUFL(buf,10)=0; // int bonus
len=14;
break;
case SP_DEX:
WBUFW(buf,0)=0x141;
WBUFL(buf,2)=type;
WBUFL(buf,6)=sd->status.dex;
WBUFL(buf,10)=0; // dex bonus
len=14;
break;
case SP_LUK:
WBUFW(buf,0)=0x141;
WBUFL(buf,2)=type;
WBUFL(buf,6)=sd->status.luk;
WBUFL(buf,10)=0; // luk bonus
len=14;
break;
default:
len=0;
break;
}
return len;
}
int mmo_map_update_param(int fd,int type,int val)
{
struct map_session_data *sd;
int len;
sd=session[fd]->session_data;
switch(type){
case SP_ZENY:
sd->status.zeny=sd->status.zeny+val;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?