|
|
源文件中_Interface文件夹下WndField.cpp文件4 ]) T& H$ V% K. Y
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 x: L0 X: @2 Z; F8 D* N) X5 G1 f$ b- z2 q! [: Y# q
struct sItem
' @) h5 N' ]* F7 S4 W; b{$ g9 K* P& i( e& N+ E
DWORD dwId;
6 F+ E3 k9 e! |7 SDWORD dwKind2;
- n$ P/ w% S# c) v. ~; A& k' QDWORD dwItemId;
9 B& `* c4 v; ~ ?% L; QBYTE nIndex;8 k3 M5 e/ P" j$ R4 C& k; E
sItem(){
. N B) \1 j- ?% n( X dwId = dwKind2 = dwItemId = nIndex = 0;- h0 U% G( D0 r) Q0 t, ?" ~; ~
}
( k/ w, n8 S$ \ q* ]bool operator < (const sItem p2)
/ w- Q$ g; G# \( W" w' D{
% q7 B$ F( H, k" |' w if (dwKind2 == p2.dwKind2)
' P, h) J: z# Q6 n$ d {
& W# R# `6 e4 A3 A1 o1 ~ return dwItemId < p2.dwItemId;
% u9 C7 `, M8 k: K0 U& t: ` }else{5 a( F6 h* t |3 J. t) e) H
return dwKind2 < p2.dwKind2;
( e8 u- b1 m/ n( Y0 n }
0 h3 s+ o0 u- F}( y, |. `( J. K7 }6 d
};
. ?2 ?3 n( j' Hclass CInventorySort: v8 i, C4 v$ n$ y7 k. D
{
! R4 ~5 L; s5 |/ L1 bpublic:
. L' |- U- u u" n- e$ VCInventorySort()* y- y' [, V0 d0 ^8 g
{4 n4 w2 z1 F! H) [
m_dwPos = 0;* Q1 R$ _3 I; u# ^+ A' E+ ]
}
. @ N' o _7 K- m~CInventorySort(){}) l9 }4 d U3 S3 G# Y2 R& [' X
private:
/ s/ z! v: ^& Q* G3 T. }; lsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息5 s. T+ B. q3 J# w( h& F6 z
DWORD m_dwPos;
1 Y* a- _$ d& }/ epublic:
9 m1 m( H4 t! N- \- J; M+ Uvoid Add(BYTE nIndex)
- b& w$ B% \5 L2 D; a; A{
; [2 m |8 H1 g9 j8 ]9 U if (m_dwPos >= MAX_INVENTORY)
! _: j* s) m% ^+ D% i2 S8 `+ { {2 F6 y& M0 Y7 F6 O$ Z. A
return;3 H( j1 F- |8 J) }7 p
}, t/ M: x6 C9 g9 a; ^& T+ f
m_Item[m_dwPos].nIndex = nIndex;8 i. F$ p- |# [* \% Q
m_Item[m_dwPos].dwId = m_dwPos;
8 o/ w" L; J1 r- v m_dwPos++;6 N9 T6 l1 C5 e; z
}" b( x, _2 U6 o8 k+ O
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
% u! z3 f( Z. |! r2 y0 T{
( b# Q- w( E& Y) r( M- s# J0 T for (int i=0;i<MAX_INVENTORY;i++)3 L0 C2 R9 Z% i4 f
{" G7 Y( `3 I2 e& Y. ^, Q6 Y
if (m_Item.dwId == dwId)) b8 v6 n$ M" l# Y8 }6 o- A9 Z0 \2 ~
{
1 A! z& c3 i8 Q return m_Item.nIndex;1 ?' [; R( y ?# B- K
}/ l! \5 r& L/ i$ Q, M
}: G* r$ x8 u( ~0 F# X/ b( H* o
return 255;
: w( }3 J" F1 ] j}4 _. U% e8 `( e$ X+ l$ c7 `, i' O
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置+ Q. s' S, Y2 ` e: X& Z! r
{) b( ^ _# _& \$ m( `* A6 ^' g4 o
BYTE nTmp = 0;+ v' H* X( M* _- c/ H L# f- i
bool bDest = false,bSrc = false;
, Z; g* w0 Q# Y$ d& A5 T# m8 y, X for (int i=0;i<MAX_INVENTORY;i++)
* Z* P' O3 b% T* S {
( [9 i; @% O, o( j if (dwSrcId == m_Item.dwId)
4 x, ^' E9 ~: f {
( @2 @2 k M* c; N6 ]. J //id相等 则 改变对应的dest和src* S# z& a+ ~ \6 v8 }' }; i
nTmp = m_Item.nIndex;
7 d- l) k6 ]# D! o1 M! a0 X m_Item.nIndex = dest;
( D1 ?; I8 x1 P1 J }8 F# g( U) }& G# B9 R: i) E6 v2 X
}$ z9 Y$ o, H1 N; I: D
//临时数据保存完毕,交换开始 ^$ O( n1 b8 d: K
for (int i=0;i<MAX_INVENTORY;i++)
4 [2 N6 q' C) d {
- l- i+ i9 j) ?$ H if (dest == m_Item.nIndex)) ^4 q1 n5 |: I6 z) n# U
{
; U* V' \( L3 B0 O5 D //id相等 则 改变对应的dest和src
9 k3 e" m) C" v) v m_Item.nIndex = nTmp;
9 Z" J9 f/ K0 ^( q: C2 c. { }+ V) n& x% N, _: D' \
}' z) v' ?6 d1 o/ v$ P0 |
}1 }: l2 A2 k* U. v* n) }5 n" c
};
1 r( v3 x# ~/ w- c' e-------------------------------------------------------------------------4 D2 D: X, F# I4 d- j7 A
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 U5 N1 j! K! u搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);6 H- F! B" z7 H; d8 d
紧靠其上添加:0 H1 L' ]' E3 P4 K$ o. J9 B0 G
if( pWndBase == &m_wndMenu )
& r% M6 ~0 @5 s: r0 ~& f6 ~{3 o# P! R1 e9 r& s3 Y
switch( nID )$ b0 Y& t2 y. A% M/ ^' {! I
{
. |9 `/ B$ P& z* ]) _ case 2:" U% {# x+ L! F/ g
{1 P* X! P% V8 U- i: Q; e. L
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);! W4 [1 T, h5 }/ W$ h4 U* T
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& e: L0 Z W, U {- `3 T4 i1 b3 K0 s8 B5 }
break;
# D: u6 `4 q( U" j+ X4 Z }
5 }! s6 ^6 ]0 A( v for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
: m/ @# s! J) z% I {
, }. I$ @+ n9 e' i/ Z: | CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
2 n5 Y$ I/ X. u3 O" N* w if( !pItemElem )! U8 o! U* F+ F1 n# S) ~, n
continue;& N/ j" w0 e! K+ c: e# n
if(pItemElem->GetExtra() > 0)
# D( l5 m* a/ E( l X continue;
3 B# x2 Y. g( ?3 P if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
: M# v7 h! G+ S5 T0 Q continue;
: }! F6 @% K I, e- l8 t if( g_pPlayer->IsUsing( pItemElem ) )
0 A6 k& u8 J' M3 R4 ?0 f3 E& k continue;
! T: p& K3 w' d4 d m5 G' S' `, s if( pItemElem->IsUndestructable() == TRUE )
% k! I1 A3 x/ F7 X( a3 ^$ } {6 _; J7 t/ o7 B$ m& @3 x
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );6 g7 x, p- f; T% c; n; J- f s0 }
continue;0 {* V: n# w2 o. B7 c9 r1 F
}. b: m' B9 R1 _8 A. E
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);; G7 C/ [" K4 r: X& x0 ^
}5 P8 D! _& f8 m/ P* m1 T' S+ b
break;
# V+ p0 K% t* D' ^# n }
" f2 N/ s6 P/ S- F3 s) W c8 F case 1:& `+ i" p4 O+ B+ M
{, |. W1 M0 t, [9 u" Y3 I' X. k
//整理背包- b/ Y F! q" y4 P$ b( P
//////////////////////////////////////////////////////////////////////////% l8 g; B7 v' P, L6 y! Q ]
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
# r5 k3 T+ s0 a( s //////////////////////////////////////////////////////////////////////////3 a8 y3 G! F) F2 h. P; V
//////////////////////////////////////////////////////////////////////////
4 W. x; W- j, b* t9 q* ] CInventorySort* pInvSort = new CInventorySort;
, H/ M. N; D$ N! a# h/ z vector <sItem> vItem;
4 S! i7 t2 v+ P) D vItem.resize(MAX_INVENTORY);//初始化大小
6 V" ~7 W+ T8 Q //////////////////////////////////////////////////////////////////////////
; L3 H) s* p* n m7 u //填充数据 W8 @$ H' y8 _# K% z
for (int i=0;i<MAX_INVENTORY;i++)
6 H' G7 |( s G1 E! Z {' Y6 s0 I n3 s- }- N
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 ?' G' x6 Z; | \
if (!pItemElem)
' v5 j7 c7 {3 t! b2 C+ B* ] {7 j; f4 G, _( j# g n5 @
vItem.dwKind2 = 0xffffffff;/ h7 U# j# E% c
vItem.dwItemId = 0xffffffff;6 m X& `6 h6 }( J8 Z; [9 Z& p8 f T
vItem.nIndex = i;2 G9 c, w. p/ M8 x
}else {* h* H0 N$ J9 t; S: }' X+ v4 [) o7 s
ItemProp* pProp = pItemElem->GetProp();
9 k) V; ^' ?3 f5 L vItem.dwKind2 = pProp->dwItemKind2;
" ?9 e5 c8 K: T3 F! ~( y4 R vItem.dwItemId = pItemElem->m_dwItemId;4 M: N. m m& t( i
vItem.nIndex = i;
* n* t3 M! R' W$ J8 Q% p4 Z }
1 Z4 g+ f t2 o d, r9 O: B //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);1 d- Z( p8 j3 y/ c# ~8 ~
}% I$ A, x9 v4 k" H/ c7 P
//////////////////////////////////////////////////////////////////////////
, B. z* I6 R% a8 _- Y0 y+ ]" ` sort(vItem.begin(),vItem.end());//排序! z% a9 H: i1 I' k0 }- Z. k
//////////////////////////////////////////////////////////////////////////
& o1 z5 e3 o8 R) S* c //交换
8 o; ^: w3 h! R! Q5 z' J; T for (size_t i=0;i<vItem.size();i++)
4 r& s5 z) k- \7 e, S4 } {
5 W0 l$ N& e2 Z/ X6 l j //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
$ D( ~0 K7 f2 n; i0 n' c pInvSort->Add(vItem.nIndex);
' [( M7 F% B" n }. Q- H9 O, n7 z3 U4 g9 i
BYTE nDestPos = 0;& |$ W6 }' K4 _
for (int i=0;i<MAX_INVENTORY;i++)+ h% P# i; s9 b1 q6 J# V
{
$ i2 O( K. a9 [! m+ I/ b4 |" w( y( B CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);" ], O4 ~. F1 f1 b; [( G9 W
if (pItemElem)4 g" e V3 @$ v
{
0 \2 x, r$ h( Y if (IsUsingItem(pItemElem))" ^/ q! }3 Z# L5 }0 @( g# c
{; M6 K3 M9 ?- I7 z; G8 b* H
//这个位置无法放
8 y2 ]2 Y' j/ h6 U8 [9 E' V5 d nDestPos++;# c; M, D, Z* }- ^: Y
}, n: R1 g# P; g- G7 B q
}7 N% a* q/ k% f# E. [; u
BYTE nSrc = pInvSort->GetItemSrc(i);: V9 u j" d6 \3 w1 v" P# Z$ Y; ?
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);/ i7 w$ E# j% p4 K( s8 b/ H+ |/ {
if (pItemElem)1 g# J9 h2 |, B- r, n1 S; T
{, g( Y! _% {- W
if (IsUsingItem(pItemElem)) C3 {0 @ }+ d, f7 r( v. }# g
{3 z4 m/ x+ u% H" e
//这个道具无法移动,跳过
+ V. ?' }% _ o' r' Q- {9 A) k( J8 U& f/ T. w continue;" F/ ]- E4 b! a! S2 ~2 \4 G
}/ W" u4 G! s% Z: n- Z& v2 l' P2 U
}else{ E! I2 b( G6 E, u/ K0 F
//空位置 不用动2 s) U4 t; R1 A3 E! L
continue;1 \/ w8 l* j4 p) I
}
3 Z2 [3 @. j0 a //////////////////////////////////////////////////////////////////////////( x& @) A3 d m; W
//开始移动
$ K4 J& B- n* f4 Q8 k if (nSrc == nDestPos)
# r7 ]+ A# |8 I, \1 ~* Q( R {) p% F( w* s( m& c% C7 a3 l" g3 L8 z4 W
//原地不动& K; a& ^/ h7 y2 \2 O' n" Q
nDestPos++;
% w8 u" ~9 B& A- _$ ]% Y continue;/ O, { z z* B' f' w9 H
}# ]. h3 H# @% s0 Y" b7 o
pInvSort->MoveItem(i,nDestPos);
$ L" ]+ x' H, v9 J$ ^2 J g_DPlay.SendMoveItem(0,nSrc,nDestPos);4 r( M; n+ q. g6 M! x! N
Sleep(5);
Z5 Q1 ]7 E& k+ h# I5 W //Error("移动 - %d->%d",nSrc,nDestPos);
! m3 \2 x0 e/ V0 s" {3 f+ ? nDestPos++;, j z% f; S7 n/ o, W
}
?) u m8 M) Q/ Q4 P //取第一个元素的信息1 I. ~* ^) H1 F* {/ }
/*; U& r+ m( X; a
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
: F+ t2 e) H+ `, g {
7 t- r4 q) ?% }! X+ n8 M2 C Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
: T0 X( K7 G9 P g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);# b5 @1 e( p: ]# c2 e% T
}
/ p! U! a: z+ J! n8 ?5 F2 [ */
# g( l, g& ]+ W0 G //////////////////////////////////////////////////////////////////////////
4 U# s/ n9 Z; U/ B- t break;
- p( j( s9 U7 Q S2 e: h1 Q }
; s. F: o: X" q$ t5 F }
7 }9 E2 c' J ^4 W' s}
6 h& q* b/ r. ^* c/ V6 s9 Rm_wndMenu.SetVisible(FALSE);- q5 Q- X5 [* L: d0 f* H
- Z0 z& M! O0 |' _
--------------------------------------------------------------------------------------------------------
: n6 \; j+ O* r, i3 q8 n搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
; Z9 t8 J" Q3 ~{
. y& o4 G! C6 X4 O# U; GBaseMouseCursor();$ I; Y! a* h/ D' `4 o
}" W5 y1 J$ i+ }; ^% p0 p
在其下添加:
9 Q# C, A* x$ r. y) u) K2 i- m5 Ivoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
2 k. S, n q# H{
& w1 @/ g; |, P* x; f* p9 L& Am_wndMenu.DeleteAllMenu();
. ^# r/ [ t2 p* Z- B+ D( d8 tm_wndMenu.CreateMenu(this);
' X$ Y9 ]1 e- x+ Z& z* lm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
+ a6 A- s7 y' ~5 g0 p8 k- C* x" V: Y! W+ u% k) v1 _1 F4 A
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
7 ~+ o f/ |: J; {9 E9 h: j( T{' y" c j5 V5 J! ^6 ], L
//P以上级别才可以删除所有道具
' ^- V) @# J, X% C* x# N& F( _4 F9 ^ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
" c7 t9 y" b& N' _}0 j* Y* f+ K! e! e% J$ s! {" }( o
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
5 f" W5 S& p: I/ d y, c q* w3 Zm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
' l! L& r9 Y. x9 l# F# V6 `8 D7 ^m_wndMenu.SetFocus();
) z( h0 k, ~' q$ x/ h}) ^7 b. V; Z4 j x" M, W
------------------------------------------------------------------------------------------------------------4 H- P% g0 m3 F! k5 p o
*************************9 b2 @/ e; o. m# D( u4 p
WndField.h文件
; @; p7 ^0 k5 {4 w+ h, j& X9 {*************************, Y( n& k: s0 C6 f! G6 R. c
搜索:BOOL m_bReport;
) u9 Y. f# _) u' u其后添加:
* }+ F9 }- d3 r6 C3 r ~+ k: `- j- nCWndMenu m_wndMenu;
6 b- p: y/ h$ m1 [& C$ _. \搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
2 a! J" D( W7 ]. A2 C其后添加:# q1 n( R' H5 K& P' q% X
virtual void OnRButtonUp(UINT nFlags, CPoint point);- m( S2 I* T- F
7 w% w$ g# |: c1 W& y* k9 J/ s5 w- P4 G& Q2 ^: i& t
|
|