|
|
源文件中_Interface文件夹下WndField.cpp文件
6 d4 W& S3 m ~搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ x4 m' d9 D; }/ C! y* L# ]
( B, W6 ^6 I+ E: a: r
struct sItem H+ o' d7 `6 D
{1 h/ S; R( w! k v; t
DWORD dwId;: r/ Z3 o! y; \- { b
DWORD dwKind2;4 A( ^7 t" t% T4 {& Q
DWORD dwItemId;
- B. S1 Y+ ?3 g- l- D) S7 s& \BYTE nIndex;, B. N# f4 E! v& r
sItem(){
& Q6 R9 `& Z: n4 O dwId = dwKind2 = dwItemId = nIndex = 0;+ X! Z, M7 |% x
}
* ]% v) |( @3 h: H- ebool operator < (const sItem p2)* _- r& y' m; ?0 G: n8 ^6 p) ~
{
# S8 p0 g. [: g if (dwKind2 == p2.dwKind2)* B* {% j6 N* v P* ?
{2 o# e1 G6 q/ Q$ M1 q
return dwItemId < p2.dwItemId;" C- f7 d8 N! u% P( w
}else{
) |+ |' J2 G5 D% Z return dwKind2 < p2.dwKind2;
/ X' ~ c$ x4 o$ ?* p3 }$ H. c. N }
# [8 U9 c7 f) n; M}
" R- [' u3 w4 i% |; r};7 F1 A% U9 r$ U$ w
class CInventorySort
. J* w Z, f5 q{
; x1 ~* O# n9 I, _& qpublic: P# Y9 R& i! H3 _* G# M
CInventorySort()
# \" v% z, [5 C{
4 {8 L7 |+ q p2 x1 }7 U m_dwPos = 0;* k; N; v9 B& d R
}
8 g, O) W- d1 g0 Z* a4 b* S6 s~CInventorySort(){}4 k0 {. i2 v( P* r. l+ z
private:
9 u+ ]. _3 s' PsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息, ~/ D1 c# g: y. h/ Q, g. g9 W
DWORD m_dwPos;+ K1 |6 z# K% x& ~% q- h6 Z
public:# Z2 q2 G& `9 l; t( T
void Add(BYTE nIndex)
# F7 ~* y8 t* i2 b{
) @6 h8 j. I4 Q4 d" b' Q7 H3 | if (m_dwPos >= MAX_INVENTORY)
. f0 {6 T- |: u& Z- `# [ {
$ K/ X# J: `, ], Y# k2 I0 E return;1 g, ^) [; _# `' z6 ?4 K
}7 T5 U* ]& A, H' P6 X! I/ K6 Q
m_Item[m_dwPos].nIndex = nIndex;* h- K# {# _3 N" a3 d$ c
m_Item[m_dwPos].dwId = m_dwPos;9 \+ {8 Z, o; [% W% I. n B$ B
m_dwPos++;
, s' i' T, B% i}, n; a- s' m5 ?- U
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
8 F, z( C; _) A2 T# N3 x{
W+ c- R' @5 T for (int i=0;i<MAX_INVENTORY;i++); ^6 J. Z8 M5 z, [0 n8 b; |- \- x# ?
{, o( S- |! n( F# {+ g1 n/ w) I' I; h
if (m_Item.dwId == dwId)
; y6 l# C0 y2 h. ~7 d( c; t {2 S/ |: f* C9 W9 Q
return m_Item.nIndex;0 E% O! I) Q8 `) @
}2 h+ l- j; ~" @; k& ]. D' e5 W+ `( S
}# R% O, |1 t9 g/ H E+ X! [
return 255;
8 ]2 T4 M ~3 N8 p* r}$ p% D- F2 D5 h6 A5 y7 o5 `
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置- }# J2 r" w, Q, m# ?4 G( Z( [, s) J
{6 u% z. ~ D! s) I1 ^
BYTE nTmp = 0;5 r# z' _' T! d1 P
bool bDest = false,bSrc = false;
$ D6 ~6 v' _9 z+ z( w, y5 [: X for (int i=0;i<MAX_INVENTORY;i++)1 `) X2 P' ~& H; ]
{
@0 F) {+ D4 \ if (dwSrcId == m_Item.dwId)
* X* `/ M) K O {
8 B% v% Y' j0 y# A4 | y- X //id相等 则 改变对应的dest和src. w3 y; E q" T* f# q' I
nTmp = m_Item.nIndex;( ^% |0 M) d: T! D
m_Item.nIndex = dest;
4 Y5 p' ^$ \9 b; ]5 K }
6 R8 M/ i; v1 X$ n% ]' s% U }
( b0 M. j) z9 Z; Z9 x //临时数据保存完毕,交换开始$ d( D% f4 d+ ]1 f6 P
for (int i=0;i<MAX_INVENTORY;i++)' ~6 k8 e# b7 Q F
{- ~. N2 y$ X* }) @# O5 r
if (dest == m_Item.nIndex)
m3 K% t* ?; i {3 W! N% V* N5 d- s( ]6 \
//id相等 则 改变对应的dest和src% S& y' }2 g: |" F6 J D# J( ?
m_Item.nIndex = nTmp;1 I3 d5 \% A* T5 |4 k' K N# V
}9 ~% g. l5 s# Y) y8 _0 V
}
0 o) Q( O/ U5 ^, w7 b$ L* f. d}. Y, w I2 t- {; Z9 A8 H
};
, Q; O6 r( H/ N% M9 @-------------------------------------------------------------------------
& K2 K& a! c* K8 B. y1 x& `依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): g ?0 {8 \, @8 [/ R( X
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);5 T4 ^* V* R* `! s
紧靠其上添加:5 J/ ?5 f/ r# e' u+ d& M
if( pWndBase == &m_wndMenu )2 p- C" j d% J" U2 p B* |
{
* d7 _. q$ f6 o8 l7 k switch( nID )
$ e* A* K* z8 V: M {
7 R, H; M [# y# r4 R case 2:
/ x3 x- b! W, `- y {3 [& F8 J" v& X1 R ~% E- x
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);0 ]6 `2 H! F/ `7 G! R
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)) |* ^8 X6 B; Y
{
/ ? j2 I) p+ H7 }* Z/ m break;
8 Q% x! `4 ?8 y* q1 W) ~7 v }
- |) m) O+ w9 W2 U' o% R& s) b for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
7 _. p( Z( @ A3 q; ]- }' X, j' r1 d {- j- |+ f* Q8 m- G
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) q8 p7 ]# F# Z/ L
if( !pItemElem )
) _+ w) t8 I% o continue; A4 U6 ?! i. ~0 \! o h% b: j
if(pItemElem->GetExtra() > 0)
: }6 x" {5 g' w, m- v continue;
: Y4 E4 R8 {2 a$ m9 o/ {, ] if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
- ?* V. _3 T2 c6 m& ] continue;
' G" ]6 ~) w! Y0 X8 a if( g_pPlayer->IsUsing( pItemElem ) ): N+ }& s" l4 L8 A
continue;1 N* R* Q; T# w* A
if( pItemElem->IsUndestructable() == TRUE ) ~1 \" X+ R1 V" f3 I- L+ I
{, y. r I& ^2 J
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );- P* |( L# _# x1 j' J6 m
continue;
$ `4 I' y: y- {0 H' f2 N }
9 {6 A ]2 y2 b" u g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);" W# u* Z/ y2 Q9 Q u
}
7 i3 g- z/ B5 V break;" l0 H. s/ `6 }! v
}
" g; L) l4 q8 o; k case 1:
# ?: A) u8 S. |2 S* |% R f {+ }( I& Z7 W/ x0 ? Q9 ?
//整理背包
2 i+ H9 ~$ ]5 s2 F7 N //////////////////////////////////////////////////////////////////////////
. l6 v, l( f( T ]$ e! P2 U6 {+ ]3 | //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );- p( R4 U# z. J
//////////////////////////////////////////////////////////////////////////: X2 }! R* @% c" E; G
//////////////////////////////////////////////////////////////////////////) l2 j, [0 o) m/ s! f, e
CInventorySort* pInvSort = new CInventorySort;
k. N- m) U: V1 d vector <sItem> vItem;' T1 K, H& x1 R0 D" ?; }7 P: r
vItem.resize(MAX_INVENTORY);//初始化大小% n/ W/ F {) I% z& f f2 \9 }# r
//////////////////////////////////////////////////////////////////////////
$ `4 {7 D4 P) K. d( Z //填充数据
6 y! i" j- M: }% f4 ~1 { for (int i=0;i<MAX_INVENTORY;i++)' ^6 B' E+ h. z' y' }
{6 o7 X* N0 J h/ J
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. T2 X) i* h) N! M+ R4 Y- ?% V
if (!pItemElem)
8 x5 J) y4 a2 P; ?; i. x8 w {- h+ J. m+ m7 K, V2 d. f
vItem.dwKind2 = 0xffffffff;
0 \3 f% }' ?, z" G. R vItem.dwItemId = 0xffffffff;
( S; d; F; B `+ d# a vItem.nIndex = i;( O0 y6 J6 d7 K2 ]8 C' g% y# I
}else {3 c5 h: M1 y3 F) W# V2 n; x
ItemProp* pProp = pItemElem->GetProp();
# ?( G' j2 @" R- m vItem.dwKind2 = pProp->dwItemKind2;
+ S; L: o! E7 w$ C- H vItem.dwItemId = pItemElem->m_dwItemId;& N5 }. _3 p c+ b# s. K% k
vItem.nIndex = i;
7 O3 g, H+ G' U# \ }5 t3 Z" [2 n) ?3 @' I. H
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 N7 d1 Q6 Z& e, `/ I z9 b9 a* {
}3 w- W* Q! R( w& T, h
//////////////////////////////////////////////////////////////////////////
5 V! j" |3 w. ]3 z* `( l sort(vItem.begin(),vItem.end());//排序
0 S' ~8 k& L6 A+ A //////////////////////////////////////////////////////////////////////////# s4 h O5 W o7 D
//交换 c) Y8 g2 S5 H/ O
for (size_t i=0;i<vItem.size();i++)
( V4 ^/ `+ x% @& ?% c: e {) a: i: V4 t$ j( ?1 B
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" i/ B \# T7 x9 P
pInvSort->Add(vItem.nIndex);
6 f @) |6 k9 ` }5 k5 D: r2 E3 b! _7 s( o8 H8 R
BYTE nDestPos = 0;9 f* ~$ u3 m9 k0 K$ I
for (int i=0;i<MAX_INVENTORY;i++)
+ {( t0 B% K: b5 I {4 B" P4 y5 a0 g, ^1 q3 l7 _! z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);. u. r' y; Y, n. `4 K5 _. T
if (pItemElem)& l5 K: B1 v) u& A
{# x/ C3 @4 u9 {0 Q! \9 t" H$ C4 B
if (IsUsingItem(pItemElem))4 r4 _8 y! J) Z4 _/ ^5 ?$ q
{. ]7 q# T; I7 N$ S/ Y9 o9 u: l8 d& L
//这个位置无法放( L1 Y% v+ b8 y6 u+ O( d K8 q! Y, t6 @
nDestPos++;" d7 T) r1 s8 \. U
}) \9 ]! u! D1 R j: p6 }' M
}" e+ s/ m9 R3 a1 N( F% i, F1 P4 A% N: X
BYTE nSrc = pInvSort->GetItemSrc(i);
z8 a4 ~' A( w) G/ k. l pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);$ W. V8 S* m2 c3 Q8 H1 |4 x
if (pItemElem)$ s9 j" H7 @7 j) z1 Z+ o2 g* D; Z7 N- P
{* X9 P0 }9 z% `+ k# U6 R
if (IsUsingItem(pItemElem))
8 |6 Q% g1 v4 w+ d/ } @$ I {
1 P* e9 w) Z. o8 U# j2 h //这个道具无法移动,跳过
( Q+ f. U* k( `; c; l5 \3 j continue;
- L" w6 d2 g% ^# `3 |+ r/ `4 T R }. \. i- R' c9 D. h
}else{
+ k# a5 ^! r3 `% q4 d# m //空位置 不用动
% b! ?% ]% R6 n9 \# }5 J$ ^4 ?! I6 I continue;1 y! ^1 C1 q( P: ~
}
5 ]1 N! L" w5 e' n0 v7 g //////////////////////////////////////////////////////////////////////////
3 A0 }9 t ^, F //开始移动
0 F9 V0 | ^ ~& Y* P1 W if (nSrc == nDestPos): }% \" Y3 F! @: v; Q( N( {: b3 |
{
$ q$ Q" w" P; x! N //原地不动/ t+ _8 {7 C6 l U
nDestPos++;
1 e% p- u; _& k, K9 c continue;
$ m+ c2 o5 Q# _! y6 ]* j; T, M }
. K% B3 v5 Y9 u- W8 @8 ] pInvSort->MoveItem(i,nDestPos);
2 `$ O5 l' t5 T! m; c% p. E g_DPlay.SendMoveItem(0,nSrc,nDestPos);
2 ?0 d1 C3 e$ V Sleep(5);1 C* S. v' h# ~1 E' w: ?; q
//Error("移动 - %d->%d",nSrc,nDestPos);
/ `0 m6 Z& ?/ f& G7 a nDestPos++;. j b6 |$ q, S& V- ]
}
" X" Y1 v; g* O# f //取第一个元素的信息
0 c; x, X& J- q7 c( K! `6 F* g /*. H3 u6 k1 b+ R2 P! k( D4 ]+ S
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)# F* U1 S+ C2 x. l6 x' g
{
# u5 n5 \6 Z/ Q/ U) Y Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
. m/ |( F" f5 K7 Z g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);/ P- _& S& G' P f9 _5 H
}
& M/ a7 c& D" V# i1 e7 h& a" @ */4 A$ Y2 o0 y/ c0 i$ g
//////////////////////////////////////////////////////////////////////////
/ T; h0 b+ C# r, p5 q/ J: J X break;
Z% a& \% c- J4 w: t) a; J }
& g% W) s5 Y' f& s5 f/ p } * R) j2 s5 w4 J+ J$ z
}$ ~& \, n0 a' x" S
m_wndMenu.SetVisible(FALSE);% ~( V4 |- J; N" x( d! Y" V
) ^$ \. {: k% V8 o. T
--------------------------------------------------------------------------------------------------------
9 O# ~1 J4 d3 F% M: H1 f搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)( J7 k q7 s+ Z1 p
{
! L7 `8 ~7 h$ k% ]0 ~0 JBaseMouseCursor();
. {9 D( G3 [( n. V0 E5 {}
i1 O- T- c1 J L7 G5 B在其下添加:% ^5 f/ k" n, [0 X( e4 X% T
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point), [0 S+ ]5 {- k& [, Y
{5 _/ ?" ^+ h1 W% [5 h$ x
m_wndMenu.DeleteAllMenu();4 W9 D% f9 i" Z1 d/ _9 r% z
m_wndMenu.CreateMenu(this);9 w) T8 e/ B. ~) d4 {& ~/ ]
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
8 k! k# x5 T. Z4 y! H. R7 n. w% e1 D/ D% n
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 M0 W) ~7 O! \3 z: W5 n{
! F' J9 O$ ]8 f, r6 O! F, _. ? //P以上级别才可以删除所有道具8 ?! L0 X/ m9 j* t5 I: C# e. T; U5 V
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");9 h- k6 h6 I6 N. e2 x
} \: u- d" g* \, @- e" b6 V
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );4 }, ^8 e6 j! j' ^/ C R! V! K
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );- |. i& Z/ |5 X3 r
m_wndMenu.SetFocus();4 m0 z/ Y( V3 z
}
' R6 V* C0 d5 }: K; C K) x. Q6 I; V% i------------------------------------------------------------------------------------------------------------: G5 _$ b/ y M F
*************************' x9 b+ I0 F' y$ n9 f* d
WndField.h文件
- h. L1 t4 s" x: L/ y( Z*************************; V+ G6 `0 y& S4 |9 q3 b
搜索:BOOL m_bReport;
% }' W2 a0 Q( m0 ?2 X# D其后添加:
, U9 ^- Y, t" ]0 r$ UCWndMenu m_wndMenu;7 d# t& M: d; I/ D! B3 O
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
0 E' b- V. u/ F# `4 E# G其后添加:! O4 U( E# S$ X. h& C, l8 ~/ \9 m
virtual void OnRButtonUp(UINT nFlags, CPoint point);
! ?: Y0 N& ?; a9 I9 V# T
* [% n2 r) ]" j3 r9 @( X O( L" p0 k
8 @$ n# e2 S& H2 F( ^9 q. _ |
|