📄 battle.c
字号:
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; 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 for( i = 0; EnemyList[i] != -1; i ++ ){ int work; enemyindex = ENEMY_createEnemy( EnemyList[i], baselevel ); 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_COLORYELLOW ); return BATTLE_ERR_ALREADYBATTLE; } if( CHAR_getWorkInt( charaindex1, CHAR_WORKBATTLEMODE ) != BATTLE_CHARMODE_NONE ){ CHAR_talkToCli( charaindex0, -1, "二重遭遇。", CHAR_COLORYELLOW ); CHAR_talkToCli( charaindex1, -1, "二重遭遇。", CHAR_COLORYELLOW ); return BATTLE_ERR_ALREADYBATTLE; } field_no = BATTLE_getBattleFieldNo( CHAR_getInt( charaindex0, CHAR_FLOOR ) , CHAR_getInt( charaindex0, CHAR_X ), CHAR_getInt( charaindex0, CHAR_Y ) ); charaindex[0] = charaindex0; charaindex[1] = charaindex1; for( j = 0; j < 2; j ++ ){ if( CHAR_getWorkInt( charaindex[j], CHAR_WORKBATTLEMODE ) != 0 ){ return BATTLE_ERR_ALREADYBATTLE; } } for( j = 0; j < 2; j ++ ){ if( CHAR_getWorkInt( charaindex[j], CHAR_WORKPARTYMODE ) == CHAR_PARTY_LEADER ){ parent[j] = charaindex[j]; }else if( CHAR_getWorkInt( charaindex[j], CHAR_WORKPARTYMODE ) == CHAR_PARTY_CLIENT ){ parent[j] = CHAR_getWorkInt( charaindex[j], CHAR_WORKPARTYINDEX1 ); }else{ parent[j] = -1; } } if( parent[0] != -1 && parent[0] == parent[1] ){ return BATTLE_ERR_SAMEPARTY; } battleindex = BATTLE_CreateBattle( ); if( battleindex < 0 )return BATTLE_ERR_NOTASK; BattleArray[battleindex].Side[0].type = BATTLE_S_TYPE_PLAYER; BattleArray[battleindex].Side[1].type = BATTLE_S_TYPE_PLAYER; BattleArray[battleindex].leaderindex = charaindex0;#ifdef _AUTO_PK strcpy(BattleArray[battleindex].leadercdkey,CHAR_getChar(charaindex0,CHAR_CDKEY)); strcpy(BattleArray[battleindex].leadername,CHAR_getChar(charaindex0,CHAR_NAME)); BattleArray[battleindex].rivalindex = charaindex1; strcpy(BattleArray[battleindex].rivalcdkey,CHAR_getChar(charaindex1,CHAR_CDKEY)); strcpy(BattleArray[battleindex].rivalname,CHAR_getChar(charaindex1,CHAR_NAME));#endif BattleArray[battleindex].type = BATTLE_TYPE_P_vs_P; BattleArray[battleindex].dpbattle = 1; BattleArray[battleindex].field_no = field_no;#ifdef _BATTLE_TIMESPEED BattleArray[battleindex].CreateTime = time(NULL);#endif for( j = 0; j < 2; j ++ ){ iRet = BATTLE_PartyNewEntry( charaindex[j], battleindex, j ); if( iRet ){ goto BATTLE_CreateVsPlayer_End; } BattleArray[battleindex].Side[j].flg &= ~BSIDE_FLG_HELP_OK; }BATTLE_CreateVsPlayer_End:; if( iRet ){ BATTLE_ExitAll( battleindex ); BATTLE_DeleteBattle( battleindex ); fd = getfdFromCharaIndex(charaindex[0]); if( fd != -1 )lssproto_EN_send( fd, FALSE, field_no ); }else{ for( j = 0; j < 2; j ++ ){ fd = getfdFromCharaIndex(charaindex[j]); if( fd != -1 )lssproto_EN_send( fd, BattleArray[battleindex].type, field_no ); if( CHAR_getWorkInt( charaindex[j], CHAR_WORKACTION) != -1 ) { CHAR_sendWatchEvent( CHAR_getWorkInt( charaindex[j], CHAR_WORKOBJINDEX), CHAR_ACTSTAND, NULL, 0, FALSE); CHAR_setWorkInt( charaindex[j], CHAR_WORKACTION, -1); } CHAR_sendBattleEffect( charaindex[j], ON); for( i = 1; i < CHAR_PARTYMAX; i ++ ){ pindex = CHAR_getWorkInt( charaindex[j], 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 )lssproto_EN_send( fd, BattleArray[battleindex].type, field_no ); 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_WatchLink( int topbattleindex, int battleindex )//////*********************************************************{ BATTLE *pWork, *pTop; if( BATTLE_CHECKINDEX( battleindex ) == FALSE ){ fprint( "err:battle index 奇怪(%d)\n", battleindex ); return FALSE; } if( BATTLE_CHECKINDEX( topbattleindex ) == FALSE ){ fprint( "err:battle index 奇怪(%d)\n", topbattleindex ); return FALSE; } pTop = &BattleArray[topbattleindex]; if( BATTLE_CHECKADDRESS( pTop ) == FALSE ){ fprint( "err:battle address 奇怪(%p)\n", pTop ); return FALSE; } pWork = pTop->pNext; // 田永弁失永皿 if( pWork ){ if( BATTLE_CHECKADDRESS( pWork ) == FALSE ){ fprint( "err:battle address 奇怪(%p)\n", pWork ); return FALSE; } } // 愤坌毛蟆及戚卞允月 pTop->pNext = &BattleArray[battleindex]; // 愤坌及蟆田玄伙毛涩烂 BattleArray[battleindex].pBefore = pTop; // 愤坌及戚田玄伙毛涩烂 BattleArray[battleindex].pNext = pWork; // 戚及蟆反愤坌 if( pWork ){ pWork->pBefore = &BattleArray[battleindex]; } return TRUE;}//*********************************************************//// 棋爵迕田玄伙正旦弁毛夫午勾 仁//int BATTLE_WatchUnLink( int battleindex )//////*********************************************************{ BATTLE *pTop; if( BATTLE_CHECKINDEX( battleindex ) == FALSE ){ fprint( "err:battle index 奇怪(%d)\n", battleindex ); return FALSE; } // 愤坌毛蟆及田玄伙 pTop = BattleArray[battleindex].pBefore; if( pTop ){ if( BATTLE_CHECKADDRESS( pTop ) == FALSE ){ fprint( "err:battle address 奇怪(%p)\n", pTop ); }else{ // 勾卅亢卅云仄 pTop->pNext = BattleArray[battleindex].pNext; } } if( BattleArray[battleindex].pNext ){ if( BATTLE_CHECKADDRESS( BattleArray[battleindex].pNext ) == FALSE ){ fprint( "err:battle address 奇怪(%p)\n", BattleArray[battleindex].pNext ); }else{ BattleArray[battleindex].pNext->pBefore = pTop; } } // 愤坌及蟆田玄伙毛涩烂 BattleArray[battleindex].pBefore = NULL; // 愤坌及戚田玄伙反 仄 BattleArray[battleindex].pNext = NULL; return TRUE;}//*********************************************************//// 棋爵迕卞田玄伙正旦弁毛综岳允月//int BATTLE_CreateForWatcher( int charaindex, int topbattleindex )//// 曰袄 BATTLE_ERR////*********************************************************{ int battleindex, field_no , pindex, i, fd, iRet = 0; // 由仿丢□正民尼永弁 if( CHAR_CHECKINDEX( charaindex ) == FALSE )return BATTLE_ERR_CHARAINDEX; if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE ) != BATTLE_CHARMODE_NONE ){ CHAR_talkToCli( charaindex, -1, "二重遭遇。", CHAR_COLORYELLOW ); return BATTLE_ERR_ALREADYBATTLE; } // 允匹卞爵 匹卅中井 if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE ) != 0 ){ return BATTLE_ERR_ALREADYBATT
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -