|
|
源文件中_Interface文件夹下WndField.cpp文件7 M. E9 {6 f7 c9 f& t3 U
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ ~" { u' ]+ q' V* `* o9 P1 m' A; ]& L1 v8 e+ O$ b
struct sItem
2 z1 G3 {/ g9 x7 H; j" R8 @{
$ z) B$ Z B* E5 S( ?' HDWORD dwId;7 L0 [+ X5 I; @
DWORD dwKind2;1 s9 p3 ?1 ^$ Y1 H: W! d, N6 h# ?
DWORD dwItemId;
( h7 u5 c& K8 ~9 G K: Y/ C, qBYTE nIndex;
4 n/ W6 W2 y9 H+ v. nsItem(){
0 g! X. ]- k. b' _% } dwId = dwKind2 = dwItemId = nIndex = 0;
2 S o5 F8 u: ?9 q# K" o}) ?3 E, t8 }) @' N3 g i
bool operator < (const sItem p2)
]- O9 p& s: l E2 x% C* l{
/ `; ^& |7 k+ _9 v if (dwKind2 == p2.dwKind2)
" Q9 u+ S6 f8 V# r! h2 C6 h: C, q {
3 `& T6 G+ H6 v7 l$ w: | return dwItemId < p2.dwItemId;
+ l) A9 i: S7 i& U2 T; x }else{
3 p. X+ |. y2 u3 w) l- E2 G return dwKind2 < p2.dwKind2;8 z6 o k/ s+ Q
}( [+ g# U1 O1 k! W7 K/ m! [% A3 E
}
$ H; h2 W* O4 m) J9 \};' g8 m4 e( P3 O$ X/ K4 t; v6 G
class CInventorySort
4 I! Y; I T- X" k: S* W{+ G6 s0 Y- O) z/ P3 E; W* v
public:) K b* A! }+ l) j2 H" b
CInventorySort()
z7 S: p7 r1 X" v5 b0 ]6 P5 Z. i{! S% ^/ a9 t5 x2 d& i
m_dwPos = 0;6 L" Y5 a3 @9 T" `8 j+ |3 C
}
/ I4 b. n' L* v- I7 {# i" p~CInventorySort(){}3 v8 R$ z* Z5 ~! w3 A- Z
private:
! p, G9 M. _( H! l1 i% jsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
7 ^& `% t% M$ b& wDWORD m_dwPos;; F5 o% v6 L6 t5 K" w* E7 m; v" S- ]/ z
public:3 e2 R9 I7 ]2 T9 X2 l$ H7 B
void Add(BYTE nIndex)
7 T( A/ P3 m8 W/ r; V$ R{
8 x7 V7 h( O8 v if (m_dwPos >= MAX_INVENTORY)
7 _5 W% C2 ]1 H ^2 M3 ` l1 [ {7 R: O( ^6 B; K- b9 z& ~# Z. o7 ~) n
return;
p$ J: j* i' H" x7 H4 b E- K! w }1 \4 H E) D. X
m_Item[m_dwPos].nIndex = nIndex;: m% V* _5 p+ x$ j3 Z7 t
m_Item[m_dwPos].dwId = m_dwPos;
m5 b% Y5 c3 ^ H4 \0 [ @' [5 T m_dwPos++;
7 {" ]8 ~( j* p" @9 }: J}
* a0 `0 j) a2 I) n) C% B0 a; IBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列# J5 R# p0 D) ~( y/ G' f: i
{
% m5 ~, J7 K" e& B$ l for (int i=0;i<MAX_INVENTORY;i++)
1 c5 g& X+ `+ {! q% H2 p( p4 L {
, X/ K/ C' |7 U" C0 q if (m_Item.dwId == dwId)
# p9 N/ _9 z- h* x" t: F# E {
L+ @2 F5 Z: f8 W return m_Item.nIndex;
! S$ e! V& L* e, A }$ ]: r# f) f$ p6 \
}0 x+ w; }0 M2 Z) y) v) l
return 255;' n X3 q g8 M; ]
}
% H% w9 J: x$ Bvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
: N Y$ ^( ]# Q; k' H{4 ~* B( Z( E% B9 o4 h7 d' M+ ]5 s& I
BYTE nTmp = 0;" c2 s- X6 C+ ?* |9 U0 A6 E
bool bDest = false,bSrc = false;
. C' t" ?* e) l$ H for (int i=0;i<MAX_INVENTORY;i++)
9 K; {. L- h3 E {' q: }. M# j2 b3 }
if (dwSrcId == m_Item.dwId)/ ]8 i& y/ o/ X; o* w2 C5 l$ p8 {
{2 i# M$ Q. |& i1 s6 H
//id相等 则 改变对应的dest和src% u8 O) j1 @+ D$ G( e# t
nTmp = m_Item.nIndex;
' q1 q/ c! W) q/ k m_Item.nIndex = dest;9 y7 Y) m1 x( i B( q2 f2 L. k
}; O1 T7 u8 c3 |; g
}
) [$ s3 }1 u: O5 }/ [& j: F: R0 r //临时数据保存完毕,交换开始; I- j% v) U: {% B5 X4 F
for (int i=0;i<MAX_INVENTORY;i++)0 C3 ?- E: H O7 }" B/ l& J
{9 t( r/ z% q% g6 D' y
if (dest == m_Item.nIndex)
# _- }4 M7 \) q' |, a: ?7 H- k {
: z8 C2 k, `2 h% g' D //id相等 则 改变对应的dest和src- h8 I. p# A4 E' @: f
m_Item.nIndex = nTmp;
) F1 b' M" k, V+ k& G. y, o2 n& p }
+ B( d4 e9 a c# N& ^ g }
- ~) \: U" f1 G# q& ^! C}
" u# K5 `5 a1 Z) d7 c+ w" D8 {: d7 _+ n};3 m0 F9 H4 K" V! z, ?" }
-------------------------------------------------------------------------, h' `6 W5 a# A# e* {5 d) q) Q
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 w% e4 [( r- h6 w9 B搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
Z' L5 g F8 d2 Q" M紧靠其上添加:
9 G' W7 n/ F% ]" |# T$ x8 C/ z; C" Xif( pWndBase == &m_wndMenu )% W% v; V$ l9 p9 y' f% K" F
{
4 D+ f! H8 i, F7 `$ a switch( nID )9 m2 m% O4 N9 D
{
" G8 `$ j8 ?9 F {8 A5 z; y- P case 2:0 d& k9 [) y# P; r' K
{- J! z: \7 |5 y5 k9 U/ t+ P7 v
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
" Q& x$ U: v5 b1 Y3 x, G if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# @1 |! `. ?6 l3 l( J$ H
{
6 o$ z7 S5 r; ?) b. C break;
7 }1 x7 U5 B b2 r } K/ |2 W H' A
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++): y& [5 k9 N6 j$ A8 L
{
; m6 V; m& v9 ?6 P" p& @ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 t9 s) y, _1 c! j( a# n. u
if( !pItemElem )% Y: ?5 R- {( ]/ }
continue;
5 v: Y2 {' m8 b, u( f/ y7 f7 J if(pItemElem->GetExtra() > 0)$ Y, _: o7 M5 `0 H( Y
continue;
# E. {; a( N$ n if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 4 x% Q- X1 e+ Z
continue;( n3 Z/ W- z0 h8 |% _5 b
if( g_pPlayer->IsUsing( pItemElem ) )# x5 p4 u3 [- d$ v: V
continue;
9 f0 N& R9 S9 {: r w if( pItemElem->IsUndestructable() == TRUE )& A! i8 F% Z/ e1 O
{/ p1 V, ]2 \: m6 m
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
7 ?0 I/ ?& m3 t A1 W: F* _/ \ continue;
* U" \. s# A4 p( D% W }0 e7 H5 ~2 f: Z
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);) e! ?3 z5 N" H. B6 Q% W: l
}
. L$ d6 K/ N2 X4 o" q) B" b break;
* K8 b9 s, V9 G }" l* U! T* j. p; x- F) H
case 1:( E& \" B0 U: g7 D! Y0 ?
{
6 p! I6 k. v+ ?0 m: o //整理背包
' Q. l2 N" Q& n }# P9 ?! h //////////////////////////////////////////////////////////////////////////0 p' [% G% s5 ?. X, O+ S/ l
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );1 I( ^6 g, ~" Q; |! y/ h) q
//////////////////////////////////////////////////////////////////////////' I1 m3 U5 {3 H
//////////////////////////////////////////////////////////////////////////$ D8 Z# {4 S" D Z/ M; R1 v- j+ B
CInventorySort* pInvSort = new CInventorySort;
2 I' M, n* X: D- `" v, ? vector <sItem> vItem;# m/ F0 {( y) b
vItem.resize(MAX_INVENTORY);//初始化大小
' H+ f% k% @: {* n- ?) {9 O- [; Y. P //////////////////////////////////////////////////////////////////////////
: a3 i1 y' R% M; }# ~ z4 O //填充数据/ l" Y) o% D, C9 n( V
for (int i=0;i<MAX_INVENTORY;i++): x9 C" |$ d" u! H3 k; Z, X
{
/ `- b+ i/ ^" z( X% B7 |% \ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% {8 g9 r1 F/ n0 }; t if (!pItemElem)* M! c- D+ y$ ?6 ^0 [
{( g+ C8 P$ Z% I/ e5 x9 d3 a
vItem.dwKind2 = 0xffffffff;9 L! |/ k8 O5 G) g
vItem.dwItemId = 0xffffffff;
1 N' Y" v: {1 [ vItem.nIndex = i;
* p$ D" Z" ~" V9 x. T* ?9 M4 j }else {
" l3 e/ C$ x4 x9 ] ItemProp* pProp = pItemElem->GetProp();/ ^/ Q5 h# A7 C3 v6 T; o
vItem.dwKind2 = pProp->dwItemKind2;
) t c! ^" G+ R {3 P vItem.dwItemId = pItemElem->m_dwItemId;. ]( J4 K, ^& P9 `
vItem.nIndex = i;0 _* \1 [' n" x5 `0 f/ U8 z# t$ q. m
}+ q+ p5 r5 z0 U/ K
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 T9 A N$ k8 w! s- t }* U4 c- m0 h; H
//////////////////////////////////////////////////////////////////////////
7 k$ g0 t$ X' J, S/ K: } sort(vItem.begin(),vItem.end());//排序
5 C# p: @9 m# C( D ////////////////////////////////////////////////////////////////////////// B1 Y( Z6 K* d9 x7 T: P! x
//交换
# q2 s8 |) ^: _9 m for (size_t i=0;i<vItem.size();i++)
3 f8 H: ~$ c" D9 ] {
6 x# p* |2 @7 f. q' g //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' C2 E- [: r0 M% j
pInvSort->Add(vItem.nIndex);+ g" O! W) _" G1 O3 a
}7 ?5 b6 F% ~; d
BYTE nDestPos = 0;
7 n( n) ?% C' S- Y7 T9 X: k0 u for (int i=0;i<MAX_INVENTORY;i++)
0 S8 h) q' B; A$ B, ` { e" E' j% S' ^# v: U- d7 u
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
- w" k. V6 n& n; k- p+ x0 c: X if (pItemElem)" `& Y8 W) _0 ]' V. l
{6 g, O- `/ U8 h8 g8 P
if (IsUsingItem(pItemElem))
_4 W, O* e& S. N3 M {
# a+ v5 s0 t# T& G+ b- m, a$ F- \ //这个位置无法放, `- r5 q7 T2 ]& A
nDestPos++;
' f) K; s" U" U2 }7 i/ E d }' Q8 x+ S7 S3 C5 ~* x7 l# f
}4 r9 \, m3 ?" k6 G" \3 k y
BYTE nSrc = pInvSort->GetItemSrc(i);9 O( N/ u$ u1 x
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);6 |5 t- u- G f$ A4 x3 A
if (pItemElem)# K( Q) L' i0 j8 \/ ]1 @
{
3 |$ s: y8 \5 W' F: v if (IsUsingItem(pItemElem))9 U% A" |) ~* \0 _: w3 R/ n; S
{
1 h4 K7 W+ ]# L9 m& b2 R+ J //这个道具无法移动,跳过# Q. h* g5 v4 {$ x1 R# z1 P
continue;
2 _. y+ c% u0 I# S; m }
- \) N: l3 e' n5 l' h }else{
/ L4 @2 _9 w5 f0 g6 N( T, Y //空位置 不用动
8 `0 T4 {% ^% c" u5 l* { continue;
% f# |( o- H/ b3 o; @" H( } }) O7 ]4 P7 d: T" b5 ~
//////////////////////////////////////////////////////////////////////////
! `" e& a+ W3 L" t# ? p/ } //开始移动
( ]- _: w: C! W if (nSrc == nDestPos)# R4 U3 L: [5 W; t5 c: D( u+ o2 d, K
{. D5 x ~" f9 Z9 h
//原地不动$ Q3 v( `# N2 ~* b
nDestPos++;
2 w1 e- n- Z- i7 D continue;. A1 u/ d+ E: N% _% M; [/ J
}
4 U9 R1 }) Y# S* P2 J# c& w pInvSort->MoveItem(i,nDestPos);
/ o! x" F7 x! b w; Y0 Q( B g_DPlay.SendMoveItem(0,nSrc,nDestPos);# i; e7 v& g o2 b& d0 X! _1 J
Sleep(5);
2 ]; k* p+ q8 b7 j" r- Q //Error("移动 - %d->%d",nSrc,nDestPos);" k: L3 D; Z4 i( a9 N: b
nDestPos++;
9 Y- V( F0 r+ |, T# d) |! S( ]6 F }+ ~! B& N- H O
//取第一个元素的信息
( V* k0 S/ J4 I; q4 K /*
, Q9 I+ o$ C$ e- H$ l if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
' [ O% }. H9 K* J i6 E {
$ e2 }( a% M# t/ N1 @) a Error("Move - From:%d,To:%d",vItem[0].nIndex,x);: t. J: b$ G% O* T) n
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);) c: E% e( I! y/ f9 }
}
; C! s* k0 ^0 g: z8 I */7 H5 L: H$ G% }: E
//////////////////////////////////////////////////////////////////////////
5 T' e9 x2 I+ \7 L0 V" L+ q break;
' s9 i( K; ~& V7 w* D, y }
; o1 H3 e! P, R' J4 n } * g" r! G" P' @" _" H: v! l
}
D2 Y4 ?5 B7 q& S8 u: h6 |& E# ?m_wndMenu.SetVisible(FALSE);
3 s [6 D1 C z4 {. i/ j0 A! s( M& I) E, _) O, [2 C; Z
--------------------------------------------------------------------------------------------------------5 L8 Z5 P* F5 E; c/ e& N# G, K* t; [
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
4 H! ~5 J% O* Y6 p, m{4 ]( M6 N. W% A1 z6 a& T/ }: Z
BaseMouseCursor();. a/ V6 A% e; f
}
\. r7 A4 S& x# L; z# @* W在其下添加:4 {) d, N1 s' Z1 s# x4 t
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point); _3 f Q2 O5 ]4 I
{# X+ [' S6 l, I0 ~5 z4 N/ h; L i
m_wndMenu.DeleteAllMenu();
9 d8 l% Z2 H w! {" ^. o' Lm_wndMenu.CreateMenu(this);# H7 @5 S5 L0 |1 d. n
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");2 _$ ?5 [3 S, g l) ~
% U2 o& F3 B* y* [- q8 B. w Iif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
, O2 L; t! w6 g{* s/ z! H8 j9 @" \! t0 J) d
//P以上级别才可以删除所有道具1 d! L" i6 J% ` e9 t8 ], Q
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");3 u" C! d0 C# X! e. F
}" v$ m( D# {' T4 ~% _2 q
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
. s, p" W8 R k1 z+ s0 nm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );( E* p2 x5 v- |# H1 w# K/ C( t
m_wndMenu.SetFocus();
2 z& j- P4 |7 y/ ^}5 b. u" Y% ~7 U0 L) s3 F8 W
------------------------------------------------------------------------------------------------------------
; t* S# i a0 B# a- X' F*************************& X7 h4 l. O9 z2 ]0 R/ \5 F" x
WndField.h文件2 z" q3 O8 N5 x
*************************
; u/ m9 z: ?# I7 C+ i: Z! A搜索:BOOL m_bReport;
/ t' _ _/ s# a0 g' ^& X: b其后添加:. M) s7 ^2 V, }$ R% P, B
CWndMenu m_wndMenu;
0 Y9 ?& l: t8 Y) U5 s搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
$ t* k2 K4 p; M0 f* x) r其后添加:
, }: }" s+ X; Y. X& i6 z* avirtual void OnRButtonUp(UINT nFlags, CPoint point);$ B& V8 q# o h; u7 F
$ }9 C* K# G2 ?3 ?
- B( @3 \' G6 H7 a& `$ g w. y |
|