|
|
源文件中_Interface文件夹下WndField.cpp文件
, o, G/ P" V1 x7 `8 h k搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
( n4 B3 ^: z8 k7 w: d% P! W5 U K7 s) d2 H# Q) G
struct sItem
* c3 t. k6 M( P{
2 N1 _* c7 C- {! W0 {5 @DWORD dwId;7 V' b; O' Q& @* P9 a- |
DWORD dwKind2;, G1 ?* T" G& Y1 }' S
DWORD dwItemId;. q3 b& B8 a- F O# \4 [0 R
BYTE nIndex;/ w" k2 A# `5 |0 W
sItem(){
# Q( j3 v/ V$ S1 C6 o# l& n* w, W dwId = dwKind2 = dwItemId = nIndex = 0;
; i; n7 c, g# ^7 \% ]}
+ c9 M/ b; Q" V5 `& N8 S* gbool operator < (const sItem p2)
+ c$ y6 `' f( P7 @, ~+ F{
' a" \, d8 L% i) `: f if (dwKind2 == p2.dwKind2)- R# t5 z) B g" p& w( s
{5 L8 z! E: a; f) O! }
return dwItemId < p2.dwItemId;
9 J( ?3 ?& }. f! ]( C j }else{( X& `* q/ {9 J5 [
return dwKind2 < p2.dwKind2;/ y3 K, C+ C3 @( ]- `' v
}" f1 [) ^' Y4 E: {5 U
}
0 ?& t a/ }, O5 d: _};
6 Q4 a0 Y" j# m6 Wclass CInventorySort4 U8 I0 E" b8 @0 I# Q4 D- {
{
9 c5 h, v1 J/ }# w# Dpublic:. d; F1 n P2 X. n; F
CInventorySort()6 i, n) p8 |% h: @4 R& ], Y
{
* b& u8 ^8 O" K+ y$ k4 j$ D# T1 M m_dwPos = 0; E$ g4 W, i' M
}9 [7 L5 d- {2 r) ]5 J& M4 D1 B
~CInventorySort(){}
$ o' z) K0 ?6 s2 ?! O X" Cprivate:
# ~$ W5 y' L$ {) g- E, I# ]sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息! j4 j i; n9 c B: S! N- {' p5 n, U
DWORD m_dwPos;4 b) z6 b% n0 X1 A& e5 _' z4 l9 {6 |
public:& X6 K7 G+ ^; ]$ `
void Add(BYTE nIndex)9 \0 i# |/ e; S- |5 @
{
- I$ q' w/ V4 T' u% L* e8 g0 m8 U if (m_dwPos >= MAX_INVENTORY)* i; H; `6 D4 r" y) t; p; u+ Z% f
{
/ \4 X( ^1 W: u1 L( q4 y/ K2 z/ j# a return;
/ V5 u/ I g( Q( w) \5 V/ r }" q3 [, I$ c5 @3 }) r! Y8 }
m_Item[m_dwPos].nIndex = nIndex;
) Q- c0 H/ z3 I6 k% c m_Item[m_dwPos].dwId = m_dwPos;5 }0 l1 L! o: D' F8 l
m_dwPos++;
8 Y8 g4 K% o" s# x}
+ v! \ T" q: SBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列. D4 j" O3 \9 |
{
. r( \6 `" @7 |! r/ |' P. Z }/ Z for (int i=0;i<MAX_INVENTORY;i++)
9 L9 l" g0 ^: w, e" e# p8 J {
8 G- H) G- T: ~/ s' \ if (m_Item.dwId == dwId)$ @0 _) Q7 x1 @+ ]2 M. U$ L' j
{3 ^! c1 C: W5 Z; w, H5 G* J
return m_Item.nIndex;
+ W6 a1 l7 p: w) p' }/ C4 ]3 G }! }6 w* C; @# [& v
}3 q e ?! _" |7 l$ ?* l
return 255;2 l8 y9 ?* F# h, x, m6 R, r
}
+ U. j. j7 ^, evoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
3 ~) _3 j* ^2 |, m8 F Z* |, A$ F+ ^{! Q' o0 j: S& Q9 _, [9 m
BYTE nTmp = 0;
/ a4 y8 `) g, R7 g bool bDest = false,bSrc = false;
; B @2 S$ P( o for (int i=0;i<MAX_INVENTORY;i++)5 J" H5 d/ W$ _+ g
{: @% }, f: b( M! X3 H( F7 U+ o6 v
if (dwSrcId == m_Item.dwId)
; y$ H C) T1 r0 i7 g {; D+ O0 y* z$ k; x+ d+ o5 w
//id相等 则 改变对应的dest和src$ F: G9 x1 i$ V: T' A, @9 Q
nTmp = m_Item.nIndex;
- c) C2 Y3 q0 p7 a m_Item.nIndex = dest;# u: u8 G2 ?" F. `/ O
}
9 t) [+ o! g+ A! x- n% K8 F' ` }
0 y. x# A+ U2 F0 ^ //临时数据保存完毕,交换开始) ?" H2 r6 H: \! Q/ {& A8 w" y
for (int i=0;i<MAX_INVENTORY;i++)
1 ]2 W/ }; B2 e; c* r; A0 d: s {' [ ^6 p! v0 {. D. @; a
if (dest == m_Item.nIndex)
: a1 ?& L. Y, X4 X {* }! U) s$ ?7 s# f
//id相等 则 改变对应的dest和src" f9 [6 r0 @" O- z
m_Item.nIndex = nTmp;
5 p1 A) V' e* K5 b( i3 ] }
2 N1 z" E/ |, j- N& a }
@7 _; A3 a% q1 Y6 Y}
0 @ Q+ R7 j5 k1 ~+ [};: J% I: p& ~- N- H' s5 L
-------------------------------------------------------------------------5 w4 D' I4 o& I, b, y
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )* C# [1 J( }( j- x# R
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
( k9 Q- ^! |' J5 s5 }8 J6 i3 i& r紧靠其上添加:; A$ x1 L* @: i
if( pWndBase == &m_wndMenu ) d" i( V- k4 M1 t+ ~2 T6 P
{8 s- m- w% ^, u( I
switch( nID )
$ N2 j- s6 l! E; B& H2 _ {1 E9 r2 O8 M% C- A, a
case 2:: T* q5 A8 V% }
{
' g* F6 }4 n2 x! Y$ Q* _ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
* D# J: r+ a$ p& D$ c6 I if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)) ~9 Y: h. V9 p, d
{
" D8 \, ]- F' I4 J9 o5 W. e break;
8 ~6 R: W( R) J1 `6 S; C }
+ x% F# k( L: k& n& L for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
1 w" Y$ t7 \" t. u) g$ D {
3 K Y6 f" p' ?0 i4 k* r# b CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
/ r1 _1 s2 o7 r5 B4 w# I if( !pItemElem )! S" V! J0 g7 m+ E; A+ Z4 k
continue;
/ R2 o% j% P# v! O9 Q if(pItemElem->GetExtra() > 0)
$ H& G- b1 o3 E/ X" o continue;
, h& A8 }8 f* p8 X. H# ^ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ; c$ J9 o$ l- M' T* o
continue;
, d: ^0 o# X3 T* x& O/ w- }2 } if( g_pPlayer->IsUsing( pItemElem ) )
3 p; k. d! ^2 q% | continue;
p2 E f& D) X: s! G( n3 R if( pItemElem->IsUndestructable() == TRUE )
: O: z/ x [2 z {/ E5 \0 ]& T. \3 v" `$ i+ f
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
" g% x( m& L7 h9 J2 q. S continue;; q, q# R' a Z. ]# V/ B' F
}& \! L& c1 f. R% Z9 F3 l
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);/ x U6 L) e9 n3 o2 o
}
* [9 A( ?& b5 g* w1 J: T+ W break;
# t- o1 g% x8 a7 k3 L/ E c. j$ w7 X }
9 Y9 q$ @0 v+ H& K- ?0 E6 W case 1:
2 G( ^: L& u! r/ [% J9 w {
8 V$ d! c! v2 u& x5 T" |- n //整理背包+ S1 e* O: z! \
//////////////////////////////////////////////////////////////////////////% v* q( g0 g# a5 e- v
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );+ I8 o" m" J* F( t
//////////////////////////////////////////////////////////////////////////
2 g$ E4 {) \4 j1 D" a //////////////////////////////////////////////////////////////////////////
6 t Q, c$ {# _) U$ A1 H CInventorySort* pInvSort = new CInventorySort;8 T$ W9 p, ]$ ]( A
vector <sItem> vItem;
2 k1 g& [& [6 R! ?8 W' P3 n0 _ vItem.resize(MAX_INVENTORY);//初始化大小
! D9 H# x, N, ]2 n& P //////////////////////////////////////////////////////////////////////////
) V4 J1 I% T1 `1 s' k- [" G: V //填充数据8 H' |/ ^; i/ k; y$ h: d) _# i
for (int i=0;i<MAX_INVENTORY;i++)
) F& ?" y/ X. X. `9 Z" m, D {
S+ g, O. |6 M$ r: @* g$ V# M CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);: p4 j, U8 K6 o. s
if (!pItemElem)
2 b* u! I, z# {/ K; o {- [: l8 c& d2 K" _8 x7 [4 v
vItem.dwKind2 = 0xffffffff;
: R/ N: i$ J2 Z vItem.dwItemId = 0xffffffff;0 q5 |- k6 u! l5 [: |5 F: U" U
vItem.nIndex = i;" z* ?: }0 y m7 h, @; \9 |
}else {: w5 ] ?7 X- V% {
ItemProp* pProp = pItemElem->GetProp();" |6 g4 X" _' ?: G( C/ X* O
vItem.dwKind2 = pProp->dwItemKind2;% d7 f1 M/ n4 w2 ^, w) v
vItem.dwItemId = pItemElem->m_dwItemId;
2 z7 q8 H4 b* k4 D vItem.nIndex = i;5 L, A( ]; a; P8 G( r8 b
}5 K, Y$ h7 p, X. k7 `9 r' E% x# R# K
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ c( w$ Z" J: j1 b1 ~" s
}1 _* t2 ]) x9 B, n
//////////////////////////////////////////////////////////////////////////) |3 u( j _' D1 y( G
sort(vItem.begin(),vItem.end());//排序
4 h# X3 h" S% O5 J I/ C6 Y! b //////////////////////////////////////////////////////////////////////////- r9 ^$ g& w! u8 L8 \1 m
//交换
0 @2 z) j }* V) s: G4 H for (size_t i=0;i<vItem.size();i++): X3 M% _) t g, g& Y
{! Y3 Y/ T5 c% {9 Q" {
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);# f7 V. L8 I( X% V, x
pInvSort->Add(vItem.nIndex);! t+ S( N5 K3 a+ @ h u
}
0 @, [* m8 h4 v; i6 N; O BYTE nDestPos = 0;
4 |8 ?6 K% K$ h% `; Q" t+ A# b5 d2 M for (int i=0;i<MAX_INVENTORY;i++), n7 f/ s @, ^, ^6 ]
{3 C! P$ [' E. J! v* M
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);$ ] \( E' R/ y4 X3 l0 b+ V& w
if (pItemElem)
6 w; z3 D" ?' s+ |3 _' E% o/ A {
3 ?2 K6 o: M/ T if (IsUsingItem(pItemElem))
" e# }% l/ h- N3 s {) G! a7 [6 p) z( W! N
//这个位置无法放
9 N8 J1 F: ^* o1 \ nDestPos++;) n8 y4 h3 @5 z+ D/ S
}
" B$ |3 ?% L# F& c8 d }
! t2 _7 c: q+ @6 Q% _ c; D BYTE nSrc = pInvSort->GetItemSrc(i);
+ y4 }4 v' e0 u; \4 J pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);4 U; B! ?" W% \0 u' v6 o4 U# W
if (pItemElem)0 T Q( N! z3 u. J$ J
{! T* V+ a9 Z& F+ |% S7 |
if (IsUsingItem(pItemElem)): ? G: l1 F7 k `
{1 c0 u$ L: [6 z3 |' D* j
//这个道具无法移动,跳过! s0 x0 G9 W( b6 Z0 x8 W3 B
continue;% F0 ~1 X4 {) c0 o% u
}
4 T' N! m- v7 z- {! g9 B4 F }else{
& q. p+ \! o% \- i/ _$ @' `5 O! T //空位置 不用动
+ M1 z$ h0 C: k r continue;3 Q; j4 n5 L# m) ?% z. x& L3 Z
} R" N, T! ]# S- ]( l7 a5 Y
//////////////////////////////////////////////////////////////////////////
! @; [3 g8 h& r( l //开始移动% L/ ^0 ]9 H4 l# P, o& M" r
if (nSrc == nDestPos)9 O/ p+ u; ^3 B' i* ?; F
{
6 x8 B( S2 Y; d2 a7 M( ~ R //原地不动3 ] s* R: m8 l8 Q" B/ p
nDestPos++;/ z- A# F4 V, K: J
continue;3 S- R. _! z% O' G b% i
}# D: |+ M1 x( |; I ]
pInvSort->MoveItem(i,nDestPos);
8 N1 }1 u X8 W* R g_DPlay.SendMoveItem(0,nSrc,nDestPos);$ L8 Y$ j$ }. f! H
Sleep(5);% f, v5 S( D' O" j, r
//Error("移动 - %d->%d",nSrc,nDestPos);
+ c) I, [2 p8 p0 _6 F' o% ~- s nDestPos++;
; P1 X7 f# {+ P" D }% T# N9 j3 N. q" q) B& s# J2 W
//取第一个元素的信息0 I, ]; K2 x% s @7 n
/*+ z& \" N) u% ?; ~7 n
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff), q+ o; l# s5 b% u% I2 [
{) a/ `, T' y7 Q% {- V7 v* M7 g0 e# m
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);6 k, A1 v7 y: R* U! S
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
+ K, ]2 E$ z& i* r5 J z( Q. l* l! v! _6 _ }# F U+ m. Z+ }4 E1 @1 e; o
*/& D5 E% D8 Q# L2 Q/ p$ Y9 h
//////////////////////////////////////////////////////////////////////////
& W# z3 c; f+ U1 H' ?' @ break;9 D# X1 t0 E0 _2 ^
}
: ]2 _0 X- b& k9 D/ t }
# s5 C- \! }* n8 P0 B( K% f}
' y& |+ g" e" u- b2 G5 G1 H0 vm_wndMenu.SetVisible(FALSE);/ ^; P5 y# L P n
2 x6 r2 h9 `6 A+ I' h( H. @7 E* B--------------------------------------------------------------------------------------------------------
) |6 I2 Y* j1 |- l. i0 T搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)$ a9 @ X; W* X; V& p4 ~1 \
{
7 B9 d: P% l6 g, [4 m: nBaseMouseCursor();1 _8 J# \4 x e$ U) C# n1 A7 c
}
- _4 H9 h6 W9 |- W在其下添加:. q- ~ u J+ M/ ~+ V3 R4 f
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
7 @4 _5 U* j5 i Q6 p; |{
. l8 H/ Z4 E5 i( l2 Mm_wndMenu.DeleteAllMenu();
5 l* J- f" E3 s+ v( T b: V7 bm_wndMenu.CreateMenu(this);
6 Y( A" M$ n+ N vm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
* u. E7 g; D4 D! N! i# @( V. `2 F/ \( M% [8 y" V7 T
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# Q2 s/ u( [7 s
{
; z, _8 ]9 E. m1 G2 N+ p5 G- ?3 g //P以上级别才可以删除所有道具9 }* J5 ?3 B+ \3 m7 i+ R
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");" h( R/ v$ l5 T l8 E! I
}
& [& S, Y5 Z5 I7 h9 _- g7 ?m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );2 c# K, k! C6 d6 m" c3 d
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );8 e9 r" W$ b( r6 x, C% y# a; Q& L
m_wndMenu.SetFocus();8 K; ~& g/ e1 m/ ^5 x' ~
}
5 G" q) U% K7 ]8 ]' H, k------------------------------------------------------------------------------------------------------------9 ^) {5 N( s7 H: |( P' f$ x1 t( V
*************************
% W' x# d( W; r: M X5 [WndField.h文件, I! p: D% I0 C* j1 z
*************************/ _$ t' d J5 n* G
搜索:BOOL m_bReport;
. g5 ?8 q4 W& Z5 y$ P$ J2 q其后添加:
: o; m) Q6 r' j3 Z1 q: YCWndMenu m_wndMenu;
0 D9 ~9 g; T* M; x' r- G搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
; M8 N. q# D ?( N) v& x. h) [其后添加:3 V4 a$ E- P2 \1 ]$ X* G
virtual void OnRButtonUp(UINT nFlags, CPoint point); R4 a4 v' v! p8 k" z7 z; P$ f
# d! ~: c, g/ C6 a7 p- G1 d( V0 w2 y' B% [8 `
|
|