|
|
源文件中_Interface文件夹下WndField.cpp文件; w6 J: D o0 L
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& T4 n" @& W$ K7 d
! F7 ^ ?4 D7 Z y0 k; {$ `% fstruct sItem
4 L s* t1 k1 r" p3 a9 C4 k5 |9 x! M{! P- b! |) D0 S& }, p. P# _
DWORD dwId;) z6 u3 i/ P( R8 b4 r
DWORD dwKind2;' {. j& P5 K: y( ~7 O
DWORD dwItemId;
$ I+ f9 P& L0 |BYTE nIndex;/ w! C. `$ H; _% w
sItem(){
0 Y5 E" }% c) y dwId = dwKind2 = dwItemId = nIndex = 0;% v2 ~/ d$ a6 y( f! {
}
5 C; h. s! O+ a3 c8 `bool operator < (const sItem p2)
, D) D8 a/ P) A5 i0 O6 ^+ B{
0 P" M9 f$ I) p9 R( T$ ] if (dwKind2 == p2.dwKind2)% Z y& h- ?$ z: h' l* B# D& w
{
9 |4 t7 ]6 J. K! F5 ^0 q return dwItemId < p2.dwItemId;: G ]3 ~" }* f1 C5 R( ~* ?6 c
}else{5 B! e( A; C- L
return dwKind2 < p2.dwKind2;# A5 h) f6 e% L7 `0 ~- t+ J1 g0 c
} A# E, e- x$ k) ?) K9 c7 f* F. ]
}
. v' M% L) s' U};& a$ T8 _0 s* c2 c/ i9 M5 O. }
class CInventorySort
9 \% y' ^3 e" `1 t. \9 ]1 E{
8 C' \* ?4 o$ A8 K+ Npublic:
' @" y; w( [+ O, @CInventorySort()1 i* ]2 \. L5 m. r7 m$ D; b
{9 f: a6 a5 ]2 i. e
m_dwPos = 0;$ |( P" R9 ?2 f2 [% O
}0 X% d* S8 z4 S1 x3 w# d
~CInventorySort(){}4 A/ i- D' i- r( [6 I0 B
private:; ]& u# y3 h/ t9 v/ `. U" B" m5 E$ @
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息) q f) t: l1 j2 x5 T" A
DWORD m_dwPos;8 ^2 T+ q7 |: B
public:
- W% h4 L2 @4 Q! i* @6 qvoid Add(BYTE nIndex)
/ U, d: x1 K/ o9 A5 f3 v* n{" H$ I" p8 u3 {
if (m_dwPos >= MAX_INVENTORY)4 B- n9 J" d6 E& c
{
! ?) ^4 Q! t1 O! i7 s5 s. k return;! w9 c* z' l+ u9 Q( w4 v* w* p* d. g
}
. \6 J! N. l% o4 t. E m_Item[m_dwPos].nIndex = nIndex;3 |# a7 c! E d/ [' k) W
m_Item[m_dwPos].dwId = m_dwPos;
% _. R( f9 n4 ?! _ m_dwPos++;1 Q9 q1 A! s" z# [
}* ^2 \* g7 m( a4 {4 G t
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列2 z( @5 x6 ~: ~
{. @( ?5 O! {8 a5 K1 a5 b- A
for (int i=0;i<MAX_INVENTORY;i++)' ~$ _) W% L7 M
{# r; P+ y6 t2 T) q: ]
if (m_Item.dwId == dwId) h9 x. M; J# z+ {# H9 Z
{
# p2 o6 X) F6 `! s, _/ w return m_Item.nIndex;
" V7 H' e7 {3 M; m1 l }
" V/ G: H) I$ y% S# S/ g }
2 G# k9 K/ l% s9 W return 255;
( N. V g* j2 S- S8 ?; J}1 q0 H5 v V4 b6 [4 V; ?) Z
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
$ |1 q% o8 m- m# z$ m{
' c/ k9 D2 g8 d; } BYTE nTmp = 0; Y, n0 B3 J8 e- }" S9 \, {" x
bool bDest = false,bSrc = false;. M/ N) a' }; q% }: B1 |" [0 d7 z$ i
for (int i=0;i<MAX_INVENTORY;i++)( e; i) s' b; s1 i' \2 E2 w7 V
{
' a5 }9 F+ K- Z+ f$ A if (dwSrcId == m_Item.dwId)5 i! V n+ t, f. s+ ^& E5 z, Z
{
1 k0 U4 p( q2 _ //id相等 则 改变对应的dest和src
, J" |$ U5 G( v/ i nTmp = m_Item.nIndex;/ U6 T+ ~& G5 i
m_Item.nIndex = dest;
3 Z1 w) ]# }% H }
# ~7 X+ t1 N1 m/ q. L }
# ^. o) v7 Q8 i$ N% g% U6 L+ V //临时数据保存完毕,交换开始& `# Y8 B5 q) c
for (int i=0;i<MAX_INVENTORY;i++)$ K, D) ?4 X1 c: D" S/ J
{8 v% B: `: B( p9 o5 \7 `! V
if (dest == m_Item.nIndex)
- V, s a' u$ Z- ~) }' t {6 I* y" x$ r; B& {/ p9 ?
//id相等 则 改变对应的dest和src1 ?9 j' x8 `# c3 @
m_Item.nIndex = nTmp;; r8 B: p. ~; B! C
}6 t$ W3 @; ^* S0 u- S
}
U' h8 z( s) P' x1 [" ^2 ^0 i' O}
( ]' S6 i9 f! P0 ~; ~ U5 L z+ `9 T! D};
- _2 Z5 n. L; a8 y: n8 g( d. s-------------------------------------------------------------------------2 P0 a- [! I: H7 L+ ]/ \8 ^+ e
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )# Z" Q4 [" _+ d* q
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
3 k( E, ?! k, e+ _8 m紧靠其上添加:7 ~8 H" T7 x8 G }# k" z# p
if( pWndBase == &m_wndMenu )
# `9 b/ N2 P3 _* C4 f$ x* U{
6 L9 k6 T n; y+ q1 T3 c+ Z switch( nID )
7 C: ~' F6 i5 }; j {& s$ r& u6 o2 K. o- p
case 2:
5 k- [' f" j6 u! \) y5 S+ n {
2 i6 k$ A2 B% h& q% m //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);3 v, ?* K- S. F" C; \4 {/ H
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# G [+ O4 D; o) C/ j, ]) A f
{
5 l: {# N/ M9 \, y& \ break;! |6 F& l4 W) U5 l. m
}3 `! c; G7 r& ]. o2 ?: [) e d
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
0 m0 l: @+ f7 @. n& x1 o0 x$ h {
3 P1 Q0 Z& y" x0 ` CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% @: Y1 K+ F9 n) x7 I4 n0 {- R1 Q if( !pItemElem )' A9 @2 r3 k2 E2 Y% ]8 |, b6 i
continue;
c$ M" Z# L8 t' E0 f. t if(pItemElem->GetExtra() > 0)
- w G1 v! o4 F( ~+ F! N3 V. a continue;
' q: n0 H1 C; |/ v if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) $ x9 T' ?8 O0 z5 Z
continue;
/ ^* Q) _% R- \- m- B+ m if( g_pPlayer->IsUsing( pItemElem ) )
' D# ~, |- [0 j: ] continue;+ T- \1 Z8 J/ X* d# T
if( pItemElem->IsUndestructable() == TRUE )
+ ^3 _" l& ?: ?( {- `. z5 Z7 Z {0 j2 N3 G: \ _5 n# l/ ^
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );- q$ J4 q# _- G& G* u! A3 R
continue;
2 U& R" B0 n$ u% E( Y }
* a. v' W0 J# _% J g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
: n# u5 _; }' i" q }: {! o, I$ {% i, n8 @: l
break;
4 m6 {8 s) {. c4 _ }. `; B7 Z% H: l' a; C* s
case 1:, U9 u; n- `( p5 X# U! q+ s
{$ [" m0 i$ S+ V. o
//整理背包
5 o- H2 N9 |3 ?( x4 F //////////////////////////////////////////////////////////////////////////1 a. J; g) g D& l5 h
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
6 S! z @7 }) }1 c' N; K' p //////////////////////////////////////////////////////////////////////////: P4 H/ H4 ?' E6 z% a# g
//////////////////////////////////////////////////////////////////////////9 g, V; @ D+ ^( `1 _# N: F1 M) Q
CInventorySort* pInvSort = new CInventorySort;+ E2 S1 l0 m- _8 B
vector <sItem> vItem;
5 ?3 g" K v- c) j vItem.resize(MAX_INVENTORY);//初始化大小: W3 s- j+ o3 m J3 c9 Z m+ X
//////////////////////////////////////////////////////////////////////////
7 w0 j5 b+ U* G# n) k //填充数据6 j& i3 P% L1 @& |
for (int i=0;i<MAX_INVENTORY;i++)3 s4 H( S* h, B2 T9 y8 f! I: P
{
& s% E7 f7 t* T2 K: G! U CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 ?6 F+ N0 N" j: E. x/ n" I8 g
if (!pItemElem)
8 D1 N3 H5 y8 L; }6 y R! m; n& M7 a {
0 [/ ]- j8 r2 T0 o; ^ vItem.dwKind2 = 0xffffffff;5 N% w8 l- Q: Y, D
vItem.dwItemId = 0xffffffff;
- x6 C- G: y6 Y% C! c vItem.nIndex = i;, w! }6 r I/ R3 i
}else {# r' k) [- {8 m$ C* p
ItemProp* pProp = pItemElem->GetProp();) K1 ]1 f0 L+ l* a q5 }6 F
vItem.dwKind2 = pProp->dwItemKind2;9 w2 Q5 |4 q- [5 R2 p+ M: \: Z
vItem.dwItemId = pItemElem->m_dwItemId;$ D4 p% L/ T" e" s( d/ W8 L: \* l
vItem.nIndex = i;
. J) k8 q: r! r8 Q0 x8 W* m- F }: a+ q. f: t2 w9 o) C7 F) Y8 s
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ u1 D. W( l" D( Q2 q7 I( {' l
}' I2 G+ u! l; C2 K% k7 l
//////////////////////////////////////////////////////////////////////////$ L7 D. t4 v% v. K, i. {' M
sort(vItem.begin(),vItem.end());//排序) u q0 `; [9 G' B$ [6 M) Z
//////////////////////////////////////////////////////////////////////////
8 _! \, q6 j( E# V7 e //交换5 S U- }" s4 V5 J2 I8 ]
for (size_t i=0;i<vItem.size();i++)8 n( q6 O" ]* Y+ z& p8 X
{1 K, N" c& g8 {, w8 c1 A& H$ K
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);% }6 \7 c+ g2 j6 T2 C% i% |
pInvSort->Add(vItem.nIndex);
0 @+ S# Q! d; X$ @! Y, l5 Y$ ? }
4 n* Y& s9 T2 r! ~; h( Q m BYTE nDestPos = 0;9 C& O- N1 C8 Q# u, N; S# Z
for (int i=0;i<MAX_INVENTORY;i++)& o; G: k. s, X8 T' I) z" ]
{0 |8 ~: x8 q/ F
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
8 y) I) \$ u9 Q% m0 G1 I( u if (pItemElem)
7 l. y5 B- r+ g! i3 _8 [. n {
* o: ]; a3 [3 r. O8 H, V; Q; {. |' W if (IsUsingItem(pItemElem))
: r- w) s2 K6 e6 R. X+ M( Z$ [: ` {
$ ^! {1 E. r, T; n( c. \ //这个位置无法放- ^$ J k2 K% V6 q
nDestPos++;4 p r% k2 ?* N: g
}3 Y7 `- x, |9 g' i. F3 T" |0 Q
}' Y: r: G3 A3 n, W3 W, V3 }
BYTE nSrc = pInvSort->GetItemSrc(i);
+ Y5 Q1 w$ q* Y+ o pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
# M$ u' b# t+ [( k! T9 x+ b# X3 Z if (pItemElem)% U! V/ m1 ?/ T) z! a1 B+ T6 g
{/ q- z5 _, Y8 U' P& z- f
if (IsUsingItem(pItemElem))6 G/ o. X' e$ E( R3 Q5 g4 t
{
0 e* D X5 `# Y% R4 t% A //这个道具无法移动,跳过
$ R3 @9 D s& s$ k/ D+ \" m. D continue;0 q: |( }$ K0 w2 h
}
* C+ a7 {$ K( V2 i4 O- Z }else{7 R! v6 o( b' o/ |
//空位置 不用动
* l" \& V( L6 l- [ continue;
2 d# i$ s3 |" x9 q0 x( F }
7 r- k6 L6 L# K* Q J1 W //////////////////////////////////////////////////////////////////////////
) f6 B7 y9 F+ Y9 }* \+ l //开始移动4 b8 E% e- N8 P+ E8 O
if (nSrc == nDestPos)4 |7 h* d' C" k, b; _
{$ U( T5 a& q" y+ L
//原地不动0 o/ u% j+ e5 U3 d8 r5 y
nDestPos++;! r: V- `+ l' l9 C- ^4 W- c
continue;
7 l4 ~& W4 j) a$ U! K3 a6 y4 \ }# E' K/ ]& a% A" P, e
pInvSort->MoveItem(i,nDestPos);' Z) ?0 Q' u @4 f
g_DPlay.SendMoveItem(0,nSrc,nDestPos);: W' K3 ~+ T$ M
Sleep(5);
. {9 h6 ]0 }6 W- a! e* ] //Error("移动 - %d->%d",nSrc,nDestPos);+ x3 ?8 {, ~0 O: m, ?
nDestPos++;" s" W" Y1 ], u) A
}9 t) C9 `3 V. X* y5 n, k/ \
//取第一个元素的信息
$ H/ b: g( \2 U) B0 k9 l% p0 Y /*' D# t: L1 p! P9 T k& W) K; b
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)+ D, v- t- A; ]8 P# W! ^( J
{
: Y' y: R# K/ V( q" ^9 [ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
o! u) Y& ]1 M- s g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
' r, G# U( F( Z/ ~. s3 k% H }
# A& u) h" N* o/ L- ~& }3 U, o/ O& m6 J */' K; ~4 P; t9 p
//////////////////////////////////////////////////////////////////////////
4 c5 r- y$ Z& m. U break;
7 @0 M8 C! M, k' q/ g8 p. S }0 w1 Y+ R% B. }4 t& s" ~7 M
}
/ c/ p" o& P3 a% V1 s0 A}5 R4 a" {8 p, F; N1 X* B
m_wndMenu.SetVisible(FALSE);1 P: X: r- p$ }+ l' f( w( \ A
: w9 |; q& J; U8 r4 k# C9 ]
--------------------------------------------------------------------------------------------------------
: t5 i: F" m. R% E% k搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)& J, J' l$ k& a& F& t% X- z9 t) z) c
{* J9 H9 u$ U* F; T: l
BaseMouseCursor();# m0 L, J) P, |+ G/ {1 e
}
! L! t9 ]1 {& z在其下添加:
! ?9 R9 P3 k2 s( k9 L5 Nvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
- n3 R7 K4 [/ j$ S{
/ u$ {" Q) J% Y! k$ }+ c; _m_wndMenu.DeleteAllMenu();8 w' p- ^) \$ B \: w* x% F
m_wndMenu.CreateMenu(this);+ e! a; T% z2 d: w' N# h
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
$ J" I' h0 w: N* D
% R/ W* |; H% E+ Vif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 Y" H* {- ^. H3 e! T; n3 V{
' j! G9 s& u$ \ d; S //P以上级别才可以删除所有道具
. K- l* n) c3 r) C* [ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");- M, c' Q4 x2 v& E$ w0 v8 S
}
. O* V- f( l2 T( {7 q q2 H |m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
4 s) ~/ @0 i3 n& i: {m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );$ @) Q9 Q% @6 W
m_wndMenu.SetFocus();
" y9 c" ~- M% z% d& |- q8 i}
. w: u$ q! E, W/ h+ a {4 r/ O. f------------------------------------------------------------------------------------------------------------
9 [( U6 g) k! B* X) d j' p2 T*************************
6 y4 m4 @# K: W$ {WndField.h文件4 R% u+ D/ q+ Q* a
*************************
9 h7 B8 \0 y! M$ t# Z+ H搜索:BOOL m_bReport;$ ~$ j( ^; ^2 e
其后添加:
2 c- z. L$ O5 i$ r. TCWndMenu m_wndMenu;/ ] o& d' `% B% Q ~+ m
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
9 s: W" x- R$ c" o其后添加:, n# E& R# O5 [. B
virtual void OnRButtonUp(UINT nFlags, CPoint point);
8 S: O* ]% M0 V! Q/ ]1 |5 Q+ [6 t5 Q# F0 T1 A
& ]- K% ~3 _, E4 B+ R |
|