📄 npcutil.c
字号:
} if( cret == NULL ) print("File:%s\n", NPC_Util_CheckAssignArgFile( index, filename)); return( cret);}int NPC_Util_GetNumFromStrWithDelim( char *srcstr, char* in){ BOOL rc; int i; char outstr[32]; int out = -1; for( i = 1; ; i++ ) { rc = getStringFromIndexWithDelim( srcstr, "|", i, outstr, sizeof(outstr)); if( rc == FALSE) break; if( strstr( outstr, in) != NULL ) { out = textToInt( outstr); break; } } return out;}char *NPC_Util_GetStrFromStrWithDelim( char *srcstr, char *srhstr, char *buf, int buflen){ BOOL rc; char *cret = NULL; int i; char outstr[1024]; char outstr2[1024]; memset( outstr, 0, sizeof( outstr)); memset( outstr2, 0, sizeof( outstr2)); buf[0] = '\0'; for( i = 1; ; i++ ) { rc = getStringFromIndexWithDelim( srcstr, "|", i, outstr, sizeof(outstr)); if( rc == FALSE) break; if( strstr( outstr, srhstr) != NULL) { rc = getStringFromIndexWithDelim( outstr, ":", 2, outstr2, sizeof(outstr2)); if( rc != FALSE ) { strcpysafe( buf, buflen, outstr2 ); cret = buf; break; } } } return cret;}inline double NPC_Util_sellRate( int seller ){ return (CHAR_getInt( seller, CHAR_MERCHANTLEVEL)&0x0000ffff)*0.01;}inline double NPC_Util_buyRate( int buyer ){ return (CHAR_getInt( buyer, CHAR_MERCHANTLEVEL )>>16)*0.01;}BOOL NPC_Util_IsVisiblePlayer( int meindex){ int chr_fl,chr_x,chr_y, i, j; BOOL found = FALSE; chr_fl = CHAR_getInt( meindex, CHAR_FLOOR); chr_x = CHAR_getInt( meindex, CHAR_X); chr_y = CHAR_getInt( meindex, CHAR_Y); for( i = chr_x-CHAR_DEFAULTSEESIZ/2 ; i <= chr_x+CHAR_DEFAULTSEESIZ/2 && found == FALSE; i++ ){ for( j = chr_y-CHAR_DEFAULTSEESIZ/2 ; j <= chr_y+CHAR_DEFAULTSEESIZ/2 && found == FALSE; j ++ ){ OBJECT object; for( object = MAP_getTopObj( chr_fl, i,j); object; object = NEXT_OBJECT(object) ) { int objindex = GET_OBJINDEX( object); if( OBJECT_getType(objindex) == OBJTYPE_CHARA ){ if( CHAR_getInt( OBJECT_getIndex(objindex), CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER ) { found = TRUE; break; } } } } } return( found);}BOOL NPC_Util_WordInclude( char *text , char *word ){ if( strstr( text , word ) == NULL ){ return FALSE; } else { return TRUE; }}void NPC_Util_RandomToken(char *in, char *out, int outbufsize ){ int tokennum; int i; tokennum = 1; for( i=0;in[i]!='\0';i++ ){ if( in[i] == ',' ) tokennum++; } getStringFromIndexWithDelim(in,",", rand()%tokennum+1,out,outbufsize );}void cutDotsTail( char *s ){ int l = strlen( s ); int i; for(i=l-1;i>=0;i--){ if( s[i] == '.' ){ s[i] = 0; } else { break; } }}int NPC_Util_FrontItem( int meindex ){ int front_x, front_y,objindex,itemindex; OBJECT obj; CHAR_getCoordinationDir( CHAR_getInt(meindex,CHAR_DIR) , CHAR_getInt(meindex,CHAR_X) , CHAR_getInt(meindex,CHAR_Y) ,1, &front_x, &front_y ); for( obj=MAP_getTopObj(CHAR_getInt(meindex,CHAR_FLOOR), front_x,front_y );obj; obj=NEXT_OBJECT(obj) ){ objindex = GET_OBJINDEX(obj); if( OBJECT_getType(objindex) == OBJTYPE_ITEM ){ itemindex = OBJECT_getIndex(objindex); if(ITEM_CHECKINDEX(itemindex) ){ return itemindex; }else{ return -1; } } } return -1;}int NPC_Util_FrontChar( int meindex ){ int front_x, front_y,objindex,enemyindex; OBJECT obj; CHAR_getCoordinationDir( CHAR_getInt(meindex,CHAR_DIR) , CHAR_getInt(meindex,CHAR_X) , CHAR_getInt(meindex,CHAR_Y) ,1, &front_x, &front_y ); for( obj=MAP_getTopObj(CHAR_getInt(meindex,CHAR_FLOOR), front_x,front_y );obj; obj=NEXT_OBJECT(obj) ){ objindex = GET_OBJINDEX(obj); if( OBJECT_getType(objindex) == OBJTYPE_CHARA ){ enemyindex = OBJECT_getIndex(objindex); if(CHAR_CHECKINDEX(enemyindex) ){ return enemyindex; } } } return -1;}static int NPCUtil_enemytbl[NPC_ENEMY_ENEMYNUMBER+1];int *NPC_Util_getEnemy( int meindex, int charaindex){ int i; char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; char buf[64]; int ret; int bigcnt; int insert; NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)); for( i = 0; i < NPC_ENEMY_ENEMYNUMBER+1; i ++ ) { NPCUtil_enemytbl[i] = -1; } if( NPC_Util_GetStrFromStrWithDelim( argstr, "enemyno", buf, sizeof( buf)) == NULL ) { return NULL; } bigcnt = 0; insert = 0; for( i = 0; i < NPC_ENEMY_ENEMYNUMBER; i ++ ) { int curEnemy; int et_array; char data[128]; ret = getStringFromIndexWithDelim( buf,",", i + 1,data, sizeof(data)); if( ret == FALSE) { break; } curEnemy = ENEMY_getEnemyArrayFromId( atoi( data)); if( !ENEMY_CHECKINDEX( curEnemy) ) continue; et_array = ENEMYTEMP_getEnemyTempArray( curEnemy ); if( ENEMYTEMP_getInt( et_array, E_T_SIZE ) == E_T_SIZE_BIG) { if( bigcnt >= 5 ) { continue; } if( insert > 4 ) { int target_et_array; int flg = FALSE; int j; for( j = 0; j < 5; j ++ ) { /* 坞中化月及反云井仄中 */ if( !ENEMY_CHECKINDEX( NPCUtil_enemytbl[j])) break; target_et_array = ENEMYTEMP_getEnemyTempArray( NPCUtil_enemytbl[j]); /* 云井仄中 */ if( !ENEMYTEMP_CHECKINDEX( target_et_array)) break; if( ENEMYTEMP_getInt( target_et_array, E_T_SIZE) == E_T_SIZE_NORMAL ) { flg = TRUE; break; } } if( !flg) continue; NPCUtil_enemytbl[insert] = NPCUtil_enemytbl[j]; NPCUtil_enemytbl[j] = curEnemy; } else { NPCUtil_enemytbl[insert] = curEnemy; } bigcnt ++; } else { NPCUtil_enemytbl[insert] = curEnemy; } insert ++; } return NPCUtil_enemytbl;}void NPC_EventSetFlg(int talker,int shiftbit){ int point=0; int array; int shift; /*-- -1反白仿弘卞楮溢互卅中奶矛件玄 -*/ if(shiftbit==-1) return; array = shiftbit / 32; shift = shiftbit % 32; point = CHAR_getInt( talker, CHAR_ENDEVENT+array); // Arminius 8.24 prevent wash dp if (!(point & (1 << shift))) { // CoolFish: Family Adv 2001/8/4 AddFMAdv(talker, shiftbit); } point = point | (1 << shift); CHAR_setInt( talker, CHAR_ENDEVENT+array, point);}BOOL NPC_EventCheckFlg(int talker,int shiftbit){ int point=0; int array; int shift; /*-- -1反白仿弘卞楮溢互卅中奶矛件玄 -*/ if(shiftbit==-1) return FALSE; array = shiftbit / 32; shift = shiftbit % 32; point = CHAR_getInt( talker, CHAR_ENDEVENT+array); if( (point & (1<<shift)) == (1<<shift)){ return TRUE; } return FALSE;}void NPC_NowEventSetFlg(int talker,int shiftbit){ int point=0; int array; int shift; /*-- -1反白仿弘卞楮溢互卅中奶矛件玄 -*/ if(shiftbit==-1) return; array = shiftbit / 32; shift = shiftbit % 32; point = CHAR_getInt( talker, CHAR_NOWEVENT+array); point = point | (1 << shift); point = CHAR_setInt( talker, CHAR_NOWEVENT+array,point);}void NPC_NowEventSetFlgCls(int talker,int shiftbit){ int point=0; int array; int shift; if(shiftbit==-1) return; array = shiftbit / 32; shift = shiftbit % 32; point = CHAR_getInt( talker, CHAR_NOWEVENT+array); point = point ^ (1<<shift); CHAR_setInt(talker,CHAR_NOWEVENT+array,point);}BOOL NPC_NowEventCheckFlg(int talker,int shiftbit){ int point=0; int array; int shift; if(shiftbit==-1) return FALSE; array = shiftbit / 32; shift = shiftbit % 32; point = CHAR_getInt( talker, CHAR_NOWEVENT+array); if( (point & (1<<shift)) == (1<<shift)){ return TRUE; } return FALSE;}void NPC_NowEndEventSetFlgCls(int talker,int shiftbit){ int point=0; int array; int shift; if(shiftbit==-1) return; array = shiftbit / 32; shift = shiftbit % 32; if(NPC_NowEventCheckFlg(talker,shiftbit)==TRUE){ point = CHAR_getInt( talker, CHAR_NOWEVENT+array); point = point ^ (1<<shift); CHAR_setInt(talker,CHAR_NOWEVENT+array,point); } if(NPC_EventCheckFlg(talker,shiftbit)==TRUE){ point = CHAR_getInt( talker, CHAR_ENDEVENT+array); point = point ^ (1<<shift); CHAR_setInt(talker,CHAR_ENDEVENT+array,point); }}// CoolFish: Family Adv 2001/7/29void AddFMAdv(int talker, int shiftbit){ int fmadv = 0; char buf[256];#ifdef _FMVER21 #else if (CHAR_getInt(talker, CHAR_FMINDEX) < 0) return; if (CHAR_getInt(talker, CHAR_FMLEADERFLAG) <= 0 ) return; if (strcmp(CHAR_getChar(talker, CHAR_FMNAME), "") == 0) return;#endif if (shiftbit >= arraysizeof(FMAdvTbl)) return; else fmadv = FMAdvTbl[shiftbit]; if (fmadv <= 0) return; sprintf(buf, "%d", fmadv); #ifdef _PERSONAL_FAME // Arminius 8.30: 家族个人声望 CHAR_earnFame(talker, fmadv); #endif#ifdef _FMVER21 if (CHAR_getInt(talker, CHAR_FMLEADERFLAG) > 0 && CHAR_getInt(talker, CHAR_FMLEADERFLAG) != FMMEMBER_APPLY) { // CoolFish: 2001/10/03 int fd = getfdFromCharaIndex(talker); saacproto_ACFixFMData_send(acfd, CHAR_getChar(talker, CHAR_FMNAME), CHAR_getInt(talker, CHAR_FMINDEX), CHAR_getWorkInt(talker, CHAR_WORKFMINDEXI), FM_FIX_FMADV, buf, "", // CoolFish: 2001/10/03 CHAR_getWorkInt(talker, CHAR_WORKFMCHARINDEX), CONNECT_getFdid(fd)); // CHAR_getWorkInt(talker, CHAR_WORKFMCHARINDEX), 0); }#else saacproto_ACFixFMData_send(acfd, CHAR_getChar(talker, CHAR_FMNAME), CHAR_getInt(talker, CHAR_FMINDEX), CHAR_getWorkInt(talker, CHAR_WORKFMINDEXI), FM_FIX_FMADV, buf, "", CHAR_getWorkInt(talker, CHAR_WORKFMCHARINDEX), 0);#endif }int addNpcFamilyTax( int meindex, int talkerindex, int income ){ int fmindex, fmindexi, village, npc_village, i; char fmname[256], token[256], buf2[64]; int clifd = CHAR_getWorkInt( talkerindex, CHAR_WORKFD ); switch( (int)( CHAR_getInt( meindex, CHAR_FLOOR)/100 ) ) { case 10: npc_village = 1; break; case 20: npc_village = 2; break; case 30: npc_village = 3; break; case 40: npc_village = 4; break;#ifdef _FAMILY_MANORNUM_CHANGE case 50: npc_village = 5; break; case 60: npc_village = 6; break;// Syu ADD 修正四大城无税收问题 case 71: npc_village = 6; break; case 72: npc_village = 7; break; case 73: npc_village = 8; break; case 74: npc_village = 9; break; case 70: npc_village = 7; break; case 80: npc_village = 8; break; case 90: npc_village = 9; break; case 100: npc_village = 10; break; default: return 0; } sprintf( buf2, "%d", income ); for( i=0 ; i<FMPOINTNUM ; i++ ) { if( getStringFromIndexWithDelim(fmpointlist.pointlistarray[i], "|", 9, token, sizeof(token)) == FALSE ) continue; village = atoi(token); if( village == npc_village ) { if( getStringFromIndexWithDelim(fmpointlist.pointlistarray[i], "|", 5, token, sizeof(token)) == FALSE) return 0; fmindex = atoi(token);// Terry add for 如果庄园没人占领则不计算 if(fmindex < 0) return 0;// end memset( token, 0, sizeof( token)); if( getStringFromIndexWithDelim(fmpointlist.pointlistarray[i], "|", 6, token, sizeof(token)) == FALSE) return 0; memset( fmname, 0, sizeof( fmname)); sprintf( fmname, "%s", token); if( getStringFromIndexWithDelim(fmpointlist.pointlistarray[i], "|", 8, token, sizeof(token)) == FALSE ) return 0; fmindexi = atoi(token); saacproto_ACFixFMData_send( acfd, fmname, fmindex, fmindexi, FM_FIX_FMGOLD, buf2 , "", CHAR_getWorkInt(meindex, CHAR_WORKFMCHARINDEX), CONNECT_getFdid(clifd) ); // print(" addNpcFamilyTax_fm:%s ", fmname); return 1; } } return 0;}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -