|
|
源文件中_Interface文件夹下WndField.cpp文件$ q4 M% N% P& G
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) ]" {! `9 y/ i" f$ X# O' A
# F$ X+ j% h; |, Y/ u' {# J* Z8 {struct sItem
! l" C. f8 [2 t0 ?4 y8 j* ]3 Y{( ^1 R s! Z' Q- c1 C9 n* U* A: k
DWORD dwId;
U! x% p. w$ a4 d$ ?/ e& vDWORD dwKind2;5 s; S& W8 }: w- m3 d- f
DWORD dwItemId;
/ u9 y( s% j: i O7 GBYTE nIndex;
' m: `& t" I0 t0 s% E: P% FsItem(){
9 h# l9 w2 z {9 k* I. e dwId = dwKind2 = dwItemId = nIndex = 0;! j9 \7 Q8 |8 T8 ` Y" S7 H$ ^
}
4 q; ?" m. V6 g$ ~0 obool operator < (const sItem p2)* ?, c, N6 g2 D) M
{
- f2 ~- ?; ~- W' u! l9 ~- u if (dwKind2 == p2.dwKind2)
3 J9 k8 N5 M8 f% Z* c {! k1 X" P, g* o* o
return dwItemId < p2.dwItemId;
/ z/ ]- f0 |$ h0 m- P5 k! T }else{
. Y1 i) B* q- ~/ u- L, @4 ~ return dwKind2 < p2.dwKind2;
6 Q! Y$ s! \- s) P }
P1 W, U; ?1 n/ {2 L}
/ V2 i: ?: a. H3 ^! z$ M( x};# O6 q% h4 N( y4 B: o9 U: \
class CInventorySort6 l, K4 i- R& K. }
{
4 F7 e; G' a* {9 P- }+ hpublic:
; b( I" w0 L4 U7 v+ e7 g; @CInventorySort()* ~5 o+ s/ o) T F: m
{. Y+ f) I0 x4 Z# x' Q2 L6 f9 D/ C7 [3 Y
m_dwPos = 0;
6 n3 [- s4 v- Q1 b' r}+ D4 F3 H# h4 B& g& a- P, o
~CInventorySort(){}7 f" D8 f( r7 @+ `8 U' v
private:
+ @% q& f2 Q. U- d1 h: N" ksItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
& z& t5 _- D {5 X) VDWORD m_dwPos;
1 c( v0 ?' z {! H( S3 v fpublic:' p$ X C) `( W4 V& m4 K6 F1 k0 u
void Add(BYTE nIndex)
, i! }- |- `# n5 E{
' l$ O. X5 }7 i% G if (m_dwPos >= MAX_INVENTORY)! x3 ~9 ]) c& q, v4 K) j. J
{
; L8 x! M; @6 |6 B" T9 l" o8 K return;% h% q+ }- L" C. \1 {4 O2 r9 a* P$ D
}
( L! a. m. x7 @) `, b- a m_Item[m_dwPos].nIndex = nIndex;
8 H6 j' d2 @2 f4 u! H. | m_Item[m_dwPos].dwId = m_dwPos;. x8 [/ u M* J6 d& f) B, X6 S0 ~1 S
m_dwPos++;
8 H( t6 N* r' `4 _}
2 g7 O. |8 p$ l) n) o6 SBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
% Q6 @* l+ O5 S1 _{
% z9 y3 _8 u+ N s. E! W for (int i=0;i<MAX_INVENTORY;i++)/ t* D( m- w7 N2 O* D( W
{) D( d7 S1 w% E! i3 v6 ?
if (m_Item.dwId == dwId)
9 J [% h0 u% c8 X" E0 y) F {/ n, K% \, K! ^5 I% k: u: y w
return m_Item.nIndex;: i% t4 A- Z0 s1 | F B7 W
}
# C9 A7 q/ q" B! { }
, ]) g, K3 X4 h) I* p return 255;7 `& C" P" v+ C, Z( y5 t
}, D" Q1 B3 `( ?+ M) a6 c- ~' z/ o
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置/ s2 b* `. z1 g" b' f4 s7 K
{2 ~/ u3 x! {* q% i2 o. h* x
BYTE nTmp = 0;( P% r4 \6 R: w8 k
bool bDest = false,bSrc = false;3 y! {$ O( h' J/ D) C
for (int i=0;i<MAX_INVENTORY;i++)
: w0 h! v* x- j( t# T5 Q {
: R* \# O# X# t3 g+ g/ o& X& R6 { if (dwSrcId == m_Item.dwId)
7 Z) Y5 B& r' @" H: v {
' I1 X- Q, Y; a' M/ i //id相等 则 改变对应的dest和src* q% j, l S l5 T! [& [# p1 g
nTmp = m_Item.nIndex;4 v2 N, w h4 f4 _. j# M) {
m_Item.nIndex = dest;1 X5 w o" t, r8 K K1 c2 M1 u
}
" M/ q# `$ R9 X' u }
* J4 b( T x* |& D8 z //临时数据保存完毕,交换开始
. H" ?$ C4 m3 b4 r9 `0 O for (int i=0;i<MAX_INVENTORY;i++)' m4 {+ b4 {9 ^* E) z
{) R3 w! Y( j9 t% u
if (dest == m_Item.nIndex)
2 W3 v) T! D* q+ y, ~! N/ ^- o {+ A7 B" m1 N9 @% V2 I3 M
//id相等 则 改变对应的dest和src
: O4 I$ n* |2 m7 A m_Item.nIndex = nTmp;* X3 B! N. G1 |9 h4 v; ^
}
/ k+ W7 `; w; M! @ }
; F3 @2 j1 m) ~# n} ]; @8 \9 |6 `( O6 c0 u
};
' m+ u; O: O% @' o-------------------------------------------------------------------------# h' i2 P; R* F
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% d. T8 B# u+ I$ Y4 C4 v$ R1 N3 s搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);5 i+ j4 `- a$ G: {6 s+ c: K: p
紧靠其上添加:
3 r+ U2 U/ U' l2 X, R9 L, D, `/ bif( pWndBase == &m_wndMenu )
& V8 ]% Y2 _, S5 d{0 R8 A% h8 L! w2 B
switch( nID )/ I7 Q2 u: E, L8 c p
{- b) d6 |' {4 G3 R' X$ u4 |0 H
case 2:
8 p% ~7 W4 Z1 `/ R1 ]7 c5 I {
5 y! r7 B9 O' T2 n* u; w3 \, L A/ I //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);, Z/ J( x. j; D8 z& w* s1 ?; E
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))7 [. S; O, U& H3 j3 m" K, ]$ [
{
2 a8 c/ j0 ?) U% p3 J F break;
. U m' a4 P& N1 x) R }2 ~5 w9 U8 j' D# u' o! v( D
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)3 K, E& N! k2 b
{
! V) C% ?. k6 J3 Y% F CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
& L6 {$ g# m7 @0 @' [" ~& C if( !pItemElem ), |+ _5 {5 M* u/ z
continue;7 K2 O3 p( p' P5 _; A
if(pItemElem->GetExtra() > 0)
6 Z4 J5 u9 p. h1 x; m9 K continue;
8 i6 \ W' a W7 P if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
, c4 F- g' Y: Z1 E. g7 |4 `6 n! | continue;
8 Q- \7 b1 k( k if( g_pPlayer->IsUsing( pItemElem ) )
2 P1 H" Z* I+ f" x& |) J continue;
/ w2 U1 P) N+ l6 H, g. | if( pItemElem->IsUndestructable() == TRUE )
( |4 Y: W( z; P9 o& r) B+ x# q ? {8 V4 U& O& f0 X3 [
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
; _& o8 U0 n2 u3 ?$ B5 Y8 d# w continue;
. }1 y7 R8 R2 }4 G }1 H5 j/ }0 |$ x; ^1 h3 d, c
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
; K+ Z- W# @, n; W( n }
& r( b u5 C6 ~, {! S7 D t break;5 Y4 w2 M4 c3 e' i
}" l4 M2 Y$ p# s2 P b: {
case 1:
{& m& |* V. [/ n6 L. c {) Y4 l. \0 w& e E
//整理背包. X; w- Z! p5 y/ d, X# A
//////////////////////////////////////////////////////////////////////////1 a9 N x1 z; C; H* U9 G9 y- S" ]
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
! n. W) {7 V+ N r //////////////////////////////////////////////////////////////////////////
" ]' G, a3 O9 C/ M //////////////////////////////////////////////////////////////////////////. x7 J- ?. [0 h$ [3 W) r5 x
CInventorySort* pInvSort = new CInventorySort;1 E/ z8 |0 i- X( C4 y, i8 X$ r
vector <sItem> vItem;6 P9 K* X. W4 L# I
vItem.resize(MAX_INVENTORY);//初始化大小
) h! g# r& Z( O' e/ U //////////////////////////////////////////////////////////////////////////# ]1 B, G _" z/ t( I6 H: w' M
//填充数据' F2 F8 m3 i6 B5 s; i1 L& l
for (int i=0;i<MAX_INVENTORY;i++)
6 Y0 E& c" P9 `) p9 W5 X& ^ {$ c& H) D# k) X; a9 }
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);+ r: g( _$ R- Y6 i) {
if (!pItemElem)
5 ?: t1 C9 x) K: Z {
% B9 K. P- s3 E vItem.dwKind2 = 0xffffffff;
3 W/ J9 F6 _- A vItem.dwItemId = 0xffffffff;% q) D ^8 T/ i6 \0 o/ H" i
vItem.nIndex = i;
. w: P1 X9 a9 ` }else {4 S: j6 W$ v& M* Y9 `
ItemProp* pProp = pItemElem->GetProp();
2 d- ^7 d8 U5 p vItem.dwKind2 = pProp->dwItemKind2;$ Q7 E i8 {( v8 W$ }3 _
vItem.dwItemId = pItemElem->m_dwItemId;1 D) J, \' `( |* a6 G3 M/ `" n
vItem.nIndex = i;5 H* K3 ]7 \% V* k- X6 P
} F3 S. k1 h7 E0 J, y& y3 D2 n
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 I2 W7 V7 T L; [* J: X }, e. K! _6 b6 R. C
//////////////////////////////////////////////////////////////////////////
`( v7 d' f+ V X2 j sort(vItem.begin(),vItem.end());//排序
9 H/ N. [+ {$ l6 V& M //////////////////////////////////////////////////////////////////////////8 ^3 u, W8 \: X9 K
//交换
4 l. {' |! f5 w# s! M+ K9 ~. S for (size_t i=0;i<vItem.size();i++)( s/ K" Q" u6 u, C' k
{
$ Z$ G0 t, A O //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
& R5 v0 C$ I; e3 s6 W. H7 o pInvSort->Add(vItem.nIndex);
/ E z5 T( C5 |& L3 B; x4 t) V0 h }9 y8 u( S2 Q X5 n6 C1 `4 {: j
BYTE nDestPos = 0;$ `) ~' I. N- v, d5 g L5 J- N
for (int i=0;i<MAX_INVENTORY;i++)
# D$ _; V$ [1 e {" E/ Z$ @$ r0 O4 F6 Y9 Q. P
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
1 a" L5 ~: ^9 P if (pItemElem)
9 i# t( [0 h% B9 T {+ [9 h# m9 `( W4 f9 y
if (IsUsingItem(pItemElem))& S$ ?/ h' E* f b: Z& ~
{
, G8 J: t" [# m0 J& e //这个位置无法放
7 {6 Q1 M* W6 J9 b8 i nDestPos++;8 M! }# N& K) {4 s( Z4 b2 G! e
}7 k7 K& E+ R) }) E) R: @+ A% I9 ?
}9 Q3 X( M* S, f- n8 r- Y
BYTE nSrc = pInvSort->GetItemSrc(i);9 }2 P% y; E7 J5 U( H: L
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
/ g" ~' ~- Z, { if (pItemElem)9 }/ H" a" w t2 _# K
{: c& T5 Y! O0 V( W* \" X4 V6 M/ [
if (IsUsingItem(pItemElem))( W( r5 y: K7 K% a! w5 j! s
{! V7 p+ K9 U8 e" F9 D6 y. H
//这个道具无法移动,跳过
. j4 C$ s; h$ d5 R& y2 E* s continue;
& j% f6 _6 f7 a" l+ R1 @ }* H9 x. A0 i; x o0 ^9 C
}else{
8 q8 v1 P2 Q2 B+ ? c, O //空位置 不用动
+ @& l3 K3 x& h. G+ g6 |3 i$ e" w continue;
0 s3 i& r( [2 n0 c }2 f! U {5 E" T/ N
//////////////////////////////////////////////////////////////////////////
. C& k& T6 Q! W* a) B //开始移动8 M. R2 {5 m& V4 e1 e
if (nSrc == nDestPos)) L# P9 K8 j$ c) a" b
{4 g: E. g! H8 O1 U- Y- K
//原地不动
8 [: r- W* Y" s/ Q4 S: p nDestPos++;1 o d7 B9 M E
continue;
: X* b. t, f1 j# D' v4 D6 t9 e' q/ K+ H2 E }
Y7 L9 M: ^4 C4 v# | pInvSort->MoveItem(i,nDestPos);
, @* Y( O; {, m7 F# h9 q9 b g_DPlay.SendMoveItem(0,nSrc,nDestPos);
7 O/ y/ u- _( L5 h Sleep(5);
' |" l6 I& b$ B& r/ o+ {9 y //Error("移动 - %d->%d",nSrc,nDestPos);
7 `( |& U& j; R5 M( L* g nDestPos++;
r) d: p# m) g( R }
+ a3 R3 G, ], A( m' j1 N3 g: E //取第一个元素的信息
7 o& S8 m5 s, R/ O /*
* {/ r: @. p% s if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)4 _/ J2 H3 E8 G9 H2 g1 J; U) d
{
- o. V: v3 q( B. ] Error("Move - From:%d,To:%d",vItem[0].nIndex,x);7 X% Q1 ^9 R! h% o/ }; r
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
5 ~. Y( P7 k- |9 {9 \6 r6 {+ z& f }* g' k; f) k7 E% w2 q9 S
*/- x; B; r S& ]/ j0 N
//////////////////////////////////////////////////////////////////////////
, w5 n' l2 L M break;
+ T: Y; Y3 u7 V0 Y& v! C; [ }
2 X/ t+ a- e6 {% q% f3 R, G0 B } $ S3 ~4 M5 ` {' {( t
} ?+ y0 ~0 }* f: q/ K" J
m_wndMenu.SetVisible(FALSE);4 A4 r! A$ ?% O# S ~4 z
* Y& N T0 ]( v--------------------------------------------------------------------------------------------------------
( i7 p: C6 x# X搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
, Y. m. T8 ?8 B( g0 w/ W{ Y; F- O- Y) C
BaseMouseCursor();& v% P& C# A. `* R
}& q9 z8 }7 y- s0 m2 j) Q* Y1 K, Q* q
在其下添加:4 N5 r) j7 j4 E4 T
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
* s! v1 ~- S& C( r{; q* _ w4 P6 k' h) \: }
m_wndMenu.DeleteAllMenu();
6 d `! X# v6 ?3 Im_wndMenu.CreateMenu(this);* d9 X$ ]) @* P R0 A! I% O# M
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");, H1 n( ?+ B- l5 l
8 V Y: q9 V5 q4 e7 c' i5 L+ ?if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ `1 `8 j% h ~4 S0 M
{
- _3 t3 A- W$ Z( X. K. W" l3 K5 k //P以上级别才可以删除所有道具2 L% h1 _2 W5 u3 R4 M6 B9 Q) ]
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");% `# w, A" H* [! A5 f( _
}
" K0 H h5 G# N* J- \) Wm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
$ N1 Y6 @, a0 Q0 t% z& o3 A+ R" Cm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );/ C) [+ j& G) q
m_wndMenu.SetFocus();& K w8 O' J) K+ \
}% U* X2 f' k3 [0 b6 Y
------------------------------------------------------------------------------------------------------------
% o3 @2 w* P$ @5 p" I6 c*************************
! X0 _2 o0 d9 y( x9 AWndField.h文件
' n' T) U5 @0 ^; Q4 G T& N: M*************************1 d/ S$ Q0 F. e! h3 R. E
搜索:BOOL m_bReport;! g# h- u* R$ l5 S, n- t. E
其后添加:3 ]; m, F% [( Z: |% o
CWndMenu m_wndMenu;
5 R" r# n0 H) X8 R3 B搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
]3 L2 _) E8 S) {, {其后添加:
+ a7 F% F4 q3 O( X& Svirtual void OnRButtonUp(UINT nFlags, CPoint point);5 ^) O. \8 N/ z* ~( w* u, h
9 N5 T. w* S. u% O2 \" |* _
e# ]) _* Y$ K" F$ R' a3 m |
|