|
|
源文件中_Interface文件夹下WndField.cpp文件
8 x3 E. A, h, [7 d, M搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ) p* u, G1 v; H$ j% X: q
) W3 r* `: P9 gstruct sItem$ b, {3 J4 s: p3 o
{- I4 T/ d( h+ R- ^( ~4 f
DWORD dwId;
# L" V/ Y* g0 ODWORD dwKind2;
. G b- d3 N7 e0 {/ NDWORD dwItemId;: ~& A& F |2 m/ o
BYTE nIndex;
3 ~1 Z5 i+ ~- B5 P" U" {sItem(){" _& p2 X n* L# ~' ?6 n
dwId = dwKind2 = dwItemId = nIndex = 0;" c5 t% t9 f2 `" B c. x
}
/ { p# _' E: C2 p7 X. ?& R8 Nbool operator < (const sItem p2). q4 L8 H* N) X: p
{
) a' d& e' a; b7 W) D; j4 g. h if (dwKind2 == p2.dwKind2)% y. R. _7 U* }* c8 h5 k( r( R2 w
{( x& o4 ?2 {# {
return dwItemId < p2.dwItemId;
`$ r/ _4 K2 ]5 o' y p! t }else{
0 H$ p n" S. u; \ return dwKind2 < p2.dwKind2;
4 Q1 Y b& n! `. d }# S' ~$ e# e4 e( w: [
}/ b' [6 l; C8 x$ ^ u* K- D
};8 q/ q/ c+ u( K) E/ T) |
class CInventorySort2 J# g& q$ v% P; k7 s1 o
{
2 ]/ y9 N9 i+ F5 Cpublic:
8 S* h- x! W( H: Q0 V8 ?CInventorySort()
! {* X8 n( d; k- m5 ~+ ]5 q1 k{
) N6 `9 \" a/ m5 N6 ^, m m_dwPos = 0;& D* m% W' {( M8 E+ q. x' Z/ X
}
1 r% z1 G9 ~8 R$ i" v~CInventorySort(){}
! n8 W2 w0 q- } u2 kprivate:
! c* }2 }" I; O9 j" h( k; gsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息4 y. R; {# Q, m9 k
DWORD m_dwPos;
+ |. X3 n' u9 P2 d f7 n# ^public:4 Q' B8 |( J/ l# q1 P, L
void Add(BYTE nIndex)# M0 J( w% Y( V) D" o
{
/ [/ W5 w0 }' W9 N* ?3 R: z if (m_dwPos >= MAX_INVENTORY), e# Y* j) U5 U2 } ]+ x2 B( H
{
1 L$ g& E7 V0 G" L3 \: W, _ return;
9 M$ i6 z. x" L4 R9 X4 x9 ` }! S8 V0 l0 [/ F, w; [ U: ?
m_Item[m_dwPos].nIndex = nIndex;& e! b5 ~6 b/ M+ W. m, o
m_Item[m_dwPos].dwId = m_dwPos;
. F" m6 ~8 o# }- N2 a m_dwPos++;
: n+ S4 ~" e- r8 j d v}
* I3 O/ _( }; f6 M% }BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列% U& B# ]' A, r8 R# ]7 u$ \
{* w2 K* m, f8 J/ V, \3 ?' h7 r
for (int i=0;i<MAX_INVENTORY;i++)
& J5 Q& Z* S4 P {
; y8 o' l4 K3 d1 p* L. O- F& q" S6 Q. | if (m_Item.dwId == dwId), Y, m9 d" V; Z4 y: ?+ B5 I
{
: {. E, t6 b0 ?* i# x return m_Item.nIndex;
6 n P+ `( [1 e: `% s* U5 h }
6 D! K1 K8 r. K1 Y; c: c4 E }: N0 p' Q2 p( j0 n: }
return 255;; g. S) q; f4 B( X
}, c, _. }8 P) V% d2 n% i
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
, N7 ?) P- [. k. N0 |1 d{
$ L. A- t9 S Y& ?! c9 C7 r BYTE nTmp = 0;4 O& V/ c. h7 J; W8 o
bool bDest = false,bSrc = false;
9 @9 V! R7 U A7 e- Y; j7 z for (int i=0;i<MAX_INVENTORY;i++)4 N, n7 w9 E- b$ K
{# |( e1 v7 Y+ w: O; K
if (dwSrcId == m_Item.dwId)
) T: j w: K- @! Z {
' D. `3 r' g+ c //id相等 则 改变对应的dest和src! f9 k. d. i) m$ y& a
nTmp = m_Item.nIndex;
/ w! }: s$ u$ ?4 a m_Item.nIndex = dest;
# @! f( ], A. x7 E$ D7 D }
4 B. A2 j! r9 b# ~ }
3 j6 n5 I$ }1 x3 C+ j! ` h //临时数据保存完毕,交换开始
, R7 z4 Q+ G0 H3 _! k for (int i=0;i<MAX_INVENTORY;i++)$ g7 b4 p$ t) P3 \( }
{) A2 T% V# Z. [9 U
if (dest == m_Item.nIndex)0 Y. \4 I3 k$ }# U4 T
{* t c) } V+ B: H4 n( e# l. d
//id相等 则 改变对应的dest和src
+ R: f- }& n( Z. `0 @7 H- @9 @: g; m m_Item.nIndex = nTmp;, w6 f3 A0 f* R+ E9 {' o& n
}
2 M6 Q0 K5 J' [" s }1 H: H( j. O. G: Y8 F [
}
1 J* D4 T! B; `6 e};
+ O" m! R4 J* o" R* K-------------------------------------------------------------------------
7 n, G! ~) }' B' d0 h8 I: S依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ s/ S! q. x' \* U7 F$ e) h搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);+ B5 {7 f( h( e& d5 {2 `
紧靠其上添加:
5 l, z; H% B. Z% ^" nif( pWndBase == &m_wndMenu ) }4 {, x8 Z' {1 f3 N
{- I0 W- M% a- M& r5 ~3 h" P5 x/ ?2 C
switch( nID )
+ ]: ?, m, z' u0 e9 o- q, N {
) b" W' E2 n' b: b) E/ F case 2:' Y3 p+ _' u" C3 f' ~
{
+ Y+ }: q, S7 X; Z/ P //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);; R3 T3 _2 t* S0 r$ w! d
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 d7 Y. P$ n1 b; H9 k {; m" I" L0 r, S( }# b& ^: G5 e: Y
break;) }" \) f0 F5 w! e f# e$ J
}1 `1 h$ c+ W7 w' g! L
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
C ]( }9 _3 ?3 d( a9 z {, J# X Q( I5 Q/ E; b
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* ?$ n# D9 T7 n& B( W# B+ d$ J$ ]
if( !pItemElem )
5 r: i" r$ M: W. A6 ^: |& r continue;9 a$ C7 `: K5 a0 V: y* }6 N
if(pItemElem->GetExtra() > 0)
5 q) t! L" X$ v5 w8 g3 I9 O continue;
2 X) X) J8 Y! j/ Z6 L5 I if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 4 t" \8 g! \5 a7 s
continue;: D! t, y- g( J8 l Q) x
if( g_pPlayer->IsUsing( pItemElem ) )
; U: F5 N3 O: c continue;
+ ]7 h4 l' L( x# w if( pItemElem->IsUndestructable() == TRUE )
* p2 ^) I" W& c$ x" k8 w {
( f8 |5 k6 k' \; v m8 T) i g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
. ^4 A+ R8 t5 v# V6 h continue;% [6 I- P7 o6 W
}4 k; j1 r! U7 V$ G ^
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
8 e0 g$ o4 @' o }8 S7 D" }& o4 W9 d# b4 \
break;- H# N1 o% J, Y# }8 } ~3 [ @9 ~
}
: y! @! m( N# c case 1:; ~' h) D; d. W$ ?; W, `
{
% w% y! F# _; J; C2 I& j+ ?' Z+ E //整理背包
( i8 R. C6 z4 ^2 b1 n //////////////////////////////////////////////////////////////////////////, b) ^# ?2 u- ^" K4 p3 m2 B
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );5 O: h8 c* J" Q
//////////////////////////////////////////////////////////////////////////
. N- b& d o0 [ ////////////////////////////////////////////////////////////////////////// \/ o% z* g- L+ t0 G8 W3 P1 ~# y( T
CInventorySort* pInvSort = new CInventorySort;
+ p( G% d8 I. t; d8 } vector <sItem> vItem;: e# U9 Y1 M0 \; k
vItem.resize(MAX_INVENTORY);//初始化大小
* e+ Q8 ~1 q J. c- C //////////////////////////////////////////////////////////////////////////7 \5 p5 m l4 r. I
//填充数据6 H" Q' Q# x9 P' U0 O
for (int i=0;i<MAX_INVENTORY;i++), R q0 L! ?. a
{
6 p/ h* U: B6 b9 u" n CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; u- `+ t' A) A2 F; j k; { if (!pItemElem)
. A) i5 l- r* Z {
e: d N: M: W4 h' t% H/ P vItem.dwKind2 = 0xffffffff;" R1 c3 l/ y3 H6 ^% @. q/ f
vItem.dwItemId = 0xffffffff;
% v3 D4 T* |. r0 ]# D vItem.nIndex = i;
) A* U R! }7 U9 D& i4 O$ x }else {- V4 \, S4 m1 f+ z; n
ItemProp* pProp = pItemElem->GetProp();$ _; k2 p* |5 N1 I v5 M
vItem.dwKind2 = pProp->dwItemKind2;2 k! W7 `9 g5 ?0 }2 |3 e5 C
vItem.dwItemId = pItemElem->m_dwItemId;9 D9 }/ P! `0 q% k) [
vItem.nIndex = i;
& K% G7 Z1 K* m* K. [ }
' U3 d- T {1 P" n //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' R, ?* g/ a" B3 s" Z7 a }
% c$ j6 N J* M) J //////////////////////////////////////////////////////////////////////////: w( s) g; R A2 `* `7 N# I
sort(vItem.begin(),vItem.end());//排序+ ?- ^5 I, v. d; ^2 m& @
//////////////////////////////////////////////////////////////////////////2 {3 z: @! K; x9 H+ z; ~1 \) V
//交换$ |$ V, y& T1 Y3 i# r. I
for (size_t i=0;i<vItem.size();i++)
6 j' [9 z' d5 x. G {! g( d# i- M! I
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. {8 {$ r( Y% y, D4 n% W8 d pInvSort->Add(vItem.nIndex);1 o2 @9 s9 u1 F9 c7 W
}1 Q5 w0 w: n7 v \1 i ~9 X
BYTE nDestPos = 0;, ?% c) A; y" o4 [; X; b X
for (int i=0;i<MAX_INVENTORY;i++) ~ f" Q, N$ w c' g0 l: g
{
' l7 a4 U5 a1 D$ K5 { CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
+ A$ e% \9 P1 W$ V- q; _ if (pItemElem)! z* \+ g! n, g3 v
{- H3 q+ K$ I& w" |# R: \
if (IsUsingItem(pItemElem))
( ~2 \$ B7 Q6 h' N9 N {3 i' h2 ]0 w- _" x
//这个位置无法放! w3 O" h3 Q- x) {; ?
nDestPos++;
8 p# r# ^" x. O: m1 F7 ~ }: o# G8 u4 j0 R
}
* }' j, R& W* r+ h* o$ s9 g! G BYTE nSrc = pInvSort->GetItemSrc(i);5 ~% A% s0 O( S; T" K' O
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
- C) |! a4 I4 G6 e3 q$ X4 G% _6 I if (pItemElem)4 N: z$ J) n! H3 U
{) s5 @7 O+ B$ Z% p" X5 {0 C/ b' x
if (IsUsingItem(pItemElem))
4 R! r9 i( _! }* C {
7 Y. M& b" g8 [* H( i //这个道具无法移动,跳过
: c8 [: ^; K; R5 ^ continue;) b' ?# E: ]& W! L
}& N' K+ q7 J5 v9 \' _
}else{2 E& j1 p# t. B& Y9 h
//空位置 不用动
- s& \5 t* Y# C, m# C- T/ \ continue;
7 H5 y! f1 ~( u( W9 ]# i, e }9 k7 x2 l t1 Z5 S, J
////////////////////////////////////////////////////////////////////////// k( a; O, G; |5 d
//开始移动" N$ M0 l4 q( G- d# T& a/ m
if (nSrc == nDestPos): R1 I- Q+ |' y
{( q! {7 Q4 ?" t/ E( s. o
//原地不动
8 Y, N3 w" c- U8 {# B, ] nDestPos++;$ g: v3 X- Z6 R9 X
continue;
5 m# q) t$ u( C1 U }4 q! i8 L* k" T$ j6 ?6 F- ` [
pInvSort->MoveItem(i,nDestPos);; Y, ^( Q- ^) J5 J
g_DPlay.SendMoveItem(0,nSrc,nDestPos);! k, i) p' p, X, _, l2 H8 J
Sleep(5);7 d: i/ l/ r3 X" w) A
//Error("移动 - %d->%d",nSrc,nDestPos);9 [1 R# f$ Z+ Z3 Z3 r# I: k: }9 T
nDestPos++;# L e8 d. y2 v, U2 G% M
}2 l& n! D3 x1 q# ^
//取第一个元素的信息
+ \( c/ ~% u7 j1 v l: \ /* X$ Y3 j8 _1 e3 [# A. l
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
: q$ K( h8 q* X {
$ G- C. V1 a H Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
8 G' {% s& X# p% Q) X/ S5 l9 E g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
4 o, L2 }3 J9 P+ A }
& o$ p3 E% ]( ]5 j5 Y. A */; q+ m+ [: ?+ T! P9 [$ d7 c1 h
//////////////////////////////////////////////////////////////////////////
1 i' a) J$ n+ o) Z- \* w. F* V break;
, G! V+ M0 e1 [* U/ \ }( f" R4 q2 l' k/ E8 a! x
} 1 Z% N' M* c+ y0 J: V; p) M( I
}: F" S% @ g& M% m
m_wndMenu.SetVisible(FALSE);! m+ _% X/ S$ s; o# y0 x- M( x
$ f# A! v- D s
--------------------------------------------------------------------------------------------------------* ]% Q$ I& y# B3 D7 Q+ }
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
& Y: I8 j; |( m9 b: m2 x{
3 v/ _* y9 w. kBaseMouseCursor();6 M2 ]7 G/ q" ?& G" n
}$ K! r, X; @# P3 A4 Y2 G1 @
在其下添加:+ j+ X1 ]" a* d, G' | p
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
5 N- H6 i# t) i0 M( m X& `{7 l& w+ A8 s2 W- U9 c. Y9 W
m_wndMenu.DeleteAllMenu();
6 C9 _- j/ X* T5 b; @- y2 lm_wndMenu.CreateMenu(this);* T& S1 `' N9 H: C
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
/ C4 f6 T4 y: h$ l) s {9 b
: d$ B4 v+ t2 r. hif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))7 E9 ]- b7 G: U
{1 S7 U! P/ M& _- v% q% w
//P以上级别才可以删除所有道具/ c2 z& {7 e# [. e
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");4 A6 L* w9 |% \
}2 B. ?* ^7 [* d& M" |, r; l
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
. q% e+ f8 e2 F, L! Gm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
6 R5 v# S- X2 Y4 s) t4 `0 Fm_wndMenu.SetFocus();% e2 Z0 o! L- t$ k# C4 c( V
}
3 y0 j% [9 y% R% E7 y. t0 F------------------------------------------------------------------------------------------------------------/ N4 a; d; E' W& a
*************************
4 P3 q9 j5 ?! V2 s m5 cWndField.h文件- \* E+ P! `) u# [- L
*************************
$ T& X1 y$ }3 ~. q搜索:BOOL m_bReport;
9 E# J) M8 [: ]$ {" U其后添加:. j2 _& @' b5 a2 u4 q- }" R& S0 B5 `8 p
CWndMenu m_wndMenu;
3 A6 o$ n8 D/ R搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
$ u, L8 b0 F/ t ~其后添加:
5 s7 w" \: R- F$ [virtual void OnRButtonUp(UINT nFlags, CPoint point);$ L+ J9 V7 Y3 m& b* [- @) @; P/ X
9 S' W- N( c; n
) ]" I# t! ~7 Q& ~; V3 B
|
|