📄 npc_raceman.c
字号:
break;
}
if( petNo >= 640 ){
//sprintf(buuf2,"petimgnum:%d pftable:%d petNo:%d", petimgnum , petflgtable[2] , petNo);
//CHAR_talkToCli( talker, -1,buuf2, CHAR_COLORYELLOW);
strcpy(token,"\n 这只宠物怪怪的唷!");
//log
LogPet( CHAR_getChar( talker, CHAR_NAME ),
CHAR_getChar( talker, CHAR_CDKEY ),
CHAR_getChar( petindex, CHAR_NAME),
CHAR_getInt( petindex, CHAR_LV),
"raceman(猎宠大会非法宠记录)",
CHAR_getInt( talker,CHAR_FLOOR),
CHAR_getInt( talker,CHAR_X ),
CHAR_getInt( talker,CHAR_Y ),
CHAR_getChar( petindex, CHAR_UNIQUECODE)
);
return FALSE;// 出问题罗,玩家拿不能拥有的宠物来登记
}
//sprintf(buuf2,"petimgnum:%d pftable:%d petNo:%d", petimgnum , petflgtable[petNo] , petNo);
//CHAR_talkToCli( talker, -1,buuf2, CHAR_COLORYELLOW);
base = 1;
intNo = petNo / 32 ;
shift = petNo % 32 ;
base = base << shift;
//sprintf(buuf2,"intNo:%d shift:%d base:%d data:%d", intNo , shift , base , CHAR_getInt( talker , CHAR_KINDCNT1 + intNo ));
//CHAR_talkToCli( talker, -1,buuf2, CHAR_COLORYELLOW);
if( CHAR_getInt( talker , CHAR_KINDCNT1 + intNo ) & base ){
NPC_Util_GetStrFromStrWithDelim( argstr , "repeat_msg", buf, sizeof( buf));
sprintf(token,"\n %s",buf);
return FALSE;
}else{
sprintf(token," === 宠物登记 ==="
"\n\n\n 您选择登记的宠物是 %s Lv:%d"
,petname,CHAR_getInt( petindex, CHAR_LV)
);
}
*/
}
else
{
if(NPC_Util_GetStrFromStrWithDelim( argstr , "CheckPet", buf, sizeof( buf)) != NULL ){
checkpetID = atoi(buf);
if( !ENEMY_CHECKINDEX( checkpetID )) return FALSE;
// sprintf(buuf2,"petindex:%d checkpetID:%d index:%d",petindex,checkpetID,index);
// CHAR_talkToCli( talker, -1,buuf2, CHAR_COLORYELLOW);
/*保留gm指令dropmypet做法 结果同下段
petarray = ENEMY_getEnemyArrayFromId( checkpetID );
petindex2 = ENEMY_TEST_createPetIndex( petarray );
test5 = CHAR_getInt( petindex2 , CHAR_BASEBASEIMAGENUMBER);
*/
index = ENEMYTEMP_getEnemyTempArray(ENEMY_getEnemyArrayFromId(checkpetID));
if( !ENEMYTEMP_CHECKINDEX( index )) return FALSE;
petimgnum = ENEMYTEMP_getInt(index,E_T_IMGNUMBER); //GET ENEMYTEMP_enemy[index].intdata[E_T_IMGNUMBER];
//sprintf(buuf,"check:%d be_check:%d",petimgnum, CHAR_getInt( petindex , CHAR_BASEBASEIMAGENUMBER)); //petarry:%d petindex2:%d test5:%d",test1,test2,petarray,petindex2,test5);
//CHAR_talkToCli( talker, -1,buuf, CHAR_COLORYELLOW);
if( CHAR_getInt( petindex , CHAR_BASEBASEIMAGENUMBER) == petimgnum ){
NPC_Util_GetStrFromStrWithDelim( argstr , "PetLevel", buf, sizeof( buf));
if (CHAR_getInt(petindex , CHAR_LV) < atoi(buf)){
strcpy(token,"\n 这只宠物等级不够!");
return FALSE;
}
sprintf(token," === 宠物登记 ==="
"\n\n\n 您选择登记的宠物是 %s Lv:%d"
,petname,CHAR_getInt( petindex, CHAR_LV)
);
}else{
strcpy(token,"\n 比赛的题目没有这只宠物哦!");
return FALSE;
}
}
}
return TRUE;
}
int Raceman_getokask( int talker, int random )
{
int base,i,shift;
base = random / 32 ;
shift = random % 32 ;
i = 1 << shift ;
if( CHAR_getInt( talker , CHAR_KINDCNT1 + base ) & i ){ //为真表示解过了
random ++;
if( random >= asktotal ) random = 0;
return Raceman_getokask( talker , random );
}else
return random;
}
BOOL Raceman_petcheckin( int meindex , int talker )
{
int petindex,fd,item,i,itemindex,itemid,gmode;
char *petname;
char id[16],name[64];
char buf[64],buf1[64]; //buuf[128];
char category[12];
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
int base,intNo,shift,petNo,j;
unsigned int askno,asklv,temp;
if(NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr)) == NULL) { //读参数
print("MsgDisp:GetArgStrErr");
print("NPCName=%s\n", CHAR_getChar( meindex, CHAR_NAME));
return FALSE;
}
//保险检查
for( i = 0 ; i < 5 ; i ++ ){
j = CHAR_getInt( talker,CHAR_CATCHCNT1 + i ) ;
if( j++ >= 0xFFFFFF ) {
CHAR_talkToCli( talker, -1, "很抱歉,您已经达到系统上限,无法再登记了", CHAR_COLORYELLOW);
return FALSE;
}
}
petindex = CHAR_getCharPet( talker, CHAR_getWorkInt( talker , CHAR_WORK_PETSELECT ) );
if( !CHAR_CHECKINDEX(petindex) ) return FALSE;
petname = CHAR_getUseName( petindex);
//写入宠物栏位
NPC_Util_GetStrFromStrWithDelim( argstr , "GameCode", buf, sizeof( buf));
CHAR_setInt( petindex, CHAR_CHECKIN , atoi(buf) );
LogPet( CHAR_getChar( talker, CHAR_NAME ),
CHAR_getChar( talker, CHAR_CDKEY ),
CHAR_getChar( petindex, CHAR_NAME),
CHAR_getInt( petindex, CHAR_LV),
"raceman(猎宠大会收宠时记录)",
CHAR_getInt( talker,CHAR_FLOOR),
CHAR_getInt( talker,CHAR_X ),
CHAR_getInt( talker,CHAR_Y ),
CHAR_getChar( petindex, CHAR_UNIQUECODE)
);
//收宠
if( NPC_Util_GetStrFromStrWithDelim( argstr, "DelFlag",buf, sizeof( buf) ) != NULL){
if( strcmp(buf,"on")==0){
CHAR_endCharOneArray( petindex );
CHAR_setCharPet( talker , CHAR_getWorkInt( talker , CHAR_WORK_PETSELECT ) , -1);
snprintf( category, sizeof( category), "K%d", CHAR_getWorkInt( talker , CHAR_WORK_PETSELECT ));
CHAR_sendStatusString( talker , category );
snprintf( category, sizeof( category), "W%d",CHAR_getWorkInt( talker , CHAR_WORK_PETSELECT ));
CHAR_sendStatusString( talker , category );
//log
LogPet( CHAR_getChar( talker, CHAR_NAME ),
CHAR_getChar( talker, CHAR_CDKEY ),
CHAR_getChar( petindex, CHAR_NAME),
CHAR_getInt( petindex, CHAR_LV),
"raceman(猎宠大会收宠时记录)",
CHAR_getInt( talker,CHAR_FLOOR),
CHAR_getInt( talker,CHAR_X ),
CHAR_getInt( talker,CHAR_Y ),
CHAR_getChar( petindex, CHAR_UNIQUECODE)
);
}
}
//分限定种类还是不同种类
NPC_Util_GetStrFromStrWithDelim( argstr , "GameMode", buf, sizeof( buf));
gmode = atoi(buf);
if(gmode==4||gmode==5) //不同种类
{
petNo = ( CHAR_getInt( talker ,CHAR_CHECKIN ) & 0x7FC00000 ) >> 22 ;
//petNo -= 1;
intNo = petNo / 32 ;
shift = petNo % 32 ;
base = 1 << shift;
CHAR_setInt( talker , CHAR_KINDCNT1 + intNo , CHAR_getInt( talker , CHAR_KINDCNT1 + intNo ) | base );
//sprintf(buuf,"chkin data:%d", CHAR_getInt( talker , CHAR_KINDCNT1 + intNo ) );
//CHAR_talkToCli( talker, -1,buuf, CHAR_COLORYELLOW);
//分成个人还是家族赛
if(gmode == 5) //设定为家族赛
{
CHAR_setInt( talker,CHAR_CATCHCNT5,CHAR_getInt( talker,CHAR_CATCHCNT5 ) +1 );
strcpy(name,CHAR_getChar(talker,CHAR_FMNAME)); //家族名称
sprintf(id,"%d",CHAR_getWorkInt(talker, CHAR_WORKFMINDEXI)); //家族id
}
else // 4
{
//玩家抓宠次数加1
fd = getfdFromCharaIndex(talker);
CHAR_setInt( talker,CHAR_CATCHCNT4,CHAR_getInt( talker,CHAR_CATCHCNT4 ) +1 );
CONNECT_getCharname( fd, name, sizeof( name ) ); //人物名称
CONNECT_getCdkey( fd, id , sizeof( id ) ); //帐号
}
}
else // 1 2 3
{
//分成个人还是家族赛
if(gmode == 3) //设定为家族赛
{
//族长次数加1
CHAR_setInt( talker,CHAR_CATCHCNT3,CHAR_getInt( talker,CHAR_CATCHCNT3 ) +1 );
strcpy(name,CHAR_getChar(talker,CHAR_FMNAME)); //家族名称
sprintf(id,"%d",CHAR_getWorkInt(talker, CHAR_WORKFMINDEXI)); //家族id
}
else
{
//玩家抓宠次数加1
fd = getfdFromCharaIndex(talker);
CONNECT_getCharname( fd, name, sizeof( name ) ); //人物名称
CONNECT_getCdkey( fd, id , sizeof( id ) ); //帐号
if(gmode == 1 )
CHAR_setInt( talker,CHAR_CATCHCNT1,CHAR_getInt( talker,CHAR_CATCHCNT1 ) +1 );
else
CHAR_setInt( talker,CHAR_CATCHCNT2,CHAR_getInt( talker,CHAR_CATCHCNT2 ) +1 );
}
}
//判断现在是比什麽
switch(gmode)
{
case 1:NPC_Util_GetStrFromStrWithDelim( argstr , "Mode1", buf, sizeof( buf)); break;
case 2:NPC_Util_GetStrFromStrWithDelim( argstr , "Mode2", buf, sizeof( buf)); break;
case 3:NPC_Util_GetStrFromStrWithDelim( argstr , "Mode3", buf, sizeof( buf)); break;
case 4:NPC_Util_GetStrFromStrWithDelim( argstr , "Mode4", buf, sizeof( buf)); break;
case 5:NPC_Util_GetStrFromStrWithDelim( argstr , "Mode5", buf, sizeof( buf)); break;
}
//ac做一次记录跟排名 (fd,charaindex,id,name,limittime,racetype,catchcnt,ranknum)
//sprintf(buuf,"acfd:%d talker:%d mode:%s id:%s name:%s catchcnt:%d",acfd,talker,buf,id,name,CHAR_getInt( talker,CHAR_CATCHCNT ) );
//CHAR_talkToCli( talker, -1, buuf, CHAR_COLORYELLOW);
if(gmode == 3 || gmode == 5){
saacproto_ACRaceRecordfmdo_send( acfd , talker , CHAR_getInt( talker, CHAR_FMINDEX )
, CHAR_getInt( petindex, CHAR_BASEBASEIMAGENUMBER) , CHAR_getChar( petindex, CHAR_UNIQUECODE ) , CHAR_getChar( petindex, CHAR_NAME) );
//sprintf(buuf,"acfd:%d talker:%d fmid:%d bbi:%d unicode:%s petn:%s",acfd,talker,CHAR_getInt( talker, CHAR_FMINDEX )
// ,CHAR_getInt( petindex, CHAR_BASEBASEIMAGENUMBER),CHAR_getChar( petindex, CHAR_UNIQUECODE ),CHAR_getChar( petindex, CHAR_NAME));
//CHAR_talkToCli( talker, -1, buuf, CHAR_COLORYELLOW);
}
saacproto_ACRaceRecordandSort_send( acfd , talker , buf , id , name ,
0 , CHAR_getInt( talker,CHAR_CATCHCNT1+gmode-1 ) , 0 ) ;
//猎宠证次数加1 或 决定下一个题目
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) ) {
itemid=ITEM_getInt( itemindex ,ITEM_ID );
//print("itemindex:%d itemid:%d item:%d\n",itemindex,itemid,item);
if(itemid==item){ //找到猎宠证
if(gmode < 4)
sprintf( buf1, "目前猎宠记录%d只。", CHAR_getInt( talker,CHAR_CATCHCNT1+gmode-1 ) );
else{
if(CHAR_getInt( talker,CHAR_CATCHCNT5 ) >= asktotal ){
sprintf( buf1,"恭喜你达到猎宠大赛终极目标,祝您抽中大奖");
}else{
askno = Raceman_getokask( talker , rand() % asktotal );
asklv = asktable[askno].lowlv + rand()%((asktable[askno].highlv+1)-asktable[askno].lowlv);
temp = (askno << 22) & 0x7FC00000;
temp = temp | ((asklv << 14) & 0x003FC000);
temp = temp | ((asktable[askno].bbi - 100000) & 0x00003FFF);
CHAR_setInt( talker , CHAR_CHECKIN , temp );
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);
CHAR_sendItemDataOne( talker , i );
break;
}
}
}
}
sprintf( buf,"%sLv:%d登记完成了,加油加油。",petname,CHAR_getInt( petindex, CHAR_LV ));
CHAR_talkToCli( talker, -1, buf , CHAR_COLORWHITE);
return TRUE;
}
//读放在saac的排名资料,而且要是目前比赛的项目
void Raceman_countrank( int meindex, int talker )
{
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
int ranknum = 0,gmode;
char buf[64],buf1[64];
if(NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr)) == NULL) { //读参数
print("MsgDisp:GetArgStrErr");
print("NPCName=%s\n", CHAR_getChar( meindex, CHAR_NAME));
return;
}
if(NPC_Util_GetStrFromStrWithDelim( argstr , "RankNum", buf1, sizeof( buf1)) != NULL ){
ranknum = atoi(buf1);
}
NPC_Util_GetStrFromStrWithDelim( argstr , "GameMode", buf, sizeof( buf));
gmode = atoi(buf);
switch(gmode)
{
case 1:NPC_Util_GetStrFromStrWithDelim( argstr , "Mode1", buf, sizeof( buf)); break;
case 2:NPC_Util_GetStrFromStrWithDelim( argstr , "Mode2", buf, sizeof( buf)); break;
case 3:NPC_Util_GetStrFromStrWithDelim( argstr , "Mode3", buf, sizeof( buf)); break;
case 4:NPC_Util_GetStrFromStrWithDelim( argstr , "Mode4", buf, sizeof( buf)); break;
case 5:NPC_Util_GetStrFromStrWithDelim( argstr , "Mode5", buf, sizeof( buf)); break;
}
saacproto_ACRaceRecordandSort_send( acfd,talker,buf,"","",gmode,0,ranknum );
}
void Raceman_renewrank( int meindex , int talker , int select )
{
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
int ranknum = 0;
char buf[64],buf1[64];
if(NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr)) == NULL) { //读参数
print("MsgDisp:GetArgStrErr");
print("NPCName=%s\n", CHAR_getChar( meindex, CHAR_NAME));
return;
}
if(NPC_Util_GetStrFromStrWithDelim( argstr , "RankNum", buf1, sizeof( buf1)) != NULL ){
ranknum = atoi(buf1);
}
if(NPC_Util_GetStrFromStrWithDelim( argstr , "HasGame", buf, sizeof( buf)) != NULL ){
getStringFromIndexWithDelim( buf , "," , select , buf1 , sizeof(buf1) );
select = atoi(buf1);
switch(select)
{
case 1:NPC_Util_GetStrFromStrWithDelim( argstr , "Mode1", buf, sizeof( buf)); break;
case 2:NPC_Util_GetStrFromStrWithDelim( argstr , "Mode2", buf, sizeof( buf)); break;
case 3:NPC_Util_GetStrFromStrWithDelim( argstr , "Mode3", buf, sizeof( buf)); break;
case 4:NPC_Util_GetStrFromStrWithDelim( argstr , "Mode4", buf, sizeof( buf)); break;
case 5:NPC_Util_GetStrFromStrWithDelim( argstr , "Mode5", buf, sizeof( buf)); break;
default: return;
}
saacproto_ACRaceRecordandSort_send( acfd,talker,buf,"","",select,0,ranknum );
}
}
//检查是否有资格领奖
BOOL Raceman_checkprize( int meindex , int talker ,char *token)
{
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
char buf[256],buf1[64];
int lowlevel;//最低标准 下限
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 , "EndFlag", buf1, sizeof( buf1));
if( strcmp(buf1,"off")==0){ // 比赛没结束 所以不能领
NPC_Util_GetStrFromStrWithDelim( argstr , "notend_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -