📄 battle.c
字号:
} if( !(BattleArray[CHAR_getWorkInt( toindex,CHAR_WORKBATTLEINDEX)].Side[ CHAR_getWorkInt( toindex, CHAR_WORKBATTLESIDE)].flg & BSIDE_FLG_HELP_OK)){ continue; } CONNECT_setBattlecharaindex( fd, cnt, toindex ); cnt++; if( cnt == CONNECT_WINDOWBUFSIZE ) break; } if( cnt == 0 ) { if( pfound == FALSE ) { CHAR_talkToCli( charaindex, -1, "那里没有任何人。", CHAR_COLORYELLOW); } lssproto_EN_send( fd, FALSE, 0 ); }else if( cnt == 1 ) { if( BATTLE_RescueEntry( charaindex, CONNECT_getBattlecharaindex(fd,0) ) ){ CHAR_talkToCli( charaindex, -1, "无法参战。", CHAR_COLORYELLOW); }else { result = TRUE; } }else if( cnt > 1 ) { int strlength; char msgbuf[1024]; char escapebuf[2048]; strcpy( msgbuf, "1\n加入谁的战斗呢?\n"); strlength = strlen( msgbuf); for( i = 0; CONNECT_getBattlecharaindex( fd,i ) != -1 && i< CONNECT_WINDOWBUFSIZE; i ++ ){ char *a = CHAR_getChar( CONNECT_getBattlecharaindex(fd,i), CHAR_NAME); char buf[256]; snprintf( buf, sizeof( buf),"%s\n", a); if( strlength + strlen( buf) > arraysizeof( msgbuf)){ print( "\nerr:%s:%d 视窗的讯息缓冲不足\n", __FILE__,__LINE__); break; } strcpy( &msgbuf[strlength], buf); strlength += strlen(buf); } lssproto_WN_send( fd, WINDOW_MESSAGETYPE_SELECT, WINDOW_BUTTONTYPE_CANCEL, CHAR_WINDOWTYPE_SELECTBATTLE, -1, makeEscapeString( msgbuf, escapebuf, sizeof(escapebuf))); } return result;}BOOL BATTLE_RescueParentTry( int charaindex, int pindex){ int result = FALSE; if( CHAR_getFlg( charaindex, CHAR_ISDIE)) return FALSE; if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYINDEX1) != pindex ) return FALSE; if( CHAR_getWorkInt( pindex, CHAR_WORKBATTLEMODE) == BATTLE_CHARMODE_NONE ){ return FALSE; } if( BATTLE_RescueEntry( charaindex, pindex ) ){ result = FALSE; }else{ result = TRUE; } if( result == FALSE ) { CHAR_talkToCli( charaindex, -1, "无法参战。", CHAR_COLORYELLOW); } return result;}int BATTLE_PartyNewEntry( int charaindex, int battleindex, int side){ int iRet = 0, i, work;#if 1 iRet = BATTLE_NewEntry( charaindex, battleindex, side ); if( iRet )return iRet; CAflush( charaindex ); CDflush( charaindex ); iRet = BATTLE_PetDefaultEntry( charaindex, battleindex, side ); if( iRet )return iRet; BATTLE_ClearGetExp( charaindex );#endif for( i = 1; i < CHAR_PARTYMAX; i ++ ){ work = CHAR_getWorkInt( charaindex, i + CHAR_WORKPARTYINDEX1 ); if( CHAR_CHECKINDEX( work ) == FALSE )continue; if( CHAR_getWorkInt( work, CHAR_WORKBATTLEMODE ) != 0 ){ continue; } iRet = BATTLE_NewEntry( work, battleindex, side ); if( iRet )break; CAflush( work ); CDflush( work ); iRet = BATTLE_PetDefaultEntry( work, battleindex, side ); if( iRet )return iRet; BATTLE_ClearGetExp( work ); } return iRet;}#if 1int BATTLE_WatchNewEntry( int charaindex, int battleindex, int side){ BATTLE_ENTRY *pEntry; BATTLE *pBattle; int iEntryFirst = 0, iEntryMax = BATTLE_ENTRY_MAX, i; if( BATTLE_CHECKSIDE( side ) == FALSE )return BATTLE_ERR_PARAM; if( BATTLE_CHECKINDEX( battleindex ) == FALSE )return BATTLE_ERR_BATTLEINDEX; if( CHAR_CHECKINDEX( charaindex ) == FALSE )return BATTLE_ERR_CHARAINDEX; pBattle = &BattleArray[battleindex]; if( pBattle->use == FALSE )return BATTLE_ERR_NOUSE; if( side < 0 || side > 1 ){ return BATTLE_ERR_PARAM; } switch( CHAR_getInt( charaindex, CHAR_WHICHTYPE ) ){ case CHAR_TYPEPLAYER: if( pBattle->Side[side].type != BATTLE_S_TYPE_PLAYER ){ return BATTLE_ERR_TYPE; } iEntryFirst = 0; iEntryMax = BATTLE_PLAYER_MAX; break; default: print( "不明(%s)(%d)\n", CHAR_getUseName( charaindex ), CHAR_getInt( charaindex, CHAR_WHICHTYPE ) ); return BATTLE_ERR_TYPE; } pEntry = pBattle->Side[side].Entry; for( i = iEntryFirst; i < iEntryMax; i ++ ){ if( pEntry[i].charaindex == -1 )break; } if( i == iEntryMax ){ return BATTLE_ERR_ENTRYMAX; } EntryInit( &pEntry[i] ); pEntry[i].charaindex = charaindex; pEntry[i].bid = i + side * SIDE_OFFSET; CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEINDEX, battleindex ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_WATCHINIT ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLESIDE, side ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEFLG, 0 ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, -1 ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, -1 ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM3, -1 ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEWATCH, 1 ); return 0;}int BATTLE_WatchPartyNewEntry( int charaindex, int battleindex, int side){ int iRet = 0, i, work;#if 1 iRet = BATTLE_WatchNewEntry( charaindex, battleindex, side ); if( iRet )return iRet; CAflush( charaindex ); CDflush( charaindex );#endif for( i = 1; i < CHAR_PARTYMAX; i ++ ){ work = CHAR_getWorkInt( charaindex, i + CHAR_WORKPARTYINDEX1 ); if( CHAR_CHECKINDEX( work ) == FALSE )continue; if( CHAR_getWorkInt( work, CHAR_WORKBATTLEMODE ) != 0 ){ continue; } iRet = BATTLE_WatchNewEntry( work, battleindex, side ); if( iRet )break; CAflush( work ); CDflush( work ); } return iRet;}int BATTLE_CreateForWatcher( int charaindex, int topbattleindex );int BATTLE_WatchEntry( int charaindex, int toindex ){ int iRet = 0, battleindex, fd; char szBuffer[256]=""; battleindex = CHAR_getWorkInt( toindex, CHAR_WORKBATTLEINDEX ); if( CHAR_getWorkInt( toindex, CHAR_WORKBATTLEMODE ) == BATTLE_CHARMODE_FINAL || CHAR_getWorkInt( toindex, CHAR_WORKBATTLEMODE ) == BATTLE_CHARMODE_NONE || CHAR_getWorkInt( toindex, CHAR_WORKBATTLEINDEX ) == -1 ){ iRet = 1; } if( iRet == 0 ){ iRet = BATTLE_CreateForWatcher( charaindex, battleindex ); } if( iRet == 0 ){ //snprintf( szBuffer, sizeof( szBuffer ), "(%s)开始观战。", // CHAR_getUseName( charaindex ) ); //BATTLE_BroadCast( battleindex, szBuffer, CHAR_COLORYELLOW ); if( ( fd = getfdFromCharaIndex(charaindex) ) != -1 ){ lssproto_EN_send( fd, BattleArray[battleindex].type, BattleArray[battleindex].field_no ); } sprintf( szBuffer, "BP|%X|%X|%X", 20, BP_FLG_JOIN, CHAR_getInt(charaindex, CHAR_MP ) ); BATTLE_CommandSend( charaindex, szBuffer ); }else{ snprintf( szBuffer, sizeof( szBuffer ), "无法观战。" ); CHAR_talkToCli( charaindex, -1, szBuffer, CHAR_COLORYELLOW); if( ( fd = getfdFromCharaIndex(charaindex) ) != -1 ){ lssproto_EN_send( fd, FALSE, 0 ); } } return iRet;}BOOL BATTLE_WatchTry( int charaindex ){ int x,y; OBJECT object; int pfound = FALSE; int result = FALSE; int fd; int i; int cnt; fd = getfdFromCharaIndex( charaindex); if( fd == -1 )return FALSE; for( i = 0; i < CONNECT_WINDOWBUFSIZE ; i ++ ) { CONNECT_setBattlecharaindex( fd,i,-1); } CHAR_getCoordinationDir( CHAR_getInt( charaindex, CHAR_DIR ) , CHAR_getInt( charaindex , CHAR_X ), CHAR_getInt( charaindex , CHAR_Y ) , 1 , &x , &y ); cnt = 0; /*愤坌及 及蟆及平乓仿毛潸 允月 */ for( object = MAP_getTopObj( CHAR_getInt( charaindex, CHAR_FLOOR),x,y) ; object ; object = NEXT_OBJECT(object ) ) { int toindex; int objindex = GET_OBJINDEX(object); /* 平乓仿弁正□元扎卅中 */ if( OBJECT_getType( objindex) != OBJTYPE_CHARA) continue; toindex = OBJECT_getIndex( objindex); /* 皿伊奶乩□元扎卅中 */ if( CHAR_getInt( toindex, CHAR_WHICHTYPE) != CHAR_TYPEPLAYER ) continue; pfound = TRUE; /* 爵 匹卅中卅日戚尺 */ if( CHAR_getWorkInt( toindex, CHAR_WORKBATTLEMODE) == BATTLE_CHARMODE_NONE ){ continue; } CONNECT_setBattlecharaindex( fd,cnt, toindex ); cnt++; if( cnt == CONNECT_WINDOWBUFSIZE ) break; } if( cnt == 0 ) { if( pfound == FALSE ) { CHAR_talkToCli( charaindex, -1, "那里没有任何人。", CHAR_COLORYELLOW); } // 分木手中卅仁化棋爵撩 lssproto_EN_send( fd, FALSE, 0 ); } /* ㄠ谛仄井中卅中桦宁反巨件玄伉□今六月 */ else if( cnt == 1 ) { if( BATTLE_WatchEntry( charaindex,CONNECT_getBattlecharaindex(fd,0)) ) { result = FALSE; } else { result = TRUE; } } /* 醒谛中凶日它奴件玉它毛请仄化 中宁歹六月 */ else if( cnt > 1 ) { int strlength; char msgbuf[1024]; char escapebuf[2048]; strcpy( msgbuf, "1\n观看谁的战斗呢?\n"); strlength = strlen( msgbuf); /* 它奴件玉它及丢永本□斥综岳[ * 爵 及平乓仿及域 */ for( i = 0; CONNECT_getBattlecharaindex( fd,i ) != -1 && i< CONNECT_WINDOWBUFSIZE; i ++ ) { char *a = CHAR_getChar( CONNECT_getBattlecharaindex(fd,i), CHAR_NAME); char buf[256]; snprintf( buf, sizeof( buf),"%s\n", a); if( strlength + strlen( buf) > arraysizeof( msgbuf)){ print( "\nerr:%s:%d 视窗的讯息缓冲不足\n", __FILE__,__LINE__); break; } strcpy( &msgbuf[strlength], buf); strlength += strlen(buf); } lssproto_WN_send( fd, WINDOW_MESSAGETYPE_SELECT, WINDOW_BUTTONTYPE_CANCEL, CHAR_WINDOWTYPE_SELECTBATTLEWATCH, -1, makeEscapeString( msgbuf, escapebuf, sizeof(escapebuf))); } return result;}#endif#define MAX_DOUJYOUENEMY 64static int DoujyouEnemyTbl[10]; // ㄠㄟ手中日氏仃升/*************************************************************** * 桦乒□玉迕卞衬平乓仿潸 ***************************************************************/int *Doujyou_GetEnemy( int meindex, int charaindex ){ int i; char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; char buf[1024]; int ret; int insert; int WorkEnemyTbl[MAX_DOUJYOUENEMY]; NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)); /* 赓渝祭 */ for( i = 0; i < arraysizeof(WorkEnemyTbl); i ++ ) { WorkEnemyTbl[i] = -1; } if( NPC_Util_GetStrFromStrWithDelim( argstr, "enemyno", buf, sizeof( buf)) == NULL ) { return NULL; } insert = 0; /* 娄醒卞踏中化丐月衬毛巨件玄伉□今六月 */ for( i = 0; i < MAX_DOUJYOUENEMY; i ++ ) { int curEnemy; 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; WorkEnemyTbl[insert] = curEnemy; insert ++; } // 分木手中卅井匀凶日巨仿□ if( insert <= 0 )return NULL; // ㄠ 仿件母丞涩烂 DoujyouEnemyTbl[0] = WorkEnemyTbl[RAND( 0, insert-1 )]; if( NPC_Util_GetStrFromStrWithDelim( argstr, "enemypetno", buf, sizeof( buf)) == NULL ) { // 中卅井匀凶日窒手踏井卅中 DoujyouEnemyTbl[1] = -1; }else{ insert = 0; /* 娄醒卞踏中化丐月衬毛巨件玄伉□今六月 */ for( i = 0; i < MAX_DOUJYOUENEMY; i ++ ) { int curEnemy; 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; WorkEnemyTbl[insert] = curEnemy; insert ++; } // ㄡ 仿件母丞涩烂 DoujyouEnemyTbl[1] = WorkEnemyTbl[RAND( 0, insert-1 )]; } // ㄢ 仄 DoujyouEnemyTbl[2] = -1; return DoujyouEnemyTbl;}static int DoujyouWeponTbl[] = { -1, ITEM_FIST, ITEM_AXE, ITEM_CLUB, ITEM_SPEAR, ITEM_BOW, ITEM_BOOMERANG, ITEM_BOUNDTHROW, ITEM_BREAKTHROW,};int DoujyouRandomWeponSet( int charaindex ){ int wepon = -1, itemindex; int work = RAND( 0, arraysizeof( DoujyouWeponTbl ) - 1 ); switch( DoujyouWeponTbl[work] ){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -