|
|
源文件中_Interface文件夹下WndField.cpp文件
2 W$ h7 l5 @9 J- b搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
# ~* t5 L* l' d$ k O6 W) P/ s" [" @& ]7 u- m
struct sItem
+ w: K) D7 D5 Z" }{7 W/ n; M: `& m* U
DWORD dwId;4 e5 f. ~+ R9 P
DWORD dwKind2;" T* Q# m7 S0 w) b! l& r
DWORD dwItemId;
$ H8 ]" b0 i0 NBYTE nIndex;0 t! L! [6 Y3 g# E. @7 g
sItem(){ V; q' @; D! V4 N
dwId = dwKind2 = dwItemId = nIndex = 0;3 H6 Q* B" F/ {- \' V6 Z. L: ~
}1 ]# _8 B9 S `# z. L1 ?' H8 K
bool operator < (const sItem p2)7 G9 P9 N* s- s J. }& n; r- ?% ?
{4 V. {3 C4 A( t3 ?: m, Q
if (dwKind2 == p2.dwKind2)0 Q; b: L9 {" ?5 Q: V2 _( ~
{
- _$ Q# {& G& a" Z3 e% l; B return dwItemId < p2.dwItemId;
- `/ p6 e0 S! q' k3 Z; E4 ?3 a- N }else{# `) ^! `. D2 x- K
return dwKind2 < p2.dwKind2;' J1 I! {/ Q. m2 M
}
! K4 Q' o. x2 \' Y) y( n" G- C}# N0 w( K& y* V# T
};8 x' d1 \0 {8 M0 H
class CInventorySort
- T4 \; ?7 W/ I* c; ~{: w$ ~2 K! e7 O
public:
1 Y0 F; j' }9 |! ?- c4 yCInventorySort()
1 Z# o. h" @0 m/ h/ N& i{
5 v! b. n. _0 [, i4 f2 N m_dwPos = 0;
4 ~0 n) H! a$ K( Y}0 d9 D" Z* ]9 ^' A& m6 I# N; s
~CInventorySort(){}; v7 D1 P8 g& h0 J& c
private:
- c( b6 N/ N2 F/ u# fsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
! K: s: h9 y) V8 z. z0 `0 f0 k6 sDWORD m_dwPos;4 l* x4 `8 d) a. B- x
public:6 [' T8 `2 }& `
void Add(BYTE nIndex)( c7 M! T) N7 I" N
{
& w% v5 [0 m: y1 N" y5 q. Q if (m_dwPos >= MAX_INVENTORY) _. i! c: L- R1 m7 Q! N9 S6 G4 y
{) U5 I8 E% _- a2 D' L! \
return;
$ ~) q4 E8 v; m2 d } G3 ?( t8 X# e' ~' R- X4 X. G$ B
m_Item[m_dwPos].nIndex = nIndex;: Y0 q* [, L+ O' _7 {# a) m6 w# \
m_Item[m_dwPos].dwId = m_dwPos;
" W" c7 O# ~/ N" l& d$ e2 O1 j m_dwPos++;9 Y- X! N; [' q; y- ]
}
R9 z6 p& W/ R" } D# h, s7 bBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列" `; G6 X+ V \( B* ?
{) P& P" n/ O3 x5 R$ K
for (int i=0;i<MAX_INVENTORY;i++)7 I8 }2 _- V6 \/ E/ M6 I) r
{
+ `, t0 U7 R' P/ ^" Y if (m_Item.dwId == dwId)3 W8 o1 R% X K8 y- @4 z
{8 H5 a% ?! ]( d g2 y a
return m_Item.nIndex;
) P! B8 e, S- ~- I! T# } }( `0 I* y3 k; [1 ]* H p
}& f/ m0 a* m1 y& S! `$ m
return 255;
- d6 ]* X( k3 L8 ~}/ |3 L. f1 i Z) G
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置7 h$ X1 Q/ K7 `
{8 d1 e. T6 c1 v
BYTE nTmp = 0;/ J) V9 ?; {! k2 q' V) U
bool bDest = false,bSrc = false;* ^. H/ t( ~ A
for (int i=0;i<MAX_INVENTORY;i++)
7 J1 a; K( q, ?- v" | {
! x5 ]1 p% G2 y* R/ x if (dwSrcId == m_Item.dwId)
& T+ Z B- R4 L7 z$ L0 v {
: v5 {( \$ Q( J D0 c //id相等 则 改变对应的dest和src) C5 O7 f! M2 q) Q7 b6 @# [
nTmp = m_Item.nIndex;1 q/ D$ X2 R4 u" Z! E3 @: S
m_Item.nIndex = dest;
) Z1 E3 w! H- q- b( j) u }
1 L Z" r! W9 M* t' i7 }) q; W+ j }' Z" W4 T" A, U8 I6 R; d
//临时数据保存完毕,交换开始3 V1 i* d3 y0 Y6 d: m' I
for (int i=0;i<MAX_INVENTORY;i++)- F4 d: H3 g, R+ }
{
6 R! G) u% [2 v if (dest == m_Item.nIndex)9 `7 D6 R1 H# r8 D: K/ t+ D
{: o' E% h5 }6 C( v3 Z
//id相等 则 改变对应的dest和src2 n6 ^; T/ l; V5 q# |# V
m_Item.nIndex = nTmp;4 Q* v' S( h+ T2 m" u
}1 L H# x! b# L" Z8 K( K5 r/ f
}. n3 _4 K! |' @3 ~6 {) I
}1 Y8 c& p P9 W7 W/ D
};& A8 a, y' z) n) q6 x
-------------------------------------------------------------------------8 `2 D- G3 z% t3 @
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) E4 L W! t5 m! K搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);0 ~9 @; }! c& N" z9 `
紧靠其上添加:7 D [) S8 L/ B: \$ @4 m
if( pWndBase == &m_wndMenu )% W3 n7 w. D7 ~3 [: O
{, @ F/ {1 F4 d. k% ^
switch( nID )" z! q) H9 `, H. b& _
{% U+ g5 H' y' x& \% k2 Y/ h8 _
case 2:. R( [* m( ~2 ]- ^( a. \
{
6 j |$ f+ ?# a //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
6 P% M, F- L7 ]/ d6 z# O if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
' [1 b$ n9 n8 s* {8 q' N% [: n6 ` {" ^; X$ @' O4 ~; b
break;" i. K4 E4 a0 N' e' i
}
; Y; y* D8 L. p for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)# T9 c8 ~( y* @! I
{$ c- T# p% C2 e
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);8 q0 {+ F- G3 r2 U* p
if( !pItemElem )
/ L- X6 z7 v3 l/ k5 W( W continue;, W: v( R w9 n, c7 Y% m& w
if(pItemElem->GetExtra() > 0)
$ Y5 |" V! O% n7 }' c5 g2 b/ T: x+ x continue;5 M+ y& @; }; _1 V4 A
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) " c" d' {0 w2 z w# _- a
continue;6 B0 [- p* \# M. i0 s1 F) U7 y6 M
if( g_pPlayer->IsUsing( pItemElem ) )1 B1 ]! M6 |9 c
continue;
5 W+ G6 l% `( ~2 a) u! t if( pItemElem->IsUndestructable() == TRUE )
; D& B# k; ` g5 b {% e. K* t7 o! L5 D a
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );, U4 ?0 J! X$ p& h0 H/ g2 e2 ?
continue;
; H+ ?* r) y* ]7 F3 y6 T( Y; C; @ }0 E8 Q* ?7 H# u& S
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);; C* X% y2 n( p) }
}2 c+ `( ^/ [. k# Y. _+ F" h
break;
4 Y& j" W8 D* i* q% Y' [3 ~ }
% G: A) d0 t$ d- W& W. Q case 1:
# f4 ?9 y" O4 h' _) R" y0 {- I {
7 b: [. q) f1 E" Q& t //整理背包
" q1 P& p: Q& [( k4 p ////////////////////////////////////////////////////////////////////////// C* P* A' F) ^/ Y0 N q
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
2 W a5 I+ ~$ Q c) ~ //////////////////////////////////////////////////////////////////////////
9 U) ?9 o9 e& e: V6 O+ e0 y" G //////////////////////////////////////////////////////////////////////////2 m5 z* A# O! ]% e/ ?2 ^ b
CInventorySort* pInvSort = new CInventorySort;; L, @7 q1 g; P* W$ ~" \
vector <sItem> vItem;7 o7 p% P1 `( n9 T+ J/ e; }$ ?
vItem.resize(MAX_INVENTORY);//初始化大小$ k( w6 h5 g$ f/ F
//////////////////////////////////////////////////////////////////////////: S) N9 d9 V( k0 d7 O% X2 _
//填充数据+ b5 R7 k( W& U1 c( `7 k3 N j; Z
for (int i=0;i<MAX_INVENTORY;i++)! ~( K9 r" J8 X0 {/ u+ T
{. w) G. _, J5 T6 M2 h
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);: _0 D. \- k9 Y+ A& m2 \
if (!pItemElem)
- J: O1 R( s, D7 Y' j; ]- I0 ` {
2 h( Z, a2 ?8 H% w6 ~( ~' P vItem.dwKind2 = 0xffffffff;2 a z# G. `8 V% p5 F
vItem.dwItemId = 0xffffffff;5 R& q0 b8 ~/ j4 S7 x( j0 v4 a6 `
vItem.nIndex = i;
, S) L& G, Q2 a$ u/ S }else {' B7 a* a8 [/ g5 y8 M3 ~2 g+ l
ItemProp* pProp = pItemElem->GetProp();2 T& X9 G, H! ^1 n3 e" ^7 Y
vItem.dwKind2 = pProp->dwItemKind2;; A# M7 n# H3 F" U+ ^6 D R. Q
vItem.dwItemId = pItemElem->m_dwItemId;
: W* n4 f/ t7 S9 ` vItem.nIndex = i;( O5 X9 ^! B' s) S- t
}- i0 C8 B2 K4 J/ L5 R
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);5 u2 a/ Y/ C1 M9 n% _8 }
}! Z' O- W( Q4 M C" x% W
//////////////////////////////////////////////////////////////////////////6 A3 g2 m* W- \' Y* i ^
sort(vItem.begin(),vItem.end());//排序
# W2 j7 n# w: j; k% t //////////////////////////////////////////////////////////////////////////
7 E* d8 Z' `0 i( z# y //交换
2 C" E9 M L0 C+ ]% _: v, C3 { for (size_t i=0;i<vItem.size();i++)
: G! w% W2 `" {! V( o {
8 A M5 E2 G! c1 Z2 | //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, h% L, z |' M3 Q8 _9 q/ K pInvSort->Add(vItem.nIndex);
8 m. m5 A7 ?6 G" u, Q8 b: I }% J1 I7 {( Z' k+ |$ ]$ [' C
BYTE nDestPos = 0;& _# f) U9 j- z3 i) q
for (int i=0;i<MAX_INVENTORY;i++)
+ I4 ?3 e0 a4 P {- q$ Z. S& m) h% |5 a& e
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos); X- C( u3 D2 O8 x: s6 `
if (pItemElem)& x9 \7 u0 ]8 g, Q7 k
{
+ q5 B# g( G0 M4 G! i if (IsUsingItem(pItemElem))( ? r f1 h9 y
{' p& G, \: [# g2 S1 R7 s# L
//这个位置无法放
( Y6 @) }; Z O8 \: q nDestPos++;
; c1 d, }, w! @+ { R1 ` }: R' V0 a8 S6 m. }, d& s; Y+ _
}
( ]* ~& v. g v/ U# `3 n BYTE nSrc = pInvSort->GetItemSrc(i);" L- x2 m" V$ n1 F* ]. | ]
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);. G- f9 \% [: N- U) l( d$ Z
if (pItemElem)8 s0 F# O3 x2 m3 C
{7 n2 Y/ V: G5 E4 K' t8 u$ Y' J
if (IsUsingItem(pItemElem))
* e( j+ w. K ` {
7 h, u( G+ R. O1 s //这个道具无法移动,跳过
9 k3 ?3 F C- Q+ h" ^3 i continue;' Q4 E: X$ _, a# c. E
}
& R" l: Y5 k) n5 @' V/ o }else{4 B- E2 M. j$ Z6 o
//空位置 不用动
6 a) W6 L# R N; ]- W5 O* S continue;' u. E! T/ F8 O" u
}
; B" j( G3 J4 t //////////////////////////////////////////////////////////////////////////$ k. _2 T: j! |5 ]( O
//开始移动2 j9 ]8 o9 z2 Z4 w
if (nSrc == nDestPos)
8 I( x. l* d5 ~' d {
! h3 b) e# {. t7 y7 Q0 d- S( r1 o+ } //原地不动
( w0 P% U# h9 H' a; k nDestPos++;% G+ W4 s N k* H7 ?
continue;) A+ G7 }, f( K2 h- F, P; z
}$ I, ?" a6 a0 `6 ^7 n+ R: Y
pInvSort->MoveItem(i,nDestPos);' H$ _3 ]) K& k+ U* c v8 P3 ^4 D
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
4 ^- h8 B( Z0 }0 B$ _9 A Sleep(5);
0 x% ]2 ]3 p& h& Y" B9 { //Error("移动 - %d->%d",nSrc,nDestPos);
l' ]1 h2 C; m- _) f- \ nDestPos++;
1 ?# `. M: A- O( @ }; S/ e5 U) F- \; B& [
//取第一个元素的信息# V3 ~# L3 Q6 \* H2 O
/*
4 H8 v, \) C2 f8 a if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
# O* A. Y" N7 m( G5 O1 c {0 m3 R' Y8 q! M- t; @' n
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
" u7 F" `: ~) K. ]/ q1 }+ s- s g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);$ `- M9 B1 [" k, R; L% P
}9 A$ C$ |4 X, R& o) T/ _
*/" X. n# C/ K- T" V3 U! j
//////////////////////////////////////////////////////////////////////////
7 R; s' h& X+ E& _( K+ y" L break;
% c* k/ N& H- t7 ] \8 L- a0 O }
2 d# B2 _3 C2 O. G6 z } 9 J. O0 }# S( M& L" Y2 e
}
& Q) \' L: b& G; G% gm_wndMenu.SetVisible(FALSE);
/ `6 k9 z- t/ X5 B" K2 n
% b$ U0 U$ f6 S; f# z7 K Z--------------------------------------------------------------------------------------------------------
1 M# y2 |" J; G( j* ?搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)) }( E* z9 e; X6 f3 g% w: D4 Q) I
{) i2 y3 Y j" W4 ^
BaseMouseCursor(); D [3 O3 P' Z! t6 H2 H
}9 [" T. f, g) [. l6 D. v' q
在其下添加:
6 a2 k% v6 o: bvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
6 x8 n+ f3 q: _: l{% b l( c3 t8 B* W9 `, [% h% N
m_wndMenu.DeleteAllMenu();- l# H+ i- ? z- r
m_wndMenu.CreateMenu(this);8 ]8 o& Q) Z! _ u6 r- T
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
$ g: Z6 x% M9 Q, l9 M5 R4 u( m, j' Y+ v. v
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))5 \, a' Z8 l5 B) D, I* E
{9 K K, f- N& R/ S4 `; D$ S
//P以上级别才可以删除所有道具
$ c' E ^: Q# C1 G8 h3 g m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
, s6 v$ L1 l' m/ F% e4 f' t}
4 n. P! f( I! I6 |, H) q+ um_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
2 c" s s$ V C9 Hm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
+ C9 |$ ~: m1 C: fm_wndMenu.SetFocus();
9 M. Z9 r! a3 j' I- a}! A8 k3 C6 {) I; c5 \9 K
------------------------------------------------------------------------------------------------------------; u+ Y$ d" J3 j
*************************
2 {: x8 w6 Y- T3 C0 _WndField.h文件
' m6 A' R" {( R1 S8 r4 D*************************
# p3 O( d) Q- F z1 S9 n6 h: _6 r2 @搜索:BOOL m_bReport;
) x4 ~; Q# A+ j7 G其后添加:, c0 F8 r3 J" h7 J6 e
CWndMenu m_wndMenu;
# R& L& |" q9 C1 k' h; Z9 W搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);. M5 D5 Q3 t+ U/ W8 ~4 l
其后添加:
4 k0 H! o/ J1 Wvirtual void OnRButtonUp(UINT nFlags, CPoint point);
( H" ^( m" j5 Y3 \2 y7 ~! _
2 E, `3 q% H% E1 X- e7 F x5 w
+ r/ T* p( _# [0 b* L. r |
|