?? battle_item.c
字號:
}#endif#ifdef _ITEM_REFRESH //vincent 解除異常狀態(tài)道具void ITEM_useRefresh_Effect( charaindex, toindex, haveitemindex){ int i,itemindex,ReceveEffect; char *arg;// char szBuffer[128]=""; int status = -1,attackNo,index2; int battleindex; char *pszP;//print("\nvincent--ITEM_useRefresh_Effect"); // 檢查物品 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_ST_END; i ++ ){ // 躲絆疋永正伉井" if( strncmp( pszP, aszStatus[i], 2 ) == 0 ){ status = i; pszP +=2; break; } } }//print("\nvincent-->status:%d",status); // 躲絆卅中及匹撩 if( status == -1 ) return; // 田玄伙 寞 battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX ); index2 = BATTLE_No2Index( battleindex, toindex);//被擊中目標之index attackNo = BATTLE_Index2No( battleindex, charaindex );// defNo = BATTLE_Index2No( battleindex, index2 );//print("\nvincent-->charaindex:%d,attackNo:%d,index2:%d,defNo:%d,",charaindex,attackNo,index2,defNo); /* 平乓仿弁正□及赭 伉旦玄井日壅蛔 */ CHAR_setItemIndex(charaindex, haveitemindex ,-1); CHAR_sendItemDataOne( charaindex, haveitemindex);/* 失奶 丞凳蕙 */// if( CHAR_getWorkInt( charaindex, StatusTbl[status] ) > 0 ){// ReceveEffect = SPR_tyusya;// }else{// ReceveEffect = SPR_hoshi;// } ReceveEffect = SPR_tyusya;//打針 BATTLE_MultiStatusRecovery( battleindex, attackNo, toindex, status, MAGIC_EFFECT_USER, ReceveEffect ); /* 壅允 */ ITEM_endExistItemsOne( itemindex );//////////////////////////// BATTLE_MultiList( battleindex, defNo, ToList );// for( i = 0; ToList[i] != -1; i ++ ){// toindex = BATTLE_No2Index( battleindex, ToList[i] );//// } ////////////////////////////}#endif#ifdef _ITEM_ADDEXP //vincent 經(jīng)驗提升void ITEM_useAddexp_Effect( charaindex, toindex, haveitemindex){ int itemindex,power,vtime; //,pindex char *p = NULL, *arg; char szBuffer[1024]=""; itemindex = CHAR_getItemIndex(charaindex,haveitemindex); // 檢查物品 if(!ITEM_CHECKINDEX(itemindex)) return; arg = ITEM_getChar(itemindex, ITEM_ARGUMENT ); if( (p = strstr( arg, "增" )) != NULL ){ sscanf( p+2, "%d", &power ); } if( (p = strstr( arg, "分" )) != NULL ){ sscanf( p+2, "%d", &vtime ); } if( p == NULL )return;#ifdef _ITEM_ADDEXP2 // 智果時間可以累加 { int point; point = CHAR_getWorkInt( charaindex, CHAR_WORKITEM_ADDEXP) * (int)(CHAR_getWorkInt( charaindex, CHAR_WORKITEM_ADDEXPTIME)/60); if( point >= 72000) { CHAR_talkToCli( charaindex, -1, "智慧之果累計時間及效果已達上限。", CHAR_COLORYELLOW); return; } point += (power * vtime); point = min( point, 72000); vtime = (int)(point / power);#ifdef _LOG_OTHER sprintf( szBuffer, "使用智慧之果 %d\t累積效果= 分數(shù)%d 能力%d% 時間%d分 ", ITEM_getInt( itemindex, ITEM_ID ), point, power, vtime); LogOther( CHAR_getChar( charaindex, CHAR_CDKEY), CHAR_getChar( charaindex, CHAR_NAME), szBuffer );#endif //CHAR_setInt( charaindex, CHAR_ADDEXPPOWER, power); //CHAR_setInt( charaindex, CHAR_ADDEXPTIME,vtime*60 ); //sprintf(szBuffer, "測試訊息:目前分數(shù)%d 時間%d秒。", point, vtime*60); //CHAR_talkToCli(charaindex,-1,szBuffer,CHAR_COLORRED); }#endif CHAR_setWorkInt( charaindex, CHAR_WORKITEM_ADDEXP, power); CHAR_setWorkInt( charaindex, CHAR_WORKITEM_ADDEXPTIME,vtime*60 ); //清除道具 BATTLE_ItemUseDelete(charaindex,haveitemindex); //sprintf(szBuffer, "學習經(jīng)驗的能力提升了%d%", power); sprintf(szBuffer, "學習經(jīng)驗的能力提升了%d%,時效剩馀%d分鐘。", power, vtime); CHAR_talkToCli(charaindex,-1,szBuffer,CHAR_COLORYELLOW);}#endif//Terry add 2001/12/24#ifdef _ITEM_FIRECRACKERvoid ITEM_useFirecracker_Battle( charaindex, toindex, haveitemindex){ int itemindex, battleindex, masteridx=-1, index2; char szWork[128];#ifdef _FIX_FIRECRACKER int petid=-1, i=1; BOOL FINDPET=FALSE; char *buff1; char token[256], buf1[256];#else int PetEscape = 0;#endif itemindex = CHAR_getItemIndex(charaindex,haveitemindex); // 檢查物品 if(!ITEM_CHECKINDEX(itemindex)) return; battleindex = CHAR_getWorkInt(charaindex,CHAR_WORKBATTLEINDEX);#ifdef _FIX_FIRECRACKER index2 = BATTLE_No2Index( battleindex, toindex); if( !CHAR_CHECKINDEX( index2) ) return; { int attackNo = BATTLE_Index2No( battleindex, charaindex ); int safeSide = 0; int MySide_start, MySide_end; if( attackNo >= 10 ) safeSide = 1; MySide_start = safeSide*SIDE_OFFSET; MySide_end = ((safeSide*SIDE_OFFSET) + SIDE_OFFSET); if( (toindex >= MySide_start) && (toindex<MySide_end) ){ //同邊 return; } } if( BATTLE_Index2No( battleindex, charaindex ) == toindex ){ BATTLE_ItemUseDelete(charaindex,haveitemindex);//用在自身 return; } if( CHAR_getInt( index2, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER ) { petid = -1;//作用在人物 }else if( CHAR_getInt( index2, CHAR_WHICHTYPE) == CHAR_TYPEPET ) { masteridx = BATTLE_No2Index(battleindex,toindex-5);//作用在寵物 if( !CHAR_CHECKINDEX( masteridx) ) return; petid = CHAR_getInt(index2,CHAR_PETID);//寵物id }else if( CHAR_getInt( index2, CHAR_WHICHTYPE) == CHAR_TYPEENEMY ) { petid = CHAR_getInt(index2,CHAR_PETID); } if( (buff1 = ITEM_getChar( itemindex, ITEM_ARGUMENT)) == NULL ) return; memset( token, 0, sizeof( token)); if( NPC_Util_GetStrFromStrWithDelim( buff1, "KPET", token, sizeof( token) ) == NULL) { print( "Can't get KPET: %s!!\n", buff1); return; } // won fix while( getStringFromIndexWithDelim( token,"_", i, buf1, sizeof( buf1)) != FALSE ) { //while( getStringFromIndexWithDelim( token,"|", i, buf1, sizeof( buf1)) != FALSE ) { i++; if( petid == atoi( buf1) ){//年獸判別 FINDPET = TRUE; break; } } sprintf(szWork,"BB|a%X|w3|r%X|f0|d0|p0|FF|",BATTLE_Index2No(battleindex,charaindex),toindex); BATTLESTR_ADD(szWork);//丟出鞭炮的動畫//送訊息至玩家 if( FINDPET == TRUE ) {//若為年獸 char buf4[255]; sprintf( buf4, "%s被嚇跑了!", CHAR_getChar( index2, CHAR_NAME)); BATTLE_Exit(index2,battleindex);//離開戰(zhàn)斗 if( CHAR_CHECKINDEX( masteridx) ){ CHAR_setInt(masteridx,CHAR_DEFAULTPET,-1);//無參戰(zhàn)寵 CHAR_talkToCli( masteridx,-1, buf4, CHAR_COLORYELLOW); } sprintf(szWork,"BQ|e%X|",toindex);//逃跑動畫 BATTLESTR_ADD(szWork); CHAR_talkToCli( charaindex,-1, buf4, CHAR_COLORYELLOW); }else { CHAR_talkToCli( charaindex, -1, "什麼事都沒發(fā)生。", CHAR_COLORYELLOW); } BATTLE_ItemUseDelete( charaindex, haveitemindex);//刪除鞭炮#else index2 = BATTLE_No2Index(battleindex,toindex); // 被炸到的是否為寵物 if(CHAR_getInt(index2,CHAR_WHICHTYPE) == CHAR_TYPEPET) { // 如果被炸的是年獸 if(CHAR_getInt(index2,CHAR_PETID) >= 901 && CHAR_getInt(index2,CHAR_PETID) <= 904){ // 取得目標的正後方的角色的index masteridx = BATTLE_No2Index(battleindex,toindex-5); // 如果對戰(zhàn)的是玩家 if(CHAR_getInt(masteridx,CHAR_WHICHTYPE) == CHAR_TYPEPLAYER) PetEscape = 1; else print("\n年獸在遇敵時出現(xiàn)"); } } // 如果不是炸自己 if(BATTLE_Index2No(battleindex,charaindex) != toindex) { sprintf(szWork,"BB|a%X|w3|r%X|f0|d0|p0|FF|",BATTLE_Index2No(battleindex,charaindex),toindex); BATTLESTR_ADD(szWork); if(PetEscape) { BATTLE_Exit(index2,battleindex); CHAR_setInt(masteridx,CHAR_DEFAULTPET,-1); sprintf(szWork,"BQ|e%X|",toindex); BATTLESTR_ADD(szWork); CHAR_talkToCli(masteridx,-1,"年獸被嚇跑了!",CHAR_COLORWHITE); CHAR_talkToCli(charaindex,-1,"年獸被嚇跑了!",CHAR_COLORWHITE); } } CHAR_talkToCli(charaindex,-1,"什麼事都沒發(fā)生。",CHAR_COLORWHITE); CHAR_talkToCli(charaindex,-1,"道具消失了。",CHAR_COLORWHITE); // 使用後道具消失 BATTLE_ItemUseDelete(charaindex,haveitemindex);#endif}#endif//Terry end//氣絕狀態(tài)回復耐力,復加復活(光,鏡,守)精靈 參數(shù)同魔法(光,鏡,守)精靈,但只能在戰(zhàn)斗之使用,用完就沒了 //參數(shù) 例如:耐力值 吸 turn 1#ifdef _FEV_ADD_NEW_ITEM // FEV ADD 增加復活守精void ITEM_ResAndDef( int charaindex, int toindex, int haveitemindex ){ int itemindex, battleindex, attackNo, par = 0, pow = 0, ReceveEffect; char *buffer = NULL; char *magicarg = NULL; char *magicarg2 = NULL; char *magicarg3 = NULL; char magicarg4[200]; char *pszP = NULL; char delim[] = " ";//協(xié)助分解字串的區(qū)隔字元 int status = -1, i, turn = 3; char szTurn[] = "turn"; // 失奶 丞互丐月井升丹井 itemindex = CHAR_getItemIndex( charaindex, haveitemindex); if(!ITEM_CHECKINDEX(itemindex)) return; buffer = ITEM_getChar(itemindex, ITEM_ARGUMENT );//整串字串 pszP = strtok(buffer, delim);//第一個參數(shù) magicarg = strtok(NULL, delim);//第二個參數(shù) magicarg2 = strtok(NULL, delim);//第叁個參數(shù) magicarg3 = strtok(NULL, delim);//第四個參數(shù) sprintf(magicarg4,"%s %s %s",magicarg,magicarg2,magicarg3); magicarg = (char*)magicarg4; //光鏡守..不得使用敵方 battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX ); if( CHAR_getInt( charaindex, CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER //&& BattleArray[battleindex].type != BATTLE_TYPE_P_vs_P ){ if( BATTLE_CheckSameSide( charaindex, toindex) == 0 ){//不同邊 battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX ); BATTLE_NoAction( battleindex, BATTLE_Index2No( battleindex, charaindex) ); CHAR_talkToCli( charaindex, -1, "光鏡守..不得施予非玩家敵方。", CHAR_COLORYELLOW); return; } } //在氣絕狀態(tài)回復耐力 if( strstr( pszP, "%" ) ){ par = 1; } if( sscanf( pszP, "%d", &pow ) != 1 ){ pow = 0; } attackNo = BATTLE_Index2No( battleindex, charaindex ); //選擇代表的特效 if( pow <= 0 ){ ReceveEffect = SPR_fukkatu3; }else if( pow <= 100 ){ ReceveEffect = SPR_fukkatu1; }else if( pow <= 300 ){ ReceveEffect = SPR_fukkatu2; }else{ ReceveEffect = SPR_fukkatu3; } BATTLE_MultiRessurect( battleindex, attackNo, toindex, pow, par, SPR_item3, ReceveEffect ); //(光,鏡,守)精靈 // 躲絆毛潸 for( ;status == -1 && magicarg[0] != 0; magicarg++ ){ for( i = 1; i < BATTLE_MD_END; i ++ ){ // 躲絆疋永正伉井" if( strncmp( magicarg, aszMagicDef[i], 2 ) == 0 ){ status = i; pszP +=2; break; } } } // 躲絆卅中及匹撩 if( status == -1 ) return; // 窒莢 凳今六月井" if( ( magicarg = strstr( magicarg, szTurn ) ) != NULL){ magicarg += sizeof( szTurn ); sscanf( magicarg, "%d", &turn ); } //print("次數(shù):%d",turn); // 田玄伙 寞 battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX ); attackNo = BATTLE_Index2No( battleindex, charaindex ); // 蟈夠 BATTLE_MultiMagicDef( battleindex, attackNo, toindex, status, turn, MAGIC_EFFECT_USER, SPR_difence ); BATTLE_ItemUseDelete( charaindex, haveitemindex );}#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -