|
|
源文件中_Interface文件夹下WndField.cpp文件
4 Q9 m: V3 {6 r8 p% d搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; L# { o: g( i$ ~* {
8 [& z. X3 K. vstruct sItem* `3 M. i& [) G: j
{
! s6 c$ n g, `$ jDWORD dwId;, u% j& Q0 N' A8 \9 L* }7 C
DWORD dwKind2;
- W" s% W& L$ q0 k: Z& |DWORD dwItemId;+ U3 `6 W8 l0 C1 z% P1 C, c
BYTE nIndex;3 f* y7 [) k9 a+ ?
sItem(){
" ?" w6 [$ y" ]7 H+ a dwId = dwKind2 = dwItemId = nIndex = 0;% G! p( p5 A3 F1 P" l! {. h
}4 j$ z) {% O2 `# ~/ Y$ S7 g
bool operator < (const sItem p2)6 G, I8 _3 ?0 n; a
{
/ H+ J* S O! T" L if (dwKind2 == p2.dwKind2)! ^- h! ^6 ~; C r7 Z8 H
{
! }; O* |/ K1 }. T$ W return dwItemId < p2.dwItemId;
8 U2 N* i. E* X; a }else{
# \: j- I8 X' o6 |4 `' K* {! c return dwKind2 < p2.dwKind2;& X5 l8 F/ v: C' c
}7 Q% m- g6 c# U# c) G; b7 y
}
, I) u) ^- u5 H7 w" `* B+ R};
" {/ p% i7 }& b! Eclass CInventorySort
! Z' |( P0 b! T$ }{" Z$ j) U3 X" ~
public:, I+ h% d2 l; t. I4 T% X4 _
CInventorySort()
$ `: ], z# e( z8 \. f{
' i1 O" o" `0 O. T) O m_dwPos = 0;9 t8 L' z2 B% O: [0 A
}
4 j5 p* Z% x9 I4 v~CInventorySort(){}# t' d$ ~4 O' M" ~) p" c& j" N* i- p
private:
$ p* Z8 q+ i7 p; PsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息1 j( K3 E O4 D; v8 y' R
DWORD m_dwPos;; f& r/ V0 L/ G/ n9 S$ t% `0 }
public:
% W+ x- ^& K7 O; _- x: Q7 c* ]9 N: ^* Fvoid Add(BYTE nIndex)# p e7 ^1 ~/ X9 B0 m3 a7 k3 W! D
{$ B: U5 E- i( D2 A' J
if (m_dwPos >= MAX_INVENTORY)/ ?# x2 V. i) @% q
{
2 k L" l7 h- |' h( H return;
; H' ^) g9 g% Y }4 O/ b# u% \- e1 K2 V+ a7 D, B
m_Item[m_dwPos].nIndex = nIndex;
+ r6 h# D: q& f, P7 v m_Item[m_dwPos].dwId = m_dwPos;
9 b' S2 }* p! I* E m_dwPos++;3 V3 L/ O2 }. ^! Z* {
}
: t) l$ d2 h8 B, M3 ?" u& W2 ]BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
1 A' l& W/ B% p{
: F+ j/ v2 e4 n8 A* M s; M. ~ for (int i=0;i<MAX_INVENTORY;i++)
) B3 Q( _8 E4 |3 O4 X+ o1 H { F: T& X( z& c# R
if (m_Item.dwId == dwId)
8 x4 @5 a5 G0 u8 r) t {
( w7 j& r+ C* V4 h return m_Item.nIndex;
9 z" q x. I5 b8 F7 w1 X0 z }$ ~! M/ J' k/ q" [
}$ R5 x" E- f4 |2 h
return 255;( j Z$ R4 y, {& Y$ g* L
}
. _( i7 Y5 w8 C7 H. [0 `void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
F8 C" @7 i% U* Y{% H$ G/ w9 L* w& I
BYTE nTmp = 0;
# m1 ^; V) t7 _& q- ? bool bDest = false,bSrc = false;
2 z6 ]0 `9 |7 o6 E' ]) S" E for (int i=0;i<MAX_INVENTORY;i++)
$ ?; Z8 e! D7 j' S: U0 W) F6 H {
! B8 G2 L! c2 h F0 _: } if (dwSrcId == m_Item.dwId)
7 i3 ~$ E5 a2 O" {, G {
; J. F% k; E% W5 q' H. E //id相等 则 改变对应的dest和src
* c7 M7 n% f; p nTmp = m_Item.nIndex;
! Y$ B! _7 H* ]4 e; q1 h m_Item.nIndex = dest;4 A# Z1 y6 C+ \) s" b4 c
}& a$ I! D0 X3 r5 `
}
0 K2 q* S1 m }8 X) \ //临时数据保存完毕,交换开始
8 d6 x# N( D' x! ~$ u for (int i=0;i<MAX_INVENTORY;i++)
) B7 q c3 g1 F {
) z; b0 f5 j" T4 I5 c) P if (dest == m_Item.nIndex)3 O' _7 y* y) f
{0 ^; S' O9 L7 v
//id相等 则 改变对应的dest和src
8 d8 ~. k, W1 a: p3 B: v2 `5 ]& R. p m_Item.nIndex = nTmp;, P5 y& {/ h& D/ f6 W- ]
}
5 U9 N, D" w, m }( E& }! f4 I+ L3 j, G- v* b" E* H) u
}
, L2 ]) O% O7 v: K2 ^};
0 T$ N* C0 b$ f5 F7 U-------------------------------------------------------------------------
- u! {" t6 {7 U$ o依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). n* i; o" e7 k; y$ D- |
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);" t# X, z" `9 X, o: K1 o
紧靠其上添加:% e( |+ ~% P p2 I
if( pWndBase == &m_wndMenu )
8 l; S$ a3 f. j' y{
2 h/ x, F3 S( q8 r, i switch( nID )
; d- D7 A& ^2 z) M2 A {9 \3 {$ N# g, C- H4 w" m# M
case 2:9 i. _; r$ h9 S* ~
{
+ x& P% s! w6 K5 i" W- Z5 t //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
3 j8 \$ I) [7 P8 v if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
1 Y3 s" y) b! Y' v7 M. } {" C6 j& Y* I! P0 W
break;6 Q/ u: ]5 T; U
}
, B' @! [ X& L& h; R1 ~# ?4 Q# F for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
* {$ U! i Q% X! I a; A {: a( G. v- O" o/ l) d, ~- {
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" g( M/ z( j5 i
if( !pItemElem )
v/ D1 a* v& j3 q0 x1 G$ ^ continue;7 v4 U7 J) t: z5 Q; v
if(pItemElem->GetExtra() > 0)/ s" Z1 V, I/ I& u9 ^* z
continue;3 R- s1 L; N6 \: |1 A
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) : M% ]" R6 {# W* z* V2 |
continue;; s3 Q7 v P8 i0 i1 e% j
if( g_pPlayer->IsUsing( pItemElem ) )
: e+ o. s, A* z; U, j5 s8 Y' i continue;; ?! k6 E4 }7 l F. C
if( pItemElem->IsUndestructable() == TRUE )
7 {. V9 r A- W/ @5 P {( O" o; C6 S) n, [. m. o A* e
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );% ~ l- q+ O+ L' ]2 \7 K
continue;
$ ^+ S/ Q: P& I* N+ [& L4 w6 ?# y+ {+ ? }
, t# x2 Y5 n, N2 v6 s4 U g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);% T! A/ o. u/ R |0 a& t9 f; p! |( Q
}
, b: R6 v, g6 X) Y" _/ V break;3 Z4 K: P) Q1 h- A) N
}
* N" X- P1 _5 L/ i! t( s) h+ ~% M case 1:( k6 g" h: @7 C4 q* P$ a
{
# {* q; d4 S- O/ ?6 f/ l! [& K8 f //整理背包- C% x% ]* z3 C, O4 F; F) V1 v2 E
//////////////////////////////////////////////////////////////////////////
, Z" M1 j6 }3 K7 M2 o/ A //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );. c$ |# U: h/ B7 `2 u! c
//////////////////////////////////////////////////////////////////////////
- V* ?$ J i! C$ L/ _" z2 H) n( z, k //////////////////////////////////////////////////////////////////////////
2 Z6 o0 a/ ^8 t1 n# E2 K. j' G: Z6 Y CInventorySort* pInvSort = new CInventorySort;# ?. q7 ?/ S- L4 r
vector <sItem> vItem;
0 T2 t+ a" Z3 T" j8 A! D; ` vItem.resize(MAX_INVENTORY);//初始化大小
1 c! K$ z3 a& i //////////////////////////////////////////////////////////////////////////
/ N3 ^% q, G) C# Q' Z! U6 \3 g& R0 o& w //填充数据0 [4 C$ `2 o1 U( @" ?
for (int i=0;i<MAX_INVENTORY;i++)* L4 d; n: F6 F: v
{% ^+ g" p% i* p% C9 b
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: q8 l4 ^! [) M' P/ V if (!pItemElem)$ V$ @! ~9 H% K' e& D& W
{' d k' s d K1 I
vItem.dwKind2 = 0xffffffff;4 \3 t- V9 p: Q1 p- s: R, R% ^
vItem.dwItemId = 0xffffffff;
7 I9 z3 r& H" q vItem.nIndex = i;2 Z2 T+ v4 E: L$ Q2 A
}else {
/ _7 |: c: y, K8 i5 Q: V ItemProp* pProp = pItemElem->GetProp();& t1 b" a/ k9 `. L
vItem.dwKind2 = pProp->dwItemKind2;% J; Z! w! V. @4 e' {
vItem.dwItemId = pItemElem->m_dwItemId;' b7 p5 i1 E" D4 C7 V u2 l0 Z7 }6 u
vItem.nIndex = i;% G8 Q& i4 S9 X5 d
}
2 Y1 L: l6 N. `9 ^& ]4 D- n //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);% d9 s/ d/ U, g6 c2 e, |
}/ T# Q) X* U+ ]* U* d
//////////////////////////////////////////////////////////////////////////
3 d8 d0 S0 |7 ^5 J# B sort(vItem.begin(),vItem.end());//排序
/ Z" N8 I) ?0 s9 l //////////////////////////////////////////////////////////////////////////
+ U2 G, E1 x) Z2 X z2 l$ h //交换
$ U# x! p3 m; o8 B+ E D! n for (size_t i=0;i<vItem.size();i++)
, S' ~ j# z8 D& R2 s' l4 x" I+ E {2 W7 A" s3 X+ p8 u1 O2 e1 Y! H6 v( K
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 D8 J! _, f( \% Y# E8 A( t pInvSort->Add(vItem.nIndex);+ G) e2 }! Y: u6 J' {
}# r( ]0 n+ w4 {6 M: r
BYTE nDestPos = 0;& d7 R+ v' B7 H5 S
for (int i=0;i<MAX_INVENTORY;i++)
8 r- {/ B. O3 e+ d8 H( M {
/ v' F5 x n3 h) G5 s CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
- A& Y& u) {3 L( r, o& n2 t! s if (pItemElem)! P5 O6 r5 U) B; h2 B
{; m, [$ E8 x6 n0 N
if (IsUsingItem(pItemElem))7 ^" d+ W" q2 T# z- C) r
{
8 u& G! y! _$ F7 F$ `4 Z6 C6 u0 v //这个位置无法放8 X& C. X3 v" T" R
nDestPos++;% h; v' I- X0 h5 w% A x; r G
}
9 x# f5 Y, e) r0 f }, y$ M/ t" m* R
BYTE nSrc = pInvSort->GetItemSrc(i);
* G0 l6 B5 [# ~* K0 [ pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
" l& V9 g2 k* W; G/ a if (pItemElem)1 K( z( R0 s9 |& A% G0 w4 n
{9 Z9 ]. g! ]! E
if (IsUsingItem(pItemElem))& D( g& t2 U" X
{
& ?- `- d' V7 R9 F! r3 I& X( i# { //这个道具无法移动,跳过
- m# f, x2 K Z continue;7 t# k& x; z5 _; D% C
}5 I/ a% U5 W, n. A% V9 \/ s
}else{
6 ^7 f J* X* g //空位置 不用动. ^" E7 P( C9 |" l Q( e6 C! [
continue;: s# m# a; @$ _5 _3 P1 _
}/ U0 Y/ X( [; S7 ]8 o) N0 h
//////////////////////////////////////////////////////////////////////////, m% {& b+ W2 V% s H/ \
//开始移动' R, h4 u. C0 ^8 x; G
if (nSrc == nDestPos)$ ^7 s8 [3 H0 _4 J1 a
{. w2 j! @& K$ @% r9 O' B0 h
//原地不动
1 Q- s* R/ A' h nDestPos++;
z* _0 _; n8 D+ u, @' o continue;( ?8 }7 \+ P! e( u8 j) s* I. X$ G$ y3 K
}
2 ~; p8 A8 o! ] pInvSort->MoveItem(i,nDestPos);3 A8 a& B6 v$ P3 W! F1 X7 u
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
0 ]$ d8 d: v/ M+ c4 b Sleep(5);& t; a3 r X5 j6 B
//Error("移动 - %d->%d",nSrc,nDestPos);" M& ?) w. P6 l, I8 X
nDestPos++; {1 {5 Y1 L" |6 ~
}( L% Q7 q9 V3 t4 c1 h
//取第一个元素的信息$ M. \/ y2 g) Q7 `9 ~. D* B
/** j2 s, j1 T/ Y
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
& |. |$ w- b/ @# _* H8 r {& ^' c5 x/ k$ o* u
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);# l8 \: u& w+ k, B) H
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
" ^+ I# O" d7 W9 r7 u1 A }/ h" T6 i( V; O4 o/ t" X
*/6 U$ R% C+ H+ X" s% w
//////////////////////////////////////////////////////////////////////////
3 E- ~# S* m, _- \( v7 _8 J; R break;
8 `; Y; u- J1 t: P: b \ }
G: z0 J8 Z( a& ?8 ^- C' I }
8 o5 Q% P7 t& D/ a ~}
/ E8 N& U( p. Q# ]) L- um_wndMenu.SetVisible(FALSE);
* @0 ]! t }8 X6 \/ b& w) H: A6 S* `+ V( @
--------------------------------------------------------------------------------------------------------
7 k3 R+ z( M/ E" a8 h搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)# O$ j2 a* \2 ]6 O2 ]( O* H- B
{
8 \3 a# {" W4 ^# HBaseMouseCursor();$ N" Z& Y# ~ I) ~ V# l3 U
}
3 l8 `3 T/ ^# l2 W' \9 {- K在其下添加:
, S4 E, v9 M- q/ j Tvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)8 W+ \: ~: a7 |$ c0 w* w
{* d9 ]7 `# B5 r( f- \- V
m_wndMenu.DeleteAllMenu();
8 A; o1 L! Y1 J0 C6 A! Qm_wndMenu.CreateMenu(this);0 l0 Q9 i7 J S: v7 Z" L7 |
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
5 `2 Y9 U1 t G
$ J% b. _2 H2 Z7 r o2 t+ ?6 sif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 v9 d" p T8 q" z1 H1 U) _{
5 M, u( W6 W+ |+ T8 B //P以上级别才可以删除所有道具- Y' R9 r o1 P/ J( K9 u
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
6 Y* w& d+ F+ k, i0 ^}
8 ]+ e; |9 T1 k6 R# O8 ?7 t; hm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
# k' ~. y+ y- z) O& \m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );5 j+ m8 K) f* v* h% x7 p% E' d1 w
m_wndMenu.SetFocus();5 A, @; x. H+ a. I2 A8 }. v+ h
}/ m8 x! |& s. y' P3 v$ n4 {% V
------------------------------------------------------------------------------------------------------------
: z* U' H9 ?5 {% d2 D9 C6 }*************************
% C; P( {; O, LWndField.h文件
, C2 }- f% P( \2 `* z*************************( J2 P% s7 Q2 B
搜索:BOOL m_bReport;
4 D' f/ [2 }6 E* G( Y# r其后添加:' X2 u. w+ }1 w3 W
CWndMenu m_wndMenu;, y: U+ I9 D; P& K# N& g+ j4 y
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);: J$ U! c/ A& I. B
其后添加:9 j6 L$ K8 w$ u$ @. u0 s7 _
virtual void OnRButtonUp(UINT nFlags, CPoint point);# |; t# q, y! d% C' }! ^
$ o& P3 o) A! s& y- s
7 m; r( }/ H0 K" H/ \4 e [ |
|