//-------------------------------------------------------------- // �� Ĥ��ë�������������� //-------------------------------------------------------------- // �� ������ void ITEM_useCaptureUp_Battle( int charaindex, // �������м��̼������͵� int toNo, // ����ľ���м� į int haveitemindex // �����м�ʧ�� ة�� į ) { int itemindex, battleindex, attackNo, pow = 5, ReceveEffect; char *pArg; // ʧ�� ة��ؤ�¾������� itemindex = CHAR_getItemIndex( charaindex, haveitemindex); if(!ITEM_CHECKINDEX(itemindex)) return; //------- ������� ----------- // �ɷ¶�����ë�� pArg = ITEM_getChar(itemindex, ITEM_ARGUMENT ); // �ɷ¶����� �м�ƥ�� if( pArg == NULL )return ; if( sscanf( pArg, "%d", &pow ) != 1 ){ // �Ϻ��̼����������¾��� pow = 5; } battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX ); attackNo = BATTLE_Index2No( battleindex, charaindex ); ReceveEffect = SPR_hoshi; // �幻 BATTLE_MultiCaptureUp( battleindex, attackNo, toNo, pow, SPR_item3, ReceveEffect ); // �� ��ʧ�� ة����������������ɧ�� BATTLE_ItemUseDelete( charaindex, haveitemindex ); }
int MAGIC_Recovery( int charaindex, int toindex, int marray, int mp ) { int battlemode; if( CHAR_CHECKINDEX( charaindex ) == FALSE )return FALSE; battlemode = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE ); if( battlemode == BATTLE_CHARMODE_INIT ) { return FALSE; } if( CHAR_getInt( charaindex, CHAR_MP ) < mp )return FALSE; CHAR_setInt( charaindex, CHAR_MP, CHAR_getInt( charaindex, CHAR_MP ) - mp ); if( IsBATTLING( charaindex ) == TRUE ) { #ifdef _PREVENT_TEAMATTACK //¶÷»Ý²»µÃ ʹÓõз½ int 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 ) { //²»Í¬±ß int battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX ); BATTLE_NoAction( battleindex, BATTLE_Index2No( battleindex, charaindex) ); CHAR_talkToCli( charaindex, -1, "¶÷»Ý¾«Áé..²»µÃÊ©Óè·ÇÍæ¼ÒµÐ·½¡£", CHAR_COLORYELLOW); return FALSE; } } #endif if (toindex==22) { print("jinchao err\n"); // shan(¶ÔÈ«ÌåʹÓÃħ·¨µÄbug)£¬ÐÞ¸ÄÕßjinchao+2001/12/07 return FALSE; } MAGIC_Recovery_Battle( charaindex, toindex, marray, mp ); } else { if( CHAR_CHECKINDEX( toindex ) == FALSE )return FALSE; // shan(¶ÔÈ«ÌåʹÓÃħ·¨µÄbug)£¬ÐÞ¸ÄÕßjinchao+2001/12/07 MAGIC_Recovery_Field( charaindex, marray); } return TRUE; }
int MAGIC_Recovery( int charaindex, int toindex, int marray, int mp ) { int battlemode; if( CHAR_CHECKINDEX( charaindex ) == FALSE )return FALSE; battlemode = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE ); if( battlemode == BATTLE_CHARMODE_INIT ){ return FALSE; } if( CHAR_getInt( charaindex, CHAR_MP ) < mp )return FALSE; CHAR_setInt( charaindex, CHAR_MP, CHAR_getInt( charaindex, CHAR_MP ) - mp ); if( IsBATTLING( charaindex ) == TRUE ){ #ifdef _PREVENT_TEAMATTACK //恩惠不得 使用敵方 int 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 ){//不同邊 int battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX ); BATTLE_NoAction( battleindex, BATTLE_Index2No( battleindex, charaindex) ); CHAR_talkToCli( charaindex, -1, "恩惠精靈..不得施予非玩家敵方。", CHAR_COLORYELLOW); return FALSE; } } #endif if (toindex==22){print("jinchao err\n");return FALSE;} // shan(對全體使用魔法的bug),修改者jinchao+2001/12/07 MAGIC_Recovery_Battle( charaindex, toindex, marray, mp ); }else{ if( CHAR_CHECKINDEX( toindex ) == FALSE )return FALSE; // shan(對全體使用魔法的bug),修改者jinchao+2001/12/07 MAGIC_Recovery_Field( charaindex, marray); } return TRUE; }
void 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); // Àˬdª««~ 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) ){ //¦PÃä return; } } if( BATTLE_Index2No( battleindex, charaindex ) == toindex ){ BATTLE_ItemUseDelete(charaindex,haveitemindex);//¥Î¦b¦Û¨ return; } if( CHAR_getInt( index2, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER ) { petid = -1;//§@¥Î¦b¤Hª« }else if( CHAR_getInt( index2, CHAR_WHICHTYPE) == CHAR_TYPEPET ) { masteridx = BATTLE_No2Index(battleindex,toindex-5);//§@¥Î¦bÃdª« if( !CHAR_CHECKINDEX( masteridx) ) return; petid = CHAR_getInt(index2,CHAR_PETID);//Ãdª«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) ){//¦~Ã~§P§O FINDPET = TRUE; break; } } sprintf(szWork,"BB|a%X|w3|r%X|f0|d0|p0|FF|",BATTLE_Index2No(battleindex,charaindex),toindex); BATTLESTR_ADD(szWork);//¥á¥XÃ@¬¶ªº°Êµe //°e°T®§¦Üª±®a if( FINDPET == TRUE ) {//Y¬°¦~Ã~ char buf4[255]; sprintf( buf4, "%s³QÀ~¶]¤F¡I", CHAR_getChar( index2, CHAR_NAME)); BATTLE_Exit(index2,battleindex);//Â÷¶}¾Ô°« if( CHAR_CHECKINDEX( masteridx) ){ CHAR_setInt(masteridx,CHAR_DEFAULTPET,-1);//µL°Ñ¾ÔÃd CHAR_talkToCli( masteridx,-1, buf4, CHAR_COLORYELLOW); } sprintf(szWork,"BQ|e%X|",toindex);//°k¶]°Êµe BATTLESTR_ADD(szWork); CHAR_talkToCli( charaindex,-1, buf4, CHAR_COLORYELLOW); }else { CHAR_talkToCli( charaindex, -1, "¤°»ò¨Æ³£¨Sµo¥Í¡C", CHAR_COLORYELLOW); } BATTLE_ItemUseDelete( charaindex, haveitemindex);//§R°£Ã@¬¶ #else index2 = BATTLE_No2Index(battleindex,toindex); // ³Q¬µ¨ìªº¬O§_¬°Ãdª« if(CHAR_getInt(index2,CHAR_WHICHTYPE) == CHAR_TYPEPET) { // ¦pªG³Q¬µªº¬O¦~Ã~ if(CHAR_getInt(index2,CHAR_PETID) >= 901 && CHAR_getInt(index2,CHAR_PETID) <= 904){ // ¨ú±o¥Ø¼Ðªº¥¿«á¤èªº¨¤¦âªºindex masteridx = BATTLE_No2Index(battleindex,toindex-5); // ¦pªG¹ï¾Ôªº¬Oª±®a if(CHAR_getInt(masteridx,CHAR_WHICHTYPE) == CHAR_TYPEPLAYER) PetEscape = 1; else print("\n¦~Ã~¦b¹J¼Ä®É¥X²{"); } } // ¦pªG¤£¬O¬µ¦Û¤v 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,"¦~Ã~³QÀ~¶]¤F¡I",CHAR_COLORWHITE); CHAR_talkToCli(charaindex,-1,"¦~Ã~³QÀ~¶]¤F¡I",CHAR_COLORWHITE); } } CHAR_talkToCli(charaindex,-1,"¤°»ò¨Æ³£¨Sµo¥Í¡C",CHAR_COLORWHITE); CHAR_talkToCli(charaindex,-1,"¹D¨ã®ø¥¢¤F¡C",CHAR_COLORWHITE); // ¨Ï¥Î«á¹D¨ã®ø¥¢ BATTLE_ItemUseDelete(charaindex,haveitemindex); #endif }
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"); // Àˬdª««~ 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);//³QÀ»¤¤¥Ø¼Ð¤§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;//¥´°w 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] ); // // } //////////////////////////// }
void ITEM_useRecovery_Battle( int charaindex, int toNo, int haveitemindex ) { #ifdef _CHANGEITEMUSE // Syu ADD ½Õ¾ã¾Ô°«¤¤¨Ï¥Î®Æ²z³]©w int power1 = 0; #endif 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 ); #ifdef _CHANGEITEMUSE // Syu ADD ½Õ¾ã¾Ô°«¤¤¨Ï¥Î®Æ²z³]©w if( ((p = strstr( arg, "Åé" )) != NULL) && ((p = strstr( arg,"®ð")) != NULL)) { kind = BD_KIND_HP_MP; p = strstr( arg,"®ð"); if( sscanf( p+2, "%d", &power1 ) != 1 ) { power1 = 0; } p = strstr( arg,"Åé"); } else if( (p = strstr( arg, "Åé" )) != NULL ) #else if( (p = strstr( arg, "Åé" )) != NULL ) #endif { 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; //¯S®Ä½s¸¹ } 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; //¯S®Ä½s¸¹ 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; #ifdef _CHANGEITEMUSE // Syu ADD ½Õ¾ã¾Ô°«¤¤¨Ï¥Î®Æ²z³]©w BATTLE_MultiRecovery( battleindex, attackNo, toNo, kind, power, per, SPR_item3, HealedEffect , power1); #else BATTLE_MultiRecovery( battleindex, attackNo, toNo, kind, power, per, SPR_item3, HealedEffect ); #endif { LogItem( CHAR_getChar( charaindex, CHAR_NAME ), CHAR_getChar( charaindex, CHAR_CDKEY ), #ifdef _add_item_log_name // WON ADD ¦bitemªºlog¤¤¼W¥[item¦WºÙ itemindex, #else ITEM_getInt( itemindex, ITEM_ID ), #endif "BattleUse(¾Ô°«¤¤¨Ï¥Î±¼ªº¹D¨ã)", 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_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; #ifdef _PREVENT_TEAMATTACK //¥úÃè¦u..¤£±o¨Ï¥Î¼Ä¤è int 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, toNo) == 0 ){//¤£¦PÃä int battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX ); BATTLE_NoAction( battleindex, BATTLE_Index2No( battleindex, charaindex) ); CHAR_talkToCli( charaindex, -1, "¥úÃè¦u..¤£±o¬I¤©«Dª±®a¼Ä¤è¡C", CHAR_COLORYELLOW); return; } } #endif 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 ¦bitemªºlog¤¤¼W¥[item¦WºÙ itemindex, #else ITEM_getInt( itemindex, ITEM_ID ), #endif "BattleUse(¾Ô°«¤¤¨Ï¥Î±¼ªº¹D¨ã)", 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_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[] = " ";//¨ó§U¤À¸Ñ¦r¦êªº°Ï¹j¦r¤¸ 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 );//¾ã¦ê¦r¦ê pszP = strtok(buffer, delim);//²Ä¤@Ó°Ñ¼Æ magicarg = strtok(NULL, delim);//²Ä¤GÓ°Ñ¼Æ magicarg2 = strtok(NULL, delim);//²Ä¤TÓ°Ñ¼Æ magicarg3 = strtok(NULL, delim);//²Ä¥|Ó°Ñ¼Æ sprintf(magicarg4,"%s %s %s",magicarg,magicarg2,magicarg3); magicarg = (char*)magicarg4; //¥úÃè¦u..¤£±o¨Ï¥Î¼Ä¤è 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 ){//¤£¦PÃä battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX ); BATTLE_NoAction( battleindex, BATTLE_Index2No( battleindex, charaindex) ); CHAR_talkToCli( charaindex, -1, "¥úÃè¦u..¤£±o¬I¤©«Dª±®a¼Ä¤è¡C", CHAR_COLORYELLOW); return; } } //¦b®ðµ´ª¬ºA¦^´_@¤O if( strstr( pszP, "%" ) ){ par = 1; } if( sscanf( pszP, "%d", &pow ) != 1 ){ pow = 0; } attackNo = BATTLE_Index2No( battleindex, charaindex ); //¿ï¾Ü¥Nªíªº¯S®Ä 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 ); //(¥ú,Ãè,¦u)ºëÆF // ¸ú²Ì¤ò¼è 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("¦¸¼Æ:%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 ); }
int MAGIC_Nocast( int charaindex, int toindex, int marray, int mp ) { int battlemode; int i,turn,perStatus; int ToList[SIDE_OFFSET*2+1]; char *magicarg; int attackNo=0; int battleindex,Success = 0; char szTurn[] = "turn"; char szSuccess[] = "成"; char *pszP; //check index if( CHAR_CHECKINDEX( charaindex ) == FALSE )return FALSE; battlemode = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE ); // 爵 釩銨凜反 骰允月//?? if( battlemode == BATTLE_CHARMODE_INIT ){ return FALSE; } //mp不足 if( CHAR_getInt( charaindex, CHAR_MP ) < mp )return FALSE; //消耗mp CHAR_setInt( charaindex, CHAR_MP, CHAR_getInt( charaindex, CHAR_MP ) - mp ); //魔法名稱 magicarg = MAGIC_getChar( marray, MAGIC_OPTION ); if( magicarg == NULL ) { print("\n magicarg == NULL "); return FALSE; } pszP = magicarg; //讀取作用回合數 if( ( pszP = strstr( pszP, szTurn ) ) != NULL){ pszP += sizeof( szTurn ); sscanf( pszP, "%d", &turn ); } // 岳 澀爛//命中率 if( ( pszP = strstr( pszP, szSuccess ) ) != NULL){ pszP += sizeof( szSuccess ); sscanf( pszP, "%d", &Success ); } // print("\nvincent-->MAGIC_Nocast use"); battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX ); attackNo = BATTLE_Index2No( battleindex, charaindex ); BATTLE_MultiList( battleindex, toindex, ToList ); //施魔法動畫效果 BATTLE_MagicEffect(battleindex, attackNo, ToList, MAGIC_EFFECT_USER, SPR_hoshi); charaindex = BATTLE_No2Index( battleindex, attackNo ); //check是否戰鬥中 if( IsBATTLING( charaindex ) == TRUE ) { for( i = 0; ToList[i] != -1; i ++ ) { toindex = BATTLE_No2Index( battleindex, ToList[i] ); if( BATTLE_StatusAttackCheck( charaindex,toindex, BATTLE_ST_NOCAST, Success, 30, 1.0, &perStatus ) == TRUE && CHAR_getInt( toindex, CHAR_WHICHTYPE) != CHAR_TYPEPET) { CHAR_setWorkInt( toindex, CHAR_WORKNOCAST, turn ); //無法展開咒術頁 lssproto_NC_send( getfdFromCharaIndex( toindex ), 1); //print("\nvincent-->NOCASTING2"); // BATTLE_BadStatusString( ToList[i], BATTLE_ST_NOCAST ); } } return TRUE; }else{ return FALSE; } }
void 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);//�뿪ս�� if( CHAR_CHECKINDEX( masteridx) ){ CHAR_setInt(masteridx,CHAR_DEFAULTPET,-1);//��ս�� 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, "ʲ���¶�û������", 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); // �����ս������� if(CHAR_getInt(masteridx,CHAR_WHICHTYPE) == CHAR_TYPEPLAYER) PetEscape = 1; else print("\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,"ʲ���¶�û������",CHAR_COLORWHITE); CHAR_talkToCli(charaindex,-1,"������ʧ�ˡ�",CHAR_COLORWHITE); // ʹ���������ʧ BATTLE_ItemUseDelete(charaindex,haveitemindex); #endif }
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] ); // // } //////////////////////////// }
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[] = " ";//Э���ֽ��ִ���������Ԫ 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);//��һ������ magicarg = strtok(NULL, delim);//�ڶ������� magicarg2 = strtok(NULL, delim);//���������� magicarg3 = strtok(NULL, delim);//���ĸ����� 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; // } } //������״̬�ظ����� 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("����:%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 ); }
int MAGIC_Nocast( int charaindex, int toindex, int marray, int mp ) { int battlemode; int i,turn,perStatus; int ToList[SIDE_OFFSET*2+1]; char *magicarg; int attackNo=0; int battleindex,Success = 0; char szTurn[] = "turn"; char szSuccess[] = "³É"; char *pszP; //check index if( CHAR_CHECKINDEX( charaindex ) == FALSE )return FALSE; battlemode = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE ); // ¾ô ·°ï§ÁÝ·´ ÷»ÔÊÔÂ//?? if( battlemode == BATTLE_CHARMODE_INIT ) { return FALSE; } //mp²»×ã if( CHAR_getInt( charaindex, CHAR_MP ) < mp )return FALSE; //ÏûºÄmp CHAR_setInt( charaindex, CHAR_MP, CHAR_getInt( charaindex, CHAR_MP ) - mp ); //ħ·¨Ãû³Æ magicarg = MAGIC_getChar( marray, MAGIC_OPTION ); if( magicarg == "\0" ) { print("\n magicarg == NULL "); return FALSE; } pszP = magicarg; //¶ÁÈ¡×÷ÓûغÏÊý if( ( pszP = strstr( pszP, szTurn ) ) != NULL) { pszP += sizeof( szTurn ); sscanf( pszP, "%d", &turn ); } // ÔÀ ɬÀÃ//ÃüÖÐÂÊ if( ( pszP = strstr( pszP, szSuccess ) ) != NULL) { pszP += sizeof( szSuccess ); sscanf( pszP, "%d", &Success ); } // print("\nvincent-->MAGIC_Nocast use"); battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX ); attackNo = BATTLE_Index2No( battleindex, charaindex ); BATTLE_MultiList( battleindex, toindex, ToList ); //ʩħ·¨¶¯»Ð§¹û BATTLE_MagicEffect(battleindex, attackNo, ToList, MAGIC_EFFECT_USER, SPR_hoshi); charaindex = BATTLE_No2Index( battleindex, attackNo ); //checkÊÇ·ñÕ½¶·ÖÐ if( IsBATTLING( charaindex ) == TRUE ) { for( i = 0; ToList[i] != -1; i ++ ) { toindex = BATTLE_No2Index( battleindex, ToList[i] ); if( BATTLE_StatusAttackCheck( charaindex,toindex, BATTLE_ST_NOCAST, Success, 30, 1.0, &perStatus ) == TRUE && CHAR_getInt( toindex, CHAR_WHICHTYPE) != CHAR_TYPEPET) { CHAR_setWorkInt( toindex, CHAR_WORKNOCAST, turn ); //ÎÞ·¨Õ¹¿ªÖäÊõÒ³ lssproto_NC_send( getfdFromCharaIndex( toindex ), 1); //print("\nvincent-->NOCASTING2"); // BATTLE_BadStatusString( ToList[i], BATTLE_ST_NOCAST ); } } return TRUE; } else { return FALSE; } }