|
|
源文件中_Interface文件夹下WndField.cpp文件
N: c6 }' L' \, o$ @3 ]# m搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 Z+ b' q2 f1 U7 `* D2 h! a3 q( k( K$ s
struct sItem' x% F; g3 C6 }. r# j
{
0 j. T+ I5 H! A0 X8 N' FDWORD dwId;+ f8 ?" V) j3 o- x
DWORD dwKind2;9 k" b9 y1 c- [' _' m% P
DWORD dwItemId;
) K2 y7 B* z S* [! d. NBYTE nIndex;
* Y5 z+ `1 q( y" t1 wsItem(){& ^1 }3 @3 J8 J6 n; q. i
dwId = dwKind2 = dwItemId = nIndex = 0;
$ o2 C% i5 M% Y* Z4 J2 U}
% x- k7 P( S- i% U- \bool operator < (const sItem p2)% {3 s5 ~* a, o
{7 k, Y4 y( k" ?: T
if (dwKind2 == p2.dwKind2)
# _& m# J' p( T- i1 ]! T1 i {, [9 t+ Y5 C1 J9 q
return dwItemId < p2.dwItemId;
# o: Y8 y2 {* F+ } }else{% t9 t) g; J2 e! J; b
return dwKind2 < p2.dwKind2;1 _3 b- a' l6 X( y* d2 `3 e1 y
}& S. M, w$ v4 ~7 ]% A, |
}
/ f( x, \$ I/ W. X6 G};4 a7 F5 O z3 N0 }9 B
class CInventorySort
6 O0 D0 h! n8 |/ W$ P( T{& q) L/ B2 T) Y+ L i! S0 p
public:8 k9 U0 b; U& J- k4 X: T
CInventorySort(). Y, y0 H' }6 m' X5 j
{3 Y Y9 t; h& b* Y; }5 l6 \
m_dwPos = 0;
1 ~# Z& s- W7 l}2 q, }8 G( ]& {5 F4 e8 _* Y: @
~CInventorySort(){}
, M- W) g5 M1 Uprivate:
5 D% N5 v1 {0 msItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
4 O5 u ?, r P4 K. b0 oDWORD m_dwPos;
: F* ?/ B% G, q4 ]1 G4 J# Apublic:; [# x- M7 G- F9 a" l4 P+ g
void Add(BYTE nIndex)
}' g7 M% K; h% Q b{- r( p0 x& L: C
if (m_dwPos >= MAX_INVENTORY) v0 M: i# \: x+ `3 s6 W' e* [
{1 q4 H0 B! n: M/ v
return;
1 H8 G4 D" \) q, v. A* _$ m }
2 s! i5 m* b* N9 K( O/ s& X m_Item[m_dwPos].nIndex = nIndex; C, ~: x5 H# G6 f. p' ?) x
m_Item[m_dwPos].dwId = m_dwPos;
j4 k, w9 E# c$ P m_dwPos++;
: {$ R9 D' S6 |, C7 J; P" }}$ ^7 u2 D% ^! S
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
4 S$ d. m( f0 R1 ^" m: X! t7 z- v{
, J$ j# ?9 F( T& ` for (int i=0;i<MAX_INVENTORY;i++)
9 }) x; V& q: I7 k8 f% D {
3 o2 D3 ?) N. ^; r# {; f if (m_Item.dwId == dwId)
4 V3 r {- O% S {5 [, W7 `+ c% C4 j% v
return m_Item.nIndex;3 f4 g2 { u( o
}) ?' s7 y# T! f" E- z
}+ L9 ?6 V9 c7 |& a% r
return 255;
5 x, F& [4 s; H) z}
5 ^0 a1 r! b' G+ {$ v9 @2 \# ~void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置0 U" H$ _/ T; H! [" |
{+ @' o, A9 b' V! p7 N( ?4 f( }' p
BYTE nTmp = 0;
! T1 Y+ W Z- `5 F; l) b9 f bool bDest = false,bSrc = false;
s8 v) N2 T$ O$ h b8 ]" c/ q for (int i=0;i<MAX_INVENTORY;i++) e N! C' {9 H5 J
{$ F" W/ I) y" \* o; r" n
if (dwSrcId == m_Item.dwId)$ w: f) }6 g0 s; K
{; M; Z8 V0 T, t) I9 W6 D# e, N
//id相等 则 改变对应的dest和src
/ }+ {# }. T) O$ @% I- T nTmp = m_Item.nIndex;
* u _5 s/ n: R O5 d K m_Item.nIndex = dest; u" v1 u+ w. N2 T' v( C/ X3 E* F8 L
}
( [( @" `3 f Y+ r3 n8 B3 r }1 a5 d3 W* ?8 x9 S! r
//临时数据保存完毕,交换开始6 D* _# D. K1 l9 Y# s
for (int i=0;i<MAX_INVENTORY;i++)0 f9 `7 e2 X# L6 y% F, t
{
9 ~8 r$ }, G" _9 V) z if (dest == m_Item.nIndex)
2 ^" p+ |( q& T8 y0 h4 ^ {2 t- U6 L% Z2 h( k O' \
//id相等 则 改变对应的dest和src# g+ g( p6 I" x
m_Item.nIndex = nTmp;. m) N" o6 A. k9 y+ |
}
3 W, p o. z' b) _4 g: ?7 P } J* a7 t( W: P' U5 ^
}
8 P* ]! J ?8 \, x};
4 M2 o" a+ E' p6 E1 M-------------------------------------------------------------------------0 l- I6 w# X% g+ v
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 ]# E- T3 T7 W" a! a% d% s6 l搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
+ V0 Z0 b' Q2 x6 L紧靠其上添加:* ^. I% |( D3 o8 ]
if( pWndBase == &m_wndMenu )
. \( p3 k+ j& b+ Y9 |9 z4 R{
' x* z0 E; B; m, T2 A7 u+ ~ switch( nID )! G; A! s: ?1 q" s1 Z# r# r
{
* |1 d9 f. c! j$ o b/ K case 2:! J' j* N1 @$ u5 b
{
* A5 n# ^; j6 M3 d J& t //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
+ E6 r, u$ V- {+ r. Q& J if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))2 T+ O$ j& q% N1 ?
{
# L" y! l# j+ \4 u: J& ]0 c+ Q, S break;
! @) Z8 D! I3 H0 k }* A7 L4 R6 {# F0 {: P) `
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)) j0 G, R* R* ~- g% Y `8 P7 }
{$ M* Z" i" _) L8 m
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
) i& ^$ e/ b; z* M* v1 `1 R) ] if( !pItemElem )
7 d# t' @& x u7 L i- V+ t continue;
K$ S$ ^6 c" j! b9 i+ Q! X6 |, F6 [: a if(pItemElem->GetExtra() > 0)* A" ~2 ^3 d1 V& ?' @
continue;
8 L0 q( h: B5 H2 j if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
# x8 n3 @" o! v+ e& x" T continue;
5 b8 l; E, n9 k- Z) ^ if( g_pPlayer->IsUsing( pItemElem ) )
4 u7 g; ~0 r9 w$ _& B continue;/ W7 {# F+ h# s- m
if( pItemElem->IsUndestructable() == TRUE )
% _% r) @0 P' K* \1 i {0 t( T! a! z4 u' M a4 ]3 c9 C5 H. \
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
. ^( }0 {/ a8 U9 U+ F6 m continue;+ T& x4 U6 d M3 A( N8 H
}
; r- }" i& H7 `6 j0 V g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
6 u& B/ O; y, i7 Y; D7 e% D* Z }
; m9 `' Y0 S# P. S% c! ~ break;6 E5 t2 ]3 p$ Z8 ?% p' T" y# V
}
% u2 h2 \1 f4 D) k5 u- z, Y' A, S case 1:7 f7 q6 O: N5 s/ k* c- K
{
9 \: V( z4 _: b //整理背包
4 z8 W# W9 r- a1 P$ _ //////////////////////////////////////////////////////////////////////////3 i% _5 ?0 }! N$ y' ^6 I5 o6 a
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );+ y- w E+ v% P( k, G' ]" n- n. M" e+ d
//////////////////////////////////////////////////////////////////////////0 L+ t. H* L# b
//////////////////////////////////////////////////////////////////////////
4 U4 @9 o0 X8 I+ I CInventorySort* pInvSort = new CInventorySort;2 q8 v3 C0 B! I" I9 u
vector <sItem> vItem;
) { F& `2 r a. Q0 Q5 Z vItem.resize(MAX_INVENTORY);//初始化大小
; U0 {* [8 z+ L. N: X" M0 ` //////////////////////////////////////////////////////////////////////////
) u5 e( v' R/ C- i6 K, B) | //填充数据
& U+ @4 h, C5 s ~9 n0 @: v for (int i=0;i<MAX_INVENTORY;i++)3 Q, K! f- L8 P
{# m9 ]( m( A" |! b8 {
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
~7 P2 [ T; b4 k6 k5 B0 ~ if (!pItemElem)1 F$ L4 X& h3 g+ F/ O! y0 U
{
. s$ `+ i/ D9 ?) P vItem.dwKind2 = 0xffffffff;
' z5 L2 @7 m( K" Z0 s vItem.dwItemId = 0xffffffff;3 M9 z# a" f+ y/ V0 o
vItem.nIndex = i;
( Z3 s3 Y7 j8 x4 {4 t9 L }else {7 ?0 `8 l/ M6 }# G
ItemProp* pProp = pItemElem->GetProp();
% h, L7 @2 [" T1 X z0 x" \- k! Y vItem.dwKind2 = pProp->dwItemKind2;) @. x: R0 m! l7 q0 s) n0 ^
vItem.dwItemId = pItemElem->m_dwItemId;
3 |" y7 u* z' d3 F3 f; F9 i vItem.nIndex = i;3 y' U |) p& N* U) d/ ?
}
, N. ]. \; C V: Q //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 [* Q5 D- I/ K" K% i
}7 c, _4 m4 c2 _7 `8 b! K
//////////////////////////////////////////////////////////////////////////' ?; b4 _% t% u2 A
sort(vItem.begin(),vItem.end());//排序
( n0 Z4 t- s. W! G! j5 a0 O( x //////////////////////////////////////////////////////////////////////////
$ h0 q, H9 m; g1 B //交换
6 P C q8 \3 c) r for (size_t i=0;i<vItem.size();i++)
' z6 R" ?5 {; T% E0 N. S {0 y0 A' E$ n; d' K) f
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);; w; ?' B: _- t5 {
pInvSort->Add(vItem.nIndex);) b5 ^, d- _% q4 g, v" V+ Q7 ]! p
} w! O+ I' H) l3 F% ^5 |
BYTE nDestPos = 0;( d, \+ v- j7 \3 U
for (int i=0;i<MAX_INVENTORY;i++)
; s- z! ^/ M+ [6 W2 a9 H5 T- [7 U/ X {
3 _6 v/ F: I$ j- v/ d# h CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
, ^" c$ R9 S# l% L& ?/ l# B if (pItemElem)
$ L( C) \9 `& h+ ~8 v! k {. F9 [) s9 P y# @8 B
if (IsUsingItem(pItemElem))" n' x7 a3 v9 {3 {* h
{
9 H. [: A/ K, f9 O) B, U //这个位置无法放4 L4 _4 m% H5 l. `% Q/ Y
nDestPos++;
" p: k, Q& B7 M3 r6 D5 L, g" E }5 E' X/ p6 X' Y$ n! r5 w
}* l2 Z/ O E0 E: H1 g
BYTE nSrc = pInvSort->GetItemSrc(i);
5 K" c. i* G+ j/ A pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);; W6 o1 ?( o+ n5 A
if (pItemElem)
! [: E1 d- I8 R {
! m5 \# ^( ?' Z if (IsUsingItem(pItemElem))
7 Y& I. s+ m7 G0 `& W {
" \; U2 e8 o# p4 p //这个道具无法移动,跳过
+ E4 |- D. L& g( E3 ^0 o8 l2 M/ Q continue;/ w, d. v) |! D7 t1 f
}& m+ j; c/ I/ G0 A M8 b
}else{; a+ `2 S7 F$ z, H j$ `) u
//空位置 不用动
2 c$ E/ j- x/ f: ?- { continue;
* j7 S0 Y! y N" [3 S }
- f0 ~" D# A8 u //////////////////////////////////////////////////////////////////////////$ O, |$ d, Y' W: b% ?$ L
//开始移动5 G0 K. T! V4 y( D% O* b
if (nSrc == nDestPos)- C2 X! w# C) p) m
{3 b' Z; {5 x4 F: U( | p
//原地不动
% m# v6 H7 i+ Q- ]; ?) ` nDestPos++;/ j" r2 Z, f9 a5 U2 r. G1 n
continue;
+ q" O6 D) ?/ i$ c% y7 r9 _/ Q }
; B0 A- V+ e0 p" n9 d9 G X pInvSort->MoveItem(i,nDestPos);
* A. I0 q+ j1 X6 h3 R& F0 a' B g_DPlay.SendMoveItem(0,nSrc,nDestPos);
& Q) ?' g i4 a+ h. i( \ Sleep(5);
+ G: D [$ o, [ //Error("移动 - %d->%d",nSrc,nDestPos);6 o, O \" c# Y- z' N) C; ?
nDestPos++;2 |! u; j1 H3 Z
}9 U! P. n! k- E Z( T1 ]
//取第一个元素的信息
6 [( t6 x# K# P0 c8 Y /*
% R9 K% }! Q& a( p4 ` if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff); H8 U5 S1 c5 e; U, T& U
{4 k# v; T# D9 A; K2 @$ _8 O+ r
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
+ I0 [9 V1 [% p& [. ?$ M g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);$ [+ m2 X. M y6 A0 ` Y& j. Y
}$ q( b9 Q1 U3 j4 L
*/4 T4 x2 m3 S% R! L
//////////////////////////////////////////////////////////////////////////% l% |" }" _4 O. {9 K$ H
break;7 n9 f8 c2 f/ z
}
* e. ^! Q& W. X! o7 h9 V } . q) M1 ~; w0 n9 t9 D% S! P
}
# ^9 j1 ?' W* Nm_wndMenu.SetVisible(FALSE);
) E' I" _: b8 u$ F) n: o) X8 n# O3 X- k; }/ i# O6 N" W- T) d
--------------------------------------------------------------------------------------------------------
( K- _. v7 y' b# ~7 T搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
6 Y5 D: ]/ m! [% p1 y9 P{
) i! [8 q" q8 WBaseMouseCursor();3 r' b: p# y: Z, {
}
0 X0 A- @6 i5 w! r: q在其下添加:! L/ i6 ^5 R" M- h" U2 P& F
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point) S @- F& c$ S
{& `$ s2 N0 K. g. ]) c. z9 x& A
m_wndMenu.DeleteAllMenu();
, N- R$ \, o; j. r: `9 z: vm_wndMenu.CreateMenu(this);* N5 i2 S0 W1 _! N* L! y3 k
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
. ]- \7 _1 q9 t2 H& u4 ~" D9 G/ G- b; V8 x
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" H; {$ C. _" D @/ w" p) O1 e{+ }' ^1 a) T5 u/ T9 D. R
//P以上级别才可以删除所有道具- J# P& Z! {, Q$ w7 R
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");- T; H9 H4 M9 T6 e
}4 a- N, Q& U) v5 F$ G+ M
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
! O; }' H4 Q1 um_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
1 ?5 P* B( y- A+ gm_wndMenu.SetFocus();% B: ^& x3 q, c9 W4 S1 C3 B2 t
}
, s) Q$ [6 Y) W+ D8 T3 V9 C------------------------------------------------------------------------------------------------------------! z% g3 x9 {1 J2 H ?& j& q
*************************
5 b+ e* e* x1 g8 _$ g6 p6 hWndField.h文件) G* R) k8 R) t
*************************; v5 i# q/ K: m" C* {6 W
搜索:BOOL m_bReport;
( o: I2 ~* N: T( o% a3 N( P+ x4 H其后添加:$ w1 K/ }0 @0 ^
CWndMenu m_wndMenu;
2 C# D: a, a' ]4 T) H6 X3 l6 E搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);! R& O) q1 Y4 Q/ c; _
其后添加:
9 a9 M" A8 c) }2 M1 h: Mvirtual void OnRButtonUp(UINT nFlags, CPoint point);9 m% H+ T# h. A4 L1 b) q
" q: H) F \( u* v1 n# i, E4 F+ d
|
|