|
|
源文件中_Interface文件夹下WndField.cpp文件
/ J: G0 c" a5 _3 D$ z8 F) k搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% a$ M7 Y3 \9 l: Z! T
* d' \0 } Q; m" B9 v
struct sItem
6 T+ @7 u. p% e# o, I{
2 n: T. H% N) V8 m6 sDWORD dwId;# i2 Z1 y) A# u& }' C
DWORD dwKind2;( M: Z1 j9 H' w0 Q' \* p: O
DWORD dwItemId;) ]- s# P9 a j; U
BYTE nIndex;
6 {! O7 h J% i% u9 I' gsItem(){! @6 r# |( Q m4 r
dwId = dwKind2 = dwItemId = nIndex = 0;$ {* C, c5 z* R3 U- P& H. H2 x
}4 v0 c; O& y2 q- x1 \) \
bool operator < (const sItem p2)1 K- q. D5 B! J
{
! d' C$ w8 B k6 a( W; e if (dwKind2 == p2.dwKind2)
/ K+ J& L! [/ t9 E, d {" a7 {3 A; C! P, x) A& n
return dwItemId < p2.dwItemId;, p* p3 p# W1 A1 \* {/ U8 Z2 E
}else{
' z; D3 ~$ p' b$ S return dwKind2 < p2.dwKind2;
# ?; J+ z6 |# q: b! c V }! N5 T! u5 Z' h8 U5 J! C4 d) r
}
$ S ^! s" \4 B5 q" p/ O};0 D: k% c9 v0 f7 H
class CInventorySort2 M* o; T: V' k8 e/ |+ D, }5 W9 e
{% C3 I& P0 i2 i8 r- M, _3 T, N( F4 T* G! S
public:
4 y) x) r( u3 C( a, n. _8 t5 eCInventorySort()8 J5 c5 i5 f! s( c/ C% A$ h5 L
{
- Y; O: n0 S8 ?! Z ^, W4 ~' A( { m_dwPos = 0;
+ s/ D2 o; v7 `- q3 p) {, F) ~}7 W6 z- W- o+ Q* M! |3 A- ~0 o
~CInventorySort(){}
& ?3 P, a. a! b+ C) Uprivate:3 f/ _9 f+ e7 u4 S; s6 F$ `
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息$ h0 ]" `3 s4 M2 B
DWORD m_dwPos;
+ P, ^0 V. \* n# S, D! W# Upublic:6 d5 k; p( a% o7 a
void Add(BYTE nIndex)
) P" Z. d# V" |! b, m6 ^{' k# i( _3 I3 L
if (m_dwPos >= MAX_INVENTORY): X0 _/ E/ N+ }! R
{
% T1 s$ {5 s, ~- J' g- \8 _ return;
1 _) ?3 v; R: w2 b$ e9 t4 n }8 |; A* w( `. V; w, I
m_Item[m_dwPos].nIndex = nIndex;
# b0 r9 L) {# u' U ]. I m_Item[m_dwPos].dwId = m_dwPos;, f4 l. N/ F: v4 ~3 Z8 I" N% [
m_dwPos++;
. A ^4 P9 x0 {} j, X2 o9 _3 q5 \
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列8 \+ O' N2 S4 Y) B+ q1 ?% }
{
- V* U; ?" g1 e' y for (int i=0;i<MAX_INVENTORY;i++)
) G/ k" `8 G; P {" o) O8 b- D- o7 r0 `/ W3 Q/ O
if (m_Item.dwId == dwId)" t) ]6 w% i& J% T: S5 F# I
{
4 c" \+ V! x" ^! q" r$ | ? return m_Item.nIndex;
) t5 p7 B; O1 x; Y% B }) F# [* f3 S# l+ T( v5 N/ f
}
$ F+ j5 j M+ @5 x. T return 255;5 P! e! J" X! R3 M4 ~& v# Z/ |
}
: N6 `$ h7 t. ]& Svoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
1 u1 T5 v, T0 W{6 y' W5 Z1 b' ~2 K& O8 I
BYTE nTmp = 0;* P) ?8 K% v7 L- k! u5 U
bool bDest = false,bSrc = false;7 ?; [: N. k; b$ J. P- x
for (int i=0;i<MAX_INVENTORY;i++)
( b% a8 Z" S- x% b e. ?& j3 J3 j {
: {4 k" S0 [3 `# S# F; x: ` if (dwSrcId == m_Item.dwId)
- k! C* @7 U2 H8 z% w: C% [8 `7 p" | {) y% y: Q8 G( X5 |
//id相等 则 改变对应的dest和src$ x3 j$ e# H7 I! k, R3 D
nTmp = m_Item.nIndex;
# o' [# N0 B& M m_Item.nIndex = dest;. ^0 ~! ]- F$ Y2 _3 N+ I0 n
} f6 I* o! f7 Z! }
}
& P6 P w, ]2 w2 L" a& j //临时数据保存完毕,交换开始
2 r9 l. p2 a1 x' {+ m for (int i=0;i<MAX_INVENTORY;i++)- y$ f$ N+ W" W0 O' w+ ^, ?
{
0 |, T9 P: o% {: D6 ~" N; ^ if (dest == m_Item.nIndex)3 ?, a+ q- g$ {" f1 @8 q, q
{1 e3 ]4 S4 ~+ ^2 H
//id相等 则 改变对应的dest和src
1 r7 g s6 T7 G4 P& x m_Item.nIndex = nTmp;
; S# M5 N' A" F% D8 }! }- ~ }
: l4 k1 o( L: F9 @6 Q4 L. Z }
1 b5 F5 u- _* s; X3 g; ?" U}
6 e0 ]. V0 h: a; t2 [8 r};
1 f" N9 p0 a x" s% v T7 C( @-------------------------------------------------------------------------
9 g4 @6 S6 e2 n" g2 O9 l依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) \' _0 s1 l! Y搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
% }* s/ w! Z% d' q紧靠其上添加:
3 b {/ p0 i* s0 h% s' T" Aif( pWndBase == &m_wndMenu )$ H% H q- d. g, n9 P
{7 f6 l$ D7 B; j% _- S6 \; e4 i
switch( nID )' {4 U' T1 v9 c: F' E
{
6 i' ~: b8 T4 M! y case 2:3 U( T8 C ^* U4 l
{
* B. C) B/ n: T5 v% m: E( V //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
# b' C! `' a9 F3 }% A3 W if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& K" e+ g' U% S2 S {6 l7 q& q- Z/ E9 D" R
break;
- n1 c) V+ j: ?3 x- T }
4 H5 h9 D1 a! S0 n' k for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
4 f Q1 @* X# d1 e. } F { J& T& Q8 r+ Q4 X, {& s
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" w8 x5 j6 P4 ~& y% \8 s3 D
if( !pItemElem )
6 d2 b) d* g6 H9 T, q continue;! `: k' O$ O8 L/ a6 h- E& z0 I3 q
if(pItemElem->GetExtra() > 0)
* f' U/ ~5 [9 q, G4 W7 f2 a& b continue;: Y5 F8 k$ I L0 E
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 8 ]5 z- v4 E& B: y* o
continue;
, e; Z; n* Q( o; |) y. g if( g_pPlayer->IsUsing( pItemElem ) )
) T& g4 T2 x6 t+ C" n, [, T3 q; W continue;# A! z5 f e8 D8 G1 D4 z( }
if( pItemElem->IsUndestructable() == TRUE )
0 {/ ~. q" v! C- a% j7 t {9 y1 ~- O. |3 P Q4 X0 F
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );" B: J, ^( }$ N; w' D# d
continue;) c; Z" ?5 B0 }0 u K
}! L2 O) A$ v. N) X% s7 _# a
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
$ i- n- P: `6 `. {9 X& Z: f' D }4 T! g4 b$ `# ^
break;" y3 Y" i+ E# A
}: P; O0 g4 t" Y' q
case 1:
$ b4 D1 @' @7 w1 C4 `# p" i) c {% S2 a/ ?4 ~# T% T# E& B
//整理背包- V) J( z% r" I. c: P k
//////////////////////////////////////////////////////////////////////////
* x d/ b- P- I8 w4 J9 f' z9 v //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );# L# X/ [2 E! ] F
//////////////////////////////////////////////////////////////////////////
5 ?4 w% X0 U- w, Q //////////////////////////////////////////////////////////////////////////
7 q$ U/ J; r" v1 P! J" V3 W" N CInventorySort* pInvSort = new CInventorySort;2 O+ ?2 F$ f) M: R
vector <sItem> vItem;" l' V; _" j$ s% g; q0 y9 F
vItem.resize(MAX_INVENTORY);//初始化大小
. C6 N7 ?2 |& D4 a) Q" G" ^ //////////////////////////////////////////////////////////////////////////( x9 d( _/ q3 _' D1 R
//填充数据
{' S5 s) p3 X8 u. ]' s for (int i=0;i<MAX_INVENTORY;i++)* P* h7 A+ j$ Z* ~% Z
{
' X, |1 C9 ]6 @# w5 N0 ? CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! n0 I/ W0 ?: s if (!pItemElem)
4 j0 k+ q' c/ _5 n: K, l Q) Z {
" ?/ `1 w' a4 U; ]% H vItem.dwKind2 = 0xffffffff;6 Y* f+ f7 n' D" k. X) h/ O1 P
vItem.dwItemId = 0xffffffff;
- L' B3 L# w2 M' d9 l, F% T6 l7 N vItem.nIndex = i;
& w1 n: h }( o, d* [ }else {
( t8 n: a/ R, Q6 F3 {1 H7 r- D2 ? ItemProp* pProp = pItemElem->GetProp();
8 d7 O; W: r5 R8 F6 H# f7 @2 J vItem.dwKind2 = pProp->dwItemKind2;- ?1 _5 D9 H+ P( x4 `
vItem.dwItemId = pItemElem->m_dwItemId;) Z0 Y" C3 r4 N$ ]1 Y
vItem.nIndex = i; j* I7 S8 l6 p; ?/ Q2 Y5 z ?
}
( l* z& u( X2 [. E //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 T/ s& ?) F, t2 `. F- B* L0 c }/ Z$ y. r/ {. G' j0 P/ T/ ?( j
//////////////////////////////////////////////////////////////////////////
" i" r6 A; x/ W" A; } sort(vItem.begin(),vItem.end());//排序
& [8 J& v/ h1 h6 Y0 w i //////////////////////////////////////////////////////////////////////////0 e) n$ a8 Y' [' M
//交换$ W T( G' H) D1 _3 _2 P# {, g+ |' F9 W
for (size_t i=0;i<vItem.size();i++)
5 b! m- u8 b- e9 I; G t6 ] {
! `) A) O% a! K" X v- G //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
t! j" O% y6 a; V pInvSort->Add(vItem.nIndex);, |% y/ V& F8 ]+ }# E% M" _
}- ? Q8 y$ {5 m+ w4 Z( J. I5 t
BYTE nDestPos = 0;
" `" [) f4 m; ~9 d; o for (int i=0;i<MAX_INVENTORY;i++)
; L8 b$ u$ l/ X1 |0 a) r {/ n/ l" C5 ]* i
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
% e2 Y: g9 Z$ u$ Q$ q1 @# [ if (pItemElem)
3 L! C' o) _ m; V7 A: d" s {
- t- I5 b6 Y/ @ if (IsUsingItem(pItemElem))4 r* J! `+ W% f% S% a
{+ f0 C" j! S7 v: ]7 p% O
//这个位置无法放& x9 u1 ?2 R3 P1 [* G
nDestPos++;8 [# e/ _7 _* v8 K
}( G2 L- x5 _" G1 I/ ~& ?* L( z# \4 ?
}
: s8 C q$ |+ e BYTE nSrc = pInvSort->GetItemSrc(i);- i) m5 R5 \$ N7 i g& Q a1 M* N
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);: i9 H3 H, ?; f; U( m
if (pItemElem), i# `9 o& h4 w$ b
{
; _, L9 |6 X& d7 Q if (IsUsingItem(pItemElem))
) Y# L' w. z9 o5 p8 ^ {' t: L8 O4 z8 J5 J
//这个道具无法移动,跳过1 r, @0 w, g7 {
continue;
# F; b- {7 X: i: Q$ }, [ }; u8 C3 a+ g3 [7 Y) u- \1 m7 s c
}else{3 l+ `1 t( b2 H& G( s4 d- _
//空位置 不用动
: p9 u0 i |3 g$ \8 O0 X continue;
% C' `! T, L! m8 Y6 N7 w6 T# d }# ^3 r, L/ n# }% Q" S) _
//////////////////////////////////////////////////////////////////////////3 p {) o, L3 e
//开始移动
3 V+ s# Z( e0 i: v. ?4 y if (nSrc == nDestPos): c3 m: f$ |$ t4 O# D6 Q
{- }( A8 W4 T- |8 C
//原地不动- u# {) }, q$ P% a
nDestPos++;
" L# ?" i1 ], [/ `. g6 r continue;1 X; \1 C$ B( Q4 b
}
9 `' Z2 O- l- m6 }. v8 f6 `1 Z pInvSort->MoveItem(i,nDestPos);+ o( K a8 x6 q7 G: X+ M' T
g_DPlay.SendMoveItem(0,nSrc,nDestPos);2 k# T! C. j8 n0 t8 ^* F! ]
Sleep(5);
" J3 x, Q& a( P0 d8 `* X //Error("移动 - %d->%d",nSrc,nDestPos);; A9 R% I( o0 J/ |
nDestPos++;
: _/ |) a* E3 I% Z2 v) j8 o }
% U& l0 t3 H# n& s! O. D3 K# h //取第一个元素的信息: _. A% c" |, q8 ], f/ F
/*
% H& e, _5 n, T# Z% l) J5 y if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)0 v8 I4 L% j& t$ `: T+ d# U8 `
{" x* v, F w# d4 @" b. s1 Z0 n
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);, q' \7 [2 z7 V/ i+ S9 u+ n
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
$ l# l% z( @9 s3 A. B D# d* t. ~ }
5 `; U+ m/ h* M1 V0 O5 P */( b( O/ q3 C9 a$ U1 F
//////////////////////////////////////////////////////////////////////////
0 ~0 C7 Y$ b' ?2 I8 K& \ break;+ I2 D% v# E F; Z; v/ Q
}/ m$ P+ B- V/ _. ~# {% Z
} ! x! \6 x0 }7 V" m" z, e# j
}
( @& e. t( @* e9 Im_wndMenu.SetVisible(FALSE);$ |( J( x: S# Z: ^3 Q7 |6 g9 }
9 c. S/ A& z4 o* b5 j: K4 T--------------------------------------------------------------------------------------------------------
* Q8 n5 C( A' @搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)/ q# B% L; T: U
{
. t1 t* F! Z! h, |8 H6 H) uBaseMouseCursor();
! J8 p/ F; c! Q9 d} R9 N* V9 n# r+ K8 [
在其下添加:# L+ V8 [ F0 e9 S7 ~0 {
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
; T1 k& Q4 W1 T! K! N; E{7 N: J5 g" a& K& X. K+ `: C
m_wndMenu.DeleteAllMenu();9 W+ s4 ]; V1 _- h2 m% P' a; ~5 N! @2 n/ {
m_wndMenu.CreateMenu(this);
$ v2 g R/ P' A" \m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
( ~" p: v+ m) N& p L" p; j' ^1 S0 `+ P s/ L$ v' {
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
1 D* @; ~0 D) H" p8 p9 X6 ^8 R{1 {, i/ _ Z. W$ [5 @+ c
//P以上级别才可以删除所有道具( w. P, c' g0 |4 ^/ J" |
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
6 _! q+ W* a8 X) M% f* ^}8 R$ b8 S9 [. p+ Z- K2 a* `/ _
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );/ T0 m/ d9 e o3 m2 @! F% }. k+ t
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );% ~) E4 J8 a! w9 X. |( P; k3 a
m_wndMenu.SetFocus();: x6 r2 B0 ~' Q0 U
}
2 z' t; z: a9 g# M------------------------------------------------------------------------------------------------------------( D5 T# }% x: V/ P& Z: z3 e$ n' L% p
*************************
W/ j# z: }9 N; `8 fWndField.h文件4 A( n, ]3 j6 y8 U% {- M
*************************6 T# `: `4 ` Y' c; t# m
搜索:BOOL m_bReport;) W4 x0 z1 G J: W- e" w$ u
其后添加:
" z8 i& q1 p5 q* G+ w( {CWndMenu m_wndMenu;
& d) b+ s$ ?2 _9 `搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
3 i3 S2 k: _9 f7 P% b% V其后添加:0 \/ n' f1 S) c0 R5 f" @
virtual void OnRButtonUp(UINT nFlags, CPoint point);
$ e9 }8 q( I9 I/ u) {
! f6 B+ a) O; q5 ~ S: L2 S. S
$ ]6 h5 ]# K' |" t: u! ] S6 [9 w4 K. g |
|