|
|
源文件中_Interface文件夹下WndField.cpp文件
B5 |& E, J: I( Q" C7 v搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
5 P M) z( L' n/ A; l
/ }( _( H' R; o0 nstruct sItem
& Z9 \8 Z- I* L( e+ ~! X{
6 u+ {7 K6 F" c7 F9 HDWORD dwId;
4 w$ N% b4 D8 QDWORD dwKind2;
; Y- Z9 I B% n o5 N/ YDWORD dwItemId;/ X0 X/ Z; o: y: Y3 S
BYTE nIndex;) C% A, S3 |7 T, ?4 [6 r9 Z
sItem(){
/ O, n- P7 ?$ A dwId = dwKind2 = dwItemId = nIndex = 0;
M4 l5 c- F$ }/ u" ^ j}" y4 h' B! ]* b4 v5 D
bool operator < (const sItem p2)3 a! J8 L6 Y# e$ w" _# W
{0 M) k Z4 p( l) b
if (dwKind2 == p2.dwKind2)
' Z O C" r. |5 X* |/ O# P {6 Z4 Q; u0 a, g; S2 m: i; S/ `" X
return dwItemId < p2.dwItemId;! w6 C) O$ K" E. e; @4 w
}else{
( w4 q: X& a6 J, ^, j+ d return dwKind2 < p2.dwKind2;
. L! t) y4 K+ L0 E, e2 C- { }
: N+ Q. e, t* x& @; D( J}# |0 G) m; W1 {1 H( `" ?, E
};
9 I1 _$ B0 l# H+ E O& D) xclass CInventorySort7 C) Z3 I; h) x5 p1 ~# _
{) b" k2 }8 H+ A* t& k' V
public:
. V/ E1 {0 Z ]. \- |; uCInventorySort()& k% K: a# Z, ]7 [! Y# G
{, w, U4 Y D- _4 r8 G
m_dwPos = 0;
0 a* ^* K3 `7 ^2 X0 ^4 I% `}" Y8 q( s' r' T0 x( a% _ W0 S
~CInventorySort(){}* o2 A& s' p" t* M$ d
private:$ R5 L! q* h2 B& s! {9 t; ?
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息! w. e8 m0 t- t* a- F
DWORD m_dwPos;! A5 [9 P1 l8 c' ]. K" b
public:, |, @) G/ m6 w! y c6 Q
void Add(BYTE nIndex)7 N$ w+ v6 X$ V* [, X, m
{/ |3 f0 q- m+ X/ S
if (m_dwPos >= MAX_INVENTORY)
7 `' [7 h/ o. F" a {9 @8 U" `% t1 q# H3 _
return;: r( h8 X% N. f: U9 [
}5 a6 `7 v* d1 y0 h
m_Item[m_dwPos].nIndex = nIndex;
5 v- N4 l, }$ l* p3 T m_Item[m_dwPos].dwId = m_dwPos;3 M5 [! [3 R; Q0 n ]
m_dwPos++;) l7 w; W) \1 Q+ `+ D1 Y
}
; j& ]- i2 X) e! \( B4 X4 PBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列# [7 L7 q# [$ ?; J" W1 a3 [; _
{
/ u* V0 d3 G/ S. ^' c# U for (int i=0;i<MAX_INVENTORY;i++)9 ~: p t4 ]6 ~1 N* L0 _: j% ^
{& X7 C7 W6 Y6 C& [' v* l
if (m_Item.dwId == dwId)
' k6 T) T% e. H4 l' C {
" ~9 S5 t$ M! H/ ^% O5 ^9 J) ` return m_Item.nIndex;/ ~" ? e6 v5 T P) j" S( C- D, r
}
) F" z0 F0 }5 l; w7 ~; K' i }: b; q; f7 `- U
return 255;
) i' z8 U3 B1 Q( C4 g. ?}" }0 _& y7 _ H. n' f/ t0 z9 D
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置: U# t- S& T% O
{
& N, ?5 C) G. S$ S1 |! F# } BYTE nTmp = 0;6 ?6 `( X& T+ _& G( L% ]3 G
bool bDest = false,bSrc = false;0 i' H8 W- t* [7 g4 Y
for (int i=0;i<MAX_INVENTORY;i++)% ~$ L- J9 ?4 m/ w6 ?
{. t5 J4 |' j8 ~7 e+ T u1 A' C
if (dwSrcId == m_Item.dwId)
/ R! W8 [$ C" s {
* Z: C w5 q% H/ d, O //id相等 则 改变对应的dest和src+ e. l2 X4 m+ @1 g, F0 J
nTmp = m_Item.nIndex;. X/ Z4 t$ X& |5 i$ ]- ]0 p
m_Item.nIndex = dest;
: e+ u/ M) Z x }4 L J2 p) n" n
}
) H: y& ^4 y7 \% c$ ?+ K //临时数据保存完毕,交换开始2 O: S) u9 ]' L$ U
for (int i=0;i<MAX_INVENTORY;i++), m5 F" k# p9 W" {. s0 l
{
0 _# n. O# |4 w- l if (dest == m_Item.nIndex)
6 V- R/ L5 g1 i! S) O; l' I: I {0 L9 b+ ^2 K0 F# j. [, X$ i
//id相等 则 改变对应的dest和src
( O+ H- U$ t' N- U4 O: J" E m_Item.nIndex = nTmp;/ U4 A' ?+ Z" f" G5 l
}( @& I8 T ]. M8 ~4 V
}% V" A3 o; w/ I& O
}
1 W) T. P. `% j o* I};% w- Y% M7 t8 x7 o& w
-------------------------------------------------------------------------
1 R8 O3 x2 G7 z( q, J1 s依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 W" k* q. z: i/ n
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
7 z& _& y+ M1 R4 t! ^紧靠其上添加:) N9 |2 ^: I5 [ t
if( pWndBase == &m_wndMenu )* {; b5 H0 s0 c% B, l
{
. Q# k& V. R+ s/ N. ? switch( nID )6 i2 S( k6 H3 ^( H
{
! [ c1 n: x0 p7 ^ case 2:
$ T# o0 B+ I8 m {+ {6 M a7 F0 v* x$ c
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);* X& z1 q; X7 D* R1 G
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 l0 O5 w. r1 F$ f9 \. _9 k
{! \* x1 t' ?% x/ z8 [
break;; N! z7 q1 E1 o7 N- m, W
}) V4 J R' J& i( _2 q* l( g
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
5 Q" ]+ l: r w: H' w# T- K {( c" b" S7 u4 b3 z( f8 J
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 m6 _+ j% \( F' @$ V if( !pItemElem )
- c% T: C4 i9 M continue;+ q" x& d* C% Q) b/ c. l6 K
if(pItemElem->GetExtra() > 0) }' l+ L. f& p
continue;
: `+ y3 Z1 i4 x' J/ A) l+ }9 E& X if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
: O1 c- L% x: |" Z$ G' O5 v# O continue;
, k* T' w [2 ]1 Q* ?7 I) s8 L if( g_pPlayer->IsUsing( pItemElem ) )3 h# w, g8 Z: I
continue;
. M$ {6 [6 i, j; K$ p: s2 { if( pItemElem->IsUndestructable() == TRUE )
3 r- [; C" U# Y0 r7 h; J3 q$ g {$ R4 |" U7 k5 m9 ]5 g [
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );$ x6 O, C7 f- @! S" u8 q5 ]
continue;
, N. f5 ~- m, D) Y ? }) H; W& o V0 [) ]5 O' W3 ]2 I( z
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
% h, U+ l; p6 K( `4 n* S }. r; X, S8 v2 Y. L. @( o! L
break;
9 @$ I, y( q( q' d" k }2 F* `, R& I0 `
case 1:
" e* s6 Z" A/ D- ~/ J( L) C5 d {
1 {+ n- a( ^, w( c1 r8 c6 \ //整理背包
# s; X' I# F/ c //////////////////////////////////////////////////////////////////////////
1 u" i/ H5 y* ~( @' Z6 q //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );* T8 [! L% {. ?/ y
//////////////////////////////////////////////////////////////////////////) z" v( u7 Y1 B( D G& n) x
//////////////////////////////////////////////////////////////////////////
4 ?/ N M, h4 W8 ^# ~! v CInventorySort* pInvSort = new CInventorySort;
- z# z4 x3 k$ q( S u& o vector <sItem> vItem;6 Q# E3 s) e1 R) [
vItem.resize(MAX_INVENTORY);//初始化大小8 F8 R5 Y% U7 A1 m, q
//////////////////////////////////////////////////////////////////////////7 h) O# Q8 y: n' x4 E; R* H* @
//填充数据" O9 u0 ^$ a, t( F" r$ t
for (int i=0;i<MAX_INVENTORY;i++)6 B) [7 ^5 q8 E5 I* `
{2 M1 B- s! J4 `# K6 v, i
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);9 N0 r# y: {! C
if (!pItemElem)
8 Q; g% C& O" z! j {
0 }8 X. z. J- G0 P6 U) p( ?$ H8 Q vItem.dwKind2 = 0xffffffff;, k1 W3 W% x: j
vItem.dwItemId = 0xffffffff;
6 c4 B9 ]" E5 i; D' g0 g8 W0 B vItem.nIndex = i;
' i" `0 z. |! l- B, L) ?4 D" z }else {
: m+ I2 R9 E8 K2 a! ?+ q% d( \ ItemProp* pProp = pItemElem->GetProp();& }& V0 M! R+ G& b6 F: d
vItem.dwKind2 = pProp->dwItemKind2;! b$ X1 B& K0 E5 l6 s
vItem.dwItemId = pItemElem->m_dwItemId;2 h; `0 M/ Q. `9 c
vItem.nIndex = i;+ o& ~- _ E2 P5 j1 d' O1 ^
}
2 u+ ?; ]& l; U2 B1 z0 u c //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# _& R/ J* O: C. h" {$ Q }/ {/ a. W# h6 L2 u: Y4 V9 c
//////////////////////////////////////////////////////////////////////////
9 h2 _8 W- a7 z$ a6 B2 c; ~9 O sort(vItem.begin(),vItem.end());//排序
2 H. l. f: N9 B& f' h$ l //////////////////////////////////////////////////////////////////////////1 z3 A. [, W5 `: j3 m
//交换( E0 v% t, Q t n8 Z" S
for (size_t i=0;i<vItem.size();i++). u- J2 f: Z! s; p; N5 T
{
$ P# r/ u2 } B2 j9 t5 F: p //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);1 u u i5 ?' P1 m6 C1 b
pInvSort->Add(vItem.nIndex);3 N# B( H) ?) h; m; s( O ]
}
5 J$ I5 j$ ]) A- [5 V BYTE nDestPos = 0;" g0 I) u/ Z% W" ?& o, D* Q
for (int i=0;i<MAX_INVENTORY;i++) Y4 t* N" ?" M4 g- p x
{) |6 v3 t. U) K/ M. C) z$ r
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
* h1 ?$ w8 Z1 T# R2 B if (pItemElem)/ m0 {! N7 l& Q1 v
{ ]# o6 ]% u+ n2 Q
if (IsUsingItem(pItemElem))$ }7 T+ {9 ?: S2 Z# M7 p) U
{
; V6 ^$ P# D& w% r- U2 l //这个位置无法放
4 s# O3 V, T* g' K2 A. P6 ` nDestPos++;
0 c. x7 C. k$ g }
: I: w. c& q! h }. ]' m& o4 K3 T7 S0 _6 Z1 i
BYTE nSrc = pInvSort->GetItemSrc(i);$ m3 a" T9 Q2 ]" s+ L2 D, p
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);! L9 X) g6 B! l# ~% [. D4 Q f4 O
if (pItemElem)2 ~' S* ?3 I _ A+ V
{6 s4 y/ B9 @9 Q# c- r
if (IsUsingItem(pItemElem))' D* p2 Q3 @* ^+ D
{
: }) [7 h5 ^8 o/ |! n& }+ z0 D1 Y$ L //这个道具无法移动,跳过
0 N7 d1 h2 k4 B- S+ }7 H continue;
7 ~( l7 `( q% V6 u) ~ }; ~3 T, @4 u4 ~) R1 i0 j$ @
}else{
3 }# P& e8 Y6 K- O+ _4 J/ Y% q //空位置 不用动0 _7 }! ~3 r- j
continue;0 a) h/ ~. B, y- t9 j
}
5 b4 k8 M5 E1 I5 H //////////////////////////////////////////////////////////////////////////( j7 t; [7 l: c, b
//开始移动 K9 m4 ~. n' s. g- j4 l
if (nSrc == nDestPos)
; Z) e' M3 X* r# _5 [7 x {1 V% d% Z1 ?+ ^1 K9 k8 u
//原地不动
2 D. J3 O7 J& ]* K nDestPos++;
4 x$ `; L2 c# c continue;1 j% n. q, a# _2 N1 I" d
}
! S- b+ \' S; i! d# }' d) F pInvSort->MoveItem(i,nDestPos);1 D4 O4 l7 ^5 }% h
g_DPlay.SendMoveItem(0,nSrc,nDestPos);# J! p& G& H% i8 _( L% @3 Q
Sleep(5);' V0 R+ h J( `6 j- e3 Z1 h
//Error("移动 - %d->%d",nSrc,nDestPos);
j$ L. N; ~1 R' z5 X# ?( g9 D+ T nDestPos++;
6 y- @% I6 s2 I! F h8 O }" ~6 Q" Q0 b3 `% c
//取第一个元素的信息5 N' r/ M/ Z7 i" K5 D& T
/*
d u3 g: P. i3 i& h, r `- S if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)( c6 P* w, i3 n7 b
{* j' j5 s& L: w; O8 G
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
5 i% O! [! }* v1 x. g( Z0 g g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
/ H9 n9 D9 b& W3 V, M: P }: i) R3 R$ I# W. i
*/
- O( I) T" g: n: z //////////////////////////////////////////////////////////////////////////
: G% t& e3 R9 U5 q6 i3 E break;: e" z4 O7 A; \% a, Z$ A
}0 q* x1 Y' G( a7 x0 g5 V) {& G2 K7 M
}
; C: F( _( x# o2 _2 [}6 J7 v( A5 R& p& L, _
m_wndMenu.SetVisible(FALSE);
( M ^! G! g6 h9 m
4 {6 U V" q4 ^7 z" A& J$ U7 C--------------------------------------------------------------------------------------------------------
; J& {6 o7 d! d! x# d% @5 V搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
9 t1 y& z. f. z2 Y{
9 t8 j( h. S% x4 G. \BaseMouseCursor();
2 `: x, n& H* g}
, d, S2 R- ?' u, S4 E在其下添加:
, Z( A' Q( [0 ~void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
5 |7 n2 i& l2 c{- v3 S4 d. y" z* @8 X! T) h. r. E1 c" Y
m_wndMenu.DeleteAllMenu();+ _: ^6 t( v; k
m_wndMenu.CreateMenu(this);* d5 e8 L0 S4 \/ x$ q4 X
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
# m# W5 H/ i, ^. M- b7 [
' S+ f$ x: r8 K5 l. {* l6 dif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); K- A' b2 y$ ~6 r! }
{
' [ C# s6 E7 }' ~* M: r //P以上级别才可以删除所有道具
8 D1 ~2 k. o R% L m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");3 j4 i. w( d7 @! u1 ]" I
}
; C0 s; X" U8 l( pm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );9 f; i8 g( B! o% V
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
. c- o$ e, A; ?( U5 U( ^$ @/ Gm_wndMenu.SetFocus();+ e# c. t7 n4 M4 H1 [
}8 K% y: |2 e, f% k) t
------------------------------------------------------------------------------------------------------------
+ h% F3 S: l Y! A6 B*************************3 K) y! V5 u+ ]7 s
WndField.h文件
- O; ~3 I- {6 Q! ^9 j! A*************************# O& Y `: l$ ?+ G: P
搜索:BOOL m_bReport;
* T8 n8 @* y' o4 \* k其后添加:
' N# X' r. O7 X, Q* k3 N/ MCWndMenu m_wndMenu;6 a1 R. S1 G8 Z& g$ g# o# O
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);% s* V2 N# R: i) N
其后添加:
- |: A6 i# ^8 Z8 d" E: C" ^virtual void OnRButtonUp(UINT nFlags, CPoint point);9 [6 Z( T5 P! y. ^
) W1 O. q F8 H! l! r- h! D0 L9 C# K
9 V. F1 y6 Y! l9 Z d0 f
|
|