|
|
源文件中_Interface文件夹下WndField.cpp文件
( A9 _% g1 d! h! k* X% C9 h' e搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
" K- Y# e4 W+ L( J# ~7 F) m) [* y! \# K
struct sItem: R2 B$ y. b( g D2 \/ M; A
{
" c/ d0 l7 E6 g& L, TDWORD dwId;
, |/ {4 D; T& s' zDWORD dwKind2;
# n. ~% L) {; ?DWORD dwItemId;6 F6 D) `0 _. X7 J. b- E# p1 f
BYTE nIndex;
# V, ]) V5 O L4 D6 esItem(){' y9 M& B) g7 q
dwId = dwKind2 = dwItemId = nIndex = 0;
4 D3 m: q8 m) m Z, O2 B}
. A. D2 {1 }2 u$ v% m5 Q8 @bool operator < (const sItem p2) Y# w" m+ b# [" \9 a$ J
{4 R0 N# k d* m1 c
if (dwKind2 == p2.dwKind2)
0 Y, P4 n1 [0 j0 i; S; m$ m {
' ~; p. f% X U; t0 N7 a2 u' |2 _ return dwItemId < p2.dwItemId;9 y' S/ }1 I9 X7 }+ Y# W7 x
}else{
2 [' K9 R0 O, W+ V5 y" g return dwKind2 < p2.dwKind2;
& h* j. }) a7 t+ S( z1 u }$ X/ D; e1 [. d4 b1 d
}
' c% ~" |1 d" H @7 h};+ N" C1 b- x/ r3 q. K% X: B8 H1 G
class CInventorySort( q2 u+ `* E, l& p, m/ X
{
, r1 ^4 a; }, u' x: [" f; xpublic:! L* v- A1 q* Y- H a
CInventorySort()
' [, a0 k( ~% u; L+ M{
/ s4 ]6 w, }: f) f: O m_dwPos = 0;
. @% M0 D0 W# G; W Q}# V; ], A. ?9 s" A4 c
~CInventorySort(){}
* g, q- x7 Y% L. S; vprivate:
]- u) u4 Z! P( S, ZsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息5 J/ M2 n" p! I3 `9 G' r0 I( {" N
DWORD m_dwPos;
. I5 ~4 ]! n6 |) J- c2 l, [public:3 [6 c; M5 q7 v: a5 K# N' P- r3 f* _- k
void Add(BYTE nIndex)
/ f; `0 |6 V! V{3 a6 H4 ^* G# P- n1 Q
if (m_dwPos >= MAX_INVENTORY)- q- i5 o% @: w* U* w: v- g1 J( \
{0 A3 K V) X* t* `' U! M- V
return;# D. _! m1 g$ k6 g0 r! O$ Q2 h3 z
}5 f0 a7 ?) g# U4 ]7 \
m_Item[m_dwPos].nIndex = nIndex;
. x1 Y, E! [8 N+ O0 e m_Item[m_dwPos].dwId = m_dwPos;9 @* e0 j/ Y, Z- L( _. r
m_dwPos++;. T. ]" r9 R! ^/ n% |9 J
}5 O' r* f) D) q0 I# Z! Y8 p
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列; R- q: _& y6 O0 Y a& m) [3 N& W' s( p4 |
{
$ ?" i1 W+ K! Q, T$ ^$ S7 t) x! I for (int i=0;i<MAX_INVENTORY;i++)
, W- a0 B. v, C" x {
6 F6 R9 I, W2 |% a) l# e if (m_Item.dwId == dwId)$ U- G& C8 x5 X% o+ |0 e/ @* d
{" ~1 D. Q! P) `+ C+ u1 h
return m_Item.nIndex;6 ^: `1 `+ b( z8 q
}
- k v: F/ `0 S2 x% U2 N$ H }
' Y2 {5 T2 f; N. w6 V# Y* Y return 255;8 o" `9 P6 y4 Z
}
, G; s& ?& h9 q" z7 i, Y: fvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
8 h% s/ F! _4 s1 p" a9 |{- f# j& g4 P' f- |9 }& u
BYTE nTmp = 0;
( U0 t k4 V0 i' A" I9 \ bool bDest = false,bSrc = false;' P2 a. R$ y9 j% M
for (int i=0;i<MAX_INVENTORY;i++)
. {* D7 X2 ?, | {
) G/ O* K1 f: C# H( Y if (dwSrcId == m_Item.dwId)
! X" f0 }# U" H5 ~: i {( \+ g+ q% a4 M$ A/ j8 S
//id相等 则 改变对应的dest和src
; T2 D, u% y/ q5 `( R nTmp = m_Item.nIndex;
2 j; U1 E5 }( u% l0 t m_Item.nIndex = dest;2 C2 d: U' a& U
}
/ }/ i& A8 I+ z |4 l }
" ~5 a! p; k+ Z //临时数据保存完毕,交换开始
$ U+ \ _& c$ _+ k for (int i=0;i<MAX_INVENTORY;i++)% S" @$ H6 }$ X0 k7 b) H1 l
{- `. Q/ T6 U* t
if (dest == m_Item.nIndex)
/ G( w) j3 k$ E. B7 j& o {
6 H+ U1 I% |( u7 d. F //id相等 则 改变对应的dest和src
0 r% m6 \. j# t& E4 W$ d m_Item.nIndex = nTmp;
# E0 L& ^& Z* \- s }
, R& C$ [5 E7 W% v/ s( z; h5 ? }
. G% M" W m" w) E5 J}
& J {5 |; N# f' f+ X, t! M};: e' T5 X" f/ |4 _1 s" A
-------------------------------------------------------------------------
( L+ d6 C9 Z; W$ Q: A依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) ~! i: ]$ V* z4 S4 ^搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);% Z0 m0 } l. M, I% r
紧靠其上添加:3 S% s/ _& J4 R) w
if( pWndBase == &m_wndMenu )' q% z6 Z, @, T: v
{
4 v2 p) x$ P0 m, y1 c- _4 H# o! a switch( nID )" Y- N3 U- l1 q1 V: Y
{
" u0 `! y4 I( } case 2:
) I$ H, P+ E7 W {( b0 E3 F2 t9 S1 r A! T
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
W x" n+ P7 W0 ]+ ~* Q3 d+ X* u# q if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% _* D; _# @8 \$ T
{
+ _, A" D" ^" M) ]/ G% G0 l' v' _/ j break;
' f* v! P/ H/ P& a4 j }8 l" _; t, K9 C9 g! y8 L
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
3 U. V+ ] b: u. c' ~. ^1 q {: c6 l& Y, N7 T9 w6 R
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, v5 A, b; f: S+ `2 \% w: x if( !pItemElem ) n% u* e6 |. e1 g R
continue;
: I' w# |* ?" `2 e. A. P+ q- W/ E if(pItemElem->GetExtra() > 0)) `7 l4 x! A8 p; k1 }/ \
continue;
0 H5 J+ _5 h; C P if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
3 S1 U3 T4 q8 i/ G$ E" K/ C continue;
: p# D M* I/ G& b m |$ z G if( g_pPlayer->IsUsing( pItemElem ) )4 P, |; m6 B0 k5 W% h6 f
continue;
! p" e* Y [1 I9 B. {2 F+ ~ if( pItemElem->IsUndestructable() == TRUE )
# P) m4 \" m h$ P$ z {
' j9 H+ x! z& z1 V' R3 a g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );+ U: \$ d, I9 }% X
continue;
, c( i P- C; a2 U }
0 ? B7 e9 M) r! f* P6 A0 E g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);: H: m; x) y1 b2 B2 S! n Q
}! B3 l& }9 E$ H
break;
2 \6 V2 O S7 @; F7 d' w }
& \/ u/ ?1 Q- f0 j# u* R v9 T case 1:! ^, Z% c) F( u7 Q; R. o& \, ~( w' H
{
, ~! L; {# I, k5 [! X; m( g5 C- x //整理背包
9 G3 W! Y: }( [6 W9 y9 z! n. k; @ //////////////////////////////////////////////////////////////////////////# S I9 O& o b7 P7 U2 X
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );7 V j0 m8 s1 q, S
//////////////////////////////////////////////////////////////////////////. _0 Z; n9 a, _* ^4 [8 a2 `- V
//////////////////////////////////////////////////////////////////////////
9 {0 ?5 O& V$ q( P CInventorySort* pInvSort = new CInventorySort;
, d1 U- Y3 v$ R2 a1 R vector <sItem> vItem;0 Z$ e9 Q; M4 F& q d. t
vItem.resize(MAX_INVENTORY);//初始化大小
+ k: J9 \& }+ k( j m" @ //////////////////////////////////////////////////////////////////////////0 V% P& y) n H% w
//填充数据
: ]8 o$ ]4 l* |3 m for (int i=0;i<MAX_INVENTORY;i++)
. B& n' y, G1 Y {
' G; z- b$ H7 f' R' \ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, q% V7 u: }; }
if (!pItemElem)5 p: }" @& X c: h- w) m- s9 n
{
" |+ ~+ K, z. B0 Y0 o! j6 Y vItem.dwKind2 = 0xffffffff;
8 k3 i! N+ X2 k* f vItem.dwItemId = 0xffffffff;
% Y& _+ Y% t/ M. S0 L3 x/ K6 V" e# J vItem.nIndex = i;+ Z% w+ j6 z4 S' G* D
}else {
8 ]9 N" O9 Z* S# K+ J) p$ |/ Y7 ? ItemProp* pProp = pItemElem->GetProp();: u( h, r ^- U* k% n
vItem.dwKind2 = pProp->dwItemKind2;
- }1 b# X9 M1 M, w, I) I0 X vItem.dwItemId = pItemElem->m_dwItemId;
6 S$ K1 e% r2 C" E( {- C vItem.nIndex = i;2 w* o; J5 M5 e; r2 K. S9 p
}
0 C! s$ }4 h+ g, A7 @2 c* } //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 I' m& T$ O: _7 X$ a8 x }% _& T( D& U" g, B/ f4 A( S$ f
//////////////////////////////////////////////////////////////////////////
; Q: |; Y& e; I- a1 K. R& d sort(vItem.begin(),vItem.end());//排序
! `- k1 f9 c. C* w6 F0 v: h //////////////////////////////////////////////////////////////////////////( D( |+ P/ {* D4 G, T( N
//交换# C4 H6 g, i! k% c' q
for (size_t i=0;i<vItem.size();i++)8 I9 g0 o. ?% j$ x/ ]' M. S, y' N
{7 T* h4 j3 ?) `* S4 }9 ^" Y$ k9 x6 d2 L$ ^
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);! C" O5 c1 k8 z" ?, ^
pInvSort->Add(vItem.nIndex);1 ^& d4 g' |' M9 S' y% [
}& j: U' g; u, M
BYTE nDestPos = 0;
4 X/ f* `- U4 S* }; c d0 _ for (int i=0;i<MAX_INVENTORY;i++)& ^7 k& o/ J* v0 k& j
{
' X7 R0 [, w8 ] c CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
& F: q* N: B+ E1 F if (pItemElem)
3 @" ~) ]( A, L5 J" @) i1 } {
1 G+ h3 {; N7 A+ F8 @ if (IsUsingItem(pItemElem))
6 P$ d7 j! [0 }' e5 R1 \1 S {
J: h3 M: E! v2 y3 F/ D0 w2 ^6 E //这个位置无法放1 @9 Q& R1 ^3 v, e0 C& v9 o
nDestPos++;
# @# X( _. o1 M C8 e }4 m, {$ b7 Y2 s' c' n+ X4 m4 r6 H
}, B- h C$ D- J% m0 i: x* _% M
BYTE nSrc = pInvSort->GetItemSrc(i);
$ j0 g' K4 U1 Z pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
6 E, e2 v# `5 R ~1 ?5 t if (pItemElem)/ b3 ~1 `5 | C$ F2 d
{9 l" M5 K! G& R. h7 E
if (IsUsingItem(pItemElem))
8 o h9 |) N) r' [ {
3 @ g% ~0 Y6 N+ Q4 r //这个道具无法移动,跳过8 ]/ k# L6 U0 W
continue;
' {! \9 j3 d) o& _ }) n9 ~" J- i- m ?
}else{
; `7 E! d/ P$ X //空位置 不用动
( q* Z" Q* g. N' P4 [) |% D continue;0 |! ^+ v$ }+ h) W1 Q e% N0 z( d- d
}0 u5 T2 e7 h/ s2 K. U' n- q* K2 f
//////////////////////////////////////////////////////////////////////////
9 J9 b2 x- ?! Y5 w //开始移动7 Y0 V% v& d: J1 k- w8 N
if (nSrc == nDestPos). w5 B6 Q1 _6 X) T& K# H" F9 Q
{2 `, c+ d8 d& S- A8 I8 k
//原地不动
* l; Z% ~& _4 k5 c$ r* E4 z3 k* Z4 _ nDestPos++;
" L1 g' h# V( {6 e1 }" D1 G continue;8 [! A/ A8 y# j |. N
}
9 T' x) t, X( h pInvSort->MoveItem(i,nDestPos);1 ~- }# x3 V+ y9 Z# @
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
0 b& [6 P1 @7 } Sleep(5);& L$ e9 n% n5 [
//Error("移动 - %d->%d",nSrc,nDestPos);6 @* f5 \3 t- m
nDestPos++;1 t7 ?9 G& b) l, t: J- u
}
$ b9 L4 ?4 h3 Z, W/ p& T //取第一个元素的信息
) N8 x0 V8 t0 D# K$ S- `! E9 u /*2 M- L+ F' u) o) {6 W3 [$ [( H
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)' u5 g/ v4 |, X/ I' t |2 Z7 u+ p
{( g* m% O( Y' Q2 l6 g: o5 O7 `
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
. X* j- i7 ~5 e+ g4 h0 i, g g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);9 ]' e" t" W- T
}
5 L& M# a/ M7 X- r */
$ t: ?- k# w$ O6 R( S //////////////////////////////////////////////////////////////////////////# i2 D% ~# g% i. b# p9 s
break;5 M% T' R, x- b+ N5 Z+ t
}* Y( D+ }! D) L$ m* F! t* W3 m' w
} ; P7 q1 P, g$ R
}
5 u% d' L9 O- g) ]- K; ^m_wndMenu.SetVisible(FALSE);
4 Y6 R# _! |0 Y' N$ j' R* j r, l4 e+ M0 L- L
--------------------------------------------------------------------------------------------------------! ? ?9 ^* L, ~$ n% t' f4 b
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)7 Z) ]+ c3 L9 U7 j
{
6 X: Y1 }( m" ~* d1 ?7 @$ c/ YBaseMouseCursor();( y' h" x( r: ^6 W% Y' P
}5 _& t4 z; a* x9 N1 e
在其下添加:
$ b+ A p% ~: |! d6 I* H! F3 vvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
9 o0 q0 h4 B, {{
6 R: h# X! v( F+ g2 h. vm_wndMenu.DeleteAllMenu();
' s8 p$ l# Q$ {3 Cm_wndMenu.CreateMenu(this);" N% W. h0 Q9 E# D4 V( O2 }
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");3 E6 k: u' B- ~2 e2 w! Y
, ?) a( H$ P0 C: [% @3 }
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))! w/ i9 A* h1 S6 B
{
+ ?6 d, G$ a8 S //P以上级别才可以删除所有道具! S& z+ a) x( {6 P
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");/ `% i2 K0 h S! Q
}
- y8 I( s* f/ am_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
7 y% D6 l* D- v1 ?; y) om_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() ); y8 _% K; l, \- G. s7 H, T- p
m_wndMenu.SetFocus();
! u: ?, A) c( d8 m0 ?}
. R7 p2 p8 `! D X, r) d4 l$ {------------------------------------------------------------------------------------------------------------
. j6 Y. p0 f) J1 ^************************* w8 k% [ X* A1 ?
WndField.h文件/ [8 o0 f, N8 P9 K! G: L
*************************
- a l- |' D$ e0 ^$ d8 N9 D搜索:BOOL m_bReport;+ d9 @4 r( M' x& B) R
其后添加:1 D v+ R$ Z X- @; b
CWndMenu m_wndMenu;
' s% W7 B; p$ C& }+ L: V搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
6 n5 i( E- [; u/ k其后添加:3 q5 |. U9 v4 @5 s# D6 l- z
virtual void OnRButtonUp(UINT nFlags, CPoint point);
. P3 @% j& ^! M5 j4 k" t* l9 @* R$ Z# g H# I
6 G/ A6 T' J- B; ^8 l: z |
|