📄 battle_event.c
字号:
level = 3; } if( level != crushlevel && defs < 70 ) { ITEM_setInt( itemindex, ITEM_CRUSHLEVEL, level);// for( i = 0; i < arraysizeof( ItemBreakPos ); i ++ ){// work = ITEM_getInt( itemindex, ItemBreakPos[i] );// if( work <= 0 )continue;// work *=0.95;// ITEM_setInt( itemindex, ItemBreakPos[i], work );// } sprintf( szBuffer, "%s是%s的。", ITEM_getChar( itemindex, ITEM_NAME ), aszCrushTbl[level] ); CHAR_talkToCli( charaindex, -1, szBuffer, CHAR_COLORRED); //更改道具说明// buf1 = ITEM_getChar( itemindex, ITEM_SECRETNAME);// if( strstr( buf1, "(") != 0 ) {// char buf5[256];// if( getStringFromIndexWithDelim( buf1,"(",1, buf5, sizeof( buf5)) != FALSE ) {// sprintf( buf1, buf5);// }// }// sprintf( buf2, "%s(%s)", buf1, aszCrushTbl[level]);// ITEM_setChar( itemindex, ITEM_SECRETNAME, buf2); } } CHAR_sendItemDataOne( charaindex, ItemEquip ); CHAR_complianceParameter( charaindex ); CHAR_send_P_StatusString( charaindex, CHAR_P_STRING_ATK | CHAR_P_STRING_DEF | CHAR_P_STRING_QUICK | CHAR_P_STRING_CHARM ); return TRUE;}#elseint BATTLE_ItemCrush( int charaindex ){ int EquipTbl[CHAR_EQUIPPLACENUM], i, itemindex, rndwork, type; int work, crushlevel, j, ItemEquip; char szBuffer[256]=""; int ItemBreakPos[] = { ITEM_ATTACKNUM_MIN, ITEM_ATTACKNUM_MAX, ITEM_MODIFYATTACK, ITEM_MODIFYDEFENCE, ITEM_MODIFYQUICK, ITEM_MODIFYHP, ITEM_MODIFYMP, ITEM_MODIFYLUCK, ITEM_MODIFYCHARM, ITEM_MODIFYAVOID, }; for( j = 0, i = 0; i < CHAR_EQUIPPLACENUM; i ++ ){ itemindex = CHAR_getItemIndex( charaindex, i ); if( ITEM_CHECKINDEX( itemindex ) == TRUE && ITEM_getInt( itemindex, ITEM_MERGEFLG ) == 1 ){ EquipTbl[j] = i; j ++; } } if( j == 0 )return FALSE; rndwork = RAND( 0, j-1 ); ItemEquip = EquipTbl[rndwork]; itemindex = CHAR_getItemIndex( charaindex, ItemEquip ); if( ITEM_CHECKINDEX( itemindex ) == FALSE )return FALSE; crushlevel = ITEM_getInt( itemindex, ITEM_CRUSHLEVEL ); if( crushlevel > 1 ) return FALSE; { if( crushlevel == 1 ){ sprintf( szBuffer, "CrushLv2(毁坏道具Lv2)" ); }else{ sprintf( szBuffer, "CrushLv1(毁坏道具Lv1)" ); } LogItem( CHAR_getChar( charaindex, CHAR_NAME ), CHAR_getChar( charaindex, CHAR_CDKEY ),#ifdef _add_item_log_name // WON ADD 在item的log中增加item名称 itemindex,#else ITEM_getInt( itemindex, ITEM_ID ),#endif szBuffer, CHAR_getInt( charaindex,CHAR_FLOOR), CHAR_getInt( charaindex,CHAR_X ), CHAR_getInt( charaindex,CHAR_Y ), ITEM_getChar( itemindex, ITEM_UNIQUECODE), ITEM_getChar( itemindex, ITEM_NAME), ITEM_getInt( itemindex, ITEM_ID) ); } /*{ int battleindex, bid; //sprintf( szBuffer, "(%s)的(%s)是(%s)\n", // CHAR_getUseName( charaindex ), // ITEM_getChar( itemindex, ITEM_NAME ), // aszCrushTbl[crushlevel] ); battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX ); bid = BATTLE_Index2No( battleindex, charaindex ); //BATTLE_BroadCast( battleindex, szBuffer, (bid >= 10)? CHAR_COLORGRAY : CHAR_COLORPURPLE ) ; }*/ type = ITEM_getInt( itemindex, ITEM_TYPE ); szBuffer[0] = 0; switch( type ){ case ITEM_FIST: case ITEM_AXE: case ITEM_CLUB: case ITEM_SPEAR: case ITEM_BOW: case ITEM_BOOMERANG: case ITEM_BOUNDTHROW: case ITEM_BREAKTHROW: sprintf( szBuffer, "%s%s", aszCrushTbl[crushlevel], BREAK_NAME_WEPON ); break; case ITEM_HELM: case ITEM_ARMOUR: sprintf( szBuffer, "%s%s", aszCrushTbl[crushlevel], BREAK_NAME_AROMER ); break; case ITEM_BRACELET: sprintf( szBuffer, "%s%s", aszCrushTbl[crushlevel], BREAK_BRACELET );break; case ITEM_MUSIC: sprintf( szBuffer, "%s%s", aszCrushTbl[crushlevel], BREAK_MUSIC );break; case ITEM_NECKLACE: sprintf( szBuffer, "%s%s", aszCrushTbl[crushlevel], BREAK_NECKLACE );break; case ITEM_RING: sprintf( szBuffer, "%s%s", aszCrushTbl[crushlevel], BREAK_RING );break; case ITEM_BELT: sprintf( szBuffer, "%s%s", aszCrushTbl[crushlevel], BREAK_BELT );break; case ITEM_EARRING: sprintf( szBuffer, "%s%s", aszCrushTbl[crushlevel], BREAK_EARRING );break; case ITEM_NOSERING: sprintf( szBuffer, "%s%s", aszCrushTbl[crushlevel], BREAK_NOSERING );break; case ITEM_AMULET: sprintf( szBuffer, "%s%s", aszCrushTbl[crushlevel], BREAK_AMULET );break; case ITEM_OTHER: sprintf( szBuffer, "%s%s", aszCrushTbl[crushlevel], BREAK_OTHER );break; default: sprintf( szBuffer, "%s%s", aszCrushTbl[crushlevel], BREAK_OTHER );break; break; } ITEM_setChar( itemindex, ITEM_SECRETNAME, szBuffer ); for( i = 0; i < arraysizeof( ItemBreakPos ); i ++ ){ work = ITEM_getInt( itemindex, ItemBreakPos[i] ); if( work <= 0 )continue; if( crushlevel == 1 ){ work = 1; }else{ work /= 2; if( work < 1 ) work = 1; } ITEM_setInt( itemindex, ItemBreakPos[i], work ); } CHAR_sendItemDataOne( charaindex, ItemEquip ); ITEM_setInt( itemindex, ITEM_CRUSHLEVEL, crushlevel + 1 ); CHAR_complianceParameter( charaindex ); CHAR_send_P_StatusString( charaindex, CHAR_P_STRING_ATK | CHAR_P_STRING_DEF | CHAR_P_STRING_QUICK | CHAR_P_STRING_CHARM ); return TRUE;}#endif#ifdef _TAKE_ITEMDAMAGEstatic int BATTLE_ItemCrushSeq( int attackindex, int charaindex, int Damages){ int iRet = FALSE; int crushindex=-1, crushpower; int flg=0;//flg def 1 att 2 flg=1; if( ( crushindex = BATTLE_ItemCrushCheck( charaindex, flg) ) >= 0 ) { if( CHAR_getInt( charaindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER ){ crushpower = CHAR_getWorkInt( attackindex, CHAR_WORKATTACKPOWER); BATTLE_ItemCrush( charaindex, crushindex, Damages, flg); } } flg=2; if( ( crushindex = BATTLE_ItemCrushCheck( attackindex, flg) ) >= 0 ) { if( CHAR_getInt( attackindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER ){ crushpower = CHAR_getWorkInt( charaindex, CHAR_WORKDEFENCEPOWER); BATTLE_ItemCrush( attackindex, crushindex, Damages, flg); } } return iRet;}#elsestatic int BATTLE_ItemCrushSeq( int charaindex ){ char szWork[256]; int iRet = FALSE; if( BATTLE_ItemCrushCheck( charaindex ) == TRUE ){ if( BATTLE_ItemCrush( charaindex ) == TRUE ){ sprintf( szWork, "BK|%s的\t装备受到损伤。", CHAR_getUseName( charaindex ) ); strcat( szBadStatusString, szWork ); iRet = TRUE; } } return iRet;}#endif//回避判定static BOOL BATTLE_DuckCheck( int attackindex, int defindex){ int flg = FALSE; int Df_Dex, At_Dex, Df_Luck = 0; float per, Work, wari, Big, Small; gDuckPer = 0; if( CHAR_getWorkInt( defindex, CHAR_WORKBATTLECOM1 ) == BATTLE_COM_GUARD ){ return FALSE; } if( BATTLE_GetDamageReact( defindex ) > 0 ){ return FALSE; } if( BATTLE_CanMoveCheck( defindex ) == FALSE ){ return FALSE; } if( CHAR_getWorkInt( defindex, CHAR_WORKBATTLEFLG ) & CHAR_BATTLEFLG_NODUCK ){ return FALSE; } if( CHAR_getWorkInt( defindex, CHAR_WORKBATTLEFLG ) & CHAR_BATTLEFLG_ABIO ){ return FALSE; }#ifdef _PETSKILL_SETDUCK if( BATTLE_CheckMySkillDuck( defindex ) == TRUE ){ return TRUE; }#endif At_Dex = CHAR_getWorkInt( attackindex, CHAR_WORKFIXDEX ); Df_Dex = CHAR_getWorkInt( defindex, CHAR_WORKFIXDEX ); if( CHAR_getInt( defindex, CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER ){ Df_Luck = CHAR_getWorkInt( defindex, CHAR_WORKFIXLUCK ); } if( CHAR_getInt( attackindex, CHAR_WHICHTYPE ) == CHAR_TYPEENEMY && CHAR_getInt( defindex, CHAR_WHICHTYPE ) == CHAR_TYPEPET ){ At_Dex *= 0.8; }else if( CHAR_getInt( attackindex, CHAR_WHICHTYPE ) != CHAR_TYPEENEMY && CHAR_getInt( defindex, CHAR_WHICHTYPE ) == CHAR_TYPEPET ){ Df_Dex *= 0.8; }else if( CHAR_getInt( attackindex, CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER && CHAR_getInt( defindex, CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER ){ At_Dex *= 0.6; }else if( CHAR_getInt( attackindex, CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER && CHAR_getInt( defindex, CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ){ Df_Dex *= 0.6; } if( Df_Dex >= At_Dex ){ Big = Df_Dex; Small = At_Dex; wari = 1.0; }else{ Big = At_Dex; Small = Df_Dex; if( Big <= 0 ){ wari = 0.0; }else{ wari = Small / Big; } } if( CHAR_getWorkInt( defindex, CHAR_WORKBATTLECOM1 ) == BATTLE_COM_JYUJYUTU ){ gKawashiPara = 0.027; }else{ gKawashiPara = 0.02; } Work = ( Big - Small ) / gKawashiPara; if( Work <= 0 ) Work = 0; per = (float)( sqrt( (double)Work ) ); per *= wari; per += Df_Luck; per += gBattleDuckModyfy; if( CHAR_getWorkInt( attackindex, CHAR_WORKDRUNK ) > 0 ){ per += RAND( 20, 30 ); } if( gWeponType == ITEM_BOW ){ per += 20; } if( CHAR_getWorkInt( defindex, CHAR_WORKBATTLECOM1 ) == BATTLE_COM_S_NOGUARD ){ per += CHAR_GETWORKINT_HIGH( defindex, CHAR_WORKBATTLECOM3 ); } if( gWeponType == ITEM_BOW ){ per += 20; } per *= 100; if( per > KAWASHI_MAX_RATE*100 ) per = KAWASHI_MAX_RATE*100; if( per <= 0 ) per = 1; gDuckPer = per * 0.01;#ifdef _EQUIT_HITRIGHT if( CHAR_getInt( attackindex, CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER ){ int AddHit = CHAR_getWorkInt( attackindex, CHAR_WORKHITRIGHT); per -= RAND( AddHit*0.8, AddHit*1.2); per = ( per < 0 )?0:per; }#endif#ifdef _PROFESSION_SKILL // WON ADD 人物职业技能 per = BATTLE_check_profession_duck( defindex, per );#endif if( RAND( 1, 10000 ) <= per ){ flg = TRUE;#ifdef _PROFESSION_SKILL // WON ADD 人物职业技能 // 回避技能升级 if( (CHAR_getInt( defindex, CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER) ){ PROFESSION_SKILL_LVEVEL_UP( defindex, "PROFESSION_AVOID" ); } #endif }else{ flg = FALSE; } return flg;}static int BATTLE_AttrCalc( int My_Fire, int My_Water, int My_Earth, int My_Wind, int My_None, int Vs_Fire, int Vs_Water, int Vs_Earth, int Vs_Wind, int Vs_None){ int iRet = 0; My_Fire = My_Fire * Vs_None * AJ_UP + My_Fire * Vs_Fire * AJ_SAME + My_Fire * Vs_Water * AJ_DOWN + My_Fire * Vs_Earth * AJ_SAME + My_Fire * Vs_Wind * AJ_UP; My_Water = My_Water * Vs_None * AJ_UP + My_Water * Vs_Fire * AJ_UP + My_Water * Vs_Water * AJ_SAME + My_Water * Vs_Earth * AJ_DOWN + My_Water * Vs_Wind * AJ_SAME; My_Earth = My_Earth * Vs_None * AJ_UP + My_Earth * Vs_Fire * AJ_SAME + My_Earth * Vs_Water * AJ_UP + My_Earth * Vs_Earth * AJ_SAME + My_Earth * Vs_Wind * AJ_DOWN; My_Wind = My_Wind * Vs_None * AJ_UP + My_Wind * Vs_Fire * AJ_DOWN + My_Wind * Vs_Water * AJ_SAME + My_Wind * Vs_Earth * AJ_UP + My_Wind * Vs_Wind * AJ_SAME; My_None = My_None * Vs_None * AJ_SAME + My_None * Vs_Fire * AJ_DOWN + My_None * Vs_Water * AJ_DOWN + My_None * Vs_Earth * AJ_DOWN + My_None * Vs_Wind * AJ_DOWN; iRet = (My_Fire + My_Water + My_Earth + My_Wind + My_None) ; return (iRet * D_ATTR);}static void BATTLE_GetAttr( int charaindex, int *T_pow ){#ifdef _BATTLE_NEWPOWER#else int petindex = BATTLE_getRidePet( charaindex ); if( petindex == -1 ){#endif T_pow[0] = CHAR_getWorkInt( charaindex, CHAR_WORKFIXEARTHAT ); T_pow[1] = CHAR_getWorkInt( charaindex, CHAR_WORKFIXWATERAT ); T_pow[2] = CHAR_getWorkInt( charaindex, CHAR_WORKFIXFIREAT ); T_pow[3] = CHAR_getWorkInt( charaindex, CHAR_WORKFIXWINDAT );/* *pAt_Fire = CHAR_getWorkInt( charaindex, CHAR_WORKFIXFIREAT ); *pAt_Water = CHAR_getWorkInt( charaindex, CHAR_WORKFIXWATERAT ); *pAt_Earth = CHAR_getWorkInt( charaindex, CHAR_WORKFIXEARTHAT ); *pAt_Wind = CHAR_getWorkInt( charaindex, CHAR_WORKFIXWINDAT );*/#ifdef _BATTLE_NEWPOWER#else }else { // Robin 0727 when Ride Pet#endif#ifdef _BATTLE_NEWPOWER#else T_pow[0] = ( CHAR_getWorkInt( charaindex, CHAR_WORKFIXEARTHAT ) + CHAR_getWorkInt( petindex, CHAR_WORKFIXEARTHAT )) /2; T_pow[1] = ( CHAR_getWorkInt( charaindex, CHAR_WORKFIXWATERAT ) + CHAR_getWorkInt( petindex, CHAR_WORKFIXWATERAT )) /2; T_pow[2] = ( CHAR_getWorkInt( charaindex, CHAR_WORKFIXFIREAT ) + CHAR_getWorkInt( petindex, CHAR_WORKFIXFIREAT )) /2; T_pow[3] = ( CHAR_getWorkInt( charaindex, CHAR_WORKFIXWINDAT ) + CHAR_getWorkInt( petindex, CHAR_WORKFIXWINDAT )) /2;/* *pAt_Fire = ( CHAR_getWorkInt( charaindex, CHAR_WORKFIXFIREAT ) + CHAR_getWorkInt( petindex, CHAR_WORKFIXFIREAT )) /2; *pAt_Water = ( CHAR_getWorkInt( charaindex, CHAR_WORKFIXWATERAT ) + CHAR_getWorkInt( petindex, CHAR_WORKFIXWATERAT )) /2; *pAt_Earth = ( CHAR_getWorkInt( charaindex, CHAR_WORKFIXEARTHAT ) + CHAR_getWorkInt( petindex, CHAR_WORKFIXEARTHAT )) /2; *pAt_Wind = ( CHAR_getWorkInt( charaindex, CHAR_WORKFIXWINDAT ) + CHAR_getWorkInt( petindex, CHAR_WORKFIXWINDAT )) /2;*/ }#endif#ifdef _SUIT_TWFWENDUM T_pow[0] = (T_pow[0]+CHAR_getWorkInt( charaindex, CHAR_WORK_EA ))>100?100:(T_pow[0]+CHAR_getWorkInt( charaindex, CHAR_WORK_EA )); T_pow[1] = (T_pow[1]+CHAR_getWorkInt( charaindex, CHAR_WORK_WR ))>100?100:(T_pow[1]+CHAR_getWorkInt( charaindex, CHAR_WORK_EA )); T_pow[2] = (T_pow[2]+CHAR_getWorkInt( charaindex, CHAR_WORK_FI ))>100?100:(T_pow[2]+CHAR_getWorkInt( charaindex, CHAR_WORK_EA )); T_pow[3] = (T_pow[3]+CHAR_getWorkInt( charaindex, CHAR_WORK_WI ))>100?100:(T_pow[3]+CHAR_getWorkInt( charaindex, CHAR_WORK_EA ));#endif { int i, renum=ATTR_MAX; for( i=0; i<4; i++) { if( T_pow[ i] < 0 ) T_pow[ i] = 0; renum -= T_pow[ i]; } if( renum < 0 ) renum = 0; T_pow[ 4] = renum; }/* if( *pAt_Fire < 0 ) *pAt_Fire = 0; if( *pAt_Water < 0 ) *pAt_Water = 0; if( *pAt_Earth < 0 ) *pAt_Earth = 0; if( *pAt_Wind < 0 ) *pAt_Wind = 0; *pAt_None = ATTR_MAX - *pAt_Fire - *pAt_Water - *pAt_Earth - *pAt_Wind; if( *pAt_None < 0 )*pAt_None = 0;*/}float BATTLE_FieldAttAdjust( int battleindex,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -