|
|
源文件中_Interface文件夹下WndField.cpp文件7 i7 x& Z) P7 w9 r6 a
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) B5 b# L3 W5 Y' i# P0 M' T3 B+ n; n( D, F$ B( @1 ~
struct sItem
% x* r& E& ?1 G [{: Z$ _* b/ S" a8 w$ E* `
DWORD dwId;
( d- }2 z+ {' Q1 I" F% Z" y/ BDWORD dwKind2;
+ ]* E9 q4 Y0 d/ y. B) SDWORD dwItemId;% | F3 B9 {2 F) Z: M7 G9 g8 O
BYTE nIndex;
b5 Y7 a5 o: w+ h( D+ CsItem(){
9 U, }2 ?% j# i2 | dwId = dwKind2 = dwItemId = nIndex = 0;
/ V+ P$ H s2 a) w( B l}
9 k" A5 M* O8 O- u% Y( Lbool operator < (const sItem p2)
9 m7 v9 o0 E9 {5 R{
* N& O. R' _8 Z* t) R" s if (dwKind2 == p2.dwKind2)
5 G& Y/ V/ I$ Y4 Y' ~* H4 ^3 `8 ] {
) Y% b4 `( q; k2 l' f return dwItemId < p2.dwItemId;4 q4 X1 A0 l2 S# l6 E
}else{, e, F [: Z& m
return dwKind2 < p2.dwKind2;
5 G8 D2 \9 n# i }4 p" ^8 C+ ?$ Z( v3 I
}
: Z$ l1 Q" y9 g( n p; e}; \5 ^, F' h, ~5 [
class CInventorySort; v+ `9 }& Z. |; t7 C3 v
{8 Q3 Z7 U& |# N0 S: G/ z
public:
% K' b" U" P/ U- B! y7 E3 J3 @; f* v! ICInventorySort()* |, S( c+ }+ w$ ~0 }
{
! ~2 O8 A! P T4 M3 E( K7 f m_dwPos = 0;
( W6 s- Z7 M* h; C8 p8 |7 X4 @2 [}2 Q$ X6 c" z" f0 b5 c/ K
~CInventorySort(){}
# K1 n2 X" `5 W; mprivate:, R: C$ e: y2 n C, ]. D
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息/ j) G+ y% e, T6 ]6 _
DWORD m_dwPos;- X% w# u3 n' z* y9 m1 S) }( b/ l1 ?
public:
4 i. f, l' [% c+ I, Hvoid Add(BYTE nIndex)6 ]+ i( S6 f4 ?) ~
{
( H- ^9 `" K! L) `, Z if (m_dwPos >= MAX_INVENTORY)
. H) e7 M% q- p' ^; w, r4 q$ U3 P; P1 u {
% Q- j: |. y4 [7 d* y& M+ d6 `( m return;) ^* M( {* U$ z9 u
}8 X2 J; T' f( A5 r( \+ X
m_Item[m_dwPos].nIndex = nIndex;
( ]8 `7 F" s' _% n1 | m_Item[m_dwPos].dwId = m_dwPos;
+ v4 r1 l7 ~2 m1 U m_dwPos++;2 Y' G5 h, Q' L2 N
}1 y; c3 A h; i' w
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列- W( X- L1 P5 q$ V! ]! ^5 j- u
{; c0 Z0 {0 e. a' b
for (int i=0;i<MAX_INVENTORY;i++)1 J7 r& I5 d2 Y- O) S& v& K
{
% Y+ |1 c& E/ f, q+ ~2 H if (m_Item.dwId == dwId)! g+ s7 f: }! g# U. L6 U7 h
{( O; i+ q1 P( R7 i6 |; @' m) c
return m_Item.nIndex;; w& N/ d/ E$ O6 m! G
}
( g9 b8 d5 D& ?4 _0 E }
/ Y/ a8 n# m4 e& @+ e' p4 F return 255;
B& [. i2 }; T6 M; W& `( X' b}* C# E w+ r, t, C7 x
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置! o* x2 m6 P' P& e2 R7 l
{0 A" S- Z6 d7 s' P2 p+ C7 R
BYTE nTmp = 0;5 N0 c9 u. v" q6 i
bool bDest = false,bSrc = false;
, s, z# K( k* V4 X% l+ W for (int i=0;i<MAX_INVENTORY;i++)
9 k% Q( |7 {/ L5 |4 @% V% y& T, i {% X( |" W/ f/ l* O% l6 u* T3 r
if (dwSrcId == m_Item.dwId)3 L2 b! V! l& `# W3 t% d
{! ^+ `: s1 p; v v% t
//id相等 则 改变对应的dest和src
* [; `$ i7 w2 a nTmp = m_Item.nIndex;' ~: t1 j9 ~4 S" f' W q% p* V
m_Item.nIndex = dest;% R( _3 s$ A8 s
}, e) p$ v- E$ Y c* O: ~
}" W. n0 U% K1 k7 m, B3 Q4 V
//临时数据保存完毕,交换开始7 g, p9 u0 _+ \
for (int i=0;i<MAX_INVENTORY;i++)" }5 @( d& H% @, u
{
9 u$ w1 a1 W2 J* t if (dest == m_Item.nIndex)
O5 o1 L( R4 }0 d# ?( [$ i7 W {
/ {, m! k! p8 B1 F1 n$ m! V //id相等 则 改变对应的dest和src
' u& E' ~* f& W/ z m_Item.nIndex = nTmp;
3 d" c. v6 J6 x! _: L( Y }
4 e8 k H, h7 p4 [! H: b) h }
1 {& u$ p: O3 V* E# c& l}
9 N+ O/ p( G |3 e M9 O};
$ c; R# v* z" f% R3 }( b: v1 K. P-------------------------------------------------------------------------* h0 v( c/ m1 E
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 N/ {) a5 E7 o+ O
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);1 ^: x$ M0 w! D7 N' ~
紧靠其上添加:4 }3 F# h* t6 f, ]' x6 A& K: _
if( pWndBase == &m_wndMenu )
5 g8 _# V) |; d* z3 Z2 V! } N{* [* D7 b2 M" j! H
switch( nID )& `9 U' c Y) @7 c6 ?
{0 E% W: H% _" z0 e' a( W
case 2:* T* A Y F& K2 q @' {
{3 b6 e7 K$ }1 U0 S/ H1 Y
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);5 @ E8 i" ^3 J$ n+ u8 n; F- t
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
J' [9 i; u3 t5 }, I9 W {" R& N, Z9 L6 N3 D! k6 y
break;
- z* B7 L( P' \9 O }. u& r; z% ^' F: G
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)9 \. ^+ C& i. A8 C, C- f% ]
{
3 M+ }! @* c: J' {8 ` CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 w. o7 K$ b) {) Z
if( !pItemElem )8 n! W& [+ ]1 Z3 p* N) }
continue;7 X8 ]9 s% u. I
if(pItemElem->GetExtra() > 0), {5 K( N1 |& V4 b4 T
continue;! n% T* [' ?7 R5 h3 ?
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 7 o' Q( x2 ]0 f1 Z+ {% u
continue;
! \9 U& L. m7 Q- P. S if( g_pPlayer->IsUsing( pItemElem ) )
5 ~3 h. k' C8 }1 J, A continue;9 G" t9 f& G) U3 X* r! \, ~& j& a& u
if( pItemElem->IsUndestructable() == TRUE )% @, z* B( a( B! _+ q. s4 y+ o
{
2 F6 |/ E V; z g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );3 F8 a& ]0 o0 T6 |
continue;
( u' O+ {5 ^2 [2 N' J }$ o6 e# F' f- i8 o- ]; f4 t1 M; X
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
+ U& R+ ~4 w9 q" j& v }! h0 D! S5 q0 ~6 w& |
break;
8 `$ {! K* _+ k# ~$ G }
* Q9 m; F) f1 o7 ?2 }% B case 1:, m/ c. {$ \, T+ I7 |
{7 J2 @$ w+ V9 y: }
//整理背包' O# h4 O9 f: d
//////////////////////////////////////////////////////////////////////////' t( S% e+ m3 Z; b: q* r% [' z
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
( Q* G9 }5 h# |) G5 H //////////////////////////////////////////////////////////////////////////
B1 Y) _, {" f% m: s8 u& W //////////////////////////////////////////////////////////////////////////
# ^/ u5 D+ X! g) v* f7 Z4 B3 D" h- R CInventorySort* pInvSort = new CInventorySort;4 R. B+ Q1 d: W
vector <sItem> vItem;: A. }! y. [3 e( w1 ~' c
vItem.resize(MAX_INVENTORY);//初始化大小; f9 ~# [! g+ F0 ?1 [; ^
//////////////////////////////////////////////////////////////////////////8 v# i9 I ]. h8 q+ X2 n
//填充数据7 b. A/ R3 @3 T8 m$ t: b. u+ t
for (int i=0;i<MAX_INVENTORY;i++)
# ], J0 r. O6 ?+ c2 I2 n9 i: v3 u {0 Y2 r; r* u2 g) u' S8 p9 t
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);; k2 _& y9 x' q; A( y( G
if (!pItemElem)4 W& Q; M5 H2 H- a' Q; R+ v
{2 @0 s1 N+ W6 T9 p4 `1 G
vItem.dwKind2 = 0xffffffff;" m6 U# ?/ j; t. S" Z& X: K7 Y
vItem.dwItemId = 0xffffffff;# b2 t( t/ a! W! T6 i
vItem.nIndex = i;
% N; S! V( k' B' F, G, G, ~8 u4 o }else {
+ p/ F! o- B; ]8 [0 a) i6 V- C& c ItemProp* pProp = pItemElem->GetProp();
; i6 \" x, Y# t6 q' I g vItem.dwKind2 = pProp->dwItemKind2;
6 p- A3 H; T6 F( x Y/ M' E vItem.dwItemId = pItemElem->m_dwItemId;
: F3 q0 v/ _8 w$ }$ T( K vItem.nIndex = i;6 j. \! \/ a/ |- K( A+ M
}
" Q6 E) d3 b& c8 r( Y# ^ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 n J8 b4 C; k8 x }4 i# I6 z: N9 N' F- g" V
//////////////////////////////////////////////////////////////////////////
/ p3 P! {) S5 ~( S7 L8 u5 J& E sort(vItem.begin(),vItem.end());//排序' U l+ q, o( A: O6 u2 t ?+ P$ Y1 X# [
//////////////////////////////////////////////////////////////////////////6 P$ o. s; z4 V* W! q
//交换( ^- L( _4 r, _- }
for (size_t i=0;i<vItem.size();i++)
t3 X" ^! U9 i0 Z# G {
1 Z8 K" K- {# b* m! s //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' X7 ?. U" ]4 I/ I; y( I pInvSort->Add(vItem.nIndex);3 y4 h' L+ k3 T: c0 Q8 z
} X, N& q1 w' y! F" \3 t
BYTE nDestPos = 0;
# y3 |) M2 P; M8 `) ~' N for (int i=0;i<MAX_INVENTORY;i++)
" v; i# M; i6 N6 a- V- H: I {& \+ B' N# h/ R: y S1 {
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
: i) n. d7 ?; \' i if (pItemElem)
+ P4 M9 @2 j* s* Y4 P; u6 } {
5 l/ k% i. l1 k if (IsUsingItem(pItemElem))8 B6 Z$ q0 `) Y
{
% E+ T; C+ ]6 y) E. F5 m //这个位置无法放7 K" a( E; T; _% X# S
nDestPos++;
$ \- O# V$ Q# ?& |- w- I }- x; I$ v, _0 t+ z. o9 s
}
/ r- X1 o5 o2 i* k- D BYTE nSrc = pInvSort->GetItemSrc(i);
/ t! e. a3 T* ] pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);, q Q+ {$ o/ X' g6 W
if (pItemElem)
3 M2 o3 u1 z- X1 S. Y$ g1 e& j6 k0 y { l% [2 m" g) D! A
if (IsUsingItem(pItemElem))6 q3 Z% j$ C5 p. H2 f3 q7 v0 t
{& L* X" F, ?% m5 f
//这个道具无法移动,跳过
* W, S/ T) Y& |5 j: [( ~* P continue;# z [! d" G$ n9 Z$ C- }
}
3 \4 M' f5 ~( \! H* _ }else{
' h; h c1 N7 F //空位置 不用动
& A# a0 n- V, S o continue;
" t; `& k# W" V9 |1 V) C }
; c& w. h3 |" B: C+ u% e //////////////////////////////////////////////////////////////////////////
" H, T7 D5 l6 \1 ` //开始移动
: q9 W9 u) e. |8 C- c V- I if (nSrc == nDestPos)
3 }; n: J) j/ l7 Z, A( ~; i {
$ }! v3 a' ?$ s2 d4 I //原地不动2 J$ Q, |* Z% `
nDestPos++;2 S" z* S: C+ q' Y
continue;
" P3 T @4 x, }! P8 e }
4 O9 Y! u, r6 d) k% @* L pInvSort->MoveItem(i,nDestPos);
8 D. r) Z' X7 S' [% i5 S% R g_DPlay.SendMoveItem(0,nSrc,nDestPos);
# S- ?( m, U) l- g# E' X. i. ?0 P: e Sleep(5);5 P: e0 k& Z9 R, s
//Error("移动 - %d->%d",nSrc,nDestPos);- X5 N/ u( y- f3 w# ]2 D( _
nDestPos++;
$ h8 y9 ^& A8 \3 h0 G4 D9 p) m* s) G5 _ }
+ w3 f3 K& t7 ^3 T0 V6 V! F) K //取第一个元素的信息
' w7 g, s8 c9 [2 F4 K$ E /*6 h0 m/ ?: k8 h) ?4 C" r+ \
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff). v( M4 F5 t0 L& h1 |8 V7 ~4 [
{6 V) Z l. N- B$ P
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);, \ l1 c& S2 O2 I. A" A. `
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);5 h1 m) m/ Q3 j1 w
}
1 B; _; J5 w Q+ n* a) z */
1 W. n7 q8 ]4 a% c8 u, e //////////////////////////////////////////////////////////////////////////9 T" r0 ]. X* _: {
break;
% Z5 M$ l% X9 ]8 g }3 W, x. R& I% x a
}
1 N/ x3 A$ z2 S6 C5 W. D: [6 v; R}$ J! R. v d S" o5 R8 o
m_wndMenu.SetVisible(FALSE);- K; ~; B6 q/ O9 P6 {- ~( D& l
9 I" k$ Q" N' A0 k. ]
--------------------------------------------------------------------------------------------------------
, K1 f+ ^ y' @搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)/ p8 q* q' D0 W z' S, I
{
( f4 m; A: F4 _) `) A! D) _, R8 cBaseMouseCursor();" ^' F9 B/ Y# e* x# j$ m
}
! N/ p: S0 V8 w) _8 }- w在其下添加:
T! j5 F9 y+ m. C5 T+ A' v$ yvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)' d1 T' |! V- Y o. p
{$ K2 Q' h9 [0 r
m_wndMenu.DeleteAllMenu();
1 B% ~" K* y0 i6 c2 { e. ~m_wndMenu.CreateMenu(this);
6 f7 g4 f1 B4 j Im_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");0 ~) W4 K! ?' G% a- T; P7 u
* V& w7 h1 o9 f9 Y p) m; g/ i
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ Z* Q' }4 U' K, [
{
" v1 M+ ^: X" S6 u/ L# ^/ [ //P以上级别才可以删除所有道具
) H! k) ?# f; u m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");+ `) h/ H2 e7 A( |# H4 o( n! L
}
3 l/ x: b- J; U% Am_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
- i) w% w) \- P; ^7 ?m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
, B4 b" C7 B: f2 o+ ~% am_wndMenu.SetFocus();/ C* C2 ~" @$ u; s; P! G! w
}
/ E; x: {* c1 w$ w# o" r- e; |------------------------------------------------------------------------------------------------------------( e; q8 E0 V, `
*************************& a! C+ X$ q1 r( s1 d; K
WndField.h文件/ W( N! ?& C) M1 { [! @0 h' g& A
*************************! u$ B) G2 g+ ]' L& H# n# L
搜索:BOOL m_bReport;, d) ~- v+ `- n0 d
其后添加:
h' x1 y% q1 B A, eCWndMenu m_wndMenu;# l1 x& z3 n5 Q' w9 [' u
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
$ r) }% p2 _+ j: v其后添加:: W9 i+ u( c: D- k5 t' R" Q5 M
virtual void OnRButtonUp(UINT nFlags, CPoint point);! a0 \" M$ _0 |% a; e% |6 n
) I- Q; z( K1 ^
& [. w5 q; x! i, q; Y
|
|