?? battle.c.bak
字號:
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] ){ case ITEM_AXE: wepon = 0;break; case ITEM_CLUB: wepon = 100;break; case ITEM_SPEAR: wepon = 200;break; case ITEM_BOW: wepon = 2498;break; case ITEM_BOOMERANG:wepon = 500;break; case ITEM_BOUNDTHROW:wepon = 600;break; case ITEM_BREAKTHROW:wepon = 700;break; } itemindex = CHAR_getItemIndex( charaindex, CHAR_ARM ); if( ITEM_CHECKINDEX( itemindex ) == TRUE ){ ITEM_endExistItemsOne( itemindex ); } if( wepon >= 0 ){ itemindex = ITEM_makeItemAndRegist( wepon ) ; CHAR_setItemIndex( charaindex, CHAR_ARM, itemindex ); ITEM_setWorkInt( itemindex, ITEM_WORKCHARAINDEX, charaindex ); ITEM_setWorkInt( itemindex, ITEM_WORKOBJINDEX, -1 ); } switch( DoujyouWeponTbl[work] ){ case -1: case ITEM_AXE: case ITEM_CLUB: case ITEM_SPEAR: return 0; } return 1;}static int BattleERSkill1[]={3, 10, 11, 12, 30, 31, 40, 41, 50, 51, 52, 60, 61, 80, 90, 110, 120, 150, 210,303, 309, 315, 321, 503, 504, 506, 507, 541, 542, 543, 544, 545, 546, 547, 575, 579, 580,606, 613, 615 };static int BattleERSkill2[]={12, 13, 20, 41, 52, 152, 210, 306, 312, 318, 324, 325, 500, 501, 502, 505,508, 541, 542, 543, 544, 545, 546, 547, 576, 580, 594, 606, 613, 616 };void BATTLE_EnemyRandowSetSkill( int enemyindex, int skillType){ int i; switch( skillType){ case 1: for( i=0; i<7; i++){ int skillarray, skillID, Ri; Ri = RAND( 0, arraysizeof( BattleERSkill1) - 1 ); skillID = BattleERSkill1[Ri]; skillarray = PETSKILL_getPetskillArray( skillID); if( PETSKILL_CHECKINDEX( skillarray) == FALSE ){ CHAR_setPetSkill( enemyindex, i, 1); //andy_log print("ANDY EnemyRandowSetSkill( ) skillID:%d array:%d err \n", skillID, skillarray ); continue; } CHAR_setPetSkill( enemyindex, i, skillID); } break; case 2: for( i=0; i<7; i++){ int skillarray, skillID, Ri; Ri = RAND( 0, arraysizeof( BattleERSkill2) - 1 ); skillID = BattleERSkill2[Ri]; skillarray = PETSKILL_getPetskillArray( skillID); if( PETSKILL_CHECKINDEX( skillarray) == FALSE ){ CHAR_setPetSkill( enemyindex, i, 1); //andy_log print("ANDY *EnemyRandowSetSkill( ) skillID:%d array:%d err \n", skillID, skillarray ); continue; } CHAR_setPetSkill( enemyindex, i, skillID); } break; default : return; break; }}int BATTLE_CreateVsEnemy( int charaindex, int mode, int npcindex ){ int battleindex, iRet = 0, enemyindex, i, pindex; int *enemytable = NULL, fd, field_no, baselevel = 0; int skillType=0; int EnemyList[20]; if( CHAR_CHECKINDEX( charaindex ) == FALSE )return BATTLE_ERR_CHARAINDEX;#ifdef _STREET_VENDOR // 擺攤中不可進入戰斗 if( CHAR_getWorkInt(charaindex,CHAR_WORKSTREETVENDOR) > -1) return BATTLE_ERR_END;#endif#ifdef _ANGEL_SUMMON // 裝備使者信物不遇敵 if( CHAR_getWorkInt(charaindex,CHAR_WORKANGELMODE) == TRUE ) return BATTLE_ERR_END;#endif if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE ) != BATTLE_CHARMODE_NONE ){ CHAR_talkToCli( charaindex, -1, "二重遭遇。", CHAR_COLORYELLOW ); return BATTLE_ERR_ALREADYBATTLE; } battleindex = BATTLE_CreateBattle( ); if( battleindex < 0 )return BATTLE_ERR_NOTASK; if( CHAR_CHECKINDEX( npcindex) ){ skillType = CHAR_getWorkInt( npcindex, CHAR_NPCWORKINT11); } field_no = BATTLE_getBattleFieldNo( CHAR_getInt( charaindex, CHAR_FLOOR ) , CHAR_getInt( charaindex, CHAR_X ) , CHAR_getInt( charaindex, CHAR_Y ) ); if( field_no > BATTLE_MAP_MAX || field_no < 0 ){ field_no = RAND( 0, BATTLE_MAP_MAX ); } BattleArray[battleindex].Side[0].type = BATTLE_S_TYPE_PLAYER; BattleArray[battleindex].Side[1].type = BATTLE_S_TYPE_ENEMY; BattleArray[battleindex].leaderindex = charaindex; BattleArray[battleindex].type = BATTLE_TYPE_P_vs_E; BattleArray[battleindex].createindex = npcindex; BattleArray[battleindex].field_no = field_no; //andy_edit 2002/10/23 /* if( (iRet = BATTLE_PartyNewEntry( charaindex, battleindex, 0 ) ) ){ goto BATTLE_CreateVsEnemy_End; } */ BattleArray[battleindex].Side[0].flg &= ~BSIDE_FLG_HELP_OK; if( mode == 0 ) { enemytable = ENEMY_getEnemy( charaindex, CHAR_getInt( charaindex, CHAR_X), CHAR_getInt( charaindex, CHAR_Y)); }else if( mode == 1 ) { enemytable = NPC_Util_getEnemy( npcindex, charaindex); }else if( mode == 2 ) { enemytable = Doujyou_GetEnemy( npcindex, charaindex ); baselevel = CHAR_getInt( npcindex, CHAR_LV ); BattleArray[battleindex].norisk = 1; } if( enemytable == NULL ) { iRet = BATTLE_ERR_NOENEMY; goto BATTLE_CreateVsEnemy_End; } for( i = 0; *(enemytable+i)!= -1 && i < arraysizeof( EnemyList )-1; i ++ ){ EnemyList[i] = *(enemytable+i); } EnemyList[i] = -1;#ifdef _BATTLE_TIMESPEED fd = getfdFromCharaIndex( charaindex ); BattleArray[battleindex].CreateTime = time(NULL); BattleArray[battleindex].flgTime = 200; // 1/100 sec#endif#ifdef _ACTION_BULLSCR#ifndef _BULL_CUTBULLSCR BattleArray[battleindex].enemynum=0;#endif#endif for( i = 0; EnemyList[i] != -1; i ++ ){ int work; enemyindex = ENEMY_createEnemy( EnemyList[i], baselevel );#ifdef _ACTION_BULLSCR#ifndef _BULL_CUTBULLSCR BattleArray[battleindex].enemynum++;#endif#endif if( skillType > 0 ){ //int ENEMY_RandomChange( int enemyindex, int tempno ){ BATTLE_EnemyRandowSetSkill( enemyindex, skillType); } if( enemyindex < 0 ){ iRet = BATTLE_ERR_NOENEMY; goto BATTLE_CreateVsEnemy_End; } if( mode == 2 ){ if( i == 0 ){ CHAR_setInt( enemyindex, CHAR_BASEBASEIMAGENUMBER, CHAR_getInt( npcindex, CHAR_BASEBASEIMAGENUMBER ) ); CHAR_setInt( enemyindex, CHAR_BASEIMAGENUMBER, CHAR_getInt( npcindex, CHAR_BASEBASEIMAGENUMBER ) ); CHAR_setChar( enemyindex, CHAR_NAME, CHAR_getChar( npcindex, CHAR_NAME ) ); CHAR_complianceParameter( enemyindex ); } } if( ( iRet = BATTLE_NewEntry( enemyindex, battleindex, 1 ) ) ){ goto BATTLE_CreateVsEnemy_End; } if( CHAR_getInt( enemyindex, CHAR_DUELPOINT ) > 0 ){ BattleArray[battleindex].dpbattle = 1; } work = CHAR_getInt( enemyindex, CHAR_BASEBASEIMAGENUMBER ); if( 100466 <= work && work <= 100471 ){ CHAR_setWorkInt( enemyindex, CHAR_WORKBATTLEFLG, CHAR_getWorkInt( enemyindex, CHAR_WORKBATTLEFLG ) | CHAR_BATTLEFLG_ABIO ); print( "(%s)無生物\n", CHAR_getUseName( enemyindex ) ); } } //andy_edit 2002/10/23 if( (iRet = BATTLE_PartyNewEntry( charaindex, battleindex, 0 ) ) ){ goto BATTLE_CreateVsEnemy_End; } { BATTLE_ENTRY *pEntry, EntryWork; pEntry = BattleArray[battleindex].Side[1].Entry; for( i = 0; i < 5; i ++ ){ EntryWork = pEntry[i]; pEntry[i] = pEntry[i+5]; pEntry[i+5] = EntryWork; pEntry[i].bid = i + SIDE_OFFSET; pEntry[i+5].bid = i + 5 + SIDE_OFFSET; } }BATTLE_CreateVsEnemy_End:; fd = getfdFromCharaIndex( charaindex); if( iRet ){ BATTLE_ExitAll( battleindex ); BATTLE_DeleteBattle( battleindex ); if( fd != -1 )lssproto_EN_send( fd, FALSE, field_no ); }else{ if( fd != -1 ){ if( BattleArray[battleindex].dpbattle ){ lssproto_EN_send( fd, BATTLE_TYPE_DP_BATTLE, field_no ); }else{ if( mode == 1 ){ lssproto_EN_send( fd, BATTLE_TYPE_BOSS_BATTLE, field_no ); }else{ lssproto_EN_send( fd, BattleArray[battleindex].type, field_no ); } } }else { BATTLE_ExitAll( battleindex ); BATTLE_DeleteBattle( battleindex ); return iRet; } for( i = 1; i < CHAR_PARTYMAX; i ++ ){ pindex = CHAR_getWorkInt( charaindex, i + CHAR_WORKPARTYINDEX1 ); if( CHAR_CHECKINDEX( pindex ) == FALSE )continue; if( CHAR_getWorkInt( pindex, CHAR_WORKBATTLEMODE ) == BATTLE_CHARMODE_FINAL ) continue; fd = getfdFromCharaIndex(pindex); if( fd != -1 ){ if( mode == 1 ){ lssproto_EN_send( fd, BATTLE_TYPE_BOSS_BATTLE, field_no ); }else{ lssproto_EN_send( fd, BattleArray[battleindex].type, field_no ); } } } if( CHAR_getWorkInt( charaindex, CHAR_WORKACTION) != -1 ) { CHAR_sendWatchEvent( CHAR_getWorkInt( charaindex, CHAR_WORKOBJINDEX), CHAR_ACTSTAND, NULL, 0, FALSE); CHAR_setWorkInt( charaindex, CHAR_WORKACTION, -1); } CHAR_sendBattleEffect( charaindex, ON); for( i = 1; i < CHAR_PARTYMAX; i ++ ){ pindex = CHAR_getWorkInt( charaindex, i + CHAR_WORKPARTYINDEX1 ); if( CHAR_CHECKINDEX( pindex ) == FALSE )continue; if( CHAR_getWorkInt( pindex, CHAR_WORKACTION) != -1 ) { CHAR_sendWatchEvent( CHAR_getWorkInt( pindex, CHAR_WORKOBJINDEX), CHAR_ACTSTAND, NULL, 0, FALSE); CHAR_setWorkInt( pindex, CHAR_WORKACTION, -1); } CHAR_sendBattleEffect( pindex, ON); } } return iRet;}int BATTLE_CreateVsPlayer( int charaindex0, int charaindex1 ){ int battleindex, pindex, field_no, i, j, charaindex[2], parent[2], fd, iRet = 0; if( CHAR_CHECKINDEX( charaindex0 ) == FALSE )return BATTLE_ERR_CHARAINDEX; if( CHAR_CHECKINDEX( charaindex1 ) == FALSE )return BATTLE_ERR_CHARAINDEX; if( CHAR_getWorkInt( charaindex0, CHAR_WORKBATTLEMODE ) != BATTLE_CHARMODE_NONE ){ CHAR_talkToCli( charaindex0, -1, "二重遭遇。", CHAR_COLORYELLOW ); CHAR_talkToCli( charaindex1, -1, "二重遭遇。", CHAR
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -