|
|
源文件中_Interface文件夹下WndField.cpp文件
2 m6 t5 u: V/ B, n搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). y* B% W2 m- l- q4 W& F- k8 L
9 K( w& w+ m8 r# g4 a5 Wstruct sItem
! }" ]- V, m6 Y8 }{! G! Q7 Y- v4 Z9 j3 w2 J; Z
DWORD dwId;
& n5 t2 |/ P4 s4 c* `- cDWORD dwKind2;
6 F# @$ Y8 J2 L: N# O' z+ a7 hDWORD dwItemId;
5 C2 |, y; K# d8 K+ yBYTE nIndex;
! j; j7 y. G, _* ~2 tsItem(){
* E/ ?" d4 z: t5 i# A8 o: { dwId = dwKind2 = dwItemId = nIndex = 0;
) J. g7 f$ u. K9 `}- O% ?* G9 n0 I8 [1 L. R8 V8 b
bool operator < (const sItem p2)) V( g* {) o7 n# s3 |/ f, |
{
) S9 q3 I: e1 M& Q1 T3 M if (dwKind2 == p2.dwKind2)
+ ^. z2 h% K) e% D; }0 U# b$ z! A {7 L% t0 z _+ d
return dwItemId < p2.dwItemId;
; L9 `6 g- f/ d9 x }else{
. F0 X1 A ~; \& X2 m! k1 V return dwKind2 < p2.dwKind2;
. d" a0 G9 ^( S4 D$ @ }& w& Y0 x* y0 u* a/ V p5 {* s" w
}2 Y& Y9 t/ {+ @0 E8 f/ P' }5 Q
};0 r: b4 s' A6 L, ], X
class CInventorySort- ` z$ o0 F5 ]
{
3 C/ o }8 _4 p Qpublic:# W0 }8 R+ L v, O# q% L! r
CInventorySort()
8 U' y7 _7 b; o; X- ~{
( K$ o6 y) Z% I$ B- M* w. C' O m_dwPos = 0;
* f9 O- b4 p$ \: ]7 L}
% p& v5 m) I% ?- _1 G" N9 k( X L~CInventorySort(){}
7 w! z2 W8 G0 P/ t- C) v0 ]private:/ g3 b% F7 R# B* s; I& k
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
, _: q: R6 z/ t# uDWORD m_dwPos;7 @; J: h& g+ i, W/ g6 { z
public:& e, k3 M% l. J0 D, o% f
void Add(BYTE nIndex)+ J" l7 p. [ ^9 T p, h! W( f
{
5 U# ~( F6 x8 Y2 i if (m_dwPos >= MAX_INVENTORY)
6 g8 d( Q4 F% L/ t: D9 L" F0 @, p {) j' p: K2 _: x7 K* u6 Z o' O
return;% {6 @' V/ y$ Q3 {, p
}
" ~" }6 H" S# X& y m_Item[m_dwPos].nIndex = nIndex;
% m, ?3 C+ u+ [ m_Item[m_dwPos].dwId = m_dwPos;/ ]: F" w4 W6 O# E5 ]: S
m_dwPos++;7 R+ [' H5 \! X. l2 k8 M
}
2 Q5 G' a; Q5 {, r( {' T8 _BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列# x# r/ U$ w% G. w
{7 C/ u N8 H: N
for (int i=0;i<MAX_INVENTORY;i++)
- n$ [ ^8 h' ~7 Z n {
) q$ V: t" ]& u# p if (m_Item.dwId == dwId)3 v2 H9 U$ Q3 i* P8 i
{' {: u5 \& p _( ]1 U7 |: z- D) c' ?
return m_Item.nIndex;8 j) P/ A O. _/ ~4 }( M
}8 i/ g' D, S" V
}1 S S g+ ^: ~4 g5 F
return 255;
* P% ^0 _1 f3 t! y( ~}
1 K* L( B1 }" |. Vvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置; C) l9 {3 b; V0 B; v7 |
{
3 x9 E' m7 \9 |" X& _9 X BYTE nTmp = 0;5 L4 R v: w" q9 G& ^
bool bDest = false,bSrc = false;
" D5 m, W6 }) ~& ? q for (int i=0;i<MAX_INVENTORY;i++)$ K) t( z: U( K5 @, U4 I1 e5 ?. \, I
{
9 ?( b7 P4 B' Q4 v" V R' j3 C3 A if (dwSrcId == m_Item.dwId)
0 k2 n& i5 {" e9 k: b: e5 ]' l' b {* v7 g1 @7 V/ X+ O
//id相等 则 改变对应的dest和src+ ^6 ^ w& X2 T2 ?! i. u* I
nTmp = m_Item.nIndex;
+ S8 u& J. m8 x- Z8 @ m_Item.nIndex = dest;
2 m- x6 L/ {1 c8 B) V }9 Y1 Y' T' o& Y6 \) S; G$ f
}
4 E& c* s1 o2 h( g# @/ x3 u //临时数据保存完毕,交换开始: I" i, I. g2 _0 ^
for (int i=0;i<MAX_INVENTORY;i++)# O' D( m+ e! P# F
{# ?2 L4 Z) e8 M/ s
if (dest == m_Item.nIndex)" s# B7 m S- ?( V/ b+ k# ?
{ u6 w$ A/ U7 D) J; Y2 ? M
//id相等 则 改变对应的dest和src
+ `4 C. i3 F2 ?- j m_Item.nIndex = nTmp;+ A! C6 h5 r( Q4 W3 C! Y
}" m, ]; m. {$ v" B" x
}
/ |% I' w- T* Q+ c; P+ I7 `}! x7 z& w4 v: o( ^, D7 P9 ~
};, c9 ?* U+ f# V4 i
-------------------------------------------------------------------------8 g" s- w z3 H4 o
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 O& Y% G& I9 [$ h* B& l* k搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
3 G, K! ]' N @2 e5 q紧靠其上添加:
/ w7 D* M; T) S( S9 `, F" L! Vif( pWndBase == &m_wndMenu )
9 y& m, ^+ }" L4 u: F- t% ~. I{
2 {$ m, M. l! Q' F: n9 n switch( nID )( ?& F# l/ k( ^: e2 U
{
4 q) m- z, c" J) v5 p% M2 \% y case 2:7 M2 g& N v' Y; g
{
) J8 z& R0 Y' \( d; K4 {" f //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);% u9 K$ N; t! `5 m; s" L5 |; v
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 `& R2 C! V9 w: @6 c6 o3 o: Z0 ?2 ^! u {! X1 l7 K0 A. q& O
break;+ p# Z( K6 { R
}, v3 q+ a% y' H4 L" p
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)# b# [. s5 n8 o: O& v6 P
{$ Z- s2 `1 q! F2 C
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! E# R9 X. t$ q2 o% h: l
if( !pItemElem )
, N5 j) V' U3 S& w) a+ _1 W% J. y: _ continue;0 z5 m5 I# p" z" Q
if(pItemElem->GetExtra() > 0)9 J2 `* z' T# p# t
continue;
, j/ z# H7 ]8 Y+ J& W, c& F; E3 ^ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
( E; ~9 `( X" a: }* C: s) `# O, e+ m* k continue;
" g% E; m- a/ ?7 K3 l. t* ?5 q if( g_pPlayer->IsUsing( pItemElem ) )& y: l% P4 x+ V& C
continue;
c" B/ |" t2 T# p+ Y& U4 I) p if( pItemElem->IsUndestructable() == TRUE )& j9 r% A; m. K# {/ M% v
{
1 R" H( b% H2 y: J5 s0 {# d# d! I g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );- U; R" z0 k, k
continue;, P! A3 |$ r8 z# B, J' o6 e
}
) w p% i: k0 M1 {, W* f0 X g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);2 M5 h- K9 Y3 A D; ]3 C) |* i
}& N( q0 ], W& U- m8 B3 r+ {
break;5 B9 C/ e' j! ~' Y1 [: W
}
, `6 |7 x/ r. d case 1:% [5 G$ K3 O9 h, F1 P$ r P
{
! t3 d& W0 }: R, G0 P% s //整理背包" |# q9 }5 @, M3 h( O% T3 j
//////////////////////////////////////////////////////////////////////////* I, O2 d; u" _3 E2 x2 _
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );8 W7 s x" Z, \# d6 E5 l: w5 X
//////////////////////////////////////////////////////////////////////////
/ s4 |/ ^# n+ ~" l' q8 o //////////////////////////////////////////////////////////////////////////, r- |2 N" }" x p
CInventorySort* pInvSort = new CInventorySort;6 S. p9 d/ m1 H ]7 S! e
vector <sItem> vItem;
3 b1 @% |$ A2 J% k* g8 v! b L vItem.resize(MAX_INVENTORY);//初始化大小- M/ A6 x. s7 X _1 k
//////////////////////////////////////////////////////////////////////////
. B# N" P- F0 M% f0 K //填充数据
" s8 D3 `6 w8 I+ r5 W) c. a for (int i=0;i<MAX_INVENTORY;i++)) h. J4 s$ c) ?
{7 f& ]: E4 b) P. U* x' s
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);; J! d; B' w* K- b. X
if (!pItemElem)
+ U" h \1 n% o {/ {/ {/ O2 D3 r5 F
vItem.dwKind2 = 0xffffffff;2 K; {! o- P: F3 r
vItem.dwItemId = 0xffffffff;5 T6 F9 s5 e+ Y" O4 A! t
vItem.nIndex = i;
5 Z8 J3 A) E' g& O/ O! `+ X x }else {
) e" x; }4 n) n) C ItemProp* pProp = pItemElem->GetProp();
1 y: ^2 ?7 d7 T5 M/ I vItem.dwKind2 = pProp->dwItemKind2;
7 y5 K! h5 E$ Z; U. \ g vItem.dwItemId = pItemElem->m_dwItemId;
. w6 n L( Q( J/ ] vItem.nIndex = i;
+ T$ l5 @7 S$ g: ~ }2 l0 |# L. z: o' E4 e0 \& d5 o, \
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 q* Q# W# F) R, J3 ^$ ? }
+ o0 T. L5 {. ~7 N. E3 e //////////////////////////////////////////////////////////////////////////! E( M% I2 I& ]4 `3 Y% _, O& h
sort(vItem.begin(),vItem.end());//排序
' G- s, y4 }7 p& y! u' c/ l /////////////////////////////////////////////////////////////////////////// E: l( ?! l; u
//交换
# {/ V6 l5 @' E, z7 c. K; D for (size_t i=0;i<vItem.size();i++)( u! A4 f6 m: ?& o# `, \1 C4 F
{
1 U+ q. r/ w2 m" h: m! S //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
I( {5 N0 H' [8 Y4 _* E* Z# R4 o pInvSort->Add(vItem.nIndex);
, m3 t0 {- @; [ X }
+ o0 I, c" v# {: q& E BYTE nDestPos = 0;. R7 P, ]( g! v* ~
for (int i=0;i<MAX_INVENTORY;i++)7 ~9 G+ [5 a/ t
{
. s! B+ U3 D9 W( g# _ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);+ |# s8 @7 I( m+ l, n% F# v [$ D
if (pItemElem)9 h* j% r/ p& p/ @
{
2 J' A! w* p2 _: M) o1 L* W if (IsUsingItem(pItemElem))* P* E# J4 @. P8 T$ q t3 a
{
9 Y2 D3 B& |( S1 E //这个位置无法放
5 ?4 @: ^! M Y. w3 }- e, H- b# D nDestPos++;
9 ^% i" Z, k5 L }
3 Y' |4 Y y5 T }
e9 x- n6 K! t Q BYTE nSrc = pInvSort->GetItemSrc(i);# u2 `; S" c, W+ H6 j. y/ P: C
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
# P6 p& Z+ V+ b: t if (pItemElem)
" y" J9 M/ s8 \! p/ P" B {+ n& b% h! Z6 u% T i
if (IsUsingItem(pItemElem))
! R- r* Y$ P G" P {( X& ?' t( S5 ~5 I
//这个道具无法移动,跳过
& H R5 Y2 p# O" c" d. s continue;. `5 |5 H9 G( M/ [2 ]& o) [
}2 ~: b/ `5 e+ S
}else{
3 f6 E# M% Y) X8 @: F0 \/ ^ //空位置 不用动' c: D2 T d" B8 B$ w! ~
continue;) ]" r4 o/ w$ ~. r* `( b ^
} B, R3 C, [3 t$ M X; A# j9 ^2 [$ {$ J
//////////////////////////////////////////////////////////////////////////
: C4 O0 ^5 D! F( l8 q5 c# m% a //开始移动
& X1 u4 w# `: n4 d( E) Q if (nSrc == nDestPos)
8 K) _) T2 z+ [9 K' |$ C6 @$ l7 ? { Q) A' l# W/ r& \: |$ ~
//原地不动
" ^9 W% r. @- ^/ d5 R" J5 Z! _ nDestPos++;0 b2 B! }5 _1 K
continue;
5 {# W# f; M% f$ W6 D }/ c! `$ f9 ~. y, J9 r
pInvSort->MoveItem(i,nDestPos);$ U4 j' _9 h1 `" l8 X: w9 Z% G
g_DPlay.SendMoveItem(0,nSrc,nDestPos);& d }/ K$ ?9 F) K! X
Sleep(5);
. I+ H& B9 H2 R$ @ ~& a: S //Error("移动 - %d->%d",nSrc,nDestPos);
& C& [, l! \5 I, D nDestPos++;) N1 R: o; p; T3 D" {2 e+ P
} [: m0 v; V' g' ~
//取第一个元素的信息
' s# D. J, [" C) n6 [6 ~ /*
2 {" M" U0 |. q4 `9 L5 E if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
3 ~; B! H0 s7 }* _: f# ~5 p: b {6 i4 R* j! x! H" O) ^
Error("Move - From:%d,To:%d",vItem[0].nIndex,x); i+ ?- g/ r1 O& Y( t$ D- a, \
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
1 l1 K" p+ `5 d7 ]4 G }
& Z" J& ]. D7 s- e8 [ */
9 M0 m! O2 Q3 [4 ?& o //////////////////////////////////////////////////////////////////////////; q! z1 M+ Y6 F) R% o4 g: B$ u: b
break;
1 a' f8 t C2 }8 D- k) \% i }
: j) `1 V5 H0 Z& r6 |) s' r } 9 {6 I' `( {1 C
}
5 [+ l1 B$ ? A J! Em_wndMenu.SetVisible(FALSE);7 c7 d( O. `; e
0 A9 \2 n2 W4 n% G. A! x--------------------------------------------------------------------------------------------------------
: H! P2 ]- a0 w# ~2 R搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)% U# C8 S- D5 X% ]) M. x
{/ Y5 e Y: s/ Z: L$ h: r
BaseMouseCursor();
8 P& K0 W8 Y& v' X3 G$ P}% O5 J" D6 [2 g+ W" f; [
在其下添加:: A6 Z; ?% D5 F( i+ Q
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
* g( D, `; ~+ U# V7 Z' X{
$ W& F, k Y( P1 j2 m# w9 ?/ M3 D Em_wndMenu.DeleteAllMenu();
2 e) _- U* b! ~" cm_wndMenu.CreateMenu(this);
s/ o7 A! ]0 Sm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
( g; \) X% n4 }+ D$ B$ B( |; i5 U
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))7 U+ W' u7 i6 ]0 o0 {, H
{1 w: ^) l$ D: X x9 R8 r
//P以上级别才可以删除所有道具) c; }; d& }8 d7 z6 `& |
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");$ i5 d0 O+ I0 ^
}
2 {4 m y$ ~/ x7 {" Lm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );; i" S/ [& `1 k8 N+ R1 p' w- g
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );' F8 f3 A/ P% ~$ m' h$ P, Z( l1 {* X! r
m_wndMenu.SetFocus();) _5 y# N" _0 v n3 b' g
}
, q U, Y! b7 v$ l& _8 x5 a* }2 {------------------------------------------------------------------------------------------------------------- d; k+ l* q7 q$ R
*************************
$ v m5 R$ `7 J. _; l0 r5 s( TWndField.h文件
. s4 x" S3 A, d. m8 ?*************************
% E3 ? V, T9 X# v) A搜索:BOOL m_bReport;; d( H, ^6 N$ a/ V& s; U8 d& c
其后添加:
1 I+ s- A4 k4 j( F4 V) d) D; TCWndMenu m_wndMenu;
* T7 D2 C" m/ n; D1 s7 Y搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
8 h6 C4 Q/ _+ E) L1 q$ J其后添加:" f2 l9 e. H% T, v1 u
virtual void OnRButtonUp(UINT nFlags, CPoint point);$ T/ a1 }; q# t% t/ {2 c r# T
+ k3 I3 M1 M$ W: a6 [ S0 E; A7 B9 c( z) t J9 V
|
|