|
|
源文件中_Interface文件夹下WndField.cpp文件8 {. _9 M2 c+ N2 h7 E+ D
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! o7 c0 x0 X0 | J8 j1 m4 ^- C
/ q" M& C; k, R4 p8 `9 Lstruct sItem
$ F, @. H0 l* Y* Y2 D% z9 m{
' t8 P; R. q7 H9 mDWORD dwId;& A1 u( F( ?- _/ T4 y1 ?" X4 k& O6 z
DWORD dwKind2;
, I- X5 v* s3 t! S9 N; @DWORD dwItemId;" [. ^% t3 E9 P; s
BYTE nIndex;' U- i: r+ o G& c* d
sItem(){! P; l; q- L. E% S( o5 h
dwId = dwKind2 = dwItemId = nIndex = 0;* e4 ?$ L/ n/ k' `% O
}+ f6 a" G0 p+ X
bool operator < (const sItem p2)* j; [% M, a# }$ ]8 r: K' B' d
{: v, k, q" u2 [5 g( S
if (dwKind2 == p2.dwKind2)! ]" ^$ y$ g3 c+ g
{
1 o* k. w' u* g X, J return dwItemId < p2.dwItemId;
( V( Y( Q$ K, j" r; ]4 {$ {, r# ] }else{$ W3 y& O$ u4 b) }
return dwKind2 < p2.dwKind2;! O1 T% [8 a4 b5 r( v% L& H" b
}
* j0 J+ ^6 g$ z! K" i4 I/ M}, X( k$ D' Q7 ^# |! {
};
$ U, k: c- O' z7 F( F3 L( ]" E" ~* sclass CInventorySort6 ]3 E6 f$ O, W6 q6 v+ Z
{- N7 }% y0 \$ y
public:7 U2 Q) A3 T. o/ W- e
CInventorySort()
8 ~7 I U! l3 w, x' `{
0 }7 I* G! T% D m_dwPos = 0;
" s" ~; @8 m$ D* ?}
5 ~- C8 Z8 A! A' }~CInventorySort(){}
. j- {7 q: W# X9 [: sprivate:
% n$ L2 J5 d+ w3 V4 WsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息9 j) P% O" x% u: h: ^! k' Q
DWORD m_dwPos;
U. p7 E c: N O; ^. h1 n5 w: Gpublic:' _) H3 J5 A1 ]$ ?# c
void Add(BYTE nIndex)
% f4 h' z @, {4 w" [2 m8 J{
; H0 U) Q* B# y* S$ B if (m_dwPos >= MAX_INVENTORY)
- k5 ]( Q: Z( u' B {7 ^6 b" K, X4 D0 L! R5 G, g2 a5 B3 ~2 Z
return;
0 I+ m+ l$ }( b" y. |, C3 H- u }7 u% C3 n W: \( s' @2 ]
m_Item[m_dwPos].nIndex = nIndex;
" v5 G, I' L) `( ] m_Item[m_dwPos].dwId = m_dwPos;6 ^/ C2 a( P. x A4 j
m_dwPos++;
8 s* d6 Q1 Q0 \' j) H$ Q* }/ N- s}
$ b4 S7 B, t/ lBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
4 |; f. X8 i1 y) U! I# B{* o: \4 l* G5 g( }9 r
for (int i=0;i<MAX_INVENTORY;i++)
& e- G2 o9 Z, x6 X {
: s% n! } k Y- {( t& U if (m_Item.dwId == dwId)
9 c5 d8 G4 H9 A" `3 p {
/ k5 I0 t; Z# L$ n, o- v return m_Item.nIndex;
# U1 D r. }0 ?- q; S4 W5 e }
) T. \. |* ~2 L" f; M! x1 `/ X# X5 u }
8 O" [( v5 |' V, a/ r return 255;
c \; ~; v t. t1 D5 Z}
( \# v* }) p: L9 L% A( v6 vvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置 i. h2 E5 X1 K+ j
{0 C3 l4 o( A3 m" j- v3 \) u
BYTE nTmp = 0;& ?+ w; b' z- a6 K. m
bool bDest = false,bSrc = false;
W" a, X. C% q for (int i=0;i<MAX_INVENTORY;i++)! E6 ^% b8 O/ F
{9 X3 C7 Y) \' b$ ^+ ]
if (dwSrcId == m_Item.dwId)
" j; k) ?& F% [$ k* f1 _ {1 q) r$ [: W; F* U p
//id相等 则 改变对应的dest和src; [0 Z4 a; A& W; F& ?/ a2 e3 x
nTmp = m_Item.nIndex;% h! i' f; s% \9 T; G
m_Item.nIndex = dest;* C# w1 |( D" o5 R. U
}& ?# x" {2 R* R5 h2 I
}9 h- I( I. Y8 x! l! N. H- p
//临时数据保存完毕,交换开始
4 i0 u% o$ P0 z% p( d( c' G. p1 Q for (int i=0;i<MAX_INVENTORY;i++)% m( R* C: c! L& b; l
{4 z1 D, W9 ] X0 O
if (dest == m_Item.nIndex)
, ?1 ~' w1 b/ b+ d' e) ?, ` {; j1 ]; E5 {) D
//id相等 则 改变对应的dest和src' e+ x% @0 {. j
m_Item.nIndex = nTmp;
* m. i5 @5 ^; }; C }
% B f: ?0 w' j* r2 s8 O: j }1 W9 G- _( c1 @' |9 j, p
} m$ L6 I4 w1 R& i: l
};
4 E$ A8 @2 J# j4 q: S! V7 A-------------------------------------------------------------------------
+ u& D/ V$ X8 a依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ t; k/ p$ P% c/ D
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);/ A6 W/ r. p4 S9 j* s5 h6 S" M% H
紧靠其上添加:
* j! u4 h( s4 ~0 @; pif( pWndBase == &m_wndMenu ). C/ s1 {% F" T/ @( R
{
+ {* h F1 l' P' `; v) _0 R3 E switch( nID )
! M& E. q1 {; ? {$ V% C2 u c7 O
case 2:2 A( n" ~( J# e8 A! B8 e
{) v! g% o% J2 ~# V
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
, B5 X- r( n' E8 l; n- {% E if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* W3 A E+ U3 G8 o7 |
{
6 x- P. N. \3 a+ \# v# O break;
4 k- R8 z* e$ f& H: j+ \ }
8 b; \ M0 |7 s' n5 @2 D( t- _ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
6 O- x$ d% j/ w% M+ j7 B. Y+ F {% m9 I; e! a; S" a# M) N
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% ~4 v! [1 w5 I V
if( !pItemElem )% q4 [# D$ o, ~3 R0 ^
continue;) i+ J: L& {8 A( S
if(pItemElem->GetExtra() > 0)
, A7 U% j' o) _. i# w5 }! U continue;
0 s O, ]3 I! m. U$ n) j% q if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ! t, a$ s2 F7 ]3 }% Z
continue;
3 r/ }5 U9 y; p- L4 V if( g_pPlayer->IsUsing( pItemElem ) )
9 R4 L; t, z7 J4 X3 N continue;
( P- z' t. r; D( P" A. [' c. [2 O) O0 g if( pItemElem->IsUndestructable() == TRUE )
" r& r# b6 E2 V- g) g4 S4 G3 Z% W {
! O- d% o- N. |; F g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );' p; p0 w! @3 L2 N/ n! X
continue;; k( @+ [1 o" ^# @4 O
}
4 _+ V# f. P8 l* s0 O4 ~$ E g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);6 m9 _1 ~0 I4 t% m8 y
}- Y5 g. A" |+ b8 R6 O
break;
: w4 {, |- D7 j; E& v" K }4 n; _ `: ?/ L% f$ Q& Z
case 1:
$ x: H; M2 I5 w& Z) H {
$ V" K4 a! v P4 g3 k7 f //整理背包
2 H f6 [/ ~& j0 u j v //////////////////////////////////////////////////////////////////////////1 ?4 {/ a0 p6 e# Z; C
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) ); [1 ]. O2 m, Y4 P0 ]
//////////////////////////////////////////////////////////////////////////
' l7 V2 L% c: {6 g; F" Z //////////////////////////////////////////////////////////////////////////
+ i7 I+ Q4 m/ I/ O CInventorySort* pInvSort = new CInventorySort;
2 d$ p% j2 o ] vector <sItem> vItem;7 E& H- ~5 [/ e' T
vItem.resize(MAX_INVENTORY);//初始化大小
+ g, _, c2 E4 z( {: c //////////////////////////////////////////////////////////////////////////
! H! P0 _2 v% s5 v$ V //填充数据
7 Z. V' h- Z% J: a8 w for (int i=0;i<MAX_INVENTORY;i++)
, r7 O" f0 v0 z6 H* ? {4 \0 H7 e K q3 n. Q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* |" Q5 u0 r4 B3 a2 s4 U
if (!pItemElem)- ]2 l7 T1 a- @$ Z/ x3 F
{ @* [/ T X. f ?
vItem.dwKind2 = 0xffffffff;2 Q# x* Q# l6 Q4 p5 K) h
vItem.dwItemId = 0xffffffff;1 m3 U# d4 t5 \- M2 W, d
vItem.nIndex = i;
7 M l7 X5 k$ K) X }else {- X% H3 A" v, X. \" i. ]. Z
ItemProp* pProp = pItemElem->GetProp();% a; W* U! a6 ]5 _7 s( S5 x: J
vItem.dwKind2 = pProp->dwItemKind2;
* I0 {7 B, z3 W& ~) d7 i4 m; h7 s+ t vItem.dwItemId = pItemElem->m_dwItemId;6 h+ C7 q$ C. l4 U1 C# l2 U
vItem.nIndex = i;
) X# g% g, I, K% z }
# T# h( p, \0 Q1 d: |" X //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
& T6 G# C- A; ^, e/ U/ t }' [; w7 @2 W7 k4 u! L' Z* p% l$ c
//////////////////////////////////////////////////////////////////////////# l+ p+ S& H& a F. P
sort(vItem.begin(),vItem.end());//排序# k& h, K9 o T1 a
//////////////////////////////////////////////////////////////////////////& D- j4 t* Q2 ]: p
//交换- a0 h2 [! u2 Z2 O4 E: a( F, Q6 T
for (size_t i=0;i<vItem.size();i++)) ? h1 z9 P r3 ~1 t% N! h! W8 }
{0 W& _# r/ G8 m7 N1 E- t
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);) _7 i" n4 P2 |8 f: H# B) p
pInvSort->Add(vItem.nIndex);
# I2 P" {+ G \1 \9 j/ r }& _- S# P' Y4 _2 r' N
BYTE nDestPos = 0;$ p u" G% _/ z
for (int i=0;i<MAX_INVENTORY;i++)
/ X/ L8 q1 |- s- Q {
6 L5 u4 u- u1 F! X/ n3 Q7 W- ~/ c CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
: B. |- t& ^0 @7 N, q if (pItemElem)
/ k" ~. q# z# T4 b2 G {
# D- G4 _/ j+ p% T! W; c if (IsUsingItem(pItemElem))0 g a7 _4 S9 F/ G
{
& H1 i' @( A4 r4 v //这个位置无法放
}5 U6 R* |2 c2 F& O+ S nDestPos++;
9 |# M7 d0 L- d2 n+ {7 |+ e' w! p }) j6 l( u! N$ t$ a: w: z9 L/ J
}
" L" ?. ` {2 J BYTE nSrc = pInvSort->GetItemSrc(i);
}) Z% m8 X& e2 w pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);- M% i; i( f" X5 S4 @1 _
if (pItemElem)1 U' [0 J D, r3 Y. }: n+ O
{/ @2 b0 v/ `$ X
if (IsUsingItem(pItemElem))
' ^1 d9 J: k* X3 y6 G7 E1 E {
4 y2 s3 R& n) w. D# b. u //这个道具无法移动,跳过
. a. t: q: |. N& j3 j continue;* ^& G# \$ v/ L6 [
}
5 S5 n2 ] @% U2 Q$ |2 } }else{
# Q, r" s9 v. ?7 M$ n- d- y //空位置 不用动
" S: V) }0 u/ [1 y; e w4 ? continue;
* L) G I X- o1 P- T! q6 p; P7 k: O }& P: \" k8 v" ~+ `1 }
//////////////////////////////////////////////////////////////////////////
i: R# v# T" b: \* L //开始移动8 Z% M& P4 d& k3 r
if (nSrc == nDestPos)
* ~; r, A: K' r W# r; r {2 I- T. P( g& Q4 t) T; x7 t
//原地不动
# C+ B! h1 `, D! A: } nDestPos++;
2 m( G, w) J# y- O; {7 J) X continue;' [1 R" z8 ?: o% E
}# z: s; `" R* A, e% V' k
pInvSort->MoveItem(i,nDestPos);
7 g0 z& H! v$ \5 l3 d2 J4 J g_DPlay.SendMoveItem(0,nSrc,nDestPos);+ {0 [5 B. ]5 b2 A& ^) R
Sleep(5);5 \" m6 e4 f2 X
//Error("移动 - %d->%d",nSrc,nDestPos);, }! w. P2 F. U9 @/ I
nDestPos++;
* U1 z8 W6 y$ s: G }
! ^5 {' w$ |) Y0 i" m6 d) S //取第一个元素的信息5 P8 M$ V, k4 {( r+ Z4 j2 q
/*- V; Z* @! B6 X+ Q, H( O, t
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
* O7 ~3 m( @! p. b { N: M$ e `! c2 f& D' e0 g
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);6 u/ h+ t: g0 V" N) n/ d6 G5 a: o
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
. C4 ~$ S p; `8 Z9 A# q, z7 k5 q _ }0 k& t8 V# m% }2 e" O" W% a
*/" v5 L Q4 B# `+ a3 L
//////////////////////////////////////////////////////////////////////////
* _& P& h) N$ U+ N* Z8 A break;
$ S0 x, d2 M% Z! u+ a9 ` }
) @7 J$ C+ q5 ]( B } 9 \" ?" ^* s0 U, G! p
}
7 J. I! D3 }" i+ U8 Xm_wndMenu.SetVisible(FALSE);! S9 _8 e) V% a) J. L
6 r& R/ l! v. d% U( z: ~
--------------------------------------------------------------------------------------------------------( ~6 [) t6 e) J
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point). }4 }+ g3 m3 V2 D! a" j
{
* o6 {! L# d# O4 X7 o5 qBaseMouseCursor();
- m. Z) _& v% i}" C! K$ r6 R [1 z. a! Y, }' ~
在其下添加:
P, `: L* A1 x; C, n8 |void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
$ i6 H! a; V. p( j2 H! z5 h{; X% M/ b* H3 m0 }4 s; I$ w
m_wndMenu.DeleteAllMenu();7 ]7 z. I4 j4 s2 _$ o) c
m_wndMenu.CreateMenu(this);8 s0 ]; V5 s( o" ~
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
/ }9 A- v9 L* Y7 l6 c* Z3 p% D( p& X5 Z5 |- A
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); l0 [- \( f/ x
{
3 O- R0 u! Z+ u4 Y# G //P以上级别才可以删除所有道具
, U: b# R2 a+ q; T8 H1 @ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
$ T, p5 L% d9 r, E}$ q3 Q8 H8 L7 |0 E9 Q J" F. r
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
& t; G y4 ]. xm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
; m: P' W2 z# r- pm_wndMenu.SetFocus();0 X/ Q2 r* r* N( F" g
}
2 O: r& y$ f+ ~( y9 k1 y------------------------------------------------------------------------------------------------------------ x% Q' C: N9 L# ^7 L
*************************9 @, M, ]2 R; M
WndField.h文件0 }3 p/ b2 D* q4 y
*************************
( @( u/ Q; {/ p' @/ }* ?3 [, t8 n搜索:BOOL m_bReport;# U, P3 U) B: o6 L# w9 ~* g2 ~8 s+ j
其后添加:# @& \. L% z% ?# Q; @. J
CWndMenu m_wndMenu;
/ W! }2 l) C M- Y' R搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
0 m) o4 e8 Y" M8 p3 k3 Z+ }. ~2 [3 Z: g其后添加:* c4 s! s' o7 F# x7 a+ o$ A
virtual void OnRButtonUp(UINT nFlags, CPoint point);1 ?8 t. n8 n' G- C, U1 I8 ]: [
2 p5 j1 Z) T4 o# m% l% u
) b7 `. v0 C J3 ~$ V |
|