|
|
源文件中_Interface文件夹下WndField.cpp文件
7 {4 V: j0 _: o1 R4 t: S搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& I) s9 q" s) Z3 c9 ?% I
: z- W7 ]# m& z. b& V: o: B2 mstruct sItem
+ G+ D: k8 v. i" u9 G{. m' ~/ Y. b" S! g: t' ^% F1 i
DWORD dwId;
/ N/ ` \3 {/ B1 I3 SDWORD dwKind2;# Q1 q- {+ G9 }
DWORD dwItemId;% D% m# p% `* w2 e) m' c: ~
BYTE nIndex;
( `- W6 n5 F v3 }* @3 Z5 gsItem(){) S0 M- j$ f5 @0 _9 Y; O
dwId = dwKind2 = dwItemId = nIndex = 0;
/ L- ^6 _# o; \4 ?8 A+ P}; h) b" b; X' h! k
bool operator < (const sItem p2)
/ R7 G% }6 t2 \) g* S/ X9 R{
) J& I a4 n& r/ ^2 k if (dwKind2 == p2.dwKind2)
, o. b% W u0 Y! d3 W {' m3 }/ y; e+ c+ G3 y# `- B
return dwItemId < p2.dwItemId;1 K2 \/ U! y \
}else{
M4 ^3 q3 a# U5 V3 [8 n* S return dwKind2 < p2.dwKind2;" O! f; I$ K2 ?3 j1 y, q5 n
}
; Q! H0 B( L0 U) g. |* h; b! ]}
7 c) a/ G4 m/ j5 I; c5 z" q};
- L$ @3 I; {- E1 l* [class CInventorySort- C/ Z! D0 |4 N+ p7 u+ y
{. M5 j; e+ w- E$ n, Y- R& A! z
public:/ n. A6 i5 k4 x, A2 X8 g
CInventorySort()
' @# z7 y2 T, }/ M. m$ c r9 C{! H7 d. D6 J" x( u) Q, {5 ^8 a: r
m_dwPos = 0;& c, J5 G" l* `0 ^1 ~8 w
}
! |1 L2 ^$ r+ P~CInventorySort(){}
* ?5 t3 k4 [7 g1 Z1 Lprivate:
4 g8 i# ?( I8 J6 esItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
" Q/ Q- G8 n: r) p1 {2 u% q. p3 fDWORD m_dwPos;/ K# v# N$ v6 X* m
public:
+ ?5 \1 A# E+ Y. Mvoid Add(BYTE nIndex)2 L1 d* H! ]- ~
{# _3 M- y8 d: h9 L6 W& }6 J' p
if (m_dwPos >= MAX_INVENTORY)
: `1 L5 @/ N$ H) W. n+ r {
) _% s" q4 Z$ M! V7 w return;
* M, ?2 k5 \' f& b/ h% d }
5 o; y$ L. ~2 G3 a3 l8 u2 w# h m_Item[m_dwPos].nIndex = nIndex;
/ n u9 G1 b8 D m_Item[m_dwPos].dwId = m_dwPos;
7 b8 c9 k6 L3 J5 t( T m_dwPos++;6 n8 Y3 l$ s% \) ?! J% i$ p
}
/ u0 g. c. O: B" |BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
0 x3 Y# f6 x3 E2 t2 W0 c! q{# O3 V' _2 c$ j( F, O
for (int i=0;i<MAX_INVENTORY;i++)5 c& c S5 ?( g1 [; X' ?9 b
{
* i8 T$ o5 P" D$ `- y# l+ r if (m_Item.dwId == dwId)
1 Q$ [2 O2 L& y' e {6 }% R8 a( V. A! Y8 |
return m_Item.nIndex;
5 Y" j O& U4 q5 Q0 Q' r }
" w! i1 l5 ?. w" c; @% P" U }
" C& a( v2 P7 \1 i! m+ P, \ return 255;( K2 {/ j K H, H
} P. ~0 `3 h: c" a t
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置0 M, X: u+ b- ]8 s0 y
{
o( w9 O/ F# X# A7 |/ |4 d' e BYTE nTmp = 0;% e* _* \" ~. v6 n1 K0 \
bool bDest = false,bSrc = false;7 \; q/ ~7 N: }* c$ u( D( L$ Z
for (int i=0;i<MAX_INVENTORY;i++)
# `* L% Z, H( b0 f0 X, j {
3 j5 g6 I4 S' H3 a: o* V if (dwSrcId == m_Item.dwId)
8 `5 R/ T* u" @) q% {; a8 x# g {5 F; o! R/ N$ H) q( Y# |
//id相等 则 改变对应的dest和src0 h! t( n1 \9 K6 z6 h5 V' a) N, W( f! B
nTmp = m_Item.nIndex;/ N) ]' K! Q/ @+ O4 b$ K5 V
m_Item.nIndex = dest;
2 p0 X% K9 z7 e8 B } X) ]. X: h4 T+ |% X
}6 s& Q ^" ?& |3 a# _
//临时数据保存完毕,交换开始 U Z9 F$ _+ c/ m
for (int i=0;i<MAX_INVENTORY;i++). r* Y$ Y: u* v: h' u) o ~
{
% M @) c; W' i" {/ O if (dest == m_Item.nIndex)6 r+ V: }' A* U% j; |9 Q
{: U$ L5 J1 i9 Z, s( ?
//id相等 则 改变对应的dest和src
. l1 e" x0 {: k/ ?$ L/ N% { m_Item.nIndex = nTmp;
* H, U' V1 X5 `7 H& \ }
& T$ u- `; `0 n: Q4 O/ l }* [% ]7 u: ?" j/ G# c/ Z
}) _) g0 f, P3 {) M" D; \: Q
};. r: _7 R$ ^* d- ^4 l
-------------------------------------------------------------------------
4 v$ q# Q% a/ i( H2 S" h依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% X3 h! c3 r- @9 {4 Z; @搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
2 s; w5 k4 Q& J- j紧靠其上添加:
, O2 e, O, h9 @7 }3 Vif( pWndBase == &m_wndMenu )
1 M# Q9 c+ i9 H' {% Z3 k+ I{
; |- V1 X5 ]) i$ x( A switch( nID )
5 E! M: T* i W. \' D {
# h: {* K4 f! K( `1 q1 {: s case 2:
! v4 }: L- G; w! y {
. I+ X4 X1 e2 e! [3 n //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
/ D0 T0 Y1 l1 b/ }( m$ A if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). l2 F7 O, b f @- W7 Y% W5 E7 G
{+ N! J ?9 R: c E
break;: F0 h6 G) u( o9 `6 K
}
5 P9 `7 W: d5 B# E9 w/ {; c1 n for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
9 Y7 R5 Q. i6 M( d& M {! e8 t/ g/ p% W0 j% Z4 s
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; N2 A+ }' p% ?. v5 c if( !pItemElem )
$ y% x" l2 d$ d- b; \# F continue;
) B9 S8 x8 o2 R& D! u3 a& P if(pItemElem->GetExtra() > 0)
) g0 P$ U R" E4 n, [2 J continue;
5 i# r/ a7 F7 z+ l {7 c if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
& C# @8 w4 p6 B! c8 b+ q continue;# w& U$ \$ Y; c& Y# `3 R
if( g_pPlayer->IsUsing( pItemElem ) )+ `1 q. Z+ ~) [ e
continue;0 g% c! ]# M+ k* w
if( pItemElem->IsUndestructable() == TRUE )
1 Y6 P0 P, W! R6 R9 `& X {
! o m: F# W3 A9 z# p" k- _ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );; z0 b9 e3 I: m% w6 S; s& t
continue;; f4 l! p& F; h1 _/ \3 R
}
. W+ n' _$ A) K- I g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);$ I: n; M( s5 p' r* t
}' k- H3 j) e9 K( O9 c$ t! q
break;. `2 }" ~5 c ^& e, y" Y/ Z2 u) O
}
& G+ k. ?/ M$ j case 1:5 d$ p0 J* P, u
{
7 U6 {% }: F$ y1 ]$ d% X' H7 W //整理背包" [- S) l4 r3 S7 k6 v- k
//////////////////////////////////////////////////////////////////////////
, m8 j+ d4 b5 B7 b/ `, p8 m. s //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );" H$ k5 l- N1 m; j
//////////////////////////////////////////////////////////////////////////5 t" r5 s. z# z- l+ p* c8 _
//////////////////////////////////////////////////////////////////////////
. U. D9 J2 m# a, X CInventorySort* pInvSort = new CInventorySort;9 f a+ _0 e. h) k
vector <sItem> vItem;6 r" i. A- E& N+ B' W4 s! ]! E
vItem.resize(MAX_INVENTORY);//初始化大小( b* Y: J* S8 T- P" Z
//////////////////////////////////////////////////////////////////////////
3 _. Z( H* e: `7 ]9 K n //填充数据
, z4 L% v( K7 l3 `* T$ K6 p for (int i=0;i<MAX_INVENTORY;i++)2 H9 A: X3 n) a, n' S
{
' x9 n8 I+ j$ _+ m# e8 V. ?9 | CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ o# |/ w' m l" e( b4 }
if (!pItemElem)# }/ z$ h) K0 \8 I, y% v
{
8 [ `7 J4 \( a2 }+ ^/ {0 b" V vItem.dwKind2 = 0xffffffff;
8 ]+ r2 Y" v" i vItem.dwItemId = 0xffffffff;
/ W+ |& z# Z; @ vItem.nIndex = i;
( J" o( n; C3 M" I0 ]" ~: b }else {
+ A' v k% b% l4 Z/ i ItemProp* pProp = pItemElem->GetProp();
; \# ]* [; j5 x; K4 Q vItem.dwKind2 = pProp->dwItemKind2;
" Q/ A b+ ]) m/ x vItem.dwItemId = pItemElem->m_dwItemId;* J$ N( u# R$ [7 C. I
vItem.nIndex = i;
2 P* E1 q! M! ^, U- W! h. d2 a X, ? U }1 x6 X0 P9 e) o6 c. @7 g# N# }; [
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
O# k* L/ t/ n }
, E( q5 d0 c5 D9 T //////////////////////////////////////////////////////////////////////////
+ l* f/ y8 ?% D& B u sort(vItem.begin(),vItem.end());//排序2 Y2 n7 y3 ~! }* }0 V% r
//////////////////////////////////////////////////////////////////////////% C7 x; v$ Y5 O0 A* t( b
//交换- d {4 h2 k+ ^/ O5 z
for (size_t i=0;i<vItem.size();i++)) Q5 t# P/ Z% W7 i; l' ^
{
7 @, i0 v: U" o! ?9 C //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& z2 K* B# y$ W
pInvSort->Add(vItem.nIndex);
; f* E5 M) Z: j5 C }
+ Q+ w9 t/ Y: y7 i! M/ O. M BYTE nDestPos = 0;( H4 ?2 f0 Z! Z7 C
for (int i=0;i<MAX_INVENTORY;i++)0 ^. ]" S8 U6 V" j3 ^8 |) ]
{8 y& ^- k( K; [4 S6 g1 X0 H
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);0 P1 {4 X& x$ a9 T
if (pItemElem) B( Y' U P) @
{
3 _0 u' g9 @* _4 i7 ~, A if (IsUsingItem(pItemElem))1 R; r; X" x; T. U, w; R+ q
{0 v, B7 r; E; q% ] I6 A
//这个位置无法放
8 Y, e9 D* v. F6 _# r nDestPos++;
; z1 n8 w! J3 j- q0 S# y7 N4 t+ r }/ L" J" k! z2 A3 D8 G
}
/ L5 {9 \7 f- |, ]& V$ | BYTE nSrc = pInvSort->GetItemSrc(i);5 G% F6 N9 t+ l( T5 P- u! ^
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);5 {: E+ A. ^5 }" ]: J8 f
if (pItemElem)! z% v# L1 h1 w5 U, Y
{2 v( e8 } x: Y# v. m. G+ f' j
if (IsUsingItem(pItemElem))
- h6 G7 a/ V! D5 L+ o {" m, q( ]/ s+ L$ v8 a" q4 B3 o% w
//这个道具无法移动,跳过% L6 L1 S _3 g) p1 s3 T0 O) k
continue;
4 d- S+ K( C) f' j, F8 f }
& R( B) ]2 i* @1 h% q- S }else{) N# c' e+ P4 D( A& o8 {' b- T
//空位置 不用动
3 D! R$ v( S' G* _. O continue;
6 E' Q% Y' k- X# \5 l5 t" @ }4 J3 L9 V( F% I+ ]
//////////////////////////////////////////////////////////////////////////- L- n( c! ~8 A
//开始移动
! _* m% f+ L" z0 P1 V- S if (nSrc == nDestPos)% [8 ^8 L* g) K3 m8 Y, ?' ]- W
{8 b" z# {% S& {& O. L3 F( b: d
//原地不动
- T% ~. r( n: ~) q t* i nDestPos++;
, z1 J4 Q* J. p& g: S continue;
5 O( o) i$ v8 v$ j1 e }. A% a- N, j1 Z9 s4 M5 x
pInvSort->MoveItem(i,nDestPos);2 _) f# n' f O& a/ S
g_DPlay.SendMoveItem(0,nSrc,nDestPos);% j- z! }! m; V) l% | {/ C6 u
Sleep(5);
. V' R- R; |: Y //Error("移动 - %d->%d",nSrc,nDestPos);
" O' ]5 k! P, j) Y: j* S nDestPos++;
. e+ m" W! p; O9 z }
* s* g) E, T" S //取第一个元素的信息1 i5 J) I5 t! Y
/*0 r% X5 w, O3 z( i1 N
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
8 b1 k" g! j- ? {" M, n1 h7 d6 v {
4 R0 W5 g! Z. o7 [$ T Error("Move - From:%d,To:%d",vItem[0].nIndex,x);+ v/ {9 O! g$ u& d! j6 q; A A
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);& P7 N6 g+ Z7 u; q
}
# G, W5 r+ g n9 L5 p! S( ^ */
: U( p9 A8 u6 `* z3 } //////////////////////////////////////////////////////////////////////////
5 u: L' m' z2 _ t break;) K. b1 X$ o( J
}* n8 H( }) G' U; i( F) ~4 \! I
} , a- x: E, r" e* D+ `* V1 n) m! Y
}
9 Q. {. M0 K! em_wndMenu.SetVisible(FALSE);; U; N) r4 B" g
# V8 ^$ x' ]# x7 ~ W--------------------------------------------------------------------------------------------------------0 S; V* G2 s# c" f
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
9 }9 A( t4 `1 h. a; {- H5 T1 f* r{3 \/ c8 u+ w' A; C+ b6 [! O/ O; H* q
BaseMouseCursor();
$ m8 ?4 X/ j1 [& a0 N1 V}2 l: @' C4 N+ w: N4 k1 Q2 q% T
在其下添加:
7 e0 n, [+ v7 r: ?void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)7 B; \! v: ~$ ~3 [+ T$ N5 [/ m, R
{
5 V# P, |) ]4 d# j0 im_wndMenu.DeleteAllMenu();
3 U: w: a, B/ ] a& H# um_wndMenu.CreateMenu(this);, J. X" j6 Q- _) D
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");7 r) ~3 W. T. A- a% T
# o4 F# l9 G5 I$ C
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# R. d! N* {7 Y: D' C) g
{
3 o8 ?2 e0 E& O1 W# T- C9 N1 H //P以上级别才可以删除所有道具# I8 K# L; p0 r# b' I# K: Y* Q( \( O: q
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
: |, R2 ]7 P- H; {5 a8 W7 \2 c: q}
* Z# k1 ]& P% x7 _# _, rm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );" d( Z; s# C/ b! @7 w
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
% n; X7 c2 W: u, U$ ~- rm_wndMenu.SetFocus();
9 Y, x; R+ l) {% k}
8 y0 z; x' V1 Y% q------------------------------------------------------------------------------------------------------------
- n3 c1 u& s% I- v3 R*************************: [) Q% J1 t( K; c
WndField.h文件
" m3 n, l2 W9 ?! g) r*************************
$ |, z: j/ M# y. m7 }) M搜索:BOOL m_bReport;* B2 @) G% T3 \& V9 u3 Q
其后添加:3 v; s/ Q% E; L" z" \
CWndMenu m_wndMenu;
$ Y; o. q7 s6 E( U搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);) R- g5 g3 n, V& |' }
其后添加:
2 \) R9 x+ F6 n: p' L1 I$ p fvirtual void OnRButtonUp(UINT nFlags, CPoint point);
9 L, D, v" i+ q+ h, _- @ e1 o% X( f8 x l! ]5 A" J
' a4 Y2 f$ I( D& E |
|