|
源文件中_Interface文件夹下WndField.cpp文件) [- ^$ F7 s5 u0 h% Q# g8 R( E
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
- h, Z5 e' U/ P3 E1 X4 `$ J- h$ f( S, _) v! p/ S! t9 h9 ?6 r
struct sItem
, K$ D4 {" T. Q' q, W" s{
) S" O8 y7 P9 Z% V4 c$ @& ]DWORD dwId;+ W8 U: Z D5 Y7 z" m
DWORD dwKind2;" a3 U- w2 v: C# M" [( T! w: r8 o5 w
DWORD dwItemId;0 E) R, P! v5 Z! ^
BYTE nIndex;9 v3 d# D* K% k9 l0 r, n
sItem(){
, |1 \& K' ~* x' s C- R8 V2 J dwId = dwKind2 = dwItemId = nIndex = 0;
% U, y1 C6 A4 d}
. j3 M2 |0 h+ u& L- g* N4 z J8 kbool operator < (const sItem p2)
, J8 R6 f: `6 ^4 i{. K* o$ ~: y* W) {
if (dwKind2 == p2.dwKind2)
7 c' p# S4 q2 D% e {
( s4 W, v( d8 A$ E( ~ return dwItemId < p2.dwItemId;. F+ B0 [# q" v' {
}else{
. y3 W' [0 X* E return dwKind2 < p2.dwKind2;
( w! l. O! f3 R }' `7 p! R/ b( t
}
" K C: s3 W7 f3 A};
: o o6 I0 s5 Q5 o# d9 Qclass CInventorySort) y: V% `$ F- m' ~6 y/ \5 M/ @
{
" S4 e& P6 | m: v& dpublic:3 a" j$ w7 w. `7 C, T" Y
CInventorySort()
3 b2 ?6 c/ ~& I( k5 K0 y3 S3 s6 ]{' N3 U9 z' Q) Q
m_dwPos = 0;
% e- H/ j; }% _# q4 l9 M}4 h5 g5 D5 ]9 _7 W: Q: a* W" i3 n
~CInventorySort(){}/ f, w3 d. ^( ]! C- ?9 P
private:; E+ t/ Z# W6 g% w( p% [; ]
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息% i$ r: Q5 ~, j
DWORD m_dwPos;
/ m6 \6 S# O3 |' xpublic:" q }" @- s; Z: @' d
void Add(BYTE nIndex)8 O7 L2 ?5 ? C2 ]
{/ J0 [4 F# [, R9 `) [7 ]
if (m_dwPos >= MAX_INVENTORY)
- H+ l2 k0 ?/ r2 G( Y$ ?4 Q {& c$ ^* } q4 s' d* g4 F6 t
return;
6 K$ _ K Z l- W/ F. L( C }
# z" `4 z) L ^8 N9 J m_Item[m_dwPos].nIndex = nIndex;: R( P0 f( \: c b* W; U# A4 v
m_Item[m_dwPos].dwId = m_dwPos;8 U1 C, Q6 f L" j5 b
m_dwPos++;% t+ P* A, n, o6 A) J% g- E7 G0 _4 m: ]
}& t7 H) H3 N8 w; p- b. D' f0 ?
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列) O1 [% I4 g7 c
{* u9 ~0 ?% b4 H7 Y3 H
for (int i=0;i<MAX_INVENTORY;i++)
1 B4 W; u: Y( J7 b {# C* p) \: K* P' N. x# ~3 Q" D
if (m_Item.dwId == dwId)
( X: {/ i8 s) ~$ F% V! I {7 E( W9 J! ~& x! X1 {
return m_Item.nIndex;! |8 ?3 y$ L v, ?
}
0 I3 y2 s$ p! D) I }9 B/ N, v3 K( g6 w9 ?# e, @
return 255;8 U! q8 A; F5 O6 G$ r
}: s2 ^- w M* S' J0 D* s7 `
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置. g0 L4 w0 h' o
{) w+ Z# G0 }. B7 U
BYTE nTmp = 0;
1 v$ w/ a* }3 z x bool bDest = false,bSrc = false;2 |7 x) g9 I& ]* l
for (int i=0;i<MAX_INVENTORY;i++): x2 \1 ?, d* s
{! S# X4 z* Y% ]( p( s) Q6 P
if (dwSrcId == m_Item.dwId)' @- h$ Z& g% M! m: R
{
, M" u1 K! n1 Y$ B F0 K //id相等 则 改变对应的dest和src
& y% `* x8 |7 D# T9 \ nTmp = m_Item.nIndex;. @. M# E$ l3 o% O. k
m_Item.nIndex = dest;
" t$ I1 o3 [$ r" |; g- }2 E0 b }
2 R9 ^, h7 i6 Z) h* T! {2 Y0 D* f }( y' Z: M! C2 n
//临时数据保存完毕,交换开始! D) b2 Z4 s- `, P$ N0 w6 O
for (int i=0;i<MAX_INVENTORY;i++)' n: f7 m4 @& q' S' b7 }
{
1 U8 J" [7 ?! T9 w if (dest == m_Item.nIndex), m6 V% h$ I0 z+ ?: M- H" k5 r% R5 T
{
5 I% `1 [$ E+ L+ Y //id相等 则 改变对应的dest和src2 C& o; h& y6 ~+ R2 C
m_Item.nIndex = nTmp;- p3 t- ?5 \& r4 S0 F! j% M
}
* U( h- Z5 h5 _ }
1 I8 T9 s3 y( ]1 r$ o1 k t}1 p' n. [- C$ O3 @7 d# v
};
+ B: C* F; d% ~# h0 ]-------------------------------------------------------------------------
^6 q9 S* h) J依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
* K4 x. u, e" Z6 W; f: X' C搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
. X7 |8 ?0 w2 x2 a紧靠其上添加:
( Q+ D" x2 l9 W* j1 ~/ f9 s% Eif( pWndBase == &m_wndMenu )
7 S: J0 o) R# ^1 V) _{5 i0 U' v7 I3 u' p7 p
switch( nID )
3 g7 g% c; S$ @: F- `1 b* ] {1 ]7 Z% ?. d; V6 [/ `+ E0 U) l
case 2:' B/ h0 _: u+ l% t5 f
{
8 c+ G w( h. z3 R% ~ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
( J7 g, V! s7 m/ e4 H if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
' A k/ p4 r3 P- Z/ p+ f {
: [8 z* d; h1 Z break;
/ B1 u6 f$ F8 a& c }
- I! K$ @9 b2 I" Y for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
* O' v1 U0 q3 n3 s6 P0 @0 ^ {
! B' E6 E- r! S) q" f! P CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 z$ o# r9 g( E! d
if( !pItemElem )+ e- Y; C! d! f/ a7 I9 k/ j" }
continue;
5 ^4 f0 _ u, y+ m' T& C if(pItemElem->GetExtra() > 0)- H9 r0 o1 e/ B! |, i2 Z
continue;
, h' W. s. l; I# L+ \; V+ l- f% B3 y if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) : p$ j- L0 c& e- O
continue;
8 E3 t+ Y2 m& @# C& M8 I if( g_pPlayer->IsUsing( pItemElem ) )
, Y1 T9 G3 C# G% X( j continue;% w3 }% C+ V9 o, f7 ?
if( pItemElem->IsUndestructable() == TRUE ). w: ~' x! _4 Z& f: e) Y
{, V* m0 l r; K$ Y9 _
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );, N5 P J2 d7 E% B' `1 f1 l
continue; G) C2 m5 U: r/ e( _2 p
}
, i N3 C d. ^0 t% G, w0 G) { g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);: c/ v% z' M6 P% w- @
}
0 N8 U/ L) e, y- ~/ Q break;
9 W' F7 F$ ]( w1 L }9 N5 R" s7 d: t7 X$ @+ X1 ?
case 1:1 M! A6 U1 X" s- |' m- W* ~
{
! T" r6 l# r5 `: X //整理背包
1 \/ x; G& U( x" j9 a2 I //////////////////////////////////////////////////////////////////////////
9 p3 P5 m' z x+ ?2 I //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );/ g. Y" U- Z Y- ?. d6 y
//////////////////////////////////////////////////////////////////////////( d2 q# G1 U8 `# [3 D8 h* A- @
//////////////////////////////////////////////////////////////////////////
2 e6 c0 D" u( L' `5 t- ^ CInventorySort* pInvSort = new CInventorySort;
% I( d# l i, I2 c vector <sItem> vItem;
& S- X7 r5 D$ I. {5 k vItem.resize(MAX_INVENTORY);//初始化大小# G' k4 N7 q# N8 S1 f2 h
//////////////////////////////////////////////////////////////////////////" X& f9 _$ H R# Z0 g) S
//填充数据- U! b0 v) E. r$ k
for (int i=0;i<MAX_INVENTORY;i++)
8 h% Q9 [/ X, @( J2 `5 x {6 Z" L. \* t+ A3 l1 d$ V
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 @; p. W) _( _8 P: e if (!pItemElem)8 |- o2 g2 a2 K- O
{$ U( \, ]" @; n* l; ?0 R
vItem.dwKind2 = 0xffffffff;, t9 D4 g: p ]. ^$ X
vItem.dwItemId = 0xffffffff;
) r) Z& \* r; `% Y) d vItem.nIndex = i;8 ]% Y8 I- c, Y
}else {9 `9 q1 p$ c' f# a0 K& w H
ItemProp* pProp = pItemElem->GetProp();
- p7 o% O* E5 f3 F: r vItem.dwKind2 = pProp->dwItemKind2;6 G- ^& H& a, G! c0 X+ k) B
vItem.dwItemId = pItemElem->m_dwItemId;
0 D) T; R0 s. n' L: Y6 o! H/ g vItem.nIndex = i;7 `( Z# m8 l6 f( t
}
7 h8 x1 @. N% }; {& E- a) c //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 G% R- ?/ Z6 v* ]6 |$ k# M$ a) W
}( l0 m; |$ C; Q' l) r. D- i9 q0 T
//////////////////////////////////////////////////////////////////////////
# q% _/ U1 U& U2 w& I9 f) a sort(vItem.begin(),vItem.end());//排序* g+ f( _8 S# ~5 u
//////////////////////////////////////////////////////////////////////////
# }7 Q; U, x( N //交换! z9 K: _) [$ K' R# S* u1 m$ o8 N
for (size_t i=0;i<vItem.size();i++)
( F3 C, k6 }" @; V: c, Y {
j c6 d2 d& H7 X- S4 Q5 B //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ T1 y0 X6 _; e+ |0 U. T+ v% [8 U
pInvSort->Add(vItem.nIndex);
' M+ {5 ^( W/ D0 e4 ~; K5 R: Q }
* ?+ Q1 Q7 a5 T8 x' a! g. U# m2 P BYTE nDestPos = 0;+ h8 F& C0 z& h, T5 y4 e* V
for (int i=0;i<MAX_INVENTORY;i++)
& {* Y8 U8 H% ~9 T; ~ {
) ^3 r3 D5 T& e" B CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);* E* B$ T* i" ?6 p, b
if (pItemElem)
, k/ g: q4 N) m7 m {
" n0 k0 W2 m% i8 E; `! @- L if (IsUsingItem(pItemElem))
; R; H- s6 Z0 k$ M& i {" a- y; `8 N+ s( W# Z
//这个位置无法放; U- O- {, E0 @$ k, n3 y
nDestPos++;& K% F9 ?* e2 S
}1 s% D& Q T& I- T5 ^6 J+ }$ O
}# O+ ]5 r) E, C% B; ^
BYTE nSrc = pInvSort->GetItemSrc(i);
0 L% }; {8 Z2 b8 ^ pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);7 x# y2 p. d# k" A% V* U& R- ^
if (pItemElem) V+ U: [6 U1 W n# @
{
3 Z; I. Y8 `/ K) |# { if (IsUsingItem(pItemElem))
& ?- S( E# ]3 v" x% V" z {- R$ {% q5 T& r$ x2 |: M
//这个道具无法移动,跳过. K& C# I+ M/ H& P2 x8 ^
continue;
/ c; y3 r. [- q- ~ }
% j3 a' h6 D) k% S }else{7 R% l6 ~ g% H2 F; G* ^- z& a
//空位置 不用动
y' N2 A$ z/ p continue;
( x" {7 f1 ~, B* }2 Y }
' p0 ~8 z1 L0 Y, C) {* Y //////////////////////////////////////////////////////////////////////////+ Q3 h! S, K' J4 S( b5 I U0 N0 a9 j6 o
//开始移动9 _3 W% N+ W# h) J, z1 F( ^0 Y/ ~
if (nSrc == nDestPos)
6 s7 Y( S# c/ |" r2 ~8 O+ y {! f) Z) R3 E( y) Y
//原地不动2 w6 v2 i1 ?8 d# _& w
nDestPos++;( o# c% H, R. ~* F7 T
continue;- f& n& l [- T ?. |7 n0 R
}
4 j! u2 L$ D3 y( e" ^ pInvSort->MoveItem(i,nDestPos);
7 V1 }& f& [1 X g_DPlay.SendMoveItem(0,nSrc,nDestPos);/ X n2 O: l b( W$ A7 z0 g
Sleep(5);/ ^0 t$ D' [" K
//Error("移动 - %d->%d",nSrc,nDestPos);
: n$ N3 d+ n$ } nDestPos++;! B+ a0 _& X" g: g: w
}
9 W! `. \' B( F; o4 n //取第一个元素的信息1 j$ b* S4 C* n/ c1 S5 K
/*
$ w. J1 i& j& { if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
; E/ S7 Z$ e" g* W: d7 C3 W& u" u {
2 G1 d# c' d& l Error("Move - From:%d,To:%d",vItem[0].nIndex,x);8 R# R6 I% w2 L' R! \' V0 ]# O
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
( ?% O& O, \* w5 U, I( v5 d }
- ?9 x' E* Z( U0 f0 X# d */8 }" k. j- D' Y* Z; F: Z
//////////////////////////////////////////////////////////////////////////
& ?' A1 q+ T8 |+ o* ` break;
s4 n1 ?' |& r8 p1 L- D) o9 X# f }8 [* c& M. c) F+ i3 C/ n
}
: \/ E r; H3 \4 ~}5 u" M% c2 G+ F( H/ f# D7 F% R
m_wndMenu.SetVisible(FALSE);5 a, t6 z, h3 L i4 V
( G- n7 @" F1 J3 z- l3 d+ C& u
--------------------------------------------------------------------------------------------------------
( l; c7 Q( Y+ A' t( s5 \搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
3 X/ {8 v! C' Z1 g( o{
4 G% v/ w' L( v4 a( TBaseMouseCursor();+ f* N+ V6 z: @6 Y
}
; x" N, @5 `8 U在其下添加:8 `2 D3 j( \+ c# e
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
4 ~1 F+ n+ n1 \8 o4 Y6 D{
0 [8 S- v$ K+ y: l) x; A# C! z8 Hm_wndMenu.DeleteAllMenu();
8 q: U6 {8 P2 }9 t) K: c. B$ om_wndMenu.CreateMenu(this);$ D8 B2 b( C# q5 g, _0 l
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
3 b# i6 G0 U ]# o
5 l# T0 Y& E; z5 p, x) Qif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 {7 r$ O! U5 o6 ]/ z& q6 o{3 \/ S3 I, K& x) [$ M+ N o# U+ _
//P以上级别才可以删除所有道具7 J3 U2 C# v4 s; q
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
! R% Y3 M* X5 @) a/ e" T}
2 t( a8 r" o7 j3 em_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
# {6 {" ~4 A4 Zm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
4 l. N4 S9 \! _# jm_wndMenu.SetFocus();$ `2 |9 T& S9 r
}, g: y8 }; }3 S: V
------------------------------------------------------------------------------------------------------------
) n1 y, C; o3 k( s+ M*************************5 |: g; o) n' T, b# w
WndField.h文件, b6 ~0 l! j+ a+ ]/ n6 @
*************************
: Z% |& _/ J3 ~( u' o- I: h! Z搜索:BOOL m_bReport;. p# a I- u, }% ]9 i* k2 ^
其后添加:9 M8 f4 d6 H8 r0 P
CWndMenu m_wndMenu;
- b/ d# q8 g& A7 L5 c搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
' X4 `4 |9 o k4 m, @1 g: |3 c, T其后添加:7 y7 b& ^6 J8 u# j( e$ V$ d
virtual void OnRButtonUp(UINT nFlags, CPoint point);/ I/ `( I" R* H
% V2 S+ R+ f" d5 f$ @0 o
+ n, ]* e* G+ w; k/ G2 t% f |
|