📄 npc_freepetskillshop.c
字号:
for( i=0; i<arraysizeof( Code_skill); i++) { if( Code_skill[i].PetId == petID ) { break; } } //找不到这只宠物 if( i == arraysizeof( Code_skill) ) { { char buff1[256]; sprintf( buff1, "%s不能学特殊技能!!", CHAR_getChar( petindex, CHAR_NAME)); CHAR_talkToCli( toindex, -1, buff1, CHAR_COLORYELLOW); } return FALSE; } if( strstr( Code_skill[i].Code, SCode ) != NULL ) { if( NPC_SkillShopPetCheck( toindex, petindex, skillID) == FALSE ) { char buff1[256]; sprintf( buff1, "%s现在还不能学%s!", CHAR_getChar( petindex, CHAR_NAME), PETSKILL_getChar( skillindex, PETSKILL_NAME) ); CHAR_talkToCli( toindex, -1, buff1, CHAR_COLORYELLOW); return FALSE; } return TRUE; }else { char buff1[256]; sprintf( buff1, "%s不能学%s!!", CHAR_getChar( petindex, CHAR_NAME), PETSKILL_getChar( skillindex, PETSKILL_NAME) ); CHAR_talkToCli( toindex, -1, buff1, CHAR_COLORYELLOW); } return FALSE;}BOOL NPC_FreePetSkillMakeStr(int meindex,int toindex,int select){ char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; char msg[256]; double rate=1.0; int i=0; char token[NPC_UTIL_GETARGSTR_LINEMAX]; int fd = getfdFromCharaIndex( toindex); if(select==0){ sprintf(token,"0|0"); lssproto_WN_send( fd, WINDOW_MESSAGETYPE_PETSKILLSHOP, WINDOW_BUTTONTYPE_NONE, CHAR_WINDOWTYPE_WINDOWPETSKILLSHOP, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token); } if(NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr))==NULL){ print("GetArgStrErr"); return FALSE; } if( NPC_Util_GetStrFromStrWithDelim( argstr, "main_msg", msg, sizeof( msg)) == NULL){ print("\n CAN'T FIND main_msg !!"); return FALSE; } sprintf(token,"1|%s|%s", CHAR_getChar(meindex,CHAR_NAME), msg); if( NPC_Util_GetStrFromStrWithDelim( argstr, "skill_rate", msg, sizeof( msg)) != NULL){ rate=atof(msg); } if( NPC_Util_GetStrFromStrWithDelim( argstr, "pet_skill", msg, sizeof( msg)) != NULL) { int skillarray; int skillID; int cost; char token2[265]; char buf[64]; i=1; while( getStringFromIndexWithDelim(msg,",",i,buf,sizeof(buf)) !=FALSE ) { i++; skillID=atoi(buf); skillarray = PETSKILL_getPetskillArray( skillID); if( PETSKILL_CHECKINDEX( skillarray) == FALSE ) continue; if( PETSKILL_getInt( skillarray, PETSKILL_ILLEGAL) == 1) continue; cost = PETSKILL_getInt(skillarray,PETSKILL_COST); cost = (int)cost*rate; sprintf(token2,"|%s|%d|%s", PETSKILL_getChar(skillarray, PETSKILL_NAME), cost, PETSKILL_getChar(skillarray, PETSKILL_COMMENT)); strcat(token,token2); } } CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, 3); lssproto_WN_send( fd, WINDOW_MESSAGETYPE_PETSKILLSHOP, WINDOW_BUTTONTYPE_NONE, SELECTSKILL_TEACH, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token); return TRUE;}BOOL NPC_SkillShopItemCheck(int meindex,int talker,int itemNo, int cou){ int i; int itemindex=-1; int num=0; for( i=CHAR_STARTITEMARRAY;i<CHAR_MAXITEMHAVE;i++ ){ itemindex = CHAR_getItemIndex( talker , i ); if( ITEM_CHECKINDEX( itemindex) ) { if( itemNo == ITEM_getInt(itemindex ,ITEM_ID ) ) { num++; } } if( num >= cou ) return TRUE; } return FALSE;}BOOL NPC_SkillShopDelItems(int meindex,int talker, char *buf){ char buf1[256]; char item[256], cout[256]; int i=1; BOOL Evflg=TRUE; while( getStringFromIndexWithDelim( buf, ",", i,buf1, sizeof( buf1)) != FALSE ) { i++; if( strstr( buf1, "*") != NULL ) { getStringFromIndexWithDelim( buf1, "*", 1, item, sizeof( item)); getStringFromIndexWithDelim( buf1, "*", 2, cout, sizeof( cout)); }else { strcpy( item, buf1); strcpy( cout, "1"); } if( NPC_SkillShopItemCheck( meindex, talker, atoi( item), atoi( cout)) == FALSE ) { Evflg=FALSE; break; } if( Evflg == FALSE ) break; } if( Evflg == FALSE ) return FALSE; if( NPC_ActionDelItem( talker, buf) == TRUE ) { return TRUE; } return FALSE;}BOOL NPC_SkillShopPetCheck( int toindex, int petindex, int skillID ){ char Free[256]; int i; char data[256], msg[256]; int skillindex = PETSKILL_getPetskillArray( skillID ); memset( Free, 0, sizeof( Free)); sprintf( Free, "%s", PETSKILL_getChar( skillindex, PETSKILL_FREE)); if( NPC_Util_GetStrFromStrWithDelim( Free, "FREE", data, sizeof( data)) != NULL ) { BOOL EvFlg = TRUE; i=1; while( getStringFromIndexWithDelim( data, "|", i, msg, sizeof( msg)) != FALSE ) { i++; if( strstr( msg, "LV") != NULL ) { char LvStr[256]; int LV=0; if( strstr( msg, ">" ) != NULL ) { if( getStringFromIndexWithDelim( msg, ">", 2, LvStr, sizeof( LvStr)) != FALSE ) { LV = atoi( LvStr); if( CHAR_getInt( petindex, CHAR_LV) <= LV ) EvFlg = FALSE; } }else if( strstr( msg, "<")) { if( getStringFromIndexWithDelim( msg, "<", 2, LvStr, sizeof( LvStr)) != FALSE ) { LV = atoi( LvStr); if( CHAR_getInt( petindex, CHAR_LV) >= LV ) EvFlg = FALSE; } } }else if( strstr( msg, "SK") != NULL ) { int j=0, PskId=-1, ID; char strSK[256]; int petskillindex; getStringFromIndexWithDelim( msg, "=", 2, strSK, sizeof( strSK) ); ID = atoi( strSK); for( j=0; j < CHAR_MAXPETSKILLHAVE; j++) { PskId = CHAR_getPetSkill( petindex, j); petskillindex = PETSKILL_getPetskillArray( PskId ); if( !PETSKILL_CHECKINDEX( petskillindex)) continue; if( ID == PskId ) { if( strstr( msg, "!=") !=NULL ) EvFlg = FALSE; break; } } if( j == CHAR_MAXPETSKILLHAVE ) { EvFlg = FALSE; break; } } if( EvFlg == FALSE ) break; } if( EvFlg == FALSE ) { return FALSE; }else { return TRUE; } } return TRUE;}BOOL NPC_SkillShopWarp( int meindex, int talkindex){ char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE]; char data[1024], buf1[256], buf2[256]; int i=1, j=1; BOOL EvFlg=FALSE; struct { int FLOOR; int X; int Y; }Points[MAXNPCPOINT]; if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){ print("GetArgStrErr"); return FALSE; } for( i=0;i<MAXNPCPOINT;i++) { Points[i].FLOOR = -1; Points[i].X = -1; Points[i].Y = -1; } //WARP //NPC_POINT if( NPC_Util_GetStrFromStrWithDelim( npcarg, "NPC_POINT", data, sizeof( data)) != NULL ) { int where=0; i=1; j=0; while( getStringFromIndexWithDelim( data, ";", i, buf1, sizeof( buf1)) != FALSE ) { i++; getStringFromIndexWithDelim( buf1, ",", 1, buf2, sizeof( buf2)); Points[j].FLOOR = atoi( buf2); getStringFromIndexWithDelim( buf1, ",", 2, buf2, sizeof( buf2)); Points[j].X = atoi( buf2); getStringFromIndexWithDelim( buf1, ",", 3, buf2, sizeof( buf2)); Points[j].Y = atoi( buf2); j++; if( j >= MAXNPCPOINT ) break; } where = RAND( 0, i-1); CHAR_warpToSpecificPoint( meindex, Points[where].FLOOR, Points[where].X, Points[where].Y); EvFlg = TRUE; } if( NPC_Util_GetStrFromStrWithDelim( npcarg, "WARP", data, sizeof( data)) != NULL ) { int P_Floor,P_X,P_Y; getStringFromIndexWithDelim( data, ",", 1, buf2, sizeof( buf2)); P_Floor = atoi( buf2); getStringFromIndexWithDelim( data, ",", 2, buf2, sizeof( buf2)); P_X = atoi( buf2); getStringFromIndexWithDelim( data, ",", 3, buf2, sizeof( buf2)); P_Y = atoi( buf2); CHAR_warpToSpecificPoint( talkindex, P_Floor, P_X, P_Y); EvFlg = TRUE; } return EvFlg;}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -