|
|
源文件中_Interface文件夹下WndField.cpp文件5 N- h9 ]3 Y3 y$ W8 i
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 E" K# m7 |- B; @' l8 y! {8 t% f- \- Z3 F
struct sItem
1 G7 ?1 L& k9 F& U. f$ y) N{* d$ L7 n( H. A9 O% `
DWORD dwId; V) ~; P% \* J5 Z
DWORD dwKind2;
9 _) i, q3 ^ l4 m. S TDWORD dwItemId;6 M) z) g+ K! W; @, Z$ n! i
BYTE nIndex;
, G+ e- @( L1 H& tsItem(){, j8 I- r: b1 z2 K5 r; X) W
dwId = dwKind2 = dwItemId = nIndex = 0;' q' ?, g; Y* Q9 o0 q! M# A
}
$ n. b: c4 J3 i( l9 s4 u, ubool operator < (const sItem p2)! i0 j# ~8 F2 g0 f7 b& N D5 ~
{1 f$ _ \. S3 v2 ~
if (dwKind2 == p2.dwKind2)
4 W' q+ \/ Y; l `. k: K {
; S$ S& \" `# ^6 j, X# U: c; m* H return dwItemId < p2.dwItemId;+ k- z; T1 p: I# m3 N
}else{
$ \! s% f" u; g L3 M" \ return dwKind2 < p2.dwKind2;. p5 t5 G, C4 {/ H& X# {
}
4 `, y l- ?; z) ]! H}
! z" g3 }! o' N};# i' j) m; X9 u8 b0 }+ a
class CInventorySort! e6 Z% ]* b0 j5 A
{4 K0 i0 [& W; u; A3 V5 l
public:6 H7 {7 d( \; Z! d$ e
CInventorySort()
$ d! F+ \ k [' o8 A8 f{
$ z( Z7 \- S, ~/ H9 K3 Q- d8 ` m_dwPos = 0;
: ?: B, `; } F# i9 y}& l7 M+ t) _5 C: N4 i1 w
~CInventorySort(){}
@" J$ a1 E9 F& m+ dprivate:% S w+ |8 U2 H- @, Y w t' y
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
0 w. m3 H* x# x) h- XDWORD m_dwPos;
! `2 W' L( n0 `7 j: Q& h3 L1 Y. xpublic:
6 D5 A; v% s3 l. D1 Dvoid Add(BYTE nIndex)+ h9 X0 |) `0 H0 A/ `7 G
{' y' C2 o! n) @. {, K9 b) _6 a& v
if (m_dwPos >= MAX_INVENTORY)
4 ~, E: @/ \0 Z! ] {. {% z( g0 C" w8 o7 H
return;
8 Q# e% j. L3 q! V4 K$ m }
" E u9 V5 J& X% K4 e) h { V m_Item[m_dwPos].nIndex = nIndex;+ Q- Y1 u/ n' x$ e. _/ {' ?( i
m_Item[m_dwPos].dwId = m_dwPos;" ^+ `5 o% _5 W! s
m_dwPos++;8 p ^# H4 w$ r8 ~. r
}7 D4 ]* q3 @; @& f
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列% p' |8 |& H0 H- C; W% C# ^) [
{
6 z$ N7 b( f, V" z for (int i=0;i<MAX_INVENTORY;i++)
) z5 F9 s% Y2 n4 w9 `( A; Q {
5 l2 W3 V, ^# J! }$ h' [. C if (m_Item.dwId == dwId)
# K! s$ G) v8 W6 i* f7 ^ {2 O: d( t0 O" _& V9 X0 f( U5 l* n
return m_Item.nIndex;
( g7 r% {6 W: d& M0 N+ d! _9 o }2 A) _" P8 v2 C3 S+ T& d
}( m& I0 X/ S, f- h
return 255; L* i7 g# J% X* M, t0 X5 `6 T
}1 d J: }0 j2 o$ O
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置2 l) l4 m `- d9 u: J
{
: k1 c; h2 Y7 g: O, q- L- T BYTE nTmp = 0;
/ l( y! |' J$ S9 @0 ^+ D( E bool bDest = false,bSrc = false;* p6 d# n; r9 i4 K
for (int i=0;i<MAX_INVENTORY;i++)* o* Y. _' [4 n# [& m" I
{
# I9 L r2 i( q; E& p9 O" U# C1 n if (dwSrcId == m_Item.dwId)1 B8 W% C' T, F+ ~6 ^
{0 T0 F; n# K' L1 |* F( d" E
//id相等 则 改变对应的dest和src4 S' d3 `' S% ]* W
nTmp = m_Item.nIndex;
6 _ z/ f4 b* c# V Z m_Item.nIndex = dest;" E1 ?3 c% [- r* m6 S
}
9 Z* H" i' ]3 J/ p# M* D }7 x/ P) B) z) H* r2 f5 s4 w/ o
//临时数据保存完毕,交换开始/ c* u! }. a" w9 f2 d# u4 X$ }
for (int i=0;i<MAX_INVENTORY;i++)% d& h% [) X- @0 i& C* j
{' s) q5 B; u: Y/ G& k" S
if (dest == m_Item.nIndex)
" x! ?& |$ z+ v- |* | {1 x) [7 ]/ B. s
//id相等 则 改变对应的dest和src) @) M2 `6 N- A. H2 {, g6 j% K% S: h, @
m_Item.nIndex = nTmp;% {% c2 K: K V
}8 u& H2 ]% A4 N5 V
}
# u( d8 \6 {1 S; |}
3 G; }4 @4 ^7 j/ C};
( @ D- G. w/ w# z, \# K) W-------------------------------------------------------------------------
1 R D2 z0 K5 X U0 p& c- z) e+ K依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
6 l* U$ F5 N6 d& M6 `( l1 N4 v搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);" t0 p7 B' q3 I8 X. ~
紧靠其上添加:
0 A/ y- |/ {7 P9 U# I( Bif( pWndBase == &m_wndMenu )
) Z6 H; v' b1 K# q; `( x2 H{
0 \5 G. m: M+ t6 ^ K: k) h6 s switch( nID )
8 R. u: `4 B; b6 L) {/ j. [ {
/ m2 [. `1 d; H case 2:
& q4 d7 C0 [' ?0 d# W {1 Y. p& E4 l9 `3 R+ W2 p
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);2 o; y* d8 J0 n" x$ O
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
/ f4 Q$ M$ M: E! G {
" Y2 t: z# |6 H" k& G) \$ W break;
8 }, U3 q/ C7 t% ~& o6 i a! A }
- j. Z4 @& c* c* T& i9 r# H for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)! L4 O1 K/ A0 _
{0 e- j9 H8 D& r g w
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- \ \- O: c$ {" g7 j. C if( !pItemElem ). Q( W7 U" ]5 D' D* f& [: O1 t
continue;# J% Z, K2 g6 j* J9 \% W
if(pItemElem->GetExtra() > 0), ~8 p& t7 L8 G/ E: y' p; t5 L
continue;+ O' s& B! L! X. \
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
# a2 C D5 ^! D4 N0 B2 [, i continue;
3 r3 w( u( U0 l: b+ r if( g_pPlayer->IsUsing( pItemElem ) )/ O$ S" y. e) l+ b F5 Y! C
continue;5 U! z8 o) i) z5 Z+ ^
if( pItemElem->IsUndestructable() == TRUE )2 n9 q$ @/ M" i: H" _& R% S
{. R& |+ C/ Z# B, F* P; t
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
9 [; h" U& L1 m continue;7 L! V. T6 T( ~6 `+ |3 b
}1 Q) k! l U, A
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
' _, _ ]5 I# j( ]6 F }
0 N3 }! J$ I, q0 _* x$ [ break;' @2 O' G9 u- ^( U$ |
}3 b3 S* I H/ Q& ]9 \3 I
case 1:
+ ]& _ H2 Y9 p {. \- R8 N H8 ^, z7 j2 N! c
//整理背包5 [ s) n; c" }" D
//////////////////////////////////////////////////////////////////////////& n! e9 \( Y; r
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
5 p( h0 X5 a- S& _4 k9 { //////////////////////////////////////////////////////////////////////////
1 y4 Z: \& w" W /////////////////////////////////////////////////////////////////////////// b7 o2 ?7 Q6 u0 v
CInventorySort* pInvSort = new CInventorySort;# R, N1 T' B* S+ a* s1 Q
vector <sItem> vItem;1 _% i8 A; D; B
vItem.resize(MAX_INVENTORY);//初始化大小
2 D7 D7 S* a( j6 E; z+ D. i* s //////////////////////////////////////////////////////////////////////////' n$ V# p" c3 W9 u9 o
//填充数据: W: ?& v) I+ b$ r
for (int i=0;i<MAX_INVENTORY;i++)
8 f& X$ s; T7 z" d, H6 ` {
2 d, Z& @3 x( q8 p CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 M b J- I, H. j+ @2 h. s if (!pItemElem)
$ m# E. z6 s' |. p {
0 E, X8 @' T8 ?. }/ { vItem.dwKind2 = 0xffffffff;
! Q+ E O2 g8 F. b& \! g- L vItem.dwItemId = 0xffffffff;
' c- x- O u: u vItem.nIndex = i;
; i7 S6 B6 m' N# r& n }else {
, n D- L8 Z) f4 G ItemProp* pProp = pItemElem->GetProp();- e2 E, s3 q8 r
vItem.dwKind2 = pProp->dwItemKind2;
: i- X. ~, ~( C+ }3 T vItem.dwItemId = pItemElem->m_dwItemId;" E+ b1 D; H, M8 J+ x8 `2 m9 c# z' w
vItem.nIndex = i;
2 z2 T0 V- i2 M) k% r/ g }
$ Y( F0 Z' _+ E) o //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);7 d: y+ F" Y, _
}$ i: O7 I7 n, ?0 a, e& y2 G
//////////////////////////////////////////////////////////////////////////
% q/ G2 a9 C9 h" n8 Y8 T& v+ e& h sort(vItem.begin(),vItem.end());//排序
0 U: n6 \& V" V. u/ m //////////////////////////////////////////////////////////////////////////! w& S% y( m3 s, }3 E/ w1 }
//交换
2 [5 g. S7 G J" X5 e' o for (size_t i=0;i<vItem.size();i++) n# }8 n; S1 r, _6 B
{, A: D: V! v( b0 s/ H0 l: ?+ W F
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ Y- _4 r) X; W: W6 p
pInvSort->Add(vItem.nIndex);
! `4 t* I' w6 @8 D8 s/ \4 g }9 E* |2 n9 {' C. D) c4 l7 F- I/ k
BYTE nDestPos = 0;9 t$ \7 @3 d* X& u: ]
for (int i=0;i<MAX_INVENTORY;i++)
5 h% R1 i6 h) l! @. r. w, Q" P {
- V, j6 n+ M' h' Q1 `, s CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
5 A7 B/ W0 i1 `4 L8 E if (pItemElem)
1 C& @' n0 g* I1 y0 h! P g/ ~ {
& _5 P2 O# ]! j& A. q5 M8 G if (IsUsingItem(pItemElem))
7 e0 q. ~+ P t2 |* Z; b# | {
( L1 k" U9 j2 l+ E //这个位置无法放. B! W! Q( v7 T
nDestPos++;
" u, J6 _# Z: { }, [, F2 K3 A% W9 S p4 A) [
}
* p" M; g2 t2 M, |4 o4 f BYTE nSrc = pInvSort->GetItemSrc(i);
2 m) w& o+ J8 E6 d8 Y9 J pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
" n- E2 t3 {3 @ T9 C7 B6 T6 G3 X3 _ if (pItemElem)+ a X* R) q. E. o
{ c6 z; i4 i6 J4 J2 C
if (IsUsingItem(pItemElem))
* O' ^8 d, {5 e* L& g! C/ l/ X, m) ] {9 E' E2 h5 C9 {- N- v: G+ a) }$ y
//这个道具无法移动,跳过
0 [1 g5 d* N7 ? continue;2 @7 S& ?/ ]" F, D) t; R
}* b# ?8 W7 s& B8 h
}else{
8 w' G- I- G& b9 o% l$ ?9 y7 G //空位置 不用动' Y. ^. w4 P: }$ w
continue;5 q. i: E& }! _( K7 e' _+ @0 D8 f% m
}
# `7 [4 y+ F$ a1 Z& k& G$ J9 ~2 I. Y //////////////////////////////////////////////////////////////////////////7 B; s( T5 A1 w- v. L: H
//开始移动
6 Z' ~, V4 X( D if (nSrc == nDestPos)
1 e! r% v+ N, a {
6 w( G( ]2 }" H! e //原地不动! j- [8 b7 N" V; o( ]
nDestPos++;8 X* E& ^4 {: {; ~) l1 x
continue;
/ A4 q3 e1 ]0 b9 f }* n) b6 c \( Z( j7 h, t, r: |
pInvSort->MoveItem(i,nDestPos);
l7 H. F1 ~5 c) ~& b g_DPlay.SendMoveItem(0,nSrc,nDestPos);4 E Y2 s6 H* ^" {+ ]: g4 S
Sleep(5);# i: g% e6 a [& H% E7 @! W
//Error("移动 - %d->%d",nSrc,nDestPos);- e; Q& ]4 V8 H
nDestPos++;
$ O1 c2 Z% o* w$ _3 y9 E8 e7 I }7 h' E5 d: n6 V: t
//取第一个元素的信息
1 a# q s& d% m6 d5 u. |- f /*, ]" \! n6 h# {3 b
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
8 a7 ~' P3 o9 k8 U5 j {
$ r+ i( r) H3 b& L% @' B# D, i Error("Move - From:%d,To:%d",vItem[0].nIndex,x);. |2 ~/ \# [$ x6 H
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
. |# Q+ A8 ]& |) ` }
/ H8 z) L0 O9 T2 G1 _: e */0 b6 H- e6 f2 d
//////////////////////////////////////////////////////////////////////////9 s6 T, P2 Y0 B3 n) {* P3 F
break;$ W, J' e1 C) v* m# J( ~
}; u2 q% G2 z/ H ~
} 4 p& U) A8 \& k0 ?: C
}* J4 E8 q+ j. Q5 L4 C I, o3 w4 ~
m_wndMenu.SetVisible(FALSE);
1 ]! s/ a3 E& G4 s6 R
' K5 ]- s7 M: A( ^9 y--------------------------------------------------------------------------------------------------------8 k$ H9 C& o5 ]6 B4 E% L
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)+ v- F; q! ^$ E. f/ y
{
. H- K! k+ t7 PBaseMouseCursor();
: {. e$ ^. }* | d# m+ |. P5 P}1 ]3 z# R8 V3 L2 Q
在其下添加:9 |0 U; |/ c' u' x: }! v% b
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
& Z2 b3 |/ i6 F& I3 Q) o, H, d+ d{" x7 }8 d1 w& O' Y# K
m_wndMenu.DeleteAllMenu();
) f1 w1 z2 G$ f/ c0 Mm_wndMenu.CreateMenu(this);
% v( J; r6 b5 D$ Jm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");6 R. D; [* a2 E, V" q
w/ W8 s2 g' h. O2 \2 B8 w
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))7 p: Z3 P x% [1 r0 j6 q# \
{
# Z& [+ p5 v4 L: F //P以上级别才可以删除所有道具& W3 n, {1 `. y
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
& k& b" G2 h; ?5 E/ I}
8 B' }) c% D5 w, h3 n; ^8 ym_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );' Z: V' l4 n9 b
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );0 ?& @) {' ?9 C3 d
m_wndMenu.SetFocus();: s' t+ \' ]8 ?% c
}5 `7 t9 O5 R* {9 U8 p; \ s
------------------------------------------------------------------------------------------------------------
3 i# W( \+ k) C9 c* \*************************4 `+ K1 B, m. u) W& u2 Q
WndField.h文件
) C3 b0 g6 o( y V! p- f/ x ]/ d*************************
- S6 O6 x+ Y; j; V4 Z+ K搜索:BOOL m_bReport;
0 g" j4 b- t" K1 r* D1 H$ c其后添加:2 {6 G0 }+ l h6 i' X# ]
CWndMenu m_wndMenu;* C- `5 G' C4 X: k) H: Z# S% A
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
7 U6 a% O+ Z) S0 p! Z W) d* G其后添加:
% ~" v' ?) H# x4 r, n5 cvirtual void OnRButtonUp(UINT nFlags, CPoint point);
( e( p- ?3 `$ A/ w# w5 ?9 B% {4 Q( b8 [; l. {' A: {
- j5 r t$ t+ C3 [2 _& W& k7 a- y
|
|