|
|
源文件中_Interface文件夹下WndField.cpp文件
4 E! v- L% O3 m0 X" k$ g2 {4 M0 A搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& a5 r5 e* @6 ?( l
i: d) p5 j' B5 i3 K2 estruct sItem% O5 ]4 H' F2 ?% `6 U: s
{0 |, o% G; y2 Y
DWORD dwId;/ `9 x, k" ?3 B
DWORD dwKind2;' g0 c$ T7 r! L. E" o2 E4 ~
DWORD dwItemId;3 v, Z3 v5 p, i4 I! p3 L
BYTE nIndex;
, B0 Z' o5 y/ H' |0 G; l1 Q4 \' xsItem(){% W7 h* ~* _+ G& p% ] U
dwId = dwKind2 = dwItemId = nIndex = 0;
6 O! q/ Q9 w$ [' U}
7 j" O8 C T8 p. V( M$ H0 Abool operator < (const sItem p2)) T; }$ O3 U( O5 N/ `
{( v6 E% Y! M" h5 O. f% w
if (dwKind2 == p2.dwKind2)/ g6 Y3 z. ^0 s( k) l! t& S
{7 c3 o' S3 D: u7 s: {* H' V
return dwItemId < p2.dwItemId;
$ Q0 ]; @# t5 L }else{5 q6 a1 i( W F: w+ L9 W0 M$ O
return dwKind2 < p2.dwKind2;9 v. {/ k9 Y$ q. `
}
4 U# i) m$ l X. Z, z2 C}
6 v1 D5 L; k: p' ]};
1 `" s# f( S4 v3 e3 D$ I$ ~class CInventorySort+ L" t) q9 R, o5 R
{, }$ B1 a% @* i4 w; m
public:/ S+ N$ L% t$ }0 w& O9 b
CInventorySort()
% S. Q H, z* U9 g# P{
9 `+ J+ p5 Z' Q1 j: k m_dwPos = 0;
: K: H4 c* g( ^! j$ U}+ d5 _4 B1 x4 W. k
~CInventorySort(){}+ v" v y- N& W+ R: o. H: P
private:
# c& a5 V4 H1 s9 y X ?; `8 PsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息0 ^" q/ d+ }0 p1 H! V7 a
DWORD m_dwPos;
# K5 x; d: c0 J6 w% qpublic:
& U0 d" z' x4 ~- }0 Y3 F. nvoid Add(BYTE nIndex)- f4 J4 |. i6 B' m6 f
{
{4 m+ m2 q9 v4 g3 u c- D" ^ if (m_dwPos >= MAX_INVENTORY)
# d- A) W3 ^, v( y {
" w a0 \8 q( P' b return;! y5 j6 Z6 ^% E! e9 D, u$ [
}! q9 Z$ F% o; s* j+ C" C/ z
m_Item[m_dwPos].nIndex = nIndex;
+ X1 ^9 M) o: B8 v( m6 Z4 T m_Item[m_dwPos].dwId = m_dwPos;
8 ?% b, M0 G; k$ w1 u T m_dwPos++;
" n! h. N2 I9 }# m& [8 X}
5 M- b# D1 p! n. A g: e, Z6 n1 hBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
. y8 i$ X% ^& y) Q P* N{0 ~5 V! A" Z7 \2 o
for (int i=0;i<MAX_INVENTORY;i++)
" N _- l' Q- H( u2 P/ f {8 z4 n; ~& e$ e6 r) J8 X
if (m_Item.dwId == dwId)
6 p; T! R. M8 d% R# m4 c0 r* y( K {
2 {5 i- J( F6 S9 I4 Y, i# z2 W return m_Item.nIndex;
' T$ E# F6 l4 }. C( i }
7 n6 p: {( [) Z! L* p% ~ }4 L- q4 r) G% z
return 255;# \- Q/ |' d( |7 m9 |
}
. C( h2 N& h2 T5 xvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
# ^2 v5 P+ e, v8 F- s: A' [: z{' s4 M) b) ^# `; b4 \) M! k
BYTE nTmp = 0;+ Q6 P: p# ?1 c, K! h$ T
bool bDest = false,bSrc = false;0 I' Q I8 u1 T7 b) y$ {
for (int i=0;i<MAX_INVENTORY;i++)' Z9 r: D& C9 ?/ X
{
* @. t' b: j. |. j* z J6 o2 ^ if (dwSrcId == m_Item.dwId)
5 t6 Q# X8 Q4 [% L {# `5 j# X2 b ^+ G3 V k
//id相等 则 改变对应的dest和src: K' {9 n; S5 z) }
nTmp = m_Item.nIndex;
! U, I; _, X/ [/ O* p m_Item.nIndex = dest;6 E! t& u0 Z+ d5 X5 [- J1 i
}: K5 W/ _! W7 A4 C; W4 ]: d0 p6 n" Y# \8 @# e
}
. D, E$ F! X/ ?4 N" L- Y //临时数据保存完毕,交换开始
, G0 a1 {3 K9 u for (int i=0;i<MAX_INVENTORY;i++)+ Y) Z% N2 X: ^& ?. |0 h0 V
{ N$ {, M; D) H' T3 N7 \
if (dest == m_Item.nIndex)
* K) _8 T" s) z7 g7 W {
. O- |( O. g2 F' F& b //id相等 则 改变对应的dest和src
8 V% V, g/ I X* n- h, Z: E9 A m_Item.nIndex = nTmp;8 ]; i& w4 s7 D" h
}
# c5 {; g& g- I$ d } C8 l) u7 _ R z; v
}0 f5 U- a/ {6 _
};
: `# g; ]( P: W* ]) d5 F2 A! Y3 @-------------------------------------------------------------------------
' U- C' W8 M. q) e( I4 g9 s# P依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )) F+ Y+ d: F- N5 A0 L6 Q$ k" V
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
# x( {6 S& [# p! X, i4 O紧靠其上添加:- j% d) y. F" k. f. @3 l1 x
if( pWndBase == &m_wndMenu )6 {8 ~6 v) y% S. @+ u/ l7 g: q* X$ ^
{; Y8 a8 _; |1 b) z* q
switch( nID )
, y S# d& M4 y* ?7 Z" Y {
8 ]2 e; J x* j4 h case 2:9 o8 x0 b2 C! H# q3 c
{
6 @% v/ A0 J: @ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);( h4 P+ J# V' \! c- ^
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))4 b5 B1 b# R. L. s$ x( n2 c; x+ Z
{
2 l, r. _! ^- A8 ` break;) M( P5 }; E! `% c3 B4 Q
}
2 t% Y& t* Q# v$ O* L" g$ [ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
$ `3 z, l- i" z& y5 \ {: [) [# X! l8 w! E3 u: I9 Y# i
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 r+ ^. B% N! p# ^& H if( !pItemElem )5 i0 n0 R4 m" Z$ [; L0 y. u
continue;4 x5 S& \8 b6 a
if(pItemElem->GetExtra() > 0)
: R- T6 W, `0 ~9 c6 g9 p continue;* W; u. e$ q3 P
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) , H8 N1 X8 B+ k! ~+ q# Q! f) h
continue;
3 F" B+ k0 f& F* e# n; N if( g_pPlayer->IsUsing( pItemElem ) )
$ y3 m- ?6 B* W) o9 ~- i3 k. ]0 k continue;, _8 {$ m& }" X7 a* v% ~
if( pItemElem->IsUndestructable() == TRUE )
% W# H r# x V7 h- b( e+ F% C- w {6 F9 W: E) R8 E
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );5 ~9 _+ @+ T: s9 J$ M2 T! F5 v+ K
continue;1 q# J* w3 t+ n( j
}2 t& X% v+ H$ `# h
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
/ h: e3 r% N1 w: J }- N& h: L ~9 o# ~3 F
break;6 Z8 [- _2 u. C. w
}
{) V3 D- {' v H+ S+ B case 1:, Y" Y; U9 I% k: M7 R6 k; B4 m
{7 I( q* d6 M1 L0 g/ o: W0 H. o
//整理背包! k4 U. A8 k9 i. ~! J6 {- Y- K
//////////////////////////////////////////////////////////////////////////3 @1 o" v3 p2 A! o1 B
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
3 ]2 r1 X( H% _3 w //////////////////////////////////////////////////////////////////////////
4 {# \3 q! c z8 n# Z- O& g //////////////////////////////////////////////////////////////////////////
. r- k$ d* B$ s4 c3 n CInventorySort* pInvSort = new CInventorySort;3 r8 ~+ o) s5 W! l4 M- ]
vector <sItem> vItem;% @7 `$ B# l6 u) C1 U; j2 j
vItem.resize(MAX_INVENTORY);//初始化大小
4 G$ P- N: u) c( ^/ } //////////////////////////////////////////////////////////////////////////
# x" o+ V" G5 I4 r! e# s1 c //填充数据
! h' o ~, X- H: }! J! K2 o for (int i=0;i<MAX_INVENTORY;i++)1 H5 ~4 r6 L' S
{
4 ^6 x! x+ M4 m: D9 q! s6 I' m CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 \/ o8 Q9 X0 j5 Z D z- L* { if (!pItemElem)
) D( S. d: z' [$ r- W, x: E5 l' f# Z {* b2 Z5 X$ K; n0 v+ ^: {2 j
vItem.dwKind2 = 0xffffffff;& E' p3 f2 X8 A% w& C2 n
vItem.dwItemId = 0xffffffff;
* F, H. C* u8 i3 f0 o- [# d vItem.nIndex = i;# v0 h2 F7 n$ n. B. w
}else {$ p$ H- D' B; k4 @- D4 F2 m
ItemProp* pProp = pItemElem->GetProp();9 w1 }* P0 E0 ~4 i- I0 B8 a
vItem.dwKind2 = pProp->dwItemKind2;3 \% s0 Q! P# v$ S5 h* e- _: n
vItem.dwItemId = pItemElem->m_dwItemId;
2 q' o, b) n: V$ N. E. S! i8 } vItem.nIndex = i;5 Z/ {1 g& ?, x8 n1 F: k
}( Q# h* T- K7 ]& t2 f5 l
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);3 v6 J9 n5 a$ c9 q
}5 u9 n# P6 j. k# V2 I
//////////////////////////////////////////////////////////////////////////- [% ~9 N" ~7 L7 a; h8 B
sort(vItem.begin(),vItem.end());//排序0 b( x) g; Q( _" \5 @4 I
//////////////////////////////////////////////////////////////////////////
8 Q8 `/ m( ~; M) A7 G/ U! q. \ //交换4 S& g; o/ ]; ?- G8 C
for (size_t i=0;i<vItem.size();i++)/ O" \1 c$ {7 H: g% N2 I
{4 Q& B- r, Y8 Q. z% X8 Z
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 u% [1 {' n: h/ \/ i
pInvSort->Add(vItem.nIndex);7 R+ }+ n5 q6 p, _7 D) M- f
}
' Q. w @0 q) i BYTE nDestPos = 0;" R* W2 e: B) N% n; R: {0 a
for (int i=0;i<MAX_INVENTORY;i++)& E$ K8 P& N0 d- ]1 A1 l9 C g. q) r
{
! X8 `3 q4 e$ y, k CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
1 g U2 K5 N/ I if (pItemElem)
6 m2 O/ ^0 i: f. f! R {
4 e3 L& m7 _$ V2 { if (IsUsingItem(pItemElem))
$ M: f- O' B3 ^, C* i2 { {9 e4 x2 X6 f# Q" ?
//这个位置无法放
" ]4 K& R' N5 Z4 D9 S nDestPos++;1 V+ Z: l7 d% A) {) k- w$ {
}- T) |( @3 w. {; N" F6 s( C1 W* `/ I
}
& U, T- T+ F. T# P( a6 Q BYTE nSrc = pInvSort->GetItemSrc(i);# \2 E& t6 L; P( M2 A4 d2 G9 J( c# R
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc); s4 C% f8 R' W5 w
if (pItemElem)0 v* Z2 E7 Y& y3 C# |0 x; x; O2 m
{
+ E; V0 M( r) C3 M6 |: ]: ? if (IsUsingItem(pItemElem))
k0 Y4 E# a- ^( w$ }7 m {
. v& P' i4 l% S //这个道具无法移动,跳过' A# i+ V& B: i5 D- ~9 c( Q
continue;
) s( c0 S, b5 o! ` }$ z! E. l8 {8 X [' M# L0 A! K- b9 N
}else{0 G5 M) A5 {1 S6 y X* \* ]: N5 H
//空位置 不用动
$ `: E( l! |) R: Z continue;
6 t, c. ?* z# |+ t6 A }
3 U( |/ N8 C0 T4 m0 N! o5 W //////////////////////////////////////////////////////////////////////////
$ S2 i1 [9 I, X' m: r //开始移动
5 |, n' H- [5 b6 X, j7 p9 U" ? if (nSrc == nDestPos)( i5 N, _5 c2 O
{; `" N) V3 @% U! S7 M& ?3 T h
//原地不动/ ?( O: K" S, z/ T/ P6 l" E
nDestPos++;
4 d3 t9 X8 n# K0 M continue;7 t) F& F/ b$ m, D
}
# V& Y& E4 y1 I% a' p! c pInvSort->MoveItem(i,nDestPos);( g4 ?8 `$ ~7 i: y& k2 s
g_DPlay.SendMoveItem(0,nSrc,nDestPos);8 D8 C' a, H' C$ e. d6 m' ]' _, t
Sleep(5);) f& A0 M& Y* |$ X9 }) i9 n2 V
//Error("移动 - %d->%d",nSrc,nDestPos);1 B; C+ I! [4 U
nDestPos++;9 W6 o4 f& E* i# N3 }" E
}
; j" A( w* r: R! ^ //取第一个元素的信息
. e1 S" [# E& M f8 s- @ /*
. r& u! Y& P h% p1 x4 I# V- O8 f if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
3 M" N( c, m' C) z5 i( U {/ z( T' H6 y+ J+ v$ C8 b3 T
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
, R) k. n# ]- }* ~7 }7 e. O g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
! B+ a( a# M+ @9 e }# |5 A, K M: T, @: U1 B
*/
% N# H" C F- A E- k6 P4 Z- X //////////////////////////////////////////////////////////////////////////, ?7 O" }, E k. d& M1 f
break;" A. H* f4 {0 w
}5 e3 [9 O- ^+ f: `% K- Y
} * h3 x6 F' k5 x* t2 e: \1 @
}! ]/ T# ]+ X! c1 ~" R) J
m_wndMenu.SetVisible(FALSE);' V% G& P7 M6 a) u& z
( e8 O- U; e( j# I4 D" A. T--------------------------------------------------------------------------------------------------------7 w7 W' @! Z7 K/ j5 m" ]/ ~7 ^4 W
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
9 C5 y! p5 y$ H% g{! B& @1 i, o3 c: K5 n$ A
BaseMouseCursor();- Q! f+ u4 s7 `% d0 d
}7 ~1 h7 j/ H. q# o
在其下添加:
' p" A3 r$ L3 u7 l- t9 |void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
( _4 ]% e x! W$ M2 E{
; P8 B( {' N1 v8 n8 t& X, P' b6 pm_wndMenu.DeleteAllMenu();: x0 t0 n' _9 r4 D# O- ^$ Z. f
m_wndMenu.CreateMenu(this);. E0 m8 y+ l4 O |
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");5 J; n$ D! T3 [) {' y1 l
) s' N+ N* @/ a
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: b" \& l+ p6 j1 c{
/ g7 t0 n$ o9 H5 R3 [ //P以上级别才可以删除所有道具
! N6 N6 K; ?1 ] F m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
$ f8 C+ Q: q) @}
+ }* Z7 w* {* c; em_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );. s4 \6 S) b5 Z1 J* [( G
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );6 F' M9 D5 N0 G1 `
m_wndMenu.SetFocus();
1 h" h `5 {0 Q: d* J6 V3 D}
" j5 \$ D6 S6 y------------------------------------------------------------------------------------------------------------2 t" ?4 p p r9 b, g4 A0 _* [
*************************
, g1 r7 j, r' T! C0 s) ^WndField.h文件
4 H& g7 V! J0 x8 @1 h2 D1 Y& j*************************7 a& U- y' [+ K2 V
搜索:BOOL m_bReport;
# E$ t" a: p; o- q5 j) v其后添加:, V- j# u) r# J" d1 h% z
CWndMenu m_wndMenu;6 Y) }# V* ~) c% v/ K% a9 ~- s$ O5 Q
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
# `+ t4 V g6 X' F) G其后添加:
$ h" r% v: X. kvirtual void OnRButtonUp(UINT nFlags, CPoint point);
' w/ a8 x& t# T$ P
5 q$ ~7 x/ x. ]9 c# p" W; E
7 S. |5 l* T! k9 L) D" j |
|