// int XMain::GetResIdxByCheckSum( XArrayLinear<XPatch::XRES_INFO> &ary, XUINT64 llCheckSum ) int XMain::GetResIdxByCheckSum( const XVector<XPatch::XRES_INFO> &ary, XUINT64 llCheckSum ) { int max = ary.size(); for( int i = 0; i < max; ++i ) { if( ary[ i ].llChecksum == llCheckSum ) return i; } return -1; }
/** @brief 효과 시전 pEffect의 효과를 기준타겟(pBaseTarget)을 기준으로 시전대상을 선정하여 시전한다. 현재 _vPos는 사용하지 않는다 */ xtError XSkillUser::UseEffect( const XSkillDat *pDat, EFFECT *pEffect, int level, XSkillReceiver *pBaseTarget, const XE::VEC2& vBaseTarget, // 기준타겟이 좌표형일경우. ID idCallerSkill ) { // 좌표에 값이 있으면 타겟은 널이어야 한다., XBREAK( vBaseTarget.IsNotZero() && pBaseTarget != nullptr ); XVector<XSkillReceiver*> aryCastTargets; // 시전대상 // 기준타겟이나 기준좌표로 시전대상을 얻는다. XBREAK( pBaseTarget == nullptr && vBaseTarget.IsZero() ); // XE::VEC2 vCastTarget; GetCastingTargetList( &aryCastTargets, &vCastTarget, pEffect->castTarget, pDat, pEffect, level, pBaseTarget, vBaseTarget ); // if( vCastTarget.IsZero() && aryCastTargets.empty() ) { return xERR_NOT_FOUND_CASTING_TARGET; // 시전대상을 찾지 못함 } if( aryCastTargets.size() ) { // 캐스팅 대상들에게 효과를 시전한다. for( auto pCastingTarget : aryCastTargets ) { // 즉시시전 or 버프방식 const XE::VEC2 vZero; CastEffToCastTarget( pDat, pEffect, level, // pBaseTarget, pCastingTarget, vZero, idCallerSkill ); } } else if( vCastTarget.IsNotZero() ) { // 시전대상이 좌표형 CastEffToCastTarget( pDat, pEffect, level, nullptr, vCastTarget, idCallerSkill ); } else { XBREAK(1); } return xOK; }
/** @brief 즉시시전형태(비버프형)의 효과를 시전대상에게 시전한다. */ xtError XSkillUser::CastEffToCastTargetByDirect( const XSkillDat *pDat, const EFFECT *pEffect, int level, XSkillReceiver *pCastingTarget, const XE::VEC2& vCastTarget ) { XVector<XSkillReceiver*> aryInvokeTarget; // 1회성이기때문에 루아도 쓰고 바로 파괴되는걸로 함 // 시전대상자(pCastingTarget)기준 발동대상 얻음 XE::VEC2 vIvkTarget; // 발동대상이 좌표형태일때 여기로 좌표가 담긴다. int numInvoke = GetInvokeTarget( &aryInvokeTarget, &vIvkTarget, pDat, level, pEffect->invokeTarget, pEffect, pCastingTarget, vCastTarget ); if( numInvoke > 0 || vIvkTarget.IsNotZero() ) { bool bCreateSfx = ( pEffect->m_invokeTargetEff.m_strSpr.empty() ) ? false : true; if( aryInvokeTarget.size() ) { for( auto pInvokeTarget : aryInvokeTarget ) { // 발동대상들에게 효과 적용 ApplyInvokeEffToIvkTarget( pInvokeTarget, vIvkTarget, pDat, pEffect, GetThisRecv(), // invoker bCreateSfx, level, nullptr ); // pBuff } // for } else if( vIvkTarget.IsNotZero() ) { // 발동좌표에 효과적용 ApplyInvokeEffToIvkTarget( nullptr, vIvkTarget, pDat, pEffect, GetThisRecv(), // invoker bCreateSfx, level, nullptr ); // pBuff } } return xOK; } // CastEffToCastTargetByDirect
void XGeometry::setAttribute( const QString &n, const XVector<XVector4D> &v ) { if( v.size() ) { _attr4[n] = v; if( _attr4[n].size() != _attributeSize ) { _attributeSize = _attr4[n].size(); _attributeSizeChanged = true; } } else { _attr1.remove(n); } _changedA4 << n; _changedAttrs = true; }
// full_list.txt를 쓴다. // int XMain::WriteFullList( XArrayLinear<XPatch::XRES_INFO>& aryAll ) int XMain::WriteFullList( const XVector<XPatch::XRES_INFO>& aryAll ) { char cPath[ 1024 ]; strcpy_s( cPath, SZ2C( XE::_GetPathPackageRoot() ) ); strcat_s( cPath, "full_list.txt" ); FILE *fp = NULL; fopen_s( &fp, cPath, "wt" ); if( fp == NULL ) return 0; char cBuff[ 1024 ]; // XARRAYLINEAR_LOOP( aryAll, XPatch::XRES_INFO, info ) for( auto& info : aryAll ) { strcpy_s( cBuff, SZ2C( info.strFile.c_str() ) ); strReplace( cBuff, '\\', '/' ); fprintf_s( fp, "\"%s\"\t%d\t%llu\n", cBuff, info.size, info.llChecksum ); } fprintf_s( fp, "// num files %d \n", aryAll.size() ); fclose( fp ); return 1; }
// core_list.txt를 쓴다. //int XMain::WriteCoreList( XArrayLinear<_tstring>& aryCore ) int XMain::WriteCoreList( const XVector<_tstring>& aryCore ) { char cPath[ 1024 ]; strcpy_s( cPath, SZ2C( XE::_GetPathPackageRoot() ) ); strcat_s( cPath, "core_list.txt" ); FILE *fp = NULL; fopen_s( &fp, cPath, "wt" ); if( fp == NULL ) return 0; char cBuff[ 1024 ]; // XARRAYLINEAR_LOOP( aryCore, _tstring, strRes ) for( auto& strRes : aryCore ) { strcpy_s( cBuff, SZ2C( strRes.c_str() ) ); strReplace( cBuff, '\\', '/' ); fprintf_s( fp, "\"%s\"\n", cBuff ); // fprintf_s( fp, "\"%s\"\n", SZ2C( strRes.c_str() ) ); } fprintf_s( fp, "// num files %d \n", aryCore.size() ); fclose( fp ); return 1; }