|
|
源文件中_Interface文件夹下WndField.cpp文件6 {, O2 R; q+ W# m( f
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
# \% {- b9 t0 x1 h' u6 W7 ?5 r8 u( X4 z7 y6 X
struct sItem/ p7 y* U V2 |5 t; n/ i) C k9 _1 C
{ l2 ]8 e4 P0 B$ B$ O4 e
DWORD dwId;" f; C2 C$ D# i# B5 F/ G
DWORD dwKind2;2 V4 j- |8 m* ?3 _- T
DWORD dwItemId;
' E5 _/ B# R. Q2 Q! ?BYTE nIndex;
$ q {! s% J6 y% n; T* _5 bsItem(){" Y; k3 V0 J4 w& W2 |) b
dwId = dwKind2 = dwItemId = nIndex = 0;
1 f! r$ O7 f/ ^}" Q6 }8 p+ K, }( S
bool operator < (const sItem p2)
; N9 M6 u0 t3 Z* W9 e$ W{
% ]0 v! k6 s; |. Y$ F if (dwKind2 == p2.dwKind2)7 m2 Q* i8 {+ {' I
{
! @( ` z) W2 } return dwItemId < p2.dwItemId;$ x7 K, q/ y8 ]. Y h: X: L8 q
}else{8 _8 h! @0 s/ q' @" b! |. \
return dwKind2 < p2.dwKind2;
4 o; t6 A% Z T0 c5 |6 N }
& T. s/ L! j M' X5 a# D}
! N5 s' \0 ^5 l0 X) M};
% I. p1 K) w; h$ fclass CInventorySort
3 {6 W4 d! R( }. z/ c7 V{
; _$ ^+ E! F! F2 w' Apublic:
! g' I' V: K/ t' @8 O! G! ECInventorySort()
2 s3 M! D. o- t{
, i& q! N% t5 K1 g4 ~& A m_dwPos = 0;
. n. z+ }$ J& r! t}
6 F6 i! e* c# X~CInventorySort(){}( p8 P/ s+ i, e" w5 X
private:
& h5 M: s, C( [! psItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
0 Q& E0 p* H+ p( y; g' sDWORD m_dwPos;
) o' ^9 x6 i0 Ppublic:
, e9 n6 s. L6 L' S7 l) pvoid Add(BYTE nIndex)
7 D" o% L0 Y' h0 d; s3 h2 W# u/ Y2 g{$ ~: n! E5 J" w
if (m_dwPos >= MAX_INVENTORY)
6 H$ O8 I& n2 H! q) Q8 K {* ^% F9 ?5 d7 {( C/ {! z# U$ T5 @
return;/ d' k' k; L" M; Z/ O
}% v. w6 e5 i6 r' a& R r
m_Item[m_dwPos].nIndex = nIndex;. n2 ^$ M8 S8 U9 D
m_Item[m_dwPos].dwId = m_dwPos;2 z! J3 F$ ^ B, X" Z+ @6 y
m_dwPos++;! {9 d1 S8 O$ R, @ a
}
6 z8 D: V. o) I. {( u+ G9 SBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列( y' k w. Z: m0 J k# A- g
{/ Z- U% |7 a; h( }7 o2 R% h# O5 d
for (int i=0;i<MAX_INVENTORY;i++)+ i T* o( l' l+ o9 I$ A
{/ Z0 S) l* ^* Y, t
if (m_Item.dwId == dwId)
, m5 g( d' x4 \; ~; f3 S Q {. Q \: X3 U4 U+ Z- W+ c1 P% m& K
return m_Item.nIndex;
; S/ ^/ K% d$ B& J& P }
% r* t v+ j0 `0 Y }, F/ E6 `. x6 j# p4 ]' \# A% j
return 255;) ?/ Z" X( K* }+ m# {
}# T& i6 G# Q' e$ D. L% k
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
9 ^) o) c; P( H6 S ]6 e+ U{
" T/ E8 H3 X: l BYTE nTmp = 0;1 ^! e2 B( A8 V" P
bool bDest = false,bSrc = false;9 v* o8 D9 f5 W( B
for (int i=0;i<MAX_INVENTORY;i++)# b8 ]2 y8 `: e, w& R
{! F% w5 g( s! m5 A# O- k5 h
if (dwSrcId == m_Item.dwId): `) g" X) m" m& [" v, ?1 _
{
- Y' ?% g0 i0 ~ ]$ j //id相等 则 改变对应的dest和src) ~/ @3 N! V7 K9 q5 a
nTmp = m_Item.nIndex;
: f/ B" x* A: S1 ~ m_Item.nIndex = dest;
& M8 \ \$ I' W/ G K. [' f }
3 D+ l* U* {' r0 Z, O" [% j( u }
R( D) v3 I& s' { //临时数据保存完毕,交换开始6 e* s# X$ X% U7 ~
for (int i=0;i<MAX_INVENTORY;i++)
8 ]& w/ {# P* b {' t# f; W: _. l6 M; a' P
if (dest == m_Item.nIndex)" [- F. i+ T$ o0 m1 D2 }
{
1 b7 ~+ m, j* w8 } h9 }3 J9 e //id相等 则 改变对应的dest和src# |: |; d% n* z6 s) T! l& Q
m_Item.nIndex = nTmp;, s% s4 U6 Q4 o2 c& C2 L) z1 V) M# \
}! L* v$ ?- _; O8 }7 s( d9 p- w7 c
}
4 k" n5 c; S- q E/ l}( }2 _4 G& _. R% b7 [
};
3 ~( A7 |% {3 _! q2 b9 b; I9 X; N-------------------------------------------------------------------------
5 [6 A& d/ O+ H& r依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ), U2 H2 J* ]% j7 E% v1 h
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
8 r" ^* X* N' `" [$ z' ^4 p" I- H紧靠其上添加:
: R/ X0 n# W! Y" S8 uif( pWndBase == &m_wndMenu )( z% i2 ]4 C# D9 {
{! L. S) Z+ y% x9 j7 G* g7 a3 J
switch( nID )3 b x0 s( H( G$ _2 w
{. G' g5 O0 ^" L( j
case 2:
$ ?- Z' k G6 s9 V% ~7 F {4 X8 g& z8 a3 }: L
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
9 \9 ?& f1 I+ x; t; y( c* g if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* F) y# }2 [2 v4 G) _4 L( i
{
# c' u: l+ T* {3 j E/ J+ q# t break;& ^( \# B* C' x0 j8 i1 o# i1 S
}8 X9 j& b# G% `7 @2 i8 E
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
7 F6 P7 k1 z$ I9 V4 k/ } {
# K* ^ h- S) T/ U CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* w7 y7 R9 v, {0 ^) I
if( !pItemElem )
9 D8 A9 |4 P/ w1 g0 [ continue;
) `7 T2 C, a% d8 ?& \ if(pItemElem->GetExtra() > 0)
0 t0 p0 e9 d* s2 M continue;
, l7 ~% Y* L) |& f' Y4 j9 e% x if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
. z6 ?7 m+ \& ?" F, [ continue;
) c$ B& e9 _2 ?/ B8 h if( g_pPlayer->IsUsing( pItemElem ) )
, E# d$ I' K0 R8 L continue;
, P: r5 z6 K- I if( pItemElem->IsUndestructable() == TRUE )4 Q( k' @0 }" G. ^+ j1 I
{) s" D0 B! U0 {/ Z8 f" T# Z1 V
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
& _; x, s$ ?% B8 R5 W' f1 B continue;, o+ v6 a, Q' B" P0 d
} I" M: Z# x" Z# @# J4 J% x
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);. _0 ?' j) a1 g! m) B! g/ u$ ?
}
1 G- S- f, J% ^7 k) S break;# K& R) h8 D# X; v- L5 Z
}3 [( V1 Y* O9 Q+ M, P. m% {7 y
case 1:
% {6 X6 g5 g/ r7 ^9 G {! `: y# ]2 C7 C! W' \9 E
//整理背包9 p& [, l; I) H' W$ b- X/ T
//////////////////////////////////////////////////////////////////////////' Q. C" `2 p7 u
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );: ~ z* U1 W8 O G
//////////////////////////////////////////////////////////////////////////
2 y' O W$ q% e //////////////////////////////////////////////////////////////////////////
4 ]& o% m3 K& V CInventorySort* pInvSort = new CInventorySort;
& m7 X/ h+ n; B' q8 I+ M- y vector <sItem> vItem;
6 C4 P8 O2 X2 p% ~0 k5 H vItem.resize(MAX_INVENTORY);//初始化大小
g1 G; `2 Q3 Q3 F- Q i- F' a /////////////////////////////////////////////////////////////////////////// x M D" U! @& a9 t5 p
//填充数据4 w' y1 ^1 E4 v- g% t, H
for (int i=0;i<MAX_INVENTORY;i++)
, X t" o" z8 ]3 W" w x {5 @; e- y, n+ v8 V
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 a3 m+ G' U6 d! g& J
if (!pItemElem)7 N: o2 S$ ^( F u: @; r
{
2 }+ P Z$ X% h: H vItem.dwKind2 = 0xffffffff;
# U X/ j: y- O) P vItem.dwItemId = 0xffffffff;
* \6 L7 I: c+ R) `; E2 c. \ vItem.nIndex = i;/ T# k( o& X+ ~/ y. L1 i
}else {& U* `9 \1 V8 j
ItemProp* pProp = pItemElem->GetProp();# u- o; h* j3 b% c* s
vItem.dwKind2 = pProp->dwItemKind2;" L0 u7 o5 u' e7 e4 z. s* r" h
vItem.dwItemId = pItemElem->m_dwItemId;
6 L1 C4 C( F" c4 M& ~ v1 x2 ~ vItem.nIndex = i;- {2 W3 W$ m; s; \8 b) V# o
}
# z9 l1 E$ T; k" U8 } //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
& x. z* Q. G) M( S. x; n- h2 ] }7 u3 U9 z" } H. [5 ~" r$ r- S/ @
//////////////////////////////////////////////////////////////////////////* n8 B! S; e$ s$ d: x( g
sort(vItem.begin(),vItem.end());//排序, |& G9 N4 }, `/ f1 V9 G+ Y7 ~
//////////////////////////////////////////////////////////////////////////
4 t9 `, P0 c/ O: H, J5 e2 `+ Q //交换; G8 O1 f6 a5 o/ p" p( a1 l/ e
for (size_t i=0;i<vItem.size();i++)) Z! X( F. a1 m9 e( [' w
{: F: m3 k9 ]3 w& S
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 V; f; ~/ w7 n* C3 y* z
pInvSort->Add(vItem.nIndex);
^9 z1 y* e" p9 l8 o- z }
! N: G# k5 W0 C6 @. x, ^/ d* A* o BYTE nDestPos = 0;% w1 a, Y% C& L* J; w o% B* _" N
for (int i=0;i<MAX_INVENTORY;i++)
, s1 E/ U7 R4 u+ `: d% R {2 n- N' Y& _# i- O( C
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);8 B7 a' Y O* P5 x- ^( S! M% k
if (pItemElem)
, o( s6 t* C. { {' {; b7 T! E5 Q) r6 g' W+ D
if (IsUsingItem(pItemElem))
- v; |- \. b7 N7 C. [! l {
# m* i6 E9 X' M% y: r% `: G //这个位置无法放" e* [. ^ K6 T9 Q( O1 b9 i: _- ?
nDestPos++;$ i( C4 x; K# e, t9 X' X2 _
}/ o; O0 Y$ E! u, l2 W: w0 ^' u8 X
}& c; F5 f) }; i6 n$ G
BYTE nSrc = pInvSort->GetItemSrc(i);
) B9 d# t6 W, a6 g9 V3 y+ H$ I/ D: Y1 x pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);7 A/ G; z( I# I) v5 S( E
if (pItemElem)
- G8 Q5 A& J+ B1 o# l3 Z0 @, Q) [ {
. H, p- v+ C) @' q# ?' N Q4 W" e if (IsUsingItem(pItemElem))
/ d; v- x# t1 W5 ]4 Q( l; m/ z {
- y# W M0 Q1 E" ? //这个道具无法移动,跳过
/ u6 p! R" }$ w' h4 ? continue;8 d" w8 J4 V: W% Z. d
}
" ~% p" u) C6 [ }else{/ S; r* S1 Y7 W4 ?5 h" R
//空位置 不用动2 O" X' y7 K9 w$ p8 P+ Q
continue; V) \$ g% z4 X$ r9 A& J0 k
}' g. f1 g* e0 w' H# M
//////////////////////////////////////////////////////////////////////////0 l& T" ?+ Y) X2 M$ `1 [! G
//开始移动
' ~- j4 S2 F: m' p% r0 Z$ C" }1 b if (nSrc == nDestPos)7 x9 l: t' }% F6 b& o
{1 [" l( ]: X. O6 Y/ Q
//原地不动
# h b* f, B, A; \ nDestPos++;
% C, O6 m( J3 o8 d: I p continue;' d# b& j0 B6 N( }4 O' f- d
}: ^+ Y* C# n0 S3 {
pInvSort->MoveItem(i,nDestPos);) `% h9 u* Q) ~9 E; }; D5 X! S9 u
g_DPlay.SendMoveItem(0,nSrc,nDestPos);. |; R6 W! M& r3 h+ Q
Sleep(5);
# L( w% b8 |+ k' y+ W* ` l //Error("移动 - %d->%d",nSrc,nDestPos);
& x) w. a8 W* f2 ^9 i# m9 J nDestPos++;
) L2 g [. n5 J$ g8 ^/ d! U }/ i( w4 Q% s" o) N2 |& b
//取第一个元素的信息
1 L7 n# D% w0 V8 x8 V, V; G6 E) l /*3 ]" M8 _& L3 L2 P* b
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
* u* D. }/ e' g: Q- _) g$ w {& l9 ?2 \' l8 y3 \
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);4 F, O% n% w4 e& T
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);* Z* c9 g9 o! `
}
" U; D9 K3 H8 ~0 Q& a */' R# T- ]+ T9 m
//////////////////////////////////////////////////////////////////////////
, ^+ N/ J" A1 f' g break;
" K: p _% m' P9 c6 M }, C) X0 i4 r6 P+ b" z6 d- e
}
; d# {' x/ `( R7 |. C}- V1 L# }8 n2 `6 b4 p
m_wndMenu.SetVisible(FALSE);
# f6 K+ U) |$ @( ~. q# `1 o# Q) [0 N+ s
7 M- N2 ?: Q3 V; ~+ e7 ]; v--------------------------------------------------------------------------------------------------------6 \. O2 {% r/ `. r" l
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)6 B @4 Z8 N$ [" @- {) l$ }
{) w4 N. X$ I+ e% |
BaseMouseCursor();
: I7 r( v% M+ @) |}2 ]- v$ u4 I( e b& y
在其下添加:) D. h6 q% d) ~* o; H7 c0 b
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
. E0 U) U5 I$ c! X/ K{
7 q$ J" g1 z& {m_wndMenu.DeleteAllMenu();1 K( U6 k6 o% P' k* F1 }
m_wndMenu.CreateMenu(this);9 i% ?+ }7 U& m3 s/ R( s# G/ b7 M0 f
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");+ b- T: x" @/ d; _
, z- N9 l* s/ ^/ {. \; e4 `
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))2 A9 C3 c u; I# r0 q8 B! n$ `) b
{
5 }4 b! V/ |7 m //P以上级别才可以删除所有道具
5 `1 \, L/ D' o/ x0 o7 }7 h3 o m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");) ~* }; Q" `& J0 h
}9 P- G* m) S% m0 S
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );8 a# S" ~+ Y( M1 O! \2 M
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );( n4 N I' F3 ~! z/ A
m_wndMenu.SetFocus();: f9 N d1 Y" K: k: [
}
( c/ F# @, E. f J8 f4 \3 s------------------------------------------------------------------------------------------------------------
9 e4 O+ i& T! |' i% ?: k- ~*************************
$ Z$ B, \4 O! O, |' T+ J& VWndField.h文件
2 h% y: n( \8 D9 K3 E+ W+ n& {*************************
, o' N! z! _+ M$ @9 m$ C! S搜索:BOOL m_bReport;2 \ L$ ^5 U0 z3 i# L; T9 A
其后添加:
/ J- z6 a8 d+ A% sCWndMenu m_wndMenu;8 y# |* `) f# x* i/ }
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);0 g0 w$ p) ?- G6 { b4 ]
其后添加:
! o- S( X+ N9 \7 @3 rvirtual void OnRButtonUp(UINT nFlags, CPoint point);
/ N4 ?8 w" N' U0 J
, C* y$ ~! b, ^- E, X0 Q8 W0 q6 u- E) x" ?
|
|