⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 goods_obj.cc

📁 多人走路RPG服务器 c++ socket
💻 CC
字号:
#include <stdio.h>#include <string.h>#include <stdlib.h>//#include "my_server.h"#include "goods_obj.h"char body_pattern[10][20]={"head","extra","viptool","ring_left","ring_right","hand_left","hand_right","boot","pet","cloth"};//------------------ GoodsAtt::GoodsAtt(void) {	attend=0;	magic=0;	sinew=0;	dexterity=0;	adroit=0;	luck=0;}//-------------------垃圾初始void Scene_Dust::init(void) {	show_flag=false;	lifetime=0;	mapX=0;	mapY=0;	dust.init();}//--------------------初始物品格void User_Goods_ST::init(void) {	m_gid=NONE;	strcpy(m_color,"black");	m_ahead=NONE;	m_after=NONE;	m_lag=0;	m_x=0;	m_this_name[0]='\0';	m_this_full_att[0]='\0';	m_att.init();	m_this_att.init();}//--------------------初始物品void GoodsObj::init(char **row) {	//id,name,m,use_flag,give_flag,sell_flag,level,pattern,emend,confine,add_hp,add_mp,change_body_power//int gid,const char *name,int money,bool use_flag,bool market_flag,bool sell_flag,int level,int pattern,GoodsEffect effect,GoodsAtt emend,GoodsAtt confine) {	m_gid=atoi(row[0]);	strncpy(m_name,row[1],GoodsObj_name_size);	m_money=atoi(row[2]);	m_use_flag=( strcmp(row[3],"yes")==0 ) ? true : false ;	m_market_flag=( strcmp(row[4],"yes")==0 ) ? true : false ;	m_sell_flag=( strcmp(row[5],"yes")==0 ) ? true : false ;	m_level=atoi(row[6]);	if(strcmp(row[7],"head")==0){		m_pattern=101;	}else if(strcmp(row[7],"ring")==0){		m_pattern=102;	}else if(strcmp(row[7],"hand")==0){		m_pattern=103;	}else if(strcmp(row[7],"cloth")==0){		m_pattern=104;	}else if(strcmp(row[7],"boot")==0){		m_pattern=105;	}else if(strcmp(row[7],"extra")==0){		m_pattern=106;	}else if(strcmp(row[7],"pet")==0){		m_pattern=107;	}else if(strcmp(row[7],"viptool")==0){		m_pattern=108;	}	Define_Emend(row[8],&m_att);	Define_Emend(row[9],&m_confine);	m_effect.m_HP=atoi(row[10]);	m_effect.m_MP=atoi(row[11]);	m_effect.m_SP=atoi(row[12]);	m_ext= strcmp(row[13],"yes")==0 ? true : false;}//-------------------解释旧身上装备void Define_OLD_Body_Goods_Lib(char *goods,User_Goods_ST lib[]) {	mytrace("init OLD Body Goods",1);	char cutstr[1024],pattern[20];	char var1[15][12],var2[15][12];	int index=0;	int len=strlen(goods);	int i,j;	GoodsAtt att;	if( goods[0]!='\0' ){		while( index<len ){			sscanf(goods+index,"%[^)])",cutstr) ;			index += strlen(cutstr) + 2 ;			sscanf(cutstr, "'%[^']'=>array('%[^']'=>%[^,],'%[^']'=>%[^,],'%[^']'=>%[^,],'%[^']'=>%[^,],'%[^']'=>%[^,],'%[^']'=>%[^,],'%[^']'=>%[^,],'%[^']'=>%[^,],'%[^']'=>%[^,],'%[^']'=>%[^,],'%[^']'=>%[^,],'%[^']'=>%[^,],'%[^']'=>%[^,],'%[^']'=>%s", pattern, var1[0], var2[0], var1[1], var2[1], var1[2], var2[2], var1[3], var2[3], var1[4], var2[4], var1[5], var2[5], var1[6], var2[6], var1[7], var2[7], var1[8], var2[8], var1[9], var2[9], var1[10], var2[10], var1[11], var2[11], var1[12], var2[12], var1[13], var2[13], var1[14], var2[14]);			for(i=0;i<10;i++){				if(strcmp(pattern,body_pattern[i])==0){					j=0;					//printf("\t %s %s:%s\n",pattern,var1[0],var2[0]);					while( var1[j][0]!='\0' ){						Define_OLD_Goods_Att(var1[j],var2[j],&lib[i]);						j++;					}					lib[i].SetFullName();					lib[i].SetFullATT();					lib[i].Get_Goods_Full_ATT();					break;				}			}		}	}	mytrace("init OLD Body Goods end",1);}void Define_OLD_Goods_Att(char *var1,char *var2,User_Goods_ST *lib) {	if(strcmp(var1,"id")==0){		lib->m_gid=atoi(var2);	}else if(strcmp(var1,"name")==0){		sprintf(var2, "'%[^']'", lib->m_ext_name);	}else if(strcmp(var1,"num")==0){		lib->m_lag=atoi(var2);	}else if(strcmp(var1,"-x")==0){		lib->m_x=atoi(var2);	}else if(strcmp(var1,"color")==0){		sprintf(var2, "'%[^']'", lib->m_color);	}else if(strcmp(var1,"ahead")==0){		lib->m_ahead=atoi(var2);	}else if(strcmp(var1,"after")==0){		lib->m_after=atoi(var2);	}else if(strcmp(var1,"max_bad")==0){			}else if(strcmp(var1,"cur_bad")==0){	}else if(strcmp(var1,"attend")==0){		lib->m_att.attend=atoi(var2);	}else if(strcmp(var1,"magic")==0){		lib->m_att.magic=atoi(var2);	}else if(strcmp(var1,"sinew")==0){		lib->m_att.sinew=atoi(var2);	}else if(strcmp(var1,"dexterity")==0){		lib->m_att.dexterity=atoi(var2);	}else if(strcmp(var1,"adroit")==0){		lib->m_att.adroit=atoi(var2);	}else if(strcmp(var1,"luck")==0){		lib->m_att.luck=atoi(var2);	}}//--------------------解释物品库void Define_Goods_Lib(char *goods,User_Goods_ST lib[],int size) {	mytrace("init define Goods lib",1);	char cutstr[1024];	int index=0;	int len=strlen(goods);	int st,gid,lag,ahead,after,x;	char ext_name[User_name_size+1];	char color[10];	st=gid=lag=ahead=after=x=0;	ext_name[0]='\0';	color[0]='\0';	GoodsAtt att;	//UserBody.m_st[1].SetGoods(132,"",0x000000,10,NONE,NONE,att);	/*	1;132;'';0x000000;0;NONE;NONE;0;0,0,0,0,0,0|2;132;mrb;0x000000;0;NONE;NONE;0,0,0,0,0,0|2;132;mrb;0x000000;0;NONE;NONE;0,0,0,0,0,0	ST;GoodsID;ExtName;Color;Lag;Ahead;After;-x;att	1;132;'';0;10;-1;-1;0,0,0,0,0,0|3;873;'';0;10;-1;-1;0,0,0,0,0,0|5;1090;'';0;10;-1;-1;0,0,0,0,0,0*/	if( goods[0]!='\0' ){		while( index<len ){			sscanf(goods+index,"%[^|]|",cutstr) ;			index += strlen(cutstr) + 1 ;			//printf("%s",cutstr);			sscanf(cutstr,"%d;%d;%[^;];%[^;];%d;%d;%d;%d;%d,%d,%d,%d,%d,%d", &st, &gid, ext_name, color, &lag, &ahead, &after, &x, &att.attend, &att.magic, &att.sinew, &att.dexterity, &att.adroit, &att.luck);			if( st!=NONE && st<size ){				//printf("\t gid:%d name:%s lag:%d ahead:%d\n",gid,ext_name,lag,ahead);				lib[st].SetGoods(gid, ext_name, color, lag, ahead, after, x, att);			}		}	}	mytrace("init define Goods lib end",1);}//--------------------初始交易物品void User_BOX::MarketBoxInit(void) {	int i;	MarketOK=false;	SwapOK=false;	MarketPlayer[0]='\0';	for(i=0;i<Market_st_size;i++){		MarketBOX[i]=NONE;	}	MarketBOX[Market_st_size]=0;}//--------------------篇译物品字串void User_BOX::UnDefine_Emend(char *goodstr) {	mytrace("init undefine emend Goods",1);	char buf[4098];	char ext_name[30];	int i;	for(i=0;i<Goods_st_size;i++){		if(m_st[i].m_gid!=NONE){			if(m_st[i].m_ext_name[0]=='\0'){				strcpy(ext_name,"-");			}else{				strcpy(ext_name,m_st[i].m_ext_name);			}						sprintf(buf, "%d;%d;%s;%s;%d;%d;%d;%d;%d,%d,%d,%d,%d,%d", i, m_st[i].m_gid, ext_name, m_st[i].m_color, m_st[i].m_lag, m_st[i].m_ahead, m_st[i].m_after, m_st[i].m_x, m_st[i].m_att.attend, m_st[i].m_att.magic, m_st[i].m_att.sinew, m_st[i].m_att.dexterity, m_st[i].m_att.adroit, m_st[i].m_att.luck);			if(goodstr[0]!='\0') strcat(goodstr,"|");			strcat(goodstr,buf);		}	}	mytrace("init undefine emend Goods end",1);}//--------------------解释物品属性void Define_Emend(char *emend,GoodsAtt *att) {	if( emend!=0 && strcmp(emend,"(null)")!=0 ){		char pattern[6][1024];		int pat_num[6];		int i;		sscanf(emend, "'%[^']'=>%d,'%[^']'=>%d,'%[^']'=>%d,'%[^']'=>%d,'%[^']'=>%d,'%[^']'=>%d", pattern[0], &pat_num[0], pattern[1], &pat_num[1], pattern[2], &pat_num[2], pattern[3], &pat_num[3], pattern[4], &pat_num[4], pattern[5], &pat_num[5]);		for(i=0;i<6;i++){			if(strcmp(pattern[i],"attend")==0){				att->attend=pat_num[i];				continue;			}			if(strcmp(pattern[i],"magic")==0){				att->magic=pat_num[i];				continue;			}			if(strcmp(pattern[i],"sinew")==0){				att->sinew=pat_num[i];				continue;			}			if(strcmp(pattern[i],"dexterity")==0){				att->dexterity=pat_num[i];				continue;			}								if(strcmp(pattern[i],"adroit")==0){				att->adroit=pat_num[i];				continue;			}			if(strcmp(pattern[i],"luck")==0){				att->luck=pat_num[i];				continue;			}		}	}}//--------------------查找物品位置int User_BOX::Find_Empty_ST(void) {	int i;	for( i=0;i<Goods_st_size;i++ ) {		if( m_st[i].m_gid==NONE ) {			break;		}	}	return i>=Goods_st_size ? NONE:i;}//--------------------查找空位总数int User_BOX::Empty_ST_Count(void){	int counts,i;	counts=0;	for( i=0;i<Goods_st_size;i++ ){		if( m_st[i].m_gid==NONE ) counts++;	}	return counts;}//---------------初始用户void User_BOX::init(int sid,int userid,const char *username,const char *nickname,bool vipflag,char *mysex,char **row) {	int i;	user_id=userid;	id=sid;	strncpy(user_name,username,User_name_size);	strncpy(nick_name,nickname,Words_name_size);	strncpy( m_Sex,mysex,5 ) ;	Level=atoi(row[1]);	printf("\n\n\n\t\t\t\trow[1] = %s\n\n\n",row[1]);	Exp=atoi(row[2]);	HP=atoi(row[3]);	MP=atoi(row[4]);	SP=atoi(row[5]);	Money=atoi(row[0]);	Today_flag=atoi(row[8]);	State=0;	time_SP = 0 ;	Vip_flag=vipflag;	for( i=0;i<Goods_st_size;i++ ){		m_st[i].init();	}	MarketBoxInit();}//---------------改变用户动作状态int User_BOX::Change_Body_State(int state) {	State=state;	return 0 ;}//---------------物品使用bool User_BOX::Use_Goods(const int st) {	mytrace("init user goods",1);	bool is_use;	is_use=false;	if( m_st[st].m_gid!=NONE && GoodsDB[m_st[st].m_gid].m_use_flag ){		HP+=GoodsDB[m_st[st].m_gid].m_effect.m_HP*m_st[st].m_lag;		MP+=GoodsDB[m_st[st].m_gid].m_effect.m_MP*m_st[st].m_lag;		SP+=GoodsDB[m_st[st].m_gid].m_effect.m_SP*m_st[st].m_lag;		m_st[st].init();		is_use=true;	}	mytrace("init user goods end",1);	return is_use;}//---------------金币操作int User_BOX::MoneyOperate(int money) {	Money+=money;	return Money;}//---------------丢物品bool User_BOX::Drop_Goods(const int st) {	bool is_drop;	is_drop=false;	if( m_st[st].m_gid!=NONE ){		m_st[st].init();		is_drop=true;	}	return is_drop;}//---------------移动物品到空格bool User_BOX::Move_Goods_TO_Empty(User_Goods_ST tmpST){	int emptyST;	bool is_move;	is_move=false;	emptyST=NONE;	emptyST=Find_Empty_ST();	if( emptyST!=NONE ){		m_st[emptyST]=tmpST;		is_move=true;	}	return is_move;}//---------------void User_Goods_ST::Get_Goods_Full_ATT(void){	if( m_gid!=NONE ){		sprintf(m_this_full_att, "|%d|%s|%d|%d,%d,%d,%d,%d,%d|%d,%d,%d,%d,%d,%d|%d|%d|%d|%d|%d", m_gid, m_this_name, m_lag, m_this_att.attend, m_this_att.magic, m_this_att.sinew, m_this_att.dexterity, m_this_att.adroit, m_this_att.luck, GoodsDB[m_gid].m_confine.attend, GoodsDB[m_gid].m_confine.magic, GoodsDB[m_gid].m_confine.sinew, GoodsDB[m_gid].m_confine.dexterity, GoodsDB[m_gid].m_confine.adroit, GoodsDB[m_gid].m_confine.luck, GoodsDB[m_gid].m_pattern, GoodsDB[m_gid].m_use_flag, GoodsDB[m_gid].m_market_flag, GoodsDB[m_gid].m_sell_flag, GoodsDB[m_gid].m_money);	}}//---------------移动物品到指定Stbool User_BOX::Move_Goods_TO_Site(User_Goods_ST tmpST,int st){	mytrace("init move Goods to site",1);	bool is_move;	is_move=false;	if( st>=0 && st<=Goods_st_size ){		if( m_st[st].m_gid==NONE ){			m_st[st]=tmpST;			is_move=true;		}	}	mytrace("init move Goods to site end",1);	return is_move;}//---------------增加物品bool User_BOX::Add_Goods(int gid,const char *ext_name,int lag,char *color,int ahead,int after,int x,GoodsAtt att) {	int emptyST;	bool is_add;	emptyST=NONE;	is_add=false;	emptyST=Find_Empty_ST();	if( emptyST!=NONE ){		m_st[emptyST].SetGoods(gid,ext_name,color,lag,ahead,after,x,att);		is_add=true;	}	return is_add;}//---------------设置格里的物品void User_Goods_ST::SetGoods(int gid,const char *ext_name,char *color,int lag,int ahead,int after,int x,GoodsAtt att) {	m_gid=gid;	m_lag=lag;	if(strcmp(ext_name,"-")==0){		m_ext_name[0]='\0';	}else{		strncpy(m_ext_name,ext_name,User_name_size);	}	strcmp(m_color,color);	m_ahead=ahead;	m_after=after;	m_x=x;	m_att=att;	SetFullName();	SetFullATT();	Get_Goods_Full_ATT();}//---------------交换物品位置bool User_BOX::Swap_Goods(int st1,int st2) {	int i;	User_Goods_ST tmpST;	tmpST=m_st[st1];	m_st[st1]=m_st[st2];	m_st[st2]=tmpST;	return true;}//---------------交换物品//---------------取得物品全属性void User_Goods_ST::SetFullATT(void) {	m_this_att.attend = GoodsDB[m_gid].m_att.attend + GoodsWordS[m_ahead].att.attend + GoodsWordS[m_after].att.attend + m_att.attend;	m_this_att.magic = GoodsDB[m_gid].m_att.magic + GoodsWordS[m_ahead].att.magic + GoodsWordS[m_after].att.magic + m_att.magic;	m_this_att.sinew = GoodsDB[m_gid].m_att.sinew + GoodsWordS[m_ahead].att.sinew + GoodsWordS[m_after].att.sinew + m_att.sinew;	m_this_att.dexterity = GoodsDB[m_gid].m_att.dexterity + GoodsWordS[m_ahead].att.dexterity + GoodsWordS[m_after].att.dexterity + m_att.dexterity;	m_this_att.adroit = GoodsDB[m_gid].m_att.adroit + GoodsWordS[m_ahead].att.adroit + GoodsWordS[m_after].att.adroit + m_att.adroit;	m_this_att.luck = GoodsDB[m_gid].m_att.luck + GoodsWordS[m_ahead].att.luck + GoodsWordS[m_after].att.luck + m_att.luck;}//---------------取得物品全名void User_Goods_ST::SetFullName(void) {	char only_name[128];	char after_name[128];	char ahead_name[128];	char x_name[128];	only_name[0]='\0';	after_name[0]='\0';	ahead_name[0]='\0';		if(m_ext_name[0]){		sprintf(only_name,"<font color=gold>%s独有</font>",m_ext_name);	}	if(m_after!=NONE){		sprintf(after_name,"(%s)",GoodsWordS[m_after].after);	}	if(m_ahead!=NONE){		sprintf(ahead_name,"%s",GoodsWordS[m_ahead].ahead);	}	if(m_x>0){		sprintf(x_name,"<font color=gold>%d级精练的 </font>",m_x);	}	sprintf(m_this_name,"<font color=%s>%s%d级%s %s%s%s</font>", m_color, x_name, GoodsDB[m_gid].m_level, only_name, ahead_name, GoodsDB[m_gid].m_name, after_name);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -