|
|
源文件中_Interface文件夹下WndField.cpp文件
8 }# Z. g4 D R) @: K+ M M搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
- }* h2 _4 C' M* s
4 L! P/ ]/ F# h& I- b; i Fstruct sItem
1 ]4 [+ [7 x# I{6 H) ?3 Y2 j. f' Z g# Y
DWORD dwId;% }( J& A; h' m* ^ o& s6 @( Z
DWORD dwKind2; T& q; z1 p& r( @8 \1 v
DWORD dwItemId;* t) |; Q# p# h+ O
BYTE nIndex;
% i7 `- ]. d5 m( ssItem(){
c" S& `* }3 Z. E dwId = dwKind2 = dwItemId = nIndex = 0;
- f$ t' {5 ~$ d& V}
2 T4 t' F, ~0 G k! R) _bool operator < (const sItem p2)
+ j% U+ m) G0 B* h{$ ?) ]; l8 E# t7 U
if (dwKind2 == p2.dwKind2)
/ t t+ J7 Z4 b t3 l {
: g: Q( e( y4 C! G7 L9 f return dwItemId < p2.dwItemId;
" h( `6 N/ a$ W7 n: [ }else{4 F: l- D3 G) x$ l
return dwKind2 < p2.dwKind2;
) ]+ u* {5 Z; w }' K; @9 G. o# G. t
}
5 p" G/ Z3 I. T. H};
3 `4 n+ h, {- T9 B; _ q* W2 dclass CInventorySort" Y; P6 Y- S* E6 ~6 J" B$ f3 Q. ~
{
8 n/ |( d0 |' @public:. [1 T# q$ {2 \: ~& P
CInventorySort()1 d9 p0 u% b" E, J! ?. L
{
6 b4 I/ I; m: d6 x: c m_dwPos = 0;
S, h, I2 H {3 G D. {& v- y}
2 k) j5 s+ L# `& i/ x~CInventorySort(){}
- W; P7 l3 s8 F$ D# R/ Z% wprivate:
9 @6 c9 k& {. p# q: q7 t) r: lsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息6 g6 a4 K, @- k2 A: M5 n
DWORD m_dwPos;
9 p* Q" p3 X7 G, Npublic:( j. H4 X" L" D. a* ^
void Add(BYTE nIndex)7 w9 ?1 N3 `! C [' s' |* }
{
. `- n% I# D1 M6 u3 j if (m_dwPos >= MAX_INVENTORY)
# u% l$ F, R, P l1 { {
# ` A7 X1 ]1 R$ t) p9 _ return;- c( M! }5 D! G9 e }0 B2 u9 e+ b
}8 z2 A! i9 H% c. P& W: I
m_Item[m_dwPos].nIndex = nIndex;
2 Z( p1 I& X# O9 x, y m_Item[m_dwPos].dwId = m_dwPos;
1 N' C$ P! |2 v: i m_dwPos++;
: z$ h' k( {- V1 i7 F2 S" c}$ u. d# b$ O7 _4 p& k- a4 z! w# D
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
7 v& `; m" `) m; t) }3 P1 b{9 ?4 y: n8 q! z
for (int i=0;i<MAX_INVENTORY;i++): t" }" u# {+ I! J8 E. ?
{( n( Y' M4 x! c4 d5 g' ~
if (m_Item.dwId == dwId)
7 ]* D7 C( g4 z- ]8 `9 h {# ~; J* k6 S5 V9 W1 Q6 t
return m_Item.nIndex;
( d2 f9 p; r' m. j5 d4 ?! f }
( G1 a! e; M# J2 o }
3 \# G* \3 Y2 F, e' ?0 M return 255;
2 }7 M- N9 o4 y, I* X5 ]}
[3 T; t4 |3 ?7 s- K% K# |void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
7 p- Z8 {# W& v0 n8 e5 L) e8 ]. l{' I" `! c6 O9 e4 @9 j1 S: \
BYTE nTmp = 0;
8 B3 w+ O* c3 d" b9 h bool bDest = false,bSrc = false;6 K ^- J! J Z# w0 B4 n: P
for (int i=0;i<MAX_INVENTORY;i++)
0 Y% w: c+ E* @1 T. ? {
0 v- o* o( q9 d$ {; X3 ^. N' M if (dwSrcId == m_Item.dwId)
6 u+ n. P1 h- C {
3 @, M8 c& U; T* [ //id相等 则 改变对应的dest和src
8 \/ @5 @4 S5 { nTmp = m_Item.nIndex;
! |- t# `* k7 T' `, g m_Item.nIndex = dest;+ h5 G+ j) l" y& l0 A o
}4 m5 \3 R" t: g" i
}- g* D. S- ]/ b0 T, u9 H
//临时数据保存完毕,交换开始0 y y# R0 Y# M& L$ r1 E
for (int i=0;i<MAX_INVENTORY;i++)0 `2 ~$ _+ J+ s# l& l! [! A3 X0 G
{
1 I$ x$ v1 ?* T5 y9 K# @ if (dest == m_Item.nIndex)
2 s3 S# ?! t3 S9 s+ R% E {! j% e9 j! i( [+ T* @
//id相等 则 改变对应的dest和src
; v2 [# o( Y9 P1 k" k: D m_Item.nIndex = nTmp;
' T* T, Y5 h1 ?" p; p( Q1 K7 G. p }7 z/ m. ^$ k6 d& ?+ s$ o
}
0 k! t2 N7 D9 o) a$ `- Q}
5 }0 p% y# v6 m. u% M- A7 n};$ R# k1 A0 R0 S: W7 R- X7 N
-------------------------------------------------------------------------9 Y) k+ [* X' Z/ P8 g
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
! p# f3 ^2 }8 ]" I+ c搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
8 @+ K$ ` q/ A' i+ d+ ~0 @, w紧靠其上添加:
5 ]6 [4 a# P% x+ ~if( pWndBase == &m_wndMenu )/ T- E! Y: W6 z
{- l4 Y# h6 j/ G5 [* w' d/ W
switch( nID )" r/ H1 }' T) R
{5 M8 q) I6 C; P5 p! M( o) d
case 2:: k+ x- f9 t/ ?$ s( P
{6 ?! c2 ]. n4 f$ P, W1 i$ U
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
1 }7 X. t7 d9 P! b" n3 E if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. {. Q" ]/ I, s5 j! Z, i7 q2 O {
# k& ?) q: A- _) h$ a* r, c break;
+ j3 g! w: F+ r" K3 `* I" N }
& z5 H6 O$ S& _6 ~9 q for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
% f; g# P9 E1 }& M" e {
; d! c* p+ \( F1 v4 x* {" g0 Z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i); k9 b# J! M- o
if( !pItemElem )
3 |) s. b- W) N) f! B' \ continue;
0 X% M8 W' P8 o+ s; U# X3 h if(pItemElem->GetExtra() > 0)% n$ m+ o3 i$ {% V. s6 ~! L9 i
continue;
5 L1 M" ?' O) _# B4 r3 I4 W# z+ V if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) $ o9 t0 W; d5 ]; E
continue;' I3 k# K9 N2 y) Q% ^% i
if( g_pPlayer->IsUsing( pItemElem ) ). R0 }3 j9 p* b7 g/ p# U l
continue;
- L% `% _- n. r8 Y) v if( pItemElem->IsUndestructable() == TRUE )
' C' l5 W5 j8 n2 O% v( ] { C3 p3 ^+ @1 e3 h4 x; u
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
* g) r8 j0 ^. Z continue;, a- ~. n% |, @0 ^
}+ |+ S: ^" u* H
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);6 F! [( Y# v# ]; L$ {- m$ [3 V. q
}
3 p3 e- r( ^" _( c7 ~ S8 r break;
U% `# s/ F$ N9 ~ }2 _4 o& B; {- f+ t; i( d# f7 T
case 1:
2 g0 y- `* j* y. N' _2 S# `: J8 q' ^ {* d1 w- m' i1 |6 D: n8 Z
//整理背包
+ S# o$ [ g5 ^) @4 z$ h4 ?" v) p //////////////////////////////////////////////////////////////////////////
( G( K6 e& E/ F% }1 p. z% ?5 q* R: W //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
% R2 l e6 H# M$ i //////////////////////////////////////////////////////////////////////////# p6 m7 ~) }/ Q: V/ \8 m
//////////////////////////////////////////////////////////////////////////' Z+ Q" u1 ^9 n! b y
CInventorySort* pInvSort = new CInventorySort;
% ~1 o6 w- s: D- ?6 ^( R" s) x4 l& @ vector <sItem> vItem;
- L5 t& i; V3 {* h vItem.resize(MAX_INVENTORY);//初始化大小
5 F$ U8 v. V2 [$ D& I- h& \ //////////////////////////////////////////////////////////////////////////8 e H* r. Z) f
//填充数据
4 F2 R/ B: n) Y7 C2 O/ ^ _ for (int i=0;i<MAX_INVENTORY;i++)1 _3 H4 u9 V) A5 m, [4 d
{
* ?" z, T8 |$ N6 k% T2 @ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 b. l( U( t- j& c& o
if (!pItemElem)! u# X5 }0 a% U" y( N
{
# L6 x4 G/ W, r7 w8 e0 [+ { vItem.dwKind2 = 0xffffffff; Z8 R3 c# U; [& _3 E0 F
vItem.dwItemId = 0xffffffff;3 s% l4 t( P% Q1 w2 `
vItem.nIndex = i;
' }) l3 c) l/ R$ j `4 C }else {
" o0 d" n* Y0 ^; G! O ItemProp* pProp = pItemElem->GetProp();
2 A, e% {( p8 a# u1 D8 q vItem.dwKind2 = pProp->dwItemKind2;* n. S8 \7 n$ y) K' ~- Y4 {
vItem.dwItemId = pItemElem->m_dwItemId;) W; v8 F- F) q
vItem.nIndex = i;
5 s' v# O( v n# n% V; T# S }
$ T7 t( c' E9 L6 t; ? A$ v //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' h" U7 C" I6 B5 D, W
}
- |) t/ i2 N! _9 {$ V) F. P //////////////////////////////////////////////////////////////////////////
~. ~$ q1 G9 U x# S/ D1 ~ sort(vItem.begin(),vItem.end());//排序
3 l1 G- M. u" {/ K2 @ /////////////////////////////////////////////////////////////////////////// P! H, \5 e# P- G
//交换0 _! S9 a& y( E
for (size_t i=0;i<vItem.size();i++)
6 J8 n: K/ C( M {9 W3 w% {6 f; B& w/ k
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" O" Z2 T. H, U4 k
pInvSort->Add(vItem.nIndex);1 w( s* o' |3 ]* I8 ^, |
}- F8 r$ f/ {: `7 p4 c' s
BYTE nDestPos = 0;
$ z- @3 x( a) \* _) w for (int i=0;i<MAX_INVENTORY;i++)- ~/ y& C5 {' N( _
{$ @2 [9 h: O" T* b1 ~! M; v+ [2 m
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);9 l: ~, N' F) K7 U* y2 ^( R
if (pItemElem)* \+ D- O& O. }* N4 ~: w' T7 X* _1 C
{
+ ^) O) k* N8 L- C9 ~ if (IsUsingItem(pItemElem))
1 l' o& [) z6 f, ^+ W s: A {
h0 o# h% ^2 F, u ?, ` //这个位置无法放
8 W+ d2 H6 h/ Y# N nDestPos++;
& y {; i6 r8 Q: @/ e+ k% N$ r }* Y& \9 w) L0 X" [ ^
}
# ]$ y+ R. i- G5 G0 _$ q0 T% F BYTE nSrc = pInvSort->GetItemSrc(i);& d; ]4 q! |9 F# m$ d0 d7 P
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);/ x, i& ?. U3 C6 ^2 k6 j
if (pItemElem)4 _* z6 J4 v# y8 q
{8 u! u1 o) `* b7 e N) q4 z
if (IsUsingItem(pItemElem)) P+ E9 ]/ M& @6 C" f) J% a
{+ t1 b+ f8 @8 S( y3 D% ~5 Y+ i2 d
//这个道具无法移动,跳过
. A7 g1 [7 n. B: [; M. R5 h continue;* c7 i) j q! u& p7 N
}& x+ u/ H! z2 t& o1 o" J! T
}else{
$ x+ I+ e& D* \ //空位置 不用动8 m" f1 m8 k1 {7 U+ d1 K1 B
continue;
& i7 Z U- f u+ Z8 | }
3 X6 ~/ M; ^3 Q8 m e0 Y //////////////////////////////////////////////////////////////////////////& P+ O8 n9 d- C% H9 Q
//开始移动8 l7 f5 _) i3 x- w9 o
if (nSrc == nDestPos)0 Q' A9 \+ H, |0 V
{
5 m. g; ]6 u" V7 O //原地不动
% }: [: K/ i0 u4 g, _ nDestPos++;* O' e% j0 W8 s2 x+ `
continue;
# L6 i3 Z1 }9 l* Z. S }
- f1 J+ r9 P" N1 j+ h pInvSort->MoveItem(i,nDestPos);! D+ [3 `8 _" _
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
& _4 P6 [5 \3 x: G Sleep(5);
% t$ z9 K+ u* g" e/ V //Error("移动 - %d->%d",nSrc,nDestPos);3 `" O; E M/ n% G" u& x) S7 {& Y1 U
nDestPos++;
0 T. }! u, P- D* f7 Y }
' l p' V1 g: `& g4 L; B, c$ H0 P) R7 J //取第一个元素的信息/ S0 ]5 d4 ?2 Y2 L2 n& f! T
/*
3 S! {' o9 i$ u" C& M if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
& U1 d2 ~# Z. W' W. } {% h2 p( {$ w& m# `) H2 f1 I4 W
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
2 R: t' L: D2 w* f f& ] g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
) |" G( [1 F3 x, V$ o }
0 j# c0 P) O& L4 I' g! K. z5 [ */
, y$ `7 D, \0 A4 \* B w7 N //////////////////////////////////////////////////////////////////////////$ H9 {7 O' w, o& ?( F
break;
. L) ]: P8 q* l$ p3 _! _& E }
/ I& h2 b& \8 J* N/ O: @ } * ^8 A+ Q* x) t/ x& y
}- A) ^0 ?! h9 |, }$ Y2 s
m_wndMenu.SetVisible(FALSE);
, q1 j4 B4 p K$ L& F- i' P; @4 L) J H; a( A. E& A% b5 U t
--------------------------------------------------------------------------------------------------------' x# \3 g0 n" W/ A5 x) o2 d
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)4 L1 C. S1 h) k: B# ]
{
% } Q6 G* h) w2 v" gBaseMouseCursor();
+ E7 @8 U0 f/ r R/ e}
7 D% F1 f% a8 v0 h% I+ b在其下添加:. L9 r$ q8 _7 Y7 v' d: n/ Q8 O# l! y
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)+ a. t% h" p Y b1 ^% @# _
{
; @. w% h# s: Pm_wndMenu.DeleteAllMenu();
" R T! L# t& B- C. b3 I \; [m_wndMenu.CreateMenu(this);: Z; M, @! V. K: R9 L9 `
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
$ o" b4 K$ N) W' N2 |* q+ S
% k) t- Y+ L( T# m. V8 I/ Fif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 u: d0 h& O: [8 y. M{+ t5 G5 ~: q& D& {) M# P
//P以上级别才可以删除所有道具
% ]$ O# q* @5 N m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");" l5 L4 o. R& U
}
8 A0 f% T! V, ?m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );. I9 N8 b7 D) q
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );7 Q `0 l2 z: B6 L/ G Y( d
m_wndMenu.SetFocus();! t+ z- @, N2 T p: ]
}* D/ B( Q2 n+ _- z
------------------------------------------------------------------------------------------------------------% \+ @; P/ _6 ?6 ], n" @5 G
*************************
! J1 |' J2 I4 j+ pWndField.h文件
+ v# M+ _7 e* E* P8 `: d! j*************************3 ~) S1 W9 T8 m0 S' g8 k: {
搜索:BOOL m_bReport;
# Y1 B. t3 f* N7 a其后添加:. n- ~ n8 I" ]. M( K6 e5 W
CWndMenu m_wndMenu;
+ m$ k/ M; ?0 ?- ^' z搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
' v# e" e I0 ]! m- \6 c其后添加:% K* O- ^; s9 t5 y# g# n$ w% \/ g! ]
virtual void OnRButtonUp(UINT nFlags, CPoint point);
, {- r: ^5 S/ R5 q# X2 C
' i' N/ X5 \: q4 W* G- u
2 l2 L5 e% ^+ h, ?# c" O |
|