|
|
源文件中_Interface文件夹下WndField.cpp文件* |' V. s$ t- G7 S
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 r. ^; H* [! \4 w
* z% B: |/ _* f
struct sItem
# y6 A" |: o- K2 Y1 S6 Y9 W{
/ W# x% a4 l' h* H$ S- FDWORD dwId;
' Z% L# n" C+ g/ L5 x: Y6 JDWORD dwKind2;$ W! H8 r G: @$ I! U1 K9 ?
DWORD dwItemId;
) z. h/ J. P. D4 J" UBYTE nIndex;
; @8 @; n! M* j1 s1 s VsItem(){" N; d' Y+ K( Z# k
dwId = dwKind2 = dwItemId = nIndex = 0;
0 Y" `9 T; ^" \, A}& |9 C1 T! X3 m' d- I1 g5 ]; x a
bool operator < (const sItem p2). `4 v9 d* ~) e* j/ T l# W" O
{, ^6 o5 W8 [: A, c: U0 n
if (dwKind2 == p2.dwKind2)
. J- l2 m M! u/ B+ v' ] {
; a. k, U; I( z return dwItemId < p2.dwItemId;
+ I+ D. x6 c7 [4 d, ^ }else{
2 d1 E# z, j) p5 G& c/ X return dwKind2 < p2.dwKind2;9 x# x5 |0 X( }# A) ^
}' x3 o9 }* ^$ ?
}4 m$ R p, \9 B* e3 d( {
};
. o. x. r& S3 n# i+ w1 gclass CInventorySort- c) \( b+ |0 e: d# z5 u8 I
{* r2 c5 R) C, X# w+ G9 g. A& Y8 v
public:
: W {- B* M7 ?CInventorySort()
- q- ^+ A- U1 U$ Z5 a- x{
* A) O' H) g' V9 x, j9 `- [ m_dwPos = 0;
' f3 q7 ]+ r5 t}
% ~' u' Y. o* U% m~CInventorySort(){}7 R/ f L% f4 y4 ], f- X
private:$ U6 U: m% J5 f3 j9 D
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息, F4 K; P+ V; A. k U' _
DWORD m_dwPos;
1 _2 m: v7 l, Z# h5 H4 Mpublic:
7 `) `( t. ?7 i6 [ i4 r) qvoid Add(BYTE nIndex)7 }' @1 |. U" ]3 ? q
{& L/ a [0 V, q! V
if (m_dwPos >= MAX_INVENTORY)
; s3 K& X+ Q e3 T {0 a j2 f( V+ |
return;
& @' x Y" u6 N7 @ }4 O- R" R; R/ v( K
m_Item[m_dwPos].nIndex = nIndex;5 |1 s4 ~5 s3 Y5 g: h* Y
m_Item[m_dwPos].dwId = m_dwPos;3 ~0 u) f! }8 m% p: l1 K
m_dwPos++;5 U) q5 }& G* e) g$ _: i3 }# v4 Y
}7 S# b: s- g; o9 ~4 E2 D$ _$ O) o
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
Z# J* ]9 N" q3 w/ Y{
3 e# u& g( d( Q% g for (int i=0;i<MAX_INVENTORY;i++)
, q3 w, b8 T& O- B2 e, f9 C; e8 \' N1 Z {1 r; v. o( I" g4 L6 G1 F
if (m_Item.dwId == dwId)
* |" H0 S3 O- T J7 U/ [# n {
& K8 R9 O2 g. b1 ` D return m_Item.nIndex;
( W6 U7 Q+ H3 }9 t/ p/ K }- l6 y5 o- B& u! s5 R4 e8 m
}
4 U# I! ~( g4 b) W5 C return 255;
/ [2 Z" N4 q* r0 N5 f; Z7 v3 l+ E}
* V) V4 m: K6 A2 j" Q* yvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
+ b/ W( Y: V2 [% z2 ~{; m/ l3 ^; W; ^) R8 {% z
BYTE nTmp = 0;; {3 D7 c- h3 b _" K' C
bool bDest = false,bSrc = false;
( Y* K4 T0 k& ]& c# o. P for (int i=0;i<MAX_INVENTORY;i++)
( p# u0 |, y. l4 R2 z {: U/ s7 l* `, X2 [
if (dwSrcId == m_Item.dwId)
U/ X/ w- m# v. R0 t3 U {9 W% W* Y& J \0 K6 Z7 s
//id相等 则 改变对应的dest和src: R i0 X; j( i e1 {
nTmp = m_Item.nIndex;
- c, B, _! v' L m_Item.nIndex = dest;
7 o2 ?, Y. p5 ~: b0 L% \ }
0 F7 D6 A# n$ |) y) s6 U) g. P }7 s& Y7 b) K9 q) X% I. M# N
//临时数据保存完毕,交换开始+ l+ b0 v' t7 J. _8 t p# M
for (int i=0;i<MAX_INVENTORY;i++)
6 v7 B' C5 J v& A {
! ] c' w% b v2 n if (dest == m_Item.nIndex)
, Y2 |7 P3 x, r' J8 N8 v {! w6 e. v/ W( Y; l& z |
//id相等 则 改变对应的dest和src
2 d |" l; I/ x m_Item.nIndex = nTmp;# ?: k6 M" ~$ a8 a" A1 S- a& t
}
. p5 U! l. K0 Y8 b }
$ b! P- H' a( J4 m7 K}
# w( A F' f2 P' Q( W1 Y};% D" F3 i3 l/ C, u7 F, @
-------------------------------------------------------------------------. ?+ K- q+ D l- I% G6 Y; \! S. X+ R
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )* t- d5 n: I; f- c
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);3 m6 [8 Y& U5 u
紧靠其上添加:
/ d1 M3 `8 P) Hif( pWndBase == &m_wndMenu )
- ~2 s" F$ {; o{
% t7 o; N( O; L# ] switch( nID )! G! I9 r1 R4 W1 s( O
{
% @" J/ `, F O+ E. I2 R case 2:8 Y: H8 Q# ~$ S% T
{9 `! i1 r8 M3 U6 I; n- J+ Q
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);2 j! p, w3 R- q, d
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))' s0 [0 v: B& \' v, x6 D
{+ [. p: m; M. `
break;$ C% `0 P$ e5 @9 G5 K. l2 X/ \
}9 _% H8 M2 e6 b2 `" ?
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
, @* U( ?" ]$ `3 S- W. m( k {
6 ?8 n) P# h+ m# U$ R c4 _ B CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 \( x T+ E& C- H0 q( W if( !pItemElem )# U" x6 h( [2 {5 O
continue;0 s5 e6 p x* L$ X
if(pItemElem->GetExtra() > 0)/ V# V, S% Z- S3 f
continue;
I; {& W y) v$ I- M, ?3 V if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
' T! a6 q& f7 R+ z& _, o. A continue;
7 H7 K* C3 h( ^4 a if( g_pPlayer->IsUsing( pItemElem ) )' C! O+ Y, \* x5 W# Z& M! j
continue;# I" S0 T, X/ f: @% X
if( pItemElem->IsUndestructable() == TRUE )
! ^4 |5 S1 I" n$ _- F1 E; _1 O. @ {
1 N) K/ r8 w( k$ V1 L( g+ x6 X g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );1 ]& m' ]# t, t& Z% f
continue;* w( b9 Z' D* z) ]: R E8 E2 s
}
. ~" h( L; |- K4 c: `0 e! c) T* ~. w g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
* @7 y0 {: r2 c2 |( _7 ]8 p }
5 G$ q ]1 o/ f! M6 f! ~- F break;
9 t2 }2 B' \- B: m9 z }3 o5 W; ?/ G. i6 Z' ]: g3 p
case 1:
8 Y+ N- E( \, F4 O8 R9 G) W) ~ {% E. D: j+ q7 o4 o+ v
//整理背包% {2 w: a( z4 l" P' @6 G7 H
//////////////////////////////////////////////////////////////////////////
3 V- {2 D7 G& U" y //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
( W3 U* e% S( f //////////////////////////////////////////////////////////////////////////& H9 p _- e* `9 o, w7 p
//////////////////////////////////////////////////////////////////////////
+ s/ F& d; w. E" u/ s b CInventorySort* pInvSort = new CInventorySort;
6 k$ D- l5 j. _ vector <sItem> vItem;$ B" C0 F9 x" J7 L# M4 H
vItem.resize(MAX_INVENTORY);//初始化大小3 k2 l7 x. X) E6 ~- I
//////////////////////////////////////////////////////////////////////////1 o& a3 B \' d1 M$ X; ?
//填充数据8 X& B( C' A$ Y
for (int i=0;i<MAX_INVENTORY;i++)
% r/ j2 B6 J j; B+ \ {8 w: z/ I; r/ G$ E
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* r1 J$ g7 I' T6 e! ~' Y if (!pItemElem)
: V5 c$ h F3 [8 g1 _; n {
9 D+ b% v1 Q& K3 g) v$ y" v. C vItem.dwKind2 = 0xffffffff;: y# J* t# X+ j9 v4 o9 a6 `
vItem.dwItemId = 0xffffffff;( P* F6 R) S8 K( i
vItem.nIndex = i;/ t3 t0 {, e' M& [ e
}else {9 H4 f% h; A+ R8 Q! x5 }
ItemProp* pProp = pItemElem->GetProp();
% w2 H( B8 e% Z. n$ s# A vItem.dwKind2 = pProp->dwItemKind2;
" k# U* w/ _( d! E vItem.dwItemId = pItemElem->m_dwItemId; {. l# J$ D# p. S" A3 R
vItem.nIndex = i;# j1 r. a! O; W% L
}( o/ ~) N3 q) ~' ?; {9 T5 }
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
& u( h o& d) t9 W: T9 m }4 D6 {+ j+ L) [5 t# ^. d
//////////////////////////////////////////////////////////////////////////2 ?* a2 y! r0 V! v8 V$ j6 m
sort(vItem.begin(),vItem.end());//排序
9 b. [2 Z: } Q6 i# }8 s0 ?0 w //////////////////////////////////////////////////////////////////////////
+ n7 k6 F. x# K$ q# H5 A //交换" E3 a1 ^' p# \/ e5 B' v" K1 t
for (size_t i=0;i<vItem.size();i++)
2 I5 C4 S( ~/ S* z) X! ~# D7 V {
2 v! d& Z9 Y3 w' _% Q2 z: T //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, w+ ?$ k. x0 l( H; w( j* P pInvSort->Add(vItem.nIndex);0 f0 }' X$ p* k, J F
}3 m. e9 h, D' n
BYTE nDestPos = 0;$ f3 A+ B& l: T' f/ T
for (int i=0;i<MAX_INVENTORY;i++), A2 S' ?9 ^- f/ I
{' }% ~7 b9 ~* i3 T. r5 H& _1 q- n
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
, U h9 X+ B3 A) _0 v if (pItemElem)
p1 w& O4 y( U0 K# y {. q7 s' r- A* f/ Q+ I2 Z; d3 `+ n( e
if (IsUsingItem(pItemElem))
3 F/ l( @7 C+ y" w2 k3 v {; d" C& g7 Q! S, Q5 x) Z
//这个位置无法放9 _- x& k! j6 M3 G8 C% D
nDestPos++;
b" O9 k* |: s( x9 B }
& M: C2 O1 P! I3 l B* h }
6 U3 S7 V) @, t. r BYTE nSrc = pInvSort->GetItemSrc(i);
a5 o+ x/ Z6 X" w pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
, b5 N" F& A4 f3 ? if (pItemElem)
. @0 q- @! z4 Y/ A2 u% a {$ q8 a h( T; M3 O6 B) ^- d
if (IsUsingItem(pItemElem))6 X( m b8 f' g7 L
{
3 K' [. A/ d* F3 I0 d/ ~ //这个道具无法移动,跳过" H7 h1 y3 o, `/ l: X
continue;8 q* L. M8 \% M y" j
}
% e \5 _0 K* y }else{
) `$ g# r& w! v. T //空位置 不用动; q8 i* L6 h6 }$ u# i
continue;0 Q. I) A0 V0 w! O
}) j" z7 J; |% \. K
//////////////////////////////////////////////////////////////////////////
: {/ f5 x4 k7 e9 o6 N //开始移动" }4 _3 Z0 [( q# D3 E
if (nSrc == nDestPos)
$ V& G: d" E: j6 Y" r6 y2 M2 k {; c" f1 |! d; s8 _2 l5 g1 \# r% t
//原地不动$ P) Y" k5 X6 M; u3 ]& ~% q
nDestPos++;
; i. K6 O$ J6 l: f( V! R! ` continue;
0 ]+ s$ U9 u' [, b& M8 M }5 k- T/ \9 c5 R7 y# o
pInvSort->MoveItem(i,nDestPos);: k1 w) _, @- \4 t- Z# U/ w
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
" J: w) P7 [2 s$ `3 p- J Sleep(5);& n T" R' c7 M6 s
//Error("移动 - %d->%d",nSrc,nDestPos);- h9 `' h$ n$ N3 b+ Q
nDestPos++;
$ e. W9 t# A; {$ I }
8 y3 T o$ T- Z1 w //取第一个元素的信息. @$ }, k: Y" s) |2 v
/*
- @3 c9 ]% b: P4 B+ w; R if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
3 W5 T; E' E$ h6 S: u) [ {0 D- ]! O) _) M& F! z* {8 t6 Z2 B- P- q
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
$ `6 H* t4 b! j g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);: f8 m2 F, z' n" \, X; u- u+ E+ Z
}2 k8 e: b" m9 _+ b
*/
! `- l( C* J# n* X5 Y$ T //////////////////////////////////////////////////////////////////////////
" n7 M+ Z1 O M% _, U, k break;' @' f5 M! ^- r, J" r& m
}
+ ^" z' x3 j$ |- q3 ~+ _% J } 0 M; S% |% ^7 I3 R2 s) X
}3 j8 s! h" o1 N2 E
m_wndMenu.SetVisible(FALSE);
0 \6 p. W5 w" L w5 ?# @+ n, L4 @( `' a
--------------------------------------------------------------------------------------------------------
4 `9 u- P* c: W搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)8 c( ~+ |- D+ L, \& X/ b
{
8 g- K" ]4 L+ z* j" z8 |BaseMouseCursor();: G* a3 N' C+ h) N
}3 H+ d" l0 @& w2 N' E" o V3 ?
在其下添加:
[5 Y3 T; G! }7 N- Ivoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
& _( r7 G8 x4 X4 X9 G' X2 F3 N4 R{) Z0 N' l0 S! }
m_wndMenu.DeleteAllMenu();; b* H: y4 c. u; p+ A% |
m_wndMenu.CreateMenu(this);( y) P/ B: R0 y/ G4 y( U9 D/ k5 {5 ]
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
# k6 T3 I. O9 Z. r8 T# I, T% _ P) K& @$ T4 s' @
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
t/ U( v. d+ Y2 u, g{
9 c# b# v! |3 N1 _$ T/ H //P以上级别才可以删除所有道具; j2 J) T8 A' M# i- p# M: q
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
- ^" k3 c& u) t* v0 A}
6 f$ J' D2 E7 v) k/ }1 D* r; nm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
G5 w0 g. x( X4 B! H& zm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
# A! U" [& E1 f8 x) _2 l. r4 Vm_wndMenu.SetFocus();
$ S0 v' p: m4 k% ^$ G5 W" Q: N}
, Q5 ^0 @: n5 L$ a8 S------------------------------------------------------------------------------------------------------------+ J; E& Q( T# x4 u0 m3 P
*************************( N/ C4 o( }3 y+ r+ S
WndField.h文件
+ k, Q0 ~2 V/ g, u*************************% G* g6 \7 X! s& V. V! ]* Q/ F
搜索:BOOL m_bReport;
+ m! r0 {2 \8 ]. v7 j% t4 p其后添加:
" p* m% n3 n: u. XCWndMenu m_wndMenu; I- y; g8 ~& P @3 ^
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
) ?$ I Q9 M0 k8 O) v4 B其后添加:
9 k6 ?3 _9 S2 J) n" s# a/ n% Xvirtual void OnRButtonUp(UINT nFlags, CPoint point);8 A; y- y7 e: E! T* [9 {' G& ?
( J* M2 [+ t' s1 ?( ~! h9 D! G3 \$ d7 h H5 G' B
|
|