📄 int_guild.c
字号:
g->average_lv=master->lv;
for(i=0;i<5;i++)
g->skill[i].id=i+10000;
numdb_insert(guild_db,g->guild_id,g);
mapif_guild_created(fd,account_id,g);
mapif_guild_info(fd,g);
inter_log("guild %s (id=%d) created by master %s (id=%d)" RETCODE,
name, g->guild_id, master->name, master->account_id );
return 0;
}
// 僊儖僪忣曬梫媮
int mapif_parse_GuildInfo(int fd,int guild_id)
{
struct guild *g;
g=numdb_search(guild_db,guild_id);
if(g!=NULL){
guild_calcinfo(g);
mapif_guild_info(fd,g);
}else
mapif_guild_noinfo(fd,guild_id);
return 0;
}
// 僊儖僪儊儞僶捛壛梫媮
int mapif_parse_GuildAddMember(int fd,int guild_id,struct guild_member *m)
{
struct guild *g;
int i;
g=numdb_search(guild_db,guild_id);
if(g==NULL){
mapif_guild_memberadded(fd,guild_id,m->account_id,m->char_id,1);
return 0;
}
for(i=0;i<g->max_member;i++){
if(g->member[i].account_id==0){
memcpy(&g->member[i],m,sizeof(struct guild_member));
mapif_guild_memberadded(fd,guild_id,m->account_id,m->char_id,0);
guild_calcinfo(g);
mapif_guild_info(-1,g);
return 0;
}
}
mapif_guild_memberadded(fd,guild_id,m->account_id,m->char_id,1);
return 0;
}
// 僊儖僪扙戅/捛曻梫媮
int mapif_parse_GuildLeave(int fd,int guild_id,int account_id,int char_id,int flag,const char *mes)
{
struct guild *g=NULL;
g=numdb_search(guild_db,guild_id);
if(g!=NULL){
int i;
for(i=0;i<MAX_GUILD;i++){
if( g->member[i].account_id==account_id &&
g->member[i].char_id==char_id){
// printf("%d %d\n",i, (int)(&g->member[i]));
// printf("%d %s\n",i, g->member[i].name);
if(flag){ // 捛曻偺応崌捛曻儕僗僩偵擖傟傞
int j;
for(j=0;j<MAX_GUILDEXPLUSION;j++){
if(g->explusion[j].account_id==0)
break;
}
if(j==MAX_GUILDEXPLUSION){ // 堦攖側偺偱屆偄偺傪徚偡
for(j=0;j<MAX_GUILDEXPLUSION-1;j++)
g->explusion[j]=g->explusion[j+1];
j=MAX_GUILDEXPLUSION-1;
}
g->explusion[j].account_id=account_id;
memcpy(g->explusion[j].acc,"dummy",24);
memcpy(g->explusion[j].name,g->member[i].name,24);
memcpy(g->explusion[j].mes,mes,40);
}
mapif_guild_leaved(guild_id,account_id,char_id,flag,g->member[i].name,mes);
// printf("%d %d\n",i, (int)(&g->member[i]));
// printf("%d %s\n",i, (&g->member[i])->name);
memset(&g->member[i],0,sizeof(struct guild_member));
if( guild_check_empty(g)==0 )
mapif_guild_info(-1,g);// 傑偩恖偑偄傞偺偱僨乕僞憲怣
else
inter_guild_save(); // 夝嶶偟偨偺偱堦墳僙乕僽
return 0;
}
}
}
return 0;
}
// 僆儞儔僀儞/Lv峏怴
int mapif_parse_GuildChangeMemberInfoShort(int fd,int guild_id,
int account_id,int char_id,int online,int lv,int class)
{
struct guild *g;
int i,alv,c;
g=numdb_search(guild_db,guild_id);
if(g==NULL){
return 0;
}
g->connect_member=0;
for(i=0,alv=0,c=0;i<MAX_GUILD;i++){
if( g->member[i].account_id==account_id &&
g->member[i].char_id==char_id){
g->member[i].online=online;
g->member[i].lv=lv;
g->member[i].class=class;
mapif_guild_memberinfoshort(g,i);
}
if( g->member[i].account_id>0 ){
alv+=g->member[i].lv;
c++;
}
if( g->member[i].online )
g->connect_member++;
}
// 暯嬒儗儀儖
g->average_lv=alv/c;
if(online==0) // 扤偐偑儘僌傾僂僩偡傞偛偲偵僙乕僽
inter_guild_save();
return 0;
}
// 僊儖僪夝嶶張棟梡乮摨柨/揋懳傪夝彍乯
int guild_break_sub(void *key,void *data,va_list ap)
{
struct guild *g=(struct guild *)data;
int guild_id=va_arg(ap,int);
int i;
for(i=0;i<MAX_GUILDALLIANCE;i++){
if(g->alliance[i].guild_id==guild_id)
g->alliance[i].guild_id=0;
}
return 0;
}
// 僊儖僪夝嶶梫媮
int mapif_parse_BreakGuild(int fd,int guild_id)
{
struct guild *g;
g=numdb_search(guild_db,guild_id);
if(g==NULL){
return 0;
}
numdb_foreach(guild_db,guild_break_sub,guild_id);
numdb_erase(guild_db,guild_id);
inter_guild_storage_delete(guild_id);
mapif_guild_broken(guild_id,0);
inter_log("guild %s (id=%d) broken" RETCODE,g->name,guild_id);
free(g);
return 0;
}
// 僊儖僪儊僢僙乕僕憲怣
int mapif_parse_GuildMessage(int fd,int guild_id,int account_id,char *mes,int len)
{
return mapif_guild_message(guild_id,account_id,mes,len);
}
// 僊儖僪婎杮僨乕僞曄峏梫媮
int mapif_parse_GuildBasicInfoChange(int fd,int guild_id,
int type,const char *data,int len)
{
struct guild *g;
// int dd=*((int *)data);
short dw=*((short *)data);
g=numdb_search(guild_db,guild_id);
if(g==NULL){
return 0;
}
switch(type){
case GBI_GUILDLV: {
if(dw>0 && g->guild_lv+dw<=50){
g->guild_lv+=dw;
g->skill_point+=dw;
}else if(dw<0 && g->guild_lv+dw>=1)
g->guild_lv+=dw;
mapif_guild_info(-1,g);
} return 0;
default:
printf("int_guild: GuildBasicInfoChange: Unknown type %d\n",type);
break;
}
mapif_guild_basicinfochanged(guild_id,type,data,len);
return 0;
}
// 僊儖僪儊儞僶僨乕僞曄峏梫媮
int mapif_parse_GuildMemberInfoChange(int fd,int guild_id,int account_id,int char_id,
int type,const char *data,int len)
{
int i;
struct guild *g;
g=numdb_search(guild_db,guild_id);
if(g==NULL){
return 0;
}
for(i=0;i<g->max_member;i++)
if( g->member[i].account_id==account_id &&
g->member[i].char_id==char_id )
break;
if(i==g->max_member){
printf("int_guild: GuildMemberChange: Not found %d,%d in %d[%s]\n",
account_id,char_id,guild_id,g->name);
return 0;
}
switch(type){
case GMI_POSITION: // 栶怑
g->member[i].position=*((int *)data);
break;
case GMI_EXP: { // EXP
int exp,oldexp=g->member[i].exp;
exp=g->member[i].exp=*((unsigned int *)data);
g->exp+=(exp-oldexp);
guild_calcinfo(g); // Lv傾僢僾敾抐
mapif_guild_basicinfochanged(guild_id,GBI_EXP,&g->exp,4);
}break;
default:
printf("int_guild: GuildMemberInfoChange: Unknown type %d\n",type);
break;
}
mapif_guild_memberinfochanged(guild_id,account_id,char_id,type,data,len);
return 0;
}
// 僊儖僪栶怑柤曄峏梫媮
int mapif_parse_GuildPosition(int fd,int guild_id,int idx,struct guild_position *p)
{
struct guild *g=numdb_search(guild_db,guild_id);
if(g==NULL || idx<0 || idx>=MAX_GUILDPOSITION){
return 0;
}
memcpy(&g->position[idx],p,sizeof(struct guild_position));
mapif_guild_position(g,idx);
printf("int_guild: position changed %d\n",idx);
return 0;
}
// 僊儖僪僗僉儖傾僢僾梫媮
int mapif_parse_GuildSkillUp(int fd,int guild_id,int skill_num,int account_id)
{
struct guild *g=numdb_search(guild_db,guild_id);
int idx=skill_num-10000;
if(g==NULL || skill_num<10000)
return 0;
if( g->skill_point>0 && g->skill[idx].id>0 &&
g->skill[idx].lv<10 ){
g->skill[idx].lv++;
g->skill_point--;
if(guild_calcinfo(g)==0)
mapif_guild_info(-1,g);
mapif_guild_skillupack(guild_id,skill_num,account_id);
printf("int_guild: skill %d up\n",skill_num);
}
return 0;
}
// 僊儖僪摨柨梫媮
int mapif_parse_GuildAlliance(int fd,int guild_id1,int guild_id2,
int account_id1,int account_id2,int flag)
{
struct guild *g[2];
int j,i;
g[0]=numdb_search(guild_db,guild_id1);
g[1]=numdb_search(guild_db,guild_id2);
if(g[0]==NULL || g[1]==NULL)
return 0;
if(!(flag&0x8)){
for(i=0;i<2-(flag&1);i++){
for(j=0;j<MAX_GUILDALLIANCE;j++)
if(g[i]->alliance[j].guild_id==0){
g[i]->alliance[j].guild_id=g[1-i]->guild_id;
memcpy(g[i]->alliance[j].name,g[1-i]->name,24);
g[i]->alliance[j].opposition=flag&1;
break;
}
}
}else{ // 娭學夝徚
for(i=0;i<2-(flag&1);i++){
for(j=0;j<MAX_GUILDALLIANCE;j++)
if( g[i]->alliance[j].guild_id==g[1-i]->guild_id &&
g[i]->alliance[j].opposition==(flag&1)){
g[i]->alliance[j].guild_id=0;
break;
}
}
}
mapif_guild_alliance(guild_id1,guild_id2,account_id1,account_id2,flag,
g[0]->name,g[1]->name);
return 0;
}
// 僊儖僪崘抦曄峏梫媮
int mapif_parse_GuildNotice(int fd,int guild_id,const char *mes1,const char *mes2)
{
struct guild *g;
g=numdb_search(guild_db,guild_id);
if(g==NULL)
return 0;
memcpy(g->mes1,mes1,60);
memcpy(g->mes2,mes2,120);
return mapif_guild_notice(g);
}
// 僊儖僪僄儞僽儗儉曄峏梫媮
int mapif_parse_GuildEmblem(int fd,int len,int guild_id,int dummy,const char *data)
{
struct guild *g;
g=numdb_search(guild_db,guild_id);
if(g==NULL)
return 0;
memcpy(g->emblem_data,data,len);
g->emblem_len=len;
g->emblem_id++;
return mapif_guild_emblem(g);
}
int mapif_parse_GuildCastleDataLoad(int fd,int castle_id,int index)
{
struct guild_castle *gc=numdb_search(castle_db,castle_id);
if(gc==NULL){
return mapif_guild_castle_dataload(castle_id,0,0);
}
switch(index){
case 1: return mapif_guild_castle_dataload(gc->castle_id,index,gc->guild_id); break;
case 2: return mapif_guild_castle_dataload(gc->castle_id,index,gc->economy); break;
case 3: return mapif_guild_castle_dataload(gc->castle_id,index,gc->defense); break;
case 4: return mapif_guild_castle_dataload(gc->castle_id,index,gc->triggerE); break;
case 5: return mapif_guild_castle_dataload(gc->castle_id,index,gc->triggerD); break;
case 6: return mapif_guild_castle_dataload(gc->castle_id,index,gc->nextTime); break;
case 7: return mapif_guild_castle_dataload(gc->castle_id,index,gc->payTime); break;
case 8: return mapif_guild_castle_dataload(gc->castle_id,index,gc->createTime); break;
case 9: return mapif_guild_castle_dataload(gc->castle_id,index,gc->visibleC); break;
case 10: return mapif_guild_castle_dataload(gc->castle_id,index,gc->visibleG0); break;
case 11: return mapif_guild_castle_dataload(gc->castle_id,index,gc->visibleG1); break;
case 12: return mapif_guild_castle_dataload(gc->castle_id,index,gc->visibleG2); break;
case 13: return mapif_guild_castle_dataload(gc->castle_id,index,gc->visibleG3); break;
case 14: return mapif_guild_castle_dataload(gc->castle_id,index,gc->visibleG4); break;
case 15: return mapif_guild_castle_dataload(gc->castle_id,index,gc->visibleG5); break;
case 16: return mapif_guild_castle_dataload(gc->castle_id,index,gc->visibleG6); break;
case 17: return mapif_guild_castle_dataload(gc->castle_id,index,gc->visibleG7); break;
default:
printf("mapif_parse_GuildCastleDataLoad ERROR!! (Not found index=%d)\n", index);
return 0;
}
return 0;
}
int mapif_parse_GuildCastleDataSave(int fd,int castle_id,int index,int value)
{
struct guild_castle *gc=numdb_search(castle_db,castle_id);
if(gc==NULL){
return mapif_guild_castle_datasave(castle_id,index,value);
}
switch(index){
case 1:
if( gc->guild_id!=value ){
int gid=(value)?value:gc->guild_id;
struct guild *g=numdb_search(guild_db, gid);
inter_log("guild %s (id=%d) %s castle id=%d" RETCODE,
(g)?g->name:"??" ,gid, (value)?"occupy":"abandon", index);
}
gc->guild_id = value;
break;
case 2: gc->economy = value; break;
case 3: gc->defense = value; break;
case 4: gc->triggerE = value; break;
case 5: gc->triggerD = value; break;
case 6: gc->nextTime = value; break;
case 7: gc->payTime = value; break;
case 8: gc->createTime = value; break;
case 9: gc->visibleC = value; break;
case 10: gc->visibleG0 = value; break;
case 11: gc->visibleG1 = value; break;
case 12: gc->visibleG2 = value; break;
case 13: gc->visibleG3 = value; break;
case 14: gc->visibleG4 = value; break;
case 15: gc->visibleG5 = value; break;
case 16: gc->visibleG6 = value; break;
case 17: gc->visibleG7 = value; break;
default:
printf("mapif_parse_GuildCastleDataSave ERROR!! (Not found index=%d)\n", index);
return 0;
}
inter_guild_save();
return mapif_guild_castle_datasave(gc->castle_id,index,value);
}
// 僊儖僪僠僃僢僋梫媮
int mapif_parse_GuildCheck(int fd,int guild_id,int account_id,int char_id)
{
return guild_check_conflict(guild_id,account_id,char_id);
}
// map server 偐傜偺捠怣
// 丒侾僷働僢僩偺傒夝愅偡傞偙偲
// 丒僷働僢僩挿僨乕僞偼inter.c偵僙僢僩偟偰偍偔偙偲
// 丒僷働僢僩挿僠僃僢僋傗丄RFIFOSKIP偼屇傃弌偟尦偱峴傢傟傞偺偱峴偭偰偼側傜側偄
// 丒僄儔乕側傜0(false)丄偦偆偱側偄側傜1(true)傪偐偊偝側偗傟偽側傜側偄
int inter_guild_parse_frommap(int fd)
{
switch(RFIFOW(fd,0)){
case 0x3030: mapif_parse_CreateGuild(fd,RFIFOL(fd,4),RFIFOP(fd,8),(struct guild_member *)RFIFOP(fd,32)); break;
case 0x3031: mapif_parse_GuildInfo(fd,RFIFOL(fd,2)); break;
case 0x3032: mapif_parse_GuildAddMember(fd,RFIFOL(fd,4),(struct guild_member *)RFIFOP(fd,8)); break;
case 0x3034: mapif_parse_GuildLeave(fd,RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOB(fd,14),RFIFOP(fd,15)); break;
case 0x3035: mapif_parse_GuildChangeMemberInfoShort(fd,RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOB(fd,14),RFIFOW(fd,15),RFIFOW(fd,17)); break;
case 0x3036: mapif_parse_BreakGuild(fd,RFIFOL(fd,2)); break;
case 0x3037: mapif_parse_GuildMessage(fd,RFIFOL(fd,4),RFIFOL(fd,8),RFIFOP(fd,12),RFIFOW(fd,2)-12); break;
case 0x3038: mapif_parse_GuildCheck(fd,RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10)); break;
case 0x3039: mapif_parse_GuildBasicInfoChange(fd,RFIFOL(fd,4),RFIFOW(fd,8),RFIFOP(fd,10),RFIFOW(fd,2)-10); break;
case 0x303A: mapif_parse_GuildMemberInfoChange(fd,RFIFOL(fd,4),RFIFOL(fd,8),RFIFOL(fd,12),RFIFOW(fd,16),RFIFOP(fd,18),RFIFOW(fd,2)-18); break;
case 0x303B: mapif_parse_GuildPosition(fd,RFIFOL(fd,4),RFIFOL(fd,8),(struct guild_position *)RFIFOP(fd,12)); break;
case 0x303C: mapif_parse_GuildSkillUp(fd,RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10)); break;
case 0x303D: mapif_parse_GuildAlliance(fd,RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOL(fd,14),RFIFOB(fd,18)); break;
case 0x303E: mapif_parse_GuildNotice(fd,RFIFOL(fd,2),RFIFOP(fd,6),RFIFOP(fd,66)); break;
case 0x303F: mapif_parse_GuildEmblem(fd,RFIFOW(fd,2)-12,RFIFOL(fd,4),RFIFOL(fd,8),RFIFOP(fd,12)); break;
case 0x3040: mapif_parse_GuildCastleDataLoad(fd,RFIFOW(fd,2),RFIFOB(fd,4)); break;
case 0x3041: mapif_parse_GuildCastleDataSave(fd,RFIFOW(fd,2),RFIFOB(fd,4),RFIFOL(fd,5)); break;
default:
return 0;
}
return 1;
}
// 儅僢僾僒乕僶乕偺愙懕帪張棟
int inter_guild_mapif_init(int fd)
{
return mapif_guild_castle_alldataload(fd);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -