📄 chrtakenskill.cpp
字号:
// ChrTakenSkill.cpp : implementation file
//
#include "stdafx.h"
#include "rmtool.h"
#include "ChrTakenSkill.h"
#include "CharacterView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CChrTakenSkill dialog
int CALLBACK pfnCompare2(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
CChrTakenSkill::CChrTakenSkill(CWnd* pParent /*=NULL*/)
: CDialog(CChrTakenSkill::IDD, pParent)
{
//{{AFX_DATA_INIT(CChrTakenSkill)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CChrTakenSkill::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CChrTakenSkill)
DDX_Control(pDX, IDC_LIST_TOTAL_SKILL, c_TotalSkill);
DDX_Control(pDX, IDC_LIST_LEARN_SKILL, c_LearnSkill);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CChrTakenSkill, CDialog)
//{{AFX_MSG_MAP(CChrTakenSkill)
ON_BN_CLICKED(IDC_BUTTON_LEARN, OnButtonLearn)
ON_BN_CLICKED(IDC_BUTTON_DELETE, OnButtonDelete)
ON_BN_CLICKED(IDC_BUTTON_TOTAL_ALL, OnButtonTotalAll)
ON_BN_CLICKED(IDC_BUTTON_TAKEN_ALL, OnButtonTakenAll)
ON_NOTIFY(LVN_COLUMNCLICK, IDC_LIST_LEARN_SKILL, OnColumnclickListLearnSkill)
ON_NOTIFY(LVN_COLUMNCLICK, IDC_LIST_TOTAL_SKILL, OnColumnclickListTotalSkill)
ON_BN_CLICKED(IDC_SAVE, OnSave)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CChrTakenSkill message handlers
void CChrTakenSkill::OnButtonLearn()
{
//般摹绰 酒捞袍捞 乐唱 绝唱 眉农茄促.
if(ExistSameSkill())
{
MessageBox("Taken skill is already exist!");
return;
}
int index,nItem;
char temp[0xff];
CString str;
CCharacterView* pView; pView = (CCharacterView*)GetParent();
POSITION pos = c_TotalSkill.GetFirstSelectedItemPosition();
if (pos == NULL)
MessageBox("No items were selected!");
else
{
while (pos)
{
//急琶等 亲格甸阑 备茄促.
nItem = c_TotalSkill.GetNextSelectedItem(pos);
index = atoi(c_TotalSkill.GetItemText(nItem,0));
//割锅掳俊 牢辑飘 矫懦瘤甫 舅扁 困秦 醚 肮荐甫 备秦辑
int i = c_LearnSkill.GetItemCount();
//急琶茄 亲格阑 insert矫虐绊
LVITEM item;
item.mask = LVIF_TEXT | LVIF_PARAM;
item.pszText = _itoa(m_pApp->m_SkillList[ index ].num, temp, 10);
item.iItem = i;
item.iSubItem = 0;
item.lParam = m_pApp->m_SkillList[ index ].num;
c_LearnSkill.InsertItem(&item);
str = m_pApp->m_SkillList[ index ].name;
str.TrimRight();
item.mask = LVIF_TEXT;
item.iSubItem = 1;
item.pszText = str.GetBuffer(str.GetLength());
c_LearnSkill.SetItem(&item);
//眠啊等 酒捞袍篮 颇鄂臂揪肺 窍捞扼捞飘 矫虐绊
//c_LearnSkill.SetHotItem(i);
//盖 关栏肺 胶农费官 捞悼..
POINT point;
CHeaderCtrl* pHeader = (CHeaderCtrl*)c_LearnSkill.GetDlgItem(0);
RECT rect;
pHeader->GetClientRect( &rect );
int header = rect.bottom;
c_LearnSkill.GetItemPosition(i, &point);
c_LearnSkill.Scroll(CSize(0, point.y - header));
//急琶等 惑怕肺 父电促.
c_LearnSkill.SetFocus(); //器目胶 林绊
c_LearnSkill.SetItemState(i, LVIS_SELECTED,LVIS_SELECTED);
}
}
}
void CChrTakenSkill::OnButtonDelete()
{
if( !RIGHT(MASK_20) ) return;
if( MessageBox( "Do you want to Delete Skill", "Skill", MB_YESNO ) != IDYES) return;
int nItem=0;
int count=0;
POSITION pos = c_LearnSkill.GetFirstSelectedItemPosition();
if (pos == NULL)
MessageBox("No items were selected!");
else
{
while (pos)
{
nItem = c_LearnSkill.GetNextSelectedItem(pos);
count++;
}
// 贸澜 急琶等 巴俊辑何磐 急琶等 巴阑 瘤款促.
nItem = nItem - count + 1;
while(count)
{
c_LearnSkill.DeleteItem(nItem);
count--;
}
// 急琶等 府胶飘 吝狼 窍唱甫 瘤快搁
// 关俊 乐绰 府胶飘甸捞 犁沥纺登扁 锭巩俊..
// 盖贸澜巴父 急琶等 俺荐父怒 瘤快搁 等促.
}
}
void CChrTakenSkill::OnButtonTotalAll()
{
// TODO: Add your control notification handler code here
c_TotalSkill.SetFocus(); //器目胶 林绊
for(int i=0; i<c_TotalSkill.GetItemCount() ; i++)
{
c_TotalSkill.SetItemState(i, LVIS_SELECTED | LVIS_FOCUSED ,LVIS_SELECTED | LVIS_FOCUSED );
}
}
void CChrTakenSkill::OnButtonTakenAll()
{
// TODO: Add your control notification handler code here
c_LearnSkill.SetFocus(); //器目胶 林绊
for(int i=0; i<c_LearnSkill.GetItemCount() ; i++)
{
c_LearnSkill.SetItemState(i, LVIS_SELECTED | LVIS_FOCUSED ,LVIS_SELECTED | LVIS_FOCUSED );
}
}
BOOL CChrTakenSkill::OnInitDialog()
{
CDialog::OnInitDialog();
m_pApp = (CRMToolApp*)AfxGetApp();
//傈眉 急琶 登绰 可记
c_LearnSkill.SetExtendedStyle(LVS_EX_FULLROWSELECT);
c_TotalSkill.SetExtendedStyle(LVS_EX_FULLROWSELECT);
//ListView 牧飘费 檬扁拳.. 漠烦汲沥
LV_COLUMN col;
col.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM | LVCF_FMT;
col.fmt = LVCFMT_LEFT;
col.cx = 60;
col.pszText = "Number";
col.cchTextMax = 100;
col.iSubItem = 0;
c_LearnSkill.InsertColumn(0, &col);
c_TotalSkill.InsertColumn(0, &col);
col.cx = 250;
col.iSubItem = 1;
col.pszText = "Skill Name";
c_LearnSkill.InsertColumn(1, &col);
c_TotalSkill.InsertColumn(1, &col);
//Total SKill List 盲快扁
char temp[0xff];
CString str;
int nItem = 0;
for(int i=1; i<113; i++)
{
if(i < 87 || i > 100)
{
if(m_pApp->m_SkillList[ i ].num != 0)
{
LVITEM item;
item.mask = LVIF_TEXT | LVIF_PARAM;
item.pszText = _itoa(m_pApp->m_SkillList[ i ].num, temp, 10);
item.iItem = nItem;
item.iSubItem = 0;
item.lParam = m_pApp->m_SkillList[ i ].num;
c_TotalSkill.InsertItem(&item);
str = m_pApp->m_SkillList[ i ].name;
str.TrimRight();
item.mask = LVIF_TEXT;
item.iSubItem = 1;
item.pszText = str.GetBuffer(str.GetLength());
c_TotalSkill.SetItem(&item);
nItem++;
}
}
}
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CChrTakenSkill::RefreshData()
{
CCharacterView* pView = (CCharacterView*)GetParent();
char temp[0xff];
CString str;
LVITEM item;
c_LearnSkill.DeleteAllItems();
int index = 0;
for(int i=1; i<113 ; i++)
{
if(pView->m_ChrInfoEtc.skill[i] == 1)
{
if(i >= 87 && i < 101)
continue;
item.mask = LVIF_TEXT | LVIF_PARAM;
item.pszText = _itoa(m_pApp->m_SkillList[ i ].num, temp, 10);
item.iItem = index;
item.iSubItem = 0;
item.lParam = m_pApp->m_SkillList[ i ].num;
c_LearnSkill.InsertItem(&item);
str = m_pApp->m_SkillList[ i ].name;
str.TrimRight();
item.mask = LVIF_TEXT;
item.iSubItem = 1;
item.pszText = str.GetBuffer(str.GetLength());
c_LearnSkill.SetItem(&item);
index++;
}
}
}
BOOL CChrTakenSkill::ExistSameSkill()
{
int nItem,index;
POSITION pos = c_TotalSkill.GetFirstSelectedItemPosition();
if (pos == NULL)
return FALSE;
else
{
while (pos)
{
nItem = c_TotalSkill.GetNextSelectedItem(pos);
index = atoi(c_TotalSkill.GetItemText(nItem,0));
LVFINDINFO lInfo;
lInfo.flags = LVFI_PARAM;
lInfo.lParam = index;
if(c_LearnSkill.FindItem(&lInfo) != -1)
return TRUE;
}
}
return FALSE;
}
int LearnSortItem[2] = {0,0};
int TotalSortItem[2] = {0,0};
void CChrTakenSkill::OnColumnclickListLearnSkill(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
if(LearnSortItem[ pNMListView->iSubItem ] == ASC)
LearnSortItem[ pNMListView->iSubItem ] = DESC;
else
LearnSortItem[ pNMListView->iSubItem ] = ASC;
ListValue value;
value.iSubItem = pNMListView->iSubItem;
value.pListCtrl = &c_LearnSkill;
value.iListCtrl = 1; //0锅捞 配呕, 1锅捞 Learn栏肺 窍磊
ListView_SortItems(c_LearnSkill.m_hWnd, pfnCompare2, &value);
*pResult = 0;
}
void CChrTakenSkill::OnColumnclickListTotalSkill(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
if(TotalSortItem[ pNMListView->iSubItem ] == ASC)
TotalSortItem[ pNMListView->iSubItem ] = DESC;
else
TotalSortItem[ pNMListView->iSubItem ] = ASC;
ListValue value;
value.iSubItem = pNMListView->iSubItem;
value.pListCtrl = &c_TotalSkill;
value.iListCtrl = 0; //0锅捞 配呕, 1锅捞 Learn栏肺 窍磊
ListView_SortItems(c_TotalSkill.m_hWnd, pfnCompare2, &value);
*pResult = 0;
}
int CALLBACK pfnCompare2(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
static LV_FINDINFO fi;
static int nItem1,nItem2;
static char szBuf1[101],szBuf2[101];
int iList;
ListValue* pValue = (ListValue*)lParamSort;
HWND hList = pValue->pListCtrl->m_hWnd;
int iSub = pValue->iSubItem;
switch(iSub)
{
case 2:
case 1: //胶懦疙, 汲疙 沥纺
{
fi.flags = LVFI_PARAM;
fi.lParam = lParam1;
nItem1 = ListView_FindItem( hList, -1,&fi);
fi.lParam = lParam2;
nItem2 = ListView_FindItem( hList,-1,&fi);
ListView_GetItemText( hList, nItem1, iSub, szBuf1,sizeof(szBuf1));
ListView_GetItemText( hList, nItem2, iSub, szBuf2,sizeof(szBuf2));
if( (int)(iList = pValue->iListCtrl) )
{
if(LearnSortItem[ iSub ] == ASC)
{
return( strcmp( szBuf1,szBuf2) );
}
else
{
return( strcmp( szBuf1,szBuf2) * -1);
}
}
else
{
if(TotalSortItem[ iSub ] == ASC)
{
return( strcmp( szBuf1,szBuf2) );
}
else
{
return( strcmp( szBuf1,szBuf2) * -1);
}
}
}
break;
case 0: //胶懦 num 沥纺
{
if( (int)(iList = pValue->iListCtrl) )
{
if(LearnSortItem[iSub] == ASC )
return( lParam1 < lParam2 ? -1 : lParam1 > lParam2 ? 1 : 0);
else
return( lParam1 > lParam2 ? -1 : lParam1 < lParam2 ? 1 : 0);
}
else
{
if(TotalSortItem[iSub] == ASC )
return( lParam1 < lParam2 ? -1 : lParam1 > lParam2 ? 1 : 0);
else
return( lParam1 > lParam2 ? -1 : lParam1 < lParam2 ? 1 : 0);
}
}
break;
}
return 0;
}
void CChrTakenSkill::OnSave()
{
if( !RIGHT(MASK_20) ) return;
if( MessageBox( "Do you want to SAVE Skill", "SAVE", MB_YESNO ) != IDYES) return;
// TODO: Add your control notification handler code here
CCharacterView* pView = (CCharacterView*)GetParent();
if( strcmp(g_CurDbName[ pView->m_nCurDbIndex ], g_NationAccount.szDragon_DB_DefaultName[pView->m_nCurDbIndex]) )
//if( strcmp(g_CurDbName[ pView->m_nCurDbIndex ], DEFAULT_GAME_DB) )
{
MessageBox("Don't Change In Backup DB Data!");
return;
}
int index;
memset(pView->m_ChrInfoEtc.skill+1,0,112); //skill狼 醚 肮荐啊 112俺啊 酒聪扼.. 87~100锅鳖瘤绰 救敬促. 勘扁 备炼促....ぱ_-;;
for(int i=1; i<=c_LearnSkill.GetItemCount() ; i++)
{
index = atoi(c_LearnSkill.GetItemText(i-1,0));
pView->m_ChrInfoEtc.skill[index] = 1;
}
//历厘窍扁
char szQuery[ 1024 ];
WCHAR wszQuery[ 1024 ];
sprintf(szQuery, "Update chr_info set skill=? where [name]='%s'",pView->m_szCurCharName);
int nColumn = 1;
DWORD dwParamOffset = 0;
DBBINDING* pBinding = g_pDb->CreateParamInfo((BYTE)nColumn); if(!pBinding) { MessageBox("Failed CreateParamInfo"); return; }
pBinding[0].obValue = dwParamOffset;
pBinding[0].cbMaxLen = sizeof(pView->m_ChrInfoEtc.skill);
pBinding[0].wType = DBTYPE_BYTES;
dwParamOffset += sizeof(pView->m_ChrInfoEtc.skill);
g_pDb->KSCToUnicode(szQuery,wszQuery);
int ret = g_pDb->ExecuteSQLByParam(wszQuery, pBinding, pView->m_ChrInfoEtc.skill, (BYTE)nColumn, (BYTE)CON);
if(!ret)
{
MessageBox("Have no Character!");
return;
}
else if(ret < 0)
{
MessageBox("fail to update chr_info_binary!");
return;
}
g_pDb->ReleaseParamInfo(pBinding, (BYTE)CON);
#ifdef RM_LOG_MODE
CString str; str.Format("CChrTakenSkill :: Saved taken skill info(%s)",pView->m_szCurCharName);
m_pApp->LogChar(pView->m_nCurServerSet, str);
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -