|
|
源文件中_Interface文件夹下WndField.cpp文件
/ ^ b. H( w* F% f* u: ?/ j搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ ^" I$ I Z' t, j2 ?2 `( L
8 {: B3 U% B' g1 k) |+ h8 N% j- k/ r
struct sItem
. I) a( K- E' k; k0 E& m% [{
" ~4 w/ e9 ?) t, r" t+ NDWORD dwId;% D! y- C0 O) ], [, x( h' [
DWORD dwKind2;
8 `7 ~2 Q* z* c: hDWORD dwItemId;- e- V' `! {1 S& A
BYTE nIndex;$ z' P7 s5 i& _( r: x8 B% R
sItem(){% ^' k' t# L% L
dwId = dwKind2 = dwItemId = nIndex = 0;
# X. j1 i3 F; ~0 m2 x8 ~; {}( _$ T/ x7 E) N8 k6 V
bool operator < (const sItem p2)
# D2 F( F5 N* l% u, _{
' w# T: m5 T! Z8 w( Q( | if (dwKind2 == p2.dwKind2)
# G. e5 f" e, l/ V4 Q) S {/ U5 |" D# N, G& H9 I* {6 w
return dwItemId < p2.dwItemId;
A- K, d ^ v' A3 S! V }else{0 @# ]/ L5 `7 N& t3 u
return dwKind2 < p2.dwKind2;
" v3 F. ^, k" ?# g. p: H }7 B- n5 @, Y2 {* _: Y) |0 D
}
- \$ }# j; p- f4 U0 e: Y}; w) l* R) E/ {) E0 P2 Y9 i5 }
class CInventorySort
: N! C$ L* T& N, N, X% t{, o7 r$ q* m& L% r" o, O0 c/ u; L
public:5 [" t3 b/ u; T7 p0 H
CInventorySort()- |# E* m0 G! E9 O4 S
{
$ W; s' n0 }1 \4 u* Z* r m_dwPos = 0;6 j) t( @& p, e/ p5 T( U
}* X' i* V+ ^- k+ K9 h, F) ?$ g
~CInventorySort(){}0 ?& q4 Z3 E+ L0 m5 B0 S
private:4 R2 h# a& z6 u2 m
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
7 l8 I# p, N# e/ q( T s' ODWORD m_dwPos;
2 o7 r2 i+ y6 k3 w: c" Zpublic:
: B# ^3 K; c% f! K0 s1 T3 e: J+ Gvoid Add(BYTE nIndex) K7 m t2 ? d* Q
{; y: B" A( c+ ]1 A7 z
if (m_dwPos >= MAX_INVENTORY)
: ]+ w' f( i% b( k% x, | { i# O7 D9 J4 E% S0 d, u( V
return;
% [0 A2 A m$ X9 ]/ D4 M2 ]% b: Y }5 i' f6 G) A$ m
m_Item[m_dwPos].nIndex = nIndex;
. P3 a; N0 {/ T& N: z+ r7 y- l7 G m_Item[m_dwPos].dwId = m_dwPos;
9 R: ^0 Z( ~+ d7 F3 \ m_dwPos++;7 ~" E V' T* V: ]8 F
}
3 w3 f! l0 H; S K' b6 U$ iBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
( V6 A! W% |5 p: y{
* k( t+ \) M. K# P for (int i=0;i<MAX_INVENTORY;i++)
2 U$ j" A* r: X G {; P* I5 [+ h( s! Y8 V" Y
if (m_Item.dwId == dwId)
7 V2 c' O V0 u2 ?% | {, d1 V0 x6 r S# @- V" S0 P4 V
return m_Item.nIndex;
- r, P$ Q u# b2 g } m/ Y% }9 V1 n( g% X# W0 J
}
& M% U) W. \; j# v return 255;0 ]# |* E! ?6 \. ^- D
}
: _+ k; P( i0 q) Qvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
" S. [5 m7 L; x& A8 ?$ {{2 f$ `4 Q, y0 v4 K0 U! v
BYTE nTmp = 0;
" D9 T$ [: U i2 v& G0 x$ J3 V bool bDest = false,bSrc = false;5 D: b B" N1 S a% c, ]) e
for (int i=0;i<MAX_INVENTORY;i++)
! @0 u" h+ o$ [7 P) }3 q {
7 e1 U$ k9 ^& D) U5 A if (dwSrcId == m_Item.dwId)" n1 j" g+ ~# \) E, b
{
+ N# q8 h) _; i6 ~ //id相等 则 改变对应的dest和src8 r( V# N" q# N* S
nTmp = m_Item.nIndex;
% V7 w$ |" e5 g. s: ? m_Item.nIndex = dest;
8 c+ F- ]- s8 ^ }
- {' Z) r+ Z" A1 j0 Z; V9 X7 b. U }$ E% ^9 z3 [0 k% C3 m
//临时数据保存完毕,交换开始+ y7 j$ o3 L' G4 o. m" I( _, C
for (int i=0;i<MAX_INVENTORY;i++)# S9 c& o; I" s# M6 Y c: u: |& S0 T
{
% J7 z9 R& y4 N& g3 A7 I% p+ f% j if (dest == m_Item.nIndex)
7 D$ a. c2 A, d5 O( u! B8 Y {: ^* S8 p; b- m8 ]
//id相等 则 改变对应的dest和src
' [. D0 W: ^/ X w+ a5 v m_Item.nIndex = nTmp;
0 V p4 k- _% o$ q3 I }
4 n8 C9 z0 ]2 K/ f8 e0 O }( s! k3 o0 s- n
}
$ i! F2 U7 G7 }# ~8 F9 U' Q5 Z};0 P/ i7 h% c: Y) P: ~
-------------------------------------------------------------------------
! \' `4 m/ }( N/ q/ l依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
( z7 @; z5 G* R* g搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);- ?. R7 z- C- l( s/ x
紧靠其上添加:3 ]7 c4 H% Z+ z
if( pWndBase == &m_wndMenu )3 Z' n# S, l% C* E0 K. s
{
9 {& s) H; _. D+ ?7 A% Z3 F switch( nID )& B2 _0 J# \( h6 D. m8 C# g
{3 q) V) i7 a* \
case 2:2 J. ]6 E$ E$ j, _4 @
{
8 i- u8 e5 @* _; V //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
: n# g+ e+ x2 g3 s7 o K) m if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. S% J- x2 g4 P* }+ t# B {
h. f5 V" a9 i! W break;
9 Y9 v& z. l1 M1 x }: D7 V% t& O3 y) P
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)$ K8 ?0 p X/ \# P! Y
{
$ m2 t% r# m2 `$ c7 ]7 n! {- Z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. s7 j4 e2 }' z+ n8 U9 t
if( !pItemElem )
9 e) P+ j& } P2 J& @/ t; d: | continue;1 R K) _/ P- w: |+ X
if(pItemElem->GetExtra() > 0)
6 `* i6 R! k& i% i R6 ~& a continue;; n/ W7 H6 s* U! K& {: W o5 c
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
6 T g' s6 s2 x# F( O! E: ~ continue;, L( |) Z* s! a3 r0 j
if( g_pPlayer->IsUsing( pItemElem ) )0 ^+ B/ ]* S b# a1 a" g( s. g5 Y/ A
continue;/ e# I, u7 Y) u+ l7 o6 W
if( pItemElem->IsUndestructable() == TRUE )
" M( a8 X$ n2 T1 \ {
\1 u" H! g: p9 y ~9 s, F7 U g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );, G3 P6 H/ \* e7 c) D% q! P
continue;
4 d X/ ^3 m+ ^6 ~$ q. ? }5 o% w9 O/ z& c/ G
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);7 c: n+ B* t5 b0 s. q6 g
}. W; q$ C& h( V5 N, ?
break;
* E) _1 D$ F- ^& M- k) k3 r0 [! c$ R }
' B1 n6 I: h' h case 1:8 f' o* r- {6 q8 g
{
) {" Z" C0 X4 c) N* b //整理背包
) z1 S/ y, Q# K; I O. G- N0 [" q //////////////////////////////////////////////////////////////////////////! K r) u0 Q N7 G7 _% `7 p
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
- r. y0 x: Z, m* ~3 X/ F //////////////////////////////////////////////////////////////////////////
. n/ p) _9 m6 Z: i1 G" B# u //////////////////////////////////////////////////////////////////////////
' o- B" P; _3 [ CInventorySort* pInvSort = new CInventorySort;. Z4 E, Q4 J1 c' L
vector <sItem> vItem;5 J1 l1 N5 }& K: h/ Z
vItem.resize(MAX_INVENTORY);//初始化大小$ U: j) |3 n- g* v
//////////////////////////////////////////////////////////////////////////
5 w* F5 x4 }0 X) P //填充数据- E0 `; B! R1 Z& T* P! U' \/ w0 _
for (int i=0;i<MAX_INVENTORY;i++)
5 M& X$ z" q) c; v; Q6 k {* [+ M1 N9 A+ c% ]% b
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" y1 h/ s$ D' G8 U- H& _
if (!pItemElem)
% h; h3 p, I8 W3 C& r4 K# t3 Y {# A1 Z" k, b6 q# W6 j1 w) V
vItem.dwKind2 = 0xffffffff;# x. F) ?$ @; c8 T
vItem.dwItemId = 0xffffffff;9 b |2 N6 A7 S. f& {. j V. v
vItem.nIndex = i;, D3 f) Q, U4 k+ u- o
}else {' ?1 o6 a. F: z/ I a
ItemProp* pProp = pItemElem->GetProp();
! u: |* ?! |' } vItem.dwKind2 = pProp->dwItemKind2;! r) Y" c4 Z+ b' @- o
vItem.dwItemId = pItemElem->m_dwItemId;
9 g/ d# z& f3 X0 ^# C" O- ]( I vItem.nIndex = i;' s# K- o- F9 }4 x, f5 N
}
( U. i! I& {6 h6 F6 x" o9 ~, E7 i //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 U! W4 X- G7 G }0 J1 |7 H; a3 x0 s( P- p& l
//////////////////////////////////////////////////////////////////////////
3 ]* \0 P1 O* r4 @ sort(vItem.begin(),vItem.end());//排序
9 \- t9 s: H4 X1 W: P* w //////////////////////////////////////////////////////////////////////////! V7 i7 I+ z- I1 T' P' f, A
//交换3 A9 D; Y; [1 P O. i' b
for (size_t i=0;i<vItem.size();i++)2 G( g" f+ W8 F
{' W( L; k8 d: F
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 _0 A& \9 z8 C* v
pInvSort->Add(vItem.nIndex);/ S2 M6 f, }9 D" d
}; X6 u: b; P7 ^& e c. D
BYTE nDestPos = 0;
9 a- p0 P/ i4 G- u5 m for (int i=0;i<MAX_INVENTORY;i++)5 C3 i+ U' {5 L2 d" \2 D
{
4 N+ B; I1 @; y# N0 v: q0 T& Z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
+ B" u; e. i* ]- k9 k if (pItemElem)5 j7 A$ o4 a% y! S
{
; o/ n) X, z% i3 {; h! R+ f1 u if (IsUsingItem(pItemElem))7 A0 y9 d$ c. L
{
! k* T" u% i9 s1 y4 H+ m' ?: }& D //这个位置无法放
+ ~8 F* c/ ?9 d: I0 O nDestPos++; {# y( h- T% q2 F5 W
}" b/ Y1 }: c0 O6 u- c+ j
}/ U6 g: g$ B K, s ?5 ^; v* Q
BYTE nSrc = pInvSort->GetItemSrc(i);
. P4 `/ J. l+ J7 v. n) O$ y pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
% `2 O- \" G. f- `' F2 ] if (pItemElem)- {* j, p5 x8 O- W& ~% J6 r9 ]. s" v
{9 R/ K6 O# \( y! B* B8 d
if (IsUsingItem(pItemElem))6 l# P. {: N, s: S: u: a% ]
{* G2 }" I1 z1 f+ u* U
//这个道具无法移动,跳过/ e( r4 H0 r: p8 Q( o& { M/ D2 Z
continue;* R( E$ B2 g+ @2 \: D+ s0 a3 L5 U
}3 s- U7 V6 R8 p; J7 m" o& R4 q
}else{
5 t1 J5 y$ m& F( Y* B& H //空位置 不用动
: K" B3 A8 |1 G2 u# s3 I F continue;
6 M+ r- \7 r7 [6 @ }
$ Y. x) |6 v! X! j/ H: K# A //////////////////////////////////////////////////////////////////////////, V/ [7 x0 h. P; M: M' Z
//开始移动
8 \% @5 c5 s( s$ I7 b$ | if (nSrc == nDestPos)4 F$ b" I# B9 y. P
{7 r6 z- ^; w0 H' b; {
//原地不动
, z8 e! u) y# t9 h9 A3 ` nDestPos++;
4 N0 S j" s& j; S# I b continue;; X) y: V9 B: O& A# _
}1 A6 ~+ @" |0 M; s, K
pInvSort->MoveItem(i,nDestPos);
$ p4 r; i) {. C. x6 ` g_DPlay.SendMoveItem(0,nSrc,nDestPos);1 p3 W% y8 Y% _# i) B7 ]
Sleep(5);
x3 O J' D9 m, q2 Z //Error("移动 - %d->%d",nSrc,nDestPos);
' i/ z& d% f$ o nDestPos++;
; n! b2 J* y q ~; G9 k }
$ `. g( H0 z7 \ //取第一个元素的信息( {: H# l. ]7 O. b( ~
/*
: M% U: z( J: h8 b% A if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
2 `8 ?) J5 ^9 C: V {
3 K* M. h* N4 I Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
" `) a8 }/ I/ h4 Y% { g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
! }$ F& b" F2 h2 l }' D' j" f, [+ e# `' d0 r9 e
*/
4 {2 Y5 f" `; l3 ^/ q5 p //////////////////////////////////////////////////////////////////////////
8 J- y& \* z) X/ @ break;
) G' h8 j0 E/ G }6 @- ?( F5 c0 b& p4 Q O8 B6 h
} ' y. {# T& C: C
}
4 P5 H$ I% l0 Q! K. M! H% Nm_wndMenu.SetVisible(FALSE);7 Z( e$ X4 C. ]7 v1 O. x6 h u
1 P% P6 m( i) I9 P6 R G# g--------------------------------------------------------------------------------------------------------0 k- }- u" _. P) F
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point). @( y4 N* q: t) i% c/ k, C
{* u3 R- K* l7 ^' R) w
BaseMouseCursor();% c) y6 i) d* H* R0 Q
}3 _4 N, Y$ {) X4 Q# N2 V- K
在其下添加:3 T: @# r$ [3 Y; ?, Y3 G! \! V
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)$ X- {9 @( H2 U- P- k2 G7 i% W1 `" P& M
{
8 d( ?. ^( g. I: dm_wndMenu.DeleteAllMenu();
O9 S- d: |7 E8 R6 p! f$ u6 um_wndMenu.CreateMenu(this);" b, j3 c; P; m; w6 Z+ ^! [
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");! w' v+ @+ m" u/ S u6 s
7 J; h' q0 }) w1 p" fif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)): _( f* j+ o- P: q# t
{! y* [ ]' V5 S% i6 V, X& ?
//P以上级别才可以删除所有道具
- u- d3 i" Z4 z$ h m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
: p: c3 ~2 }' b" n; p- K# ]. v" H& r3 o}
) n" ~7 f q3 \9 J. O! p" Qm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
- G3 z2 O7 D; y+ Hm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
; h, }+ s( d3 i, n( zm_wndMenu.SetFocus();0 D( x7 w# k/ c. ?
}
- _, |% S4 a+ O- m1 f, ]. N------------------------------------------------------------------------------------------------------------8 z U3 R. m1 f: w Q% b! w& V6 J
*************************7 W1 e6 Q( N( o$ b; O
WndField.h文件2 y. E3 Y- A0 E: E
*************************
0 g. E1 }. K' R+ w搜索:BOOL m_bReport;
2 D$ ^5 C/ W" z其后添加:
4 F/ [7 d- V! b8 E, ZCWndMenu m_wndMenu;
& Q. d# t S9 ` B/ l2 X* R搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
2 b5 q- p6 p' K: m其后添加: S1 }; L! z" Q' Q Z( R
virtual void OnRButtonUp(UINT nFlags, CPoint point);
) c! q# t* P4 y8 T
: P# V) a. P1 _
, X& B8 {9 D5 Q2 j' U! Z0 X( D6 t |
|