|
|
源文件中_Interface文件夹下WndField.cpp文件
; l4 K/ L) G* e& g搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ) d8 v0 _' d0 B: S5 s. H
& J" x. j4 n% Q7 ^5 Hstruct sItem
, p/ H& B0 j+ u& o6 p$ H{! F8 W1 N5 V2 ~' r! a
DWORD dwId;7 _" J- P+ b( K* o$ ^
DWORD dwKind2;
. ^! a0 H+ H7 hDWORD dwItemId;
2 e; t0 g' @7 J' n/ DBYTE nIndex;
7 g- Z* E( F1 T/ d SsItem(){8 m. b* q4 h* _, @+ h6 U) B& q
dwId = dwKind2 = dwItemId = nIndex = 0;6 f9 A d: r, W- n) ]
} m. t$ q( q& O8 p; X, K; A* D
bool operator < (const sItem p2)% { N0 ]8 k# s) U! k1 E; ]& l
{# e* @: s, u" A2 Y& p+ j
if (dwKind2 == p2.dwKind2)
Z/ ?$ j; F" L1 l4 [+ y, p {
5 @6 `9 B. k3 s$ b/ `2 l& w' g return dwItemId < p2.dwItemId;" y! O$ e6 w6 r$ K- D
}else{
/ a( C3 C" z# S return dwKind2 < p2.dwKind2;+ m+ t# V, x/ r8 j/ @4 W
}
9 A, x" g" X) I# ^' q}
: O* R6 |7 k! b, R& g};
# W, n6 `: K+ I' Hclass CInventorySort
: r* [) [8 D& u{
& \ w8 }7 H7 o! w/ Bpublic:
2 {! t3 a5 i$ I; mCInventorySort()" c0 X1 t; E. N) D7 d5 b% q
{) \0 G) `, F5 y1 r
m_dwPos = 0;7 d4 S9 G5 b+ Z- u, n7 S) s
}
: y9 v3 `* S: ~2 ~~CInventorySort(){}
3 C# p( @$ @; eprivate:: L }: j( u/ z h4 {6 ^
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息! B9 I9 E" b0 Q- D* y
DWORD m_dwPos;
6 F- U6 R6 b$ B- F7 }public:
" o3 f; r, Y2 T" m" ~void Add(BYTE nIndex)7 S$ M. w; x# G$ q
{
: S, D; ^- C0 \& ^& N* H! E if (m_dwPos >= MAX_INVENTORY)8 c+ U7 V4 Z! `
{: C+ z, V! `& _- K# {* s" H. h+ f
return;9 m/ ?* r0 b3 Y; D/ o4 V+ h! X$ m
}
$ T' O+ S0 S; d' m1 O) I m_Item[m_dwPos].nIndex = nIndex;
! }( m7 |, ?2 f$ L3 j m_Item[m_dwPos].dwId = m_dwPos;3 I$ C; O0 F5 U# L' i9 U
m_dwPos++;2 C+ N; A" J4 E3 u$ D. m* w
} y0 K6 A6 [/ }" o0 K6 q& I5 a
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列2 h T) C, D' O
{1 j- u/ X6 U& C P3 b* k% R
for (int i=0;i<MAX_INVENTORY;i++)
7 O; _( q0 b* g. z9 d {
`2 F( ?- V) ~7 v if (m_Item.dwId == dwId)1 ~+ W0 X) w' ?" g
{
0 V0 W6 W6 g; R6 M return m_Item.nIndex;& k4 s8 }$ R5 J3 v( f" _& D1 J
}
4 _& |, w% A6 O5 G7 \. u }
9 K6 Q/ W2 |: y/ P" ^ return 255;/ w: i' Z% d8 p0 V) c0 z
}% Z7 r! i3 q. o' S, A' ^5 Y2 S
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置+ t% P c. {& ~
{
& s0 i: ]; }5 p0 O BYTE nTmp = 0;
( d& i0 e4 d% W9 W E bool bDest = false,bSrc = false;9 m4 Q( r- [! J! K
for (int i=0;i<MAX_INVENTORY;i++). @8 N% w( }+ e( C% N% ~. z
{: C# N8 A3 Z8 M/ K g3 p- `. V1 Z) G
if (dwSrcId == m_Item.dwId)
- `6 T7 W9 g) a7 z {
5 B- j. u# k) G5 y2 }' @ //id相等 则 改变对应的dest和src
( C9 z# }* @% D7 k @ O nTmp = m_Item.nIndex;/ [+ Z' g6 D6 K# w
m_Item.nIndex = dest;
3 I5 e9 o0 r6 I( D! w }
* Z6 A7 J: b% v% D/ B }, \: d- D. ?9 B/ z" m7 Z; m
//临时数据保存完毕,交换开始' v1 A" G3 [! c
for (int i=0;i<MAX_INVENTORY;i++)! e2 ^0 z( \9 }* G/ U) o; A' S
{0 E6 u z: Z) p/ B# u8 j
if (dest == m_Item.nIndex)
7 V6 O. T3 \! o# w$ h) H' ~ y+ g {
& j: ?; ^5 V/ k% u: E2 c `. x //id相等 则 改变对应的dest和src/ J$ b3 ^1 p) q; ~1 @3 n- J
m_Item.nIndex = nTmp;4 N* a. ~; V2 ?' x! ^# R& v, B
}
" p7 I9 J: \, U. i4 a, ^, D }
9 o* V! o# |3 w- r}" L( {& B( ~6 C
};7 l7 s; X4 q0 a* d0 |: n0 Q" G8 U T
-------------------------------------------------------------------------+ d/ n: V9 ]0 y% S P, Y
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ) ?6 D5 H$ R& N1 U' w$ t
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);: ?) y% L% n' r: S6 g) R5 E
紧靠其上添加:
) _" u* h. u0 u1 {if( pWndBase == &m_wndMenu )+ U- E( b4 S! }; q; @5 _
{* T& G# C4 h9 ?$ e, h
switch( nID )- M: F* H0 |1 E/ a& D( X. ]) d
{2 f0 E3 @& I h" a+ Y& p
case 2:
1 k3 A9 N# Y; K& r {8 K8 I! s$ n! W, c( S) \
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
4 @) W7 O0 x0 D, r" [4 K" u if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), f! ]2 W8 T2 P# x0 p8 M
{
, C' }/ V+ g: ^; I break;
; L5 @# ?5 `$ Q# M. N }
8 r2 h$ ~$ b7 G& T+ ^ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)( I+ b: U. f6 o
{' O) v) _ B8 g' a0 P* d, D! E. r
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, b( E) }: w5 v7 Q" y* O0 j if( !pItemElem )( b( m9 G% L* O2 M% c$ y0 e1 R
continue;1 K5 e7 R1 V0 z/ E' m1 ]+ j
if(pItemElem->GetExtra() > 0)/ v+ J; ` `6 t/ [1 u& x
continue;
9 ?8 A6 b( F& W; C6 V if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
) {; s {! P9 ^6 u6 `* F; L- Z continue;1 s: C, @% T/ B3 v( ~$ R
if( g_pPlayer->IsUsing( pItemElem ) )
0 Q( w+ b) r: x | continue;& e/ ~ c+ s4 j6 E
if( pItemElem->IsUndestructable() == TRUE )# E/ E2 W! { z# k# [
{( r2 W4 o. L$ B0 F$ k( |
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
" M/ q! |7 _" Y8 H+ f) c5 G continue;, t. Q- W7 s$ T
}2 N# F$ H) J& r9 @2 l# m
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
0 a3 t- ^8 P( l9 G. p% n }: ?0 f; g" ]5 k' n
break;
8 H' F6 ?7 O8 f/ O }
( V% |! J/ j0 F' K: M: F( P' g! E case 1:
7 ~- V# e: A! V3 q {
/ ~, \, T5 y: [8 m //整理背包9 r1 d5 h+ i3 Q: @9 s# y( x( }0 j
//////////////////////////////////////////////////////////////////////////9 j6 r( X) y' G0 T4 v( @% f$ \
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );, _) t1 N& ]( O/ b: D+ O; a
//////////////////////////////////////////////////////////////////////////2 U" j3 ~, P" @ v8 E! }
//////////////////////////////////////////////////////////////////////////. N( P. r* }. o5 K: x
CInventorySort* pInvSort = new CInventorySort; Y% I! q1 t& f% s5 P5 s
vector <sItem> vItem;
& ~0 I1 e9 N. f) G; d$ Z vItem.resize(MAX_INVENTORY);//初始化大小! w2 M/ N0 k/ D2 y& }
//////////////////////////////////////////////////////////////////////////
2 g1 ^9 o0 ^$ D0 A# F2 S //填充数据
7 ?1 g }' I, K5 i/ H for (int i=0;i<MAX_INVENTORY;i++)
6 M$ I& c* e" m6 H5 U; \ {
, c2 p: C ~* h$ |4 H4 b1 W& y# a CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: X l# S# B1 G if (!pItemElem)* @6 U7 }* W& z- s
{& J+ e7 j$ c" Q1 w6 I1 B
vItem.dwKind2 = 0xffffffff;
. K# }+ B3 a* q, u1 H vItem.dwItemId = 0xffffffff;
. d; o' @3 ?5 e+ ] vItem.nIndex = i;8 m; J. o! s: F5 _6 x. Q* W8 ^
}else {. u4 S+ E" g- R
ItemProp* pProp = pItemElem->GetProp();
' M7 m* K6 N. U3 H1 F6 R" x vItem.dwKind2 = pProp->dwItemKind2;
+ [+ w* N6 z3 n+ J$ _ vItem.dwItemId = pItemElem->m_dwItemId;
" w& y0 u/ [9 U: X, C vItem.nIndex = i;: R6 U7 n7 _9 J/ M9 s
}, K8 X5 i. Y5 j+ g
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
% W! ~: U7 X% g# _ }
5 k9 I2 h, d5 { i1 x7 @ //////////////////////////////////////////////////////////////////////////# k0 g; J( q8 G% A( D8 y8 s7 i E
sort(vItem.begin(),vItem.end());//排序
1 n) b# q0 h; H# B( C ////////////////////////////////////////////////////////////////////////// w# K$ e i7 Y; K* L* E, I4 T
//交换8 ?: Z$ y+ ^3 x h! z: v9 N% ~
for (size_t i=0;i<vItem.size();i++)- C8 H! a9 T6 ^ K+ [
{
2 p; t, {- W4 ?# D1 u/ R/ | //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 O$ S6 S9 l* b% p4 q
pInvSort->Add(vItem.nIndex);
4 W0 B' f, Y5 Q9 m7 \ }
, H7 y+ Z3 u1 m2 V: E BYTE nDestPos = 0;% Z' v+ a) |6 d0 J
for (int i=0;i<MAX_INVENTORY;i++)7 @0 S3 }: }! v6 m
{
4 R6 j% h/ H6 B9 } l9 e* Z! a CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);8 m5 g- I+ S& [0 Y
if (pItemElem)' P/ X( O5 n5 H) s6 b# W% U
{
9 d) \8 D, h% s if (IsUsingItem(pItemElem))
/ K5 w0 P$ `1 G3 a5 Q1 Q! s {
, v0 M* W7 ]0 a1 r8 O) S //这个位置无法放
0 k, q* A% X2 X0 C nDestPos++;9 i- e c6 ~" t/ E# W" Y
}
4 p* V& X' h/ S: B. C& I }. K _0 M; k, O7 [
BYTE nSrc = pInvSort->GetItemSrc(i);
8 r2 b; A" Q/ _4 T pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
/ N' a% C3 S+ l- Q0 } if (pItemElem)/ ]: Q7 X6 G8 c9 g' x
{" q! a9 ?3 n, |
if (IsUsingItem(pItemElem)), z! }9 Q2 o: N5 o
{
5 t% A+ T4 W7 ^# h2 M. v' F //这个道具无法移动,跳过8 e% y1 o' K0 ~! f& a
continue;. W1 G- z6 S8 {) D, N9 V# e) Y
}) C8 }) F3 w8 P) o% \3 P b/ n+ O/ W
}else{# I( X4 B* ]; s8 i( ]& N z
//空位置 不用动5 Y8 |) C; R4 o4 y& O" y, t! c
continue;
5 J3 C5 Z% X4 f& X$ a( x }
% |6 c. V1 C6 G& S( H+ l) i1 B //////////////////////////////////////////////////////////////////////////+ c5 Q) M P4 e6 t
//开始移动) m& U, Y9 f: O3 T
if (nSrc == nDestPos)
# z* v0 J7 p; C: N7 a5 A {
, @ Q8 ?: |/ x1 o0 Z5 b //原地不动3 u) ]' Z: n1 b6 k
nDestPos++;" l8 ]' n+ W# M! @$ f A
continue;. {9 M0 K- n1 s2 [$ [& _2 q( q- D( s
}
, G; B9 }& r" Y: K- ?; U# e, s4 o, m pInvSort->MoveItem(i,nDestPos);. O$ N9 ]2 d- ?, j% Z
g_DPlay.SendMoveItem(0,nSrc,nDestPos);+ q; W% N- q4 }. B5 P+ I4 J0 S
Sleep(5);: \2 t/ v! u6 Q, X
//Error("移动 - %d->%d",nSrc,nDestPos);
% ? s$ G1 L# e% f9 F9 i nDestPos++;
5 t( L5 k7 d4 J- { }4 _5 O( @, k0 y$ g" b' V3 g3 C+ O( [+ O
//取第一个元素的信息9 i7 Z$ K$ f. Y, J% ?
/*
' V8 p* ~ H1 c) w if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
0 y' G `+ U8 E- s6 ~6 i8 f {" l" v% C1 L. q, f3 J
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);6 {0 x+ \) G- y7 y! j" X
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);5 p! O2 `$ F O% H6 M+ u
}
7 \; y7 Y% s; T: f3 K, W */1 U/ {" \, ~7 Z, s9 d/ S
//////////////////////////////////////////////////////////////////////////
/ U/ n9 O* R% s break;
2 M$ l% F% P) U) a) d) t }+ d6 f( }7 a1 K, M2 w" G
} ! m. A& v' Q- h2 \$ S: V
}
2 X7 Z8 a8 v; a% n% \2 |5 \m_wndMenu.SetVisible(FALSE);1 ^. d' z* J: ^ N
3 G% s& H* S$ q/ A6 t--------------------------------------------------------------------------------------------------------" Z$ Z2 t/ M. G3 n; a% f0 d
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
; K7 G# \5 K& ]& F( L' P; T{* n& U+ E# s8 Y5 N, b3 x
BaseMouseCursor();
$ T9 m, o$ x( j' P% b}) H& R1 m' y- A) x$ U2 s$ O
在其下添加:8 F: ^5 l, X$ ?/ v: i b
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
# X8 h- H$ [% K* L* G9 Z{2 S8 B: j" M2 o/ @
m_wndMenu.DeleteAllMenu();; Z, E4 e% u1 T
m_wndMenu.CreateMenu(this);. A, ?: `* B; q& q
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
$ Z" D: ~: p$ { `/ N/ W: j4 r) z$ K* y6 a) i: @
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ G8 W. t$ `2 K{
/ F, v; B4 U% v& I: s1 t( A //P以上级别才可以删除所有道具" }9 @1 b# j% y0 u, C6 ?
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
1 v3 Y$ F0 S( z0 F, U: s. d+ d z}% Y5 ]& b6 x O: h, S" {" K1 K2 Y
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
8 S3 O: c7 I, h/ Qm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
6 M$ L* T8 M. [& u# H9 G5 J! fm_wndMenu.SetFocus();
! k- ?$ S- F, z) q3 G}
% n, [: G. b M; }. T% p------------------------------------------------------------------------------------------------------------
0 Z1 V. q( P) k8 U V; W N6 ]*************************1 B$ {+ S# x1 m, ~; p) E0 {
WndField.h文件
9 b( C+ n% l: r- g*************************0 }* ?3 b. d* K5 N1 D9 i) ]8 a
搜索:BOOL m_bReport;
. [5 e6 j0 ~1 \9 m7 y+ }其后添加:
7 z) k/ J! d; U5 O! H4 QCWndMenu m_wndMenu;
" z6 ?% U3 H% n; I搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);0 I2 q7 [. `( }! T5 M3 j
其后添加:5 l8 j) E8 H* W7 _' B
virtual void OnRButtonUp(UINT nFlags, CPoint point);
1 v, R$ J% X& x, D- K% A/ V; c! M. o2 U( U! |; {! |+ x) Z
/ J; j5 P' x/ M& s' O* k& g& y: |0 V
|
|