|
|
源文件中_Interface文件夹下WndField.cpp文件$ J6 p8 o7 U' y6 n1 W
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" Z: |3 h8 m, w! r
7 Z2 F5 V# G8 x* I4 x. ~struct sItem3 f) K3 ]5 G; D/ ]' `
{
+ L% \: v" f# F% o9 N7 v3 B) CDWORD dwId;
* s1 k& h% S9 V; j6 f8 s1 O% P" R3 [+ mDWORD dwKind2;& M1 J# q: v5 m' q6 ?6 r O
DWORD dwItemId;
+ Q8 f. T# z' y; A" L0 qBYTE nIndex;
( Z! N# |; q9 ^sItem(){$ \# V' F3 {/ e" s( x9 Z
dwId = dwKind2 = dwItemId = nIndex = 0;/ w: k; e3 |$ n7 Q1 D+ e' i$ M
}1 M* [7 S& T9 D5 v+ @% N
bool operator < (const sItem p2)/ g! v7 C& r0 L+ f
{2 i7 R9 v4 W) O8 B8 h9 X! f
if (dwKind2 == p2.dwKind2)
/ Q$ t% E- x; Y0 i* e% a {
% l- X4 f# X/ N5 u( w; d return dwItemId < p2.dwItemId;; X' |3 p7 q0 p, {" ^/ P9 `: q# R
}else{
5 s2 e1 z8 \, E4 s) Q0 r( m1 F# U return dwKind2 < p2.dwKind2;8 U2 f+ A6 o u, l0 n6 M3 s
}8 K+ C2 y1 Q8 U- k! E
}$ r/ V( {3 Z, ~% B5 s
};
# O" ]! B/ t) Y A- D- |3 oclass CInventorySort
4 T S0 l' t/ ^. u2 V' H6 u9 B/ @{6 H2 o) z: H: K$ P0 t! b
public:
( r- h x5 O9 n: n) {; ] bCInventorySort()& O: @5 ~6 ~# ] h6 d, f
{( Y+ ?7 a9 o- x! d2 ? n4 O0 L
m_dwPos = 0;& q$ C& s6 |; ^7 |
}# h/ l0 Y5 c, R" o8 E# T2 o5 t
~CInventorySort(){}. f# w, `1 d! M2 D M
private:- R( n* f" }5 ]
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
0 ^% g% D. u1 A( g/ B1 B$ d2 QDWORD m_dwPos;
; q' G3 Q$ \1 S& U! upublic:
5 l4 c4 x9 i8 Cvoid Add(BYTE nIndex), o+ N; q2 W, r0 |7 |" ?8 c; X
{
6 @& M4 k* P, f* f( ?& S if (m_dwPos >= MAX_INVENTORY)6 t4 i8 r0 M( R0 v3 d
{2 J& E3 D h4 Q2 C
return;
, r* ?: M) [0 V }, G# p3 _( s/ g: M
m_Item[m_dwPos].nIndex = nIndex;
% X1 ^+ u2 j9 n* ?7 U% G; w+ b m_Item[m_dwPos].dwId = m_dwPos;
, D! K/ n, `7 Y# ~6 O& m1 s m_dwPos++;- { j9 F' k' s
}+ v) X1 W& h" x
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
) b" M/ ?3 [2 t' ]; \9 _" y8 r{
4 J: M n3 g4 t* U* y$ E for (int i=0;i<MAX_INVENTORY;i++)
- P6 I/ h& J1 l9 V {
5 P2 e# m' f. G w. A if (m_Item.dwId == dwId)- U& `. J' K4 w, g7 c/ X& k
{
, ?2 U5 b5 a3 T5 q: `2 p2 v return m_Item.nIndex;
1 p) c, _' f% o }6 {; U% x' i' O$ I+ r$ ^$ K/ [
}% _9 m k/ Z9 j+ F7 k& D
return 255;
# e6 k/ i% K% a. I' e}! p! |9 q3 \" C% s
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
+ l0 o8 W. Z" w/ t9 A{
3 @7 |% _% |% c- h1 g. i8 a BYTE nTmp = 0;
4 x; R6 A+ J; i bool bDest = false,bSrc = false;& r+ g9 f' j+ s
for (int i=0;i<MAX_INVENTORY;i++)
1 p8 k ]0 z/ E, O9 P {" e8 x5 S7 T8 C6 P+ }7 @+ l
if (dwSrcId == m_Item.dwId)4 b5 u9 [" @; U) p
{
% K$ H2 t: ~) E7 F& O! i //id相等 则 改变对应的dest和src/ t$ _) V( n: }' s) [. u
nTmp = m_Item.nIndex;$ e7 H3 U* J( d" W
m_Item.nIndex = dest;' ~& w+ i9 V3 E% B# ?; |- ?& V
}
; R# Z6 j7 g9 h+ I }4 L) ]$ P- v. K! r- F
//临时数据保存完毕,交换开始9 j/ E z7 e5 R/ ~. q1 j% K
for (int i=0;i<MAX_INVENTORY;i++): r7 f' k; S7 U a' o% h
{
0 F) g) V" j0 G* @* Q" r' u if (dest == m_Item.nIndex)
0 F- U* y/ y6 Y; j; W$ J {* J# o, K1 M) p7 }7 i
//id相等 则 改变对应的dest和src
3 o) X; K1 |+ d4 R' O5 P, _ m_Item.nIndex = nTmp;
, K" T# O, Y1 W- L; s }
& B J3 [' `8 J4 g& l }7 I" y# S h+ ]& K& J
}
. }1 L; I8 e0 {- _};% f2 a4 m: Y3 a
-------------------------------------------------------------------------
4 Y" z& o) h: X* r4 M依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): O5 Q* e u6 j# {
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
9 G! i ~% d* k4 a" I紧靠其上添加:
' s2 I& {5 N# a0 b% cif( pWndBase == &m_wndMenu )( R' g9 N! R# Z& n4 l% e( U0 |
{+ u! g6 @/ z* ]! i; z8 t; x. o
switch( nID )1 z9 I7 l+ P/ d
{
6 p) N% t. S9 M# b# }' w3 r case 2:0 C, M8 s( F8 y, P+ W
{0 i% L# q( o, F0 E0 _
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);3 m0 f. I3 H1 R! P, e, {" Y
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))8 f3 f9 X$ P* V
{
, k b+ ? Z8 T/ m0 F& m5 V break;2 H' K+ e$ _9 m* H* g% k
}- B0 L& q" ]' b
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
$ w0 Q; B# U! A1 R2 t5 U {1 g+ l' ]! s- L$ u3 q/ G
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 Z& {. X5 Z$ j5 D( |
if( !pItemElem )7 |0 N& a7 h* o
continue;
0 ]8 P; C, m& K7 H: q0 O if(pItemElem->GetExtra() > 0)
5 h# g; \ P' a" W& j" R3 @$ ] Z continue;
7 r0 b9 w/ S( O# S T if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) # v3 V4 j7 F! T" \4 o- p% {1 F
continue;8 U4 a4 d6 p8 i! a- T/ N$ l
if( g_pPlayer->IsUsing( pItemElem ) ). j5 R' g/ n. R4 D4 a$ v
continue;* V; x! ?7 [& t2 _
if( pItemElem->IsUndestructable() == TRUE )
$ `& U0 k# ^) v" } o( \# Z {, j, k2 U# t7 N- n; y/ ?
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
6 @* F8 ?. U* U8 V continue;
6 P# H) m; N( }) \ [ q } h" Q/ z# o& V
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);2 o$ C2 f6 I9 S
}9 n7 |7 }7 V2 o2 i
break;
[$ g5 N) q; }+ {2 @6 v7 d/ s }
4 |# b/ x9 S3 o1 S/ O0 o/ I case 1:
5 Y) O7 Y d0 ^& m0 c7 G! d4 z. X {, k& `, \- P! P+ {7 _+ g7 r7 @
//整理背包/ I0 F5 |/ ~: I. R1 K! m, [, K. P# C
//////////////////////////////////////////////////////////////////////////
4 n) S, [3 W$ n+ [" y //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
; t" p8 w8 n- E; ?; b V //////////////////////////////////////////////////////////////////////////. P, Y ~9 A1 d: k
//////////////////////////////////////////////////////////////////////////
* S' ?0 u$ W2 r ~ CInventorySort* pInvSort = new CInventorySort;- z4 `- Z: B3 S2 ~. X, R
vector <sItem> vItem;: Y- f) Q W/ r7 W
vItem.resize(MAX_INVENTORY);//初始化大小
, H% s2 x8 H( _- u- _- h1 ] //////////////////////////////////////////////////////////////////////////% o7 i* V* m. X) U- w- E3 I! k
//填充数据& n* f" g' Y* a3 R
for (int i=0;i<MAX_INVENTORY;i++)+ p+ z }. p) {$ s
{
: t& G" c+ i9 y( f+ } CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 w1 y/ { G: D+ r% B) |8 c! s if (!pItemElem)
6 `8 P. W- U" m" I {
! z3 X3 V. o2 E; n1 ^! h$ B vItem.dwKind2 = 0xffffffff;+ b+ f( J! K% x, }: {* {& @" m7 ~. a" D
vItem.dwItemId = 0xffffffff;
& x z- P9 Q7 {& E" o vItem.nIndex = i;
; S8 A8 x# e4 B# ~ }else {6 L' S! d, _3 Y# H' e& y! s
ItemProp* pProp = pItemElem->GetProp();
3 H1 a/ U8 _0 R9 y8 X vItem.dwKind2 = pProp->dwItemKind2;
* I, b* n$ P8 S1 B' M6 L vItem.dwItemId = pItemElem->m_dwItemId;
; K! C' ?* Y8 q/ q( R& G vItem.nIndex = i;
5 @- K- r' a/ }+ X1 O% n }* V2 v% W7 Y- S: N% E* H
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);5 c& x7 r* b* |' Y
}7 ^9 r* a1 L; }! I
//////////////////////////////////////////////////////////////////////////
; j+ F% ]& T& ~6 E \ sort(vItem.begin(),vItem.end());//排序
, e% f2 a* U4 G; p! W8 x //////////////////////////////////////////////////////////////////////////0 c2 ~7 o; ~* U+ ?! |3 b
//交换
4 L3 Y2 T% ~1 _; g: C for (size_t i=0;i<vItem.size();i++)) t n5 k T1 L' ^2 y# t- w: m
{
. S& T' O4 p% d2 w+ }& d# T //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- \4 t4 l( \3 K8 }: `# P: ]
pInvSort->Add(vItem.nIndex);
) k, l, g; e! V. c6 t$ m }
; P! X* U# ^+ w9 f# O5 T* V BYTE nDestPos = 0;
/ {2 p# o# C @- K/ q8 ~ for (int i=0;i<MAX_INVENTORY;i++)% B6 z( k" n4 ?. c, o" H- i
{
+ z5 M- v# m7 p CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
4 L0 B* H; }* E$ m( z if (pItemElem)
8 {) g9 V3 H. A$ Z' U* y) K {9 j( l7 D! k8 h) c5 n f
if (IsUsingItem(pItemElem))
7 @2 I. k1 Z8 t5 U2 N {
. |- _ m5 W" s! b& }3 K" X //这个位置无法放0 I7 t# h1 x# I K/ J \, X2 x
nDestPos++;. F" o( Q4 l0 R0 k
}- N4 J! n& T2 k5 A! M' ~ Y
}
9 z- \% C4 X8 X0 h# P1 i BYTE nSrc = pInvSort->GetItemSrc(i);5 w3 V* S$ J }, |
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
% X0 s/ U3 L; w; l if (pItemElem)
( ^+ o& \7 |/ c: y9 x {
- _4 r! v7 E, O0 M if (IsUsingItem(pItemElem))
5 X+ N# [6 X2 L* {+ ] { y$ W5 ]- _, t% f, @( a& x: U
//这个道具无法移动,跳过6 M m2 O* O1 Q! A. P
continue;
" G$ ]4 @% D( w) U) Z }8 o$ I- F7 [" [
}else{
( w- y# P* m: v- L3 M( s //空位置 不用动
0 z1 {$ {- ~$ @ d: ^3 p# [6 O continue;
' t$ c7 A- w0 k5 D# S# D8 {( U }: D2 s% D6 N% j' }
//////////////////////////////////////////////////////////////////////////! L Z. Q+ P+ a2 N" r0 x
//开始移动
- {, M% Z& O8 S! r1 g$ ] if (nSrc == nDestPos)# p& k1 J7 U0 i7 G" k
{
. I$ @! `2 H$ x* g$ j //原地不动 t4 I5 [/ d; C4 \- B
nDestPos++;, K4 o# L6 V; C# b: G1 x
continue;
- Z3 } F9 ^' n+ t. |; W6 ~* `1 [ }6 Q6 I% s$ }* S, f; P2 F* S/ X. Y
pInvSort->MoveItem(i,nDestPos);
5 v) z D5 k$ g, y, p g_DPlay.SendMoveItem(0,nSrc,nDestPos);4 d9 S8 @1 |6 C( Z
Sleep(5);
2 x; N* v! [6 L$ ~/ v9 N9 I3 B //Error("移动 - %d->%d",nSrc,nDestPos);! e3 _! Q: y1 y3 Y& I$ q0 q+ M
nDestPos++;
# K r/ a3 M: X6 G) q }' o) H- y$ h+ l# J/ r( w0 F! ]
//取第一个元素的信息
& E! I5 g4 Z+ N# S: K& T /* m3 ^2 T1 L6 i: A2 g
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)1 z$ _: j* ^3 S9 J `) c9 q& \& w
{
/ U: B1 p& V. I' J Error("Move - From:%d,To:%d",vItem[0].nIndex,x);8 r& g6 N0 @6 J' h! z
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
& x4 P0 F( ^3 O# c, H9 ^ }
( l) K% {4 _: F+ \0 t! S! b */
6 C" u& {# A4 r/ k" b' ?( S //////////////////////////////////////////////////////////////////////////
' e9 S- ?) a- O break;8 \2 ?9 k& t) Y( l$ b
}, j8 |9 b" w- L/ d
}
2 O! o4 a- b+ b1 I}; T) F8 ]2 `2 e
m_wndMenu.SetVisible(FALSE);
) A6 ^/ J' e4 l
. O0 e( z0 }0 y/ t; f A--------------------------------------------------------------------------------------------------------
; R+ W/ @" m' N1 s$ t搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
9 r2 G! h8 i/ k3 j2 z8 J{
6 h# D% x" J$ }/ R# o, fBaseMouseCursor();+ \6 c1 {4 u" s) x+ l
}
# L I, D/ j; @! t; S+ D7 Y/ P6 y o4 T在其下添加:
7 i/ N6 {* r. k% T% @7 fvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)3 w @' D* K3 f: { v% }) q
{
" T, }7 [- U. z/ v) i) jm_wndMenu.DeleteAllMenu();
: R$ K$ F- L0 ~5 tm_wndMenu.CreateMenu(this);4 z4 x: \. x* W2 p& C$ o5 V
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
, C; C/ }$ k" R, E" [1 v/ I/ _# r/ t* x
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: a8 O* G! ^2 d{
6 V$ t" f3 l$ N/ T/ G5 K0 g //P以上级别才可以删除所有道具# |& V1 g D n1 Q# x M
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
; J- T* [- j; n}
) T3 P3 [2 e9 W( `m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );/ S' L! \, T9 b0 L" U) H
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );. W8 ]- c) N# [5 M
m_wndMenu.SetFocus();8 N! ^3 C, R0 [1 `2 Q
}& ~2 R! @; E: j' v4 v O6 o1 T
------------------------------------------------------------------------------------------------------------! P9 S x2 l1 h7 ?# A% ?. Q
*************************
- ^# S G: P# GWndField.h文件
. `+ {; |' j6 c, r9 { ^5 {0 c3 ^************************** C) B! {% [! O9 s, [) k3 g
搜索:BOOL m_bReport;
& j4 {- u. w0 W0 d) S# Z# V6 X- f9 h7 V其后添加:+ s t; o2 [, N! Q" m- |
CWndMenu m_wndMenu;: x& J/ B, W; w) _
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);: E7 S' B- c" _" S; H8 l- T: {
其后添加:
) k6 F' f0 V1 Z: Rvirtual void OnRButtonUp(UINT nFlags, CPoint point);
9 l Y4 g8 F- k7 y* S
/ Q. E' e9 ]) w; X; o# o# D2 G3 D, X. B6 |
|
|