|
|
源文件中_Interface文件夹下WndField.cpp文件
T8 I- C! V, J$ ~搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
5 {3 r, I4 N: _* q6 h' s" G8 J7 d4 S: ~5 m' Y8 H5 l! ] s
struct sItem
% O* m0 u9 z/ H L, {4 {{
% l& {' ~+ o4 O1 x5 XDWORD dwId;* ?( |4 ?4 S9 ]3 r% [- m
DWORD dwKind2;
# f5 E3 z. U) h6 vDWORD dwItemId;. F5 w2 ^+ ^; e; ?$ K+ F( t
BYTE nIndex;
6 T* a2 w! ^( S7 G, FsItem(){+ |/ u2 a+ l" h, O A3 ?5 z
dwId = dwKind2 = dwItemId = nIndex = 0;9 O8 P, T5 o2 S2 [; v
}5 ]' [; G. c# \! C
bool operator < (const sItem p2). @: q. ^3 o4 }( C& t. S* T
{5 v, O, ?5 C% N' l6 z( H5 @5 Z( q
if (dwKind2 == p2.dwKind2)
3 x6 v) t( L0 ] {/ z9 Q2 W T" M! ~; ^
return dwItemId < p2.dwItemId;
. H6 P# A, m( ?9 d9 i7 Z }else{
3 L6 q$ h" Z2 P return dwKind2 < p2.dwKind2;
! _# H- ]& c# R; p0 N7 Y) s- T }
2 s) S+ `0 N; e5 o/ j% ~8 X' b}& Z6 \ B( b/ B6 v
};: R7 I' a0 e$ ]' _, ?- k. [" h
class CInventorySort
- ? {; d. r8 Q8 c& t{. V# I. [7 l1 s/ C$ l$ y; o* P
public:
" B9 c3 M6 j* y6 C3 hCInventorySort()
* I- ?# o' G- J0 V2 s$ q- T& v: T# ?{
$ h" ^& P4 J. V w m_dwPos = 0;( a& T8 p# B0 G# l8 U8 I
}: y) g* d( ^% R( V+ B
~CInventorySort(){}
2 W! s: @0 t, w- R. b2 bprivate:
' f, J3 b3 V, @7 m+ @0 EsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息# N4 T( C7 e" [9 g& r8 i, R% t
DWORD m_dwPos;
) ?- @ l1 H8 v3 b8 O5 opublic:
0 i& M* N1 u# Uvoid Add(BYTE nIndex)) e1 S3 y4 i n5 \3 Y
{8 _0 @, D: q7 q7 T9 u6 Z
if (m_dwPos >= MAX_INVENTORY)
6 m6 `% Z W$ ~5 J' b: ~+ K {. m5 ]) \, C% U
return;: e* L+ @+ w5 f5 S/ b* o8 _0 ?: ?
}
: M S1 j @% H6 \' e# {; ]/ b m_Item[m_dwPos].nIndex = nIndex;
6 E& Z3 m6 {" _7 K5 W$ I m_Item[m_dwPos].dwId = m_dwPos;
0 M# h9 N7 C2 O; Y$ t m_dwPos++;
* r- y4 y8 I& X, A$ C5 X}% g3 U' b D& D. B* E
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列# f. Q0 c3 `) ~
{3 u0 U( L& U1 D+ P G
for (int i=0;i<MAX_INVENTORY;i++): D/ I. U2 W$ E! w8 {0 m' {& U2 s
{) L3 [. F* k0 q; a8 A
if (m_Item.dwId == dwId)& W# U$ U8 V) ^" k q
{( T% m# G# n) J# W' H; R) I
return m_Item.nIndex;
: ^) d' i' H& f% K9 N }1 I. P- Z! j$ w7 _
}
5 n. {; o+ ?; W [: C return 255;& \1 J% e# E4 Z! m/ Y/ O4 I
}' g7 q: Z+ t) [5 }% d9 w1 F
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置$ z/ k+ W: s5 f" W7 T
{
; I7 j7 j! W& |& t1 e BYTE nTmp = 0;
( ~9 d* p$ H4 w6 Z0 U bool bDest = false,bSrc = false;3 P; Z; |. _$ p# N H0 _
for (int i=0;i<MAX_INVENTORY;i++)" G( S$ @6 k* ^# ? q5 k. o
{
% f m) K% b" h' ~ E# e6 l- [ if (dwSrcId == m_Item.dwId)- {9 o1 Z: ~. t8 b
{
5 Q+ D! x' o9 R7 z: l //id相等 则 改变对应的dest和src Z/ [! R( N+ E7 u; n' [
nTmp = m_Item.nIndex;3 F" W7 I& A% L9 e0 {2 }
m_Item.nIndex = dest;/ n; v B. K ^! j2 O- D$ ]7 `) q
}! \* Q4 B v" L( J
}
* {; y* |% W( I/ E* Z" h //临时数据保存完毕,交换开始6 w. Q# @$ J3 `: E1 u
for (int i=0;i<MAX_INVENTORY;i++); ]% W7 q. Z5 `9 S" t" _: G" r8 a0 r
{
% l1 y/ D- f; j if (dest == m_Item.nIndex)
* L$ A! t" x, \* Q: R {/ ^9 D* n$ v6 ]
//id相等 则 改变对应的dest和src
! H; d; x; w! d, t7 P3 i m_Item.nIndex = nTmp;" `5 _5 p/ x& h W
}
5 p) _( f. D4 `( Z& B# G1 { }2 V- q* j$ v0 f7 K( i) J
}
! G! |7 b. W( w; {, J' V};: b2 p! c3 p& c8 U% w$ s. W
-------------------------------------------------------------------------8 ?$ U$ f2 L5 v/ ~; n: @! |1 B
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 G. H: [3 V9 o) a7 V9 ^搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
. L2 A0 {) A! ^; w紧靠其上添加:
" u3 b& w5 T& X4 A: Tif( pWndBase == &m_wndMenu )
2 F# d8 Q: A) c" l4 q{( o- ~* t! ^( Z
switch( nID )% G. Q! p& E3 S: W
{# [- _; D+ e: T! g/ _' |
case 2:, p, Y8 T+ P6 b1 ~: u
{
2 o" u2 t8 F4 i. X$ g0 F5 g* q2 s //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
+ u2 Z! C2 X& r) {+ D if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))" m' M4 }/ T# p$ }% v0 t
{
# O) L' e) {+ O" J break;4 v/ T. l# m# {+ S* T& p
}* E9 g1 F( {7 d: R' ?& C
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)& X; B8 F. ^' l6 ~7 ~3 ?
{' t/ V* U$ \9 m/ s" u5 l
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
/ s. l: @2 ^- n+ {& x- x if( !pItemElem ), A7 f0 l$ i( k
continue;, \) ]/ ], G# Q! z7 m
if(pItemElem->GetExtra() > 0)
" S% L2 ~( z8 ~ H1 c continue;
3 w/ E" O$ Z+ S L if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
' E6 y0 f/ U2 a; y! c9 F! B7 k0 E continue;% y0 y9 K. M4 X1 k
if( g_pPlayer->IsUsing( pItemElem ) )
; S3 q7 t9 R; f* o/ Q7 l6 f continue;
* n; i8 y( `8 o. H! m9 b1 n$ Q if( pItemElem->IsUndestructable() == TRUE )
9 M% i8 t9 N5 O& E, p% u5 U {/ w Z5 L# @/ R. V3 G
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
) l7 t; }, Z9 ]* B continue;: ~4 g# n5 S% }7 ]0 N L0 c
}7 X6 \! p1 t7 Q$ W# j: g% t
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);4 K% D' O8 X3 Z& p" Q# u" ]2 M: j
}
% l/ a; R9 f& p7 K5 r0 W: w6 H5 z# Y break;
7 A% o6 e; S2 o) F$ `2 L }
; ^1 X% a e% \, U; U case 1:
, w+ g7 a% u* V. }6 @1 w, c" V {& D. r0 ^% {: M2 H) R" k
//整理背包- p6 o' h9 t5 T+ m% i
//////////////////////////////////////////////////////////////////////////
3 }$ @5 _' l, C4 m, X% h //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
1 P* m4 p/ @3 [, d- ?( c //////////////////////////////////////////////////////////////////////////
# C2 i6 e8 t1 x2 Q$ m& K //////////////////////////////////////////////////////////////////////////( V0 u$ U, z) n; W& F
CInventorySort* pInvSort = new CInventorySort;8 J( `, c4 ]# o; q% [2 d
vector <sItem> vItem;( v0 {$ H6 ?0 }5 b( L! ]
vItem.resize(MAX_INVENTORY);//初始化大小3 t+ I& S" D0 {* U8 T
//////////////////////////////////////////////////////////////////////////0 R/ {0 \; `( J+ D" R5 w5 V" G
//填充数据- E$ t- \6 }- N
for (int i=0;i<MAX_INVENTORY;i++)
$ Z6 R: k3 L6 C) a* I {
! z, {* l" }, s) j5 J/ A) ?; ` CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i); w9 E; ^# C6 Y- f
if (!pItemElem)
. O) W4 _' a5 d2 A+ M {
- H" [+ D S' G M7 G vItem.dwKind2 = 0xffffffff;: C( R8 Q; l9 ~( a- J
vItem.dwItemId = 0xffffffff;3 }9 g8 M9 v2 \* {
vItem.nIndex = i;
& P! i- Q( X: P- v& f8 ? }else {
C: h9 ?5 J8 }+ f ItemProp* pProp = pItemElem->GetProp();/ Y5 i/ w3 [; i6 u0 r
vItem.dwKind2 = pProp->dwItemKind2;
; M! }8 {8 I( J8 P vItem.dwItemId = pItemElem->m_dwItemId;
% G1 O# U1 l! g# W' z' T# u1 ^ vItem.nIndex = i;" p8 C8 j i0 A$ H& T! v* m
}" u* U) b' v% H1 F8 f- O
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
( O0 D6 l0 c& ?2 Q- r' d }
$ `* E! l$ f9 G //////////////////////////////////////////////////////////////////////////* V& R& q" x8 n5 G6 N' g
sort(vItem.begin(),vItem.end());//排序
. h- V! K7 \' g9 n //////////////////////////////////////////////////////////////////////////
' w+ b3 t" K) ]" m% ^ T+ R //交换 K( m+ M$ A$ B) Z% `
for (size_t i=0;i<vItem.size();i++)1 H3 w0 I: J; |; L
{
" P8 k) }& A$ |, s6 ^# @ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, u9 C$ L0 l. ^% G5 o7 M' l6 P
pInvSort->Add(vItem.nIndex);
) H) p( W, G0 g' T7 f7 N! t }
5 k O- u, \( a BYTE nDestPos = 0;/ [! J2 Z; k5 V7 a% P
for (int i=0;i<MAX_INVENTORY;i++)
- B" e5 s+ ~2 |" R {5 W; i: d) E: G6 e6 }9 f& M5 Y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);4 G+ s, f8 ? b+ I; p
if (pItemElem)" ?6 j) G% g G
{! [: Z+ ^( U, q& F( {0 P
if (IsUsingItem(pItemElem))
/ S3 A1 H! x1 z& N0 H5 `. q {
4 p2 O) \% r. n2 |6 e7 e //这个位置无法放, r3 _: |9 V, U+ @$ U4 N$ O' F- w) C. g
nDestPos++;
; R& y, { ~& V }
$ v7 R2 b6 `8 q; k }
3 u l# l( Z8 y1 F9 z) a2 i5 q BYTE nSrc = pInvSort->GetItemSrc(i);
! W0 R# C6 A0 X pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);) W) _+ ]" P$ C& } l; ~0 a
if (pItemElem): P" q: P# W- t* _1 S
{0 l& O, j9 k8 }* B* [
if (IsUsingItem(pItemElem))
, b/ a0 j" e7 s {( O7 b; u; e T; j
//这个道具无法移动,跳过6 y E1 H( ?; _# F; a4 L
continue;
! w7 q: e k! E5 g9 N }
% b/ i# t" ]/ s: ^ }else{5 I' Z4 d7 c o/ k; a u6 a$ J
//空位置 不用动0 P9 c5 R- v* D9 a" s6 i/ N# `, w
continue;
8 u/ W& c# h6 C6 q) x4 S( |2 [ }7 A9 x/ }7 Z7 {; h! G- P! A" z
//////////////////////////////////////////////////////////////////////////
2 }' }% @' d8 K0 W6 }5 o! Y //开始移动
# D2 s1 C# Q# [ if (nSrc == nDestPos)
- i( G$ a8 M1 S* |& w1 i& o {- p d/ s; T% [1 J, G1 w. ]
//原地不动+ F; U. c1 W" A h
nDestPos++;
- r6 f4 M& Z. G: u) E9 h4 H continue;' g8 f; g& Y" J5 T- L+ y5 [" t
}
* @, Q. ^. W- f. Y9 C% ` pInvSort->MoveItem(i,nDestPos);
: s% x( @; O) i+ q- g g_DPlay.SendMoveItem(0,nSrc,nDestPos);* Y" v, [" p7 ?( {2 s
Sleep(5);2 X3 V0 e' j0 s, @- [
//Error("移动 - %d->%d",nSrc,nDestPos);5 M3 o# G& ]) _% G
nDestPos++;( r6 c; t9 s" _! w* ^
}! B- ^$ J0 {1 F# f9 l% o* X$ u
//取第一个元素的信息# M: ?0 N$ ]3 T S4 @' w
/*
$ v# z7 B' ~' {; Y* D5 Q3 W! ~ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff), t& s6 d' S2 p$ e7 o* G
{: m2 r! a, i- N2 \; t) e) H
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
. {( U( ]: T. c$ i% h- X: j; s g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);) T5 G/ \0 V0 s S
}% u3 l6 c' P; c( \' J# q& C
*/$ Q, Q( q, g: q& \& K
//////////////////////////////////////////////////////////////////////////1 v8 q1 _$ R4 Z9 `- |, u) Q
break;
! h9 U6 J& r, U2 R- u }
6 a% g9 j7 F8 Q } ! U& J; ^* F, d# }! Y/ W
}
4 Q$ R. [" A% l/ am_wndMenu.SetVisible(FALSE);& a5 D/ v: J* D; z' o+ R ]' j8 F) |2 e
* i# s6 ?/ g$ I* S/ u9 v0 H5 P
--------------------------------------------------------------------------------------------------------
& O4 k0 }" P" ?$ }搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)" W6 V0 F. a/ [ c" N
{; j" W, k! |; }" b' Z5 I1 ?6 D
BaseMouseCursor(); D& F9 G0 ~4 n; [& w2 r
}( K# @; A( ^/ m0 V- K# S( Q- ]9 O5 |
在其下添加:. O- g6 m* E: _
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)4 ]7 b7 |; \/ m/ h, S
{
" q, @# M' W- c4 X5 r: Rm_wndMenu.DeleteAllMenu();
* Q( @) c5 w% s( a) G$ Lm_wndMenu.CreateMenu(this);# s% L' `! K: x4 r) P" p! O: Y
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
8 v5 p/ p3 {9 f- [2 a1 H1 T% }: S/ X& i; v5 Z# w
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
( N/ [" I% v4 K! q* |6 q; F2 o{
- m9 t6 i# {& P( g3 `+ q* J //P以上级别才可以删除所有道具
# a6 O5 s! j$ o) @* L8 i& o8 T; u m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
! x: u, ^; ?( T- ?' J2 h! U6 `4 [8 @}
3 {* d: S& `! u9 T- cm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );! C9 v3 @2 \& Y) B, h
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );! {' r; U- N6 D/ i% G
m_wndMenu.SetFocus();
7 H, P9 N7 G+ t* M; W1 k& M9 f}. ^) g+ h$ j, S8 L; y& l4 n
------------------------------------------------------------------------------------------------------------$ X+ e7 z' V) d. O4 C( K# Y
*************************: f/ l- a4 I# L
WndField.h文件: N+ _3 z) g8 E
*************************
' f7 L4 t/ Q' I* D' E6 \7 { c搜索:BOOL m_bReport;5 u' N4 N/ b% e, V( O6 W
其后添加:
}: S r# y VCWndMenu m_wndMenu;" O R5 T5 B( b
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
& X; g; {9 l7 r% E% X其后添加:
+ e% o: y1 E3 [+ K% w% Zvirtual void OnRButtonUp(UINT nFlags, CPoint point);
0 |3 F8 l: |: S$ w* o, u7 @
8 g9 K7 [$ B5 Z8 t+ Q& l i2 K: y" N: i* I9 R4 K
|
|