|
|
源文件中_Interface文件夹下WndField.cpp文件( I- l! V6 z/ _' `! u
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )* c& @3 j; R ?6 _: k% q
^( o9 l4 S# U: g) i+ N
struct sItem
; b$ m: e3 c$ F# A5 s/ s; ?$ p{
% D3 k# O) U t& e5 A5 G9 GDWORD dwId;
3 C" W9 r7 `! J7 | v" FDWORD dwKind2;. e' d* X4 e5 T8 t
DWORD dwItemId;' K( X( G. t% r; z5 X @! M
BYTE nIndex;
& h' J5 i% m5 A$ k2 lsItem(){ o6 k- ?8 v: n
dwId = dwKind2 = dwItemId = nIndex = 0;$ I( m! v- O) n2 n( A% K$ A; m
}1 J+ b6 C) U4 ?6 k
bool operator < (const sItem p2)
& N3 i7 d$ u8 q. d3 t2 C6 N9 U y{
& c3 _5 q# k- @+ H if (dwKind2 == p2.dwKind2)
: i; H+ Q P' x5 D( o# ^ {* [- T) N5 d5 q4 R: x0 Z
return dwItemId < p2.dwItemId;
0 I% k8 R( C" |7 l& _2 y4 n1 C }else{
4 X1 N2 J& X6 r return dwKind2 < p2.dwKind2;+ X# P m. j$ m: J; u6 ~! v
}& I3 ]& t" R& W8 U: f2 x6 W
}* s. B- N* S. M: A5 R
};
& z. L: Z' V* R# j! n- rclass CInventorySort
2 G4 J# q* Q3 H2 T{0 M$ e R, D6 ^ Z9 s
public:& _$ @4 [1 y" u7 S% w/ {
CInventorySort()8 T, f& j" L ]5 q/ e7 z9 f" b, n+ X
{
& G& `7 }- J: r) S m_dwPos = 0;8 }$ @) J7 L" W; Y" e- |
}
& U/ Y8 X- \; u* @~CInventorySort(){}& j& x+ h, ?% B+ \6 u% p, l
private: [6 n) W" H. o! j( G1 }: I" l
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息1 P& }* ?! r! c* ?1 \* h
DWORD m_dwPos;
# \" Z! S, Q; K5 Upublic:
; S( [/ b! h" D2 \1 v2 J5 g: ]void Add(BYTE nIndex)
- U! g" m6 o8 d0 c3 `7 x- V0 y; ~{
$ V3 R( l7 D& @# Z! I if (m_dwPos >= MAX_INVENTORY)
/ Z) |, M, {' Z! Y- J/ J" g$ I {
' {- n& e. F3 t4 g) C: w return;
( \$ ]* t" N/ P7 T7 ~4 W }
) l1 ^. G1 f9 T! _! R& G, j m_Item[m_dwPos].nIndex = nIndex;' O3 M4 f- k# w2 K# E: {- b7 E
m_Item[m_dwPos].dwId = m_dwPos;
& f$ ~, |' r- Y. f" G6 d m_dwPos++;, t* G/ N, V4 `8 d9 e( f' y
}
H/ t" p2 Q- n& E; D4 xBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列: j. L: Q1 D& L
{+ B7 U# B$ V& X; p/ R* Z0 g8 l
for (int i=0;i<MAX_INVENTORY;i++)2 n- b3 G' \0 T3 ^' ]
{
" ^5 ?; y- |* T5 p if (m_Item.dwId == dwId)$ n9 y% B/ w0 z
{# r; B8 v4 n0 |$ [
return m_Item.nIndex;; d3 b B1 s2 H: h+ i- e
}. Z% i5 W9 T# ]- }# S1 L
}
- [; L5 |( e* r: U6 I return 255;' i; Y3 l9 L- C0 F% o2 F
}
) L2 ^3 [6 l7 ?! r/ V; j. avoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
( _2 U* J$ ]# S5 W8 Q{
$ F( a! q' z' f BYTE nTmp = 0;
+ C; U: b& Y7 c4 } bool bDest = false,bSrc = false;/ g k! B4 x% d, H3 I
for (int i=0;i<MAX_INVENTORY;i++)
( F; ]; [& V) q6 n+ n Z {
" L1 ~4 {9 n2 ~3 E% c$ D$ r/ ~ if (dwSrcId == m_Item.dwId)
! c5 v2 `: b+ W' c R {
; l9 W* a7 L7 F! ^ //id相等 则 改变对应的dest和src: d7 `1 Y9 p1 I9 |
nTmp = m_Item.nIndex;
& S% C' g+ C, L6 k- p. S# ^2 | m_Item.nIndex = dest;
2 ~( }: s! s" w. ]* T }: R( T7 s, L9 t+ u* R- v) {9 }4 A
}
9 v$ p K7 {8 l7 I //临时数据保存完毕,交换开始" W0 ?. h9 G8 `! \4 w/ O+ u; }
for (int i=0;i<MAX_INVENTORY;i++)3 Z/ u. B8 z. `3 u" f" R0 e
{, F2 P: E# t) G8 ~
if (dest == m_Item.nIndex)( P( k; Z: o& ~+ Y @1 U7 [
{
1 K# b! J: D- }- Z/ O: ^ //id相等 则 改变对应的dest和src4 b6 k8 S4 ^6 f) ^
m_Item.nIndex = nTmp;' F. O& ]! q! z: V0 k1 \
}, l- R+ u" b9 r$ n! q& A$ n/ |" M
}
1 A1 v4 K: x" ]& _/ {* Z ?! C/ N}
2 g2 x P& B" `4 C; T};
- n1 w: [/ ?. _9 A7 U-------------------------------------------------------------------------
& \, }' l5 k! l) H: l$ H" P/ @依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
N# }' I, [. [5 n6 x% S搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
4 E4 K* I5 H* N* c. p. H紧靠其上添加:: d% k3 }2 x4 g0 \; l6 i
if( pWndBase == &m_wndMenu )
* _* c- O5 l7 T0 M+ s{
. E3 t: q) _, z2 `- \% N: x switch( nID )
0 Q. N5 D z+ Y6 ]& o {1 t- d4 s$ A" T& B
case 2:6 Q: y! D$ R$ k+ n$ u- L
{
( `# ^$ Z2 V/ S* O- B( d% v% F //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);& x* z8 c6 R. \
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& c# v6 j1 `4 p H" B" ~7 e: ~ {
9 d3 w* y1 ]' B* o6 G8 n( w break;
) H6 e2 x {6 y3 ` }
: ]3 Z R4 J, c2 w6 V for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)- d) U7 a! e, Q" E% a# y
{ b6 e* k3 v* y! q$ [
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
+ j! q2 b2 i* }- B* @ if( !pItemElem )
$ @) | u' q% S1 t: [* N continue;. [* z4 {; [5 Q& V: ^
if(pItemElem->GetExtra() > 0)1 q2 E1 C/ B: Z
continue;( u- M) U4 w3 T; a6 l+ [4 f
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
. y! Z% W: ?. z& z* y# g: H, i continue;
" {8 I- Z# h5 Z$ K# A5 d if( g_pPlayer->IsUsing( pItemElem ) )
* w& c# M2 l E) R) D continue;1 D: Q! p: @# @3 {1 Y) C
if( pItemElem->IsUndestructable() == TRUE )+ h' }+ }/ \2 d! @' |- V
{
5 r2 K3 _+ w$ W. n0 Y5 P g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );# a% B# W! Y3 F4 ]9 ` \% r
continue;
0 k" ^. t& n2 l' a }
! @* v3 B& P7 B/ W9 g; S g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
2 A" Z! S+ | c$ q1 ~! b }) y$ a, A6 {; x2 h; W% G! {5 A; M ?
break;
3 G7 }+ K" n& V7 \. O M$ F" m4 U }; T# W" x! k9 X: Z L0 }
case 1:
+ m% o0 M! Q8 c8 T" B) L2 ^1 j {
/ h5 C5 a8 d+ [5 x$ _1 P //整理背包1 A9 i }, q. e5 B) f- j
//////////////////////////////////////////////////////////////////////////
; \+ `/ y# [+ v' ~- ] //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
. M3 w( h4 O( U, e$ o //////////////////////////////////////////////////////////////////////////3 {2 v5 z/ u9 k. a
//////////////////////////////////////////////////////////////////////////( n3 D- `' A& \( d; I2 B6 R
CInventorySort* pInvSort = new CInventorySort;& X" s. j7 ~3 \* h
vector <sItem> vItem;
( G8 d( B7 }# Q# c1 C vItem.resize(MAX_INVENTORY);//初始化大小
" C4 O, e, z, u, B5 ^4 t0 C' c //////////////////////////////////////////////////////////////////////////2 Y6 p$ ~3 \5 ~) v2 v! g. C
//填充数据+ ?. b1 b2 f* ~6 O9 G& M% y0 }
for (int i=0;i<MAX_INVENTORY;i++)
r l1 B; Z8 ?: q$ t3 L {
& g, W2 p P' J% _9 b, U" v2 \ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, G7 k9 H N$ ]+ o
if (!pItemElem)' j0 `0 j! R- O' }4 a# \
{9 `# t8 }4 J ]4 K! V" Q
vItem.dwKind2 = 0xffffffff;: L, K {- ?) z8 c) K
vItem.dwItemId = 0xffffffff;
4 [3 S- E( O, [) X vItem.nIndex = i;5 ] b+ {- ^, i7 o! H
}else {3 i' @3 S5 k; M D1 \0 N) }
ItemProp* pProp = pItemElem->GetProp();
; p, X( i# k) e% `+ v- ] vItem.dwKind2 = pProp->dwItemKind2;7 @3 c5 Z% w7 `7 n5 @2 z
vItem.dwItemId = pItemElem->m_dwItemId;# I- O9 h( F" _* s' S
vItem.nIndex = i;! ` M/ ]6 X# F: l- o
}. i5 h3 A2 @% p; Y. v
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ g: E/ x s3 L6 j' g4 O }: ]4 {8 X& H/ h( z; ~
//////////////////////////////////////////////////////////////////////////
& P! X- i+ U; _: Z sort(vItem.begin(),vItem.end());//排序
$ s0 K) S" T& Y2 _$ K //////////////////////////////////////////////////////////////////////////) J" ]6 R2 V: T+ G
//交换
! D- a& h/ ]$ W) b1 H for (size_t i=0;i<vItem.size();i++)
/ v/ h* A4 W; w9 n" d9 @) P {
: H1 J, D' ~1 j! H0 i0 A //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& A' r5 J8 {4 M5 Y8 A' W
pInvSort->Add(vItem.nIndex);( [' Y$ }8 \$ h3 F6 E# @4 Q7 g
}$ n2 n1 L r* l& M0 P" g
BYTE nDestPos = 0;& d2 p! z8 B4 @. d1 ?* O8 x' P! I+ ~6 e+ a
for (int i=0;i<MAX_INVENTORY;i++)7 H( \, b! W, Z8 J
{( \: e. z( Q6 f7 N w% A1 X0 H
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
3 g* L+ X9 i7 b2 Y7 n4 S if (pItemElem)
' d2 i) {) x: r( n; w7 a+ N {9 L: I% ?$ P: m8 D* f
if (IsUsingItem(pItemElem))
! y3 S# T* k" f7 R3 y: t) | {7 s" l5 m% f I0 g+ K
//这个位置无法放4 R5 x0 q! c2 Z3 m/ _
nDestPos++;
/ Y" F( D# J" X+ R" | \ }
! D) G! H( q2 a }5 F5 U' n; A5 `7 u4 @
BYTE nSrc = pInvSort->GetItemSrc(i);: f% [- [' _7 F3 U
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);1 O9 @- T1 N, `1 z8 {( c( ~
if (pItemElem)7 {1 c" Z) Y9 d& e* Y" h
{
, k5 T' @# `3 J0 k8 N if (IsUsingItem(pItemElem))( H$ L+ I* y/ ]* C, R0 V
{
6 T+ P! d$ ?! G% {1 O' [) I //这个道具无法移动,跳过
* N+ z/ |- s7 U( ` continue;' z, z; F4 q$ d$ R6 x+ v; U; c
}
) ]9 [2 g3 m2 s- {! E" P& r }else{
( X3 \- P1 o! E# g; {* }! n+ X) u //空位置 不用动0 |5 u$ Q3 X( N x: O! n7 v
continue;
! c. T! Y3 B; J7 A! O }$ s: }2 \; }* \
//////////////////////////////////////////////////////////////////////////0 k2 Y6 [6 {$ F. G3 H6 |6 g6 a1 Q+ U
//开始移动& U; J p: T* r1 G G
if (nSrc == nDestPos)0 {5 P# ? p; L, D9 i, S
{
$ S/ z$ o/ ?) c/ F //原地不动
5 ?' e9 b2 S0 G# Y. `% Q6 w nDestPos++;
2 b- [& A5 b1 r; f: H continue;9 m# J) \! D4 `9 ]
}: J) A$ O: I' K
pInvSort->MoveItem(i,nDestPos);' \) E1 H" v' n# ^, K$ J
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
" a3 S) M3 s; c9 S5 @% k Sleep(5);
& r% m; }$ T1 F% d* H1 M //Error("移动 - %d->%d",nSrc,nDestPos);
0 Z1 D8 E f& W; g# w nDestPos++;# y# ^- j. O" L5 K. v; p- n9 j2 j; ]
}
+ G$ J- O4 E- z, T5 ] //取第一个元素的信息: Y( y5 ^+ Z# X3 |# \" O# D& x
/*
! |4 F# I T9 [ g& O2 S, z0 ` if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)& s- X2 M5 f6 r, y& h
{9 P) K1 g4 q" b0 {* ~) C% e
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
% F) n) m" A1 g6 U g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
s( q0 M2 m! |4 \ }: ?$ q+ f+ T6 }+ o
*/
' p" s) Q3 e/ \2 Y+ I! X1 z //////////////////////////////////////////////////////////////////////////& P4 M& g& g1 |% Z' f- y% p
break;, H4 r# ]2 G0 t5 o3 T/ A
} u- t+ _/ [8 Z9 \9 ?( F- u
} * [& k* ^' m) a- } A) H
}3 [4 \. x9 c: J; W- o
m_wndMenu.SetVisible(FALSE);
' a+ l( k# L0 |
2 l8 p" G6 S/ |% n; e: i% ~* p--------------------------------------------------------------------------------------------------------) [: N& w4 E4 t. u) A) @; B8 Z
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
2 ]/ A. f, c/ z. W7 c) y. r, d& b2 d* f{
% M# O8 a& B6 q9 u# Q5 ZBaseMouseCursor();
8 ~; u* h$ @4 v2 O}+ G- a1 o& T2 P z4 i, c; g
在其下添加:
* F4 v1 V1 N; v) t6 r. Qvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
- A, {3 t E. h2 ?8 J; |{' ?8 j) y) ~+ E; K7 i
m_wndMenu.DeleteAllMenu();
- {" _: K/ y: s7 dm_wndMenu.CreateMenu(this);& r X C- W" x3 H
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");- X# q4 R9 L* W
/ L+ o% k1 A) S9 _" w9 J; e% b7 jif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))! I# S; t, \; _% c9 r# r4 W
{
9 z7 B" Z1 z r9 l/ [% f4 s //P以上级别才可以删除所有道具- u$ ~: B% q( |' c$ P! P" K* K$ v; R6 o
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");( A' U3 R. M' ?! w# J, r
}
6 V0 s0 G- r! H( c3 T# pm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
# G, q. U( Z# X$ F+ Jm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );2 D5 L U3 l+ k+ J' r1 O' P8 D
m_wndMenu.SetFocus();$ L9 V' J' b' ~, }' M" j F
}2 [" X8 r, A3 U
------------------------------------------------------------------------------------------------------------
2 }( _ b5 L$ E" R8 o2 B# }*************************
5 {& w& G; m/ \7 Q, J* r% m0 WWndField.h文件
7 e1 `. T+ K8 W8 S) X*************************1 z x$ i8 h6 G2 y- \
搜索:BOOL m_bReport; Y. [. c% {" g5 m( t; v
其后添加:+ y1 v+ ?9 t# K7 o- V7 Z
CWndMenu m_wndMenu;+ C$ h) R. S! I6 L
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
+ q+ T" ?1 V* ~, X- j2 `其后添加:0 B* J1 \* O( y7 e+ M9 I9 a* \5 c
virtual void OnRButtonUp(UINT nFlags, CPoint point);
0 t# V4 J: e+ ~5 _4 Y# P
$ P( L4 D# N/ q0 X- Q7 N b8 P- K' c% J5 I+ H
|
|