?? battle_event.c
字號(hào):
#include "version.h"#include <string.h>#include <math.h>#include "char.h"#include "char_event.h"#include "battle.h"#include "battle_event.h"#include "configfile.h"#include "pet.h"#include "log.h"#include "lssproto_serv.h"#include "anim_tbl.h"#include "battle_magic.h"#include "util.h"#include "enemy.h"#include "pet_skill.h"#include "char_base.h"#include "item_event.h"#ifdef _PROFESSION_SKILL // WON ADD 人物職業(yè)技能#include "profession_skill.h"#include "item.h"#include "skill.h"#endif#ifdef _PETSKILL_LER#include "magic_base.h"#endif#define DEFENSE_RATE (0.5)#define DAMAGE_RATE (2.0)#define CRITICAL_RATE (1.0)#define KAWASHI_MAX_RATE (75)#define AJ_SAME (1.0)#define AJ_UP (1.5)#define AJ_DOWN (0.6)#define ATTR_MAX 100#define D_ATTR (1.0/(ATTR_MAX*ATTR_MAX))#define D_16 (1.0/16)#define D_8 (1.0/8)float gKawashiPara = 0.02;float gCounterPara = 0.08;float gCriticalPara = 0.09;float gBattleDamageModyfy;int gBattleDuckModyfy;int gBattleStausChange;int gBattleStausTurn;float gDuckPer;int gCriper;int gBattleBadStatusTbl[BATTLE_ENTRY_MAX*2];#ifdef _OTHER_MAGICSTAUTS#ifdef _MAGICSTAUTS_RESISTchar MagicStatus[MAXSTATUSTYPE][36] = { "NULL","魔抗","鐵壁","火抗","電抗","冰抗"};int MagicTbl[] = { -1, CHAR_DEFMAGICSTATUS, CHAR_MAGICSUPERWALL, CHAR_MAGICFIRE, CHAR_MAGICTHUNDER, CHAR_MAGICICE };#elsechar MagicStatus[MAXSTATUSTYPE][36] = { "NULL","魔抗","鐵壁"};int MagicTbl[] = { -1, CHAR_DEFMAGICSTATUS, CHAR_MAGICSUPERWALL };#endif //_MAGICSTAUTS_RESIST#endifchar *aszStatus[] = { "全", "毒", "麻", "眠", "石", "醉", "亂", "虛", "劇", "障", "默" #ifdef _PET_SKILL_SARS // WON ADD 毒煞蔓延 ,"煞"#endif#ifdef _PROFESSION_SKILL // WON ADD 人物職業(yè)技能 ,"暈","纏","羅","爆","忘","箭","蠱","針","挑","燒","霜","電","專","火","冰","雷","炎","凍","擊"#endif#ifdef _PROFESSION_ADDSKILL ,"抗"#endif};char *aszStatusFull[] = { "全快", "毒", "麻痹", "睡眠", "石化", "酒醉", "混亂", "虛弱", "劇毒", "魔障", "沉默" #ifdef _PET_SKILL_SARS // WON ADD 毒煞蔓延 ,"毒煞"#endif#ifdef _PROFESSION_SKILL // WON ADD 人物職業(yè)技能 ,"暈眩","纏繞","天羅","冰爆","遺忘","冰箭","嗜血蠱","一針見血","挑撥","火附體", "冰附體","雷附體","專注戰(zhàn)斗","火抗","冰抗","雷抗","火附","冰附","雷附"#endif};int StatusTbl[] = { -1, CHAR_WORKPOISON, CHAR_WORKPARALYSIS, CHAR_WORKSLEEP, CHAR_WORKSTONE, CHAR_WORKDRUNK, CHAR_WORKCONFUSION, CHAR_WORKWEAKEN, CHAR_WORKDEEPPOISON, CHAR_WORKBARRIER, CHAR_WORKNOCAST#ifdef _PET_SKILL_SARS // WON ADD 毒煞蔓延 ,CHAR_WORKSARS#endif#ifdef _PROFESSION_SKILL // WON ADD 人物職業(yè)技能 ,CHAR_WORKDIZZY, CHAR_WORKENTWINE ,CHAR_WORKDRAGNET, CHAR_WORKICECRACK ,CHAR_WORKOBLIVION, CHAR_WORKICEARROW ,CHAR_WORKBLOODWORMS, CHAR_WORKSIGN ,CHAR_WORKINSTIGATE, CHAR_WORK_F_ENCLOSE ,CHAR_WORK_I_ENCLOSE, CHAR_WORK_T_ENCLOSE ,CHAR_WORK_FOCUS, CHAR_WORKRESIST_F ,CHAR_WORKRESIST_I, CHAR_WORKRESIST_T ,CHAR_WORK_F_ENCLOSE_2, CHAR_WORK_I_ENCLOSE_2 ,CHAR_WORK_T_ENCLOSE_2#endif#ifdef _PROFESSION_ADDSKILL ,CHAR_WORKERSIST_F_I_T, CHAR_WORKWATER//水附體 ,CHAR_WORKANNEX//附身 ,CHAR_WORKFEAR//恐懼 ,CHAR_WORKICECRACK2 ,CHAR_WORKICECRACK3 ,CHAR_WORKICECRACK4 ,CHAR_WORKICECRACK5 ,CHAR_WORKICECRACK6 ,CHAR_WORKICECRACK7 ,CHAR_WORKICECRACK8 ,CHAR_WORKICECRACK9 ,CHAR_WORKICECRACK10#endif };int RegTbl[] = { -1, CHAR_WORKMODPOISON, CHAR_WORKMODPARALYSIS, CHAR_WORKMODSLEEP, CHAR_WORKMODSTONE, CHAR_WORKMODDRUNK, CHAR_WORKMODCONFUSION, CHAR_WORKMODWEAKEN, CHAR_WORKMODDEEPPOISON, CHAR_WORKMODBARRIER, CHAR_WORKMODNOCAST #ifdef _PET_SKILL_SARS // WON ADD 毒煞蔓延 ,CHAR_WORKMODSARS#endif#ifdef _PROFESSION_SKILL // WON ADD 人物職業(yè)技能 ,CHAR_WORKMODDIZZY, CHAR_WORKMODENTWINE ,CHAR_WORKMODDRAGNET, CHAR_WORKMODICECRACK ,CHAR_WORKMODOBLIVION, CHAR_WORKMODICEARROW ,CHAR_WORKMODBLOODWORMS, CHAR_WORKMODSIGN ,CHAR_WORKMODINSTIGATE, CHAR_WORKMOD_F_ENCLOSE ,CHAR_WORKMOD_I_ENCLOSE, CHAR_WORKMOD_T_ENCLOSE ,CHAR_WORKMOD_FOCUS, CHAR_WORKMODRESIST_F ,CHAR_WORKMODRESIST_I, CHAR_WORKMODRESIST_T ,CHAR_WORKMOD_F_ENCLOSE_2, CHAR_WORKMOD_I_ENCLOSE_2 ,CHAR_WORKMOD_T_ENCLOSE_2 #endif };char *aszMagicDef[] = { "常", "吸", "反", "無(wú)" #ifdef _PROFESSION_SKILL // WON ADD 人物職業(yè)技能 ,"陷"#endif#ifdef _PETSKILL_ACUPUNCTURE ,"刺"#endif};char *aszMagicDefFull[] = { "通常", "吸收", "反射", "無(wú)效化" #ifdef _PROFESSION_SKILL // WON ADD 人物職業(yè)技能 ,"陷阱"#endif#ifdef _PETSKILL_ACUPUNCTURE ,"針刺"#endif};int MagicDefTbl[] = { -1, CHAR_WORKDAMAGEABSROB, CHAR_WORKDAMAGEREFLEC, CHAR_WORKDAMAGEVANISH #ifdef _PROFESSION_SKILL // WON ADD 人物職業(yè)技能 ,CHAR_WORKTRAP#endif#ifdef _PETSKILL_ACUPUNCTURE ,CHAR_WORKACUPUNCTURE#endif};char *aszParamChange[] = { "無(wú)", "攻", "防", "早", "魅", "捕" };char *aszParamChangeFull[] = { "無(wú)", "攻擊力", "防御力", "速度", "魅力", "捕獲率" };int aParamChangeTbl[] = { -1, CHAR_WORKMODATTACK, CHAR_WORKMODDEFENCE, CHAR_WORKMODQUICK, CHAR_WORKMODCHARM, CHAR_WORKMODCAPTURE };// Robin 0727 Ride Pet// 取得騎寵的indexint BATTLE_getRidePet( int charaindex ){ int petindex = -1; if( CHAR_getInt( charaindex, CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) return -1; else { int rideIndex = CHAR_getInt( charaindex, CHAR_RIDEPET ); if( rideIndex == -1 ) return -1; petindex = CHAR_getCharPet( charaindex, rideIndex ); if( !CHAR_CHECKINDEX( petindex ) ) return -1; } return petindex;}#ifdef _BACK_VERSION // 復(fù)刻版騎寵公式修改// Robin 0727 Ride Pet// 取得騎寵時(shí)的叁圍 復(fù)刻版float BATTLE_adjustRidePet3A( int charaindex, int petindex, int workindex, int action ){ float ret = CHAR_getWorkInt( charaindex, workindex ); BOOL throwweapon = BATTLE_IsThrowWepon(CHAR_getItemIndex( charaindex, CHAR_ARM ) ); switch( workindex ) { case CHAR_WORKATTACKPOWER : // 攻擊力 if( throwweapon ) // 投擲 ret = CHAR_getWorkInt( charaindex, CHAR_WORKATTACKPOWER );//間接攻擊:人物 else // 近戰(zhàn) ret = CHAR_getWorkInt( petindex, CHAR_WORKATTACKPOWER );//直接攻擊:寵物 break; case CHAR_WORKDEFENCEPOWER : // 防御力 ret = ( CHAR_getWorkInt( charaindex, CHAR_WORKDEFENCEPOWER ) + CHAR_getWorkInt( petindex, CHAR_WORKDEFENCEPOWER ) ) / 2; break; case CHAR_WORKQUICK : // 敏捷力 if( action == ATTACKSIDE ) { if( throwweapon ) { ret = CHAR_getWorkInt( charaindex, CHAR_WORKQUICK ); }else { ret = CHAR_getWorkInt( petindex, CHAR_WORKQUICK ); } }else if( action == DEFFENCESIDE ){ ret = CHAR_getWorkInt( petindex, CHAR_WORKQUICK ); } break; default : ret = CHAR_getWorkInt( charaindex, workindex ); } //print(" adj3A_Old:%d:%d=%f ", charaindex, workindex, ret); return ret;}#else// 取得騎寵時(shí)的叁圍 正常版float BATTLE_adjustRidePet3A( int charaindex, int petindex, int workindex, int action ){ float ret = CHAR_getWorkInt( charaindex, workindex ); BOOL throwweapon = BATTLE_IsThrowWepon(CHAR_getItemIndex( charaindex, CHAR_ARM ) ); switch( workindex ) { case CHAR_WORKATTACKPOWER : // 攻擊力 if( throwweapon ) // 投擲 ret = CHAR_getWorkInt( charaindex, CHAR_WORKATTACKPOWER )#ifdef _BATTLE_NEWPOWER //andy 1/24 reEdit + CHAR_getWorkInt( petindex, CHAR_WORKATTACKPOWER )*0.4;#else + CHAR_getWorkInt( petindex, CHAR_WORKATTACKPOWER )*0.2;#endif else // 近戰(zhàn) ret = CHAR_getWorkInt( charaindex, CHAR_WORKATTACKPOWER )*0.8 + CHAR_getWorkInt( petindex, CHAR_WORKATTACKPOWER )*0.8; break; case CHAR_WORKDEFENCEPOWER : // 防御力 ret = CHAR_getWorkInt( charaindex, CHAR_WORKDEFENCEPOWER )*0.7 + CHAR_getWorkInt( petindex, CHAR_WORKDEFENCEPOWER )*0.7; break; case CHAR_WORKQUICK : // 敏捷力 if( action == ATTACKSIDE ) { if( throwweapon ) { ret = CHAR_getWorkInt( charaindex, CHAR_WORKQUICK )*0.8 + CHAR_getWorkInt( petindex, CHAR_WORKQUICK )*0.2; }else {#ifdef _BATTLE_NEWPOWER //andy 1/24 reEdit ret = CHAR_getWorkInt( charaindex, CHAR_WORKQUICK )*0.2 + CHAR_getWorkInt( petindex, CHAR_WORKQUICK )*0.8;#else ret = CHAR_getWorkInt( charaindex, CHAR_WORKQUICK )*0.5 + CHAR_getWorkInt( petindex, CHAR_WORKQUICK )*0.5;#endif } }else if( action == DEFFENCESIDE ){ ret = CHAR_getWorkInt( charaindex, CHAR_WORKQUICK )*0.1 + CHAR_getWorkInt( petindex, CHAR_WORKQUICK )*0.9; } break; default : ret = CHAR_getWorkInt( charaindex, workindex ); } //print(" adj3A_Now:%d:%d=%f ", charaindex, workindex, ret); return ret;}#endif// Robin 0727 ride Pet 落馬改圖void BATTLE_changeRideImage( int index ){ int itemindex = CHAR_getItemIndex(index,CHAR_ARM); int category; int newimagenumber; int basebaseimagenumber = CHAR_getInt(index,CHAR_BASEBASEIMAGENUMBER); if( !ITEM_CHECKINDEX(itemindex) ) { category = ITEM_FIST; }else { category = ITEM_getInt(itemindex,ITEM_TYPE ); } newimagenumber = CHAR_getNewImagenumberFromEquip( basebaseimagenumber, category); if( newimagenumber == -1) { CHAR_setInt( index, CHAR_BASEIMAGENUMBER, basebaseimagenumber); }else { CHAR_setInt( index, CHAR_BASEIMAGENUMBER, newimagenumber); }}void BATTLE_talkToCli( int charaindex, char *pszBuffer, int color){ if( getBattleDebugMsg( ) != 0 && CHAR_getFlg( charaindex, CHAR_ISSHOWBATTLEMSG ) ){ CHAR_talkToCli( charaindex, -1, pszBuffer, color ); }}int BATTLE_BroadCastBase( int battleindex, char *pszBuffer, int color, int flg){ int i, j, pindex; BATTLE_ENTRY *pEntry; if( flg != 1 && getBattleDebugMsg( ) == 0 )return 0; if( BATTLE_CHECKINDEX( battleindex ) == FALSE )return BATTLE_ERR_BATTLEINDEX; for( j = 0; j < 2; j ++ ){ pEntry = BattleArray[battleindex].Side[j].Entry; for( i = 0; i < BATTLE_ENTRY_MAX; i ++ ){ pindex = pEntry[i].charaindex; if( CHAR_CHECKINDEX( pindex ) == FALSE )continue; if( CHAR_getInt( pindex, CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER )continue; if( CHAR_getFlg( pindex, CHAR_ISSHOWBATTLEMSG ) == FALSE ) continue; CHAR_talkToCli( pindex, -1, pszBuffer, color ); } } return 0;}// Nuke 20040112 fix for performance/*int BATTLE_BroadCast( int battleindex, char *pszBuffer, int color){ return BATTLE_BroadCastBase( battleindex, pszBuffer, color, 0 );}int BATTLE_BroadCastOn( int battleindex, char *pszBuffer, int color){ return BATTLE_BroadCastBase( battleindex, pszBuffer, color, 1 );}*/#ifdef _TAKE_ITEMDAMAGEint BATTLE_ItemCrushCheck( int charaindex , int flg){//flg def 1 att 2 int EquipTbl[CHAR_EQUIPPLACENUM], itemindex; int i, rndwork; int Crushs=0; //char szBuffer[256]; memset( EquipTbl, -1, sizeof( EquipTbl)); if( flg == 2 ) { itemindex = CHAR_getItemIndex( charaindex, CHAR_ARM); if( ITEM_CHECKINDEX( itemindex) == TRUE ) { return CHAR_ARM; } return -1; }else { Crushs = rand()%100; if( Crushs < 50 ) { rndwork = CHAR_BODY; }else if( Crushs >= 50 && Crushs < 67 ) { rndwork = CHAR_HEAD; }else if( Crushs >= 67 && Crushs < 84 ) { rndwork = CHAR_DECORATION1; }else { rndwork = CHAR_DECORATION2; } for( i = 0; i < CHAR_EQUIPPLACENUM; i ++ ){//CHAR_ARM itemindex = CHAR_getItemIndex( charaindex, rndwork); if( ITEM_CHECKINDEX( itemindex) == TRUE && rndwork != CHAR_ARM ){ return rndwork; }else { rndwork++; rndwork=rndwork%5; } } } return -1;}#elseint BATTLE_ItemCrushCheck( int charaindex ){ if( CHAR_getInt( charaindex, CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ){ return FALSE; } if( RAND( 1, gItemCrushRate ) < CHAR_getInt( charaindex, CHAR_LV ) ){ return TRUE; }else{ return FALSE; }}#endif#define BREAK_NAME_WEPON "武器"#define BREAK_NAME_AROMER "防具"#define BREAK_BRACELET "護(hù)腕"#define BREAK_MUSIC "樂(lè)器"#define BREAK_NECKLACE "頭飾"#define BREAK_RING "戒指"#define BREAK_BELT "皮帶"#define BREAK_EARRING "耳飾"#define BREAK_NOSERING "鼻環(huán)"#define BREAK_AMULET "護(hù)身符"#define BREAK_OTHER "道具"#ifdef _TAKE_ITEMDAMAGE
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -