📄 npc_npcenemy.c
字号:
int fd = getfdFromCharaIndex( charaindex); char buf2[256]; /* askbattlemsg? 互丐木壬 醒垫卞允月 "\n"戊□玉毛 木月)*/ for( i = 2; i < 7; i ++ ) { snprintf( config, sizeof( config), "askbattlemsg%d", i); if( NPC_Util_GetStrFromStrWithDelim( argstr, config, buf2, sizeof( buf2))!= NULL ) { strcpysafe( &buf[len], sizeof( buf)-len, "\n" ); len++; strcpysafe( &buf[len], sizeof( buf)-len, buf2 ); len += strlen( buf2); if( len >= sizeof( buf) ) { print( "buffer over\n"); return FALSE; } } else { strcpysafe( &buf[len], sizeof( buf)-len, "\n" ); len++; if( len >= sizeof( buf) ) { print( "buffer over\n"); return FALSE; } } } if( fd != -1 ) { lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE, WINDOW_BUTTONTYPE_YESNO, CHAR_WINDOWTYPE_NPCENEMY_START, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), makeEscapeString( buf, escapebuf,sizeof(escapebuf))); } /* 仇仇分仃 卞伉正□件 */ return FALSE; }else { /* 爵 卞 日六月 */ flg = NPC_NPCEnemy_BattleIn( meindex, charaindex); } } } if( !flg) { if( NPC_Util_GetStrFromStrWithDelim( argstr, "deniedmsg", buf, sizeof( buf))!= NULL ) { CHAR_talkToCliAndParty( charaindex, meindex ,buf , CHAR_COLORYELLOW ); } } return flg;}int NPC_NPCEnemy_Dying( int battleindex, int meindex ){ char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; char buf[64]; int i,toindex=-1; int tmp=-1; if( !CHAR_CHECKINDEX( meindex)) { return FALSE; } NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr));#ifdef _NEW_WARPMAN if( strstr( argstr, "NEWNPCENEMY") ) { }else {#endif /* 蝇 及陲太 */ if( NPC_Util_GetStrFromStrWithDelim( argstr, "endmsg", buf, sizeof( buf)) != NULL ) { for( i = 0; i < 5; i ++ ) { /* 爵 卞辅笛仄化中月蝈够卞丢永本□斥 */ int toindex = BattleArray[battleindex].Side[0].Entry[i].charaindex; if( CHAR_CHECKINDEX( toindex) ) { CHAR_talkToCli( toindex, meindex ,buf , CHAR_COLORYELLOW ); } } }#ifdef _NEW_WARPMAN }#endif if( NPC_Util_GetStrFromStrWithDelim( argstr, "steal", buf, sizeof( buf)) != NULL ) { print("\n steal TRUE !!"); if( atoi( buf) == 1 ) { int charaindex = BattleArray[battleindex].Side[0].Entry[0].charaindex; NPC_NPCEnemy_StealItem( argstr, meindex, charaindex); } }#ifdef _ALLDOMAN // (不可开) Syu ADD 排行榜NPC if( NPC_Util_GetStrFromStrWithDelim( argstr, "herobattlefield", buf, sizeof( buf)) != NULL ) { int charaindex = BattleArray[battleindex].Side[0].Entry[0].charaindex; CHAR_setWorkInt ( charaindex , CHAR_WORKHEROFLOOR , atoi ( buf ) ) ; // Syu ADD if ( atoi ( buf ) > CHAR_getInt ( charaindex , CHAR_HEROFLOOR ) ) CHAR_setInt ( charaindex , CHAR_HEROFLOOR , atoi( buf ) ) ; }#endif tmp = NPC_Util_GetNumFromStrWithDelim( argstr, "dieact"); if( tmp != 1 ) tmp = 0; CHAR_setWorkInt( meindex, CHAR_WORK_DIEACT, tmp); if( CHAR_getWorkInt( meindex, CHAR_WORK_DIEACT) == 0 ) { Char *ch; CHAR_setInt( meindex, CHAR_BASEIMAGENUMBER, 0); print("bbi---->bi10"); CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX)); CHAR_setWorkInt( meindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_ALTERRATIVE); MAP_sendAroundMapdata( CHAR_getInt( meindex, CHAR_FLOOR), CHAR_getInt( meindex, CHAR_X), CHAR_getInt( meindex, CHAR_Y)); ch = CHAR_getCharPointer( meindex); if( ch != NULL ) { strcpysafe( ch->charfunctable[CHAR_LOOPFUNC].string, sizeof( ch->charfunctable[CHAR_LOOPFUNC]), "NPCEnemyLoop"); CHAR_constructFunctable( meindex); CHAR_setInt( meindex, CHAR_LOOPINTERVAL, 5000); CHAR_setWorkInt( meindex, CHAR_WORK_DIETIME, NowTime.tv_sec); }else { print( "NPCENEMY:err\n"); } }else { for( i = 0; i < 5; i ++ ) { toindex = BattleArray[battleindex].Side[0].Entry[i].charaindex; if( CHAR_CHECKINDEX( toindex) ) {#ifdef _NEW_WARPMAN if( strstr( argstr, "NEWNPCENEMY") ) { BOOL Party=TRUE; if( NPC_NPCEnemy_CheckFree( meindex, toindex , &Party) == FALSE ) { continue; } if( Party == TRUE ) { }else { if( CHAR_getWorkInt( toindex, CHAR_WORKPARTYMODE ) == CHAR_PARTY_LEADER ) { if( NPC_WarpAllMsg( meindex, toindex ) == TRUE ) { return TRUE; } } continue; } } CHAR_DischargeParty( toindex, 0); // 拆队 CHAR_warpToSpecificPoint( toindex, CHAR_getWorkInt( meindex, CHAR_WORK_WARP_FLOOR), CHAR_getWorkInt( meindex, CHAR_WORK_WARP_X), CHAR_getWorkInt( meindex, CHAR_WORK_WARP_Y) );#else CHAR_warpToSpecificPoint( toindex, CHAR_getWorkInt( meindex, CHAR_WORK_WARP_FLOOR), CHAR_getWorkInt( meindex, CHAR_WORK_WARP_X), CHAR_getWorkInt( meindex, CHAR_WORK_WARP_Y) );#endif#ifdef _NPC_REPLACEMENT Check_EnemyWarpMe( meindex, argstr);#endif } } } return TRUE;}void NPC_NPCEnemyLoop( int meindex ){ if( NowTime.tv_sec > CHAR_getWorkInt( meindex, CHAR_WORK_DIETIME) + CHAR_getWorkInt( meindex, CHAR_WORK_REVIVALTIME)){ Char *ch; CHAR_setInt( meindex, CHAR_BASEIMAGENUMBER, CHAR_getWorkInt( meindex, CHAR_WORK_BASEIMGBAK)); print("bbi---->bi11"); CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX)); CHAR_setWorkInt( meindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_ENEMY); MAP_sendAroundMapdata( CHAR_getInt( meindex, CHAR_FLOOR), CHAR_getInt( meindex, CHAR_X), CHAR_getInt( meindex, CHAR_Y)); ch = CHAR_getCharPointer( meindex); if( ch != NULL ) { strcpysafe( ch->charfunctable[CHAR_LOOPFUNC].string, sizeof( ch->charfunctable[CHAR_LOOPFUNC]), ""); CHAR_constructFunctable( meindex);// CHAR_setInt( meindex, CHAR_LOOPINTERVAL, 0); } }}BOOL NPC_NPCEnemy_BattleIn( int meindex, int charaindex){ int gym; int ret; char buf[256]; char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; memset( argstr, 0, sizeof( argstr)); NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)); gym = NPC_Util_GetNumFromStrWithDelim( argstr, "gym"); if( gym > 0 ){ ret = BATTLE_CreateVsEnemy( charaindex, 2, meindex); }else{ ret = BATTLE_CreateVsEnemy( charaindex, 1, meindex); } if( ret == 0 ) { BattleArray[CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX)].WinFunc = NPC_NPCEnemy_Dying; if( NPC_Util_GetStrFromStrWithDelim( argstr, "startmsg", buf, sizeof( buf)) != NULL ){ CHAR_talkToCliAndParty( charaindex, meindex ,buf , CHAR_COLORYELLOW ); } if( NPC_Util_GetStrFromStrWithDelim( argstr, "steal", buf, sizeof( buf))!= NULL ){ if( atoi( buf) == 0 ) { NPC_NPCEnemy_StealItem( argstr, meindex, charaindex); } } } return ( ret == 0 ) ?TRUE:FALSE ;}void NPC_NPCEnemyWindowTalked( int meindex, int talkerindex, int seqno, int select, char *data){ if( seqno == CHAR_WINDOWTYPE_NPCENEMY_START) { if( select == WINDOW_BUTTONTYPE_YES) { NPC_NPCEnemy_BattleIn( meindex, talkerindex); } }}static int NPC_NPCEnemy_StealItem( char *argstr, int meindex, int charaindex){ char itembuf[1024]; if( NPC_Util_GetStrFromStrWithDelim( argstr, "item", itembuf, sizeof( itembuf))!= NULL ) { char data[128]; int delitemgroup[CHAR_MAXITEMHAVE]; int found = 0; int i; for( i = 0; i < CHAR_MAXITEMHAVE; i ++ ) { int j; int itemid; int ret = getStringFromIndexWithDelim( itembuf,",", i + 1,data, sizeof(data)); if( ret == FALSE) { break; } itemid = atoi( data); for( j = 0; j < CHAR_MAXITEMHAVE; j ++ ) { int itemindex = CHAR_getItemIndex( charaindex, j); if( ITEM_CHECKINDEX( itemindex)){ if( ITEM_getInt( itemindex, ITEM_ID) == itemid ){ CHAR_setItemIndex( charaindex, j, -1); ITEM_endExistItemsOne( itemindex); delitemgroup[found] = j; found ++; break; } } } if( !found ) break; } CHAR_sendItemData( charaindex, delitemgroup, found); } else { print( "NPCENEMY:奇怪\n"); return FALSE; } return TRUE;}#ifdef _NEW_WARPMANstatic BOOL NPC_NPCEnemy_CheckFree( int meindex, int toindex, BOOL *Party){ char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE]; char buf1[1024],buf2[256],buf3[256],buf4[256]; char token[256]; char temp1[16]; int talkNo = 1; int point=1; int i=0,type=0; struct tagWarpPoint { int floor; int x; int y; }AllWarPoint[]={ {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, }; if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL) { print("GetArgStrErr"); return FALSE; } if( (strstr( npcarg,"NEWNPCENEMY") == NULL) && (strstr( npcarg,"OVER") == NULL) ) { return FALSE; }else { } while( getStringFromIndexWithDelim( npcarg,"OVER",talkNo,buf1,sizeof( buf1)) != FALSE ) { talkNo++; sprintf(temp1,"NEWEVENT"); if( strstr( buf1, temp1) != NULL) { if( NPC_Util_GetStrFromStrWithDelim( buf1, "FREE", buf2, sizeof( buf2) ) == FALSE ) { continue; } if( NPC_ActionPassCheck( meindex, toindex, buf2) == FALSE ) { continue; } if( NPC_Util_GetStrFromStrWithDelim( buf1, "endmsg", token, sizeof( token)) != NULL ) { CHAR_talkToCli( toindex, meindex ,token , CHAR_COLORYELLOW ); }#ifdef _ALLDOMAN // (不可开) Syu ADD 排行榜NPC if( NPC_Util_GetStrFromStrWithDelim( buf1, "herobattlefield", token, sizeof( token)) != NULL ) { CHAR_setWorkInt ( toindex , CHAR_WORKHEROFLOOR , atoi ( token ) ) ; if ( atoi ( token ) > CHAR_getInt ( toindex , CHAR_HEROFLOOR ) ) CHAR_setInt ( toindex , CHAR_HEROFLOOR , atoi( token ) ) ; }#endif if( NPC_Util_GetStrFromStrWithDelim( buf1, "WARP", buf2, sizeof( buf2) ) == FALSE ){ continue; }else {//RAND arraysizeof AllWarPoint while( getStringFromIndexWithDelim( buf2, ";", point, buf3,sizeof( buf3)) != FALSE ) { point++; getStringFromIndexWithDelim( buf3, ",", 1, buf4, sizeof( buf4)); AllWarPoint[i].floor = atoi( buf4); getStringFromIndexWithDelim( buf3, ",", 2, buf4, sizeof( buf4)); AllWarPoint[i].x = atoi( buf4); getStringFromIndexWithDelim( buf3, ",", 3, buf4, sizeof( buf4)); AllWarPoint[i].y = atoi( buf4); i++; if( i >= arraysizeof( AllWarPoint) ) break; } type = RAND( 0, i-1); if( AllWarPoint[type].floor <= 0 || type > arraysizeof( AllWarPoint)-1) { type = 0; } CHAR_setWorkInt( meindex, CHAR_WORK_WARP_FLOOR, AllWarPoint[type].floor ); CHAR_setWorkInt( meindex, CHAR_WORK_WARP_X, AllWarPoint[type].x ); CHAR_setWorkInt( meindex, CHAR_WORK_WARP_Y, AllWarPoint[type].y ); } if( NPC_Util_GetStrFromStrWithDelim( buf1, "CHECKPARTY", buf4, sizeof( buf4)) != NULL ) { if( strstr( buf4, "FALSE") != NULL ) { *Party = FALSE; } } if( *Party == TRUE ) { Action_RunDoEventAction( meindex, toindex, buf1); } return TRUE; } } return FALSE; }BOOL NPCEnemy_CheckFree( int meindex, int talker, char *buf)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -