|
|
源文件中_Interface文件夹下WndField.cpp文件
8 {# b. w( v1 J+ C搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 E) W0 F# q; a N
7 y6 h, G# l1 K# x! T, g- Z7 i& Xstruct sItem
- j0 V% C) s/ S* S7 G{& u4 i1 ^2 p8 Z; @
DWORD dwId;" {1 O) H7 x8 s% z; V
DWORD dwKind2;2 U. O& |) ]5 ~7 y# o
DWORD dwItemId;
& h% u% H3 L( E/ N7 r/ q- aBYTE nIndex;- z0 v: L4 ^/ h5 N6 _, |2 N
sItem(){: H) B# Z0 a7 G5 |
dwId = dwKind2 = dwItemId = nIndex = 0;
$ {3 ^5 F9 \* y- Y6 v3 l9 c. E4 ^! S @}
. ]8 {* Y" r& I. z$ @bool operator < (const sItem p2)
1 |, l! `& `$ }{* w; h& W9 P9 J" G8 U; Z
if (dwKind2 == p2.dwKind2)3 b0 Z$ S) y) ~+ [4 N/ r b8 Q
{
3 {1 G0 e9 J. T4 v# l return dwItemId < p2.dwItemId;
2 B) }- U/ g6 ^, [) i* h: b+ y }else{
$ \, c8 ~7 x; ^ return dwKind2 < p2.dwKind2;' K7 v& ^, N+ y
}
' |- ^3 B+ a' d. j1 O}7 p0 S y, ]! b0 r
};
. x# C5 f" z$ k; t C6 Pclass CInventorySort
! Z# f8 P& E3 T$ c" x5 e8 Y/ f{( N2 R- N3 `0 c8 \" B5 b3 R4 L( c6 B* c9 s
public: \) ?4 K( B7 A. _# ~, y
CInventorySort()! N9 H2 A" L7 q1 E
{
0 o5 f1 o6 {6 O! c: F* M2 A6 s m_dwPos = 0;* ]/ @9 A) q( Q9 S
}. l: g/ B7 a3 j) n0 ?
~CInventorySort(){}" X! A3 ]$ S( N D; v% v
private:
% H! n: E# k7 ]* v5 Z8 T; ssItem m_Item[MAX_INVENTORY];//存放排序好的道具信息/ o: A, f" b! n9 U$ S7 k* w
DWORD m_dwPos;
- A6 x, i2 p7 N; m# ^! @) Y1 Cpublic:; |: h$ X* d* E5 E' {
void Add(BYTE nIndex)
1 `3 F5 c( P, I& [) I/ R8 ?$ V' r{
4 } Y7 K7 q; H+ ~ if (m_dwPos >= MAX_INVENTORY)3 c8 g9 }$ [7 r2 y/ ?, ^, D
{" S! ~" Z% M( T( `4 Y% A7 I
return;# b; [, C( P% x/ ^2 r k- v
}
" \: k2 s |: q- O/ X9 S" g m_Item[m_dwPos].nIndex = nIndex;
# M' ]* Q$ y- u/ p: Z8 G, B m_Item[m_dwPos].dwId = m_dwPos;% f) Z4 y5 b8 C! K
m_dwPos++;$ e# o$ @: ^0 T6 x2 g; y# q# O, m
}& t) f T) n X, u$ E j3 {
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
7 x) |: C8 e) c" r{
& E# g9 o5 v+ R% _/ ~7 F$ E for (int i=0;i<MAX_INVENTORY;i++)7 A- m8 f6 x& y7 ~' w- @
{
, f2 y/ _+ I% Z6 W; k# h' ^; b if (m_Item.dwId == dwId): n, Z. f( z; _5 h
{
( N) \" B3 T8 `9 }! _ return m_Item.nIndex;" O: p( @- n9 {+ Y
}
8 P) e: M) \7 p& x3 k9 j. s }# r) |/ F+ R5 R5 j
return 255;
% H- F- k! j* V! a+ \}
) ], o/ j( P4 T- m& Evoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
8 c5 w$ x/ Z# x! L7 @{
+ _1 B0 l) n* @: ]) A. m$ o' f+ l BYTE nTmp = 0;/ j6 _, c# t. c* u4 l& ]: ^# _
bool bDest = false,bSrc = false;
& @( H% h/ ?5 ?" b, E, @ for (int i=0;i<MAX_INVENTORY;i++)% ~% D: Q7 z. d! \
{$ C0 S9 F# _' }8 g% o1 V) ^ t2 K) t
if (dwSrcId == m_Item.dwId)
. i5 s7 I4 v; Z- r( k$ G {$ X' e6 C* G9 x/ G2 u8 W
//id相等 则 改变对应的dest和src$ O8 ^( o2 n" n% K
nTmp = m_Item.nIndex;
5 v8 I% u% J1 J+ U m_Item.nIndex = dest;% `* {- Y4 W! l3 u
}* z* B& v! ]7 {1 y, [+ X
}! Y' U4 A& I8 o6 R. @! e; H
//临时数据保存完毕,交换开始
! ]! ^6 V9 d1 H* B8 y for (int i=0;i<MAX_INVENTORY;i++)
. J1 e* @: G5 O% v {
% r/ X. H3 W: \# u if (dest == m_Item.nIndex)
, ~2 V) s* f( X$ v {
+ H# u4 f7 g' n8 j1 N R3 q //id相等 则 改变对应的dest和src
# f) v7 s/ t) s$ _6 Y! L m_Item.nIndex = nTmp;
* N7 |6 z* x6 ^% {2 z! q }: H5 N" Y* C9 p& ` M s
}
, y4 [' ^6 s, L' y5 L% L" m8 x}$ j% b7 T. ^0 ^7 f1 k4 C S
};% d* t$ l! h: w( Y
-------------------------------------------------------------------------7 C( q' O7 k) L* Y" M
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 g; d, f; G# x
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
4 V; W9 i2 G( T" G, f, ~紧靠其上添加:
2 n2 O k8 w; I: ]if( pWndBase == &m_wndMenu )
& P! b) a7 W# f6 Z! l6 {{! J+ n9 `8 y6 R
switch( nID )
% y+ L) `* R7 o: d. I$ T- Z* h: m1 } {
3 {+ w! ~+ U+ i' G( `- o1 W. m case 2:* z& e2 \7 {6 ~7 U5 S3 C7 c6 P
{
( T5 ]) {; |9 @ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
! E7 O7 T& b" t4 Z3 W5 [$ H! B if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))7 n8 Z1 t: o" k8 {, p6 w- o1 G
{0 J9 w0 S* n* F$ j" t' `: b
break;
0 _% `3 _& B, ?7 w( K' q* C } ~+ q5 V2 r0 F! w! k( R( x) W* i
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)8 w- ?: t) R- ?0 n. c* k, B; V
{3 w, Y' Q4 X: m) Q) ?, s5 ]2 F+ x
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
8 a$ `: A1 ?2 f if( !pItemElem )
! I% g: q/ o1 v% A& T1 y continue;
' \ p, e" E( Y* o/ e, T0 u if(pItemElem->GetExtra() > 0)
+ N( ^/ p) K5 }/ B continue;
) \9 V- X9 U; B, j if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
$ p6 v/ W9 B1 m2 l continue;' v) g6 E4 H; }' s
if( g_pPlayer->IsUsing( pItemElem ) )1 z& B1 D+ j( p, ]( b
continue;& }3 j$ m* W& d7 s- ?: S, H; H
if( pItemElem->IsUndestructable() == TRUE )8 p' Y% j; r. X% L" ~3 Z7 O
{
& B+ F" j$ }% X% z" k3 k# l$ z g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );5 P3 W* {" G8 }) V
continue;
( w* s# W: B% i K }0 P. q' \$ O+ k! R1 c
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);" Q/ Z5 u; e b9 u2 N& ^
}
7 s( D5 K: N9 g6 C4 U' W break;7 I# F [: P3 b a9 S
}
" p' Q8 O% ]6 z1 o case 1:
# g/ _& s3 L+ t+ u: L- P {# i- ^8 k' a4 E: ~* H0 b% v; @
//整理背包& Z2 e) X$ i; v F+ K2 y
//////////////////////////////////////////////////////////////////////////) w- E5 Q4 t; l/ X% S& |
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
. E4 j R* l. @+ G //////////////////////////////////////////////////////////////////////////
; i5 @9 |! W. z' `: N7 H$ J //////////////////////////////////////////////////////////////////////////
% [0 E! c/ ^! J* j0 Z6 I2 n4 B CInventorySort* pInvSort = new CInventorySort;; p0 X3 q* w J5 j0 U
vector <sItem> vItem;
- {4 K! z6 y7 H. o0 e8 {# d4 b0 r vItem.resize(MAX_INVENTORY);//初始化大小( R. O& ~, y' R2 i- R2 f3 M
//////////////////////////////////////////////////////////////////////////1 F. U5 x9 ]6 l4 ]+ [+ U
//填充数据8 \& T/ o, }$ l" M0 ~. l
for (int i=0;i<MAX_INVENTORY;i++)
# I& }! R8 f. ?5 N4 f {9 y- P+ f$ _# D4 l9 j* M, O
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: V- G* q( _' G& l* X$ R4 ~; M if (!pItemElem)
1 } Q/ p& B4 L( U3 u/ V {1 G! q1 x6 l( ~
vItem.dwKind2 = 0xffffffff;
2 }7 H! ~. a, B5 {( T vItem.dwItemId = 0xffffffff;' ~- g: l7 j2 W! F* f1 ]8 T7 j
vItem.nIndex = i;
$ |9 w6 j& m& f" f& s }else {
7 g+ \& w/ K/ n9 C0 N4 \' c ItemProp* pProp = pItemElem->GetProp();- |0 R9 z) K& i; `8 a) Z- |
vItem.dwKind2 = pProp->dwItemKind2;: C$ Q% E& c+ s, V8 N$ Y2 X1 Y
vItem.dwItemId = pItemElem->m_dwItemId;
' p7 K1 M! q3 ` \: n9 C vItem.nIndex = i;# X& f7 A, N0 Q$ v( k1 U
}7 C* R- [- ~$ g/ W, J: V
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);0 b& s8 V2 t. F% `& [
}! N9 H5 w6 n. ^ g
//////////////////////////////////////////////////////////////////////////! M l- q3 O, Z
sort(vItem.begin(),vItem.end());//排序0 }; {* h% t0 O# F9 i6 P8 x
//////////////////////////////////////////////////////////////////////////
! f+ x+ O1 s7 l8 T //交换4 C5 ~! Y/ u3 f1 V
for (size_t i=0;i<vItem.size();i++)
" q7 D0 `+ s p {
/ V; I R- w8 R; Q //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);# d$ z$ d( d y8 y
pInvSort->Add(vItem.nIndex);
, n# y1 x) Y: W. [7 g& Q& a }
. u9 o5 W# @7 K0 { BYTE nDestPos = 0;! @+ k- |1 \$ a& u
for (int i=0;i<MAX_INVENTORY;i++)0 h' L1 h: c r! b8 s# ]! z
{
: U6 @- _0 \7 K2 Q0 H: O CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);0 ]" S$ i( W# @
if (pItemElem)
% U5 m1 A7 T) ]5 T {5 {+ V5 d$ n5 D4 m7 @% M
if (IsUsingItem(pItemElem))
" ` |4 I D0 b& {& a2 P {/ y2 x7 m7 ]- C! V, C! C# ] B
//这个位置无法放6 Q4 k+ i( J2 |) f
nDestPos++;
9 Y R1 f5 @2 A }! y' g# r' H/ F' s! d
}
% ]" u/ n+ L6 I$ I BYTE nSrc = pInvSort->GetItemSrc(i);
5 J0 e) O1 w8 h& g- _( k pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);* J X) s8 w8 I3 Y
if (pItemElem)* D/ N7 G+ X0 J1 p8 q
{
, {( n3 B" l3 s6 w+ E if (IsUsingItem(pItemElem))* ~/ ^& `9 j0 [: z* D" f$ H4 s
{
$ k* U' j6 U5 |3 `5 O: q' Y/ k //这个道具无法移动,跳过
9 w' X* M0 U |& f continue;
: p" T$ e# O+ d) ` }9 h* ^6 K) [8 K
}else{
, D5 H0 F( E$ H* U6 w G //空位置 不用动- R9 z2 h* _) s* J4 C
continue;' }5 e& T% l- ?
}0 S% p. g' s& T( I
//////////////////////////////////////////////////////////////////////////, M# Z1 D" \" q3 k7 {
//开始移动
: J; ^# g! |3 q3 E* j if (nSrc == nDestPos)# v( e7 i+ j9 F* `
{
! b b" w2 u6 ]5 R //原地不动
4 r$ ^& }5 R* r nDestPos++;
/ z8 N1 _2 W4 j5 x. e continue; M" w: p3 @* g) A1 D$ I
}
$ o/ ^2 @8 c$ R1 v( [1 R# g pInvSort->MoveItem(i,nDestPos);
! u& x9 P% o$ H' d g_DPlay.SendMoveItem(0,nSrc,nDestPos);
& k' G1 }; h' g$ P2 L/ o; m Sleep(5);1 x7 K( d7 j9 F+ ~8 f' ^
//Error("移动 - %d->%d",nSrc,nDestPos);
' S( B4 h& J7 r' ?# o nDestPos++;( [% ]6 D `; k1 y2 r
}" a: h4 M d$ M- k* v5 C
//取第一个元素的信息# `$ o5 S9 o" S4 M5 l% p% L
/*
, H$ C* G O' T+ ^+ B0 M if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
( ~ ~# v0 q N$ G {, g' G4 A8 b. b+ f
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
/ y6 C! [3 V( I; ?2 ^ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
" l" N7 m& }1 v, ^, } }
/ h( P& ^$ w5 d1 A5 t+ G */
& z+ Z9 r. h# n9 l //////////////////////////////////////////////////////////////////////////( u6 a# y9 h+ y$ }! y+ q9 _
break;9 t# T3 o: n" ]( l5 x; v
}. o9 f# j0 s& q& u* ^# l, b. g
}
6 E5 I8 I( D) `; i* C- k4 B}' r4 E1 ?4 }& y ]* ]
m_wndMenu.SetVisible(FALSE);
) l% W) V \1 b- b
_" X7 T C6 C7 ?--------------------------------------------------------------------------------------------------------
, c6 X4 q4 V! }1 ^( F& E搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point): z1 u& \: M2 C4 @& \& T/ u( Q* Y% e% O
{$ p% I# u* m: u2 K5 R# v- U/ ]
BaseMouseCursor();
5 s- T0 ]# j: f; }# }}
6 ~: H/ b4 V) |) Y在其下添加:
( D8 z0 _* ?& ^; |void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point), y, Z- z' r9 p4 }" @8 @$ d
{
0 I& a( M! m' m4 K. bm_wndMenu.DeleteAllMenu();
; i3 K1 L- K# P/ E/ u: Q7 {m_wndMenu.CreateMenu(this);
5 E5 n, U, W8 Y( F* vm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");- {% K6 n* V9 Y5 v0 Z/ o3 }
. U* ]7 p& Q. Kif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))$ l2 H& z$ i) Y" x" R$ I
{
! @* S$ F! J- d8 f$ R7 v, }& ?, y9 }4 j" z( U //P以上级别才可以删除所有道具
+ }% L) j1 A; ?) U! } o- G m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");4 ~& R5 @/ |3 y% S' G, ^/ _
}' D4 Q6 ^" R/ A4 \* t( j' e
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );: X8 e- R' {+ |/ Q5 l
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
( N- q4 R: `( |+ s* Y4 k- jm_wndMenu.SetFocus();
" \/ z$ J; b$ A3 l, g}' @3 V+ ?5 k6 `3 P; y* i; E, b$ S
------------------------------------------------------------------------------------------------------------
4 X1 ]0 r6 F- W' r* N1 G*************************
! w& t% r" [% K+ z8 u" ]) W0 cWndField.h文件0 O7 l5 y1 \' o. ?1 _
*************************
" C* n; q" N0 i0 d! ~搜索:BOOL m_bReport;4 l9 x6 L5 ~; _6 k. f
其后添加:" g) o0 c4 G$ ~% j
CWndMenu m_wndMenu;$ o% k/ |% n I! X( S
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
4 |% i& J. R* f( |1 ~1 Q其后添加:7 v& k4 \" P: b" O# ?
virtual void OnRButtonUp(UINT nFlags, CPoint point);
+ ?- i- H: l3 X w2 m
: t4 b/ ^4 R* ~& V: _+ H- @5 I7 B& ~3 h6 \
|
|