📄 pet_skill.c
字号:
} fclose(f); PETSKILL_petskillnum = petskill_readlen; print( "有效宠物技能数是 %d...", PETSKILL_petskillnum ); /* hash 及瓒 */ for( i = 0; i < arraysizeof( PETSKILL_functbl); i ++ ) { PETSKILL_functbl[i].hash = hashpjw( PETSKILL_functbl[i].functionname); }/*#ifdef _CFREE_petskill for( i=0; i <PETSKILL_petskillnum ; i++ ){ for( j = PETSKILL_NAME; j < PETSKILL_DATACHARNUM; j ++ ){ print( "%s ", PETSKILL_getChar( i, j)); } print( "\n"); for( j = PETSKILL_ID; j < PETSKILL_DATAINTNUM; j ++ ){ print( "%d ", PETSKILL_getInt( i, j)); } print( "\n-------------------------------------------------\n"); }#endif*/ return TRUE;}/*------------------------------------------------------------------------ * Petskill及涩烂白央奶伙 心 仄 *-----------------------------------------------------------------------*/BOOL PETSKILL_reinitPetskill( void ){ freeMemory( PETSKILL_petskill); return( PETSKILL_initPetskill( getPetskillfile()));}/*------------------------------------------------------------------------ * PETSKILL_ID井日骄侬毛襞月楮醒 * 忒曰袄 * 岳 : 骄侬 * 撩 : -1 *-----------------------------------------------------------------------*/int PETSKILL_getPetskillArray( int petskillid){#ifdef _PETSKILL_OPTIMUM // 查询宠技ID改为阵列式 if( petskillid >= 0 && petskillid < PETSKILL_petskillnum ) return PETSKILL_petskill[petskillid].data[PETSKILL_ID];#else int i; for( i = 0; i < PETSKILL_petskillnum; i ++ ) { if( PETSKILL_petskill[i].data[PETSKILL_ID] == petskillid ) { return i; } }#endif return -1;}/*------------------------------------------------------------ * 矢永玄 及楮醒 井日禾奶件正□毛忒允 * 娄醒 * name char* 热诸及 蟆 * 忒曰袄 * 楮醒尺及禾奶件正[卅中桦宁卞反NULL ------------------------------------------------------------*/PETSKILL_CALLFUNC PETSKILL_getPetskillFuncPointer(char* name ){ int i; int hash = hashpjw( name ); for( i = 0 ; i< arraysizeof( PETSKILL_functbl) ; i++ ) { if( PETSKILL_functbl[i].hash == hash ) { if( strcmp( PETSKILL_functbl[i].functionname, name ) == 0 ) { return PETSKILL_functbl[i].func; } } } return NULL;}int PETSKILL_Use( int charaindex, int havepetskill, int toindex, char *data //BOOL isCLI // Robin 2001/02/26 if owner is player){ int array, petskillid; int ret,i; PETSKILL_CALLFUNC func; char combined[32], *pszOption; petskillid = CHAR_getPetSkill( charaindex, havepetskill);#ifdef _FIXWOLF // Syu ADD 修正狼人变身Bug if( petskillid == 600 ){ if ( CHAR_getInt ( charaindex , CHAR_BASEIMAGENUMBER) == 101428 ) petskillid = -1; }#endif array = PETSKILL_getPetskillArray( petskillid); if( array == -1 ) return FALSE; if(PETSKILL_getInt(array, PETSKILL_ILLEGAL)){ if( (CHAR_getInt(charaindex, CHAR_WHICHTYPE)==CHAR_TYPEPET) ){ print(" CHAR_TYPEPET:%d ", charaindex); return FALSE; } }#ifdef _PETSKILL_CHECKTYPE#define _SKILLTYPE_NONE 0x01#define _SKILLTYPE_BATTLE 0x02 if( (CHAR_getInt(charaindex, CHAR_WHICHTYPE)==CHAR_TYPEPET) && (PETSKILL_getInt( array, PETSKILL_USETYPE) & _SKILLTYPE_BATTLE) > 0){ int masterindex = CHAR_getWorkInt( charaindex, CHAR_WORKPLAYERINDEX); if( !CHAR_CHECKINDEX( masterindex) ) return FALSE; if( CHAR_getWorkInt( masterindex, CHAR_WORKBATTLEMODE) == BATTLE_CHARMODE_NONE ){ return FALSE; } }#endif func = PETSKILL_getPetskillFuncPointer( PETSKILL_getChar( array, PETSKILL_FUNCNAME) ); if( func ) { ret = func( charaindex, toindex, array, data ); }else { ret = FALSE; } return ret;}int _PETSKILL_GetArray( char *file, int line, int charaindex, int havepetskill ){ int petskillid,array; petskillid = CHAR_getPetSkill( charaindex, havepetskill); if( petskillid == -1 ) { return -1; } array = PETSKILL_getPetskillArray( petskillid); return array;}//----------------------------------------------------------------------int PETSKILL_ContinuationAttack( int charaindex, int toindex, int array, char *data){ char *pszOption; int N = 1; CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_RENZOKU ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toindex ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK ); pszOption = PETSKILL_getChar( array, PETSKILL_OPTION ); if( sscanf( pszOption, "%d", &N ) == 1 ){ if( N < 1 || N > 10 )N = 1; }else{ N = 1; } CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, N ); return TRUE;}int PETSKILL_ChargeAttack( int charaindex, int toindex, int array, char *data){ char *pszOption, *pszP; int N = 1, Per = 0; CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_CHARGE ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toindex ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK ); pszOption = PETSKILL_getChar( array, PETSKILL_OPTION ); if( sscanf( pszOption, "%d", &N ) == 1 ){ if( N < 1 || N > 10 )N = 1; }else{ N = 1; } if( (pszP = strstr( pszOption, "攻%" ) ) != NULL ){ sscanf( pszP+3, "%d", &Per ); } CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, N ); CHAR_SETWORKINT_HIGH( charaindex, CHAR_WORKBATTLECOM3, Per ); return TRUE;}int PETSKILL_Guardian( int charaindex, int toNo, int array, char *data){ char *pszOption, *pszP; int battleindex, side, pos, ownerpos, strdef, flg; float fPer = 0.01; pszOption = PETSKILL_getChar( array, PETSKILL_OPTION ); if( (pszP = strstr( pszOption, "攻%" ) ) != NULL ){ sscanf( pszP+3, "%f", &fPer ); fPer=(fPer/100); strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR); strdef=(int)(strdef * fPer); CHAR_setWorkInt(charaindex,CHAR_WORKATTACKPOWER,(CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR)+strdef)); } if( (pszP = strstr( pszOption, "防%" ) ) != NULL ){ sscanf( pszP+3, "%f", &fPer ); fPer=(fPer/100); strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXTOUGH); strdef=(int)(strdef * fPer); CHAR_setWorkInt(charaindex,CHAR_WORKDEFENCEPOWER,(CHAR_getWorkInt(charaindex,CHAR_WORKFIXTOUGH)+strdef)); } CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_GUARDIAN_ATTACK ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK ); flg = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEFLG ); flg |= CHAR_BATTLEFLG_GUARDIAN; CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEFLG, flg ); battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX ); pos = BATTLE_Index2No( battleindex, charaindex ); if( (pszP = strstr( pszOption, "COM:" ) ) != NULL && strstr( pszP+4, "防御" ) != NULL ){ CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_GUARD ); side = ( toNo >= SIDE_OFFSET )?( 1 ):( 0 ); ownerpos = toNo - side * SIDE_OFFSET; if( 0 <= ownerpos && ownerpos < SIDE_OFFSET ){ BattleArray[battleindex].Side[side].Entry[ownerpos].guardian = pos; } }else{ side = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLESIDE ); ownerpos = pos - 5; ownerpos -= side * SIDE_OFFSET; if( ownerpos < 0 || ownerpos > 19 ){ }else{ BattleArray[battleindex].Side[side].Entry[ownerpos].guardian = pos; } } return TRUE;}int PETSKILL_Mighty( int charaindex, int toindex, int array, char *data){ char *pszOption, *pszP; int iBai = 0, iDuck = 0; float fBai = 2.00; CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_MIGHTY ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toindex ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK ); pszOption = PETSKILL_getChar( array, PETSKILL_OPTION ); if( (pszP = strstr( pszOption, "倍" ) ) != NULL ){ sscanf( pszP+2, "%f", &fBai ); iBai = (int)(fBai * 100); } CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, iBai ); pszOption = PETSKILL_getChar( array, PETSKILL_OPTION ); if( ( pszP = strstr( pszOption, "避" ) ) != NULL){ sscanf( pszP+2, "%d", &iDuck ); } CHAR_SETWORKINT_HIGH( charaindex, CHAR_WORKBATTLECOM3, iDuck ); return TRUE;}int PETSKILL_PowerBalance( int charaindex, int toindex, int array, char *data){ char *pszOption, *pszP; float fPer = 0.01; int strdef; CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_POWERBALANCE); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toindex ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK ); pszOption = PETSKILL_getChar( array, PETSKILL_OPTION ); if( pszOption == NULL ) { print("\n pszOption == NULL "); return FALSE; } if( (pszP = strstr( pszOption, "攻%" ) ) != NULL ){ sscanf( pszP+3, "%f", &fPer ); fPer=(fPer/100); strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR); strdef=(int)(strdef * fPer); CHAR_setWorkInt(charaindex,CHAR_WORKATTACKPOWER,(CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR)+strdef)); } if( (pszP = strstr( pszOption, "防%" ) ) != NULL ){ sscanf( pszP+3, "%f", &fPer ); fPer=(fPer/100); strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXTOUGH); strdef=(int)(strdef * fPer); CHAR_setWorkInt(charaindex,CHAR_WORKDEFENCEPOWER,(CHAR_getWorkInt(charaindex,CHAR_WORKFIXTOUGH)+strdef)); } return TRUE;}//----------------------------------------------------------------------int PETSKILL_StatusChange( int charaindex, int toindex, int array, char *data){ char *pszOption, *pszP; float fPer = 0.01; int strdef; int status = -1, i = 0, turn = 3; char szTurn[] = "turn"; CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_STATUSCHANGE ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toindex ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK ); pszOption = PETSKILL_getChar( array, PETSKILL_OPTION ); pszP = pszOption; 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; } } } if( ( pszP = strstr( pszP, szTurn ) ) != NULL){ pszP += sizeof( szTurn ); sscanf( pszP, "%d", &turn ); } CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, i ); CHAR_SETWORKINT_HIGH( charaindex, CHAR_WORKBATTLECOM3, turn ); if( (pszP = strstr( pszOption, "攻%" ) ) != NULL ){ sscanf( pszP+3, "%f", &fPer ); fPer=(fPer/100); strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR); strdef=(int)(strdef * fPer); CHAR_setWorkInt(charaindex,CHAR_WORKATTACKPOWER, (CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR)+strdef) ); } if( (pszP = strstr( pszOption, "防%" ) ) != NULL ){ sscanf( pszP+3, "%f", &fPer ); fPer=(fPer/100); strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXTOUGH); strdef=(int)(strdef * fPer); CHAR_setWorkInt(charaindex,CHAR_WORKDEFENCEPOWER, (CHAR_getWorkInt(charaindex,CHAR_WORKFIXTOUGH)+strdef)); } return TRUE;}#ifdef _VARY_WOLFint PETSKILL_Vary( int cindex, int tindex, int id, char* data){ char *pszOption, *pszP; float fPer = 0.01; int a_dep; int d_dep; int i; int petid[4] = {981,982,983,984}; for( i=0; i<4; i++) { if( CHAR_getInt( cindex, CHAR_PETID) == petid[i] ) break; } if( i>= 4 ) return FALSE; CHAR_setWorkInt( cindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_VARY); CHAR_setWorkInt( cindex, CHAR_WORKBATTLECOM2, tindex ); CHAR_setWorkInt( cindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK ); pszOption = PETSKILL_getChar( id, PETSKILL_OPTION ); if(pszOption==NULL){ print("\n pszOption==NULL"); return FALSE; } if( (pszP = strstr( pszOption, "攻%" ) ) != NULL ){ sscanf( pszP+3, "%f", &fPer ); CHAR_setWorkInt( cindex, CHAR_SKILLSTRPOWER, fPer); fPer = fPer / 100; a_dep = CHAR_getWorkInt( cindex, CHAR_WORKFIXSTR); a_dep = (int)(a_dep * fPer);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -