📄 npc_raceman.c
字号:
#include "version.h"
#include <time.h>
#include "char.h"
#include "object.h"
#include "lssproto_serv.h"
#include "saacproto_cli.h"
#include "npcutil.h"
#include "handletime.h"
#include "npc_raceman.h"
#include "family.h"
#include "log.h"
#include "enemy.h"
#ifdef _RACEMAN
void Raceman_SelectWindow( int meindex, int talker, int num,int select);
void Raceman_MsgDisp(int meindex,int talker,int num,int select);
BOOL Raceman_EventAddItem( int meindex,int talker );
BOOL Raceman_CheckItem(int meindex,int talker);
BOOL Raceman_ItemFullCheck(int meindex, int talker);
BOOL Raceman_checkpet( int meindex, int talker , int select , char *token );
BOOL Raceman_petcheckin ( int meindex , int talker ); //限定种类
BOOL Raceman_checkprize( int meindex , int talker ,char *token);
void Raceman_awardprize( int meindex , int talker );
int Raceman_CheckGameType(int meindex , int talker );
int Raceman_readmode( int meindex , int talkerindex );
void Raceman_countrank( int meindex, int talker ); // 目前没用到
void Raceman_renewrank( int meindex , int talker , int select );
int Raceman_CheckSelectRank( int meindex , int talkerindex , int datanum);
void Raceman_GetQuestion( int meindex ,int talker , char *token);
BOOL Raceman_CheckAnswer( int meindex , int talker , char *data );
enum {
CHAR_WORK_PETSELECT = CHAR_NPCWORKINT1,
CHAR_WORK_RACEQUIZ = CHAR_NPCWORKINT2,
};
//int PetSelect;
int Pageindex;
int asktotal;
struct RANKTABLE ranktable1[DEFMAXRANK];
struct RANKTABLE ranktable2[DEFMAXRANK];
struct RANKTABLE ranktable3[DEFMAXRANK];
struct RANKTABLE ranktable4[DEFMAXRANK];
struct RANKTABLE ranktable5[DEFMAXRANK];
struct RANKTABLE history1[DEFMAXRANK];
struct RANKTABLE history2[DEFMAXRANK];
struct RANKTABLE history3[DEFMAXRANK];
struct RANKTABLE history4[DEFMAXRANK];
struct RANKTABLE history5[DEFMAXRANK];
struct ASKTABLE asktable[400];
int petflgtable[640]; //可抓宠的table
char rankname[5][64] = {
"『新手赛--惊为天人排行榜』",
"『高手赛--惊为天人排行榜』",
"『家族赛--惊为天人排行榜』",
"『高手赛--无奇不有排行榜』",
"『家族赛--无奇不有排行榜』"
};
char historyrank[5][64] = {
"『新手历史惊为天人排行榜』",
"『高手历史惊为天人排行榜』",
"『家族历史惊为天人排行榜』",
"『高手历史无奇不有排行榜』",
"『家族历史无奇不有排行榜』"
};
#define DEF_READ_WAITTIME (10)
unsigned long RTIME1 = 0,
RTIME2 = 0,
RTIME3 = 0,
RTIME4 = 0,
RTIME5 = 0;
BOOL NPC_RacemanInit( int meindex)
{
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
char buf1[128];
int ranknum,i;
char file[10][20] = {
"Mode1",
"Mode2",
"Mode3",
"Mode4",
"Mode5",
"History1",
"History2",
"History3",
"History4",
"History5"
};
//PetSelect = 0;
Pageindex = 0;
if( NPC_Util_GetArgStr( meindex, npcarg, sizeof( npcarg)) == NULL) return FALSE;
NPC_Util_GetStrFromStrWithDelim( npcarg , "RankNum", buf1, sizeof( buf1));
ranknum = atoi(buf1);
CHAR_setInt( meindex, CHAR_WHICHTYPE, CHAR_RACEMAN); //制作一只npc
if( RTIME1 == 0 || RTIME2 == 0 || RTIME3 == 0 || RTIME4 == 0 || RTIME5 == 0){
RTIME1 = NowTime.tv_sec+DEF_READ_WAITTIME,
RTIME2 = NowTime.tv_sec+DEF_READ_WAITTIME,
RTIME3 = NowTime.tv_sec+DEF_READ_WAITTIME,
RTIME4 = NowTime.tv_sec+DEF_READ_WAITTIME;
RTIME5 = NowTime.tv_sec+DEF_READ_WAITTIME;
//把5种比赛记录读取进来
for( i = 0 ; i < 10 ; i++){
NPC_Util_GetStrFromStrWithDelim( npcarg , file[i] , buf1, sizeof( buf1));
if(strlen(buf1) == 0) continue;
if(i < 5)
saacproto_ACRaceRecordandSort_send( acfd,meindex,buf1,"","",i+1,0,ranknum );
else
saacproto_ACRaceRecordandSort_send( acfd,meindex,buf1,"","",i+6,0,ranknum );
}
}
return TRUE;
}
void NPC_RacemanTalked( int meindex , int talkerindex , char *szMes ,int color )
{
if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) {
return;
}
if(NPC_Util_isFaceToFace(talkerindex,meindex,1 )==FALSE){
if( NPC_Util_CharDistance( talkerindex, meindex ) > 1) return;
}
Raceman_SelectWindow( meindex, talkerindex,0,-1);
}
void Raceman_SelectWindow( int meindex, int talker, int num,int select)
{
char token[1024];
int fd , ret;
fd = getfdFromCharaIndex( talker );
if( fd == -1 ) return;
token[0] = '\0';
switch( num) {
case 0: //选单
Raceman_MsgDisp( meindex, talker, 0 , -1 );
break;
case 1: //比赛题目
Raceman_MsgDisp( meindex, talker, 1 , -1 );
break;
case 2: //领猎宠证
ret = Raceman_CheckGameType(meindex,talker);
if(ret == 0)
Raceman_MsgDisp( meindex, talker, 2 , -1 );
else if(ret == 1)
Raceman_MsgDisp( meindex, talker, 9 , -1 );
else if(ret == 2)
Raceman_MsgDisp( meindex, talker, 90 , -1 );
else if(ret == 3)
Raceman_MsgDisp( meindex, talker, 91 , -1 );
else if(ret == 4)
Raceman_MsgDisp( meindex, talker, 92 , -1 );
break;
case 3: //猎宠登记
ret = Raceman_CheckGameType(meindex,talker);
if(ret == 1)
Raceman_MsgDisp( meindex, talker, 9 , -1 ); //族长身分不合
else if(ret == 4)
Raceman_MsgDisp( meindex, talker, 92 , -1 ); //家族没有正式成立
else
Raceman_MsgDisp( meindex, talker, 3 , -1 );
break;
case 4: //猎宠排行榜
Raceman_MsgDisp( meindex, talker, 4 , -1 );
break;
case 5: //猎宠战利品
ret = Raceman_CheckGameType(meindex,talker);
if(ret == 1)
Raceman_MsgDisp( meindex, talker, 9 , -1 ); //族长身分不合
else if(ret == 4)
Raceman_MsgDisp( meindex, talker, 92 , -1 ); //家族没有正式成立
else
Raceman_MsgDisp( meindex, talker, 5 , -1 );
break;
case 6: //通关密语
ret = Raceman_CheckGameType(meindex,talker);
if(ret == 1)
Raceman_MsgDisp( meindex, talker, 9 , -1 ); //族长身分不合
else if(ret == 4)
Raceman_MsgDisp( meindex, talker, 92 , -1 ); //家族没有正式成立
else
Raceman_MsgDisp( meindex, talker, 6 , -1 );
break;
}
}
void NPC_RacemanWindowTalked( int meindex , int talkerindex , int seqno, int select, char *data)
{
int datanum = -1;
int buttontype;
int i,open,ret ;
char listbuf[4096],tmp_buffer[4096];
listbuf[0] = '\0';
tmp_buffer[0] = '\0';
if( NPC_Util_CharDistance( talkerindex, meindex ) > 2) {
return;
}
print("\n NPC_RacemanWindowTalked: data:%s seq:%d sel:%d ", data, seqno, select);
makeStringFromEscaped( data);
datanum = atoi( data);
switch( seqno){
case CHAR_WINDOWTYPE_RACE_START:
if(datanum == 2){ // 比赛题目
Raceman_SelectWindow( meindex, talkerindex,1,-1);
}else if(datanum == 3){ // 领取猎宠证
Raceman_SelectWindow( meindex, talkerindex,2,-1);
}else if(datanum == 4){ // 猎宠登记处
//Raceman_SelectWindow( meindex, talkerindex,3,-1);修改 加入通关密语才能登记
Raceman_SelectWindow( meindex, talkerindex,6,-1);
}else if(datanum == 5){ // 猎宠排行榜
Raceman_SelectWindow( meindex, talkerindex,4,-1);
}else if(datanum == 6){ // 猎宠战利品
Raceman_SelectWindow( meindex, talkerindex,5,-1);
}
break;
case CHAR_WINDOWTYPE_RACE_SUBJECT:
if(select == WINDOW_BUTTONTYPE_OK){
Raceman_SelectWindow( meindex, talkerindex,0,-1);
}
break;
case CHAR_WINDOWTYPE_RACE_TICKET:
if(select == WINDOW_BUTTONTYPE_OK)
{
if(Raceman_CheckItem(meindex,talkerindex)==TRUE){ //TRUE:有证了
Raceman_MsgDisp( meindex, talkerindex,22,-1);
}else{
if(Raceman_EventAddItem(meindex, talkerindex)==TRUE){
Raceman_SelectWindow( meindex, talkerindex,0,-1);
}
}
}
break;
case CHAR_WINDOWTYPE_RACE_PETSELECT:
if(Raceman_CheckItem(meindex,talkerindex)==FALSE){ //FALSE:没有证
Raceman_MsgDisp( meindex, talkerindex,32,-1);
}else{
if(select == WINDOW_BUTTONTYPE_CANCEL){
Raceman_SelectWindow( meindex, talkerindex,0,-1);
}else{
Raceman_MsgDisp( meindex, talkerindex,31,datanum);
}
}
break;
case CHAR_WINDOWTYPE_RACE_CHECKIN:
if(select == WINDOW_BUTTONTYPE_YES){
ret = Raceman_petcheckin( meindex, talkerindex ); //登记
if(ret == TRUE)
Raceman_SelectWindow( meindex, talkerindex,0,-1);
else
Raceman_MsgDisp( meindex, talkerindex,93,-1);
}else if(select == WINDOW_BUTTONTYPE_NO){
Raceman_SelectWindow( meindex, talkerindex,0,-1);
}
break;
case CHAR_WINDOWTYPE_RACE_RANK:
open = Raceman_CheckSelectRank(meindex,talkerindex,datanum);
switch(open)
{
case 1:
if( NowTime.tv_sec > RTIME1 ){
Raceman_renewrank( meindex , talkerindex , datanum-1 ); //更新
RTIME1 = NowTime.tv_sec+DEF_READ_WAITTIME;
}
if(ranktable1[0].rank == 0) Raceman_MsgDisp( meindex, talkerindex,46,-1);
else Raceman_MsgDisp( meindex, talkerindex,41,-1);
break;
case 2:
if( NowTime.tv_sec > RTIME2 ){
Raceman_renewrank( meindex , talkerindex , datanum-1 ); //更新
RTIME2 = NowTime.tv_sec+DEF_READ_WAITTIME;
}
if(ranktable2[0].rank == 0) Raceman_MsgDisp( meindex, talkerindex,46,-1);
else Raceman_MsgDisp( meindex, talkerindex,42,-1);
break;
case 3:
if( NowTime.tv_sec > RTIME3 ){
Raceman_renewrank( meindex , talkerindex , datanum-1 ); //更新
RTIME3 = NowTime.tv_sec+DEF_READ_WAITTIME;
}
if(ranktable3[0].rank == 0) Raceman_MsgDisp( meindex, talkerindex,46,-1);
else Raceman_MsgDisp( meindex, talkerindex,43,-1);
break;
case 4:
if( NowTime.tv_sec > RTIME4 ){
Raceman_renewrank( meindex , talkerindex , datanum-1 ); //更新
RTIME4 = NowTime.tv_sec+DEF_READ_WAITTIME;
}
if(ranktable4[0].rank == 0) Raceman_MsgDisp( meindex, talkerindex,46,-1);
else Raceman_MsgDisp( meindex, talkerindex,44,-1);
break;
case 5:
if( NowTime.tv_sec > RTIME5 ){
Raceman_renewrank( meindex , talkerindex , datanum-1 ); //更新
RTIME5 = NowTime.tv_sec+DEF_READ_WAITTIME;
}
if(ranktable5[0].rank == 0) Raceman_MsgDisp( meindex, talkerindex,46,-1);
else Raceman_MsgDisp( meindex, talkerindex,45,-1);
break;
case 11:
if(history1[0].rank == 0) Raceman_MsgDisp( meindex, talkerindex,46,-1);
else Raceman_MsgDisp( meindex, talkerindex,411,-1);
break;
case 12:
if(history2[0].rank == 0) Raceman_MsgDisp( meindex, talkerindex,46,-1);
else Raceman_MsgDisp( meindex, talkerindex,412,-1);
break;
case 13:
if(history3[0].rank == 0) Raceman_MsgDisp( meindex, talkerindex,46,-1);
else Raceman_MsgDisp( meindex, talkerindex,413,-1);
break;
case 14:
if(history4[0].rank == 0) Raceman_MsgDisp( meindex, talkerindex,46,-1);
else Raceman_MsgDisp( meindex, talkerindex,414,-1);
break;
case 15:
if(history5[0].rank == 0) Raceman_MsgDisp( meindex, talkerindex,46,-1);
else Raceman_MsgDisp( meindex, talkerindex,415,-1);
break;
default:
Raceman_SelectWindow( meindex, talkerindex,0,-1);
break;
}
break;
case CHAR_WINDOWTYPE_RACE_PRIZE:
if(select == WINDOW_BUTTONTYPE_OK){
Raceman_awardprize( meindex, talkerindex );
Raceman_SelectWindow( meindex, talkerindex,0,-1);
}
break;
case CHAR_WINDOWTYPE_RACE_NORMAL:
if(select == WINDOW_BUTTONTYPE_OK){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -