|
|
源文件中_Interface文件夹下WndField.cpp文件
, s0 Z% V; o4 N, v: i搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )9 [+ j4 ? {5 s2 o
/ @# Q9 d5 t p6 |5 W% M
struct sItem
+ e$ M1 K# Q. r4 _{
: R7 Z: e7 u1 E, t9 FDWORD dwId;5 X" E" k" N, W' w' Y6 S7 @- a2 K( Z2 V
DWORD dwKind2;2 F; j) f- R: R7 W" r% \; \3 o! ?
DWORD dwItemId;
- M! k! ^" F, I; T1 ?$ WBYTE nIndex; n$ l! U& o$ x6 w( ~- _
sItem(){
& D0 m" w( b* {2 n, _ dwId = dwKind2 = dwItemId = nIndex = 0;
0 o2 n0 M+ p% s; E8 w}
0 F/ Y3 ~+ ?% w% k. rbool operator < (const sItem p2)
6 s! j- j" y7 q{
( d9 t: g5 P7 M C& w0 p8 X if (dwKind2 == p2.dwKind2)
' N1 T6 I! W$ M {
" i( `: q [' U* A0 e- h D return dwItemId < p2.dwItemId;* k0 w. H4 U" b& Q# T( L6 m' R$ Y
}else{7 U3 B- g" M! w8 v0 c; n8 F
return dwKind2 < p2.dwKind2;
* T. v) g" H. @ }
, L" t2 K/ J# M4 E/ U9 W2 n! Y2 O} \/ F# j( B3 Y3 }: S; `0 T
};- m7 ?, m! q# N
class CInventorySort$ A }/ R: j5 `( e: E, I) d8 Z
{
( S$ k5 H. F* F+ ?. T: B( Opublic:
( T# F: m3 Z3 [: Y9 b1 B+ JCInventorySort()
4 K* W0 k# R# X$ n9 ^{
! _- I6 |" ~; S1 I/ f' Y% s5 m+ _ m_dwPos = 0;6 I1 Q! m4 s% F: v/ t
}' Z7 V' U' q8 J$ W) P
~CInventorySort(){}& o% o- t6 d$ E7 S+ f/ J
private:3 M$ j; r5 Z K7 d
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息: [$ n4 g& ~3 R1 Q2 a
DWORD m_dwPos;
# n1 s# B C, L' d- b7 I# Epublic:
' Y3 u# H3 E9 U. Pvoid Add(BYTE nIndex)- \/ R, \% Y& G) ?+ v
{& k1 A5 |& ?* x* }
if (m_dwPos >= MAX_INVENTORY)
! Z Y2 W2 Q( f! y' [( W( i/ l {5 m- ~( m3 L! N7 z# \
return;
+ W# `+ V. C5 j, @: E. i0 _ }
B# f: p) I$ f# _5 J9 \ m_Item[m_dwPos].nIndex = nIndex;5 G% S! y g$ k/ O8 c) {% o) B
m_Item[m_dwPos].dwId = m_dwPos;4 _5 y* u& Y( J5 `6 \
m_dwPos++;. m7 h1 {+ G) o- }. ~
}# f4 ~9 E9 W1 L& e6 K: O3 W$ z
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列9 {1 ^& y" s) G( g/ y1 d
{2 ?# A3 X3 _+ x! ]
for (int i=0;i<MAX_INVENTORY;i++)
$ z4 B# f6 T" g {
, Q" C q+ U6 k: x6 S$ y2 J+ E if (m_Item.dwId == dwId)
9 i7 Y* e- c s" @1 q! b {& @4 S8 _1 Y! [ R( ^
return m_Item.nIndex;
6 `* B. k2 W" N }! j2 n9 I. }$ M1 x3 E/ u
}
. [" i4 p9 W+ E+ S/ x return 255;4 v, E4 v+ y4 O, O9 g( z4 B
}1 ]( ]6 _+ f# K, D3 ?$ S
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
6 T" S% m3 S5 m- j* J{
+ a5 o% i; k N/ v9 g3 {, E BYTE nTmp = 0; d7 v% I; ^% D: k/ m
bool bDest = false,bSrc = false;
. Q o; Z( b6 i+ C2 O% F4 [: { for (int i=0;i<MAX_INVENTORY;i++)
& y0 ~. S! J6 m% A2 i. k; ^ {. K" i0 o9 Z& U! V
if (dwSrcId == m_Item.dwId)6 J- G9 T4 {+ a" o$ C/ T
{
: B3 `7 Z9 k% f7 B5 ?! F: h //id相等 则 改变对应的dest和src" u- N w2 |3 P6 P8 }- q9 {! {
nTmp = m_Item.nIndex;
7 f4 t, ^1 {8 `( d" {* |) p1 k m_Item.nIndex = dest;
: D7 U7 @" b h7 J2 }6 j }. y. a' M9 h" ~ M3 @0 k. w+ l
}7 _! [' d5 f( L: G3 n; b" S
//临时数据保存完毕,交换开始
. }5 D0 I7 {8 Z% b6 M for (int i=0;i<MAX_INVENTORY;i++)9 T1 N. j/ r$ q' Z' c$ b5 Q1 m9 F
{4 l6 l5 i7 ?' y, ]/ g
if (dest == m_Item.nIndex)% s+ o3 U7 E6 s( f. H: r+ Q
{
! J' m+ M* F- g6 g9 S6 E //id相等 则 改变对应的dest和src
! |9 i9 ]' \/ ~0 E# }, y$ h" L m_Item.nIndex = nTmp;6 N' a; x$ X4 ^2 j, g
}; r* D, K- F `1 _! [
}
! c) D9 t) P1 d& G% n( Y- f}
8 u7 z0 [* l7 f) h& a" F _};2 }3 S" q" B% O# B. G
-------------------------------------------------------------------------" }+ m' U- Q* X
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): l# Y& A" x7 C# ]
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
: x/ e# e+ v+ V$ V紧靠其上添加:. V* c/ ^4 L% K# Y$ d+ q% ^
if( pWndBase == &m_wndMenu )' \' \4 a# a' n( Z6 G
{
o6 @3 w) k# L' y" u. z8 |5 y) q switch( nID )- D+ d! z: h3 ~; \ F: ]: U
{1 B0 ?) I' o3 C, l+ j* r
case 2:2 a. J, |2 I4 O( I: N5 j: }( z
{# y! S- U( h" i# K7 I. S
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
/ B9 w5 ?# N! X# R3 {0 M) I if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))' h% Q( C: Z; f6 X/ M2 ^( r
{
- f7 [! Y$ ~% X v" p& t9 G break;
0 D$ x$ w/ B4 G0 D. B2 ?' T& K }
+ y. f: v& F, K2 `: d for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++), l' R1 K: e) a
{$ r; J# a: p: W; G8 @% L
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. U0 l6 T& j. R
if( !pItemElem )* ~/ k& S0 M2 ]7 F/ V3 r& C+ `
continue;) G' ?2 e& h" a9 U: w2 [# |! |6 @
if(pItemElem->GetExtra() > 0)
/ W" N' Q0 j$ Q+ o continue;. S1 I% T% J- T) @1 z
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
1 q' P$ y! x7 U' A) ^ continue;
" N) M. o& m7 ~+ I if( g_pPlayer->IsUsing( pItemElem ) )
. Y/ a* W; n. F continue;) U# M k& L. b5 v; |
if( pItemElem->IsUndestructable() == TRUE )4 b* Y `/ m6 p. e, m- F8 k
{
( M- j" Z& S) J: o5 a g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );8 r- y' o8 b1 n
continue;
* C) D' G# z) q7 [5 ~0 ` }
; k8 _8 q. n# H5 H8 Y) o g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);( B6 J" ?2 v8 i1 Q9 \6 h8 c: }
}
' v4 Z9 t z) \0 I$ @' m break;
7 ^' P! k! A/ n/ t) [% _ }1 E0 N+ W4 x5 X- P$ p6 K
case 1:+ y! E4 v" @2 x3 M6 c; N
{& _4 Q% S7 d% {& E" a
//整理背包
* Z0 N/ P5 G2 p; \- o% L% l% R- T //////////////////////////////////////////////////////////////////////////; a# T6 v. i) ~/ u6 L! M0 `
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
1 A( T0 }0 t* ~# N- i8 @5 G //////////////////////////////////////////////////////////////////////////$ k* ] T9 D1 \7 _
//////////////////////////////////////////////////////////////////////////
3 X. ?$ x* _$ f" p7 | CInventorySort* pInvSort = new CInventorySort;
0 M3 _; K4 N4 } vector <sItem> vItem;1 o+ e% O$ _ X+ g+ {
vItem.resize(MAX_INVENTORY);//初始化大小 Q6 l: W5 U( P4 l, x% a
/////////////////////////////////////////////////////////////////////////// a6 u* o, [8 _( ]7 M9 D! Y2 e5 r) G
//填充数据
3 i. [5 L( l( k& n( x for (int i=0;i<MAX_INVENTORY;i++)
& ?( M2 b/ S! y; P- t z- L! H {
7 E4 P# ?0 B, ^4 F4 ] ?6 u: L# { CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- m& j7 ?" l, U8 |4 F if (!pItemElem)+ B% v$ d! i4 N; W3 _
{
7 a$ _, n8 y9 I3 E% [/ [5 k o0 G vItem.dwKind2 = 0xffffffff;
$ ]* B+ d/ `1 O5 I5 b9 ^ vItem.dwItemId = 0xffffffff;
& T/ u# s) }! m+ m3 }- D6 {% e vItem.nIndex = i;
. E5 r) l6 {$ E2 x' Z6 w. J' b- } }else {
6 G* d6 b1 |+ l/ X& q7 J9 i ItemProp* pProp = pItemElem->GetProp();7 J8 p1 u# t" E5 a2 G5 q0 U
vItem.dwKind2 = pProp->dwItemKind2;
& G# ?' r* @* l1 p3 q vItem.dwItemId = pItemElem->m_dwItemId;1 u! }2 M3 P6 l' E% d3 L
vItem.nIndex = i;
& _/ l: ?$ n/ T( K }% ], s5 P$ U4 O: C% x" z1 w7 h
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: }3 l2 x( N- ]5 a' |: n$ \4 H }0 s9 F- m( I4 m. m8 S
/////////////////////////////////////////////////////////////////////////// @) E7 I# J! d
sort(vItem.begin(),vItem.end());//排序) C$ v, t1 |" j! |6 c ]
//////////////////////////////////////////////////////////////////////////. X9 Q3 q9 i6 ]
//交换! D% a' u8 L& h( A/ g% `4 g: Z
for (size_t i=0;i<vItem.size();i++). d* E* J4 v% }( K- `
{ `6 O4 S4 Q& L o
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);; v; y. c8 v( M, @, @* p
pInvSort->Add(vItem.nIndex);
, u5 n, ^0 X* }1 O1 m- A# m: I: B' t7 u }
, z- \% ~: k9 J- @9 J BYTE nDestPos = 0;5 ~ y* c( o6 j" o) q1 K9 x6 v! _
for (int i=0;i<MAX_INVENTORY;i++)
- A7 J/ {# E3 J$ L {
0 U7 u" Y- ?: s2 |+ z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
9 \8 D; K% H# e1 T( {# d5 _# V" n if (pItemElem)
1 @6 I- p) B5 g% {, d; g {$ M& A% o# x' U4 p
if (IsUsingItem(pItemElem))
9 ]7 q( L2 J( z3 W4 ]. A {, y7 f" O# y% O D6 Q6 o( a' ~
//这个位置无法放
* X: F3 X& W" O6 c8 `! s5 z, K+ @ m nDestPos++; b7 W6 ^- E7 [+ s# T
}
, E" d, @0 Q. ]4 E9 Q( G }
. m5 g% R' ~2 L3 w, |! o5 e# N BYTE nSrc = pInvSort->GetItemSrc(i);
* X' j ^" }( a1 [+ j9 H$ n* v pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
7 F$ P) P$ ]- e3 j. l' W if (pItemElem)# p: m: j1 \1 c: y, k I
{, u+ M& i0 G+ G. O" V
if (IsUsingItem(pItemElem))
9 m; \. C& f3 ~9 F& C- P {
0 z8 C2 M: ~3 @4 i //这个道具无法移动,跳过
3 \. e5 T, x6 z4 o0 [ continue;
1 v0 M. N3 V( j3 i1 T' }! }) k( [ }
8 [4 p- K2 C6 C- z$ p2 z/ M }else{- a5 A# O' F" M2 k) l5 J" |
//空位置 不用动( ~! p- d3 o6 Z- Z( y
continue;
. h. F, J& m) S# S) S/ I# u7 ]1 m4 I }+ v( ~$ B7 k5 Z# t, d
//////////////////////////////////////////////////////////////////////////
2 V) k) `& V3 \/ b! p$ J //开始移动9 F. K- r( U6 J6 s
if (nSrc == nDestPos)4 s4 x& U Q6 J
{: {' @! j, `% g: y$ s' ]! c
//原地不动
) X# J# ~* U, a' \ nDestPos++;
0 T; S5 ^, ?; b continue;% r5 K0 y8 S$ w2 \
}
* }: ^; O% g3 B, ^# _ pInvSort->MoveItem(i,nDestPos);1 {! ?, p4 R0 J7 l6 F; q
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
& s5 L$ H+ J1 p, u Sleep(5);5 H- i \# Y2 @8 a, `
//Error("移动 - %d->%d",nSrc,nDestPos);$ p7 m+ v: y, R( K: L8 v
nDestPos++;/ R" m( W8 n' h& M4 d
}
# Z9 Q" [/ Z0 D7 B& c //取第一个元素的信息3 p8 r( C* [/ P+ A, T' Z; K
/*
& f6 X: X9 k; ]/ L1 ^$ g if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
* B/ Q4 w7 d; A5 V1 w) S {
q0 ~0 @$ z0 d' n& ^1 Q- J Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
3 [4 w! c7 G$ |; A5 S g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
4 k b) G5 \0 K }
4 h1 R1 @5 ^) {4 |5 c8 c! a */% u0 x) K9 }- h
//////////////////////////////////////////////////////////////////////////
8 g7 F. j! x( m0 J break;
" {" o$ J2 i' g' v/ b# N }8 t2 G4 L3 Y0 W6 @: k
} 6 S; I/ k+ k* r" o2 h7 U
}
1 P. Q2 v# g+ Gm_wndMenu.SetVisible(FALSE);
) u- {3 {7 i3 x7 z
; t: Z" S! [. P: n3 n( S' a--------------------------------------------------------------------------------------------------------
- Q% G9 @2 n5 a! U& T3 E8 i搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
X! g: T7 Q# ?{' B3 J2 @, T" @) c( O; C& {0 Y2 `5 ^" c
BaseMouseCursor();
# J) i( Z- O% N7 f7 s}6 E) }' U7 H ^/ p' k
在其下添加:/ n( o+ h) I" L7 F* W: M
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)+ M' ~9 Q. E+ K
{
0 l. b9 Z# H5 Z5 Nm_wndMenu.DeleteAllMenu();
" [+ n! C- s; km_wndMenu.CreateMenu(this);6 A- e3 u5 `& \: b/ q$ D6 U! F+ t' e
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
- O- d2 d- ?$ f2 @" o( G4 C1 n0 i) N$ J
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. t8 V9 S7 ^) H3 Z- A5 S2 A{) T% r" g Q% D- O6 S* C5 ]% ?
//P以上级别才可以删除所有道具! ^. I6 T1 c2 ~/ n( o5 L
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");5 j3 v9 f+ U7 [- {% F% u6 O
}
! ]( S% e8 E2 [2 Q+ _0 [4 ?m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );2 Q0 Z ^$ I2 K9 Z2 ]2 O8 [
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );& e; V9 q" _2 H) L
m_wndMenu.SetFocus();. G2 R: ^* @: Z! O u# k( j
}( A9 i) q. N" t0 X9 n3 i$ ^3 o! J
------------------------------------------------------------------------------------------------------------6 g: w9 m* N+ e7 i0 \# s' ^$ u6 p
*************************& ?/ c6 s- W2 Y0 H ]
WndField.h文件
5 |, S$ ^4 P6 O6 S************************** y: U! i, a0 K) j+ a
搜索:BOOL m_bReport;
5 ^# l0 y% ]: p$ ]其后添加:
6 ^' b( n7 K0 gCWndMenu m_wndMenu;% @1 {( R0 C! N4 a; h+ H
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
, R$ a9 i7 b! I! i9 a; C2 f2 i. G其后添加:
1 N% q4 n3 n4 L4 L7 d8 Kvirtual void OnRButtonUp(UINT nFlags, CPoint point);
5 b; E2 T W0 J/ m+ D; b* g) t/ A. h/ I; ], J' F( q/ m9 M7 v0 W
: x3 A a" ~+ q W8 A6 r, ~2 b |
|