?? itemtable.cpp
字號:
{
Item_Ref.Item_type[2][z] = &herb[z];
}
for (z = 0; z < Num_Of_CItem_Cook; ++z)
{
Item_Ref.Item_type[3][z] = &cook[z];
}
for (z = 0; z < Num_Of_CItem_Potion; ++z)
{
Item_Ref.Item_type[4][z] = &potion[z];
}
for (z = 0; z < Num_Of_CItem_Tool; ++z)
{
Item_Ref.Item_type[5][z] = &tool[z];
}
for (z = 0; z < Num_Of_CItem_Weapon; ++z)
{
Item_Ref.Item_type[6][z] = &weapon[z];
}
for (z = 0; z < Num_Of_CItem_Disposable; ++z)
{
Item_Ref.Item_type[7][z] = &disposable[z];
}
for (z = 0; z < Num_Of_CItem_Armor; ++z)
{
Item_Ref.Item_type[8][z] = &armor[z];
}
for (z = 0; z < Num_Of_CItem_Accessory; ++z)
{
Item_Ref.Item_type[9][z] = &accessory[z];
}
for (z = 0; z < Num_Of_CItem_Etc; ++z)
{
Item_Ref.Item_type[10][z] = &etc[z];
}
const int ItemAttrMax[11] = {
ITEM_Plant_MAX, ITEM_Mineral_MAX, ITEM_Herb_MAX, ITEM_Cook_MAX, ITEM_Potion_MAX, ITEM_Tool_MAX,
ITEM_Weapon_MAX, ITEM_Disposable_MAX, ITEM_Armor_MAX, ITEM_Accessory_MAX, ITEM_Etc_MAX,
};
for( int i=0 ; i < Num_Of_Item_Type ; i++)
{
FILE *fp = NULL;
char filename[MAX_FILENAME],filenameBin[MAX_FILENAME];
sprintf(filename, "./itemtable/itemtable%d.txt", i);
sprintf(filenameBin, "./itemtable/itemtable%d.bin", i);
#ifdef _DEBUG
if( ( fp=Fopen(filename, "rt")) && (Item_Ref.nItem[i] > 0) )
{
char text[MAX_STRING_];
char temp[MAX_STRING_];
while( fgets( text, MAX_STRING_, fp ) != NULL )
{
char *token;
strcpy( temp, text );
token = strtok( text, "\t\n");
int item_id = atoi( token );
CItem *t = ItemUnit( i, item_id );
if( t ) t->ReadItemTable( temp );
}
fclose(fp);
if( fp=Fopen(filenameBin, "wb") )
{
CHSEL_STREAM ItemEn;
HSEL_INITIAL eninit;
eninit.iEncryptType = HSEL_ENCRYPTTYPE_RAND;
eninit.iDesCount = HSEL_DES_TRIPLE;
eninit.iDesCount = HSEL_DES_SINGLE;
eninit.iCustomize = HSEL_KEY_TYPE_DEFAULT;
eninit.iSwapFlag = HSEL_SWAP_FLAG_ON;
if (!ItemEn.Initial(eninit))
{
JustMsg("ItemTable make bin Error");
fclose(fp);
}
HSEL_INITIAL deinit = ItemEn.GetHSELCustomizeOption();
int* piNumOfItemTable = NULL;
int iTempNumOfItemTable = 0;
char* pTable = NULL;
char* pTableStart = NULL;
int iTableSize = 0;
switch(i)
{
case PLANT:
{
pTable = (char*)(&plant[0]);
pTableStart = (char*)(&plant[0]);
iTableSize = sizeof(CItem_Plant);
piNumOfItemTable = &Num_Of_CItem_Plant;
iTempNumOfItemTable = Num_Of_CItem_Plant;
}break;
case MINERAL:
{
pTable = (char*)(&mineral[0]);
pTableStart = (char*)(&mineral[0]);
iTableSize = sizeof(CItem_Mineral);
piNumOfItemTable = &Num_Of_CItem_Mineral;
iTempNumOfItemTable = Num_Of_CItem_Mineral;
}break;
case HERB:
{
pTable = (char*)(&herb[0]);
pTableStart = (char*)(&herb[0]);
iTableSize = sizeof(CItem_Herb);
piNumOfItemTable = &Num_Of_CItem_Herb;
iTempNumOfItemTable = Num_Of_CItem_Herb;
}break;
case COOK:
{
pTable = (char*)(&cook[0]);
pTableStart = (char*)(&cook[0]);
iTableSize = sizeof(CItem_Cook);
piNumOfItemTable = &Num_Of_CItem_Cook;
iTempNumOfItemTable = Num_Of_CItem_Cook;
}break;
case POTION:
{
pTable = (char*)(&potion[0]);
pTableStart = (char*)(&potion[0]);
iTableSize = sizeof(CItem_Potion);
piNumOfItemTable = &Num_Of_CItem_Potion;
iTempNumOfItemTable = Num_Of_CItem_Potion;
}break;
case TOOL:
{
pTable = (char*)(&tool[0]);
pTableStart = (char*)(&tool[0]);
iTableSize = sizeof(CItem_Tool);
piNumOfItemTable = &Num_Of_CItem_Tool;
iTempNumOfItemTable = Num_Of_CItem_Tool;
}break;
case WEAPON:
{
pTable = (char*)(&weapon[0]);
pTableStart = (char*)(&weapon[0]);
iTableSize = sizeof(CItem_Weapon);
piNumOfItemTable = &Num_Of_CItem_Weapon;
iTempNumOfItemTable = Num_Of_CItem_Weapon;
}break;
case DISPOSABLE:
{
pTable = (char*)(&disposable[0]);
pTableStart = (char*)(&disposable[0]);
iTableSize = sizeof(CItem_Disposable);
piNumOfItemTable = &Num_Of_CItem_Disposable;
iTempNumOfItemTable = Num_Of_CItem_Disposable;
}break;
case ARMOR:
{
pTable = (char*)(&armor[0]);
pTableStart = (char*)(&armor[0]);
iTableSize = sizeof(CItem_Armor);
piNumOfItemTable = &Num_Of_CItem_Armor;
iTempNumOfItemTable = Num_Of_CItem_Armor;
}break;
case ACCESSORY:
{
pTable = (char*)(&accessory[0]);
pTableStart = (char*)(&accessory[0]);
iTableSize = sizeof(CItem_Accessory);
piNumOfItemTable = &Num_Of_CItem_Accessory;
iTempNumOfItemTable = Num_Of_CItem_Accessory;
}break;
case ETC:
{
pTable = (char*)(&etc[0]);
pTableStart = (char*)(&etc[0]);
iTableSize = sizeof(CItem_Etc);
piNumOfItemTable = &Num_Of_CItem_Etc;
iTempNumOfItemTable = Num_Of_CItem_Etc;
}break;
default:
{
JustMsg("ItemTable Read Error txt %d",i);
fclose(fp);
}break;
}
//鞠齲 竅扁
fwrite( &iTempNumOfItemTable, 4, 1, fp );//骯薦甫 弊成 扁廢
fwrite( &deinit, sizeof(HSEL_INITIAL), 1, fp );
ItemEn.Encrypt((char *)piNumOfItemTable, sizeof(int));
fwrite( piNumOfItemTable, 4, 1, fp );
int iCRC = ItemEn.GetCRCConvertInt();//CRC 扁廢
fwrite(&iCRC,sizeof(int),1,fp);
for(int ct = 0 ; iTempNumOfItemTable > ct ;ct++)
{
ItemEn.Encrypt(pTable, iTableSize);
fwrite(pTable,iTableSize,1,fp);//鞠齲拳等 單撈鷗 扁廢
const int iCRC = ItemEn.GetCRCConvertInt();//CRC 扁廢
fwrite(&iCRC,sizeof(int),1,fp);
pTable += iTableSize;
}
fclose(fp);//頗老 扁廢
//鞠齲 錢扁
CHSEL_STREAM ItemDe;
ItemDe.Initial(deinit);
ItemDe.Decrypt((char *)piNumOfItemTable, sizeof(int));
for(int ct2 = 0 ; *piNumOfItemTable > ct2 ;ct2++)
{
ItemDe.Decrypt((char*)pTableStart, iTableSize);
pTableStart += iTableSize;
}
}
}
else
#endif
{
if(fp=Fopen( filenameBin, "rb" ) )
{
CHSEL_STREAM ItemDe;
HSEL_INITIAL deinit;
int iLineNum = 0;
fread( &iLineNum,sizeof(int), 1,fp);
fread( &deinit,sizeof(HSEL_INITIAL), 1,fp);
if (!ItemDe.Initial(deinit))
{
JustMsg("ItemTable make bin Error");
fclose(fp);
}
int *piNumOfItemTable = NULL;
int iTableSize = 0;
char* pTable = NULL;
switch(i)
{
case PLANT:
{
pTable = (char*)&plant[0];
iTableSize = sizeof(CItem_Plant);
piNumOfItemTable = &Num_Of_CItem_Plant;
}break;
case MINERAL:
{
pTable = (char*)&mineral[0];
iTableSize = sizeof(CItem_Mineral);
piNumOfItemTable = &Num_Of_CItem_Mineral;
}break;
case HERB:
{
pTable = (char*)&herb[0];
iTableSize = sizeof(CItem_Herb);
piNumOfItemTable = &Num_Of_CItem_Herb;
}break;
case COOK:
{
pTable = (char*)&cook[0];
iTableSize = sizeof(CItem_Cook);
piNumOfItemTable = &Num_Of_CItem_Cook;
}break;
case POTION:
{
pTable = (char*)&potion[0];
iTableSize = sizeof(CItem_Potion);
piNumOfItemTable = &Num_Of_CItem_Potion;
}break;
case TOOL:
{
pTable = (char*)&tool[0];
iTableSize = sizeof(CItem_Tool);
piNumOfItemTable = &Num_Of_CItem_Tool;
}break;
case WEAPON:
{
pTable = (char*)&weapon[0];
iTableSize = sizeof(CItem_Weapon);
piNumOfItemTable = &Num_Of_CItem_Weapon;
}break;
case DISPOSABLE:
{
pTable = (char*)&disposable[0];
iTableSize = sizeof(CItem_Disposable);
piNumOfItemTable = &Num_Of_CItem_Disposable;
}break;
case ARMOR:
{
pTable = (char*)&armor[0];
iTableSize = sizeof(CItem_Armor);
piNumOfItemTable = &Num_Of_CItem_Armor;
}break;
case ACCESSORY:
{
pTable = (char*)&accessory[0];
iTableSize = sizeof(CItem_Accessory);
piNumOfItemTable = &Num_Of_CItem_Accessory;
}break;
case ETC:
{
pTable = (char*)&etc[0];
iTableSize = sizeof(CItem_Etc);
piNumOfItemTable = &Num_Of_CItem_Etc;
}break;
default:
{
}break;
}
{
fread( piNumOfItemTable,sizeof(int), 1,fp);
ItemDe.Decrypt((char *)piNumOfItemTable, sizeof(int));
if( iLineNum != *piNumOfItemTable)
{
JustMsg("ItemTable Read Error %d",i);
fclose(fp);
}
int iCRC1 =0;
const int iCRC2 = ItemDe.GetCRCConvertInt();//CRC 扁廢
fread(&iCRC1,sizeof(int),1,fp);
if( iCRC2 != iCRC1)
{
JustMsg("ItemTable Read Error %d",i);
fclose(fp);
}
for(int ct = 0 ; *piNumOfItemTable > ct ;ct++)
{
fread((char*)pTable,iTableSize,1,fp);//鞠齲拳等 單撈鷗 扁廢
ItemDe.Decrypt((char*)pTable, iTableSize);
int iCRC1=0;//CRC 扁廢
const int iCRC2 = ItemDe.GetCRCConvertInt();//CRC 扁廢
fread(&iCRC1,sizeof(int),1,fp);
if( iCRC2 != iCRC1)
{
JustMsg("ItemTable Read Error %d , %d",i,ct);
fclose(fp);
}
pTable += iTableSize;
}
}
fclose(fp);
}
else return;
}
}
for( z=0; z < Num_Of_CItem_Plant ; z++) { Plant[z].CopyItemClass( &plant[z], ITEM_Plant_MAX ); Item_Ref.Item_type[0][z] = &Plant[z]; }
for( z=0; z < Num_Of_CItem_Mineral ; z++) { Mineral[z].CopyItemClass( &mineral[z], ITEM_Mineral_MAX ); Item_Ref.Item_type[1][z] = &Mineral[z]; }
for( z=0; z < Num_Of_CItem_Herb ; z++) { Herb[z].CopyItemClass( &herb[z], ITEM_Herb_MAX ); Item_Ref.Item_type[2][z] = &Herb[z]; }
for( z=0; z < Num_Of_CItem_Cook ; z++) { Cook[z].CopyItemClass( &cook[z], ITEM_Cook_MAX ); Item_Ref.Item_type[3][z] = &Cook[z]; }
for( z=0; z < Num_Of_CItem_Potion ; z++) { Potion[z].CopyItemClass( &potion[z], ITEM_Potion_MAX ); Item_Ref.Item_type[4][z] = &Potion[z]; }
for( z=0; z < Num_Of_CItem_Tool ; z++) { Tool[z].CopyItemClass( &tool[z], ITEM_Tool_MAX ); Item_Ref.Item_type[5][z] = &Tool[z]; }
for( z=0; z < Num_Of_CItem_Weapon ; z++) { Weapon[z].CopyItemClass( &weapon[z], ITEM_Weapon_MAX ); Item_Ref.Item_type[6][z] = &Weapon[z]; }
for( z=0; z < Num_Of_CItem_Disposable ; z++){ Disposable[z].CopyItemClass( &disposable[z], ITEM_Disposable_MAX ); Item_Ref.Item_type[7][z] = &Disposable[z]; }
for( z=0; z < Num_Of_CItem_Armor ; z++) { Armor[z].CopyItemClass( &armor[z], ITEM_Armor_MAX ); Item_Ref.Item_type[8][z] = &Armor[z]; }
for( z=0; z < Num_Of_CItem_Accessory ; z++) { Accessory[z].CopyItemClass( &accessory[z], ITEM_Accessory_MAX ); Item_Ref.Item_type[9][z] = &Accessory[z]; }
for( z=0; z < Num_Of_CItem_Etc ; z++) { Etc[z].CopyItemClass( &etc[z], ITEM_Etc_MAX ); Item_Ref.Item_type[10][z]= &Etc[z]; }
SAFE_DELETE_ARRAY(plant );
SAFE_DELETE_ARRAY(mineral );
SAFE_DELETE_ARRAY(herb );
SAFE_DELETE_ARRAY(cook );
SAFE_DELETE_ARRAY(potion );
SAFE_DELETE_ARRAY(tool );
SAFE_DELETE_ARRAY(weapon );
SAFE_DELETE_ARRAY(disposable);
SAFE_DELETE_ARRAY(armor );
SAFE_DELETE_ARRAY(accessory );
SAFE_DELETE_ARRAY(etc );
}
inline int GetItemNumber( int item_number , int& type, int& num )
{
type = item_number / 1000;
num = item_number % 1000;
if( (type<0) || (type>10) ) return 0;
// if( (num<0) || (num>= Item_Ref.nItem[type]) ) return 0;
return 1;
}
///////////////////////////////////////////////////////////////////////////////////////
void LoadItemIconData(Spr *s, int num)
{
FILE *fp;
char filename[MAX_FILENAME];
sprintf(filename, "./itemdata/%07d.csp", num );
if( fp = Fopen(filename, "rb" ) )
{
fread( &s->xl, sizeof( short ), 1, fp);
fread( &s->yl, sizeof( short ), 1, fp);
fread( &s->ox, sizeof( short ), 1, fp);
fread( &s->oy, sizeof( short ), 1, fp);
fread( &s->size, sizeof( unsigned int ), 1, fp);
dw_TotalImageSize+=s->size;
MemFree( s->img );
MemAlloc( s->img, s->size );
fread(s->img, s->size, 1, fp);
convert565to555( s );
fclose(fp);
}
else LoadItemIconData(s, 0); // 0鍋弊覆 肺靛
}
//------------------------------------------------------------------------
// 酒撈能 弊覆 嘛絹林綽 竊薦 ( 俊聰皋撈記檔 啊瓷 )
//------------------------------------------------------------------------
void PutItemIcon(int x, int y, int item_number, int delay, int effect, int is_not_equip)
{
if( !item_number ) return;
int image; // 酒撈袍撈 啊瘤絆 樂綽 撈固瘤
int kind; // 酒撈能 弊覆 鷗澇
int index;
GetItemNumber(item_number, kind, index);
CItem *t = ItemUnit(kind, index);
if( !t )
{
DeleteItemByItemNumber( item_number );
return;
}
image = t->GetImageNumber();
if( !GetItemNumber((int)image/100, kind, index) )
{
if( GetSysInfo( SI_GAME_MAKE_MODE ) )
{
JustMsg( lan->OutputMessage(6,81), item_number );//010215 lsw
exit( 0 );
}
return;
}
if( !index ) // 酒撈袍 弊覆撈 0撈擱
{
DeleteItemByItemNumber( item_number );
return;
}
Spr* s;
if( GetSysInfo( SI_GAME_MAKE_MODE ) )
if( index >= ITEM_MAX )
{
JustMsg( lan->OutputMessage(6,69), item_number );//010215 lsw
}
switch(kind)
{
case 0 : s = &Icon1[index][0]; break;
case 1 : s = &Icon2[index][0]; break;
case 2 : s = &Icon3[index][0]; break;
case 3 : s = &Icon4[index][0]; break;
case 4 : s = &Icon5[index][0]; break;
case 5 : s = &Icon6[index][0]; break;
case 6 : s = &Icon7[index][0]; break;
case 7 : s = &Icon8[index][0]; break;
case 8 : s = &Icon9[index][0]; break;
case 9 : s = &Icon10[index][0]; break;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -