|
|
源文件中_Interface文件夹下WndField.cpp文件
$ f4 [( U4 Q/ j- v1 j% b+ H/ ], y' L搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ k) _ @! q) @: J% ~$ G* |$ M7 b' U8 _
struct sItem1 @- O& t" B0 _. u/ Z. r6 [
{- N7 P$ b B3 Y- B3 w" g
DWORD dwId;! y# [, T4 M9 S
DWORD dwKind2;4 @3 [4 C+ b3 g/ X; g7 b
DWORD dwItemId;
. y8 y* p/ }. ^, p3 K5 hBYTE nIndex;
9 Q' y. J) Y1 g& a8 w# N2 D% g: dsItem(){
# |. c9 U2 f- k: c+ l+ y dwId = dwKind2 = dwItemId = nIndex = 0;" J- w/ A/ n' a8 v w/ |7 W
}
) ]* W. m8 a2 `1 a, Z$ Jbool operator < (const sItem p2)% N5 j) U8 `# [; W' o, i/ y
{& v4 Y% _8 y/ g1 O; p3 x( Y
if (dwKind2 == p2.dwKind2)1 q' T6 F, r. }: ~5 ^2 j5 l
{4 b& n- L) Z+ Z* a
return dwItemId < p2.dwItemId;4 y" e) }/ H2 F- }3 {" Q* }$ h
}else{
3 s+ v1 p* T' n7 P return dwKind2 < p2.dwKind2;
; e L9 H% L: \, ^ }" n: M7 m' c" J5 S. H" E
}9 m1 p8 Q- O& h) K1 X& d
};
' \/ H( ^ K5 s# {' H* L& kclass CInventorySort
7 G; }! B3 N' K7 [- b" x% C{
+ W2 {: E/ S/ B, ^' A' O& Ypublic:
0 {) [7 H' J) q! \( UCInventorySort()! t7 A0 a8 c6 x8 |% c, h- o( L+ o9 a
{$ q X% R! d" n& q4 z/ W
m_dwPos = 0;4 f% Q8 O0 ]- v; T0 k
}: j. O6 |& }& A/ F- _6 }5 E- g D. ^
~CInventorySort(){}
9 g2 g- L* l; {0 z4 Sprivate:
; d7 D n5 S4 W$ E GsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息2 m* @5 X. x D) T/ J8 B X0 H
DWORD m_dwPos;
}4 Y4 g6 _1 o3 U/ bpublic:
! C( ]0 F: @: K' L8 ]: N( l7 A5 z0 Hvoid Add(BYTE nIndex)
2 B q- |! D, t: m% D6 Q{5 b# x# ~# M3 a9 x% y& ?1 r6 K" P0 z
if (m_dwPos >= MAX_INVENTORY)
% U( ^7 |* P7 s' ~7 v {
( r! D U" J: y/ H8 a. f9 B' ~ return;
$ K/ S/ @* Q4 P0 G' S* e } i/ Z w, I3 ^9 C) g, i- |+ v4 D
m_Item[m_dwPos].nIndex = nIndex;) f8 m o# _( A* s1 [, I
m_Item[m_dwPos].dwId = m_dwPos;8 A( [" a1 a5 M; ]' h, q2 C
m_dwPos++;
/ R. ]8 f3 X2 F* G2 ]8 N}# Z1 Q* x/ `; L8 l! Y# z8 g
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
: Z# A: i; u' _4 G) w/ w{) ~) J' l# U: R. F
for (int i=0;i<MAX_INVENTORY;i++)# N6 A$ Z" M, r3 K- Q( g$ J. q
{
, O* F H& x( B* E. c& P3 j if (m_Item.dwId == dwId)
( c9 R' C0 }/ |8 F {
" g s ^$ k% L return m_Item.nIndex;# n' Y" b- a. z/ V4 b( \) k
}
3 W7 B3 o0 D. q P3 j$ V* C }
% X! Q2 r; z8 c' V0 `, j return 255;
$ Q; R9 K" M% B6 n$ J}
' y. t- Q @7 k* `' j. p2 N) Ivoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
& ^6 J# |0 y6 a* n2 S5 U{% y/ d L! v; O4 \5 S
BYTE nTmp = 0;! S% U/ N5 @2 i" u6 }8 D2 Y
bool bDest = false,bSrc = false;
1 E9 j" C0 C. c for (int i=0;i<MAX_INVENTORY;i++)
7 Z. S/ k' E) c' t) S# N' t% C/ _ {
/ P: y4 l/ d D6 J if (dwSrcId == m_Item.dwId)
+ o: t7 p% o; d# j5 C6 Y3 J% A {
3 f6 Y. ]" ~. p& |" r. W //id相等 则 改变对应的dest和src4 I( J% u" ~ e8 B/ q, a
nTmp = m_Item.nIndex;: F9 P) Q" Q+ x
m_Item.nIndex = dest;, B$ x8 C+ H5 [4 n
}, ^- ], [; O* \- P- x+ w
}* F0 z3 `6 N' L- D* ]! j- h5 y0 Z
//临时数据保存完毕,交换开始' d1 `3 @5 O) i3 h9 L$ y- f3 y( ^
for (int i=0;i<MAX_INVENTORY;i++)
% @. y' M0 [5 t {7 }* D% W4 V8 u3 G
if (dest == m_Item.nIndex)
9 f( d7 Q6 x3 ~# w { N% f Q2 L& r Z+ O) z
//id相等 则 改变对应的dest和src
; @7 |: |8 v# | u8 C m_Item.nIndex = nTmp;3 K# |! r3 L7 s- V1 w
} Q7 c; H/ w3 m. Q) x* r
}
$ ~& z P& M- ?" s* w3 d}. }( E, b# H' d' p# v& o6 ~4 {
};8 a A. X; v; S6 C1 z) T
-------------------------------------------------------------------------$ o# _( d( Q2 r, {, G! ]$ b X7 ? h
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: Q1 z4 T+ `5 L& N* z$ o) Y搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
- T" P i! o+ P1 {% S紧靠其上添加:- t% S5 k2 D3 h3 ^6 d! A# i
if( pWndBase == &m_wndMenu )9 Z3 k. R Y2 |6 W* f/ H
{2 G/ |: K; F- H/ v% x& \& i3 a2 y
switch( nID )
( q* E1 ]$ H8 p H( Q. A8 d9 F {6 y% Z1 l2 Q( g7 ]
case 2:
) k v! C8 ^# r _+ W; b0 @, a- \ {
8 T9 ~# u$ N( v //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);& F0 q `. X) `) }& ?: L$ f
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: ], I) d2 d! ]' ~0 `$ s; E {
$ B5 `/ ~( P( ?( J) q break;- w9 J, Y; M" H+ f5 d6 D
}3 Y5 ?. `& {: I; Y0 _
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
P! g( j1 X. _ {0 I3 R$ X* i) b9 x4 ], j) J J
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% j4 |2 M. x8 G( \# X if( !pItemElem )
" v6 ~) H7 X2 u4 P continue;$ E6 @, `* {4 n( Z$ F# Z
if(pItemElem->GetExtra() > 0)
: Y* K+ d( }" M1 t continue;' L0 {8 ^3 B8 L; |
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) $ E$ Y# p: H3 P( u7 V
continue;8 Z/ R3 h; a6 S% E( `, |
if( g_pPlayer->IsUsing( pItemElem ) )
3 Y# ]; I& b0 \# l6 S' E" ? continue;
; h% `5 | q K8 x# i if( pItemElem->IsUndestructable() == TRUE )
; w6 }% v% C8 m* u( A {, v' M# M! |4 O" B$ U- w. o- b7 @
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
7 e- [1 |( N* p+ Q5 X2 ^ continue;
7 U+ ]8 u t* ~, M1 Q, x, G' `# d }5 H ~" t# b$ U2 f) X1 U2 D
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
: S' P3 p$ ]: s/ K4 L }7 Y: R- H5 t" f! [6 v8 X0 e
break;
% E2 V4 H5 @9 m& g5 s W" Y }
+ _5 y. j; J6 x) u! a1 j. ^, X case 1:3 t: U/ W j0 {) ?: x5 f. Y
{: ^( x. I5 E' n; A4 e: z7 Z: V
//整理背包$ E7 _4 M# b; M$ g& U" B4 L$ ^0 q
//////////////////////////////////////////////////////////////////////////, S' ]4 F$ B. @" ]2 W- m
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );9 E) E2 V5 v# g4 o
//////////////////////////////////////////////////////////////////////////! j+ _# `- R# x6 s0 g! }% m0 q
//////////////////////////////////////////////////////////////////////////$ n. m, T V/ j. n( A( k) U L
CInventorySort* pInvSort = new CInventorySort;# n; x5 }0 p/ a& f* o8 P$ d; p# L
vector <sItem> vItem;" R( S, U2 d8 Z8 t, X7 c& J G8 E
vItem.resize(MAX_INVENTORY);//初始化大小
5 Y2 y+ n4 m- r7 d* A' w( X //////////////////////////////////////////////////////////////////////////4 y; v% e) X6 Y& A m- z
//填充数据
: l" W% \" k7 c for (int i=0;i<MAX_INVENTORY;i++)
' j; i$ M& C# ] {; W6 y) `- t/ T: P
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! v5 @: @. f2 O- t
if (!pItemElem)
1 N4 p2 U: B3 I% q8 m1 p: o {& I5 R. o( A! M6 }! L
vItem.dwKind2 = 0xffffffff;
4 r# Z( V* [* c2 f' I- K vItem.dwItemId = 0xffffffff;( H- d* ^. J6 ^0 M/ E- X
vItem.nIndex = i;/ \3 R9 S+ X9 ?# w) T- [) ~
}else {
* `) v) o' O0 f9 i/ n' B g ItemProp* pProp = pItemElem->GetProp();: ~6 g; t" D! ~4 {0 c! P+ f6 M
vItem.dwKind2 = pProp->dwItemKind2;) b# M0 S7 a: p+ ]! P" p
vItem.dwItemId = pItemElem->m_dwItemId;
) }8 @! v. I; d6 g! ?% G vItem.nIndex = i;
! r+ l' S ]% x& B9 P! h' f$ K }% t1 |1 v& O6 z
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
0 ~$ c2 S1 i0 v; X }, E7 a- _) [5 u9 l
/////////////////////////////////////////////////////////////////////////// m4 }7 {# Q4 T
sort(vItem.begin(),vItem.end());//排序0 w" @3 S/ [" e* \, |1 X
//////////////////////////////////////////////////////////////////////////
l% a5 i0 T, h4 l! {& o0 I //交换- }' M* W3 f1 A- H
for (size_t i=0;i<vItem.size();i++)
( ~9 u$ }( ?( m$ ?( k. I {: p+ O0 U( L* \% D# K! R, u0 Y$ U
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- E; P& W @% z
pInvSort->Add(vItem.nIndex);
0 U/ F0 z- u$ ]: [, j }
5 L! S/ E! h8 q& T; v6 V X BYTE nDestPos = 0;- C# \0 p9 ?1 Q
for (int i=0;i<MAX_INVENTORY;i++)0 @3 }/ ?' `0 l2 p
{ I1 j' h9 A/ T" m& a H8 o
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
5 F0 }. q9 S+ { if (pItemElem); G e1 u; B L! w$ ?# M
{
% v1 p+ a( B/ ^5 r. J* N; ~9 q. h1 e if (IsUsingItem(pItemElem))( P: d; Z: p1 D7 b
{
7 M+ I) |) z9 w& K# h$ D$ q //这个位置无法放
4 ]2 E" A! S _4 N3 N nDestPos++;
# k" }; u& K' M$ `: c }
! N3 E, Y$ q/ | L+ i. a6 z }
6 A, y' C1 B3 _3 H) x* Z BYTE nSrc = pInvSort->GetItemSrc(i);
5 L2 d* l' M, V3 \7 l pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
5 J, _8 A! s" Y5 c; P$ C if (pItemElem). H0 N" k- P( d
{
+ u- o8 S$ K) W0 G8 O) J; X if (IsUsingItem(pItemElem)); Q# Z x7 w' `: ?9 R
{
( r$ }: M9 j8 Z2 l //这个道具无法移动,跳过
" R9 B; d. D- a continue;& w% C: B9 j% n# E# x7 [' H% g; U
}6 l6 r/ J+ k3 W1 I1 p8 [8 g! H
}else{
9 V, t2 n" r i! Y6 Z) M$ z m6 u //空位置 不用动
) e2 M( V2 w) @' S$ _3 A0 [$ t* E continue;
% x) ~1 {& N! G0 G; X. D7 \. J }% c8 |0 `& E5 z5 M
//////////////////////////////////////////////////////////////////////////
' {0 v. U* W) B$ q) t //开始移动. D" B0 `! k) g. R5 @
if (nSrc == nDestPos)
; I) \. L: G1 U, s( Y4 I8 Q( b {( j: @" ` h( j; Q @6 S
//原地不动
7 ~# X4 w$ S. j* ]: [ nDestPos++;# P3 B. e+ N# u: `4 Z& Q
continue;$ v; v7 e8 [* m% [3 q( D/ W
}
; G$ Z! L6 Y5 R2 C8 ~ k8 V pInvSort->MoveItem(i,nDestPos);) n) c; E# f7 Q
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
; `; J5 a9 v$ O0 D4 @7 B. X2 Z3 R% J+ ] Sleep(5);( Z H3 y$ ^7 c& v0 Z1 }. A
//Error("移动 - %d->%d",nSrc,nDestPos);# X! R3 X7 Z6 t2 j" j2 \/ X
nDestPos++;
/ r& W5 A G! B; F$ N }
|8 k) _/ x4 r, j! @0 O! E //取第一个元素的信息8 e6 Q4 u! {: N$ H* `9 Q8 K
/*
) P% V, p% r* n; \0 E* i: A5 f% C if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
0 S1 M. h+ m3 R9 v. k {1 N0 S' k9 h9 K, J
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);( I# a. G5 e5 I' r
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);5 D a7 d: D: y/ ?* j
}( B" o% M: K! R/ \/ F
*/
* V2 ?* a1 N {, G0 z- x" i //////////////////////////////////////////////////////////////////////////
, [0 a9 R0 O% j break;
! X* z7 k# P0 X4 m1 F }7 c4 `; h/ w8 R: E6 g# l4 g
}
8 ~! O" p. o3 U8 w}8 H; z1 ~5 }/ c4 O" ~
m_wndMenu.SetVisible(FALSE);7 j4 k. a% ]. {" N
. [, V% \3 P: r7 X& |
--------------------------------------------------------------------------------------------------------
2 W) l! f: ]: n- X: k搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)& h# S; W! x3 j4 w6 e
{
9 ~' r) H4 l! W1 e4 Z& D4 c" u- }BaseMouseCursor();- ]4 G; W9 J6 `+ F- b8 N
}
8 d/ L1 c0 k F$ A在其下添加:
9 a) d7 ?* j; ` X# H6 {; \void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)" g1 t- T# N0 `% Z$ T- U: g& U% f
{* R' W& I) Z ]6 o6 r' G
m_wndMenu.DeleteAllMenu();+ V; f( i# N' P9 C8 p4 {0 m- W
m_wndMenu.CreateMenu(this);
: Q6 r' O% o; K( Gm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
' y7 U, a9 O8 G o! _' V |) P! k# d l3 M4 j9 i
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))4 M$ Y. N9 k8 |
{' h/ g. c/ O, n* O# Y- a+ w+ x2 I+ }
//P以上级别才可以删除所有道具
. Z/ v6 r/ V* U. H4 ] D m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");% e% ?2 z. i' n
}( O# U/ a; X2 K- S
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
4 Q. K$ K m; Y6 s, C! v- qm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
( K) L4 ]" }) d- S. um_wndMenu.SetFocus();7 _" [- E5 a( \% f6 ~, A
}
7 v' E. `$ J/ ]# ]0 [. ^------------------------------------------------------------------------------------------------------------
1 @& ?6 K E# t& [# u% E9 V*************************
- b" v7 l; S9 q0 fWndField.h文件, p3 \3 ]! W" e! J1 u2 r% w
*************************
; Y Q& R M. d! U" _4 ?8 x/ Z搜索:BOOL m_bReport;
% `0 B! o# F* r/ V8 J& K; ?8 @, x4 R J其后添加:
& P S1 N2 | M8 x8 {/ vCWndMenu m_wndMenu;9 `6 l1 b K* y2 s
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);4 W/ ^) q } e2 V
其后添加:
6 P$ K" `& _2 y* Evirtual void OnRButtonUp(UINT nFlags, CPoint point);. j. Y B7 v( h% o* A% M
6 a! |' D H- ]
' `" i$ |3 v' \6 _
|
|