|
|
源文件中_Interface文件夹下WndField.cpp文件( t7 N, |' F& `" @, z9 G! ^
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
8 N: N7 h. _8 \2 o1 z' K# `
' e& R$ g5 V+ L% u; \: s* E7 {struct sItem5 a& ~- ?0 Q6 \- L' I
{
1 i# B- x$ n" K2 jDWORD dwId;
2 t- f; D. Z! ]6 @DWORD dwKind2;+ F ]+ N/ t/ B. i9 u0 B8 G
DWORD dwItemId;$ ?7 g& K3 f5 n: r2 a$ F! G
BYTE nIndex;
" C/ ]4 v0 o S9 \sItem(){& X# A, \) [( T& G2 v5 i
dwId = dwKind2 = dwItemId = nIndex = 0;4 d0 z: B L' Q* [
} w7 A3 l* h) W/ Y- I: j
bool operator < (const sItem p2)' ]/ B$ f I9 z! D
{
6 W5 S3 V1 ` Z& ~ if (dwKind2 == p2.dwKind2)0 Z: F/ b/ t7 W4 e
{
9 t* P' L$ E$ F* U. } return dwItemId < p2.dwItemId;
: Q* w) A! ?6 j. T }else{
; C" h% o# b* M( g% |7 _ return dwKind2 < p2.dwKind2;0 ]" \, V4 S7 X8 k @- E7 Q8 T4 j
}7 A! m0 [7 @6 i
}
& v. | ~- p2 y4 S: G};6 T0 c5 {: ?7 w, `* u) U3 f# M
class CInventorySort
- ~) L* I3 v- r$ M8 p: R. Q{
" Q9 J6 N0 I) k9 `3 a% E; Ypublic:2 A4 k5 A, {3 t
CInventorySort()1 I1 Q3 B/ ?2 i' K5 ?/ }) Z9 ?! p7 b
{2 p7 j) e5 K, ?2 [
m_dwPos = 0;4 Y) M& E- `1 ~
}8 w1 a# }: E9 V Z9 f
~CInventorySort(){}
+ u+ R8 [* O8 iprivate:
1 M ?$ Q; C$ H/ ?sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息5 Q( g! ^" t0 W2 R: ?+ ?$ K" E
DWORD m_dwPos;
7 J q& h n Q7 t. q# Dpublic:( L% O# o' W* C! Q
void Add(BYTE nIndex): f Z: e) ]" p# S) C
{/ \+ b' W- N' C- J( I
if (m_dwPos >= MAX_INVENTORY)9 g. f( |. {) K' n( ] P- L s/ ]
{
" G7 U0 G5 i% o3 q. @ return;
, Y8 h( Y7 X0 b/ x1 i4 j3 G }
, N5 E$ O& o& C7 L4 X( | m_Item[m_dwPos].nIndex = nIndex;2 z8 e) j) H3 P' X. a
m_Item[m_dwPos].dwId = m_dwPos;
& ?" K( s* E8 F; J% ^: N5 K1 w) | m_dwPos++;
" O l+ `5 p9 a* y( Z8 ^}) ~$ j( |& s5 w( ~8 M$ c- ^
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列 ~1 r* p9 h# u1 N" v3 X9 ^! j
{
, i8 e2 O* e: D6 _3 _$ n9 | for (int i=0;i<MAX_INVENTORY;i++)/ c' ?+ v( Y7 h9 g9 P
{
/ |& L# b% \, X; x9 @5 S, a if (m_Item.dwId == dwId)2 b1 Y& S5 |% h
{8 R9 K9 z% p. Q% y* ^
return m_Item.nIndex;
# u6 O' @* K0 W X% c+ H6 l }- Q3 a8 e2 ?, w! n |+ c
}
9 c8 e2 m1 p7 e4 G) w return 255;" }2 e' S5 q6 ~
}
4 P! N& H8 B* yvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
/ m, S. @. X, Q @{9 V2 w7 Z" u# ~ |1 E
BYTE nTmp = 0;0 a2 W" e% I* F
bool bDest = false,bSrc = false;
$ f# N y3 {% r8 {1 t' O for (int i=0;i<MAX_INVENTORY;i++)$ T( F/ A! m5 s X# H# ?3 E4 i
{
! G$ F, L6 S: `' n8 R' q: C2 @( y if (dwSrcId == m_Item.dwId)' C- A! Y3 Y; G! m
{) C' a( m7 u. X) k% a
//id相等 则 改变对应的dest和src
: u+ l4 n9 m3 a0 `2 o nTmp = m_Item.nIndex;
. W4 ]. X. j" [ m_Item.nIndex = dest;
8 X6 ~/ s% r5 \2 a0 W5 Q/ U }
3 W# y9 l, P- G- L5 U0 Y8 X4 C }
3 ~/ e+ Q/ a; q: p/ q" j$ H //临时数据保存完毕,交换开始* v! l+ i4 k c/ { Y
for (int i=0;i<MAX_INVENTORY;i++)& r N2 p& S: q
{$ V0 s& R/ W ~
if (dest == m_Item.nIndex)
% j0 M* d7 s) M! P+ A {2 P$ U1 {& V8 ]' \' Q6 h, A
//id相等 则 改变对应的dest和src
: @& Z7 J9 K* y2 S% Q3 q" w7 \* N m_Item.nIndex = nTmp;$ |7 t/ u/ o; f' U5 p" Z! e/ m
}
9 x! J% n# c" \8 Y5 S. A }1 ~ [9 c; B. d; U& K" d* w7 h
}
* ^7 ?8 ^( k2 ^: c* R! Y};
6 A& C4 e' S0 l' W+ i-------------------------------------------------------------------------/ V# h; i6 a4 ] r6 F- C, D
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 Y- L* w7 Y& O2 z& b/ V r
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);4 f0 }$ _! I D4 y6 _6 F+ @
紧靠其上添加:
$ m1 I% [6 p% v/ kif( pWndBase == &m_wndMenu )" i$ {" a7 l! N8 w
{
4 G2 p4 m8 j% h0 L# [) q# z( b switch( nID )
* B& D2 y* Q* O% O1 U/ k# b {
5 L8 u0 ]8 }) V3 ] case 2:- Z# O0 f' Q& w7 h& t
{
; I* }* {5 p3 {7 x7 s0 r //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);, h1 ?" X/ y0 p3 L( b/ g/ P5 W
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ }+ W/ t" U( r8 G X {4 N2 ^2 s- o1 L7 {$ H) K2 [
break;
" m6 i: G+ Z! R( D }
# }* A O8 l5 L0 a# c3 \ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
+ r% r; t' p+ ~/ D {
' a9 i: ~3 g( `3 N CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
r( E" F+ h1 U& E/ r if( !pItemElem )
; u3 W4 n& Z; W8 w% w$ y8 @1 V continue;
' C9 O3 Z% M$ A8 y' S) Q. Y+ r if(pItemElem->GetExtra() > 0)
% g. \5 T2 S; C/ _) S; P continue;
2 ~ b7 x3 v; ~2 H if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
# P! }8 N9 p( o1 P" ?2 ^9 l continue;
- A% ?) j% q' ~. A7 T if( g_pPlayer->IsUsing( pItemElem ) )
$ N# K5 K1 G" O h- z; A continue;% i4 `6 ^. b2 S# X
if( pItemElem->IsUndestructable() == TRUE )! ?# |; H( s5 ]0 b* S
{
/ k, m) O4 p) { g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );! u' C! t; ]1 M$ L0 x" n! i, G# Z
continue;
3 v9 ~8 r5 X8 q8 a }8 g" O L9 N% P3 V* k/ B+ Q, x
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);! ]. d5 F8 d% T$ S6 Y3 v# }3 I% L
}
5 y" E3 o* A1 U# D7 q2 } break;8 e1 o* L/ N' a1 [
}2 S; s! \+ Z; `! h. {6 H
case 1:
$ }3 q% u: S2 \ n* ? {
' y; H& `5 _# v2 p //整理背包: }) U6 G: b% L; K
//////////////////////////////////////////////////////////////////////////
0 o1 E$ z. X; \( f9 j //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );! h! h: \ s, e
//////////////////////////////////////////////////////////////////////////
6 g$ x4 R" T, { //////////////////////////////////////////////////////////////////////////, ^: {, r( @- k- {: M* r1 `
CInventorySort* pInvSort = new CInventorySort;
, p0 x- ^( w4 F% H6 o vector <sItem> vItem;, U2 Q) {. u. s& n. w
vItem.resize(MAX_INVENTORY);//初始化大小
$ ?9 ]* S- G0 o //////////////////////////////////////////////////////////////////////////
8 B% ~, O# @( P' l% ^ //填充数据
5 M7 @+ v. \# v for (int i=0;i<MAX_INVENTORY;i++)
: h- p! T% @; N- M {, A1 ? m' v+ W2 `, ?) W k- F
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% {* f- C7 r6 W; }* J$ y if (!pItemElem) n+ @/ t( P# v. i* ~5 D: b6 h
{
) c9 j% v: K1 | h5 c vItem.dwKind2 = 0xffffffff;
2 q5 \1 z O+ d, `( x8 v vItem.dwItemId = 0xffffffff;& ?' a3 p. [/ G- z) ^, G3 H
vItem.nIndex = i;: h- Y6 }. Y( u
}else {
' \9 s; q1 ]) ]# X, ~ ItemProp* pProp = pItemElem->GetProp();
; |$ p5 v- A3 R0 { vItem.dwKind2 = pProp->dwItemKind2;4 }- t, D. z" X0 z* v. f
vItem.dwItemId = pItemElem->m_dwItemId;$ D# `' c w2 ?: R) \; U
vItem.nIndex = i;
& s0 @$ W% I' T. H' ~. X }) [9 l5 s: E: ~3 A4 i7 e) `
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: L/ \8 w4 Q2 {1 c* W }7 O3 X, A5 z! H6 L; l1 e" ^( a3 T
//////////////////////////////////////////////////////////////////////////3 j1 f2 @2 N( Z' H1 T: B5 |* I
sort(vItem.begin(),vItem.end());//排序 i/ e( D: C9 {% W2 ]- V( U. J
//////////////////////////////////////////////////////////////////////////
# w( Y# S8 F1 R8 T* ?- i: y& ^# G' a //交换
* ]5 b. s" e" h9 j/ C for (size_t i=0;i<vItem.size();i++)" }, o# Z- G1 W
{/ ~! W0 F8 l3 H, R3 |4 H6 Y* c8 ]
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ a9 S' `* |) X2 p) ^- t pInvSort->Add(vItem.nIndex);
* `% L: O; @' S8 d/ t }" H1 `/ S1 M3 k- N7 r9 ^& @
BYTE nDestPos = 0;
. X! `+ s+ ]( j& a for (int i=0;i<MAX_INVENTORY;i++)
# |7 b. O# {: V% G' ? {
: J2 U8 Z; X- v3 [, T" E CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
3 v1 i1 ~- H, {% m if (pItemElem)) Z( Z- [' y8 o
{: Z+ D; \* D/ q7 ]7 O. x1 s' P' O
if (IsUsingItem(pItemElem))/ _/ D0 K% }4 ?; K# [1 {- S
{
+ Q6 ~ @: `4 b9 q //这个位置无法放( Z8 ?6 i2 e: W9 c' L
nDestPos++;. ?8 w( A/ l& P- m! Q( r
}
- `* p5 J M4 P0 k% W3 g9 {5 ~! Y }2 e( H( Y" t M$ M
BYTE nSrc = pInvSort->GetItemSrc(i);) j% n" I; f1 o% c% l' y
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
5 u2 k- A. j, O if (pItemElem)( d5 X* d9 L$ A6 d! m9 P
{4 ]1 E$ E0 c" T8 U) ` M
if (IsUsingItem(pItemElem))
% @; _( _! V; I1 K; w& ^ {
1 b4 J5 y p/ S9 j //这个道具无法移动,跳过4 n! R# R, Q! l3 Y
continue;' _! j( ~7 Y V- H
}- `& G. A6 u$ a( q& l+ i% b7 M
}else{
3 G S0 _$ u q/ i) E0 d //空位置 不用动
8 { `3 r4 A+ f6 L8 D2 w continue;
* b# ^5 W7 Z& B: g7 q, z3 b }/ J+ N, N0 R/ p3 N5 v# }
//////////////////////////////////////////////////////////////////////////
& W" @0 A& n" E1 R- k0 D F x' u& R //开始移动+ G R/ q# D# P, R9 {
if (nSrc == nDestPos)( `; f) {2 J' k# I
{
0 U, V1 O# }) l& b: ]7 m: p //原地不动
4 B9 b: U9 Y+ K0 |1 Z nDestPos++;8 k8 L5 {. a6 a
continue;
# r; b" f7 T* u. {' X }# w8 F. `8 a0 s9 u5 H
pInvSort->MoveItem(i,nDestPos);
5 F- c/ S h: J* [) `9 x5 D g_DPlay.SendMoveItem(0,nSrc,nDestPos);' J7 y6 d, i: R& h
Sleep(5);$ f$ c. W& ]0 y: U
//Error("移动 - %d->%d",nSrc,nDestPos);
( B. b4 H, L- z) E0 u nDestPos++;
0 g/ @" w: u/ p4 H }
, f; o# o. s9 k3 Y$ f" K3 K5 N! B //取第一个元素的信息
& P4 Y; Q& B4 t$ ^/ Z7 O6 v /*5 e: P r1 G% Y6 [% q: [
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
- N' k( _/ O) j N$ L4 k {
; Q7 ?' f" _- ~$ H$ P, | Error("Move - From:%d,To:%d",vItem[0].nIndex,x);$ O- [; t. B& H) I6 T( h
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);* m" e. d: ?9 d/ q* P& F; Q$ z, e
}4 R8 l2 V6 F* r
*/6 s- V! p' u4 N0 O# ?, ?: m( Z+ {, g" i
//////////////////////////////////////////////////////////////////////////! y% z6 E" |6 e& Y9 p' Z
break;
+ Z$ b( E x; g0 ?- @; i5 | E; G }
) e2 J- o* S% X* _% a/ m- T } " d4 A2 y1 d- j
}1 p0 I' i5 b( j
m_wndMenu.SetVisible(FALSE);7 r7 X* L. l3 Z; F. {
8 I0 g' L. D( Q5 S( p- g" W1 W
--------------------------------------------------------------------------------------------------------9 Y& w7 e- ?- S" }. E4 E9 }
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
/ n* m4 z: M7 i) l0 f# k{# q! V& W7 v5 @1 y$ d/ c/ l6 v
BaseMouseCursor();
. E1 i% F* W2 h$ @, {, `}
1 ^. G) u: t# \在其下添加:
4 |" c$ X1 c9 A; V' S2 h$ P" F- jvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)% W: l( G, Q0 ?3 I
{# T: i- {" ]) b, b/ Z: ^5 i' t
m_wndMenu.DeleteAllMenu();6 l9 O& q) n8 }6 ~& N
m_wndMenu.CreateMenu(this);
1 D8 f7 J9 L0 O, }4 G' j- am_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
- }- p9 l$ Z. a4 Y" Y; ^2 D. w& p# a* M
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 d$ A9 c" V* v4 C{; c1 }3 L. W5 L9 z9 t( S# X
//P以上级别才可以删除所有道具
& D2 G4 }9 L5 o m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
; y* G" y7 x( n; ~}
$ N: S, y' L& K' Gm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
+ m* X, o7 Z- G. W9 v/ c- [& @m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
4 R$ j& ~" b) N9 Hm_wndMenu.SetFocus();
/ a! I: _/ z7 P" j}
/ _$ G ^# h. D% a! d, X------------------------------------------------------------------------------------------------------------
! d' B& H$ P* [8 x) ~0 ], s8 y*************************% |& D+ V/ W* D ^- D# T
WndField.h文件. U+ @" U) W* U& Y0 t
*************************/ D9 t/ X, D0 m
搜索:BOOL m_bReport;$ _. _/ k) |) m% k8 T7 Y* T* L8 g
其后添加:$ g/ l8 g6 W' s0 f. |0 U6 }
CWndMenu m_wndMenu;
' o1 a/ n& O8 n' X; R, V搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
3 J7 P) H; o0 W其后添加:! {% a1 d0 `* a, P$ F8 H
virtual void OnRButtonUp(UINT nFlags, CPoint point);
4 e: R' Z* }4 f! r) N4 @0 S K( q% u
0 T8 W7 w1 x2 K* w0 ~ p+ E
|
|