|
|
源文件中_Interface文件夹下WndField.cpp文件; p1 Q& }1 z; f
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% v' o6 p4 E6 S
7 {4 P9 {% s) w& P
struct sItem; d) i& j2 [! g4 I# `3 y
{' N9 b( P% I# U, D: x3 h$ l
DWORD dwId;
# p5 L5 [6 o7 C; b. rDWORD dwKind2;
( e" \' n0 a$ e& M' LDWORD dwItemId;3 h) V9 h& O9 s1 [ J/ a
BYTE nIndex;3 ?7 `) H; L& Y
sItem(){1 s/ k" u4 E4 m
dwId = dwKind2 = dwItemId = nIndex = 0;
; r6 I+ M, I8 [2 c; A* G}
A+ p, |6 x* Y7 z8 A8 V W1 h4 R5 Gbool operator < (const sItem p2)$ x$ w: E9 N4 e' W' Y5 F
{
1 U' y J2 r+ X R( ^& m1 a if (dwKind2 == p2.dwKind2)
) H4 Q( I% |' A. j- f, F* l2 ?& F {
7 i1 d8 f1 l/ @. ]+ k: D return dwItemId < p2.dwItemId;- C8 M5 E9 i/ w* r; W+ I
}else{
9 V1 p* e \3 s, F: b5 k: l+ T: } return dwKind2 < p2.dwKind2;1 w; x% v5 r. H% T4 F0 }9 O
}5 L( E. J& R" N$ O6 L+ p
}
7 l9 p' f+ s6 K8 Q, \};
) u2 L X6 B, O$ k+ r0 pclass CInventorySort$ d; F$ x \ o5 n+ z# I' g
{
$ D' i: H! }- R; B" tpublic:6 a6 ^" [2 H& J
CInventorySort()
) B" [0 R- n9 C4 Y0 ^& J ?0 b{3 s5 n) Y1 q- |# v
m_dwPos = 0;/ M: {9 F* `; a
}/ p- Q! z0 }$ ?- s. B: \
~CInventorySort(){}
1 G! r; W; L( U, Hprivate:
t- U; b+ [; {; V7 t9 osItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
9 {$ P) l$ j2 n0 V* j: wDWORD m_dwPos;
# W% M$ }, _ J* W. I( [public:9 n+ B& S/ @9 f. i/ C0 S/ N
void Add(BYTE nIndex)
- N; h) w' e& k, ^7 S{6 }7 T, K* B' C& @& a" l
if (m_dwPos >= MAX_INVENTORY)
2 c) C' ]1 H$ W! q) N {5 G0 T8 L+ P5 U
return;
! b Z0 w5 C6 T0 p$ z }. c! z8 `9 W' a1 Q* I
m_Item[m_dwPos].nIndex = nIndex;, [. c; O% r( Q3 e% w2 B+ s! i' [
m_Item[m_dwPos].dwId = m_dwPos;; r2 ]* U0 B m( w7 w
m_dwPos++;
" ~5 X% X/ X' v u# F}8 @; K" r: O, e# ^, ~7 c
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列2 ^( i( w% v8 v" M4 W. R
{* R& O b; x5 ^
for (int i=0;i<MAX_INVENTORY;i++)
) x2 _" R( \% B( v3 L {
4 c4 t$ W. y1 L" r4 C if (m_Item.dwId == dwId)
' v8 i8 }0 T+ H0 I; @0 x {
4 g i9 b" Y' `# o- Y! H- d return m_Item.nIndex;
# p* w0 V" \7 C6 X8 U }* ?5 H8 \4 y2 K J, J
}( F9 `" j0 Y) X9 Z/ O" g0 a; [
return 255;2 }8 K- ]1 W' K4 l4 ]9 n$ F
}
6 s- n# e0 }- N3 pvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
/ G `' `& d w: e i" \1 [{) d4 H9 u) h6 j+ D# [
BYTE nTmp = 0;% N; C+ W" I' o: ~ S5 j8 J
bool bDest = false,bSrc = false;
! e. @5 A/ g3 v; ~; g' d7 Y for (int i=0;i<MAX_INVENTORY;i++)
8 ~. \; P3 p8 R! B" y" k {
- M z; ^% ^9 ? if (dwSrcId == m_Item.dwId)
9 H" j/ [4 a5 y- O {
+ N! T- Y; ~" F9 F7 E/ ^! D' P //id相等 则 改变对应的dest和src
! V0 Z/ q0 v& `& m9 V nTmp = m_Item.nIndex;" n. T5 z0 Q0 j" ~; B5 r/ J
m_Item.nIndex = dest;. a% `9 u, D/ m- ]* G. t4 ?
}
- U/ Y9 I' ?9 X2 L2 @* b/ r3 ~ }
" F7 h7 A4 M v7 Z" }: v //临时数据保存完毕,交换开始
) _0 C" S$ ~& L$ A for (int i=0;i<MAX_INVENTORY;i++)" J- Y- L0 J' g1 u/ L2 T- y* B: s
{
" e9 B! Q5 A, j* g8 a1 q" W4 p. v) w if (dest == m_Item.nIndex)1 T3 t& g7 a' j
{, H; ]: }5 v) ^5 I5 E
//id相等 则 改变对应的dest和src
1 {0 `$ b; h1 _! t0 t m_Item.nIndex = nTmp;4 ]5 C/ c5 x1 F0 D
}
3 U- g3 I4 [- s, } }! n( `. v5 x" Q$ s' h
}3 y4 }0 _# ~ y, O$ |
};
0 t" c0 Z$ }7 K$ U, f: {-------------------------------------------------------------------------
# d$ J" g/ E6 j1 J依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 Z+ K( C# V, Q, \. b ?搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);% g& b" F+ V% c( O2 c
紧靠其上添加:
* q0 V2 j: Z6 L8 M' s6 jif( pWndBase == &m_wndMenu )
; W3 p* C& L+ V. v+ q* Z/ a{
# O/ d" H$ n( k6 E( v" z$ p. f! _9 F switch( nID )
8 j! o! |/ i- u2 v) o" V! h# B% ` {2 H# K: p+ d$ I1 a' |5 @9 V
case 2:
3 l4 P( H$ g3 U/ [/ G {5 z! N) Y0 p! p( i
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);; ~2 G+ }1 E- [- I% X
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* Z6 z1 y; j0 }& i. p0 _
{$ R/ s, e9 n# _
break;9 ?. ?5 e. Z- Y( J( u
}
+ J2 V' Z1 [/ n for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
% `" C* i5 K- v {
$ I4 c# K( Y! C/ z2 H. K CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; y% I+ P6 u& G# f$ q if( !pItemElem )
0 i/ X& a7 j, [. T1 K continue;
8 }4 l- |, p, Z! I/ ?4 N9 w. G# r if(pItemElem->GetExtra() > 0)9 W" k( x% d$ J z
continue;
. p `$ }, g% I6 X& k6 k if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
6 h3 p$ t, z; h2 ]- w. f! N% z q1 D continue;
9 R3 ]8 [- u9 z% b2 ` if( g_pPlayer->IsUsing( pItemElem ) ); F5 w: ]3 ]5 X
continue;9 ]0 a: d: E* ^! U( X: u0 y% G
if( pItemElem->IsUndestructable() == TRUE )/ l" q9 \ a+ ~4 ^; p) g* f
{& g: B T3 [4 J; q, E3 @
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );; s* B+ I, {5 e+ C9 @' w4 Y
continue; @3 b+ r; ~2 f
}
2 ?: R6 i: [3 c4 [2 r1 ] g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
- v/ ]0 N; u/ v( {# H }' q' T4 _0 M' w/ Q6 U* t6 S
break;) y. w6 Q2 B( y) ] K
}0 Q4 a; a2 H5 w6 Z: X) l! K
case 1:0 t5 C; w3 r3 s, n6 f# x4 m8 j
{
8 z4 q g. q E2 M( w5 M //整理背包9 C# ?3 ~( F$ f, g! G8 c
//////////////////////////////////////////////////////////////////////////
: I: s& n( C: P0 v) H" m. |; _; _% d* P //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );! B) f4 p5 K4 c- p
//////////////////////////////////////////////////////////////////////////& I+ L& d0 ^9 S
//////////////////////////////////////////////////////////////////////////0 i0 [; p+ `$ d8 ?5 A7 V
CInventorySort* pInvSort = new CInventorySort;" G6 U" M$ q7 ~( D
vector <sItem> vItem;0 j; [; B+ Y( c
vItem.resize(MAX_INVENTORY);//初始化大小 E; w/ T) g! N9 [$ @0 u
//////////////////////////////////////////////////////////////////////////& h, {/ o- ~! }& @; h$ {8 {+ _: j
//填充数据4 s8 p/ H* G; X! S& k
for (int i=0;i<MAX_INVENTORY;i++)4 [" t5 W2 o6 h4 l2 l
{( E; H! d* l6 P- R
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
+ w2 o8 v" ]' B. c2 E3 a if (!pItemElem)
% R) _# \: y4 v) T- U f, g4 l {
" j: u9 j: B! ]6 F5 c vItem.dwKind2 = 0xffffffff;5 \" ]6 z+ A9 x, t( }
vItem.dwItemId = 0xffffffff;
2 P- E% z* s$ u- f vItem.nIndex = i;
5 I9 ~2 W- j% t' X }else {4 c) r5 x: e: Z2 t# m
ItemProp* pProp = pItemElem->GetProp();% k& |4 Z: [$ ^6 A2 l8 T
vItem.dwKind2 = pProp->dwItemKind2;% R2 y0 }" r5 f7 T% Q+ q2 I
vItem.dwItemId = pItemElem->m_dwItemId;
+ A: w6 L% m$ V* ]! s2 s v vItem.nIndex = i;6 q8 t B; X; b! h8 _/ q1 X
}9 B; s6 X4 ?- h) D. G. ]+ c5 O5 K3 [
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 d. E4 Q( c9 v8 `
}
# M6 H" p3 Y% B+ H0 f5 w3 B3 i //////////////////////////////////////////////////////////////////////////! x0 d3 c* a. H$ t0 w M1 j: r
sort(vItem.begin(),vItem.end());//排序
* J4 E1 O$ _9 g! N% w: B //////////////////////////////////////////////////////////////////////////7 s; A- L2 ?* H' @5 S0 r8 w
//交换
* [( [ o a3 L for (size_t i=0;i<vItem.size();i++)0 W _, @6 d# R: L& P
{1 K. D2 _( M w& ?& V2 g* N, ?
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, u* F! Q' J# T8 V7 h pInvSort->Add(vItem.nIndex);" Z L- N0 J- `* f, E
}
+ m$ r/ t3 x: }4 r( H BYTE nDestPos = 0;
' w, [8 |: f* F% p for (int i=0;i<MAX_INVENTORY;i++)
5 v" g3 T6 ^7 [: [ {/ H* `3 E( R8 `) X+ B2 n9 U! o! G9 V
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
# Y; }8 c# f) |8 a8 j3 f if (pItemElem): u) I$ s* h5 n$ d
{2 `) r. l6 q3 u) z: @
if (IsUsingItem(pItemElem))
6 e$ M0 P! Q2 m; D' O7 D {0 J# d: s2 N2 O5 u- O
//这个位置无法放7 h4 I# A0 C7 f/ U
nDestPos++;
; R8 h8 e6 U7 s( } }
9 g" v1 k& m* e: n: G/ Z- ?+ ^ }; C1 D0 i' W' H9 m$ s8 P
BYTE nSrc = pInvSort->GetItemSrc(i);- L1 E8 c) I, P; Z( a3 V! q
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
% @; N d/ E7 a/ @9 `- ^: N. J; z if (pItemElem)
. c5 E E O2 R1 q; w% Z {! K* K0 ]5 U3 n; ^. u0 H9 A
if (IsUsingItem(pItemElem))9 n4 p9 @! b* r5 f1 `
{1 X. P: t' {% ]4 n6 t X$ m
//这个道具无法移动,跳过/ j; s: E7 c# {
continue;
R3 T# n7 j& ?( _2 d' F }
% m; Y! D) E* F% J* y }else{4 v9 ]- Z7 _2 S7 s6 {# F5 ~1 [
//空位置 不用动# \5 R9 j" i: P, x8 |
continue;3 r7 W- M) D8 \% ?5 `; Z, K! S+ S7 `
}
8 [+ g1 t, O/ G$ G6 I //////////////////////////////////////////////////////////////////////////" F# {) K: c# k
//开始移动1 G1 h- U8 s7 G+ ~7 D/ U
if (nSrc == nDestPos)% `( e& M& B) B
{
2 ?2 V, b/ d! z, J //原地不动
2 @: G9 F b! m5 ^' i: S nDestPos++;+ g! v5 f6 B( ?( O1 H2 E
continue;' a4 I+ X0 o: U8 ~; `6 a
}
h x: S% C1 S pInvSort->MoveItem(i,nDestPos);1 X5 h3 e% L7 y" S
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
9 P4 B( v+ j+ X Sleep(5);
1 `1 f; {( S W( u9 K //Error("移动 - %d->%d",nSrc,nDestPos);0 O' O2 j2 b8 A* W- c. G+ j/ R
nDestPos++;0 G( Y% H2 M2 K/ ~- }0 d, m+ F
}/ U3 c, T1 ~3 o2 g$ l
//取第一个元素的信息! @; k/ M* g" U/ S9 ]
/*
, c! J2 B/ z0 i% w3 q if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
6 V3 Y* O& l! b2 E7 Z0 b {2 N0 r& {0 ]. }
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
% H$ X' m) w* K$ A g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);0 e( m. [8 G! j, u: g, I* L5 ^
}3 P/ O: U) n/ r" g: u
*/0 D! B) ^2 n l% e' b! ]
//////////////////////////////////////////////////////////////////////////5 a9 `- u( \# V. W; ?! j( p
break;
; g0 ~0 Y' `0 u j) A }; ?/ B% Q) P) |7 g* @
}
. X7 |$ n* ]+ T \, D3 J}5 A' Z" e: D- r6 ~$ V4 o% Y. d
m_wndMenu.SetVisible(FALSE);
$ H2 ~7 k6 o) l+ |
9 g+ q4 P% x y6 [' U--------------------------------------------------------------------------------------------------------1 |+ _; p) Z0 W5 G$ u7 v5 \) ?
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
7 B0 ]) A5 z2 ]4 J2 j3 `9 }{' S; v1 _7 A5 B, F/ _
BaseMouseCursor();. q5 m O- K+ Z$ I: T* J3 C7 h
}0 N% a1 u! x* d. _+ S
在其下添加:
2 e! `" x" p9 L" C- h5 Gvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)7 w- e, Q! [/ q# ?7 D8 V8 |' t; C* t
{
3 L. |6 K) h4 Jm_wndMenu.DeleteAllMenu();
2 D& x$ j' S/ m- ^$ Vm_wndMenu.CreateMenu(this);
& u4 ^+ D& C3 Hm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");6 c3 [6 ~5 z/ e; N8 p# \/ m
( k' }1 l7 \6 N7 \/ `if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))$ @; O! M8 P+ p, F- } X+ q4 x1 x4 ?
{, Y e3 `- }3 Y
//P以上级别才可以删除所有道具
. d! q5 r! |' [6 q0 V m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
# G. S. m) i* F8 L}
0 T: U$ q7 O& lm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
# y! ~/ k% i& Y8 Em_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );/ O( s3 J7 j; @. o; H1 p+ T- A4 Z
m_wndMenu.SetFocus();
% \' q# J( L9 Y: r% c- T}. N2 M* g; o9 h; w
------------------------------------------------------------------------------------------------------------
8 ]7 E4 N7 A& @3 {3 h& X4 ^) h- O*************************5 `6 c8 w( G$ C |
WndField.h文件) A3 e# D) m/ C2 f8 c
*************************' F( }& B/ g) `# Q( P- t6 `. Z
搜索:BOOL m_bReport;3 @6 `7 U8 V5 P% e8 H7 B
其后添加:
* y! C+ @/ l& BCWndMenu m_wndMenu;
# A; c" U# o0 Q3 {搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point); L: A' e* l7 ?
其后添加:
7 d! W- s4 m! z, ~virtual void OnRButtonUp(UINT nFlags, CPoint point);
3 R0 `9 C0 k1 a# ]: w- [4 B
4 Q8 y- ~3 |* s% d: Z Y5 X' s6 j( x+ ]2 O. P2 B
|
|