//cyg 实作第一个系统 (线上回报系统) #include"../systeminc/version.h" #include"../systeminc/system.h" #include"../systeminc/loadrealbin.h" #include"../systeminc/loadsprbin.h" #include"../systeminc/anim_tbl.h" #include"../systeminc/login.h" #include"../systeminc/menu.h" #include"../systeminc/map.h" #include"../systeminc/lssproto_cli.h" #include"../systeminc/pc.h" #include"../systeminc/netmain.h" #include"../systeminc/handletime.h" #include"../systeminc/character.h" #include"../other/caryIme.h" #include"../systeminc/ime_sa.h" #include"../systeminc/t_music.h" #include"../systeminc/netproc.h" #include"../systeminc/tool.h" #include "time.h" #include "../wgs/descrypt.h" #include"../systeminc/onlinegm.h" char ProblemClass[DEF_CLASS_TOTAL][16]={ "异常问题", "一般问题" }; char ProblemC1[DEF_C1_TOTAL][30]={ "卡人卡石", "网页指正", "客服产品活动", "安装与更新", "会员帐号", "产品序号", "赠品序号", "游戏点数卡购买及储值", "包月相关", "超级/炫风来吉卡/周边商品", "服务器/连线/网路状况反应", "游戏操作询问", "非法检举投拆", "其他" }; char ProblemC1Help[DEF_C1_TOTAL][60]={ "请注明异常帐号、座标、地点、错误讯息、星系", "请提供相关连结", "请先查询游戏专属网站以及过往客服公告", "请尽量留下您的电脑配备", "请详述遇到的状况", "请提供完整的序号", "请提供完整的序号", "登入游戏发现扣点不正常,请改选择问题类别为(游戏扣点问题)", "", "请先查询专属网页相关活动", "", "请先查询网页FAQ", "", "" }; char ProblemC2[DEF_C2_TOTAL][16]={ "人物异常", "道具异常", "宠物异常", "交易问题", "疑似盗用", "家族问题", "宠物&道具问题", "WGS扣点问题", "其他", "会员升级", "星系移民", }; //人物异常 char ProblemC2_1[3][16]={ "人物消失", "人物资料异常", "其他" }; //道具异常 char ProblemC2_2[3][16]={ "道具消失", "其他", "道具功能异常" }; //宠物异常 char ProblemC2_3[5][16]={ "宠物消失", "宠物邮件问题", "溜宠问题", "宠物蛋问题", "其他" }; //交易问题 char ProblemC2_4[2][16]={ "交易后消失", "其他" }; //疑似盗用 char ProblemC2_5[2][16]={ "疑似盗用查询", "其他" }; //家族问题 char ProblemC2_6[3][16]={ "家族被解散", "声望异常", "其他" }; //星系移民 char ProblemC2_7[3][16]={ "道具消失", "人物消失", "其他" }; //HELP中使用到的页资料结构 typedef struct PAGE{ short desc_index; //说明结构开始的索引号(此desc_index为根据seg_index在help_index取得DESC的阵列的index) int desc_num;//BYTE desc_num; //说明的结构数 }*LPPAGE; //注意事项 //HELP中使用到说明的文字资料结构 typedef struct DESC{ BYTE color; //颜色 char description[60]; //说明文字 }*LPDESC; // 问题参数储存结构 cyg typedef struct{ char no[20]; char state[40]; char okdate[10]; int okH; char wrongdate[10]; int wrongH; int class0; char class1[40]; char cont[4000]; char answer[4000]; char error[2000]; BOOL delflag; }PRODATA; DESC Prohelp_desc1[]={ //颜色与说明 //fix { 4 , "1. 使用说明"}, { 0 , " 线上留单上限为20笔,若已达上限须先将旧有问题单删除,才能"}, { 0 , " 继续留单或至网页留单。异常问题须输入正常日期与错误日期。"}, { 0 , " ※ 最新问题单会显示在最上方。"}, { 4 , "2. 宠物蛋异常"}, { 0 , " 于2003/12/31日服务器更新时,己放置修正宠物蛋设定的程式"}, { 0 , " ,即日起客服中心将不再受理玩家宠物蛋能力异常的情况,修正"}, { 0 , " 后的宠物蛋设定如下:"}, { 0 , " ※ 人物在线上喂养设定和以往一样,超过一小时会有能力下"}, { 0 , " 降的情况。人物离线或宠物蛋放置在宠店中,再次登入会"}, { 0 , " 重新计算喂养的时间。"}, { 4 , "3. 溜宠消失"}, { 0 , " 游戏程式设定己可在同一颗服务器内,与萨村门口的[工程人员]"}, }; DESC Prohelp_desc2[]={ { 0 , " 取回;如无法领取请提供以下资料宠物名称、等级、宠物原持有"}, { 0 , " 帐号、宠物持有日期、宠物消失日期。"}, { 4 , "4. 宠邮消失"}, { 0 , " 游戏程式设定己可在同一颗服务器内,与萨村门口的[工程人员]"}, { 0 , " 取回;如无法领取请提供以下资料宠物名称、等级、宠物原持有"}, { 0 , " 帐号、宠物持有日期、宠物消失日期。"}, //{ 4 , "4. 宠物战斗脱逃-无法处理"}, //{ 0 , " 宠物的忠诚度低于20以下,在战斗中就会跑走。此为原游戏设定"}, //{ 0 , " ,客服中心不受理回覆宠物。"}, { 4 , "5. 交易后物品消失-请提供以下资料"}, { 0 , " 交易方的帐号或人物名称、交易日期、交易的宠物名称以及等级"}, { 0 , " 、道具名称以及数量。"}, { 4 , "6. 宠物或道具卖给NPC-无法处理"}, { 0 , " 此为原游戏设定,客服中心不受理回覆宠物或道具。"}, { 4 , "7. 宠物或道具丢出后被系统清除-无法处理"}, { 0 , " 此为原游戏设定,客服中心不受理回覆宠物或道具;玩家可在游"}, }; DESC Prohelp_desc3[]={ { 0 , " 戏中透过交易介面转移。"}, { 4 , "8. 家族异常-请提供以下资料"}, { 0 , " 家族异常请族长本人帐号留单,注明家族名称、家族编号、异常"}, { 0 , " 状况。如因为家族人数不足,系统自动解散的家族,连同家族银"}, { 0 , " 行存款客服中心无法受理。"}, { 0 , " ※ 对于家族解散与成员因过久未上线而自动退出家族设定,系"}, { 0 , " 统每天会不定时的扫描、侦测。"}, { 0 , " ※ 目前家族成员设定,在退出后7日内无法再加入家族。"}, { 4 , "9. 人物DP异常-无法处理 "}, { 0 , " 由于DP对于游戏中并不会有影响,并无开放此功能供玩家查询。"}, { 4 , "10. 人物名片消失-无法处理"}, { 0 , " 由于名片的对应会有一对多的情况(一个人物拥有多位玩家的名"}, { 0 , " 片),若单方面仅处理一名玩家并无法使资料正确,并无开放此"}, }; DESC Prohelp_desc4[]={ { 0 , " 功能供玩家查询。"}, { 4 , "11. 盗用&诈骗案件-请提供以下资料"}, { 0 , " 宠物名称、等级以及道具名称、数量、疑似盗用日期 工程人员"}, { 0 , " 可查询人物删除纪录,需请玩家不要创立新人物以便回覆空人物"}, { 0 , " (没有宠物、道具以及石币)。 工程人员仅以玩家提供之道具、"}, { 0 , " 宠物进行查询的动作。"}, { 4 , "12. 朱雀转生设定 2003/06/21"}, { 0 , " 活动赠送之朱雀能力值,于转生后仍有小幅成长空间,但原能力"}, { 0 , " 值部份不一定能维持转生前高点,在此提醒玩家要转生朱雀时,"}, { 0 , " 请多加考虑。客服中心不受理回覆转生前朱雀之留单案件。"}, }; //DESC Prohelp_desc5[]={ //}; LPDESC Prohelp_Index[] ={ &Prohelp_desc1[0], &Prohelp_desc2[0], &Prohelp_desc3[0], &Prohelp_desc4[0] // &Prohelp_desc5[0] }; PAGE ProHelp_page[]={ { 0 , sizeof(Prohelp_desc1)/sizeof(Prohelp_desc1[0])}, { 0 , sizeof(Prohelp_desc2)/sizeof(Prohelp_desc2[0])}, { 0 , sizeof(Prohelp_desc3)/sizeof(Prohelp_desc3[0])}, { 0 , sizeof(Prohelp_desc4)/sizeof(Prohelp_desc4[0])} // { 0 , sizeof(Prohelp_desc5)/sizeof(Prohelp_desc5[0])} }; INPUT_HISTORY InputHistory ; // 用来记忆每一行的内容,往后才能拿来索引 STR_BUFFER SubBuffer ; // 每一行储存的buf #ifdef __ONLINEGM // 全关掉 char DataBuffer[500]; // 储存组合好的问题回报一连串的参数 char InputBuffer[8050]; // 储存玩家的输入内容 char ContentBuf[8050]; // 储存组合好的问题内容 PRODATA Prodata[100]; // 假设玩家最多可以建100笔 int PutKey,PushKey ; int ProNoSelect; // 现在正选择的单号索引 int HistorySelect; // 上次选择查询的单号索引 BOOL ProNoSelectFlag; // 有没有选单号的旗标 int ProNoIndex; // 用来秀问题单号 int ProNoValue; // 表示有几笔问题单号 BOOL TitleFlag ; int SegmentIndex ; // 一段一段内容的索引 int SegmentTotal ; // 纪录总共有几段 char SegmentBuf[2][2500];// 纪录某笔单号的内容和客服回应 int okY,okM,okD,okH,wrongY,wrongM,wrongD,wrongH; int ClassIndex , ClassIndex1 , ClassIndex2 ; // 问题类别索引 BOOL DeleteBtnFlag; //要有选到某单号才能删除的旗标 //OnlineGm 的Log 专用区 Begin #ifdef _STONDEBUG_ char inlogstr[512]; #define filename "onlinegm.log" #endif //OnlineGm 的Log 专用区 End //线回系统 测试Server IP : 10.1.0.17 BOOL QueryOnlineGmIP(char HostName[]); char *OnlineGmIP; //使用domain name //char OnlineGmIP[20]; //使用直接ip #define SMSDomainName "ingame.wayi.com.tw"//"sms.hwaei.com.tw" int ResultCode; // 传输产生的侦错码 static char *pContent=NULL; BOOL ResetFlag = TRUE; BOOL DirFlag = TRUE; DWORD LastTime = 0; int iReturnNo; //纪录回传的单号 int TotalAddValue; //纪录玩家目前留单总数 int ProblemType ; //纪录按传送键时问题单的类型 一般0异常1 int SendType ; //纪录传送给server前的问题类型 unsigned int ichecklooptime = 0; //检查连线回圈时间 //************************************* // 初始资料 //************************************* void InitOnlineGm( void ) { int i; PutKey = 0; PushKey = 0; ProNoSelectFlag = FALSE; ProNoSelect = 0; HistorySelect = 5000; //无意义 区别用 ProNoIndex = 0; ProNoValue = 0; SegmentIndex =0; SegmentTotal = 0; okY=okM=okD=okH=wrongY=wrongM=wrongD=wrongH=0; ClassIndex = 1; ClassIndex1 = ClassIndex2 =0; ResetFlag = TRUE ; DirFlag = TRUE ; DeleteBtnFlag = FALSE ; DataBuffer[0] = '\0'; InputBuffer[0] = '\0'; ContentBuf[0] = '\0'; SegmentBuf[0][0]='\0'; SegmentBuf[1][0]='\0'; for( i=0;i16) return 3; #ifdef _FIX_URLENCODE char OutTmp[8000]; char *pOutTmp ; char *pInTmp ; char Hex[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; // do encoding pInTmp=pinput; pOutTmp=OutTmp; while (*pInTmp) { if ( (*pInTmp>= '0') && (*pInTmp <= '9') || (*pInTmp>= 'a') && (*pInTmp <= 'z') || (*pInTmp>= 'A') && (*pInTmp <= 'Z') ) *pOutTmp++ = *pInTmp; else { if(*pInTmp==0x20&&(!IsDBCSLeadByte(*pInTmp))) *pOutTmp++ = '+'; else { *pOutTmp++ = '%'; *pOutTmp++ = Hex[(*pInTmp>>4)&0x0f]; *pOutTmp++ = Hex[(*pInTmp)&0x0f]; } } pInTmp++; } *pOutTmp = '\0'; sprintf_s(pinput,8050,"&qcontent=%s",OutTmp); #endif SOCKET hSock; SOCKADDR_IN stName; fd_set rfds,wfds; timeval tmTimeOut; char *result; int len, cnt, ret ; tmTimeOut.tv_usec=0; tmTimeOut.tv_sec=5; if( INVALID_SOCKET != ( hSock = socket( AF_INET, SOCK_STREAM, 0) ) ) { DWORD flg = 1; if( SOCKET_ERROR != ioctlsocket( hSock, FIONBIO, &flg)) { ZeroMemory( &stName, sizeof(struct sockaddr)); stName.sin_family = PF_INET; stName.sin_port = htons(80); stName.sin_addr.s_addr = inet_addr(OnlineGmIP); ret = connect( hSock, (LPSOCKADDR)&stName, sizeof(struct sockaddr) ); if( SOCKET_ERROR != ret || WSAEWOULDBLOCK == WSAGetLastError() ) { cnt = 0; char buf[3000]; if(ProblemType==0){ SendType=0; //一般问题 sprintf_s(buf,"GET //normal_check.asp?wgsid=%s&gamepwd=%s&game=1%s%s",pid,ppw,pdb,pinput); }else{ SendType=1; //异常问题 sprintf_s(buf,"GET //handle_check.asp?wgsid=%s&gamepwd=%s&game=1%s%s",pid,ppw,pdb,pinput); } strcat_s(buf," HTTP/1.1\r\nAccept: text/*\r\nUser-Agent: StoneAge\r\n"); sprintf_s(buf,"%sHost: %s\r\n\r\n",buf,OnlineGmIP); #ifdef _STONDEBUG_ //写入onlinegm.log WriteInLog( buf , filename); #endif len = lstrlen(buf); ichecklooptime = TimeGetTime(); while(1) { FD_ZERO( &wfds); FD_SET( hSock, &wfds); nRet = select( NULL, (fd_set*)NULL, &wfds, (fd_set*)NULL, &tmTimeOut); if(nRet == SOCKET_ERROR||nRet==-1){ closesocket(hSock); return 4; }else if(nRet == 0){ closesocket(hSock); return 8; } if( FD_ISSET( hSock, &wfds) ){ ret = send( hSock, &buf[cnt], len, 0); cnt += ret; len -= ret; if(len<1) break; //ok } if( TimeGetTime() - ichecklooptime > 3000 ){ closesocket(hSock); return 8; } } Sleep(500); len = (InputHistory.newNo*70)+500 ; //1024; cnt = 0; ichecklooptime = TimeGetTime(); while(1) { if(wait>=3){ closesocket(hSock); return 8; } FD_ZERO( &rfds); FD_SET( hSock, &rfds); select( NULL, &rfds, (fd_set*)NULL, (fd_set*)NULL, &tmTimeOut); if(nRet == SOCKET_ERROR||nRet==-1){ closesocket(hSock); return 4; } if(nRet == 0){ wait++; continue; } if( FD_ISSET( hSock, &rfds) ){ ret = recv( hSock, &buf[cnt], len, 0); if(ret<0){ closesocket(hSock); return 4; } } buf[cnt+ret] = 0; result = strstr( buf, "\r\n\r\n") + 4; getStringToken(result ,',',1,sizeof(returndata)-1,returndata); if(atoi(returndata)!=1){ //如果回传负数表示有误,1表示ok closesocket(hSock); return atoi(returndata); }else{ getStringToken(result ,':',2,sizeof(returndata)-1,returndata); iReturnNo = atoi(returndata); //读出单号 } if(result) break; cnt += ret; len -= ret; if( TimeGetTime() > ichecklooptime + 3000 ){ closesocket(hSock); return 8; } } }else{ closesocket(hSock); return 6; } } closesocket(hSock); return 1; } return 4; } //************************************************ // 传送要删除单号的主程式 // 回传值 :0 --- 处理完毕 & 问题删除成功 // 3 --- 参数传递错误 // 4 --- 网路端错误 // 6 --- 连线逾时(或DNS失败) //************************************************ int SendDeleteMsg(char pid[16], char ppw[16] , char pno[16] ) { int nRet; if(!QueryOnlineGmIP(SMSDomainName)) return 6; int ret,len,cnt,icheck,wait=1; SOCKET hSock; SOCKADDR_IN stName; fd_set rfds,wfds; timeval tmTimeOut; char *result; tmTimeOut.tv_usec=0; tmTimeOut.tv_sec=5; if( INVALID_SOCKET != ( hSock = socket( AF_INET, SOCK_STREAM, 0) ) ) { DWORD flg = 1; if( SOCKET_ERROR != ioctlsocket( hSock, FIONBIO, &flg)) { ZeroMemory( &stName, sizeof(struct sockaddr)); stName.sin_family = PF_INET; stName.sin_port = htons(80); stName.sin_addr.s_addr = inet_addr(OnlineGmIP); ret = connect( hSock, (LPSOCKADDR)&stName, sizeof(struct sockaddr) ); if( SOCKET_ERROR != ret || WSAEWOULDBLOCK == WSAGetLastError() ) { cnt = 0; char buf[1024]; sprintf_s(buf,"GET //DelForm.asp?wgsid=%s&gamepwd=%s&rcount=1&idno=%s",pid,ppw,pno); strcat_s(buf," HTTP/1.1\r\nAccept: text/*\r\nUser-Agent: StoneAge\r\n"); sprintf_s(buf,"%sHost: %s\r\n\r\n",buf,OnlineGmIP); len = lstrlen(buf); ichecklooptime = TimeGetTime(); while(1) { FD_ZERO( &wfds); FD_SET( hSock, &wfds); nRet = select( NULL, (fd_set*)NULL, &wfds, (fd_set*)NULL, &tmTimeOut); if(nRet == SOCKET_ERROR||nRet==-1){ closesocket(hSock); return 4; }else if(nRet == 0){ closesocket(hSock); return 8; } if( FD_ISSET( hSock, &wfds) ){ ret = send( hSock, &buf[cnt], len, 0); cnt += ret; len -= ret; if(len<1) break; //ok } if( TimeGetTime() > ichecklooptime + 3000 ){ closesocket(hSock); return 8; } } Sleep(500); len = 1024; cnt = 0; ichecklooptime = TimeGetTime(); while(1) { if(wait>=3){ closesocket(hSock); return 8; } FD_ZERO( &rfds); FD_SET( hSock, &rfds); nRet = select( NULL, &rfds, (fd_set*)NULL, (fd_set*)NULL, &tmTimeOut); if(nRet == SOCKET_ERROR||nRet==-1){ closesocket(hSock); return 4; } if(nRet == 0){ wait++; continue; } if( FD_ISSET( hSock, &rfds) ){ ret = recv( hSock, &buf[cnt], len, 0); if(ret<0){ closesocket(hSock); return 4; } buf[cnt+ret] = 0; result = strstr( buf, "\r\n\r\n") + 4; char *sss; strtok_s(result,",",&sss); icheck=atoi(result); if(icheck != 1){ closesocket(hSock); return icheck; } if(result) break; cnt += ret; len -= ret; } if( TimeGetTime() > ichecklooptime + 3000 ){ closesocket(hSock); return 8; } } }else{ closesocket(hSock); return 6; } } closesocket(hSock); return 1 ; } return 4 ; } //************************************************ // 向Server要玩家的问题单所有内容 // 回传值 0: 正确无误 // 2: 玩家无任何问题单 // 4: 网路端错误 // 6: 连线逾时(或DNS失败) //************************************************ int SendDirMsg(char pid[16], char ppw[16] ) { if(!QueryOnlineGmIP(SMSDomainName)) return 6; int nRet,i=1; int wait=1,j=1; char alldata[65536],getdata[6000],perdata[3000],statedata[100]; //全部的,每笔,每栏,处理状态 char returndata[20] ; BOOL Okflag = FALSE , Firstflag = TRUE; #ifdef _STONDEBUG_ char logbuf[50]; #endif int ret,len,cnt; SOCKET hSock; SOCKADDR_IN stName; fd_set rfds,wfds; timeval tmTimeOut; char *result; tmTimeOut.tv_usec=0; tmTimeOut.tv_sec=5; memset(alldata,0,sizeof(alldata)); if( INVALID_SOCKET != ( hSock = socket( AF_INET, SOCK_STREAM, 0) ) ) { DWORD flg = 1; if( SOCKET_ERROR != ioctlsocket( hSock, FIONBIO, &flg)) { ZeroMemory( &stName, sizeof(struct sockaddr)); stName.sin_family = PF_INET; stName.sin_port = htons(80); stName.sin_addr.s_addr = inet_addr(OnlineGmIP); ret = connect( hSock, (LPSOCKADDR)&stName, sizeof(struct sockaddr) ); if( SOCKET_ERROR != ret || WSAEWOULDBLOCK == WSAGetLastError() ) { cnt = 0; char buf[65536]; sprintf_s(buf,"GET //userFormList.asp?wgsid=%s&gamepwd=%s",pid,ppw); strcat_s(buf," HTTP/1.1\r\nAccept: text/*\r\nUser-Agent: StoneAge\r\n"); sprintf_s(buf,"%sHost: %s\r\n\r\n",buf,OnlineGmIP); len = lstrlen(buf); ichecklooptime = TimeGetTime(); while(1) { FD_ZERO( &wfds); FD_SET( hSock, &wfds); nRet = select( NULL, (fd_set*)NULL, &wfds, (fd_set*)NULL, &tmTimeOut); if(nRet == SOCKET_ERROR||nRet==-1){ closesocket(hSock); return -400; }else if(nRet == 0){ closesocket(hSock); return -800; } if( FD_ISSET( hSock, &wfds) ){ ret = send( hSock, &buf[cnt], len, 0); cnt += ret; len -= ret; if(len<1) break; //ok } if( TimeGetTime() > ichecklooptime + 3000 ){ closesocket(hSock); return -800; } } Sleep(500); len = 65536;//8000; cnt = 0; ichecklooptime = TimeGetTime(); while(1) { if(wait>=3){ closesocket(hSock); return -800; } FD_ZERO( &rfds); FD_SET( hSock, &rfds); nRet = select( NULL, &rfds, (fd_set*)NULL, (fd_set*)NULL, &tmTimeOut); if(nRet == SOCKET_ERROR||nRet==-1){ closesocket(hSock); return -400; } if(nRet == 0){ wait++; continue; } if( FD_ISSET( hSock, &rfds) ){ ret = recv( hSock, &buf[cnt], len, 0); if(ret<0){ closesocket(hSock); return -400; } buf[cnt+ret] = 0; result = strstr( buf, "\r\n\r\n") + 4; if(strcmp(result,"0")==0){ closesocket(hSock); return -200; } strcpy(alldata,result); cnt += ret; len -= ret; } if(strstr(alldata,"&#")){ //ok break; } if( TimeGetTime() > ichecklooptime + 3000 ){ closesocket(hSock); return -800; } } getStringToken(result ,',',1,sizeof(returndata)-1,returndata); if(atoi(returndata)<0){ //如果回传负数表示有误,大于0数子代表单子数量,同时也表示ok closesocket(hSock); return atoi(returndata); }else{ TotalAddValue = atoi(returndata); } result = alldata; result = strstr( result , ",") + 1; strcpy(alldata,result); }else{ #ifdef _STONDEBUG_ sprintf_s(logbuf,"Get last error:%d",WSAGetLastError()); WriteInLog( logbuf , filename); #endif return -600; } } closesocket(hSock); ProNoValue = 0; ProNoSelectFlag = FALSE; #ifdef _STONDEBUG_ //写入onlinegm.log WriteInLog( alldata , filename); #endif perdata[0] = '\0'; getdata[0] = '\0'; //sprintf_s(alldata,"21|测试|*|*|*|*|18|卡人卡石|亲爱的维护部阿俊您好谢谢您的用心与努力~感谢您的支持与爱护!也再次的预祝您修改愉快!顺心如意!|亲爱的维护部阿俊您好谢谢您的用心与努力~感谢您的支持与爱护!也再次的预祝您修改愉快!顺心如意!|&#"); while(getStringToken( alldata,'&',i,sizeof(getdata)-1,getdata)!=1){ while(getStringToken(getdata,'|',j,sizeof(perdata)-1,perdata)!=1){ if( strcmp( perdata , "*")){ switch(j){ case 1:sprintf_s(Prodata[ProNoValue].no,"%s",perdata); break; case 2: getStringToken(perdata,'>',2,sizeof(statedata)-1,statedata); getStringToken(statedata,'<',1,sizeof(statedata)-1,statedata); if(lstrlen(statedata) == NULL) sprintf_s(Prodata[ProNoValue].state,"%s",perdata); else sprintf_s(Prodata[ProNoValue].state,"%s",statedata); break; case 3:sprintf_s(Prodata[ProNoValue].okdate,"%s",perdata);break; case 4:Prodata[ProNoValue].okH=atoi(perdata); break; case 5:sprintf_s(Prodata[ProNoValue].wrongdate,"%s",perdata);break; case 6:Prodata[ProNoValue].wrongH=atoi(perdata); break; case 7:Prodata[ProNoValue].class0=atoi(perdata);break; case 8:sprintf_s(Prodata[ProNoValue].class1,"%s",perdata);break; case 9:sprintf_s(Prodata[ProNoValue].cont,"%s",perdata);break; case 10:sprintf_s(Prodata[ProNoValue].answer,"%s",perdata);break; default: sprintf_s(Prodata[ProNoValue].error,"%s",perdata);break; } } perdata[0] = '\0'; j++; } getdata[0] = '\0'; ProNoValue++; j=1; i++; } //TotalAddValue = ProNoValue; return 1 ; // ok } return 4 ; } //************************************************ // 查询问题单的内容 //************************************************ void vReadContent( int pno ) { static char *pRecv ; char date[10]; char data[40]; char classbuf1[40],classbuf2[40]; int i=1; ClassIndex=Prodata[pno].class0 - 18; if(ClassIndex == 0 ){ //异常问题 while(getStringToken(Prodata[pno].okdate,'/',i,sizeof(date)-1,date)!=1){ if( i==1 ) okY = atoi(date); else if( i==2) okM = atoi(date); i ++; } okD = atoi(date); okH = Prodata[pno].okH; i = 1; date[0] = '\0'; while(getStringToken(Prodata[pno].wrongdate,'/',i,sizeof(date)-1,date)!=1){ if( i==1 ) wrongY = atoi(date); else if( i==2) wrongM = atoi(date); i ++; } wrongD = atoi(date); wrongH = Prodata[pno].wrongH; } if(getStringToken(Prodata[pno].class1,',',1,sizeof(data)-1,data)!=1){ sprintf_s(classbuf1,"%s",data); data[0] = '\0'; if(getStringToken(Prodata[pno].class1,',',2,sizeof(data)-1,data)==1) sprintf_s(classbuf2,"%s",data); }else{ sprintf_s(classbuf1,"%s",data); } if(ClassIndex){ // 一般问题 for(i=0;i=ProNoValue) break ; if (ProNoIndex+i==ProNoSelect && ProNoSelectFlag == TRUE){ sprintf_s(buf,"%s %s",Prodata[ProNoIndex+i].no,Prodata[ProNoIndex+i].state); fontId[i] = StockFontBuffer( x + 20 , y+7+(i*20) , FONT_PRIO_FRONT, 1 , buf , 2 ); }else{ sprintf_s(buf,"%s %s",Prodata[ProNoIndex+i].no,Prodata[ProNoIndex+i].state); fontId[i] = StockFontBuffer( x + 20 , y+7+(i*20) , FONT_PRIO_FRONT, 0 , buf, 2 ); } if(Prodata[ProNoIndex+i].delflag == TRUE){ sprintf_s(buf,"已删除"); StockFontBuffer( x + 70 , y+7+(i*20) , FONT_PRIO_FRONT, 4 , buf, 2 ); } } Keyid = selFontId( fontId, sizeof( fontId )/sizeof( int ) ); if ( 0 <= Keyid && Keyid < 5 ){ if (ProNoIndex + Keyid < ProNoValue){ //查询某比单号的内容 ProNoSelectFlag = TRUE; ProNoSelect = ProNoIndex + Keyid; if ( ProNoSelect != HistorySelect ){ HistorySelect = ProNoSelect; InitOnlineGmInput(x, y); SegmentIndex = 0; SegmentTotal = 0; SegmentBuf[0][0] = '\0'; SegmentBuf[1][0] = '\0'; vReadContent( ProNoSelect ); } } } if( SegmentTotal > SegmentIndex ){ // 秀出内容 InputHistory.addNo =0; // 非玩家输入所以不用加 GetKeyInputFocus(&SubBuffer); if( SegmentIndex %2 == 0 ){ if(TitleFlag==TRUE){ StrToNowStrBuffer1("前次问题内容:"); for ( k=0;k<60+10;k++ ) StrToNowStrBuffer(" "); InputHistory.color[InputHistory.newNo]=TRUE; pContent = SegmentBuf[SegmentIndex]; TitleFlag = FALSE; }else{ if(pContent!=NULL){ word = StrToNowStrBuffer2(pContent); pContent+=word ; if(word<70){ for ( k=0;k<(80-word);k++ ) StrToNowStrBuffer(" "); } if(*pContent == NULL){ pContent = NULL; SegmentIndex++; TitleFlag = TRUE; } /* if (i>70){ StrToNowStrBuffer(pContent); pContent+=70 ; }else{ StrToNowStrBuffer(pContent); pContent+=i ; for ( k=0;k<(70-i);k++ ) //cyg 补空格 StrToNowStrBuffer(" "); } if(*pContent == NULL){ pContent = NULL; SegmentIndex++; TitleFlag = TRUE; } */ } } }else{ if(TitleFlag==TRUE){ StrToNowStrBuffer1("客服解答:"); for ( k=0;k<60+10;k++ ) //cyg 补空格 StrToNowStrBuffer(" "); InputHistory.color[InputHistory.newNo]=TRUE; pContent = SegmentBuf[SegmentIndex]; TitleFlag = FALSE; }else{ if(pContent!=NULL){ word = StrToNowStrBuffer2(pContent); pContent+=word ; if(word<70){ for ( k=0;k<(80-word);k++ ){ StrToNowStrBuffer(" "); } } if(*pContent == NULL){ pContent = NULL; SegmentIndex++; TitleFlag = TRUE; } } } } }else{ if( TitleFlag == TRUE ){ GetKeyInputFocus(&SubBuffer); StrToNowStrBuffer1("新增问题内容:"); for ( k=0;k<56+10;k++ ) StrToNowStrBuffer(" "); InputHistory.color[InputHistory.newNo]=TRUE; TitleFlag = FALSE; InputHistory.addNo = 0; InputHistory.lockNo = InputHistory.newNo; } } } //************************************************ //函式 : 处理资料输入栏位的主函式 //回传值 : None //************************************************ void InputOnlineGmData( int x, int y, int Key ) { int Changelineflag = 0; int i; if ( InputHistory.newNo - InputHistory.nowNo <= 4) GetKeyInputFocus(&SubBuffer); else pNowStrBuffer = NULL ; if (Key == 1) //上箭头 { if (InputHistory.newNo >4 && InputHistory.nowNo ){ InputHistory.nowNo -- ; if (InputHistory.newNo - (InputHistory.nowNo+4) == 1 ){ strcpy( InputHistory.str[ InputHistory.newNo ],SubBuffer.buffer); SubBuffer.buffer[0] = NULL ; } } } if (Key == 2) // 下箭头 { if (InputHistory.newNo >4){ if (InputHistory.nowNo+4= 5) InputHistory.nowNo = InputHistory.newNo -4; }else{ //SubBuffer.cursor } } for ( i=0;i<5;i++ ) // 总共五行 { if ((InputHistory.nowNo+i)!=InputHistory.newNo){ if(InputHistory.color[InputHistory.nowNo+i]==FALSE) StockFontBuffer( SubBuffer.x , y+300+(i*(30-5)) , FONT_PRIO_FRONT, 0 ,InputHistory.str[ InputHistory.nowNo+i ], 0 ); else StockFontBuffer( SubBuffer.x , y+300+(i*(30-5)) , FONT_PRIO_FRONT, 5 ,InputHistory.str[ InputHistory.nowNo+i ], 0 ); } } } HANDLE GMHandle; extern char szUser[],szPassword[]; //************************************************ //函式 : 处理查询单号的主函式 //回传值 : OL //************************************************ DWORD WINAPI DirThread(LPVOID param) { ResultCode = -1; char id[32], password[32]; CopyMemory(id,szUser,32); ecb_crypt("f;encor1c",id,32,DES_DECRYPT); CopyMemory(password,szPassword,32); ecb_crypt("f;encor1c",password,32,DES_DECRYPT); ResultCode = SendDirMsg( id,password ); switch(ResultCode) { case -200: StockChatBufferLine("无任何问题单纪录!!",FONT_PAL_RED); StockChatBufferLine("请新增问题单!",FONT_PAL_RED); ProNoValue = 0; break; case -400: StockChatBufferLine("网路发生错误!!",FONT_PAL_RED); StockChatBufferLine("无法查询问题单!",FONT_PAL_RED); break; case -600: StockChatBufferLine("线上回报服务器无法连结!!",FONT_PAL_RED); StockChatBufferLine("请您稍后再试...",FONT_PAL_WHITE); break; case -800: StockChatBufferLine("网路连线逾时!!",FONT_PAL_RED); StockChatBufferLine("请您稍后再试...",FONT_PAL_WHITE); break; case 1: // 查询成功 break; case -999: StockChatBufferLine("网路忙线中!!",FONT_PAL_RED); StockChatBufferLine("请您稍后再试...",FONT_PAL_RED); break; default: StockChatBufferLine("抱歉程式内部错误!!!",FONT_PAL_RED); StockChatBufferLine("问题单查询失败!",FONT_PAL_RED); break; } #ifdef _STONDEBUG_ //写入onlinegm.log if( ResultCode != 1 ){ sprintf_s(inlogstr,"查询失败错误码%d",ResultCode); WriteInLog(inlogstr,filename); } #endif CloseHandle(GMHandle); ExitThread(0); return 0L; } //************************************************ //函式 : 处理删除单号的主函式 //回传值 : OL //************************************************ DWORD WINAPI DeleteThread(LPVOID param) { ResultCode = -1; char id[32], password[32] ; CopyMemory(id,szUser,32); ecb_crypt("f;encor1c",id,32,DES_DECRYPT); CopyMemory(password,szPassword,32); ecb_crypt("f;encor1c",password,32,DES_DECRYPT); #ifdef _STONDEBUG_ inlogstr[0] = 0; #endif ResultCode = SendDeleteMsg(id,password,Prodata[ProNoSelect].no); switch(ResultCode) { case 4: StockChatBufferLine("网路发生错误!!",FONT_PAL_RED); StockChatBufferLine("无法删除本则单号!",FONT_PAL_RED); break; case 6: StockChatBufferLine("线上回报服务器无法连结!!",FONT_PAL_RED); StockChatBufferLine("请您稍后再试...",FONT_PAL_WHITE); break; case 8: StockChatBufferLine("网路连线逾时!!",FONT_PAL_RED); StockChatBufferLine("请您稍后再试...",FONT_PAL_WHITE); break; case 1: StockChatBufferLine("问题单号已删除了!",FONT_PAL_YELLOW); Prodata[ProNoSelect].delflag = TRUE ; TotalAddValue --; break; case -999: StockChatBufferLine("网路忙线中!!",FONT_PAL_RED); StockChatBufferLine("请您稍后再试...",FONT_PAL_RED); break; default: StockChatBufferLine("抱歉程式内部错误!!!",FONT_PAL_RED); StockChatBufferLine("本则单号删除失败!",FONT_PAL_RED); break; } #ifdef _STONDEBUG_ //写入onlinegm.log if( ResultCode != 1){ sprintf_s(inlogstr,"删除失败错误码%d",ResultCode); WriteInLog(inlogstr,filename); } #endif CloseHandle(GMHandle); ExitThread(0); return 0L; } //************************************************ //函式 : 处理Multithread的主函式 //回传值 : OL //************************************************ DWORD WINAPI OnlineGmThread(LPVOID param) { ResultCode = -1; char id[32], password[32] ,buf[50]; CopyMemory(id,szUser,32); ecb_crypt("f;encor1c",id,32,DES_DECRYPT); CopyMemory(password,szPassword,32); ecb_crypt("f;encor1c",password,32,DES_DECRYPT); #ifdef _STONDEBUG_ inlogstr[0] = 0; #endif ResultCode = SendProblemMsg(id,password,DataBuffer,InputBuffer); switch(ResultCode) { case 4: StockChatBufferLine("网路发生错误!!",FONT_PAL_RED); StockChatBufferLine("无法发送本则问题!",FONT_PAL_RED); break; case 6: StockChatBufferLine("线上回报服务器无法连结!!",FONT_PAL_RED); StockChatBufferLine("请您稍后再试...",FONT_PAL_WHITE); break; case 8: StockChatBufferLine("网路连线逾时!!",FONT_PAL_RED); StockChatBufferLine("请您稍后再试...",FONT_PAL_WHITE); break; case -9: if(SendType==0){ StockChatBufferLine("每次发送一般问题单",FONT_PAL_RED); StockChatBufferLine("请间隔三十分钟谢谢...",FONT_PAL_RED); }else{ StockChatBufferLine("每次发送异常问题单",FONT_PAL_RED); StockChatBufferLine("请间隔一小时谢谢...",FONT_PAL_RED); } break; case -999: StockChatBufferLine("网路忙线中!!",FONT_PAL_RED); StockChatBufferLine("请您稍后再试...",FONT_PAL_RED); break; case 1: sprintf_s(buf,"问题单号%d已送出!",iReturnNo); StockChatBufferLine( buf ,FONT_PAL_YELLOW); TotalAddValue ++; ResetFlag = TRUE ; // 只有成功才reset DirFlag = TRUE ; break; default: StockChatBufferLine("抱歉程式内部错误!!!",FONT_PAL_RED); StockChatBufferLine("本则单号传送失败!",FONT_PAL_RED); break; } #ifdef _STONDEBUG_ //写入onlinegm.log if( ResultCode != 1 ){ sprintf_s(inlogstr,"问题单类型:%d 建单失败错误码:%d",SendType,ResultCode); WriteInLog(inlogstr,filename); } #endif CloseHandle(GMHandle); ExitThread(0); return 0L; } extern int nServerGroup; extern short selectServerIndex; extern short onlinegmProcNo; extern int sCharSide ; //************************************************** //主函式: //回传值:0 表示视窗开启中 1 表示完成 //************************************************** int iOnlineGmProc() { int i , id ; static DWORD dwPressTime; static int btnId[50] , btnState[50] , HelpId[10] , HelpidState[10] ; static int SureId[2]; char buf[100]= "/0" ; // test static ACTION *pActOnlineGmWnd = NULL; static ACTION *pActSureWnd = NULL; static struct tm nowTime; time_t longTime; DWORD PushdirTime; static LPPAGE page; static LPDESC desc; static int desc_index,page_index; int x, y; if (onlinegmProcNo == 0) { // 打开一个视窗 if (pActOnlineGmWnd == NULL ) { x = (lpDraw->xSize - 600) / 2; y = (lpDraw->ySize - 450) / 2; pActOnlineGmWnd = MakeWindowDisp(x,y,600,450,NULL,-1, FALSE); x = pActOnlineGmWnd->x; y = pActOnlineGmWnd->y; if(ResetFlag==TRUE){ InitOnlineGmInput(x, y); InitOnlineGm(); dwPressTime = 0; for ( i = 0 ; i < sizeof(btnId)/sizeof(int) ; i++ ) { btnId[i] = 0; btnState[i] = 0; } for ( i = 0 ; i < sizeof(HelpId)/sizeof(int) ; i++ ) { HelpId[i] = 0; HelpidState[i] = 0; } time( &longTime ); localtime_s(&nowTime, &longTime ); wrongY = okY = nowTime.tm_year+1900 ; /*//fix wrongM = okM = nowTime.tm_mon+1 ; wrongD = okD = nowTime.tm_mday ; wrongH = okH = nowTime.tm_hour ; */ //画面reset ProNoIndex = 0; desc_index = 0; page_index = 0; PushKey = 3; // 自动查询 } } else { x = pActOnlineGmWnd->x; y = pActOnlineGmWnd->y; if (DeleteBtnFlag==FALSE) { id = selGraId( btnId, sizeof( btnId )/sizeof( int ) ); if(dwPressTime) { if( TimeGetTime()>(dwPressTime+100)) { for( i = 0 ; i < DEF_BUTTON_TOTAL ; i ++ ) { if(btnState[i]) { btnState[i] = 0; switch (i) { case 0://查询 PushdirTime = TimeGetTime(); if ( DirFlag==TRUE || (PushdirTime-LastTime)>5000 ){ //(关闭)有查询过就不能在查 LastTime = TimeGetTime(); PushKey = 3; DirFlag = FALSE; } break; case 1://删除 if (ProNoSelectFlag){ //要有选到某单号才能删除 DeleteBtnFlag = TRUE ; } break; case 2://传送 DeathAction( pActOnlineGmWnd ); pActOnlineGmWnd = NULL; onlinegmProcNo = 2; return 0; case 3://清除 InitOnlineGmInput(x, y); break; case 4://注意事项 DeathAction( pActOnlineGmWnd ); pActOnlineGmWnd = NULL; onlinegmProcNo = 1; return 0; case 5://关闭 ResetFlag = TRUE; DeathAction( pActOnlineGmWnd); pActOnlineGmWnd = NULL; return 1 ; case 6://讯息框上卷 if(ProNoValue){ PushKey = 1; } break; case 7://讯息框下卷 if(ProNoValue){ PushKey = 2; } break; case 8:PutKey = 1; break;//输入框上卷 case 9:PutKey = 2; break;//输入框下卷 case 10://正常年月上卷 okM--; if (okM<=0){ //fix okY--; okM=12; } break; case 11://正常年月下卷 okM++; if (okM>12){ okY++; okM=1; } break; case 12://正常日上卷 okD--; if (okD<=0) okD = 31 ; //fix break; case 13://正常日下卷 okD++; if (okD>31) okD = 1; break; case 14://正常时上卷 okH--; if (okH<0) okH = 23; break; case 15://正常时下卷 okH++; if (okH>23) okH=0; break; case 16://错误年月上卷 wrongM--; if (wrongM<=0){ //fix wrongY--; wrongM=12; } break; case 17://错误年月下卷 wrongM++; if (wrongM>12){ wrongY++; wrongM=1; } break; case 18://错误日上卷 wrongD--; if (wrongD<=0) wrongD = 31; //fix break; case 19://错误日下卷 wrongD++; if (wrongD > 31) wrongD = 1; break; case 20://错误时上卷 wrongH--; if (wrongH<0) wrongH = 23; break; case 21://错误时下卷 wrongH++; if (wrongH>23) wrongH = 0; break; case 22://类别一上卷 ClassIndex -- ; ClassIndex1 = 0 ; ClassIndex2 = 0 ; if (ClassIndex<0) ClassIndex = DEF_CLASS_TOTAL-1; break; case 23://类别一下卷 ClassIndex ++ ; ClassIndex1 = 0 ; ClassIndex2 = 0 ; if (ClassIndex==DEF_CLASS_TOTAL) ClassIndex = 0; break; case 24://类别二上卷 ClassIndex1 -- ; ClassIndex2 = 0 ; if (ClassIndex==1){ // 一般问题 if (ClassIndex1<0) ClassIndex1 = DEF_C1_TOTAL-1; }else{ if (ClassIndex1<0) ClassIndex1 = DEF_C2_TOTAL-1; } break; case 25://类别二下卷 ClassIndex1 ++ ; ClassIndex2 = 0 ; if (ClassIndex==1){ // 一般问题 if (ClassIndex1==DEF_C1_TOTAL) ClassIndex1=0; }else{ if (ClassIndex1==DEF_C2_TOTAL) ClassIndex1=0; } break; case 26://类别三上卷 ClassIndex2 -- ; switch (ClassIndex1) { case 0:if (ClassIndex2<0) ClassIndex2=2;break; case 1:if (ClassIndex2<0) ClassIndex2=2;break; case 2:if (ClassIndex2<0) ClassIndex2=4;break; case 3:if (ClassIndex2<0) ClassIndex2=1;break; case 4:if (ClassIndex2<0) ClassIndex2=1;break; case 5:if (ClassIndex2<0) ClassIndex2=2;break; case 10:if (ClassIndex2<0) ClassIndex2=2;break; default: ClassIndex2=0;break; } break; case 27://类别三下卷 ClassIndex2 ++ ; switch (ClassIndex1) { case 0:if (ClassIndex2>2) ClassIndex2=0;break; case 1:if (ClassIndex2>2) ClassIndex2=0;break; case 2:if (ClassIndex2>4) ClassIndex2=0;break; case 3:if (ClassIndex2>1) ClassIndex2=0;break; case 4:if (ClassIndex2>1) ClassIndex2=0;break; case 5:if (ClassIndex2>2) ClassIndex2=0;break; case 10:if (ClassIndex2>2) ClassIndex2=0;break; default: ClassIndex2=0;break; } break; } } } dwPressTime = 0; } } else { if ( 0 <= id && id < DEF_BUTTON_TOTAL ) { btnState[id] = 1; dwPressTime = TimeGetTime(); } } }else{ if (pActSureWnd == NULL){ pActSureWnd = MakeWindowDisp( 200+100+20 , 100-63 , 4-1 , 6-4 , NULL , -1); } else if(pActSureWnd->hp > 0) { StockDispBuffer(416+15+15,100,DISP_PRIO_MENU,ONLINEGM_YES_OR_NO,1); MakeHitBox( 338+15+15,100,405+15+15,124, DISP_PRIO_BOX2 ); MakeHitBox( 426+15+15,100,494+15+15,124, DISP_PRIO_BOX2 ); selGraId( SureId, sizeof( SureId )/sizeof( int ) ); SureId[0] = StockDispBuffer( 372+15+15 , 112 , DISP_PRIO_IME3, ONLINEGM_SURE_U , 1); SureId[1] = StockDispBuffer( 460+15+15 , 112 , DISP_PRIO_IME3, ONLINEGM_CHANCEL , 1); if(Prodata[ProNoSelect].delflag == TRUE){ sprintf_s(buf,"此笔单号已删除"); StockFontBuffer( 365+15+15 , 81 , FONT_PRIO_FRONT, 2 , buf , 0 ); }else{ sprintf_s(buf,"删除单号 %s 吗?",Prodata[ProNoSelect].no); StockFontBuffer( 355+15+15 , 81 , FONT_PRIO_FRONT, 5 , buf , 0 ); } if((mouse.onceState & MOUSE_LEFT_CRICK) && HitDispNo == SureId[0]){ //确定 if(Prodata[ProNoSelect].delflag == FALSE){ DWORD dwThreadID,dwThrdParam = 1; GMHandle = CreateThread(NULL, 0, DeleteThread,&dwThrdParam,0,&dwThreadID); if(GMHandle == NULL) { StockChatBufferLine("您的作业系统资源已不足!!",FONT_PAL_RED); StockChatBufferLine("本则单号删除失败!",FONT_PAL_RED); ResetFlag = TRUE; DeathAction( pActOnlineGmWnd); pActOnlineGmWnd = NULL; return 1; } } DeathAction( pActSureWnd); pActSureWnd = NULL; DeleteBtnFlag = FALSE ; } if((mouse.onceState & MOUSE_LEFT_CRICK) && HitDispNo == SureId[1]){ //取消 DeathAction( pActSureWnd); pActSureWnd = NULL; DeleteBtnFlag = FALSE ; } } } if (pActOnlineGmWnd->hp > 0) { x = pActOnlineGmWnd->x; y = pActOnlineGmWnd->y; if(PushKey != 3){ ShowProblemNo(x, y, PushKey); }else{ //处理查询功能 for( i=0;ixSize - 7*64)/2; y = (lpDraw->ySize - 8*48)/2; pActOnlineGmWnd = MakeWindowDisp( x , y , 4+3 , 6+2 ,NULL,0, FALSE);//( 210 , 120, 10 , 10 , NULL , 0 ); pNowStrBuffer = NULL ; } else if (pActOnlineGmWnd->hp > 0) { x = pActOnlineGmWnd->x; y = pActOnlineGmWnd->y; page = &ProHelp_page[page_index]; desc = Prohelp_Index[page_index]+page->desc_index; desc_index = page->desc_index; id = selGraId( HelpId, sizeof( HelpId )/sizeof( int ) ); if (HelpidState[0]>=0) HelpId[0] = StockDispBuffer( x+207+32-160, y+352, DISP_PRIO_IME3, CG_FIELD_HELP_PREPAGE+btnState[1], 2); else StockDispBuffer( x+207+32-160, y+352, DISP_PRIO_IME3, CG_FIELD_HELP_PREPAGE+btnState[1], 1); if (HelpidState[1]>=0) HelpId[1] = StockDispBuffer( x+277+32-100, y+352, DISP_PRIO_IME3, CG_FIELD_HELP_NEXTPAGE+btnState[2], 2); else StockDispBuffer( x+277+32-100, y+352, DISP_PRIO_IME3, CG_FIELD_HELP_NEXTPAGE+btnState[2], 1); HelpId[2] = StockDispBuffer( x+347+32-40, y+352, DISP_PRIO_IME3, CG_FIELD_HELP_EXIT+btnState[3], 2); if((mouse.onceState & MOUSE_LEFT_CRICK) && HitDispNo == HelpId[0]){ //上一页 if (page_index){ page_index--; page = &ProHelp_page[page_index]; //指向上一页 desc_index = page->desc_index; desc = Prohelp_Index[page_index]+desc_index;//指向新一页的desc开头 } } if((mouse.onceState & MOUSE_LEFT_CRICK) && HitDispNo == HelpId[1]){ //下一页 if (page_index < 4-1) { page_index++; page = &ProHelp_page[page_index]; //指向下一页 desc_index = page->desc_index; desc = Prohelp_Index[page_index]+desc_index;//指向新一页的desc开头 } } HelpidState[0] = page_index==0 ? -2 : 0 ; HelpidState[1] = page_index==4-1 ? -2 : 0 ; if((mouse.onceState & MOUSE_LEFT_CRICK) && HitDispNo == HelpId[2]) { DeathAction( pActOnlineGmWnd); pActOnlineGmWnd = NULL; onlinegmProcNo = 0 ; ResetFlag = FALSE; return 0 ; } for( i = 0; i < page->desc_num; i++){ StockFontBuffer( x+30+5 , y+i*25+10, FONT_PRIO_FRONT, desc->color, desc->description, 0); desc++; } } } else if (onlinegmProcNo == 2) //cyg 准备传送的确定视窗 { if (pActOnlineGmWnd==NULL){ x = (lpDraw->xSize - 5*64)/2; y = (lpDraw->ySize - 5*48)/2; pActOnlineGmWnd = MakeWindowDisp( x , y , 5 , 5 ,NULL,0, FALSE); pNowStrBuffer = NULL ; } else if (pActOnlineGmWnd->hp > 0) { x = pActOnlineGmWnd->x; y = pActOnlineGmWnd->y; MakeHitBox( x + 36,y + 238-85-35,x + 40,y + 238-85+35, DISP_PRIO_BOX ); MakeHitBox( x + 156+18,y + 238-85-35,x + 156+18,y + 238-85+35, DISP_PRIO_BOX ); id = selGraId( btnId, sizeof( btnId )/sizeof( int ) ); int SureBtn[2]; SureBtn[0] = StockDispBuffer( x + 70 , y + 250-85+35 , DISP_PRIO_IME3, ONLINEGM_SURE_U , 1); SureBtn[1] = StockDispBuffer( x + 190+18 , y + 250-85+35 , DISP_PRIO_IME3, ONLINEGM_CHANCEL , 1); sprintf_s( buf ,"错误讯息->"); StockFontBuffer( x + 20 , y+ 20+60 , FONT_PRIO_FRONT, 4 , buf , 0 ); if( TotalAddValue >= DEF_MAX_ADD_VALUE ){ // 有没有达最大建单数 sprintf_s( buf ,"您的问题单已达上限20笔!!"); StockFontBuffer( x + 235 , y + 150 , FONT_PRIO_FRONT, 4 , buf , 0 ); sprintf_s( buf ,"请删除问题单后再留单谢谢",TotalAddValue ); StockFontBuffer( x + 235 , y + 185 , FONT_PRIO_FRONT, 4 , buf , 0 ); if((mouse.onceState & MOUSE_LEFT_CRICK) && HitDispNo == SureBtn[0]) { DeathAction( pActOnlineGmWnd); pActOnlineGmWnd = NULL; onlinegmProcNo = 0 ; ResetFlag = FALSE; return 0 ; } }else{ if (ClassIndex==1){ sprintf_s( buf ,"问题类别-> %s",ProblemClass[ClassIndex]); StockFontBuffer( x + 20 , y + 20+10, FONT_PRIO_FRONT, 1 , buf , 0 ); sprintf_s( buf ,"问题种类-> %s",ProblemC1[ClassIndex1]); StockFontBuffer( x + 20 , y + 20+35, FONT_PRIO_FRONT, 1 , buf , 0 ); }else{ sprintf_s( buf ,"问题类别-> %s",ProblemClass[ClassIndex]); StockFontBuffer( x + 20 , y + 20+10, FONT_PRIO_FRONT, 1 , buf , 0 ); sprintf_s( buf ,"问题种类-> %s",ProblemC2[ClassIndex1]); StockFontBuffer( x + 20 , y + 20+35, FONT_PRIO_FRONT, 1 , buf , 0 ); switch (ClassIndex1) { case 0: sprintf_s( buf,"种类细项-> %s",ProblemC2_1[ClassIndex2] );break; case 1: sprintf_s( buf,"种类细项-> %s",ProblemC2_2[ClassIndex2] );break; case 2: sprintf_s( buf,"种类细项-> %s",ProblemC2_3[ClassIndex2] );break; case 3: sprintf_s( buf,"种类细项-> %s",ProblemC2_4[ClassIndex2] );break; case 4: sprintf_s( buf,"种类细项-> %s",ProblemC2_5[ClassIndex2] );break; case 5: sprintf_s( buf,"种类细项-> %s",ProblemC2_6[ClassIndex2] );break; case 10: sprintf_s( buf,"种类细项-> %s",ProblemC2_7[ClassIndex2] );break; default: buf[0] = '\0'; } StockFontBuffer( x + 220-25 , y + 120+60, FONT_PRIO_FRONT, 1 , buf , 0 ); sprintf_s( buf ,"正常日期-> %4d年%02d月%02d日%02d时",okY,okM,okD,okH); StockFontBuffer( x + 220-25 , y + 120+85, FONT_PRIO_FRONT, 1 , buf , 0 ); sprintf_s( buf ,"错误日期-> %4d年%02d月%02d日%02d时",wrongY,wrongM,wrongD,wrongH ); StockFontBuffer( x + 220-25 , y + 120+110, FONT_PRIO_FRONT, 1 , buf , 0 ); } if( lstrlen(InputHistory.str[InputHistory.lockNo+1]) == 0 && lstrlen(SubBuffer.buffer) == 0 ){ sprintf_s( buf ,"请输入问题内容"); StockFontBuffer( x + 20 , y + 120, FONT_PRIO_FRONT, 4 , buf , 0 ); if((mouse.onceState & MOUSE_LEFT_CRICK) && HitDispNo == SureBtn[0]) { DeathAction( pActOnlineGmWnd); pActOnlineGmWnd = NULL; onlinegmProcNo = 0 ; ResetFlag = FALSE; return 0 ; } }else if(ClassIndex==0&&(!okY||!okM||!okD||!wrongY||!wrongM||!wrongD)){ //fix sprintf_s( buf ,"请填写[正常日期]与[错误日期]"); StockFontBuffer( x + 280-10+2 , y + 260 , FONT_PRIO_FRONT, 4 , buf , 0 ); if((mouse.onceState & MOUSE_LEFT_CRICK) && HitDispNo == SureBtn[0]) { DeathAction( pActOnlineGmWnd); pActOnlineGmWnd = NULL; onlinegmProcNo = 0 ; ResetFlag = FALSE; return 0 ; } }else{ if((mouse.onceState & MOUSE_LEFT_CRICK) && HitDispNo == SureBtn[0]) { ResetFlag = FALSE; ContentBuf[0] = '\0'; for ( i=0;ih_addr_list); } return TRUE; } #endif