|
|
源文件中_Interface文件夹下WndField.cpp文件
8 x9 C. S" Q2 Z0 Y" T$ M8 U; H. z搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
! n3 D' c( {$ e+ P, h! h! Y9 f5 T* F Q
struct sItem, s# D1 x) L& A# C; b
{
6 o4 y& X1 |9 J! }DWORD dwId;- Y% F5 s( R9 y* D: u( ]
DWORD dwKind2;' P9 w0 {+ h- G9 U9 `% ^# I
DWORD dwItemId;
' N6 ^' f) Z6 Y. g) Y$ TBYTE nIndex;
! ~2 M" i, y% p6 v9 G& |sItem(){
0 X; _/ X4 D( u+ ?8 u1 y dwId = dwKind2 = dwItemId = nIndex = 0;: m6 L, k$ S: |* Y. D+ m
} }9 E: G' n' @
bool operator < (const sItem p2)0 [3 k9 u) V2 F+ B' h
{
7 x; ^. `6 ~) A8 ^- N' B if (dwKind2 == p2.dwKind2)6 O J' [& |* e! {0 C6 T: L# J
{
! W! A5 L" O8 V" W' \ Q- f5 x return dwItemId < p2.dwItemId;
( ` W# F- O1 e h+ V }else{( K/ o- |5 @' v% [ n* d
return dwKind2 < p2.dwKind2;
) P4 J9 m, [1 \9 _7 K" }, F$ } }, I9 f; x' |( Y1 Y/ ~( W- R
}
3 q; D/ Y, t1 C |8 A" ]};
7 t5 f/ M+ \8 r" t+ s4 Oclass CInventorySort. L" m) {3 }1 o b& s& u3 S
{
) a" h6 Y1 X/ y0 g) y( tpublic:
+ g3 b6 Q, [1 E# aCInventorySort()
4 y6 D8 v; D+ e4 j{' a5 R: l8 F" h" {4 b# [1 f
m_dwPos = 0;
0 x; y2 P5 u% X- m, J) F}2 T# ~2 Y% M }2 s
~CInventorySort(){}4 j$ v6 [, |1 g) r0 z1 b# g
private:- r' S H8 S- h1 M/ q
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
: a$ m; g/ y, ]) ]1 j* W8 A( J' m. VDWORD m_dwPos;1 i1 Q% r5 r2 e! } G P& K* `( S
public:' t9 h8 I+ H; U
void Add(BYTE nIndex)
& @- w) O1 E8 u. @{
6 l/ U0 T$ h. l' \9 N6 a3 _ if (m_dwPos >= MAX_INVENTORY)& d. w9 q' k5 ^$ ^! D9 F
{5 w8 F: Q) q7 J3 Z& h( c1 N
return;
W6 x# x# ~8 A+ n: x }
& P; Q# B ?, d% X# L8 c% k1 S( z m_Item[m_dwPos].nIndex = nIndex;
2 U7 Y5 O9 k7 S% O7 Q m_Item[m_dwPos].dwId = m_dwPos;
2 j$ I. w+ C% B' G m_dwPos++;9 ], i- W7 p" S! P) U, f
} e( @0 m) P6 F1 H3 R
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列5 ?) N# P& b) ?
{% b8 e( C$ _. V! H& L6 c, C; l
for (int i=0;i<MAX_INVENTORY;i++)' Q7 y5 a1 J7 s" Q" e8 Q2 K
{# `4 B, |- H4 h1 S4 w
if (m_Item.dwId == dwId)5 J6 D u8 X& F2 n6 g ?
{
9 Q$ ?* ?9 u+ [- k% g return m_Item.nIndex;
g+ Q) r" S/ o4 [ l }
6 X- S) @2 d- t7 B& O& Q }% m I" S8 d- X; c( {+ f3 g% F1 a. V0 W
return 255;. M9 z$ P3 |& b+ ?+ E
}8 A2 u# T) Q5 Q! V0 E
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
: o5 G* I r! ^{7 T1 P9 |6 K# m
BYTE nTmp = 0;
8 U# { V: ~- X% B1 j9 d8 \; v bool bDest = false,bSrc = false;$ Q0 H* a. Q$ |# g5 }7 F+ q
for (int i=0;i<MAX_INVENTORY;i++)
6 @& c# m: A+ }* { z4 Y4 z {/ T" I: s5 }8 \- F% b
if (dwSrcId == m_Item.dwId): h- o- y4 s, ^# G. b( j" w
{7 [4 V* c# B( A: N T6 |6 L* o. J
//id相等 则 改变对应的dest和src
7 [& _% h) _4 p7 c3 k4 A; ?, f# l nTmp = m_Item.nIndex;- T, c, m; s; t2 m
m_Item.nIndex = dest;
$ G0 B6 V+ H& ~: t" J }1 H0 ?) y! L8 y. S( w
}
* l \6 T+ ?' v7 i. g/ d //临时数据保存完毕,交换开始
9 K% K+ k. q* |1 u+ K0 V- K7 c% F for (int i=0;i<MAX_INVENTORY;i++)
W1 w& K/ X: M/ ]1 X; P5 N {
; P7 S0 y5 q" v& P6 h if (dest == m_Item.nIndex)! c4 i1 i6 f8 ]+ Y x! i# y
{
! |! K1 z' i3 @3 P |0 d //id相等 则 改变对应的dest和src: T0 H7 X& n3 Q* s9 g
m_Item.nIndex = nTmp;. a" A% |* z+ S! D# s
}
! Y0 M; k) t7 J- t& @( Y' O9 X0 z }, i/ G3 ~( C, e' W
}( M/ t3 `% M( h
};3 v- a1 q V# x' J9 p% i5 ^
-------------------------------------------------------------------------
, M0 p# e( K) [( ?依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% D& ~7 p" M5 i搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
T M6 N' Z/ J- k, Q紧靠其上添加:
0 y% s7 B7 h7 `+ d1 {if( pWndBase == &m_wndMenu )5 X$ Q7 _5 p" E1 T
{
4 N1 B* P1 a8 @$ h3 ?* V# `/ S switch( nID ); d* ]; \7 a6 M7 t+ z( e' g6 m
{
G# U- p9 D% a+ U) L- u case 2:
3 t8 Y) O7 U; G9 e( z2 u3 { {
! N7 b/ n/ b" s g. f5 l6 B8 ~ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);3 U6 D" C/ N" i
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
' G1 u& F8 v: f; T2 |% M {
# Z2 Q1 d8 a i/ x Y1 |" r/ ^ break;
0 ?5 i; l: \5 X4 _; C, N( B }& u% ~3 D/ q1 T, |5 i4 R" ?
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++); |( f9 l9 K6 w+ f$ x- ~3 l
{# X- _7 h0 o0 M) n- Q# v
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
) W1 C8 d d4 j0 ?) E: o if( !pItemElem )
$ ?! z+ T! z) ~8 n, y, c, ~, O* U continue;
' g& b5 @; p8 {9 W' V if(pItemElem->GetExtra() > 0)
6 @9 [% \5 d6 F& ]2 i& A/ z) P continue;! L9 v' S$ K" P! _% I
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
w4 K$ X* W8 ~ continue;7 _1 Y- o5 C0 h2 ?! \" y0 e7 H6 r; w
if( g_pPlayer->IsUsing( pItemElem ) )! l" Q6 M0 w; Z2 f9 |: e, H
continue;
8 |) C8 R/ L# R if( pItemElem->IsUndestructable() == TRUE )
& B* L. `3 ]8 B4 ] {7 y, _: Z9 Q* c$ s
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
1 _+ C& D0 X [1 B0 I continue;
: n1 g/ y/ g7 e4 M' h }& D: `8 D' h" ]- n, m
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
2 ?# R4 R( ^4 f+ |: |/ O8 ?& y3 U+ Y1 Y }0 ^* S! z1 [% k5 z' {
break;
/ m" c6 S7 |3 v) R* r" {$ ` }
. W9 L1 A" N$ T0 y case 1:
" E9 o1 D1 G9 X# Y$ M4 H+ w {# x# {: ~. G4 ?2 K/ G
//整理背包
/ @& T, ?+ c" d$ J* T, j //////////////////////////////////////////////////////////////////////////
7 M$ V" u$ J) Q9 O //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
9 a* [ E6 |! J9 x //////////////////////////////////////////////////////////////////////////: P( |% v% ?$ D: ]2 t( A0 E
//////////////////////////////////////////////////////////////////////////
5 b, }- D: h' Q9 H/ Z/ Q CInventorySort* pInvSort = new CInventorySort;3 U2 O3 E, D2 ]* w4 ^
vector <sItem> vItem;5 d0 H5 o- N3 J) G. j
vItem.resize(MAX_INVENTORY);//初始化大小. O, S; o/ B- M# F) E% I# K4 x
//////////////////////////////////////////////////////////////////////////
- ?8 f2 p5 M8 {" G, | //填充数据
) c4 v9 \& O, [ H for (int i=0;i<MAX_INVENTORY;i++)
+ |) P# U7 ]& G" V& l% T {. O9 X( Y- Y- u) a
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 z) S) {3 W N, _1 \; z
if (!pItemElem)1 q* k. v: s* g. w0 \: L
{2 Q* @' P5 ]* k. A; N( x9 y C4 A
vItem.dwKind2 = 0xffffffff;
. ]4 r# _& r! }$ y3 o! S vItem.dwItemId = 0xffffffff;
7 b6 d* S3 E8 M. Q6 f1 ^ vItem.nIndex = i;
2 U. _; ]+ T4 D% g7 t( m }else {! J& }( g \- h$ i! j! T
ItemProp* pProp = pItemElem->GetProp();" e3 [9 c& u! G% ]
vItem.dwKind2 = pProp->dwItemKind2;8 l' H6 m+ S( }. s5 F, r2 n
vItem.dwItemId = pItemElem->m_dwItemId;
$ s& ^6 ]) G' ^- X+ V r: p vItem.nIndex = i;: h: ~$ X: S' w9 \' A, `
}
4 P! @8 ~9 j- f6 e6 z( [: o //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 `4 a* E6 Q1 O0 O- v: Y& c
}
: x; S/ ]: U" j. r, L //////////////////////////////////////////////////////////////////////////
8 `3 F3 G; f, p0 y1 y' q2 m sort(vItem.begin(),vItem.end());//排序4 A8 c, L, N5 ^1 y/ ^
//////////////////////////////////////////////////////////////////////////$ ?+ N6 c9 \4 a
//交换
! K. _* r$ r. `9 Y for (size_t i=0;i<vItem.size();i++)
$ u) w/ l- a! W4 I7 ` {2 R$ O+ p: V Y1 o: ]! i/ g
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 N6 A6 s0 V% E! [7 K
pInvSort->Add(vItem.nIndex);9 K+ x% X) j( y5 w4 N
}
. e- G' A. f0 n BYTE nDestPos = 0;4 ~- j) [9 A) U0 V
for (int i=0;i<MAX_INVENTORY;i++)
" E" O4 _( r$ M5 K/ K+ Q$ M; E" t {
( t- n! s' E4 C% P& |" P% g9 ` CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);# D8 Z# Q5 E' k% I6 B- W9 O2 C9 X
if (pItemElem)4 d! ?: i* `8 T$ a
{
! g+ f9 Y+ I( { if (IsUsingItem(pItemElem))& e7 L) d; g" q% o2 t
{0 ~' G' l2 i5 g
//这个位置无法放
$ ?% p0 o0 u0 n, C0 W% V nDestPos++;
, T# C9 X/ t/ o0 c' F: Z) \% O }: {4 V2 z: b H) z& D5 l/ Z' k2 p
}
: A. T6 `4 F- _) K, d K& @ BYTE nSrc = pInvSort->GetItemSrc(i);! ]& B: ]$ @+ g/ z" h# [: ?
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);- e' n5 p; k3 W C" e) d$ {2 a
if (pItemElem)
4 r1 q! D8 I& m2 t {
1 }# w1 k) _8 x) h2 q7 {6 @ if (IsUsingItem(pItemElem))
; [& I% e- A* | {
4 T. T; k! n/ M3 Y' I$ E //这个道具无法移动,跳过& H9 U! |4 x+ b$ Z. _9 N% s
continue;) }/ ?! H. r. C; q3 o7 l( J& L
}
4 J+ [3 B$ N: T$ C& D4 X }else{
) M) e% G/ t' ]. l# s& T: {7 P# V //空位置 不用动
2 R2 q& x1 k9 S. o continue;
* g2 `9 X! Y& i }
! J4 A8 g, R# g- N* s //////////////////////////////////////////////////////////////////////////, _ n' L" {7 c
//开始移动9 _9 L: b2 o% v1 Q$ @8 E' _' i
if (nSrc == nDestPos)
0 z% I9 _% T: Y( ~. Z2 ~) ?: z {7 g: ?$ h7 Z* o. i" }- o0 t
//原地不动4 a* o+ z+ n. k: O/ f; M% k
nDestPos++;' q) N3 O; g: F! D, I4 @6 |+ f
continue;
6 E$ M G% J; A: x' U: B }
- ?* s* j, L& x. w2 e9 k pInvSort->MoveItem(i,nDestPos);4 J. r5 w9 i- Q( Q
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
2 i5 t7 ]$ u" T6 P4 h+ C Sleep(5);
4 i" G2 D' z0 F' L: J/ A9 x //Error("移动 - %d->%d",nSrc,nDestPos);
% Z7 |! {9 }/ W nDestPos++;) V' l& Z. ^# K& X6 a
}
$ v H$ r. W. F //取第一个元素的信息
+ h `" K( m: {& m% ~- I4 i" i, K9 i /*5 p8 _% d* P; {: o9 |
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
3 F9 A2 c5 l7 C! A" \2 t0 ? {
8 t+ ]! n' _/ k1 A& |- j2 E4 W Error("Move - From:%d,To:%d",vItem[0].nIndex,x);$ \* p5 s5 y7 ~
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);2 ]7 ]9 Q4 {# d) F" g
}' V& `; f' o# E/ y1 e
*/
o# y6 s; K% W //////////////////////////////////////////////////////////////////////////
. `3 m/ R e* Y! X& a. _ | break;
9 B, e: i8 u8 b. i$ T3 Q" L }6 o( N% L3 h0 j( Z& x/ z; w$ r9 K
}
6 Y& Y; b2 d# R- `" P2 F}
* @; Z6 q; z" _1 w% am_wndMenu.SetVisible(FALSE);
4 E9 s8 u; F+ q& {3 ?$ W
# a# Z- M& e @" ]/ v' z* n/ C-------------------------------------------------------------------------------------------------------- T) e1 r, T8 g( j% @
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
4 O- B# H$ ~2 ~: Z& J{
2 V Z% [9 M$ n2 m1 O/ NBaseMouseCursor();. r+ c' d) t: F' l& m# k) K9 V
}
' D: L! S! Z0 e8 J. @* e在其下添加:
3 S+ y7 L8 M- k8 x) Y5 a2 avoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
! y; \3 b7 U) i1 }{
3 {2 @) q# N6 A7 Q* {) Om_wndMenu.DeleteAllMenu();
9 t- \0 O# r5 V3 s$ D5 }" nm_wndMenu.CreateMenu(this);
1 k8 D- ~% U6 ^+ h5 Qm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");( c9 X0 R6 d6 T; r2 L
6 r$ m+ m5 a, s. `( ]8 Uif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 D A; [9 o0 Q. J/ S{
* N% t5 |/ h* I+ a //P以上级别才可以删除所有道具
, a$ ^/ s$ \/ g; u2 [ _: p: } m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");- X Y3 `+ N" N& m$ J1 C
}2 s+ `; T: z3 `2 A+ |, K
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );9 M6 `+ q7 ]$ h C* T
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
/ { r! f- ]( f; em_wndMenu.SetFocus();
) v# e4 T4 t$ j) `0 E6 {}" H1 [4 S( H2 n! l. S
------------------------------------------------------------------------------------------------------------; l" W1 D% I" W/ y" O: M1 l8 \) v
*************************
& @6 |9 s' H+ ~) U4 _WndField.h文件
4 W6 N n# C \% S" |% h*************************
1 i- C; S: r8 c D$ v搜索:BOOL m_bReport;) @) F$ |8 d+ N# m6 l9 `' y2 g
其后添加:
# {- H: {7 }: i7 tCWndMenu m_wndMenu;
5 V# Q( ^- @& t/ s搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);1 f* Q( J+ ~2 O6 S2 Z
其后添加:
3 `, X& f n! M* B; o N& q) }virtual void OnRButtonUp(UINT nFlags, CPoint point);+ h. \8 I4 E: G& r/ ~
) o- a* C6 ?6 A) i+ L; h
# \" K8 e9 F* ~- t$ J- ?* f1 W |
|