📄 intif.c
字号:
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <sys/time.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <signal.h>
#include <fcntl.h>
#include <string.h>
#include <arpa/inet.h>
#include "socket.h"
#include "timer.h"
#include "map.h"
#include "battle.h"
#include "chrif.h"
#include "clif.h"
#include "pc.h"
#include "intif.h"
#include "storage.h"
#include "party.h"
#include "guild.h"
#include "pet.h"
#ifdef MEMWATCH
#include "memwatch.h"
#endif
static const int packet_len_table[]={
-1,-1,27, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-1, 7, 0, 0, 0, 0, 0, 0, -1,11, 0, 0, 0, 0, 0, 0,
35,-1,11,15, 34,29, 7,-1, 0, 0, 0, 0, 0, 0, 0, 0,
10,-1,15, 0, 79,19, 7,-1, 0,-1,-1,-1, 14,67,186,-1,
9, 9,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11,-1, 7, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};
extern int char_fd; // inter server偺fd偼char_fd傪巊偆
#define inter_fd (char_fd) // 僄僀儕傾僗
//-----------------------------------------------------------------
// inter server傊偺憲怣
// pet
int intif_create_pet(int account_id,int char_id,short pet_class,short pet_lv,short pet_egg_id,
short pet_equip,short intimate,short hungry,char rename_flag,char incuvate,char *pet_name)
{
WFIFOW(inter_fd,0) = 0x3080;
WFIFOL(inter_fd,2) = account_id;
WFIFOL(inter_fd,6) = char_id;
WFIFOW(inter_fd,10) = pet_class;
WFIFOW(inter_fd,12) = pet_lv;
WFIFOW(inter_fd,14) = pet_egg_id;
WFIFOW(inter_fd,16) = pet_equip;
WFIFOW(inter_fd,18) = intimate;
WFIFOW(inter_fd,20) = hungry;
WFIFOB(inter_fd,22) = rename_flag;
WFIFOB(inter_fd,23) = incuvate;
memcpy(WFIFOP(inter_fd,24),pet_name,24);
WFIFOSET(inter_fd,48);
return 0;
}
int intif_request_petdata(int account_id,int char_id,int pet_id)
{
WFIFOW(inter_fd,0) = 0x3081;
WFIFOL(inter_fd,2) = account_id;
WFIFOL(inter_fd,6) = char_id;
WFIFOL(inter_fd,10) = pet_id;
WFIFOSET(inter_fd,14);
return 0;
}
int intif_save_petdata(int account_id,struct s_pet *p)
{
WFIFOW(inter_fd,0) = 0x3082;
WFIFOW(inter_fd,2) = sizeof(struct s_pet) + 8;
WFIFOL(inter_fd,4) = account_id;
memcpy(WFIFOP(inter_fd,8),p,sizeof(struct s_pet));
WFIFOSET(inter_fd,WFIFOW(inter_fd,2));
return 0;
}
int intif_delete_petdata(int pet_id)
{
WFIFOW(inter_fd,0) = 0x3083;
WFIFOL(inter_fd,2) = pet_id;
WFIFOSET(inter_fd,6);
return 0;
}
// GM儊僢僙乕僕傪憲怣
int intif_GMmessage(char* mes,int len,int flag)
{
int lp=(flag&0x10)?8:4;
WFIFOW(inter_fd,0) = 0x3000;
WFIFOW(inter_fd,2) = lp+len;
WFIFOL(inter_fd,4) = 0x65756c62;
memcpy(WFIFOP(inter_fd,lp), mes, len);
WFIFOSET(inter_fd, WFIFOW(inter_fd,2) );
return 0;
}
// Wis偺憲怣
int intif_wis_message(struct map_session_data *sd,char *nick,char *mes,int mes_len)
{
WFIFOW(inter_fd,0) = 0x3001;
WFIFOW(inter_fd,2) = mes_len+52;
memcpy(WFIFOP(inter_fd,4),sd->status.name,24);
memcpy(WFIFOP(inter_fd,28),nick,24);
memcpy(WFIFOP(inter_fd,52),mes,mes_len);
WFIFOSET(inter_fd, WFIFOW(inter_fd,2) );
// if(battle_config.etc_log)
// printf("intif_wis_message %s %s %s\n",sd->status.name,nick,mes);
return 0;
}
// Wis偺曉帠
int intif_wis_replay(int id,int flag)
{
WFIFOW(inter_fd,0) = 0x3002;
WFIFOL(inter_fd,2) = id;
WFIFOB(inter_fd,6) = flag;
WFIFOSET(inter_fd,7);
// if(battle_config.etc_log)
// printf("intif_wis_replay %d %d\n",id,flag);
return 0;
}
// 傾僇僂儞僩曄悢憲怣
int intif_saveaccountreg(struct map_session_data *sd)
{
int j,p;
WFIFOW(inter_fd,0) = 0x3004;
WFIFOL(inter_fd,4) = sd->bl.id;
for(j=0,p=8;j<sd->status.account_reg_num;j++,p+=36){
memcpy(WFIFOP(inter_fd,p),sd->status.account_reg[j].str,32);
WFIFOL(inter_fd,p+32)=sd->status.account_reg[j].value;
}
WFIFOW(inter_fd,2)=p;
WFIFOSET(inter_fd,p);
return 0;
}
// 傾僇僂儞僩曄悢梫媮
int intif_request_accountreg(struct map_session_data *sd)
{
WFIFOW(inter_fd,0) = 0x3005;
WFIFOL(inter_fd,2) = sd->bl.id;
WFIFOSET(inter_fd,6);
return 0;
}
// 憅屔僨乕僞梫媮
int intif_request_storage(int account_id)
{
WFIFOW(inter_fd,0) = 0x3010;
WFIFOL(inter_fd,2) = account_id;
WFIFOSET(inter_fd,6);
return 0;
}
// 憅屔僨乕僞憲怣
int intif_send_storage(struct storage *stor)
{
WFIFOW(inter_fd,0) = 0x3011;
WFIFOW(inter_fd,2) = sizeof(struct storage)+8;
WFIFOL(inter_fd,4) = stor->account_id;
memcpy( WFIFOP(inter_fd,8),stor, sizeof(struct storage) );
WFIFOSET(inter_fd,WFIFOW(inter_fd,2));
return 0;
}
int intif_request_guild_storage(int account_id,int guild_id)
{
WFIFOW(inter_fd,0) = 0x3018;
WFIFOL(inter_fd,2) = account_id;
WFIFOL(inter_fd,6) = guild_id;
WFIFOSET(inter_fd,10);
return 0;
}
int intif_send_guild_storage(int account_id,struct guild_storage *gstor)
{
WFIFOW(inter_fd,0) = 0x3019;
WFIFOW(inter_fd,2) = sizeof(struct guild_storage)+12;
WFIFOL(inter_fd,4) = account_id;
WFIFOL(inter_fd,8) = gstor->guild_id;
memcpy( WFIFOP(inter_fd,12),gstor, sizeof(struct guild_storage) );
WFIFOSET(inter_fd,WFIFOW(inter_fd,2));
return 0;
}
// 僷乕僥傿嶌惉梫媮
int intif_create_party(struct map_session_data *sd,char *name)
{
WFIFOW(inter_fd,0) = 0x3020;
WFIFOL(inter_fd,2) = sd->status.account_id;
memcpy(WFIFOP(inter_fd, 6),name,24);
memcpy(WFIFOP(inter_fd,30),sd->status.name,24);
memcpy(WFIFOP(inter_fd,54),map[sd->bl.m].name,16);
WFIFOW(inter_fd,70)= sd->status.base_level;
WFIFOSET(inter_fd,72);
// if(battle_config.etc_log)
// printf("intif: create party\n");
return 0;
}
// 僷乕僥傿忣曬梫媮
int intif_request_partyinfo(int party_id)
{
WFIFOW(inter_fd,0) = 0x3021;
WFIFOL(inter_fd,2) = party_id;
WFIFOSET(inter_fd,6);
// if(battle_config.etc_log)
// printf("intif: request party info\n");
return 0;
}
// 僷乕僥傿捛壛梫媮
int intif_party_addmember(int party_id,int account_id)
{
struct map_session_data *sd;
sd=map_id2sd(account_id);
// if(battle_config.etc_log)
// printf("intif: party add member %d %d\n",party_id,account_id);
if(sd!=NULL){
WFIFOW(inter_fd,0)=0x3022;
WFIFOL(inter_fd,2)=party_id;
WFIFOL(inter_fd,6)=account_id;
memcpy(WFIFOP(inter_fd,10),sd->status.name,24);
memcpy(WFIFOP(inter_fd,34),map[sd->bl.m].name,16);
WFIFOW(inter_fd,50)=sd->status.base_level;
WFIFOSET(inter_fd,52);
}
return 0;
}
// 僷乕僥傿愝掕曄峏
int intif_party_changeoption(int party_id,int account_id,int exp,int item)
{
WFIFOW(inter_fd,0)=0x3023;
WFIFOL(inter_fd,2)=party_id;
WFIFOL(inter_fd,6)=account_id;
WFIFOW(inter_fd,10)=exp;
WFIFOW(inter_fd,12)=item;
WFIFOSET(inter_fd,14);
return 0;
}
// 僷乕僥傿扙戅梫媮
int intif_party_leave(int party_id,int account_id)
{
// if(battle_config.etc_log)
// printf("intif: party leave %d %d\n",party_id,account_id);
WFIFOW(inter_fd,0)=0x3024;
WFIFOL(inter_fd,2)=party_id;
WFIFOL(inter_fd,6)=account_id;
WFIFOSET(inter_fd,10);
return 0;
}
// 僷乕僥傿堏摦梫媮
int intif_party_changemap(struct map_session_data *sd,int online)
{
if(sd!=NULL){
WFIFOW(inter_fd,0)=0x3025;
WFIFOL(inter_fd,2)=sd->status.party_id;
WFIFOL(inter_fd,6)=sd->status.account_id;
memcpy(WFIFOP(inter_fd,10),map[sd->bl.m].name,16);
WFIFOB(inter_fd,26)=online;
WFIFOW(inter_fd,27)=sd->status.base_level;
WFIFOSET(inter_fd,29);
}
// if(battle_config.etc_log)
// printf("party: change map\n");
return 0;
}
// 僷乕僥傿乕夝嶶梫媮
int intif_break_party(int party_id)
{
WFIFOW(inter_fd,0)=0x3026;
WFIFOL(inter_fd,2)=party_id;
WFIFOSET(inter_fd,6);
return 0;
}
// 僷乕僥傿夛榖憲怣
int intif_party_message(int party_id,int account_id,char *mes,int len)
{
// if(battle_config.etc_log)
// printf("intif_party_message: %s\n",mes);
WFIFOW(inter_fd,0)=0x3027;
WFIFOW(inter_fd,2)=len+12;
WFIFOL(inter_fd,4)=party_id;
WFIFOL(inter_fd,8)=account_id;
memcpy(WFIFOP(inter_fd,12),mes,len);
WFIFOSET(inter_fd,len+12);
return 0;
}
// 僷乕僥傿嫞崌僠僃僢僋梫媮
int intif_party_checkconflict(int party_id,int account_id,char *nick)
{
WFIFOW(inter_fd,0)=0x3028;
WFIFOL(inter_fd,2)=party_id;
WFIFOL(inter_fd,6)=account_id;
memcpy(WFIFOP(inter_fd,10),nick,24);
WFIFOSET(inter_fd,34);
return 0;
}
// 僊儖僪嶌惉梫媮
int intif_guild_create(const char *name,const struct guild_member *master)
{
WFIFOW(inter_fd,0)=0x3030;
WFIFOW(inter_fd,2)=sizeof(struct guild_member)+32;
WFIFOL(inter_fd,4)=master->account_id;
memcpy(WFIFOP(inter_fd,8),name,24);
memcpy(WFIFOP(inter_fd,32),master,sizeof(struct guild_member));
WFIFOSET(inter_fd,WFIFOW(inter_fd,2));
return 0;
}
// 僊儖僪忣曬梫媮
int intif_guild_request_info(int guild_id)
{
WFIFOW(inter_fd,0) = 0x3031;
WFIFOL(inter_fd,2) = guild_id;
WFIFOSET(inter_fd,6);
return 0;
}
// 僊儖僪儊儞僶捛壛梫媮
int intif_guild_addmember(int guild_id,struct guild_member *m)
{
WFIFOW(inter_fd,0) = 0x3032;
WFIFOW(inter_fd,2) = sizeof(struct guild_member)+8;
WFIFOL(inter_fd,4) = guild_id;
memcpy(WFIFOP(inter_fd,8),m,sizeof(struct guild_member));
WFIFOSET(inter_fd,WFIFOW(inter_fd,2));
return 0;
}
// 僊儖僪儊儞僶扙戅/捛曻梫媮
int intif_guild_leave(int guild_id,int account_id,int char_id,int flag,const char *mes)
{
WFIFOW(inter_fd, 0) = 0x3034;
WFIFOL(inter_fd, 2) = guild_id;
WFIFOL(inter_fd, 6) = account_id;
WFIFOL(inter_fd,10) = char_id;
WFIFOB(inter_fd,14) = flag;
memcpy(WFIFOP(inter_fd,15),mes,40);
WFIFOSET(inter_fd,55);
return 0;
}
// 僊儖僪儊儞僶偺僆儞儔僀儞忬嫷/Lv峏怴梫媮
int intif_guild_memberinfoshort(int guild_id,
int account_id,int char_id,int online,int lv,int class)
{
WFIFOW(inter_fd, 0) = 0x3035;
WFIFOL(inter_fd, 2) = guild_id;
WFIFOL(inter_fd, 6) = account_id;
WFIFOL(inter_fd,10) = char_id;
WFIFOB(inter_fd,14) = online;
WFIFOW(inter_fd,15) = lv;
WFIFOW(inter_fd,17) = class;
WFIFOSET(inter_fd,19);
return 0;
}
// 僊儖僪夝嶶捠抦
int intif_guild_break(int guild_id)
{
WFIFOW(inter_fd, 0) = 0x3036;
WFIFOL(inter_fd, 2) = guild_id;
WFIFOSET(inter_fd,6);
return 0;
}
// 僊儖僪夛榖憲怣
int intif_guild_message(int guild_id,int account_id,char *mes,int len)
{
WFIFOW(inter_fd,0)=0x3037;
WFIFOW(inter_fd,2)=len+12;
WFIFOL(inter_fd,4)=guild_id;
WFIFOL(inter_fd,8)=account_id;
memcpy(WFIFOP(inter_fd,12),mes,len);
WFIFOSET(inter_fd,len+12);
return 0;
}
// 僊儖僪嫞崌僠僃僢僋梫媮
int intif_guild_checkconflict(int guild_id,int account_id,int char_id)
{
WFIFOW(inter_fd, 0)=0x3038;
WFIFOL(inter_fd, 2)=guild_id;
WFIFOL(inter_fd, 6)=account_id;
WFIFOL(inter_fd,10)=char_id;
WFIFOSET(inter_fd,14);
return 0;
}
// 僊儖僪婎杮忣曬曄峏梫媮
int intif_guild_change_basicinfo(int guild_id,int type,const void *data,int len)
{
WFIFOW(inter_fd,0)=0x3039;
WFIFOW(inter_fd,2)=len+10;
WFIFOL(inter_fd,4)=guild_id;
WFIFOW(inter_fd,8)=type;
memcpy(WFIFOP(inter_fd,10),data,len);
WFIFOSET(inter_fd,len+10);
return 0;
}
// 僊儖僪儊儞僶忣曬曄峏梫媮
int intif_guild_change_memberinfo(int guild_id,int account_id,int char_id,
int type,const void *data,int len)
{
WFIFOW(inter_fd, 0)=0x303a;
WFIFOW(inter_fd, 2)=len+18;
WFIFOL(inter_fd, 4)=guild_id;
WFIFOL(inter_fd, 8)=account_id;
WFIFOL(inter_fd,12)=char_id;
WFIFOW(inter_fd,16)=type;
memcpy(WFIFOP(inter_fd,18),data,len);
WFIFOSET(inter_fd,len+18);
return 0;
}
// 僊儖僪栶怑曄峏梫媮
int intif_guild_position(int guild_id,int idx,struct guild_position *p)
{
WFIFOW(inter_fd,0)=0x303b;
WFIFOW(inter_fd,2)=sizeof(struct guild_position)+12;
WFIFOL(inter_fd,4)=guild_id;
WFIFOL(inter_fd,8)=idx;
memcpy(WFIFOP(inter_fd,12),p,sizeof(struct guild_position));
WFIFOSET(inter_fd,WFIFOW(inter_fd,2));
return 0;
}
// 僊儖僪僗僉儖傾僢僾梫媮
int intif_guild_skillup(int guild_id,int skill_num,int account_id)
{
WFIFOW(inter_fd, 0)=0x303c;
WFIFOL(inter_fd, 2)=guild_id;
WFIFOL(inter_fd, 6)=skill_num;
WFIFOL(inter_fd,10)=account_id;
WFIFOSET(inter_fd,14);
return 0;
}
// 僊儖僪摨柨/揋懳梫媮
int intif_guild_alliance(int guild_id1,int guild_id2,int account_id1,int account_id2,int flag)
{
WFIFOW(inter_fd, 0)=0x303d;
WFIFOL(inter_fd, 2)=guild_id1;
WFIFOL(inter_fd, 6)=guild_id2;
WFIFOL(inter_fd,10)=account_id1;
WFIFOL(inter_fd,14)=account_id2;
WFIFOB(inter_fd,18)=flag;
WFIFOSET(inter_fd,19);
return 0;
}
// 僊儖僪崘抦曄峏梫媮
int intif_guild_notice(int guild_id,const char *mes1,const char *mes2)
{
WFIFOW(inter_fd,0)=0x303e;
WFIFOL(inter_fd,2)=guild_id;
memcpy(WFIFOP(inter_fd,6),mes1,60);
memcpy(WFIFOP(inter_fd,66),mes2,120);
WFIFOSET(inter_fd,186);
return 0;
}
// 僊儖僪僄儞僽儗儉曄峏梫媮
int intif_guild_emblem(int guild_id,int len,const char *data)
{
if(guild_id<=0 || len<0 || len>2000)
return 0;
WFIFOW(inter_fd,0)=0x303f;
WFIFOW(inter_fd,2)=len+12;
WFIFOL(inter_fd,4)=guild_id;
WFIFOL(inter_fd,8)=0;
memcpy(WFIFOP(inter_fd,12),data,len);
WFIFOSET(inter_fd,len+12);
return 0;
}
//尰嵼偺僊儖僪忛愯椞僊儖僪傪挷傋傞
int intif_guild_castle_dataload(int castle_id,int index)
{
WFIFOW(inter_fd,0)=0x3040;
WFIFOW(inter_fd,2)=castle_id;
WFIFOB(inter_fd,4)=index;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -