|
|
源文件中_Interface文件夹下WndField.cpp文件& W" s% u2 o+ ~7 x
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
! F( v: ~. H3 m2 K; ^ i" P4 E& J/ B2 L& T+ M8 l5 R
struct sItem
# O' X8 |2 u. J1 w* D/ f{
5 S2 o! K2 d) T4 LDWORD dwId;' t ?, q' i' {
DWORD dwKind2;
2 B7 d* r5 b* b+ v# ?! z4 mDWORD dwItemId;& D( T7 ~( z& E! a% ^, H
BYTE nIndex;
; j0 Q& C5 k5 G9 [sItem(){
' L5 h* s( K; i$ l5 z \/ l" C9 G dwId = dwKind2 = dwItemId = nIndex = 0;; ^# v# z$ k- W' {, c2 x8 C7 j
}3 ?' a- J# [8 d3 f) U- v
bool operator < (const sItem p2)
; B: e7 z8 B; w$ v& m: I{
2 ]6 {/ l1 R8 N( w+ {3 Z if (dwKind2 == p2.dwKind2)+ ]: l, o! {' w; S2 e2 L) s
{2 q0 P! [, k3 _) m/ Q+ L
return dwItemId < p2.dwItemId;
8 b/ V$ Z5 W6 X }else{9 @6 @4 v! x4 s; p. d; z
return dwKind2 < p2.dwKind2;
, u6 Z, b" l# g1 k# c& y$ Y M }8 K) M1 O# l- V5 f" D6 n
}. s, ?- T% n% E. f
};$ k8 \/ k/ P; v" Z4 g# {
class CInventorySort9 l. {1 N! {/ {! P X; e0 H
{
$ Z% g) L$ s' j% ]public:7 k, {, N6 C* n1 y7 v
CInventorySort()
, n1 V7 W5 t0 U8 T; d1 P{
. |- O# S, F0 ]) l f3 U$ g m_dwPos = 0;
3 k8 m; l4 r5 C- z) m; Q}
& n* m8 r, k8 ~: _& q" F, t~CInventorySort(){}
2 ?: \+ \, j, ?8 X$ \, y( v% |7 q6 ]" ]4 Fprivate:7 }5 O+ p5 I1 H7 L
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
z$ ~* d" n8 F/ @7 F( V. mDWORD m_dwPos;7 U& S5 V2 W" O! t2 a) b d
public:
2 C* z) j6 W% L' j6 k# e1 Svoid Add(BYTE nIndex)* s$ c6 v- d0 i" |
{
G$ k& H5 X. v) } if (m_dwPos >= MAX_INVENTORY)% X4 h* d9 ~& v9 E& o4 [
{
0 F# m8 C: K( |2 q/ v return;
8 ?: B- i5 X" ]: r9 Z9 Q+ O7 l }; X0 d R6 z7 g: v- ]
m_Item[m_dwPos].nIndex = nIndex;
0 o; h- ^3 S- N/ F( E$ g( @. ~, v* p) ` m_Item[m_dwPos].dwId = m_dwPos;
I8 `+ y y: _1 B- }6 U9 N6 Y2 U m_dwPos++;7 B* z/ E6 O9 o+ Q* A y
}
4 e7 @$ v4 |2 j, i; }BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列- H% f% v V; }2 l
{
; y2 v7 H- @ L: Y for (int i=0;i<MAX_INVENTORY;i++)6 h; O3 {1 r$ o8 j- m6 [. F" r
{) u. U7 U3 N7 j' w; @( L+ G
if (m_Item.dwId == dwId)2 N3 L0 Z; H" r
{: ^1 X# }- _' C2 o
return m_Item.nIndex;7 ~6 U& p( i' n4 Z- @
}! A- X6 F7 ]6 d) i/ o# W3 k
}
5 U5 u' \ u) l2 h return 255;* \9 K) |% U8 y0 l9 [
}- H% C/ i% {% N' `7 W9 h8 t
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置$ T+ e0 G# g! G0 _
{
+ E; r; @$ o% c6 F3 \/ a BYTE nTmp = 0;
) l: x; ^. c0 |; g, R bool bDest = false,bSrc = false;
B1 q. k7 t8 R4 a6 Z for (int i=0;i<MAX_INVENTORY;i++)
/ J& l* K( Q6 x( [ {% w; w6 K3 g' k) e; J
if (dwSrcId == m_Item.dwId)# L) k1 s& \$ B, _
{! v4 y$ K3 G+ k$ O% g) ]
//id相等 则 改变对应的dest和src
, G3 v/ T; P- \ nTmp = m_Item.nIndex;
* R9 \8 |) O: @ I* x m_Item.nIndex = dest;# F. L+ N7 ~3 }. b# W0 \' O
}
5 A+ R' E5 E% H3 I$ E- J }2 f8 \- k* Z& L+ V$ x5 v
//临时数据保存完毕,交换开始
2 o5 `4 O3 A( d4 y7 }0 N for (int i=0;i<MAX_INVENTORY;i++)
y4 N% H4 j' S5 Q {
0 e7 n, `% V/ A if (dest == m_Item.nIndex)
8 ?5 ]' I3 B3 b8 y) q& T {
: P& R2 {# Z$ L* d //id相等 则 改变对应的dest和src" R0 X) ^% M, i- j& M* s4 w& x
m_Item.nIndex = nTmp;& Q$ L' X$ G; u- y$ L L
}
8 |' U! b/ [/ g0 c- B- N ? }9 D( h% B) g J" E5 u
}) n$ ]. y5 s" h1 r. {: o: c1 t* A
};2 o. O- j! A8 F
-------------------------------------------------------------------------
; }3 ?* s9 E/ W/ w' D' P依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
( E( Z) U1 o: E \* i3 @搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);% v4 Z8 K$ Z* v
紧靠其上添加:
% J1 r- G" {( ]& @ O# m+ dif( pWndBase == &m_wndMenu )& ]4 ? x+ k" _$ b1 \' V
{5 ?& _0 `3 w* K- }% }
switch( nID )
8 q N* |# A/ v9 S8 z* z {* D, j! d7 P/ K- n U& ^8 y5 _2 {
case 2:% i6 h3 u1 ]% ]+ }! X
{7 Y6 P# V& q( B& b3 T
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
' Q% `8 x; S& @1 [, E; p* p1 ] if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# `+ W1 y/ f* K) k {
* |0 r+ L2 k6 p2 P3 v break;- F& M2 N/ b% _' W E& [
}% Z3 t, n! e% \, D {
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
+ h$ u. O* E3 }! _+ l {+ |1 q2 i5 r4 x2 c5 d8 W! C
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
' I, R! Z; T2 c2 U8 | Y if( !pItemElem )0 |1 w4 @& ^7 s
continue;# a6 V1 I5 a% G3 y
if(pItemElem->GetExtra() > 0)0 L& F+ S7 U. q
continue;- |. ]+ o# e2 i: k: e9 E l
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
% a7 x/ R4 \3 T2 ~+ y# _1 b continue;
7 n+ B7 _0 J/ E' J& Y if( g_pPlayer->IsUsing( pItemElem ) )1 i& ~3 s4 d1 d: v. A4 v" U
continue;
$ e; G3 q* w* F/ _5 j0 o4 J if( pItemElem->IsUndestructable() == TRUE )
1 k* O2 ~5 U7 ~7 l8 Q/ o# Q2 y {/ V4 M& F0 u7 L. {3 b- p
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
( m9 N" t+ ~8 o* _ continue;- c# b& v) Y' t+ c3 N9 D: l3 w" |
}6 y) ^/ |, g/ w- @' }
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
6 Z+ G/ c' n4 c- J4 t+ e K' L7 H }+ L. ?3 k7 S5 o
break;
1 y) u' P& w$ d; }+ s }8 ]- C; _, ?9 ]8 E
case 1:
# s7 A {# A, e {
{& W9 \2 [( g* p2 V //整理背包( e* v/ H; r7 b- E5 [7 O7 L
//////////////////////////////////////////////////////////////////////////. v: B: j$ f h% h) t
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );5 W r3 d7 H* N: }' }3 V2 L4 f/ U( ?
//////////////////////////////////////////////////////////////////////////
6 a: J# {' X& s2 u P, _ //////////////////////////////////////////////////////////////////////////
/ N! q% B) a4 S& W) c0 P( ~ CInventorySort* pInvSort = new CInventorySort;& y6 a! z8 z4 r& J; V3 I9 R
vector <sItem> vItem;
: z$ Y5 {9 X& v- `2 v vItem.resize(MAX_INVENTORY);//初始化大小; C( ~/ I' T+ L6 v1 U2 w1 @+ k8 s
//////////////////////////////////////////////////////////////////////////
& b6 T" G- S6 Q0 Q+ e2 L //填充数据' ^. X; t4 X- D7 {0 R
for (int i=0;i<MAX_INVENTORY;i++)
6 w( w6 j" ~/ Z {# e8 A, _+ u0 V5 F
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
' d5 g* S( T! Q& M if (!pItemElem)) |) F b: T& C7 X# s
{
( ^, F" d1 G: W vItem.dwKind2 = 0xffffffff;
0 H( D3 x/ o3 ]& d3 L1 A% v* j vItem.dwItemId = 0xffffffff;
: C. J, X! R& L, q* l/ K! U" B( ^# s vItem.nIndex = i;7 {) Y, O9 z( ~, {5 h
}else {3 }6 g3 m$ S/ |1 z
ItemProp* pProp = pItemElem->GetProp();
: X! u* d& ^8 K- W& U- C7 f, ]. p vItem.dwKind2 = pProp->dwItemKind2;- n r G6 ~$ A9 t X2 J* s' ~
vItem.dwItemId = pItemElem->m_dwItemId;' c$ S: L: J. X- r& V; r5 l
vItem.nIndex = i;8 i; R2 q, r1 _, r/ B, f
}
( w0 X0 q6 _5 }2 L3 x //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
2 H. b$ D% [8 Z, g& _% w: y }6 r7 W) I; A6 J% W% F" o& u
//////////////////////////////////////////////////////////////////////////
, \: O4 T5 k% B5 i sort(vItem.begin(),vItem.end());//排序
' c5 |: P3 w3 |* `4 l A0 K //////////////////////////////////////////////////////////////////////////- `& @: ?% i; N$ q, x% V/ O
//交换2 U8 f8 r; r- O$ ~% f8 s% }
for (size_t i=0;i<vItem.size();i++)+ i5 q0 q3 w, Q D/ F
{
% S: P/ P! {9 k8 K2 L //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ K) [' ]- z7 b9 v
pInvSort->Add(vItem.nIndex);
, M7 `3 e$ g! X c4 l Z0 S }
9 \, K- V% s. V* l+ ^ BYTE nDestPos = 0;
- n% U* R1 b, e for (int i=0;i<MAX_INVENTORY;i++)
6 A' x4 s t. R0 a! D* G L7 @6 u {* |) \% t$ q6 b: \2 e3 D
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);% W! X& I9 _2 Q: }! C, n
if (pItemElem)
* H6 N+ {. Z+ O. o9 X, K' L* q {6 r' R% _% t9 e8 C c
if (IsUsingItem(pItemElem))3 O* F3 ~4 p0 L0 e
{
, }7 w" K& G1 r0 R //这个位置无法放
0 b( I3 ^+ o c V5 }- Q4 _1 u nDestPos++;# D% O( ^# C5 n5 p2 C
}
B3 K3 @2 [# b c2 V" f9 D/ s }
# [5 K' r& ^$ s7 V% f$ b BYTE nSrc = pInvSort->GetItemSrc(i);2 {! s- u9 [- O$ y$ f
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);) u/ y5 m6 V+ z! g! H
if (pItemElem)
0 L2 y0 m8 G) p {, ~) @& J$ T% n K
if (IsUsingItem(pItemElem))
, t% k* e2 s4 N- K4 v/ | {
' P$ x, c" J$ i! Y2 } //这个道具无法移动,跳过' K) c$ m$ E Z# P
continue;# f/ n/ ^/ ~) I- W8 r
}5 a2 K6 C: @6 Q* c5 l' W
}else{* a/ z# c8 c; M
//空位置 不用动
: j+ y1 {4 e% J7 H continue;7 N& G) \$ a+ d, g2 j( U
}2 j" I9 D6 b% j# z6 |7 Y- L7 F4 i7 I
//////////////////////////////////////////////////////////////////////////6 S( X2 h% b- B, J* q8 @
//开始移动0 |) ^8 n8 n8 z. x
if (nSrc == nDestPos)
4 f! v1 H2 B" g7 ^- C {
2 T6 c* E# N# |* n. q //原地不动
( A$ R1 X0 n# J% j4 d: { nDestPos++;
~0 X) q/ \" r+ t% W% j continue;
) [8 x. M6 {4 c! y8 h/ S } C( e" _3 z; I& b6 E
pInvSort->MoveItem(i,nDestPos);6 T- y; n6 U8 R/ s
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
, r/ j0 z, j. X Sleep(5);
$ Y0 `# A; P7 l8 Y; a //Error("移动 - %d->%d",nSrc,nDestPos);9 k0 ?$ D' b' @0 z/ S7 Q+ C1 z) j3 T
nDestPos++;/ e$ Q+ ^4 k5 H8 y3 y
}
4 ~+ l; N, Q9 L2 a, l3 C X/ P //取第一个元素的信息
K z, `9 Z% @# _ /*# n' ^ Z6 M5 f
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)/ {& V& w* D* `
{
% b1 t3 i n; `/ O- a: C4 M Error("Move - From:%d,To:%d",vItem[0].nIndex,x);! K5 M) o W: G% `+ c
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
' c2 b; A/ s5 K }
7 }! M5 d/ g6 A" c2 M */1 i8 Y8 d- X0 r0 g2 j4 _
//////////////////////////////////////////////////////////////////////////
j. C: V! x9 a5 i0 H/ G1 H break;& \- h J9 W/ @( g4 W, y- l& i
}
# [7 @ Y4 G1 H4 [ }
" C5 t. F' m2 h: z3 V}' q) b! U- W8 J- ~
m_wndMenu.SetVisible(FALSE);
# e6 @3 u2 Z! r! x/ d6 U1 [4 Q1 ?6 L4 H
--------------------------------------------------------------------------------------------------------
' f( ]: n1 n9 }# \5 t搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)* ^, S: Z3 |) F& k. Q
{& z$ j+ K6 J* `0 E7 L
BaseMouseCursor();
% t E& {! t$ R" h# |8 \% Y}/ a% x8 \. m, N7 u- E
在其下添加:
4 R$ T" Z: [% P$ M- U, Jvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)9 r: m" ?9 z0 Q6 i1 x1 T5 `
{* X1 n# y- F# f+ D. t
m_wndMenu.DeleteAllMenu();! T! ]# c" K7 L& V. ^6 S
m_wndMenu.CreateMenu(this);
% Z8 H5 A1 ~$ |m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");/ f+ Y5 k+ @8 q* b% |1 J y
% t" ?& p% T4 c/ ]+ Fif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
, s) d/ h0 n: t9 x# z{
% X- m- Q4 O7 [ Z //P以上级别才可以删除所有道具8 A& _/ a( B2 w
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");% h+ z, F0 Y! m& v# w; U: A5 g' R6 Z
}+ {- X1 {* L( y" K
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
# S6 c. F& t4 Um_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );* w! t3 l- b# y8 Y
m_wndMenu.SetFocus();
5 H; ~" d/ d. P5 y5 M- M$ O8 u}
) M" @/ A4 m& a' o7 V- b& k------------------------------------------------------------------------------------------------------------% F0 Y- E _$ W* N2 v; S8 V5 [; S
*************************
% L P+ M2 T) s1 z& NWndField.h文件/ n* P. w3 T1 n! e/ s
*************************' Q+ ?( {4 @0 C3 {9 i z
搜索:BOOL m_bReport;/ Y# k! s0 C* h4 y- |! {2 ?
其后添加:4 U. S5 X- E- `6 [) ]: T
CWndMenu m_wndMenu;8 ]# h, w; K1 G$ r- W
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
3 {6 _) \4 q) p2 Q' ~0 B* a其后添加:, P5 e; V" w) k/ b8 S8 G
virtual void OnRButtonUp(UINT nFlags, CPoint point);
# {. C) ]# N/ ^2 o7 U: A8 v _+ A' ~5 h7 ]6 D
" z& c$ G, f7 b2 r. m1 S; Q/ j |
|