|
|
源文件中_Interface文件夹下WndField.cpp文件
& P( Y, x$ k, h6 p8 j+ e8 Z @$ w j搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 a6 m+ e; B K( `+ X" P, c. z8 f4 e4 o$ u* S8 X
struct sItem0 Z5 {- w" U" D6 ]
{
1 y k" h- ]* p# D) I1 mDWORD dwId;
. j1 N" ~/ f4 I- L5 bDWORD dwKind2;
, [; r2 S; `5 A: l8 X8 ADWORD dwItemId;' ^& t) A, b" k$ z. J/ J9 S
BYTE nIndex;- M3 O# V4 l* }7 B) B3 g
sItem(){+ i& ]0 w, v: B0 J( C+ y
dwId = dwKind2 = dwItemId = nIndex = 0;) A* M& V) _+ o6 m$ Z
}
! m a2 U. a! m' Kbool operator < (const sItem p2)( h$ Q l7 G6 X4 E, E6 ^3 n
{
/ w+ d; m% V5 n* V8 B+ b if (dwKind2 == p2.dwKind2)' ]! t4 Y- F6 v" Z% v1 n$ d! H
{
0 n( }9 L3 m! i, t9 s w' G/ h: o return dwItemId < p2.dwItemId;
- |! C5 ?3 p* d' s- M }else{
. D7 @) ^0 _' d g' P! C" b. N return dwKind2 < p2.dwKind2;
0 @4 X" L% g' d( N }% ]& |! i7 G8 a( y5 U5 ~
}
, v# a- H2 l. y; s/ n" |};
9 N% D- D3 b. e( rclass CInventorySort
- l3 h$ ~4 U) |" ]: @7 \{
" _7 `3 {: C0 C- F/ Spublic:
5 H/ n) e( U, ]' XCInventorySort()' d( l+ r+ V" E$ o' W$ o: f8 M
{
" _" f4 t! H3 p8 X% P2 N m_dwPos = 0;
: ]9 F' {2 n; B9 ]9 g) M- y* Y& L}
+ t' M" l8 F9 j+ T5 C/ Y% {~CInventorySort(){}. ]* W: Y$ y% D7 g0 g- U8 A. ~
private:
3 f$ A7 ^* Q) f TsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息6 l# Z6 W1 E1 V3 ~6 T
DWORD m_dwPos;
9 ]/ P; k" p! gpublic:, \: L* t1 ~8 a0 p3 M# F, B
void Add(BYTE nIndex)* N9 G2 a, ^( S1 V0 k/ \$ g9 j
{
1 S3 u' e- J! y6 p if (m_dwPos >= MAX_INVENTORY)
' x! I3 U/ s9 W {- O! c1 P" }9 J4 W4 i. }
return;
: d* y& E$ D+ k) W }
: {# q& _" @5 V* k m_Item[m_dwPos].nIndex = nIndex;
9 _7 \8 ` u* s m_Item[m_dwPos].dwId = m_dwPos;% P( i8 i# N5 g) j, W+ }
m_dwPos++;
( C# L6 D# @# ]}
+ t3 D7 ~& K j+ s; _1 \BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
0 F% ]: o: G* K) Y+ S{$ c$ Q) ^, \6 z% D- N ]
for (int i=0;i<MAX_INVENTORY;i++)$ J! K* @9 a' P( w$ [3 \$ m3 a1 ~
{
0 s( X# @! p8 A if (m_Item.dwId == dwId)
6 L+ w$ z7 B7 l {
1 J3 h9 k' O$ o: Q" F return m_Item.nIndex;) ~, n4 G; b4 @' F$ C' C1 y
}, M; F, P" j* B1 Q/ N" o+ C
}
; M1 `& S. r* C0 c! u return 255; K, u1 v8 M9 D$ |* X
}
) |, a# J" X5 D% |" Vvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置5 R: A5 O( M, X3 i4 C# b' i% @
{! G8 H2 t# g( W& \5 @
BYTE nTmp = 0;
C) v& l! R) q+ F G r bool bDest = false,bSrc = false;
. F6 b: x1 s! E for (int i=0;i<MAX_INVENTORY;i++)
3 \; q: n4 f1 h) M/ D% j {* }) U; v( F6 @& O4 O- Z
if (dwSrcId == m_Item.dwId)
) A3 Y) \# q: Q$ Q; O+ t% W* I7 g {
. [) X/ N6 c( |% ]: i //id相等 则 改变对应的dest和src& \% v( A2 Y& ? U3 [' N; h
nTmp = m_Item.nIndex;
7 K. a' k7 E9 O1 r" q$ _9 Y! m, d m_Item.nIndex = dest;
- f5 J- Y7 [) O( h y! F/ ^/ ]0 P }
) o1 T+ F# l2 r }
2 E' S( x+ W3 |2 u+ | //临时数据保存完毕,交换开始
, B0 t8 D3 }+ `/ T3 h for (int i=0;i<MAX_INVENTORY;i++)
# \+ l- x; J" R" G, Y$ J2 q5 g" F {
; u% _: m) U9 R. z; ?1 c if (dest == m_Item.nIndex)! H5 d9 c. _7 W9 q6 ~; P
{
. a+ X9 R' P% X/ d$ h z //id相等 则 改变对应的dest和src
2 H! b! p: U. J( h) ]& {+ n m_Item.nIndex = nTmp;
, ^ D/ ]# H P }
7 D/ ~7 `: i1 I8 v& n }
" ?7 p) @5 `; d# k8 |- M: v' J}
* O3 N/ S( w6 d; s& b3 s1 Q};1 p/ J$ B) H$ E" [
-------------------------------------------------------------------------2 v3 J3 [. M0 C& P2 }: L
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). h/ H8 p- g# G$ {# U0 h
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);+ d* Q7 v4 e) a& m t
紧靠其上添加:( ~ L! Q: _8 `% ~1 i
if( pWndBase == &m_wndMenu )- o7 p3 y' P/ o" j; ~
{- _: d. @* _8 _5 Q$ W
switch( nID )0 r5 H4 m0 l: Y
{
/ P, f6 Q" n) K9 a; t3 I case 2:/ h0 ~% |2 t0 G# E" `6 {
{
: U* S/ x8 l" A) t, R5 x- Z //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
( N; h% ]! z4 ^' `7 |+ B if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
( L9 q; Z ?' l3 S# B {0 I; M8 Y+ Z- D7 u( R
break;* J; [7 q( b6 I8 h7 R
}% i. P/ W9 |9 V3 u7 |$ `
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
7 O4 D% a m! a, u( l3 V {
) p( Q( I8 `5 O T2 y% Z6 H, u5 o CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 w3 E' j1 {6 s3 a5 u V
if( !pItemElem ). m; S5 C1 _! l# [# B; `
continue;- m/ C5 D' d) N* {
if(pItemElem->GetExtra() > 0)
0 x3 [0 g4 H; ?3 u1 z9 @2 G. \ continue;
3 ]; x" ]) C2 L3 C4 b if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
# a4 n* Y% m+ Z1 @0 R8 T/ p4 U8 |/ J9 C continue;
. D' C- v2 [8 ?$ |0 E) V* p" t9 a if( g_pPlayer->IsUsing( pItemElem ) )
9 m" V( E9 G& h( M continue;: \* c6 _1 V& a
if( pItemElem->IsUndestructable() == TRUE )
* `8 b" s+ h8 _1 d {6 |7 [' z/ }! \$ K3 Z7 [
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );; q5 m. g# ]* x" y' y5 Q: o
continue;
9 z; U' ^3 Q U1 C" v }' ^+ }% U T# k% g. d
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);. Q% f( E5 H7 |# W, B
}
7 i1 T9 x/ m j/ M) z1 w" H break;7 Z- }6 p. f9 L9 b! t" W
}3 ]9 w! X: g2 ~% K) n
case 1:
( z# ?; o! F( v' A& {+ { {+ I" y, l6 k w4 ^, m" ^& E: p
//整理背包6 ^+ v) _2 a- z" ?
//////////////////////////////////////////////////////////////////////////
7 Y) F8 t2 g5 A$ N o$ t) y7 g2 J" L //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );& |' B3 |, _3 a7 Y; A% O' \$ m
//////////////////////////////////////////////////////////////////////////; F- F b& N5 k& A$ T, l K; ~: K
//////////////////////////////////////////////////////////////////////////+ r. O& } U# f1 A7 t' \# b5 @) ^" v
CInventorySort* pInvSort = new CInventorySort;
9 D9 M% v3 l, m vector <sItem> vItem;/ }: {# s( N J0 E; Z6 P' B" ^% h' m
vItem.resize(MAX_INVENTORY);//初始化大小) |% _4 ~+ L# P6 B1 K
//////////////////////////////////////////////////////////////////////////( w; i' T, D3 F* E9 Z! G" ?# z
//填充数据/ b: l! T- z# p; Z7 k6 J
for (int i=0;i<MAX_INVENTORY;i++)
/ a, D/ V2 a" u9 a {# ~9 a/ X1 r" J1 r: Y7 P6 q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 }6 j' o& j R3 J Z# R3 ]! v
if (!pItemElem)
! t7 n9 g1 N2 j2 M3 r( H {& H9 s; @) U9 v( X, C
vItem.dwKind2 = 0xffffffff;, Q: s. t# k1 ]% l
vItem.dwItemId = 0xffffffff;: [: r3 o9 P, p
vItem.nIndex = i;
( @4 g* h; L( d1 U }else {
J; L4 `, x$ L, a- r3 S ItemProp* pProp = pItemElem->GetProp();
6 n1 a2 ^/ _$ v+ h1 m vItem.dwKind2 = pProp->dwItemKind2;& J& Z4 c% m* E9 P3 C. h
vItem.dwItemId = pItemElem->m_dwItemId;
, L6 _# |8 t0 F* x } vItem.nIndex = i;
' [9 K$ A$ ?& C1 C- J }
! N- m6 ?2 T+ R6 I- {2 f) d //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 j% M5 d6 ~: I3 S0 z
}* @4 f& [6 z. `3 L' w1 c6 R
//////////////////////////////////////////////////////////////////////////3 D" Y. M3 [& T' K- u* m7 E
sort(vItem.begin(),vItem.end());//排序. R9 ^' e( O- L$ u/ F! Z
//////////////////////////////////////////////////////////////////////////8 ~& D8 S7 Q3 F
//交换4 z$ }: r8 H# w6 n, |+ s- j2 `* Q
for (size_t i=0;i<vItem.size();i++) F! B8 h" t- Y6 E, p6 `& E
{
& @: a2 d7 z( g+ ^+ g //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' U2 ?3 ^0 A, i! _+ z/ S4 |
pInvSort->Add(vItem.nIndex);$ I5 D* r+ w5 C; ]
}
: m9 b4 U& H: h+ @2 N a BYTE nDestPos = 0;: _+ e- u" m5 x: E, U0 r' t
for (int i=0;i<MAX_INVENTORY;i++)
5 p3 @/ ?- G' e {+ Y: h' o6 p/ X6 }$ L4 m' n
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);& V6 S5 z5 V, L1 C7 ^' `3 l
if (pItemElem)
0 D; M! d7 v' ]9 a9 q; ^+ O+ h4 x4 U {
6 T: H7 B. w8 @8 x+ B if (IsUsingItem(pItemElem))' `4 g0 g1 T# h) v1 }
{" S" ^7 D- a% X+ J0 U# h
//这个位置无法放
" O- i1 }2 ~, F' c: h7 f nDestPos++;4 [0 [! q) H" z* n
}8 N% G9 N9 {: a* K) M8 m
}
- Q. g; S0 q( P# Z( s- Y BYTE nSrc = pInvSort->GetItemSrc(i);
s0 H4 Y4 m* t( Y' a# Y3 ~! ? pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
" s3 ?# R% K9 t. y# [3 a if (pItemElem)
& P/ c" R" h; h1 p {
: d: j4 t" L. M1 ?# ?7 D if (IsUsingItem(pItemElem))
4 O" G0 ]5 V5 ]9 T; c {1 o/ @' A; b. r' O3 O0 x
//这个道具无法移动,跳过
! d+ Q% [( [9 k' }* `# J: _; W continue;
' H# R% y7 Z7 a1 {( ^& g* D }
g" l# m0 E& m, i9 T, v }else{9 T; @! W( ~: Z
//空位置 不用动7 \' g! A7 y' N' t2 K% M- T. Z
continue;& ~( G! h% n3 I5 i2 Z( |
}5 { n$ X* Z6 v* _
////////////////////////////////////////////////////////////////////////// ~$ @+ t O5 W: X: T0 G
//开始移动
) g" v+ U% S6 s if (nSrc == nDestPos)! [3 z5 x. ]* n1 s7 }# s
{# D' X8 c j8 O5 B5 E, {9 N* K
//原地不动( a7 E' ?1 j! d$ U4 y
nDestPos++;, c+ J' z' O( I7 T9 H8 f
continue;
2 g ` h ] A7 ^+ `; ~8 { }
4 B# z7 u2 \) b6 @9 O pInvSort->MoveItem(i,nDestPos);
4 M' R1 z4 X! [2 l" M2 A! X g_DPlay.SendMoveItem(0,nSrc,nDestPos);
/ q: [5 r; t* q$ _1 R' L% `! y8 H Sleep(5);
# q* w9 y$ s) y1 P+ x8 N- R) F- r //Error("移动 - %d->%d",nSrc,nDestPos);2 q+ @$ x9 K3 C) R
nDestPos++;0 w* }+ z# F! l. y7 D- i! S5 \1 @
}
9 P s8 X- c. g8 O //取第一个元素的信息+ B e N6 f' A0 \
/*
1 p9 k& M; ]$ S( q4 M# G2 e if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)6 Q5 [4 ^ b8 Z+ h
{
. r$ q0 n" Y! s* Z% z0 V9 T Error("Move - From:%d,To:%d",vItem[0].nIndex,x);$ G- Z6 H: B7 \0 k5 d
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
, T" `7 p, \, o9 @* l K6 h6 b }
+ A* h a1 l: Y v" D; C& G9 J */" a. U) p+ [2 N' ]9 n) h
//////////////////////////////////////////////////////////////////////////
: b% h) b4 q- i; k8 K7 } break;
( o0 @: y$ N' l6 f/ [* _ }
4 I9 {: f3 A5 W8 N$ q7 C/ o }
`! Y9 D" `$ p! J6 |+ m}; T& u; k, k$ n+ K4 @5 y6 b
m_wndMenu.SetVisible(FALSE);7 q c8 [7 C* M7 D
: ^2 ~0 Y" m% e& x2 l" u7 [) r) H
--------------------------------------------------------------------------------------------------------
7 C9 t& p5 |; {0 q4 m% {搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)0 s) X0 Y6 G- L( Q
{
7 q# k$ d n! W' E9 F2 M& HBaseMouseCursor();) Z# s1 e8 V" |1 s- n
}1 P; M0 X% @) n% ]0 Y
在其下添加:
& U8 ]7 w ~3 h \void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
$ f6 a4 ~5 R) r# {{9 u7 _; p/ @, s
m_wndMenu.DeleteAllMenu();
! | q/ n( X( [m_wndMenu.CreateMenu(this);! X) M, ~2 c4 @
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");& H, w6 [+ z7 J
1 C/ w# k# I) qif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); P) v' C( v9 A
{0 ~% }" E$ P$ x! Q
//P以上级别才可以删除所有道具. x( ^3 A- E. ]/ P- X4 U
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
/ V. Y- A4 J7 d, ]# `/ \2 U# d6 z/ ^8 ]}; B9 K+ A7 d& r5 l
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );7 J" q T! ]9 s% V) Y2 n
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );$ c+ h: Z! P5 m. O
m_wndMenu.SetFocus();
+ I. _- x. G% }0 N, g! Q1 f! } A}
) Z) F! t! W9 b------------------------------------------------------------------------------------------------------------
2 p# X. n" d! t; q* m: F*************************8 B" m( p! v2 Y. W
WndField.h文件; Q; w6 ^. L# |; c
*************************! d6 y5 q3 T1 J0 k. y9 P& s0 v
搜索:BOOL m_bReport;
' O- N# E8 Z" k/ j% s: f# ?# n其后添加:
3 I: ^- e% D' w4 wCWndMenu m_wndMenu;
; i; I3 \/ }. @# M搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);/ O6 e0 }: g- c b% E2 U) l' u" y" K
其后添加:1 n* o7 {: a" O7 H# {
virtual void OnRButtonUp(UINT nFlags, CPoint point); j& {$ M$ L+ [0 d: P. T
! V- Z# x1 n" d. D7 I
7 P! C- t K! Z% k
|
|