|
|
源文件中_Interface文件夹下WndField.cpp文件( e0 h7 U# Q8 [0 k
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" D) n l" n. `) B" V
' i8 {: K* S' Sstruct sItem
1 E' u; y) Z- ?4 {{
/ p) [% e: Q7 F4 T- F8 L1 BDWORD dwId;- o" C6 s, x! K. v0 C& A o
DWORD dwKind2;
. Q6 @! X7 T' V" iDWORD dwItemId;
" Q. `! J- O; H! B+ K2 XBYTE nIndex;
7 |$ i; U( [, q# k. I* ?$ rsItem(){
$ ^- s9 |5 Y% U2 j% {/ ]; e dwId = dwKind2 = dwItemId = nIndex = 0;
9 Q/ W6 P" f: Z6 w4 u( F/ _. H}# w9 W- `4 T4 Q! g9 |0 A
bool operator < (const sItem p2)% V% h. J. j4 \" i6 K: {) m
{: o$ P o2 o) [/ M7 O2 ~, ^
if (dwKind2 == p2.dwKind2)% A% W( C) y5 S0 R4 w
{
- u/ C/ {& g9 o) g2 G return dwItemId < p2.dwItemId;
- Z. Y4 C$ Y& ~# @& o' T. W7 D" U, F }else{
9 y& \7 \& s. b8 J4 b return dwKind2 < p2.dwKind2;; I! Q; S4 _7 v F; e& {4 z: {
}7 J. O) }+ ~" i& [
}# x6 R# Q) ?, P
};
l+ s$ ]; W0 |0 iclass CInventorySort0 X5 ~( |' u+ P) s$ {' \! w3 o0 d
{/ [) e9 u8 x- y% v. `" ]& x
public:4 Z9 R( }8 W9 W F( q* G
CInventorySort() z# w; ^6 ^7 ]; H4 P6 h: B/ ?' ]
{
5 t6 ?( x, d( F: X m_dwPos = 0;
; K7 l, S- V! e* ~}% z$ o1 L# s' W3 \" v
~CInventorySort(){}
% I# _: ?' U3 T$ Q5 U7 g) k l, ?private:
. M9 X' g9 S- ~' esItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
4 F. d9 `' f9 s, E/ p% }DWORD m_dwPos;$ ^4 ]3 H7 E% t& @4 ~/ J- }7 E, f1 A
public:
8 J4 K7 l- Y# w7 U7 ]4 Pvoid Add(BYTE nIndex)$ r& A. U1 I: E/ E& Z" P# V
{; r2 B; J7 }0 H6 h u w8 [4 Y
if (m_dwPos >= MAX_INVENTORY)
; z" ?9 T0 l) z H {
- v) A- h7 ?& J$ j6 ~8 L3 @; S- g return;/ B; [1 |3 l4 p5 C1 s R: r, m
}
$ ~& p4 e* f4 t1 d% d4 V2 A m_Item[m_dwPos].nIndex = nIndex;
! h' s3 n" ]# I2 h m_Item[m_dwPos].dwId = m_dwPos;
# r) n+ x) O6 }6 p9 ~. ~ m_dwPos++;
' ?7 @% _# N0 k9 U4 w6 V+ `}
1 I. V( L, ^, n. r N. wBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列( Z! L1 {1 x+ @% E5 t- G- c; ~
{
( W: Y2 d9 W+ c for (int i=0;i<MAX_INVENTORY;i++)
( |) j F1 k; u+ ^" T1 B2 G+ | {
" V% j+ h' j7 G7 ^ if (m_Item.dwId == dwId)! X* u& H, T% p
{
+ J) l) R" _' d# T" {( F& d' L- P return m_Item.nIndex;
1 w+ m7 [3 n7 h2 A* f `( Q. |8 | }6 |2 g. I# g) v V' O6 x
}3 I& e% c+ T3 ?# B0 @
return 255;
: M7 i( v8 U0 E# Q. R) Y}
3 v/ O- `# k9 R1 J6 xvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
9 ]/ E2 e. r9 x. `; g{
r ?0 s) d3 ]5 v" |. d BYTE nTmp = 0;
3 J& _" e" `8 a! S bool bDest = false,bSrc = false;0 `& O! C2 a8 e* d
for (int i=0;i<MAX_INVENTORY;i++)" c1 V$ \' Q# b/ x
{+ r5 p; }% j/ F* A) u2 U5 {0 Z
if (dwSrcId == m_Item.dwId)* F: ^) y) I2 Q3 r5 y' d
{
\. ?& {1 r% ]# C6 t& F. K //id相等 则 改变对应的dest和src5 o& V& F& t1 ?4 @. }. B
nTmp = m_Item.nIndex;
7 L( ?. U) Q4 V8 F+ N m_Item.nIndex = dest;
( d: l) Q" _+ b# A! M }
3 k$ E7 _5 |" o3 m) W. H }. m3 T( B9 v U. O1 f3 ]
//临时数据保存完毕,交换开始7 `# Z; r7 _4 o" l
for (int i=0;i<MAX_INVENTORY;i++)) D9 x+ T1 c" ~+ z; @6 \
{/ ^7 ?) ~6 E% }1 k
if (dest == m_Item.nIndex)2 c* m5 f7 W9 f. N1 J5 x% |
{
u) h. Y4 @. F- {2 M //id相等 则 改变对应的dest和src! S7 s3 j+ z) D
m_Item.nIndex = nTmp;5 N# V* F- ]$ N3 s
}; X4 R; S6 e& n) k2 O, P; v/ \6 W
}& M: @6 K& t9 A
}
0 i5 h/ ?5 J/ X4 ~};3 B5 M8 T7 N m2 r
-------------------------------------------------------------------------* U: t4 P- Q+ a2 D
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 P9 ^7 F7 `1 d搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);8 h- H& R/ }; z2 Z6 M* q/ f
紧靠其上添加:& m; W# @. R# `5 a, p+ F
if( pWndBase == &m_wndMenu )
% C' n: \: }, P% Z2 Y1 c) w{, A+ N& u3 ]8 U) g2 g0 o' x
switch( nID )
. p- [0 f& o; L; \" m {- A1 H# N2 k" F; z/ W& m: g
case 2:, C% ?5 Z5 x9 M3 l7 J+ ?
{
, j3 h A% a1 D. Y //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);+ p: d) _' z3 j( G/ t0 ]2 u. m
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 D2 _# P& @4 H { Q$ F; r1 s9 d: V) w/ I) K1 s
break;& ^; E6 O ]! @: W0 v0 ^* f; \
}
- d" Z; f# \1 q5 `5 c2 g) @# H( ` for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
; o0 m1 C9 E- M$ R. d" a {: s% b+ X, I4 r7 Q2 W# @0 ^
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
4 [- S' U& V& Q, R0 n0 k if( !pItemElem )/ B: `' Z! o) I5 A8 a
continue;
" F; {! j* X# G. \$ r f if(pItemElem->GetExtra() > 0)
/ K' Z; U7 d9 e; D4 _3 ^, n5 H continue;, R9 r& y7 C; b7 {) B4 y1 g- x% b
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
2 O& a* u$ H& }' Q4 v continue;
6 ?4 W) M6 J$ K" X4 z if( g_pPlayer->IsUsing( pItemElem ) )' n$ U0 c7 e+ @1 {9 S$ v; F3 M% F
continue;, I* O8 T' U, _% u
if( pItemElem->IsUndestructable() == TRUE )9 u; ] x( F6 |
{% b3 N2 p+ h$ `1 \, g
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
( O! m- N7 J, E" p0 m continue;
. S c+ Z' \; @( U& @1 N4 w }
+ w3 {8 B' k% k. e) B g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);3 C5 n W5 y. z6 d! D3 P' i) B
}. E$ S8 u9 a; K: f6 K# M+ x- C
break;/ x4 a# k3 E# x: a' E3 ?/ F
}, B v+ [6 }) |8 O
case 1:
3 a4 e& i n8 t; | {
6 q* W$ c \; q8 m; X //整理背包
) |" z$ w% @+ w! J, N //////////////////////////////////////////////////////////////////////////
0 |2 J5 ]/ o7 j //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );$ a/ R: k, h9 a6 `
//////////////////////////////////////////////////////////////////////////
. F: b: ?! d: {+ R9 c x( V //////////////////////////////////////////////////////////////////////////
8 i# T/ f; P3 H8 b CInventorySort* pInvSort = new CInventorySort;$ F" M) G. p" H- x Q
vector <sItem> vItem; q9 w `9 }( _
vItem.resize(MAX_INVENTORY);//初始化大小
( E& n" U5 ~/ K //////////////////////////////////////////////////////////////////////////
* \; T( D# O; q; { ]( a //填充数据
6 X) m! w& t; E& [# t" {& a3 p for (int i=0;i<MAX_INVENTORY;i++)" L7 b! E/ y$ p6 G8 q3 l) J, l
{
# ~ ] B. T7 f9 B! h7 l/ _ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& Z+ S# K4 v% a& ^" B5 w8 h
if (!pItemElem)
9 } ^7 m9 p) a5 K {0 @2 w9 t# P8 Y! {* q) i
vItem.dwKind2 = 0xffffffff;) I, N' e, H7 v0 m' `& L; ~) W
vItem.dwItemId = 0xffffffff;
/ w' V- k+ P- Z9 c4 d) s5 r- Q( i vItem.nIndex = i;
8 X8 u0 w+ p- N. r o }else {" P) P; |8 g0 Z7 Z
ItemProp* pProp = pItemElem->GetProp(); I" I5 ]( j! I/ F2 a. n9 L3 b
vItem.dwKind2 = pProp->dwItemKind2;
; {2 b, T/ Q6 N5 u1 z) }8 r/ ^* a vItem.dwItemId = pItemElem->m_dwItemId;
% C6 a8 J* b% x! h+ j vItem.nIndex = i;+ f! e' @( k9 |/ H2 U) o
}
) X- K F7 O" J: _, p3 ? //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; Y7 }1 X7 i4 Q; F$ ?0 b }
9 v) J6 s, o- J8 J0 j, v% o& I4 n //////////////////////////////////////////////////////////////////////////
, C1 Q$ M5 S; A7 r5 S; ] sort(vItem.begin(),vItem.end());//排序9 ~7 [4 Z l. k5 [* k
//////////////////////////////////////////////////////////////////////////
8 N2 [. d% C& W, Y- E! I //交换
8 U7 |; y* {2 T' v; m+ i for (size_t i=0;i<vItem.size();i++)
0 w }) W1 q2 G3 H2 X2 Z {
; L g( C3 j2 o( m% |3 [ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# A/ a, M# \- J pInvSort->Add(vItem.nIndex);
( k; l$ d( [# m+ V P/ U$ w/ V' K }
( b3 b9 o4 A$ w+ I/ G0 w, v BYTE nDestPos = 0;- F2 W) S1 R* J c
for (int i=0;i<MAX_INVENTORY;i++)& ]) p8 f2 b% e" l
{
: k! v- l: G7 W5 o( V( \ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);, q( n* N/ ?9 f) |3 t2 I! q f1 D
if (pItemElem)
( c( {; C- `! p+ n {% x# [; @! Q9 I' v, l! k2 h! t( _
if (IsUsingItem(pItemElem))+ A; f7 L9 i5 m4 ^
{: P" \) K1 O4 m/ x1 ]+ s% e
//这个位置无法放, N0 z/ V$ z& M5 e4 ~- X
nDestPos++;2 B) x0 i) }1 }! ^+ L
}3 {) t: h {( N2 o- _ {7 R
}
% L4 v3 ]8 {7 E& p& n+ u0 o# f! p BYTE nSrc = pInvSort->GetItemSrc(i);. u" ]( w0 Y4 t9 o7 d. l( J
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);, p4 n) J0 P: d# S$ A# {' J
if (pItemElem)
& `; G" _, W& L; j {% d2 ^+ ~5 ?0 Q+ O) e
if (IsUsingItem(pItemElem))# c( d0 t6 h* |
{) ?8 v3 r. m% T% N) n# T$ ?
//这个道具无法移动,跳过3 \4 B2 I$ z) k
continue;* e7 x9 q* k: R$ }* \
}
/ ]: i; f- b: t/ K1 f) u& K }else{& }2 b- q* A+ y- ?5 }5 Y4 ?
//空位置 不用动5 d% Z6 Z$ Z, L
continue;% H C. K v: ~! C# r
}# m$ w. e+ Z0 v5 h
//////////////////////////////////////////////////////////////////////////
" D) Q/ Z/ w- Z+ |5 \7 {! u //开始移动
8 [: q3 a; s# I7 t if (nSrc == nDestPos)& j; y+ _7 `4 K) F
{
4 ]/ P+ [" i; W* F' E$ J6 G8 K //原地不动& }" U3 ~ d+ i x
nDestPos++;
, W' m! E4 _3 z5 m+ H, f continue;
: _9 H( O6 A( K. S }; f, j5 u8 K/ K8 B5 F/ o: {
pInvSort->MoveItem(i,nDestPos);/ p7 n$ w7 A4 E3 l3 Y1 S1 D
g_DPlay.SendMoveItem(0,nSrc,nDestPos);- J, \# h% a% a. h
Sleep(5);
) G9 d( E8 x, z% X. [3 Z //Error("移动 - %d->%d",nSrc,nDestPos);
3 Z- w/ ^- d0 S0 @ ~2 N nDestPos++;
; |# }! z3 o, d8 u }
: ?1 p. S8 p: u7 ]" Q1 B //取第一个元素的信息' J6 `$ L4 f+ i: m) r$ ~$ p( k
/*
/ J# o% p) U0 a$ J% w if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)& ^: x# v! `) W
{8 h# h$ X i% u f, ~4 I2 L, K
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
( N! A+ P9 c' A' I& d; }, L4 n g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);! g/ v, X$ h/ _; ?( B
}
* _9 x3 V9 Y9 h8 Z$ I" G( a* f, \ */. Y9 x- M, K( `+ k9 O: x7 \7 j
//////////////////////////////////////////////////////////////////////////) L# b9 C8 }% i, | t/ |
break;' l$ g8 R! ^1 L9 b
}( @' ~+ \( p+ A6 n
}
) y" K# B1 n$ R7 B2 E! L ]}7 |% B/ B) `0 i7 s- X) N
m_wndMenu.SetVisible(FALSE);
0 W3 p$ F) T }/ ?" b3 c5 P7 s( l/ c% t
--------------------------------------------------------------------------------------------------------
. i. ]% }1 [3 O0 |1 @' w- Z( W搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
; O- @; R! m1 h3 q7 I% z: G{5 M4 B3 {1 w9 t* w" e9 f
BaseMouseCursor();
3 r5 Z" s* E% |}( ?3 Y' r! h7 R: g7 K
在其下添加:
0 n4 f7 z t2 T; O. c% ivoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
4 c4 O$ t! f4 p/ \{4 h. d$ b" c! O6 O1 z1 [" D4 \
m_wndMenu.DeleteAllMenu();
6 T% D- v1 F3 @2 Q# _) Rm_wndMenu.CreateMenu(this);
! g# U: R# S+ n7 q8 q9 ]2 a' U+ bm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");1 d8 ~' e9 E8 f0 Y
+ \: `. z: x6 f# B8 [if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- \) h P7 `& k) U{
2 }1 ^2 V/ P2 n3 U8 K+ g: G8 F% r //P以上级别才可以删除所有道具& I1 s5 v) R1 ~/ o
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
' v5 c5 X6 T1 U9 K: J}
+ ?9 L9 r7 B( |9 m# @4 I# Q6 dm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
3 v7 G: ^* k- L* }, ~/ v) t0 R; Y2 bm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
2 J# a: p, i: g4 ?% Ym_wndMenu.SetFocus();* j- S4 l, E6 h' k/ x! d/ c3 R6 E
}$ Y* j" y5 E( H. I" B$ V+ g" }
------------------------------------------------------------------------------------------------------------
. q1 i8 D/ |1 ?: {' }+ J' R*************************9 a8 a7 @$ C4 i. V) ^, a
WndField.h文件
. k$ R( i; R) A5 x7 n. K*************************1 H1 [: n+ `/ Q1 `
搜索:BOOL m_bReport;
5 H5 t9 U) C% D2 F- _0 {其后添加:1 Y. }& w, E. X% _
CWndMenu m_wndMenu; K1 [7 P8 w3 e7 [; E4 k
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);( [$ T1 I0 i) E' P* \/ J' Q& h
其后添加:, m$ ~$ s5 A, u' F+ w2 ~
virtual void OnRButtonUp(UINT nFlags, CPoint point);
) |8 g# H" b) U& d0 E5 X, R+ E! K1 T7 S2 m. o7 H
) L! m. r( P( a4 |
|
|