|
|
源文件中_Interface文件夹下WndField.cpp文件
! q) F2 |+ s8 f搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )5 K( z4 j- ^$ V) r, o N2 F
. t f* p6 ?8 P' `3 L
struct sItem3 e# E, B( w0 i4 ~! |3 L# [* S
{
% O' D* C1 }/ z. C n3 ~6 A# M0 FDWORD dwId;0 q# b, x) z& \: k }! [( W
DWORD dwKind2;* `9 R8 r- z) C' n; B1 K
DWORD dwItemId;2 b# p" }, i# e8 r& ~5 t
BYTE nIndex;
$ X! t7 D: |) v0 y: H+ M* ~. PsItem(){
7 r; L7 m% m2 I0 ~ h& }" ?! f dwId = dwKind2 = dwItemId = nIndex = 0;) ^# x0 I- ?/ k5 m! ?% T$ }2 ]& }
}$ m5 g9 O' G: A0 m
bool operator < (const sItem p2)
% m4 J2 R% m( @" c: Z+ b{1 t! O) r" ]# M1 K! ?* J* X
if (dwKind2 == p2.dwKind2)
3 Q: E0 P3 p# p5 b8 L8 b/ d+ h/ s5 m {7 ?4 Z0 \9 J( g6 o& G6 Z9 [
return dwItemId < p2.dwItemId;' Y4 R4 ?7 Q G7 Z7 e) U
}else{4 Q6 N+ X @0 B
return dwKind2 < p2.dwKind2;
+ i+ G4 ?7 X: `: K3 _! u }
$ j, ?$ M3 v a! c}5 @3 c! Y4 |+ L. c
};" l: G8 V1 [ V& K
class CInventorySort d- d6 m; h, m; A6 k
{
' I3 z6 \! J0 R5 K( Upublic:
8 @4 p0 ~7 r3 N3 a; T; m7 @/ nCInventorySort()
( F! F/ I( c; n3 w! N: z{
7 Q0 `) Q, C# Z- L m_dwPos = 0;$ ?/ @) ^ C7 x6 b" Z8 d
}
7 a( e/ l( w1 m+ A& H8 K~CInventorySort(){}$ C3 o$ u; _/ k+ O, N7 j' n/ W
private:. m* @$ U4 q$ v" k9 @% u
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息1 w: k$ y) S* n& Y8 {
DWORD m_dwPos;6 |9 l8 y- q! E8 _1 B0 Y5 d6 \. z
public:- D! c2 r0 P ~( m; A+ a
void Add(BYTE nIndex)
) H! y# W( \0 Z; Q/ _$ D$ X{' d) L5 ?4 I% K$ O1 |4 u
if (m_dwPos >= MAX_INVENTORY), g& g9 }0 M$ l2 l3 D6 T1 e
{
# e) u; T; U7 Z# L2 _ return;& U8 l4 v7 k, ?7 ]# q2 w/ P
}6 t4 g0 U0 O7 F% E
m_Item[m_dwPos].nIndex = nIndex;
P) _8 o6 C# l0 Q2 U* K# ? m_Item[m_dwPos].dwId = m_dwPos;
% ?9 I& b0 E, I* h" `; ` m_dwPos++;
Y# q4 h7 z+ C}; e3 t6 ]# F# r* l' Y+ c/ s
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
, \, P& N1 _+ F$ y* O% z( P5 n{5 f8 ^, H! v. w1 j! I3 I0 r
for (int i=0;i<MAX_INVENTORY;i++)
6 a1 s3 |4 E: @- U {
) f# B) A* l# g1 p1 H9 C3 @ if (m_Item.dwId == dwId)
& R. l: X" v6 k {( u; _- g8 M3 X; U7 L- ^; @1 m
return m_Item.nIndex;; @: h+ O+ r+ c
}$ h7 k0 j' B' v) G
}
" }$ K% p$ M% `# K$ t return 255;1 B# P% E& ?# x* N% {
}
( D- @! ~ M4 s# vvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
; |8 t4 X$ a5 E" J- |$ T4 p* _: i{
: t* N0 C! M- C BYTE nTmp = 0;7 l7 W5 ?+ E8 O; z8 ~! O! ?. ?
bool bDest = false,bSrc = false;3 [+ O' [# U) W0 b- i. V9 [2 w
for (int i=0;i<MAX_INVENTORY;i++)
, Y! \5 c# o+ c1 c' i/ i {
9 b3 Y! c+ J" q+ Q1 w7 v& v if (dwSrcId == m_Item.dwId)$ P+ x& i$ |. o6 B) M V/ R
{; a/ [+ ~1 M- a" x: K3 @% s
//id相等 则 改变对应的dest和src' U9 `% o( }7 a! l
nTmp = m_Item.nIndex;8 ?6 ?, P3 @# M# l) p! F% m3 k
m_Item.nIndex = dest;" g% y* }+ S6 [; I* j$ L
}% Q" c+ k( p* T2 g: E' }* _: N
} K- f" h3 l- [; P
//临时数据保存完毕,交换开始
/ E0 d' h/ [7 r I" M. \9 R for (int i=0;i<MAX_INVENTORY;i++)7 L$ z, E' G' L$ [7 F
{4 ~6 a k+ I8 p6 g8 D- x
if (dest == m_Item.nIndex)
% r4 n9 g4 z& P" o/ X {
! g$ @ A/ _% p6 e# ^; l //id相等 则 改变对应的dest和src
( Q e: H; `* t% U0 x: q; a" Y7 [ m_Item.nIndex = nTmp;* {% V6 ]8 L/ _9 c
}
0 R7 ]2 S# m% n; p, M: o1 k' I }8 x8 r' E; I" f, M7 {. n
}
1 U5 }, S& d( w7 A0 [4 g};9 o' F! b% Z7 A7 T: C
-------------------------------------------------------------------------) L4 W. ?0 M) z G" X% V
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 h: z5 {/ y; I2 v$ I) ?2 Q
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);: X. d7 q0 l- a+ R
紧靠其上添加:- n+ Z+ V- i% N8 g5 P+ a; b* y
if( pWndBase == &m_wndMenu )
7 J9 I% P6 f( X" x; \: s. i{
$ z$ a5 L* {) J! b switch( nID )
: L5 g' P! L: N {
" B: s& I# v2 A' h9 W; ~% L case 2:
/ c; G B. K5 H5 C$ D) T) W {
3 i x4 S+ m( C# l, Q //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);% E" T6 f" a1 y2 s/ {3 d u
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), S5 L. l- `2 R+ w+ |; C0 w
{0 C* S/ O) j# w- j+ `! m( N
break;
5 w+ k Z7 C! P2 B' F) s* [ }. e. y) T% G1 \# X; F
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++). c/ M2 d" X9 n# P- m: a* s
{, l S3 z. C) S R2 R7 ^3 _% h
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" w+ v! I2 c7 T' P: k9 X if( !pItemElem )
- i4 d6 W2 W7 o* o" q, E4 y3 Z continue;7 d9 e' r7 P8 h; R
if(pItemElem->GetExtra() > 0)% k: I% T7 w/ c2 z# g) Q5 V
continue;
, e. \( ?: ^6 f5 P4 {# [: B* S+ B, @ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
7 ^; h3 Z1 o. S! v# G. s$ y; A continue;
9 w, g* H' [4 n8 ~* [6 s if( g_pPlayer->IsUsing( pItemElem ) )
1 e) Q6 N }9 ?5 u, O! E continue;6 F$ L3 v. V6 K$ T
if( pItemElem->IsUndestructable() == TRUE )
5 O# Y' I: E1 J8 M {- \/ q" |+ M) X8 @/ o
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );% t* Z$ N! K) [( s3 a
continue;
4 q- h# i0 i/ R }
4 j+ R+ @9 u z8 N5 L; Z g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
% K, T+ {/ g6 b: |# i }8 t' U( o3 A# r& l+ ]
break;
( K1 H" ^. x; q; V }# v/ Q8 U- L4 X7 h1 S+ `# T2 J" z
case 1:3 L- H1 Q+ U6 t8 C$ ?: g" w" ^
{5 v2 l0 R/ Y: {2 C
//整理背包
$ d2 M# G6 m8 w1 r) y( Q& N //////////////////////////////////////////////////////////////////////////5 f1 w+ X9 ~" q, k8 D# K1 ?; g
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
1 Z c. g2 g0 n" v //////////////////////////////////////////////////////////////////////////
: A, c0 p# {) R6 M, m* A5 T( | //////////////////////////////////////////////////////////////////////////$ x9 c( @9 I, G9 Z0 n. r1 a0 f
CInventorySort* pInvSort = new CInventorySort;
; s& h2 Z1 t/ k* U* Q3 \6 | vector <sItem> vItem;$ h$ @1 j7 A2 C+ J( ?/ _
vItem.resize(MAX_INVENTORY);//初始化大小
1 R9 w( B) Y$ L/ y4 n3 G //////////////////////////////////////////////////////////////////////////* S2 t7 ~, w0 {9 i) w
//填充数据( z# d$ c2 _8 e, W( c% R! c$ N
for (int i=0;i<MAX_INVENTORY;i++)) {. L* A: b6 E6 [! @+ J, E
{, r. S1 U% k3 J
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
u0 d% w+ k: F- ? if (!pItemElem)" _/ }; o! X8 y6 X& Z# R8 i' s
{
. o0 b5 U, a# V2 ?1 A3 F vItem.dwKind2 = 0xffffffff;2 N+ B4 |/ ~ `5 j; d7 s) q+ e& H
vItem.dwItemId = 0xffffffff;4 ? T6 q( `8 i$ p4 n
vItem.nIndex = i;3 g6 g5 x. l8 y$ F' E6 {/ A9 ?
}else {
- j, N/ T. j( ?5 Q3 ^' j ItemProp* pProp = pItemElem->GetProp();$ V; Z* m* B3 t
vItem.dwKind2 = pProp->dwItemKind2;2 L; f0 S1 L; ]! [ Y' ?$ C* ]
vItem.dwItemId = pItemElem->m_dwItemId;
5 ^5 F; @+ Z9 \4 [0 e1 U' [- V vItem.nIndex = i;/ f% E0 M; ?6 [
}: [/ ^5 a% p: \8 ^8 Y# @
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 i; X7 u) M2 i6 N; X }
- I( R( E9 T0 l7 g! z/ G //////////////////////////////////////////////////////////////////////////
0 A0 \1 ]# Y" q# ~5 J sort(vItem.begin(),vItem.end());//排序: j; K7 U8 i! V9 \5 U1 _) Z
//////////////////////////////////////////////////////////////////////////
/ f, f$ s- H' W. t //交换, u& S( k% h' Z1 x9 q- e( ^
for (size_t i=0;i<vItem.size();i++)* \: _$ P$ ]' E8 R; `/ j. X& x
{
8 t0 E/ U0 o0 ^. I3 F' A9 v7 j //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);! H9 d! h* b8 v2 d9 R4 T a8 _
pInvSort->Add(vItem.nIndex);5 p" U, h" E; E3 d3 }% l: Y
}
2 e! h% [* Y$ j9 x$ e BYTE nDestPos = 0;
+ F4 t9 `, z# [4 d5 K ]- Q for (int i=0;i<MAX_INVENTORY;i++)" t0 \0 L0 p. H H
{0 Q x+ I: O& }* @8 l
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);8 c, P/ b u/ x, H* g4 H
if (pItemElem). `1 B6 F. T8 L( H5 m4 O
{2 D' }, T/ u2 C$ P- s& f
if (IsUsingItem(pItemElem))
6 e5 }) D! E: ^9 s2 Q/ \) c {
7 m0 U x# n+ s* } //这个位置无法放 C% B- @" H1 ^8 o) R
nDestPos++;
$ J8 s3 @, @! r8 Q! D5 d; u' E }! p0 n0 x+ i2 q$ {
}0 q$ N, g1 }8 s0 ?3 |% X
BYTE nSrc = pInvSort->GetItemSrc(i);- c* E9 ^/ V0 P; |" d
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);, r t" ?, T2 f5 B
if (pItemElem)/ Z C' o! R' \( e: o
{; M. `2 ]8 r1 T- O8 k3 H
if (IsUsingItem(pItemElem))3 k+ A2 s$ s' T3 d; F |
{
. e$ v0 X0 i% k: Z5 f //这个道具无法移动,跳过
0 i3 P) r' O% n5 @ continue;/ J2 e7 _+ x3 @5 D) D7 x0 P9 S" S
}
4 U& T! ]3 X" m4 z6 \2 a }else{6 A0 y: A% K- c# ^+ Y. o
//空位置 不用动
* }* I. N; M4 u z" ]0 d. b continue;
2 g# h5 l; K8 R- i5 D/ Z& V }" k3 v, y# D) `
//////////////////////////////////////////////////////////////////////////' H; R6 Z9 I2 p% ^ _3 Y1 ^" K3 K
//开始移动& j, H B; g5 _& s: Q* H3 {
if (nSrc == nDestPos)! c8 N3 ^9 Y; l/ M7 o9 m
{
, e/ c5 c) H2 O, p2 ?# | //原地不动) _( x3 ~0 L( Z2 ^
nDestPos++;; Q0 H0 \+ a2 g5 t
continue;
+ |- b# L v, F$ W+ L: G( Z2 G1 W9 r }% Q3 y z6 e6 z' Y, K
pInvSort->MoveItem(i,nDestPos);/ i ]/ R- r$ v, c$ z& v% A
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
M% R) Y1 e9 d! d5 ?; f' r Sleep(5);
8 }+ C5 X* {" G( |. G* B: l I& e //Error("移动 - %d->%d",nSrc,nDestPos);
# Y3 I$ ^) A# t2 y4 J/ I7 Z nDestPos++;% u" S; p9 N& ~, `' t) L
}; ^0 d1 C @( ^; h/ l0 g0 G0 y
//取第一个元素的信息
2 h% A6 V+ z6 a+ ? /*
; R. N$ h3 p9 c; \9 m if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
) N& h0 `7 P/ P9 ?, r$ { {; Q0 U# A& W# w) Q
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);7 Z* N% ^ m& m. |
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);4 G$ A4 S8 {! [6 z3 D# _
}
6 v6 v% d, y/ x+ \9 i */3 @% C* o2 y( l, A+ N
/////////////////////////////////////////////////////////////////////////// V& J8 @* x% H+ ^2 v
break;
' C! U% @' v7 O9 [( L* J }
% Q$ }, [! i# I: M7 ` } ' g. Y, H) s {4 `- s/ A7 H
}9 I1 E: K" |* K0 U! }3 P3 P' q! j
m_wndMenu.SetVisible(FALSE);
0 @6 b* H- h2 b1 h1 h# x( x9 p( w" Z& w; Q' W$ X! G E
--------------------------------------------------------------------------------------------------------
! L* [4 u; f+ u搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)# D2 P# E* I8 r/ G7 v# k
{
# w3 \3 X& b' C$ h0 s+ {+ y+ Q9 BBaseMouseCursor();6 S* d$ J6 R; q( |1 s
}- t: s; P+ ]. {9 f# l
在其下添加:
' L7 x( C$ L% _/ Evoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)4 j) o; X- \( r
{
! S! _! A% L* ]) im_wndMenu.DeleteAllMenu();; L% N- a. x2 U9 }3 {
m_wndMenu.CreateMenu(this);, I) f' L+ }! v0 W! f4 e3 ~' I
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");1 r% j: I7 s! \9 g4 Q8 r
% O; S0 T7 l) \3 b
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 \: u- W: P+ U! }. U6 e
{
6 E" _1 \; H p- z //P以上级别才可以删除所有道具
( `0 k, i3 a4 ]* p5 f4 [ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
1 [# [7 R% X2 e; ~}
/ _% g I% C- Y% Xm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );* W/ l3 }. t3 |
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
8 ^' t" {( D- _8 ] `m_wndMenu.SetFocus();
( D8 L2 i8 N8 K5 |7 u6 m- e9 U}; G5 v& A! ?. J. j: w/ J
------------------------------------------------------------------------------------------------------------; ~& I! R( e5 L% k& M a2 t. \( ~
*************************
2 ~# @+ Z& T8 R: M' IWndField.h文件
$ P( C0 F4 r5 Z7 m$ a L8 v: D6 s************************** Q; S# S- i7 v1 A
搜索:BOOL m_bReport;
9 Y# V9 K! A/ Z其后添加:
/ I. S" Z2 O# B+ u% UCWndMenu m_wndMenu;
7 d7 J1 E, H& k0 G0 N0 O% T搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
+ x5 k: Y2 W5 e+ l F其后添加:
* d1 {# ]( y) _6 q* D; f/ V: T# |virtual void OnRButtonUp(UINT nFlags, CPoint point);
, i# z6 W0 g% z# T& I \) S; q1 H
/ \/ x1 |* }2 n3 S1 X3 F8 Q: C; G& D# W1 w
|
|