コード例 #1
0
ファイル: magic.c プロジェクト: Nurarihyo/smo-sa
int	MAGIC_MagicDef( 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
		return MAGIC_MagicDef_Battle( charaindex, toindex, marray, mp );
	}else{
		return FALSE;
	}
}
コード例 #2
0
ファイル: magic.c プロジェクト: Nurarihyo/smo-sa
int MAGIC_OtherRecovery( 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
		MAGIC_Recovery_Battle( charaindex, toindex, marray, mp );
	}else{
		if( CHAR_CHECKINDEX( toindex ) == FALSE )return FALSE; //{撩  
		MAGIC_OtherRecovery_Field( charaindex, toindex, marray);
	}
	return TRUE;
}
コード例 #3
0
ファイル: magic.c プロジェクト: beijunyi/longzoro-sa
int	MAGIC_StatusChange( 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) == 1 ) { //ͬ±ß
                int battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX );
                BATTLE_NoAction( battleindex, BATTLE_Index2No( battleindex, charaindex) );
                CHAR_talkToCli( charaindex, -1, "Ò쳣״̬..²»µÃÊ©ÓèÓÑ·½¡£", CHAR_COLORYELLOW);
                return FALSE;
            }
        }
#endif
        return MAGIC_StatusChange_Battle( charaindex, toindex, marray, mp );
    } else {
        return FALSE;
    }
}
コード例 #4
0
ファイル: magic.c プロジェクト: beijunyi/longzoro-sa
int MAGIC_OtherRecovery( 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
        MAGIC_Recovery_Battle( charaindex, toindex, marray, mp );
    } else {
        if( CHAR_CHECKINDEX( toindex ) == FALSE )return FALSE; //£ûÁÃ
        MAGIC_OtherRecovery_Field( charaindex, toindex, marray);
    }
    return TRUE;
}
コード例 #5
0
ファイル: magic.c プロジェクト: beijunyi/longzoro-sa
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;
}
コード例 #6
0
ファイル: magic.c プロジェクト: Nurarihyo/smo-sa
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;
}
コード例 #7
0
ファイル: battle_item.c プロジェクト: ChowZenki/SMO-Sa-Source
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);
}
コード例 #8
0
ファイル: battle_item.c プロジェクト: ChowZenki/SMO-Sa-Source
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 );

}