|
|
源文件中_Interface文件夹下WndField.cpp文件* d1 u9 Z4 F: n$ [! b* B. a1 Q% j
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); x- _) {# i# b, B; Z
2 \2 n: V+ ]9 R9 H N$ Z$ J/ t, Estruct sItem/ i9 |, p9 A8 Z0 r
{
0 F0 U& A! J0 T/ n& I1 C2 d0 ?DWORD dwId;6 V+ E& g! ^2 I7 e
DWORD dwKind2;7 q1 W, g/ u! c! }4 d j4 l; Z4 A
DWORD dwItemId;
: `7 W1 z t+ v/ ?# s& pBYTE nIndex;2 q o$ J1 |: l' a5 |
sItem(){
, x$ S' z% b- t+ o X dwId = dwKind2 = dwItemId = nIndex = 0;
' S8 E) r6 s% v9 ?" Q. ]}
& E, h# ~9 c% f; u0 Cbool operator < (const sItem p2)
8 n0 m6 ~- q. P2 o7 s{
, c! E' m! F. R- ^1 Z if (dwKind2 == p2.dwKind2)
( d- o" f. B6 Q) k5 j3 y) B {
8 r" `9 Z% q: `# x f/ i6 {' u return dwItemId < p2.dwItemId;
$ Q% `% l* s0 f b; r2 y) D }else{
6 b2 }+ O! i& i2 x" k, I9 w return dwKind2 < p2.dwKind2;- }, y# c' d. `3 p
}
! i- p" Z) L; B+ w% ~/ E}' ~& X7 h0 u8 S1 J& E# Z* H
};
$ x6 G' q7 }: F) z- lclass CInventorySort
( r$ D0 o3 ~6 ]" y+ y' s# e; o{
; U6 }0 H: E! q/ apublic:: m1 v i: h. T" Q9 ~
CInventorySort()/ H) {4 t2 x: G" }, H) C9 `& d6 h h
{
9 X0 R! p/ ?! H: E; q4 Z m_dwPos = 0;& ^# E* K0 j! i L/ J" j: c6 s
}
5 }- S5 P& c5 a2 q* h. J+ v1 T~CInventorySort(){}: Q3 E/ I8 d1 x0 j" ~5 d5 d i# r
private:
% W' _3 L' N5 k e& EsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息, c u' s5 ~; }* R" i6 ?) @
DWORD m_dwPos;
5 y. n5 _% M m5 s: x+ spublic:- v3 \) q9 B# ]( [
void Add(BYTE nIndex)3 g8 y+ F# ~; C5 }/ k, q1 ~
{/ O( m/ J& _- q) k) x0 R
if (m_dwPos >= MAX_INVENTORY)) J! N7 E& d' s/ Z( @% C' g2 R
{
0 x0 v) S3 r4 N9 |* }3 n! T return;
$ S z- B3 ], j4 j' u }9 q- u: R5 k! X/ {2 l% U
m_Item[m_dwPos].nIndex = nIndex;" r% |4 F3 e3 G) D% x8 T
m_Item[m_dwPos].dwId = m_dwPos;4 @5 n, {4 Q+ S5 R2 q
m_dwPos++;
3 Y& O9 Z& X& N( h4 g}
) L1 {- p' S8 ?0 mBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
$ d1 F( Q- I) U9 H{
! N& T" U& V! h; Q) g) G for (int i=0;i<MAX_INVENTORY;i++)
2 p& C) ?& ~. E9 f9 |; @9 M, Q) a9 P {+ L( c# ?, a* z
if (m_Item.dwId == dwId)
) l; I: E$ M! N. I. }7 y, i {
& ^! ~8 K/ T& B7 a return m_Item.nIndex; a' {8 \4 h; G+ v
}
% t/ Z* X1 C! r* i }9 _1 n7 Z- K* ?; H% f
return 255;
8 e) M. x7 X, \1 @0 D4 o4 m} \) [5 T q& x+ ^
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
( ?4 M$ C, Q; A+ N3 x{: y; \3 i4 M$ A* {0 T
BYTE nTmp = 0;$ I5 I& Y& L' k! X- @; e
bool bDest = false,bSrc = false;8 T( }" g* K- ]3 Q/ W
for (int i=0;i<MAX_INVENTORY;i++)) Q- p1 e0 R" f/ q
{( ], e( f, S* f& h, J
if (dwSrcId == m_Item.dwId)
' | G' Y; x, y4 T$ L {
: O5 V2 z4 H8 e" V# ~5 M //id相等 则 改变对应的dest和src
2 K/ P2 f1 C3 J nTmp = m_Item.nIndex;
; G3 v. D7 u* U m_Item.nIndex = dest;
: Y* `3 w5 z" W2 a }
; x- v- M! b, d) P& m) @- _9 y- q+ J4 L }
1 d9 c2 U# W* N# B //临时数据保存完毕,交换开始1 ], q l& d* _9 w4 x6 D) y
for (int i=0;i<MAX_INVENTORY;i++)- [' d+ o' D( S; O
{
# g1 o. @0 \3 r& D0 d if (dest == m_Item.nIndex)3 v- Z9 P( s4 {0 u2 m, c
{. a% S3 _! W9 |* \+ K; G! A! ~
//id相等 则 改变对应的dest和src! i7 Y5 K6 p b; i$ `
m_Item.nIndex = nTmp;
: R0 w4 p2 q) h6 |6 _ G# b' M }
& N U" \6 s4 m1 \0 x }( j* h% u" G1 U" W
}4 n% [8 T" }' U, e+ |. a0 J* D* E
};7 q5 F: C3 b' r
-------------------------------------------------------------------------) c' N( M+ t+ i4 s6 R! D& p
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; O" @, t6 i. y9 c搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);5 e- J& }; L6 X, e5 u
紧靠其上添加:
! J2 ^+ d H2 ~2 S( R! f# ]if( pWndBase == &m_wndMenu )
/ v0 N) h8 }2 }$ Q. I) @5 d7 C# S{7 i' V4 |* S# n
switch( nID )
: j9 R; V: A/ d/ l# p9 T3 u! B {
, h3 r. e8 l4 ?% W7 L7 V case 2:
, d7 F3 O; X. @+ O6 ?5 r% B2 t$ o1 D {
0 I% s( w4 q* N0 h/ k! C4 v //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
& e0 ~* N7 v; G S# T: U if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
$ @! F7 Z! d% r8 C# ]+ c {) J! N; u* w8 y5 A2 B4 V3 v y
break;
7 r+ D0 m! {! b6 Z- o: s }6 t& k4 o& k1 Y0 f9 D( ?
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)9 x: x/ `+ u$ O# F. B1 K, r9 T
{4 H& {) a/ @) f# D/ O! |2 N
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% l5 e) [, }1 w: ?" U! c
if( !pItemElem )- L; w% z+ M) l0 k) q0 j
continue;) q: Q7 Z6 U7 X/ W F3 H
if(pItemElem->GetExtra() > 0)
: h4 J, }: M- V* S8 b continue;
, T% [* E* m* V" ?0 n, F if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
* m# @1 J. f# r* D' l8 t continue;! W2 ?, G2 x" ^+ X9 o) c" H( Y
if( g_pPlayer->IsUsing( pItemElem ) )
" s0 F. f9 Y8 Y2 Y V, ^9 d continue;
- k5 d9 _4 o' Z0 v. F/ C0 \% Y if( pItemElem->IsUndestructable() == TRUE )
% B# J4 O! h% W {! l8 t2 t p1 j* i Q* S3 G+ ?
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
. o* U, m! \9 o3 k/ W/ O continue;
+ C j, T4 E" V" U2 D1 a }; ]7 K3 `& U) f) i& J
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);8 P/ d; l6 g2 v- e: q" D
}. o8 `6 n, B! G( ^& a& m
break;
& M& D {9 V" f8 c }; |$ @. ]: m+ I/ f
case 1:
+ l, \7 O+ f! i4 f {
+ E7 Z# W* }7 T: w) M, l0 A //整理背包
! D( s2 `" \8 s! p! a$ B //////////////////////////////////////////////////////////////////////////4 G$ }# @/ D K& g
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );. J6 K4 h* ~7 U) l1 S
//////////////////////////////////////////////////////////////////////////
/ c! z5 b8 O: M# s" t+ E //////////////////////////////////////////////////////////////////////////
/ R) @ V( `( ~: }+ _ CInventorySort* pInvSort = new CInventorySort;
' Y$ E/ M1 c( w% x) X G vector <sItem> vItem;6 A& A! E* r4 a0 B5 O7 s. R
vItem.resize(MAX_INVENTORY);//初始化大小% h2 v8 u4 ~; H; g
//////////////////////////////////////////////////////////////////////////
- w! Q9 k' ]0 @0 c3 g //填充数据1 C( k& d4 r6 d' k
for (int i=0;i<MAX_INVENTORY;i++)
5 y" E% e/ v& A2 K1 P {! U: n/ W6 W" D" ?/ a
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 u- H' \) K1 y ?- f
if (!pItemElem)3 M3 ^7 U* U( d* \
{7 Y: }7 a6 B- E% Q
vItem.dwKind2 = 0xffffffff;
8 Z" o, J. }# n vItem.dwItemId = 0xffffffff;5 E( a6 R* F2 v. ?% ^* }
vItem.nIndex = i;+ R' U, f9 `! f& O, o7 z5 |
}else {$ |9 X& n _8 U. y
ItemProp* pProp = pItemElem->GetProp();
* u9 h; a+ ^8 G2 m% l' ` vItem.dwKind2 = pProp->dwItemKind2;
5 ^' b+ s0 }3 i! _' t' O! i S vItem.dwItemId = pItemElem->m_dwItemId;, ?/ g" E: L* u; X7 s
vItem.nIndex = i;. Z3 b# K: I+ [. c& {: ~
}! b9 o ?( O' [6 z+ L' S! V
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
2 y4 F, t4 |# N' a* X3 H }
' S2 p/ P+ I/ _, ?2 S, h# v0 z //////////////////////////////////////////////////////////////////////////
" z( |- o9 ~+ u. S' e' t( T6 p sort(vItem.begin(),vItem.end());//排序! d! @9 @+ ^' j( M; T9 ^( s
//////////////////////////////////////////////////////////////////////////
1 D+ R9 {1 d ~) @& ^4 W: X7 h //交换
, v. r! m% d+ j# P* J4 R( F for (size_t i=0;i<vItem.size();i++)
- D! m" ^% u; B2 Y; | {% U0 W9 J) h& A* X# r
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* S3 J7 x' D" J; J) A& |2 a. S
pInvSort->Add(vItem.nIndex);
( V. o+ ?1 X8 I2 L7 f }
/ b) |; V& d" W3 I6 v2 i BYTE nDestPos = 0;8 s, s% {8 ]/ K5 c1 m+ o f
for (int i=0;i<MAX_INVENTORY;i++)$ q- F" P, k% r+ |
{
9 Y4 U$ H6 ~/ W3 H/ z, e CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);9 e; J- o- H; _8 J& ~
if (pItemElem) n' f! |4 H) v% h u, o
{
% T1 W& |. k* H& p+ @: B3 X if (IsUsingItem(pItemElem))0 s7 s: H! e: k( d" z) v# n# r. N
{
% a* l/ V; s1 K; c //这个位置无法放+ L4 u0 I. V( J$ P/ n
nDestPos++;. Q, P. B% M8 e4 n9 S W- ^0 y
}7 s2 [- @, p% T
}
( a( M/ ?5 T& K B" m7 I6 X4 x x4 U BYTE nSrc = pInvSort->GetItemSrc(i);
; y6 E4 H! n6 f# V. g' S' s( m pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
* A" ~. _" S9 d3 h. C+ d9 ?) a- Y if (pItemElem); {- s1 F; H2 \$ A" U* ?2 r! V
{
n5 [. F1 y1 } if (IsUsingItem(pItemElem))
- Z* q6 y: e7 p1 ^1 ` {
$ C$ N' p/ e1 `# g //这个道具无法移动,跳过+ h. k: _8 N5 a6 `. F# r
continue;
4 P q$ B: Q: k% d' Y$ k, d }
6 Z. O1 \3 d) R: T. g. m }else{
T2 R7 p' F2 z' b //空位置 不用动
: B& r$ ^; `2 x" ]$ y7 H continue;
r/ W6 ~' E! e. q8 G; y8 w }
7 \+ o" w) `/ `6 _ //////////////////////////////////////////////////////////////////////////
G/ l5 R8 O6 G& T$ W) ~- [ //开始移动9 k: [5 c4 ^, c1 E& k' p5 T! G
if (nSrc == nDestPos), E4 X' e( R# A$ r) k! W9 r% K3 H
{
# ~- _2 i: ~8 X! u5 B- o //原地不动) e, W/ ^0 P3 e |4 V4 O1 W, w! ?
nDestPos++;4 `% Z& K# P# \2 I' i ?+ z
continue;
* Y7 q, }/ Z* w& x, L" P% r }
" [" G6 A, R2 f( V2 x pInvSort->MoveItem(i,nDestPos);
2 t0 {9 q `* V* l g_DPlay.SendMoveItem(0,nSrc,nDestPos);
0 }7 M) c7 B1 I* g Sleep(5);" a4 k/ H4 l! T- p, p1 y
//Error("移动 - %d->%d",nSrc,nDestPos);7 c/ d3 p/ v% Q
nDestPos++;6 u8 i: c8 y$ z( O" G/ L
}" \. O) I& V) A+ n$ J2 M6 y5 i& ?
//取第一个元素的信息; w; r, a; n: l" F
/*
0 |- D4 R2 e2 R L if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)) a+ Q# `2 _/ S( i9 ~( I2 ?$ ?
{' F6 s. p# `( \4 \
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);- o7 H9 ^ ^: ~3 T2 L
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);6 a& w1 ^6 @, C; c
}7 C% k) V( Q) {
*/
' c* d1 T |1 V2 U5 R //////////////////////////////////////////////////////////////////////////
/ K+ b$ g+ {5 D9 }, |( ? break;6 J2 [2 c' _+ x+ G* I
}
$ e$ X3 a7 U: ]7 j/ T } . P+ [# n1 \. H u
}
' ~. _* v; q; c2 Y# b5 w0 Hm_wndMenu.SetVisible(FALSE);3 t' M) @" w0 U6 T' F @
& U9 e# `; }: |9 n9 e$ p7 r' W--------------------------------------------------------------------------------------------------------3 W. k3 r, K+ g2 u' m
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
) v6 E, H1 _; b5 d5 W) ^{7 U- p. b9 }$ G* p$ }2 {
BaseMouseCursor();
% K0 u$ C! q. Q2 ~$ G}+ ]% z+ ^% j1 K( o. i1 X
在其下添加:
+ k/ k! q) l8 t) r0 Mvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)( I" E2 o2 _' [5 O4 e
{
7 M$ V) {6 S* b# x9 M+ C" gm_wndMenu.DeleteAllMenu();
) ~0 t% s% x. o, J4 B: Mm_wndMenu.CreateMenu(this);
! r! ?" s9 D% vm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
0 _* k9 u3 ?9 r: `$ B% ]' A+ n+ G1 r8 ?% M2 H, z. y; I: w; A
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& V _& y1 Z7 L5 a{
3 o- t! T# f% a" U) Y //P以上级别才可以删除所有道具
5 [8 R* F2 Q& Q$ Y. | m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
( `( R" C5 m& n( n; p2 R) \}
/ T$ t+ Y: z. c) `m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );) d, _- U: W H- V. \/ b
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );& D7 T+ o1 J) ^. m/ y- d8 R
m_wndMenu.SetFocus();
! j) @! t* \. N6 i, v}' t8 U5 y0 h$ k1 \
------------------------------------------------------------------------------------------------------------
# ]) r. c& y1 w2 i3 f9 U*************************3 C& S) H+ `- Q2 r0 n, Q
WndField.h文件0 e+ y+ p+ o. P) e) H
*************************
$ ?# G5 V: R' q. I, Y+ G搜索:BOOL m_bReport;. {* p4 @( `2 ^9 x, F2 \- \ ^$ }
其后添加:/ x$ v9 H/ w& m1 Q' O$ S
CWndMenu m_wndMenu;
- n5 k6 I4 X8 Q. r, @+ g! f8 ?! @搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
l8 Z3 g0 e) W* }9 {6 [* u- G其后添加:% t8 m, h8 c0 L* m' E
virtual void OnRButtonUp(UINT nFlags, CPoint point);
/ O5 x8 o& r5 E$ t+ r) f; S6 Z0 K. f
; h, N% n; c' u: u
8 c3 P, F7 P! l; e0 c% j( `( ^ |
|