📄 npc_petracemaster.c
字号:
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 + -