?? battle.c
字號:
return 1; } return iRet;}int BATTLE_PetDefaultEntry( int charaindex, int battleindex, int side){ int pindex;#if 1 int pno; int ret = 0; pno = CHAR_getInt( charaindex, CHAR_DEFAULTPET ); if( pno == -1 ) return 0; pindex = CHAR_getCharPet( charaindex, pno ); if( CHAR_CHECKINDEX( pindex ) && !CHAR_getFlg( pindex, CHAR_ISDIE ) && CHAR_getInt( pindex, CHAR_HP ) > 0 ) { if( BATTLE_NewEntry( pindex, battleindex, side ) ){ }else{ ret = 0; } } else { CHAR_setInt( charaindex, CHAR_DEFAULTPET, -1 ); } return ret;#else for( i = 0; i < CHAR_MAXPETHAVE; i ++ ){ pindex = CHAR_getCharPet( charaindex, i ); if( CHAR_CHECKINDEX( pindex ) == FALSE )continue; if( CHAR_getFlg( pindex, CHAR_ISDIE ) == TRUE )continue; if( CHAR_getInt( pindex, CHAR_HP ) <= 0 )continue; if( BATTLE_NewEntry( pindex, battleindex, side ) ){ }else{ CHAR_setInt( charaindex, CHAR_DEFAULTPET, i ); break; } } if( i == CHAR_MAXPETHAVE ){ CHAR_setInt( charaindex, CHAR_DEFAULTPET, -1 ); } return 0;#endif}int BATTLE_RescueEntry( int charaindex, int toindex ){ int iRet = 0, battleindex, fd, pindex; char szBuffer[256]="";#ifdef _BATTLE_TIMESPEED fd = getfdFromCharaIndex( charaindex); if( CONNECT_getBDTime( fd) > time( NULL) ) { return 1; }#endif battleindex = CHAR_getWorkInt( toindex, CHAR_WORKBATTLEINDEX ); if( !BATTLE_CHECKINDEX( battleindex) ) return 1; if( ( fd = getfdFromCharaIndex(charaindex) ) < 0 ) return 1; if( CHAR_getWorkInt( toindex, CHAR_WORKBATTLEMODE ) == BATTLE_CHARMODE_FINAL || CHAR_getWorkInt( toindex, CHAR_WORKBATTLEINDEX ) == -1 ){ iRet = 1; } if( BattleArray[battleindex].type == BATTLE_TYPE_P_vs_P ){ iRet = 1; }else{ iRet = BATTLE_NewEntry( charaindex, battleindex, CHAR_getWorkInt( toindex, CHAR_WORKBATTLESIDE ) ); } if( iRet == 0 ){ CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_RESCUE ); iRet = BATTLE_PetDefaultEntry( charaindex, battleindex, CHAR_getWorkInt( toindex, CHAR_WORKBATTLESIDE ) ); } if( iRet == 0 ){ int flg; if( CHAR_getInt( charaindex, CHAR_DEFAULTPET ) >= 0 ){ pindex = CHAR_getCharPet( charaindex, CHAR_getInt( charaindex, CHAR_DEFAULTPET ) ); CHAR_setWorkInt( pindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_RESCUE ); } //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 ); } flg = (BattleArray[battleindex].Side[ CHAR_getWorkInt( toindex, CHAR_WORKBATTLESIDE)].flg & BSIDE_FLG_HELP_OK)? TRUE:FALSE; lssproto_HL_send( fd, flg); sprintf( szBuffer, "BP|%X|%X|%X", BATTLE_Index2No( battleindex, charaindex ), 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, BattleArray[battleindex].field_no ); } } BATTLE_ClearGetExp( charaindex ); return iRet;}BOOL BATTLE_RescueTry( 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;#if 1 // 修正利用參戰重復加入戰斗 Robin if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE) { CHAR_talkToCli( charaindex, -1, " 重復加入戰斗! ", CHAR_COLORRED); print("\n 改封包!!重復加入戰斗!:%s ", CHAR_getChar( charaindex, CHAR_CDKEY) ); //lssproto_EN_send( fd, FALSE, 0 ); return FALSE; }#endif if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE) != CHAR_PARTY_NONE ) { lssproto_EN_send( fd, FALSE, 0 ); return FALSE; }#ifdef _BATTLE_TIMESPEED if( CONNECT_getBDTime( fd) > time( NULL) ) { return FALSE; }#endif 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; } if( BattleArray[ CHAR_getWorkInt( toindex, CHAR_WORKBATTLEINDEX)].type != BATTLE_TYPE_P_vs_E ){ continue; } 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);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -