|
源文件中_Interface文件夹下WndField.cpp文件
8 d9 p* X) Q9 x* l5 _6 g* K4 s搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); D) e2 n/ G R, m! n+ R4 ~
! Q6 u( Q' W9 x( o3 R1 j2 F
struct sItem
' d, S' X" X, w2 G{/ r6 j0 ?$ X' {8 u- e: ]1 P5 `) c, {
DWORD dwId;3 t4 V8 h1 V& P4 N
DWORD dwKind2;3 ~3 p. |6 G. h: [, m
DWORD dwItemId;* J! l& |6 O7 }+ M/ L
BYTE nIndex;9 m+ c' |/ B$ n$ |; [
sItem(){" u- ~, O: R3 p& E
dwId = dwKind2 = dwItemId = nIndex = 0;
S7 T( l" x: S. M1 J0 S; X# P6 f}+ N9 e3 e; ?- s/ [
bool operator < (const sItem p2)
1 i# f! s- R! \8 W! `8 k{
' q& r1 I4 B- r if (dwKind2 == p2.dwKind2)
! M4 q% v. J! E8 {$ v {
: {; _. A E. h( o return dwItemId < p2.dwItemId;6 J4 P1 n$ z. G, D6 [1 n' K' u
}else{* O1 B) X4 {& U- ~, v8 `
return dwKind2 < p2.dwKind2;
/ K. z: P- m+ I( Q1 U+ B: J }. ~0 f9 y. K- x) c& ?5 j" z2 O: [; J3 q6 l
}) \, |8 `! c$ k
};
# I7 n7 l+ ^% X6 d: M9 t" n+ d7 hclass CInventorySort
8 _! V. S# U) Q4 J7 D{, u$ g+ E9 k- s% S8 d# E, G% {5 W
public:
8 m$ w" b4 o: A, d l+ o8 qCInventorySort()3 L b0 O8 w. E* I3 Y: u
{ B6 v1 y8 ^8 u. B
m_dwPos = 0;
- p4 |6 u6 g I* P2 o" D; s( M a2 }}. S: j5 o" r5 V# I3 M0 |
~CInventorySort(){}+ G& e0 D# m9 W1 k4 a
private:
$ G. m k# q+ Q0 c' C) X, qsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息1 O _0 x* R% Y6 T
DWORD m_dwPos;6 r2 D: ]. I" J9 y) l4 ]* G5 x/ {7 U
public:2 ^# M7 o* Q v5 l# r% k" T
void Add(BYTE nIndex)
0 H" Y! h s! k$ T6 |{% q, W' E# U. ]$ \2 N* J/ ^! _1 b# y) X
if (m_dwPos >= MAX_INVENTORY)
* e* E* ^' j% z/ D8 J# h) d" i) \ {/ B( J: `4 V7 K
return;6 f, T( p- u; X
}4 t0 i$ q* `1 ?& [! Y4 t8 z1 `
m_Item[m_dwPos].nIndex = nIndex;
2 a- }+ o- \5 g m_Item[m_dwPos].dwId = m_dwPos;5 R. i6 ]5 B$ A' _, M* j2 X
m_dwPos++;
2 ^7 D8 r/ I8 |; z) V1 I}
% i7 c2 `: o' p! c. R+ \BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列" i0 c, J7 b g. e/ d
{9 l) D9 q; f7 |- l
for (int i=0;i<MAX_INVENTORY;i++)
5 ]. N. `8 U6 Q. n M, y* Y {
" s- w- V+ A+ I% y if (m_Item.dwId == dwId)
7 h e2 \0 _1 o {6 R2 d5 n, B" z# a. u2 i
return m_Item.nIndex;9 Y7 ~4 ?! x1 s' C9 A" U0 `
}
6 k* M. [/ |8 k }
$ b2 t9 J: V# M% X8 P, b( K return 255;
2 d2 @7 c) v, W}, S* I" j; e7 |2 Y( |
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置' P- ~" ^; P; q+ l
{
1 P5 [" _8 _' _9 O8 H V, i! y BYTE nTmp = 0;2 @$ U$ l* `" T1 f6 A
bool bDest = false,bSrc = false;0 t4 P5 P5 I' S9 p: H
for (int i=0;i<MAX_INVENTORY;i++)% L' q/ L& r3 E: _( f; R
{
. R* l5 s' C) | if (dwSrcId == m_Item.dwId)- U# `% x! B# @% }3 h9 j
{
, u% C+ K* Y7 @) B //id相等 则 改变对应的dest和src
! U$ Q7 L V1 T2 ?9 U- { nTmp = m_Item.nIndex;
0 n% p; |( z' B m_Item.nIndex = dest;
' O5 U2 C; B* G& j }% t+ s4 L% U- _& {
}
+ j- [9 G% f# ^: }- h2 [; ^$ u" @ //临时数据保存完毕,交换开始
b* F% ]. k3 z% L- s. x: S* g. d for (int i=0;i<MAX_INVENTORY;i++)
0 i. I/ g8 i7 i- u {
6 I4 v$ O g8 l- t, e$ Z if (dest == m_Item.nIndex); C+ l! \ ~5 Z+ P
{" t2 |2 j# ?0 ?4 g) X9 G5 A! ?
//id相等 则 改变对应的dest和src
% @! B( p7 d) u3 V8 ? m_Item.nIndex = nTmp;
* P# K0 J. V' U" a }3 i. a% M `6 ~
}
1 M1 W+ Q2 R5 a- o7 T}
9 l7 o' D; ~1 S* z( a9 a" Q};
4 W" e' R% I! E: [-------------------------------------------------------------------------1 v+ B, i/ H( g/ Q; _; I# e
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 O, `: N( d/ D4 Q% q/ S, Z" O搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase); s. \" W! ?, C- ^; G
紧靠其上添加:7 w d& a, w8 ^' I- Z
if( pWndBase == &m_wndMenu )3 M3 k. B8 R5 k) z# k8 b9 p
{/ d% ~6 g* x: M5 N4 d
switch( nID )5 Y( N8 X& g. z7 H2 u" I
{
% p- Q3 R/ I/ j3 C2 N9 ]' E+ O case 2:* ^* h4 H7 l5 B6 d
{
6 W. J% F5 \% z+ L& v8 V- D6 e" ?9 g) t //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
+ M8 R, j" u4 B) ~" W. s if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# I1 {+ q4 U9 t0 k$ F a3 ~
{
" J) p4 `/ }1 \1 H8 W break;
1 b( _8 R1 u; L# D5 @ }
% _% X" N) T7 B" ] for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
+ t# ]1 M- \4 y+ v' K {
; l, Z4 @3 G! E# x7 ?0 M CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- d8 u) I4 f0 V( L# Q4 ]3 b
if( !pItemElem )
7 A1 F- h: z- Y/ T0 h) ]' d' _ continue;/ l4 N* }3 n: H, P) p
if(pItemElem->GetExtra() > 0)
6 Y6 B2 ~& y6 V. e! F+ S continue;# D8 u& k/ D4 _! e3 G+ E! J; A, o( g
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) : X3 I- C# B) c" Y
continue;1 [. l: I! Q. N' Z' A
if( g_pPlayer->IsUsing( pItemElem ) )
. \0 r3 a* ]# K$ u continue;
2 ?$ E, w& q: _ } if( pItemElem->IsUndestructable() == TRUE )
6 F* Y6 h- n4 F6 ~7 L {
: X" w8 l' P* U g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );% Z$ c( B* U; |- v* i
continue;
; P+ M- P- G- S1 f; c2 h8 Z! S }4 L0 w4 A- x1 a2 a* O
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
; ~$ K/ e( q4 _3 i } H* }5 S# t+ f& m2 Q& b
break;$ L: {) @1 B/ n$ t: f
}4 T9 v4 {) C3 g! J i( n
case 1:
# h7 g a2 k T# {2 N, u, `2 k {
# j6 V9 W& ?( g) w. A4 a7 c$ K //整理背包
6 v* f$ k: R1 b# W5 _. C( K' y //////////////////////////////////////////////////////////////////////////
8 B5 x3 d; E# \, k+ ~- { //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );$ S1 d* w6 L0 X8 T; H' m
//////////////////////////////////////////////////////////////////////////8 P) v, n/ r" n- ?
//////////////////////////////////////////////////////////////////////////
3 l. M [% k& p% i5 L CInventorySort* pInvSort = new CInventorySort;
A& X* e$ K# ]$ m: @( m# h7 Z vector <sItem> vItem;
9 s1 u5 Z3 h4 J# c" C vItem.resize(MAX_INVENTORY);//初始化大小
/ j# t5 a# n2 T) z4 c" o5 v ////////////////////////////////////////////////////////////////////////// G' x! _$ k6 z
//填充数据- j2 I K2 ~5 ?" o5 _) _
for (int i=0;i<MAX_INVENTORY;i++)! P6 r) X! ~$ V' b2 ^9 ?& w
{ I1 G. `. b; B- @9 J! z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
8 U/ f! ]* _% ]9 m' X1 {; A if (!pItemElem)
+ g. ?1 T! O" ?6 ^- G- B {
0 i' L. y( O) Y( x" E5 a2 g; B vItem.dwKind2 = 0xffffffff;( f; E0 a/ J, w; {: x
vItem.dwItemId = 0xffffffff;7 @% O9 w. V o0 l U
vItem.nIndex = i;
" H$ w- w% @6 A2 a5 [4 A5 u }else {# o* j2 e: x3 H, p4 L3 i
ItemProp* pProp = pItemElem->GetProp();6 B, w4 o/ m8 m1 j" `) s
vItem.dwKind2 = pProp->dwItemKind2; _% g e3 @9 {$ B- K' N5 D
vItem.dwItemId = pItemElem->m_dwItemId;. c2 c# |( b! Q& g
vItem.nIndex = i;2 B4 X. s4 a K: r6 k$ q
}1 T4 E6 f; h4 c. O
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; k1 x' I, G9 o7 s8 h$ g1 a }
# M6 E3 c8 @" N. z M //////////////////////////////////////////////////////////////////////////
* S3 x& D$ z+ X1 |( ^ sort(vItem.begin(),vItem.end());//排序
* N0 ?9 S. F5 B6 r1 U" X. D //////////////////////////////////////////////////////////////////////////# a$ N; _; \* ?0 f4 `8 x# p: U# y
//交换
% J2 J- h g3 S4 P' t8 e: V% w for (size_t i=0;i<vItem.size();i++)
- Z L+ h2 a2 B7 Z! d3 t5 l) H- L {
# Z' F _3 p1 _4 m7 @ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ A8 ~) L0 |* |' o- M
pInvSort->Add(vItem.nIndex);
/ q; }* E2 O+ r7 P$ I+ F# i/ m4 i }* V+ ]3 b' l) K$ R
BYTE nDestPos = 0;
7 [; C: \# p; B for (int i=0;i<MAX_INVENTORY;i++)
) I/ ]7 p) G5 Y# B& g3 j v {
! Y4 u2 O2 @6 D% \3 G CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
2 n+ M0 R+ y$ `) w if (pItemElem)
9 w }; B8 l9 k9 E {' [. i+ x6 L9 \& L4 k
if (IsUsingItem(pItemElem))
3 M& P9 ~0 a2 J$ x% w/ l; e2 Q {
/ s9 P2 u3 u4 h* i7 A: { //这个位置无法放; m+ y. ^4 E6 d
nDestPos++;
% A2 e; s. D+ m; Q f) ^ }7 E% T2 g- c: r+ s9 |3 q, R
}( ]% d0 a, v) o6 t- Q% [
BYTE nSrc = pInvSort->GetItemSrc(i);
5 I- D" k2 \! c, N! T pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);6 B( s8 F4 q8 r4 H
if (pItemElem)
% N# |) {1 l L {
6 p E$ l# J% U! A% J0 \1 T1 w9 H# T if (IsUsingItem(pItemElem))$ h; L! D4 t$ t2 w- V
{+ j( S x+ Y4 g# ^: t+ f* h
//这个道具无法移动,跳过: S# p. T. [5 |
continue;9 h, `: H" b' f+ q0 o% }, q
}$ ~3 d+ i* _0 P' N! i4 _
}else{
- W$ j+ S# [: ]& g! J //空位置 不用动
& o/ q- y1 H0 Z( R: R- ] continue;
; C" S) r) p, r/ ^& ? }
. B3 `' x6 \$ K$ w m //////////////////////////////////////////////////////////////////////////9 [5 e$ z$ G% g
//开始移动
& o2 C ~# X/ P if (nSrc == nDestPos)
4 v' F7 W* h6 v5 [9 x0 c. K1 Y {
+ T* } @# }9 r& S, Z' p //原地不动
- J3 O6 w4 p& S2 x! M0 [ nDestPos++;! D: \9 C1 k# f
continue;
+ o W/ O/ G# j7 f* D }: C4 o6 f- c2 y+ _( N
pInvSort->MoveItem(i,nDestPos);7 q: @$ d( ^1 F/ G) B! g
g_DPlay.SendMoveItem(0,nSrc,nDestPos); j4 d7 z' W* M
Sleep(5);
$ \4 N9 W$ X4 m( s9 q" c7 G7 d- P% C //Error("移动 - %d->%d",nSrc,nDestPos);$ H9 x' K; h4 q3 {9 m
nDestPos++;" Q4 b% h* L* u+ x
}$ u2 ]; `0 \! Z- D: t1 s; }0 j
//取第一个元素的信息7 U( m& f# ~8 y) h* a3 v& Z
/*% Z4 y1 u+ H$ I" p9 D, P
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)) ~' w( g# K1 S% M
{
) S: n: Y. M7 S& W Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
8 H: ]7 n2 }! e& Q/ v g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);1 e3 z) J& @( c
}
2 r* U6 ?' b6 V */2 `% c: R9 U h0 ^- Q
//////////////////////////////////////////////////////////////////////////
7 ~& M0 g5 a( [ break;
8 l: B. ^9 u% v- h }& T, L+ x* W h* C/ M2 c
} ' ]2 K0 \" \5 L; j1 i$ R) m2 G! E
}
/ i8 t# H* s6 a) |$ Ym_wndMenu.SetVisible(FALSE);- v) S! ^6 g( ~1 C# P# k- V- [
. c& {1 |% V }3 |$ \--------------------------------------------------------------------------------------------------------
- _! Z: U5 G9 W% V* ?搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)/ e2 p* u i' I6 C3 S3 c8 K
{
8 T: D8 q# L/ h; m9 O/ s- aBaseMouseCursor();
$ B$ J5 [# _& P, e" u}
, y! G+ n! y( }/ K( |在其下添加:3 B2 N. e0 A8 ?+ Z
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)( y& R+ T2 c' y/ e
{
! Z, [: n+ N) t' [" Z* Sm_wndMenu.DeleteAllMenu();
" M9 ^) Z9 Z* N) n$ [5 tm_wndMenu.CreateMenu(this);4 \6 Q0 s( d. `. S. [* M, G. j1 b
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");# L: P, _7 c T2 A. [) J5 W
c! \8 e6 s& kif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; S4 b4 i. r, j6 C- E{
9 o+ t/ _, \6 Y* Q( s$ d //P以上级别才可以删除所有道具
" E8 {- k1 F8 I m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
! c9 {3 a/ s: f0 r}
: r8 x+ y; v4 H' cm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );! t6 S1 y$ Y/ I" R& d) {7 K
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );. a- A. r* l- v% i( B
m_wndMenu.SetFocus();
" a* s6 {, c5 }2 K2 g6 l}
3 R+ t4 [ M' o7 I" S+ k------------------------------------------------------------------------------------------------------------
' h( S6 }9 J/ a( K- ~1 Q8 a7 L" A8 Y*************************
W0 p5 R$ ~" B# DWndField.h文件7 Y5 {9 p2 T3 B" ]. B
*************************! z2 j1 G2 ^4 Q: F# }6 B5 {
搜索:BOOL m_bReport;7 G. h* [2 W9 P% N1 K: a | h
其后添加:$ d# S- B2 {% R. B6 ~5 u5 n
CWndMenu m_wndMenu;
5 `( j T0 u! B( ~$ X% w搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
/ a* E# j& ? H! M* }其后添加:
2 a9 ^: I2 ]+ O! S* J& Uvirtual void OnRButtonUp(UINT nFlags, CPoint point);
: l5 ?& F, Q2 H0 A7 L
, M% \% [4 h1 o. ?! y
. p6 P6 _! T7 U9 Z5 v5 ~7 x6 ? |
|