|
|
源文件中_Interface文件夹下WndField.cpp文件
$ g6 O+ p0 H+ i7 z- R& L搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ G% R3 ]0 M G4 v+ I% a6 M" u- m' V* q, H ?5 O
struct sItem7 j8 a3 p( R( c8 @" N: E; K7 ?6 z
{
; \6 D- n2 ]/ pDWORD dwId;& m% ^ D$ Y& z1 a* {% ?4 Z
DWORD dwKind2;& Y. D; w& y6 ]" L% D6 y7 e
DWORD dwItemId;
! ?+ x# A. p# p- `) }BYTE nIndex;
1 z6 u4 ^0 i, V# JsItem(){$ D# }$ Y+ y8 D- M6 o
dwId = dwKind2 = dwItemId = nIndex = 0;$ ~: ], l1 U2 I* Y$ D: P) |% u
}
, i$ L2 B0 u: y7 e( F) D' }bool operator < (const sItem p2)
/ a+ N6 E P$ h+ i5 P' F{
; h; u& R9 ]7 l9 N if (dwKind2 == p2.dwKind2)1 l4 Z# `% N; o. ^5 y9 [8 I
{% j0 w7 Z' f1 ^) c+ h2 b; }+ T2 }
return dwItemId < p2.dwItemId;' V* d- M3 Q" G$ D
}else{
3 v( @. X4 U1 L8 p return dwKind2 < p2.dwKind2;# r, l% N) m- x/ B3 e
}
* {7 Q9 {$ `* Q5 T+ C}# u) r( m; s7 T8 d/ S2 F% l) l
};+ C* t, a; O- `1 \9 u; Q1 L
class CInventorySort
" V1 G0 ?2 Z! J# |) u" [% a$ w{2 B' g7 L4 I; T5 |0 M3 d8 }8 C
public:; T e4 U! G0 T# V
CInventorySort()1 M6 V& E$ l7 p. M6 |$ A
{+ c& V( P: ?( a; b
m_dwPos = 0;
: U% f- l7 r1 W: I/ W}
/ K( z. J- ~/ W3 {6 G2 w2 a8 I" _" `~CInventorySort(){}" O Y5 X6 y$ Z: e2 U+ s% }
private:
% [1 N0 m! J9 g7 asItem m_Item[MAX_INVENTORY];//存放排序好的道具信息* a/ E @# p" C) D
DWORD m_dwPos;: w# f A- \$ M$ \) N
public:
4 z, U+ Y J! i2 fvoid Add(BYTE nIndex)
, Y2 K1 Y/ F2 }2 a# T{3 {4 A |: \2 `$ v
if (m_dwPos >= MAX_INVENTORY)
2 w1 o% c0 z' a3 v {
Q" i7 Y# \$ R% T return;3 a; g0 Q1 B; X1 ?1 R0 W" U
}+ q# H- U- K$ `2 ^' h1 [
m_Item[m_dwPos].nIndex = nIndex;$ p" M8 ?! V8 ]) y( R
m_Item[m_dwPos].dwId = m_dwPos;) c1 a# V' |# P# b; E- P6 Z
m_dwPos++;
; V( d( Q! }7 u5 r1 z8 [}
: T9 c+ \8 E+ ?: u& l+ p, Y: ZBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列 t7 o/ o' Q0 {9 A
{( ~) p6 P6 Q9 o8 |0 W
for (int i=0;i<MAX_INVENTORY;i++)
8 `1 t/ O) H2 T1 s" ?1 ?3 R4 X {
! }+ W7 ?, g) j @ m+ K1 j( k if (m_Item.dwId == dwId)- {4 Y7 Q) v: G U- Y! g
{
4 a }% | Q/ Q; m+ a$ V8 l return m_Item.nIndex;9 n+ ], B9 U2 \7 E1 f& A/ ]9 x
}
1 h& o3 k! H4 g y }
f2 [+ J2 w5 F& C7 n return 255;
0 s9 w. E. Z3 h6 e}/ R7 W* |: m; a2 U3 {1 Z7 d1 {
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
! v$ ]5 T5 w, }{
, r* Y3 K. @1 y) y6 W. g! s BYTE nTmp = 0;
+ [/ t% O7 \* y/ l$ v6 k& ?$ W bool bDest = false,bSrc = false;
! ~3 W8 b% w$ J m0 F" a+ q for (int i=0;i<MAX_INVENTORY;i++)6 W' ?* }+ K' I& {; q% Y
{- C) K& r0 l$ L6 u: d
if (dwSrcId == m_Item.dwId)
# f% n7 W3 v6 {7 h* t {
( v7 H& R- N$ b1 @$ c( m //id相等 则 改变对应的dest和src
: p3 x7 q# D2 ^' w' g" A2 V+ B nTmp = m_Item.nIndex;
5 ^+ m4 T; K5 }1 C" l$ ]3 g m_Item.nIndex = dest;+ |' R! T t; u9 N# y2 L: p
}& y5 Z6 _- V7 x1 x
}
1 W. |& j7 U2 l4 M& M+ B //临时数据保存完毕,交换开始
8 f: c+ A: c8 Y4 J9 w; G for (int i=0;i<MAX_INVENTORY;i++)
! \3 c7 m1 j' A: S {
! t1 S4 I* l4 j* j( H if (dest == m_Item.nIndex)
& y& M* @8 D5 T9 @; L {
: w2 v4 H6 k/ \) ?7 Y //id相等 则 改变对应的dest和src
% `" d; A7 [5 e* Y9 v m_Item.nIndex = nTmp;
' S& F, o* n& h9 y' p4 N) A: ? }
6 H6 T) p7 {* x" o }4 K% E# W' @6 T' e' E
}
% w+ X5 X- i1 l6 m4 X};5 \, v: B- q. c
------------------------------------------------------------------------- q- K9 f' P9 t5 {; J
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
* U" ~0 \$ O1 C搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
7 \# @+ s$ o& R0 [/ ]# K紧靠其上添加:
3 G; N; ^* I0 B! Yif( pWndBase == &m_wndMenu )
% }1 a6 V' Z- O4 o- i& Z6 L{4 y6 [" p2 c* |* L# B
switch( nID )
& }* ~, i, G7 L; }8 ~ {
$ h" X$ i2 }4 Y case 2:! T9 q! q8 ~$ n' ?5 l% Q5 f
{
, O1 A3 d+ F, q1 ~ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
3 U$ |8 i5 K( W& s' y if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
3 A$ b K0 E; k3 K% j% P" T0 j {6 e1 k) t7 H" F2 Q
break;% o7 Z: g: ?7 `; U0 j+ U7 I( B
}8 N- X$ p8 ]6 e$ Y& N
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
7 {; g4 k5 w, H" r {
+ H, Y$ q' q, e* G. C% q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; i Y6 s. \/ i3 } if( !pItemElem )
! T) X3 I* u* ?2 ?, G/ \2 Z continue; `2 e* \) d2 g+ E1 o9 ?) g
if(pItemElem->GetExtra() > 0)
) T8 ~/ T( O% N7 z continue;
& a: U* t/ g% R ^& }: q2 r if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
7 b! K. S& x; \% T( U$ w continue;5 b" x ?( w3 w* o6 L
if( g_pPlayer->IsUsing( pItemElem ) )
! Q% o- i3 r* f continue;; I, X9 Z6 l, v
if( pItemElem->IsUndestructable() == TRUE )
9 ]* r5 _9 }7 e1 L/ J- \ {4 b, @. g- E* `4 l( x
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );: \3 D" ~9 X$ n1 `) \0 K" R3 u V
continue;( ~2 ?# U( T4 _- D# S# l \
}
4 }9 h8 C' ?& R p% c. \' z5 G) z g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
( h5 r F b( o6 w8 _) r3 ^; c3 G }0 g3 Z! C5 L5 p2 U+ {) W
break;
; M' ~+ v) ]9 ?6 G5 k* L }. a5 {1 b. B o5 @" J
case 1:
0 \) c$ D1 k+ R" _" C# S {; p3 x3 w7 s' v0 k# M( I
//整理背包
% [8 o" R5 j) y5 M- | //////////////////////////////////////////////////////////////////////////9 @; {6 u# ^! p6 i, h+ S
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
; ~8 n, _1 ^% G, \ //////////////////////////////////////////////////////////////////////////2 _$ M: k. c8 ^6 ~: Q
//////////////////////////////////////////////////////////////////////////
& K2 O6 U- ?+ V$ b8 l7 F CInventorySort* pInvSort = new CInventorySort;5 n- Y' f) U5 E! j
vector <sItem> vItem;9 s/ H6 a0 D/ C; w M5 N+ I) P) x
vItem.resize(MAX_INVENTORY);//初始化大小) j: @" z. A; l, @. J
//////////////////////////////////////////////////////////////////////////+ p/ ?9 g- a! c+ V, {0 D
//填充数据1 e6 j8 K& q% R
for (int i=0;i<MAX_INVENTORY;i++)
' b: k% V" k- K+ X# ^. q {
' f$ g" R$ K* ^0 V; p% Q% u& _ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 x9 j4 e+ q/ t2 t& t
if (!pItemElem); A# f$ s/ Y4 Y* e" j: m3 A. o
{7 G7 \ K! F4 s/ d/ b% [
vItem.dwKind2 = 0xffffffff;
/ Z+ r/ X$ N, ^2 E# v7 y* ~( \2 L* n vItem.dwItemId = 0xffffffff;
. Q" C' f5 A' l/ J7 E) t- m vItem.nIndex = i;
8 u- \8 \1 x# H" s. l }else {
- S$ M3 [" Q1 N4 H, O/ z5 B& T' E ItemProp* pProp = pItemElem->GetProp();
5 D- d' P' N8 ~ vItem.dwKind2 = pProp->dwItemKind2;
8 n2 Y3 s; p* w: E% P2 D& _2 e vItem.dwItemId = pItemElem->m_dwItemId;
) s% o9 y. y; C% b vItem.nIndex = i;
& n- u* ?) _- Q9 A% x# m5 c }
" P& K. Y% {2 @% m. U5 u //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, s+ P- V ?& q
}
% ]5 i9 l( I! B8 M9 C //////////////////////////////////////////////////////////////////////////
3 ]( M- t* E r- O sort(vItem.begin(),vItem.end());//排序; [: q+ h$ P! w# N9 A" c0 B: b2 \- x
/////////////////////////////////////////////////////////////////////////// {8 F% l- s+ d( N
//交换
o' D2 a$ L- n4 x0 D for (size_t i=0;i<vItem.size();i++)
! P( h# _' U, ^" e' J4 Y* ^7 _- L {
, f# v* x% t) d$ Y //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: N9 F1 x2 V. e) ~0 H* i pInvSort->Add(vItem.nIndex);
+ H) u6 X* L. Q4 V }2 E, G& K, r6 n. Y. n$ i8 f0 f
BYTE nDestPos = 0;5 v9 x; S( q- v8 {1 R6 K5 v
for (int i=0;i<MAX_INVENTORY;i++)
( {, J" T+ B: W {& s4 Y! k1 p+ l, z* s
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);& V; i+ T# l5 _% z, g6 C
if (pItemElem)
' ^: a3 T+ j* d) I& W6 | {" K& N! H. V" _! Q H
if (IsUsingItem(pItemElem))7 U' [* E' ^$ o
{
9 v7 ?4 @& G! S6 @: X1 I+ l //这个位置无法放
7 M# v7 E" ^; \* c nDestPos++;
# Q# w/ e- o! O5 {" D; @8 W }& x. e: Y8 I: `( h' u+ i# E2 k9 ~
}7 [; F; Q, H% J, g" ~
BYTE nSrc = pInvSort->GetItemSrc(i); i2 V* ~* c& U! _
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
3 f$ |, P/ B& o( G if (pItemElem)$ w8 a4 Z+ Y3 X% S& l S- b
{- o- N. Y+ Y. ~0 Q" z8 }
if (IsUsingItem(pItemElem))
% P! x0 P: F% {6 T |) o1 k {
}5 ?3 A) R- V //这个道具无法移动,跳过
$ g4 `' G; L8 l* G$ |. O5 Z& U continue;* U; L' E; t) E1 w* C6 F
}9 J9 {4 g3 V F Z2 j' \6 ^- x
}else{: P% Y2 M, S) \5 ~* a+ [, M- c9 G
//空位置 不用动
( Y' I+ U. E7 C3 ]2 W continue;
" g2 _, L3 E7 t8 B7 C }
$ c" r! d+ W- I+ o //////////////////////////////////////////////////////////////////////////+ ?" A- C1 \2 X) I8 {: C
//开始移动
7 w }& V& r: S1 p if (nSrc == nDestPos)' H! P: @% L3 R& r* \$ h2 ^7 T8 S
{& l; d0 q/ i6 r) p) m. f c
//原地不动; U. t2 q+ C4 x
nDestPos++;
3 Y% i% x2 _. @7 H; v: q continue;" B0 p1 _' L8 {
}
' i- K5 b) E( }) P$ y5 U- }5 ^ pInvSort->MoveItem(i,nDestPos);4 e0 |0 W4 J# P0 l2 y1 |, C# I
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
! b5 s9 P) W. G2 G7 q Sleep(5);) D7 P- L8 B; _ f+ F
//Error("移动 - %d->%d",nSrc,nDestPos);
! l! ?3 P* r8 U7 ^ nDestPos++;; r) s7 D' t' n4 }) o, a
}
; r1 T# m# ]' W% n! F) q0 t //取第一个元素的信息 c' X2 v4 E5 o [$ r( M$ z
/*
+ p9 l" z1 ~! I$ Q$ V- m% M if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
& @" Z L& _7 ^8 S {
! W5 L- k1 v" n3 o Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
1 E* R7 Z. ]( k g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
2 ~4 i5 Z5 K% x: \5 I }
& T! w) L2 H. L4 x5 z */* G# r: |' i5 m3 v' [
//////////////////////////////////////////////////////////////////////////
: z7 P' p$ M8 E2 o* d break;9 M& X; K: l5 ^
}
3 X6 D8 {+ W* R7 N+ \ }
. w' y9 {: p) {}
7 s+ W+ Z& I w! @3 d9 Lm_wndMenu.SetVisible(FALSE);, s, l2 w. c; m- S' h
7 d3 ?$ T! B4 m6 u H3 Z: y: \
--------------------------------------------------------------------------------------------------------* g2 J8 I/ O2 Q& l+ J. p
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)3 Y$ C- b+ ?! B1 ?0 d0 b% T0 E
{, N3 h$ }6 _# y7 Z8 O% N
BaseMouseCursor();, {$ c1 X$ B0 z6 @# S
}" I, e1 u" i6 p0 ?/ W' ?& z
在其下添加:
1 T9 G3 N% E/ U0 d" z3 ~void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)" i, L" U. K0 p% |& A+ u7 A
{
3 l+ n; N, b+ R" p, r2 ]' h7 Tm_wndMenu.DeleteAllMenu();
0 ?, N$ A4 R( J1 V$ }+ [m_wndMenu.CreateMenu(this);
3 v9 Q8 m; I* s3 [) vm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");1 s* {" W, O2 i8 y5 r9 e
/ S$ d6 N1 ~: L
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" {7 R. m$ M2 V# x* H# I{
( a9 v8 h* @5 W; X, M //P以上级别才可以删除所有道具1 y0 w( W- V. D) I
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");2 ]7 w1 p4 j5 J4 H; {4 n! G% L" y0 T
}
3 O8 I0 F7 L3 f2 u1 f* b9 W- f0 a2 }- Bm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );* T+ B- K( D+ g% ]7 U
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
0 @2 G; @3 i7 W4 Sm_wndMenu.SetFocus();
! k. }( H! j8 T( {9 T: ?4 y}
$ x% I# n: R* i------------------------------------------------------------------------------------------------------------
$ x8 {; G! F5 _; c4 A" i# L% L*************************' a6 u, o6 ]5 i' @" _) w" |
WndField.h文件- T3 ^6 F. @ V/ V* a% ]; _7 V# P4 K0 b
*************************' Q" q. P& i" X% v! c/ T
搜索:BOOL m_bReport;
3 @; `$ _, P& q其后添加:1 m( J# u/ T2 Q$ y
CWndMenu m_wndMenu;& T9 Y2 o! n/ X9 l. j( d$ s
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);: M- S* M' U0 |3 L' F
其后添加:' \5 p" _& U0 H+ _- q1 e
virtual void OnRButtonUp(UINT nFlags, CPoint point);1 s' m- p, y$ c7 m
5 f5 g) j, J7 A4 U+ ^, u* D
1 M) W/ j: W+ j* C" y# |3 [
|
|