void CGoods::EnchaseAttrRemove(CPlayer* pPlayer,CGoods* pCard) { vector<CGoods::tagAddonProperty>::iterator tagCardIter=pCard->GetAddonProperties()->begin(); CGoodsBaseProperties* pEquipBaseProperty=GoodsSetup::QueryGoodsBaseProperties(m_dwBasePropertiesIndex); for(;tagCardIter!=pCard->GetAddonProperties()->end();tagCardIter++) { //装备上是否有该属性 if(tagCardIter->gapType==GAP_PARTICULAR_ATTRIBUTE) continue; if(tagCardIter->gapType==GAP_MIN_REINFORCE_LEVEL || tagCardIter->gapType==GAP_MAX_REINFORCE_LEVEL) continue; if(tagCardIter->gapType==GAP_COLOR) continue; if(tagCardIter->gapType==GAP_QUALITY) continue; bool bExist=HasAddonProperty(tagCardIter->gapType); if(bExist) { //已经有该属性,直接更新 ChangeAttribute(tagCardIter->gapType,-(tagCardIter->lValues[0]),1); } } UpdateAttribute(pPlayer->GetExID()); }
M_RESULT SnarlInterface::ChangeAttribute(LONG32 Id, SNARL_ATTRIBUTES Attr, LPCWSTR Value) { LPSTR szParam1 = WideToUTF8(Value); M_RESULT result = ChangeAttribute(Id, Attr, szParam1); delete [] szParam1; return result; }
bool CGoods::AddonPropertyUpdate(eGoodsAddonProperties gapProperty,eGoodsAddonProperties gapRange) { bool bPropertyExist=HasAddonProperty(gapProperty); bool bRangeExist=HasAddonProperty(gapRange); if(bPropertyExist && bRangeExist) { long lRange1=GetAddonPropertyValues(gapRange,1); long lRange2=GetAddonPropertyValues(gapRange,2); if(lRange1>lRange2) return false; int ranVal=random(lRange2-lRange1+1); ranVal+=lRange1; ChangeAttribute(gapProperty,ranVal,1,true); return true; } return false; }
int Copy(int mode,char *filenameSourc,char *fileextSourc, char* filenameDest,char *fileextDest) { if (mode==1) //内往内 { int p=GetFileID(filenameSourc,fileextSourc); if (p==-1) { printf("复制文件不存在!\n"); return -1; } else if (fileIndex[p].node->filesize>FreeFDBNum*4093) { printf("目标文件大小超出剩余存储空间,操作已取消\n"); return -1; } else { int q=GetFileID(filenameDest,fileextDest); if (q!=-1) { printf("文件已存在,是否替换?\n",filenameDest,fileextDest); printf("yes(y),no(n): "); char input; input=getchar(); while(input=='\n') input=getchar(); if (input=='n') { printf("File existe.Can not copy.\n"); return -1; } else { Delete(1,filenameDest,fileextDest); } } // New(1,filenameDest,fileextDest); q=GetFileID(filenameDest,fileextDest); FileNode *fnq=fileIndex[q].node;//目的地 FileNode *fnp=fileIndex[p].node;//源文件 fnq->filesize=fnp->filesize; //FileNode fn=NowDirDirTree[p]; int nowFDB=fnp->FDBBlock;//源 int size=fnp->filesize;//源文件大小 int BlockNum=(size+4092)/4093;//源文件数据块数 char data[4096]; char desnextadd[3]; int add=0; int firstFDB=-1; for (int i=0;i<BlockNum-1;i++) { add=AddressOfBlock(nowFDB); fseek(fpDisk,add,0); fread(data,1,4096,fpDisk); char three[3]; three[0]=data[4093]; three[1]=data[4094]; three[2]=data[4095]; int nextBlock=ThreeToInt(three); nowFDB=nextBlock; // if (i==0) firstFDB=FirstBlankFDB; add=AddressOfBlock(FirstBlankFDB+FCBRemainNum+3); fseek(fpDisk,add,0); FDBBitmap[FirstBlankFDB]=b_Full; FreeFDBNum--; FirstBlankFDB=GetNextBlankFDB(); IntToThree(FirstBlankFDB+FCBRemainNum+3,desnextadd); data[4093]=desnextadd[0]; data[4094]=desnextadd[1]; data[4095]=desnextadd[2]; fwrite(data,1,4096,fpDisk); } //不足一块的内容 int remainSize=size; if (remainSize%4093==0&&remainSize>0) remainSize=4093; else remainSize%=4093; //memset(data,0,sizeof(data)); if (remainSize>0) { add=AddressOfBlock(nowFDB); //fseek(fpDisk,add,0); ReadBlock(nowFDB,data,remainSize); WriteToBlock(FirstBlankFDB+FCBRemainNum+3,data,remainSize); FDBBitmap[FirstBlankFDB]=b_Full; if(firstFDB==-1) firstFDB=FirstBlankFDB; FirstBlankFDB=GetNextBlankFDB(); FreeFDBNum--; } fnq->FDBBlock=firstFDB+FCBRemainNum+3; ChangeAttribute(1,q); return fnq->filesize; } } else if (mode==2)//内往外 { int size; int fid=GetFileID(filenameSourc,fileextSourc); if (fid==-1) { printf("目录下找不到该文件。\n",filenameSourc,fileextSourc); return -1; } else { FileNode *fn=fileIndex[fid].node; int nowFDB=fn->FDBBlock;//源文件 size=fn->filesize; int BlockNum=(size+4092)/4093; char data[4096]; FILE* fp; fp=fopen(filenameDest,"wb"); for (int i=0;i<BlockNum-1;i++) { int add=AddressOfBlock(nowFDB); fseek(fpDisk,add,0); fread(data,1,4096,fpDisk); char three[3]; three[0]=data[4093]; three[1]=data[4094]; three[2]=data[4095]; int nextBlock=ThreeToInt(three); nowFDB=nextBlock; //fseek(fpDisk,add,0); fwrite(data,1,4093,fp); } int remainSize=size; if (remainSize%4093==0&&remainSize>0) remainSize=4093; else remainSize%=4093; ReadBlock(nowFDB,data,remainSize); for (int j=0;j<remainSize;j++) { fputc(data[j],fp); } int flen=ftell(fp); fclose(fp); } return size; } else//外往内 { FILE* fp; fp=fopen(filenameSourc,"rb"); // if (fp==NULL) { printf("未找到目标文件,操作已终止\n"); return -1; } fseek(fp,0L,SEEK_END); /* 定位到文件末尾 */ int flen=ftell(fp); /* 得到文件大小 */ if (flen>FreeFDBNum*4093) { printf("目标文件大小超出剩余存储空间,操作已取消\n"); return -1; } fseek(fp,0L,SEEK_SET); // int q=GetFileID(filenameDest,fileextDest); if (q!=-1) { printf("文件已存在,是否替换?\n",filenameDest,fileextDest); printf("yes(y),no(n): "); char input; input=getchar(); while(input=='\n') input=getchar(); if (input=='n') { printf("File existe.Can not copy.\n"); return -1; } else { Delete(1,filenameDest,fileextDest); ChangeNowDir(NowDirRoute); } } // New(1,filenameDest,fileextDest); int fid=GetFileID(filenameDest,fileextDest); FileNode *fn=fileIndex[fid].node; int filesize=flen; //文件大小 int firstFDB=-1; char desnextadd[3]; char data[4096]; for (int i=0;i<(flen/4093);i++) { fread(data,1,4093,fp); int add=AddressOfBlock(FirstBlankFDB+FCBRemainNum+3); fseek(fpDisk,add,0); if (i==0) firstFDB=FirstBlankFDB; FDBBitmap[FirstBlankFDB]=b_Full; FreeFDBNum--; FirstBlankFDB=GetNextBlankFDB(); IntToThree(FirstBlankFDB+FCBRemainNum+3,desnextadd); data[4093]=desnextadd[0]; data[4094]=desnextadd[1]; data[4095]=desnextadd[2]; fwrite(data,1,4096,fpDisk); } if (flen%4093!=0&&flen>0) { int remainSize=flen; if (remainSize%4093==0&&remainSize>0) remainSize=4093; else remainSize%=4093; int add=AddressOfBlock(FirstBlankFDB+FCBRemainNum+3); fseek(fpDisk,add,0); fread(data,1,remainSize,fp); WriteToBlock(FirstBlankFDB+FCBRemainNum+3,data,remainSize); FDBBitmap[FirstBlankFDB]=b_Full; FreeFDBNum--; if(firstFDB==-1) firstFDB=FirstBlankFDB; FirstBlankFDB=GetNextBlankFDB(); fn->FDBBlock=firstFDB+FCBRemainNum+3; } fn->filesize=filesize; ChangeAttribute(1,fid); fclose(fp); return flen; } }
M_RESULT SnarlInterface::ChangeAttribute(SNARL_ATTRIBUTES Attr, LPCWSTR Value) { return ChangeAttribute(m_nLastMessageId, Attr, Value); }
INT CommandAttrib (LPTSTR param) { LPTSTR *arg; INT argc, i; TCHAR szPath[MAX_PATH]; TCHAR szFileName [MAX_PATH]; BOOL bRecurse = FALSE; BOOL bDirectories = FALSE; DWORD dwAttrib = 0; DWORD dwMask = 0; /* initialize strings */ szPath[0] = _T('\0'); szFileName[0] = _T('\0'); /* print help */ if (!_tcsncmp (param, _T("/?"), 2)) { ConOutResPaging(TRUE,STRING_ATTRIB_HELP); return 0; } nErrorLevel = 0; /* build parameter array */ arg = split (param, &argc, FALSE, FALSE); /* check for options */ for (i = 0; i < argc; i++) { if (_tcsicmp (arg[i], _T("/s")) == 0) bRecurse = TRUE; else if (_tcsicmp (arg[i], _T("/d")) == 0) bDirectories = TRUE; } /* create attributes and mask */ for (i = 0; i < argc; i++) { if (*arg[i] == _T('+')) { if (_tcslen (arg[i]) != 2) { error_invalid_parameter_format (arg[i]); freep (arg); return -1; } switch ((TCHAR)_totupper (arg[i][1])) { case _T('A'): dwMask |= FILE_ATTRIBUTE_ARCHIVE; dwAttrib |= FILE_ATTRIBUTE_ARCHIVE; break; case _T('H'): dwMask |= FILE_ATTRIBUTE_HIDDEN; dwAttrib |= FILE_ATTRIBUTE_HIDDEN; break; case _T('R'): dwMask |= FILE_ATTRIBUTE_READONLY; dwAttrib |= FILE_ATTRIBUTE_READONLY; break; case _T('S'): dwMask |= FILE_ATTRIBUTE_SYSTEM; dwAttrib |= FILE_ATTRIBUTE_SYSTEM; break; default: error_invalid_parameter_format (arg[i]); freep (arg); return -1; } } else if (*arg[i] == _T('-')) { if (_tcslen (arg[i]) != 2) { error_invalid_parameter_format (arg[i]); freep (arg); return -1; } switch ((TCHAR)_totupper (arg[i][1])) { case _T('A'): dwMask |= FILE_ATTRIBUTE_ARCHIVE; dwAttrib &= ~FILE_ATTRIBUTE_ARCHIVE; break; case _T('H'): dwMask |= FILE_ATTRIBUTE_HIDDEN; dwAttrib &= ~FILE_ATTRIBUTE_HIDDEN; break; case _T('R'): dwMask |= FILE_ATTRIBUTE_READONLY; dwAttrib &= ~FILE_ATTRIBUTE_READONLY; break; case _T('S'): dwMask |= FILE_ATTRIBUTE_SYSTEM; dwAttrib &= ~FILE_ATTRIBUTE_SYSTEM; break; default: error_invalid_parameter_format (arg[i]); freep (arg); return -1; } } } if (argc == 0) { DWORD len; len = GetCurrentDirectory (MAX_PATH, szPath); if (szPath[len-1] != _T('\\')) { szPath[len] = _T('\\'); szPath[len + 1] = 0; } _tcscpy (szFileName, _T("*.*")); PrintAttribute (szPath, szFileName, bRecurse); freep (arg); return 0; } /* get full file name */ for (i = 0; i < argc; i++) { if ((*arg[i] != _T('+')) && (*arg[i] != _T('-')) && (*arg[i] != _T('/'))) { LPTSTR p; GetFullPathName (arg[i], MAX_PATH, szPath, NULL); p = _tcsrchr (szPath, _T('\\')) + 1; _tcscpy (szFileName, p); *p = _T('\0'); if (dwMask == 0) PrintAttribute (szPath, szFileName, bRecurse); else ChangeAttribute (szPath, szFileName, dwMask, dwAttrib, bRecurse, bDirectories); } } freep (arg); return 0; }
static VOID ChangeAttribute (LPTSTR pszPath, LPTSTR pszFile, DWORD dwMask, DWORD dwAttrib, BOOL bRecurse, BOOL bDirectories) { WIN32_FIND_DATA findData; HANDLE hFind; DWORD dwAttribute; TCHAR szFullName[MAX_PATH]; LPTSTR pszFileName; /* prepare full file name buffer */ _tcscpy (szFullName, pszPath); pszFileName = szFullName + _tcslen (szFullName); /* change all subdirectories */ if (bRecurse) { /* append file name */ _tcscpy (pszFileName, _T("*.*")); hFind = FindFirstFile (szFullName, &findData); if (hFind == INVALID_HANDLE_VALUE) { ErrorMessage (GetLastError (), pszFile); nErrorLevel = 1; return; } do { if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { if (!_tcscmp (findData.cFileName, _T(".")) || !_tcscmp (findData.cFileName, _T(".."))) continue; _tcscpy (pszFileName, findData.cFileName); _tcscat (pszFileName, _T("\\")); ChangeAttribute (szFullName, pszFile, dwMask, dwAttrib, bRecurse, bDirectories); } } while (FindNextFile (hFind, &findData)); FindClose (hFind); } /* append file name */ _tcscpy (pszFileName, pszFile); hFind = FindFirstFile (szFullName, &findData); if (hFind == INVALID_HANDLE_VALUE) { ErrorMessage (GetLastError (), pszFile); nErrorLevel = 1; return; } do { if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) continue; _tcscpy (pszFileName, findData.cFileName); dwAttribute = GetFileAttributes (szFullName); if (dwAttribute != 0xFFFFFFFF) { dwAttribute = (dwAttribute & ~dwMask) | dwAttrib; SetFileAttributes (szFullName, dwAttribute); } } while (FindNextFile (hFind, &findData)); FindClose (hFind); }
void URPGAttributeComponent::TakeDamage(float DamageAmount, FName AttributeName, AActor* CausedBy) { ChangeAttribute(AttributeName, DamageAmount, EAttributeOperation::Attribute_Subtract); }