|
|
源文件中_Interface文件夹下WndField.cpp文件
3 g+ D) E) v5 c% B; X搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). L. {3 c: x) i3 l
4 ~% _" n7 h' Y1 ^9 vstruct sItem$ T1 ^( I" Z8 P( H
{
! f1 d# o: E3 R3 T; j$ PDWORD dwId;
' @7 O0 h% H* _4 y. TDWORD dwKind2;$ V0 a! k% w7 G q
DWORD dwItemId;1 m7 `+ Y: `$ s+ I1 ?& C6 K
BYTE nIndex;# q* ^5 K3 D8 q; j1 `( y/ o1 R/ b3 V
sItem(){
. q9 e9 m( b7 S/ i6 f) g6 c dwId = dwKind2 = dwItemId = nIndex = 0;' z9 ~- W! F8 `( k
}; A1 s) s. ]1 f! q8 ?/ P
bool operator < (const sItem p2) m% v, y/ K/ w3 ] E6 r% d; O: g
{- O. Z. r- e: T
if (dwKind2 == p2.dwKind2)
: ~3 [+ }$ j. g0 M i. S' y* a! z {: p- G: {# N, @$ t" _5 z# }
return dwItemId < p2.dwItemId;, [. U- x7 p+ M
}else{
$ I+ l3 T# S$ m+ C, ~; c return dwKind2 < p2.dwKind2;
9 G( ?3 n/ A1 `, w/ \1 H6 \+ F }
+ r1 [ h! e' Q9 z; X2 l}: H) V5 b1 w9 D, ~6 c* x5 k2 a
};& f! B$ D g5 Z, | m1 W
class CInventorySort0 E! @: I% ]. K
{
8 q# K+ t7 g. [: Dpublic:
) |0 z7 B# Q! O- o( [9 \0 VCInventorySort()
/ ^) ^; r% b4 N# v' r7 R s{
5 v! D( k! C7 W- z3 y, g# M m_dwPos = 0;
; H \: |# ]6 X) d. B2 o* W}* K+ h- r: @# x7 X
~CInventorySort(){}
9 l: u- t; u, `9 tprivate:& c( H7 m) C& F$ e! v5 _1 ]/ g
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
+ q! B9 d# u' x$ p; @8 R; \DWORD m_dwPos;9 ?8 l* }/ W/ J7 b. j, h
public:
D% m# J' T6 a. s3 s" u u2 mvoid Add(BYTE nIndex)
7 M I: u ~: p, `* x2 R{: U5 f; e# [5 \( T5 O
if (m_dwPos >= MAX_INVENTORY)
! m4 ?8 N9 ~8 u {
5 |5 b- r' m0 m1 e6 V return;2 v7 n4 k& l5 |7 |" h
}; i! e+ m4 e0 Y+ Y+ `( I4 l& k
m_Item[m_dwPos].nIndex = nIndex;
* h6 U8 V0 A" @2 C/ R m_Item[m_dwPos].dwId = m_dwPos;, t' r8 a! A0 F2 M
m_dwPos++;
9 ~& W8 L" L3 M9 f+ T' q, w3 M+ k}& ?: x& V& a8 @) y
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
9 j" y) D$ u' u$ F& \: ~0 m0 E{: F B/ p) y4 [2 _3 W# ]7 [
for (int i=0;i<MAX_INVENTORY;i++)
. o% I) r, Y% v; T {& I4 l$ k6 E* h" e Y
if (m_Item.dwId == dwId)
, k, W) _0 ?! A8 {0 @, x3 i. j {. i9 x) O( s7 d
return m_Item.nIndex;- w) o0 @: g. `9 i* E0 ~
}
* f- y; s; T; I! b4 N8 e }
" v( i4 F6 F7 ^' t4 k2 I2 R return 255;1 E' M) h d6 x9 w8 O
}
8 r- n+ i( {) } A, x* ~9 s$ Q- }void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置/ P( P; d* D9 V6 I
{, I J& Y$ G" @/ _* g$ u# m5 T2 Y3 M" {
BYTE nTmp = 0;7 |! ]) I+ @/ u4 |9 p0 C2 v
bool bDest = false,bSrc = false;+ R4 I% O3 R! \
for (int i=0;i<MAX_INVENTORY;i++)0 ?% Z" O, \1 f7 @7 i2 |8 A
{# i. D; E$ E4 f; f# Y3 X% E7 C' t: G$ |* f
if (dwSrcId == m_Item.dwId). O- \; K3 b4 t, ~% @4 d
{
6 e$ A8 y2 o/ V) E$ e) Q0 w% o //id相等 则 改变对应的dest和src
b- I# r8 ] B& k nTmp = m_Item.nIndex;! _) M5 G$ J! {: t! H' G8 H
m_Item.nIndex = dest;8 ~1 P9 v* G: n
}
5 {( o# Y7 c0 G& X/ Y Y }
/ w* G+ u: Y( @) J5 v //临时数据保存完毕,交换开始: ^$ z* a; m+ k7 w6 U. C: a
for (int i=0;i<MAX_INVENTORY;i++)" o3 H* G- l8 I( n* P6 }$ i
{5 X4 z% m1 C, e. g& }. J3 v! d
if (dest == m_Item.nIndex)! D: P& w. t" X$ H9 v, X
{
5 C3 t8 w) d: O- [ //id相等 则 改变对应的dest和src3 u/ d3 W* R; s/ ]7 G+ z
m_Item.nIndex = nTmp;0 ^% b# U( t6 {1 Z7 {! x( g
}# T% _: u# I4 t5 T5 N; V. l }
}7 a$ _, Q4 {; Y3 {, a4 U
}. E3 t. T% e5 t
};* V& K8 x) h0 e+ B4 R& l
-------------------------------------------------------------------------
' Z$ y1 g) \% a" s2 I, d依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )) U! l! T3 x+ e5 W+ |' m+ I, Z( W
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);! ]8 _! E2 G" S' x8 S2 I
紧靠其上添加:
$ g/ ]) V& R7 a3 d, E t: S; fif( pWndBase == &m_wndMenu )
: Q$ t- F1 G O* z C{. A2 Z7 T# m0 {. L, \* {
switch( nID )! \8 y/ j. x- q q4 x: B2 Z; c
{
h. O8 ?$ ]3 N" H% B" _ case 2:
3 ]3 ?6 `% Z2 N* N L, z) R4 w {
% W# K- Y* G, Z, Z( ~ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
@' A- E$ }7 A+ s" T( p if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
) Q/ a b9 Z, s4 O {
7 d) [, x3 d0 G( c. ~* \0 F break;
/ a; O3 g$ r/ u' U" Y f0 v }$ h6 @4 b! B' r: D
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)+ o( X& o: n7 }( n* r% g E
{
1 I# D( i9 r6 D0 h. l3 C/ c CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 A3 D a1 N3 K0 ?' g; b if( !pItemElem )
- S% U- X" M% w; p( q2 @' u continue;
# a/ y' [/ X- T# p if(pItemElem->GetExtra() > 0)! @* ^2 ]' E1 ] V+ F8 K9 u/ ?
continue;
/ K# H1 z4 |1 Z6 J. A2 K& K if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) , K( K% c. ]- D2 [' L% v0 e
continue;5 m; r- n, o7 S' h p( ^
if( g_pPlayer->IsUsing( pItemElem ) )! H6 m0 K! ~# { j
continue;
. a% A! F& ^, Q- G7 \ if( pItemElem->IsUndestructable() == TRUE )
+ J1 O. V& Q1 U& F" b! A {- v# c9 _" G( E ?4 V: _. ~
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
c2 ]9 T6 `8 U7 g1 P# V8 | continue;
/ p( u E) q' ^: n! Y1 f2 ^ }6 ?4 @+ b! l0 q
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);7 a1 o7 U: N6 V8 o6 b' L& Q. f
}4 h. a" o" V# h, @- z9 ?' {* X
break;
5 Q$ y9 x6 z" C* C6 T2 j }
$ B) {9 j S V, F% B) y case 1:8 }" x1 D+ r; G
{- c4 F" d* X) \& G- C7 c
//整理背包" R9 Y$ c ~! O+ o+ D+ ^
//////////////////////////////////////////////////////////////////////////
0 Q# n; p6 b! B. t: w& ^ //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
7 t8 e1 {7 C- |4 P2 q8 X /////////////////////////////////////////////////////////////////////////// R" R" _& T% D8 s3 f/ h
//////////////////////////////////////////////////////////////////////////
A. W, b6 X5 I$ E: o1 S CInventorySort* pInvSort = new CInventorySort;
' v U6 u7 s9 k+ a vector <sItem> vItem;) |: ]- n, L. o0 z; L% n, S5 `0 \+ m
vItem.resize(MAX_INVENTORY);//初始化大小# |& b u5 L( C& @- Z9 C4 G: }
//////////////////////////////////////////////////////////////////////////7 p9 {- i' C! L" {+ v
//填充数据2 U5 U+ X2 l1 [+ h1 B) M- R
for (int i=0;i<MAX_INVENTORY;i++)/ p$ b7 ^- z1 Z1 q6 o) j1 Z
{: _/ Y2 J q, L& l
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
( a( Y+ b0 d$ r) C( `' x if (!pItemElem)6 W' c, Z' t. @& S v+ _0 N+ e! W
{- g: K* f, j$ B( h% V3 G
vItem.dwKind2 = 0xffffffff;
* D& F, r* ^1 v# O' H0 k. n; E s vItem.dwItemId = 0xffffffff;
% r! b: }2 D5 ^ vItem.nIndex = i;2 m( k& L ~+ _9 P; x$ i5 @
}else {7 T4 ]8 A) \) x! T; `# ?) N* i
ItemProp* pProp = pItemElem->GetProp();; O' P( @+ i7 D O U/ R
vItem.dwKind2 = pProp->dwItemKind2;
l' e7 ^ ^. Y: Z% T5 W! t0 H( Q vItem.dwItemId = pItemElem->m_dwItemId;% P- G0 e2 `( P- c7 K6 J
vItem.nIndex = i;7 |9 D- u' ?" X1 O) F
}8 k7 C0 @7 _8 w# R
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
( w. E; w7 L: @* k" _6 } }7 _+ C1 y1 ] m7 j8 c
//////////////////////////////////////////////////////////////////////////) `/ Z9 [$ {0 h# F
sort(vItem.begin(),vItem.end());//排序7 v: T% B( B( x* c3 {3 ]
//////////////////////////////////////////////////////////////////////////1 P5 q6 w5 B/ R& O, M
//交换 v8 ^6 R( @9 R7 y* m
for (size_t i=0;i<vItem.size();i++)
' R. I9 h5 _. g! r e0 M: b+ | {
# \6 k9 K9 [. W7 o/ r, r //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' g( v8 m; ?# f* h7 {
pInvSort->Add(vItem.nIndex);/ Z4 G2 i7 f. u
}
* {& [. @" u+ m2 |3 a, W/ Y BYTE nDestPos = 0;0 u( c; N- k- q1 U! M
for (int i=0;i<MAX_INVENTORY;i++)
& F0 m; b! g! r" g, o9 K& l2 _ {0 E8 d; e# w4 d8 R
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);* L; ~( Y) ]: k) u: I# t9 |. P
if (pItemElem)
6 }! t% S/ d$ y {! e5 O8 J% H: _ ~# J! y
if (IsUsingItem(pItemElem)) I* b5 L) v( s- [, }
{
. ]: p7 I# r( U& X //这个位置无法放5 j; G3 p' u+ g4 C
nDestPos++;9 M/ j* v$ F' O7 Y
}# e+ |! G- f) e W2 M& ~! x& D
}
3 _9 D( K2 s; W4 W% ?; p BYTE nSrc = pInvSort->GetItemSrc(i);: W% ?, ` j5 y+ S7 ~: }7 e
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
6 O' c4 l% b2 U% F% v; r9 H: G if (pItemElem)
7 S2 B7 @9 f% v; B \1 ?7 ` {. g% r8 u/ s4 I$ A
if (IsUsingItem(pItemElem))' [7 F" o" B f$ ]$ o i
{
3 r+ T2 }# j; l4 e1 x& |2 w //这个道具无法移动,跳过
; w5 ~ {" Z: ]/ ~ J continue;
3 @# a" m" z0 D% K; o, v$ `, V+ J }$ D0 |' h' m( X7 y$ n: a/ F
}else{
( Y% v2 d0 S. \9 c! Q! [! V- Y //空位置 不用动
, Y) y% U0 _$ T continue;
* f" I4 S( {9 u* Z: @: u% K( _ }
! K ?) n3 x6 r! O% i //////////////////////////////////////////////////////////////////////////
! I8 {9 D! x0 H. K- i {6 { //开始移动
' i1 A, P% u) Z0 [ if (nSrc == nDestPos)0 X( X/ m" V, K$ W' g
{
) e3 l6 a0 \1 A$ A9 b //原地不动( s8 K, ~% ^5 s- V; m8 t
nDestPos++;
2 T! P# ^# Y% |1 q continue;
9 p# _7 G/ T; v+ d2 e }! p, N, ~5 P. H6 e( j
pInvSort->MoveItem(i,nDestPos);8 \1 F- E3 E7 f6 c
g_DPlay.SendMoveItem(0,nSrc,nDestPos);: }- \2 q* ~2 B& N1 Z
Sleep(5);8 y+ H) a) B/ G9 V b8 F" W
//Error("移动 - %d->%d",nSrc,nDestPos);
! ?5 X3 z" Y s! q, D nDestPos++;
0 Y" P& m) t" a } u5 w _# E, @# B9 g9 x: L+ i# X
//取第一个元素的信息 I0 e4 m4 F" w e
/*
% l. s& d& L6 w) f& f& E if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
- z. _1 P+ Q+ R {$ [6 j! W( A% U, h8 A
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
2 M: N( |* ~' U g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
3 p6 N7 c- y- s6 j4 y" y, Q1 K3 d }2 [2 T4 I0 A" r# `
*/9 h- ?- `8 g( ^% T# b
//////////////////////////////////////////////////////////////////////////
" n' }% t4 v* | break;- `2 u" A F/ w: Y
}. `1 I6 Y+ |) {3 M
} $ z! }# u- D( J, N. @4 B
}
6 {' i: h) ?, b L7 O" g" ^$ @$ wm_wndMenu.SetVisible(FALSE);8 _3 T7 D6 \/ \7 k9 d0 V9 j$ [* P
+ ~/ b3 x2 R D! x" b) _6 C2 K
--------------------------------------------------------------------------------------------------------
: w) ^9 F5 R( e- e9 y6 Y4 O搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)$ B+ F. N8 C, H# p
{
1 [- t2 h, w8 d% U# G/ i$ }BaseMouseCursor();% O+ n- j+ ]+ S, P1 a, ]
}* F$ o# D7 q l2 v( g" Y1 B- f- E
在其下添加:
/ S" ~8 O0 [$ _$ p* tvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
`0 R( @% z9 T9 u{
/ M- ]4 M: [8 x+ I, `# i# um_wndMenu.DeleteAllMenu();
, y& g! `" }8 V( T4 T Ym_wndMenu.CreateMenu(this);6 Q) `# v4 s8 h
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");: |+ p6 }- s2 z
9 v) G. e9 B( |' v7 Z) a& t6 u3 C7 Oif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& Y' v& z% Q3 T4 D; _) h; i
{
2 y. Q. X* O/ Q; v) J5 P. R5 ]' V! q //P以上级别才可以删除所有道具! f# b) J; O- W4 G
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
/ e6 |+ s6 _" n; ~+ i}' b4 H$ B0 `1 w0 D" @
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
/ U' ~: T( A0 i0 Vm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
@5 u2 U3 x7 w. T) Wm_wndMenu.SetFocus();( p0 {" i; m: z6 X, N
}1 F% |: G/ q( E0 a. p. A7 P+ S
------------------------------------------------------------------------------------------------------------
# p0 ]9 Q+ p c8 Y/ \0 h*************************5 _9 ]( S; Z+ Z
WndField.h文件$ J' p/ v& ]; ?+ K" U+ w8 u
*************************
4 l/ i9 J( k+ i6 E搜索:BOOL m_bReport;! m7 K, v2 ^8 y
其后添加:
" N* t2 c# e/ F u7 Q+ kCWndMenu m_wndMenu;# A, U" a, @, _
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
@; O, j1 K0 X其后添加:
6 ]. U- U1 S" b% u4 g, ivirtual void OnRButtonUp(UINT nFlags, CPoint point);5 q$ w% U& [/ T/ W+ O
. v+ x" M( l7 R$ K* N8 \* V+ { D
' N) X' C2 c9 u5 r) G1 ]/ n5 g" V
|
|