|
|
源文件中_Interface文件夹下WndField.cpp文件
: K" @' W P* g x4 U9 \搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; V) y' N% v" V- Z7 c+ a: z" C1 w* m1 p: k0 }; d0 B
struct sItem
8 w. w. p2 A3 m! ?1 b7 P) v' N8 S9 n8 m{
" v8 M. D ~" GDWORD dwId;+ o4 g% H4 N% P3 x$ |
DWORD dwKind2;- e. J/ f; @$ B$ B* Z
DWORD dwItemId;. U3 S9 Z4 T. \$ U; E0 @5 |
BYTE nIndex;
: f. a! z; [6 c# T F$ IsItem(){8 l- g; m- y8 H4 t
dwId = dwKind2 = dwItemId = nIndex = 0;
2 H) V \2 w3 ?1 R# E' F! e0 e+ ]}
- U6 f/ ?. o+ M. l8 P& ybool operator < (const sItem p2)
" u! m8 |! x5 ^- S5 |# s: M{. t( P$ I. z; i5 E+ }1 L" x
if (dwKind2 == p2.dwKind2)
1 E8 F* Z7 L5 d6 ^7 R* P7 v {+ J! D3 _) c, ]5 x
return dwItemId < p2.dwItemId;- f! s( J+ E: l/ n0 Q2 N
}else{
# p% S [& E5 |9 l8 ^8 ~8 } return dwKind2 < p2.dwKind2;
2 h! j% k( f. C Q. P }
: S% D6 l0 \% N4 A}
8 y% Z* u+ d% w* Y};
/ E7 R/ O4 J, }% t9 A4 ~class CInventorySort
, d0 o5 c% F$ {2 g8 s8 t. e8 A3 n4 k{
; T$ ^) M, A* C2 I1 \: ?public:0 |3 Z5 q4 S& E. d2 O5 i
CInventorySort()) A0 Z' s7 O4 v, K
{% Q- E% k; {2 @. t+ |, f, j- O
m_dwPos = 0;5 y; \: a' P, D8 |4 D7 [- u8 P
}
9 ] a, T, |0 {# n2 |( w( k: o~CInventorySort(){}
! E+ ]1 |& o* ?private:
; w+ K$ F/ H* r9 C4 b! ]6 xsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息0 H- g3 e: ~# ?! B4 Y8 q: R
DWORD m_dwPos;
# F) e }7 U Epublic:/ J* V! Y! u( C C# V% y. L: J
void Add(BYTE nIndex)
, k: d) ]8 P9 T, q; Q{3 z8 f% b z' m9 r% }# E
if (m_dwPos >= MAX_INVENTORY)
1 M) @, e; x9 C3 ?0 _- h {
* p6 ^% f4 z4 S/ W. ` return;
, p0 z( f& Z. x; v }
! U: S9 T& J6 ~0 s( x m_Item[m_dwPos].nIndex = nIndex;1 L; [0 l) s3 ?) m
m_Item[m_dwPos].dwId = m_dwPos;1 W6 U7 J1 { Q: k, B- v
m_dwPos++;
% ^( K6 D/ E: e% L}& T6 s7 |( V" ?" W
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列5 M5 H" q. E" `$ J* w& l: G
{/ V. Q. u& [' I* I6 r* m" t
for (int i=0;i<MAX_INVENTORY;i++)- y+ s* \# }( ]+ A9 ?' d4 z
{
- e+ g% C8 \2 _/ v6 h+ G, P, R2 R# q if (m_Item.dwId == dwId)2 I+ g% o7 w8 l5 B0 `- z# B+ v/ W
{& J% F) Y( D2 j0 G4 U1 {4 B e
return m_Item.nIndex;
/ V3 [9 ~# h. V/ [7 z6 p }6 i& P; A1 l# e O& L
}1 q/ |" O* \' _
return 255;# F0 @9 h" f4 Z0 q: o: K
}5 e% ?- d. B3 Y: {1 r0 J
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置- c! x s8 f' L e9 p6 M
{5 r& ]# h0 H+ F1 ~* [( b
BYTE nTmp = 0;
* s$ r5 P( I8 l/ P0 L2 s9 { bool bDest = false,bSrc = false;3 S1 n9 H8 U% I5 y8 k( S
for (int i=0;i<MAX_INVENTORY;i++)
, I# i2 F* t2 O* s: I {
" l- D) D4 [: |/ @! c if (dwSrcId == m_Item.dwId)
1 A: _9 v+ Z. E {6 m& X7 D& s6 l$ |! n
//id相等 则 改变对应的dest和src
, E" B7 P6 C* p1 U- L- q nTmp = m_Item.nIndex;
. ^4 ]" F+ K0 S% D% i' ?% x, d m_Item.nIndex = dest;: s ]+ a X' v- V( G4 N1 }4 D
}
* M8 f/ r- n" J' L" @2 A5 R }
( W5 \3 V* o: {6 @6 r //临时数据保存完毕,交换开始
% P2 Q8 ~$ y" ~9 z4 }% u# Z" @2 O for (int i=0;i<MAX_INVENTORY;i++)
7 l# i+ s/ Q* q, V, N& | Z {
, t9 ]# l' ^( V9 P7 A; }4 W if (dest == m_Item.nIndex)
" Z+ I# }' H; N: w- C4 b {. H5 r7 L, M- q0 H
//id相等 则 改变对应的dest和src
0 l# ]9 p# o ^6 j( u9 v m_Item.nIndex = nTmp;$ k& _& u: N4 ^: O
}
7 B2 G7 V# c2 v& `' D2 r }
! p' z% m; }6 s1 A8 X, g}
5 V- |4 D4 ?7 B G, u6 L- B};
/ U9 E' H7 f8 ^4 E0 ?7 ]-------------------------------------------------------------------------
, l& D# r9 L5 C- M0 V$ E5 D依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' t5 [! D6 r7 d1 n {
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
2 [6 n) J; d* T2 t紧靠其上添加:- O3 N% Z: w; R4 N/ ^3 L
if( pWndBase == &m_wndMenu )
- o+ n, i5 ^1 g5 N, M. G{
. l5 b% ]8 U" J switch( nID )
: E; B; }8 L B2 o {% J' ]/ r' L, `* C- G6 R1 x2 S; F
case 2:$ L0 j2 r& ?; v* p
{6 X. k$ c8 _) }, g
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);! {5 ^* \* |' l6 j) |4 s
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 Y. ?3 P6 ^. z- j4 k8 c/ W4 { {
$ y3 g8 Z5 S8 ^$ O! u. E break;
8 y$ n+ }" F( U; f% e }
2 P8 g' S3 C/ }/ E for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++): k' q7 v/ d+ V+ h& W$ X4 Q
{
( N+ Z+ A1 z$ g. I; ]) D9 U CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. ^" m1 `7 y; r5 b% L4 J7 t! l
if( !pItemElem ) B+ H) c+ O$ Z' U& y* j
continue;
3 m# s! D: M/ b+ W, L- i if(pItemElem->GetExtra() > 0)
3 b2 w, _( s) E' P, T continue;5 x+ ]) u* c( L
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
; F* |( F: U9 s, N continue;& `7 q2 B) a: L7 J% d/ o5 _0 a
if( g_pPlayer->IsUsing( pItemElem ) )0 h. `* e* ~+ U; C1 i
continue;5 Z6 d$ x4 \) i+ Z: Y7 l) Z. J
if( pItemElem->IsUndestructable() == TRUE )
2 Z7 N9 ?7 K0 a+ @9 q {$ N. f+ l8 j5 E9 v3 q5 X2 V; \7 C! @/ g
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );' i4 s8 L0 r. X8 C3 C+ j
continue;2 c, \/ F( U! A% b
}
8 b7 G# T8 }5 G" Z( F( G5 k$ Q* b& a g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
8 f7 D. m( L$ b, s }
4 }4 C$ c" u% j: \$ K: \ break;
' T8 _7 I) m% P }. R- E2 V$ \! p9 I* D! a
case 1:3 ?! d2 ?* } r$ F! h
{. J$ x. O, m2 H- a; n( X
//整理背包
8 t2 J6 Q+ W8 `5 n3 ? //////////////////////////////////////////////////////////////////////////
( L2 U8 ^) |2 ~" } //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
% M, i3 ?7 |. b //////////////////////////////////////////////////////////////////////////
2 O; t [4 g" ~1 C' Y! V, J //////////////////////////////////////////////////////////////////////////; P; k# |4 }2 v# h
CInventorySort* pInvSort = new CInventorySort;9 s, [6 e! G. r n- o% W
vector <sItem> vItem;7 `) h. w& @4 }% {9 A7 T% j
vItem.resize(MAX_INVENTORY);//初始化大小
Y/ P$ V! W8 o/ ] //////////////////////////////////////////////////////////////////////////! n0 G8 X% a& e. ^4 d
//填充数据& V/ G$ e m6 W. }
for (int i=0;i<MAX_INVENTORY;i++) r8 a! r# E0 n0 Z; I$ G
{
4 N1 V x) E4 \* u3 P) B+ j CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i); ?" K4 p7 { o* U
if (!pItemElem)# P* z8 Z2 n j; Z, N2 n# H# _
{
$ k9 v5 }! @' m, X vItem.dwKind2 = 0xffffffff;
9 ?3 l! q1 W/ g. N vItem.dwItemId = 0xffffffff;2 ?9 |7 ^) E6 z, l7 l
vItem.nIndex = i;- q6 z5 i7 |3 M2 k+ d" y) g
}else {
1 t- ^ Y" [( ?% ^8 |# ~6 J' a ItemProp* pProp = pItemElem->GetProp();
5 S2 d; R" w1 Y7 f/ ? vItem.dwKind2 = pProp->dwItemKind2;# e( s! k. ? h+ e
vItem.dwItemId = pItemElem->m_dwItemId;/ o9 Z. [* n3 |" s% k$ P0 r
vItem.nIndex = i;" }: r' _2 V/ f3 m8 X# g: c. i
}
" E$ h9 m4 c1 O# F; R# } //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
$ f. J6 k! {' _; g5 \7 [% ? }
" N6 D' H/ \8 n //////////////////////////////////////////////////////////////////////////- C# {' n5 V& D5 e$ | M/ z# r7 g
sort(vItem.begin(),vItem.end());//排序
W- c1 K) m7 Y" [& O //////////////////////////////////////////////////////////////////////////3 |- C/ @- J U' {1 Q. P
//交换6 V* ~# ^$ p4 C- x* V" F
for (size_t i=0;i<vItem.size();i++)
2 n. y9 h$ D/ ~7 m* e4 B {) V/ N" j8 h. f$ {& M5 w: Z3 k4 ?
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);1 ?3 I: j& G1 b0 o
pInvSort->Add(vItem.nIndex);
, H% O s1 M4 V! J# r* G8 t$ B! R0 h1 U+ L }' i) G& }, t/ x' L
BYTE nDestPos = 0;( n0 w* r+ ?' ~0 z$ L7 s# m
for (int i=0;i<MAX_INVENTORY;i++)
" |2 |+ q+ r3 E) Z0 \! `, ]( b {8 k6 \8 A- L0 V1 m3 B% P, |
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
$ t' B( f/ V" S, ^& ?2 L if (pItemElem). } } B" e/ P. o
{
/ O' M' C2 i& k' ?2 n3 z7 Z$ y if (IsUsingItem(pItemElem)), K" ^" `; O9 t; C
{6 C6 s4 K2 ?4 Z; K* R; C6 T
//这个位置无法放
- r% n# ]2 y2 [' S# N: m2 x2 Q9 g# V0 x nDestPos++;5 Z$ l- o9 s: V5 |$ e( ?7 X9 E; e' x
}! E& U& d( t6 F* \; l) r
}
4 c' V: e* K* v. I2 z3 S: D! X& v BYTE nSrc = pInvSort->GetItemSrc(i);
g' J/ r& d% G" f6 T- Q pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
5 W9 t6 [5 s: ^/ d5 h1 Z if (pItemElem)+ E( {! M4 S* I3 j9 r5 W
{" j" p, a/ P, K% T4 G% }
if (IsUsingItem(pItemElem))
' R& v# w$ E4 \% n {
7 h" C) U, R6 D! F //这个道具无法移动,跳过
% h; b0 v- r7 z continue;9 Z, N- S0 d2 k; w4 b
}
4 O+ p6 |" ^0 ~! f }else{
5 N) z" p; a3 ?7 g! T! V7 q //空位置 不用动
& o; o: _" ?, u& n5 l! P continue;
: {- O4 P* C5 [. H9 e }0 \9 q* y7 n) Z4 T; q+ o1 S$ b
/////////////////////////////////////////////////////////////////////////// p) C( }2 h' l) ^
//开始移动
. |+ T8 R7 v# ^" T7 K" Z2 a. }& M) t: A if (nSrc == nDestPos)
- C, O4 M5 t. p, D% \ {9 h2 X) g0 `3 e6 e: P: _
//原地不动
: r- [& _' s: n# ` nDestPos++;4 N' Z! o8 H" f
continue;
! j% h1 O+ m* v. R+ p) q0 u9 e1 l }
5 B3 C% ~7 v: o8 ? pInvSort->MoveItem(i,nDestPos);$ d9 T) P3 ~ Q$ b5 p0 `
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
4 Z9 ^" l6 v+ |- o0 J Sleep(5);
+ y8 k# [2 P) S$ g3 |, Y( K `/ a //Error("移动 - %d->%d",nSrc,nDestPos);
* m) V7 D$ y) }1 J) O5 |* c* J nDestPos++;
; f3 U& F5 m/ X' E5 Z4 W }7 ?) S7 v2 T; x. g
//取第一个元素的信息
2 a, @$ A7 u9 x3 E' U, q /*
# F+ o* q8 e8 S1 j; q! O- }3 i if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)' u# N D+ a% a/ K- L
{1 y: Z/ F: J- g6 h6 ]7 Z
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
# R. B, |! F2 U( V g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);" r: K( p$ v$ y
}5 |1 M R% ~% I. u1 S' d3 d" n
*/9 |1 H& Q0 m+ Y0 h$ L9 G; T- i/ V4 U/ a
//////////////////////////////////////////////////////////////////////////' D k. a3 E' w5 l L1 w- y
break;
8 m( E$ F3 z$ c" N0 x: X+ q }" t& g) g- ~( x0 p1 I. B; p7 z
}
7 x8 o1 n) g) n+ v( F9 L}& \. c' @ M7 t' }4 _" n$ D
m_wndMenu.SetVisible(FALSE);5 V4 K1 e4 C2 c, t n- K6 T
6 V' r0 D4 {) _$ y7 u0 U; V' w3 j" Y9 w
--------------------------------------------------------------------------------------------------------
! i* ]% \$ n& F. [5 d3 ?( l8 W搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)2 q. N+ W" `: T# }' K4 M1 P
{* G- p% ^5 |9 n# g
BaseMouseCursor();
- X% r8 q7 S) y: z) t- w& ~}8 b3 v7 U5 _+ c- D3 M
在其下添加:7 b/ s I( g* s# r p+ @1 H: J4 A
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point): U" b8 n7 T% w" l/ K
{4 C) y/ F; F o' w7 G$ I" S8 ~+ k
m_wndMenu.DeleteAllMenu(); Z4 L1 u: r8 b: C, @7 t
m_wndMenu.CreateMenu(this);
, `' Z9 p% Q! N* @& c8 W4 \1 wm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
: J) h' \: R, T/ ?: s) g2 S$ p4 e7 P# x, s9 ?8 j7 G
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 D( H: u4 G1 J. s{" L) v% n' d( ]7 a
//P以上级别才可以删除所有道具
7 z& K. u1 r4 E8 i/ [# g m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
$ U7 S5 r+ e" e! R/ k p0 z& M}
0 R0 C. B5 r4 ~# }' km_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );8 w# ^; O# j* S6 ]& H
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );! k& V$ f9 v/ s' i' Z# L
m_wndMenu.SetFocus();, c% l+ p: K6 ^, s
}
5 b+ n, g: r- G0 N- E. @% L+ P. }------------------------------------------------------------------------------------------------------------
9 Y8 e3 s- {( y% ]$ n*************************, ]5 X8 D, h) k2 D' ?7 V- A+ @
WndField.h文件
' F/ d5 o' D" ~; E% A; ^: I*************************: h0 C3 d: ?5 i, J$ E
搜索:BOOL m_bReport;5 n) K: _( e# l1 l" X; o% e( j
其后添加:% a; j- L; s5 P/ x
CWndMenu m_wndMenu;
2 ^' P, D1 t8 v, b. y搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
6 ~+ P' N: g# K/ z. M) k3 I M) J其后添加:. i- |* [6 W7 k# e2 u. o. A
virtual void OnRButtonUp(UINT nFlags, CPoint point);
) v% ], ]. u6 L
0 _0 d, }1 G2 \8 U) n3 W% G& c* F$ Q
|
|