|
源文件中_Interface文件夹下WndField.cpp文件
, k& D# W% o; _9 G0 k( s. C. ]搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; h8 T7 }! Y3 F9 Z3 g
* J# i+ n+ K! G# ^7 E7 H$ ~- a+ estruct sItem7 T$ F3 y' |+ u) F1 b; M. s
{ {' h( g7 D; F* d% }
DWORD dwId;
9 f$ h+ H2 N" u" G }DWORD dwKind2;
i# [! Q9 u! p: w4 I1 a" ADWORD dwItemId;
) d3 T: J2 `- U& W) n" | ZBYTE nIndex;6 n* ~/ `" U+ l. `' V) g K8 N8 z7 _
sItem(){
& C+ ]0 i: G- h& N dwId = dwKind2 = dwItemId = nIndex = 0;
1 A5 @, J- I O2 {}2 P6 O7 j$ h' R9 |; _
bool operator < (const sItem p2)4 I9 ~) |, y3 {6 T( @
{: o- r. _& R, |( x) g+ k, o) T
if (dwKind2 == p2.dwKind2)
: J* U& T# ?2 f. P( W. O5 D {# R7 n3 W4 F" [1 O
return dwItemId < p2.dwItemId;
7 ~! S7 p( L2 l6 H! n }else{
3 s L% u, K& @7 s- \5 U. z! z+ ^- p/ n return dwKind2 < p2.dwKind2;
- p8 O# C& Q' j, X5 m }
! l3 o1 ?, }! l9 Y$ L8 \}1 Y2 }! n9 z) P2 s& D$ e
};
2 O$ y+ ^) ~- d/ D+ @7 N' dclass CInventorySort
p6 w- z5 V8 `$ ]4 Q7 P _{
* o0 ~* J! O- A F5 w. Apublic:
6 F1 r6 `* ^, m/ r/ yCInventorySort()
8 S8 c8 V+ c( M{
% V) {! A/ V) O2 l$ S. ?- A m_dwPos = 0;
$ z) r+ g- a7 h* G}2 k, J/ V3 n1 P, |* h0 |7 |& H
~CInventorySort(){}
; V0 i3 U$ l% [! y- p# E" w- j$ R% nprivate:
3 N) E! z9 s1 HsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息( {# V9 X0 X- R. Z0 h' Z& E. {
DWORD m_dwPos;: l' O# {+ s r: G8 a
public:: I+ F( I6 W& O" H+ m4 k
void Add(BYTE nIndex)
# I2 q8 b9 e1 h{
# l B7 Z; j! s0 D/ J if (m_dwPos >= MAX_INVENTORY). A6 K* I, }+ |( }7 J
{4 Z9 e' w' P+ ]/ X. o* M1 a, b
return;7 P; M: S, m. \/ e2 v+ i+ i0 k" a
}
M N& E# F! ~) T; b' K m_Item[m_dwPos].nIndex = nIndex;4 l! R: G) f! Y! @7 V4 d
m_Item[m_dwPos].dwId = m_dwPos;% g7 y! F$ r) Z' S. B4 ]
m_dwPos++;
( q/ M( `& Q- _- J3 o}
$ J4 h# y: w& }; b+ T8 tBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
5 W/ Z0 ^5 }) r& h X# A! X{
5 _5 J6 z+ W$ h2 }) I0 F for (int i=0;i<MAX_INVENTORY;i++)
* w x# x W. q+ @ { k4 m0 w8 X0 c. w7 v
if (m_Item.dwId == dwId)
4 g6 ^% e8 ~ ?" k {
& ^& {8 h$ C9 O! L0 S0 v$ R return m_Item.nIndex;
' l0 Y! w* e+ G, h, g. y+ B2 O }! I. v d6 P5 {& U. H7 A; H
}
6 t/ ?4 e9 i; ?' E% Y# ]* k return 255;9 p& g" A \$ j y* Y/ R
}, v, u% e+ a, B1 c% h
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
2 |; h; e8 \; f( G6 M{
* i. n: G+ j& p, K! b: e BYTE nTmp = 0;
9 v' n' H T9 U" A bool bDest = false,bSrc = false; ^. J: v3 J5 {: i/ u8 q, q
for (int i=0;i<MAX_INVENTORY;i++)9 E; r# f& e; v9 N: c% \, N2 t
{( O+ W. c" `- E, w6 I) I; n3 ~& {
if (dwSrcId == m_Item.dwId)/ m" }8 j0 Y# ]/ n7 S9 C. I1 c" ~& p
{) Q( e& V# W5 S1 W) o% c3 z1 v8 A
//id相等 则 改变对应的dest和src
5 h3 B' b* F7 E" M/ _- e* T nTmp = m_Item.nIndex;% p, x; j u4 t- Q
m_Item.nIndex = dest;+ l& h: s- Z6 n5 t- h3 d. p! N
}1 q' [* A. m4 \: l
}
3 e% S4 R; C9 Z3 u //临时数据保存完毕,交换开始( I( ^9 L5 U) I) ?% W
for (int i=0;i<MAX_INVENTORY;i++)
! Q8 |( c8 y5 ^" V5 X {
5 Q4 Q. R- v1 {1 V: N0 a if (dest == m_Item.nIndex)% t9 `$ a7 G6 p$ _$ q
{
0 B& B8 [# A4 z2 k8 M# G6 p //id相等 则 改变对应的dest和src( M4 ^; l, i: A2 a, q
m_Item.nIndex = nTmp;" i) Z6 {4 x7 X6 ~
}; d! I; ?, {. `: C
}+ ` H& M( C+ V# w1 d! |2 U* ^
}& f8 w+ k( a5 x* K# h- c: G1 `1 r" K
};+ b. X# }- w; s* m% _% Y) o
-------------------------------------------------------------------------
% g6 i) T8 Y$ D9 a7 H. Q ~依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 q! c+ s8 M/ {5 Y1 s
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);! ^/ O, N" ^1 O$ \
紧靠其上添加:$ M: c5 [, a, m, Q
if( pWndBase == &m_wndMenu )
9 n0 p- z/ b3 g* z7 e u6 y{8 s6 x- e: }7 I( x8 d* G; }7 |. l
switch( nID )( I9 |: [; E; ?* @
{
/ Q9 {8 h# g. o" j8 y% i+ m) L case 2:& s4 F( Z7 n( X! Z4 F8 P- Z5 I
{$ r. @4 |. |4 v! ?
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);0 O; ]. S& Z) i- C+ `
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 h* j$ O# X+ n4 t! d; ?! q3 k {! s' u5 V( [1 l% Q6 v. W
break;
! ?) n* {. N; Y+ ~$ |' ^/ R }
7 M% k4 L7 v- C2 ]) I5 n e for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
( G0 W' r! {, b7 J4 p; s {
5 w. S# i7 J) `' f. ~. l \ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 f( z8 M8 Z) Z4 A5 H if( !pItemElem )) P6 k/ s0 W, [
continue;
: n J7 |8 L# \9 _. j* G* S if(pItemElem->GetExtra() > 0)
0 ]4 E7 J( c; k, @4 R% S" x* k+ h continue;+ x0 m( P4 g+ o# u- H. h
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 7 y& L; d: ~1 L6 G
continue;- t4 s# j6 O! E! K- T
if( g_pPlayer->IsUsing( pItemElem ) )) R- D) r: s# p% c
continue;, F0 l5 L8 i! r0 S8 ]- C
if( pItemElem->IsUndestructable() == TRUE )
( d$ G y8 N# }9 P3 E+ e {
# e" n6 B. w- O- R g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );$ D: N6 d) z$ R3 C
continue;
# P& G2 z; q4 @3 N5 S1 w: F/ G }
( K+ |$ h! G$ o w% ~' ? g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
7 E2 H# V9 c8 L M }/ r2 ?3 H: D2 a6 y3 z& E9 M
break;
! m" p) w$ ^" w v; Y }
' w" P0 b) T6 K0 u4 Y case 1:
9 Y0 R) K$ }% Q) e+ f {& b) i6 }+ y. F: ~" H
//整理背包; b Y) X' O2 X! Z
//////////////////////////////////////////////////////////////////////////
# H: @$ b! d# s5 t //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
5 z" m% Z( A0 f3 k" L9 m: T& x //////////////////////////////////////////////////////////////////////////( j( @ p1 F$ W1 d
//////////////////////////////////////////////////////////////////////////
0 c" N- E( ~( _% `7 f4 C CInventorySort* pInvSort = new CInventorySort;
, q3 v* E! R% O1 v) }. ]2 } vector <sItem> vItem;
. X y; ]# Z9 W4 O1 k- K- l vItem.resize(MAX_INVENTORY);//初始化大小5 k% c; J: g9 ~3 ]
//////////////////////////////////////////////////////////////////////////# W3 N% J2 ^# ^5 l$ c. v3 i
//填充数据
/ m) d) W: w, j) n for (int i=0;i<MAX_INVENTORY;i++)4 [- }0 c% q* t$ n( m2 w
{ X ~/ R2 m* y: H6 O# Q( y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: _* [" m9 E) _( C- u if (!pItemElem)
( V5 f5 T% U+ V+ k" r {
1 F8 z+ n/ ~9 h vItem.dwKind2 = 0xffffffff;
" T; H- A B) L E vItem.dwItemId = 0xffffffff;
( D1 N9 t1 q2 y; ^" {. [ vItem.nIndex = i;- D/ g; Y( W* A' D
}else {
* k. f1 D6 C" O0 ] ItemProp* pProp = pItemElem->GetProp();
( S H) S5 c. w" e vItem.dwKind2 = pProp->dwItemKind2;
- c( j' n" a ^0 e7 C" X8 t vItem.dwItemId = pItemElem->m_dwItemId;5 a1 F, |9 v, ]1 c4 E
vItem.nIndex = i;' b, |. v/ Z6 V# t
}7 b+ i& Q& z5 E1 C
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 t& a3 A$ ^! L" X }+ a- i i. V0 r* T/ s$ J
//////////////////////////////////////////////////////////////////////////, O' J; `( f- M) m" J. j7 C+ i
sort(vItem.begin(),vItem.end());//排序3 x; N# k& l) Q3 e( e
//////////////////////////////////////////////////////////////////////////1 M. B# G$ D( K" Y5 i1 V) ?4 o
//交换
" C! _4 P" x& V" n for (size_t i=0;i<vItem.size();i++) ]7 f4 c! Y* P& z8 K
{
4 U- B; t! |7 o //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( }' _0 x2 q5 g& f: T! x
pInvSort->Add(vItem.nIndex);+ y# m# v r% b" V( B/ l
}+ I- F5 I- D$ d9 }: t% ?
BYTE nDestPos = 0;3 t0 b( j% J4 |# K8 i& q
for (int i=0;i<MAX_INVENTORY;i++)
3 S" U& _0 ~2 q0 A- ^ a; a {1 o1 u7 I2 O* ^: `1 v! C
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
4 `5 |# R4 h5 [ if (pItemElem)
( S5 l- z0 h3 g9 V {
8 J. z' k1 m9 G' ^7 E7 M if (IsUsingItem(pItemElem))
. g6 m4 V, L% c3 x; z {
1 D! C6 h |' |9 [" i; H% c //这个位置无法放7 m: P1 D: v4 f+ Z4 h
nDestPos++;
& I' ~; G; L( H( A' l' J }
7 E5 E. q: q; f( J }7 a k+ t2 D( e
BYTE nSrc = pInvSort->GetItemSrc(i);! ?0 K( k0 \/ ~. v9 t+ M
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);+ h& Q+ k* y$ z, Z$ L2 K+ h
if (pItemElem)
) o" W3 m6 }( }1 \; n {
8 X! I4 @3 m# i! C) N if (IsUsingItem(pItemElem))1 Z7 z; f2 m2 s2 H- R
{/ J, F5 |7 c# D: I
//这个道具无法移动,跳过( ^# o+ _4 ]% S
continue;$ s% w5 @3 |- a: I/ v# b4 V$ S
}
9 O9 r* z1 g z7 r0 n4 u }else{
8 y, ]" g, ^0 t$ U0 N //空位置 不用动
+ T+ y! f7 y6 n& r8 H6 P2 ~ continue;( x) L$ z" h/ g1 |) J
}
8 W6 x: L+ X! m6 q7 @7 [$ ~0 a //////////////////////////////////////////////////////////////////////////* R7 l# R+ P; L8 E( }2 v! Y9 Q
//开始移动
5 A: h1 _7 w5 [9 C if (nSrc == nDestPos)( G6 P% F: o e$ S+ w
{
% V' ~/ X$ _9 ` a1 Y //原地不动1 }. [ H9 E; P+ s1 G" v
nDestPos++;
: R, R2 d$ `5 t5 V continue;
) y6 P' e( t1 e; N" ]9 {6 a }
8 n# h$ Y- r. B0 k. K0 x pInvSort->MoveItem(i,nDestPos);
( r& v( t0 |: u3 O1 Z. m g_DPlay.SendMoveItem(0,nSrc,nDestPos);
/ m+ i& r5 E' @2 o Sleep(5);$ b/ H/ n9 ?+ R7 M
//Error("移动 - %d->%d",nSrc,nDestPos);5 T+ b2 X+ K" `8 y. F
nDestPos++;5 c. i5 t" Z. U6 s" w$ Z& S" W( D
} M" D& Q. F: ?# X' D
//取第一个元素的信息
/ k, G" a& m7 A1 } /*+ ?% h* j" s1 I+ K- V' W
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
9 V" X! `" J7 F/ y) y- X j* H {( Q0 ?. p `5 V/ G6 L9 }
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
+ z5 u$ ]& k1 f6 q- u g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
' L) Y2 _/ x2 B$ p* Z }
9 Z* a; E" W( v */
8 [/ s& B" I3 j- b! E% p, h //////////////////////////////////////////////////////////////////////////
$ J) j4 e0 O+ a6 }. K$ f) u7 { break;
0 K, d, a+ C1 W) @9 f }3 L6 P2 x; M7 `5 N2 S
} , M% z3 @3 M5 J) }1 \
}
) T! M" x9 b* m2 X$ K1 Sm_wndMenu.SetVisible(FALSE);* B, d, L; @$ W7 M8 n
& ?8 p! [7 @8 n$ N ?--------------------------------------------------------------------------------------------------------
2 c3 @% s4 d5 |# Y( \搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
. i$ j: N7 o/ w4 Z& i' r& L$ m{! J# U# B! h5 {
BaseMouseCursor();
8 `% O& g& v9 A- j/ N7 J1 G}( B& W/ j4 x! |
在其下添加:, Z3 K3 r9 ^& a! W0 v- z
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
0 V+ m# U0 h5 o5 i" S{) H+ s/ G) r$ T. |! _1 g
m_wndMenu.DeleteAllMenu();2 D. }0 H3 X; B4 d( v/ i/ H t
m_wndMenu.CreateMenu(this);
5 q c& @8 ?* hm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
Z! E+ f: j4 s) b O: z
% G8 c- R5 {6 m7 g+ u8 ^/ Tif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ c( w3 ~+ q/ s6 r$ o
{
* N) g( R2 K$ g4 w, a0 _: k //P以上级别才可以删除所有道具
6 w T# h0 g9 i: J1 v" A) U4 e m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
: [) j' Y/ i/ x: ~( ?- R}
+ W) b, B8 I7 p) x& I5 R- _+ R2 ?1 q/ gm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );5 _1 N4 z3 ?, q v
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
* x( `0 u( Y7 S t2 lm_wndMenu.SetFocus();
2 V6 V" Q( J/ S. X; a: U1 m( A}
9 a- [3 b! g* o2 a4 p7 v; L------------------------------------------------------------------------------------------------------------0 c$ j. Y( c& x* O. p7 s
*************************
; ^% _- E+ ^0 n# a9 |( yWndField.h文件
( z% k' Z; r4 U% S( R*************************6 D- _" y) }) Y) Z, _
搜索:BOOL m_bReport;
4 t) \2 j2 d0 }0 q其后添加:( t0 t/ k# N& @& g4 }0 q3 |
CWndMenu m_wndMenu;% ^- e/ r; `' N U3 |7 c7 J, X
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);9 s! i: x9 f) s
其后添加:3 e- a s* i0 N2 v3 `+ r; V; {
virtual void OnRButtonUp(UINT nFlags, CPoint point);
& v0 b$ h( _& N3 O( j' `
4 V) T$ g" G3 F1 }0 K# Y: W$ @2 e6 j6 ~" b
|
|