|
|
源文件中_Interface文件夹下WndField.cpp文件
) r# s9 P5 d2 [* j. P# @搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 M+ x$ k# q5 @! ~; H) H
. N8 ~ r$ N" j( }" S' t' ^
struct sItem9 G1 P' v/ N: e! }1 r% u6 E
{5 O" g. w& V, M( H
DWORD dwId;7 }% f; _2 g6 D- n* p$ i) q
DWORD dwKind2;! p! p; F; f S W
DWORD dwItemId;
9 C' m, B. e w- O1 p& a+ dBYTE nIndex;% l7 @7 v- w1 d2 g
sItem(){& v& v, H" b7 k+ }( x) Q8 k
dwId = dwKind2 = dwItemId = nIndex = 0;* |5 {* Q0 z7 s* S; v- g5 j, F& t) G
}
/ ]5 V- b2 t r" ~, ?' X4 H9 Pbool operator < (const sItem p2)4 h" q0 O- B& B$ {
{
" m! ~ {( Z' N; o if (dwKind2 == p2.dwKind2)
4 N: W6 D0 G/ g9 u0 @ {
]1 L; x+ C# d/ }; j& S return dwItemId < p2.dwItemId;0 K5 z: \9 O A: {
}else{9 y4 u# k, N u6 K1 P) f
return dwKind2 < p2.dwKind2;
, E2 m: J3 M2 h$ Q) u k }
3 z- @* L3 C+ `& h2 j! ~8 R" [& G}
5 `1 }; c$ N/ q6 Z};
2 f' ?/ j& `' z mclass CInventorySort
) m# H9 s9 ^( `{) ^* t6 V: i% v9 `7 m
public:
& b0 T/ U, ~2 r5 u3 _0 B gCInventorySort()0 E+ {# O% F+ a! G* b7 m$ C# \
{ F1 p: p" G) e* j4 e
m_dwPos = 0;
4 j+ k- ~% y, T: S, |" F}* s3 g% q' [ R0 \
~CInventorySort(){}
) p& U' @* d) H( Y' {private:0 F3 R3 G/ ?! O! _
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息8 b; s, e: x) E
DWORD m_dwPos;3 y+ \. [- c& B" G. H0 @
public:3 m! J) i! q V0 G. L& X
void Add(BYTE nIndex) o/ \' _# q9 S* `
{ a G& v( e& V7 y6 q% x% K
if (m_dwPos >= MAX_INVENTORY)- Y$ P3 h9 c' Y! Z1 n) y9 c7 o
{* k( U: ^5 m$ S% a2 |
return; V: Q' S; V$ X
}3 \ D; Q2 ^7 |! n1 i' r
m_Item[m_dwPos].nIndex = nIndex;
1 g7 a5 A0 m: t* C m_Item[m_dwPos].dwId = m_dwPos;5 f1 d; \4 k b% @7 n$ q5 q" P3 L
m_dwPos++;, {7 F1 x( `7 e% A. ~: s# i
}
# p# U, H. x k$ W7 z2 \: a/ oBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
3 E/ Y& d8 x- L5 H8 G. e{+ Y5 ?2 h M! t$ z, J( d% U' D
for (int i=0;i<MAX_INVENTORY;i++)
; s. @; @; [# {3 \0 s {$ {4 `8 W; y* ^0 \( u
if (m_Item.dwId == dwId)
' l0 O3 ~2 f7 V# }9 A- { {8 p0 w7 R/ h5 H
return m_Item.nIndex;0 g2 a5 F! t, `: U8 R
}
% n m: [1 T& R/ R }8 }$ k/ E5 W! k" D" L" r! u
return 255;) d. t+ `. N: P, _; s, Y
}. {+ {/ Z8 Q+ S2 t ` t/ C, f5 _% V
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置- ^! @; c8 h- w9 `
{" I9 ?$ t- C. }9 a
BYTE nTmp = 0;
! T, @, r. w9 G S bool bDest = false,bSrc = false;
2 j. l; {: d$ u2 e for (int i=0;i<MAX_INVENTORY;i++). o y* g# i; B
{# _' j( _' E e% e% a8 D
if (dwSrcId == m_Item.dwId)# K& U, u3 x) l7 H) z2 p6 W) H
{
' L, g0 T2 a) e0 v) `! j. N- j //id相等 则 改变对应的dest和src
6 M3 g( D% L F% B3 o$ F, o1 F nTmp = m_Item.nIndex;
6 l* f( m7 r5 ?( A P6 l$ { m_Item.nIndex = dest;1 g: t9 B9 X& q; B" S/ \
}
8 k& F9 D* I' p$ }4 P) H0 f }1 l& d) [$ `5 V5 K+ Z/ F: K
//临时数据保存完毕,交换开始
- w0 `# V7 J* F- `6 K2 ^ for (int i=0;i<MAX_INVENTORY;i++) v/ q3 v5 r2 X S
{
: {6 O9 _" i1 Y1 g if (dest == m_Item.nIndex), @2 d- z' @& o+ p
{
' S; p* x9 I$ Q- A% H; R //id相等 则 改变对应的dest和src
# V) N: Y! u& A2 e9 V0 W6 l m_Item.nIndex = nTmp;
6 X+ |+ N7 I- ^0 C: G" }* M }) A$ t7 c' c. L2 i/ d: b' e ?
}* o- N; @; Q( q1 j
}& {2 s: V! _2 D* h
};
$ @# n, s k% b& w- Q* n3 w/ \-------------------------------------------------------------------------( z& a1 ~1 C6 a% G' I
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )) l5 A/ n% W5 t
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);0 f$ r3 ~0 ^, h% B& k! U' W% ?5 I
紧靠其上添加:: y* b9 z& d$ o
if( pWndBase == &m_wndMenu )
) r# J" Q$ K; Y4 ^* {8 x1 Y, s7 ^{0 L o! L( `+ \: T: T9 a8 E, u' {# S
switch( nID )
6 W" o0 S' o' i& F {
( D* ]0 V3 C3 s! P+ u3 o- T/ E case 2:
' h' K+ V* F/ l) N8 ]+ E8 o1 s {8 @0 I/ e/ o% Z9 S
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
4 v/ ^" I! z$ @! }: H if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
4 \, u1 n5 V: F. f4 g6 K {
K3 N6 \% W4 t; }8 T$ f break;$ o" m5 v3 A* S G5 @: G% ^
}
8 M+ |/ A! @0 t# I1 U. j) d for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
# a$ w7 R D8 m1 V! ]1 J {. h7 `: V6 o( D7 a
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& b5 `4 k* O5 H0 t; N. q; L
if( !pItemElem )
* H, |' W" x1 V$ H1 ^( X continue;
; @( ]8 n' s, s. Z y, n: @1 U+ H if(pItemElem->GetExtra() > 0)
% G0 b3 d. ?/ C& { continue;) [: R9 v; U6 u0 O: q6 {7 ?
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 5 ^' _, W( m% R2 U- q
continue;' }/ N4 L# @4 n5 z
if( g_pPlayer->IsUsing( pItemElem ) )
. e4 n! q3 t, q% u/ [/ e continue;
# `- y: _& `7 J; _2 Z if( pItemElem->IsUndestructable() == TRUE )
: D+ ]( b9 x. t T. X! ? {2 i0 n$ j/ y# P7 s% |
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );1 y9 U8 z9 l) K8 y
continue;: s' @5 L# Z! n
}) q0 v3 J9 [3 J3 G
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
# y& F( X* @6 r8 h }3 u1 ]+ I5 p, w. k `6 x' a( D
break;/ T# V: D: w, g& d
}
& b3 u7 ^& b: ` z) Z case 1:
, e/ [3 P* q) {0 W7 P' ? {
( o, a9 f7 X6 E6 P //整理背包 F6 L3 d4 ]1 m+ v
//////////////////////////////////////////////////////////////////////////
' K4 T* Z; t. O0 {1 z( K7 i4 Z //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
0 ]+ B. ^( p# [9 k2 L2 y Q //////////////////////////////////////////////////////////////////////////; P) _. x" \- J
//////////////////////////////////////////////////////////////////////////1 d' d- G5 t0 ^# C* I, Y0 @
CInventorySort* pInvSort = new CInventorySort;
" H+ O6 O* }# h% m W7 _ vector <sItem> vItem;
9 Y( A3 R' o) E# m vItem.resize(MAX_INVENTORY);//初始化大小# g' m' ?" ?' n, }/ Z' }
//////////////////////////////////////////////////////////////////////////6 I8 J) o& a& ~; V
//填充数据1 h5 ^7 J. S% V) M5 N
for (int i=0;i<MAX_INVENTORY;i++)* l1 H! ] p7 u1 p5 @/ n, m' e
{
$ Y7 ^% s3 Z+ t4 T# f# {3 J CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 G2 V( K- }1 k& ^" B
if (!pItemElem)
0 O' Y( R7 s7 `( P# _$ M) s {# Y2 R) H2 f) l! `3 X
vItem.dwKind2 = 0xffffffff;
( d+ f5 S2 ?: y/ P) o) g1 { vItem.dwItemId = 0xffffffff;
1 P% B5 | V# K$ m0 j vItem.nIndex = i;. a- q& i, C6 W) b
}else {
6 m% ] |, ^+ N5 f5 j8 f# F# h ItemProp* pProp = pItemElem->GetProp();0 u- ~5 z" n0 \( M9 Y
vItem.dwKind2 = pProp->dwItemKind2;
: }7 s! t* F g3 t5 i vItem.dwItemId = pItemElem->m_dwItemId;
; q( i( P* G' s! ]5 ?! M4 l vItem.nIndex = i;
! k2 C1 s3 q7 p9 {/ Y }; i6 M: {3 i- K0 d0 ]! T( t4 I) K5 L* s
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 ?0 u. Q) [0 J) C/ F' Z9 P }
9 k3 V6 h2 x* c& R; n. P( [ //////////////////////////////////////////////////////////////////////////
( O8 T8 _0 U0 C9 A- s6 Q# Z5 s: c sort(vItem.begin(),vItem.end());//排序
. `( m2 f) e3 i3 u( ?8 g, m //////////////////////////////////////////////////////////////////////////1 W: z2 g: E" _- R% _
//交换* M4 f0 t$ n: c" d. m
for (size_t i=0;i<vItem.size();i++)' W# G+ u k5 q6 |; F0 w
{
9 e6 Q) G- s+ h. h7 ?/ p //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 L v" C; `% Q p9 m" c
pInvSort->Add(vItem.nIndex);
G" A# |1 n$ o/ e3 B8 X }
4 I& ^( K- ? E BYTE nDestPos = 0;
4 Y7 Y& i$ z) g! u for (int i=0;i<MAX_INVENTORY;i++)
* x" K, H$ s! ^* z" ? {
( |: d5 [! E+ {2 M7 \# s0 |& B CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);' X* N {8 e& @% w* f1 b# O% c, N
if (pItemElem)) q! O v; k& ?- F# K
{
2 W+ x! P' t. O# m0 f if (IsUsingItem(pItemElem))3 R: p6 ]2 A3 J3 [! y
{
: T/ {3 _) u5 @* z4 D7 b //这个位置无法放
% u1 _3 E$ r$ X$ S4 V5 @ nDestPos++;
3 c* V( `! m3 d& ` }
+ F* D( B+ S: c F* n }# |' S+ @7 o; Q
BYTE nSrc = pInvSort->GetItemSrc(i);
9 H! }# A- J1 s. w& C, k pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);0 G) F" p3 _3 z: I- z
if (pItemElem)
/ U" h: w% O- y" y- h {& C8 x' K( G- _, e; ]7 m5 u
if (IsUsingItem(pItemElem))
) G4 `$ Q6 [/ e- k5 d" X# B {2 K( _! f; E# ]- g! ^
//这个道具无法移动,跳过. e' H* q- Q+ v$ b" }% f
continue;
5 W2 N5 o3 q# X8 B8 o }. v) b1 G$ v" _2 d8 A' F3 x5 `* c0 J
}else{, r0 I& A2 ~2 N# z
//空位置 不用动5 N5 O& b2 B3 _1 {$ U- R
continue;, [4 o6 o' v& T& q, u
}
* g1 _" @) v# P //////////////////////////////////////////////////////////////////////////2 @3 b" T5 y6 [& ]7 i; q" t/ M4 w8 ~
//开始移动0 @; p* f! H+ y k7 Q
if (nSrc == nDestPos)/ R8 ]) J0 f$ Z
{5 x- U( y+ o( x6 Y( L. P0 I( s+ t2 e
//原地不动
# j' m) Q ?! C+ t nDestPos++;2 w. z" Q7 @) |. U7 z5 L, C. n
continue;8 H7 W( U- ^) z7 k6 h
}
: R+ s/ }' R0 h: H# J9 j& S% d+ H2 [, i pInvSort->MoveItem(i,nDestPos);
) a0 q0 n% K$ ~4 q: Q& W g_DPlay.SendMoveItem(0,nSrc,nDestPos);
/ s0 }& A6 [' O1 J* E5 T; P& k- J x Sleep(5);
* L$ z* v- _3 O) p //Error("移动 - %d->%d",nSrc,nDestPos);5 Z8 T: V5 V0 H3 {7 h
nDestPos++;& v/ l8 l/ v* s% e
}; n* J) @" b/ E% f& J" t4 o
//取第一个元素的信息7 ~* y/ w- b& t) E' T- ~5 l5 m
/*7 |) P8 S. p- ]4 u* \3 ^8 u. b( n
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
& ~- o4 q2 Q5 T6 J9 [ {! r/ D) h$ `9 y! b+ P
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
$ N* M/ S$ l0 w3 w g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);( Y S) Z- Y; T3 Y, h7 }5 a
}' N; ?$ A5 u. e0 l6 n+ l0 q$ r
*/1 k2 |3 P2 M) T. c$ i' G: {! F: i- {
//////////////////////////////////////////////////////////////////////////4 p: ]# J& g9 u4 T# c
break;5 J; y% m0 t! t5 b
}
& @' S4 H. K) h/ Q8 u }
7 J$ [! H! D, Z- ^}3 d1 x4 n, w: a* I
m_wndMenu.SetVisible(FALSE);
% L U" m" a2 C; K1 J4 _8 E; |
2 e; d/ s- ]- i# h--------------------------------------------------------------------------------------------------------, B5 w. U4 d$ A+ X5 D
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
% c, Z9 a$ C7 P% `{
1 O! U5 {5 I5 [$ y/ U5 jBaseMouseCursor();, A; C% @6 t8 r/ G/ L, d3 G
}
- ?: g8 [: \' ]& ?在其下添加:
9 f" \. p7 m6 F) ], Jvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
4 b2 i+ p5 q0 m+ |1 Q4 n' c{
- ~: ^+ l7 h3 fm_wndMenu.DeleteAllMenu();0 o. }+ Z2 L5 r1 U
m_wndMenu.CreateMenu(this);
4 H3 k: \3 x* P1 V, j, ]5 `m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包"); s6 N q" s2 D {8 N5 v( ?7 u
6 `5 u6 h4 p3 F( u4 Q3 }) ]9 Cif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! f# N7 n8 Z3 u{
9 t: r* ^" \8 x0 M7 x //P以上级别才可以删除所有道具: [' y( V8 N2 t) Y2 L3 [: d( a
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");" _6 N( ]3 O$ H: m+ t
}0 x4 o A, A1 D: x% n! }5 a
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );3 }. s6 |% ~: p7 K2 s# r
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );) b* o7 f, O5 Y# b& C* `" y
m_wndMenu.SetFocus();
( s$ c+ v7 k2 u( J o N2 A' h, \' u}
, N+ b8 r+ r1 Y3 j------------------------------------------------------------------------------------------------------------
4 ?" v( }6 C1 ]2 L8 x) I: X O, G& ?*************************
+ a" C# s5 ^+ V7 |0 I. iWndField.h文件
- C2 ?, \! e" E1 J( ]*************************# Q9 H/ E; A3 R4 P
搜索:BOOL m_bReport;: [# ]' L2 Y" m4 t% Q
其后添加:
: n# ?3 E: I9 M, R( E- M9 rCWndMenu m_wndMenu;
h2 e4 `0 i$ j% t$ f8 ?4 D搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
0 E$ R/ f8 g# t! ~其后添加:
) n' v9 j- H6 }virtual void OnRButtonUp(UINT nFlags, CPoint point);- N) ]0 S; }- b ^# l& e
# W- O% L6 U, @- U p \4 n; C3 B9 R% S
|
|