|
源文件中_Interface文件夹下WndField.cpp文件4 a' ?, D% i8 [$ c1 ?
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! Z- _/ P( Z+ D9 p% v; j
! A& @3 e& C" S/ Kstruct sItem& @& \2 G B1 @) o$ h
{
) e1 R7 K; |/ R( JDWORD dwId;# b; h$ U4 k# ?- A0 E
DWORD dwKind2;
+ {: Q" q) ]& y! c3 k' tDWORD dwItemId;
! p$ F" W- C2 Q R1 e( O" p- jBYTE nIndex;: n1 Y0 D u5 F
sItem(){2 `+ U4 b! Z: u$ y
dwId = dwKind2 = dwItemId = nIndex = 0;3 p6 d1 @3 R0 W! B, r' g
}4 c6 x; F3 k% B
bool operator < (const sItem p2)
6 j+ c( @$ ~. l: j [1 U{# I1 o$ Q* e `
if (dwKind2 == p2.dwKind2)- y f- {1 F& x$ ~! {% H) S
{2 S4 w" o5 E( B. l3 ?
return dwItemId < p2.dwItemId;
4 f) c/ e( ]& [2 l- R* |5 M }else{, H& O" _3 T; ?2 s
return dwKind2 < p2.dwKind2;/ @! m+ z9 f7 j
}" e0 K P& Y2 H4 f. d, K1 @
} B7 ^! `. G1 O
};( O$ V% ~6 W; P
class CInventorySort# ~. t, J, p! n- Y- p5 }
{
+ n U& L) ~7 A/ opublic:
( N! ~2 L) @& q; A" E: s# {CInventorySort()
4 t1 `8 @$ ?8 F# ?{9 _6 j% q+ o0 n2 ?
m_dwPos = 0;# V* F4 ?, H% g0 T
}& h$ e% g4 \0 o. V4 N
~CInventorySort(){}+ [3 F& Z3 ~( M9 h9 p) a
private:
% H) h9 q8 s1 |/ K( Y; _sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
" I5 R; H( M- T tDWORD m_dwPos;
5 H( a) e& c' B' ypublic:
9 ^0 Z k3 k/ O! @# h# D) dvoid Add(BYTE nIndex)
6 y* H/ y$ c& U1 D5 I; g5 n0 I{
' R$ t" _3 B, P+ \ if (m_dwPos >= MAX_INVENTORY)
3 J1 i. L% \( F' G. ?- e {, J$ C& q8 P$ Y5 J( ^: Y9 v' K
return;
9 O H, J2 J$ r4 I$ a- X }
' V. X: y/ _% @$ ^8 \5 n m_Item[m_dwPos].nIndex = nIndex;
/ G- R: g1 z, r0 _ m_Item[m_dwPos].dwId = m_dwPos;
3 g8 s- z3 W) x3 z m_dwPos++;; ^; L9 G4 o' T# I. w
}
- V: J5 c2 R: q. C8 SBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
* n" f: V- C' W- J; T: p* v# f! w{
0 U/ s8 Y8 z# p3 w9 B! t! W for (int i=0;i<MAX_INVENTORY;i++)
: j6 v: _" O# Q, h {
6 E# k& L4 S( N2 o. @+ U4 n. ` if (m_Item.dwId == dwId); n* x: w' w2 A. F) T
{
1 v, i2 k+ L' P return m_Item.nIndex;
4 D6 p* w/ K6 b/ `7 {9 Z1 l* x }+ B$ @+ A- s; s. ^) o. R& i* C* @
}2 V6 Y1 a7 g0 J4 A
return 255;1 a! f8 G( l! [% K; H2 n8 B+ v3 X
}
+ B/ s8 a% R( X8 z- @1 j- ovoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
{% w* p3 Y3 A9 `( _+ a2 L{1 b; p) \, _' @2 c
BYTE nTmp = 0;
4 r0 j2 C1 N+ D/ y bool bDest = false,bSrc = false;
" @0 E6 ^; c/ B! T& n: O for (int i=0;i<MAX_INVENTORY;i++)
/ L% T. c ~' M E2 f {
* |8 d2 L& v& Y# ^ if (dwSrcId == m_Item.dwId)8 u* _" g0 q; S% B2 d$ X
{' J5 ~$ X1 t' R& `; o$ o
//id相等 则 改变对应的dest和src6 i5 s+ o! M; U4 n# C9 q" O
nTmp = m_Item.nIndex;& d$ O& g, g8 N2 T( J1 M# n5 R
m_Item.nIndex = dest;
' `6 {1 c% m: W/ P' `! R% P2 f }
7 t7 _+ Q. s& N/ Z* o' e }
, F Y! r& u0 @6 ]; V8 l9 M d7 k0 L& _ //临时数据保存完毕,交换开始
" e$ W3 g1 g: `: |1 x9 T. t F for (int i=0;i<MAX_INVENTORY;i++) m" \4 |1 ]2 {6 Y r
{9 j4 X: P. ^1 j
if (dest == m_Item.nIndex)
* F1 \* z: T4 T8 N, y# z5 I {
$ m0 K$ g; _; T7 N% X //id相等 则 改变对应的dest和src4 a: O# t, O- ?3 K
m_Item.nIndex = nTmp;: a- |# ^" `$ o+ o- R
}
$ D1 ]$ { `" } }& k- c, a- l( ]: }6 H
}
& K8 X: N1 Z; j2 k! Z6 K; R8 @$ ?};# b) I! B# g: u! |5 M7 w8 N1 _2 U
-------------------------------------------------------------------------
. h0 T7 y, x( ^! y: ~依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
1 y( K6 L% Y) b& u) }搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
+ ]! Q& g! s2 f- `* U9 }- ]紧靠其上添加:
% w* T+ i5 v2 ?1 r. }" Dif( pWndBase == &m_wndMenu )
( c' R. H- J, g; b: w+ H% }{: b# ~5 O. y( @# U, I B2 v E
switch( nID )
2 @- i+ v1 m( o4 m {" K6 J! N& U- \- M- f; ^3 n+ A
case 2:" l7 }1 @+ D. w9 U
{
, N' |! o U( |% x2 U% N //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);7 ^" }1 G" O- l0 ], `2 W
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))! m: T2 W/ h: R4 A
{! B0 b! z8 y+ l; l: V
break;4 l' Y0 ?5 R! q: c3 c, T' c; p6 z
}
$ B4 G2 E" t* U+ w l3 K5 F/ v for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)! `- k6 C0 L5 W3 W
{& g: w3 i; K/ m7 s) z' `! P$ d" ~+ [
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ R: a8 {* a0 |8 Z2 A: r
if( !pItemElem )8 k# Y" v6 ~( n
continue;
n. M5 a& ^5 F6 h' y' Q. k8 p if(pItemElem->GetExtra() > 0)2 i9 H: v7 b1 A2 O5 H) {$ s
continue;
" k5 A, h A1 }3 E" h$ V0 H" L if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 0 b+ P5 n) u6 Y; P, H
continue;0 e" J/ f8 h% V! |! Y
if( g_pPlayer->IsUsing( pItemElem ) )# z3 r3 N/ _8 g( R2 y" t7 J4 j9 F
continue;
& Q8 L2 F/ N$ u% z+ M+ E if( pItemElem->IsUndestructable() == TRUE )
# v# s- L, K1 a' V6 u; |- W& y {
2 t( e7 O# _ ^1 ~' w" t7 N8 B g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );& M2 G% f9 g( O; A/ w
continue;0 }( E9 M- b: M, |* y& Y' l- v
}) ]+ A1 U: X" Z, ^9 i- o
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);5 K- }, K, o3 y5 f$ \- Z% D
}9 y1 a. J, x: C3 M2 d
break;: E: K* k) X$ @ P2 ^/ w4 |0 |1 h
}9 \9 x6 [3 ? v* H" b
case 1:
. E4 Z0 ^( k$ R( _( b {
' Z* U1 g1 d8 h5 U3 @3 x //整理背包
/ J0 Z. P; z$ M7 C) ~5 \. K) j //////////////////////////////////////////////////////////////////////////7 S8 e" `" D9 I
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
5 D, i3 x4 ]9 { Q //////////////////////////////////////////////////////////////////////////; E* ^1 {0 l$ |3 L7 ^ q
//////////////////////////////////////////////////////////////////////////( K* x& R3 [* L: W) }
CInventorySort* pInvSort = new CInventorySort;
: L# A, m# Y" A0 J+ f4 ?; m vector <sItem> vItem;
2 Q1 e7 _4 v8 p O vItem.resize(MAX_INVENTORY);//初始化大小' e6 R1 k& h# ~" T/ v' W+ ~) j
//////////////////////////////////////////////////////////////////////////
4 |- q9 [3 H' ?% J, { //填充数据
' m5 |+ g. N% K( A* X) k. q for (int i=0;i<MAX_INVENTORY;i++). f) Q L" [- ` u! v& r! z5 Q
{3 I5 T! _# ?. A8 \" W, I
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- |1 s" l, f0 q9 X5 h
if (!pItemElem)3 c8 o, ?4 x( o- Q- b7 h
{& l; J* S. P2 V( v
vItem.dwKind2 = 0xffffffff;
; y) |1 }; R$ R- w0 r: S5 K vItem.dwItemId = 0xffffffff;: ?$ a7 j7 t7 D4 k: S
vItem.nIndex = i;3 o" ? N7 b" `: M# J( b
}else {2 F/ ^2 [0 p: m
ItemProp* pProp = pItemElem->GetProp();
' ?% m0 S$ ^1 O5 a& Q" O: I) z: J vItem.dwKind2 = pProp->dwItemKind2;
3 E5 T" ^: j1 M/ { vItem.dwItemId = pItemElem->m_dwItemId;' Q4 f1 R9 H- E( p+ `+ X9 }" G
vItem.nIndex = i;% B. f! W# s9 H! t7 h
}# }: W! a d8 y7 J
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);; n5 O* e, I" g7 m+ _
}
- ~$ [4 C3 C. g. u; N0 R; ^1 ] //////////////////////////////////////////////////////////////////////////
# V7 n6 \9 c2 N" v sort(vItem.begin(),vItem.end());//排序
3 A+ W) n1 \5 t' C //////////////////////////////////////////////////////////////////////////- V9 W8 \2 t& k5 n2 [1 V
//交换5 E1 ^0 D. H F# {
for (size_t i=0;i<vItem.size();i++)
0 z. `2 E2 E* ?- D {
, g* ^, v4 S( S //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
% q; r( J* L8 [/ j e. [ G7 [: J* h* E pInvSort->Add(vItem.nIndex);0 m( M" D3 X% N& w+ t1 E7 N/ o6 h# E
}
, a6 K# [9 F3 H# t BYTE nDestPos = 0;/ V6 F4 r# g! R6 P% `) C
for (int i=0;i<MAX_INVENTORY;i++)* Q& `9 A; M" S# P& ^1 l
{
( `4 p# X7 q8 H0 K CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);* Q, y1 D( U& }# m5 z/ ~/ u
if (pItemElem)( d3 B. B! |: w) a2 u( l5 a
{5 w3 K% C6 A7 |$ |) t, _: P8 ^" w
if (IsUsingItem(pItemElem))2 f# a* d% L8 c. R1 ^
{- @; @ f2 a2 g) \- Y
//这个位置无法放
7 G- y/ N: {0 G, m- |# X nDestPos++;
$ P4 d- C$ i: q }
+ T8 _) W# k# z% J0 z. [ }% q1 A, {! f$ ~, g/ b
BYTE nSrc = pInvSort->GetItemSrc(i);) L, y" Z" X* D/ q% b) \. l
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);$ t! O3 L' e% [. g+ m4 Q7 w
if (pItemElem)! t. u/ {9 p* }. k7 I' G5 U% U
{& B3 ~# h6 S7 T
if (IsUsingItem(pItemElem))
( F' _* u. c3 x4 P. }2 | {
7 Q" U0 o; e* {6 O //这个道具无法移动,跳过
6 Q9 ^, u' i$ w. R continue;
/ N9 k2 E" X, l8 N! \+ D. l* f }
( [$ O/ F* |( p7 p6 A- K$ ? }else{
. M6 _% T* e) P& A; W //空位置 不用动, C9 K( Q$ Y( k0 y& Q( a% C, ^# A/ x
continue;
7 ?( c" \/ q7 D7 D0 g" }3 G) D }, Q/ u% Q. ^. m7 t. ?3 U
//////////////////////////////////////////////////////////////////////////
+ g6 M$ h) g g //开始移动# G+ }; `" k1 V* k; `( I# [$ Y
if (nSrc == nDestPos)" O, S* _3 N+ N* _" ~- |9 I
{) Z% g$ U [8 J, J2 A
//原地不动 r. G' v8 ?; g) w
nDestPos++;# r9 r7 h: z( Z1 V+ |7 n
continue;7 d" l) D1 G$ m
}
- w7 I4 ^& e7 Z3 N1 a2 H/ ?3 n pInvSort->MoveItem(i,nDestPos);
5 Q5 b$ s2 P7 d) E7 m g_DPlay.SendMoveItem(0,nSrc,nDestPos);7 s, T8 a) V1 Z
Sleep(5);
3 k8 C$ o5 U: D: W! [ //Error("移动 - %d->%d",nSrc,nDestPos);( B: I z' Z2 ]8 Q4 X
nDestPos++;1 m. p7 q- _6 F5 Z# b! n
}
" [% d1 T# O- N1 Q" x) p K! N //取第一个元素的信息
5 }+ Q2 \9 p [5 C4 S* f: m2 E /*
( O5 Y! F2 P, ~" n, J J7 I8 J! L e if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)6 _5 f/ M! N- r
{. R( C; G( @; f9 g h$ \* ^! s+ q) H
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);" A' @5 L0 K- O( ~2 S$ M
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
+ A; _. V# ^2 j0 o }
) ?. @4 K0 p; d5 | */+ _1 N' W( S0 `# g ?1 U2 n
//////////////////////////////////////////////////////////////////////////; s% v2 ]% l+ C$ m; p
break;1 \% E' @8 x, H2 Z+ R: t
}7 X2 f0 H+ M7 D8 E/ B# `9 j/ g4 D
} ' @2 q- s& N" i$ j
}
2 f: {. M3 y0 a. G7 Im_wndMenu.SetVisible(FALSE);
( h8 R" S, K4 O( ^8 f* q
' K, q( D* Q, Z. S--------------------------------------------------------------------------------------------------------. z9 S% e; F5 i( U( k8 S
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)1 U! T8 L3 f( Q; z, ]: Y: h
{; n( O {2 a {( D& h
BaseMouseCursor();
& B) \$ f. W2 z# b! D}9 k& u" f' z* S
在其下添加:* q. A6 ~$ D1 H6 |' l% k5 a- K0 y
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
' s! |5 B% ^* N: x{: y$ U- f5 G7 a( m% l+ q! `% g
m_wndMenu.DeleteAllMenu();- J8 N! V3 ^5 V* I" w
m_wndMenu.CreateMenu(this);
. r- K- g& n4 q. ]$ Gm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
8 U2 r) Q8 W. A4 ^8 [
. Q% I- P4 x3 h) gif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))8 g5 N$ l( \) K
{
9 N, C; {6 X0 h# o5 M- Z //P以上级别才可以删除所有道具
5 h$ \ e: ?# d* J# V3 p& J9 } m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
& I: X/ Y# _% x; R/ I# H}2 u N* Z/ T" i/ d8 u" H2 h8 t- L% z4 ~
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
, U1 L6 _2 f( k, L& Q$ D# k. Cm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() ); C9 Q' q" q9 ^/ u5 m, C! w; F
m_wndMenu.SetFocus();" r" j- Y6 R7 r C
}
{# `9 C; X1 Y# A# }8 W------------------------------------------------------------------------------------------------------------
/ q* e0 a5 E- t% ?' y# y*************************
2 l; ]6 b! O4 E8 ^$ K( Y& nWndField.h文件
! Y8 ?/ u% A; E' @ S! e*************************
0 z, W6 y6 k0 @9 p# z7 }! u: W搜索:BOOL m_bReport;- G" k5 @ Q0 a4 F
其后添加:# ~( C; l+ Y! x
CWndMenu m_wndMenu;4 v$ Q0 X7 y6 b0 l- e& ?
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
9 T2 ]2 a( t- U" j其后添加:
4 a7 C; z3 a7 A2 Avirtual void OnRButtonUp(UINT nFlags, CPoint point);# q- P3 @3 q5 k) X
8 L- X+ [2 t1 Y9 B4 ?9 @8 u" t; j- V
9 M' a) |5 y6 D: w' r' ? |
|