⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 npc_autopk.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "version.h"#include <string.h>#include "char.h"#include "object.h"#include "char_base.h"#include "npcutil.h"#include "npc_autopk.h"#include "lssproto_serv.h"#include "saacproto_cli.h"#include "readmap.h"#include "battle.h"#include "log.h"#include "enemy.h"#include "handletime.h"#include "npc_eventaction.h"#include "npc_healer.h"#include "configfile.h"#ifdef _GMRELOAD	extern struct GMINFO gminfo[GMMAXNUM];#endif#ifdef _AUTO_PK#define AWARDNO			  (1 << 0)#define AWARDPET		  (1 << 1)#define AWARDITEM    	(1 << 2)#define AWARDALL    	(AWARDPET|AWARDITEM)enum {	WINDOW_START=1,	WINDOW_SELECT,	WINDOW_JOINPK,	WINDOW_PKLIST,	WINDOW_PKINFO,	WINDOW_HISTORY,	WINDOW_HISTORY_NEXT,	WINDOW_HISTORY_PREV,	WINDOW_END,};typedef struct tagautopk{	int winnum;	char cdkey[CDKEYLEN];	char name[CHARNAMELEN];}Autopk;typedef struct tagaward{	int awardpetid;	int awarditemid;  char awardpet[32];  char awarditem[32];	int draw;}Award;static int baward = FALSE;Award award[5];Autopk ship[5];int autopklist;static int autopktime=-1;static int awardpetid=-1;static int awarditemid=-1;static char awardpet[32];static char awarditem[32];enum {	NPC_WORK_CURRENTTIME = CHAR_NPCWORKINT1,	NPC_WORK_TIMEFLAG = CHAR_NPCWORKINT9,/*	NPC_WORK_ROUTETOY = CHAR_NPCWORKINT2,	NPC_WORK_ROUTEPOINT = CHAR_NPCWORKINT3,	NPC_WORK_ROUNDTRIP = CHAR_NPCWORKINT4,	NPC_WORK_MODE = CHAR_NPCWORKINT5,	NPC_WORK_CURRENTROUTE = CHAR_NPCWORKINT6, 	NPC_WORK_ROUTEMAX = CHAR_NPCWORKINT7,	NPC_WORK_WAITTIME = CHAR_NPCWORKINT8,	NPC_WORK_CURRENTTIME = CHAR_NPCWORKINT9,	NPC_WORK_SEFLG = CHAR_NPCWORKINT10,*/};enum {	NPC_AUTOPK_START,	NPC_AUTOPK_SELECT,	NPC_AUTOPK_JOINPK,	NPC_AUTOPK_PKLIST,	NPC_AUTOPK_PKAWARD,	NPC_AUTOPK_HISTORY,	NPC_AUTOPK_OK,	NPC_AUTOPK_END,};#define STANDBYTIME 50static void NPC_AutoPk_selectWindow( int meindex, int toindex, int num,int select);BOOL AutoPk_GetHistoryStr( char *token, int page );void AutoPk_PKNum( char *token );BOOL AutoPk_AddItem( int charindex, int index );BOOL AutoPk_AddPet( int charindex, int index );BOOL NPC_AutoPkInit( int meindex ){	char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];			if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){		print("TRANSER_MAN: GetArgStrErr!!");		return FALSE;	}   	CHAR_setInt( meindex, CHAR_WHICHTYPE, CHAR_TRANSERMANS);	//CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NEWNPCMAN_STANDBY);	CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec);	return TRUE;}//CHAR_setWorkInt(talkerindex,CHAR_WORKSHOPRELEVANT,1);void NPC_AutoPkTalked( int meindex, int talkerindex, char *msg, int color ){	if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER )    		return;	if(NPC_Util_isFaceToFace( meindex ,talkerindex , 2) == FALSE) {		if(NPC_Util_isFaceToChara( talkerindex, meindex, 1) == FALSE)			return;	}	CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 0);	NPC_AutoPk_selectWindow( meindex, talkerindex, WINDOW_START, 0);}void NPC_AutoPkWindowTalked( int meindex, int talkerindex, int seqno,								int select, char *data){	if( select == WINDOW_BUTTONTYPE_CANCEL || select == WINDOW_BUTTONTYPE_NO)		return;	switch( seqno)	{	case NPC_AUTOPK_START:		break;	case NPC_AUTOPK_SELECT:		NPC_AutoPk_selectWindow( meindex, talkerindex, WINDOW_SELECT, atoi( data));		break;	case NPC_AUTOPK_JOINPK:		if(autopktime>2){			char buf1[128];			char buf2[255];			int i;			CHAR_DischargePartyNoMsg( talkerindex);//解散团队			CHAR_warpToSpecificPoint( talkerindex, 20000, 27, 15 );#ifdef _GMRELOAD			for (i = 0; i < GMMAXNUM; i++){				if (strcmp( CHAR_getChar( talkerindex, CHAR_CDKEY), gminfo[i].cdkey) == 0){					CHAR_setInt(talkerindex,CHAR_AUTOPK,-1);					break;				}			}			if(i == GMMAXNUM)#endif			{				CHAR_setInt(talkerindex,CHAR_AUTOPK,0);				sprintf(buf1,"玩家%s参加比赛!",CHAR_getChar( talkerindex, CHAR_NAME));				sprintf(buf2,"玩家%s参加比赛,你还没参加吗?本次奖品丰富,你还等什么?快来吧!",CHAR_getChar( talkerindex, CHAR_NAME));				AutoPk_PKSystemTalk(buf1,buf2);			}		}		break;	case NPC_AUTOPK_PKLIST:		NPC_AutoPk_selectWindow( meindex, talkerindex, WINDOW_PKLIST, atoi( data));		break;	case NPC_AUTOPK_PKAWARD:		if(!strcmp(ship[0].cdkey, CHAR_getChar( talkerindex, CHAR_CDKEY))					&& !strcmp(ship[0].name, CHAR_getChar( talkerindex, CHAR_NAME))){			if((award[0].draw&AWARDPET)!=AWARDPET)				if(AutoPk_AddPet( talkerindex, 0 ))					award[0].draw=award[0].draw|AWARDPET;			if((award[0].draw&AWARDITEM)!=AWARDITEM)				if(AutoPk_AddItem( talkerindex, 0 ))					award[0].draw=award[0].draw|AWARDITEM;		}else if(!strcmp(ship[1].cdkey, CHAR_getChar( talkerindex, CHAR_CDKEY))					&& !strcmp(ship[1].name, CHAR_getChar( talkerindex, CHAR_NAME))){			if((award[1].draw&AWARDPET)!=AWARDPET)				if(AutoPk_AddPet( talkerindex, 1 ))					award[1].draw=award[1].draw|AWARDPET;			if((award[1].draw&AWARDITEM)!=AWARDITEM)				if(AutoPk_AddItem( talkerindex, 1 ))					award[1].draw=award[1].draw|AWARDITEM;		}else if(!strcmp(ship[2].cdkey, CHAR_getChar( talkerindex, CHAR_CDKEY))					&& !strcmp(ship[2].name, CHAR_getChar( talkerindex, CHAR_NAME))){			if((award[2].draw&AWARDPET)!=AWARDPET)				if(AutoPk_AddPet( talkerindex, 2 ))					award[2].draw=award[2].draw|AWARDPET;			if((award[2].draw&AWARDITEM)!=AWARDITEM)				if(AutoPk_AddItem( talkerindex, 2 ))					award[2].draw=award[2].draw|AWARDITEM;		}		if(!strcmp(ship[3].cdkey, CHAR_getChar( talkerindex, CHAR_CDKEY))					&& !strcmp(ship[3].name, CHAR_getChar( talkerindex, CHAR_NAME))){			if((award[3].draw&AWARDPET)!=AWARDPET)				if(AutoPk_AddPet( talkerindex, 3 ))					award[3].draw=award[3].draw|AWARDPET;			if((award[3].draw&AWARDITEM)!=AWARDITEM)				if(AutoPk_AddItem( talkerindex, 3 ))					award[3].draw=award[3].draw|AWARDITEM;		}else if(!strcmp(ship[4].cdkey, CHAR_getChar( talkerindex, CHAR_CDKEY))					&& !strcmp(ship[4].name, CHAR_getChar( talkerindex, CHAR_NAME))){			if((award[4].draw&AWARDPET)!=AWARDPET)				if(AutoPk_AddPet( talkerindex, 4 ))					award[4].draw=award[4].draw|AWARDPET;			if((award[4].draw&AWARDITEM)!=AWARDITEM)				if(AutoPk_AddItem( talkerindex, 4 ))					award[4].draw=award[4].draw|AWARDITEM;		}		break;	case NPC_AUTOPK_HISTORY:		if( select == WINDOW_BUTTONTYPE_CANCEL )			return;		if( select == WINDOW_BUTTONTYPE_NEXT )		{				NPC_AutoPk_selectWindow( meindex, talkerindex, WINDOW_HISTORY_NEXT, atoi( data));				return;		}		if( select == WINDOW_BUTTONTYPE_PREV )		{				NPC_AutoPk_selectWindow( meindex, talkerindex, WINDOW_HISTORY_PREV, atoi( data));				return;		}		break;	case NPC_AUTOPK_OK:		break;	case NPC_AUTOPK_END:		NPC_AutoPk_selectWindow( meindex, talkerindex, WINDOW_END, atoi( data));		break;	}}static void NPC_AutoPk_selectWindow( int meindex, int toindex, int num,int select){	char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];	char token[256];	int buttontype = 0, windowtype = 0, windowno = 0;	int fd = getfdFromCharaIndex( toindex);	if(NPC_Util_isFaceToFace( meindex ,toindex , 2) == FALSE) {		if(NPC_Util_isFaceToChara( toindex, meindex, 1) == FALSE)			return;	}	memset( npcarg, 0, sizeof( npcarg));	if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){		print("TRANSER_MAN: GetArgStrErr!!");		return;	}	memset( token, 0, sizeof( token));	switch( num)	{	case WINDOW_START:		sprintf(token, "3\n              ★乱舞格斗PK赛管理员★\n\n"											"有什么需要我为你服务呢?\n"											"                《我要参加比赛》\n"											"                《查看参赛名单》\n"											"                《领取获奖奖品》\n"											"                《查看比赛历史》\n");		CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, WINDOW_START);		windowtype = WINDOW_MESSAGETYPE_SELECT;		buttontype = WINDOW_BUTTONTYPE_CANCEL;		windowno = NPC_AUTOPK_SELECT;		break;	case WINDOW_SELECT:		windowtype = WINDOW_MESSAGETYPE_MESSAGE;		if(select==1){			if(autopktime>2){				sprintf(token, "              ★乱舞格斗PK赛管理员★\n\n"				               "当前离比赛开始时间还剩%d分钟,你是否要参加当前比赛吗???",autopktime);				buttontype = WINDOW_BUTTONTYPE_YESNO;				windowno = NPC_AUTOPK_JOINPK;			}else if(autopktime>0){				sprintf(token, "              ★乱舞格斗PK赛管理员★\n\n"				               "PK比赛将在%d分钟后开始!\n现在已无法进入比赛场地!",autopktime);				buttontype = WINDOW_BUTTONTYPE_CANCEL;			}else{				sprintf(token, "              ★乱舞格斗PK赛管理员★\n\n"				               "目前还未举行PK比赛!\n请关注PK比赛最新消息!");				buttontype = WINDOW_BUTTONTYPE_CANCEL;			}		}else if(select==2){			sprintf(token, "              ★乱舞格斗PK赛参赛名单★\n");			strcat(token, "转生  等级    玩    家\n");			AutoPk_PKNum(token);			buttontype = WINDOW_BUTTONTYPE_CANCEL;			windowno = NPC_AUTOPK_PKLIST;		}else if(select==3){			char buff[64];			sprintf(token, "              ★乱舞格斗PK赛奖品领取★\n");			strcat(token, "“获胜”“奖       品”\n");			if(strlen(award[0].awardpet)>0)				sprintf(buff, " 冠军 宠物:%s\n", award[0].awardpet);			else				sprintf(buff, " 冠军 宠物:无\n");			strcat(token, buff);			if(strlen(award[0].awarditem)>0)				sprintf(buff, " 冠军 物品:%s\n", award[0].awarditem);			else				sprintf(buff, " 冠军 物品:无\n");			strcat(token, buff);			if(strlen(award[1].awardpet)>0)				sprintf(buff, " 亚军 宠物:%s\n", award[1].awardpet);			else				sprintf(buff, " 亚军 宠物:无\n");			strcat(token, buff);			if(strlen(award[1].awarditem)>0)				sprintf(buff, " 亚军 物品:%s\n", award[1].awarditem);			else				sprintf(buff, " 亚军 物品:无\n");			strcat(token, buff);			if(strlen(award[2].awardpet)>0)				sprintf(buff, " 季军 宠物:%s\n", award[2].awardpet);			else				sprintf(buff, " 季军 宠物:无\n");			strcat(token, buff);			if(strlen(award[2].awarditem)>0)				sprintf(buff, " 季军 物品:%s\n", award[2].awarditem);			else				sprintf(buff, " 季军 物品:无\n");			strcat(token, buff);			if(strlen(award[3].awardpet)>0)				sprintf(buff, " 优胜 宠物:%s\n", award[3].awardpet);			else				sprintf(buff, " 优胜 宠物:无\n");			strcat(token, buff);			if(strlen(award[3].awarditem)>0)				sprintf(buff, " 优胜 物品:%s\n", award[3].awarditem);			else				sprintf(buff, " 优胜 物品:无\n");			strcat(token, buff);			if(strlen(award[4].awardpet)>0)				sprintf(buff, " 优胜 宠物:%s\n", award[4].awardpet);			else				sprintf(buff, " 优胜 宠物:无\n");			strcat(token, buff);			if(strlen(award[4].awarditem)>0)				sprintf(buff, " 优胜 物品:%s\n", award[4].awarditem);			else				sprintf(buff, " 优胜 物品:无\n");			strcat(token, buff);			if(baward && (!strcmp(ship[0].cdkey, CHAR_getChar( toindex, CHAR_CDKEY))								&& !strcmp(ship[0].name, CHAR_getChar( toindex, CHAR_NAME))								&& award[0].draw != AWARDALL)								|| (!strcmp(ship[1].cdkey, CHAR_getChar( toindex, CHAR_CDKEY))								&& !strcmp(ship[1].name, CHAR_getChar( toindex, CHAR_NAME))								&& award[1].draw != AWARDALL)								|| (!strcmp(ship[2].cdkey, CHAR_getChar( toindex, CHAR_CDKEY))								&& !strcmp(ship[2].name, CHAR_getChar( toindex, CHAR_NAME))								&& award[2].draw != AWARDALL)								|| (!strcmp(ship[3].cdkey, CHAR_getChar( toindex, CHAR_CDKEY))								&& !strcmp(ship[3].name, CHAR_getChar( toindex, CHAR_NAME))								&& award[3].draw != AWARDALL)								|| (!strcmp(ship[4].cdkey, CHAR_getChar( toindex, CHAR_CDKEY))								&& !strcmp(ship[4].name, CHAR_getChar( toindex, CHAR_NAME))								&& award[4].draw != AWARDALL))					buttontype = WINDOW_BUTTONTYPE_YESNO;			else				buttontype = WINDOW_BUTTONTYPE_CANCEL;			windowno = NPC_AUTOPK_PKAWARD;		}else if(select==4){			CHAR_setInt( toindex, CHAR_LISTPAGE, 1);			if(AutoPk_GetHistoryStr(token,CHAR_getInt( toindex, CHAR_LISTPAGE)))				buttontype = WINDOW_BUTTONTYPE_CANCEL;			else				buttontype = WINDOW_BUTTONTYPE_CANCEL|WINDOW_BUTTONTYPE_NEXT;				windowno = NPC_AUTOPK_HISTORY;			}		break;	case WINDOW_HISTORY_NEXT:		windowtype = WINDOW_MESSAGETYPE_MESSAGE;		CHAR_setInt( toindex, CHAR_LISTPAGE,CHAR_getInt( toindex, CHAR_LISTPAGE)+1);		if(AutoPk_GetHistoryStr(token,CHAR_getInt( toindex, CHAR_LISTPAGE)))			buttontype = WINDOW_BUTTONTYPE_CANCEL|WINDOW_BUTTONTYPE_PREV;		else			buttontype = WINDOW_BUTTONTYPE_CANCEL|WINDOW_BUTTONTYPE_PREV|WINDOW_BUTTONTYPE_NEXT;		windowno = NPC_AUTOPK_HISTORY;		break;	case WINDOW_HISTORY_PREV:		windowtype = WINDOW_MESSAGETYPE_MESSAGE;		CHAR_setInt( toindex, CHAR_LISTPAGE,CHAR_getInt( toindex, CHAR_LISTPAGE)-1);		if(CHAR_getInt( toindex, CHAR_LISTPAGE)<1)CHAR_setInt( toindex, CHAR_LISTPAGE,1);		if(AutoPk_GetHistoryStr(token,CHAR_getInt( toindex, CHAR_LISTPAGE)) || CHAR_getInt( toindex, CHAR_LISTPAGE)==1)			buttontype = WINDOW_BUTTONTYPE_CANCEL|WINDOW_BUTTONTYPE_NEXT;		else			buttontype = WINDOW_BUTTONTYPE_CANCEL|WINDOW_BUTTONTYPE_PREV|WINDOW_BUTTONTYPE_NEXT;		windowno = NPC_AUTOPK_HISTORY;		break;	case WINDOW_END:		return;		break;	}	lssproto_WN_send( fd, windowtype, buttontype, windowno,		CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token);}void NPC_AutoPkLoop( void ){}BOOL AutoPk_GetHistoryStr( char *token, int page ){	FILE* fp;	fp = fopen("./data/autopk/autopkhistory.txt", "r");	if (fp == NULL)	{		print("查看比赛历史文件打开错误\n");		return FALSE;	}	typedef struct taghistory	{		char winnum[5];		char name[CHARNAMELEN];	}History;	History history[5];		char hstime[5],line[255],buf[255];	int i;	for(i=0;i<page;i++){		if(fgets(line, sizeof(line), fp) == NULL)break;		chop(line);	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -