|
|
源文件中_Interface文件夹下WndField.cpp文件/ p8 z/ \, [8 N, b7 b6 R4 n) G
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 O: L2 l( n* p9 n0 ]4 i q1 v2 F( t
5 [ p0 v- e( istruct sItem+ _* h% \8 K% m6 v! F5 B- L
{
* B' `0 S" ~2 m( O+ Y, H: ^* h% g% @DWORD dwId;2 `0 R: Y* U; `2 S4 c9 J
DWORD dwKind2;
: M+ d1 W- ]2 _! z* R! z( g- kDWORD dwItemId;
* L0 Y6 C5 B; m# ?7 wBYTE nIndex;
% W; p8 ]0 }' Z. JsItem(){6 J' ?8 {0 x5 _0 | f7 j, G# w
dwId = dwKind2 = dwItemId = nIndex = 0;) a# o$ P X2 j" {* p1 Z% m
}% f- O% e# a, d7 k7 q8 D0 m+ W
bool operator < (const sItem p2)
7 I" G5 r# i# [& c' b, E; J9 t{
5 ~" [9 ?1 g/ F if (dwKind2 == p2.dwKind2)
3 g# {' F+ R/ z* i! m {
; G; N9 t8 s4 Z- l return dwItemId < p2.dwItemId;
' A7 J2 q" W% ]- S6 X }else{. A- |) a! D1 B+ a
return dwKind2 < p2.dwKind2;9 V: B# Q& n1 M' P
}
1 m/ s+ j9 k: b}" {! Z2 w! R/ p2 o1 }
};6 l- i6 ~; d# G. r6 |! Y7 s: Q
class CInventorySort
5 a x3 m9 I0 Z ^{
) P B/ N3 r5 x5 c; l rpublic:
2 [* V( S) L5 w$ g% KCInventorySort()& Q' t' D, k2 p) o3 g6 [( Q
{
+ w1 ^: G% t5 [ r m_dwPos = 0;
4 l2 ?* i( e5 r: W2 i% |}
1 j7 n j1 j" Q~CInventorySort(){}
8 s/ K: O7 J: a4 sprivate:
: ` C: q. c+ Y8 ?sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息' \/ K- M; ?, T4 O: s0 N
DWORD m_dwPos;: r$ C& X/ N& p5 j6 I! ?5 ^4 \) {# q
public:
B9 s @. w2 c4 H8 R1 \) L7 t4 pvoid Add(BYTE nIndex)
1 m) W6 A1 m1 Z( w, ^+ y. [: c{* p, p- M6 m* F1 o6 I/ M
if (m_dwPos >= MAX_INVENTORY)
' p+ F4 w9 q3 ^! O0 c Y: v {+ V& R$ }! `4 V
return;
" d( ^7 `; U3 o% S }
n" a" D, A% @6 b m_Item[m_dwPos].nIndex = nIndex;
! n, G6 r7 h0 ^% ~9 c5 X m_Item[m_dwPos].dwId = m_dwPos;
) q0 w1 p7 u" Y8 B% u8 L' f m_dwPos++;- Q7 G& @# l9 }$ M+ _0 b
}
5 c8 v4 e; l0 L, V1 kBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
; c& ^1 [3 I! I{
$ [% W2 J) ^' M; j+ X o& w. q for (int i=0;i<MAX_INVENTORY;i++)
3 _" |7 n+ g+ |& i7 ?8 t9 O {7 u* n9 f" z# D/ R. D' A3 B
if (m_Item.dwId == dwId)
' V8 ^* C5 d0 [/ Q" {* x {4 w' z& u I( l
return m_Item.nIndex;8 Y# _) I" O7 F" c& H, `4 C) f$ R; v! d
}
2 i* Z8 ^3 ]9 ^& |( w }( @ d, B) {2 Y- N; C: ~2 @0 f
return 255;
# j x$ ]) q4 Y/ f+ j7 g. C; l}
% E+ k' J4 q/ s* T5 z7 Svoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置+ ]- d3 V: Q% L
{* P# g) l5 k7 l' w2 Q! D, M% L' ~& q
BYTE nTmp = 0;
! a2 V! R- U% z, `; I" w, J bool bDest = false,bSrc = false;
. b7 j4 F* t! T$ }7 L for (int i=0;i<MAX_INVENTORY;i++)
6 a3 K' }7 {2 c( i% {* B, m {1 s$ Z# `% b- V- N0 l
if (dwSrcId == m_Item.dwId)
4 h/ k/ s, z% X {( ?; I3 @' r& t4 G9 v0 h
//id相等 则 改变对应的dest和src6 k8 K( D/ q2 T" [! l, W4 ~
nTmp = m_Item.nIndex;0 b* n; P) o9 X. X- z5 U# y( N* z
m_Item.nIndex = dest;2 N% g7 ?% F3 F
}
* z+ I0 G& ]' @2 x7 y }5 t3 }1 {* `; B
//临时数据保存完毕,交换开始% v2 c6 r6 G- d2 Z5 P2 \/ u
for (int i=0;i<MAX_INVENTORY;i++)
" I2 U) q% U8 P {
# ]. P1 P* R- y, F4 h( r if (dest == m_Item.nIndex)8 l: L9 g, U4 z/ U+ L" {$ K
{1 ]. K* L) r8 t* y2 N# r3 l$ v
//id相等 则 改变对应的dest和src
) s m; K: |# ^4 f* w( I m_Item.nIndex = nTmp;
4 T r2 [- o! |5 ?8 t, l' t. W }
% h! }' n6 o' l, g g+ P4 s }. s6 r+ F! A, Q9 Y
}$ I( U8 {) q, C: d |% z, h
};) G. b" y# i' T4 B w
-------------------------------------------------------------------------
6 v$ e! v) N6 q0 x! }依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )2 o* F$ U0 x& X* C% c0 _
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);* }2 g5 K5 e j4 ]" e8 I
紧靠其上添加:
- k4 W* l5 C' q2 q1 _if( pWndBase == &m_wndMenu )
1 i$ N9 v- N3 g. f# Z6 M) v# i* H{
7 u1 u' E* D" O! R+ u# @1 @ switch( nID )
* z1 f1 T9 [7 h4 n6 J% l8 B$ F {
/ k# e6 a& Q0 E: W+ \% [' Y$ P6 l( D9 n case 2:
$ Y% t- f$ w: g0 |( A) ? {
! y6 o+ S: W. ^3 y //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
: z( }8 a2 y1 x- M- p if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! Z2 d" ~5 Y+ v* M V {1 F6 w* T* ]6 e) q; b( F
break;
+ ^3 e4 k1 S5 b }
9 r& v+ C8 D3 U$ Y' [7 t4 L% N for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
" d) v/ A0 b( V! ~1 J7 X {3 W7 x7 m) j* t1 X8 t- d
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. U; P% q5 W/ ~5 o- Q
if( !pItemElem )8 X$ u. F1 E3 j
continue;
3 H8 i# L$ c$ V2 c6 I if(pItemElem->GetExtra() > 0)/ ^- F4 B+ ?6 J3 c8 D M2 @
continue;9 U5 {/ u8 f7 u) u" s1 k) \
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 7 I9 V" c/ b* E0 ^/ S* d
continue;: b6 i2 c" C y9 l3 L$ M
if( g_pPlayer->IsUsing( pItemElem ) )/ w& C1 Y% |# m# J& t
continue;3 g8 K1 _4 I0 ?% D" L, E" e; J3 u" i
if( pItemElem->IsUndestructable() == TRUE )4 s( E5 h+ @9 ?6 A/ {# E2 h
{
2 |: v8 c& a. k: E# l) D0 t g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
. Q! r m9 H8 m9 l% S/ S continue;, D& l9 [; m: ` ?( m
}
8 i$ D) k/ {5 n; n g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
) z* ?. R0 n# H* g, ^) l8 F+ E% l }
5 c: e# y1 }+ L! j break;1 b5 w' b( x. ~ w$ n% ^
}+ q1 W+ ^; @' _/ A. D2 A, v- J
case 1:) W4 a* z ~$ m' u& N
{$ J& f. I F ^- B5 M; e
//整理背包
9 f, A* B% q! J3 x3 S0 _7 s //////////////////////////////////////////////////////////////////////////
$ e: {$ `" z6 {3 z3 V3 c' }* r //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
, Q1 M1 L+ w) J, ^( S //////////////////////////////////////////////////////////////////////////
& {5 j+ h/ P) j$ O! X //////////////////////////////////////////////////////////////////////////& a# Z8 v& M* B# a- y
CInventorySort* pInvSort = new CInventorySort;+ S2 \1 s6 p' @1 |
vector <sItem> vItem;3 p) L) x7 ^4 ~4 f& N9 Z9 u# N
vItem.resize(MAX_INVENTORY);//初始化大小 f7 A/ C5 ?& q- k! ], U8 B
//////////////////////////////////////////////////////////////////////////
: X9 x5 V- T* Q" w2 w3 t //填充数据
0 m* X; t/ U6 u$ |- L( M( d7 V for (int i=0;i<MAX_INVENTORY;i++)$ y! w6 ~* F/ v+ a% E
{
: y+ g) w* G4 e& O CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ G! y* [/ j; M4 W5 G
if (!pItemElem)
' ] S- [1 L, E) A {
9 k( t Q# c0 r! ?2 Q vItem.dwKind2 = 0xffffffff;
) _7 `" m% @4 E vItem.dwItemId = 0xffffffff;- H; }8 y' i' o* _. J: {
vItem.nIndex = i;
4 C; L& ~- E6 _5 V( f& m$ o* T \3 w }else {# s; M1 l1 w( I9 w* g1 z4 r
ItemProp* pProp = pItemElem->GetProp();
" n$ \0 v8 H; L8 e vItem.dwKind2 = pProp->dwItemKind2;
9 u4 |4 O6 |- S" K3 U; } vItem.dwItemId = pItemElem->m_dwItemId;
|+ G6 ^9 v* ~- \& N vItem.nIndex = i;! O+ O1 _/ v' g
}
+ t2 c- o7 l+ c# P% m m2 [+ e //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' S0 k5 H3 T/ O, ?5 `9 k7 f }+ ]. h2 x' b( x5 H$ h- c. A
//////////////////////////////////////////////////////////////////////////
0 t9 p* j3 v: O R' |" ~ sort(vItem.begin(),vItem.end());//排序
8 O" w* h5 k7 p- ^ //////////////////////////////////////////////////////////////////////////8 {; x9 @3 [- ]6 a% E6 P* t
//交换
; h- Y* W: i. s9 y' N for (size_t i=0;i<vItem.size();i++)
2 ^2 c, l* w% w5 p) B+ H$ F8 O- c( l7 _" ?# K {
( j6 x- A1 _7 l/ G) a //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 \) c0 ~4 q) c pInvSort->Add(vItem.nIndex);# J5 L P' X& x) y$ d
}
+ w4 `1 X% n S) g1 l BYTE nDestPos = 0;, O8 b9 \# v2 M( N' e2 q
for (int i=0;i<MAX_INVENTORY;i++)$ f9 o, ?8 a$ }# e
{
7 u) Z0 {/ {/ {- t CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
2 q) K1 m1 ~- q0 `. N if (pItemElem)
9 J8 w; w( Y' m- d' c1 }) x: J1 C5 T {
' u% Z5 M2 e( {1 G2 X) M, L if (IsUsingItem(pItemElem))
, V* t {6 W4 L6 H4 N. R8 ~7 J% ` {$ o5 `# L5 x# ~$ `( t; f" k9 z2 T
//这个位置无法放9 g! L0 h8 ]4 S$ ~0 d1 i
nDestPos++;
/ p4 [/ A4 F( D' P }# @- Y, |+ [) `: L/ B, {4 r
}
( u! ]' U* S" q9 P$ D BYTE nSrc = pInvSort->GetItemSrc(i);7 k$ c4 _ x& e; Y( e
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
6 I. H, `: P1 W$ Q. c; K if (pItemElem)
% a! c: M( K! \4 i, g {
, v. v5 t/ o2 |7 ] if (IsUsingItem(pItemElem))
# _* m ?4 j( ?7 J* p5 b5 _; J {
0 H4 _: _0 i6 P9 ]/ ]! z2 I0 J //这个道具无法移动,跳过
' U3 D, n+ ~, k) ]0 f continue;
, Z6 [! N! F; F) b& q' U- J }
( Q: z5 W* l) w }else{
0 B+ L! R# E5 a( S. m //空位置 不用动
4 n. k( m9 k; X* F9 m X continue;
) k# c. }5 {3 h* b ~ }3 B: F* Z; m2 C. j- ^8 g
//////////////////////////////////////////////////////////////////////////
$ l- Z' Q+ W$ w //开始移动( O2 O! |& B1 R8 h
if (nSrc == nDestPos)
" L) f# C4 W. {! k0 J {
% o0 U% {; v; _# r' x //原地不动2 \- I; c$ m/ F+ B
nDestPos++;7 t% s2 ?; u( C5 o% P6 w
continue;
7 W* m5 k7 l# T g Z- m }! T( ?# C! u, A5 a
pInvSort->MoveItem(i,nDestPos);
( O) ]) p V# q( U E1 M$ ^. a g_DPlay.SendMoveItem(0,nSrc,nDestPos);
# b+ p5 w2 M. i& H+ I! L Sleep(5);
P3 H; h, P7 B6 ?6 i //Error("移动 - %d->%d",nSrc,nDestPos);
6 D; E# F! `# `& \8 N4 K nDestPos++;% w" a' @) M3 Y( @2 Z
}
' m$ I. G X0 j6 h4 `% v //取第一个元素的信息4 l6 [3 M" }9 o$ K* ?9 }
/*( m2 T" [9 P! i' b$ e% Q9 D
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
# n s8 |% Q& u; _- ] {
, ]/ a# z' t$ z) c0 M Error("Move - From:%d,To:%d",vItem[0].nIndex,x);9 D0 ~ @7 F7 |" B" `+ J
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);4 D# g* ]# l; R* w2 j
}( c: g% [$ @; s" \" R
*/5 G' g# g1 ~5 G" h6 P! P
//////////////////////////////////////////////////////////////////////////4 a& Q+ t6 m' b" Q" U' J. t
break;+ n5 Z9 ?0 R8 \, e/ B
}% D" ?7 D0 A' u8 U/ O) M
}
5 X" F4 x: z6 P6 X) r: H J}
* {8 M' ~# K, @9 cm_wndMenu.SetVisible(FALSE);
% z- S/ m7 @% j0 Z/ e+ u% x9 |/ S: c+ C
--------------------------------------------------------------------------------------------------------( M, z9 }# F4 Z# k/ R; e7 D/ \ I
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)# F; o5 T: @( y( P
{, v- \' G0 J5 C. ?1 Y# n: u
BaseMouseCursor();+ u/ p* V8 K; U' m$ [8 A
}# l; K6 B* n! S5 [3 x3 \
在其下添加:
0 l/ n$ F& h( L' Svoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)9 n; |2 k# i7 L, V8 P/ G% y9 e' J9 r
{( Z# }5 ~" A% Z
m_wndMenu.DeleteAllMenu();% h/ |6 E5 N _; n
m_wndMenu.CreateMenu(this);
2 }! o, O/ e+ q% P6 ?m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
, G1 C3 ]! Q% f! q
: h6 P0 i& x' J' g4 ` lif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)) Y p9 ?) h# }! V# V( v5 c& _1 B+ C4 o
{
* o1 u( V% S0 V) _1 o+ } //P以上级别才可以删除所有道具
3 r: T9 Y3 f+ d6 e m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
2 x2 M8 U/ \ X G4 C2 _}
7 Q& \1 y$ @; a- |5 nm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
3 T* n3 d& F8 P) w+ J: E7 h6 T* sm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );9 _! i# r+ e6 \- V) v' n
m_wndMenu.SetFocus();
( p0 w( \! q& a8 }" g& Y1 ]' f- B4 a}
. Q& q8 N( i& p5 L------------------------------------------------------------------------------------------------------------
) ]9 l! h3 h; c2 I7 ]*************************( X. h) \9 m) {. K" W9 f m3 K
WndField.h文件; Q a" F: f8 N! f7 n9 ]; o5 y' b
*************************$ @' Y; I W4 y" Z: u8 X0 \! Y
搜索:BOOL m_bReport;9 ]: k. f! n8 N3 f3 W! `0 G+ P
其后添加:
; K- `* Y' j5 t( E8 o* B+ hCWndMenu m_wndMenu;
- d# j. D' M/ n搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
! I1 s( V$ \1 m& G/ r* F其后添加:
8 i; b/ S( X3 Z# J! k. V9 Mvirtual void OnRButtonUp(UINT nFlags, CPoint point);
" [. i5 `9 P+ z" M' Z; R1 o2 t& K( v0 J- a ~3 ?8 j' f! j
- L! X3 \ T$ h! e |
|