?? 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 + -