|
|
源文件中_Interface文件夹下WndField.cpp文件
* L. ^7 A0 N! ]3 G; W搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. r. U* t; }5 F
* [# W+ U! {! nstruct sItem
- M. T: \3 n" D* p' }* q) s* z3 n- _. w{
$ y$ G. f! Q) Z; X- a0 yDWORD dwId;
5 Y+ I& Q8 p7 e% SDWORD dwKind2;9 s F7 m. M& C3 _$ h
DWORD dwItemId;) l0 C; T0 m- V2 e: k
BYTE nIndex;
3 ^1 H7 \% X' }4 D. q3 ysItem(){
" m4 |8 g8 S6 d# f2 b( e& v( \ dwId = dwKind2 = dwItemId = nIndex = 0;
! h3 \5 T1 O' T; B5 e}
4 Y: `" w4 D$ r. ^1 lbool operator < (const sItem p2)
9 d2 L7 \' G6 e, K3 {& I& m+ _$ v) y{
8 z+ Z4 `, e5 `% {* R if (dwKind2 == p2.dwKind2)/ ~5 u, n& p: O. [$ v$ D' G: b* O
{
! w2 [# Z9 D Q; p5 { return dwItemId < p2.dwItemId;/ L: Z2 g. {' \0 P* ~
}else{
: @4 Y, v2 J: p return dwKind2 < p2.dwKind2;
3 P+ h% k7 f% O* H" q }
1 h8 g7 W8 K S6 d* ^5 d}- ?* ?/ @5 e" z* s
};
% l6 M- d: |" ^2 _class CInventorySort* `# `9 Q7 T' k% J, R% N/ v
{
- {" Z2 |, H( x1 @ y% K1 dpublic:6 k5 |$ O d% e& d5 q( R
CInventorySort()
& R6 [, O' g! l Q{6 m! K9 a' {7 l$ t; |- @
m_dwPos = 0;
g0 L; Q. A1 \/ z G) }! p}
! f3 O2 f. h: F2 c; n, R8 t6 l% `~CInventorySort(){}
/ s1 C* h3 a$ u( D, X! [3 ~& ~private:: T7 t/ p5 B i0 x( V
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息( @ r) t# ]' Q) p5 v3 M' s$ C/ h
DWORD m_dwPos;0 W+ Z6 E( o' j( i+ e+ Z. x
public:% \ X; Y6 y; M% t- z) z! b
void Add(BYTE nIndex)
$ w$ j* @* a5 B# s( Q7 p2 O{
u) _* B1 s% z1 K! C if (m_dwPos >= MAX_INVENTORY)* j+ \' C0 x, Z: ]0 M( H' X
{
6 F, e6 D& J$ h$ [; c( m$ x5 ` r return;
, c. _5 @& u$ L# @ `; Z8 g8 S }
- E$ h1 A# }$ ~( ?5 u( ?' f m_Item[m_dwPos].nIndex = nIndex;
! `( R! K, K/ l- j q m_Item[m_dwPos].dwId = m_dwPos;0 V2 I3 e8 k( m; } W
m_dwPos++;+ s3 C' W3 ?2 y( i+ K+ j
}" d# |, [0 Z- b) {' ~2 f
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列+ |: |0 v2 S* ?0 [. X6 M. U
{8 j# Q9 {4 L" r9 M2 _
for (int i=0;i<MAX_INVENTORY;i++)0 D+ E1 A3 F2 A7 i
{
; e" ]: P; g' O! g1 V/ d" x' Z if (m_Item.dwId == dwId)
# E7 p: Q" k# l6 o' n2 z4 j Z {; z, U, Q* Z; i, c8 ^2 _) Y
return m_Item.nIndex;( I; d- q2 O1 {- {/ l* H5 ]$ _: I
}
3 f! z/ B; W, q- {3 n6 H }* t: I! U; g5 W- u c$ z% e
return 255;: P2 y! B) l; E7 P/ `0 |2 @
}
W5 i2 N4 _: h; O* a0 `$ A3 Svoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置) G% ?8 [* S7 X
{
+ W$ o3 {. f$ O% `8 p9 G. y BYTE nTmp = 0;& h% _, z1 i) U: w4 o
bool bDest = false,bSrc = false;+ a8 ]7 R7 W( o3 G0 E
for (int i=0;i<MAX_INVENTORY;i++)3 N3 b" X& o. m# I; x5 J7 p" q
{5 f8 A! Y" G2 J, `8 b) t" J8 V# |
if (dwSrcId == m_Item.dwId)
& y4 A6 D& d. c% K. i$ Y& s {; ]8 |0 M6 N( ~# ^% q1 \" ?
//id相等 则 改变对应的dest和src. W& {# G6 [3 T- e6 j: D
nTmp = m_Item.nIndex;
4 G E& r/ r1 h m_Item.nIndex = dest;5 q# v# g& |2 a- u u; T; m& [9 k
}
* g5 b' q$ m* u% W8 V }" U2 ~; Q# d; P
//临时数据保存完毕,交换开始( w" K& d: k% a; H
for (int i=0;i<MAX_INVENTORY;i++)
1 ^* a7 E: R! Y/ a {
6 U1 b9 K, Y1 f3 }! S. o if (dest == m_Item.nIndex)
$ n) g4 N4 o( i {8 O" A- }* F2 H" D
//id相等 则 改变对应的dest和src" u. j2 G5 F8 V1 Y
m_Item.nIndex = nTmp;
( u$ O7 z2 \% t3 o& e7 p }4 y1 T: C. a' ?6 J3 t- G& R
}
9 L& N2 F3 m4 R& a# F+ R! x* y}
& k1 S3 O" @- J3 l7 K% P0 `1 u: m};: N! G8 E5 ~2 _5 D/ f- q
-------------------------------------------------------------------------- O. Z" o; z2 A: _ d
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ) t; Q# o I1 Z7 h& X; H
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
! V" W7 U$ H0 [$ c6 O6 W+ [紧靠其上添加:
* t- i* {' r# ^+ j/ a; H6 ?8 uif( pWndBase == &m_wndMenu )
$ _3 c: H, l- } S, u& i$ ?/ P( n{
; G/ L% K4 \9 Z$ \. F3 d0 Y" a switch( nID )4 n/ S) d1 B6 L$ C0 u( _
{
! z0 u7 ]0 X. I, V4 l8 e. ^ case 2:
' y$ `/ k; h, z2 p {
& \1 T7 T' N" s& n9 e6 Q //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);' S& v' a6 ]4 D5 q/ b$ \
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))2 [4 q& ]! d# `3 p/ b- @8 q7 m
{7 Q# Q9 E) [8 _# J6 [' ~" n) V5 u
break;- v7 c& v3 H! {7 Q" B0 ]
}
+ D( C: o- x; E2 x+ d4 Q/ @5 m for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
1 a2 U/ p; r- d6 S1 c {) G4 _. G& I- J9 K+ Z5 n& b
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);9 c4 Y6 n" _4 e
if( !pItemElem )
" B4 l. f9 N/ k continue; e: f# U! h$ C1 H/ u
if(pItemElem->GetExtra() > 0)0 K* A+ O& t! n( P0 L! [$ _
continue;
" A! T) }& G: d' x3 x$ V& c if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) / b! L; l* A, M) w# H, \, n
continue;. }0 j2 z: c5 |/ q$ Q
if( g_pPlayer->IsUsing( pItemElem ) )
5 w/ U7 U# i; ?1 P1 C% X- W3 Q continue;
4 l3 t- b9 p0 e+ V if( pItemElem->IsUndestructable() == TRUE )- c, f' x8 z9 {: C0 g& N
{( t b" ^' H' f4 f3 m# e( N* w% m
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
4 ^% n% ?) m. z0 ^' h7 D( [: `' m continue;& S' ^( t/ U3 n2 p$ q) u* f/ A. X& H
}
0 O" n5 M" k0 L' P g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);8 P s+ z/ ]: b0 u
}
: P `/ F1 j& M$ V break;
& o) ]% J, I9 @- X! o8 d }# Q1 k P4 X. t# ~3 Z: W
case 1:
9 j' t; [5 {2 B1 q0 `0 s {; u( G$ s- o Z5 x
//整理背包
2 X) |% W$ v" @0 u: E //////////////////////////////////////////////////////////////////////////
4 r* \ P C6 Q1 ]. @ //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
' @. l ~8 F, i& S4 w4 k3 o0 B- | //////////////////////////////////////////////////////////////////////////* X3 G8 l _4 E$ B0 K; W! Z: [
//////////////////////////////////////////////////////////////////////////% h' j& K7 E1 w$ M, i, m
CInventorySort* pInvSort = new CInventorySort;
( y% H7 o* f: J8 i _5 B9 A vector <sItem> vItem;: u$ A/ o4 ?# q4 Y5 l) a. m$ ^, U
vItem.resize(MAX_INVENTORY);//初始化大小1 \+ p$ L: T( x1 i7 k, G
//////////////////////////////////////////////////////////////////////////
9 E- i) R: W. S% c, z, p. X6 M1 q //填充数据
6 Q1 t, b( r+ |- ]# v) f4 P for (int i=0;i<MAX_INVENTORY;i++)* Y; h; K1 J/ C6 `
{
5 @9 E; i0 h7 a2 z6 s, g' r: X' ]! x CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. E" s w6 Y7 Q$ ^" {
if (!pItemElem)
% Z1 x/ L4 { y! I% T {
$ G u+ V& ?5 n$ H X vItem.dwKind2 = 0xffffffff;
7 a0 N: P" ^) ? vItem.dwItemId = 0xffffffff;: y. w: @% j- y& j# P( r$ r1 n
vItem.nIndex = i;: F! W! V/ X' M: W4 ? g
}else {! t4 C% q* k' G, ]
ItemProp* pProp = pItemElem->GetProp();: M( F( e" @* g$ T& C: a4 @( e
vItem.dwKind2 = pProp->dwItemKind2;
3 X4 r9 E1 P$ N! S9 a! M7 G# l vItem.dwItemId = pItemElem->m_dwItemId;4 {3 g2 _6 Z; u
vItem.nIndex = i;
0 ^1 V1 F. S; Z }
& ]0 F/ C& d9 ]2 c //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, A0 p3 Y1 T; @/ Y }7 j8 B) x; c9 y, n- ?6 s* f* l
//////////////////////////////////////////////////////////////////////////1 ~7 u- u# A9 C- [" O; `0 [
sort(vItem.begin(),vItem.end());//排序% z' N0 T# Z5 P6 D
//////////////////////////////////////////////////////////////////////////
) K6 E' d# I4 J* U; ^ k4 U8 G //交换
% W% W8 U" p$ H0 R1 e for (size_t i=0;i<vItem.size();i++)+ E4 T# G k8 s2 i+ S
{
7 C2 k$ ?% {+ ~; r2 y //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);: S, U! x8 N( F& V" v
pInvSort->Add(vItem.nIndex);1 ]4 A; u" z! _2 R' M: N
}
; V; F; \, X& M7 O BYTE nDestPos = 0;
" x* }: N# x) p) C' w& y for (int i=0;i<MAX_INVENTORY;i++)( E- J& Y+ |5 U/ j" |$ \/ a1 }
{; b% c9 ]2 B( \2 L$ Z( [
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);! b( a) _1 T5 t! c4 x: C
if (pItemElem)
2 R1 t% d/ ^' k% x/ \) j+ V {
% n9 J0 ^. @# Q0 k if (IsUsingItem(pItemElem))& U/ \$ S, V7 V7 }; f: u
{
8 `* E# l2 G- j! H //这个位置无法放' `5 m. Y( V& w9 d5 x
nDestPos++;
, r8 C0 U0 V, Y }
5 x# |: V. B- D$ I4 P, s3 m }
! ]- m$ M3 l- [& Q" a BYTE nSrc = pInvSort->GetItemSrc(i);
! O! h4 |) g1 p- t* `9 ? pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
9 w( k% E0 r) G* H* ? if (pItemElem)5 O( g' u2 r% Z. w& o
{
$ ?2 B8 {* Y2 t5 {5 E2 g if (IsUsingItem(pItemElem))2 m: ?" B/ o( R: H
{
+ D! ?% n" F3 F& z v //这个道具无法移动,跳过6 L* x& [4 W) k4 @, e( b
continue;
# r4 l1 K6 r* ], @% H }' Q: `' J# J( A+ F h1 {
}else{
7 B2 a& I0 A: W z- c. A7 m //空位置 不用动
; h1 A1 X0 e+ H continue;
% v/ ?$ g! j: X* z7 N( {9 q4 B }2 ^0 A! Y) Y/ ^" j- p
//////////////////////////////////////////////////////////////////////////
" b) J9 N" k2 q //开始移动
3 \ J' [) N* S* v, r# f if (nSrc == nDestPos)
% F. O( S m" u9 |# d. t3 S( F! b% L* Z {* R5 Y4 Q9 A; k2 y3 j, e
//原地不动- i8 p) Z5 {3 i* L; O. u* y4 o
nDestPos++;, g- ]1 W3 O7 a% u
continue;' l+ y8 k; i4 p8 l7 F+ x
}
. N* B# c m, y$ a% \4 A1 j pInvSort->MoveItem(i,nDestPos);
~+ x5 D" @9 F: y g_DPlay.SendMoveItem(0,nSrc,nDestPos);( Q( {+ Y4 s& X/ @& G) F
Sleep(5);, @& j- x6 K- o* w* Z7 A
//Error("移动 - %d->%d",nSrc,nDestPos);/ _, {/ v+ Q/ Y! a+ _* y
nDestPos++;6 m" t3 Q! W/ G
}$ |4 V1 d0 k1 U6 w- o5 Z. k
//取第一个元素的信息( j" B9 L; |* L5 P( b+ H
/*
% y9 U% O1 B! @! w if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)) X# O! j0 M R7 {2 _
{
4 [. Y. u6 L) w) c5 Q) M Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
2 s; j& h, A* M9 w- N: ?# x/ e g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);6 R+ U9 {0 u4 X, n0 ~
}
+ _) I1 N! X+ | ?: |" ]+ l" D */; O. K- Z/ G4 Q0 B! S: I
//////////////////////////////////////////////////////////////////////////9 G' w$ P; P% {4 G. x% @6 M
break;6 h) i, Z2 j7 }& s6 O% n; D7 F
}
: S4 ]! z( t3 u5 \: F8 e }
/ c0 V9 g$ e' d}
( N6 @6 l3 o+ ^+ L% Nm_wndMenu.SetVisible(FALSE);
) s! {' g6 o2 y
$ p/ K) p8 v: r0 S--------------------------------------------------------------------------------------------------------
5 l, c# Z% G1 }# T; T1 m" i9 ?4 d+ e# Y搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)) C! Z/ N; \) `& u
{4 d; |9 U6 S6 _1 U* `5 S
BaseMouseCursor();7 h( A/ w6 b6 x2 ~
}+ K* g2 m# d5 Y; ~6 U9 ^4 o! j
在其下添加:
5 ]9 O6 G: |- H5 d7 J ?: Hvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
( ]3 B" N! w8 \. {{. e# E, B, X* D) A$ j' l+ P
m_wndMenu.DeleteAllMenu();
2 f7 l5 i- J- U5 ym_wndMenu.CreateMenu(this);6 c C2 W4 ]# Q$ S
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");- f9 Z m1 E) \& y! A9 D+ {4 v
$ {9 [' a0 ~& g7 f7 L
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
) q( Z3 C: T& P$ A5 f{
j% Y7 F6 i6 X7 w //P以上级别才可以删除所有道具
^2 \/ a7 v: a( {. W$ g m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
# {) a N; {& G) l} Z0 d9 q9 F+ A% T' q- @( j/ o* [& |
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
3 w. M$ ] O: i; r) g bm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );# d9 P# U E$ D! P6 h1 m0 ?9 F) y
m_wndMenu.SetFocus();
% Z2 f5 C) Q6 E3 K1 q4 p$ b+ R}
9 E" L& m' |: \- \/ J/ F------------------------------------------------------------------------------------------------------------- o2 |' t- k |* W5 g+ b
*************************
* G: \) T3 f* r! {# ZWndField.h文件
- N8 H' W* w Y: ~: u/ M5 N- I5 B*************************9 B5 Y9 x7 X0 m# O- I2 o1 c
搜索:BOOL m_bReport;
9 X- S; [1 n2 _" L其后添加:! q8 f( }. \0 e! G( }' t9 n
CWndMenu m_wndMenu;( X& P& {; b) x8 J" E
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);0 l& D9 X' ~: c* ]& {
其后添加:
7 Z9 [2 t f% [" `1 d4 vvirtual void OnRButtonUp(UINT nFlags, CPoint point);
G; I5 r$ J* |, P. c" E9 X7 ?9 e0 m* @3 x5 L3 F- u" S
0 R: O4 S1 L5 z2 y! ~# z; x+ @/ \
|
|