|
|
源文件中_Interface文件夹下WndField.cpp文件
! O$ H9 }4 N. ]) p$ X+ y3 I搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
f7 \9 @! w/ e J$ g# T d4 ~) N
! d' b* i% q; h+ G( d" V0 qstruct sItem
' f1 U x! n8 X7 w K{7 N5 i9 x( y$ a3 s
DWORD dwId;9 v# @. ^% | f7 m3 d m$ }
DWORD dwKind2;
0 X; L3 h# ^& h) s. C6 ]) r6 IDWORD dwItemId;
" ` T4 Z( t' A. F- }' eBYTE nIndex;* ^7 [/ B/ T7 S4 p; E: [! M
sItem(){
: e# g' ~" e9 s; `/ Q+ g dwId = dwKind2 = dwItemId = nIndex = 0;: B0 p/ S! N3 w
}7 o8 ~2 g/ P d1 m6 C$ @6 K* ]' C
bool operator < (const sItem p2)8 n' q4 n4 j3 N9 L! w( s6 M
{
( L0 p" g8 H9 s( d( Y if (dwKind2 == p2.dwKind2)3 j( M" y+ i# p4 w$ b& a4 l8 T2 s
{
+ c, {% v3 @& s5 s' k; V7 ^# _% ~ return dwItemId < p2.dwItemId;4 W6 p6 i9 h' V, Q) ]
}else{
) O8 y. c7 N4 @( K: E1 X" Z# d, B return dwKind2 < p2.dwKind2;2 r# D6 {1 n3 w# ]/ j) B
}% {! [9 B. B( L# y, t0 b" Q
}" f% z) r8 V+ `; A" ]. L; Z& t8 |
};" H3 s6 V7 e: \0 h+ S* ^; I2 e1 V
class CInventorySort
n4 K# f( C# R5 L3 V- _0 x{: [# [) X0 g( f
public:
0 U4 I! M2 g! Q* MCInventorySort()
1 `6 c! ^; A! @4 m% `- W{
: D' a6 ?1 ^' V) U m_dwPos = 0;/ m! V% b9 B1 |3 i Q1 |
}
- }# t2 k, ?& A3 r~CInventorySort(){}9 c) T, F% |) Z; m e3 ^! O
private:6 ], v. r. w y0 m( g3 j% w( p
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
- C6 q! Y/ W" d+ sDWORD m_dwPos;
$ U# @& i4 }- @) k" B- Lpublic:( `4 Z0 k2 K2 H* X: J( \) \" x! j/ j
void Add(BYTE nIndex)4 {# n# u. X5 x" V
{+ s' b5 O9 F" m. V* @! X3 ?
if (m_dwPos >= MAX_INVENTORY)
7 O | _$ `$ F/ G" y# ^/ y9 ?. n {# f; a0 L# f/ Y6 P8 {$ Y
return;
! e7 @& _( a4 ` }- C* L* [& B" ~$ [! Y/ O
m_Item[m_dwPos].nIndex = nIndex;
! N0 }1 q8 |, c% T: e- g* ~8 \ m_Item[m_dwPos].dwId = m_dwPos;* L* g, B* m6 t& j9 H# Z P; L
m_dwPos++;9 F) f4 w3 B( u. G
}
7 A0 m/ q; G# h6 ]8 _4 k) @" aBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
) \' O" |" X, Q% F5 `7 i$ }{- [: N, m: ?: }) f/ A0 P5 s) @# z
for (int i=0;i<MAX_INVENTORY;i++)
' w: C- B! w7 @7 p- r$ ^& B1 p2 E {
# _# S, S% Z8 |! H g% \ if (m_Item.dwId == dwId)! H& |3 f* W# `6 B
{
$ q) y+ v( o: b4 J* [$ n return m_Item.nIndex;/ ?7 y: M. [( s6 B& ^9 }
}; Y! l' d; \; n0 _/ x5 y9 W
}7 H" V! P! _$ D; j2 `4 c4 |
return 255;0 C5 K; ^) o$ f% L; J& ]
}! c( A3 P) W8 M) X7 o1 R; r& [
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置$ J/ d- y) E' l( Y3 r
{
9 E: ]* j- W) S B/ k BYTE nTmp = 0;0 `9 L: K& _4 _1 [
bool bDest = false,bSrc = false;
8 y; o$ _$ g7 t f& \: t) D9 I9 Y for (int i=0;i<MAX_INVENTORY;i++)
2 ?# b+ o6 X/ X# H) k* Y9 S# E {' j/ V' E0 f. |9 a( Y6 j
if (dwSrcId == m_Item.dwId)
9 q f3 D8 U1 U# y& I {
/ W# T3 q- t* \ H //id相等 则 改变对应的dest和src1 z% a0 ]/ m/ q
nTmp = m_Item.nIndex;! C* s; o2 v- Q7 h2 }
m_Item.nIndex = dest;- t' r- l7 ?5 Z% L3 j5 V
}
# k3 }6 S6 @4 H' r' s x, h% G }
/ m1 ^7 @; A5 f //临时数据保存完毕,交换开始
9 J4 o( g/ @: O" G( P( t" T, U for (int i=0;i<MAX_INVENTORY;i++)# P' A% _4 R$ H% {6 N2 `0 |% j
{% J1 v% A8 K( |' i# n. m
if (dest == m_Item.nIndex)
; T1 L4 {+ E" G {' S, E, F: D9 x$ d
//id相等 则 改变对应的dest和src
" Q/ g- h% A% N/ J m_Item.nIndex = nTmp;$ z( [% M3 |- ]9 b8 Y
}- K1 Z" w! [% g2 A" j5 j% X
}
8 r! w; U" p$ z( f}+ l- N! }, u% t) q+ {
};
& |& K; o4 c, E7 y-------------------------------------------------------------------------
* y! i- w- J: k% V1 A依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( s0 j+ M, O/ v1 x+ S K
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);; C, B; e( k" R
紧靠其上添加:
4 }) Z$ S4 v$ l h/ xif( pWndBase == &m_wndMenu ). k9 m1 R- v' e9 y
{3 [/ f- K* t( v u" s l
switch( nID ), b: t4 U k: r' d/ _' E9 ^& r
{
4 p9 O9 ]% U/ D9 B& J6 A$ A case 2:
) ~# y2 s, K- s {
9 l9 V) d5 o! g //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
2 z7 \, P5 s/ u/ b5 U7 o* {" m if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ B) t+ q& E* L) q2 n
{" J! S7 f$ H+ A( s: J$ t: _
break;
4 w2 a1 g: b4 X- B% O- O/ R9 M- o }$ m y7 ?; R4 y
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
1 q+ b6 F$ u0 x; J' O {
# L: k4 A6 d C7 N$ S1 X CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
+ p) g$ ~, ~4 ~* k8 \) L& W if( !pItemElem )
) p" `" m( _0 X. X+ v" n continue;
0 J7 ^8 {. k' F% l( Q3 j" l if(pItemElem->GetExtra() > 0)- C, m# B* K% P, T$ g8 {' ^
continue;
. B# O8 O @9 N9 D! P/ X if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) + i/ P( a+ r1 h
continue;
% D. |4 l) P: {: D/ x+ N- h# ]5 E if( g_pPlayer->IsUsing( pItemElem ) )8 j) K ~/ ^0 R4 V0 N* t
continue;2 M4 W5 Y' p2 ~" @) q& o" R
if( pItemElem->IsUndestructable() == TRUE )
. H/ z6 ~" y& m' ^2 @/ D {8 o( u7 i/ R2 X" W( V( D0 t X8 F
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
9 p0 ]: m& j0 P2 J continue;
$ c9 E! e3 @$ i q% j; l }) g+ w3 I _' p8 J' c+ p
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);) p0 M5 F: |2 Q: P! G2 Z* n3 V! a/ a; `
}
; O! n+ r0 x' x; ~* m" w$ v break;
( r; L" s* }+ W# J( u }' K7 @4 j. m' F$ h7 I8 b6 }
case 1:
9 J5 D/ H- b. v' y/ H4 B Y) ? {4 D7 f2 k/ a) o4 Z1 y: C0 _
//整理背包" R7 Q3 P% `* h( A7 M) A! N
//////////////////////////////////////////////////////////////////////////0 A0 D* T* m( S# J0 R
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) ); I$ f' F" j" r# f! `; ~
//////////////////////////////////////////////////////////////////////////1 u. \ P6 W% t, ?& j2 D
//////////////////////////////////////////////////////////////////////////
/ {6 ]2 o0 h8 a4 N: o- w* c# t/ \* l CInventorySort* pInvSort = new CInventorySort;
o, k% P. ]4 X2 b vector <sItem> vItem;% C$ {1 x9 F) v
vItem.resize(MAX_INVENTORY);//初始化大小
8 M0 P/ G7 x) L! d B //////////////////////////////////////////////////////////////////////////9 P4 _* N. ?* x+ p6 K+ A
//填充数据
1 H. J+ X6 o& g* q7 p for (int i=0;i<MAX_INVENTORY;i++)
9 d( c& M& ~0 d3 c2 j. O0 ] {
; V7 C' |6 s3 Z) H4 D7 M CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
8 `& p# A& ~0 x1 u( f3 e if (!pItemElem)) d+ g) @' D, x+ N
{
+ X* P$ g4 D+ W! w8 R+ l# M6 \1 X vItem.dwKind2 = 0xffffffff;* L; {, {; y9 c6 }; [4 H g
vItem.dwItemId = 0xffffffff;4 R* S5 \* u( @ y, `1 R
vItem.nIndex = i;% H L, E- c& e! R$ c5 {3 I8 }
}else {
/ ^) p# a: m$ E( y3 S, C ItemProp* pProp = pItemElem->GetProp();& Z4 z. B, ^- R4 q4 w
vItem.dwKind2 = pProp->dwItemKind2;
1 e/ l2 }6 P9 U+ Q: F( J% j9 Q vItem.dwItemId = pItemElem->m_dwItemId;
4 X2 {0 a5 P- f% L5 P2 X3 x vItem.nIndex = i;
+ h# w' Z/ I# V }! Z2 C O7 f/ U* z+ M
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 E0 C; J5 ]2 p3 W \. y# C }
. a( Z3 o" L; d/ Y* A //////////////////////////////////////////////////////////////////////////; g+ u+ ~& a+ W. R h9 O4 I
sort(vItem.begin(),vItem.end());//排序: {" h' x( N4 ~% }+ I) l/ ?6 t
//////////////////////////////////////////////////////////////////////////% U% Q+ b, R- v8 o- k/ o' H
//交换5 A$ p& D o5 v, e+ ?; H- `$ V8 Y" i
for (size_t i=0;i<vItem.size();i++)# R# B: G" A& _( y7 y
{' J# j) B8 ^: H0 U" i
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);) n t; G7 }6 Y) e6 f u/ v
pInvSort->Add(vItem.nIndex);
0 s& a% K" n- }. C6 C% h/ k" f7 h }
0 ^) L$ o' ?2 j2 a: Z; O9 n$ S BYTE nDestPos = 0;4 M* [% e# ^+ Y4 U7 U; {1 `
for (int i=0;i<MAX_INVENTORY;i++)
, O2 B0 z! d9 z1 x: t' g; u( ? {
1 L; b( I) m5 a3 n( z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
( H$ z4 ^8 g9 u1 w if (pItemElem)% y9 H- \, F" d
{ S2 i) F! x' e V- U T; T
if (IsUsingItem(pItemElem))' ?9 W+ G' @4 ?5 U) g
{) R& e5 t* z% x3 \7 q* B/ x. h* K
//这个位置无法放
& n" ^3 R' K7 ]/ q nDestPos++;
( Q4 e* W& d: }8 y9 k, G }1 O1 A4 K" \! v, u
}5 R: r) R& ^ }% q
BYTE nSrc = pInvSort->GetItemSrc(i);; N: M, O! z2 i1 k3 |! x5 H% a! R
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);9 Q$ F6 d6 I% ~' i
if (pItemElem)( v# K, n# C( r; E7 C
{; F6 H% G+ I6 L' K! p8 `$ m+ b
if (IsUsingItem(pItemElem))
4 o1 e- V ^9 }) r) Z/ j {
" }: _" `5 I, Y! e1 Q/ K //这个道具无法移动,跳过$ i! m+ b1 b- S- b4 K
continue;
/ p. B! y* G1 { }
( _ A+ A8 m. I; W }else{* A! m! F6 ]' _6 U4 h$ S
//空位置 不用动
" R5 R+ M: @- ?6 T+ I3 D continue;
; f3 t) B I2 T5 n5 ?5 Y1 {4 M }4 p1 s+ W" E7 {
//////////////////////////////////////////////////////////////////////////, Z U( r$ `* b5 {3 o' Y
//开始移动0 U2 g. Y0 e8 K/ M
if (nSrc == nDestPos)
" d8 `, x- I1 A. p$ q/ [: Y" @* }4 m {, A/ g6 F4 C# e \
//原地不动
, I" _: M1 \, Q6 l nDestPos++;
" T/ C0 f, f7 T( m, I! _- A0 }. u continue;
0 U6 M+ a* ^6 E* O0 J; q9 K }
& n% E1 d9 r) D u/ K pInvSort->MoveItem(i,nDestPos);
" k- ~" t1 K9 V' R; n. Z2 U4 v g_DPlay.SendMoveItem(0,nSrc,nDestPos);& q, k& O% E( M7 _% r
Sleep(5);
$ v; \( ?2 J6 K4 M/ t3 w% V //Error("移动 - %d->%d",nSrc,nDestPos);
% K8 n9 f: Z" K" c( l nDestPos++;5 i8 a" Q5 m- T3 j, W& j9 _% q
}
, G, O* H2 {- d4 Y8 |6 I- V/ R! _ //取第一个元素的信息0 h3 T8 A+ a2 C. l5 ~7 @4 a
/*
6 \ Y( C0 }& E2 v7 N5 ? if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
7 o% \5 H% `! k' B {
8 w8 ? ~$ Z. \* z, e+ i1 V0 B Error("Move - From:%d,To:%d",vItem[0].nIndex,x);# c; A4 |! W( `: l: s# B3 X
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
4 Q( D6 C. ?- s6 b& p }; P4 C) C; H4 m/ r- ]
*/
3 r; C' i! m2 [% H. x //////////////////////////////////////////////////////////////////////////4 C7 \ j. W5 Y$ E
break;
: H8 t3 |% P- U) y }1 {& C! u7 f8 s6 y; p8 X
}
( F8 _- [+ l4 Y5 A}
( A, R' z: q* U: W' X5 K: tm_wndMenu.SetVisible(FALSE);
0 D: z3 r) F7 u4 l+ _$ |8 a2 z' a; b3 _+ g; N/ X+ Q8 S
--------------------------------------------------------------------------------------------------------
2 s; B1 M3 V1 m* M; t9 a搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point); {4 |0 U+ ?( o$ y' S# d
{
! }5 a2 M$ E0 w6 \BaseMouseCursor();
' `6 A% s o! J9 o$ R7 b( W b}- ~! {( g( {9 n- ^8 y
在其下添加:
+ o4 Y6 ~9 V; U0 Z+ _void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)2 C0 x9 t- A! e0 S9 e7 [" h2 Y
{' C1 ~$ h" {& T$ y9 L) f7 p5 g
m_wndMenu.DeleteAllMenu();
; \1 a9 ~4 Z& _* Z7 Mm_wndMenu.CreateMenu(this);, a9 S% _; i! p. D3 H3 B7 r
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
3 K; K# x% c. X- [. y# c: B! f8 E* G, x' D4 Z
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 L X/ d: E4 D( G( k# _{$ s4 F% b3 J1 {0 _" _- k
//P以上级别才可以删除所有道具4 h1 o1 l, \( I% U+ o1 @' T
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");3 V( c3 @$ H5 T8 _% c8 U
}9 l. e7 J# I3 q- u
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
) k. u. x/ D; [, am_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );) ]/ N+ ~4 E& n- s9 `. E
m_wndMenu.SetFocus();# c( Q6 ^$ H' m
}
# @4 r% O: v+ T8 ~; r" S' N------------------------------------------------------------------------------------------------------------
8 `# U5 X& w" m6 ]*************************4 K* P; J0 T% O: j/ C
WndField.h文件0 a& J$ `+ K* B, I5 i! w( B I
*************************: _: q1 D: a# _( w( w/ B& N
搜索:BOOL m_bReport;
) G8 O4 C" P4 [- r5 ~% O其后添加:
2 W- U! |: w! R9 c# L( ^CWndMenu m_wndMenu;
4 {, y9 R# E0 k i/ U搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
. ]0 ?' P: j7 a2 p8 b- }其后添加:3 L$ ?3 n1 y2 u7 B% l6 W2 J
virtual void OnRButtonUp(UINT nFlags, CPoint point);" @) M) r# X( e
6 y/ g+ G8 P. @+ P8 \ P
, j* u% a, u2 `- B1 I
|
|