|
|
源文件中_Interface文件夹下WndField.cpp文件' x" e' Z; n1 ~+ p8 O& p
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& C d7 Z& N7 k1 Y
( ^7 _$ x0 C `& W* t
struct sItem
6 `" A7 o) h. k% w9 v{
6 [/ K0 W" m* ^, G6 UDWORD dwId;+ T, n( t$ V4 j" s- u
DWORD dwKind2;. g* W( {6 \* O( _# J8 ^$ P- @
DWORD dwItemId;
9 I% s; l* _$ P, @/ R$ aBYTE nIndex;
" [% }! |% Z2 @ M, x) BsItem(){3 o9 w: F X+ w1 `( J
dwId = dwKind2 = dwItemId = nIndex = 0;5 B, |% U" L1 g" ?3 q3 n
}
) x3 ?) M) T& l4 V7 y4 b7 abool operator < (const sItem p2) W9 v' Y5 r4 s% w0 _/ u
{% D) [" J6 _' g/ ]9 x+ u6 f% j9 p5 {
if (dwKind2 == p2.dwKind2)
' R9 R, j( A& Z- k$ X& F5 V1 ]6 o {
: P+ F! ^; N$ X. f return dwItemId < p2.dwItemId;2 k2 a6 C& V( w l1 u% `
}else{, Q8 v0 |5 A) W" S. K U6 Q% S+ M
return dwKind2 < p2.dwKind2;
- [, n7 H4 g7 k) m/ M8 Y, r- _ }$ W$ e6 B4 U) X% e. S
}
1 R( c& Y& P* V7 z( Q$ ~$ X};
+ x; R4 G# D' b! ?class CInventorySort1 M, f0 O; ]) }+ q
{
6 I! |. O, m# w2 S! ^public:
7 y; g$ O5 V8 ^' E+ OCInventorySort()% ~' x8 i4 O8 U' a1 t" F( h
{: a- c( [/ C8 m3 f5 M8 F0 U
m_dwPos = 0;; a9 s6 t1 T# y1 d) h/ d
}; m0 S4 Z' n# {9 v% W1 K8 `# \5 ~
~CInventorySort(){}/ u7 n! x7 d" ]- \5 Z7 ?
private:
' q- z' T" ?+ R9 ~: Q+ nsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
2 ?3 u; ^$ N, ?DWORD m_dwPos;; F8 O, R) ^6 Q. g' [5 D' H4 h
public:2 z- n$ I6 x. F5 O: Y
void Add(BYTE nIndex)8 `* X" h3 {5 `5 {/ j
{2 l5 ?" u% s) z
if (m_dwPos >= MAX_INVENTORY)
$ {6 s, v- y0 d: W4 i, w* D {0 f, |6 n$ E% z, W6 g( y* S
return;
$ y: @- |3 j8 c" Y }& |1 H& e! |8 g n7 {
m_Item[m_dwPos].nIndex = nIndex;
2 d! T; u- N/ f; C3 ^8 e( T( d; j m_Item[m_dwPos].dwId = m_dwPos;% r" W0 H+ K$ b# ]* ^
m_dwPos++;
8 a& k6 W1 w. a; J}; K( n# Z3 r. ~. I
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列& _9 v( J( J( h R0 F s
{
6 R* I) u r/ v; `6 }3 L6 z for (int i=0;i<MAX_INVENTORY;i++)! `( J/ M0 k: D, h, M
{
' F3 N* u' J7 }9 R2 v; P) f if (m_Item.dwId == dwId)
. H/ R1 }% M) f {
( a. n7 H9 s& D, c return m_Item.nIndex;
) E- S, I- a4 ]" Q }* @! ]2 A" [- l$ a$ |! P
}/ @4 `: x6 T* U* n) i6 p1 }8 e( X
return 255;
- T( _, K- A1 ~0 k# X}
" A! I' x6 j. H: Ovoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置, K0 x2 }5 f$ c# [3 F @
{
, `, i. k5 i, {& C- ? BYTE nTmp = 0; |8 I4 O7 G: p1 \, b$ `
bool bDest = false,bSrc = false;
+ o/ O$ H# m( r/ I1 i- a for (int i=0;i<MAX_INVENTORY;i++)
& Y& i y- m: D7 | {! i; M* l6 J7 ]3 |+ u9 z8 t
if (dwSrcId == m_Item.dwId)5 O& p; `4 M J& \6 {- d1 `
{# Z+ {: \9 G) e
//id相等 则 改变对应的dest和src
: v% h. m; L0 L6 `: V6 G& r: @ nTmp = m_Item.nIndex;
) j4 m6 J+ X1 J# K" ~8 t: A. B m_Item.nIndex = dest;
# m! j4 ^3 s* `. t }
) @! x* [2 j; M, Q* @3 w }
0 S4 R1 U, q2 {' w //临时数据保存完毕,交换开始4 f; _2 E2 n" `4 q0 E9 g
for (int i=0;i<MAX_INVENTORY;i++)0 m$ p+ H& Z+ }2 v$ D
{2 M7 R# F. {4 [( ?
if (dest == m_Item.nIndex)9 R! i4 V$ }9 ^* @9 T
{4 }2 y+ ?! h; Q- b, j T
//id相等 则 改变对应的dest和src
( G3 R4 g3 u0 G4 M3 r m_Item.nIndex = nTmp;9 J3 C7 R; ]" t; B- q9 S
}
- R! T' w% I$ T3 e' M }: I6 ~0 \: d' c) V
}5 Q) g* F/ L1 N" B$ ~/ x$ b- J
};" Y' `3 U- ^) O6 Q9 Y" Q+ ]
-------------------------------------------------------------------------
: m1 V5 a/ U5 E, ?依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% {# S' J! T$ \5 l搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);% [8 Y! ~, T R
紧靠其上添加:
+ J3 a2 ~8 N) Y2 l. B# Lif( pWndBase == &m_wndMenu )
1 ]3 u" ], n! Y1 S4 Q& e% B# [{1 Q, }" ?% R. c5 S* @& _; `. A
switch( nID )- `% F8 s' G7 n4 x; t+ D
{/ T7 ?9 G9 e+ `5 k6 M$ }) j
case 2: Z4 j' ~+ I# ?2 W: I$ L: \6 g
{9 S. J/ d7 N+ x
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);8 [0 w, a z; D- v! I
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)) G q, b& i4 ^5 t
{/ L' J( F9 ~* e S Y4 T
break;( ~" G2 l4 _+ p9 p# d
}
. ]4 w& L+ ]- S0 }0 c5 g for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
* s: e2 i: R8 L7 N {* F; P& f) R; m0 ]
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
. I' m5 R3 a, s2 ~# H- K if( !pItemElem ) j2 H6 X# Q5 e3 Z
continue;
, a2 w6 W) I9 U c4 P if(pItemElem->GetExtra() > 0)! e% l1 V, P5 h% u6 D6 T( S
continue;
3 F( c' h t" e, x2 q3 n! u if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
9 O% b1 y# k+ l4 a2 S; |/ D continue;0 {9 D' u% O- G2 H
if( g_pPlayer->IsUsing( pItemElem ) ), q0 f" O1 J, C; L6 ]3 v% a% Z7 W$ Q. e
continue;: d4 u$ i. ~/ C) C& y7 L
if( pItemElem->IsUndestructable() == TRUE )! v* t! u! H- d) k7 i$ B- |+ D
{
% x# _9 l% l2 ]& Q. ? g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
# F6 L$ g; }4 C* d4 o: U( a continue;
. \# r; v$ j( X: C }( |* Z1 ~1 c; v. U) V
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);0 ? g) q& f6 w6 _1 @9 ?( r
}* D- N, c8 t% t% Q; G" N
break;7 g" P" U% R' x
}
3 {3 s S$ h; ? case 1:
3 h- I$ @9 a4 @' I m- i) W5 Q {
6 H* p4 `, d6 D4 Y3 H; m; c$ E //整理背包; D$ Z. }7 `3 }8 A3 z
//////////////////////////////////////////////////////////////////////////
' @; O& |6 e, x# @ //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
8 ^4 Q0 @ N: N( h3 k- L( A /////////////////////////////////////////////////////////////////////////// H' X" Q* |- K/ v% c' Z; U
//////////////////////////////////////////////////////////////////////////5 B( `, _5 [7 a: [ f8 j' {
CInventorySort* pInvSort = new CInventorySort;
$ {4 s) j8 t: |1 i vector <sItem> vItem;: B$ U7 [( h4 c% F
vItem.resize(MAX_INVENTORY);//初始化大小
- A5 Q9 c# L' E //////////////////////////////////////////////////////////////////////////' P7 v: [$ v3 B2 }. G
//填充数据
. J2 N1 O) Y; Y+ |/ g s for (int i=0;i<MAX_INVENTORY;i++)
, Y9 f4 }( x6 B p. Z {
* e* r' e* P# [2 f! D* j/ p2 l CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 f9 K4 j* G# G4 s if (!pItemElem)
( ~' n m% l$ c( f% [ {
! g2 n# E6 E3 W/ |" T# m9 Q9 D/ B vItem.dwKind2 = 0xffffffff;, N: l8 O/ z( }! s5 `. s/ Y& L
vItem.dwItemId = 0xffffffff;# |. t3 l) i! _2 A
vItem.nIndex = i;+ {" E0 N }3 r; h o1 K
}else {
1 k0 E- t! L/ G" Y: V C! C ItemProp* pProp = pItemElem->GetProp();4 V9 t) J- ]; B( e! d8 }& ~
vItem.dwKind2 = pProp->dwItemKind2;) c- A4 a0 |, e* \& Y5 k# D. {9 O
vItem.dwItemId = pItemElem->m_dwItemId;
& e% f7 W$ H `9 Y* H& {( z vItem.nIndex = i;
( m% X7 N- L7 A+ |4 I; O) w }
6 Q) O$ }! h) |" J3 { //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
& a% C/ s! k+ @: R }# u6 y+ N) ^8 e w2 A. j. u; S8 g! t1 u" p
//////////////////////////////////////////////////////////////////////////3 W2 {2 ?7 h$ l6 M* ~2 k
sort(vItem.begin(),vItem.end());//排序
8 E ^8 m( F1 w! x) ?0 E% R$ I //////////////////////////////////////////////////////////////////////////
8 W6 _) ~" B' z7 F& H //交换
9 ?# j) z; o7 k. a# _- h0 u4 }1 R for (size_t i=0;i<vItem.size();i++), b9 h. a* g% |# u. H9 v
{& `$ l$ x6 W: N! |/ r, C5 b
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' S+ S: ?3 ]: j3 ` pInvSort->Add(vItem.nIndex);# O7 R0 x$ o; W5 M: X3 {
}
0 _6 ?2 H! N4 z3 G( ~ BYTE nDestPos = 0;
: w. w9 W0 q0 f$ _( I5 G5 A5 K, r for (int i=0;i<MAX_INVENTORY;i++)2 ^! ]2 b& N# a4 V/ {3 a
{5 i" L, s: h& H* S' U. }
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);6 _4 P5 O4 ` _( ~3 ~
if (pItemElem)
$ W3 F# F) e7 e; S- q; t! u {
$ C. ?# T) Q3 \# y! Y$ H if (IsUsingItem(pItemElem))
y7 O0 D& i1 c, k$ Q- c; G% A {- f' z( v' @% L3 K- w1 J
//这个位置无法放
5 ]: M* d- l/ m; W6 V nDestPos++;3 I; i1 T' v. d: r/ j) `+ M
}
% C$ Z- x4 l. R/ Q }
7 z: o& X& R [# T! N, L0 y; C N BYTE nSrc = pInvSort->GetItemSrc(i);8 {+ B7 c m7 w$ j( ]# D1 U, ?' S5 A. P
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
4 N: o$ k4 R5 Q/ O if (pItemElem)% u/ b1 S! a' ~0 V- X7 L- f
{
0 K5 z" T# Y# {5 i/ T& b if (IsUsingItem(pItemElem))7 i. T3 ?- m! v: E. c# Q
{% Z7 l; ]* n( r/ ^
//这个道具无法移动,跳过
! i0 y; G: F5 `3 t% n8 y, P continue;) a' H5 E" X5 D* R# K8 y
}
3 ]8 _3 m9 b) h6 s0 U; d5 a }else{
( j, W. R5 A3 H& @" B% `0 p //空位置 不用动
- n% ~4 T6 X2 |5 Y# O) ~ continue;
6 h$ u3 R8 Q7 U3 f+ U& X }
, b& T3 x! ]7 k* o$ ~ //////////////////////////////////////////////////////////////////////////( x& T' ~, f0 e% v U/ i
//开始移动. K6 d V( n0 L# p
if (nSrc == nDestPos)9 n" o e" O& k2 i/ L/ C; n; ]0 W
{9 K2 C8 V9 {8 ~3 E+ v$ G. k
//原地不动+ Q+ s" G8 b. w
nDestPos++;$ O( ? w+ R$ `6 p6 \$ n' y
continue;
9 {7 T/ ^- Z; l2 a& F# n }! S+ u# V4 K. T$ f7 L r
pInvSort->MoveItem(i,nDestPos);3 s% Y) R* E }% a6 d! h8 E* Q
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
9 Z$ ]# i# k3 m4 M- d4 O Sleep(5);
' @ B! A8 I) P F4 z$ _2 A //Error("移动 - %d->%d",nSrc,nDestPos);
! p& L4 Y" k' U nDestPos++;; H# g$ C" |9 u
}7 ^) ` w: r, t/ f$ J, B0 N$ u
//取第一个元素的信息. @. [8 K9 c/ y# o$ H
/*1 _) }6 {- z- n; f: s
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
+ E' [$ `0 R; b" M5 ~/ p4 q$ Q { {
a1 a, Z) l) Q& c2 X Error("Move - From:%d,To:%d",vItem[0].nIndex,x);. g% h F3 ?0 D; t* g& {
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
/ Z% X' t& `5 x( @1 y5 g }6 C- X5 f" N) h6 b
*/! J1 L+ j) c, ?; a0 s5 R
//////////////////////////////////////////////////////////////////////////
2 e! Y) v/ }8 I- Q7 u break;
* F' ^2 E$ ^% ]5 M' t0 A }
+ D' H) }- z. c. C; Z } : h3 c- w }% b. E6 V j
}
5 g3 a, ~3 E. w' K- `m_wndMenu.SetVisible(FALSE);5 h$ i( D) y q0 `
: [9 A3 \/ F" r) u5 @0 o
--------------------------------------------------------------------------------------------------------9 o [9 V- }( L6 k7 a* Y0 c
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
[$ V9 a+ ~+ i# w2 j{8 _. E0 M$ k0 V/ W+ x7 h( x
BaseMouseCursor();
" ]. q4 n5 L$ t8 [. E+ Q9 e}
) C7 [; R5 [. b* T& S, t# O1 j6 B在其下添加:
" T1 R- z* j0 T: pvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)" ~$ C6 q9 ~6 e2 X- w4 M5 G
{
/ x+ o' P, A$ k) q2 I, P# ?m_wndMenu.DeleteAllMenu();3 \8 f( z: ?" \! u) K: r
m_wndMenu.CreateMenu(this);
7 a( H9 e+ y+ V' a5 B, Sm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");0 ^% F# n& f0 j( y# a
" K* x$ \2 u1 h5 r/ u
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))( \+ @, A0 L% \4 i! ^' u: Q
{$ q# s7 J% i. }: b& @
//P以上级别才可以删除所有道具' o: d1 K. X/ n+ Q9 I. W! j: N+ Y, t
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
; T& i( P( q# C' f}/ S% w: j- ?" P% o+ p9 e
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
6 {2 ~$ |7 H, W* em_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );$ p! V! Z9 B( w0 z
m_wndMenu.SetFocus();5 Z, x: F! v8 P9 u5 z
}
6 Q$ G& g0 |; K/ K, i# {) j------------------------------------------------------------------------------------------------------------
* F$ w) c6 q( C5 r& J1 H3 Q& r) C: [# g*************************
' }$ S$ r% e+ {9 AWndField.h文件
! J: t4 p5 M" A2 Y# a( v*************************
* \- h7 J" g. Y搜索:BOOL m_bReport;
9 f( n4 t; | y; @# f: @* k6 V其后添加:
: b9 i/ K- o; }! u4 vCWndMenu m_wndMenu;0 A r) i1 ?# x- S) Y* G5 Z
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);& z% G( ?! v! j. z6 N. b6 L
其后添加:
, v$ |1 d) Y3 ~6 Pvirtual void OnRButtonUp(UINT nFlags, CPoint point);
0 G+ Q& U( s' [+ L6 p0 N
; T- @6 z6 x8 g- f, U4 O7 d) I9 B3 M+ F) T
|
|