|
|
源文件中_Interface文件夹下WndField.cpp文件
* @& ^ N# }+ h2 I: t) m搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 d- u4 v/ z t; s/ |2 \# [5 ]! y; h: \; J
struct sItem2 S$ N! Z$ V, C5 J B: N, Q
{! X/ A+ P4 L: J
DWORD dwId;
; U0 c5 B# M. |: j Y/ A0 j5 ?* F3 j& nDWORD dwKind2;
( F* F4 t/ U. m* Y- ]) FDWORD dwItemId;2 \& s0 p4 Z6 e4 V8 ]% R. X, H
BYTE nIndex;+ ?/ e+ q7 i9 @1 \1 H, u# i# C/ l( A
sItem(){9 c9 N4 L6 z4 l! @2 { ^2 B" T
dwId = dwKind2 = dwItemId = nIndex = 0;
" ?! ^) C6 r. S2 D0 X3 l$ j}+ g, b! Q2 \0 D0 {( H- V+ K; ?* _
bool operator < (const sItem p2)
- m- w+ A6 s2 _% q! m* Q4 A4 |{" v4 v4 i! N! w# X3 {
if (dwKind2 == p2.dwKind2)
4 n+ u1 m" N4 R& G! V& V( g {- E, a$ E3 U5 k6 ~+ l
return dwItemId < p2.dwItemId;) I$ T& W, f: U2 k/ U( _
}else{
5 m, ?& x) F% c; J# q" u return dwKind2 < p2.dwKind2;' T. m! N: ^4 W, }0 g' Y% B5 H3 w
}
, K2 I7 j1 E7 C6 U) Z- c% u( s% x}/ S- l e7 Q# C/ g
};, J% M) W1 S' U5 W0 W! L
class CInventorySort; b* Y1 q, ~% d6 ?
{% g/ o- M; o; T- v
public:
7 ~. j) P+ i* R! \, |/ ACInventorySort()! ^7 |! d7 F- V$ I7 t
{
% u5 W) Y6 W# B) ? m_dwPos = 0;6 {% E- N7 v: L1 o- U+ R p
}: Z/ E8 C% a O! [& g
~CInventorySort(){}
& K, u9 s6 n$ ?% s. z. e; Iprivate:
( p: v# S" r! @, }2 |- Y1 PsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息3 \: s5 _6 T" j6 d4 `7 Y7 u( Q% w- w; X
DWORD m_dwPos;
' W5 ]7 V7 h' p, O9 ~9 Ipublic:
, R& |9 J8 Y* q' e' }) [3 Zvoid Add(BYTE nIndex): @# n" t6 W9 A d* ]
{
6 F) o# P" V/ s3 c# p' `) p4 O7 u if (m_dwPos >= MAX_INVENTORY)
# n2 l3 ~. j/ c- s- h0 J {
8 `+ Z; O l" `' U9 p return;
" d! e/ s: z9 T5 Z0 g }* f; U2 x# d" w$ L) T* J6 L
m_Item[m_dwPos].nIndex = nIndex;
- s% h" W8 h! C6 `: T m_Item[m_dwPos].dwId = m_dwPos;
7 F& u+ N% T" o; Y m_dwPos++;, {2 f3 t& `4 u4 c' v
}
9 C8 ^) ~! b. q: ^* xBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列9 P; O- \ f& H: ^( V% c
{
. g4 a6 b' t& V for (int i=0;i<MAX_INVENTORY;i++)
4 Y7 N6 s; U5 P, s, w$ ~# y; g {
- G, l3 q0 W `# I$ R if (m_Item.dwId == dwId)
; R5 y7 j$ W) ]7 w {
& R* D! k, w/ x u# F& P4 h return m_Item.nIndex;1 |( ], h" j& P! F7 B2 L# `
}$ u* e( ]& t) Q
}
$ X. B' A j9 D$ h return 255;
. t: M( Z, o' H+ c! J s6 v}
2 Z+ ?% i3 O. ^% a$ q% B" Y3 t( q$ fvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
* Y! ]8 W/ f+ l' z{
* `2 Q# s1 N+ e8 D4 y: H8 h) y BYTE nTmp = 0;
& x- T) z. d1 \8 I( Q: F4 Y7 ^, s bool bDest = false,bSrc = false;! l' A+ _/ r! s& U
for (int i=0;i<MAX_INVENTORY;i++)
# k' \$ w$ o+ I% X1 F {
- y" R) b9 N9 t5 @6 N R1 D if (dwSrcId == m_Item.dwId)
1 g8 I, Z' I. T1 b) ` E9 N2 Z {
$ u9 |' K: j4 C3 f1 A& s- t //id相等 则 改变对应的dest和src8 `- s2 Q7 y1 A! z( \: C
nTmp = m_Item.nIndex;
, w3 E+ R$ e5 e m_Item.nIndex = dest;
, D/ ?3 z9 r6 [5 V# K }
5 x% q3 F* _5 T+ c7 Q. H }' v4 d) W* f2 ^' n! f3 ]+ u
//临时数据保存完毕,交换开始
3 d9 r0 { @1 x* M5 q2 z for (int i=0;i<MAX_INVENTORY;i++)
1 Y" i V9 c& G$ D7 O7 c8 q8 n {( o6 e% m9 f6 F' c
if (dest == m_Item.nIndex)- v) O8 G! d' Z. w# w9 ?& m: k
{
! H/ q( O2 A+ t3 [! w //id相等 则 改变对应的dest和src
6 J) F1 ~7 X4 C m_Item.nIndex = nTmp;
- i1 R+ D% n- E+ p6 {3 e }
/ g7 q# Z9 {5 }/ ? } z0 }8 g( C' e* u" A7 |+ `
}
; X6 J$ \ P" E4 ?};7 q; Z* {# x0 _8 d, y) @
-------------------------------------------------------------------------
' V4 i) M ]$ M6 O, Q依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% B j3 [0 r1 z5 o1 f9 ~搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);$ d A2 K# k( f# _4 G" P3 O3 w
紧靠其上添加:* n3 g! \7 @8 d$ T- y
if( pWndBase == &m_wndMenu )
7 Q, L! F, y; @{6 _& ?& T! Q+ c7 y8 G, J* @
switch( nID )
9 J5 k) A3 j. E' ^. h# ^& I( \ {
4 J- `1 C- s( x# A case 2:- v8 b) u2 _( K. p2 h
{& }' O) r" B. s4 P
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
3 O" i) v# k$ ~ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
3 Y8 I+ d! F) r3 _0 | {
4 H% }& I& Y2 d, Z Z. ~ break;
/ {( K( \( v, K% F5 [$ O }
; \* Z# s6 G+ X/ ~& R% p; g$ Z for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)7 C6 G1 }8 k% e! X$ j
{7 ?( q @/ Z6 `8 p' _
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 n0 Y R. f* [3 S, v7 [
if( !pItemElem )
8 E( l/ l) |7 Z0 f$ G continue;
1 a& j4 X) e) E if(pItemElem->GetExtra() > 0)# l; o q. M4 q9 a
continue;% C% V G- C' P Y8 `
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
1 [7 Y5 a, a( C# c% J5 y continue;
- m, r9 p. w+ a) ^/ O" W if( g_pPlayer->IsUsing( pItemElem ) )
( D5 L e% y+ C" _ continue;
. ^) j" [& L- o if( pItemElem->IsUndestructable() == TRUE )
- T3 r5 P0 L! T, d {; Y: R3 G( b' s9 c! B
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
" R% N* S, D. j continue;3 L; [& z5 x* r+ `
}( [# s0 ^7 O) ~$ _: Q3 w
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
$ t% }# {# R9 x3 E. e3 A; V }
4 S0 u; M% v$ k$ p" F7 H break;
( c* |" K: D" D0 R }0 B6 U9 @4 A+ q( i" D; `8 X
case 1:
, a% t+ G. H9 I) P* A; s z: w {
; j& U# W* O1 M4 _1 A7 O+ s' i //整理背包0 U. {& z- `6 c/ l" I: J9 Z+ _+ Q
//////////////////////////////////////////////////////////////////////////5 g" p- v6 N; h& P( w6 |, o( k' P
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
% a) k8 q" @: b" Z# ] //////////////////////////////////////////////////////////////////////////
! h0 R3 v/ l+ S //////////////////////////////////////////////////////////////////////////
2 C3 ~$ X1 i/ [! E( V p CInventorySort* pInvSort = new CInventorySort;
: ?5 B0 w- d5 Z& D: H vector <sItem> vItem;* M) Q. {# d0 Q I/ u& |
vItem.resize(MAX_INVENTORY);//初始化大小
5 U6 H% c2 ?* w( t //////////////////////////////////////////////////////////////////////////$ K+ ]" P+ |( i1 L7 U/ i
//填充数据
6 d0 o( K( ~" a4 O' l+ f for (int i=0;i<MAX_INVENTORY;i++). S% x& V8 t1 O/ c. Y# I% c! h
{+ s: F9 g( `2 C) H0 J$ \3 T0 I
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 y3 o, d, i8 d* p4 d4 F: c
if (!pItemElem)
# Z b8 D7 c* R# e5 G {
7 d7 o2 [% ^' p$ c5 z+ `3 g vItem.dwKind2 = 0xffffffff;
* ^7 l! \7 x/ e& V: d( s) V ^: m$ e' j vItem.dwItemId = 0xffffffff;
, x& S5 X7 \* w s% R vItem.nIndex = i;8 ?( ^: d; o2 o# I- k N( V
}else {' I! B% @- o* V3 n+ a0 K7 N
ItemProp* pProp = pItemElem->GetProp();
8 F: S) y/ U4 f/ R. b' j1 {+ K vItem.dwKind2 = pProp->dwItemKind2; x+ c. E$ s: ]* s- E
vItem.dwItemId = pItemElem->m_dwItemId;
- b$ s/ [0 i0 F( U vItem.nIndex = i;& D) M8 K- ]! b3 c# U! E: w% `* B _
}
' I3 i2 A7 y- U" v( L //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);5 Y, {7 z U% s& D, Q
}; o; p+ c7 G6 p5 b \, I8 `
//////////////////////////////////////////////////////////////////////////8 [1 ]. H: f) t7 {7 S8 B0 m5 r
sort(vItem.begin(),vItem.end());//排序
. f p& C3 o b# G, B/ Z2 n: f+ w& m //////////////////////////////////////////////////////////////////////////
" e2 G+ |+ Y' f. m //交换; J; H% t1 O; u+ z$ t$ b8 r
for (size_t i=0;i<vItem.size();i++)
' _: X6 K/ v) c* m7 F, e% J" c2 q {- W4 y) @9 ?; |3 Q
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
9 S9 s/ d$ e& v1 | pInvSort->Add(vItem.nIndex);
' e4 P" R0 L% n' n0 ^, |# t }
3 r7 d% J6 @/ N BYTE nDestPos = 0;4 a8 {, s8 s$ v
for (int i=0;i<MAX_INVENTORY;i++)
% ]' P7 A% c2 Y/ \ Y1 h {+ i r2 ]' }1 H! A7 u, t
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
" S+ e1 q; ` i2 M. L0 c) g2 f if (pItemElem)+ H$ X2 f: \" E7 Y
{- S9 `$ Q; z$ y; b6 `$ U
if (IsUsingItem(pItemElem))& e2 }# E3 T- M
{! `! T# l& t$ z( x9 q
//这个位置无法放4 }4 P" V: W7 u+ u( W. Q" v
nDestPos++;
8 {! L0 R; D+ N2 X" c+ a/ }$ I }
1 \1 v0 G$ W4 ?' P }
$ u( z1 v% }- p BYTE nSrc = pInvSort->GetItemSrc(i);
) N P) _5 H( P$ B4 B4 G pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
+ ^5 T! @& P% d5 B2 X) P3 @& c" i if (pItemElem): P# t- a* G! e8 N+ H r/ g
{! q0 L$ R6 W, T @4 a2 o
if (IsUsingItem(pItemElem))
! J3 o) {; a7 x# U {
: Z/ r5 |2 X4 h5 l* F //这个道具无法移动,跳过
/ @/ B1 R* V& p3 ~- p6 t continue;' k0 c6 ~/ ?5 k4 W9 ?. @6 \9 A9 J& I
}
! b" B, |% P0 a! @+ S* `( d6 X: t9 a }else{
: r5 s6 h) I- v5 b4 s6 @9 H //空位置 不用动4 d b" h( F3 ` S' t
continue;3 b- N0 [. Z* w1 _( ]* b5 O$ W
}# M1 A+ B# E/ y. `1 s* L: h U
//////////////////////////////////////////////////////////////////////////
9 q2 {: I! p6 ^/ d8 | //开始移动8 w! C$ W. X, k3 y; i9 s2 }
if (nSrc == nDestPos)4 c8 l9 V" D @( k0 \! p9 |+ L
{
; N L2 P* l' V //原地不动6 b. w" v. T/ H" m( X
nDestPos++;
6 C; [8 |5 B3 u; T8 L) C+ n4 r continue;
% A2 H" K; `1 s% H: W/ a }
; T! [* v. C/ `' K' v pInvSort->MoveItem(i,nDestPos);1 v& {4 q' S0 }% H) v
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
0 m# l. ~" ?, w7 \! q* U8 Z# o' f Sleep(5);+ ]1 | v1 Q/ J% O
//Error("移动 - %d->%d",nSrc,nDestPos);
5 i4 Y. e- Q' i* W3 t nDestPos++;. s0 Y2 Y; K; C
}9 n" D/ p0 q) @
//取第一个元素的信息
! f4 l$ X8 m( J2 F /*8 f( u' F3 [4 k' ^ U& G$ B
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)$ J; K* D9 K2 y! }" c
{ d! R5 u. z/ H. |- q, w
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);% T5 \4 S4 C" X" Q: @
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);& h& v6 V6 H& f2 c
}
! c! L( v9 P( [* _) W% b */% Z: }% c% F8 e- x" P7 O
//////////////////////////////////////////////////////////////////////////; l# p% n I9 M+ `3 @: G" {
break;
, x l- Y: R: a& Z% t- G: O }8 Z7 |. S. |" K' O. T0 ^
} . d8 Y6 }& F* d
}. Y8 Z3 P: f: B' [
m_wndMenu.SetVisible(FALSE);# _1 G2 b5 _* I# ?# W& J8 ]5 ]
5 b4 w8 Q; T- J9 x3 H& C--------------------------------------------------------------------------------------------------------. {$ L4 ]" U, G; O" p; i9 r
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)% C% g. C* R9 i% U5 t+ o) {) f
{( o* O, `* T( i2 Q
BaseMouseCursor();
( q, `) d6 b9 C8 n}
# H* }* ^) n: R. R C7 B6 e8 X在其下添加:: F& u. c: i# K5 j! A; _
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point): {" E1 r8 L* ]# i" f" f" P0 A. x
{
: I9 g5 ?; ~5 d! P4 j. N U2 im_wndMenu.DeleteAllMenu();
! s( X9 Z$ j7 h z* p9 ?m_wndMenu.CreateMenu(this);) ~3 _' l: h9 Z: d6 q/ q- r
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
, I6 p4 G7 O% z5 \% X; p2 B4 V. Y6 q7 p
9 g* w6 ~0 ]* b9 x# ]* a. dif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% E8 r) P# ]0 c0 B( }8 V; K- Q0 _0 @
{
8 x- N; O3 J& }* K: C/ f //P以上级别才可以删除所有道具6 ?; y4 J B( d# v" B
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
8 R3 `* m( I% p: `}
: s7 I9 x1 @# }9 I( N" v, Tm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );& O# u/ n% l f3 ?; `9 F6 K8 p
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
s* `1 \3 W2 \& s- B6 c: mm_wndMenu.SetFocus();
M* b; m! ^4 s' R}" r5 Y$ f. t) l/ s5 k+ k( e
------------------------------------------------------------------------------------------------------------% l; _: b4 h' v1 s( x" Z
*************************! O4 V- f2 {, @5 u. B
WndField.h文件
/ t% d( }8 D Y4 h! X9 P9 r*************************. F0 D/ e7 |6 h1 m" t1 F
搜索:BOOL m_bReport;
5 z. C9 n: h, b其后添加:6 z' i1 G& {- V" I) C- ~. `
CWndMenu m_wndMenu;
, m3 d% t& a/ m$ c8 ~8 V' k搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);6 ?* o2 w8 ~6 _6 m% v3 O& K2 q+ @
其后添加:* V P$ I1 m( e, @
virtual void OnRButtonUp(UINT nFlags, CPoint point);6 [* h% J0 E0 Q9 v8 s
. N; R: D5 t E2 l8 M+ p' Q
8 N- o% Z1 `0 H* V2 f" \ |
|