/* * SetInitialWindowSize - process -P command line parm */ void SetInitialWindowSize( const char *arg ) { DWORD a; if( !GetDWORD( &arg, &a ) ) { return; } initX = a; if( !GetDWORD( &arg, &a ) ) { return; } initY = a; if( !GetDWORD( &arg, &a ) ) { return; } initWidth = a; if( !GetDWORD( &arg, &a ) ) { return; } initHeight = a; } /* SetInitialWindowSize */
////////////////////////////////////////////////////////////////////////// // generic pointer HRESULT CBPersistMgr::Transfer(char* Name, void* Val) { int ClassID=-1, InstanceID=-1; if(m_Saving) { CSysClassRegistry::GetInstance()->GetPointerID(*(void**)Val, &ClassID, &InstanceID); if(*(void**)Val!= NULL && (ClassID==-1 || InstanceID==-1)) { Game->LOG(0, "Warning: invalid instance '%s'", Name); } PutDWORD(ClassID); PutDWORD(InstanceID); } else { ClassID = GetDWORD(); InstanceID = GetDWORD(); *(void**)Val = CSysClassRegistry::GetInstance()->IDToPointer(ClassID, InstanceID); } return S_OK; }
bool Parse4DWORDS(char** sIn, unsigned long* p1, unsigned long* p2, unsigned long* p3, unsigned long* p4) { if (Expect(sIn, '(')) { if (GetDWORD(sIn, p1)) { if (Expect(sIn, ',')) { if (GetDWORD(sIn, p2)) { if (Expect(sIn, ',')) { if (GetDWORD(sIn, p3)) { if (Expect(sIn, ',')) { if (GetDWORD(sIn, p4)) { if (Expect(sIn, ')')) { return true; } } } } } } } } } return false; }
/* * SetInitialWindowSize - process -P command line parm */ void SetInitialWindowSize( char *arg ) { DWORD a; char *str; int len; len = strlen( arg ); str = alloca( len ); strcpy( str, arg ); if( !GetDWORD( str, &a ) ) { return; } initX = a; if( !GetDWORD( str, &a ) ) { return; } initY = a; if( !GetDWORD( str, &a ) ) { return; } initWidth = a; if( !GetDWORD( str, &a ) ) { return; } initHeight = a; } /* SetInitialWindowSize */
void CAISocket::RecvNpcEventItem( char* pBuf ) { int index = 0, zoneindex = -1, nItemNumber = 0, nCount = 0; short sUid = 0, sNid = 0; CUser* pUser = NULL; sUid = GetShort(pBuf,index); // Item을 가져갈 사람의 아이디... (이것을 참조해서 작업하셈~) sNid = GetShort(pBuf,index); nItemNumber = GetDWORD(pBuf, index); nCount = GetDWORD(pBuf,index); pUser = m_pMain->GetUserPtr(sUid); if (pUser == NULL) return; pUser->EventMoneyItemGet( nItemNumber, nCount ); }
bool GetFloat(char** sIn, float* pfVal) { unsigned long dwInteger = 0; unsigned long dwDecimal = 0; unsigned long deExponent = 0; int nScanRes = sscanf_s(*sIn, "%f", pfVal); if (nScanRes < 1) { Log(logERROR, "GetFloat: no float data scanned Str = %s\n", *sIn); return false; } // skip over the remainig values in the string Expect(sIn, '-'); Expect(sIn, '+'); if (GetDWORD(sIn, &dwInteger) == false) { // This is OK } if (Expect(sIn, '.')) { if (GetDWORD(sIn, &dwDecimal) == false) { return false; } } if (Expect(sIn, 'e') || Expect(sIn, 'E')) { Expect(sIn, '-'); Expect(sIn, '+'); if (GetDWORD(sIn, &deExponent) == false) { return false; } } return true; }
char* CBDynBuffer::GetString() { DWORD len = GetDWORD(); char* ret = (char*)(m_Buffer+m_Offset); m_Offset+=len; if(!strcmp(ret, "(null)")) return NULL; else return ret; }
/* * getProfileRect - get a rectangle from the profile */ static void getProfileRect( const char *key, const char *initial, RECT *r ) { char str[MAX_STR]; DWORD tmp; bool rc; const char *ptr; getProfileString( key, initial, str ); ptr = str; rc = GetDWORD( &ptr, &tmp ); r->left = (STUPIDINT)tmp; rc = GetDWORD( &ptr, &tmp ); r->top = (STUPIDINT)tmp; rc = GetDWORD( &ptr, &tmp ); r->right = (STUPIDINT)tmp; rc = GetDWORD( &ptr, &tmp ); r->bottom = (STUPIDINT)tmp; } /* getProfileRect */
/* * getInt - parse an int from a string */ static bool getInt( char *str, STUPIDINT *i ) { DWORD tmp; bool rc; rc = GetDWORD( str, &tmp ); *i = (STUPIDINT) tmp; return( rc ); } /* getInt */
bool GetLONG(char** sIn, long* pNum) { unsigned long val; bool res = GetDWORD(sIn, &val); *pNum = (long)val; return res; }
bool GetDWORDVariable(char** sIn, const char* sTok, unsigned long* pNum) { if (IsVariable(sIn, sTok)) { if (GetDWORD(sIn, pNum)) { return true; } } return false; }
void CAISocket::RecvUserHP(char* pBuf) { int index = 0, nid = 0, nHP = 0, nMaxHP = 0; nid = GetShort(pBuf, index); nHP = GetDWORD(pBuf, index); nMaxHP = GetDWORD(pBuf, index); if( nid >= USER_BAND && nid < NPC_BAND) { CUser* pUser = m_pMain->GetUserPtr(nid); if(pUser == NULL) return; pUser->m_pUserData->m_sHp = nHP; } else if(nid >= NPC_BAND) { CNpc* pNpc = m_pMain->m_arNpcArray.GetData(nid); if(!pNpc) return; int nOldHP = pNpc->m_iHP; pNpc->m_iHP = nHP; pNpc->m_iMaxHP = nMaxHP; // TRACE("RecvNpcHP - (%d,%s), %d->%d\n", pNpc->m_sNid, pNpc->m_strName, nOldHP, pNpc->m_sHP); } }
void CUser::ItemRepair(char *pBuf) { int index = 0, send_index = 0, money = 0, quantity = 0; int itemid = 0, pos = 0, slot = -1, durability = 0; char send_buff[128]; memset( send_buff, 0x00, 128 ); _ITEM_TABLE* pTable = NULL; pos = GetByte( pBuf, index ); slot = GetByte( pBuf, index ); itemid = GetDWORD( pBuf, index ); if( pos == 1 ) { // SLOT if( slot >= SLOT_MAX ) goto fail_return; if( m_pUserData->m_sItemArray[slot].nNum != itemid ) goto fail_return; } else if ( pos == 2 ) { // INVEN if( slot >= HAVE_MAX ) goto fail_return; if( m_pUserData->m_sItemArray[SLOT_MAX+slot].nNum != itemid ) goto fail_return; } pTable = m_pMain->m_ItemtableArray.GetData( itemid ); if( !pTable ) goto fail_return; durability = pTable->m_sDuration; if( durability == 1 ) goto fail_return; if( pos == 1 ) quantity = pTable->m_sDuration - m_pUserData->m_sItemArray[slot].sDuration; else if( pos == 2 ) quantity = pTable->m_sDuration - m_pUserData->m_sItemArray[SLOT_MAX+slot].sDuration; money = (int)( ((pTable->m_iBuyPrice-10)/10000.0f) + pow(pTable->m_iBuyPrice, 0.75)) * quantity / (double)durability; if( money > m_pUserData->m_iGold ) goto fail_return; m_pUserData->m_iGold -= money; if( pos == 1 ) m_pUserData->m_sItemArray[slot].sDuration = durability; else if( pos == 2 ) m_pUserData->m_sItemArray[SLOT_MAX+slot].sDuration = durability; SetByte( send_buff, WIZ_ITEM_REPAIR, send_index ); SetByte( send_buff, 0x01, send_index ); SetDWORD( send_buff, m_pUserData->m_iGold, send_index ); Send( send_buff, send_index ); return; fail_return: SetByte( send_buff, WIZ_ITEM_REPAIR, send_index ); SetByte( send_buff, 0x00, send_index ); SetDWORD( send_buff, m_pUserData->m_iGold, send_index ); Send( send_buff, send_index ); }
void CGameSocket::RecvUserSetHP(char* pBuf) { int index = 0, nHP = 0; short uid=-1; uid = GetShort( pBuf, index ); nHP = GetDWORD( pBuf, index ); // User List에서 User정보,, 삭제... CUser* pUser = m_pMain->GetUserPtr(uid); if(pUser == NULL) return; if(pUser->m_sHP != nHP) { pUser->m_sHP = nHP; //TRACE("**** RecvUserSetHP -- uid = %d, name=%s, HP = %d\n", uid, pUser->m_strUserID, pUser->m_sHP); if(pUser->m_sHP <= 0) { pUser->Dead(-100, 0); } } }
// Presumably received item data back from Aujard. void CUser::RecvStoreClose(char *pData) { char send_buff[2048]; int index = 0, send_index = 0; BYTE result = GetByte(pData, index); // If it was succesful, i.e. it loaded data, give it to us if (result) { short count = GetShort(pData, index); for (int i = 0; i < count; i++) { int nItemID = GetDWORD(pData, index); short sCount = GetShort(pData, index); // reuse the GiveItem() method for giving them the item, just don't send that particular packet. GiveItem(nItemID, sCount, false); } } SetByte(send_buff, WIZ_SHOPPING_MALL, send_index); SetByte(send_buff, STORE_CLOSE, send_index); // not sure if this limit's correct for (int i = 0; i < HAVE_MAX + SLOT_MAX + COSP_MAX + MBAG_MAX; i++) { SetDWORD(send_buff, m_pUserData->m_sItemArray[i].nNum, send_index); SetShort(send_buff, m_pUserData->m_sItemArray[i].sDuration, send_index); SetShort(send_buff, m_pUserData->m_sItemArray[i].sCount, send_index); SetByte(send_buff, 0, send_index); // item type flag (e.g. rented) SetShort(send_buff, 0, send_index); // remaining time SetDWORD(send_buff, 0, send_index); // unknown SetDWORD(send_buff, 0, send_index); // expiration date } Send(send_buff, send_index); }
void CAISocket::RecvNpcGiveItem(char* pBuf) { int index = 0, send_index = 0; char send_buff[1024]; short sUid, sNid, sZone, regionx, regionz; float fX, fZ, fY; BYTE byCount; int nItemNumber[NPC_HAVE_ITEM_LIST]; short sCount[NPC_HAVE_ITEM_LIST]; _ZONE_ITEM* pItem = NULL; C3DMap* pMap = NULL; CUser* pUser = NULL; sUid = GetShort(pBuf,index); // Item을 가져갈 사람의 아이디... (이것을 참조해서 작업하셈~) sNid = GetShort(pBuf,index); sZone = GetShort(pBuf, index); regionx = GetShort( pBuf, index ); regionz = GetShort( pBuf, index ); fX = Getfloat(pBuf,index); fZ = Getfloat(pBuf,index); fY = Getfloat(pBuf,index); byCount = GetByte(pBuf,index); for(int i=0; i<byCount; i++) { nItemNumber[i] = GetDWORD(pBuf, index); sCount[i] = GetShort(pBuf,index); } if( sUid < 0 || sUid >= MAX_USER ) return; pMap = m_pMain->GetZoneByID(sZone); if (pMap == NULL) return; pItem = new _ZONE_ITEM; for(int i=0; i<6; i++) { pItem->itemid[i] = 0; pItem->count[i] = 0; } pItem->bundle_index = pMap->m_wBundle; pItem->time = TimeGet(); pItem->x = fX; pItem->z = fZ; pItem->y = fY; for(int i=0; i<byCount; i++) { if( m_pMain->m_ItemtableArray.GetData(nItemNumber[i]) ) { pItem->itemid[i] = nItemNumber[i]; pItem->count[i] = sCount[i]; } } if (!pMap->RegionItemAdd(regionx, regionz, pItem )) { delete pItem; return; } pUser = m_pMain->GetUserPtr(sUid); if (pUser == NULL) return; send_index = 0; SetByte( send_buff, WIZ_ITEM_DROP, send_index ); SetShort( send_buff, sNid, send_index ); SetDWORD( send_buff, pItem->bundle_index, send_index ); if( pUser->m_sPartyIndex == -1 ) pUser->Send( send_buff, send_index ); else m_pMain->Send_PartyMember( pUser->m_sPartyIndex, send_buff, send_index ); }
HRESULT CBPersistMgr::InitLoad(char* Filename) { Cleanup(); m_Saving = false; m_Buffer = Game->m_FileManager->ReadWholeFile(Filename, &m_BufferSize); if(m_Buffer) { DWORD Magic; Magic = GetDWORD(); if(Magic != DCGF_MAGIC) goto init_fail; Magic = GetDWORD(); if(Magic==SAVE_MAGIC || Magic==SAVE_MAGIC_2) { DWORD Version = GetDWORD(); m_SavedVerMajor = LOBYTE(LOWORD(Version)); m_SavedVerMinor = HIBYTE(LOWORD(Version)); m_SavedExtMajor = LOBYTE(HIWORD(Version)); m_SavedExtMinor = HIBYTE(HIWORD(Version)); if(Magic==SAVE_MAGIC_2) { m_SavedVerBuild = (BYTE)GetDWORD(); char* SavedName = GetString(); if(SavedName==NULL || stricmp(SavedName, Game->m_Name)!=0) { Game->LOG(0, "ERROR: Saved game name doesn't match current game"); goto init_fail; } // load thumbnail m_ThumbnailDataSize = GetDWORD(); if(m_ThumbnailDataSize>0) { m_ThumbnailData = new BYTE[m_ThumbnailDataSize]; if(m_ThumbnailData) { GetBytes(m_ThumbnailData, m_ThumbnailDataSize); } else m_ThumbnailDataSize = 0; } } else m_SavedVerBuild = 35; // last build with ver1 savegames // if save is newer version than we are, fail if( m_SavedVerMajor > DCGF_VER_MAJOR || (m_SavedVerMajor == DCGF_VER_MAJOR && m_SavedVerMinor > DCGF_VER_MINOR) || (m_SavedVerMajor == DCGF_VER_MAJOR && m_SavedVerMinor == DCGF_VER_MINOR && m_SavedVerBuild > DCGF_VER_BUILD) ) { Game->LOG(0, "ERROR: Saved game version is newer than current game"); goto init_fail; } // if save is older than the minimal version we support if( m_SavedVerMajor < SAVEGAME_VER_MAJOR || (m_SavedVerMajor == SAVEGAME_VER_MAJOR && m_SavedVerMinor < SAVEGAME_VER_MINOR) || (m_SavedVerMajor == SAVEGAME_VER_MAJOR && m_SavedVerMinor == SAVEGAME_VER_MINOR && m_SavedVerBuild < SAVEGAME_VER_BUILD) ) { Game->LOG(0, "ERROR: Saved game is too old and cannot be used by this version of game engine"); goto init_fail; } /* if( m_SavedVerMajor != DCGF_VER_MAJOR || m_SavedVerMinor != DCGF_VER_MINOR) { Game->LOG(0, "ERROR: Saved game is created by other WME version"); goto init_fail; } */ } else goto init_fail; DWORD DataOffset = GetDWORD(); m_SavedDescription = GetString(); m_SavedTimestamp = (time_t)GetDWORD(); m_Offset = DataOffset; return S_OK; } init_fail: Cleanup(); return E_FAIL; }
void CUser::MarketBBSRegister(char *pBuf) { CUser* pUser = NULL; // Basic Initializations. int index = 0, send_index = 0; BYTE result = 0; BYTE sub_result = 1; char send_buff[256]; memset( send_buff, NULL, 256 ); short title_len = 0; short message_len = 0; BYTE buysell_index = 0; int i = 0, j = 0; int page_index = 0; buysell_index = GetByte(pBuf, index); // Buy or sell? if (buysell_index == MARKET_BBS_BUY) { if (m_pUserData->m_iGold < BUY_POST_PRICE) { sub_result = 2; goto fail_return; } } else if (buysell_index == MARKET_BBS_SELL) { if (m_pUserData->m_iGold < SELL_POST_PRICE) { sub_result = 2; goto fail_return; } } for (i = 0 ; i < MAX_BBS_POST ; i++) { if (buysell_index == MARKET_BBS_BUY) { // Buy if (m_pMain->m_sBuyID[i] == -1) { m_pMain->m_sBuyID[i] = m_Sid; title_len = GetShort(pBuf, index); GetString(m_pMain->m_strBuyTitle[i], pBuf, title_len, index); message_len = GetShort(pBuf, index); GetString(m_pMain->m_strBuyMessage[i], pBuf, message_len, index); m_pMain->m_iBuyPrice[i] = GetDWORD(pBuf, index); m_pMain->m_fBuyStartTime[i] = TimeGet(); result = 1; break; } } else if (buysell_index == MARKET_BBS_SELL) { // Sell if (m_pMain->m_sSellID[i] == -1) { m_pMain->m_sSellID[i] = m_Sid; title_len = GetShort(pBuf, index); GetString(m_pMain->m_strSellTitle[i], pBuf, title_len, index); message_len = GetShort(pBuf, index); GetString(m_pMain->m_strSellMessage[i], pBuf, message_len, index); m_pMain->m_iSellPrice[i] = GetDWORD(pBuf, index); m_pMain->m_fSellStartTime[i] = TimeGet(); result = 1; break; } } else goto fail_return; // Error } if (result == 0) goto fail_return; // No spaces available SetByte( send_buff, WIZ_GOLD_CHANGE, send_index ); // Money removal packet... SetByte( send_buff, 0x02, send_index ); if (buysell_index == MARKET_BBS_BUY) { m_pUserData->m_iGold -= BUY_POST_PRICE; SetDWORD( send_buff, BUY_POST_PRICE, send_index ); } else if (buysell_index == MARKET_BBS_SELL) { m_pUserData->m_iGold -= SELL_POST_PRICE; SetDWORD( send_buff, SELL_POST_PRICE, send_index ); } SetDWORD( send_buff, m_pUserData->m_iGold, send_index ); Send( send_buff, send_index ); page_index = i / MAX_BBS_PAGE; send_index = 0; memset( send_buff, NULL, 256 ); SetByte(send_buff, buysell_index, send_index); SetShort(send_buff, page_index, send_index); MarketBBSReport(send_buff, MARKET_BBS_REGISTER); return; fail_return: send_index = 0; memset( send_buff, NULL, 256 ); SetByte(send_buff, WIZ_MARKET_BBS, send_index); SetByte(send_buff, MARKET_BBS_REGISTER, send_index); SetByte(send_buff, buysell_index, send_index); SetByte(send_buff, result, send_index); SetByte(send_buff, sub_result, send_index); Send(send_buff, send_index); return; }
BOOL CIOCPSocket2::PullOutCore(char *&data, int &length) { BYTE pTmp[MAX_PACKET_SIZE], *pBuff; int len; BOOL foundCore; MYSHORT slen; DWORD wSerial = 0, recv_packet = 0; int index = 1; len = m_pBuffer->GetValidCount(); if (len <= 0 || len >= MAX_PACKET_SIZE) return FALSE; m_pBuffer->GetData((char*)pTmp, len); foundCore = FALSE; int sPos = 0, ePos = 0; for (int i = 0; i < len && !foundCore; i++) { if (i+2 >= len) break; if (pTmp[i] == PACKET_START1 && pTmp[i+1] == PACKET_START2) { sPos = i+2; slen.b[0] = pTmp[sPos]; slen.b[1] = pTmp[sPos + 1]; length = slen.w; if (length < 0 || length > len || length >= MAX_PACKET_SIZE) goto cancelRoutine; ePos = sPos+length + 2; if ((ePos + 2) > len) goto cancelRoutine; if (pTmp[ePos] == PACKET_END1 && pTmp[ePos+1] == PACKET_END2) { if (m_CryptionFlag) { pBuff = new BYTE[length+1]; if (jct.JvDecryptionWithCRC32(length, (unsigned char*)pTmp+sPos+2, pBuff) < 0) { TRACE("CIOCPSocket2::PutOutCore - Decryption Error... sockid(%d)\n", m_Socket); delete[] pBuff; Close(); goto cancelRoutine; } recv_packet = GetDWORD((char*)pBuff, index); //TRACE("^^^ IOCPSocket2,, PullOutCore ,,, recv_val = %d ^^^\n", recv_packet); m_Rec_val = recv_packet; length = length-8; if( length <= 0 ) { TRACE("CIOCPSocket2::PutOutCore - length Error... sockid(%d), len=%d\n", m_Socket, length); delete[] pBuff; Close(); goto cancelRoutine; } data = new char[length+1]; CopyMemory((void *)data, (const void *)(pBuff+4), length); data[length] = 0; foundCore = TRUE; int head = m_pBuffer->GetHeadPos(), tail = m_pBuffer->GetTailPos(); delete[] pBuff; } else { data = new char[length+1]; CopyMemory((void *)data, (const void *)(pTmp+sPos+2), length); data[length] = 0; foundCore = TRUE; int head = m_pBuffer->GetHeadPos(), tail = m_pBuffer->GetTailPos(); } break; } else { m_pBuffer->HeadIncrease(3); break; } } } if (foundCore) m_pBuffer->HeadIncrease( (m_CryptionFlag ? 10 : 6) + length); // 6: header 2+ end 2+ length 2 + cryption 4 cancelRoutine: return foundCore; }
void CUser::ItemMove(char *pBuf) { int index = 0, itemid = 0, srcpos = -1, destpos = -1; int sItemID = 0, sItemCount = 0, sItemDuration = 0; __int64 sItemSerial = 0; _ITEM_TABLE* pTable = NULL; BYTE dir; dir = GetByte( pBuf, index ); itemid = GetDWORD( pBuf, index ); srcpos = GetByte( pBuf, index ); destpos = GetByte( pBuf, index ); if( m_sExchangeUser != -1 ) goto fail_return; pTable = m_pMain->m_ItemtableArray.GetData( itemid ); if( !pTable ) goto fail_return; // if( dir == ITEM_INVEN_SLOT && ((pTable->m_sWeight + m_sItemWeight) > m_sMaxWeight) ) // goto fail_return; if( dir > 0x0B || srcpos >= SLOT_MAX+HAVE_MAX+COSP_MAX+MBAG_MAX || destpos >= SLOT_MAX+HAVE_MAX+COSP_MAX+MBAG_MAX ) goto fail_return; if( (dir == ITEM_INVEN_SLOT || dir == ITEM_SLOT_SLOT ) && destpos > SLOT_MAX ) goto fail_return; if( dir == ITEM_SLOT_INVEN && srcpos > SLOT_MAX ) goto fail_return; if( dir == ITEM_INVEN_SLOT && destpos == RESERVED ) goto fail_return; if( dir == ITEM_SLOT_INVEN && srcpos == RESERVED ) goto fail_return; if( dir == ITEM_INVEN_SLOT || dir == ITEM_SLOT_SLOT ) { if( pTable->m_bRace != 0 ) { if( pTable->m_bRace != m_pUserData->m_bRace ) goto fail_return; } if( !ItemEquipAvailable( pTable ) ) goto fail_return; } switch( dir ) { case ITEM_MBAG_TO_MBAG: if(SLOT_MAX+HAVE_MAX+COSP_MAX+destpos >= 49 && SLOT_MAX+HAVE_MAX+COSP_MAX+destpos <=60 && m_pUserData->m_sItemArray[BAG1].nNum==0) goto fail_return; if(SLOT_MAX+HAVE_MAX+COSP_MAX+destpos >= 61 && SLOT_MAX+HAVE_MAX+COSP_MAX+destpos <=72 && m_pUserData->m_sItemArray[BAG2].nNum==0) goto fail_return; if( itemid != m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+srcpos].nNum ) goto fail_return; if( m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+destpos].nNum != 0 ) { sItemID = m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+destpos].nNum; sItemDuration = m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+destpos].sDuration; sItemCount = m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+destpos].sCount; sItemSerial = m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+destpos].nSerialNum; } m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+destpos].nNum = m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+srcpos].nNum ; m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+destpos].sDuration = m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+srcpos].sDuration; m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+destpos].sCount = m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+srcpos].sCount; m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+destpos].nSerialNum = m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+srcpos].nSerialNum; if( m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+destpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+destpos].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+srcpos].nNum = sItemID; m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+srcpos].sDuration = sItemDuration; m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+srcpos].sCount = sItemCount; m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+srcpos].nSerialNum = sItemSerial; break; case ITEM_MBAG_TO_INVEN: if( itemid != m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+srcpos].nNum ) goto fail_return; if( m_pUserData->m_sItemArray[SLOT_MAX+destpos].nNum != 0 ) { sItemID = m_pUserData->m_sItemArray[SLOT_MAX+destpos].nNum; sItemCount = m_pUserData->m_sItemArray[SLOT_MAX+destpos].sCount; sItemDuration = m_pUserData->m_sItemArray[SLOT_MAX+destpos].sDuration; sItemSerial = m_pUserData->m_sItemArray[SLOT_MAX+destpos].nSerialNum; } m_pUserData->m_sItemArray[SLOT_MAX+destpos].nNum = m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+srcpos].nNum; m_pUserData->m_sItemArray[SLOT_MAX+destpos].sDuration = m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+srcpos].sDuration; m_pUserData->m_sItemArray[SLOT_MAX+destpos].sCount = m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+srcpos].sCount; m_pUserData->m_sItemArray[SLOT_MAX+destpos].nSerialNum = m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+srcpos].nSerialNum; if( m_pUserData->m_sItemArray[SLOT_MAX+destpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[SLOT_MAX+destpos].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+srcpos].nNum = sItemID; m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+srcpos].sDuration = sItemDuration; m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+srcpos].sCount = sItemCount; m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+srcpos].nSerialNum = sItemSerial; break; case ITEM_INVEN_TO_MBAG: // TO-DO : Change the m_sItemArray[BAG1/2].nNum check to the actual magic bag ID. if(SLOT_MAX+HAVE_MAX+COSP_MAX+destpos >= 49 && SLOT_MAX+HAVE_MAX+COSP_MAX+destpos <=60 && m_pUserData->m_sItemArray[BAG1].nNum == 0) goto fail_return; if(SLOT_MAX+HAVE_MAX+COSP_MAX+destpos >= 61 && SLOT_MAX+HAVE_MAX+COSP_MAX+destpos <=73 && m_pUserData->m_sItemArray[BAG2].nNum == 0) goto fail_return; if( itemid != m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum ) goto fail_return; if( m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+destpos].nNum != 0 ) { sItemID = m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+destpos].nNum; sItemCount = m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+destpos].sCount; sItemDuration = m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+destpos].sDuration; sItemSerial = m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+destpos].nSerialNum; } m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+destpos].nNum = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum; m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+destpos].sDuration = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration; m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+destpos].sCount = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount; m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+destpos].nSerialNum = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum; if( m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+destpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+COSP_MAX+destpos].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum = sItemID; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration = sItemDuration; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount = sItemCount; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = sItemSerial; break; case ITEM_COSP_TO_INVEN: if( itemid != m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+srcpos].nNum ) //Make sure we actually have that item. goto fail_return; if( m_pUserData->m_sItemArray[SLOT_MAX+destpos].nNum != 0 ) goto fail_return; m_pUserData->m_sItemArray[SLOT_MAX+destpos].nNum = m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+srcpos].nNum; m_pUserData->m_sItemArray[SLOT_MAX+destpos].sDuration = m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+srcpos].sDuration; m_pUserData->m_sItemArray[SLOT_MAX+destpos].sCount = m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+srcpos].sCount; m_pUserData->m_sItemArray[SLOT_MAX+destpos].nSerialNum = m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+srcpos].nSerialNum; if( m_pUserData->m_sItemArray[SLOT_MAX+destpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[SLOT_MAX+destpos].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+srcpos].nNum = 0; m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+srcpos].sDuration = 0; m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+srcpos].sCount = 0; m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+srcpos].nSerialNum = 0; break; case ITEM_INVEN_TO_COSP: if( itemid != m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum ) //Make sure we actually have that item. goto fail_return; if( m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+destpos].nNum != 0 ) { sItemID = m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+destpos].nNum; sItemCount = m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+destpos].sCount; sItemDuration = m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+destpos].sDuration; sItemSerial = m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+destpos].nSerialNum; } m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+destpos].nNum = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum; m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+destpos].sDuration = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration; m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+destpos].sCount = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount; m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+destpos].nSerialNum = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum; if( m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+destpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+destpos].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum = sItemID; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration = sItemDuration; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount = sItemCount; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = sItemSerial; break; case ITEM_INVEN_SLOT: if( itemid != m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum ) goto fail_return; if( !IsValidSlotPos( pTable, destpos ) ) goto fail_return; else if( pTable->m_bSlot == 0x01 || (pTable->m_bSlot == 0x00 && destpos == RIGHTHAND) ) { // ???????? ????(??? ?????? ??? ???????? ?g?? ?????) ?e? ?????? ?µ???? ??? üu if(m_pUserData->m_sItemArray[LEFTHAND].nNum != 0) { _ITEM_TABLE* pTable2 = m_pMain->m_ItemtableArray.GetData( m_pUserData->m_sItemArray[LEFTHAND].nNum ); if( pTable2 ) { if( pTable2->m_bSlot == 0x04 ) { m_pUserData->m_sItemArray[RIGHTHAND].nNum = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum; // ?????? ???.. m_pUserData->m_sItemArray[RIGHTHAND].sDuration = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration; m_pUserData->m_sItemArray[RIGHTHAND].sCount = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount; m_pUserData->m_sItemArray[RIGHTHAND].nSerialNum = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum; if( m_pUserData->m_sItemArray[RIGHTHAND].nSerialNum == 0 ) m_pUserData->m_sItemArray[RIGHTHAND].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum = m_pUserData->m_sItemArray[LEFTHAND].nNum; // ?????? ?????? ??????. m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration = m_pUserData->m_sItemArray[LEFTHAND].sDuration; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount = m_pUserData->m_sItemArray[LEFTHAND].sCount; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pUserData->m_sItemArray[LEFTHAND].nSerialNum; if( m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[LEFTHAND].nNum = 0; // ???? ?????? ????... m_pUserData->m_sItemArray[LEFTHAND].sDuration = 0; m_pUserData->m_sItemArray[LEFTHAND].sCount = 0; m_pUserData->m_sItemArray[LEFTHAND].nSerialNum = 0; } else { short duration = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration; __int64 serial = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum = m_pUserData->m_sItemArray[destpos].nNum; // Swaping m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration = m_pUserData->m_sItemArray[destpos].sDuration; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount = m_pUserData->m_sItemArray[destpos].sCount; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pUserData->m_sItemArray[destpos].nSerialNum; if( m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum != 0 && m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[destpos].nNum = itemid; m_pUserData->m_sItemArray[destpos].sDuration = duration; m_pUserData->m_sItemArray[destpos].sCount = 1; m_pUserData->m_sItemArray[destpos].nSerialNum = serial; if( m_pUserData->m_sItemArray[destpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[destpos].nSerialNum = m_pMain->GenerateItemSerial(); } } } else { short duration = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration; __int64 serial = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum = m_pUserData->m_sItemArray[destpos].nNum; // Swaping m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration = m_pUserData->m_sItemArray[destpos].sDuration; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount = m_pUserData->m_sItemArray[destpos].sCount; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pUserData->m_sItemArray[destpos].nSerialNum; if( m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum != 0 && m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[destpos].nNum = itemid; m_pUserData->m_sItemArray[destpos].sDuration = duration; m_pUserData->m_sItemArray[destpos].sCount = 1; m_pUserData->m_sItemArray[destpos].nSerialNum = serial; if( m_pUserData->m_sItemArray[destpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[destpos].nSerialNum = m_pMain->GenerateItemSerial(); } } else if( pTable->m_bSlot == 0x02 || (pTable->m_bSlot == 0x00 && destpos == LEFTHAND) ) { // ?????? ????(??? ?????? ??? ???????? ?g?? ???) ?e? ?????? ?µ???? ??? üu if(m_pUserData->m_sItemArray[RIGHTHAND].nNum != 0) { _ITEM_TABLE* pTable2 = m_pMain->m_ItemtableArray.GetData(m_pUserData->m_sItemArray[RIGHTHAND].nNum); if( pTable2 ) { if( pTable2->m_bSlot == 0x03 ) { m_pUserData->m_sItemArray[LEFTHAND].nNum = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum; m_pUserData->m_sItemArray[LEFTHAND].sDuration = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration; m_pUserData->m_sItemArray[LEFTHAND].sCount = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount; m_pUserData->m_sItemArray[LEFTHAND].nSerialNum = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum; if( m_pUserData->m_sItemArray[LEFTHAND].nSerialNum == 0 ) m_pUserData->m_sItemArray[LEFTHAND].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum = m_pUserData->m_sItemArray[RIGHTHAND].nNum; // ???????? ?????? ??????. m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration = m_pUserData->m_sItemArray[RIGHTHAND].sDuration; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount = m_pUserData->m_sItemArray[RIGHTHAND].sCount; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pUserData->m_sItemArray[RIGHTHAND].nSerialNum; if( m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[RIGHTHAND].nNum = 0; m_pUserData->m_sItemArray[RIGHTHAND].sDuration = 0; m_pUserData->m_sItemArray[RIGHTHAND].sCount = 0; m_pUserData->m_sItemArray[RIGHTHAND].nSerialNum = 0; } else { short duration = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration; __int64 serial = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum = m_pUserData->m_sItemArray[destpos].nNum; // Swaping m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration = m_pUserData->m_sItemArray[destpos].sDuration; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount = m_pUserData->m_sItemArray[destpos].sCount; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pUserData->m_sItemArray[destpos].nSerialNum; if( m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum != 0 && m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[destpos].nNum = itemid; m_pUserData->m_sItemArray[destpos].sDuration = duration; m_pUserData->m_sItemArray[destpos].sCount = 1; m_pUserData->m_sItemArray[destpos].nSerialNum = serial; if( m_pUserData->m_sItemArray[destpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[destpos].nSerialNum = m_pMain->GenerateItemSerial(); } } } else { short duration = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration; __int64 serial = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum = m_pUserData->m_sItemArray[destpos].nNum; // Swaping m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration = m_pUserData->m_sItemArray[destpos].sDuration; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount = m_pUserData->m_sItemArray[destpos].sCount; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pUserData->m_sItemArray[destpos].nSerialNum; if( m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum != 0 && m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[destpos].nNum = itemid; m_pUserData->m_sItemArray[destpos].sDuration = duration; m_pUserData->m_sItemArray[destpos].sCount = 1; m_pUserData->m_sItemArray[destpos].nSerialNum = serial; if( m_pUserData->m_sItemArray[destpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[destpos].nSerialNum = m_pMain->GenerateItemSerial(); } } else if( pTable->m_bSlot == 0x03 ) { // ?µ? ?????? ????? ???? if( m_pUserData->m_sItemArray[LEFTHAND].nNum != 0 && m_pUserData->m_sItemArray[RIGHTHAND].nNum != 0 ) goto fail_return; else if( m_pUserData->m_sItemArray[LEFTHAND].nNum != 0 ) { m_pUserData->m_sItemArray[RIGHTHAND].nNum = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum; m_pUserData->m_sItemArray[RIGHTHAND].sDuration = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration; m_pUserData->m_sItemArray[RIGHTHAND].sCount = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount; m_pUserData->m_sItemArray[RIGHTHAND].nSerialNum = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum; if( m_pUserData->m_sItemArray[RIGHTHAND].nSerialNum == 0 ) m_pUserData->m_sItemArray[RIGHTHAND].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum = m_pUserData->m_sItemArray[LEFTHAND].nNum; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration = m_pUserData->m_sItemArray[LEFTHAND].sDuration; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount = m_pUserData->m_sItemArray[LEFTHAND].sCount; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pUserData->m_sItemArray[LEFTHAND].nSerialNum; if( m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[LEFTHAND].nNum = 0; m_pUserData->m_sItemArray[LEFTHAND].sDuration = 0; m_pUserData->m_sItemArray[LEFTHAND].sCount = 0; m_pUserData->m_sItemArray[LEFTHAND].nSerialNum = 0; } else { short duration = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration; __int64 serial = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum = m_pUserData->m_sItemArray[destpos].nNum; // Swaping m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration = m_pUserData->m_sItemArray[destpos].sDuration; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount = m_pUserData->m_sItemArray[destpos].sCount; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pUserData->m_sItemArray[destpos].nSerialNum; if( m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum != 0 && m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[destpos].nNum = itemid; m_pUserData->m_sItemArray[destpos].sDuration = duration; m_pUserData->m_sItemArray[destpos].sCount = 1; m_pUserData->m_sItemArray[destpos].nSerialNum = serial; if( m_pUserData->m_sItemArray[destpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[destpos].nSerialNum = m_pMain->GenerateItemSerial(); } } else if ( pTable->m_bSlot == 0x04 ) { // ?µ? ?????? ??? ???? if( m_pUserData->m_sItemArray[LEFTHAND].nNum != 0 && m_pUserData->m_sItemArray[RIGHTHAND].nNum != 0 ) goto fail_return; else if( m_pUserData->m_sItemArray[RIGHTHAND].nNum != 0 ) { m_pUserData->m_sItemArray[LEFTHAND].nNum = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum; m_pUserData->m_sItemArray[LEFTHAND].sDuration = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration; m_pUserData->m_sItemArray[LEFTHAND].sCount = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount; m_pUserData->m_sItemArray[LEFTHAND].nSerialNum = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum; if( m_pUserData->m_sItemArray[LEFTHAND].nSerialNum == 0 ) m_pUserData->m_sItemArray[LEFTHAND].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum = m_pUserData->m_sItemArray[RIGHTHAND].nNum; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration = m_pUserData->m_sItemArray[RIGHTHAND].sDuration; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount = m_pUserData->m_sItemArray[RIGHTHAND].sCount; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pUserData->m_sItemArray[RIGHTHAND].nSerialNum; if( m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[RIGHTHAND].nNum = 0; m_pUserData->m_sItemArray[RIGHTHAND].sDuration = 0; m_pUserData->m_sItemArray[RIGHTHAND].sCount = 0; m_pUserData->m_sItemArray[RIGHTHAND].nSerialNum = 0; } else { short duration = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration; __int64 serial = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum = m_pUserData->m_sItemArray[destpos].nNum; // Swaping m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration = m_pUserData->m_sItemArray[destpos].sDuration; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount = m_pUserData->m_sItemArray[destpos].sCount; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pUserData->m_sItemArray[destpos].nSerialNum; if( m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum != 0 && m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[destpos].nNum = itemid; m_pUserData->m_sItemArray[destpos].sDuration = duration; m_pUserData->m_sItemArray[destpos].sCount = 1; m_pUserData->m_sItemArray[destpos].nSerialNum = serial; if( m_pUserData->m_sItemArray[destpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[destpos].nSerialNum = m_pMain->GenerateItemSerial(); } } else { short duration = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration; __int64 serial = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum = m_pUserData->m_sItemArray[destpos].nNum; // Swaping m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration = m_pUserData->m_sItemArray[destpos].sDuration; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount = m_pUserData->m_sItemArray[destpos].sCount; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pUserData->m_sItemArray[destpos].nSerialNum; if( m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum != 0 && m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[destpos].nNum = itemid; m_pUserData->m_sItemArray[destpos].sDuration = duration; m_pUserData->m_sItemArray[destpos].sCount = 1; m_pUserData->m_sItemArray[destpos].nSerialNum = serial; if( m_pUserData->m_sItemArray[destpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[destpos].nSerialNum = m_pMain->GenerateItemSerial(); } break; case ITEM_SLOT_INVEN: if( itemid != m_pUserData->m_sItemArray[srcpos].nNum ) goto fail_return; if( m_pUserData->m_sItemArray[SLOT_MAX+destpos].nNum != 0 ) goto fail_return; m_pUserData->m_sItemArray[SLOT_MAX+destpos].nNum = m_pUserData->m_sItemArray[srcpos].nNum; m_pUserData->m_sItemArray[SLOT_MAX+destpos].sDuration = m_pUserData->m_sItemArray[srcpos].sDuration; m_pUserData->m_sItemArray[SLOT_MAX+destpos].sCount = m_pUserData->m_sItemArray[srcpos].sCount; m_pUserData->m_sItemArray[SLOT_MAX+destpos].nSerialNum = m_pUserData->m_sItemArray[srcpos].nSerialNum; if( m_pUserData->m_sItemArray[SLOT_MAX+destpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[SLOT_MAX+destpos].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[srcpos].nNum = 0; m_pUserData->m_sItemArray[srcpos].sDuration = 0; m_pUserData->m_sItemArray[srcpos].sCount = 0; m_pUserData->m_sItemArray[srcpos].nSerialNum = 0; break; case ITEM_INVEN_INVEN: if( itemid != m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum ) goto fail_return; { short duration = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration; short itemcount = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount; __int64 serial = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum; _ITEM_TABLE* pTable2 = NULL; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum = m_pUserData->m_sItemArray[SLOT_MAX+destpos].nNum; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration = m_pUserData->m_sItemArray[SLOT_MAX+destpos].sDuration; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount = m_pUserData->m_sItemArray[SLOT_MAX+destpos].sCount; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pUserData->m_sItemArray[SLOT_MAX+destpos].nSerialNum; if( m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum == 0 ) { pTable2 = m_pMain->m_ItemtableArray.GetData(m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum); if( pTable && pTable->m_bCountable == 0 ) m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pMain->GenerateItemSerial(); } m_pUserData->m_sItemArray[SLOT_MAX+destpos].nNum = itemid; m_pUserData->m_sItemArray[SLOT_MAX+destpos].sDuration = duration; m_pUserData->m_sItemArray[SLOT_MAX+destpos].sCount = itemcount; m_pUserData->m_sItemArray[SLOT_MAX+destpos].nSerialNum = serial; if( m_pUserData->m_sItemArray[SLOT_MAX+destpos].nSerialNum == 0 ) { pTable2 = m_pMain->m_ItemtableArray.GetData(m_pUserData->m_sItemArray[SLOT_MAX+destpos].nNum); if( pTable && pTable->m_bCountable == 0 ) m_pUserData->m_sItemArray[SLOT_MAX+destpos].nSerialNum = m_pMain->GenerateItemSerial(); } } break; case ITEM_SLOT_SLOT: if( itemid != m_pUserData->m_sItemArray[srcpos].nNum ) goto fail_return; if( !IsValidSlotPos( pTable, destpos ) ) goto fail_return; if( m_pUserData->m_sItemArray[destpos].nNum != 0 ) { _ITEM_TABLE* pTable2 = m_pMain->m_ItemtableArray.GetData( m_pUserData->m_sItemArray[destpos].nNum ); // dest slot exist some item if( pTable2 ) { if( pTable2->m_bSlot != 0x00 ) goto fail_return; else { short duration = m_pUserData->m_sItemArray[srcpos].sDuration; short count = m_pUserData->m_sItemArray[srcpos].sCount; __int64 serial = m_pUserData->m_sItemArray[srcpos].nSerialNum; m_pUserData->m_sItemArray[srcpos].nNum = m_pUserData->m_sItemArray[destpos].nNum; // Swaping m_pUserData->m_sItemArray[srcpos].sDuration = m_pUserData->m_sItemArray[destpos].sDuration; // Swaping m_pUserData->m_sItemArray[srcpos].sCount = m_pUserData->m_sItemArray[destpos].sCount; // Swaping m_pUserData->m_sItemArray[srcpos].nSerialNum = m_pUserData->m_sItemArray[destpos].nSerialNum; // Swaping if( m_pUserData->m_sItemArray[srcpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[srcpos].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[destpos].nNum = itemid; m_pUserData->m_sItemArray[destpos].sDuration = duration; m_pUserData->m_sItemArray[destpos].sCount = count; m_pUserData->m_sItemArray[destpos].nSerialNum = serial; if( m_pUserData->m_sItemArray[destpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[destpos].nSerialNum = m_pMain->GenerateItemSerial(); } } } else { short duration = m_pUserData->m_sItemArray[srcpos].sDuration; short count = m_pUserData->m_sItemArray[srcpos].sCount; __int64 serial = m_pUserData->m_sItemArray[srcpos].nSerialNum; m_pUserData->m_sItemArray[srcpos].nNum = m_pUserData->m_sItemArray[destpos].nNum; // Swaping m_pUserData->m_sItemArray[srcpos].sDuration = m_pUserData->m_sItemArray[destpos].sDuration; // Swaping m_pUserData->m_sItemArray[srcpos].sCount = m_pUserData->m_sItemArray[destpos].sCount; // Swaping m_pUserData->m_sItemArray[srcpos].nSerialNum = m_pUserData->m_sItemArray[destpos].nSerialNum; // Swaping m_pUserData->m_sItemArray[destpos].nNum = itemid; m_pUserData->m_sItemArray[destpos].sDuration = duration; m_pUserData->m_sItemArray[destpos].sCount = count; m_pUserData->m_sItemArray[destpos].nSerialNum = serial; if( m_pUserData->m_sItemArray[destpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[destpos].nSerialNum = m_pMain->GenerateItemSerial(); } break; } if( dir != ITEM_INVEN_INVEN ) { // ?????? ???? ????? ???.. SetSlotItemValue(); SetUserAbility(); } SendItemMove(); SendItemWeight(); if( (dir == ITEM_INVEN_SLOT ) && ( destpos == HEAD || destpos == BREAST || destpos == SHOULDER || destpos == LEFTHAND || destpos == RIGHTHAND || destpos == LEG || destpos == GLOVE || destpos == FOOT) ) UserLookChange( destpos, itemid, m_pUserData->m_sItemArray[destpos].sDuration ); if( (dir == ITEM_SLOT_INVEN ) && ( srcpos == HEAD || srcpos == BREAST || srcpos == SHOULDER || srcpos == LEFTHAND || srcpos == RIGHTHAND || srcpos == LEG || srcpos == GLOVE || srcpos == FOOT) ) UserLookChange( srcpos, 0, 0 ); if( (dir == ITEM_INVEN_TO_COSP ) && ( SLOT_MAX+HAVE_MAX+destpos == CWING || SLOT_MAX+HAVE_MAX+destpos == CHELMET || SLOT_MAX+HAVE_MAX+destpos == CLEFT || SLOT_MAX+HAVE_MAX+destpos == CRIGHT || SLOT_MAX+HAVE_MAX+destpos == CTOP ) ) UserLookChange( SLOT_MAX+HAVE_MAX+destpos, itemid, m_pUserData->m_sItemArray[SLOT_MAX+HAVE_MAX+destpos].sDuration ); if( (dir == ITEM_COSP_TO_INVEN ) && ( SLOT_MAX+HAVE_MAX+srcpos == CWING || SLOT_MAX+HAVE_MAX+srcpos == CHELMET || SLOT_MAX+HAVE_MAX+srcpos == CLEFT || SLOT_MAX+HAVE_MAX+srcpos == CRIGHT || SLOT_MAX+HAVE_MAX+srcpos == CTOP ) ) UserLookChange( SLOT_MAX+HAVE_MAX+srcpos, 0, 0 ); Send2AI_UserUpdateInfo(); return; fail_return: SendItemMove(true); }
void CUser::NewCharToAgent(char *pBuf) { int index = 0, idlen = 0, send_index = 0, retvalue = 0; int charindex = 0, race = 0, Class = 0, hair = 0, face = 0, str = 0, sta = 0, dex = 0, intel = 0, cha = 0; char charid[MAX_ID_SIZE+1]; memset( charid, NULL, MAX_ID_SIZE+1 ); char send_buff[256]; memset( send_buff, NULL, 256); BYTE result; int sum = 0; _CLASS_COEFFICIENT* p_TableCoefficient = NULL; charindex = GetByte( pBuf, index ); if (!GetKOString(pBuf, charid, index, MAX_ID_SIZE)) { result = 0x05; goto fail_return; } race = GetByte( pBuf, index ); Class = GetShort( pBuf, index ); face = GetByte( pBuf, index ); hair = GetDWORD( pBuf, index ); str = GetByte( pBuf, index ); sta = GetByte( pBuf, index ); dex = GetByte( pBuf, index ); intel = GetByte( pBuf, index ); cha = GetByte( pBuf, index ); if( charindex > 4 || charindex < 0 ) { result = 0x01; goto fail_return; } if( !IsValidName( charid ) ) { result = 0x05; goto fail_return; } p_TableCoefficient = m_pMain->m_CoefficientArray.GetData( Class ); if( !p_TableCoefficient ) { result = 0x02; goto fail_return; } sum = str + sta + dex + intel + cha; if( sum > 300 ) { result = 0x02; goto fail_return; } if (str < 50 || sta < 50 || dex < 50 || intel < 50 || cha < 50) { result = 0x11; goto fail_return; } SetByte( send_buff, WIZ_NEW_CHAR, send_index ); SetShort( send_buff, m_Sid, send_index ); SetKOString( send_buff, m_strAccountID, send_index ); SetByte( send_buff, charindex, send_index ); SetKOString(send_buff, charid, send_index); SetByte( send_buff, race, send_index ); SetShort( send_buff, Class, send_index ); SetByte( send_buff, face, send_index ); SetDWORD( send_buff, hair, send_index ); SetByte( send_buff, str, send_index ); SetByte( send_buff, sta, send_index ); SetByte( send_buff, dex, send_index ); SetByte( send_buff, intel, send_index ); SetByte( send_buff, cha, send_index ); retvalue = m_pMain->m_LoggerSendQueue.PutData( send_buff, send_index ); if (retvalue < SMQ_FULL) return; DEBUG_LOG("NewChar Send Fail : %d", retvalue); fail_return: send_index = 0; SetByte( send_buff, WIZ_NEW_CHAR, send_index ); SetByte( send_buff, result, send_index ); Send( send_buff, send_index ); }
uint32 ScsiReadCapacity(PSCSI_DEVICE pDevice, PDISK_INFO pDiskInfo, uint8 Lun) { TRANSPORT_COMMAND tCommand; uint8 bCDB[MAX_CDB]; TRANSPORT_DATA tData; uint8 bDataBlock[8]; uint32 dwSizeDB = sizeof(bDataBlock); uint32 dwSizeDI = sizeof(DISK_INFO); uint32 dwErr = ERROR_SUCCESS; memset(pDiskInfo, 0, dwSizeDI); tCommand.Flags = DATA_IN; tCommand.Timeout = pDevice->Timeouts.ScsiCommandTimeout; tCommand.Length = USBMSC_SUBCLASS_SCSI == pDevice->DiskSubClass ?SCSI_CDB_10 : UFI_CDB; tCommand.CommandBlock = bCDB; tCommand.dwLun=Lun; memset( bCDB, 0, sizeof(bCDB)); bCDB[0] = SCSI_READ_CAPACITY; ASSERT(Lun <= 0x7); bCDB[1] = ((Lun & 0x7) << 5); // PMI & LBA support is TBD // It's useful in determining where longer access times occur memset( bDataBlock, 0, dwSizeDB); tData.TransferLength = 0; tData.RequestLength = dwSizeDB; tData.DataBlock = bDataBlock; dwErr = UsbsDataTransfer(pDevice->hUsbTransport, &tCommand, &tData ); if ( dwErr != ERROR_SUCCESS ||(tData.TransferLength != tData.RequestLength) ) { dwErr = ScsiGetSenseData( pDevice, Lun ); } else { hal_HstSendEvent(SYS_EVENT,0x09100010); //memcpy(bDataBlock, bDataBlock, sizeof(bDataBlock)); // Get total sectors from Last Logical Block Address pDiskInfo->di_total_sectors = GetDWORD(&bDataBlock[0])+1; // Block Length in bytes pDiskInfo->di_bytes_per_sect = GetDWORD(&bDataBlock[4]); pDiskInfo->di_flags |= DISK_INFO_FLAG_PAGEABLE | DISK_INFO_FLAG_CHS_UNCERTAIN; if ( pDiskInfo->di_bytes_per_sect && pDiskInfo->di_total_sectors) { // update our media info & flags pDevice->Flags.MediumPresent = TRUE; if ( 0 != memcmp(&pDevice->DiskInfo, pDiskInfo, dwSizeDI) ) { memcpy(&pDevice->DiskInfo, pDiskInfo, dwSizeDI); } } } //sxr_Free(pDataBlock); return dwErr; }
BOOL CMenuOrder::LoadMenuOrder(LPCSTR sFolderPath) { if(mois) delete[] mois; if(index) delete[] index; mois = NULL; index = NULL; len = 0; HKEY hKey; BOOL ret = FALSE; lpSubKey = MENU_ORDER_KEY; lpSubKey += sFolderPath; HRESULT hr = RegOpenKey(HKEY_CURRENT_USER, lpSubKey, &hKey); if(hr == ERROR_SUCCESS) { BYTE* lpBuf = NULL; DWORD size = 0; DWORD type = 0; hr = RegQueryValueEx(hKey, "Order", NULL, &type, NULL, &size); if(size>0) { try { lpBuf = new BYTE[size]; } catch(...) { RegCloseKey(hKey); // if(e!=NULL)e->Delete(); return FALSE; } hr = RegQueryValueEx(hKey, "Order", NULL, &type, lpBuf, &size); if(type == REG_BINARY) { BYTE* lpData = lpBuf; lpData += 8; cbsize = GetDWORD(lpData, NULL); reserved = GetDWORD(lpData, NULL); len = GetDWORD(lpData, NULL); if(len>0) { try { mois = new CMenuOrderItem[len]; index = new int[len]; ZeroMemory(index, len*sizeof(int)); } catch(...) { // if(e!=NULL)e->Delete(); len = 0; } } int len1, len2; for(int i =0; i< len && mois!= NULL; i++) { BYTE* lpend = lpBuf+size; BYTE* lpbt = lpData; len1 = mois[i].cbsize = GetDWORD(lpData, lpend); lpend = lpbt + len1; mois[i].order = GetDWORD(lpData, lpend); len2 = mois[i].len = GetWORD(lpData, lpend); mois[i].itemtype = GetWORD(lpData, lpend); mois[i].filesize = GetDWORD(lpData, lpend); mois[i].filedate = GetWORD(lpData, lpend); mois[i].filetime = GetWORD(lpData, lpend); mois[i].filetype = GetWORD(lpData, lpend); if((mois[i].itemtype & 4) != 0) { mois[i].longname = GetStringW(lpData, lpend); } else mois[i].longname = GetString(lpData, lpend); mois[i].shortname = GetString(lpData, lpend); if(mois[i].order>=0 && mois[i].order<len) index[mois[i].order] = i; lpData = lpbt + len1; ret = TRUE; } } delete[] lpBuf; } RegCloseKey(hKey); } return ret; }
void CUser::ItemMove(char *pBuf) { int index = 0, itemid = 0, srcpos = -1, destpos = -1; int send_index = 0; char send_buff[128]; memset( send_buff, NULL, 128 ); _ITEM_TABLE* pTable = NULL; BYTE dir; dir = GetByte( pBuf, index ); itemid = GetDWORD( pBuf, index ); srcpos = GetByte( pBuf, index ); destpos = GetByte( pBuf, index ); if( m_sExchangeUser != -1 ) goto fail_return; pTable = m_pMain->m_ItemtableArray.GetData( itemid ); if( !pTable ) goto fail_return; // if( dir == ITEM_INVEN_SLOT && ((pTable->m_sWeight + m_sItemWeight) > m_sMaxWeight) ) // goto fail_return; if( dir > 0x04 || srcpos >= SLOT_MAX+HAVE_MAX || destpos >= SLOT_MAX+HAVE_MAX ) goto fail_return; if( (dir == ITEM_INVEN_SLOT || dir == ITEM_SLOT_SLOT ) && destpos > SLOT_MAX ) goto fail_return; if( dir == ITEM_SLOT_INVEN && srcpos > SLOT_MAX ) goto fail_return; if( dir == ITEM_INVEN_SLOT && destpos == RESERVED ) goto fail_return; if( dir == ITEM_SLOT_INVEN && srcpos == RESERVED ) goto fail_return; if( dir == ITEM_INVEN_SLOT || dir == ITEM_SLOT_SLOT ) { if( pTable->m_bRace != 0 ) { if( pTable->m_bRace != m_pUserData->m_bRace ) goto fail_return; } if( !ItemEquipAvailable( pTable ) ) goto fail_return; } switch( dir ) { case ITEM_INVEN_SLOT: if( itemid != m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum ) goto fail_return; if( !IsValidSlotPos( pTable, destpos ) ) goto fail_return; else if( pTable->m_bSlot == 0x01 || (pTable->m_bSlot == 0x00 && destpos == RIGHTHAND) ) { // ???????? ????(??? ?????? ??? ???????? ?g?? ?????) ?e? ?????? ?µ???? ??? üu if(m_pUserData->m_sItemArray[LEFTHAND].nNum != 0) { _ITEM_TABLE* pTable2 = m_pMain->m_ItemtableArray.GetData( m_pUserData->m_sItemArray[LEFTHAND].nNum ); if( pTable2 ) { if( pTable2->m_bSlot == 0x04 ) { m_pUserData->m_sItemArray[RIGHTHAND].nNum = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum; // ?????? ???.. m_pUserData->m_sItemArray[RIGHTHAND].sDuration = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration; m_pUserData->m_sItemArray[RIGHTHAND].sCount = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount; m_pUserData->m_sItemArray[RIGHTHAND].nSerialNum = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum; if( m_pUserData->m_sItemArray[RIGHTHAND].nSerialNum == 0 ) m_pUserData->m_sItemArray[RIGHTHAND].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum = m_pUserData->m_sItemArray[LEFTHAND].nNum; // ?????? ?????? ??????. m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration = m_pUserData->m_sItemArray[LEFTHAND].sDuration; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount = m_pUserData->m_sItemArray[LEFTHAND].sCount; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pUserData->m_sItemArray[LEFTHAND].nSerialNum; if( m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[LEFTHAND].nNum = 0; // ???? ?????? ????... m_pUserData->m_sItemArray[LEFTHAND].sDuration = 0; m_pUserData->m_sItemArray[LEFTHAND].sCount = 0; m_pUserData->m_sItemArray[LEFTHAND].nSerialNum = 0; } else { short duration = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration; __int64 serial = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum = m_pUserData->m_sItemArray[destpos].nNum; // Swaping m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration = m_pUserData->m_sItemArray[destpos].sDuration; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount = m_pUserData->m_sItemArray[destpos].sCount; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pUserData->m_sItemArray[destpos].nSerialNum; if( m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum != 0 && m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[destpos].nNum = itemid; m_pUserData->m_sItemArray[destpos].sDuration = duration; m_pUserData->m_sItemArray[destpos].sCount = 1; m_pUserData->m_sItemArray[destpos].nSerialNum = serial; if( m_pUserData->m_sItemArray[destpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[destpos].nSerialNum = m_pMain->GenerateItemSerial(); } } } else { short duration = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration; __int64 serial = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum = m_pUserData->m_sItemArray[destpos].nNum; // Swaping m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration = m_pUserData->m_sItemArray[destpos].sDuration; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount = m_pUserData->m_sItemArray[destpos].sCount; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pUserData->m_sItemArray[destpos].nSerialNum; if( m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum != 0 && m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[destpos].nNum = itemid; m_pUserData->m_sItemArray[destpos].sDuration = duration; m_pUserData->m_sItemArray[destpos].sCount = 1; m_pUserData->m_sItemArray[destpos].nSerialNum = serial; if( m_pUserData->m_sItemArray[destpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[destpos].nSerialNum = m_pMain->GenerateItemSerial(); } } else if( pTable->m_bSlot == 0x02 || (pTable->m_bSlot == 0x00 && destpos == LEFTHAND) ) { // ?????? ????(??? ?????? ??? ???????? ?g?? ???) ?e? ?????? ?µ???? ??? üu if(m_pUserData->m_sItemArray[RIGHTHAND].nNum != 0) { _ITEM_TABLE* pTable2 = m_pMain->m_ItemtableArray.GetData(m_pUserData->m_sItemArray[RIGHTHAND].nNum); if( pTable2 ) { if( pTable2->m_bSlot == 0x03 ) { m_pUserData->m_sItemArray[LEFTHAND].nNum = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum; m_pUserData->m_sItemArray[LEFTHAND].sDuration = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration; m_pUserData->m_sItemArray[LEFTHAND].sCount = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount; m_pUserData->m_sItemArray[LEFTHAND].nSerialNum = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum; if( m_pUserData->m_sItemArray[LEFTHAND].nSerialNum == 0 ) m_pUserData->m_sItemArray[LEFTHAND].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum = m_pUserData->m_sItemArray[RIGHTHAND].nNum; // ???????? ?????? ??????. m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration = m_pUserData->m_sItemArray[RIGHTHAND].sDuration; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount = m_pUserData->m_sItemArray[RIGHTHAND].sCount; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pUserData->m_sItemArray[RIGHTHAND].nSerialNum; if( m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[RIGHTHAND].nNum = 0; m_pUserData->m_sItemArray[RIGHTHAND].sDuration = 0; m_pUserData->m_sItemArray[RIGHTHAND].sCount = 0; m_pUserData->m_sItemArray[RIGHTHAND].nSerialNum = 0; } else { short duration = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration; __int64 serial = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum = m_pUserData->m_sItemArray[destpos].nNum; // Swaping m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration = m_pUserData->m_sItemArray[destpos].sDuration; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount = m_pUserData->m_sItemArray[destpos].sCount; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pUserData->m_sItemArray[destpos].nSerialNum; if( m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum != 0 && m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[destpos].nNum = itemid; m_pUserData->m_sItemArray[destpos].sDuration = duration; m_pUserData->m_sItemArray[destpos].sCount = 1; m_pUserData->m_sItemArray[destpos].nSerialNum = serial; if( m_pUserData->m_sItemArray[destpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[destpos].nSerialNum = m_pMain->GenerateItemSerial(); } } } else { short duration = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration; __int64 serial = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum = m_pUserData->m_sItemArray[destpos].nNum; // Swaping m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration = m_pUserData->m_sItemArray[destpos].sDuration; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount = m_pUserData->m_sItemArray[destpos].sCount; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pUserData->m_sItemArray[destpos].nSerialNum; if( m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum != 0 && m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[destpos].nNum = itemid; m_pUserData->m_sItemArray[destpos].sDuration = duration; m_pUserData->m_sItemArray[destpos].sCount = 1; m_pUserData->m_sItemArray[destpos].nSerialNum = serial; if( m_pUserData->m_sItemArray[destpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[destpos].nSerialNum = m_pMain->GenerateItemSerial(); } } else if( pTable->m_bSlot == 0x03 ) { // ?µ? ?????? ????? ???? if( m_pUserData->m_sItemArray[LEFTHAND].nNum != 0 && m_pUserData->m_sItemArray[RIGHTHAND].nNum != 0 ) goto fail_return; else if( m_pUserData->m_sItemArray[LEFTHAND].nNum != 0 ) { m_pUserData->m_sItemArray[RIGHTHAND].nNum = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum; m_pUserData->m_sItemArray[RIGHTHAND].sDuration = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration; m_pUserData->m_sItemArray[RIGHTHAND].sCount = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount; m_pUserData->m_sItemArray[RIGHTHAND].nSerialNum = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum; if( m_pUserData->m_sItemArray[RIGHTHAND].nSerialNum == 0 ) m_pUserData->m_sItemArray[RIGHTHAND].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum = m_pUserData->m_sItemArray[LEFTHAND].nNum; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration = m_pUserData->m_sItemArray[LEFTHAND].sDuration; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount = m_pUserData->m_sItemArray[LEFTHAND].sCount; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pUserData->m_sItemArray[LEFTHAND].nSerialNum; if( m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[LEFTHAND].nNum = 0; m_pUserData->m_sItemArray[LEFTHAND].sDuration = 0; m_pUserData->m_sItemArray[LEFTHAND].sCount = 0; m_pUserData->m_sItemArray[LEFTHAND].nSerialNum = 0; } else { short duration = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration; __int64 serial = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum = m_pUserData->m_sItemArray[destpos].nNum; // Swaping m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration = m_pUserData->m_sItemArray[destpos].sDuration; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount = m_pUserData->m_sItemArray[destpos].sCount; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pUserData->m_sItemArray[destpos].nSerialNum; if( m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum != 0 && m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[destpos].nNum = itemid; m_pUserData->m_sItemArray[destpos].sDuration = duration; m_pUserData->m_sItemArray[destpos].sCount = 1; m_pUserData->m_sItemArray[destpos].nSerialNum = serial; if( m_pUserData->m_sItemArray[destpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[destpos].nSerialNum = m_pMain->GenerateItemSerial(); } } else if ( pTable->m_bSlot == 0x04 ) { // ?µ? ?????? ??? ???? if( m_pUserData->m_sItemArray[LEFTHAND].nNum != 0 && m_pUserData->m_sItemArray[RIGHTHAND].nNum != 0 ) goto fail_return; else if( m_pUserData->m_sItemArray[RIGHTHAND].nNum != 0 ) { m_pUserData->m_sItemArray[LEFTHAND].nNum = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum; m_pUserData->m_sItemArray[LEFTHAND].sDuration = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration; m_pUserData->m_sItemArray[LEFTHAND].sCount = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount; m_pUserData->m_sItemArray[LEFTHAND].nSerialNum = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum; if( m_pUserData->m_sItemArray[LEFTHAND].nSerialNum == 0 ) m_pUserData->m_sItemArray[LEFTHAND].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum = m_pUserData->m_sItemArray[RIGHTHAND].nNum; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration = m_pUserData->m_sItemArray[RIGHTHAND].sDuration; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount = m_pUserData->m_sItemArray[RIGHTHAND].sCount; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pUserData->m_sItemArray[RIGHTHAND].nSerialNum; if( m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[RIGHTHAND].nNum = 0; m_pUserData->m_sItemArray[RIGHTHAND].sDuration = 0; m_pUserData->m_sItemArray[RIGHTHAND].sCount = 0; m_pUserData->m_sItemArray[RIGHTHAND].nSerialNum = 0; } else { short duration = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration; __int64 serial = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum = m_pUserData->m_sItemArray[destpos].nNum; // Swaping m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration = m_pUserData->m_sItemArray[destpos].sDuration; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount = m_pUserData->m_sItemArray[destpos].sCount; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pUserData->m_sItemArray[destpos].nSerialNum; if( m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum != 0 && m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[destpos].nNum = itemid; m_pUserData->m_sItemArray[destpos].sDuration = duration; m_pUserData->m_sItemArray[destpos].sCount = 1; m_pUserData->m_sItemArray[destpos].nSerialNum = serial; if( m_pUserData->m_sItemArray[destpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[destpos].nSerialNum = m_pMain->GenerateItemSerial(); } } else { short duration = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration; __int64 serial = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum = m_pUserData->m_sItemArray[destpos].nNum; // Swaping m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration = m_pUserData->m_sItemArray[destpos].sDuration; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount = m_pUserData->m_sItemArray[destpos].sCount; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pUserData->m_sItemArray[destpos].nSerialNum; if( m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum != 0 && m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[destpos].nNum = itemid; m_pUserData->m_sItemArray[destpos].sDuration = duration; m_pUserData->m_sItemArray[destpos].sCount = 1; m_pUserData->m_sItemArray[destpos].nSerialNum = serial; if( m_pUserData->m_sItemArray[destpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[destpos].nSerialNum = m_pMain->GenerateItemSerial(); } break; case ITEM_SLOT_INVEN: if( itemid != m_pUserData->m_sItemArray[srcpos].nNum ) goto fail_return; if( m_pUserData->m_sItemArray[SLOT_MAX+destpos].nNum != 0 ) goto fail_return; m_pUserData->m_sItemArray[SLOT_MAX+destpos].nNum = m_pUserData->m_sItemArray[srcpos].nNum; m_pUserData->m_sItemArray[SLOT_MAX+destpos].sDuration = m_pUserData->m_sItemArray[srcpos].sDuration; m_pUserData->m_sItemArray[SLOT_MAX+destpos].sCount = m_pUserData->m_sItemArray[srcpos].sCount; m_pUserData->m_sItemArray[SLOT_MAX+destpos].nSerialNum = m_pUserData->m_sItemArray[srcpos].nSerialNum; if( m_pUserData->m_sItemArray[SLOT_MAX+destpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[SLOT_MAX+destpos].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[srcpos].nNum = 0; m_pUserData->m_sItemArray[srcpos].sDuration = 0; m_pUserData->m_sItemArray[srcpos].sCount = 0; m_pUserData->m_sItemArray[srcpos].nSerialNum = 0; break; case ITEM_INVEN_INVEN: if( itemid != m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum ) goto fail_return; { short duration = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration; short itemcount = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount; __int64 serial = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum; _ITEM_TABLE* pTable2 = NULL; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum = m_pUserData->m_sItemArray[SLOT_MAX+destpos].nNum; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration = m_pUserData->m_sItemArray[SLOT_MAX+destpos].sDuration; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount = m_pUserData->m_sItemArray[SLOT_MAX+destpos].sCount; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pUserData->m_sItemArray[SLOT_MAX+destpos].nSerialNum; if( m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum == 0 ) { pTable2 = m_pMain->m_ItemtableArray.GetData(m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum); if( pTable && pTable->m_bCountable == 0 ) m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pMain->GenerateItemSerial(); } m_pUserData->m_sItemArray[SLOT_MAX+destpos].nNum = itemid; m_pUserData->m_sItemArray[SLOT_MAX+destpos].sDuration = duration; m_pUserData->m_sItemArray[SLOT_MAX+destpos].sCount = itemcount; m_pUserData->m_sItemArray[SLOT_MAX+destpos].nSerialNum = serial; if( m_pUserData->m_sItemArray[SLOT_MAX+destpos].nSerialNum == 0 ) { pTable2 = m_pMain->m_ItemtableArray.GetData(m_pUserData->m_sItemArray[SLOT_MAX+destpos].nNum); if( pTable && pTable->m_bCountable == 0 ) m_pUserData->m_sItemArray[SLOT_MAX+destpos].nSerialNum = m_pMain->GenerateItemSerial(); } } break; case ITEM_SLOT_SLOT: if( itemid != m_pUserData->m_sItemArray[srcpos].nNum ) goto fail_return; if( !IsValidSlotPos( pTable, destpos ) ) goto fail_return; if( m_pUserData->m_sItemArray[destpos].nNum != 0 ) { _ITEM_TABLE* pTable2 = m_pMain->m_ItemtableArray.GetData( m_pUserData->m_sItemArray[destpos].nNum ); // dest slot exist some item if( pTable2 ) { if( pTable2->m_bSlot != 0x00 ) goto fail_return; else { short duration = m_pUserData->m_sItemArray[srcpos].sDuration; short count = m_pUserData->m_sItemArray[srcpos].sCount; __int64 serial = m_pUserData->m_sItemArray[srcpos].nSerialNum; m_pUserData->m_sItemArray[srcpos].nNum = m_pUserData->m_sItemArray[destpos].nNum; // Swaping m_pUserData->m_sItemArray[srcpos].sDuration = m_pUserData->m_sItemArray[destpos].sDuration; // Swaping m_pUserData->m_sItemArray[srcpos].sCount = m_pUserData->m_sItemArray[destpos].sCount; // Swaping m_pUserData->m_sItemArray[srcpos].nSerialNum = m_pUserData->m_sItemArray[destpos].nSerialNum; // Swaping if( m_pUserData->m_sItemArray[srcpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[srcpos].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[destpos].nNum = itemid; m_pUserData->m_sItemArray[destpos].sDuration = duration; m_pUserData->m_sItemArray[destpos].sCount = count; m_pUserData->m_sItemArray[destpos].nSerialNum = serial; if( m_pUserData->m_sItemArray[destpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[destpos].nSerialNum = m_pMain->GenerateItemSerial(); } } } else { short duration = m_pUserData->m_sItemArray[srcpos].sDuration; short count = m_pUserData->m_sItemArray[srcpos].sCount; __int64 serial = m_pUserData->m_sItemArray[srcpos].nSerialNum; m_pUserData->m_sItemArray[srcpos].nNum = m_pUserData->m_sItemArray[destpos].nNum; // Swaping m_pUserData->m_sItemArray[srcpos].sDuration = m_pUserData->m_sItemArray[destpos].sDuration; // Swaping m_pUserData->m_sItemArray[srcpos].sCount = m_pUserData->m_sItemArray[destpos].sCount; // Swaping m_pUserData->m_sItemArray[srcpos].nSerialNum = m_pUserData->m_sItemArray[destpos].nSerialNum; // Swaping m_pUserData->m_sItemArray[destpos].nNum = itemid; m_pUserData->m_sItemArray[destpos].sDuration = duration; m_pUserData->m_sItemArray[destpos].sCount = count; m_pUserData->m_sItemArray[destpos].nSerialNum = serial; if( m_pUserData->m_sItemArray[destpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[destpos].nSerialNum = m_pMain->GenerateItemSerial(); } break; } if( dir != ITEM_INVEN_INVEN ) { // ?????? ???? ????? ???.. SetSlotItemValue(); SetUserAbility(); } /* SetByte( send_buff, WIZ_ITEM_MOVE, send_index ); SetByte( send_buff, 0x01, send_index ); SetShort( send_buff, m_sTotalHit, send_index ); SetShort( send_buff, m_sTotalAc, send_index ); SetShort( send_buff, m_sMaxWeight, send_index ); SetShort( send_buff, m_iMaxHp, send_index ); SetShort( send_buff, m_iMaxMp, send_index ); SetByte( send_buff, m_sItemStr, send_index ); SetByte( send_buff, m_sItemSta, send_index ); SetByte( send_buff, m_sItemDex, send_index ); SetByte( send_buff, m_sItemIntel, send_index ); SetByte( send_buff, m_sItemCham, send_index ); SetByte( send_buff, m_bFireR, send_index ); SetByte( send_buff, m_bColdR, send_index ); SetByte( send_buff, m_bLightningR, send_index ); SetByte( send_buff, m_bMagicR, send_index ); SetByte( send_buff, m_bDiseaseR, send_index ); SetByte( send_buff, m_bPoisonR, send_index ); Send( send_buff, send_index ); BYTE m_bStrAmount; BYTE m_bStaAmount; BYTE m_bDexAmount; BYTE m_bIntelAmount; BYTE m_bChaAmount; */ SetByte( send_buff, WIZ_ITEM_MOVE, send_index ); SetByte( send_buff, 0x01, send_index ); SetShort( send_buff, m_sTotalHit, send_index ); SetShort( send_buff, m_sTotalAc, send_index ); SetShort( send_buff, m_sMaxWeight, send_index ); SetShort( send_buff, m_iMaxHp, send_index ); SetShort( send_buff, m_iMaxMp, send_index ); SetByte( send_buff, m_sItemStr + m_bStrAmount, send_index ); SetByte( send_buff, m_sItemSta + m_bStaAmount, send_index ); SetByte( send_buff, m_sItemDex + m_bDexAmount, send_index ); SetByte( send_buff, m_sItemIntel + m_bIntelAmount, send_index ); SetByte( send_buff, m_sItemCham + m_bChaAmount, send_index ); SetByte( send_buff, m_bFireR, send_index ); SetByte( send_buff, m_bColdR, send_index ); SetByte( send_buff, m_bLightningR, send_index ); SetByte( send_buff, m_bMagicR, send_index ); SetByte( send_buff, m_bDiseaseR, send_index ); SetByte( send_buff, m_bPoisonR, send_index ); Send( send_buff, send_index ); // SendItemWeight(); if( (dir == ITEM_INVEN_SLOT ) && ( destpos == HEAD || destpos == BREAST || destpos == SHOULDER || destpos == LEFTHAND || destpos == RIGHTHAND || destpos == LEG || destpos == GLOVE || destpos == FOOT) ) UserLookChange( destpos, itemid, m_pUserData->m_sItemArray[destpos].sDuration ); if( (dir == ITEM_SLOT_INVEN ) && ( srcpos == HEAD || srcpos == BREAST || srcpos == SHOULDER || srcpos == LEFTHAND || srcpos == RIGHTHAND || srcpos == LEG || srcpos == GLOVE || srcpos == FOOT) ) UserLookChange( srcpos, 0, 0 ); Send2AI_UserUpdateInfo(); return; fail_return: send_index = 0; SetByte( send_buff, WIZ_ITEM_MOVE, send_index ); SetByte( send_buff, 0x00, send_index ); Send( send_buff, send_index ); }
//----------------------------------------------------------------------------- // Load a TrueType font into memory. We care about the curves that define // the letter shapes, and about the mappings that determine which glyph goes // with which character. //----------------------------------------------------------------------------- bool TtfFont::LoadFontFromFile(bool nameOnly) { if(loaded) return true; int i; fh = fopen(fontFile, "rb"); if(!fh) { return false; } try { // First, load the Offset Table DWORD version = GetDWORD(); WORD numTables = GetWORD(); WORD searchRange = GetWORD(); WORD entrySelector = GetWORD(); WORD rangeShift = GetWORD(); // Now load the Table Directory; our goal in doing this will be to // find the addresses of the tables that we will need. DWORD glyfAddr = -1, glyfLen; DWORD cmapAddr = -1, cmapLen; DWORD headAddr = -1, headLen; DWORD locaAddr = -1, locaLen; DWORD maxpAddr = -1, maxpLen; DWORD nameAddr = -1, nameLen; DWORD hmtxAddr = -1, hmtxLen; DWORD hheaAddr = -1, hheaLen; for(i = 0; i < numTables; i++) { char tag[5] = "xxxx"; tag[0] = GetBYTE(); tag[1] = GetBYTE(); tag[2] = GetBYTE(); tag[3] = GetBYTE(); DWORD checksum = GetDWORD(); DWORD offset = GetDWORD(); DWORD length = GetDWORD(); if(strcmp(tag, "glyf")==0) { glyfAddr = offset; glyfLen = length; } else if(strcmp(tag, "cmap")==0) { cmapAddr = offset; cmapLen = length; } else if(strcmp(tag, "head")==0) { headAddr = offset; headLen = length; } else if(strcmp(tag, "loca")==0) { locaAddr = offset; locaLen = length; } else if(strcmp(tag, "maxp")==0) { maxpAddr = offset; maxpLen = length; } else if(strcmp(tag, "name")==0) { nameAddr = offset; nameLen = length; } else if(strcmp(tag, "hhea")==0) { hheaAddr = offset; hheaLen = length; } else if(strcmp(tag, "hmtx")==0) { hmtxAddr = offset; hmtxLen = length; } } if(glyfAddr == -1 || cmapAddr == -1 || headAddr == -1 || locaAddr == -1 || maxpAddr == -1 || hmtxAddr == -1 || nameAddr == -1 || hheaAddr == -1) { throw "missing table addr"; } // Load the name table. This gives us display names for the font, which // we need when we're giving the user a list to choose from. fseek(fh, nameAddr, SEEK_SET); WORD nameFormat = GetWORD(); WORD nameCount = GetWORD(); WORD nameStringOffset = GetWORD(); // And now we're at the name records. Go through those till we find // one that we want. int displayNameOffset, displayNameLength; for(i = 0; i < nameCount; i++) { WORD platformID = GetWORD(); WORD encodingID = GetWORD(); WORD languageID = GetWORD(); WORD nameId = GetWORD(); WORD length = GetWORD(); WORD offset = GetWORD(); if(nameId == 4) { displayNameOffset = offset; displayNameLength = length; break; } } if(nameOnly && i >= nameCount) { throw "no name"; } if(nameOnly) { // Find the display name, and store it in the provided buffer. fseek(fh, nameAddr+nameStringOffset+displayNameOffset, SEEK_SET); int c = 0; for(i = 0; i < displayNameLength; i++) { BYTE b = GetBYTE(); if(b && c < (sizeof(name.str) - 2)) { name.str[c++] = b; } } name.str[c++] = '\0'; fclose(fh); return true; } // Load the head table; we need this to determine the format of the // loca table, 16- or 32-bit entries fseek(fh, headAddr, SEEK_SET); DWORD headVersion = GetDWORD(); DWORD headFontRevision = GetDWORD(); DWORD headCheckSumAdj = GetDWORD(); DWORD headMagicNumber = GetDWORD(); WORD headFlags = GetWORD(); WORD headUnitsPerEm = GetWORD(); (void)GetDWORD(); // created time (void)GetDWORD(); (void)GetDWORD(); // modified time (void)GetDWORD(); WORD headXmin = GetWORD(); WORD headYmin = GetWORD(); WORD headXmax = GetWORD(); WORD headYmax = GetWORD(); WORD headMacStyle = GetWORD(); WORD headLowestRecPPEM = GetWORD(); WORD headFontDirectionHint = GetWORD(); WORD headIndexToLocFormat = GetWORD(); WORD headGlyphDataFormat = GetWORD(); if(headMagicNumber != 0x5F0F3CF5) { throw "bad magic number"; } // Load the hhea table, which contains the number of entries in the // horizontal metrics (hmtx) table. fseek(fh, hheaAddr, SEEK_SET); DWORD hheaVersion = GetDWORD(); WORD hheaAscender = GetWORD(); WORD hheaDescender = GetWORD(); WORD hheaLineGap = GetWORD(); WORD hheaAdvanceWidthMax = GetWORD(); WORD hheaMinLsb = GetWORD(); WORD hheaMinRsb = GetWORD(); WORD hheaXMaxExtent = GetWORD(); WORD hheaCaretSlopeRise = GetWORD(); WORD hheaCaretSlopeRun = GetWORD(); WORD hheaCaretOffset = GetWORD(); (void)GetWORD(); (void)GetWORD(); (void)GetWORD(); (void)GetWORD(); WORD hheaMetricDataFormat = GetWORD(); WORD hheaNumberOfMetrics = GetWORD(); // Load the maxp table, which determines (among other things) the number // of glyphs in the font fseek(fh, maxpAddr, SEEK_SET); DWORD maxpVersion = GetDWORD(); WORD maxpNumGlyphs = GetWORD(); WORD maxpMaxPoints = GetWORD(); WORD maxpMaxContours = GetWORD(); WORD maxpMaxComponentPoints = GetWORD(); WORD maxpMaxComponentContours = GetWORD(); WORD maxpMaxZones = GetWORD(); WORD maxpMaxTwilightPoints = GetWORD(); WORD maxpMaxStorage = GetWORD(); WORD maxpMaxFunctionDefs = GetWORD(); WORD maxpMaxInstructionDefs = GetWORD(); WORD maxpMaxStackElements = GetWORD(); WORD maxpMaxSizeOfInstructions = GetWORD(); WORD maxpMaxComponentElements = GetWORD(); WORD maxpMaxComponentDepth = GetWORD(); glyphs = maxpNumGlyphs; glyph = (Glyph *)MemAlloc(glyphs*sizeof(glyph[0])); // Load the hmtx table, which gives the horizontal metrics (spacing // and advance width) of the font. fseek(fh, hmtxAddr, SEEK_SET); WORD hmtxAdvanceWidth; SWORD hmtxLsb; for(i = 0; i < min(glyphs, hheaNumberOfMetrics); i++) { hmtxAdvanceWidth = GetWORD(); hmtxLsb = (SWORD)GetWORD(); glyph[i].leftSideBearing = hmtxLsb; glyph[i].advanceWidth = hmtxAdvanceWidth; } // The last entry in the table applies to all subsequent glyphs also. for(; i < glyphs; i++) { glyph[i].leftSideBearing = hmtxLsb; glyph[i].advanceWidth = hmtxAdvanceWidth; } // Load the cmap table, which determines the mapping of characters to // glyphs. fseek(fh, cmapAddr, SEEK_SET); DWORD usedTableAddr = -1; WORD cmapVersion = GetWORD(); WORD cmapTableCount = GetWORD(); for(i = 0; i < cmapTableCount; i++) { WORD platformId = GetWORD(); WORD encodingId = GetWORD(); DWORD offset = GetDWORD(); if(platformId == 3 && encodingId == 1) { // The Windows Unicode mapping is our preference usedTableAddr = cmapAddr + offset; } } if(usedTableAddr == -1) { throw "no used table addr"; } // So we can load the desired subtable; in this case, Windows Unicode, // which is us. fseek(fh, usedTableAddr, SEEK_SET); WORD mapFormat = GetWORD(); WORD mapLength = GetWORD(); WORD mapVersion = GetWORD(); WORD mapSegCountX2 = GetWORD(); WORD mapSearchRange = GetWORD(); WORD mapEntrySelector = GetWORD(); WORD mapRangeShift = GetWORD(); if(mapFormat != 4) { // Required to use format 4 per spec throw "not format 4"; } int segCount = mapSegCountX2 / 2; WORD *endChar = (WORD *)AllocTemporary(segCount*sizeof(WORD)); WORD *startChar = (WORD *)AllocTemporary(segCount*sizeof(WORD)); WORD *idDelta = (WORD *)AllocTemporary(segCount*sizeof(WORD)); WORD *idRangeOffset = (WORD *)AllocTemporary(segCount*sizeof(WORD)); DWORD *filePos = (DWORD *)AllocTemporary(segCount*sizeof(DWORD)); for(i = 0; i < segCount; i++) { endChar[i] = GetWORD(); } WORD mapReservedPad = GetWORD(); for(i = 0; i < segCount; i++) { startChar[i] = GetWORD(); } for(i = 0; i < segCount; i++) { idDelta[i] = GetWORD(); } for(i = 0; i < segCount; i++) { filePos[i] = ftell(fh); idRangeOffset[i] = GetWORD(); } // So first, null out the glyph table in our in-memory representation // of the font; any character for which cmap does not provide a glyph // corresponds to -1 for(i = 0; i < arraylen(useGlyph); i++) { useGlyph[i] = 0; } for(i = 0; i < segCount; i++) { WORD v = idDelta[i]; if(idRangeOffset[i] == 0) { int j; for(j = startChar[i]; j <= endChar[i]; j++) { if(j > 0 && j < arraylen(useGlyph)) { // Don't create a reference to a glyph that we won't // store because it's bigger than the table. if((WORD)(j + v) < glyphs) { // Arithmetic is modulo 2^16 useGlyph[j] = (WORD)(j + v); } } } } else { int j; for(j = startChar[i]; j <= endChar[i]; j++) { if(j > 0 && j < arraylen(useGlyph)) { int fp = filePos[i]; fp += (j - startChar[i])*sizeof(WORD); fp += idRangeOffset[i]; fseek(fh, fp, SEEK_SET); useGlyph[j] = GetWORD(); } } } } // Load the loca table. This contains the offsets of each glyph, // relative to the beginning of the glyf table. fseek(fh, locaAddr, SEEK_SET); DWORD *glyphOffsets = (DWORD *)AllocTemporary(glyphs*sizeof(DWORD)); for(i = 0; i < glyphs; i++) { if(headIndexToLocFormat == 1) { // long offsets, 32 bits glyphOffsets[i] = GetDWORD(); } else if(headIndexToLocFormat == 0) { // short offsets, 16 bits but divided by 2 glyphOffsets[i] = GetWORD()*2; } else { throw "bad headIndexToLocFormat"; } } scale = 1024; // Load the glyf table. This contains the actual representations of the // letter forms, as piecewise linear or quadratic outlines. for(i = 0; i < glyphs; i++) { fseek(fh, glyfAddr + glyphOffsets[i], SEEK_SET); LoadGlyph(i); } } catch (char *s) { dbp("failed: '%s'", s); fclose(fh); return false; } fclose(fh); loaded = true; return true; }
void CNpcMagicProcess::MagicPacket(char *pBuf, int len) { int index = 0, send_index = 0, magicid = 0, sid = -1, tid = -1, data1 = 0, data2 = 0, data3 = 0, data4 = 0, data5 = 0, data6 = 0; char send_buff[128]; _MAGIC_TABLE* pTable = NULL; BYTE command = GetByte( pBuf, index ); // Get the magic status. if( command == MAGIC_FAIL ) { // Client indicates that magic failed. Just send back packet. SetByte( send_buff, AG_MAGIC_ATTACK_RESULT, send_index ); SetString( send_buff, pBuf, len-1, send_index ); // len ==> include WIZ_MAGIC_PROCESS command byte. //g_pMain->Send_Region( send_buff, send_index, m_pSrcUser->m_pUserData->m_bZone, m_pSrcUser->m_RegionX, m_pSrcUser->m_RegionZ ); m_bMagicState = NONE; return; } magicid = GetDWORD( pBuf, index ); // Get ID of magic. sid = GetShort( pBuf, index ); // Get ID of source. tid = GetShort( pBuf, index ); // Get ID of target. data1 = GetShort( pBuf, index ); // ( Remember, you don't definately need this. ) data2 = GetShort( pBuf, index ); // ( Only use it when you really feel it's needed. ) data3 = GetShort( pBuf, index ); data4 = GetShort( pBuf, index ); data5 = GetShort( pBuf, index ); data6 = GetShort( pBuf, index ); // Get data1 ~ data6 (No, I don't know what the hell 'data' is.) pTable = IsAvailable( magicid, tid, command ); // If magic was successful....... if( !pTable ) return; if( command == MAGIC_EFFECTING ) // Is target another player? { //if (tid < -1 || tid >= MAX_USER) return; switch( pTable->bType[0] ) { case 1: ExecuteType1( pTable->iNum, tid, data1, data2, data3 ); break; case 2: ExecuteType2( pTable->iNum, tid, data1, data2, data3 ); break; case 3: ExecuteType3( pTable->iNum, tid, data1, data2, data3, pTable->bMoral ); break; case 4: ExecuteType4( pTable->iNum, tid ); break; case 5: ExecuteType5( pTable->iNum ); break; case 6: ExecuteType6( pTable->iNum ); break; case 7: ExecuteType7( pTable->iNum ); break; case 8: ExecuteType8( pTable->iNum, tid, sid, data1, data2, data3 ); break; case 9: ExecuteType9( pTable->iNum ); break; case 10: ExecuteType10( pTable->iNum ); break; } switch( pTable->bType[1] ) { case 1: ExecuteType1( pTable->iNum, tid, data4, data5, data6 ); break; case 2: ExecuteType2( pTable->iNum, tid, data1, data2, data3 ); break; case 3: ExecuteType3( pTable->iNum, tid, data1, data2, data3, pTable->bMoral ); break; case 4: ExecuteType4( pTable->iNum, tid ); break; case 5: ExecuteType5( pTable->iNum ); break; case 6: ExecuteType6( pTable->iNum ); break; case 7: ExecuteType7( pTable->iNum ); break; case 8: ExecuteType8( pTable->iNum, tid, sid, data1, data2, data3 ); break; case 9: ExecuteType9( pTable->iNum ); break; case 10: ExecuteType10( pTable->iNum ); break; } } else if( command == MAGIC_CASTING ) { SetByte( send_buff, AG_MAGIC_ATTACK_RESULT, send_index ); SetString( send_buff, pBuf, len-1, send_index ); // len ==> include WIZ_MAGIC_PROCESS command byte. m_pSrcNpc->SendAll(send_buff, send_index); } }
void CUser::WarehouseProcess(char *pBuf) { int index = 0, send_index = 0, itemid = 0, srcpos = -1, destpos = -1, page = -1, reference_pos = -1, npcid = 0; DWORD count = 0; char send_buff[2048]; _ITEM_TABLE* pTable = NULL; BYTE command = 0; command = GetByte( pBuf, index ); // â?? ??j?... if (isDead()) { TRACE("### WarehouseProcess Fail : name=%s(%d), m_bResHpType=%d, hp=%d, x=%d, z=%d ###\n", m_pUserData->m_id, m_Sid, m_bResHpType, m_pUserData->m_sHp, (int)m_pUserData->m_curx, (int)m_pUserData->m_curz); return; } if( m_sExchangeUser != -1 ) goto fail_return; if( command == WAREHOUSE_OPEN ) { Packet result(WIZ_WAREHOUSE); result << uint8(WAREHOUSE_OPEN) << uint8(WAREHOUSE_OPEN) << uint32(m_pUserData->m_iBank); for(int i=0; i<WAREHOUSE_MAX; i++ ) { result << m_pUserData->m_sWarehouseArray[i].nNum << m_pUserData->m_sWarehouseArray[i].sDuration << m_pUserData->m_sWarehouseArray[i].sCount << uint8(0) << uint16(0) << uint16(0) << uint16(0) << uint16(0); } Send(&result); return; } npcid = GetShort(pBuf,index); itemid = GetDWORD( pBuf, index ); page = GetByte( pBuf, index ); srcpos = GetByte( pBuf, index ); destpos = GetByte( pBuf, index ); pTable = m_pMain->m_ItemtableArray.GetData( itemid ); if( !pTable ) goto fail_return; reference_pos = 24 * page; switch( command ) { case WAREHOUSE_INPUT: count = GetDWORD( pBuf, index ); if( itemid == ITEM_GOLD ) { if( m_pUserData->m_iBank+count > 2100000000 ) goto fail_return; if( m_pUserData->m_iGold-count < 0 ) goto fail_return; m_pUserData->m_iBank += count; m_pUserData->m_iGold -= count; break; } if( m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum != itemid ) goto fail_return; if( reference_pos+destpos > WAREHOUSE_MAX ) goto fail_return; if( m_pUserData->m_sWarehouseArray[reference_pos+destpos].nNum && !pTable->m_bCountable ) goto fail_return; if( m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount < count ) goto fail_return; m_pUserData->m_sWarehouseArray[reference_pos+destpos].nNum = itemid; m_pUserData->m_sWarehouseArray[reference_pos+destpos].sDuration = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration; m_pUserData->m_sWarehouseArray[reference_pos+destpos].nSerialNum = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum; if( pTable->m_bCountable == 0 && m_pUserData->m_sWarehouseArray[reference_pos+destpos].nSerialNum == 0 ) m_pUserData->m_sWarehouseArray[reference_pos+destpos].nSerialNum = m_pMain->GenerateItemSerial(); if( pTable->m_bCountable ) { m_pUserData->m_sWarehouseArray[reference_pos+destpos].sCount += (unsigned short)count; } else { m_pUserData->m_sWarehouseArray[reference_pos+destpos].sCount = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount; } if( !pTable->m_bCountable ) { m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum = 0; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration = 0; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount = 0; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = 0; } else { m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount -= (unsigned short)count; if( m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount <= 0 ) { m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum = 0; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration = 0; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount = 0; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = 0; } } SendItemWeight(); ItemLogToAgent( m_pUserData->m_Accountid, m_pUserData->m_id, ITEM_WAREHOUSE_PUT, 0, itemid, count, m_pUserData->m_sWarehouseArray[reference_pos+destpos].sDuration ); break; case WAREHOUSE_OUTPUT: count = GetDWORD( pBuf, index ); if( itemid == ITEM_GOLD ) { if( m_pUserData->m_iGold+count > 2100000000 ) goto fail_return; if( m_pUserData->m_iBank-count < 0 ) goto fail_return; m_pUserData->m_iGold += count; m_pUserData->m_iBank -= count; break; } // if (pTable->m_bCountable) { // Check weight of countable item. if (((pTable->m_sWeight * count) + m_sItemWeight) > m_sMaxWeight) { goto fail_return; } } else { // Check weight of non-countable item. if ((pTable->m_sWeight + m_sItemWeight) > m_sMaxWeight) { goto fail_return; } } // if( reference_pos+srcpos > WAREHOUSE_MAX ) goto fail_return; if( m_pUserData->m_sWarehouseArray[reference_pos+srcpos].nNum != itemid ) goto fail_return; if( m_pUserData->m_sItemArray[SLOT_MAX+destpos].nNum && !pTable->m_bCountable ) goto fail_return; if( m_pUserData->m_sWarehouseArray[reference_pos+srcpos].sCount < count ) goto fail_return; m_pUserData->m_sItemArray[SLOT_MAX+destpos].nNum = itemid; m_pUserData->m_sItemArray[SLOT_MAX+destpos].sDuration = m_pUserData->m_sWarehouseArray[reference_pos+srcpos].sDuration; m_pUserData->m_sItemArray[SLOT_MAX+destpos].nSerialNum = m_pUserData->m_sWarehouseArray[reference_pos+srcpos].nSerialNum; if( pTable->m_bCountable ) m_pUserData->m_sItemArray[SLOT_MAX+destpos].sCount += (unsigned short)count; else { if( m_pUserData->m_sItemArray[SLOT_MAX+destpos].nSerialNum == 0 ) m_pUserData->m_sItemArray[SLOT_MAX+destpos].nSerialNum = m_pMain->GenerateItemSerial(); m_pUserData->m_sItemArray[SLOT_MAX+destpos].sCount = m_pUserData->m_sWarehouseArray[reference_pos+srcpos].sCount; } if( !pTable->m_bCountable ) { m_pUserData->m_sWarehouseArray[reference_pos+srcpos].nNum = 0; m_pUserData->m_sWarehouseArray[reference_pos+srcpos].sDuration = 0; m_pUserData->m_sWarehouseArray[reference_pos+srcpos].sCount = 0; m_pUserData->m_sWarehouseArray[reference_pos+srcpos].nSerialNum = 0; } else { m_pUserData->m_sWarehouseArray[reference_pos+srcpos].sCount -= (unsigned short)count; if( m_pUserData->m_sWarehouseArray[reference_pos+srcpos].sCount <= 0 ) { m_pUserData->m_sWarehouseArray[reference_pos+srcpos].nNum = 0; m_pUserData->m_sWarehouseArray[reference_pos+srcpos].sDuration = 0; m_pUserData->m_sWarehouseArray[reference_pos+srcpos].sCount = 0; m_pUserData->m_sWarehouseArray[reference_pos+srcpos].nSerialNum = 0; } } SendItemWeight(); ItemLogToAgent( m_pUserData->m_id, m_pUserData->m_Accountid, ITEM_WAREHOUSE_GET, 0, itemid, count, m_pUserData->m_sItemArray[SLOT_MAX+destpos].sDuration ); //TRACE("WARE OUTPUT : %s %s %d %d %d %d %d", m_pUserData->m_id, m_pUserData->m_Accountid, ITEM_WAREHOUSE_GET, 0, itemid, count, m_pUserData->m_sItemArray[SLOT_MAX+destpos].sDuration ); break; case WAREHOUSE_MOVE: if( reference_pos+srcpos > WAREHOUSE_MAX ) goto fail_return; if( m_pUserData->m_sWarehouseArray[reference_pos+srcpos].nNum != itemid ) goto fail_return; if( m_pUserData->m_sWarehouseArray[reference_pos+destpos].nNum ) goto fail_return; m_pUserData->m_sWarehouseArray[reference_pos+destpos].nNum = itemid; m_pUserData->m_sWarehouseArray[reference_pos+destpos].sDuration = m_pUserData->m_sWarehouseArray[reference_pos+srcpos].sDuration; m_pUserData->m_sWarehouseArray[reference_pos+destpos].sCount = m_pUserData->m_sWarehouseArray[reference_pos+srcpos].sCount; m_pUserData->m_sWarehouseArray[reference_pos+destpos].nSerialNum = m_pUserData->m_sWarehouseArray[reference_pos+srcpos].nSerialNum; m_pUserData->m_sWarehouseArray[reference_pos+srcpos].nNum = 0; m_pUserData->m_sWarehouseArray[reference_pos+srcpos].sDuration = 0; m_pUserData->m_sWarehouseArray[reference_pos+srcpos].sCount = 0; m_pUserData->m_sWarehouseArray[reference_pos+srcpos].nSerialNum = 0; break; case WAREHOUSE_INVENMOVE: if( itemid != m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum ) goto fail_return; { short duration = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration; short itemcount = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount; __int64 serial = m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nNum = m_pUserData->m_sItemArray[SLOT_MAX+destpos].nNum; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sDuration = m_pUserData->m_sItemArray[SLOT_MAX+destpos].sDuration; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].sCount = m_pUserData->m_sItemArray[SLOT_MAX+destpos].sCount; m_pUserData->m_sItemArray[SLOT_MAX+srcpos].nSerialNum = m_pUserData->m_sItemArray[SLOT_MAX+destpos].nSerialNum; m_pUserData->m_sItemArray[SLOT_MAX+destpos].nNum = itemid; m_pUserData->m_sItemArray[SLOT_MAX+destpos].sDuration = duration; m_pUserData->m_sItemArray[SLOT_MAX+destpos].sCount = itemcount; m_pUserData->m_sItemArray[SLOT_MAX+destpos].nSerialNum = serial; } break; } m_pUserData->m_bWarehouse = 1; SetByte( send_buff, WIZ_WAREHOUSE, send_index ); SetByte( send_buff, command, send_index ); SetByte( send_buff, 0x01, send_index ); Send( send_buff, send_index ); return; fail_return: SetByte( send_buff, WIZ_WAREHOUSE, send_index ); SetByte( send_buff, command, send_index ); SetByte( send_buff, 0x00, send_index ); Send( send_buff, send_index ); }
// NPC shops void CUser::ItemTrade(char *pBuf) { int index = 0, send_index = 0, itemid = 0, money = 0, count = 0, group = 0, npcid = 0; _ITEM_TABLE* pTable = NULL; char send_buf[128]; CNpc* pNpc = NULL; memset( send_buf, NULL, 128); BYTE type, pos, destpos, result; if (isDead()) { TRACE("### ItemTrade Fail : name=%s(%d), m_bResHpType=%d, hp=%d, x=%d, z=%d ###\n", m_pUserData->m_id, m_Sid, m_bResHpType, m_pUserData->m_sHp, (int)m_pUserData->m_curx, (int)m_pUserData->m_curz); result = 0x01; goto fail_return; } type = GetByte( pBuf, index ); if( type == 0x01 ) {// item buy group = GetDWORD( pBuf, index ); npcid = GetShort( pBuf, index ); } itemid = GetDWORD( pBuf, index ); pos = GetByte( pBuf, index ); if( type == 0x03 ) // item move only destpos = GetByte( pBuf, index ); else count = GetShort( pBuf, index ); if (itemid >= ITEM_NO_TRADE) goto fail_return; if( type == 0x03 ) { // item inven to inven move if( pos >= HAVE_MAX || destpos >= HAVE_MAX ) { SetByte( send_buf, WIZ_ITEM_TRADE, send_index ); SetByte( send_buf, 0x04, send_index ); Send( send_buf, send_index ); return; } if( itemid != m_pUserData->m_sItemArray[SLOT_MAX+pos].nNum ) { SetByte( send_buf, WIZ_ITEM_TRADE, send_index ); SetByte( send_buf, 0x04, send_index ); Send( send_buf, send_index ); return; } short duration = m_pUserData->m_sItemArray[SLOT_MAX+pos].sDuration; short itemcount = m_pUserData->m_sItemArray[SLOT_MAX+pos].sCount; m_pUserData->m_sItemArray[SLOT_MAX+pos].nNum = m_pUserData->m_sItemArray[SLOT_MAX+destpos].nNum; m_pUserData->m_sItemArray[SLOT_MAX+pos].sDuration = m_pUserData->m_sItemArray[SLOT_MAX+destpos].sDuration; m_pUserData->m_sItemArray[SLOT_MAX+pos].sCount = m_pUserData->m_sItemArray[SLOT_MAX+destpos].sCount; m_pUserData->m_sItemArray[SLOT_MAX+destpos].nNum = itemid; m_pUserData->m_sItemArray[SLOT_MAX+destpos].sDuration = duration; m_pUserData->m_sItemArray[SLOT_MAX+destpos].sCount = itemcount; SetByte( send_buf, WIZ_ITEM_TRADE, send_index ); SetByte( send_buf, 0x03, send_index ); Send( send_buf, send_index ); return; } if( m_sExchangeUser != -1 ) goto fail_return; pTable = m_pMain->m_ItemtableArray.GetData( itemid ); if( !pTable ) { result = 0x01; goto fail_return; } if( pos >= HAVE_MAX ) { result = 0x02; goto fail_return; } if( count <= 0 || count > MAX_ITEM_COUNT) { result = 0x02; goto fail_return; } if( type == 0x01 ) { // buy sequence if( m_pMain->m_bPointCheckFlag == FALSE) { result = 0x01; goto fail_return; } pNpc = m_pMain->m_arNpcArray.GetData(npcid); if( !pNpc ) { result = 0x01; goto fail_return; } if( pNpc->m_iSellingGroup != group ) { result = 0x01; goto fail_return; } if( m_pUserData->m_sItemArray[SLOT_MAX+pos].nNum != 0 ) { if( m_pUserData->m_sItemArray[SLOT_MAX+pos].nNum == itemid ) { if( !pTable->m_bCountable || count <= 0 ) { result = 0x02; goto fail_return; } if( pTable->m_bCountable && (count+m_pUserData->m_sItemArray[SLOT_MAX+pos].sCount) > MAX_ITEM_COUNT ) { result = 0x04; goto fail_return; } } else { result = 0x02; goto fail_return; } } if( m_pUserData->m_iGold < (pTable->m_iBuyPrice*count) ) { result = 0x03; goto fail_return; } // if (pTable->m_bCountable) { // Check weight of countable item. if (((pTable->m_sWeight * count) + m_sItemWeight) > m_sMaxWeight) { result = 0x04; goto fail_return; } } else { // Check weight of non-countable item. if ((pTable->m_sWeight + m_sItemWeight) > m_sMaxWeight) { result = 0x04; goto fail_return; } } // m_pUserData->m_sItemArray[SLOT_MAX+pos].nNum = itemid; m_pUserData->m_sItemArray[SLOT_MAX+pos].sDuration = pTable->m_sDuration; if( pTable->m_bCountable && count > 0 ) { // count ?????? ??? ?????? m_pUserData->m_sItemArray[SLOT_MAX+pos].sCount += count; m_pUserData->m_iGold -= (pTable->m_iBuyPrice * count); } else { m_pUserData->m_sItemArray[SLOT_MAX+pos].sCount = 1; m_pUserData->m_iGold -= pTable->m_iBuyPrice; m_pUserData->m_sItemArray[SLOT_MAX+pos].nSerialNum = m_pMain->GenerateItemSerial(); } SendItemWeight(); ItemLogToAgent( m_pUserData->m_id, pNpc->m_strName, ITEM_MERCHANT_BUY, m_pUserData->m_sItemArray[SLOT_MAX+pos].nSerialNum, itemid, count, pTable->m_sDuration ); } else { // sell sequence if( m_pUserData->m_sItemArray[SLOT_MAX+pos].nNum != itemid ) { result = 0x02; goto fail_return; } if( m_pUserData->m_sItemArray[SLOT_MAX+pos].sCount < count ) { result = 0x03; goto fail_return; } int durability = m_pUserData->m_sItemArray[SLOT_MAX+pos].sDuration; if( pTable->m_bCountable && count > 0 ) { m_pUserData->m_iGold += (pTable->m_iSellPrice * count); m_pUserData->m_sItemArray[SLOT_MAX+pos].sCount -= count; if( m_pUserData->m_sItemArray[SLOT_MAX+pos].sCount <= 0 ) { m_pUserData->m_sItemArray[SLOT_MAX+pos].nNum = 0; m_pUserData->m_sItemArray[SLOT_MAX+pos].sDuration = 0; m_pUserData->m_sItemArray[SLOT_MAX+pos].sCount = 0; } } else { m_pUserData->m_iGold += pTable->m_iSellPrice; m_pUserData->m_sItemArray[SLOT_MAX+pos].nNum = 0; m_pUserData->m_sItemArray[SLOT_MAX+pos].sDuration = 0; m_pUserData->m_sItemArray[SLOT_MAX+pos].sCount = 0; } SendItemWeight(); ItemLogToAgent( m_pUserData->m_id, "MERCHANT SELL", ITEM_MERCHANT_SELL, 0, itemid, count, durability ); } SetByte( send_buf, WIZ_ITEM_TRADE, send_index ); SetByte( send_buf, 0x01, send_index ); SetDWORD( send_buf, m_pUserData->m_iGold, send_index ); Send( send_buf, send_index ); return; fail_return: send_index = 0; SetByte( send_buf, WIZ_ITEM_TRADE, send_index ); SetByte( send_buf, 0x00, send_index ); SetByte( send_buf, result, send_index ); Send( send_buf, send_index ); }
HRESULT CModuleConfiguration::GetConfig(IHttpContext* context, CModuleConfiguration** config) { HRESULT hr; CModuleConfiguration* c = NULL; IAppHostElement* section = NULL; LPWSTR commandLine = NULL; size_t i; CheckNull(config); *config = (CModuleConfiguration*)context->GetMetadata()->GetModuleContextContainer()->GetModuleContext(moduleId); if (NULL == *config) { ErrorIf(NULL == (c = new CModuleConfiguration()), ERROR_NOT_ENOUGH_MEMORY); CheckError(GetConfigSection(context, §ion)); CheckError(GetDWORD(section, L"maxPendingRequestsPerApplication", &c->maxPendingRequestsPerApplication)); CheckError(GetDWORD(section, L"asyncCompletionThreadCount", &c->asyncCompletionThreadCount)); CheckError(GetDWORD(section, L"maxProcessCountPerApplication", &c->maxProcessCountPerApplication)); CheckError(GetDWORD(section, L"maxConcurrentRequestsPerProcess", &c->maxConcurrentRequestsPerProcess)); CheckError(GetDWORD(section, L"maxNamedPipeConnectionRetry", &c->maxNamedPipeConnectionRetry)); CheckError(GetDWORD(section, L"namedPipeConnectionRetryDelay", &c->namedPipeConnectionRetryDelay)); CheckError(GetDWORD(section, L"initialRequestBufferSize", &c->initialRequestBufferSize)); CheckError(GetDWORD(section, L"maxRequestBufferSize", &c->maxRequestBufferSize)); CheckError(GetDWORD(section, L"uncFileChangesPollingInterval", &c->uncFileChangesPollingInterval)); CheckError(GetDWORD(section, L"gracefulShutdownTimeout", &c->gracefulShutdownTimeout)); CheckError(GetDWORD(section, L"logFileFlushInterval", &c->logFileFlushInterval)); CheckError(GetDWORD(section, L"maxLogFileSizeInKB", &c->maxLogFileSizeInKB)); CheckError(GetBOOL(section, L"loggingEnabled", &c->loggingEnabled)); CheckError(GetBOOL(section, L"appendToExistingLog", &c->appendToExistingLog)); CheckError(GetString(section, L"logDirectoryNameSuffix", &c->logDirectoryNameSuffix)); CheckError(GetString(section, L"debuggerPortRange", &c->debugPortRange)); CheckError(GetString(section, L"debuggerPathSegment", &c->debuggerPathSegment)); c->debuggerPathSegmentLength = wcslen(c->debuggerPathSegment); CheckError(GetString(section, L"nodeProcessCommandLine", &commandLine)); ErrorIf(NULL == (c->nodeProcessCommandLine = new char[MAX_PATH]), ERROR_NOT_ENOUGH_MEMORY); ErrorIf(0 != wcstombs_s(&i, c->nodeProcessCommandLine, (size_t)MAX_PATH, commandLine, _TRUNCATE), ERROR_INVALID_PARAMETER); delete [] commandLine; commandLine = NULL; section->Release(); section = NULL; // CR: check for ERROR_ALREADY_ASSIGNED to detect a race in creation of this section // CR: refcounting may be needed if synchronous code paths proove too long (race with config changes) context->GetMetadata()->GetModuleContextContainer()->SetModuleContext(c, moduleId); *config = c; c = NULL; } return S_OK; Error: if (NULL != section) { section->Release(); section = NULL; } if (NULL != commandLine) { delete [] commandLine; commandLine = NULL; } if (NULL != c) { delete c; c = NULL; } return hr; }
void ReadConfig(void) { HKEY myKey; DWORD temp; DWORD type; DWORD size; // predefines iResX=640;iResY=480; iColDepth=16; iWindowMode=0; UseFrameLimit=1; UseFrameSkip=0; iFrameLimit=2; fFrameRate=200.0f; iWinSize=MAKELONG(640,480); dwCfgFixes=0; iUseFixes=0; iUseGammaVal=2048; iUseScanLines=0; iUseNoStretchBlt=0; iUseDither=0; iShowFPS=0; iSysMemory=0; iStopSaver=1; bVsync=FALSE; bTransparent=FALSE; iRefreshRate=0; iDebugMode=0; lstrcpy(szGPUKeys,szKeyDefaults); memset(szDevName,0,128); memset(&guiDev,0,sizeof(GUID)); // standard Windows psx config (registry) if(RegOpenKeyEx(HKEY_CURRENT_USER,"Software\\Vision Thing\\PSEmu Pro\\GPU\\DFXVideo",0,KEY_ALL_ACCESS,&myKey)==ERROR_SUCCESS) { size = 4; if(RegQueryValueEx(myKey,"ResX",0,&type,(LPBYTE)&temp,&size)==ERROR_SUCCESS) iResX=(int)temp; size = 4; if(RegQueryValueEx(myKey,"ResY",0,&type,(LPBYTE)&temp,&size)==ERROR_SUCCESS) iResY=(int)temp; size = 4; if(RegQueryValueEx(myKey,"RefreshRate",0,&type,(LPBYTE)&temp,&size)==ERROR_SUCCESS) iRefreshRate=(int)temp; size = 4; if(RegQueryValueEx(myKey,"WinSize",0,&type,(LPBYTE)&temp,&size)==ERROR_SUCCESS) iWinSize=(int)temp; size = 4; if(RegQueryValueEx(myKey,"WindowMode",0,&type,(LPBYTE)&temp,&size)==ERROR_SUCCESS) iWindowMode=(int)temp; size = 4; if(RegQueryValueEx(myKey,"ColDepth",0,&type,(LPBYTE)&temp,&size)==ERROR_SUCCESS) iColDepth=(int)temp; size = 4; if(RegQueryValueEx(myKey,"UseFrameLimit",0,&type,(LPBYTE)&temp,&size)==ERROR_SUCCESS) UseFrameLimit=(int)temp; size = 4; if(RegQueryValueEx(myKey,"UseFrameSkip",0,&type,(LPBYTE)&temp,&size)==ERROR_SUCCESS) UseFrameSkip=(int)temp; size = 4; if(RegQueryValueEx(myKey,"FrameLimit",0,&type,(LPBYTE)&temp,&size)==ERROR_SUCCESS) iFrameLimit=(int)temp; size = 4; if(RegQueryValueEx(myKey,"CfgFixes",0,&type,(LPBYTE)&temp,&size)==ERROR_SUCCESS) dwCfgFixes=(int)temp; size = 4; if(RegQueryValueEx(myKey,"UseFixes",0,&type,(LPBYTE)&temp,&size)==ERROR_SUCCESS) iUseFixes=(int)temp; size = 4; if(RegQueryValueEx(myKey,"UseScanLines",0,&type,(LPBYTE)&temp,&size)==ERROR_SUCCESS) iUseScanLines=(int)temp; size = 4; if(RegQueryValueEx(myKey,"ShowFPS",0,&type,(LPBYTE)&temp,&size)==ERROR_SUCCESS) iShowFPS=(int)temp; size = 4; if(RegQueryValueEx(myKey,"UseNoStrechBlt",0,&type,(LPBYTE)&temp,&size)==ERROR_SUCCESS) iUseNoStretchBlt=(int)temp; size = 4; if(RegQueryValueEx(myKey,"UseDither",0,&type,(LPBYTE)&temp,&size)==ERROR_SUCCESS) iUseDither=(int)temp; size = 4; if(RegQueryValueEx(myKey,"UseGamma",0,&type,(LPBYTE)&temp,&size)==ERROR_SUCCESS) iUseGammaVal=(int)temp; if(!iFrameLimit) {UseFrameLimit=0;UseFrameSkip=0;iFrameLimit=2;} // try to get the float framerate... if none: take int framerate fFrameRate=0.0f; size = 4; if(RegQueryValueEx(myKey,"FrameRateFloat",0,&type,(LPBYTE)&temp,&size)==ERROR_SUCCESS) fFrameRate=*((float *)(&temp)); if(fFrameRate==0.0f) { fFrameRate=200.0f; size = 4; if(RegQueryValueEx(myKey,"FrameRate",0,&type,(LPBYTE)&temp,&size)==ERROR_SUCCESS) fFrameRate=(float)temp; } size = 4; if(RegQueryValueEx(myKey,"UseSysMemory",0,&type,(LPBYTE)&temp,&size)==ERROR_SUCCESS) iSysMemory=(int)temp; size = 4; if(RegQueryValueEx(myKey,"StopSaver",0,&type,(LPBYTE)&temp,&size)==ERROR_SUCCESS) iStopSaver=(int)temp; size = 4; if(RegQueryValueEx(myKey,"WaitVSYNC",0,&type,(LPBYTE)&temp,&size)==ERROR_SUCCESS) bVsync=bVsync_Key=(BOOL)temp; size = 4; if(RegQueryValueEx(myKey,"Transparent",0,&type,(LPBYTE)&temp,&size)==ERROR_SUCCESS) bTransparent=(BOOL)temp; size = 4; if(RegQueryValueEx(myKey,"DebugMode",0,&type,(LPBYTE)&temp,&size)==ERROR_SUCCESS) iDebugMode=(BOOL)temp; size=11; RegQueryValueEx(myKey,"GPUKeys",0,&type,(LPBYTE)&szGPUKeys,&size); size=128; RegQueryValueEx(myKey,"DeviceName",0,&type,(LPBYTE)szDevName,&size); size=sizeof(GUID); RegQueryValueEx(myKey,"GuiDev",0,&type,(LPBYTE)&guiDev,&size); // // Recording options // #define GetDWORD(xa,xb) size=4;if(RegQueryValueEx(myKey,xa,0,&type,(LPBYTE)&temp,&size)==ERROR_SUCCESS) xb=(unsigned long)temp; #define GetBINARY(xa,xb) size=sizeof(xb);RegQueryValueEx(myKey,xa,0,&type,(LPBYTE)&xb,&size); GetDWORD("RecordingMode", RECORD_RECORDING_MODE); GetDWORD("RecordingVideoSize", RECORD_VIDEO_SIZE); GetDWORD("RecordingWidth", RECORD_RECORDING_WIDTH); GetDWORD("RecordingHeight", RECORD_RECORDING_HEIGHT); GetDWORD("RecordingFrameRateScale", RECORD_FRAME_RATE_SCALE); GetDWORD("RecordingCompressionMode", RECORD_COMPRESSION_MODE); GetBINARY("RecordingCompression1", RECORD_COMPRESSION1); GetBINARY("RecordingCompressionState1", RECORD_COMPRESSION_STATE1); GetBINARY("RecordingCompression2", RECORD_COMPRESSION2); GetBINARY("RecordingCompressionState2", RECORD_COMPRESSION_STATE2); if(RECORD_RECORDING_WIDTH>1024) RECORD_RECORDING_WIDTH = 1024; if(RECORD_RECORDING_HEIGHT>768) RECORD_RECORDING_HEIGHT = 768; if(RECORD_VIDEO_SIZE>2) RECORD_VIDEO_SIZE = 2; if(RECORD_FRAME_RATE_SCALE>7) RECORD_FRAME_RATE_SCALE = 7; if(RECORD_COMPRESSION1.cbSize != sizeof(RECORD_COMPRESSION1)) { memset(&RECORD_COMPRESSION1,0,sizeof(RECORD_COMPRESSION1)); RECORD_COMPRESSION1.cbSize = sizeof(RECORD_COMPRESSION1); } RECORD_COMPRESSION1.lpState = RECORD_COMPRESSION_STATE1; if(RECORD_COMPRESSION2.cbSize != sizeof(RECORD_COMPRESSION2)) { memset(&RECORD_COMPRESSION2,0,sizeof(RECORD_COMPRESSION2)); RECORD_COMPRESSION2.cbSize = sizeof(RECORD_COMPRESSION2); } RECORD_COMPRESSION2.lpState = RECORD_COMPRESSION_STATE2; // // end of recording options // RegCloseKey(myKey); } if(!iColDepth) iColDepth=32; if(iUseFixes) dwActFixes=dwCfgFixes; SetFixes(); if(iUseGammaVal<0 || iUseGammaVal>1536) iUseGammaVal=2048; }