📄 npc_raceman.c
字号:
for (i=0;i<10;i++)
{
if(history5[i].rank == 0 || strlen(history5[i].name) == 0 || history5[i].catchcnt == 0) break;
sprintf(tmp_buffer,"%d %s %d ",history5[i].rank , history5[i].name , history5[i].catchcnt);
strcat(token,tmp_buffer);
}
Pageindex = 0;
buttontype=WINDOW_BUTTONTYPE_OK|WINDOW_BUTTONTYPE_NEXT;
windowtype=WINDOW_MESSAGETYPE_RACEMAN_RANK;
windowno=CHAR_WINDOWTYPE_RACE_SHOWRANK15;
break;
case 46:
strcpy( token, " ☆猎宠排行榜☆\n\n\n");
strcat( token, " 排行榜目前没有资料\n");
buttontype=WINDOW_BUTTONTYPE_OK;
windowtype=WINDOW_MESSAGETYPE_MESSAGE;
windowno=CHAR_WINDOWTYPE_RACE_NORMAL;
break;
case 5: //猎宠战利品
if(Raceman_checkprize( meindex , talker , token )==FALSE){
windowno=CHAR_WINDOWTYPE_RACE_NORMAL;
}else{
Raceman_renewrank( meindex , talker , Raceman_readmode( meindex , talker ) ); //读取排名
windowno=CHAR_WINDOWTYPE_RACE_PRIZE;
}
buttontype=WINDOW_BUTTONTYPE_OK;
windowtype=WINDOW_MESSAGETYPE_MESSAGE;
break;
case 6: //通关密语
Raceman_GetQuestion( meindex , talker , token ); //要处理随机读出题目 和秀出题目
buttontype = WINDOW_BUTTONTYPE_OK;
windowtype = WINDOW_MESSAGETYPE_MESSAGEANDLINEINPUT;
windowno = CHAR_WINDOWTYPE_RACE_QUIZ;
break;
case 9: // 家族赛 非族长讯息
if( NPC_Util_GetStrFromStrWithDelim( argstr, "fmleader_msg",buf, sizeof( buf) ) != NULL){
strcpysafe(token, sizeof( buf), buf);
}
buttontype=WINDOW_BUTTONTYPE_OK;
windowtype=WINDOW_MESSAGETYPE_MESSAGE;
windowno=CHAR_WINDOWTYPE_RACE_NORMAL;
break;
case 90:
if( NPC_Util_GetStrFromStrWithDelim( argstr, "notnew_msg",buf, sizeof( buf) ) != NULL){
strcpysafe(token, sizeof( buf), buf);
}
buttontype=WINDOW_BUTTONTYPE_OK;
windowtype=WINDOW_MESSAGETYPE_MESSAGE;
windowno=CHAR_WINDOWTYPE_RACE_NORMAL;
break;
case 91:
if( NPC_Util_GetStrFromStrWithDelim( argstr, "notnew_msg",buf, sizeof( buf) ) != NULL){
strcpysafe(token, sizeof( buf), buf);
}
buttontype=WINDOW_BUTTONTYPE_OK;
windowtype=WINDOW_MESSAGETYPE_MESSAGE;
windowno=CHAR_WINDOWTYPE_RACE_NORMAL;
break;
case 92:
strcpy(token,"您的家族还没有正式成立...");
buttontype=WINDOW_BUTTONTYPE_OK;
windowtype=WINDOW_MESSAGETYPE_MESSAGE;
windowno=CHAR_WINDOWTYPE_RACE_NORMAL;
break;
case 93:
strcpy(token,"目前登记人数过多请稍後再试...");
buttontype=WINDOW_BUTTONTYPE_OK;
windowtype=WINDOW_MESSAGETYPE_MESSAGE;
windowno=CHAR_WINDOWTYPE_RACE_NORMAL;
break;
case 94:
if( NPC_Util_GetStrFromStrWithDelim( argstr, "wrongans_msg",buf, sizeof( buf) ) != NULL){
strcpysafe(token, sizeof( buf), buf);
}
buttontype=WINDOW_BUTTONTYPE_OK;
windowtype=WINDOW_MESSAGETYPE_MESSAGE;
windowno=CHAR_WINDOWTYPE_RACE_NORMAL;
break;
}
lssproto_WN_send( fd, windowtype,
buttontype,
windowno,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
token);
}
//return 0: OK 1:族长身分不合 2:新手等级不合 3:新手转身不合 4:非正式家族
int Raceman_CheckGameType(int meindex , int talker )
{
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
char buf[64];
int gmode;
if(NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr)) == NULL) { //读参数
print("MsgDisp:GetArgStrErr");
print("NPCName=%s\n", CHAR_getChar( meindex, CHAR_NAME));
return FALSE;
}
NPC_Util_GetStrFromStrWithDelim( argstr, "GameMode", buf, sizeof( buf) );
gmode = atoi(buf);
if( gmode == 3 || gmode == 5){ //家族赛
if (CHAR_getWorkInt(talker, CHAR_WORKFMSETUPFLAG)!=1)
return 4;
if (CHAR_getInt(talker,CHAR_FMLEADERFLAG)!=FMMEMBER_LEADER) //是族长吗
return 1;
}
if( gmode == 1 ){ //检查新人身分
NPC_Util_GetStrFromStrWithDelim( argstr, "FornewLv", buf, sizeof( buf) );
//sprintf(buuf,"fornewlv:%s talkerLV:%d", buf , CHAR_getInt( talker , CHAR_LV));
//CHAR_talkToCli( talker, -1,buuf, CHAR_COLORYELLOW);
if(CHAR_getInt( talker , CHAR_LV) > atoi(buf) )
return 2;
NPC_Util_GetStrFromStrWithDelim( argstr, "FornewTran", buf, sizeof( buf) );
//sprintf(buuf,"fornewTran:%s talkerLV:%d", buf , CHAR_getInt( talker , CHAR_TRANSMIGRATION) );
//CHAR_talkToCli( talker, -1,buuf, CHAR_COLORYELLOW);
if(CHAR_getInt( talker , CHAR_TRANSMIGRATION) > atoi(buf) )
return 3;
}
return 0;
}
//检查有无猎宠证
BOOL Raceman_CheckItem(int meindex,int talker)
{
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
int item,i,itemindex,id;
char buf[128];
if(NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr)) == NULL) { //读参数
print("MsgDisp:GetArgStrErr");
print("NPCName=%s\n", CHAR_getChar( meindex, CHAR_NAME));
return FALSE;
}
if( NPC_Util_GetStrFromStrWithDelim( argstr, "CheckItem",
buf, sizeof( buf) ) != NULL)
{
item = atoi(buf);
for( i = 0 ; i < CHAR_MAXITEMHAVE ; i++ ) {
itemindex=CHAR_getItemIndex( talker , i );
if( ITEM_CHECKINDEX( itemindex) ) {
id=ITEM_getInt( itemindex ,ITEM_ID );
if(id==item) return TRUE;
}
}
}
return FALSE;
}
BOOL Raceman_ItemFullCheck(int meindex, int talker)
{
int emptyitemindexinchara;
emptyitemindexinchara = CHAR_findEmptyItemBox( talker );
if( emptyitemindexinchara < 0 ){
return FALSE;
}
return TRUE;
}
//发放猎宠证
BOOL Raceman_EventAddItem( int meindex,int talker )
{
int itemindex,ret,i,fd;
char token[256],buf[128],buf1[256];
char id[16],name[64];
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
int gmode;
unsigned int askno,asklv,temp=0;
if(Raceman_ItemFullCheck( meindex, talker) == FALSE){
Raceman_MsgDisp( meindex, talker, 21,-1);
return FALSE;
}
if(NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr)) == NULL) { //读参数
print("MsgDisp:GetArgStrErr");
print("NPCName=%s\n", CHAR_getChar( meindex, CHAR_NAME));
return FALSE;
}
if( NPC_Util_GetStrFromStrWithDelim( argstr , "GetItem", buf, sizeof( buf)) == NULL ){
print("raceman: GetItem Err");
return FALSE;
}
itemindex = ITEM_makeItemAndRegist( atoi( buf ));
if(itemindex == -1){
print("raceman: itemindex Err");
return FALSE;
}
ret = CHAR_addItemSpecificItemIndex( talker, itemindex);
if( ret < 0 || ret >= CHAR_MAXITEMHAVE ) {
print( "npc_raceman.c: ACCEPTadditem error itemindex[%d]\n", itemindex);
ITEM_endExistItemsOne( itemindex);
return FALSE;
}
NPC_Util_GetStrFromStrWithDelim( argstr , "GameMode", buf1, sizeof( buf1));
gmode = atoi(buf1);
if( CHAR_getInt( talker, CHAR_CATCHCNT1+gmode-1 )!=0){
for(i=0;i<10;i++) CHAR_setInt( talker, CHAR_KINDCNT1 + i , 0 );
CHAR_setInt( talker,CHAR_CATCHCNT1+gmode-1, 0 ); //清除记录
if(gmode==3||gmode==5){ //家族赛
strcpy(name,CHAR_getChar(talker,CHAR_FMNAME)); //家族名称
sprintf(id,"%d",CHAR_getWorkInt(talker, CHAR_WORKFMINDEXI)); //家族id
}else{ //个人赛
fd = getfdFromCharaIndex(talker);
CONNECT_getCharname( fd, name, sizeof( name ) ); //人物名称
CONNECT_getCdkey( fd, id , sizeof( id ) ); //帐号
}
switch(gmode)
{
case 1:NPC_Util_GetStrFromStrWithDelim( argstr , "Mode1", buf1, sizeof( buf1)); break;
case 2:NPC_Util_GetStrFromStrWithDelim( argstr , "Mode2", buf1, sizeof( buf1)); break;
case 3:NPC_Util_GetStrFromStrWithDelim( argstr , "Mode3", buf1, sizeof( buf1)); break;
case 4:NPC_Util_GetStrFromStrWithDelim( argstr , "Mode4", buf1, sizeof( buf1)); break;
case 5:NPC_Util_GetStrFromStrWithDelim( argstr , "Mode5", buf1, sizeof( buf1)); break;
}
saacproto_ACRaceRecordandSort_send( acfd , talker , buf1 , id , name,9,0,0);
}
if(gmode < 4 ) //限定种类
sprintf( buf1, "目前猎宠记录%d只。", CHAR_getInt( talker,CHAR_CATCHCNT1+gmode-1 ) );
else{
//random一各题目给他
askno = rand() % asktotal;
asklv = asktable[askno].lowlv + rand()%((asktable[askno].highlv+1)-asktable[askno].lowlv);
temp = (askno << 22) & 0x7FC00000;
temp = temp | ((asklv << 14) & 0x7FFFC000);
temp = temp | ((asktable[askno].bbi - 100000) & 0x00003FFF);
CHAR_setInt( talker , CHAR_CHECKIN , temp );
//sprintf(buf1,"checkin:%d askno:%d askname:%s asklv%d askbbi%d",
// CHAR_getInt( talker ,CHAR_CHECKIN),askno,asktable[askno].petname,asklv,asktable[askno].bbi);
//CHAR_talkToCli( talker, -1,buf1, CHAR_COLORYELLOW);
if( asktable[askno].highlv == 0 )
sprintf( buf1,"请抓给我等级%d『以上』的%s好吗。您目前记录%d种", asktable[askno].lowlv , asktable[askno].petname, CHAR_getInt( talker,CHAR_CATCHCNT1+gmode-1 ) );
else
sprintf( buf1,"请抓给我『只能』等级%d的%s好吗。您目前记录%d种", asklv , asktable[askno].petname, CHAR_getInt( talker,CHAR_CATCHCNT1+gmode-1 ) );
}
ITEM_setChar( itemindex, ITEM_EFFECTSTRING, buf1);
if(itemindex != -1) {
LogItem(
CHAR_getChar( talker, CHAR_NAME ), /* 平乓仿 */
CHAR_getChar( talker, CHAR_CDKEY ),
#ifdef _add_item_log_name // WON ADD 在item的log中增加item名称
itemindex,
#else
ITEM_getInt( itemindex, ITEM_ID), /* 失奶 丞 寞 */
#endif
"EventAddItem(任务需求所得到的道具)",
CHAR_getInt( talker, CHAR_FLOOR),
CHAR_getInt( talker, CHAR_X ),
CHAR_getInt( talker, CHAR_Y ),
ITEM_getChar( itemindex, ITEM_UNIQUECODE),
ITEM_getChar( itemindex, ITEM_NAME),
ITEM_getInt( itemindex, ITEM_ID)
);
}
sprintf(token,"拿到%s。", ITEM_getChar( itemindex, ITEM_NAME));
CHAR_talkToCli( talker, -1, token, CHAR_COLORWHITE);
CHAR_sendItemDataOne( talker, ret);
return TRUE;
}
// 检查是否为比赛的宠物和是否登记过
BOOL Raceman_checkpet( int meindex, int talker , int select , char *token )
{
int petindex,checkpetID,petimgnum;
char *petname;
char buf[256];
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
int index,gmode;
unsigned int askno,asklv,askbbi;
if(NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr)) == NULL) { //读参数
print("MsgDisp:GetArgStrErr");
print("NPCName=%s\n", CHAR_getChar( meindex, CHAR_NAME));
return FALSE;
}
NPC_Util_GetStrFromStrWithDelim( argstr , "EndFlag", buf, sizeof( buf));
if( strcmp(buf,"on")==0){
NPC_Util_GetStrFromStrWithDelim( argstr , "ending_msg", buf, sizeof( buf));
sprintf( token , "\n %s",buf);
return FALSE;
}
if(CHAR_getInt( talker,CHAR_CATCHCNT5 ) >= asktotal ){
strcpy( token ,"恭喜你已经达到猎宠大赛终极目标,感谢您的参与并祝您抽中大奖");
return FALSE;
}
petindex = CHAR_getCharPet( talker, select-1);
petname = CHAR_getUseName( petindex);
if( !CHAR_CHECKINDEX(petindex) ) return FALSE;
if (CHAR_getInt(petindex, CHAR_PETFAMILY) == 1){
strcpy(token,"\n 家族守护兽无法登记!");
return FALSE;
}
if (CHAR_getInt( talker , CHAR_RIDEPET) == select-1 ){
strcpy(token,"\n 骑乘中的宠物无法登记!");
return FALSE;
}
NPC_Util_GetStrFromStrWithDelim( argstr , "GameCode", buf, sizeof( buf));
if( CHAR_getInt(petindex,CHAR_CHECKIN) == atoi(buf) ){ //这次比赛已登记过了
strcpy(token,"\n 这只宠物已经在本届比赛登记过了哦!");
return FALSE;
}
NPC_Util_GetStrFromStrWithDelim( argstr , "GameMode", buf, sizeof( buf));
gmode = atoi(buf);
if(gmode==4||gmode==5) //不限种类
{
petimgnum = CHAR_getInt( petindex , CHAR_BASEBASEIMAGENUMBER);
askbbi = CHAR_getInt( talker ,CHAR_CHECKIN) & 0x00003FFF;
asklv = ( CHAR_getInt( talker ,CHAR_CHECKIN ) & 0x003FC000 ) >> 14 ;
askno = ( CHAR_getInt( talker ,CHAR_CHECKIN ) & 0x7FC00000 ) >> 22 ;
//sprintf(buf,"checkin:%d petimgnum:%d askbbi:%d petname:%s askname:%s petlv%d asklv%d",
// CHAR_getInt( talker ,CHAR_CHECKIN),petimgnum,askbbi,petname,asktable[askno].petname,
// CHAR_getInt(petindex , CHAR_LV),asklv);
//CHAR_talkToCli( talker, -1,buf, CHAR_COLORYELLOW);
if( petimgnum != askbbi+100000 ){
strcpy(token,"\n 请确认宠物,这只不是我要的哦!");
return FALSE;
}
if( strcmp(petname,asktable[askno].petname)!=0) {
strcpy(token,"\n 请确认宠物,这只不是我要的哦!");
return FALSE;
}
if( asktable[askno].highlv == 0 ){
if( CHAR_getInt(petindex , CHAR_LV) < asktable[askno].lowlv ){
strcpy(token,"\n 这只宠物等级不够哦!");
return FALSE;
}
}else{
if( CHAR_getInt(petindex , CHAR_LV) != asklv ){
strcpy(token,"\n 请确认宠物等级,等级不对唷哦!");
return FALSE;
}
}
sprintf(token," === 宠物登记 ==="
"\n\n\n 您选择登记的宠物是 %s Lv:%d"
,petname,CHAR_getInt( petindex, CHAR_LV));
/*
NPC_Util_GetStrFromStrWithDelim( argstr , "PetLevel", buf, sizeof( buf));
if (CHAR_getInt(petindex , CHAR_LV) < atoi(buf)){
strcpy(token,"\n 这只宠物等级不够!");
return FALSE;
}
petimgnum = CHAR_getInt( petindex , CHAR_BASEBASEIMAGENUMBER);
for(petNo=0;petNo<640;petNo++){
if( petimgnum == petflgtable[petNo] ) // 应该要一定在table内
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -