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

📄 npc_petracemaster.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 2 页
字号:
				NPC_PetRaceMaster_selectWindow(meindex, talkerindex, 1, -1);			else if (datanum == 2)				NPC_PetRaceMaster_selectWindow(meindex, talkerindex, 2, -1);		break;		case CHAR_WINDOWTYPE_PETRACEMASTER_RULE:			if (datanum == 3)				NPC_PetRaceMaster_selectWindow(meindex, talkerindex, 1, -1);		case CHAR_WINDOWTYPE_PETRACEMASTER_PET:		case CHAR_WINDOWTYPE_PETRACEMASTER_LEAVE:		default:		break;	}}void NPC_PetRaceMasterLoop( int meindex){	int floor = CHAR_getInt(meindex, CHAR_FLOOR);	time_t t1;	time(&t1);	switch(CHAR_getWorkInt(meindex, NPC_WORK_STATE))	{		case NPC_State_Init:					// 寻找宠物index				NPC_findRacePetIndex(meindex, floor);			break;		case NPC_State_WaitDropStake:			{				char tmpbuf[256];				int statechangetime = CHAR_getWorkInt(meindex, NPC_WORK_STATECHANGE);				if (t1 < statechangetime)				{					if (statechangetime - t1 <= 5)					{						CHAR_setInt(meindex, CHAR_LOOPINTERVAL, PETRACEMASTER_WAITDROPIV_LOOPTIME);						snprintf(tmpbuf, sizeof(tmpbuf), "还有%2d秒就要开跑了,请大家踊跃下注!",							(int)(statechangetime - t1) % 60);					}					else if (statechangetime - t1 <= 10)					{						CHAR_setInt(meindex, CHAR_LOOPINTERVAL, PETRACEMASTER_WAITDROPIII_LOOPTIME);						snprintf(tmpbuf, sizeof(tmpbuf), "还有%2d秒就要开跑了,请大家踊跃下注!",							(int)(statechangetime - t1) % 60);					}					else if (statechangetime - t1 <= 30)					{						CHAR_setInt(meindex, CHAR_LOOPINTERVAL, PETRACEMASTER_WAITDROPII_LOOPTIME);						snprintf(tmpbuf, sizeof(tmpbuf), "还有%2d秒就要开跑了,请大家踊跃下注!",							(int)(statechangetime - t1) % 60);					}					else						snprintf(tmpbuf, sizeof(tmpbuf), "还有%2d分钟%2d秒就要开跑了,请大家踊跃下注!",							(int)(statechangetime - t1) / 60, (int)(statechangetime - t1) % 60);				}				if (t1 >= statechangetime)				{#ifdef _DROPSTAKENEW#else					float payrate1 = 0, payrate2 = 0, payrate3 = 0;					int pet1gold = 0, pet2gold = 0, pet3gold = 0, totalgold = 0;					int petindex1 = CHAR_getWorkInt(meindex, NPC_WORK_PET1);					int petindex2 = CHAR_getWorkInt(meindex, NPC_WORK_PET2);					int petindex3 = CHAR_getWorkInt(meindex, NPC_WORK_PET3);					int randpet	= CHAR_getWorkInt(meindex, NPC_WORK_PETGROUP);					float droprate1 = 0, droprate2 = 0, droprate3 = 0, totaldroprate, Npayrate = PETRACESTDPAYRATE;#endif					int i = 0;					CHAR_setWorkInt(meindex, NPC_WORK_STATE, NPC_State_PetRacing);					// 设定地面不可下注					SetCasinoMap(meindex, 0, FALSE);#ifdef _DROPSTAKENEW					snprintf(tmpbuf, sizeof(tmpbuf), "请大家停止下注,宠物赛跑开始罗!");#else					// 告知大家赔率(取得宠物下注金额计算赔率)					GetCasinoMapGold(meindex, PET_RACE1, &pet1gold);					GetCasinoMapGold(meindex, PET_RACE2, &pet2gold);					GetCasinoMapGold(meindex, PET_RACE3, &pet3gold);					totalgold = pet1gold + pet2gold + pet3gold;					if (totalgold <= 0)					{						payrate1 = 2; payrate2 = 2; payrate3 = 2;					}					else					{						if (pet1gold <= PETRACESTDGOLD)							pet1gold = PETRACESTDGOLD;						if (pet2gold <= PETRACESTDGOLD)							pet2gold = PETRACESTDGOLD;						if (pet3gold <= PETRACESTDGOLD)							pet3gold = PETRACESTDGOLD;						totalgold = pet1gold + pet2gold + pet3gold;						droprate1 = totalgold / pet1gold;						droprate2 = totalgold / pet2gold;						droprate3 = totalgold / pet3gold;						totaldroprate = droprate1 + droprate2 + droprate3;						if (totaldroprate / droprate1 > PETRACESTDPAYRATE)						{							payrate1 = 1; Npayrate -= 1;						}						if (totaldroprate / droprate2 > PETRACESTDPAYRATE)						{							payrate2 = 1; Npayrate -= 1;						}						if (totaldroprate / droprate3 > PETRACESTDPAYRATE)						{							payrate3 = 1; Npayrate -= 1;						}						if (payrate1 != 1)							payrate1 = droprate1 / totaldroprate * Npayrate;						if (payrate2 != 1)							payrate2 = droprate2 / totaldroprate * Npayrate;						if (payrate3 != 1)							payrate3 = droprate3 / totaldroprate * Npayrate;					}					petracegra[randpet].payrate1 = payrate1;					petracegra[randpet].payrate3 = payrate2;					petracegra[randpet].payrate2 = payrate3;					SetCasinoPayRate(meindex, PET_RACE1, payrate1);					SetCasinoPayRate(meindex, PET_RACE2, payrate2);					SetCasinoPayRate(meindex, PET_RACE3, payrate3);					snprintf(tmpbuf, sizeof(tmpbuf), "请大家停止下注,宠物赛跑开始罗!%s的赔率为%5.2f;%s的赔率为%5.2f;%s的赔率为%5.2f",						CHAR_getChar(petindex1, CHAR_NAME), payrate1,						CHAR_getChar(petindex2, CHAR_NAME), payrate2,						CHAR_getChar(petindex3, CHAR_NAME), payrate3);#endif					CHAR_setInt(meindex, CHAR_LOOPINTERVAL, PETRACEMASTER_PETRACING_LOOPTIME);					// 设定宠物状态					for (i = 0; i < PETRACEPETNUM; i++)					{						CHAR_setWorkInt(CHAR_getWorkInt(meindex, NPC_WORK_PET1 + i), NPC_WORK_STATE, NPC_State_Run);						CHAR_setInt(CHAR_getWorkInt(meindex, NPC_WORK_PET1 + i), CHAR_LOOPINTERVAL, 1000);					}				}				CHAR_talkToFloor(floor, meindex, tmpbuf, CHAR_COLORWHITE);			}			break;		case NPC_State_PetRacing:			if (CHAR_getWorkInt(meindex, NPC_WORK_PETGOAL) == PETRACEPETNUM)			{				char tmpbuf[256];				int winpetindex = CHAR_getWorkInt(meindex, NPC_WORK_WINPET);				int petgroup = CHAR_getWorkInt(meindex, NPC_WORK_PETGROUP);				snprintf(tmpbuf, sizeof(tmpbuf), "竞赛结束,胜利的宠物是:%s\n", 					CHAR_getChar(winpetindex, CHAR_NAME));				CHAR_talkToFloor(floor, meindex, tmpbuf, CHAR_COLORYELLOW);				// 设定输赢,以计算赔率				if (CHAR_getWorkInt(meindex, NPC_WORK_PET1) == winpetindex)					petracegra[petgroup].pet1win = petracegra[petgroup].pet1win + 1;				else if (CHAR_getWorkInt(meindex, NPC_WORK_PET2) == winpetindex)					petracegra[petgroup].pet2win = petracegra[petgroup].pet2win + 1;				else if (CHAR_getWorkInt(meindex, NPC_WORK_PET3) == winpetindex)					petracegra[petgroup].pet3win = petracegra[petgroup].pet3win + 1;				CHAR_setWorkInt(meindex, NPC_WORK_STATE, NPC_State_ShowWinPet);				CHAR_setInt(meindex, CHAR_LOOPINTERVAL, PETRACEMASTER_SHOWWINPET_LOOPTIME);				CHAR_setWorkInt(meindex, NPC_WORK_STATECHANGE, t1 + PETRACESHOWWINPET);					// 发奖金				NPC_givePriceToPlayer(meindex, floor, winpetindex);			}			break;		case NPC_State_ShowWinPet:			{				int statechangetime = CHAR_getWorkInt(meindex, NPC_WORK_STATECHANGE);				if (t1 >= statechangetime)				{					int randpet = RAND(0, arraysizeof(petracegra) - 1);					int petindex1 = CHAR_getWorkInt(meindex, NPC_WORK_PET1);					int petindex2 = CHAR_getWorkInt(meindex, NPC_WORK_PET2);					int petindex3 = CHAR_getWorkInt(meindex, NPC_WORK_PET3);					char tmpbuf[256];					CHAR_setWorkInt(meindex, NPC_WORK_PETGROUP, randpet);					CHAR_setWorkInt(meindex, NPC_WORK_STATE, NPC_State_WaitDropStake);					CHAR_setWorkInt(meindex, NPC_WORK_WINPET, 0);					CHAR_setWorkInt(meindex, NPC_WORK_PETGOAL, 0);					CHAR_setWorkInt(meindex, NPC_WORK_STATECHANGE, t1 + PETRACEDROPSTAKETIME);					CHAR_setInt(meindex, CHAR_LOOPINTERVAL, PETRACEMASTER_WAITDROPI_LOOPTIME);					// 设定地面可下注					SetCasinoMap(meindex, 0, TRUE);					// 设定宠物					CHAR_setWorkInt(petindex1, NPC_WORK_STATE, NPC_State_Wait);					CHAR_setInt(petindex1, CHAR_LOOPINTERVAL, 1000);					CHAR_setInt(petindex1, CHAR_BASEIMAGENUMBER, petracegra[randpet].pet1gra);					CHAR_setChar(petindex1, CHAR_NAME, petracegra[randpet].pet1name);					CHAR_setWorkInt(petindex2, NPC_WORK_STATE, NPC_State_Wait);					CHAR_setInt(petindex2, CHAR_LOOPINTERVAL, 1000);					CHAR_setInt(petindex2, CHAR_BASEIMAGENUMBER, petracegra[randpet].pet2gra);					CHAR_setChar(petindex2, CHAR_NAME, petracegra[randpet].pet2name);					CHAR_setWorkInt(petindex3, NPC_WORK_STATE, NPC_State_Wait);					CHAR_setInt(petindex3, CHAR_LOOPINTERVAL, 1000);					CHAR_setInt(petindex3, CHAR_BASEIMAGENUMBER, petracegra[randpet].pet3gra);					CHAR_setChar(petindex3, CHAR_NAME, petracegra[randpet].pet3name);					// 设定宠物状况#ifdef _DROPSTAKENEW#else					petracegra[randpet].payrate1 = 0;					petracegra[randpet].payrate3 = 0;					petracegra[randpet].payrate2 = 0;#endif					{						int state1 = RAND(0, 3);						int state2 = RAND(0, 3);						int state3 = RAND(0, 3);						if (state1 == 0)							sprintf(petracegra[randpet].state1, "良好");						else if (state1 == 1)							sprintf(petracegra[randpet].state1, "普通");						else if (state1 == 2)							sprintf(petracegra[randpet].state1, "不佳");						else if (state1 == 3)							sprintf(petracegra[randpet].state1, "未知");						if (state2 == 0)							sprintf(petracegra[randpet].state2, "良好");						else if (state2 == 1)							sprintf(petracegra[randpet].state2, "普通");						else if (state2 == 2)							sprintf(petracegra[randpet].state2, "不佳");						else if (state2 == 3)							sprintf(petracegra[randpet].state2, "未知");						if (state3 == 0)							sprintf(petracegra[randpet].state3, "良好");						else if (state3 == 1)							sprintf(petracegra[randpet].state3, "普通");						else if (state3 == 2)							sprintf(petracegra[randpet].state3, "不佳");						else if (state3 == 3)							sprintf(petracegra[randpet].state3, "未知");					}					snprintf(tmpbuf, sizeof(tmpbuf), "宠物竞速准备中,请大家踊跃下注!");					CHAR_talkToFloor(floor, meindex, tmpbuf, CHAR_COLORYELLOW);				}			}			break;		default:			break;	}}void NPC_findRacePetIndex(int meindex, int floor){	int i = 0, j = 0;	time_t t1;	time(&t1);	if (CHAR_getWorkInt(meindex, NPC_WORK_FINDPETFLAG) == 0)	{		for (i = 0; i < CHAR_getCharNum(); i++)		{			if (CHAR_getInt(i, CHAR_FLOOR) == floor)			{				if (CHAR_getInt(i, CHAR_WHICHTYPE) == CHAR_PETRACEPET)				{					for (j = 0; j < PETRACEPETNUM; j++)					{						if (CHAR_getWorkInt(meindex, NPC_WORK_PET1 + j) == 0)						{							CHAR_setWorkInt(meindex, NPC_WORK_PET1 + j, i);							CHAR_setWorkInt(i, CHAR_NPCWORKINT2, meindex);							break;						}					}				}			}		}		if (CHAR_getWorkInt(meindex, NPC_WORK_PET1) > 0			&& CHAR_getWorkInt(meindex, NPC_WORK_PET2) > 0			&& CHAR_getWorkInt(meindex, NPC_WORK_PET3) > 0)		{			CHAR_setWorkInt(meindex, NPC_WORK_FINDPETFLAG, 1);			CHAR_setWorkInt(meindex, NPC_WORK_STATE, NPC_State_WaitDropStake);			CHAR_setInt(meindex, CHAR_LOOPINTERVAL, PETRACEMASTER_WAITDROPI_LOOPTIME);			CHAR_setWorkInt(meindex, NPC_WORK_STATECHANGE, t1 + PETRACEDROPSTAKETIME);		}		else CHAR_setWorkInt(meindex, NPC_WORK_FINDPETFLAG, 0);	}}void NPC_givePriceToPlayer(int meindex, int floor, int winpetindex){	int wincasinotype = 0;	if (CHAR_getWorkInt(meindex, NPC_WORK_PET1) == winpetindex)		wincasinotype = PET_RACE1;	else if (CHAR_getWorkInt(meindex, NPC_WORK_PET2) == winpetindex)		wincasinotype = PET_RACE2;	else if (CHAR_getWorkInt(meindex, NPC_WORK_PET3) == winpetindex)		wincasinotype = PET_RACE3;	if (wincasinotype == 0) return;	else 		CasinoPay(meindex, wincasinotype);}#endif

⌨️ 快捷键说明

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