📄 npc_autopk.c
字号:
getStringFromIndexWithDelim(line,"|", 1, hstime, sizeof(hstime)); getStringFromIndexWithDelim(line,"|", 2, history[0].winnum, sizeof(history[0].winnum)); getStringFromIndexWithDelim(line,"|", 3, history[0].name, sizeof(history[0].name)); if(strlen(history[0].name)==0) strcpy(history[0].name,"无"); getStringFromIndexWithDelim(line,"|", 4, history[1].winnum, sizeof(history[1].winnum)); getStringFromIndexWithDelim(line,"|", 5, history[1].name, sizeof(history[1].name)); if(strlen(history[1].name)==0) strcpy(history[1].name,"无"); getStringFromIndexWithDelim(line,"|", 6, history[2].winnum, sizeof(history[2].winnum)); getStringFromIndexWithDelim(line,"|", 7, history[2].name, sizeof(history[2].name)); if(strlen(history[2].name)==0) strcpy(history[2].name,"无"); getStringFromIndexWithDelim(line,"|", 8, history[3].winnum, sizeof(history[3].winnum)); getStringFromIndexWithDelim(line,"|", 9, history[3].name, sizeof(history[3].name)); if(strlen(history[3].name)==0) strcpy(history[3].name,"无"); getStringFromIndexWithDelim(line,"|", 10, history[4].winnum, sizeof(history[4].winnum)); getStringFromIndexWithDelim(line,"|", 11, history[4].name, sizeof(history[4].name)); if(strlen(history[4].name)==0) strcpy(history[4].name,"无"); sprintf(token, " ★乱舞格斗PK赛历史★\n" " 第 %s 届乱舞格斗获奖名单\n",hstime); strcat(token, "“名次”“杀人”“玩 家”\n"); sprintf(buf, " 冠军%7d %s\n" " 亚军%7d %s\n" " 季军%7d %s\n" " 优胜%7d %s\n" " 优胜%7d %s\n" ,atoi(history[0].winnum),history[0].name ,atoi(history[1].winnum),history[1].name ,atoi(history[2].winnum),history[2].name ,atoi(history[3].winnum),history[3].name ,atoi(history[4].winnum),history[4].name); strcat(token,buf); if(fgets(line, sizeof(line), fp) == NULL){ fclose(fp); return TRUE; }else{ fclose(fp); return FALSE; }}void AutoPk_SetHistoryStr( void ){ FILE* fp; char token[1024*16]; char line[64]; char time[4]; fp=fopen("./data/autopk/autopkhistory.txt","r"); if(fgets(line, sizeof(line), fp) == NULL) strcpy(time,"1"); else getStringFromIndexWithDelim(line,"|",1,time,sizeof(time)); sprintf(token, "%d|%d|%s|%d|%s|%d|%s|%d|%s|%d|%s|\n",atoi(time)+1 ,ship[0].winnum,ship[0].name ,ship[1].winnum,ship[1].name ,ship[2].winnum,ship[2].name ,ship[3].winnum,ship[3].name ,ship[4].winnum,ship[4].name); int i; strcat(token,line); for(i=1; i<20; i++){ if(fgets(line, sizeof(line), fp) == NULL)break; strcat(token,line); } fclose(fp); fp=fopen("./data/autopk/autopkhistory.txt","w"); fwrite(token, strlen(token), 1, fp); fclose(fp);}void AutoPk_PKNum( char *token ){ int playernum = CHAR_getPlayerMaxNum(); int i,num=0,j=0; char buf[64]; for(i=0;i<playernum;i++){ if(CHAR_CHECKINDEX(i) == FALSE) continue; if(CHAR_getInt(i, CHAR_FLOOR) == 20000 ) { if(++j>5)break; sprintf(buf, "%3d%5d %s\n", CHAR_getInt( i, CHAR_TRANSMIGRATION), CHAR_getInt( i, CHAR_LV), CHAR_getChar( i, CHAR_NAME)); num++; strcat(token,buf); } } sprintf(buf, "当前参加PK比赛人数为:%d人",num); strcat(token,buf);}void AutoPk_PKSystemTalk( char *token1, char *token2 ){ int playernum = CHAR_getPlayerMaxNum(); int i; for(i=0;i<playernum;i++){ if(CHAR_CHECKINDEX(i) == FALSE) continue; if(CHAR_getInt(i, CHAR_FLOOR) == 20000 ) CHAR_talkToCli( i, -1, token1, CHAR_COLORRED ); else CHAR_talkToCli( i, -1, token2, CHAR_COLORRED ); }}void AutoPk_PKSystemInfo(){ autopktime--; if(autopktime>0){ char buf1[64]; char buf2[128]; sprintf(buf1, "距离截止参加PK比赛时间还剩%d分钟!",autopktime); if(awardpetid!=-1 && awarditemid==-1) sprintf(buf2,"距离截止参加PK比赛时间还剩%d分钟,本次比赛奖品为:编号:%d,宠物:%s",autopktime-2,awardpetid,awardpet); else if(awardpetid==-1 && awarditemid!=-1) sprintf(buf2,"距离截止参加PK比赛时间还剩%d分钟,本次比赛奖品为:编号:%d,物品:%s",autopktime-2,awarditemid,awarditem); else if(awardpetid!=-1 && awarditemid!=-1) sprintf(buf2,"距离截止参加PK比赛时间还剩%d分钟,本次比赛奖品为:编号:%d,宠物:%s和编号:%d,物品:%s",autopktime-2,awardpetid,awardpet,awarditemid,awarditem); else sprintf(buf2, "距离正式PK比赛时间还剩%d分钟!",autopktime); AutoPk_PKSystemTalk(buf1, buf2); }else if(autopktime==0){ int i,charaindex,num=0; int playernum=CHAR_getPlayerMaxNum(); for(i=0;i<playernum;i++){ if(CHAR_CHECKINDEX(i) == FALSE) continue; if(CHAR_getInt(i, CHAR_FLOOR) == 20000 ){ num++; charaindex=i; if(num>1)break; } } if(num>1){ AutoPk_PKSystemTalk("比赛正式开始咯!","比赛正式开始咯!"); }else{ if(CHAR_CHECKINDEX(charaindex)){ int fl = 0, x = 0, y = 0; CHAR_getElderPosition(CHAR_getInt(charaindex, CHAR_LASTTALKELDER), &fl, &x, &y); CHAR_warpToSpecificPoint(charaindex, fl, x, y); } AutoPk_PKSystemTalk("由于参加比赛人数过少,所以取消比赛!","由于参加比赛人数过少,所以取消比赛!"); } }}void AutoPk_PKTimeSet( int pktime ){ autopktime=pktime; ship[0].winnum=0; strcpy(ship[0].cdkey, "\0"); strcpy(ship[0].name, "\0"); ship[1].winnum=0; strcpy(ship[1].cdkey, "\0"); strcpy(ship[1].name, "\0"); ship[2].winnum=0; strcpy(ship[2].cdkey, "\0"); strcpy(ship[2].name, "\0"); baward=FALSE;}int AutoPk_PKTimeGet( void ){ return autopktime;}void AutoPk_AwardSet( int petid, char *pet, int itemid, char *item ){ if(petid>0){ awardpetid=petid; strcpy(awardpet,pet); }else{ awardpetid=-1; } if(itemid>0){ awarditemid=itemid; strcpy(awarditem,item); }else{ awarditemid=-1; }}void AutoPk_ChampionShipSet( char *cdkey, char *name, int winnum, int win ){ if(win==0){ char token[64]; if(winnum>ship[0].winnum){ sprintf( token, "%s排名第一,杀人总数%d人!", name, winnum); AutoPk_PKSystemTalk(token,token); if(strstr(ship[0].cdkey,cdkey) && strstr(ship[0].name,name)){ ship[0].winnum=winnum; }else if(strstr(ship[1].cdkey,cdkey) && strstr(ship[1].name,name)){ ship[1].winnum=ship[0].winnum; strcpy(ship[1].cdkey, ship[0].cdkey); strcpy(ship[1].name, ship[0].name); ship[0].winnum=winnum; strcpy(ship[0].cdkey, cdkey); strcpy(ship[0].name, name); }else{ ship[2].winnum=ship[1].winnum; strcpy(ship[2].cdkey, ship[1].cdkey); strcpy(ship[2].name, ship[1].name); ship[1].winnum=ship[0].winnum; strcpy(ship[1].cdkey, ship[0].cdkey); strcpy(ship[1].name, ship[0].name); ship[0].winnum=winnum; strcpy(ship[0].cdkey, cdkey); strcpy(ship[0].name, name); } }else if(winnum>ship[1].winnum){ sprintf( token, "%s排名第二,杀人总数%d人!", name, winnum); AutoPk_PKSystemTalk(token,token); if(strstr(ship[1].cdkey,cdkey) && strstr(ship[1].name,name)){ ship[1].winnum=winnum; }else{ ship[2].winnum=ship[1].winnum; strcpy(ship[2].cdkey, ship[1].cdkey); strcpy(ship[2].name, ship[1].name); ship[1].winnum=winnum; strcpy(ship[1].cdkey, cdkey); strcpy(ship[1].name, name); } }else if(winnum>ship[2].winnum){ sprintf( token, "%s排名第三,杀人总数%d人!", name, winnum); AutoPk_PKSystemTalk(token,token); ship[2].winnum=winnum; strcpy(ship[2].cdkey, cdkey); strcpy(ship[2].name, name); } }else if(win==1){ ship[3].winnum=winnum; strcpy(ship[3].cdkey, cdkey); strcpy(ship[3].name, name); }else if(win==2){ ship[4].winnum=winnum; strcpy(ship[4].cdkey, cdkey); strcpy(ship[4].name, name); }}void AutoPk_GetChampionShip( void ){ char token[64]; if(strlen(ship[0].cdkey)>0){ sprintf( token, "恭喜%s获得本次PK比赛冠军,杀人总数%d人!", ship[0].name, ship[0].winnum); AutoPk_PKSystemTalk(token,token); } if(strlen(ship[1].cdkey)>0){ sprintf( token, "恭喜%s获得本次PK比赛亚军,杀人总数%d人!", ship[1].name, ship[1].winnum); AutoPk_PKSystemTalk(token,token); } if(strlen(ship[2].cdkey)>0){ sprintf( token, "恭喜%s获得本次PK比赛季军,杀人总数%d人!", ship[2].name, ship[2].winnum); AutoPk_PKSystemTalk(token,token); } sprintf( token, "恭喜%s和%s获得本次PK比赛优胜奖!", ship[3].name,ship[4].name); AutoPk_PKSystemTalk(token,token); AutoPk_SetHistoryStr(); baward = TRUE;}BOOL AutoPk_AddItem( int charindex, int index ){ char msgbuf[64]; int ret; int spaceNum=5,i,itemindex=-1; itemindex = CHAR_findEmptyItemBox( charindex ); if( itemindex < 0 ) { CHAR_talkToCli( charindex, -1, "物品栏空间不足!!", CHAR_COLORYELLOW); return FALSE; } itemindex = ITEM_makeItemAndRegist( award[index].awarditemid ); if(itemindex == -1) return FALSE; ret = CHAR_addItemSpecificItemIndex( charindex, itemindex); if( ret < 0 || ret >= CHAR_MAXITEMHAVE ) { ITEM_endExistItemsOne( itemindex ); print ("\n ret error!!"); return FALSE; } sprintf( msgbuf,"拿到%s",ITEM_getChar( itemindex, ITEM_NAME)); CHAR_talkToCli( charindex, -1, msgbuf, CHAR_COLORYELLOW ); CHAR_sendItemDataOne( charindex, ret); return TRUE;}BOOL AutoPk_AddPet( int charindex, int index){ int ret; char msgbuf[64]; int enemynum; int i,j; int petindex, petindex2; for( i = 0 ;i < CHAR_MAXPETHAVE ; i++) { petindex = CHAR_getCharPet( charindex, i); if( petindex == -1 ) break; } if( i == CHAR_MAXPETHAVE ) { snprintf( msgbuf,sizeof( msgbuf), "宠物已满!!"); CHAR_talkToCli( charindex, -1, msgbuf, CHAR_COLORYELLOW); return FALSE; } enemynum = ENEMY_getEnemyNum(); for( i = 0; i < enemynum; i ++ ) { if( ENEMY_getInt( i, ENEMY_ID) == award[index].awardpetid) { break; } } if( i == enemynum ) return FALSE; ret = ENEMY_createPetFromEnemyIndex( charindex, i); for( i = 0; i < CHAR_MAXPETHAVE; i ++ ) { if( CHAR_getCharPet( charindex, i ) == ret ) break; } petindex2 = CHAR_getCharPet(charindex, i); if( !CHAR_CHECKINDEX( petindex2) ) return FALSE; snprintf( msgbuf,sizeof( msgbuf), "拿到%s。", CHAR_getChar(petindex2,CHAR_NAME)); CHAR_talkToCli( charindex, -1, msgbuf, CHAR_COLORYELLOW); CHAR_setInt(petindex2,CHAR_VARIABLEAI,10000); for(j = 0; j < CHAR_MAXPETHAVE; j++){ petindex = CHAR_getCharPet(charindex, j); if( !CHAR_CHECKINDEX( petindex) ) continue; CHAR_complianceParameter( petindex ); snprintf( msgbuf, sizeof( msgbuf ), "K%d", j ); CHAR_sendStatusString( charindex, msgbuf ); snprintf( msgbuf, sizeof( msgbuf ), "W%d", j ); CHAR_sendStatusString( charindex, msgbuf ); } return TRUE;}void NPC_AUTOPKHealerTalked( int meindex ){ if( CHAR_getInt( meindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) return; if( (CHAR_getWorkInt( meindex, CHAR_WORKPARTYMODE) == 0) || (CHAR_getWorkInt( meindex, CHAR_WORKPARTYMODE) == 2) ) { NPC_HealerAllHeal( meindex); CHAR_talkToCli( meindex, -1,"恭喜你获胜,体力已全部回复。",CHAR_COLORBLUE); }else{ int i = 0; int otherindex; for( i=0 ; i < CHAR_PARTYMAX ; i++) { otherindex = CHAR_getWorkInt( meindex, CHAR_WORKPARTYINDEX1 + i); if(otherindex != -1){ NPC_HealerAllHeal( otherindex); CHAR_talkToCli( otherindex, -1,"恭喜你获胜,体力已全部回复。",CHAR_COLORBLUE); } } }}BOOL AutoPk_GetAwardStr( void ){ FILE* fp; int i=0; int j=0; int enemynum = ENEMY_getEnemyNum(); fp = fopen("./data/autopk/autopkaward.txt", "r"); if (fp == NULL) { print("查看比赛奖品文件打开错误\n"); return FALSE; } for(i=0;i<5;i++){ char line[64],buf[32]; if (fgets(line, sizeof(line), fp) == NULL)break; chop(line); getStringFromIndexWithDelim(line,"|", 1, buf, sizeof(buf)); award[i].awardpetid=atoi(buf); if(award[i].awardpetid!=-1){ for( j=0; j <enemynum ; j++ ) if(ENEMY_getInt( j, ENEMY_ID)==award[i].awardpetid) break; if(j!=enemynum){ strcpy(award[i].awardpet, ENEMY_getChar( j, ENEMY_NAME)); }else{ award[i].awardpetid=-1; strcpy(award[i].awardpet, "\0"); } } getStringFromIndexWithDelim(line,"|", 2, buf, sizeof(buf)); award[i].awarditemid=atoi(buf); if(award[i].awarditemid>0 && award[i].awarditemid <= getItemnum() ) strcpy(award[i].awarditem,ITEM_getNameFromNumber(award[i].awarditemid)); else strcpy(award[i].awarditem, "\0"); award[i].draw=AWARDNO; } fclose(fp); return TRUE;}void AutoPk_SetAwardStr( char *token ){ FILE* fp; int i=0; fp = fopen("./data/autopk/autopkaward.txt", "w"); fwrite(token, strlen(token), 1, fp); fclose(fp);}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -