亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? int_guild.c

?? 最新的仙鏡傳說服務器C語言源碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
#include "inter.h"
#include "int_guild.h"
#include "int_storage.h"
#include "mmo.h"
#include "char.h"
#include "socket.h"
#include "db.h"
#include "lock.h"

#include <string.h>
#include <stdio.h>
#include <stdlib.h>

char guild_txt[1024]="save/guild.txt";
char castle_txt[1024]="save/castle.txt";


static struct dbt *guild_db;
static struct dbt *castle_db;

static int guild_newid=10000;

static int guild_exp[100];

int mapif_parse_GuildLeave(int fd,int guild_id,int account_id,int char_id,int flag,const char *mes);
int mapif_guild_broken(int guild_id,int flag);
int guild_check_empty(struct guild *g);
int guild_calcinfo(struct guild *g);
int mapif_guild_basicinfochanged(int guild_id,int type,const void *data,int len);
int mapif_guild_info(int fd,struct guild *g);
int guild_break_sub(void *key,void *data,va_list ap);


// 僊儖僪僨乕僞偺暥帤楍傊偺曄姺
int inter_guild_tostr(char *str,struct guild *g)
{
	int i,c,len;
	// 婎杮僨乕僞
	len=sprintf(str,"%d\t%s\t%s\t%d,%d,%d,%d,%d\t%s#\t%s#\t",
		g->guild_id,g->name,g->master,
		g->guild_lv,g->max_member,g->exp,g->skill_point,g->castle_id,
		g->mes1,g->mes2);
	// 儊儞僶乕
	for(i=0;i<g->max_member;i++){
		struct guild_member *m = &g->member[i];
		len+=sprintf(str+len,"%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\t%s\t",
			m->account_id,m->char_id,
			m->hair,m->hair_color,m->gender,
			m->class,m->lv,m->exp,m->exp_payper,m->position,
			((m->account_id>0)?m->name:"-"));
	}
	// 栶怑
	for(i=0;i<MAX_GUILDPOSITION;i++){
		struct guild_position *p = &g->position[i];
		len+=sprintf(str+len,"%d,%d\t%s#\t",
			p->mode,p->exp_mode,p->name);
	}
	// 僄儞僽儗儉
	len+=sprintf(str+len,"%d,%d,",g->emblem_len,g->emblem_id);
	for(i=0;i<g->emblem_len;i++){
		len+=sprintf(str+len,"%02x",(unsigned char)(g->emblem_data[i]));
	}
	len+=sprintf(str+len,"$\t");
	// 摨柨儕僗僩
	for(i=0,c=0;i<MAX_GUILDALLIANCE;i++)
		if(g->alliance[i].guild_id>0)
			c++;
	len+=sprintf(str+len,"%d\t",c);
	for(i=0;i<MAX_GUILDALLIANCE;i++){
		struct guild_alliance *a=&g->alliance[i];
		if(a->guild_id>0)
			len+=sprintf(str+len,"%d,%d\t%s\t",
				a->guild_id,a->opposition,a->name);
	}
	// 捛曻儕僗僩
	for(i=0,c=0;i<MAX_GUILDEXPLUSION;i++)
		if(g->explusion[i].account_id>0)
			c++;
	len+=sprintf(str+len,"%d\t",c);
	for(i=0;i<MAX_GUILDEXPLUSION;i++){
		struct guild_explusion *e=&g->explusion[i];
		if(e->account_id>0)
			len+=sprintf(str+len,"%d,%d,%d,%d\t%s\t%s\t%s#\t",
				e->account_id,e->rsv1,e->rsv2,e->rsv3,
				e->name,e->acc,e->mes );
	}
	// 僊儖僪僗僉儖
	for(i=0;i<MAX_GUILDSKILL;i++){
		len+=sprintf(str+len,"%d,%d ",g->skill[i].id,g->skill[i].lv);
	}
	len+=sprintf(str+len,"\t");
	return 0;
}
// 僊儖僪僨乕僞偺暥帤楍偐傜偺曄姺
int inter_guild_fromstr(char *str,struct guild *g)
{
	int i,j,c;
	int tmp_int[16];
	char tmp_str[4][256];
	char tmp_str2[4096];
	char *pstr;
	
	// 婎杮僨乕僞
	memset(g,0,sizeof(struct guild));
	if( sscanf(str,"%d\t%[^\t]\t%[^\t]\t%d,%d,%d,%d,%d\t%[^\t]\t%[^\t]\t",&tmp_int[0],
		tmp_str[0],tmp_str[1],
		&tmp_int[1],&tmp_int[2],&tmp_int[3],&tmp_int[4],&tmp_int[5],
		tmp_str[2],tmp_str[3]) <8)
		return 1;
	g->guild_id=tmp_int[0];
	g->guild_lv=tmp_int[1];
	g->max_member=tmp_int[2];
	g->exp=tmp_int[3];
	g->skill_point=tmp_int[4];
	g->castle_id=tmp_int[5];
	memcpy(g->name,tmp_str[0],24);
	memcpy(g->master,tmp_str[1],24);
	memcpy(g->mes1,tmp_str[2],60);
	memcpy(g->mes2,tmp_str[3],120);
	g->mes1[strlen(g->mes1)-1]=0;
	g->mes2[strlen(g->mes2)-1]=0;

	for(j=0;j<6 && str!=NULL;j++)	// 埵抲僗僉僢僾
		str=strchr(str+1,'\t');
//	printf("GuildBaseInfo OK\n");
	
	// 儊儞僶乕
	for(i=0;i<g->max_member;i++){
		struct guild_member *m = &g->member[i];
		if( sscanf(str+1,"%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\t%[^\t]\t",
			&tmp_int[0],&tmp_int[1],&tmp_int[2],&tmp_int[3],&tmp_int[4],
			&tmp_int[5],&tmp_int[6],&tmp_int[7],&tmp_int[8],&tmp_int[9],
			tmp_str[0]) <11)
			return 1;
		m->account_id=tmp_int[0];
		m->char_id=tmp_int[1];
		m->hair=tmp_int[2];
		m->hair_color=tmp_int[3];
		m->gender=tmp_int[4];
		m->class=tmp_int[5];
		m->lv=tmp_int[6];
		m->exp=tmp_int[7];
		m->exp_payper=tmp_int[8];
		m->position=tmp_int[9];
		memcpy(m->name,tmp_str[0],24);
		
		for(j=0;j<2 && str!=NULL;j++)	// 埵抲僗僉僢僾
			str=strchr(str+1,'\t');
	}
//	printf("GuildMemberInfo OK\n");
	// 栶怑
	for(i=0;i<MAX_GUILDPOSITION;i++){
		struct guild_position *p = &g->position[i];
		if( sscanf(str+1,"%d,%d\t%[^\t]\t",
			&tmp_int[0],&tmp_int[1],tmp_str[0]) < 3)
			return 1;
		p->mode=tmp_int[0];
		p->exp_mode=tmp_int[1];
		tmp_str[0][strlen(tmp_str[0])-1]=0;
		memcpy(p->name,tmp_str[0],24);

		for(j=0;j<2 && str!=NULL;j++)	// 埵抲僗僉僢僾
			str=strchr(str+1,'\t');
	}
//	printf("GuildPositionInfo OK\n");
	// 僄儞僽儗儉
	tmp_int[1]=0;
	if( sscanf(str+1,"%d,%d,%[^\t]\t",&tmp_int[0],&tmp_int[1],tmp_str2)< 3 &&
		sscanf(str+1,"%d,%[^\t]\t",&tmp_int[0],tmp_str2) < 2	)
		return 1;
	g->emblem_len=tmp_int[0];
	g->emblem_id=tmp_int[1];
	for(i=0,pstr=tmp_str2;i<g->emblem_len;i++,pstr+=2){
		int c1=pstr[0],c2=pstr[1],x1=0,x2=0;
		if(c1>='0' && c1<='9')x1=c1-'0';
		if(c1>='a' && c1<='f')x1=c1-'a'+10;
		if(c1>='A' && c1<='F')x1=c1-'A'+10;
		if(c2>='0' && c2<='9')x2=c2-'0';
		if(c2>='a' && c2<='f')x2=c2-'a'+10;
		if(c2>='A' && c2<='F')x2=c2-'A'+10;
		g->emblem_data[i]=(x1<<4)|x2;
	}
//	printf("GuildEmblemInfo OK\n");
	str=strchr(str+1,'\t');	// 埵抲僗僉僢僾

	// 摨柨儕僗僩
	if( sscanf(str+1,"%d\t",&c)< 1)
		return 1;
	str=strchr(str+1,'\t');	// 埵抲僗僉僢僾
	for(i=0;i<c;i++){
		struct guild_alliance *a = &g->alliance[i];
		if( sscanf(str+1,"%d,%d\t%[^\t]\t",
			&tmp_int[0],&tmp_int[1],tmp_str[0]) < 3)
			return 1;
		a->guild_id=tmp_int[0];
		a->opposition=tmp_int[1];
		memcpy(a->name,tmp_str[0],24);

		for(j=0;j<2 && str!=NULL;j++)	// 埵抲僗僉僢僾
			str=strchr(str+1,'\t');	
	}
//	printf("GuildAllianceInfo OK\n");
	// 捛曻儕僗僩
	if( sscanf(str+1,"%d\t",&c)< 1)
		return 1;
	str=strchr(str+1,'\t');	// 埵抲僗僉僢僾
	for(i=0;i<c;i++){
		struct guild_explusion *e = &g->explusion[i];
		if( sscanf(str+1,"%d,%d,%d,%d\t%[^\t]\t%[^\t]\t%[^\t]\t",
			&tmp_int[0],&tmp_int[1],&tmp_int[2],&tmp_int[3],
			tmp_str[0],tmp_str[1],tmp_str[2]) < 6)
			return 1;
		e->account_id=tmp_int[0];
		e->rsv1=tmp_int[1];
		e->rsv2=tmp_int[2];
		e->rsv3=tmp_int[3];
		memcpy(e->name,tmp_str[0],24);
		memcpy(e->acc,tmp_str[1],24);
		tmp_str[2][strlen(tmp_str[2])-1]=0;
		memcpy(e->mes,tmp_str[2],40);

		for(j=0;j<4 && str!=NULL;j++)	// 埵抲僗僉僢僾
			str=strchr(str+1,'\t');	
	}
//	printf("GuildExplusionInfo OK\n");
	// 僊儖僪僗僉儖
	for(i=0;i<MAX_GUILDSKILL;i++){
		if( sscanf(str+1,"%d,%d ",&tmp_int[0],&tmp_int[1]) <2)
			break;
		g->skill[i].id=tmp_int[0];
		g->skill[i].lv=tmp_int[1];
		str=strchr(str+1,' ');	
	}
	str=strchr(str+1,'\t');
//	printf("GuildSkillInfo OK\n");
	return 0;
}

// 僊儖僪忛僨乕僞偺暥帤楍傊偺曄姺
int inter_guildcastle_tostr(char *str,struct guild_castle *gc)
{
//	int i,c;
	int len;

	len=sprintf(str,"%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",
		gc->castle_id,gc->guild_id,gc->economy,gc->defense,gc->triggerE,
		gc->triggerD,gc->nextTime,gc->payTime,gc->createTime,gc->visibleC,
		gc->visibleG0,gc->visibleG1,gc->visibleG2,gc->visibleG3,gc->visibleG4,
		gc->visibleG5,gc->visibleG6,gc->visibleG7);

	return 0;
}
// 僊儖僪忛僨乕僞偺暥帤楍偐傜偺曄姺
int inter_guildcastle_fromstr(char *str,struct guild_castle *gc)
{
//	int i,j,c;
	int tmp_int[20];

	memset(gc,0,sizeof(struct guild_castle));
	if( sscanf(str,"%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",
		&tmp_int[0],&tmp_int[1],&tmp_int[2],&tmp_int[3],&tmp_int[4],&tmp_int[5],&tmp_int[6],
		&tmp_int[7],&tmp_int[8],&tmp_int[9],&tmp_int[10],&tmp_int[11],&tmp_int[12],&tmp_int[13],
		&tmp_int[14],&tmp_int[15],&tmp_int[16],&tmp_int[17]) <18 )
		return 1;
	gc->castle_id=tmp_int[0];
	gc->guild_id=tmp_int[1];
	gc->economy=tmp_int[2];
	gc->defense=tmp_int[3];
	gc->triggerE=tmp_int[4];
	gc->triggerD=tmp_int[5];
	gc->nextTime=tmp_int[6];
	gc->payTime=tmp_int[7];
	gc->createTime=tmp_int[8];
	gc->visibleC=tmp_int[9];
	gc->visibleG0=tmp_int[10];
	gc->visibleG1=tmp_int[11];
	gc->visibleG2=tmp_int[12];
	gc->visibleG3=tmp_int[13];
	gc->visibleG4=tmp_int[14];
	gc->visibleG5=tmp_int[15];
	gc->visibleG6=tmp_int[16];
	gc->visibleG7=tmp_int[17];

	return 0;
}

// 僊儖僪娭楢僨乕僞儀乕僗撉傒崬傒
int inter_guild_readdb()
{
	int i;
	FILE *fp;
	char line[1024];

	fp=fopen("db/exp_guild.txt","r");
	if(fp==NULL){
		printf("can't read db/exp_guild.txt\n");
		return 1;
	}
	i=0;
	while(fgets(line,256,fp) && i<100){
		if(line[0]=='/' && line[1]=='/')
			continue;
		guild_exp[i]=atoi(line);
		i++;
	}
	fclose(fp);

	return 0;
}


// 僊儖僪僨乕僞偺撉傒崬傒
int inter_guild_init()
{
	char line[16384];
	struct guild *g;
	struct guild_castle *gc;
	FILE *fp;
	int i,c=0;

	inter_guild_readdb();

	guild_db=numdb_init();
	castle_db=numdb_init();
	
	if( (fp=fopen(guild_txt,"r"))==NULL )
		return 1;
	while(fgets(line,sizeof(line),fp)){
		int i,j=0;
		if( sscanf(line,"%d\t%%newid%%\n%n",&i,&j)==1 && j>0 && guild_newid<=i){
			guild_newid=i;
			continue;
		}
	
		g=calloc(sizeof(struct guild), 1);
		if(g==NULL){
			printf("int_guild: out of memory!\n");
			exit(0);
		}
		memset(g,0,sizeof(struct guild));
		if(inter_guild_fromstr(line,g)==0 && g->guild_id>0){
			if( g->guild_id >= guild_newid)
				guild_newid=g->guild_id+1;
			numdb_insert(guild_db,g->guild_id,g);
			guild_check_empty(g);
			guild_calcinfo(g);
		}else{
			printf("int_guild: broken data [%s] line %d\n",guild_txt,c);
			free(g);
		}
		c++;
	}
	fclose(fp);
//	printf("int_guild: %s read done (%d guilds)\n",guild_txt,c);

	c=0;//僇僂儞僞弶婜壔

	if( (fp=fopen(castle_txt,"r"))==NULL ){
		return 1;
	}

	while(fgets(line,sizeof(line),fp)){
		gc=calloc(sizeof(struct guild_castle), 1);
		if(gc==NULL){
			printf("int_guild: out of memory!\n");
			exit(0);
		}
		memset(gc,0,sizeof(struct guild_castle));
		if(inter_guildcastle_fromstr(line,gc)==0){
			numdb_insert(castle_db,gc->castle_id,gc);
		}else{
			printf("int_guild: broken data [%s] line %d\n",castle_txt,c);
			free(gc);
		}
		c++;
	}

	if(!c){
		printf(" %s - making Default Data...\n",castle_txt);
		//僨僼僅儖僩僨乕僞傪嶌惉
		for(i=0;i<MAX_GUILDCASTLE;i++){
			gc=calloc(sizeof(struct guild_castle), 1);
			if(gc==NULL){
				printf("int_guild: out of memory!\n");
				exit(0);
			}
			memset(gc,0,sizeof(struct guild_castle));
			gc->castle_id=i;
			gc->guild_id=0;
			gc->economy=0;
			gc->defense=0;
			gc->triggerE=0;
			gc->triggerD=0;
			gc->nextTime=0;
			gc->payTime=0;
			gc->createTime=0;
			gc->visibleC=0;
			gc->visibleG0=0;
			gc->visibleG1=0;
			gc->visibleG2=0;
			gc->visibleG3=0;
			gc->visibleG4=0;
			gc->visibleG5=0;
			gc->visibleG6=0;
			gc->visibleG7=0;
			numdb_insert(castle_db,gc->castle_id,gc);
		}
		printf(" %s - making done\n",castle_txt);
		return 0;
	}

	fclose(fp);

	return 0;
}

struct guild *inter_guild_search(int guild_id)
{
	struct guild *g;

	g=numdb_search(guild_db,guild_id);

	return g;
}

// 僊儖僪僨乕僞偺僙乕僽梡
int inter_guild_save_sub(void *key,void *data,va_list ap)
{
	char line[16384];
	FILE *fp;
	inter_guild_tostr(line,(struct guild *)data);
	fp=va_arg(ap,FILE *);
	fprintf(fp,"%s" RETCODE,line);
	return 0;
}

// 僊儖僪忛僨乕僞偺僙乕僽梡
int inter_castle_save_sub(void *key,void *data,va_list ap)
{
	char line[16384];
	FILE *fp;
	inter_guildcastle_tostr(line,(struct guild_castle *)data);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲免费高清视频在线| 成人免费在线视频| 欧美理论片在线| 在线观看国产精品网站| 欧美亚洲国产bt| 欧美日韩国产精选| 欧美精品在线视频| 欧美丰满一区二区免费视频| 91精品啪在线观看国产60岁| 欧美一级在线观看| 久久老女人爱爱| 国产精品免费av| 一区二区高清在线| 日日夜夜免费精品视频| 韩国精品久久久| av亚洲精华国产精华| 色哟哟日韩精品| 欧美日韩国产高清一区二区 | 91精品国产综合久久精品图片| 欧美日韩一区不卡| 欧美电影免费提供在线观看| 26uuu亚洲综合色| 国产精品麻豆一区二区| 亚洲18女电影在线观看| 久久精品免费观看| 成人免费黄色在线| 8v天堂国产在线一区二区| 精品美女在线播放| 国产精品久久久久永久免费观看 | 91网站在线观看视频| 欧美伦理电影网| 欧美精品一区二区在线播放| 亚洲欧美自拍偷拍色图| 日本午夜一本久久久综合| 国产精品一区久久久久| 在线观看日韩电影| 久久这里只有精品视频网| 一区二区三区日韩| 国产久卡久卡久卡久卡视频精品| 色综合 综合色| 精品国产髙清在线看国产毛片| 国产精品成人午夜| 蜜臀av一区二区| 91国产免费观看| 国产亚洲自拍一区| 丝袜诱惑制服诱惑色一区在线观看| 韩国女主播成人在线| 欧美日韩成人综合在线一区二区| 国产日韩精品一区| 久久精品久久综合| 欧美日韩中文字幕一区二区| 国产精品无人区| 麻豆精品视频在线观看免费 | 精品久久国产97色综合| 亚洲色图在线播放| 国产盗摄一区二区| 欧美成人一区二区三区在线观看| 亚洲一区二区精品久久av| 成人黄色一级视频| 久久新电视剧免费观看| 日韩av中文字幕一区二区| 色屁屁一区二区| 国产精品视频一二| 国产精品一级二级三级| 精品国精品自拍自在线| 日本不卡免费在线视频| 欧美另类久久久品| 亚洲一区二区偷拍精品| 色综合 综合色| 亚洲你懂的在线视频| 91亚洲午夜精品久久久久久| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 国产主播一区二区三区| 精品国产精品一区二区夜夜嗨| 热久久一区二区| 欧美一级理论片| 捆绑调教一区二区三区| 日韩欧美国产综合在线一区二区三区| 香港成人在线视频| 欧美一区二区三区免费| 免费人成精品欧美精品| 欧美岛国在线观看| 国产一区二区三区蝌蚪| 久久精品一区四区| 粉嫩av一区二区三区在线播放| 国产三级精品视频| 91在线视频在线| 亚洲国产美女搞黄色| 337p亚洲精品色噜噜噜| 麻豆成人免费电影| 国产调教视频一区| 99精品视频一区二区三区| 亚洲激情第一区| 欧美蜜桃一区二区三区| 国产呦精品一区二区三区网站| 久久久久国色av免费看影院| 成人涩涩免费视频| 一区二区三区不卡在线观看 | 精品99999| 丁香另类激情小说| 亚洲国产精品久久艾草纯爱| 欧美一区二区三区色| 国产成人免费在线| 一级特黄大欧美久久久| 日韩视频在线你懂得| 成人高清伦理免费影院在线观看| 亚洲精品亚洲人成人网在线播放| 欧美高清一级片在线| 成人涩涩免费视频| 日本成人在线电影网| 国产精品免费人成网站| 8v天堂国产在线一区二区| 大桥未久av一区二区三区中文| 亚洲高清在线视频| 国产精品免费丝袜| 精品免费视频一区二区| 日本久久电影网| 久久国产麻豆精品| 亚洲一区二区四区蜜桃| 久久午夜羞羞影院免费观看| eeuss影院一区二区三区| 免费在线欧美视频| 亚洲乱码国产乱码精品精小说| 精品久久久久一区二区国产| 欧美日韩免费电影| 99久精品国产| 国产一本一道久久香蕉| 午夜欧美2019年伦理| 亚洲乱码日产精品bd| 中文字幕高清一区| 欧美岛国在线观看| 欧美高清视频不卡网| 日本韩国精品一区二区在线观看| 国产精品99久久久久久似苏梦涵 | 亚洲国产日韩精品| ...av二区三区久久精品| 精品人在线二区三区| 欧美高清视频不卡网| 在线视频一区二区免费| 99视频精品全部免费在线| 国精产品一区一区三区mba桃花 | 丝袜美腿亚洲综合| 亚洲五码中文字幕| 亚洲综合在线免费观看| 亚洲欧洲精品一区二区精品久久久 | 一本色道久久综合亚洲精品按摩| 狠狠色丁香九九婷婷综合五月| 日本美女一区二区三区视频| 日韩精品视频网| 日韩福利视频网| 青青青伊人色综合久久| 日韩精品一区第一页| 免费精品视频在线| 另类小说综合欧美亚洲| 美女性感视频久久| 久久99精品一区二区三区 | 成人免费在线观看入口| 亚洲国产高清在线| 中文字幕中文字幕一区二区| 国产精品二三区| 亚洲精品中文在线影院| 亚洲精品国产精华液| 亚洲一区影音先锋| 日本欧美加勒比视频| 久草热8精品视频在线观看| 久久精品99国产精品| 激情小说欧美图片| 成人综合婷婷国产精品久久 | 国产成人超碰人人澡人人澡| 成人h版在线观看| 在线亚洲一区二区| 欧美一区二区三区影视| 久久欧美一区二区| 亚洲人妖av一区二区| 亚洲国产成人av网| 国产一区亚洲一区| 不卡免费追剧大全电视剧网站| 色婷婷av久久久久久久| 日韩欧美综合在线| 日本一区二区三区dvd视频在线| 亚洲人精品午夜| 麻豆精品国产91久久久久久| 成人sese在线| 91精品国模一区二区三区| 欧美激情综合网| 午夜国产精品一区| 成人免费看片app下载| 777亚洲妇女| 国产精品色婷婷| 视频一区中文字幕| 99re亚洲国产精品| 欧美一区二区视频在线观看2022| 欧美激情在线一区二区| 婷婷六月综合网| 99久久伊人网影院| 精品国产麻豆免费人成网站| 夜夜夜精品看看| 国产成都精品91一区二区三| 欧美一区二区在线免费观看| 亚洲视频免费看|