|
|
源文件中_Interface文件夹下WndField.cpp文件
5 x: Z$ U! [! i+ T6 S5 p搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 D& I) x/ j8 K- D5 _0 G5 z
& x" A" y7 N; x1 J0 g$ _ ~struct sItem
: Q( j1 f' J8 o! x0 d{
3 ^+ @1 E, a/ @' q: UDWORD dwId;! r6 }2 b9 f: d0 ]% Q+ I
DWORD dwKind2;1 z0 u4 ^/ v( ?8 d! k: g
DWORD dwItemId;
) M0 R8 W) _5 w! n5 ^: W A% |BYTE nIndex;
Q6 b: ?3 \1 {1 Z! O1 RsItem(){$ k, x1 O6 G( H3 g
dwId = dwKind2 = dwItemId = nIndex = 0;
- n0 }2 d: u9 w# d0 B. O: i}
# V( S! B7 P, A6 E0 Y: c xbool operator < (const sItem p2)
0 Q8 ~" M) x% w$ I$ ~& I7 G4 }5 D{
; S1 n% k3 V1 j if (dwKind2 == p2.dwKind2)
6 p/ U0 z9 G5 P" _# M {, F( `: q! d8 C5 u
return dwItemId < p2.dwItemId;* V2 _$ t* M# i1 A0 \
}else{+ g/ I" w' X1 T2 b! ]* k- F
return dwKind2 < p2.dwKind2;
% l0 H) U; w( g; ` \+ z) A+ A }
7 _( u0 L$ i3 l2 q/ B: y6 t1 C, X}
: D5 i7 x" c. j* f};
6 e" i7 T: v3 n2 O+ H, W# n( ~class CInventorySort
( q" x& `+ k2 v{
9 L) ?- j: m) F' ]7 |public:
- s* X" L! ]6 l4 p0 HCInventorySort()
$ `/ H7 W% N. P Y{2 r7 w8 r8 s9 ?* A; W! z! v
m_dwPos = 0;
3 ?- j/ S' j: p7 Q0 q0 i, ]$ G4 e}' D# R# |3 e! y5 D6 [
~CInventorySort(){}
" A$ A, O' J: w: H: ^private:
# i7 i4 M S1 K! R( Z7 D3 PsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
2 r# X. {4 Y, i" v/ hDWORD m_dwPos;
5 H; o% I8 M' l+ P0 a1 m1 ^public:
, h( J; r6 b/ Z% Svoid Add(BYTE nIndex)% l6 s, A/ R$ O8 f8 t- R w
{
) w# B. L/ Y2 w ?, Z0 q- X& N if (m_dwPos >= MAX_INVENTORY)7 b$ B" w1 [/ ]0 f
{4 K9 w! r$ T+ {" y
return;
7 D" B: ^; v& K x4 l+ e+ X }
' H2 |% u, I$ \ ^# z: v& C. a2 M m_Item[m_dwPos].nIndex = nIndex;
/ b0 l9 y ?7 ]7 C7 g" M" n" U ]9 k m_Item[m_dwPos].dwId = m_dwPos;
. ?" |0 f. J+ h- ? m_dwPos++;+ G! l; o0 o1 z$ g
}
" r" U# v$ b, K2 K9 y. aBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列7 f; P( h3 \# `: s. E
{6 b! ]8 S. ~, Y. A$ a2 W% K( v
for (int i=0;i<MAX_INVENTORY;i++)
& t* u) k" k6 }4 K6 S2 N/ A {: ^; x# Q/ q( t6 p
if (m_Item.dwId == dwId)& X" t& l9 ^9 n+ ?" T
{
0 s$ \+ B2 y0 e6 y [% m7 _% u" S return m_Item.nIndex;
# E( \, b1 q" q0 }2 O }
9 S) e( F# k3 L3 \ }- Z) s7 E9 l" y
return 255;
+ v; y2 y- p; X2 {* T& q3 a}" r0 Z6 z: Z) x; ~+ n' G
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置2 k( F4 \' F* i. ]' n: p7 Q# m( q" q
{
# x* ^+ k; b& W5 e. ~; @. T! E BYTE nTmp = 0;7 \8 o9 j1 q$ y$ [
bool bDest = false,bSrc = false;6 ]5 V' T2 I3 M4 z* ~
for (int i=0;i<MAX_INVENTORY;i++)& B, e5 G0 i* E! Y" a
{/ C+ X" A. g. ^) H( A( y+ U8 }
if (dwSrcId == m_Item.dwId)
6 b1 d0 Z) u# Z4 s$ L {- A. U% q+ I+ f/ B- g" y
//id相等 则 改变对应的dest和src
8 l0 F6 v' r: [- w! k! m nTmp = m_Item.nIndex;/ r- x7 w) N4 @* ~ Z# m/ `1 D
m_Item.nIndex = dest;$ q; T$ e3 I, t
}; K* w! G; u& H# r8 P w
}
( {8 k! ^2 D* T, n* I0 Y! w5 B //临时数据保存完毕,交换开始) S. [; d H, [
for (int i=0;i<MAX_INVENTORY;i++)& C9 j) l) i/ Q* k: e
{
4 N/ w$ a. D/ f- l. }6 D9 K if (dest == m_Item.nIndex)
& P+ J: @5 }" B; G: V {
* y; T0 Y2 |. T1 E: T9 G //id相等 则 改变对应的dest和src: c# ^ Z' z$ A7 g4 n
m_Item.nIndex = nTmp;
- r0 [$ _0 F6 L7 M& q2 ^( d j. n& N }
' a: d: y! I) ] C7 v }
8 M% M$ K( {1 a4 p# {3 I}: D8 u! U t! }' y4 T% M- L0 F
};; C- `( q6 @. C% B0 F* B) _
-------------------------------------------------------------------------
* Y- g6 J; L% H% v" m依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )) x4 Z0 u' t8 E
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
1 y) h1 `$ d9 P% a/ U6 L* Y$ H* D紧靠其上添加:5 K6 P. O$ U) t; X
if( pWndBase == &m_wndMenu )
, ~+ O/ |5 q4 y! n5 o{; E2 x, ?& M! J: U* _2 G6 m: ^' C
switch( nID )
$ b- P( K8 r( e, V. O$ E0 q4 r2 J {
2 K- g3 i( e7 n5 `4 y, @! g case 2:
! ]' t/ h# q1 [ [ {
5 D; I: V% ~! ~# w1 A //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
+ S+ H; ?+ |3 N* Z- q, ^# X/ `7 u if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))" n8 b# t& G# x& k4 e
{
. W& V: j; x/ ^; q break;) ~- }0 {: @! S
}/ T. E( C/ K! z- l4 t" B, G" p
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)5 i0 B6 u! C% ~8 x: c
{9 M# N) ? R* l* @
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" Y7 ]1 G/ X8 u" E) j7 N
if( !pItemElem )/ a3 o. K6 a1 W) p0 J1 P" P# ?
continue;
0 X! l( Z! h3 u, g+ C) r2 A if(pItemElem->GetExtra() > 0)
5 U/ |5 B5 j3 @( b/ D6 T continue;
6 y- k4 C- Y+ _( Q if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 6 G2 f1 B; p+ ]' Y0 E% z
continue;
% @8 U3 d4 k/ i3 T; B$ o6 W/ l if( g_pPlayer->IsUsing( pItemElem ) )# Q$ g& `4 r! m3 M8 E$ o3 ^- X4 h
continue;
}4 W* Q* J+ r if( pItemElem->IsUndestructable() == TRUE )
: V# t4 |3 B3 [, S* F {, s9 j/ o' N ?4 b* _) {1 g% c. x% z
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
0 X( L# k2 |' d7 h ` continue;9 Z% V4 o. z L8 j& e
} c+ z0 e& I9 k0 ^
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
7 I$ e5 q" [ W9 @" O) J5 i! L! n }6 s6 z& k( ^) W
break;( b2 j- ]7 R2 {4 U; [4 V
}
0 l+ e5 T- ?/ t% c: p case 1:8 c; w/ B& S7 g% N8 M H
{
: S- ]. p% j0 `& s+ S! r- a7 n5 N //整理背包
c& P* Q" K1 ~' ~ //////////////////////////////////////////////////////////////////////////
, Y, m# j0 D# t/ i4 t( l9 h //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
8 q2 ^9 f/ S5 }% J //////////////////////////////////////////////////////////////////////////
5 |6 ^4 K" @; J! _1 o+ z1 | //////////////////////////////////////////////////////////////////////////2 r# U7 w) f) W8 {& N
CInventorySort* pInvSort = new CInventorySort;# w: h# u9 d9 o2 G7 q% p+ s; u
vector <sItem> vItem;
7 c3 C" e( T" g5 M vItem.resize(MAX_INVENTORY);//初始化大小7 k+ _3 R. ?% v
//////////////////////////////////////////////////////////////////////////' [( i* N1 [. j, ~, }6 J* m5 o6 \
//填充数据: y% o( a6 i8 T* O8 }" u- ]
for (int i=0;i<MAX_INVENTORY;i++)/ q) \) b% x$ c0 X! S# h0 }/ F
{
; G+ D+ n/ K: B. u7 g4 ]' R' [ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% ], S+ _/ S7 b! D. O if (!pItemElem)
# j1 W& ]+ l2 T9 j! s6 g, n {
0 K6 i) Y; g; y* M1 C) q vItem.dwKind2 = 0xffffffff;0 O* Y2 S- V' }6 S/ e" ~& R7 d- e6 J
vItem.dwItemId = 0xffffffff;9 j, q& p# I |6 R# r+ q* C
vItem.nIndex = i;. G5 |1 K6 P4 _) I
}else {
- ]0 S" j# {) g6 {) m- j ItemProp* pProp = pItemElem->GetProp();
7 g4 u, [3 ~* c& F7 `: v vItem.dwKind2 = pProp->dwItemKind2;- T: y6 F. }1 {/ W
vItem.dwItemId = pItemElem->m_dwItemId;4 I" k: d6 T |2 p/ a
vItem.nIndex = i;) U/ I* q$ N5 b" R2 ?' w
}9 D3 z2 i+ I4 d f1 U& q6 I; J
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' C$ J) L4 x! I5 c3 a2 Q
}
7 {& _+ N! O! @ //////////////////////////////////////////////////////////////////////////
' P5 J" j8 s. N" a- k7 \) b3 J: y9 P sort(vItem.begin(),vItem.end());//排序
) v3 p! s8 o. Q; R( ] z //////////////////////////////////////////////////////////////////////////9 _! d g ^2 T& H9 _
//交换# `( S3 i; F! C+ H ~3 |- }. \' j
for (size_t i=0;i<vItem.size();i++)+ |8 \, E0 [' E0 z1 V; N
{
9 G( [8 G5 J$ Q9 j& g& q //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 W* ?$ b- V( A: L$ q P4 L8 _
pInvSort->Add(vItem.nIndex);6 ~/ I2 S) _. m, g2 s3 c
}
( |- ?2 K& X! v BYTE nDestPos = 0;' W! S/ ^& T0 |4 U, H' U
for (int i=0;i<MAX_INVENTORY;i++)% t+ T+ h" i+ N! m2 @
{/ j& e8 q2 y. B" z8 h
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
, A1 {, p' a4 z" p' o! Z if (pItemElem) d* |2 ~5 V5 o2 |$ S8 q* ]
{% }! q* X% \* j1 g9 h! d1 N; m
if (IsUsingItem(pItemElem))
# y1 G3 Z, l7 k! C9 r; { {' _: U, q5 g3 z" q: B& V/ N
//这个位置无法放4 H- S1 A/ A i" \! E2 [
nDestPos++;
7 d/ j) G* Q# {1 U( o' m1 W x, a }
+ B1 a' e: H" [1 h }
' |- t% z& M* h0 B0 a BYTE nSrc = pInvSort->GetItemSrc(i);' |4 w2 g4 ?; u, K' C) h
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
* t! [0 h/ V1 h5 o/ C. e if (pItemElem)
: X: r/ f7 G/ g {8 U, ~3 J* G4 l% k1 c, ~0 }
if (IsUsingItem(pItemElem))" @( n! f/ ~/ i, C. ^7 M$ m" J( U
{: S' P. V5 f5 K6 p
//这个道具无法移动,跳过3 d* P) O t" T% T3 G
continue;5 ^- ?( f- `) K4 f0 u
}
7 V* z2 l8 z9 m }else{+ X9 R/ t# K, L9 B( ?
//空位置 不用动
- t# ]4 f4 x& \ continue;+ ?* V! o1 L# C" Q% _
}
4 V- n7 A- |0 ]" {( s //////////////////////////////////////////////////////////////////////////
* i* B- K/ A. [( Q //开始移动# r) l7 G8 Z' C2 W( i
if (nSrc == nDestPos)% B, j; ?, [& s
{
* x1 a4 e* F+ n2 E/ u, p9 A; f7 k //原地不动' K# G, o4 L. c5 U6 r; C6 h. X
nDestPos++;5 a, o& b8 w* z/ a% G7 o
continue;9 }8 f5 d1 n% g7 o
}7 s1 k w0 R: w# ?
pInvSort->MoveItem(i,nDestPos);' D4 x) ~7 B1 x7 |
g_DPlay.SendMoveItem(0,nSrc,nDestPos);( g+ n' {4 H3 ^) G _
Sleep(5);
* s: h/ i; ^, u5 o0 M //Error("移动 - %d->%d",nSrc,nDestPos);
5 U k# X. Z s8 f2 d% z& g nDestPos++;; Z) l* r* ?2 N. c) \% x# t
}
# r% q. j, B8 k: Q //取第一个元素的信息
* B6 g. @- R/ z- b& N' Q- C /*5 _/ n) @7 e: a/ D0 Q# S
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
. t* j8 a7 G2 m4 O1 n {* h3 c) W& \ u& k' L$ m
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
0 m# x- a }& s" ~8 M. V g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);3 W5 F0 c% f: _2 J3 c
}
: s0 }# t9 Z4 d2 U+ h, L: \' U! B */
# k& F- t; y3 z" \+ u //////////////////////////////////////////////////////////////////////////% {) f2 }! Y8 g; t2 Y% Q, `' x- D
break;
" S" x x3 z. t6 N9 e( W4 P }) w5 z# M' U2 l6 q7 T
} 9 _5 H% b) P! O/ k6 \+ \: ^" f
}
& X' T" d3 k/ Y$ Dm_wndMenu.SetVisible(FALSE);, P, y2 e9 t- g* y' O# P
7 h/ s4 ], U$ W( h6 B/ R3 i& ~
--------------------------------------------------------------------------------------------------------
$ S) ]6 O4 p( e% k1 I搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
# A$ |$ B3 z y" P{
" {) a8 n( ~% }$ @, p$ W' d- YBaseMouseCursor();
) Q6 x0 {" B0 ~7 {( ]2 Y1 ~ j8 e}
+ ]% b6 f* Z! r在其下添加:/ g! H2 @+ n N: {3 a% R. M
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)" s2 K5 p+ ? _( E6 @( C
{4 F1 E. J& ^0 r9 ]( [
m_wndMenu.DeleteAllMenu();
* y! m+ J1 U8 D* D, `, F0 c V8 ]m_wndMenu.CreateMenu(this);
; Z, D. h; L5 A$ |3 D& _# U: tm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
( Y. Y/ R" ?- P7 m) K! y, f. H+ K0 D& M" }; q# m
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ R# m. l: Z, m7 S; r7 k{
$ x& v# H+ R0 S4 p' M6 C! G //P以上级别才可以删除所有道具
; e3 O; i: {2 m% u1 X1 I m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
* V% h: _% W x( }& N}3 u% f9 B+ s# U$ l. [
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
' l" X" J `: o0 O1 L' F: P9 L+ h0 k5 {m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );8 s# i1 @, h$ q
m_wndMenu.SetFocus();
9 N4 X% q1 q5 S% s \ Z; i}) N7 K) X7 s5 ?( k2 @. m
------------------------------------------------------------------------------------------------------------* w. D! E: H0 _2 J/ Y) i
*************************
8 s! }, I$ U! j+ h7 {4 I' }: nWndField.h文件 X4 r4 [$ P7 V, b0 `+ @7 }
*************************1 {5 g5 N4 Q+ ?# E
搜索:BOOL m_bReport;7 O2 g" o( i( \; _$ t, u
其后添加: w. E- U) a+ E* C. s5 F- b
CWndMenu m_wndMenu;5 o, e' g" j) |- l
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
+ \* x% N5 w" j' E' G/ v其后添加:! ^! ]5 `+ l3 N6 `; z3 O; B9 v! e' ?
virtual void OnRButtonUp(UINT nFlags, CPoint point);; ?5 U5 i# O+ W; @
8 f4 `( G$ t' B+ R% V3 |$ Z0 `
* K$ v* U" o/ f" W. | I* V" ^, q
|
|