|
|
源文件中_Interface文件夹下WndField.cpp文件
* A& O" m4 X: h4 R搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). g) j3 E# i( ?- a6 T
( U7 U6 |6 @( `" R9 f5 tstruct sItem
( q; h: |! b4 L! V7 |3 J$ `: a. U{( d5 T! C! T& A$ J3 L8 |0 }
DWORD dwId;
5 C( ]! r* L) [+ H: A/ PDWORD dwKind2;0 h2 x, S* t$ K; t8 d
DWORD dwItemId;
! `5 H% _4 g. n. XBYTE nIndex;) q# M S+ Y7 i$ j* Q+ A' o
sItem(){
8 u( e. {0 g( ], f. @( | dwId = dwKind2 = dwItemId = nIndex = 0;
1 ^+ S! Z4 f, [* Y* F}
4 t, N5 B+ l# d0 L) W6 `bool operator < (const sItem p2). s, T# L: C4 v
{
2 \6 q; s/ a+ b2 A/ L$ W if (dwKind2 == p2.dwKind2)$ ^8 V4 l. m" p; L, ~% t3 v
{7 j3 c) ^) a. C4 Q( j
return dwItemId < p2.dwItemId;- F5 l2 B. V( q7 l# d3 ?' @6 L0 a
}else{
1 L- l0 X$ {; i& m- J0 x) Q return dwKind2 < p2.dwKind2;0 q5 e. [3 ^9 b& Q) g' p
}5 L' q# V$ {+ H h
}
- M8 G4 U: {: @. K2 r/ ]7 Z};
3 l5 P4 W, E+ Cclass CInventorySort
2 ]# {6 n% F4 E7 [{2 V$ W+ d) t7 L' H% \+ r
public: i1 L8 ]* n, h' ?8 y1 n( c
CInventorySort()/ O! f8 X* \; z
{1 H# ^: H& g- X9 v
m_dwPos = 0;! F2 {9 T0 ]4 @
}+ z& e9 @! G3 U4 Q
~CInventorySort(){}
4 ^$ I* N4 F" U& ]( dprivate:
/ z, j" v7 L% z d0 _! p6 @ }sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息3 i# T: W/ Z% ? ?4 k
DWORD m_dwPos;
6 ?" g: a1 ~4 N6 _! {/ ]* y5 m/ npublic:0 j1 A, D! B( V9 @4 E
void Add(BYTE nIndex)+ {3 O3 v; p$ ^8 V
{
' T; f" w) Y/ \5 z2 Y2 X if (m_dwPos >= MAX_INVENTORY)
1 H! j) r) I& U, P/ B {
$ |) n( _- o! n% j- B Z2 F return;" ]1 I( L( V' ]& n: C0 n& l
}
: j. T7 e! R: [ D+ o5 j m_Item[m_dwPos].nIndex = nIndex;1 V* q% N! ^! \" R# v
m_Item[m_dwPos].dwId = m_dwPos;; d8 K- M& w* U
m_dwPos++;* h9 `9 R. w$ e; x
}" b! e) b L* f# E
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
o8 y8 u5 ~/ g{* i* j/ S8 y$ B' s; q; p. }9 I
for (int i=0;i<MAX_INVENTORY;i++)5 _' `- D) j2 `' M! Q. M* w- a7 r
{
" u2 B5 {: I8 G) K% l if (m_Item.dwId == dwId)8 B5 h; Q2 o( J- O; R& Z
{. X \# e9 B* w. y' P& ?% v7 t
return m_Item.nIndex;
- x- e) B; t$ B/ s5 u. y# K* \9 v }
" W7 E! e% p, c* p1 i( }; O! T1 ^( ^ }
}" o6 I; j `" v& B6 w! {5 E, l2 K return 255;
, T9 _- b& m% Y: [( l) t}' w# s0 D0 N9 \/ R/ \) h
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置2 W. k+ g) d3 N+ K$ g( @
{
8 J1 O0 i* `3 Y- `* Y" r3 { BYTE nTmp = 0;5 {# [: k; z% j+ V" x/ X+ U$ K
bool bDest = false,bSrc = false;6 \# _ y! b! _& X+ d! @
for (int i=0;i<MAX_INVENTORY;i++)
+ N+ m2 R# p5 J# q$ J {$ Z& z! a \% b+ p) u8 m
if (dwSrcId == m_Item.dwId)' L$ z/ [& z3 m9 ~& N: Y
{
$ X; ~: t y9 r2 |9 s$ a. h //id相等 则 改变对应的dest和src
5 J/ [% h+ u& b3 T/ K nTmp = m_Item.nIndex;7 n0 h8 p; q% H# l: a
m_Item.nIndex = dest;% ]0 u" R) V, m1 l
}9 \+ r) }/ P5 v- z
}1 v. \% H4 e* r- u& L$ o
//临时数据保存完毕,交换开始" y. f! D1 [0 P7 c6 w
for (int i=0;i<MAX_INVENTORY;i++)
8 L" T" f) O+ T5 \! b" T( ? {5 v, M* ]3 V/ L4 v
if (dest == m_Item.nIndex)! q) N3 O6 [; p+ w' z' Y, _% T
{
/ p* t5 ~5 y; I- o1 s //id相等 则 改变对应的dest和src e+ X" o `; R4 y' w
m_Item.nIndex = nTmp;
7 G* D8 j* X+ N" J3 n# l3 n" j, [ }
" H0 A% B# E4 S7 J/ L }
4 x7 ~2 N: T' L- E) L$ o}
/ h2 G$ g6 Y. x! Z, B& y};* m3 D& z1 s9 M# v- h" _" e
-------------------------------------------------------------------------7 o3 Y6 Y h2 ~% S$ s
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, W! e, k7 Y9 f7 e6 u1 r! _% r% S搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
: N0 n0 w! E0 G( B紧靠其上添加:
( y. u. t% f8 h, g: |7 ?7 q% zif( pWndBase == &m_wndMenu )
{* {" N2 K# j5 c5 N' A# {9 |6 k{
) K6 M4 N/ V; }. y( o& k1 | switch( nID )
" p- w7 S" F( G8 ]- s/ i {
\+ F m+ p6 e6 ~! T2 x) F/ { case 2:
. h& Z" }0 M1 r$ F! @/ f5 P {
0 _) A3 z5 R7 t+ ~" }& q! b //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);4 Q* Q# d: t6 { G; m8 B
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 K/ F4 s- N, z7 L& ]. l
{2 d7 N8 F4 n& [0 F3 m
break;! O. F4 N1 @/ _- N
}
5 b3 R/ }3 r* U! q7 @0 p* x for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
, ?' P( h3 k/ x% v1 B7 w7 a {
5 ]$ _5 \7 ^! K+ C$ u0 H* k CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* ^5 F/ R2 A1 ]# e
if( !pItemElem )
% V) [& |2 q& u3 p4 i" Z continue;0 L9 L, p2 R. ?: _6 D
if(pItemElem->GetExtra() > 0)
7 Q& |+ b& {6 R+ T( G& `; Z continue;- B; Q% W7 w5 J1 t8 p/ X, [
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
! b, B7 j1 O" l6 m- D3 W continue;7 w+ a5 F; n6 q1 q3 p5 S
if( g_pPlayer->IsUsing( pItemElem ) )
. L2 }! l$ S/ j( c) `, c% A continue;& M+ D, g. [. s. z$ ?
if( pItemElem->IsUndestructable() == TRUE ): _5 d1 O, i+ ?9 U8 V4 Q. ~5 b
{
2 Y5 o o4 `2 P0 |: R) C! A g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
; u+ d0 X3 X3 W9 m, H' R6 C( { continue;
+ q( _0 U# L, O$ L+ ^ }8 Y2 s, S0 N% a6 ~, v; \ X0 f
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);* P) o4 }+ r2 \6 x# W; X
}
7 q' R" F' N" d v) d# ? break;2 K# d3 s2 f# O6 C" I; h. I9 p0 }. V
}
- F/ S# `5 Q- `, V case 1:
( w$ S4 h o# |: } {( x* |2 I& p. y' {# s0 j" `7 B" E
//整理背包
- [2 q/ A) \0 j7 ?# \% _ //////////////////////////////////////////////////////////////////////////
" D1 n0 n" ~5 K: K" L( m9 Z' { //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) ); p) j( Y$ h2 b0 \3 N6 s" v3 j1 F" d9 n# T
//////////////////////////////////////////////////////////////////////////
; B0 g+ J+ S6 Z9 P+ V //////////////////////////////////////////////////////////////////////////. r$ G3 X+ a! o6 m) w
CInventorySort* pInvSort = new CInventorySort;7 t4 g+ I: n1 h' R f ?
vector <sItem> vItem;
, m% Q& ?6 j$ R4 m+ U! v vItem.resize(MAX_INVENTORY);//初始化大小# n7 R: e) t6 k: |
//////////////////////////////////////////////////////////////////////////% {; E8 k, e( d
//填充数据9 a9 D; b4 V; {7 ~6 e
for (int i=0;i<MAX_INVENTORY;i++)
3 s4 s7 \1 E* w {
- P( D( {6 P/ i4 }1 _7 I CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 L8 h5 n) q8 M if (!pItemElem)
7 ~+ V$ a9 Q4 y# L1 l% X- l3 ~! | {
6 D" J6 ?3 G1 G vItem.dwKind2 = 0xffffffff;3 D+ {/ k0 P1 c
vItem.dwItemId = 0xffffffff;
- q; t1 P, I2 C9 c, k7 h& J vItem.nIndex = i;" p' g6 f# O1 v, t3 u( v
}else {- d7 Q2 R; G* y+ [
ItemProp* pProp = pItemElem->GetProp();! ~- k% T1 c$ ^" Y
vItem.dwKind2 = pProp->dwItemKind2;
7 S2 F9 W8 u$ P8 w+ M vItem.dwItemId = pItemElem->m_dwItemId;
( g9 i2 o& z+ p" E5 S) _ vItem.nIndex = i;
1 r2 r2 I- F; g; I9 m }
1 k& S* k. M A //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId); h( @7 {* W, a$ J; o; J( K
}" ]7 P* g |4 Y E2 k! w
//////////////////////////////////////////////////////////////////////////9 a) c' p7 }- r5 T6 o
sort(vItem.begin(),vItem.end());//排序. Q! x8 o# h7 M
//////////////////////////////////////////////////////////////////////////
4 P/ y5 J- Z8 ` //交换
' L0 N8 p" z6 u" k( P, o& D for (size_t i=0;i<vItem.size();i++) o) H2 E0 v3 Z6 B
{
5 a' u5 t5 y# j //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 w! X6 C# \% V; {; {4 U
pInvSort->Add(vItem.nIndex);8 U" D0 E8 B3 {) ]" C _% s
}
( z+ O3 J7 O+ z2 V1 S BYTE nDestPos = 0;3 a @, h/ G I; [3 O. j: ?; D3 t+ s
for (int i=0;i<MAX_INVENTORY;i++)! G6 d% }" J& U$ C# ^
{
. ~0 B& f3 f/ r CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);$ l6 U9 G0 w1 _ F
if (pItemElem)
* ` [4 B' r) F {
% P- p! t4 r5 x& k7 j if (IsUsingItem(pItemElem))% [) P, u, o7 z6 ~; x
{2 b* C" {. |4 `5 m+ X' F
//这个位置无法放4 f1 @$ U2 a& Z/ e1 p7 \' m
nDestPos++;, |1 \. M5 w, i8 g/ y. O
}; J9 N7 F2 K8 M! d( E1 E
}
2 ~7 S* m( q9 S/ i: } BYTE nSrc = pInvSort->GetItemSrc(i);
$ ?0 z+ e2 ]6 M1 j pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
5 w9 ?) o9 Y* u) @) u) N1 i if (pItemElem)" z; \( H4 T% i1 z. U
{7 e- S3 l* `' `! Z9 [2 J% Y% L
if (IsUsingItem(pItemElem))
* ~9 ]4 D; F4 y% q+ c' c {; @8 E, |' I) D* B
//这个道具无法移动,跳过3 }. u7 j' W2 l5 H) c9 D3 i
continue;
& h& ]6 |6 x: P$ O4 y* Y$ Y* Q }; V2 \- P$ f$ n: r& D+ Q
}else{ X+ ~, o* l0 v: s8 s
//空位置 不用动# t: p% s1 o+ j
continue;" B9 n0 j S5 _: Y
} c; W; F; d+ ~: z
//////////////////////////////////////////////////////////////////////////
" M* ?) Y2 ]! Z& H6 C3 t //开始移动: v! S; U3 q" s8 M: I
if (nSrc == nDestPos)9 l+ _+ i8 G' R% f9 |" I
{
* B) ?& K3 i" D0 E //原地不动
# g5 ^* A3 M# n8 K nDestPos++;/ s* S+ A$ f- z7 y& j$ k3 s
continue;
" G3 c4 L+ C0 D) x; ~ }
" B3 w+ g4 @ r! [# l% h. J pInvSort->MoveItem(i,nDestPos);) y- j9 ~0 d0 N9 F) o. I
g_DPlay.SendMoveItem(0,nSrc,nDestPos);# I! b# o. {5 `. r- j7 {
Sleep(5);
% l' a" T' H6 \8 ?1 h //Error("移动 - %d->%d",nSrc,nDestPos);
8 o- x' P" q+ L# O! q9 N( ]* r nDestPos++;
( v( L$ v) @5 h; E. }- }. m4 ^! U }; [8 }% W) M' L+ A9 c
//取第一个元素的信息
$ i% N- a$ i5 ]4 y /*
3 X+ P) ?7 c$ Y if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)" N# Y( d1 V/ k# t/ P
{
5 t; M: [# U- ]; q' D4 g8 ?/ r9 [ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);' W+ h l7 F, ]) l E
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
% g5 A" u( e4 F p: ] }
6 O1 u$ a' J+ w2 r */
* R2 L0 |5 @# y* ^ //////////////////////////////////////////////////////////////////////////, G* A, }6 A0 x+ c
break;" Q7 n! f, L0 M6 {/ G3 W
}
4 R1 a E0 |; o$ [ }
$ X9 G" W+ I) s( C* K}
% c% B! }+ Q( L; v$ r# A4 @m_wndMenu.SetVisible(FALSE);
6 a* U* a3 U2 b- W2 X
" L& f+ `, E- A( f* G/ U--------------------------------------------------------------------------------------------------------
. W* n7 j' y1 u1 e/ r. J搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)2 U' Z6 U% k; {3 I& M
{
8 L, R9 k# J6 G; k) ^BaseMouseCursor();% P3 ~, p' P) a# h; h- b2 |
}: B% N; ^0 W$ O/ n7 t. C
在其下添加:
9 U5 V- O* W6 ]+ Q P- I+ D: Pvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
+ c) ~7 e R4 z- z& a. w{
; D1 l+ z! |: k* K# x6 {m_wndMenu.DeleteAllMenu();
" h* |, {1 j2 |) ]m_wndMenu.CreateMenu(this);
: F) H" F; o, Xm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
2 z* u3 K: {; H- X
) z2 w+ s. `0 N/ z' C2 Bif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))" z1 e; U$ e5 ?) S& |9 t" |
{$ H- \$ F9 v% V8 U8 \' N/ D) a
//P以上级别才可以删除所有道具
1 l8 X; ^7 y% x! o+ j7 V3 N3 U3 a m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");8 N( l; w7 `2 }/ @
}
" c1 _/ Y x3 c# c! Xm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
6 p _ H+ l7 I0 n: R" @m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );+ |9 M2 b2 @* T6 O
m_wndMenu.SetFocus();
) Z" i. @& ]; Z) T}
$ i; ?+ k# T [' Y9 |% p5 R' ^7 Q------------------------------------------------------------------------------------------------------------
' q- o; @: s7 k6 ]0 K* u4 m, K*************************
0 P1 D/ M F4 w* i3 L) O1 `WndField.h文件
6 C& Q! y# Z' v+ O' ?5 B*************************! e( h% s9 b+ C& d2 s2 X
搜索:BOOL m_bReport;* c$ _8 h+ y$ e
其后添加:# c B! A- v# V$ n* H
CWndMenu m_wndMenu;$ k. i+ `5 n- q6 J. }+ J# c
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
( g, a: U, o5 A2 t: V; H( h其后添加:
; |8 q4 _! D5 g' vvirtual void OnRButtonUp(UINT nFlags, CPoint point);8 e7 ]7 c% [. m/ e: g9 ~
$ {: D3 u1 G5 Z- c7 D5 q* ^
" X3 h: @% ]6 K) a. B/ w |
|