?? gen.cpp
字號:
void CGen::OnSelectAll()
{
UpdateData();
for(int i=0;i<3;i++)
{
m_data.Extra_1[i]=TRUE;
m_data.Extra_2[i]=TRUE;
m_data.Extra_3[i]=TRUE;
m_data.Extra_4[i]=TRUE;
m_data.Extra_5[i]=TRUE;
}
for(i=0;i<4;i++)
{
m_data.Extra_6[i]=TRUE;
m_data.Extra_7[i]=TRUE;
m_data.Extra_8[i]=TRUE;
m_data.Extra_9[i]=TRUE;
}
UpdateData(FALSE);
}
void CGen::OnSelectNone()
{
UpdateData();
for(int i=0;i<3;i++)
{
m_data.Extra_1[i]=FALSE;
m_data.Extra_2[i]=FALSE;
m_data.Extra_3[i]=FALSE;
m_data.Extra_4[i]=FALSE;
m_data.Extra_5[i]=FALSE;
}
for(i=0;i<4;i++)
{
m_data.Extra_6[i]=FALSE;
m_data.Extra_7[i]=FALSE;
m_data.Extra_8[i]=FALSE;
m_data.Extra_9[i]=FALSE;
}
UpdateData(FALSE);
}
void CGen::OnMaxSet()
{
OnSelectAll();
m_data.Skill1=65535;
m_data.Skill2=65535;
m_data.Skill3=65535;
m_data.Skill4=65535;
m_data.Skill5=65535;
m_data.Skill6=65535;
m_data.Skill7=65535;
m_data.Skill8=65535;
m_data.Skill9=65535;
m_data.Basic_Brains=255;
m_data.Basic_Command=255;
m_data.Basic_Force=255;
m_data.Basic_Polity=255;
UpdateData(FALSE);
}
void CGen::OnPhotoChange()
{
UpdateData();
if(m_data.photo!=0xffff)
m_photo.m_code=m_data.photo-PHOTO_SEEK;
else
m_photo.m_code=0;
m_photo.oldpos.x=-1;
m_photo.oldpos.y=-1;
if(m_photo.DoModal()==IDOK)
{
if(m_photo.m_code!=0)
m_data.photo=m_photo.m_code+PHOTO_SEEK;
else
m_data.photo=0xffff;
UpdateData(FALSE);
Invalidate();
}
}
void CGen::OnCustomdrawSlider(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
OnReleasedcaptureSlider(pNMHDR, pResult);
}
void CGen::OnReleasedcaptureSlider(NMHDR* pNMHDR, LRESULT* pResult)
{
int pos=m_Slider.GetPos();
m_data.Birthday=pos;
CSan9EditApp *app=(CSan9EditApp*)AfxGetApp();
int p;
if(m_data.Parent!=65535)
p=app->m_GenCode[m_data.Parent-700].Birthday;
else p=120;
if(p+15>m_data.Birthday)
{
//m_Slider.SetPos(p+15);
pos=p+15;
}
m_data.Birthday=pos;
m_char.Format("%d",pos);
this->SetDlgItemText(IDC_BIRTHDAY,m_char);
m_char="";
*pResult = 0;
}
BOOL CGen::ReadBuffer()
{
if(buf!=NULL) delete[] buf;
buf=new char[m_len+1];
if(m_index!=-1)
{
long seek=0x04;
seek+=m_len*m_index;
CFile file;
if(file.Open(m_name,CFile::modeRead))
{
if(buf!=NULL) delete[] buf;
buf=new char[m_len+1];
file.Seek(seek,CFile::begin);
int recive=file.Read(buf,m_len);
file.Close();
if(recive<m_len) return FALSE;
}
else return FALSE;
if(*(buf+0x25)==(char)0xff)
{
delete[] buf;
return FALSE;
}
}
else
{
//初始化新增武將原始數據
NewData();
}
return TRUE;
}
void CGen::NewData(BOOL add)
{
if(buf==NULL) buf=new char[m_len+1];
*(buf+0x1f)=0;
//肖像
*(buf+0x02)=(char)(0xff);
*(buf+0x03)=(char)(0xff);
//父母
*(buf+0x04)=(char)0xff;
*(buf+0x05)=(char)0xff;
//相性
*(buf+0x06)=(char)0xff;
*(buf+0x07)=(char)0xff;
//年齡
*(buf+0x1a)=(char)(5);
//統率
*(buf+0x1e)=1;
//武力
*(buf+0x1b)=1;
//智力
*(buf+0x1c)=1;
//政治
*(buf+0x1d)=1;
int i;
//姓,名,字
for(i=0;i<4;i++)
{
*(buf+i+0x35)='\0';
*(buf+i+0x3a)='\0';
*(buf+i+0x3f)='\0';
}
//信念
*(buf+0x20)=0;
//性格
*(buf+0x21)=0;
//傳記
for(i=0;i<150;i++)
{
*(buf+i+0x4f)='\0';
}
//技能
for(i=0x08;i<=0x19;i++)
{
*(buf+i)=0;
}
//兵法
for(i=0x2f;i<=0x34;i++)
{
*(buf+i)=0;
}
if(add)
*(buf+0x25)=(char)0x00;
else
*(buf+0x25)=(char)0xff;
}
BOOL CGen::ReadData()
{
if(buf==NULL) return FALSE;
//處理buf至m_data
//容貌
m_data.photo=(unsigned char)(*(buf+0x02))+(unsigned char)(*(buf+0x03))*0x100;
//父母
m_data.Parent=(unsigned char)(*(buf+0x04))+(unsigned char)(*(buf+0x05))*0x100;
//相性
m_data.Friend=(unsigned char)(*(buf+0x06))+(unsigned char)(*(buf+0x07))*0x100;
//性別
if(*(buf+0x1f)==1)
m_data.Sex=FALSE;
else m_data.Sex=TRUE;
//年齡
m_data.Birthday=(unsigned char)(*(buf+0x1a))+130;
//統率
m_data.Basic_Command=(unsigned char)(*(buf+0x1e));
//武力
m_data.Basic_Force=(unsigned char)(*(buf+0x1b));
//智力
m_data.Basic_Brains=(unsigned char)(*(buf+0x1c));
//政治
m_data.Basic_Polity=(unsigned char)(*(buf+0x1d));
//姓
for(int i=0x35;i<=0x38;i++)
m_data.FirstName[i-0x35]=*(buf+i);
m_data.FirstName[i-0x35]='\0';
CString text;
text=m_bgigb.BigtoGB(m_data.FirstName);
strcpy(m_data.FirstName,text);
//名
for(i=0x3a;i<=0x3d;i++)
m_data.SecondName[i-0x3a]=*(buf+i);
m_data.SecondName[i-0x3a]='\0';
text=m_bgigb.BigtoGB(m_data.SecondName);
strcpy(m_data.SecondName,text);
//字
for(i=0x3f;i<=0x42;i++)
m_data.ThirdName[i-0x3f]=*(buf+i);
m_data.ThirdName[i-0x3f]='\0';
text=m_bgigb.BigtoGB(m_data.ThirdName);
strcpy(m_data.ThirdName,text);
//信念
m_data.Persuasion=(unsigned char)(*(buf+0x20))+1;
//性格
m_data.Kidney=(unsigned char)(*(buf+0x21))+1;
//傳記
for(i=0x4f;i<=0xe4;i++)
m_data.Biography+=*(buf+i);
text=m_bgigb.BigtoGB(m_data.Biography);
m_data.Biography=text;
//熟練度
m_data.Skill1=(unsigned char)(*(buf+0x08))+(unsigned char)(*(buf+0x09))*0x100;
m_data.Skill2=(unsigned char)(*(buf+0x0a))+(unsigned char)(*(buf+0x0b))*0x100;
m_data.Skill3=(unsigned char)(*(buf+0x0c))+(unsigned char)(*(buf+0x0d))*0x100;
m_data.Skill4=(unsigned char)(*(buf+0x0e))+(unsigned char)(*(buf+0x0f))*0x100;
m_data.Skill5=(unsigned char)(*(buf+0x10))+(unsigned char)(*(buf+0x11))*0x100;
m_data.Skill6=(unsigned char)(*(buf+0x12))+(unsigned char)(*(buf+0x13))*0x100;
m_data.Skill7=(unsigned char)(*(buf+0x14))+(unsigned char)(*(buf+0x15))*0x100;
m_data.Skill8=(unsigned char)(*(buf+0x16))+(unsigned char)(*(buf+0x17))*0x100;
m_data.Skill9=(unsigned char)(*(buf+0x18))+(unsigned char)(*(buf+0x19))*0x100;
//兵法
_int64 extras=(unsigned char)(*(buf+0x2f));
extras+=((unsigned char)(*(buf+0x30)))*0x100;
extras+=((unsigned char)(*(buf+0x31)))*0x10000;
extras+=((unsigned char)(*(buf+0x32)))*0x1000000;
extras+=((unsigned char)(*(buf+0x33)))*0x100000000;
extras+=((unsigned char)(*(buf+0x34)))*0x10000000000;
_int64 flags=0x40000000;
i=31;
while(flags>0)
{
if(extras>=flags)
{
if(i>=28) m_data.Extra_9[i-28]=TRUE;
else
if(i>=24) m_data.Extra_8[i-24]=TRUE;
else
if(i>=20) m_data.Extra_7[i-20]=TRUE;
else
if(i>=16) m_data.Extra_6[i-16]=TRUE;
else
if(i>=13) m_data.Extra_5[i-13]=TRUE;
else
if(i>=10) m_data.Extra_4[i-10]=TRUE;
else
if(i>=7) m_data.Extra_3[i-7]=TRUE;
else
if(i>=4) m_data.Extra_2[i-4]=TRUE;
else
if(i>=1) m_data.Extra_1[i-1]=TRUE;
extras-=flags;
}
flags/=2;
i--;
}
return TRUE;
}
BOOL CGen::SaveBuffer()
{
if(*(buf+0x25)!=(char)0xff)
{
if(m_FirstName=="" || m_SecondName=="")
{
MessageBox("您還沒有填寫姓名!");
return FALSE;
}
if(m_data.photo==0xffff)
{
MessageBox("您還沒有選擇容貌!");
return FALSE;
}
/*
CString str;
this->GetDlgItemText(IDC_PARENT,str);
int num=atol(str);
if( (num>785 && num!=65535) || str.GetLength()>5)
{
MessageBox("父母編號范圍是0-785,65535表示沒有父母!");
m_data.Parent=65535;
this->SetDlgItemText(IDC_PARENT,"65535");
return FALSE;
}
this->GetDlgItemText(IDC_FRIEND,str);
num=atol(str);
if( (num>785 && num!=65535) || str.GetLength()>5)
{
MessageBox("相性的范圍是0-785,65535表示,沒有相性相符的武將");
m_data.Friend=65535;
this->SetDlgItemText(IDC_FRIEND,"65535");
return FALSE;
}
*/
}
strcpy(m_data.FirstName,m_FirstName);
strcpy(m_data.SecondName,m_SecondName);
strcpy(m_data.ThirdName,m_ThirdName);
//開始保存m_data;
//肖像
*(buf+0x02)=m_data.photo&0xff;
*(buf+0x03)=m_data.photo/0x100;
//父母
*(buf+0x04)=m_data.Parent&0xff;
*(buf+0x05)=m_data.Parent/0x100;
//相性
*(buf+0x06)=m_data.Friend&0xff;
*(buf+0x07)=m_data.Friend/0x100;
//性別
if(m_data.Sex) *(buf+0x1f)=0;
else *(buf+0x1f)=1;
//年齡
*(buf+0x1a)=(char)(m_data.Birthday-130);
//統率
*(buf+0x1e)=(char)m_data.Basic_Command;
//武力
*(buf+0x1b)=(char)m_data.Basic_Force;
//智力
*(buf+0x1c)=(char)m_data.Basic_Brains;
//政治
*(buf+0x1d)=(char)m_data.Basic_Polity;
int i;
CString text;
text=m_bgigb.GBtoBig(m_data.FirstName);
strcpy(m_data.FirstName,text);
//姓
for(i=0;i<4;i++)
{
if(i<text.GetLength())
*(buf+i+0x35)=m_data.FirstName[i];
else
*(buf+i+0x35)='\0';
}
strcpy(m_data.FirstName,m_bgigb.GetText());
//名
text=m_bgigb.GBtoBig(m_data.SecondName);
strcpy(m_data.SecondName,text);
for(i=0;i<4;i++)
{
if(i<text.GetLength())
*(buf+i+0x3a)=m_data.SecondName[i];
else
*(buf+i+0x3a)='\0';
}
strcpy(m_data.SecondName,m_bgigb.GetText());
//字
text=m_bgigb.GBtoBig(m_data.ThirdName);
strcpy(m_data.ThirdName,text);
for(i=0;i<4;i++)
{
if(i<text.GetLength())
*(buf+i+0x3f)=m_data.ThirdName[i];
else
*(buf+i+0x3f)='\0';
}
strcpy(m_data.ThirdName,m_bgigb.GetText());
//信念
*(buf+0x20)=(char)(m_data.Persuasion-1);
//性格
*(buf+0x21)=(char)(m_data.Kidney-1);
//傳記
text=m_bgigb.GBtoBig(m_data.Biography);
m_data.Biography=text;
for(i=0;i<150;i++)
{
if(i<m_data.Biography.GetLength())
*(buf+i+0x4f)=m_data.Biography[i];
else
*(buf+i+0x4f)='\0';
}
m_data.Biography=m_bgigb.GetText();
*(buf+0x08)=(char)(m_data.Skill1&0xff);*(buf+0x09)=(char)(m_data.Skill1/0x100);
*(buf+0x0a)=(char)(m_data.Skill2&0xff);*(buf+0x0b)=(char)(m_data.Skill2/0x100);
*(buf+0x0c)=(char)(m_data.Skill3&0xff);*(buf+0x0d)=(char)(m_data.Skill3/0x100);
*(buf+0x0e)=(char)(m_data.Skill4&0xff);*(buf+0x0f)=(char)(m_data.Skill4/0x100);
*(buf+0x10)=(char)(m_data.Skill5&0xff);*(buf+0x11)=(char)(m_data.Skill5/0x100);
*(buf+0x12)=(char)(m_data.Skill6&0xff);*(buf+0x13)=(char)(m_data.Skill6/0x100);
*(buf+0x14)=(char)(m_data.Skill7&0xff);*(buf+0x15)=(char)(m_data.Skill7/0x100);
*(buf+0x16)=(char)(m_data.Skill8&0xff);*(buf+0x17)=(char)(m_data.Skill8/0x100);
*(buf+0x18)=(char)(m_data.Skill9&0xff);*(buf+0x19)=(char)(m_data.Skill9/0x100);
//兵法
_int64 extras=0;
extras+=m_data.Extra_1[0]*0x1+m_data.Extra_1[1]*0x2+m_data.Extra_1[2]*0x4;
extras+=m_data.Extra_2[0]*0x8+m_data.Extra_2[1]*0x10+m_data.Extra_2[2]*0x20;
extras+=m_data.Extra_3[0]*0x40+m_data.Extra_3[1]*0x80+m_data.Extra_3[2]*0x100;
extras+=m_data.Extra_4[0]*0x200+m_data.Extra_4[1]*0x400+m_data.Extra_4[2]*0x800;
extras+=m_data.Extra_5[0]*0x1000+m_data.Extra_5[1]*0x2000+m_data.Extra_5[2]*0x4000;
extras+=m_data.Extra_6[0]*0x8000+m_data.Extra_6[1]*0x10000+m_data.Extra_6[2]*0x20000+m_data.Extra_6[3]*0x40000;
extras+=m_data.Extra_7[0]*0x80000+m_data.Extra_7[1]*0x100000+m_data.Extra_7[2]*0x200000+m_data.Extra_7[3]*0x400000;
extras+=m_data.Extra_8[0]*0x800000+m_data.Extra_8[1]*0x1000000+m_data.Extra_8[2]*0x2000000+m_data.Extra_8[3]*0x4000000;
extras+=m_data.Extra_9[0]*0x8000000+m_data.Extra_9[1]*0x10000000+m_data.Extra_9[2]*0x20000000+m_data.Extra_9[3]*0x40000000;
*(buf+0x2f)=(char)(extras&0xff);extras/=0x100;
*(buf+0x30)=(char)(extras&0xff);extras/=0x100;
*(buf+0x31)=(char)(extras&0xff);extras/=0x100;
*(buf+0x32)=(char)(extras&0xff);extras/=0x100;
*(buf+0x33)=(char)(extras&0xff);extras/=0x100;
*(buf+0x34)=(char)(extras&0xff);
return TRUE;
}
BOOL CGen::SaveData()
{
if(SaveBuffer()==FALSE) return FALSE;
CFile file;
if(m_index==-1)//重新確定m_index
{
if(file.Open(m_name,CFile::modeRead))
{
char *tempbuf=new char[file.GetLength()+1];
file.Read(tempbuf,file.GetLength());
file.Close();
int index=0;
while(*(tempbuf+4+index*m_len+0x25)!=(char)0xff)
{
index++;
}
delete[] tempbuf;
m_index=index;
}
else
{
MessageBox("文件保存失敗!");
return FALSE;
}
}
::SetFileAttributes(m_name,FILE_ATTRIBUTE_NORMAL);
if(file.Open(m_name,CFile::modeWrite))
{
long seek=0x04;
seek+=m_len*m_index;
file.Seek(seek,CFile::begin);
file.Write(buf,m_len);
file.Close();
}
else
{
MessageBox("保存失敗!");
}
return TRUE;
}
void CGen::OnOK() //保存
{
// TODO: Add extra validation here
UpdateData();
if(SaveData())
CDialog::OnOK();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -