|
|
源文件中_Interface文件夹下WndField.cpp文件( D' Y, l9 ]5 q4 n% s
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
* H* v, T* D* m1 A
+ A6 h4 m2 m5 D/ w x }struct sItem
, p/ t* ?% @8 a{3 Z1 j* U7 _) U4 ~# ]
DWORD dwId;3 v- G. m: R9 C3 O& P
DWORD dwKind2;. p7 n' K5 \3 k, r, M
DWORD dwItemId;
, W& R/ r f# z6 B1 ^! @4 v- FBYTE nIndex;
5 P4 m" _7 ~9 y8 DsItem(){0 N/ s* t% m% ?! d, @5 w: ^0 o
dwId = dwKind2 = dwItemId = nIndex = 0;5 t/ ~' J' C* A2 n+ a9 _) {
}: }. B- e# D% s2 d0 t
bool operator < (const sItem p2)
7 j5 l2 D' m" Q. e{
, D9 l9 H( n. @3 ~0 n if (dwKind2 == p2.dwKind2)
2 v- F" u0 Y* a {# h7 V2 B* E2 @% _
return dwItemId < p2.dwItemId;
; O) |0 D' F2 j7 x8 X4 G }else{2 P0 \6 w8 Q B& N/ T- n
return dwKind2 < p2.dwKind2;9 Y# `' g! J6 b' b5 y
} t) h: {8 W( X4 |& D" y
}) Q: {+ E4 ?: Q+ S% B1 v% ^
};# s) X! y: v( x- p
class CInventorySort
* ~- S9 q Z$ V{) S0 \$ ?* S5 p2 v1 a2 p7 g) {. M
public:, t. b; ~! ]6 @8 Z7 j
CInventorySort()
. Q$ j$ _' n6 l9 B c{1 Y F* u$ l/ z7 c3 l# d
m_dwPos = 0;
1 S+ H! }9 F) [0 H" _0 U}+ R" O7 G( n5 K- S# a7 F3 p
~CInventorySort(){}
' l0 q3 x8 u- c! W) `- ~private:* T; p$ {- w0 ?. O. [0 h3 K
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
& b/ \3 G! t B! {+ RDWORD m_dwPos;" G8 z& E* n, M& h' U5 R2 h9 s
public:
1 f( T N# T) R; H$ u( g; X' Mvoid Add(BYTE nIndex)
# o/ E, U/ q* k- A6 S- ~7 X9 L/ h( ~. h3 ]5 l{
2 u( @, ~, U W" i1 S% X3 f if (m_dwPos >= MAX_INVENTORY)
# r/ v- m8 `1 \ {
! ?4 T, b8 m' V0 Y return;
# x+ L7 J3 M# T6 C, Y6 ^5 T3 ~0 W' P }, Y3 A8 ^1 K7 x- `
m_Item[m_dwPos].nIndex = nIndex;
9 r" h, z# a/ t m_Item[m_dwPos].dwId = m_dwPos;7 n1 R1 o: [8 i, d* b' W- t+ W1 U
m_dwPos++;
5 m, p ~# R% c: b1 Q}/ H1 v5 s/ ^! a, q2 I8 h
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列3 Z' S E8 w, V8 q3 |. J$ g
{2 l, B3 W7 n3 f
for (int i=0;i<MAX_INVENTORY;i++)
( }6 j0 I5 Z! x1 B i& H" Y {0 ^* [: @9 ~9 V7 i G( a2 S
if (m_Item.dwId == dwId)
* r t2 ~# Q Q0 D9 z$ {- q% l! t {8 q: @9 y5 n1 E2 ^# d$ l
return m_Item.nIndex;
1 X8 b! b) o; T. a- w; k) U0 V, H1 l }
+ V8 h7 R& y, h5 k5 o( ~ }
; P( E$ m% J# b6 O. D1 F* d+ O return 255;. F- e9 Z, m, C$ |
}$ \7 i& n+ P/ P3 `
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置! F0 s4 V3 k; J( ~4 ]
{
. ]! M, `0 f1 T BYTE nTmp = 0;
2 V) X* Q0 }) p3 e. ?$ S. z7 | bool bDest = false,bSrc = false;4 |2 C6 O8 ~6 S2 d) C2 \
for (int i=0;i<MAX_INVENTORY;i++)2 o1 Y) h. Q) ]4 [2 W+ ]6 B( y. Y
{- c6 p: h# C8 Q
if (dwSrcId == m_Item.dwId)4 J$ O5 ^8 \, ~% r- K
{) N+ |' J" Q! D- Y) A
//id相等 则 改变对应的dest和src
1 U+ j/ W6 C6 w D! Y; I nTmp = m_Item.nIndex;
, Z% ~5 x1 W/ j2 ^! c' ] m_Item.nIndex = dest;
/ b2 \1 s+ y' B0 b. V1 W }& ^+ ]7 I# P6 K8 P0 H: q, t
}
% o5 ?& ^! x5 p! B/ S: ] //临时数据保存完毕,交换开始8 H$ Y/ _7 \$ O; `! P0 O1 O6 m
for (int i=0;i<MAX_INVENTORY;i++)
9 q9 G( N6 H& c {
1 M1 |$ O' A U2 d( E$ v9 { if (dest == m_Item.nIndex)
$ L1 q ]' _% F8 B. w- a& r: \ {- _; s6 `0 v# z Q+ f
//id相等 则 改变对应的dest和src3 N6 x6 d3 X* |9 Y6 m5 Q8 M
m_Item.nIndex = nTmp;
5 B) R, \+ I* x: Z/ g' r' Y }
, g6 l% [8 g' c u" h' d6 G }0 `; W- j7 l$ K* `4 Y% X: {
}3 ]; d8 |+ X% B3 r3 g- r
};
& o5 w' r/ M0 h2 p( ], Z-------------------------------------------------------------------------) h7 Z" X, j& P8 e! F; q
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )# @4 S4 H, e& x4 H+ k
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
4 _3 W7 @& S. ~1 H6 E/ N紧靠其上添加:
5 T0 J" k4 Z. }$ Hif( pWndBase == &m_wndMenu )
2 `6 w, N( L( _* {{6 W* X$ _6 X: K2 v9 [
switch( nID )6 J& L, d) f- y/ P# M( Z
{
! a2 T6 S+ K5 O0 k, u case 2:; K* \" }+ a% y6 w" q
{& J1 O' V( _8 _+ [
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
7 ^3 q5 V' c$ w4 I; l8 M/ w if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* ~& d5 a0 X V% `+ K. M {) b, r9 z( W& Z! d. S9 s2 {/ i
break;! B7 ]0 i9 r# M+ E7 @$ y
}* G( H5 C8 \# ?& W9 [1 F, Z
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
: Y. x a- I% e {% z. }1 c& t2 Q+ u: H
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);# ]$ I+ X G5 T, k! R/ ?0 o/ I
if( !pItemElem )4 M" N# _; [" A+ K+ _7 d
continue;; Z# ?8 b3 y* T/ I' v
if(pItemElem->GetExtra() > 0)4 X# L, e0 R e$ `
continue;
6 ]; X8 R+ K- o- J- H if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
. v4 ?! R7 X4 f X" ^ continue;
! \! R( o# [' | if( g_pPlayer->IsUsing( pItemElem ) )7 L# w1 H& N; O: V- t
continue;# I5 _7 C: K. U
if( pItemElem->IsUndestructable() == TRUE )
4 s7 J$ h. D' U {! M# t2 ^ L) c) e- H$ |* _; m' c
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );: s) J: |8 h3 R- w4 Y: e6 M
continue;6 m5 e" k+ K) k$ H8 z
}
% J* V y0 F1 h6 _: @& O g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);! i4 {. ]2 O' _5 y* F- Q9 R, ~8 M I3 d- ?
}6 l8 G4 ~! ? B* O2 @
break;
# A$ Q$ i0 o% G+ z0 k/ q }* V8 u8 e& | P
case 1:5 Q5 ]8 j }: D
{9 J( V `2 R4 {
//整理背包
# N, q! W; F5 c. ?7 [6 Z //////////////////////////////////////////////////////////////////////////
q- m4 O, k9 V& e: o //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );' n/ R5 F9 c4 p; R# Q
//////////////////////////////////////////////////////////////////////////( N- J8 \% f" O: U
//////////////////////////////////////////////////////////////////////////
4 ^% K# G6 R5 Z7 \9 X( { CInventorySort* pInvSort = new CInventorySort;6 \: s1 z. n) ]5 O. b: r4 z
vector <sItem> vItem;
2 c4 Q% s' }0 v% R vItem.resize(MAX_INVENTORY);//初始化大小
* z# S: ?8 Q/ H& C* a7 k7 b //////////////////////////////////////////////////////////////////////////) s9 h, S4 _# l$ H0 I7 N* p
//填充数据
! E1 H$ ?9 M1 u" q" d1 C for (int i=0;i<MAX_INVENTORY;i++)
6 H6 n' D9 Y+ N1 H {
6 ?3 D9 U; m6 | CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. [# r2 c7 k' U+ _
if (!pItemElem)
* f/ Z5 Y9 @6 m2 _$ k; Z; Z {
" Y2 j- T& K9 U7 u( Y vItem.dwKind2 = 0xffffffff;) J( S: r9 a8 v% I
vItem.dwItemId = 0xffffffff;
, N' o+ v. Y3 z vItem.nIndex = i;3 @& H' t: \# B! M
}else {/ ~8 u2 ?. a7 P! T5 K1 \! D
ItemProp* pProp = pItemElem->GetProp();/ }7 }3 x3 `+ i i8 _
vItem.dwKind2 = pProp->dwItemKind2;
' O. O8 k8 M8 _) g& [' i4 } vItem.dwItemId = pItemElem->m_dwItemId;5 C. N g. E; H2 v5 `+ _2 J# ]- p$ _
vItem.nIndex = i;8 J7 y" |' b+ B/ P2 r' p5 b
}
8 D: Z. T7 h1 }' f) j4 w //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);; j o9 P$ O e' m
}9 |0 u4 w1 [ p
//////////////////////////////////////////////////////////////////////////
( N7 s/ p. }7 P3 I* Z. v- f& ?" _ sort(vItem.begin(),vItem.end());//排序- J! f- B( }- b5 g# ~
//////////////////////////////////////////////////////////////////////////+ r! {/ W7 `3 V2 U# I: ^
//交换6 Y$ i2 Q% z" Y! s, H
for (size_t i=0;i<vItem.size();i++)
3 q! P$ F* J+ A2 t$ e; I @ {
7 l, N$ \' F, R$ X& \& I8 s //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 l) s( h! j# O$ L' g O
pInvSort->Add(vItem.nIndex);
" i4 ^* Z/ a8 S9 K- i/ L3 ? }
" S6 T( Y9 [9 \, U9 V2 u) c' x BYTE nDestPos = 0;
+ ?1 \' s2 C! o8 T3 L B0 S7 G for (int i=0;i<MAX_INVENTORY;i++)8 K G+ a- x5 I( t% W! J' g J
{+ u! g( K- G0 H) U' K
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);/ n8 C, `* h% k+ G+ c
if (pItemElem)8 N+ n3 B0 F: `/ a
{
) K3 }, K/ u8 n" f, {; z1 V if (IsUsingItem(pItemElem))
6 r6 k) l Z& K7 R {5 u }- R: j4 `' w/ s/ I
//这个位置无法放
1 e4 R# M' x: F% Y nDestPos++;1 B! {: r* E" s/ U( q
}
) X0 m: j8 H0 x3 |) | }
+ p8 i+ Y' {* H9 W6 V0 h0 x BYTE nSrc = pInvSort->GetItemSrc(i);
* v5 u: \+ ~- w& I2 W pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
2 V. [! L& r- p7 u% _9 Y$ _: t if (pItemElem)
1 l0 `2 I2 L9 A% ]$ C- h {2 [6 E2 _ J4 e! o
if (IsUsingItem(pItemElem))8 _, B* i1 U& X. F: @/ z ^, w/ u. y# Z& z
{" k' D2 e; J2 b" k- I8 n
//这个道具无法移动,跳过; J6 w1 _+ T/ b1 ~$ A* }
continue;
4 c0 Q3 `/ k7 d }
; K+ w3 _9 B& w, s, d }else{& M/ R( w. ?/ M5 J9 N' v1 G) n
//空位置 不用动1 m$ F, [/ D$ l2 }) w7 m
continue;
; Q. t6 O G- x% U }. j' b$ ] d4 D# O* F5 o
//////////////////////////////////////////////////////////////////////////
2 Y: h( t: I1 w% o9 k //开始移动
2 s( p* N0 d8 b2 h, G6 I if (nSrc == nDestPos)
- s- }! R& t }2 Q" L" s {" M% f$ [/ E+ y$ v+ m5 {
//原地不动
\, z' Z% U- |! W9 F" N nDestPos++;3 L( b, \+ i% B3 A B) z. _1 @
continue;
7 q1 v4 j) x0 U( l* @- X$ q }% a- z5 n: N- V+ N. {
pInvSort->MoveItem(i,nDestPos);( b7 r, G9 s, O: B$ B
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
( f& e Q5 f& l9 p7 K( z Sleep(5);/ f2 w; [6 u) [& }9 W7 b2 C
//Error("移动 - %d->%d",nSrc,nDestPos);
' O, ^: i6 t" [6 x4 L) ~8 e) o. d nDestPos++;/ J+ {: D9 \" k- [# J' U
}
. l1 C5 m/ q+ [ //取第一个元素的信息# E2 b) c; d% c0 Z( [
/*# j6 {; \; U3 i b; Y' _) X
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
$ m0 W' P7 e' E {, v9 K) x- ^2 Z: ^7 }
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);/ [: `4 Z3 X3 d' F1 \# Q
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
- q) N0 p8 f2 y# k1 ~1 k- u }. A2 G9 t' y; f" P2 b
*/
: r* W- O8 n4 _% u7 B7 P# Y O! f //////////////////////////////////////////////////////////////////////////
* C. f3 f6 F+ C6 x `% S break;7 A+ }8 S. x9 b J+ i
}
f8 O/ O$ _9 H0 u1 E } 1 H& h- H8 o4 e: B p
}
6 j' ?. ]* p- c; p4 e7 I$ ~6 ^m_wndMenu.SetVisible(FALSE);7 ]! g+ ?/ u, p! z' n) W/ B: q: H$ z
! S3 l3 T6 j8 m5 ?6 R; v3 ~
--------------------------------------------------------------------------------------------------------
- b4 E" @0 l" P8 K搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)0 e& ~0 ~! R; c7 i
{; _: g7 q& J# C, j6 r: w2 e, F
BaseMouseCursor();; P, z$ J8 A: |; x1 |
}
/ R4 N, Z: k. a N在其下添加:9 U4 X" D' G _* b( [* K2 B5 d0 L4 }5 H* J
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)( I2 C! `6 L h6 p V1 q
{
$ y1 V, e+ ?, ]; w6 o0 sm_wndMenu.DeleteAllMenu();
4 J8 Z0 Z# o) Y; @$ l, vm_wndMenu.CreateMenu(this);! ?' {6 r- w3 P1 \
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");" R9 F6 ~1 F5 t+ |* p# Q* v
: f9 k. E* T, e* ^& k: n
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))5 ?8 H, Q3 v# g1 b- j0 Y
{
' f# g0 D- G0 L$ {$ z! T4 Y9 a //P以上级别才可以删除所有道具
/ s+ w7 J; Y" x- ^8 J' _ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");2 z7 [& C( P- u# ]. J3 C
}
|2 o2 E _! }2 D* _% Rm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );& V' d% k! U" t! [6 `
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );! x: R1 l0 M' P, B9 J7 C* ^
m_wndMenu.SetFocus();% f1 H9 G( s% ]1 s7 H' k( \
}
4 x2 \ C8 K' V# ]: B3 m9 F \5 y5 x------------------------------------------------------------------------------------------------------------
: G$ o+ _8 U) C) _*************************
B1 @3 |, N1 g: R! gWndField.h文件" x+ q n: P" U
*************************1 X+ B5 E/ m1 z. }- o d7 h
搜索:BOOL m_bReport;
7 t, z& ?7 D8 P& w L* n4 J其后添加:
' D2 N6 Q6 q/ r0 d z( @. i: JCWndMenu m_wndMenu;* [; G$ V+ W$ H5 E9 r( V3 B
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);2 _: W# M3 r! k/ I) h4 v/ W) `
其后添加:
9 X/ g3 B7 v2 k. B& Pvirtual void OnRButtonUp(UINT nFlags, CPoint point);
: b" m* v& f( ?' D$ U& @$ j
) B8 L, c1 K* X# L% [6 t: ?. i: y) ?+ r# P4 F' [
|
|