|
|
源文件中_Interface文件夹下WndField.cpp文件
9 c" q: b5 N+ y+ ~搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 W4 \0 A& U, O
q- r! t/ Z" f& ]! E2 t/ j
struct sItem/ u) L; _) ]) ]( ~5 }7 F+ o
{
) ^8 l* |" i+ S1 N R B' qDWORD dwId;4 [0 F, t$ o' c) g( {
DWORD dwKind2;
, j" t' p! |/ E' NDWORD dwItemId; b; Y- n4 g: K
BYTE nIndex;
2 N9 {) ]- T+ ?sItem(){
, t+ H0 a" V0 R1 g& z9 k dwId = dwKind2 = dwItemId = nIndex = 0;
, z1 ?# c. X7 L}1 j7 o. g5 j2 D8 ?
bool operator < (const sItem p2); h; H' I5 c2 ~1 |$ T
{ n6 x' m% s1 t8 M; T
if (dwKind2 == p2.dwKind2)- N8 L: X' V; D3 @; G
{
) T. k8 Y) Q A7 } return dwItemId < p2.dwItemId;+ _( W3 n6 g. O8 A9 m( C' y
}else{% g2 a* q, m1 `* C4 z9 [1 r
return dwKind2 < p2.dwKind2;; [2 \( F. X. s8 C6 {9 O" ?" H
}
% b1 H, g/ h0 j& [4 K}
- t5 J- D( Z8 F};
) N- |: s v n, q/ `' H! |class CInventorySort
" y) b& q G6 W+ u- K4 z{/ J) m4 q8 D6 `: C9 A/ g
public:
! } E* ?7 T! z; oCInventorySort()
) k! L8 |' n+ l* S* p* K{
# Q y4 D3 l/ {: ]3 b7 |0 T m_dwPos = 0;
) P2 Y, ~; d" S9 x( l}
) g. l9 |5 X2 A0 f3 l7 g7 R$ {~CInventorySort(){}
) Y9 ?* g, I+ I' Zprivate:
3 X: H9 M- ~% lsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息 j2 h3 H0 m5 T, p: F( Y
DWORD m_dwPos;
# B1 n7 g3 i& c V) Cpublic:
3 r; @; x# h5 y' Mvoid Add(BYTE nIndex) v3 H6 y6 x, K( \
{4 `8 [( Z' [0 s& d) s; g
if (m_dwPos >= MAX_INVENTORY)
, W8 S- m# n: [- Q7 H5 O {
2 {. t* V3 x% f/ C4 d return;! R( J7 J3 ?4 N
}' M% s8 g0 D% n7 h1 [
m_Item[m_dwPos].nIndex = nIndex;8 `5 @1 L7 M6 u+ v; X1 }& \2 A9 X
m_Item[m_dwPos].dwId = m_dwPos;* N: k3 F2 Q" A2 U* \
m_dwPos++;
- c9 @9 B: _& e1 x# B4 L6 m% `) C}7 w1 a* E7 v9 ?' @" E
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列' B3 I) ~* q4 C8 G8 N
{0 M' O& e' `8 P' z2 U
for (int i=0;i<MAX_INVENTORY;i++)
9 L0 @. m8 N2 Y6 a7 F {; B6 I0 X7 e. n' B) w
if (m_Item.dwId == dwId)
7 l1 i& N# |0 N: I. ]+ n3 z {
0 a, p- m) r: q5 P return m_Item.nIndex;
! T8 s) k b! M8 t: A }
9 x8 h, }) f: S. ]6 j0 n! U }7 h" T& }1 u1 [% ^
return 255;
" g* @$ E( N; V' H6 J0 x& a}1 h0 p6 \# ]8 ?, `# R" [1 R
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置0 P4 P# I7 @4 K0 p/ z
{
% M5 N. n% X6 J* |+ z5 ^; |' o" h BYTE nTmp = 0;
5 [; b% P2 L" q, z% f/ ?0 ^2 { bool bDest = false,bSrc = false;+ V! G; Y. L9 e1 x2 j
for (int i=0;i<MAX_INVENTORY;i++)' D6 v. f9 H7 r1 \" `: D! J0 i7 ^
{( ?5 E& h8 o; S2 C. @2 X( x4 ~
if (dwSrcId == m_Item.dwId)5 C1 l# T: k( ~
{- L4 i: N7 a8 P% Q
//id相等 则 改变对应的dest和src) _+ T$ ], `% q- \1 T5 `6 r
nTmp = m_Item.nIndex;
* g# L8 W' m+ j3 R3 L" z( ~ m_Item.nIndex = dest;
9 U6 p2 X3 m* _9 r! @$ |; |2 Q }: b$ _! {& [0 Y
}
. r5 h2 I0 l6 x1 p! \6 b6 ]( A //临时数据保存完毕,交换开始: l* |. t, e' v
for (int i=0;i<MAX_INVENTORY;i++)4 n/ G6 B A4 q# e" x
{
' q5 T* I1 y" k$ Q8 s if (dest == m_Item.nIndex)' R$ g' x; o0 e; a& ]
{
/ e- s" F2 a. s //id相等 则 改变对应的dest和src4 ~- a1 U" U4 E0 ?: j
m_Item.nIndex = nTmp;
% U$ }, x5 _' B0 m. x9 Z$ h+ f }8 |) \6 f. [& m5 J( j6 s8 X7 a
}/ w7 ^( J. |9 B; o6 c: _
}
/ L; E1 K. T3 l2 Q9 |};/ h' @: v6 D( A. p( Q9 e; |, u
-------------------------------------------------------------------------* R0 Q- N3 [' v. N7 n3 O0 t6 m7 a5 v$ ^
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
- J8 O3 }; x1 c" O( f搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
' e1 d& w) n9 S+ E紧靠其上添加:
! Y6 E" C9 w5 R$ h+ ~2 Rif( pWndBase == &m_wndMenu )+ j& b6 N: x1 H. {1 q
{% d* ]& i; N1 g% q) l) u0 v
switch( nID )
6 b0 ^7 B$ E7 F9 g& A {
& g9 w N0 Q/ e$ ~! } case 2:* g2 M$ Y8 A# Q8 X! h
{
# a* N q. E! b0 x% F+ F //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
f$ P+ M# H* E* G7 b7 Z# V( Y if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ N( r3 E0 M' l% i: H3 R
{
9 c) V# t, m# a# Z6 F$ @8 n2 Q break;
5 {3 N# k- j' t4 R: H. K }
2 w+ K1 Q/ ~- x2 y$ ] for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++). {2 V5 [( M& z; K! z7 f
{# \9 K( Z0 j$ {1 `& |2 K7 m% f, }
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 h. b5 m- O2 [* {% U m
if( !pItemElem )6 _2 x5 h0 N) ^- |; Y
continue;
% J9 u. U; P0 d. g2 v: X if(pItemElem->GetExtra() > 0)
6 |" A) O* }' L% B2 q* ^" q continue;" Q6 ~9 o5 C- X5 X5 D! W" {
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
/ U0 N3 A" v) m continue;
" _& I( Y1 j9 P" }% J- c! ^ if( g_pPlayer->IsUsing( pItemElem ) )
) }) G- H: ^1 } continue;
d& V1 {/ e1 ^, C- x: X5 @2 o if( pItemElem->IsUndestructable() == TRUE )6 d0 }- i3 b) u' V" l
{1 [$ j; |/ C5 N; _% F
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
) s# |6 w+ S; E; ?( l continue;
3 ^9 @! T. H2 S# |6 }$ ~) o }
* q" W0 n6 U2 w# C K g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
& b# Y7 H, A9 g( i$ o }" E. D4 n% W0 O+ q0 i7 W- s
break; J. J3 o0 ^+ C- T0 i2 @
}5 X# a" r' Y& R2 w6 U: Y- E
case 1:) G3 u+ G1 V5 o4 Y4 B7 `
{
0 R5 @* q% T) q! p% a //整理背包
, X* T# b, r' p0 } //////////////////////////////////////////////////////////////////////////& }3 y, s3 b- R$ ~
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );' n. C! P) X K; h% `# q0 W
//////////////////////////////////////////////////////////////////////////
$ Q5 X6 f0 I( k, {0 w; M //////////////////////////////////////////////////////////////////////////
! F* w+ @: D: ?, ~1 b% c CInventorySort* pInvSort = new CInventorySort;
+ l1 p+ ` I1 o vector <sItem> vItem;
8 H3 o% m, z8 h" |$ q5 y vItem.resize(MAX_INVENTORY);//初始化大小
6 b4 P! C# {, Z# _6 d( U0 v7 Z6 p //////////////////////////////////////////////////////////////////////////
( |! r8 C# X$ z) `* N //填充数据
+ j0 M3 t" B: ?5 E8 ^) a for (int i=0;i<MAX_INVENTORY;i++)
! ~; ?. M0 Q% l6 L {
2 _* g8 @1 ] w4 z* h' v. d/ ~ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; w5 N) s2 [! h if (!pItemElem): R$ m9 i S; {" G; L
{
$ t9 L9 f; y4 a. | vItem.dwKind2 = 0xffffffff;; g7 J9 f3 b# r( o6 W2 I' @6 T
vItem.dwItemId = 0xffffffff;
' e9 u+ q, l. ~3 M1 E3 b% t4 G vItem.nIndex = i;
2 [# x1 w: F$ M; e. m }else {
: o N$ Z6 f6 o! \- `! L( F ItemProp* pProp = pItemElem->GetProp();; W+ X; S+ z& R: H( I7 j5 J
vItem.dwKind2 = pProp->dwItemKind2;" y# F# d+ o/ \$ V
vItem.dwItemId = pItemElem->m_dwItemId;# {( r( l* h% M$ |1 w
vItem.nIndex = i;# {4 Z; v3 w A
}' x% |) K X: J4 m1 F: E/ {* \8 q
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. k9 a6 Y3 r& c7 {& _/ {7 D
}
* z8 I. B2 z- v/ { //////////////////////////////////////////////////////////////////////////1 L+ T& K! m2 G/ ?, d5 V) p
sort(vItem.begin(),vItem.end());//排序
5 D' A4 D2 Z5 M5 f$ s //////////////////////////////////////////////////////////////////////////$ E( S( b7 v! D- `' N1 w
//交换
5 g6 C! [2 \, [- g3 s for (size_t i=0;i<vItem.size();i++)
, c1 i/ d8 J+ H {
4 [; A0 k, ?% I$ U: w% L2 _ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 Y2 F- Z' C k' A8 l) @ pInvSort->Add(vItem.nIndex);" o0 a: t* g4 @" C6 P8 o3 q3 k
}
U% \- c: m C$ x5 J BYTE nDestPos = 0;, z- A9 N9 Q* i* K
for (int i=0;i<MAX_INVENTORY;i++)3 o* T( s1 }. F4 d! Q
{! p; l4 T( U( \' E
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);$ i( X3 x: m) y6 m* D" o+ o8 M
if (pItemElem)) X9 E3 ]6 z1 i8 \# x0 W- V5 ~; K
{
& w9 V# Q; t+ @3 @' h" G& G" u if (IsUsingItem(pItemElem))
% s# W: t: b5 r3 z {/ }6 N6 a5 m* q- M
//这个位置无法放$ @0 U0 N& @/ s& e
nDestPos++;( D o8 l- J. k3 |$ e6 n7 V" @) {9 u
}2 ^) p+ n, y0 {( i1 C) ~
}
, E' w; o: x/ s" L+ ~ BYTE nSrc = pInvSort->GetItemSrc(i);
$ H z9 H% F F J* O* {* I- L pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);+ {; R& t$ W, ~1 P6 H
if (pItemElem)
1 a. a* k' @4 l* J6 k3 u5 \ {
' d! |( o. {* Z, }% c if (IsUsingItem(pItemElem)): G$ g/ e0 d, w- G& X7 U: }
{; G( ~2 ]/ x6 L7 R
//这个道具无法移动,跳过
1 Y$ Q3 j. ^7 _2 o continue;4 T* i+ _, S. K
}# O( B0 j: l! e! B) }
}else{
* K3 W9 C8 o/ K. E& e3 q% b$ s //空位置 不用动7 H. J7 ~' `2 U4 ^) G, m' Q
continue;
* Z* E1 J. y2 q; S }
8 b( E1 r! Q* a; Q+ C( }2 {' u4 h5 w //////////////////////////////////////////////////////////////////////////- c' @7 F9 | }, {
//开始移动
& s/ W5 Y$ Z: K* R" Q if (nSrc == nDestPos)" U" ~, j' P% \
{1 i5 q. h/ s: y
//原地不动6 G; P, Y) v2 `- I8 b2 [/ ?
nDestPos++;
% N$ F6 R! |$ v continue;. S0 x: N! \4 b: a; J6 @7 l
}9 L% n$ ^$ C" w+ F
pInvSort->MoveItem(i,nDestPos);
1 ? _( Z Q5 L g_DPlay.SendMoveItem(0,nSrc,nDestPos);
: J6 a g9 u1 C/ z Sleep(5);
8 P9 G4 C& @$ F //Error("移动 - %d->%d",nSrc,nDestPos);3 [. B2 I* {6 D/ p
nDestPos++;
- N2 [8 a7 ?8 h* a; E4 c" D+ E }- U: ^5 V1 y! c1 f' y# e
//取第一个元素的信息
0 ]' l0 S' c0 q) ]3 Y /*
, Q& `" E R; T# E$ C; l- I if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
5 o# P% w" y1 }: W* b7 q {; w9 p: E$ z" R1 ?
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
: `$ H( L# Q- x: ^- t+ I$ @$ W" X g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
1 B/ _; P' x0 i6 e7 { }/ a; \1 t# ]2 x8 R$ S, u
*/
/ g# X& D+ V+ p- F8 [ //////////////////////////////////////////////////////////////////////////! Y% i' A& {* `/ h9 w. h7 j, O. K
break;. @7 C6 O" {# a2 \/ c
}: p1 o0 m, N- ~* N9 ^4 w* v
}
8 q F( [# c0 y) g: b/ w4 R}
2 D4 n4 M+ K+ l) {1 u9 o4 m& G# B( @: ~m_wndMenu.SetVisible(FALSE);
: J7 u8 m4 s; \* v* a% ?2 H* U& Z/ Z- }
--------------------------------------------------------------------------------------------------------: T k L9 n) C9 c/ S& C5 V; p! V
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
. {9 p# B) x7 o, Z% E5 w( P8 i{
r5 n, m+ w( }1 r: f2 SBaseMouseCursor();' u3 M; l* z1 H" @
}
- I5 Q) b% T. B" T' {% J在其下添加:1 |. Z- }. ^3 ?/ t0 y% h5 \
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
1 r9 l3 M* h# j O' }* F9 m2 {{+ J* ?' z- U$ u1 |3 e
m_wndMenu.DeleteAllMenu();+ z* k7 S8 H5 x+ ]. F
m_wndMenu.CreateMenu(this);
. S! @4 o3 Q9 Z2 I* Jm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");# A* G- p0 P7 Z4 w; S$ q$ d* u" \
/ w. b' X- \0 u `& Y
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
( h% F* x# o( O7 |; ?' J+ @ l: p* h{
7 D/ C( i; x; h I- d5 I/ M3 ? //P以上级别才可以删除所有道具" v0 [9 a* W$ B- X/ P
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");' d8 P2 }8 c+ g- ^4 i& h: d0 j
}/ L: r2 A1 S* J- x# T4 }
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
2 ?9 ^& R6 h, }) e8 C. h: h6 }m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
% Y d' I) O4 @! Dm_wndMenu.SetFocus();! C5 m$ C& B! q% g! ~
}
' H. Q# ~2 a9 ^& a5 |------------------------------------------------------------------------------------------------------------0 C# W; D U8 D" s: D1 D' i
*************************6 d7 B7 r" l j X/ w M
WndField.h文件
2 \7 X1 L! t5 r( I& n- W& {: }9 G' ~*************************
1 p% ` q0 a7 G: p; @9 }搜索:BOOL m_bReport;) t( ?+ A7 C/ V
其后添加:5 m5 X6 @; D. t( w) V' \
CWndMenu m_wndMenu;
5 @: S3 r9 U6 q0 |搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
1 G! m O; ]0 ~其后添加:
, o2 n5 X$ T$ A6 J0 L; J$ X: hvirtual void OnRButtonUp(UINT nFlags, CPoint point);% _0 l! ]/ t" H; j# J6 U7 t
# `6 W- I B$ f
! u& E O' P9 b0 ]" T5 D9 K' y |
|