|
|
源文件中_Interface文件夹下WndField.cpp文件9 l7 _( I/ W: k- q4 N
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' `; _* W# l1 V. J9 S6 P& m# @3 q
; M& Z3 a8 F+ |struct sItem& k- s8 l3 _# V! r2 `
{$ H0 r& f) h: O; P6 N5 f7 u
DWORD dwId;- ?9 }/ v, D P
DWORD dwKind2;
5 x6 N- n2 z( _4 ?; E0 f4 UDWORD dwItemId;/ l+ {2 c% q" k! Y4 H* e8 ~
BYTE nIndex;; |3 Y, ~$ D G( Y% \7 k
sItem(){* X$ X: S# H% q4 y$ u% p, H8 L8 r
dwId = dwKind2 = dwItemId = nIndex = 0;1 v4 U" f- S% Y0 X! R
}$ R( h1 v& |3 v) \5 {; P9 D
bool operator < (const sItem p2)$ |% m5 W7 ^, V2 v" o
{
7 C' `; j4 l* P# ?, U0 i# H/ h if (dwKind2 == p2.dwKind2)
3 r- K8 p4 K, }9 u1 z+ @1 B {
! w# `1 q8 d( a+ q& r- W6 \ return dwItemId < p2.dwItemId;
& b( w1 O6 ?' X$ U9 \! y& N }else{& ^& L1 `" a0 h9 J
return dwKind2 < p2.dwKind2;/ I$ o# X4 g( x+ q u* ^
}
5 U" Q# E$ p$ q+ @6 S; K}
$ c" s7 ?6 K1 x& E) o# l};
6 V6 x& H4 H r2 y* j% P4 lclass CInventorySort
; P$ n, a) Q6 v; w4 A `{
' P% i+ |+ a+ ?# h Gpublic:/ C( d9 o1 G+ H b
CInventorySort()( g s/ ?( [5 O( B& j, D
{
, K) \+ q& Z; v! W8 `& q m_dwPos = 0;* a% ^& q$ {. W' }) ?, g; N
}
8 U( a0 I: L% N. r2 \9 i3 y' z# l~CInventorySort(){}
7 i' J s, c# F- n7 jprivate:* l+ t6 w! X0 m5 ~8 p' \1 ?
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息9 e8 ]- N" C8 P4 K1 ?9 Q6 [5 W
DWORD m_dwPos;
$ W8 Z2 [. q2 ^. o/ ?8 o% Apublic:
* V% m$ F o" c8 qvoid Add(BYTE nIndex)
0 y+ z( U/ i% T: M( J7 g' Q6 y0 C% w0 s{
* Z3 [& ?1 j: e; m: K if (m_dwPos >= MAX_INVENTORY): t+ C) {: I7 |: h6 l$ I+ l
{3 F# y- t# t. Y) }1 D7 j
return; Q, t# x- i8 O+ x/ w! N
}
. B4 h0 t: v: `5 ^1 X m_Item[m_dwPos].nIndex = nIndex;* \+ A+ {8 `4 D5 F
m_Item[m_dwPos].dwId = m_dwPos;
& W0 Z1 x2 |* ?& `0 x' M: l) S8 [& q l m_dwPos++;
8 p+ I% E0 n' }0 K4 y}
+ I- G! S" k5 E" c |BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列 s% ?1 F! W8 N
{5 y9 _" r; O6 {1 \& o3 @2 C I
for (int i=0;i<MAX_INVENTORY;i++)
% c& @# B* k+ o {: @1 u" S; O* a' t
if (m_Item.dwId == dwId)
* D2 I! K# [/ z5 z9 F$ h {9 P7 Y( _( G2 |" e3 c" P
return m_Item.nIndex;+ M0 O' X3 K2 ?9 G
}( K6 T% @9 A1 u4 r1 [
}
" s$ ^1 J) c" \ return 255;
4 {- \5 H$ }; K `* I3 t. c}
- I3 Q6 z% N P+ k5 nvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
/ M) [% ~2 b9 k{
4 X- _9 }" y+ ?" z/ v: |4 d4 R% L BYTE nTmp = 0;: ^! o2 V# R$ n2 ~% F
bool bDest = false,bSrc = false;6 i. j& w/ x7 h8 t5 M
for (int i=0;i<MAX_INVENTORY;i++)
5 n7 I( X( e7 H; g+ e# j: s& R" b6 n {5 Q, U' u, M. x$ j5 V9 P
if (dwSrcId == m_Item.dwId)
9 A9 Y/ L3 [; S( C1 u/ z; m; ^) E# Q {
) _, M, k P' F //id相等 则 改变对应的dest和src: e# t: b6 |' _, N6 m I
nTmp = m_Item.nIndex;
, Y) V* \6 K% m1 U m_Item.nIndex = dest;, u$ ^% @0 M+ N! Z
}
% n3 q$ v8 _2 b( S. e: T ? }
/ y- J, b( o; J6 ]* p" o" P //临时数据保存完毕,交换开始
1 \' a: ]+ k2 R: g6 i' a1 @( G1 Y for (int i=0;i<MAX_INVENTORY;i++)
' C3 V- `) v( d {
5 S3 P1 o" a! ~5 s, P: q1 @4 [ if (dest == m_Item.nIndex)
p8 ^; Z$ m7 h; ^6 s% f' M7 W {+ U& P8 M' R: N6 A8 n! k
//id相等 则 改变对应的dest和src0 ~( ?( c- g' j& C* {, L
m_Item.nIndex = nTmp;: l& K7 w# T( q8 H% Y5 Y
}
6 w# L# a; N: U# V) v L3 m6 U }5 O" w3 E7 r( T3 q. ]
}6 q: ?, i! m. V2 Z' ^) S9 T1 t: j
};' w4 v _, f: H+ T3 L" x
-------------------------------------------------------------------------: p- D: h! o+ ]/ _6 W: r
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( E! x G! J: ^/ G0 H( t7 U
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
1 S1 v1 U9 D* y$ @, ~: g紧靠其上添加:+ H o0 ]' P5 G
if( pWndBase == &m_wndMenu )2 O$ \/ @5 c4 Y% s. s* q
{
! X) D$ p6 N1 t) X& \/ \8 i switch( nID )
2 P2 B3 z$ G G0 P) w) [. d {
5 l% ~4 C7 u+ ]! [ case 2:6 `: g n4 f% A f) M3 w3 _2 N
{
3 o! i! \; T# y //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
5 I5 ?5 A/ u0 w# E+ Y9 O1 k& B if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& h, w/ [0 a8 q3 s1 O {2 V' @; v v9 _1 G: |
break;* l+ V, p* M$ o) v" c1 w& N- Q
}5 H; c. R9 a# y2 s
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
* J! g/ p2 B6 B. i { v& d; h3 {1 \4 ?& i( E# p
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);8 m" }4 O+ u5 ^
if( !pItemElem )
. r+ Q C* n# o m: o. k continue;
" j$ @/ ~& {% { if(pItemElem->GetExtra() > 0)
9 U$ Y& h$ u$ M& _1 j8 e continue;; [/ |, W: q! K
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ! q$ N( [0 E6 A: ]) @
continue;2 U4 p# X5 F# I0 P# a
if( g_pPlayer->IsUsing( pItemElem ) )% T2 d8 c+ x6 j3 W, f
continue;8 L4 |% D% X% X b
if( pItemElem->IsUndestructable() == TRUE )6 ^0 K8 G5 Z. ?5 X1 e1 X
{1 I- _& i7 q2 ~1 U: B: D, N
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
. I# w3 v" i0 d1 p; U continue;
9 R0 s! ^9 h3 |6 n d }# z/ g8 K+ ~5 z! T' C; T$ Z
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
K. F& c' h0 D" \' z, k } z; [9 F5 u/ z& n3 ^3 r8 R
break;
' { N5 M s) G0 Z( ^4 P/ ^, n. ] }2 Z) { J/ b0 ^4 q$ x7 z: \
case 1:" {3 f% K$ f' U5 f- ~
{
: P; A$ Q+ A }) U1 L2 T+ H //整理背包
3 A2 u) i( k8 V6 E //////////////////////////////////////////////////////////////////////////
4 a! ~! a" l% l //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );7 J5 a# ^" l) K. x6 N
//////////////////////////////////////////////////////////////////////////
2 w3 [3 B. b, R! [+ R5 n //////////////////////////////////////////////////////////////////////////- e( L* @/ r& e% u7 ?5 m' b( X
CInventorySort* pInvSort = new CInventorySort;
3 ~7 K v8 V: ]) L3 V: C vector <sItem> vItem;
6 J# P0 D1 a4 u# e8 C/ ]/ q1 K' l vItem.resize(MAX_INVENTORY);//初始化大小
/ k- n$ y4 j3 _! B ^& B9 } //////////////////////////////////////////////////////////////////////////
s/ Z, p# O: \; \) c! n. ^% Y //填充数据2 Y* Y! j5 W" V; ^( p- Y$ y
for (int i=0;i<MAX_INVENTORY;i++)5 {6 X6 o0 K( b* K0 L
{
4 J/ S9 H3 c& R9 r/ E; U CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
4 J3 a6 r, @1 f5 \" x if (!pItemElem)3 M, }8 O; T7 Q- U& y
{
9 y3 Q: R# y& o" V" n vItem.dwKind2 = 0xffffffff;
( }7 t% y6 z& `- G/ N vItem.dwItemId = 0xffffffff;/ P2 ^+ @8 e4 f
vItem.nIndex = i;8 v% H$ N* p) o* ]/ O0 G0 b4 J* f& N
}else {' `2 j# U: e, W* S F) T& Y
ItemProp* pProp = pItemElem->GetProp();/ l8 L/ R7 f4 S+ A0 k; E$ a- H
vItem.dwKind2 = pProp->dwItemKind2;2 |2 }! B9 Y" V0 ~, p* e
vItem.dwItemId = pItemElem->m_dwItemId;+ H# m- Z& h: o$ J
vItem.nIndex = i;2 X/ Y6 A7 o" n# L) }& e7 u+ i
}- S. Q) C6 ]) f8 O- `, v8 h
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 C7 v0 e7 `; `
}# _, }. {; S4 Z2 Z3 Q- W
//////////////////////////////////////////////////////////////////////////
. v' X4 O) \2 \6 Z' P n! n7 A sort(vItem.begin(),vItem.end());//排序 ]( y) O, F/ ?' S3 `% l2 d
//////////////////////////////////////////////////////////////////////////: @$ m' J: a: U
//交换( e6 I. m( G) k' C# H ^
for (size_t i=0;i<vItem.size();i++)9 P% N/ ]/ L+ e. ~# F
{6 i1 B: \ w8 P+ N2 |, {/ Z [
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: l; w: k& {7 F5 ~9 I9 j pInvSort->Add(vItem.nIndex);
, j6 j, W1 t! U: R- K S+ g9 a j+ f* c }
0 b" }, m. c) }* A. ^% W BYTE nDestPos = 0;; r9 @+ E/ M H: ^
for (int i=0;i<MAX_INVENTORY;i++)# v8 c, a* x' V0 i9 b
{
8 p1 y8 l4 h8 r1 O8 `. a CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
) o2 |* h& T- l s% z3 v& x if (pItemElem)
; m5 M9 `( I$ u7 `& K% ?3 d {
6 x8 V3 U4 @( c' t' M if (IsUsingItem(pItemElem))
6 C! k+ V: D* h/ m {
) O/ ~, P! V8 U% U) G$ m7 | //这个位置无法放
- O# z! S( O8 Q8 M* n& r! r/ ` nDestPos++;
a2 J- q% d0 Z) z6 @% X* I* D }6 x. s- r4 g w: Y5 v3 H! u
}
, T2 ^. o) [ J% p( B BYTE nSrc = pInvSort->GetItemSrc(i);
) f/ B$ x) u% ~7 b- N) ^- y6 l pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);. B: y6 I% C. [7 ~2 a
if (pItemElem)
0 }' i$ o8 b; |# A9 L7 P {. e: D; W. C5 r3 M W% m/ @
if (IsUsingItem(pItemElem))) q8 [" ]" a7 z' \& m# j
{- ~8 D3 K0 Q+ W+ L
//这个道具无法移动,跳过
6 b/ B' k3 X( G8 k4 e4 |) e& U0 Z continue;
J) ]1 Y: A# j. a. A0 Y }- g: M. E6 n- S
}else{4 [, ^ h1 h5 c7 }
//空位置 不用动6 T! g+ W! W. m; m5 l2 [) h
continue;
) Z) b6 O* h3 Q' [- P }1 x* \; s. X& S, U$ e6 b Q
//////////////////////////////////////////////////////////////////////////
1 R4 N* ` p3 y+ U9 { s //开始移动
' F, V/ N% q' F if (nSrc == nDestPos)% t1 o0 G! O, q
{
8 M5 F& }% z2 P4 L( Y //原地不动( m. ?, m/ x+ K+ Q" M5 [/ A
nDestPos++;
/ p& Y9 [# q, D+ i2 T7 N X* t continue;
3 j3 \: o" s( f+ V }& d8 m1 A' w' w1 X* p
pInvSort->MoveItem(i,nDestPos);" h0 b% s$ n3 K
g_DPlay.SendMoveItem(0,nSrc,nDestPos);& H$ o5 @& U: G- I. g/ c
Sleep(5);
, u" p; Y0 r- b6 S" U //Error("移动 - %d->%d",nSrc,nDestPos);# F2 k1 L3 R0 F+ Y. s
nDestPos++;
2 e$ d! ~0 q/ ^ }
9 v$ U$ V+ {( e. C5 ?# S# Y! B //取第一个元素的信息# E. U6 a- `* y/ i) j0 a7 p/ c
/*6 g* Y5 ^$ H1 C; R3 j0 E: {" g
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
8 A4 o6 d8 Q) `: O+ I- e {6 n2 X0 Z# @) S* G/ t# t& N" C
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
" D5 s2 N! o5 P3 J" p g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
4 @' h; G: g7 g l k+ i }
& H( k+ P+ a5 [! K */% k+ S' i2 a" g$ b) T* l z
//////////////////////////////////////////////////////////////////////////
# @2 z% i, i) i3 ~8 M8 G- {) F break;
4 V; x# {( Z& y! N8 r }
' Y# v6 a4 ^* J S7 L0 t }
6 X4 d& C( h0 {: Z& f}5 s3 r) E- `& h: `# O
m_wndMenu.SetVisible(FALSE);. }3 r- ]5 I/ \6 p
4 }8 S5 u3 n1 E' i# N% r9 K--------------------------------------------------------------------------------------------------------
, s" m Y1 V1 u9 o# [. m* l" Z搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)' S) y- x3 H, D/ O: s
{# }8 P/ S" l" [
BaseMouseCursor();# w6 F5 _3 k; g# p# z8 o
}
- |0 L+ A G. L1 {5 R' @# _( j在其下添加:
& z* S- J1 {- qvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point) T* |0 d- @2 N7 X
{
. u/ P8 j! j' }8 G E% t: ~m_wndMenu.DeleteAllMenu();
2 K" D+ ~) S. W9 h3 fm_wndMenu.CreateMenu(this);: i* l# ?. W; s. h: N
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");' _# t$ a5 \4 T! e
( V" a8 l/ o; Y- C
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
' [; Q9 d& [$ L' I- ^6 ]- S{/ I0 Q3 M6 t% g& W3 J$ O
//P以上级别才可以删除所有道具
' E. y& u I' \1 }1 X8 r( t m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
{% }" q3 B+ V5 V}$ }3 t% x1 z' Z5 y1 z+ t
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
) v- A, k; o i4 d2 w5 Vm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );# D: U& T! A: A
m_wndMenu.SetFocus();4 V3 A( P6 a/ f7 Z+ `4 l
}
. k0 [! K' a- K4 t/ U------------------------------------------------------------------------------------------------------------8 [) |/ W1 I0 O% V" O2 K! `
*************************4 z& x0 ^6 Q1 u/ Y, A$ Q, q
WndField.h文件
+ P- D r$ M3 g. T*************************; c% U; o; S8 n
搜索:BOOL m_bReport;/ \1 a, H2 ?) X3 R4 \( \7 ]8 G, r
其后添加:
- F) y) M( J5 c* N$ I& n$ WCWndMenu m_wndMenu;8 m1 D* k. O- M/ i
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
5 O7 k9 ~" J9 V& x其后添加:
* m9 ]( g$ D/ i$ N' K% j, Zvirtual void OnRButtonUp(UINT nFlags, CPoint point);& w: L' U8 y8 Y1 r
2 j S: a/ ` L3 P; M9 k" d. O
$ ~+ z% N. {, x |
|