|
|
源文件中_Interface文件夹下WndField.cpp文件
: Y; R1 b W* C7 T# W; d3 C搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: o" y) | E7 i. `! Y! X; P; a2 K7 z* R* e% @
struct sItem
0 D5 ` ~$ g$ z3 r7 o8 L{. {7 j3 G8 I5 `" O1 q
DWORD dwId;
; p: I/ I3 H _6 ~& |; Y& Y E) HDWORD dwKind2;
% T7 r4 L J, f I3 V: K" g6 gDWORD dwItemId;# V1 l9 Z% Z2 z. S
BYTE nIndex;
0 h* c! k. E2 s- }6 @$ vsItem(){
O! s1 k- ?1 b" \ dwId = dwKind2 = dwItemId = nIndex = 0;4 I; }# R& B. @* j
}, x% a- r- y2 `. @
bool operator < (const sItem p2)% [- Y% U/ H W) O9 o; A( e
{
$ |3 S# g. h, t if (dwKind2 == p2.dwKind2)8 ~2 ?9 z F+ t, x
{2 q! R) _1 t" x/ J3 q
return dwItemId < p2.dwItemId;
8 J" Y7 ^. L3 G' U }else{
4 p6 X1 |7 T* t- n" `7 m! X" p6 M return dwKind2 < p2.dwKind2;7 H1 v% W$ l2 H, Q4 ^4 n
}
/ Z8 R5 x! {% i/ P. B, z) x}
$ c2 r/ H/ o6 ^3 F6 A; {+ f};; Y" h6 N9 \' O% z; p
class CInventorySort
9 ]9 A3 Q7 U0 S{- N, j8 i1 q- B; m* o
public:5 Y7 s h \* h5 c
CInventorySort()
# {0 o8 Q. o# g$ S F. h' G! J{2 ?* d# x& U2 t% e
m_dwPos = 0;
* ~! \ f0 b, V7 X) O}- b3 `/ n2 w' u- v8 f: `1 `& U
~CInventorySort(){}
5 _' e6 \8 ?: E" {$ Jprivate: @) @! K8 y L/ t9 @
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
1 e0 W5 t1 O. j4 O. uDWORD m_dwPos;
9 h N7 y7 z, \% W2 i. |, Zpublic:
3 X. E- G j7 p! g Mvoid Add(BYTE nIndex)8 V5 n) \8 O, W3 z3 x
{
) k- M; k7 g0 c' ]) ? if (m_dwPos >= MAX_INVENTORY)
" A- g8 e8 k! n {2 M8 x3 b1 t6 ?+ m V! e& @
return;
& Y' j8 H: a" _" A }& y; P4 z/ G( F! d; i% U3 |" r7 Q
m_Item[m_dwPos].nIndex = nIndex;6 x M- a' Z7 [; U; _# ^6 e* x, G: A+ u
m_Item[m_dwPos].dwId = m_dwPos;# U2 b3 r4 J& C: p
m_dwPos++;
! t& o0 t# T" Y: L0 {! @}
+ o& |3 q' u" ]: v+ L, }: p2 ~BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列) H* r6 W$ O9 y+ A4 @3 F
{4 a1 M' d: r3 N0 j" I
for (int i=0;i<MAX_INVENTORY;i++)
$ ~' x$ q( ~7 b; G; r0 F {
$ |' S* z8 S- s if (m_Item.dwId == dwId)5 p$ T. M) d, E0 |* c
{" ^2 H2 h+ Y6 t
return m_Item.nIndex;
( d7 q3 H" } @9 t; o) `1 O }
& |3 l. D" _- ^" L/ e }. p' k& F, M' h' q: d$ \: U! A/ F
return 255;# w! F2 f) o6 v
}8 G1 Q1 {7 x& T, n2 {4 X9 m
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置- D* h; ^6 D3 Z1 M5 W2 Q
{
" c1 N9 o2 N$ }. ]& P BYTE nTmp = 0;# r0 _( z2 M+ R$ [# P
bool bDest = false,bSrc = false;* P# S5 t; q: t9 N, k0 G7 O
for (int i=0;i<MAX_INVENTORY;i++)1 D' J2 f \6 h, T, P; q S l
{2 D G5 a3 L% A+ v( g. M
if (dwSrcId == m_Item.dwId) O+ }* E6 ^% R9 L/ c
{; p* ?, U9 j, k! x. {
//id相等 则 改变对应的dest和src9 J- r6 ]: c" R. w' ?. {$ t
nTmp = m_Item.nIndex;
' H$ _9 m9 {! z m_Item.nIndex = dest;5 r |6 L2 q: p" M
}
2 K8 o9 C- V4 f5 G }' D9 j+ o6 r* Q
//临时数据保存完毕,交换开始" p0 c8 G5 D: h3 `0 c; Z2 E) [
for (int i=0;i<MAX_INVENTORY;i++)+ h1 r% u) O! N) I9 s1 q
{; k4 ~* \+ [$ g! ?8 W. e" @' B
if (dest == m_Item.nIndex)" k' A7 c7 Q9 U: E( b
{" V* g3 H7 z1 w% i8 m% U+ o
//id相等 则 改变对应的dest和src
5 {; _5 c3 T. [1 ]3 c m_Item.nIndex = nTmp;
$ n7 @. K* x" I9 t- g0 R }4 c% T+ c) }7 Z5 W" c; w) A
}# _3 E; R, ~3 O3 h6 M* w7 p
}
& s1 ]0 E0 G( @6 f9 Q' i};
8 }2 G$ p. |! j0 n/ B-------------------------------------------------------------------------+ b# q# N( e) q; e" `5 h
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ), ~5 ?( p1 u8 y& B
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);6 c# u$ T* W& @( K/ _
紧靠其上添加:
& ?0 d* \" _6 b+ P$ j" j9 Lif( pWndBase == &m_wndMenu )
) @" ?9 U; \% d3 H- U{( z. \9 k! w4 C4 R9 a# j
switch( nID )
j. A: H& k, t+ C1 ? {7 ?+ H$ [5 \. o: a: ]& K
case 2: e7 r: G4 a- I* a' E u Z
{% u5 {0 I3 L' y
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
3 [" a# w5 Y6 B) E if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# D7 F! f' a: I6 C' V
{: s8 y% t5 K) }* n
break;( c* A7 Y; |1 w: x, s5 ?% a
}5 m4 K8 \5 l; r; R9 y' R5 k
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
: l) r! w9 a. a0 f {0 x( _; G4 L% j# g2 i! V& s
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
2 l5 u3 n7 h4 i4 l7 p: U& I if( !pItemElem )8 w! a9 G! u, `# Z% K9 J
continue;! w0 B4 g7 c* K# c! ?$ D
if(pItemElem->GetExtra() > 0)
- [) Z$ t3 X& u0 A- e7 t$ w continue;
: r' O0 F6 W6 F. J% l* n5 f if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 0 v$ t8 N( g% s1 h Z& q: w/ p
continue;
- Q8 r) i3 y9 j& `: r+ [: g if( g_pPlayer->IsUsing( pItemElem ) ), Y& Z+ c! F) @
continue;
0 h+ b9 C0 H0 B$ \3 a) V" `, j if( pItemElem->IsUndestructable() == TRUE )
+ k+ P. L2 J& f W, t2 K3 S {
3 G% ~( \- V- q c+ J g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
& T) U1 t; ]9 i6 S- j1 X continue;
$ h9 h/ ~, D- ]3 q0 r: I }* t8 V. i8 j" e, e8 L8 a
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);- W$ u2 O4 C' [0 Q5 A8 c
}
4 v$ C; V& `4 ] v7 N. l. ~ break;
* v- k" X7 q! Q+ B6 O }5 |2 w- b* Q7 b
case 1:
% c- [8 K1 F z {) V6 b" l2 _8 s6 V4 b P& J
//整理背包% I% B, k$ Q9 f
//////////////////////////////////////////////////////////////////////////' h+ N, L5 F7 j' s4 _- z5 W
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
0 D4 C! L2 B# r$ t9 K0 B //////////////////////////////////////////////////////////////////////////& {( E' V I: K4 J
//////////////////////////////////////////////////////////////////////////
" n, F- ] b, _* n CInventorySort* pInvSort = new CInventorySort;* \1 W; \0 X! p& {. n$ Y z
vector <sItem> vItem;
w0 y5 X% z; x. n vItem.resize(MAX_INVENTORY);//初始化大小
1 F: n3 I: |2 z2 k6 _. t //////////////////////////////////////////////////////////////////////////0 r7 Z1 c/ `& A! P7 g; h# r8 }
//填充数据/ z5 L: u. i# m; o* G6 X+ [6 q! K
for (int i=0;i<MAX_INVENTORY;i++)
2 A; ^) F E, l/ r- E+ H- b/ E {7 \$ g- q$ N4 P( r7 e1 f" a/ _
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);+ \6 S- E9 |& s$ B& N0 w
if (!pItemElem)- @: d9 }( @, X5 Q) b0 G
{
- x; @; f4 ^% v! Z6 |8 P vItem.dwKind2 = 0xffffffff;% N q6 a7 G: t, E+ K0 \0 Q
vItem.dwItemId = 0xffffffff;
: o7 p) u8 ?# F* t vItem.nIndex = i;
% m3 v- C% X$ s: D; n7 R }else {
6 |7 U( D$ ^$ j' Y5 y ItemProp* pProp = pItemElem->GetProp();7 \7 a/ k/ o+ }( g( D
vItem.dwKind2 = pProp->dwItemKind2;
' {; ]* K! E- j vItem.dwItemId = pItemElem->m_dwItemId;
$ D$ Y4 B1 ?; S, f( N8 ]) T0 R vItem.nIndex = i;
' @1 M: }0 N6 G1 w* }6 H }
. m/ }" }3 z& q/ o) }; N3 f //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, y O) V: \" d8 [7 p
}
/ M, c3 j: g+ |3 g7 `4 W //////////////////////////////////////////////////////////////////////////& O2 r4 m, ^; {% E- n' g* @, \. `' U
sort(vItem.begin(),vItem.end());//排序
3 C) W* p v8 o" t //////////////////////////////////////////////////////////////////////////
" d/ n% r# w$ d# Z //交换2 N9 ~1 Q' B( \: l
for (size_t i=0;i<vItem.size();i++)
# n+ o3 t* K' l) q4 m' t7 f {
: ]& z7 ^ s4 |7 R) ^ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
* W3 ?+ ?- d% K pInvSort->Add(vItem.nIndex);
4 R) u4 }) W8 E5 d; ^ }# {) z3 Y4 K/ G3 {1 J- I
BYTE nDestPos = 0;/ h* j |6 W0 F( r% N, v4 F
for (int i=0;i<MAX_INVENTORY;i++)
; a% E* Z. ^' g5 E1 F3 |) N4 R8 K- e {0 T, d7 j5 T+ q0 {! |0 b
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
5 A& h3 E0 u Z) g2 z2 ^ if (pItemElem)
" j0 l6 S& \( }$ v4 N3 R; d8 ^2 L {9 j* D% ]- B' b0 n% ?" W% O
if (IsUsingItem(pItemElem))
# X2 k" L4 _7 n3 x( P) {6 |7 O, m: L) v {9 w( }' d) S, W3 B: Z
//这个位置无法放
' B' a) @: ?. S: }6 Z) w nDestPos++;
% F- D# V0 ?+ f' p }3 D$ r. L2 P0 G
}
6 ~7 R$ g( @# t/ B( [7 {1 M BYTE nSrc = pInvSort->GetItemSrc(i);2 C0 e$ L; E1 y: ^2 s
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
e; O! Z7 {- i3 [2 y- M8 s if (pItemElem)
8 V9 e0 d- r e6 s+ }: I$ o {7 S9 L( r' w& A
if (IsUsingItem(pItemElem))- T$ ^9 X( R& V/ c1 l6 r( l6 n
{
, {) R+ P, C, Q7 r9 e //这个道具无法移动,跳过
( D* \ }, M/ Z, B continue;
9 o% ^+ W$ s$ b5 l5 B }
: Q, N( K; j& @6 u) s. b }else{8 {1 G s7 |3 L! e
//空位置 不用动
" i) r# o9 I4 i; x& T3 V continue;, n- K: a- Q' p$ I' {
}; A# _- V$ W3 N4 @/ w
//////////////////////////////////////////////////////////////////////////& ^ J% i |) V* G* @
//开始移动
) m* Y2 ^/ _+ X5 n: M$ `9 x) t- e if (nSrc == nDestPos)* @) ~% C/ w- H; P. O8 V
{
) H q, H) D0 l$ ]5 P4 D //原地不动# ^; ?0 }' O& a. x5 N6 k; J( M' B' O
nDestPos++;
3 w9 L& h/ v$ S continue;2 ?; H3 b2 c( [0 X) Y& R7 I) m2 V4 _
}' M4 K }# f V$ `' s
pInvSort->MoveItem(i,nDestPos);+ M; U7 B( q8 L, m
g_DPlay.SendMoveItem(0,nSrc,nDestPos);0 u) a- c( V: [; g8 ^$ g
Sleep(5);
% ~. u0 r* A ]! q3 } //Error("移动 - %d->%d",nSrc,nDestPos);
. n5 I5 h/ `+ F nDestPos++;
$ V+ l2 |( ~$ z- w }: f" y$ f0 ]& B
//取第一个元素的信息( D! _$ a* V3 ^6 ~
/*9 K0 j" n; F' W& q% x
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
* t& n, H. B4 w+ t$ V$ P {
7 p; w4 \; U2 F Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
. T% C. y0 e, ?0 ^; Q0 E. @4 K g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
! G* Z5 c9 s. w- U4 M! t }
9 b/ t5 S, J: y */
, N9 u: V+ C7 u' {- S //////////////////////////////////////////////////////////////////////////" Z) d' e; \- k3 |) _& }
break;2 y# n7 Z7 W* U: y4 @
}; L6 q7 {; M2 U5 r
} 3 p# j1 z6 o+ H1 \$ I3 Y* v c: t
}
( ^9 d8 V$ m- s0 U* Om_wndMenu.SetVisible(FALSE);
: W6 a* q" `" E7 s6 B2 ?% [2 Y+ j3 e! s8 Z H
--------------------------------------------------------------------------------------------------------) r! T- A3 Q+ ~+ X) [4 q3 w* Z
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)1 o: }* E/ a9 [" j* J
{9 C2 ~# `+ j9 {+ c/ f
BaseMouseCursor();
# V$ O9 m' s. ?}
9 V4 y0 a) T) h在其下添加:
7 s. S1 k, k5 e" Z- fvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)+ ^8 j b, A. P8 v! |& M
{
) [' J. `6 J/ y# V. U( Fm_wndMenu.DeleteAllMenu();
3 z4 ?" j9 R+ @5 \- D. ~m_wndMenu.CreateMenu(this);, j2 l `. _# I8 h' s
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
9 K6 s, H+ d/ y. I6 r0 ?% ~( u" @7 Z
2 ?4 ~" [ F+ D1 S: _if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 G& I4 U. |0 f- |) W6 U9 ]' }{
7 s) T* M* T) R- }. J6 O L6 J //P以上级别才可以删除所有道具
5 D( |& [( Q" N, ]8 M m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");( w1 U+ f/ Z Q6 [: Y
}
% j) [6 ^6 ]0 @9 q& Xm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
* h! m, t- i2 k D9 T& [# Vm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
# O1 I7 e# C! Ym_wndMenu.SetFocus();/ R; T' h( _1 c8 z. q: }/ N& k; o. }& M
}! G" O$ A) w4 `# m- r! K
------------------------------------------------------------------------------------------------------------* j. f0 F3 J% `2 W0 R, n1 j1 f
*************************
3 L3 a5 x7 T9 y3 Q: o* E/ P) h6 LWndField.h文件
4 O3 t) `' r3 [4 q0 Y: x- {*************************
. ^; h6 R" Y3 R7 F2 ]" y2 x- M搜索:BOOL m_bReport;* \" t) p) O/ Q; q
其后添加:
" u6 G) I# d& ]1 `8 V- VCWndMenu m_wndMenu;9 Q0 K, \9 A0 I! f# q; ]
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);6 q5 N0 B, k9 x( ]
其后添加:
( z+ e% c ^+ L* g* ], l+ a5 A( cvirtual void OnRButtonUp(UINT nFlags, CPoint point);
. m) S9 k% i1 O3 S5 Z! d& Z" n! Y/ _7 B) d
& B$ r' N0 U# S0 \
* X; n3 }% N) p7 Y, B |
|