📄 npc_npcenemy.c
字号:
#include "version.h"#include <string.h>#include "char.h"#include "object.h"#include "char_base.h"#include "npcutil.h"#include "npc_npcenemy.h"#include "battle.h"#include "enemy.h"#include "readmap.h"#include "encount.h"#include "lssproto_serv.h"#include "configfile.h"#include "anim_tbl.h"#include "handletime.h"#include "npc_eventaction.h"enum { CHAR_WORK_ENCOUNTTYPE = CHAR_NPCWORKINT1, /* 巨件市它件玄及酷 */ CHAR_WORK_DIEACT = CHAR_NPCWORKINT2, /* 韶氏分凛升丹允月井 */ CHAR_WORK_WARP_FLOOR = CHAR_NPCWORKINT3, /* 伐□皿允月白夫失*/ CHAR_WORK_WARP_X = CHAR_NPCWORKINT4, /* 伐□皿允月X */ CHAR_WORK_WARP_Y = CHAR_NPCWORKINT5, /* 伐□皿允月Y */ CHAR_WORK_ONEBATTLE = CHAR_NPCWORKINT6, /* 域勾仄井爵 仄卅中 */ NPC_TIME_MODE = CHAR_NPCWORKINT7, CHAR_WORK_BASEIMGBAK = CHAR_NPCWORKINT8, /* 手午及 飓 寞 */ CHAR_WORK_DIETIME = CHAR_NPCWORKINT9, /* 韶氏分凛棉 */ CHAR_WORK_REVIVALTIME = CHAR_NPCWORKINT10, /* 戏五忒月凛棉 */ CHAR_WORK_BATTLETYPE = CHAR_NPCWORKINT11,};#define NPC_ENEMY_REVIVALTIMA_DEFAULT 120static int gymbody[] = { SPR_001em,SPR_011em,SPR_021em,SPR_031em,SPR_041em,SPR_051em, SPR_061em,SPR_071em,SPR_081em,SPR_091em,SPR_101em,SPR_111em, SPR_002em,SPR_012em,SPR_022em,SPR_032em,SPR_042em,SPR_052em, SPR_062em,SPR_072em,SPR_082em,SPR_092em,SPR_102em,SPR_112em, SPR_003em,SPR_013em,SPR_023em,SPR_033em,SPR_043em,SPR_053em, SPR_063em,SPR_073em,SPR_083em,SPR_093em,SPR_103em,SPR_113em, SPR_004em,SPR_014em,SPR_024em,SPR_034em,SPR_044em,SPR_054em, SPR_064em,SPR_074em,SPR_084em,SPR_094em,SPR_104em,SPR_114em,};#ifdef _NEW_WARPMANstatic BOOL NPC_NPCEnemy_CheckFree( int meindex, int toindex, BOOL *Party);BOOL NPC_WarpAllMsg(int meindex,int toindex );BOOL NPCEnemy_CheckFree( int meindex, int talker, char *buf);BOOL NPCEnemy_BSCheck(int meindex,int talker,char* buf);BOOL NPCEnemy_FreeIfCheck(int meindex,int talker,char* buf,int kosuu,int flg, int temp);BOOL NPCEnemy_WarpManReduce(int meindex,int talker,char *buf);BOOL NPCEnemy_BigSmallLastCheck(int point1,int mypoint,int flg);BOOL NPCEnemy_CheckTrans(int meindex,int talker,int trans,int flg);BOOL NPCEnemy_LevelCheck(int meindex,int talker,int level,int flg);BOOL NPCEnemy_CheckMyPet( int meindex, int talker, int petLv, int flg, int petid);BOOL NPCEnemy_ItemCheck(int meindex,int talker,int itemNo,int flg);#endif#ifdef _NPC_REPLACEMENTvoid Check_EnemyWarpMe( int meindex, char *args );#endifstatic int NPC_NPCEnemy_StealItem( char *argstr, int meindex, int charaindex);BOOL NPC_NPCEnemyInit( int meindex ){ char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; char buf[64]; int tmp, gym; if( NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)) == NULL ) { print("Can't GetArgStr !!"); return FALSE; } if( NPC_Util_GetStrFromStrWithDelim( argstr, "sktype", buf, sizeof( buf)) != NULL ){ CHAR_setWorkInt( meindex, CHAR_WORK_BATTLETYPE, atoi( buf)); }else{ CHAR_setWorkInt( meindex, CHAR_WORK_BATTLETYPE, 0); } if( NPC_Util_GetStrFromStrWithDelim( argstr, "enemyno", buf, sizeof( buf)) == NULL ){ char filename[256]; NPC_Util_CheckAssignArgFile( meindex, filename); print( "NPCEnemy: nothing parameter [enemyno]:\n%s\n", filename); return FALSE; }else { int i; for( i = 0; i < NPC_ENEMY_ENEMYNUMBER; i ++ ) { int curEnemy; char data[128]; int ret; ret = getStringFromIndexWithDelim( buf,",", i + 1, data, sizeof(data)); if( ret == FALSE) break; curEnemy = ENEMY_getEnemyArrayFromId( atoi( data)); if( !ENEMY_CHECKINDEX( curEnemy) ) { char filename[256]; NPC_Util_CheckAssignArgFile( meindex, filename); print( "NPCEnemy: invalid param [enemyno:%d data:%s curEnemy:%d]\nfile:%s\n",i+1, data, curEnemy, filename ); return FALSE; } } } if( NPC_Util_GetStrFromStrWithDelim( argstr, "steal", buf, sizeof( buf)) != NULL ) { if( NPC_Util_GetStrFromStrWithDelim( argstr, "item", buf, sizeof( buf)) == NULL ) { print( "NPCEnemy:有指定steal而没有指定item,很奇怪\n"); return FALSE; } } gym = NPC_Util_GetNumFromStrWithDelim( argstr, "gym"); if( gym > 0 ){ CHAR_setInt( meindex, CHAR_BASEBASEIMAGENUMBER, gymbody[RAND( 0, arraysizeof( gymbody ) - 1)] ); CHAR_setInt( meindex, CHAR_BASEIMAGENUMBER, CHAR_getInt( meindex, CHAR_BASEBASEIMAGENUMBER ) ); CHAR_setInt( meindex, CHAR_LV, gym ); } tmp = NPC_Util_GetNumFromStrWithDelim( argstr, "dieact"); if( tmp != 1 ) tmp = 0; CHAR_setWorkInt( meindex, CHAR_WORK_DIEACT, tmp); if( strstr( argstr, "NEWNPCENEMY") != 0 ) { CHAR_setWorkInt( meindex, CHAR_WORK_WARP_FLOOR, 0 ); CHAR_setWorkInt( meindex, CHAR_WORK_WARP_Y, 0 ); CHAR_setWorkInt( meindex, CHAR_WORK_WARP_X, 0 ); }else { if( CHAR_getWorkInt( meindex, CHAR_WORK_DIEACT) == 1 ) { char buff1[256]; if( NPC_Util_GetStrFromStrWithDelim( argstr, "warpfl", buff1, sizeof( buff1) ) == NULL) { print( "NPCENEMY: nothing warp_floor %s\n", buff1); return FALSE; } tmp = atoi( buff1); CHAR_setWorkInt( meindex, CHAR_WORK_WARP_FLOOR, tmp); if( NPC_Util_GetStrFromStrWithDelim( argstr, "warpx", buff1, sizeof( buff1) ) == NULL) { print( "NPCENEMY: nothing warp_x\n"); return FALSE; } tmp = atoi( buff1); CHAR_setWorkInt( meindex, CHAR_WORK_WARP_X, tmp); if( NPC_Util_GetStrFromStrWithDelim( argstr, "warpy", buff1, sizeof( buff1) ) == NULL) { print( "NPCENEMY: nothing warp_y\n"); return FALSE; } tmp = atoi( buff1); CHAR_setWorkInt( meindex, CHAR_WORK_WARP_Y, tmp); if( MAP_IsValidCoordinate( CHAR_getWorkInt( meindex, CHAR_WORK_WARP_FLOOR), CHAR_getWorkInt( meindex, CHAR_WORK_WARP_X), CHAR_getWorkInt( meindex, CHAR_WORK_WARP_Y) ) == FALSE ){ char filename[256]; NPC_Util_CheckAssignArgFile( meindex, filename); print( "NPCENEMY: %s: .\n %s.\nInvalid fl=%d,x=%d,y=%d\n", filename, argstr, CHAR_getWorkInt( meindex, CHAR_WORK_WARP_FLOOR), CHAR_getWorkInt( meindex, CHAR_WORK_WARP_X), CHAR_getWorkInt( meindex, CHAR_WORK_WARP_Y) ); return FALSE; } } } //andy_end tmp = NPC_Util_GetNumFromStrWithDelim( argstr, "entype"); if( tmp != 1 && tmp != 2) tmp = 0; CHAR_setWorkInt( meindex, CHAR_WORK_ENCOUNTTYPE, tmp); tmp = NPC_Util_GetNumFromStrWithDelim( argstr, "onebattle"); if( tmp != 1 ) tmp = 0; CHAR_setWorkInt( meindex, CHAR_WORK_ONEBATTLE, tmp); tmp = NPC_Util_GetNumFromStrWithDelim( argstr, "time"); if( tmp == -1 ) tmp = NPC_ENEMY_REVIVALTIMA_DEFAULT; CHAR_setWorkInt( meindex, CHAR_WORK_REVIVALTIME, tmp); CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPENPCENEMY ); CHAR_setWorkInt( meindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_ENEMY); CHAR_setWorkInt( meindex, CHAR_WORK_BASEIMGBAK, CHAR_getInt( meindex, CHAR_BASEIMAGENUMBER)); return TRUE;}void NPC_NPCEnemyTalked( int meindex , int talkerindex , char *szMes , int color ){ char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE]; char buf[256]; if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) { return; } if( NPC_Util_GetArgStr( meindex, npcarg, sizeof( npcarg)) == NULL ) { print("Can't GetArgStr !!"); return; } if( NPC_Util_GetStrFromStrWithDelim( npcarg, "NEWTIME", buf, sizeof( buf)) != NULL ){ if( CHAR_getWorkInt( meindex, NPC_TIME_MODE) <= 0 ) { if( NPC_Util_GetStrFromStrWithDelim( npcarg, "Time_Msg", buf, sizeof( buf) ) != NULL) { CHAR_talkToCli( talkerindex, meindex, buf, CHAR_COLORYELLOW); } return; } } if( !NPC_Util_charIsInFrontOfChar( talkerindex, meindex, 1 )) return; if( CHAR_getWorkInt( meindex, CHAR_WORK_ENCOUNTTYPE) >= 1 ) { NPC_NPCEnemy_Encount( meindex, talkerindex, 1); }}int NPC_NPCEnemy_Encount( int meindex, int charaindex, int mode){ char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; char buf[512]; BOOL flg = TRUE; int battlemax = getBattlenum(); int i; if( CHAR_getInt( meindex, CHAR_BASEIMAGENUMBER) == 0 ) { return FALSE; } if( mode == 0 ) { if( CHAR_getWorkInt( meindex, CHAR_WORK_ENCOUNTTYPE) == 1 ) { flg = FALSE; } }else if( mode == 1 ) { if( CHAR_getWorkInt( meindex, CHAR_WORK_ENCOUNTTYPE) == 0 ) { flg = FALSE; } } NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)); if( !flg) { if( NPC_Util_GetStrFromStrWithDelim( argstr, "deniedmsg", buf, sizeof( buf)) != NULL ) { CHAR_talkToCliAndParty( charaindex, meindex ,buf , CHAR_COLORYELLOW ); } return FALSE; } flg = FALSE; while( 1 ) { char buf[1024]; if( NPC_Util_GetStrFromStrWithDelim( argstr, "item", buf, sizeof( buf)) != NULL ) { char data[128]; BOOL found = FALSE; for( i = 0; i < CHAR_MAXITEMHAVE; i ++ ) { int j; int itemid; int ret = getStringFromIndexWithDelim( buf,",", i + 1,data, sizeof(data)); if( ret == FALSE) break; found = FALSE; 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 ) { found = TRUE; break; } } } if( !found ) break; } if( !found ) break; }#ifdef _ADD_NOITEM_BATTLE if(NPC_Util_GetStrFromStrWithDelim(argstr,"noitem",buf,sizeof(buf)) != NULL){ char data[128]; BOOL found = FALSE; for(i=0;i<CHAR_MAXITEMHAVE;i++){ int j; int itemid; int ret = getStringFromIndexWithDelim(buf,",",i + 1,data,sizeof(data)); if(ret == FALSE) break; found = TRUE; 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){ found = FALSE; break; } } } if(!found) break; } if(!found) break; }#endif { char data[256]; BOOL Evflg=TRUE; if( NPC_Util_GetStrFromStrWithDelim( argstr, "B_evend", buf, sizeof( buf)) != NULL ) { int i=1, event=-1;; while( getStringFromIndexWithDelim( buf,",", i, data, sizeof( data)) ){ i++; event=atoi( data); if( NPC_EventCheckFlg( charaindex, event) == FALSE ) { Evflg = FALSE; break; } } } if( Evflg == FALSE ) break; i=1; if( NPC_Util_GetStrFromStrWithDelim( argstr, "B_evnow", buf, sizeof( buf)) != NULL ) { int i=1, event=-1;; while( getStringFromIndexWithDelim( buf,",", i, data, sizeof( data)) ){ i++; event=atoi( data); if( NPC_NowEventCheckFlg( charaindex, event) == FALSE ) { Evflg = FALSE; break; } } } if( Evflg == FALSE ) break; } if( CHAR_getWorkInt( meindex, CHAR_WORK_ONEBATTLE ) == 1 ) { for( i = 0; i < battlemax; i ++ ) { if( BattleArray[i].use ) { if( BattleArray[i].createindex == meindex ) { break; } } } if( i != battlemax ) { if( NPC_Util_GetStrFromStrWithDelim( argstr, "alreadymsg", buf, sizeof( buf))!= NULL ) { CHAR_talkToCliAndParty( charaindex, meindex ,buf , CHAR_COLORYELLOW ); } return FALSE; } } flg = TRUE; break; } if( flg ) { /* 阂及凛反 骰允月 */ if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE) != CHAR_PARTY_CLIENT) { char config[32]; snprintf( config, sizeof( config), "askbattlemsg1"); /* 爵 互铵引月蟆卞撙 丢永本□斥 */ if( NPC_Util_GetStrFromStrWithDelim( argstr, config, buf, sizeof( buf))!= NULL ) { int len = strlen( buf); char escapebuf[1024];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -