📄 npc_npcenemy.c
字号:
!= 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");
#ifdef _EMENY_CHANCEMAN
{
int masterindex=-1;
masterindex = NPC_EmenyChanceCheck( meindex, charaindex, argstr);
if( CHAR_CHECKINDEX( masterindex)){
charaindex = masterindex;
}else {
return TRUE;
}
}
#endif
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) {
#if 0
print(" NPC_NPCEnemyWindowTalked ");
if( CHAR_getWorkInt( meindex, CHAR_WORKEVENTTYPE) != CHAR_EVENT_ENEMY ) {
print(" NPCEnemyError!! ");
return;
}
#endif
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_WARPMAN
static 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;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -