|
|
源文件中_Interface文件夹下WndField.cpp文件6 O! L( ~% f" I7 i1 A. f% v
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
- l; k: H$ `# Y9 p$ }# \! U8 q2 o8 B6 R! k
struct sItem
" m3 J* d/ Q* l) l& ^{
0 z) ?) ^& m5 a" _, f; HDWORD dwId;
; K2 `0 w+ G$ [4 Z Q1 Y5 q _DWORD dwKind2;" K: e$ `+ l9 q1 ]
DWORD dwItemId;
" T5 o) X, v9 a9 h* P) `- x. t8 uBYTE nIndex;
7 n4 w7 ]( ^& b7 QsItem(){
/ y# `5 \ Y1 i9 | dwId = dwKind2 = dwItemId = nIndex = 0;
# y" ]3 D$ S+ z4 m" E: f: J6 i( N6 W}
2 v ~) J7 L, J% a5 R, U; }* ?bool operator < (const sItem p2)
, Q; B) r& z- w) G- h- v b{
4 C# @$ a( l2 o) U# N if (dwKind2 == p2.dwKind2)
5 ^! ?8 p: s8 ~) S9 ~: k {1 Z7 V+ D3 G. t" c+ n5 n, X
return dwItemId < p2.dwItemId;
, T* ?' w/ r/ F' V5 D" e0 w }else{
, t' X* t! @* e! | return dwKind2 < p2.dwKind2;: X# n& l+ H# u1 G, ^1 r
}
! B7 A/ z7 [3 L2 w$ h7 l}& p% Q5 Q7 l0 H2 ?% L4 L) [
};
; {4 e6 Y# ^" D- ]; nclass CInventorySort* E# k, W2 I' ]& b1 `/ M( y" Y
{5 I. h2 P" C& o! G( u) c
public:
1 O$ |0 q) G8 J$ Z) g& l3 vCInventorySort()
7 @2 u) T; j, n; H{
0 D* p# s, w n6 v% H m_dwPos = 0;
7 q% c: D+ F# z7 q p}' {1 f8 B$ ?: f* v2 ^; S8 Q y! }5 ^
~CInventorySort(){}" x- p* ]; _1 }; Z1 z! t
private:9 x" A* E# i: @" E
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
- `7 {; x- G, I4 x" j GDWORD m_dwPos;* A8 `5 f6 x4 M! C
public:& p3 Z* f7 }* y+ w7 e3 ^7 x) i
void Add(BYTE nIndex)
! U9 R% X3 h) d- v{3 M$ g; C$ {0 \% i; J$ O8 j
if (m_dwPos >= MAX_INVENTORY)9 n6 `/ l q$ S; N& m3 [* I8 O! G
{$ Y; Z2 C: K c8 W
return;1 K* q; ]& B* R3 q, e" B' h
}
" r2 X/ v+ ]- _$ p* h m_Item[m_dwPos].nIndex = nIndex;
0 B5 d: y( r* k m_Item[m_dwPos].dwId = m_dwPos;3 _0 r7 P& O) A
m_dwPos++;! X+ x6 s H- j* O( q H9 D5 R
}: N$ B( T/ j6 i6 L; S
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
% S" }- y# z5 W* Q5 ]2 f6 i; a% b{' u) u. t2 ?8 o3 R% p: d
for (int i=0;i<MAX_INVENTORY;i++): u/ e) g z T8 E; e* g# t8 q4 [
{( e! Y; |7 I0 n8 d O, M
if (m_Item.dwId == dwId)7 D) N) }7 {" a/ z
{1 s; J! J: d3 d; X; S, {8 A: n$ t
return m_Item.nIndex;) k6 e- A+ i, {" B/ K. J2 B3 x
}: ]$ N% h& L7 k9 ~
}9 W) X9 x2 W' O F# Y2 E$ {+ j
return 255;
( W6 J, ]* o) b3 y. b y7 s ?}! o1 ]! i% }* X3 M2 y; s2 {
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
4 K' v1 K9 B% O& P/ E{
) n8 V1 S( |3 u7 | BYTE nTmp = 0;
6 a- e/ W0 X. d bool bDest = false,bSrc = false;2 D+ u" a' r" ^% c/ t+ |0 l
for (int i=0;i<MAX_INVENTORY;i++): P) G( T4 U0 @! `: D5 C
{1 Q& n: \& _$ y7 B" B. d
if (dwSrcId == m_Item.dwId)
+ J5 X* |8 @# p' E5 ]1 w {
/ b5 a1 o& F2 N; Q* G/ K //id相等 则 改变对应的dest和src
. p N( x" _3 Q- r5 x nTmp = m_Item.nIndex;
1 e' I7 X+ \0 w7 f. A& T& {" \! l m_Item.nIndex = dest;
2 V# L2 K1 P% a1 h }7 z6 C9 r7 g' b$ H5 R
}
; l- A: B7 `. |. `( W5 J/ u- V //临时数据保存完毕,交换开始, I3 E' z# l+ d
for (int i=0;i<MAX_INVENTORY;i++)
% ?0 U) N) T$ @5 H+ d; I# e {+ Q I6 O0 Z3 u, [! j* a
if (dest == m_Item.nIndex)" [6 C A4 `- E- l
{( T+ H' u S; Y( h# y. b
//id相等 则 改变对应的dest和src
, Y; O; f5 M& H2 U. } W- G1 E m_Item.nIndex = nTmp;9 U* n/ B0 I! R3 H; t: o% o
}/ Y# V9 D% O" w% \, ^0 b
}
: A1 F: P" s+ e% ]$ [9 f: k}
. t; d$ s1 Q% i$ |3 i" v};
) p' \8 M9 V$ {: A( ?# R9 q2 \-------------------------------------------------------------------------% |5 ^1 L {' U( a, n) K$ L4 N
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, T+ S6 q: G" f/ }& q4 z搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
1 l) I1 G0 W; x- T ?5 Z紧靠其上添加:8 D5 C0 K/ t: A! V4 X H& W
if( pWndBase == &m_wndMenu )
. m* `% L3 ?( J( I6 Q j8 x{
; c7 {; P. R D( }) z9 J switch( nID )( n+ U4 m0 N: W8 C' J
{
2 \: \. k1 v8 b4 n! K5 R case 2:$ q+ A' E% ]" ~5 j
{0 R6 C" t2 ^! l) s$ W( I
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);4 ^ A/ l Z# ~
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- c9 @. G$ D9 m8 m4 k! ? {& u. c$ }+ d. T" j! Q# @. \
break;
5 J3 y: G/ j) g% X9 _ }
: @1 x: J) U6 J8 O! t3 t for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)" i# M4 \1 v5 w, q
{
1 Y3 W9 l s" a* I CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) o6 g# r# L1 a0 |% S
if( !pItemElem )5 f1 x7 x0 [6 Q5 C n% d4 W
continue;, @( M' c! A5 r6 x: @" N
if(pItemElem->GetExtra() > 0)
# l! U0 U3 l$ [, g continue;
* b1 X f5 y; i% V; H3 O3 L if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) % l0 X9 q6 F' a, B1 t: t" E
continue;2 V9 i t3 j7 K+ L
if( g_pPlayer->IsUsing( pItemElem ) )
5 M# o' e' i7 K$ m) s continue;6 a7 e$ V8 j% S+ U: T9 P
if( pItemElem->IsUndestructable() == TRUE )
. H/ `6 C5 y/ r- C' ^7 @9 u {
0 }% c5 }5 Y& P# H$ M2 P g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );, X- V8 t. Y1 y$ ^0 I" E) K; y
continue;
3 \# I+ V) S2 D% @ I: R, j3 M } B. g5 e" u" ?" G) ?# O! c4 R1 m
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
/ S3 i: l" N O, b- m }
) M8 ]8 [9 e1 S1 w H break;% i" J( w2 |& H% J# \, U0 |/ T
}" d) _' ?( W' v' u' h- x3 Y; y0 k% D
case 1:
3 c! w& z$ a& k5 U/ l {( }# A/ r& `6 n
//整理背包( w$ V1 ]" A( ]
//////////////////////////////////////////////////////////////////////////
9 }, l- i; v7 f& p2 T //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );7 L/ M. ~5 S$ {' `. N( S
//////////////////////////////////////////////////////////////////////////
8 J" ~$ N' m: L, t/ _ //////////////////////////////////////////////////////////////////////////7 f: }& a8 G# k1 k j! v# {
CInventorySort* pInvSort = new CInventorySort;
& V7 I- T5 z6 ?$ S/ D+ f% v8 @ vector <sItem> vItem;6 m$ v) X$ l9 p) n
vItem.resize(MAX_INVENTORY);//初始化大小4 w* R' ]. `, I! K" S& I
//////////////////////////////////////////////////////////////////////////
F- k* W& Z+ t0 O% D q- a; c //填充数据# p: H y7 j# [" r* g
for (int i=0;i<MAX_INVENTORY;i++)
# @' c' |9 Q6 i4 j1 e5 w$ D: n0 B {/ E* i1 r; \: j2 F# t2 ?
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 [& B0 ]# X8 x8 N- S3 S if (!pItemElem)+ n( ^9 P% X+ ?( O! G
{) }& y( \# q+ x
vItem.dwKind2 = 0xffffffff;& p3 a7 [7 G) h8 I) ^# G, f
vItem.dwItemId = 0xffffffff;9 V% I' v2 n6 ? R) |' h& B
vItem.nIndex = i;
8 C0 U' H( Z0 m( o1 {& n0 W8 Z X }else {+ e) G, Q1 T6 N
ItemProp* pProp = pItemElem->GetProp();+ y/ E3 C" C; V
vItem.dwKind2 = pProp->dwItemKind2;: [5 k5 [0 @7 ?$ i- W
vItem.dwItemId = pItemElem->m_dwItemId;* X9 e' d4 o. d0 T- Q/ Q8 j
vItem.nIndex = i;) F3 p; |& R ~/ H3 h3 e
}( o( n7 ^2 V2 F
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
* ^+ k: R6 o. ]( b4 C }' A( w' T- w; Z" M& B; U0 o/ Q5 |
//////////////////////////////////////////////////////////////////////////
# q4 M+ S) g6 h/ \& H' o sort(vItem.begin(),vItem.end());//排序, o' z3 H/ h9 u* I
//////////////////////////////////////////////////////////////////////////% n+ F2 ^5 b) I+ y5 \6 j: v
//交换0 U. V8 D9 P V% K) i
for (size_t i=0;i<vItem.size();i++)% w2 s& j& T1 }8 M5 G9 N
{
: a4 |% @1 M% T5 X. o' `2 ^ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# o) X: I" K3 I9 l pInvSort->Add(vItem.nIndex);
2 ]9 D+ H/ F/ |' V) @* w; D% h }$ J3 c7 H: x: h/ u" j0 M
BYTE nDestPos = 0;
5 M9 H/ A& ^$ Z. W! h for (int i=0;i<MAX_INVENTORY;i++)& T1 ^9 R! @5 j4 ?( |$ ]. }
{
& }6 V( J1 m( A3 m1 r: u' y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);) {* _3 a/ Z1 k E/ Q6 d
if (pItemElem)0 |' c1 _% g' k# R
{
( I+ N; N! U% g# J- |: \. D7 O; I if (IsUsingItem(pItemElem))
{; D3 _3 ]4 e/ \: O! [ {
( r. H; O, w4 l, l; F5 L //这个位置无法放# K' N2 i$ w+ }1 F- B" |
nDestPos++;
- Z; j7 W( e0 o }: W" ~8 y! I0 P0 S8 A
}
0 n2 ]) ^. l6 d G+ B9 {3 v BYTE nSrc = pInvSort->GetItemSrc(i);
/ F4 h" P5 a0 w; A4 ?% V- I pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
A6 N# C* S+ |# u. u! ?7 ^ if (pItemElem) \, ?5 U+ a: U- H$ n" O% \) U/ O
{; O3 v0 K4 P/ I2 U& c, t) j
if (IsUsingItem(pItemElem))! B% C% D4 Q/ c) H3 y6 t8 o3 _
{
$ `# s$ g [! [5 i8 _# k //这个道具无法移动,跳过
+ {/ K" B$ W8 f# ? W3 I continue;
- `' Y/ U* Y( J! x* ^ }
6 X& m" R* D9 S/ q$ Q1 F) P }else{
}+ t0 V8 B4 b% b) G B0 B. B //空位置 不用动
3 S6 K- b6 m1 v( u* Z continue;' G0 V3 b2 p! x/ ]
}
: w% g+ I; _+ O& Z //////////////////////////////////////////////////////////////////////////
7 x. W( a" i& x7 }- L //开始移动$ f4 `# I6 G4 h% n" b, h
if (nSrc == nDestPos)
* T! |. _/ \8 a; O {
4 L0 }8 |3 M6 C //原地不动
1 ]* d) M; l, P+ A# Z0 Q nDestPos++;3 o' Y" e" [. ~6 c0 ^1 z
continue;
) l) G# B0 \8 e; O1 s }
" y' x0 E% ^8 H pInvSort->MoveItem(i,nDestPos);
: O0 e4 W8 W6 [3 m# j& d# L5 Z/ s g_DPlay.SendMoveItem(0,nSrc,nDestPos);
& h# O( k$ [7 f8 M8 |4 P Sleep(5);+ N* h: f) X$ a# M Y$ \
//Error("移动 - %d->%d",nSrc,nDestPos);! Q* ~' E) m0 e/ V. T5 _$ ` x
nDestPos++;
# _% C( n. ?" c; X W! i }
0 |0 ]3 e! d4 \6 D //取第一个元素的信息
$ c6 ]* O# @5 i' }$ v8 A. E /*6 W$ [7 b8 W6 @) j: s2 w; ]
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)# x. V D6 H" ^
{
$ k- I8 x4 ^' Y3 O h( t Error("Move - From:%d,To:%d",vItem[0].nIndex,x);5 E. P2 { Z: e) u) R" h0 [; C
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
4 Q/ |7 k+ T% l( a& d% } }
2 C4 F- j8 A/ E' J" H1 K */
2 ]7 f1 ]* o0 u- f1 X //////////////////////////////////////////////////////////////////////////
( r7 Z- {- N8 g) Q: ` break;
- Y- s1 o0 {! S! Q }
; U1 U% [. `0 X8 G }
3 b8 E2 @; v3 ]& t' J}5 m( W3 C! }, a/ O4 t
m_wndMenu.SetVisible(FALSE);
! O2 F) _5 H u9 p* _! n" R' r5 ~
--------------------------------------------------------------------------------------------------------2 [" _7 b$ a3 x! C! M7 T
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)' A! y1 r, Z1 y2 K
{
% l7 t! J& ?; F" |0 v# d+ S6 YBaseMouseCursor();+ K# a# q5 p v
}
2 [7 j$ f3 f) e! G8 F, x( }' p在其下添加:
1 e! f$ S, s" R* S4 p) Vvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
4 {, T/ ^: G( t- M& D. l{' Q }, C0 J8 P& c# K
m_wndMenu.DeleteAllMenu();! u$ @) \0 C" C
m_wndMenu.CreateMenu(this);
% @4 v" b* b8 D5 r- im_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
8 \% w) S5 B" c4 g4 P9 z, B) M3 Z
& N5 b: v) o" M+ } c2 Fif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))2 m' L8 Y( \; r1 S
{0 Y! D1 S H! R
//P以上级别才可以删除所有道具
4 g# U A. x+ Q; _# D m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
5 j o L' s- V" b) F9 \1 o}
( a, B, i$ w5 j2 }! k# u4 nm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
- z7 I2 a& W: [* g* a1 N" lm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );6 E! B, f# h6 i$ f
m_wndMenu.SetFocus();
! j e( _; N- X2 `) a5 J; k}
; Z& B/ O! P2 ^1 Z------------------------------------------------------------------------------------------------------------
3 j7 T7 j; ]' O0 L# ^*************************( Q! c$ R5 s( d
WndField.h文件 E: Q; j2 z4 z( p0 V: P" P
*************************. t$ ~% U- F. l, m1 n
搜索:BOOL m_bReport;
+ R- U- r' f* l& j# U9 L其后添加:+ s; w7 N+ W2 ^0 ?3 E/ `5 m/ W
CWndMenu m_wndMenu;4 ~0 s) o+ p. {6 Z
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);( v0 s9 f2 q: p! y4 \% G
其后添加:
" Q8 ~3 u% ?& q+ Evirtual void OnRButtonUp(UINT nFlags, CPoint point);
+ k `' D X0 I1 `- A& u6 X1 t4 O& i4 F& J) D2 @" r6 g
! A0 n" c+ P) ^! h1 _5 ?
|
|