📄 intif.c
字号:
WFIFOSET(inter_fd,5);
return 0;
}
//僊儖僪忛愯椞僊儖僪曄峏梫媮
int intif_guild_castle_datasave(int castle_id,int index, int value)
{
WFIFOW(inter_fd,0)=0x3041;
WFIFOW(inter_fd,2)=castle_id;
WFIFOB(inter_fd,4)=index;
WFIFOL(inter_fd,5)=value;
WFIFOSET(inter_fd,9);
return 0;
}
//-----------------------------------------------------------------
// inter server偐傜庴怣
// wis庴怣
int intif_parse_WisMessage(int fd)
{
struct map_session_data* sd;
int id=RFIFOL(fd,4);
// if(battle_config.etc_log)
// printf("intif_parse_wismessage: %d %s %s %s\n",id,RFIFOP(fd,6),RFIFOP(fd,30),RFIFOP(fd,54) );
sd=map_nick2sd(RFIFOP(fd,32)); // 憲怣愭傪扵偡
if(sd!=NULL){
clif_wis_message(sd->fd,RFIFOP(fd,8),RFIFOP(fd,56),RFIFOW(fd,2)-56);
intif_wis_replay(id,0); // 憲怣惉岟
}else{
intif_wis_replay(id,1); // 偦傫側恖偄傑偣傫
}
return 0;
}
// wis憲怣寢壥庴怣
int intif_parse_WisEnd(int fd)
{
struct map_session_data* sd;
// if(battle_config.etc_log)
// printf("intif_parse_wisend: %s %d\n",RFIFOP(fd,2),RFIFOB(fd,26));
sd=map_nick2sd(RFIFOP(fd,2));
if(sd!=NULL)
clif_wis_end(sd->fd,RFIFOB(fd,26));
return 0;
}
// 傾僇僂儞僩曄悢捠抦
int intif_parse_AccountReg(int fd)
{
int j,p;
struct map_session_data *sd;
if( (sd=map_id2sd(RFIFOL(fd,4)))==NULL )
return 1;
for(p=8,j=0;p<RFIFOW(fd,2) && j<ACCOUNT_REG_NUM;p+=36,j++){
memcpy(sd->status.account_reg[j].str,RFIFOP(fd,p),32);
sd->status.account_reg[j].value=RFIFOL(fd,p+32);
}
sd->status.account_reg_num=j;
// printf("intif: accountreg\n");
return 0;
}
// 憅屔僨乕僞庴怣
int intif_parse_LoadStorage(int fd)
{
struct storage *stor;
struct map_session_data *sd;
stor=account2storage( RFIFOL(fd,4) );
if( RFIFOW(fd,2)-8 != sizeof(struct storage) ){
if(battle_config.error_log)
printf("intif_parse_LoadStorage: data size error %d %d\n",RFIFOW(fd,2)-8 , sizeof(struct storage));
return 1;
}
sd=map_id2sd( RFIFOL(fd,4) );
if(sd==NULL){
if(battle_config.error_log)
printf("intif_parse_LoadStorage: user not found %d\n",RFIFOL(fd,4));
return 1;
}
if(battle_config.save_log)
printf("intif_openstorage: %d\n",RFIFOL(fd,4) );
memcpy(stor,RFIFOP(fd,8),sizeof(struct storage));
stor->storage_status=1;
sd->state.storage_flag = 0;
clif_storageitemlist(sd,stor);
clif_storageequiplist(sd,stor);
clif_updatestorageamount(sd,stor);
return 0;
}
// 憅屔僨乕僞憲怣惉岟
int intif_parse_SaveStorage(int fd)
{
if(battle_config.save_log)
printf("intif_savestorage: done %d %d\n",RFIFOL(fd,2),RFIFOB(fd,6) );
return 0;
}
int intif_parse_LoadGuildStorage(int fd)
{
struct guild_storage *gstor;
struct map_session_data *sd;
int guild_id = RFIFOL(fd,8);
if(guild_id > 0) {
gstor=guild2storage(guild_id);
if(!gstor) {
if(battle_config.error_log)
printf("intif_parse_LoadGuildStorage: error guild_id %d not exist\n",guild_id);
return 1;
}
if( RFIFOW(fd,2)-12 != sizeof(struct guild_storage) ){
gstor->storage_status = 0;
if(battle_config.error_log)
printf("intif_parse_LoadGuildStorage: data size error %d %d\n",RFIFOW(fd,2)-12 , sizeof(struct guild_storage));
return 1;
}
sd=map_id2sd( RFIFOL(fd,4) );
if(sd==NULL){
if(battle_config.error_log)
printf("intif_parse_LoadGuildStorage: user not found %d\n",RFIFOL(fd,4));
return 1;
}
if(battle_config.save_log)
printf("intif_open_guild_storage: %d\n",RFIFOL(fd,4) );
memcpy(gstor,RFIFOP(fd,12),sizeof(struct guild_storage));
gstor->storage_status = 1;
sd->state.storage_flag = 1;
clif_guildstorageitemlist(sd,gstor);
clif_guildstorageequiplist(sd,gstor);
clif_updateguildstorageamount(sd,gstor);
}
return 0;
}
int intif_parse_SaveGuildStorage(int fd)
{
if(battle_config.save_log) {
printf("intif_save_guild_storage: done %d %d %d\n",RFIFOL(fd,2),RFIFOL(fd,6),RFIFOB(fd,10) );
}
return 0;
}
// 僷乕僥傿嶌惉壜斲
int intif_parse_PartyCreated(int fd)
{
if(battle_config.etc_log)
printf("intif: party created\n");
party_created(RFIFOL(fd,2),RFIFOB(fd,6),RFIFOL(fd,7),RFIFOP(fd,11));
return 0;
}
// 僷乕僥傿忣曬
int intif_parse_PartyInfo(int fd)
{
if( RFIFOW(fd,2)==8){
if(battle_config.error_log)
printf("intif: party noinfo %d\n",RFIFOL(fd,4));
party_recv_noinfo(RFIFOL(fd,4));
return 0;
}
// printf("intif: party info %d\n",RFIFOL(fd,4));
if( RFIFOW(fd,2)!=sizeof(struct party)+4 ){
if(battle_config.error_log)
printf("intif: party info : data size error %d %d %d\n",RFIFOL(fd,4),RFIFOW(fd,2),sizeof(struct party)+4);
}
party_recv_info((struct party *)RFIFOP(fd,4));
return 0;
}
// 僷乕僥傿捛壛捠抦
int intif_parse_PartyMemberAdded(int fd)
{
if(battle_config.etc_log)
printf("intif: party member added %d %d %d\n",RFIFOL(fd,2),RFIFOL(fd,6),RFIFOB(fd,10));
party_member_added(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOB(fd,10));
return 0;
}
// 僷乕僥傿愝掕曄峏捠抦
int intif_parse_PartyOptionChanged(int fd)
{
party_optionchanged(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOW(fd,10),RFIFOW(fd,12),RFIFOB(fd,14));
return 0;
}
// 僷乕僥傿扙戅捠抦
int intif_parse_PartyMemberLeaved(int fd)
{
if(battle_config.etc_log)
printf("intif: party member leaved %d %d %s\n",RFIFOL(fd,2),RFIFOL(fd,6),RFIFOP(fd,10));
party_member_leaved(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOP(fd,10));
return 0;
}
// 僷乕僥傿夝嶶捠抦
int intif_parse_PartyBroken(int fd)
{
party_broken(RFIFOL(fd,2));
return 0;
}
// 僷乕僥傿堏摦捠抦
int intif_parse_PartyMove(int fd)
{
// if(battle_config.etc_log)
// printf("intif: party move %d %d %s %d %d\n",RFIFOL(fd,2),RFIFOL(fd,6),RFIFOP(fd,10),RFIFOB(fd,26),RFIFOW(fd,27));
party_recv_movemap(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOP(fd,10),RFIFOB(fd,26),RFIFOW(fd,27));
return 0;
}
// 僷乕僥傿儊僢僙乕僕
int intif_parse_PartyMessage(int fd)
{
// if(battle_config.etc_log)
// printf("intif_parse_PartyMessage: %s\n",RFIFOP(fd,12));
party_recv_message(RFIFOL(fd,4),RFIFOL(fd,8),RFIFOP(fd,12),RFIFOW(fd,2)-12);
return 0;
}
// 僊儖僪嶌惉壜斲
int intif_parse_GuildCreated(int fd)
{
guild_created(RFIFOL(fd,2),RFIFOL(fd,6));
return 0;
}
// 僊儖僪忣曬
int intif_parse_GuildInfo(int fd)
{
if( RFIFOW(fd,2)==8){
if(battle_config.error_log)
printf("intif: guild noinfo %d\n",RFIFOL(fd,4));
guild_recv_noinfo(RFIFOL(fd,4));
return 0;
}
// if(battle_config.etc_log)
// printf("intif: guild info %d\n",RFIFOL(fd,4));
if( RFIFOW(fd,2)!=sizeof(struct guild)+4 ){
if(battle_config.error_log)
printf("intif: guild info : data size error\n %d %d %d",RFIFOL(fd,4),RFIFOW(fd,2),sizeof(struct guild)+4);
}
guild_recv_info((struct guild *)RFIFOP(fd,4));
return 0;
}
// 僊儖僪儊儞僶捛壛捠抦
int intif_parse_GuildMemberAdded(int fd)
{
if(battle_config.etc_log)
printf("intif: guild member added %d %d %d %d\n",RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOB(fd,14));
guild_member_added(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOB(fd,14));
return 0;
}
// 僊儖僪儊儞僶扙戅/捛曻捠抦
int intif_parse_GuildMemberLeaved(int fd)
{
guild_member_leaved(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOB(fd,14),
RFIFOP(fd,55),RFIFOP(fd,15));
return 0;
}
// 僊儖僪儊儞僶僆儞儔僀儞忬懺/Lv曄峏捠抦
int intif_parse_GuildMemberInfoShort(int fd)
{
guild_recv_memberinfoshort(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOB(fd,14),RFIFOW(fd,15),RFIFOW(fd,17));
return 0;
}
// 僊儖僪夝嶶捠抦
int intif_parse_GuildBroken(int fd)
{
guild_broken(RFIFOL(fd,2),RFIFOB(fd,6));
return 0;
}
// 僊儖僪婎杮忣曬曄峏捠抦
int intif_parse_GuildBasicInfoChanged(int fd)
{
int type=RFIFOW(fd,8),guild_id=RFIFOL(fd,4);
void *data=RFIFOP(fd,10);
struct guild *g=guild_search(guild_id);
short dw=*((short *)data);
int dd=*((int *)data);
if( g==NULL )
return 0;
switch(type){
case GBI_EXP: g->exp=dd; break;
case GBI_GUILDLV: g->guild_lv=dw; break;
case GBI_SKILLPOINT: g->skill_point=dd; break;
}
return 0;
}
// 僊儖僪儊儞僶忣曬曄峏捠抦
int intif_parse_GuildMemberInfoChanged(int fd)
{
int type=RFIFOW(fd,16),guild_id=RFIFOL(fd,4);
int account_id=RFIFOL(fd,8),char_id=RFIFOL(fd,12);
void *data=RFIFOP(fd,18);
struct guild *g=guild_search(guild_id);
int idx,dd=*((int *)data);
if( g==NULL )
return 0;
idx=guild_getindex(g,account_id,char_id);
switch(type){
case GMI_POSITION:
g->member[idx].position=dd;
guild_memberposition_changed(g,idx,dd);
break;
case GMI_EXP:
g->member[idx].exp=dd;
break;
}
return 0;
}
// 僊儖僪栶怑曄峏捠抦
int intif_parse_GuildPosition(int fd)
{
if( RFIFOW(fd,2)!=sizeof(struct guild_position)+12 ){
if(battle_config.error_log)
printf("intif: guild info : data size error\n %d %d %d",RFIFOL(fd,4),RFIFOW(fd,2),sizeof(struct guild_position)+12);
}
guild_position_changed(RFIFOL(fd,4),RFIFOL(fd,8),(struct guild_position *)RFIFOP(fd,12));
return 0;
}
// 僊儖僪僗僉儖妱傝怳傝捠抦
int intif_parse_GuildSkillUp(int fd)
{
guild_skillupack(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10));
return 0;
}
// 僊儖僪摨柨/揋懳捠抦
int intif_parse_GuildAlliance(int fd)
{
guild_allianceack(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOL(fd,14),
RFIFOB(fd,18),RFIFOP(fd,19),RFIFOP(fd,43));
return 0;
}
// 僊儖僪崘抦曄峏捠抦
int intif_parse_GuildNotice(int fd)
{
guild_notice_changed(RFIFOL(fd,2),RFIFOP(fd,6),RFIFOP(fd,66));
return 0;
}
// 僊儖僪僄儞僽儗儉曄峏捠抦
int intif_parse_GuildEmblem(int fd)
{
guild_emblem_changed(RFIFOW(fd,2)-12,RFIFOL(fd,4),RFIFOL(fd,8),RFIFOP(fd,12));
return 0;
}
// 僊儖僪夛榖庴怣
int intif_parse_GuildMessage(int fd)
{
guild_recv_message(RFIFOL(fd,4),RFIFOL(fd,8),RFIFOP(fd,12),RFIFOW(fd,2)-12);
return 0;
}
// 僊儖僪忛僨乕僞梫媮曉怣
int intif_parse_GuildCastleDataLoad(int fd)
{
return guild_castledataloadack(RFIFOW(fd,2),RFIFOB(fd,4),RFIFOL(fd,5));
}
// 僊儖僪忛僨乕僞曄峏捠抦
int intif_parse_GuildCastleDataSave(int fd)
{
return guild_castledatasaveack(RFIFOW(fd,2),RFIFOB(fd,4),RFIFOL(fd,5));
}
// 僊儖僪忛僨乕僞堦妵庴怣(弶婜壔帪)
int intif_parse_GuildCastleAllDataLoad(int fd)
{
return guild_castlealldataload(RFIFOW(fd,2),(struct guild_castle *)RFIFOP(fd,4));
}
// pet
int intif_parse_CreatePet(int fd)
{
pet_get_egg(RFIFOL(fd,2),RFIFOL(fd,7),RFIFOB(fd,6));
return 0;
}
int intif_parse_RecvPetData(int fd)
{
struct s_pet p;
int len=RFIFOW(fd,2);
if(sizeof(struct s_pet)!=len-9) {
if(battle_config.etc_log)
printf("intif: pet data: data size error %d %d\n",sizeof(struct s_pet),len-9);
}
else{
memcpy(&p,RFIFOP(fd,9),sizeof(struct s_pet));
pet_recv_petdata(RFIFOL(fd,4),&p,RFIFOB(fd,8));
}
return 0;
}
int intif_parse_SavePetOk(int fd)
{
if(RFIFOB(fd,6) == 1) {
if(battle_config.error_log)
printf("pet data save failure\n");
}
return 0;
}
int intif_parse_DeletePetOk(int fd)
{
if(RFIFOB(fd,2) == 1) {
if(battle_config.error_log)
printf("pet data delete failure\n");
}
return 0;
}
//-----------------------------------------------------------------
// inter server偐傜偺捠怣
// 僄儔乕偑偁傟偽0(false)傪曉偡偙偲
// 僷働僢僩偑張棟偱偒傟偽1,僷働僢僩挿偑懌傝側偗傟偽2傪曉偡偙偲
int intif_parse(int fd)
{
int packet_len;
int cmd = RFIFOW(fd,0);
// 僷働僢僩偺ID妋擣
if(cmd<0x3800 || cmd>=0x3800+(sizeof(packet_len_table)/sizeof(packet_len_table[0])) ||
packet_len_table[cmd-0x3800]==0){
return 0;
}
// 僷働僢僩偺挿偝妋擣
packet_len = packet_len_table[cmd-0x3800];
if(packet_len==-1){
if(RFIFOREST(fd)<4)
return 2;
packet_len = RFIFOW(fd,2);
}
// if(battle_config.etc_log)
// printf("intif_parse %d %x %d %d\n",fd,cmd,packet_len,RFIFOREST(fd));
if(RFIFOREST(fd)<packet_len){
return 2;
}
// 張棟暘婒
switch(cmd){
case 0x3800: clif_GMmessage(NULL,RFIFOP(fd,4),packet_len-4,0); break;
case 0x3801: intif_parse_WisMessage(fd); break;
case 0x3802: intif_parse_WisEnd(fd); break;
case 0x3804: intif_parse_AccountReg(fd); break;
case 0x3810: intif_parse_LoadStorage(fd); break;
case 0x3811: intif_parse_SaveStorage(fd); break;
case 0x3818: intif_parse_LoadGuildStorage(fd); break;
case 0x3819: intif_parse_SaveGuildStorage(fd); break;
case 0x3820: intif_parse_PartyCreated(fd); break;
case 0x3821: intif_parse_PartyInfo(fd); break;
case 0x3822: intif_parse_PartyMemberAdded(fd); break;
case 0x3823: intif_parse_PartyOptionChanged(fd); break;
case 0x3824: intif_parse_PartyMemberLeaved(fd); break;
case 0x3825: intif_parse_PartyMove(fd); break;
case 0x3826: intif_parse_PartyBroken(fd); break;
case 0x3827: intif_parse_PartyMessage(fd); break;
case 0x3830: intif_parse_GuildCreated(fd); break;
case 0x3831: intif_parse_GuildInfo(fd); break;
case 0x3832: intif_parse_GuildMemberAdded(fd); break;
case 0x3834: intif_parse_GuildMemberLeaved(fd); break;
case 0x3835: intif_parse_GuildMemberInfoShort(fd); break;
case 0x3836: intif_parse_GuildBroken(fd); break;
case 0x3837: intif_parse_GuildMessage(fd); break;
case 0x3839: intif_parse_GuildBasicInfoChanged(fd); break;
case 0x383a: intif_parse_GuildMemberInfoChanged(fd); break;
case 0x383b: intif_parse_GuildPosition(fd); break;
case 0x383c: intif_parse_GuildSkillUp(fd); break;
case 0x383d: intif_parse_GuildAlliance(fd); break;
case 0x383e: intif_parse_GuildNotice(fd); break;
case 0x383f: intif_parse_GuildEmblem(fd); break;
case 0x3840: intif_parse_GuildCastleDataLoad(fd); break;
case 0x3841: intif_parse_GuildCastleDataSave(fd); break;
case 0x3842: intif_parse_GuildCastleAllDataLoad(fd); break;
case 0x3880: intif_parse_CreatePet(fd); break;
case 0x3881: intif_parse_RecvPetData(fd); break;
case 0x3882: intif_parse_SavePetOk(fd); break;
case 0x3883: intif_parse_DeletePetOk(fd); break;
default:
if(battle_config.error_log)
printf("intif_parse : unknown packet %d %x\n",fd,RFIFOW(fd,0));
return 0;
}
// 僷働僢僩撉傒旘偽偟
RFIFOSKIP(fd,packet_len);
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -