|
|
源文件中_Interface文件夹下WndField.cpp文件
( B6 h( x2 T) J8 h/ l* W搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
1 \ s- U( m& _0 ~
/ N# y% a. [( ~0 l& rstruct sItem1 d Z, y4 b# j0 @4 r" J8 Y
{% s5 b ~( L- N: I# m
DWORD dwId;% x. b }5 G2 H+ _/ @9 B9 ~7 @
DWORD dwKind2;
. D/ y: u5 C. F) ~DWORD dwItemId;
8 J" |+ U; t0 `# y1 V' Z/ s/ OBYTE nIndex;4 G$ i( G* [* p7 ?/ R8 I- T& T
sItem(){
, D4 J- h1 d. l" f3 P dwId = dwKind2 = dwItemId = nIndex = 0;' A% h6 P8 h; X" ]3 x; b! }
}. G& }0 \& V D) M9 y6 A$ C
bool operator < (const sItem p2)& c' G3 O. F, v4 A' X9 z
{
' j) P5 ?: L' z V; [9 D if (dwKind2 == p2.dwKind2)
5 r' I# j P6 N) i! L- f: H1 `1 s {5 K0 R/ q. ~% c/ q% D& m
return dwItemId < p2.dwItemId;1 h6 L7 L7 {" c' ?$ H$ U$ F. }% @8 E
}else{
% G+ R, v% q7 q return dwKind2 < p2.dwKind2;
+ D) X, ]7 J$ e }
6 O5 p. I; u9 e8 x}
8 Z3 F) D: e8 j" o. F: C- d};
5 S0 t- z( H7 Q2 g) U# Eclass CInventorySort
) O R Z7 S$ t8 T \1 p) y" Z{
5 O! j5 T$ f6 l/ H/ y" ~( e1 ` D, Ypublic:
4 @- K8 s, {1 Q. f/ [; SCInventorySort() c _* q: }4 A. q9 n
{( e$ c9 |3 I: }8 A1 z& J: t6 {# m/ P
m_dwPos = 0;4 z" o( t- s' y7 f I
}1 Z8 [: s. m7 k; H
~CInventorySort(){}
' Y* w5 q; s+ {+ xprivate:
) d( q0 ~' ]: I# d$ S6 y6 ksItem m_Item[MAX_INVENTORY];//存放排序好的道具信息4 d9 S) } d/ }0 n: n& b
DWORD m_dwPos;1 r' d" J1 J% N4 @, v ^
public:
7 X& Y; r& a" Y# mvoid Add(BYTE nIndex)
' Q& H& O6 ]+ }: P( o! d{# f. R- F3 H8 L& _! J0 h0 ~( f
if (m_dwPos >= MAX_INVENTORY)& b% U1 m8 S9 |
{5 t' W3 [# G9 l0 Z U7 r
return;; d- r/ P# w( j; o& Q6 Y/ A; r0 G
}+ D, u. Y+ O5 @5 W$ {6 n
m_Item[m_dwPos].nIndex = nIndex;
: I9 Y; T6 J6 a- L/ V% _/ | m_Item[m_dwPos].dwId = m_dwPos;
& w$ I6 v `. O g- h$ F: n m_dwPos++;
5 \; V$ O* F" T; S! @}
' m- U1 e3 G! ?BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
- o9 {6 q3 E4 e{
! H% }: ]) v/ ^' ]* B3 {. W: | for (int i=0;i<MAX_INVENTORY;i++)
4 r, {3 D4 N) I# M- { {8 Q- m8 V! {, i8 n: K
if (m_Item.dwId == dwId)- r0 u- f& {' W5 k' U, b
{
7 u0 X* [( x# o3 _# ]+ d return m_Item.nIndex;
/ f" n( I" F( _4 U$ S3 p4 M }- ?* C8 q) t( ?. D5 t
}% C- C7 [' s/ z& R$ ~4 M: Z( \$ {
return 255;6 m# h# g# Y9 |* J8 u
}
8 o9 H' a- S6 Fvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
! }0 Q1 I" b) u+ H5 \4 m{
' e8 R) X' M7 f' ^" i BYTE nTmp = 0;3 d4 D7 Y) L6 B! }! }
bool bDest = false,bSrc = false;
) `& `7 j3 O3 S0 P/ f for (int i=0;i<MAX_INVENTORY;i++)' e9 U( A9 K% ?
{
( o' U9 q' G5 C$ V7 ^3 q& I# [ if (dwSrcId == m_Item.dwId)9 q* B$ \. ~# D9 B
{! ~& e1 j4 w+ {' l( J u2 M
//id相等 则 改变对应的dest和src. M* E) [/ N; D; Y* P1 J
nTmp = m_Item.nIndex;# ?+ z C( |; F" \; T# {$ A
m_Item.nIndex = dest;- q) ~2 F/ j) r0 O+ O/ V
}
, M, W" _; A+ Y B, g. r$ D }8 _3 f5 \6 \- V9 [( w
//临时数据保存完毕,交换开始
- P0 R, |2 Y8 A2 V( @) Y for (int i=0;i<MAX_INVENTORY;i++)
2 U0 P# x; M5 L2 | {
3 \+ ?) H2 R. k$ T# T if (dest == m_Item.nIndex). f, }. d7 o: y, ~1 t+ s3 u
{, ?& @4 e# l- ~) _$ [
//id相等 则 改变对应的dest和src' ]/ h( k) ]8 N& s+ f
m_Item.nIndex = nTmp;# j0 G8 S7 T" i; z2 Y$ D0 n' ]
}
, }4 v0 A+ z% |. d/ B }
5 ]2 Z* h5 `9 r- ~}/ b7 J5 f: a$ H1 U) _, }5 s
};
& s: ?* H0 b7 z1 Z4 z-------------------------------------------------------------------------5 ]' y7 i" m8 l
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 J5 c- w- w1 n" o: N% ~9 @! O搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
a, N1 J3 K' _6 k9 [4 I紧靠其上添加:
d# C3 ]5 p# ~# H! ]4 s0 }if( pWndBase == &m_wndMenu )
" ]# Q/ t2 ]1 A7 T; p7 Q{ n( P7 O7 g6 a$ O7 ]$ r. W
switch( nID )
, b$ C" ~) E/ T0 m {
0 f) s4 Z: W( y4 o F case 2:) v, D" g2 d% N1 K
{
( ~; k' C5 I" |" y& s; t4 q //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
. Z2 O8 I/ b1 E( e if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 B& ?0 ^, b3 k# I) F {; U' V$ i! v5 G/ C
break;
+ o0 S; h( ~+ j9 s6 |# c1 y x8 f }
: j5 v- M! w# V1 c for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
+ }, x0 g5 ~& _% ` Q {. Y. @) c s! W T( M+ O! E
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 R3 X, J, \5 Q% q
if( !pItemElem )% X3 r3 P; i2 s# p* K( w1 Y7 Z5 [& ^
continue;( L3 g/ q9 _* v; |* u# U
if(pItemElem->GetExtra() > 0)
* q2 C* c: O4 X2 D continue;
0 L' }* w( M1 v, f$ v& l if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) / |2 y# X- q' x! A* h
continue;0 I: u; y3 Y* U: E) f; ?" S" D
if( g_pPlayer->IsUsing( pItemElem ) )5 {# w \3 B/ {' w2 u7 L B
continue;
& r v9 F1 E4 c- W, m) |9 ?4 S if( pItemElem->IsUndestructable() == TRUE )% @. F9 a0 E c/ u$ U
{
, }( r9 N* V0 L7 Z4 U3 l6 Z g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );# i+ [! \% x! C/ T; {
continue;1 } N5 [/ g$ V; w; X
}- E/ z7 V9 j3 Y( n. l( J
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
6 ]7 g5 ~; h6 s }
3 ~& U/ I6 l! h9 c' i" n7 x break;: z) G& F' Z* L4 R9 L* [
}3 W; ^# j% |- V/ G* \
case 1:
. A4 K+ _$ g E$ O/ d3 [ l) w3 K( \ {
# L! a+ R4 ?$ {! o, F& O //整理背包2 A: @0 K, V1 n- @3 f3 z' l( V. b, r
//////////////////////////////////////////////////////////////////////////
; ]) z. N" E: @: E //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );- C* J0 Z/ V9 u5 _8 ~& c6 }8 [- Z, e
//////////////////////////////////////////////////////////////////////////5 C) C5 H* p! A* {
//////////////////////////////////////////////////////////////////////////: Z, ^9 ^+ g( y" N
CInventorySort* pInvSort = new CInventorySort;
N4 A$ ]8 k' X9 @ vector <sItem> vItem;7 ~3 i$ C6 F" a" c% ]6 p- z
vItem.resize(MAX_INVENTORY);//初始化大小2 K3 ^& Q6 `5 M2 ^; z* P
//////////////////////////////////////////////////////////////////////////
; t5 U) K# T( j; z3 S) |- A //填充数据
2 g4 H5 M, N4 P+ B; R) e. ~6 A7 X& E for (int i=0;i<MAX_INVENTORY;i++)7 f" M5 ^, R$ |8 F6 Z5 c1 C
{: I3 m- `. k; o- @5 h
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 ^3 \% V- Z4 S) J# T. x, J3 I if (!pItemElem)( i; e! A7 X {6 m
{
8 o3 u6 c# c7 {* W! H vItem.dwKind2 = 0xffffffff;. R) p3 C4 [% O1 |; A( t) e! k$ ~6 Q
vItem.dwItemId = 0xffffffff;- g; @9 T7 u1 D
vItem.nIndex = i;% g, ?) j4 W7 `" T
}else {. _0 _# A' e( B. o, t
ItemProp* pProp = pItemElem->GetProp();
; m0 B5 A" _# ~ vItem.dwKind2 = pProp->dwItemKind2;4 t/ D0 {7 {+ y
vItem.dwItemId = pItemElem->m_dwItemId;
" S& @" j( Y7 [5 e vItem.nIndex = i;2 N7 ~3 Q2 e& h. [2 }
}
- S1 s) T$ ~+ S" S0 |$ P; @ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' k) |6 y! | }5 q5 O% H2 M* p9 S
}
! i' o! r! R- R: B- r //////////////////////////////////////////////////////////////////////////7 x+ F9 a! O4 p0 t
sort(vItem.begin(),vItem.end());//排序
9 ^8 a1 L' j" j1 z% o/ E, H //////////////////////////////////////////////////////////////////////////2 q, Q! {; X. I
//交换
. O8 F" z" K% | for (size_t i=0;i<vItem.size();i++) P4 F+ M( C& u* |! E& ]
{3 T/ M8 h7 p% t- ~
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);3 Z. A8 `* V- f: `; a
pInvSort->Add(vItem.nIndex);) d6 d2 @" C! A- J
}
: x6 O, x e0 a% P- @ d" I9 T BYTE nDestPos = 0;6 Z% Q' }3 P9 n; R {# j
for (int i=0;i<MAX_INVENTORY;i++)
9 `3 t. |2 |5 ~7 ]; b) R. ?) B5 v% Z {
* q% ~! K2 q F* f CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);+ r2 q2 a( v6 B& G1 y; h7 |
if (pItemElem)$ F0 \; y! c5 t7 H
{- i& [' u* H7 c
if (IsUsingItem(pItemElem))' C* x( d* m% B, m) I% |
{
! i+ X1 i" ]5 ?. P6 S5 R( R //这个位置无法放 `- `4 d. T$ I y# o
nDestPos++;! W$ c: ~. `! L1 f& v$ m
}# N4 e" Y% h% B0 c7 E
}1 g6 e- _: Q ]0 d" O! T! H! A2 {
BYTE nSrc = pInvSort->GetItemSrc(i);
4 j' I4 R1 @( H9 \0 v7 J( D4 C pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
; [; C0 R& c) K b" y- y if (pItemElem)
0 o8 S& r$ S1 m' M1 ?2 d Z5 b# y {# C- [2 f3 ^. W
if (IsUsingItem(pItemElem))
k" B, A" t# y% z9 ~ {
' y2 c* x3 }0 j* a4 _5 H2 u2 S. |7 [! i //这个道具无法移动,跳过1 ?+ @3 a _1 y" n# o( O/ i- H$ }
continue;
: ^1 u) j" u) U6 K7 j: h }
. c4 e: @/ q1 q+ }2 U. [ }else{
" }- ?. F' J4 J. B5 \- @ //空位置 不用动
. n9 r6 V: t2 {# S3 \ continue;
$ S) j8 U1 x; P9 _; a2 b* I6 Y }
' y) i% q/ M& k( P) i //////////////////////////////////////////////////////////////////////////
0 E' M8 A( j2 }8 @) [& w3 z //开始移动
: F# W$ Z! ]: g( J if (nSrc == nDestPos)* H+ z& o! p! S/ W: F3 r8 Q
{' X. p. R& L# {; w
//原地不动
. @- P: m+ |5 v9 @ nDestPos++;5 ~% F' x& B$ c# U& b6 \+ K
continue;$ Z# c2 |8 e- W2 R" p
}# W" Q$ `2 l1 ]; W& }
pInvSort->MoveItem(i,nDestPos);6 t. S+ E/ e2 W# _: G
g_DPlay.SendMoveItem(0,nSrc,nDestPos);! I b" T. W6 A4 A6 W8 T
Sleep(5);
5 D) \% \ \3 @5 |% [. g //Error("移动 - %d->%d",nSrc,nDestPos);
' {: F1 c" I0 W! T- x8 \5 U nDestPos++;
^3 o* X9 O) `+ T1 C; _ }" l8 q; G' q# N1 f, @4 y5 e
//取第一个元素的信息
+ f5 u! w% a# ~) V' L, b /*3 ]) ?9 f" P. O0 i6 Y+ _0 A5 v
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff); {0 g% O1 T1 i) y, H$ b/ m( j
{! s4 |: M$ V2 ?
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);% g6 [; U! B) `( j1 p6 W! j
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
& @: m h8 g3 s, W, j; d }
6 }! K# s" ~% Y. `5 [" g */
1 J* D+ N+ y3 k; ?3 x //////////////////////////////////////////////////////////////////////////4 M- y3 I" I. Y. M* Z7 {4 r
break;
U2 ~, F) N7 x( }9 o2 ~# l }
Y& |$ ^% x6 t% K! } }
( k z/ G7 Z W8 r9 L}- b6 ` ?; Q1 R: a( k
m_wndMenu.SetVisible(FALSE);. I8 b' {) M e9 Y# i: c3 M8 j; x
! x: j0 T* S4 M0 |--------------------------------------------------------------------------------------------------------
+ ~% {. [- x( n9 c5 _0 s- H% ~ y搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)6 O8 @5 V6 c! z
{# j# v7 R" w$ s. [& v4 \
BaseMouseCursor();2 ^: z7 Y5 u4 [: J
}$ k% t& H6 T$ Z+ z5 c* A M: X2 W
在其下添加:/ ~. R& e! {# C* W3 K& d- \
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point): r9 n) {7 y" m) y
{* t+ h9 q! ~& p: i3 g) m
m_wndMenu.DeleteAllMenu();. a _/ e- c* u) {0 d& l
m_wndMenu.CreateMenu(this);+ a0 Z% G' B% u# I+ R5 p+ s
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
8 X1 G- p. M4 B1 [. m6 q, r I3 ?7 L1 \. P2 p/ T4 i9 l n$ D6 W
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 p7 Y5 {& i; h$ N{ y. o5 G$ u. V; `; A
//P以上级别才可以删除所有道具
* W3 B- f+ Q# N2 @ i& O/ K m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
' ^4 D3 z3 J! i2 K; D}! q0 _! J$ w' A _, K
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );& {9 n/ a7 g* b- ^6 B
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
, |% g% g; `; v2 D; Wm_wndMenu.SetFocus();1 `* `3 S. V. Y4 C- T1 x! S
}
3 O% v* X% J1 Y0 B' I------------------------------------------------------------------------------------------------------------- M3 i- Z, d5 Q" `9 m
*************************
/ z% G" m- m# qWndField.h文件
/ Z4 a9 A9 ^' j+ N- i*************************' R3 M9 y7 Q, R! t- k
搜索:BOOL m_bReport;
. y5 A. {1 u- \7 R其后添加:
0 _/ T2 ^$ v! a, q$ f0 A; E& YCWndMenu m_wndMenu;4 N7 s1 X6 S4 _- ]5 k
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
9 g" f5 \% f6 R3 Z- H( o1 a其后添加:
2 Z+ w% Q. ~! K) yvirtual void OnRButtonUp(UINT nFlags, CPoint point);
3 r! R$ X( Z: S/ V& ?9 h# X. G7 r8 q4 r& S
% r; l& w3 ^& h2 F( y4 N( c
|
|