|
源文件中_Interface文件夹下WndField.cpp文件
" G' @, i: ~. ^5 `8 s搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
( v' O0 ^0 z9 Z5 E( R! F4 u, _, o2 Z2 D' Q% n" ^
struct sItem
- h8 W: A9 t: n" ~( q{
! b6 |. w4 r% j2 m) mDWORD dwId;9 e0 o' N" V( {/ L: ~* \
DWORD dwKind2;
3 F% z3 k! `+ q; Y( E: QDWORD dwItemId;. |2 t2 c) K- ^" S$ R9 W/ Q
BYTE nIndex;. U2 U: G$ A% L9 j8 f9 }- `
sItem(){
. {8 g$ }# L7 _6 W$ x2 g+ |. x dwId = dwKind2 = dwItemId = nIndex = 0;2 J0 {9 {8 x. U6 n3 [# F* { a
}: _; S4 r: ]0 d% I5 i
bool operator < (const sItem p2)
- O5 m ]( V& {" c& K$ b{
* M* F3 L1 ^, [* y; f2 d" f if (dwKind2 == p2.dwKind2)
/ h* S! M6 n R; a7 ]6 V& m {
0 j/ T; W2 n. ~% g' ?! t* V3 ^ return dwItemId < p2.dwItemId;6 A( }5 h! e5 G, e
}else{/ q5 q% f L& S1 ?/ s& J
return dwKind2 < p2.dwKind2;1 q' `3 O6 j9 d/ a9 }0 ]5 Z: ]
}5 v3 P" C) o9 _- V, C) f# C
}
+ e9 L+ x. k- X, Q};9 y* p- O& u) }" u1 ~, K
class CInventorySort
# V- F& V3 I- N4 _* G2 U& ]) k{7 T9 t d" E/ H$ V0 s
public:5 A; K- U/ V) @
CInventorySort()
) J, \9 k9 _0 M& k1 b2 P. V{$ O: }& |# r6 e$ i0 R r
m_dwPos = 0;
) Y' f) P% | d- b}5 O" K$ T3 Z: U' K6 |
~CInventorySort(){}
6 L5 W" c5 @3 C, u/ m& uprivate:
; I- B; ]8 u& f# J+ j" c5 asItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
/ L0 J, n* o4 C; gDWORD m_dwPos;
( x+ `5 k9 {7 s! g3 g5 B& cpublic:
( Z+ V) |! b: r q3 `2 ]void Add(BYTE nIndex)( \' N" E5 H, T/ T0 P8 F) q
{6 i: _. d7 n; g# v
if (m_dwPos >= MAX_INVENTORY)
/ z5 ?7 E6 Q) X* t D0 D {
) ?8 S9 q6 ?: D, B! B. d return;
+ Q; v8 h) c: Y; F }
+ V" u2 f# I: `3 p& S m_Item[m_dwPos].nIndex = nIndex;
) q4 e8 d5 U- E$ H8 F4 ` m_Item[m_dwPos].dwId = m_dwPos;: K; P/ K+ r6 o% G
m_dwPos++;
7 h5 v' n8 [! Q+ i( N. T2 @3 g}2 Q% j9 W# @- C& X+ w- i: F8 u
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列2 j1 j' u0 @/ h' ]# b6 f
{8 t7 s" ~# t8 ~) @
for (int i=0;i<MAX_INVENTORY;i++)
8 J1 n, H+ C/ Y {9 c, }% K1 \5 |3 C! k7 z: Z
if (m_Item.dwId == dwId)5 z/ @+ G1 |: r) H
{) X: V; ?/ r9 _9 ^0 o
return m_Item.nIndex;
/ ]9 S+ K9 O: L2 B0 Y: x }% I) u- D5 u! @6 c* u
}
, u/ ~) y$ e" x" r2 k9 o- l$ a return 255;& [ W' w' B: Z# s! _
}2 [) K% A. C5 @1 J' P4 v1 U
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
/ I5 l1 k% e5 j{
+ W0 j9 W: X+ @ BYTE nTmp = 0;
! a, ~ V/ ?- s! g) U bool bDest = false,bSrc = false;' {5 G$ H+ M$ v8 g; Y+ S; G
for (int i=0;i<MAX_INVENTORY;i++)% o6 Z' o6 E# \1 x
{: }' E Q5 |5 n5 N5 {6 ^) F' E
if (dwSrcId == m_Item.dwId)
/ q% d! o' x4 E3 [ {
/ j1 m4 P3 ?% B- K" q- _ //id相等 则 改变对应的dest和src
, A4 e$ D& b* [1 F; W nTmp = m_Item.nIndex;" k5 T' ?6 G! r; [2 {" `
m_Item.nIndex = dest;
6 Q) S9 f; N& i* F }7 m% _3 K" G' p: }2 N9 i6 f
}$ A, c% G5 U% y
//临时数据保存完毕,交换开始
J( o- n4 ?2 d u+ U* ~8 o for (int i=0;i<MAX_INVENTORY;i++)3 W( x) P, |* s; b
{1 k1 ^' w" P' L* C" d3 D7 r( x: u
if (dest == m_Item.nIndex)
9 _6 t8 T9 G7 ~% F7 `- }+ a6 z# _' } {
1 {& [2 Q- K( x2 V, E/ D //id相等 则 改变对应的dest和src; u L# H4 @. U- v; n( D
m_Item.nIndex = nTmp;& \+ S& i9 l9 [/ o8 N
}" e3 {& D# O2 z0 j/ \
}* l# c- X9 O9 @/ X
}
" q0 `- U2 q! y0 }; G0 n$ J( b};
. e* i* \: R7 M* m-------------------------------------------------------------------------
/ N* R8 y1 U1 \% a依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 u# O% D/ H0 v9 E' r- u% `
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
+ u# @1 w( f* l, ~6 e5 x5 d紧靠其上添加:
- P, `7 c; A" n y# j8 vif( pWndBase == &m_wndMenu )
- O, n1 ^# D/ y+ ~ W2 b1 V{% f+ b( F/ y8 i: N b
switch( nID )2 P# W, T$ p1 B/ m; b1 C
{7 _: R+ {: n" Z$ w& i
case 2:
5 I7 U4 s! p/ G {
. G, l$ l. f7 a4 n4 j //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
9 D6 @& K8 W7 R4 Z5 D if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 U, n6 E* f, A {
' I: h" a6 Q, ?% _* w) b A% C break;
0 J. Q, l& S3 b1 X8 ] }$ |% j' P/ a8 c0 A( m) r
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)9 o; P# z. W) }- f, Q
{; H+ V& H q8 s2 H$ b
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);: j1 t$ \* k/ K6 Q$ Z, D- w7 z1 Q
if( !pItemElem )
% v9 C( @, X- u2 J' Z* b continue;
8 N( ~' ^9 x& [ if(pItemElem->GetExtra() > 0)( O# |! C. d6 g; f, ^
continue;4 \5 _$ j3 `0 g- n2 p
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
5 |8 `! e- b1 I: l J$ A& B continue;
/ E" Z0 [5 }" E f4 D7 ~7 ?. r) O if( g_pPlayer->IsUsing( pItemElem ) )
6 {- o7 Y2 E D$ h% Z* l) I5 C continue;5 U F! X; f! e
if( pItemElem->IsUndestructable() == TRUE )# X5 Z9 r, i }' s1 G- u/ I
{% m$ c; I! Y: n, k- Z( f- W8 C
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
9 E# U+ L$ W" l& d5 j D continue;7 c' ~6 K' A& r
}. U- c0 c' d& `; F; d/ c
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);5 D% d3 [5 c& q; G4 g
}
- F8 F2 E5 n' L9 M2 H6 G$ Q# ^ break;% F! K; A' ~$ J( ^- _
}
0 y" y; {) i6 y, c case 1:
9 T4 D: ^0 @* Y! Z {, o6 M7 Z' `. p
//整理背包
4 z# ~5 Y3 Y/ v4 t4 y7 m$ h //////////////////////////////////////////////////////////////////////////
% V& r" n+ \7 z( O. K. C, j //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );% p& m+ |0 R2 M7 c4 |+ Y* E
//////////////////////////////////////////////////////////////////////////
: n9 i; U( z! Q //////////////////////////////////////////////////////////////////////////
6 f4 }6 Z/ r7 p. F2 x7 I1 Z CInventorySort* pInvSort = new CInventorySort;
" {" Q4 ~% l) k" K7 x& e: l* U vector <sItem> vItem;
( o1 M+ e, }+ _" Y vItem.resize(MAX_INVENTORY);//初始化大小
. y" o$ V) R6 r( P& W* q //////////////////////////////////////////////////////////////////////////
$ j! q. Y( c; w" R3 I1 c+ N //填充数据6 a& T% {8 ~) ~& a
for (int i=0;i<MAX_INVENTORY;i++)* p' w- V' b& i e- S; O
{: s+ V/ N" b- b0 y; g
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) \* Z: D) R! G% S9 s) h) L7 B1 ~
if (!pItemElem)' K" x+ j1 p$ O, s
{
! J& B4 b% W, X h4 h vItem.dwKind2 = 0xffffffff;! j$ p3 e2 M; h. k
vItem.dwItemId = 0xffffffff;
5 ?; k8 o; F: g" ` vItem.nIndex = i;
p0 b. J3 \7 z3 J6 { }else {
' S J2 `3 U/ T. K1 F9 X X ItemProp* pProp = pItemElem->GetProp();
& n4 [) S: {& r5 E vItem.dwKind2 = pProp->dwItemKind2;
+ }. \& t( p1 [: V vItem.dwItemId = pItemElem->m_dwItemId;8 I9 g$ C( }4 n6 X& p7 n
vItem.nIndex = i;3 O$ g _9 d, p/ K# K: P8 q( e
}
( [! ~# X! _# e! Z( Q //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* `0 l: L& P9 t
} x1 U; s) R9 M; d: P4 V' N2 X7 @2 M$ t
//////////////////////////////////////////////////////////////////////////( w5 O2 I/ z" a: l" b) C4 Z+ P
sort(vItem.begin(),vItem.end());//排序6 p4 ?1 V6 K0 o$ d9 m" d# E% t
//////////////////////////////////////////////////////////////////////////) D9 q: c; w9 ]) |1 P
//交换0 H3 z* e9 _0 p& P) j: {/ h
for (size_t i=0;i<vItem.size();i++)' l: ~7 c+ i; n; w* k) O
{* a; m. d# K( [3 K+ J& t P B
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 a2 R. Y- Z1 B2 Q# b2 L7 B
pInvSort->Add(vItem.nIndex);
C- \( c8 L+ o9 R; z! V7 m* v }9 N* a6 @7 u5 w/ s2 j+ D9 T' p
BYTE nDestPos = 0; v) s% g% X. Z& [4 K/ f
for (int i=0;i<MAX_INVENTORY;i++) J- @5 y: V* E; t' h& a. ~
{3 D/ o' r: C4 h0 c$ R4 N
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
/ n, B0 W$ ^- N& o/ Y7 b if (pItemElem)
% e( m S" g' T0 l% ? {3 T1 }+ ?1 k* B( j6 j2 Z
if (IsUsingItem(pItemElem)), p" I! ~/ a7 A$ y6 V
{
! h6 y3 E( c+ x+ @! b+ B1 n //这个位置无法放
0 [/ K7 c u4 D$ u4 z3 F nDestPos++;
]6 a: c; Q* F6 t s W }
, q, ]9 c9 s& {; ?- ` }
+ ?4 \0 N- n+ A8 m& h BYTE nSrc = pInvSort->GetItemSrc(i);7 a v( A- u! ]8 h% r, s/ A& R
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
% `9 ?0 N* b( Q- f if (pItemElem)* f8 H+ Z+ ~8 {8 Y) L$ j
{
) @- S% M& R! I5 d6 A1 @ if (IsUsingItem(pItemElem))7 \+ l" h& a) o8 g
{
( r" E3 @7 l1 ~ //这个道具无法移动,跳过
$ L9 C- I K+ h% R continue;
! D8 f; L# `, P: K. v" u" n8 } }
- h0 b, e# x0 G: ]3 ^3 e }else{
+ j4 K- A0 \8 s. S/ T //空位置 不用动0 w, T! h6 I# u# \! _6 [1 c
continue;
/ r) t7 C6 }- c6 |) y9 R }
# Z# x' ?# q1 S4 q/ y# } //////////////////////////////////////////////////////////////////////////7 d% W5 Y3 z; w9 G5 A4 k% a
//开始移动
6 @# Q* Z# l8 h. M. L if (nSrc == nDestPos)
- P( L: z A* I6 d {) l) U+ F4 s, q8 M- Y( G5 ~
//原地不动1 c! J9 q9 L% B/ H& V: I0 |: Z
nDestPos++;
i8 k l& N; {7 Z- x; G" [' `$ W continue;
% ]- Y* a1 ?$ q( r s# Z( G }% V% Q2 F" G( x5 y) J: T6 Z% I( @
pInvSort->MoveItem(i,nDestPos);
; i3 Q2 D, a* b+ d g_DPlay.SendMoveItem(0,nSrc,nDestPos);
, u' _+ j! Z. H2 Q7 E9 e+ n Sleep(5);
, }: U7 E$ V. c* J3 A/ \* ^, \( v Y //Error("移动 - %d->%d",nSrc,nDestPos);1 w; j/ e3 h1 f6 O% n0 \# a
nDestPos++;1 Q- L- c" \ [
}2 ~. c) o+ f4 A8 y+ D n( a
//取第一个元素的信息
- l2 C% [' Q u& \( \9 } e3 F /*/ ~9 {/ B1 A. o; W: }: p l2 r. |
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
& P! ]5 [7 p% T3 F' p- d5 J! `! c {5 M% k4 r1 ?& h( m
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);' W8 l3 T- K2 s
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);2 y7 J3 Q9 _ N+ F, }- ~
}
' }& u* q4 j! b) x- ? */
) M0 q4 I# J4 |7 a8 u5 x! R //////////////////////////////////////////////////////////////////////////0 ]3 { k# ^) l
break;9 Y7 X {* f8 J! c3 A* d& {
}
' k& L6 O7 Y# v* g; d$ B1 S" |9 X% t z } ; u+ T* p! ~! d
}2 p* q. g) ?$ b* b
m_wndMenu.SetVisible(FALSE);
1 @' N4 f/ n, \' t0 M) |4 T7 }6 p% \2 r$ l, X/ q& M7 a
--------------------------------------------------------------------------------------------------------
( S ^9 D# e; ]% l/ a搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)2 L5 |* ?6 Y4 K2 T' ]
{: f- U$ p9 j: r& X, ?
BaseMouseCursor();" m1 ^ v, x$ [' R N% J
}
" k9 v" C% H1 y7 h在其下添加:# l: V& L s) H( F
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
" x- T6 @' f. D6 i P{
, j' f& B& B4 Q: ^7 K N7 |m_wndMenu.DeleteAllMenu();6 h' V% M# R' o, q5 i1 a" q/ p
m_wndMenu.CreateMenu(this);
( W. v, r$ V3 T2 sm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
& J& M% Q8 l+ w4 a4 V, s/ [7 w0 V5 w2 a
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 {. O o; F7 {) A @- n- N! {
{+ j w: u- w- h% p- o5 g
//P以上级别才可以删除所有道具1 {7 C2 K/ ]$ [
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");7 ^( ^, W% [* i1 j
}. C& @: C7 j. \) [3 i5 P
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );' K' G% w* T& S7 t9 i
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
0 k+ X# f! E' X1 @3 R# ym_wndMenu.SetFocus();
0 e5 W4 R# W$ Z& a2 R4 o! P}- w7 O; L0 b, @, x5 u' O
------------------------------------------------------------------------------------------------------------# ~. \: G! o: g9 s4 E% A
*************************3 x! Y' P+ @2 e: J# c) s9 I
WndField.h文件
) n* W5 W. j) u; y1 T/ M. \9 P*************************
) z4 c( z2 F; |搜索:BOOL m_bReport;
& A3 u* q2 v9 V% [) S$ o3 `其后添加:3 z. e# c; Z3 W* A0 b: U* F( K
CWndMenu m_wndMenu;* P: U8 k' n, y& r
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
& }( b& |$ I; _" o2 x; {其后添加:
$ ?/ \. l6 B! ?( ovirtual void OnRButtonUp(UINT nFlags, CPoint point);, @4 c) l( n! M
4 R4 b, N3 `8 u# R0 E1 q* |8 l
" ~# M- Q( e; L7 Y |
|