|
|
源文件中_Interface文件夹下WndField.cpp文件5 S& v5 R2 o. p ?$ p ^
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ F5 J2 Y7 ]' u/ r
* ? y7 t& \. [& l* {- d9 J3 `% p; S# v
struct sItem
0 u1 u( b7 t M" y" Q' o; T{# q" h. c, k. q( _9 Q% W8 X. h, ?
DWORD dwId;
o e! c& X8 s6 FDWORD dwKind2;
, ^* B1 E( e" w- M5 ]DWORD dwItemId;: f- L3 z- M+ R% M% F
BYTE nIndex;! R; e# {% i# P6 L
sItem(){$ k. T8 i8 l* k3 C0 m& @/ v8 K) a
dwId = dwKind2 = dwItemId = nIndex = 0;
- y/ ^5 I6 i, x# m; K& w}/ o2 b9 L$ \' W7 C5 q
bool operator < (const sItem p2), J' h9 ~+ \7 T
{! [* Q1 T+ u) H0 e$ |
if (dwKind2 == p2.dwKind2)
' S9 a+ C; k9 m' q3 S0 X {6 A! u' W9 m+ h; u& `
return dwItemId < p2.dwItemId;
/ C0 f$ f' r! F8 e8 g j& v0 O }else{3 l7 m; v) w$ o8 F6 ^
return dwKind2 < p2.dwKind2;
% ]# ~6 |7 @/ \ }
9 J/ q" f' u {7 S' r+ }8 l}4 ]7 [% Z; ?8 y
};
5 t3 H- Q0 _7 X* [6 ^ T$ xclass CInventorySort. B1 b# K( a8 m; t/ M) U
{5 u5 _# o, L1 V$ ]# ~; ^
public:% |( C' ]/ X4 p
CInventorySort()
8 s; Z% D) X4 D. k0 v{/ i: Z* n* j4 U8 ?% ?/ U
m_dwPos = 0;$ F5 r0 m [' w @) q1 p% h
}, r5 b2 \ X' _
~CInventorySort(){}& B7 v. [* R% `. B1 G1 x1 |2 _1 B" [
private:! i8 B9 n; |+ q3 w2 ~; N" K( V
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息; B0 f7 c5 [9 S" X6 g
DWORD m_dwPos;# G R. x; N8 [( c2 Q
public:
3 @) H2 h2 o! E: ]' f3 G5 |void Add(BYTE nIndex)
% H, x9 B' k$ L{0 H0 K- Y( K: S8 l
if (m_dwPos >= MAX_INVENTORY)
0 W* u9 d! g/ A% R' f {
2 Y. X" R( w1 x! B+ T' `% C9 t0 f return;
" U2 U3 P3 ^. x% s1 w0 Z- J) ? }
5 b2 g9 x" x* e% q4 ~* J m_Item[m_dwPos].nIndex = nIndex;8 e! ~0 |4 r1 Z( y8 t9 l9 i
m_Item[m_dwPos].dwId = m_dwPos;# Z1 R& B' B% ?$ ? u
m_dwPos++;/ W6 Q$ X$ v N% v' [3 I
}7 ^4 V6 R6 R4 ^) [
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
4 Z5 l- p& T6 K0 a9 m{2 K; l* X' E7 c+ E
for (int i=0;i<MAX_INVENTORY;i++)6 V4 D# w3 V- R3 m9 m' x
{ P8 Q/ _) A) d; i! @( q& R6 }
if (m_Item.dwId == dwId)
: a3 N6 Z! L; u+ A! `( d {, A9 h' n2 t* x# E
return m_Item.nIndex;
$ C9 ?' a3 X( {+ a* R; k( q& K }
+ U# Z* g* E i }
2 q# S4 Y# _; X% I9 c return 255;5 U, H) A% E" |/ _# H% n3 I. b
}
# D6 k) w$ C/ {9 {1 {# X" T9 [; Evoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置, f0 _, G1 A6 e# m6 [
{
/ U, R0 U* r6 J# [& n, w8 e BYTE nTmp = 0;2 h% w' p; }" P) v" g1 T5 z
bool bDest = false,bSrc = false;
. G5 H( X, E# l- G+ K& c; V( E for (int i=0;i<MAX_INVENTORY;i++)
1 P/ T! q7 t+ W/ H8 J- @$ { {
; ~( K2 F& C- e; x& }% y2 K9 e3 c if (dwSrcId == m_Item.dwId)& Y. k: K9 u8 r! R4 O) U" ?8 |2 n. m/ Q
{
; L3 n) ^, Y# Z' ^. V6 d C- r; o' W: r //id相等 则 改变对应的dest和src
$ v! M3 N4 N2 z nTmp = m_Item.nIndex;
8 @& W0 [7 `/ V+ S% {+ X1 y m_Item.nIndex = dest;2 f W' K; e0 k% V4 x
}
& H% b- s }! ~) `2 a }
0 g' ?, Z, F( N3 L# Z2 x: ~* y //临时数据保存完毕,交换开始5 E( |5 U. `3 d( r) H7 C- J, k# b
for (int i=0;i<MAX_INVENTORY;i++)8 U% S9 q5 v4 S& v' _; c
{
) h+ \. ?, `' v4 `) {5 [ if (dest == m_Item.nIndex)
. y# R) E* f# B3 N {
# Y* C* K2 q$ \ x2 _ //id相等 则 改变对应的dest和src
: H, K+ w) n' X. l! b m_Item.nIndex = nTmp;/ L7 l/ w" d( W
}
( k9 O1 V& C- p }
5 v, L8 A; A4 \" k& x8 t}
5 s R7 T2 O. ?0 M: N) J};' I1 X7 F3 G# V: O" a
-------------------------------------------------------------------------( d8 k- @" K3 b& L# P- {- Y1 e
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 P/ i% E+ P. \# e9 N* A+ @8 h
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
) B; W( A% |$ s紧靠其上添加:
- x4 ?6 a' ^5 x# p4 t0 Lif( pWndBase == &m_wndMenu )
6 b: E9 k' K- Z2 A9 a; e3 R{7 c0 [9 Y2 ` i0 [/ |1 P
switch( nID )
& Q0 i: f3 ^- \ {4 I* B. G0 J6 U+ S2 R4 F0 @
case 2:
7 N' b6 X! a( U* Y7 }$ }! Q+ J { }6 G4 ]7 k6 F7 G
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);; R- ^7 \2 Q" @( ^: y) e
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
1 |% n* p% K& S! P1 V7 Y4 d {5 O& W, U8 o D! W9 a5 Z
break;
# O' _4 T. \9 v }
" c7 J6 {4 d7 U3 f for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
4 u n5 v3 B7 {) k0 T# q. m2 S# k {
( ^5 ]8 M& }% x' |. @ E CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, p1 K5 W( T; h8 \$ M$ b. G M
if( !pItemElem )
8 e' x* k5 D- Q$ M. T, K& G continue;
2 l0 z' \! a7 R3 w! M' ] if(pItemElem->GetExtra() > 0)
6 |9 j' @6 A- L' G3 M3 n% ^- } continue;
- q# \4 H6 ^' q! S. L if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 1 m- ~" d& ~7 O# \
continue;
+ l2 J+ H# t, }; R p$ Y4 R if( g_pPlayer->IsUsing( pItemElem ) ): C% }- A' n) E J7 e8 P
continue;" z9 D( x! s2 w6 F
if( pItemElem->IsUndestructable() == TRUE ): ]5 r% v' M8 [. x. P
{; I1 v q/ B; x! T# Z% t$ B) |
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
+ s- X% U- a7 t6 t4 |4 m% a* n continue;
8 R8 P8 o3 _8 q# v6 v8 B }
7 ^/ X3 c2 \" p5 M$ g g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);7 l% l2 U9 l' w$ F; U7 i( Y
}& V, e9 T, d* Q; q) [9 D
break;. J" R1 Z6 i) a3 N: z
}
, E" G- [* m' T case 1:* B. Y+ D7 ^* l. D% }' S- ]* t8 f4 x
{
: n/ g% Y p6 ]- v //整理背包5 g$ }( Y2 c- a! T* }; e
//////////////////////////////////////////////////////////////////////////0 X6 p( B8 W+ O+ B) L, i4 r
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );& S# V+ |7 t' [+ u) K8 Y- V
//////////////////////////////////////////////////////////////////////////
: D" e$ W. z6 I. a+ Q4 i) L! L( I+ j //////////////////////////////////////////////////////////////////////////2 B6 k" }' E$ t0 N( B. T
CInventorySort* pInvSort = new CInventorySort;, {5 T9 u0 P6 U- G. A4 }
vector <sItem> vItem;
7 R5 k4 q5 W4 y! \ vItem.resize(MAX_INVENTORY);//初始化大小! t. J: b0 x; p3 q1 `
//////////////////////////////////////////////////////////////////////////
3 @7 ^, M- T4 ` //填充数据
7 P# Y( r. |2 a6 C4 R7 Y for (int i=0;i<MAX_INVENTORY;i++)
; U- u3 [% I+ R$ @8 Z Q {( g. f# B& s- a* Q. h8 J
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 y5 o# g4 y4 ]* k# P0 }; L
if (!pItemElem)
& m2 h4 a* @9 V1 D g: ]( ? {
. F8 ?: G8 v2 |+ ~& ?9 ^1 l vItem.dwKind2 = 0xffffffff;9 X7 Y t9 ~/ P9 Q
vItem.dwItemId = 0xffffffff;
7 p8 N1 x3 X0 P' S/ H4 u vItem.nIndex = i;
5 b, ^% M; } E }else {
: \3 Y5 M4 B3 G' t+ c ItemProp* pProp = pItemElem->GetProp();) H9 x: M" m0 l( r2 O
vItem.dwKind2 = pProp->dwItemKind2;* D/ _) z8 n5 c3 B3 x
vItem.dwItemId = pItemElem->m_dwItemId;: K- h4 S& z: f$ D
vItem.nIndex = i;
0 T* S8 `* p' [4 t% R* D) f9 I }) V: O0 p9 J/ m8 k( `6 f
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 |* A" G: X# Z3 z* \- P4 W
}
% y* w, g+ Z* \- _ //////////////////////////////////////////////////////////////////////////
& W- Y) J5 \$ b! N- q4 ?- H( B sort(vItem.begin(),vItem.end());//排序* k$ s5 J8 y% ^6 @
//////////////////////////////////////////////////////////////////////////
. N2 [( K0 A3 |" p( E0 |) W- j- p //交换0 H+ M* b3 g7 E/ L! \, }+ c' ?+ u
for (size_t i=0;i<vItem.size();i++)4 W" ^$ m$ w X5 l' a' O' S- ~
{. V! ]$ N- s. N4 Z$ l. I' r5 ^
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, m9 n, C$ F1 P0 l7 E# [. l- {
pInvSort->Add(vItem.nIndex);- r& k$ A6 K; C A, ^
}) f0 {" F* d1 y/ G, ?9 L
BYTE nDestPos = 0;4 \5 B" o9 Y4 c% [5 p
for (int i=0;i<MAX_INVENTORY;i++)
! `/ |# d0 j" |! m7 m. |9 n {
$ v' ] Q6 h( h' ^9 m CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);# C g6 R* \! \# z, w
if (pItemElem)) M9 g j: ~4 ~' Q; L7 R
{6 ]5 ?7 k* H! Z& M c6 ]
if (IsUsingItem(pItemElem))& d+ x2 l% e" I" z+ ?
{) o3 Q4 V9 w0 x) \( @) P% k
//这个位置无法放/ T6 [& f+ s4 Z3 y
nDestPos++;
, H- T! b0 O, G9 V/ m }
" N) f3 K# @ O }# j3 L+ f4 _$ a% }' ~
BYTE nSrc = pInvSort->GetItemSrc(i);% {6 {6 B6 e0 g6 r7 d+ Z
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);' W8 {/ L* O( E5 W; E2 |; N
if (pItemElem)0 n1 C5 g" F- |$ z; h
{' q+ {! P4 m C1 h' l& p/ D
if (IsUsingItem(pItemElem))% ?9 R& P. q2 a( f- k
{
. v0 d+ E- W, }) ?2 }7 R; j //这个道具无法移动,跳过
1 W8 x% z7 z8 J, {" N, ^4 i& X2 @$ z continue;, g2 d# X, K. g; q; G- ^+ I( g
}
7 S8 f. }" C l! y- \ }else{8 X( q/ Z$ z5 n+ R5 a: S4 ^
//空位置 不用动# j9 R% |7 w6 f
continue;
0 f7 a. t/ J8 n6 ~/ I }/ m) Q9 x* o2 z2 C: i; I, ~
//////////////////////////////////////////////////////////////////////////
: G* A, w: ~# E; H+ w; | //开始移动
5 i9 D1 w, C1 B; O/ e if (nSrc == nDestPos)
7 l8 v; L1 @$ e( z8 ?* A {
7 m2 B' d* m9 ~/ w/ p //原地不动
: V0 Y I+ B" T nDestPos++;7 W7 I6 r# O# ^ U, i
continue;
" D$ u) o7 n6 t: o7 ?- O# g5 `5 R }
7 r! D0 i6 [/ `0 f pInvSort->MoveItem(i,nDestPos);
/ S1 s' p! A! t4 h/ U( c9 V9 H2 Q g_DPlay.SendMoveItem(0,nSrc,nDestPos);1 T) S& Q; U: `* S. D1 L# f
Sleep(5);. J( H2 X7 y( y; B3 Q- q3 J
//Error("移动 - %d->%d",nSrc,nDestPos);
$ o7 @0 d: Z; T7 u- }* P nDestPos++;
; _ _' b j9 I9 e5 o! }* ^% _ }
/ T& {/ J) b! }) } //取第一个元素的信息
7 V; _ C" L% P' M8 R# v8 @, w /*
7 V8 `9 q( X/ m$ _; o2 e- H* m Z if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
% S" v* W# o3 J9 d {
& D! [0 l* M% m# }9 s+ C Error("Move - From:%d,To:%d",vItem[0].nIndex,x); O' j( A- Z1 x& s% g
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);/ |3 V0 n2 C9 ^
}2 N+ W8 _2 N% G+ Z# T
*/: Z; r" [ ]! H8 S# _1 q: | ~0 W
//////////////////////////////////////////////////////////////////////////
( E* ^& R) j5 \; A break;
3 r& W5 W' m5 U% \3 q" I }% \5 ^8 _" `; o; E: ]; ]
}
. x B( z; @1 L$ n8 y: B0 X/ r0 H}" S+ s+ o# V% K* ~, \. R1 e
m_wndMenu.SetVisible(FALSE);
. h; T4 {- [( N5 i
& `3 B( p) R2 _/ [! @ W/ T' E--------------------------------------------------------------------------------------------------------
$ z& E1 h' ~. D0 l搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
( S& f7 D/ i- S. ^5 ], G3 e. ~1 D1 Z{" B( Y1 g2 u7 Y5 }
BaseMouseCursor(); P1 O3 a- P, W* C K
}" A% v& c' y8 V! L" F
在其下添加:
% F$ x4 k) r! E+ L5 Uvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
, X$ G8 k0 _0 C. R- ~{
1 p8 u; a" f8 n4 D& Nm_wndMenu.DeleteAllMenu();2 o6 V3 P/ O* G0 I3 V7 t
m_wndMenu.CreateMenu(this);
! F5 G$ q( M* h5 V! i2 a$ um_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
1 e% A. d7 U& q2 P$ @ H7 ?2 \) m
. R- M X3 M9 q s5 bif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& v+ O2 x7 N& S{
* s( r/ P, ^( V1 \1 w# o //P以上级别才可以删除所有道具% v) T% g' z3 V
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");6 M- a) C7 J5 H2 T3 Y
}
% M6 M# y( s# S+ om_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );! ^, V; R- |4 U2 b1 J7 b
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
! o% h- o) P' F8 N- j" X: xm_wndMenu.SetFocus();
w$ e" _/ d( m1 l} E9 ~8 \% i4 s1 Y: b8 W) G
------------------------------------------------------------------------------------------------------------* U9 |, Z$ {) l' a+ M* U( z
*************************
* X8 q3 G( @3 g1 o' cWndField.h文件
6 B' }3 ]7 U* f; s q1 D0 k*************************
* Q7 l+ ^- |# U, r: r( Q- S+ M搜索:BOOL m_bReport;
- L% C+ S- a7 [2 w" `其后添加:
# [0 x+ _, j' OCWndMenu m_wndMenu;2 B/ U) x. L- l- X f X. a5 `
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);) @( C1 E1 U( z5 m$ U% Z" m2 @
其后添加:* B+ ?" ]6 X, m K& V' z
virtual void OnRButtonUp(UINT nFlags, CPoint point);
. o0 L" k* S& n, Q6 h; \+ g, n0 b; t: L$ R( m8 D; \" j3 t9 \
# M I$ Q! ^* p7 Z" V
|
|