|
|
源文件中_Interface文件夹下WndField.cpp文件
) B3 S' \* x+ G8 {搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )- ?! I* O( _2 e) l3 a. c
0 K, g! w8 k [0 n: z
struct sItem
M0 o2 _, v/ A9 h4 N$ o! A{5 s/ k+ ^. S, D s, F. V
DWORD dwId;
- T; g" O' K7 d+ j, ^6 IDWORD dwKind2;0 u/ F& ~6 I1 O, O' Y j. C
DWORD dwItemId;
6 g* ~3 K$ j2 M! v( ?6 M* oBYTE nIndex;6 ^" ~) L5 |! O# O: G* N9 E
sItem(){ P% `9 N8 v! u2 t
dwId = dwKind2 = dwItemId = nIndex = 0;% U7 y0 m7 O- E ^7 }
}3 N" d! z& e( E: |# ~6 ^1 X/ x
bool operator < (const sItem p2)
* Z7 a' k9 Q8 \7 ]7 U{
+ H$ o, ]" q5 p$ z* H) t if (dwKind2 == p2.dwKind2)
' g% Y; D* r: M/ V1 |. e1 P$ O {1 r: |1 W: I4 W# H4 c$ T3 T
return dwItemId < p2.dwItemId;
5 e7 f- Y1 |4 c z3 v* r" a+ u }else{
# {+ R3 q/ L( U4 k8 U, L5 {8 s% k return dwKind2 < p2.dwKind2;
: ?+ S" {# c1 F }) `2 A* @% T7 w# O5 a
}
- l0 ^9 v/ B4 s1 x- z" K$ B};
4 r0 p+ }5 y) G+ ]3 N6 `6 a9 C; lclass CInventorySort# ]* Q$ m3 G9 k# I
{
0 f3 k' }' r& _% P* Q0 gpublic:; s/ {% ` H6 V \) I
CInventorySort()
8 V' |! C, ^# v9 v{! b$ ~6 y: Z8 W
m_dwPos = 0;
/ |3 }( ]4 F" ~( U |* L( ~}0 r2 ^. p: E! q/ J
~CInventorySort(){}
- S8 p' P9 w/ {9 u7 K2 W, [- mprivate:
- Z3 N* E0 p2 c/ i+ MsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
$ A+ b5 J& ?4 A* e8 O E+ F/ _DWORD m_dwPos;9 ?1 M. i4 i" }; _- G4 d2 q
public:; A5 s2 W5 j+ `- M3 J# L( H
void Add(BYTE nIndex)) ?" \( {# X8 k# V& k) N6 {) V! q2 O
{
7 u/ ^6 T$ h, @" f if (m_dwPos >= MAX_INVENTORY)
, @0 Q5 `& N3 N1 h, z- d {; w) S% b9 i& j; H1 I+ n$ V; N5 ^
return;6 @7 n* u, S: j
}9 L& N% x% r/ P
m_Item[m_dwPos].nIndex = nIndex;( o6 ?! G+ k3 C4 X7 k! b0 q
m_Item[m_dwPos].dwId = m_dwPos;* O1 M+ Q3 w! G
m_dwPos++;
9 p) G5 b+ h! ~}
2 ]+ C0 g. Q) ^1 X% a3 X# F3 ?BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
4 E8 `4 I$ o2 p8 J" V) Q5 j& z4 X{
' X8 o- D) s, S. `3 s# ? C Q2 k for (int i=0;i<MAX_INVENTORY;i++)5 k' E: c* m' @7 ^3 U
{
/ H( d# }5 T5 _ if (m_Item.dwId == dwId)
- l8 U" D5 Z8 w( m0 }, y {1 V/ w! a1 ?5 {
return m_Item.nIndex;5 I: W% H' a% v* T
}
6 i$ F7 Z; _1 E" c' g }
/ T' e) \. o" p% @3 C4 k return 255;
. c8 V9 _4 b6 }}( \* m" A9 h. f0 Q8 |
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置& B, J* L C* \% w9 Y% x# ]; n
{
; P( D3 j0 p z/ O BYTE nTmp = 0;0 C+ A6 v& V/ i% ~! w
bool bDest = false,bSrc = false;
6 B. ^2 }- M9 F for (int i=0;i<MAX_INVENTORY;i++)
' {. l* U1 M$ ^$ b( ? {. u) [. {' O5 g; u- \
if (dwSrcId == m_Item.dwId)
6 u* U0 G' E( z$ Y& ` {: M2 ?% ? O2 a2 k: T, r @: t; b
//id相等 则 改变对应的dest和src
1 Z+ `' G2 Z& Z) \ nTmp = m_Item.nIndex;
/ L$ y$ w0 p$ ^. l* o( _: w0 e m_Item.nIndex = dest;, }& |' z" R' q4 ~. v& d1 O
}
' l& W9 N+ T, i0 U/ t3 h& @ }
" D/ ^: `* Y) I //临时数据保存完毕,交换开始* C p/ u4 t- ]- d
for (int i=0;i<MAX_INVENTORY;i++)6 Z+ J5 {- N8 W# b* ?' ?9 ]& [/ M
{5 _+ [$ L N# c- l9 n1 A4 c
if (dest == m_Item.nIndex)* M$ B9 {0 K& [ F
{" V( z% J1 `; A7 ^0 o' n6 y
//id相等 则 改变对应的dest和src
; E9 M' a) B1 h( M5 [8 N& U m_Item.nIndex = nTmp;
/ f: l( P! |. h1 r; t/ j }
# s! ~, I& B6 D% r9 W e4 M) @ }
% }5 t) @- Y6 H7 I}, m% {" ~9 ~& `. w
};
! W' G5 F! y9 x9 A/ f: i$ P* l-------------------------------------------------------------------------9 W: r# |; U6 {
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
- L9 p0 X4 l, U0 \# y, _+ w搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);/ l2 u+ M* e) |) @+ c
紧靠其上添加:
3 Y3 ?# I# W' Cif( pWndBase == &m_wndMenu )1 U M& m' d) c7 u8 E1 e
{
' @3 v& \8 T* B# [0 m switch( nID )( z* F- v" N* U1 R* g
{! F! t* Z) U6 V! J1 t" M" ]
case 2:
+ b. k1 h0 S5 z. \" q* \9 l8 u {
Q% F8 S1 B6 B: u" l0 Z4 B0 z //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);% M/ R' w4 A: O5 C4 L0 x1 h1 n$ a0 p
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
3 {) V. ~2 S" @- M$ L; g. H2 C {
, q2 H6 F/ k, b8 E break;
" y% y) z! b! h }
; P) _& `. d; O for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
7 ], E0 s& s! Z1 r4 {& c% M {
2 s; W7 N9 u% Q( H4 a CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
$ F' Z) ~ }: B' y. L/ k0 N if( !pItemElem )
3 M' g5 E3 }6 k; |, V3 { continue;
/ t- p2 u# @2 Z if(pItemElem->GetExtra() > 0)7 b0 d- y5 S' U. k
continue;
# X4 L! u) N6 ]3 m if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
0 P1 _: |$ q% T @& ~! j continue;* G7 B5 q" q0 C4 I' Y# O7 S% ]/ x
if( g_pPlayer->IsUsing( pItemElem ) )
8 ~) e3 D" n7 Y: A continue;
; H& ]: W8 Y, U; K: i4 \( P if( pItemElem->IsUndestructable() == TRUE )& j. U$ _* a3 V7 d. B) |1 ]+ u
{8 v$ a" C) u$ p# e. S: D/ m
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
b1 ~9 q. Y8 j: k continue;
+ l4 w3 L+ t; K- p' j }
4 L7 N3 V$ p" }% F& h g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
. P+ x; \2 }, H5 ^: b% q M- p- G i }2 q* A- U; `- |% A/ J( A
break;8 g1 G* Q) ?7 I( C4 s; O3 C
}
3 J* \/ x* I, g1 k& E! I: J case 1:
' ]5 q9 p' {8 |' v4 S; A {
. x% U/ r- p6 z% g1 N& u2 M //整理背包
: o* f8 v0 J# t! X# J, V7 X+ M //////////////////////////////////////////////////////////////////////////2 x9 W7 Q# v. E9 `
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );. b5 ?! Q3 s8 N# x1 T% F3 r3 r
//////////////////////////////////////////////////////////////////////////6 G) E: o, ~( `0 e: g/ A! s
//////////////////////////////////////////////////////////////////////////; `/ X% Z% P. ?# w1 {
CInventorySort* pInvSort = new CInventorySort;7 s% f, q5 j! n! }
vector <sItem> vItem;) J/ p% B! S" ~5 D: S
vItem.resize(MAX_INVENTORY);//初始化大小5 J! p4 d' w. v4 a5 L
//////////////////////////////////////////////////////////////////////////
" k, V1 M; b3 t. q7 y1 ? //填充数据
: ], Y. @7 L7 @; W9 N for (int i=0;i<MAX_INVENTORY;i++)
4 ?: W2 w6 V9 f! f {4 c0 ~% s4 H. K# w% _
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) ~9 G# z0 D* p4 X) e
if (!pItemElem)+ s9 O0 K4 @ r' V. u
{
0 B9 G. |6 W8 u/ v vItem.dwKind2 = 0xffffffff;
) a7 H+ h0 j& C9 q vItem.dwItemId = 0xffffffff;
* X- |1 U/ _4 z; s, `$ h) `& L vItem.nIndex = i;
! q) Z, i6 P4 S5 G9 x* N; J }else {" Q0 F; _% m: H0 C5 h* G! b+ f
ItemProp* pProp = pItemElem->GetProp();% M+ K) T! d6 b$ w
vItem.dwKind2 = pProp->dwItemKind2;
. G* d0 p8 N2 \: w7 D2 d vItem.dwItemId = pItemElem->m_dwItemId;8 A$ {# q0 u2 J5 B7 X
vItem.nIndex = i;
, M, N2 L# O) B }
% f8 Z/ K2 G9 k //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);7 ]% V- A: c% r: B; V) k2 b
}* d# e: ?0 s4 n; e r& U/ B3 n
//////////////////////////////////////////////////////////////////////////! a s: n# g4 M1 n6 A8 K" j$ j" L) m
sort(vItem.begin(),vItem.end());//排序! \8 l4 f, c5 p
//////////////////////////////////////////////////////////////////////////
) @2 ^2 e% r( g% ^7 H9 W8 e //交换 A5 }; N% x( U, e# b: F
for (size_t i=0;i<vItem.size();i++)
+ ^8 c) c1 t& ?. D! g7 V {
7 n7 A6 g; K" V d! r( C Z //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- k9 Q! [( C9 y3 p' D! K4 o/ {
pInvSort->Add(vItem.nIndex);/ j- U, z& Z6 W9 o8 q
}8 K& n/ S4 F7 Q8 \
BYTE nDestPos = 0;7 Y, w+ f3 }8 q6 ?9 d8 c6 s
for (int i=0;i<MAX_INVENTORY;i++)
: B0 l% E( q/ T: O {
8 Q" [, T# Y5 ?, k2 ^* Q; I, d CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
7 y2 X# o; v5 ]/ u9 i: l' A if (pItemElem)8 C% i6 s8 t2 @6 ^9 J
{6 v# g, b: l* ?
if (IsUsingItem(pItemElem))
4 p' g& |' b2 ^. ~- V4 B4 g& b {# I* A( n$ F8 T( k
//这个位置无法放( `* p: y( U7 F/ J+ _9 }! m
nDestPos++;3 y& h1 A% X4 N
}/ m' H& y8 |1 o+ r. a
}
' k, U5 C2 X; q" s d5 u. A" S' A BYTE nSrc = pInvSort->GetItemSrc(i);/ h" E4 Q$ N0 h/ u
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
. w2 @% o% g9 e1 ~8 c9 f; H if (pItemElem) s `+ x5 U8 ?4 r% e8 @+ z
{0 y$ @ @. O: t8 Q: b' G b
if (IsUsingItem(pItemElem))
) ~2 R4 F$ s7 E" S4 @ {4 l/ d) F+ U8 Z! l4 z2 H! I: H4 u9 ~
//这个道具无法移动,跳过3 D) X7 c9 z, P0 O) L8 W
continue;" M3 s6 d. {. l E+ ^3 v
}
0 f+ A8 V" A. K/ B7 P }else{& S+ H$ V9 o! x
//空位置 不用动
, x W3 R: n. i continue;
$ h7 H) U* a$ n$ c+ L! V) o }
, w- e+ T0 B" f- b //////////////////////////////////////////////////////////////////////////
; _+ d% E, A/ M' |; K. T //开始移动
: E! ^' f/ k/ }* O3 x/ A8 d9 l if (nSrc == nDestPos)
[+ i2 Q) ]2 Z {# j4 o/ ], \% ]" a
//原地不动
S- x# }2 u- Z8 o6 v t: I nDestPos++;# q" \, Z% ]" J+ f: V+ Y( g
continue;
, @0 V3 T+ X5 r! u7 r' l. Y }) G9 i% K( B" ^8 Z. A6 Y
pInvSort->MoveItem(i,nDestPos);9 N n( m) q& B! e5 Z+ b; L# I$ t
g_DPlay.SendMoveItem(0,nSrc,nDestPos);7 `9 p! _5 e9 [/ f: p8 y2 y
Sleep(5);
) L* _2 t# ~4 E7 G //Error("移动 - %d->%d",nSrc,nDestPos);
! z* |0 o3 f% h" R5 p+ W nDestPos++;! @! f h; b+ u {, |2 d+ o0 b
}4 A, {' R4 @' H) P
//取第一个元素的信息7 {- o: ~3 \" H, o. C0 \, V* m
/*7 o7 p6 V) N3 W) O. e% p
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
2 n3 B0 I; J! w, B; k; R {7 C8 i2 x+ @. S0 M% L
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
& {% t' K. k; l6 e* O g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
8 q! ^8 Q" q. [0 | }
+ E6 n5 N' W# |, h */5 p! q) O( @6 s. W$ L1 R
//////////////////////////////////////////////////////////////////////////) N! R& f Q. T. z" x$ a7 D
break;
( Y$ j) T! y1 @0 y }/ @3 s/ f. K& A% a& \- ?" K
}
+ m) A! A7 M# @}
* A5 H0 E2 t* ~( ]% qm_wndMenu.SetVisible(FALSE);
+ Q$ Q3 V5 V( |- G8 _
! B* ^( K6 z0 E% O! M! H--------------------------------------------------------------------------------------------------------
# N- J. d# k; d搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)% U6 ? m' z3 F2 x, O" L
{
9 N, w3 ]! G6 O# B* h# |6 UBaseMouseCursor();
# c5 y8 O- Q+ d0 p4 f" p- r' H}( V7 q/ t$ w4 I5 W2 e: s0 c
在其下添加:' ~' K7 P8 g" m* u4 D1 ?
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)4 Y7 u3 I5 b2 d% L0 Z& x. Y& F
{
) ^$ w; m5 r5 D2 b$ tm_wndMenu.DeleteAllMenu(); b& q' I% p- R- M) M6 X
m_wndMenu.CreateMenu(this);, L! o& Q6 H9 h' O* m- B; `0 s# ?) J
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");9 p C! p% `$ K/ C3 W7 d" m, [
A: [( N8 u! f# n% \2 gif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)) l- c: ~; }" w9 Y8 q. c
{! @# A5 }# K. D, T( H3 [! D* t
//P以上级别才可以删除所有道具3 u- ? d' Y0 {) S7 d2 p
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");) D' [' D% e2 ^9 n# i5 }8 Q3 x
}
0 i* H! u. b; wm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );/ {+ c. ]8 d6 Q
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
K2 Q7 Q/ l' K" Ym_wndMenu.SetFocus();" |7 c6 S; z3 \3 F0 I
}
8 C( {1 _# m& Q8 U5 r- G! s------------------------------------------------------------------------------------------------------------
8 {+ g( K# m( x: u7 t*************************! m- M4 x4 Y6 ?1 E
WndField.h文件+ w% ~' {$ s. W% A- b1 S
*************************3 g6 |9 k Z$ }" r9 u( k! C
搜索:BOOL m_bReport;
, l( c* N1 ]% `( Y$ R+ Q其后添加:
* I/ x9 K) k5 P% eCWndMenu m_wndMenu;
7 f* D& o& F4 k, O7 G- i搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
" L& C" o7 o3 `" C! O2 c/ O其后添加:5 B N. @1 ?5 G: g9 p$ B
virtual void OnRButtonUp(UINT nFlags, CPoint point);4 V% C! ]4 s! B( S
z) q2 Q( v9 O! [" R' i) F. d
* [4 t: E" C7 U |
|