|
|
源文件中_Interface文件夹下WndField.cpp文件
) d6 U) p. b v4 I( V5 s搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: j, S5 v4 ^% {. p( W7 [4 Y7 B6 O: L* g' \# U
struct sItem+ D& U' M7 f- |% H- Z
{
& W3 E# I8 b/ i# fDWORD dwId;
8 m9 I; X- h& t5 }9 ?$ ~DWORD dwKind2;
4 }6 ]' [. f+ x( n4 G1 O7 XDWORD dwItemId;4 T0 F. c/ O9 Z1 y
BYTE nIndex;- Y7 W2 j9 k' W
sItem(){; G% h2 `+ y8 ]- P
dwId = dwKind2 = dwItemId = nIndex = 0;
5 q9 ?' B3 o$ ]}+ q+ \' |- h2 M% {7 V! k$ U, @
bool operator < (const sItem p2)# @. K! v4 {( F" \* m# c4 Y& m4 m
{
% v& g, M$ G- I2 T! ]) T0 E if (dwKind2 == p2.dwKind2)
2 E# }2 U7 B8 x, C, y8 j {
5 A4 y, A9 v! m8 `% F" \7 F* M' t return dwItemId < p2.dwItemId;
) \3 n( e/ ]! T* t0 ]7 B+ D }else{
- d. @0 Z V# O: m+ ~( ` ~ return dwKind2 < p2.dwKind2;) z! {2 l) v4 q& v5 p3 f8 n1 m
}/ b+ t) z% S+ C) h, b$ |0 i4 I
}7 a' g& \: q y) w
};# b& a- P ~' N& ?' i4 w
class CInventorySort, H/ M' [4 g6 _9 X; m% C! n3 b( C% k
{
4 j8 _$ n$ [( X9 q2 {& x, cpublic:3 ^/ L- y$ B5 l% K8 f
CInventorySort()
& S# M( W5 W! q/ L' M: |{* V: R5 \8 y0 h' F4 p, e
m_dwPos = 0;2 @7 L! U6 _( V7 o- X0 a7 h; q( C" J% \
}
( S* B& h6 x6 I4 X0 s; f% e~CInventorySort(){}
. Z7 [( u7 E! S7 Z* o7 z4 qprivate:9 m9 j3 ^* t1 b$ f
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息# \" w$ a' ], K, J+ X- t
DWORD m_dwPos;* M2 X2 j r1 B
public:
% @: t/ J. O% m4 \5 Evoid Add(BYTE nIndex)
+ l Q4 j; u( R6 G2 R{1 \, D) S2 I$ a# {
if (m_dwPos >= MAX_INVENTORY): ^# X8 S$ j: b9 K. ~* c! |1 V
{" O% x/ E. {% [) j
return;
4 H) M( S7 v6 ? }
7 C8 h4 W9 {: y. k m_Item[m_dwPos].nIndex = nIndex;
- [9 X" S6 B- @; S: _% c8 s% O m_Item[m_dwPos].dwId = m_dwPos;
5 ~& B3 i# Z3 v- F( z; A l m_dwPos++;' g3 V" c# t7 b! z$ ?, j9 {# ^- ^
}! r" q# R/ M5 V+ `. R* T
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
! u4 i C p2 X; j{
' Q% Z& w. E w) ]* _4 t for (int i=0;i<MAX_INVENTORY;i++)
* o3 }; W# R. ^; |& a: j {1 _ D: o0 o/ a) M
if (m_Item.dwId == dwId)
% [7 F( ?, N& | {
$ n' G# _) n3 k! J return m_Item.nIndex;
! Q4 c! g9 H( d& s }
, `2 B. K# h- B3 h3 O* m" T }8 L* I1 L+ |" H& m
return 255;
$ X% Y; K, E; B}2 N* v$ x/ A6 R& R5 l: H7 r9 C& p
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置% E; w* a2 W+ f8 E; `# {
{
/ o% y Y# t# S6 _& l0 O7 j BYTE nTmp = 0;
2 w8 V% x# j$ Y bool bDest = false,bSrc = false;# P; Y6 t4 H9 [ q' W
for (int i=0;i<MAX_INVENTORY;i++)/ X. \9 U* t/ o7 u
{4 \2 G' U( m" p& J% c
if (dwSrcId == m_Item.dwId)# ?6 ?1 c. P. l1 l' {7 G7 b! y
{- }/ z, Q6 g2 G& s* U
//id相等 则 改变对应的dest和src
1 S$ E8 U& [- m- I; ?! K( U1 ~; U nTmp = m_Item.nIndex;
3 A3 t$ \6 Y" a m_Item.nIndex = dest; ?: b7 |& l9 s8 m9 [( n
}
0 K- V( d7 c2 `4 B) u8 Y }0 a+ g) J- r8 G7 w4 b/ G$ Q
//临时数据保存完毕,交换开始
- J& F, a- V4 @ for (int i=0;i<MAX_INVENTORY;i++)
5 N; [1 \' N* E2 Y/ j! |$ }% x% I& W {
( Z4 L; G0 L( @& P/ P* H if (dest == m_Item.nIndex)
# Z; i) G! F0 z O% K {( j3 x6 ~" b& y1 A6 ~
//id相等 则 改变对应的dest和src
' D+ r3 @3 X3 a! g m_Item.nIndex = nTmp;
( l; ` I3 N9 m( l0 f5 a }1 A1 J- E0 ]) z S& q; ~
}
. S% M5 J4 r9 s5 O1 C" S* `$ @}
0 a- L( }+ d2 }0 b9 Q};7 W( G7 m& v# _
-------------------------------------------------------------------------/ Z0 H- U' N7 }1 `2 q% ^+ n
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( a4 b" ~, I! E X8 r9 W
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase); s# j: u6 l- w$ y# D, Y
紧靠其上添加:
; s1 t- `5 P2 sif( pWndBase == &m_wndMenu )
& \7 b' ^5 `0 a! l4 K; Q3 p( l{
9 W# v7 G1 \; Z9 X switch( nID )0 D# e2 J7 T6 A0 U; `7 i
{
8 P! m' Q# D- n k$ ? case 2:5 K9 g. q' ]8 b
{
% b5 ?- O( `, F* I //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);* Q# I. l0 t$ J& l3 j4 q* w4 T
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
3 w* p* S7 c1 M F ]) w) C$ G. n5 ?3 b {4 d/ p8 e2 `1 u
break;
U# {6 z! o$ [/ h0 s3 W5 ~4 @ } D a& c, q$ X, P
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
$ J, e" Q1 A# e- r9 G C {
+ g7 m# |- F' H CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, ]1 M, o, u$ G! f- v if( !pItemElem )6 F4 I- `. F) l9 @5 A* n6 X
continue;3 O. y6 ?3 p$ {7 X
if(pItemElem->GetExtra() > 0)
C8 T- I* f' o continue;
% `4 B$ {# j" F* Z if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
* y. }' h/ p4 D* j( }5 p* ^ continue;
: g6 C; c# U& g# q! G2 B if( g_pPlayer->IsUsing( pItemElem ) )2 e# w% X4 F" J
continue;
0 X, h6 C8 O$ |5 o; d if( pItemElem->IsUndestructable() == TRUE )
- a# u) `7 D; f# g8 G- j+ T {
3 _- R. \3 I5 Q: } g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );% Z0 _% ^% i1 ~( G, N, v' c
continue;
) d& j0 D; q$ h4 q }
$ c- e4 o* O7 C/ q& S g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
& X" C; Y1 ?7 f }; Q2 T7 W! N) j$ o% I
break;8 s9 k0 U# n; o7 d2 S
}
5 W) X$ J$ B* c& G; w L case 1:0 K# ^: t& \- `8 Q# t! N# O
{
A$ c2 r; ~; q& W0 T$ z //整理背包4 x' {+ g0 f$ P, {
//////////////////////////////////////////////////////////////////////////1 o: |5 U y2 e: }# s3 D1 G
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
, V. C) Z: o: \. Z | //////////////////////////////////////////////////////////////////////////) |; P n" {# v" w+ r3 P
//////////////////////////////////////////////////////////////////////////* ]% T$ j+ x" ?9 N( G
CInventorySort* pInvSort = new CInventorySort; ~- O9 M' N5 s# x
vector <sItem> vItem;
- b6 t0 \( y4 ?; o9 B" w7 @ vItem.resize(MAX_INVENTORY);//初始化大小7 J0 o* [) o3 e/ g
//////////////////////////////////////////////////////////////////////////
6 d5 u h" M- {. I //填充数据; u2 L' W9 F9 ^' k; h# N. b
for (int i=0;i<MAX_INVENTORY;i++)
. Q7 z( f% |6 l( B8 O! O* |* a) |6 r {
7 _/ M: R* q! C0 M4 y9 K, l CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 C$ c7 A( J6 U7 T+ P
if (!pItemElem)* @. Y( K$ k' j. K% ?; y
{) j! K, ^* S R
vItem.dwKind2 = 0xffffffff;
) N. f2 b3 a# A- b- V% p vItem.dwItemId = 0xffffffff;
# A$ S9 H$ k- [1 }6 Y' h vItem.nIndex = i;
& `: U! y" k! B+ w% y% H }else {7 x) |# x2 I0 a& m
ItemProp* pProp = pItemElem->GetProp();/ O0 ~7 a5 g2 y+ h( a
vItem.dwKind2 = pProp->dwItemKind2;
5 B5 B) k& g5 O+ _6 r vItem.dwItemId = pItemElem->m_dwItemId;
: i5 N& k4 Z& X/ [& e6 U( { vItem.nIndex = i;' L6 I- z# }! @5 w. v
}
5 D( } b B8 e5 D- [7 L! R5 l //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; L2 w, S& J: e1 n- w6 ` }
/ q) ^3 |3 d* {/ a. X1 p //////////////////////////////////////////////////////////////////////////2 i9 n# k1 |/ |
sort(vItem.begin(),vItem.end());//排序! k" q8 w4 a3 x0 K
//////////////////////////////////////////////////////////////////////////. c3 \* y+ B! G/ ]# u3 a5 i6 q
//交换& S; y& q8 w' A9 I, N/ {1 P# l, B
for (size_t i=0;i<vItem.size();i++)
" y9 [! J8 S" E$ t) `, I% k6 { {
6 N" U* m5 h5 A- e: l' H //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, p# Y7 T/ E1 D0 u0 A6 r) o+ ]
pInvSort->Add(vItem.nIndex);- N- b- B5 u% q% |+ @; L
}) c! m3 |' C0 Q' _- E7 H/ x, M
BYTE nDestPos = 0;$ f% C5 A' H }6 | x2 x
for (int i=0;i<MAX_INVENTORY;i++)+ k6 ~ x9 z' m
{( Z7 N6 Z( V: w5 m7 t
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
1 t# O+ g, q+ l9 C if (pItemElem)* C' v0 D2 o7 d& [7 i2 I# O
{* ~: ^* }. c" x+ i0 a& \$ G
if (IsUsingItem(pItemElem))
0 E4 C7 T2 C( H. N {
9 Y9 A1 _3 n6 o5 Y //这个位置无法放0 T) ~5 F+ \ Y0 ~* i/ n! Y
nDestPos++;
& O! i, W' w7 R1 g6 M8 ^/ h }! X) f6 Y; p0 p( H
}
4 s* X3 K0 Z3 `& U. X BYTE nSrc = pInvSort->GetItemSrc(i);
. B* M8 n/ f4 G1 Z pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);8 r, v; o+ t0 g) V0 s
if (pItemElem)
$ j0 I' t8 h6 K2 P1 } {
$ U+ |* v3 a: Z& A" y7 N if (IsUsingItem(pItemElem))
4 W) h! V4 w6 \, x7 B: E {) L3 u$ z7 P: P& y: l7 b
//这个道具无法移动,跳过
. D6 p: {- }# d0 e continue;
3 q8 u* C. X, q* }3 J B% e }- m5 _# M+ ?( ]* n
}else{
. r* v! N- G$ p8 O //空位置 不用动
# H# q D q+ ^6 E continue;
; D w. y$ F" A7 j( k% f6 U. K6 a }
, V3 B) o, D9 j# u6 W/ n: y/ j8 i //////////////////////////////////////////////////////////////////////////
4 }( ?1 l4 y/ X. ?/ u //开始移动$ A# b* V5 _3 y, P) ?. |0 M
if (nSrc == nDestPos)0 R0 g! O% Z; l; ]4 \& B* a. h
{
9 v4 `$ A- q7 G! r6 \3 t& n1 s( E //原地不动
* r% k, ?# u) w5 `" G nDestPos++;- T$ j- P. c/ q D4 \' u
continue;
; ]( R7 H4 z, [ }% _! O: v: W5 B0 i" D
pInvSort->MoveItem(i,nDestPos);
- q% X! R! c. \: N" {+ F g_DPlay.SendMoveItem(0,nSrc,nDestPos);9 f3 I2 u; I. z$ w" }* _! B
Sleep(5);2 J' y6 I1 Q# X9 ~- L
//Error("移动 - %d->%d",nSrc,nDestPos);
, `2 V. R! o8 K# A" `% \3 E* c nDestPos++;
. `0 Z1 Q7 @( p$ x }
5 _1 O/ D1 z) ]4 m0 I& Q d' p6 r //取第一个元素的信息+ B2 O! t. u' A. G/ l
/*
; D9 |& {* U. B4 T+ F' e$ G if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
0 u# n: @) I9 p3 a0 M {
+ H( g, y; C7 a/ e6 r8 \8 Q Error("Move - From:%d,To:%d",vItem[0].nIndex,x);, I8 D% ^# |# M B" L
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
+ _; Q6 w( l5 j6 w6 @5 Y* ]1 y( h' j }: e# c/ O5 ]5 A! u2 i
*/& @- d l1 o3 ]! P+ K/ V" d
//////////////////////////////////////////////////////////////////////////
; V( ]* {" ?1 x- s break;
- I- w/ S4 f& h5 Q- t0 P }
. P% b0 g* h% H( V }
7 O1 [7 `6 E* r1 e3 A}5 ^8 c7 }# C+ }: p, [# `
m_wndMenu.SetVisible(FALSE);$ ~! ?& B2 g7 p/ J/ l$ l& v+ _
" t6 w b0 s, w r; f; e
--------------------------------------------------------------------------------------------------------) B! j. W2 \$ p* c, v7 G
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)3 }8 x+ \2 X2 o3 D% X) Q% \! [8 Y
{, ]! u9 s4 X1 m' i5 J
BaseMouseCursor();$ P0 j; P7 H! \; z1 N
}8 Q: ]* w4 W& O' ]* \' r/ Q) ^
在其下添加:$ d; G* q3 \7 R
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)6 J3 U y' T8 ~& q: B
{
, k2 t' j2 T, G) H/ B& [* O$ a6 Rm_wndMenu.DeleteAllMenu();7 h' k7 Y# e- s$ U6 L
m_wndMenu.CreateMenu(this);5 H0 d+ }" f; a: c
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
; G5 }! P* T/ v8 T$ W! U3 L3 y7 s+ u0 @) L9 H* s# A0 ~' B* a+ J; ~- Y
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
o8 ^/ ?# F/ |2 j1 C8 B; C{
! W; C1 w* ^" V( P, X) H% s3 Q //P以上级别才可以删除所有道具3 B d. k/ l$ y; q( t s1 S/ T
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
f( z* V# P* C$ J}- `$ E3 e" D, Z! m
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
3 S9 [4 [) T* r4 o7 U- @m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );# S4 @. ?: ?( V4 ^- T$ }9 T) J
m_wndMenu.SetFocus();, I% ^+ v; V: m. t+ a
}$ e: N4 @* Y( z2 |
------------------------------------------------------------------------------------------------------------' [4 x6 Q! p3 Y; ?: `) ]
*************************; h9 r% C* r5 x
WndField.h文件
9 J, @1 N/ \ |: {*************************
( o1 K( W& b9 p3 g搜索:BOOL m_bReport;8 O* i+ l" P) `! I( U
其后添加:; q8 D! X2 n0 E0 \
CWndMenu m_wndMenu;
) B3 G0 m4 s2 r- i4 N搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
J. |7 F/ P7 w, b4 L) I其后添加:
3 b' i) _6 j f/ y+ k5 wvirtual void OnRButtonUp(UINT nFlags, CPoint point);- G& Y+ `- Z4 A8 Z3 I
, r6 m' O# b, g8 ]4 v& \$ t) l2 U/ v+ M
|
|