|
|
源文件中_Interface文件夹下WndField.cpp文件* q0 l6 y- B ~$ N. w5 a
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, X, t, m4 {! h/ Q+ N# p. R
, i: p1 d7 m5 r- g$ Z3 Ostruct sItem
$ {( L) ~7 \1 |+ b' A5 B{
( z* N8 ]- z9 U: cDWORD dwId;
u. w# d" g! h* tDWORD dwKind2;
/ X" X, w4 V, ^5 c5 ?/ W5 wDWORD dwItemId;
8 c: i3 f" Z$ ]) L/ {, g, [- qBYTE nIndex;: y: o4 q* j( X' c! b" y6 d0 s
sItem(){! [; V5 ^$ N. x! I/ f5 q* X
dwId = dwKind2 = dwItemId = nIndex = 0;
4 k2 z1 |6 r$ ~$ L3 [# B3 e}
8 Y+ [" Z4 h+ B$ G4 j1 ]; l# Mbool operator < (const sItem p2)
" S3 t7 D- q3 W1 t$ m6 h1 J8 u4 c{
) Z7 U0 Q; D; W5 m+ a6 a/ @( T3 s if (dwKind2 == p2.dwKind2)1 ?5 t+ P, [3 f( c k; \ m8 q
{
1 L. x$ R# K: T/ K" W( E return dwItemId < p2.dwItemId;
1 F1 n6 ?8 K" `/ Q& z! ~! x" O( _ }else{/ J e0 k% E2 P3 C
return dwKind2 < p2.dwKind2;
0 J9 i4 W; i: N& ?/ P L, ~5 Z }
( T; C( P# E& X: o! u- D}( h& Y7 O( l+ \; ^3 T* C- x
};" P8 p8 b$ M# `4 J$ S. u0 @
class CInventorySort
% ]$ V" } X7 Y) X; d5 s* |{
5 ^1 W3 d5 k% U& M+ d5 e a2 F) B6 A6 _public:/ \7 E9 f: s0 a9 J
CInventorySort()
6 L) X! [/ B. h* a( d0 l. B2 g{
* `% J3 ? Z& u5 v m_dwPos = 0; C/ v* U6 v4 v$ ^! {" u0 z
}" p2 J& L1 |9 e) |- f& h
~CInventorySort(){}
5 ^2 ~& Y, ~7 Cprivate:8 Y/ B' D ~$ K' b% B; h
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
. y0 v6 L: g2 Q% l# b" ?, `/ d) {DWORD m_dwPos;
# b- u$ F' x0 Ppublic:
f5 ~5 J1 z5 x* e6 S, ^+ \void Add(BYTE nIndex). Q( P% p6 t' d' ]' ^
{7 K+ w1 W3 v; z/ y/ p0 y
if (m_dwPos >= MAX_INVENTORY)% m: D. M- |- f9 B
{
# d a% J, v! L7 a2 l return;
' T/ c+ B+ k& v4 @' A( w }- }, B8 d; [2 X# {( v
m_Item[m_dwPos].nIndex = nIndex;
' t8 f0 z4 z9 ~" q5 m9 z m_Item[m_dwPos].dwId = m_dwPos;
# d( O% V2 y! \8 T. c m_dwPos++;
9 B+ r$ E5 F: H' ^' V) l' V+ t}
' O4 M, M6 X- jBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列. t, S4 _- Z, \# }
{# e' @+ y" l9 s' K+ u
for (int i=0;i<MAX_INVENTORY;i++)! S% \0 C8 G# T
{
& q* K9 s2 f# {- |2 _) ` if (m_Item.dwId == dwId)
9 |; _+ U' Q/ t& L {' y5 B \# A6 m9 m# X. C6 R- ^
return m_Item.nIndex;
9 ]6 L) I) _, ~7 ^! W- Z' r/ D$ d }8 d! P) u# |" W1 a, M
}
6 {0 ~8 I- j' z m Z return 255;* C; a1 M" d& ^4 b7 P0 Z3 T# i
}
% H0 V6 T* E) f, ^void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置3 s h; P: L8 d4 D/ h x' D
{
0 o' a1 s; J1 G9 W: J8 S BYTE nTmp = 0;8 R" Z* v# [2 Y4 r; G o( q
bool bDest = false,bSrc = false;" ^1 O F+ ]. C8 S# V! B$ D- O
for (int i=0;i<MAX_INVENTORY;i++)1 c8 o! U4 a: j8 u6 r3 J( B
{* U6 q+ A9 T; h
if (dwSrcId == m_Item.dwId)
6 H9 e3 k; n! } {1 ~' c" O4 o; Z7 D$ x
//id相等 则 改变对应的dest和src( X5 c* a, X. G4 C" J
nTmp = m_Item.nIndex;3 }2 i) Z% L7 d: e8 K. z
m_Item.nIndex = dest;& ]+ g* D1 y& t% M
}9 B6 \+ ~6 R& s* `
}2 N( b! ^! \0 P9 W) R
//临时数据保存完毕,交换开始
; Z, Z, Z, l2 |( d+ B5 Q$ s for (int i=0;i<MAX_INVENTORY;i++)
% v$ B6 d; r- c) { {# k6 s# e- g! m3 r$ } P8 l/ c
if (dest == m_Item.nIndex)
$ @, O- P7 N+ v$ p) b {
4 E# G( ~4 k7 d0 c( |, [ //id相等 则 改变对应的dest和src
( x6 S- x* L4 e. {3 C m_Item.nIndex = nTmp;
5 B k6 w0 S$ @7 I }+ c4 N( Z) K/ K% X
}+ O( i+ _6 r6 g' Y% T
}
9 n: P% F9 c+ B9 j$ x. w; a( R8 R};. ? L$ {5 {- ~3 _ D# ], R* }
-------------------------------------------------------------------------
6 k& ^$ c/ `' D% a4 I( b7 g* a依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
8 E) `0 i' Z$ W2 ?0 `搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
% P$ r9 h: f/ R* o U4 Z7 m紧靠其上添加:
& o& }3 g- G2 p; Z' Oif( pWndBase == &m_wndMenu )
: `7 ~; M9 l1 ~! f: e5 M4 R{
/ [$ Y9 Y$ d9 C) Q# O switch( nID )- m3 G' x! ~ F# l+ ?1 o7 C
{
4 c& {6 v+ c. a case 2:
3 R$ e; W/ d) Q, w* S: D {! U H% W, d- t6 k5 Y+ B
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
$ b5 v% v: o+ t* P, C* x9 e& ~ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 S6 |5 Q, v* o8 r% A+ S {
8 V) D8 l6 J' m# D break;
9 V$ f4 P4 e0 ~' j. B: F- z }
* t8 X E$ n1 m for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
& F* j8 M# P0 f {3 U& t+ {: E" `
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- T) J1 T- n& H; b, m if( !pItemElem )
% D" s7 l4 V) K8 z continue;
: r# t" A1 S. Y5 [1 p9 V+ e if(pItemElem->GetExtra() > 0)
$ U7 b, ^& R9 Q- ? [4 @ continue;6 J- F7 s2 b+ `$ |! b- s) J
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
3 ?; N0 o- g# Y7 g) g continue;
2 V) {# u2 x! A5 p2 X; d" B if( g_pPlayer->IsUsing( pItemElem ) )4 Y8 r; D1 l: d! N# w/ i8 H, E( z& l
continue;
7 I" O; G0 v" Q8 E if( pItemElem->IsUndestructable() == TRUE ); X# Y G1 Y1 k* v, v# L
{: v4 o: l: n9 y& }! D+ Z/ ]
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );/ }$ c4 N G( J9 T( l1 M
continue;
( T# C* f: \3 f4 t6 w+ C t }
( S' F) F, f+ ~% Z g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
2 \ A3 ?/ v D# O# {& [ i }
9 o5 v: w. G* R" D+ d$ \7 _" S/ @- u break;
3 _* L1 a2 j; \% v& m7 e7 P }; Z& }7 b, q4 r+ Q4 a8 H: X
case 1:3 P; i6 b6 |1 }0 K
{
1 S7 U. u7 ?& m! j3 z2 _4 ]$ H //整理背包
* A: p, Z/ \9 @$ s, R //////////////////////////////////////////////////////////////////////////
% e5 c; {2 b6 R& N9 ^$ v' j. | //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );$ f( N; |7 ^8 a+ U N& R( K$ _* O5 B
//////////////////////////////////////////////////////////////////////////. u' e8 W _. Q% |
//////////////////////////////////////////////////////////////////////////
$ }: y9 j+ U" B3 |' u CInventorySort* pInvSort = new CInventorySort;" M9 W% }) I# r) i+ n
vector <sItem> vItem;+ y# y: s, F6 W' }% Q1 e
vItem.resize(MAX_INVENTORY);//初始化大小
5 d0 t( Q4 O) K8 g& G //////////////////////////////////////////////////////////////////////////+ K( J& k% t: K6 S, M
//填充数据5 p) X1 j8 Y5 `
for (int i=0;i<MAX_INVENTORY;i++)) \) w* z2 O1 Q+ B
{$ [5 {0 m. |; U1 D9 [' d: L
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);+ ]8 ~% [4 i B4 p- ~/ z9 W
if (!pItemElem), {4 e+ @. J! e
{
4 a: y! ]; G5 u" W vItem.dwKind2 = 0xffffffff;
/ H" M( G# u0 y9 `7 C9 j8 u vItem.dwItemId = 0xffffffff;
' M6 @( G# w5 ~& s: w vItem.nIndex = i;
5 `. I# D8 T( T }else {3 \2 |: T0 Q+ a* k
ItemProp* pProp = pItemElem->GetProp();$ T$ o# b) N5 C% T9 o; x0 ?
vItem.dwKind2 = pProp->dwItemKind2;- T( [2 M$ n1 F# N4 B. |% ^
vItem.dwItemId = pItemElem->m_dwItemId;
, f- ~! U1 m6 b# z vItem.nIndex = i;
7 N6 _" S- |7 i% h D1 e }6 }: `. D% d: A( h" j1 D' ~
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- n4 J8 e/ ?! c! s0 S3 y/ J( j
}4 m* L! p' J( ^7 I9 R7 \
//////////////////////////////////////////////////////////////////////////0 d3 Z! G0 Z6 U" ?
sort(vItem.begin(),vItem.end());//排序
9 P+ U, y5 S" F3 k% x+ C R //////////////////////////////////////////////////////////////////////////) P; K4 W0 H0 y( o: ]' ^
//交换. ^( w2 w2 A; ^) T. [9 f- i
for (size_t i=0;i<vItem.size();i++)
2 \* l; O, E; G3 Q8 H {0 u- t9 ?# }; i" v
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 x) l+ `: _' _( n7 _" ? pInvSort->Add(vItem.nIndex);6 [# O/ A( K) i" s2 I
}
, R- L! G. M T BYTE nDestPos = 0;
+ K. S: B0 R0 B3 r: h for (int i=0;i<MAX_INVENTORY;i++)8 H* T6 `+ ^# \' X6 u
{
# G" q; b Q: R4 L: ] b CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
$ h8 e( Y1 D! T9 o! g$ D- h6 K. p if (pItemElem)' x y! z. I6 D, M6 Y( T0 Q) Y
{
, M& ~6 t" [, j% W& d$ p8 Q ]6 ^1 m if (IsUsingItem(pItemElem))" r* W! M2 S8 a' D& i) N
{
9 [ r& a' J6 ?6 f/ X //这个位置无法放
9 T9 H- o8 n/ N+ }3 g& Y) w: k7 b/ H1 P nDestPos++;2 i4 v f9 `2 v1 O2 ?2 l
}
0 i& d" R7 U+ G l# x8 _ }
1 N4 s$ C# k) V BYTE nSrc = pInvSort->GetItemSrc(i);
9 l2 W' ~. {8 o* e pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);* K) W3 b1 i7 l" C
if (pItemElem)
; {/ G K- D- G {
) H) _+ L( J9 ]5 `* j7 K8 C if (IsUsingItem(pItemElem))1 x# {5 g9 U7 i$ D- M# h4 ^
{9 d, I" v1 K# z6 F" `$ D
//这个道具无法移动,跳过# b1 B% G: @ o6 j. y4 Y
continue;
! D6 M3 [1 t C2 S }
- d% _$ m+ I) s U2 F }else{
3 J) C* h0 K0 o$ Z7 ?2 q //空位置 不用动
+ f* W9 l! p' N2 [ continue;4 E& ^0 W6 a5 C; @" w0 d% ^
}" s/ i* a6 @9 N m' K
//////////////////////////////////////////////////////////////////////////+ M+ J* F# f$ e- |
//开始移动
3 T5 q/ Q& y8 B9 x2 l5 v% G if (nSrc == nDestPos)! w# F2 f! D: u/ ~
{
* e& ^3 y9 J* b- e1 t3 B6 c1 G //原地不动
2 j x7 W" N3 v; F nDestPos++;+ Y, D: ~* T* {" ?0 T
continue;+ C: J3 g- w/ T' \3 ?5 _
}& w: _% _: C/ n0 X# S! d
pInvSort->MoveItem(i,nDestPos);+ Z5 ?: i& H# w
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
, u+ ?3 C) o# f) n! G) n( [8 @/ ^ Sleep(5);
+ W8 f6 a. S$ Z5 [- \7 S //Error("移动 - %d->%d",nSrc,nDestPos);
9 e6 P! s9 |5 h" C9 D1 e0 P) G, { nDestPos++;, Z3 p- ?, Q6 v" [# k
}
4 j) a% x; K2 z7 y //取第一个元素的信息: k6 @% Y& T6 \
/*% o4 v; G( o8 @' _! C) B; n
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)% }# z4 G& F/ r! f6 |- N8 }9 A
{
$ }/ v3 N- u l* v6 ]. ] Error("Move - From:%d,To:%d",vItem[0].nIndex,x);: P: y% Y7 s4 _
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
" b4 J% K; n0 o4 L- ^ }
( H; y" p. o# w5 ~ @; z */
- o/ R# U% i7 s* t //////////////////////////////////////////////////////////////////////////
: m! b7 d/ k/ T break;2 u4 t$ R! T: x+ n
}
w* s7 V' N/ w1 `9 R } 1 u( g/ W( {; ?4 p) i' M" Y& o
}/ E6 C) J. y. L8 }: T
m_wndMenu.SetVisible(FALSE);, }1 N* G* k9 @; C& @$ S2 Y& I% ]0 g
( W: x+ E; q. @8 D
--------------------------------------------------------------------------------------------------------# k; }$ O8 m2 n# v6 {& q0 I
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
3 h6 ` w2 ~& \ I7 G{4 x, n0 @3 o3 p' o2 J8 P
BaseMouseCursor();/ d5 [1 a; K- j- S
}" t& ^- B) Y3 m( X$ ~" C& Y6 `
在其下添加:, X2 v% C! u/ j; q/ N* w4 k; v
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
* b5 ]9 L) A, b& `. E{% g t! q* z8 {4 g, E' N+ B d
m_wndMenu.DeleteAllMenu();
0 Z. ~5 L/ p, R; p1 `m_wndMenu.CreateMenu(this);
, L. m' q) U5 J- c% L8 wm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
: m3 z4 q; h4 Z2 h$ W. e, B' P. e! G; z7 m
4 a n; H: N7 yif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: P, x' H2 L- N{0 u/ ]$ A5 N7 g9 h1 l6 c8 X
//P以上级别才可以删除所有道具
7 d# |8 b; I( A4 V, Z0 n) W m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
5 h0 M1 Z8 c4 V}
" G0 o. L7 I: J; t5 c" Om_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
- m) u$ T! ?, R/ z# c! bm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() ); k- f/ a7 t' U3 W
m_wndMenu.SetFocus();& D7 R7 R) Q8 V! J% x" T
}' g$ T& m% P1 u. ^+ `
------------------------------------------------------------------------------------------------------------
; Q; y/ ]$ R7 Z1 q! f' N*************************
V% z g- t) F7 K2 g- y" K" BWndField.h文件
. ^5 t6 f7 [& S1 Q*************************8 R# M% Z7 `' a5 C+ X1 h( d
搜索:BOOL m_bReport;
& H9 p, ?& y d- ?& M& u* E其后添加:
# ^- R" ~ p# K. X; zCWndMenu m_wndMenu;* V( Y# ^$ M7 K7 O( t6 I* H& J
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
3 M/ T$ m* P/ T+ N- u6 k% v其后添加:( J3 U! E- x: }3 K$ R5 B( i& L1 |7 k+ g
virtual void OnRButtonUp(UINT nFlags, CPoint point);
, H! V( _# U9 R8 w! I
5 _" R) X( I5 V. u! _
( q) f- ]$ s: { |
|