📄 goods_obj.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 + -