|
|
源文件中_Interface文件夹下WndField.cpp文件4 x, _" Z/ O2 l3 c* Y c
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 S& p1 [0 X8 B8 [6 a. P. o9 s. `
: U$ C! d/ u8 O# c
struct sItem
9 }0 n' I. Q. j) K( m# M{
! f0 Z$ u+ N% pDWORD dwId;
- k! T: S) `' w9 V0 T5 GDWORD dwKind2;
: ?2 v7 r9 e- j, F3 R% qDWORD dwItemId;
( ?9 e( P4 A$ ?! W9 o, D& Q% N4 ^3 EBYTE nIndex;7 I7 [ Q1 Z, U+ Q0 n+ M6 Z
sItem(){% V1 A9 s7 K3 t% T3 j
dwId = dwKind2 = dwItemId = nIndex = 0;# W' m- }& C, P
}
* h* g6 x2 z' F; C2 V% `bool operator < (const sItem p2)
- s. J- U$ s/ T; M{% o! c1 X5 R+ ?7 k+ R% |/ R
if (dwKind2 == p2.dwKind2)2 S/ L9 H* C: m; m/ \9 n: ?3 F
{
( E4 j8 A" b! l, W8 V- k# x return dwItemId < p2.dwItemId;
, u0 b( L8 i: a$ Z+ T }else{4 w2 M. F2 w2 |* m
return dwKind2 < p2.dwKind2;
: v% q& E; g# ~- \: y6 A/ b8 b }5 V3 D9 t" [; V: k( V2 {: q& F, v6 D
}
- b( ^: e5 s9 u, |: w: i};
5 Q9 W J& {0 L/ _" Q/ Eclass CInventorySort y, o5 O4 ?4 P" ~9 @4 ]5 a
{
! {( g9 _6 n/ G! N: K; J$ N% A% O: Zpublic:
4 x2 S1 b# i, q. X: UCInventorySort()( m6 f0 I; z3 O* ~
{
6 A/ [5 u8 c1 [5 s2 @7 S1 q z m_dwPos = 0;
( ^/ R& v1 h% m. w# I* r# i}2 I" k% V1 p- G9 M7 S8 C7 A
~CInventorySort(){}
3 D8 ^" d! p* A+ v; P& Qprivate:
1 j4 L; _2 H8 ?' v: _sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息- h2 X; w- E \% W. N5 c
DWORD m_dwPos;
M; ]' v6 m0 I" S& Ipublic:
/ V# Y+ p( Y& v4 W3 Evoid Add(BYTE nIndex)
, x6 T2 q- d$ v( y/ Z6 {{
$ Q# M3 A9 Z% l7 T0 M" a& r if (m_dwPos >= MAX_INVENTORY)5 C3 i& E2 p1 @! A U
{
! M r) f9 I, K$ A8 B return;
& ~& `! N+ B2 _ }
" v" v" |* ~8 P2 U _) ?$ t- C# g m_Item[m_dwPos].nIndex = nIndex;
6 p! z2 J, Y, e' p/ r m_Item[m_dwPos].dwId = m_dwPos;3 ]' G" W& f0 |% Y9 v, O& H4 d; f2 `
m_dwPos++;8 m4 i* J n5 g7 Z% N
}
% i: c5 g# L4 ?8 i8 l' L- tBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列- `; s) w. h6 @# Q
{ N3 Y* C( i. U5 u6 e/ V7 r
for (int i=0;i<MAX_INVENTORY;i++)
/ Z, \ t; ~# U0 R; P. d0 |, s' l6 o {+ s6 w2 @ q% _, {; s4 P' a! J
if (m_Item.dwId == dwId)/ ~6 J2 R' t- M$ p7 M* S
{2 k3 P0 w' Q3 a3 P( T4 y i
return m_Item.nIndex;; W0 P! ^) @4 M9 Q
}5 d: ]. v% z5 _! U! Y E
}
, C) @ |- K# g return 255;
: u+ k9 F/ _- W& B}+ g# I1 v/ d5 ^$ X3 |' l- T
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
: @4 W/ R3 ?$ ^- H2 {( N{! d( ]5 m) }+ A. E: f
BYTE nTmp = 0;3 V+ Y' w4 j4 t! W2 Z
bool bDest = false,bSrc = false;
9 `: ~8 S4 P# {: \9 Z: L% N& k1 F for (int i=0;i<MAX_INVENTORY;i++); u* Z! o {# K n. @* a' s
{- Y1 h4 ^6 V" M9 _
if (dwSrcId == m_Item.dwId)
: I* ?; k- |1 Q {
0 d# [ J2 m E2 T //id相等 则 改变对应的dest和src. ?5 U- G( z3 v
nTmp = m_Item.nIndex;, h$ X# [. `) Q1 b
m_Item.nIndex = dest;
/ C$ h' Y7 _: [0 J7 G/ l1 h0 [ }; {) w4 J& N* E7 L9 G* y6 _
}
- Y' L- u7 }+ c, g! s //临时数据保存完毕,交换开始
, W3 z" E( v8 x' d$ t c for (int i=0;i<MAX_INVENTORY;i++)& A/ Q8 q: L7 N7 R
{/ m& Z8 K1 R- R* a1 H
if (dest == m_Item.nIndex)1 i; E4 G2 r5 p' H$ B
{
7 `/ v8 m% [8 [$ V. A7 C //id相等 则 改变对应的dest和src
m9 K8 G) I* a) } m_Item.nIndex = nTmp;
& C; s$ d2 E, W1 r* t0 s }7 L4 R0 ]0 [7 C" m0 E
}5 P0 ~/ J7 k2 q0 g2 M
}
6 R) M0 o5 C% |};% a7 p& P/ S: o- o9 v
-------------------------------------------------------------------------% r: ?: T8 ^8 U3 U
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 o) }7 j# [% s4 ], W
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);' K4 w1 ^9 b) g7 p6 R D4 J# W
紧靠其上添加:) ]( N1 q6 I# E5 W* J7 w
if( pWndBase == &m_wndMenu )
, }" o! a2 a+ k9 Y% N{$ k2 s. I: I3 R, b o
switch( nID )
9 v# R4 z5 S$ N: @- b' x2 j0 x {# x8 D# A7 H" ?* v L
case 2:
+ G4 v3 U& o3 B# S, Y" [4 Y {
- N: Y" z( m5 W# X& g/ N //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);# k* p4 ^5 b1 _6 c7 B( X5 Z
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
u/ f/ }0 x9 ^( O2 L- x {
! c0 {5 c' g f4 T: }- z. y4 b* a; \ break;, I# \. |) P% O5 l2 @' p+ b. S
}
$ O5 r2 H: d$ ^, q$ p for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
( L4 Q& u1 V& T6 ]2 }$ P% o: C {
7 B+ ]9 X( b1 d/ U$ l6 j& T2 K CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% R$ Z0 O+ K8 C( C! @4 f
if( !pItemElem )+ O% I" T9 |3 s3 q) y Q+ t9 \
continue;5 J: m9 S* ~+ x, u& D" \& [& n
if(pItemElem->GetExtra() > 0)
" R; `/ X' L6 {* j* m continue;$ s6 T u1 X0 F8 \$ x! G2 R/ l4 R
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
- ]; T) T: K! e# F/ Y* U continue;
4 A6 z% X8 C( B$ W }0 I if( g_pPlayer->IsUsing( pItemElem ) )
! R4 x. ?& p8 k* x$ l continue;3 W" g. `# w! |' _9 J/ `6 f
if( pItemElem->IsUndestructable() == TRUE )$ t5 W0 u2 ^; w3 R% _8 s% J$ n
{
* w6 s& W+ Q x1 h! f N g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
1 C: ?# y, r3 Q! N4 n0 x) p continue;3 v* v1 I) I+ }/ o5 B/ }4 I% I2 g
}5 a& D( E L; M! `4 r
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);0 e0 l( n A$ j5 I6 k
}1 s: m: F# h1 v; h
break;) }! L0 G8 n/ w
}& i$ P1 V, g6 i. k# |' @- E
case 1:
1 ]" j; [) y6 J7 P {: z }/ V+ B; O' E' [9 j3 a; @- o
//整理背包/ A$ L2 J7 b$ Y
//////////////////////////////////////////////////////////////////////////
5 C. {1 C4 j Q( C( E- X. G //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
$ A* k# L( |+ n- z //////////////////////////////////////////////////////////////////////////! R; G# G" _& p8 T, D. o
//////////////////////////////////////////////////////////////////////////5 S/ S3 N% w2 @( q) Y1 v7 k) `( }/ \" ~
CInventorySort* pInvSort = new CInventorySort;
8 w u3 m/ N- Z) ^3 b4 G. q& E vector <sItem> vItem;
2 O3 C( B, c$ M+ b vItem.resize(MAX_INVENTORY);//初始化大小
2 |& _- T8 p# Z' M, { //////////////////////////////////////////////////////////////////////////
! p& t/ W/ P: f7 n! H: V //填充数据
- ~. T S9 H+ Q( C for (int i=0;i<MAX_INVENTORY;i++)
. Q( X' J" h" m" Q2 ]5 g) O {
! Z3 \* N& ~$ w CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, m2 h f( P6 a
if (!pItemElem)$ b8 e# J v& m2 T `
{
3 p4 n& f9 F+ y+ \, ] vItem.dwKind2 = 0xffffffff;
1 X6 I( O: e) X( }2 s vItem.dwItemId = 0xffffffff;
& e3 |+ [: s3 z) y# i, }1 d$ s vItem.nIndex = i;
' _6 ^$ v1 c# t/ a) R }else {) j( |8 U& y+ V
ItemProp* pProp = pItemElem->GetProp();/ v9 N( Q6 q" w+ i
vItem.dwKind2 = pProp->dwItemKind2;) ^6 W: R! \& K/ I! Q1 o* d& h+ i
vItem.dwItemId = pItemElem->m_dwItemId;
9 X1 d: u( q6 \7 K# s6 d vItem.nIndex = i;
( g8 `, D* y; [; C } }
8 ^1 v# w: V) A$ H3 k* w //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' a- H" Y/ q2 [. b9 x
}
' J$ G; W- v) A! k) ^2 c0 _ //////////////////////////////////////////////////////////////////////////
1 x; n9 h- v. c; Y. b sort(vItem.begin(),vItem.end());//排序+ ?8 p8 h, H+ L) |: z! s
//////////////////////////////////////////////////////////////////////////
! ?$ p/ w7 q' c2 c" M; d //交换
8 \ K2 W Z* Z& C. u1 m' V. |6 C% ] for (size_t i=0;i<vItem.size();i++)
3 m1 X$ E3 O# }7 W8 T( n2 \- H# ] S7 G {( b+ ]& [7 I( o4 ]) b3 m
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) K+ ?, B$ I) u0 e- `9 B pInvSort->Add(vItem.nIndex);1 j: y9 ?- n9 v; X I* w0 ?
}
E1 J! n- b9 D" @ W BYTE nDestPos = 0;) L4 ?7 U U8 {% e( h* v- i
for (int i=0;i<MAX_INVENTORY;i++)
+ S- y- x- H% T! N {
; V1 F/ L- W" s% A CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);- j& P: U% K" Z; W4 N. W
if (pItemElem)
, Z- e- `/ z- F {
- O$ `4 ]+ H3 X if (IsUsingItem(pItemElem))- N) m% `+ l, X3 |
{
) R5 U' W6 m' |. i' B2 d //这个位置无法放
! l) n7 S+ E3 K7 T# w nDestPos++;
. l3 k1 J8 I+ _ {% a }/ }6 u' C0 p- D# E! D
}
5 y; w8 [0 W, R& A# x" Q9 n9 H8 [ BYTE nSrc = pInvSort->GetItemSrc(i);
" T6 t2 M$ m6 h# x6 \ pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);: W4 p' N/ ]$ M8 t2 W
if (pItemElem)* W* z& _; u0 w/ m" r
{" l- F' a$ H) u0 {4 B1 J
if (IsUsingItem(pItemElem))
% p) K, V+ u4 {( b9 u ^ {
; `# g. Y, V P& j //这个道具无法移动,跳过
; G7 u1 d. e" m( L' c continue;
9 p3 X* J: }. _2 w$ t; Z }
' @* l+ R. `% V2 U8 R- Y2 c }else{
' m5 I( m- V3 M2 I0 E; F! P3 B //空位置 不用动
" B8 l: ~3 H% q* U, S ` continue;6 z, {. |7 h% X$ G
}
_) Z+ U6 d& T" L" I; u& C. s //////////////////////////////////////////////////////////////////////////6 ?; H$ Y2 C8 @4 `
//开始移动
: v' p+ _' E! B if (nSrc == nDestPos)
/ h) q& _. p: t+ k3 f/ B' x# T {) C8 s' V! T' @ w5 h; t
//原地不动
% j- A2 i4 L+ I nDestPos++;
* p$ \1 L6 {# h. W+ i continue;7 q4 K7 F" @+ h, O2 `2 b! {
}0 l6 N' u& y) w, g, x/ t
pInvSort->MoveItem(i,nDestPos);
' ^7 {+ m: e4 M( \$ X g_DPlay.SendMoveItem(0,nSrc,nDestPos);
' E8 @) V7 B8 i0 ~9 Z- P, m. _+ \ Sleep(5);+ {6 l3 C& v: }; ]% B0 P
//Error("移动 - %d->%d",nSrc,nDestPos);
/ h) Q: j+ b. W. S nDestPos++;/ R7 v$ ` E v+ R; `3 \
}2 g' d" b7 c# z2 m; Q2 |1 E
//取第一个元素的信息
1 \+ I; q+ _: c2 L /*, Q( P r3 C" Y$ D" W3 d6 g! x
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
y8 A* Z6 T4 Z6 @2 ?, z {6 y3 y0 n% L3 I' w2 G4 Y
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
* A$ v/ ^$ p6 Y' T g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
( G5 |! T' c8 X* A. U }
$ B* Y2 u8 ?" P2 {. c; Z8 G */
3 I+ _. @% S" z/ O# z" A //////////////////////////////////////////////////////////////////////////. s9 P5 r+ c: G& n7 p( t5 Y8 J- R* h
break;: p' r9 H8 l$ t8 n
}
. y- C& h; e7 n, D6 d$ J4 m) a }
4 A8 ^1 E( ~4 Q1 W% l% l+ n: G}5 u a: T) F' l$ }' o
m_wndMenu.SetVisible(FALSE);
0 A$ _% r$ M* i
& Q& P, L* p' g" X--------------------------------------------------------------------------------------------------------- k2 w9 ]' v& j0 C
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
2 P/ |8 E+ {6 }# D& D% ^) w{: n1 ~! O& }5 }: T1 l& b
BaseMouseCursor();
; ?, w5 S* c3 J" k/ w9 a}3 E4 n& k: U* P' K0 Y
在其下添加:
1 N0 ^% ]. E+ @+ D2 V; K) K) ]7 rvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
1 n; X3 p: |+ ~6 t5 p$ F{
; q5 k8 }% H b" U1 u3 D6 Y" Om_wndMenu.DeleteAllMenu();4 b8 C8 b- j% g1 B8 z
m_wndMenu.CreateMenu(this);. N) S9 u8 Z; ~5 q) u. s
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");! [* B# H ]. _( n+ X! N
% m: N/ k) q& iif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; z/ V# R: c* ~+ @# x{
2 H3 X; ?% s$ B) { //P以上级别才可以删除所有道具7 @( K" L/ E2 j
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");$ y1 M$ y+ g/ x
}
* K5 [3 B2 { I; Z+ Xm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );: c! i$ B; O3 E# A r
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );) g& H8 c* p1 M! _1 o
m_wndMenu.SetFocus();% g7 R' i2 n; r5 B @. e3 _$ ?$ F
}# `% n6 G J8 M5 F8 w2 O9 x
------------------------------------------------------------------------------------------------------------( z: _' D1 P( S/ P- C
*************************
! u/ Z; E( A, _! C! K8 T5 ~5 ^WndField.h文件+ L+ w& h$ u( x' ~
*************************
( @/ j9 M9 h; [4 j: c搜索:BOOL m_bReport;9 v& b$ S2 y- w& y
其后添加:3 |: R/ e3 z4 x; n
CWndMenu m_wndMenu;
2 u0 @# P1 ~" ?7 u5 B1 E& h. q& P搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);* H8 V( U8 t% t& h. k
其后添加:
7 Z& p+ \; r# mvirtual void OnRButtonUp(UINT nFlags, CPoint point);. f) Z7 W& H3 O* ]3 S4 p. i( d( D
F1 G8 b0 A% Q# X6 ^& J
( S* l" R. N1 a5 F/ C |
|