📄 battle_item.c
字号:
#include "version.h"#include <string.h>#include "char.h"#include "char_base.h"#include "battle.h"#include "battle_event.h"#include "battle_item.h"#include "battle_magic.h"#include "item_event.h"#include "log.h"#include "anim_tbl.h"#include "npcutil.h"#include "magic_base.h"#include "lssproto_serv.h"int BATTLE_ItemUseDelete( int charaindex, int haveitemindex){ int itemindex; itemindex = CHAR_getItemIndex( charaindex, haveitemindex); if( ITEM_CHECKINDEX( itemindex ) == FALSE ) return 0; { 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 "BattleUse(战斗中使用掉的道具)", 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) ); } CHAR_DelItemMess( charaindex, haveitemindex, 0); return 0;}#ifdef _IMPRECATE_ITEMvoid ITEM_useImprecate( int charaindex, int toNo, int haveitemindex ){ int i; int battleindex, attackNo,itemindex; char *arg; char buf[256]; struct tagImprecate { char fun[256]; int intfun; }; struct tagImprecate ImList[3] ={ {"咒",BD_KIND_CURSE},{"恩",BD_KIND_BESTOW},{"祝",BD_KIND_WISHES} }; if( !CHAR_CHECKINDEX( charaindex) ) return; battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX ); if( (attackNo = BATTLE_Index2No( battleindex, charaindex )) < 0 ){ print( "ANDY attackNo=%d\n", attackNo); return; } itemindex = CHAR_getItemIndex( charaindex, haveitemindex); if(!ITEM_CHECKINDEX(itemindex)) return; arg = ITEM_getChar(itemindex, ITEM_ARGUMENT ); if( arg == "\0" ){ print( "ANDY ITEM id:%d=>arg err\n", ITEM_getInt( itemindex, ITEM_ID)); return; } for( i=0; i<3; i++) { if( strstr( arg, ImList[i].fun ) != 0 ) { char buf1[256]; int kind,powers, rounds, HealedEffect; if( NPC_Util_GetStrFromStrWithDelim( arg, ImList[i].fun, buf, sizeof( buf)) == NULL )continue; kind = ImList[i].intfun; if( getStringFromIndexWithDelim( buf,"x", 1, buf1, sizeof( buf1)) == FALSE ) continue; powers = atoi( buf1); if( getStringFromIndexWithDelim( buf,"x", 2, buf1, sizeof( buf1)) == FALSE ) continue; rounds = atoi( buf1); HealedEffect = SPR_hoshi; BATTLE_ImprecateRecovery( battleindex, attackNo, toNo, kind, powers, rounds, SPR_item3, HealedEffect ); CHAR_setItemIndex(charaindex, haveitemindex ,-1); CHAR_sendItemDataOne( charaindex, haveitemindex); ITEM_endExistItemsOne( itemindex ); break; } }}#endif#ifdef _ITEM_MAGICRECOVERYvoid ITEM_useMRecovery_Battle( int charaindex, int toNo, int haveitemindex ){ int battleindex, attackNo, itemindex; int turn=0, magicid, marray; char buf1[256]; char *arg=NULL; battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX ); if( BATTLE_CHECKINDEX( battleindex ) == FALSE ) return; if( (attackNo = BATTLE_Index2No( battleindex, charaindex )) == -1 ) return; itemindex = CHAR_getItemIndex( charaindex, haveitemindex); if(!ITEM_CHECKINDEX(itemindex)) return; arg = ITEM_getChar( itemindex, ITEM_ARGUMENT ); if( getStringFromIndexWithDelim( arg, ":", 2, buf1, sizeof(buf1)) ==FALSE ) return; turn = atoi( buf1); if( getStringFromIndexWithDelim( arg, ":", 1, buf1, sizeof(buf1)) ==FALSE ) return; if( strstr( buf1, "全" ) != NULL ){ }else{ } magicid = ITEM_getInt( itemindex, ITEM_MAGICID); marray = MAGIC_getMagicArray( magicid); if( marray == -1 ) return; if( IsBATTLING( charaindex ) == TRUE ){ int i, status=-1; char *magicarg=NULL, *pszP=NULL; magicarg = MAGIC_getChar( marray, MAGIC_OPTION ); pszP = magicarg; for( ;status == -1 && pszP[0] != '\0'; pszP++ ){ for( i = 1; i < BATTLE_MD_END; i ++ ){ if( strncmp( pszP, aszMagicDef[i], 2 ) == 0 ){ status = i; pszP +=2; break; } } } if( status == -1 ) return; BATTLE_MultiMagicDef( battleindex, attackNo, toNo, status, turn, MAGIC_EFFECT_USER, SPR_difence ); 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 "BattleUse(战斗中使用掉的道具)", 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) ); } CHAR_DelItemMess( charaindex, haveitemindex, 0);}#endif#ifdef _ITEM_USEMAGICvoid ITEM_useMagic_Battle( int charaindex, int toNo, int haveitemindex ){ int itemindex,itemmaxuse; char *arg=NULL; itemindex = CHAR_getItemIndex( charaindex, haveitemindex); if(!ITEM_CHECKINDEX(itemindex)) return; arg = ITEM_getChar( itemindex, ITEM_ARGUMENT ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_JYUJYUTU ); CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, atoi(arg) ); CHAR_SETWORKINT_HIGH( charaindex, CHAR_WORKBATTLECOM3, 0 ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK ); MAGIC_DirectUse( charaindex, CHAR_GETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3 ), CHAR_getWorkInt( charaindex, CHAR_WORKBATTLECOM2 ), CHAR_GETWORKINT_HIGH( charaindex, CHAR_WORKBATTLECOM3 ) ); itemmaxuse = ITEM_getInt( itemindex, ITEM_DAMAGEBREAK); if( itemmaxuse > 0 ) ITEM_setInt( itemindex, ITEM_DAMAGEBREAK, itemmaxuse-1 ); else{ 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 "BattleUse(战斗中使用掉的道具)", 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) ); CHAR_DelItemMess( charaindex, haveitemindex, 0); }}#endifvoid ITEM_useRecovery_Battle( int charaindex, int toNo, int haveitemindex ){ int power = 0, per = 0, HealedEffect=0; int battleindex, attackNo,itemindex, kind = BD_KIND_HP; char *p = NULL, *arg; itemindex = CHAR_getItemIndex( charaindex, haveitemindex); if(!ITEM_CHECKINDEX(itemindex)) return; arg = ITEM_getChar(itemindex, ITEM_ARGUMENT ); if( (p = strstr( arg, "体" )) != NULL ) { kind = BD_KIND_HP; } else if( (p = strstr( arg, "气" )) != NULL ) { kind = BD_KIND_MP; } else#ifdef _ITEM_UNBECOMEPIG if( (p = strstr( arg, "解猪" )) != NULL ){ kind = BD_KIND_UNBECOMEPIG; HealedEffect = 100608; //特效编号 } else#endif#ifdef _ITEM_LVUPUP if( (p = strstr( arg, "LVUPUP" )) != NULL ){ return; } else#endif#ifdef _ITEM_PROPERTY if( (p = strstr( arg, "PROPERTY" )) != NULL ){ kind = BD_KIND_PROPERTY; HealedEffect = 100608; //特效编号 if( strstr( arg, "+" ) ) power = 1; else if( strstr( arg, "-" ) ) power = 2; } else#endif#ifdef _ITEM_ADDPETEXP if( (p = strstr( arg, "GETEXP" )) != NULL ){ return; } else#endif return;#ifdef _ITEM_UNBECOMEPIG if( HealedEffect != 100608 ){#endif if( sscanf( p+2, "%d", &power ) != 1 ) power = 0; if( power <= 100 ) HealedEffect = SPR_heal;//SPR_hoshi else if( power <= 300 ) HealedEffect = SPR_heal2; else HealedEffect = SPR_heal3;#ifdef _ITEM_UNBECOMEPIG }#endif battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX ); attackNo = BATTLE_Index2No( battleindex, charaindex ); if( attackNo < 0 )return; BATTLE_MultiRecovery( battleindex, attackNo, toNo,kind, power, per, SPR_item3, HealedEffect ); { 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 "BattleUse(战斗中使用掉的道具)", 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) ); } CHAR_DelItemMess( charaindex, haveitemindex, 0);}void ITEM_useStatusChange_Battle( int charaindex, int toNo, int haveitemindex){ int turn = 0, i; int battleindex, attackNo,itemindex, status = -1, Success = 15; int ReceveEffect; char *pszP = NULL, *arg; char szTurn[] = "turn"; char szSuccess[] = "成"; itemindex = CHAR_getItemIndex( charaindex, haveitemindex); if(!ITEM_CHECKINDEX(itemindex)) return; arg = ITEM_getChar(itemindex, ITEM_ARGUMENT ); pszP = arg; for( ;status == -1 && pszP[0] != 0; pszP++ ){ for( i = 0; i < BATTLE_ST_END; i ++ ){ if( strncmp( pszP, aszStatus[i], 2 ) == 0 ){ status = i; pszP +=2; break; } } } if( status == -1 ) return ; if( ( pszP = strstr( arg, szTurn ) ) != NULL){ pszP += sizeof( szTurn ); sscanf( pszP, "%d", &turn ); } if( ( pszP = strstr( arg, szSuccess ) ) != NULL){ pszP += sizeof( szSuccess ); sscanf( pszP, "%d", &Success ); } battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX ); attackNo = BATTLE_Index2No( battleindex, charaindex ); if( status == BATTLE_ST_NONE ){ ReceveEffect = SPR_tyusya; }else{ ReceveEffect = SPR_hoshi; } BATTLE_MultiStatusChange( battleindex, attackNo, toNo, status, turn, SPR_item3, ReceveEffect, Success ); BATTLE_ItemUseDelete( charaindex, haveitemindex );}void ITEM_useStatusRecovery_Battle( int charaindex, // 银匀凶谛及奶件犯永弁旦 int toNo, // 银歹木月谛及 寞 int haveitemindex // 银丹谛及失奶 丞及 寞){ int i; int battleindex, attackNo,itemindex, status = -1; int ReceveEffect; char *pszP = NULL, *arg; // 失奶 丞互丐月井升丹井 itemindex = CHAR_getItemIndex( charaindex, haveitemindex); if(!ITEM_CHECKINDEX(itemindex)) return; // 由仿丢□正毛潸 arg = ITEM_getChar(itemindex, ITEM_ARGUMENT ); pszP = arg; // 躲绊毛潸 for( ;status == -1 && pszP[0] != 0; pszP++ ){ // 蝈莒手丐月及匹ㄟ井日腹绸 for( i = 0; i < BATTLE_ST_END; i ++ ){ // 躲绊疋永正伉井" if( strncmp( pszP, aszStatus[i], 2 ) == 0 ){ status = i; pszP +=2; break; } } } // 躲绊卅中及匹撩 if( status == -1 ) return ; //------- 仇仇井日荚汊质 ----------- battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX ); attackNo = BATTLE_Index2No( battleindex, charaindex ); ReceveEffect = SPR_tyusya; // 月午五反仇木 // 蝈够 BATTLE_MultiStatusRecovery( battleindex, attackNo, toNo, status, SPR_item3, ReceveEffect ); // 爵 卞失奶 丞互壅尹凶桦宁及隋骚质 BATTLE_ItemUseDelete( charaindex, haveitemindex );}void ITEM_useMagicDef_Battle( int charaindex, int toNo, int haveitemindex){ int turn = 0, i; int battleindex, attackNo,itemindex, status = -1; char *pszP = NULL, *arg; char szTurn[] = "turn"; itemindex = CHAR_getItemIndex( charaindex, haveitemindex); if(!ITEM_CHECKINDEX(itemindex)) return; arg = ITEM_getChar(itemindex, ITEM_ARGUMENT ); pszP = arg; for( ;status == -1 && pszP[0] != 0; pszP++ ){ for( i = 1; i < BATTLE_MD_END; i ++ ){ if( strncmp( pszP, aszMagicDef[i], 2 ) == 0 ){ status = i; pszP +=2; break; } } } if( status == -1 ) return ; if( ( pszP = strstr( arg, szTurn ) ) != NULL){ pszP += sizeof( szTurn ); sscanf( pszP, "%d", &turn ); } battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX ); attackNo = BATTLE_Index2No( battleindex, charaindex ); BATTLE_MultiMagicDef( battleindex, attackNo, toNo, status, turn, SPR_item3, SPR_difence ); BATTLE_ItemUseDelete( charaindex, haveitemindex );}//--------------------------------------------------------------// 由仿丢□正 凳失奶 丞毛银匀凶桦宁及质 //--------------------------------------------------------------// 爵 及桦宁void ITEM_useParamChange_Battle( int charaindex, // 银匀凶谛及奶件犯永弁旦 int toNo, // 银歹木月谛及 寞 int haveitemindex // 银丹谛及失奶 丞及 寞){ int i; int battleindex, attackNo,itemindex; int pow, par = 0; int kind = -1; char *pszP = NULL, *arg; // 失奶 丞互丐月井升丹井 itemindex = CHAR_getItemIndex( charaindex, haveitemindex); if(!ITEM_CHECKINDEX(itemindex)) return; // 由仿丢□正毛潸 arg = ITEM_getChar(itemindex, ITEM_ARGUMENT ); pszP = arg; // 躲绊毛潸 for( ;kind == -1 && pszP[0] != 0; pszP++ ){ for( i = 1; i < BATTLE_MD_END; i ++ ){ // 躲绊疋永正伉井" if( strncmp( pszP, aszParamChange[i], 2 ) == 0 ){ kind = i; pszP +=2; break; } } } // 躲绊卅中及匹撩 if( kind == -1 ) return ; if( strstr( pszP, "%" ) ){ // 仇及桦宁反⊙煌遥 par = 1; } if( sscanf( pszP, "%d", &pow ) != 1 ){ // 窒禾奶件玄丐仆月井 pow = 30; } //------- 仇仇井日质 ----------- battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX ); attackNo = BATTLE_Index2No( battleindex, charaindex ); // 蝈够 BATTLE_MultiParamChange( battleindex, attackNo, toNo, kind, pow, par, SPR_item3, SPR_hoshi ); // 爵 卞失奶 丞互壅尹凶桦宁及隋骚质 BATTLE_ItemUseDelete( charaindex, haveitemindex );}//--------------------------------------------------------------// 白奴□伙玉箪岭 凳失奶 丞毛银匀凶桦宁及质
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -