|
|
源文件中_Interface文件夹下WndField.cpp文件* }* R; ^$ L! I* V$ H- u' e3 a
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
# R2 h5 T. a0 J6 v V0 C
4 c7 q7 w7 N: n5 g* g3 Ostruct sItem
( W) w5 Q6 }; O! K4 k9 h: y{
- H4 b; c, B/ X$ sDWORD dwId;' @' p/ d, g, \* k3 H( `9 ~
DWORD dwKind2;
7 S7 E! t: ], ~6 E' XDWORD dwItemId;" s7 Q- d2 r0 b$ X) Z8 l' q: F
BYTE nIndex;
% T A5 r! o; ]. e- usItem(){7 ] y9 r3 k& }9 N& a
dwId = dwKind2 = dwItemId = nIndex = 0;$ M( T0 [0 y% Q4 v3 R! C3 v
}
5 A5 D4 D0 w( O6 C" f- Tbool operator < (const sItem p2)/ v+ l5 b% }. c5 |# Z, l
{$ k r' u0 X' g0 ?$ V
if (dwKind2 == p2.dwKind2)
. c, V4 b6 V& N r+ d7 Q# x: G1 m6 |$ C {
& B' }. A( o8 p) Y+ j' r return dwItemId < p2.dwItemId;
6 Y; [5 E8 g7 ^$ \2 A4 H! { }else{' ]% ]; z+ r4 j2 j: h
return dwKind2 < p2.dwKind2;
& b6 B& M1 F, e4 u }
$ z* x4 p0 N# }- A5 A& |}, O$ O$ ^) C) `! K9 {: e" i- Z
};
/ l2 I1 k+ ]% `$ x: Q; V ] N8 Gclass CInventorySort; j% q$ C( p5 i' R) p- [- D
{
2 }% M6 `* l* ~# jpublic:5 }* G4 j( N& O- B) g
CInventorySort()" ]" q4 k) P- q# a
{
9 v0 S) K. r; s. M6 \ m_dwPos = 0;
9 \- T$ i; K0 w# S$ I$ Q9 M}
4 C/ L8 t$ N' w! _: {7 k; F u~CInventorySort(){} Z' O2 ]' p; M$ c) L
private:
r3 O/ l$ p; G0 e+ [sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息 b/ M' p. Q, g9 m: r2 q& a
DWORD m_dwPos;! C! B Y) R& A# o! Q8 v
public:
( T% F' g7 m- o" Q. Xvoid Add(BYTE nIndex)
; h! c: G& W' f; j1 z# x{: }: F# D+ B* J4 h8 {( Z* y2 }2 H
if (m_dwPos >= MAX_INVENTORY)! ^* X" O: A. ~ E( L5 w" }" M
{
, f) @0 o% k J( z return;
# ^ G; T" m P3 Z% E0 |! g9 A$ V }
0 O2 p, `. X- ~/ z* Z5 v/ q m_Item[m_dwPos].nIndex = nIndex;7 [4 H; U- b5 N
m_Item[m_dwPos].dwId = m_dwPos;* m& ?2 s. t. c; V/ q
m_dwPos++;9 \4 M8 `) a' b; Z
}
) Q6 v: E, ?, O; ?6 g' x2 A& l; y! rBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
1 O! e/ d6 n0 q* O3 z{
7 d2 [! |1 w9 q% i' b. s9 @ for (int i=0;i<MAX_INVENTORY;i++); f: L7 L2 K* D! e
{% G& i l1 m: Q* \: U
if (m_Item.dwId == dwId)
. V# v8 r/ L/ o+ R, v {
' X2 S5 r& a2 `7 C/ _' y return m_Item.nIndex;
i( S8 u4 O5 P5 T: n }$ N I% D, _3 S; k$ T1 A
}' Y. o9 Q8 K2 D2 _
return 255;
/ u1 u4 f" D9 B}
+ w( t5 [* \% v |' n/ {: s N0 fvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
" c8 @% F8 V' e1 ]{
' l) ^: h, O: V! J/ s) ~ BYTE nTmp = 0;1 K7 ~4 X( p& V/ Y: i; d$ x
bool bDest = false,bSrc = false;
% @% J- H/ A8 k3 K% g* Q9 _ for (int i=0;i<MAX_INVENTORY;i++)
+ r# u% U# u1 Q1 j) Y3 V {
q+ p1 g5 Z( C$ X2 G if (dwSrcId == m_Item.dwId) y8 j8 \/ J! }9 j
{
# Z; ?0 u* X! N/ J& i6 C5 r //id相等 则 改变对应的dest和src
; h- f% D& r4 g7 n2 J nTmp = m_Item.nIndex;
9 l( R7 C) X' [+ N m_Item.nIndex = dest;
; M6 L7 Y3 Z9 G4 E& `5 y8 ], r }
6 q7 f S5 G( `; Z }6 D: ?, G9 y3 H; a7 |! q
//临时数据保存完毕,交换开始
: I/ J: Q3 ~4 e( s- s: E# r for (int i=0;i<MAX_INVENTORY;i++)% ]! C1 l' `! `' f/ U
{& ^' e' r4 O4 L0 Q
if (dest == m_Item.nIndex)4 U2 t s- F$ @. S
{
: _* u9 m- S( h+ Z% f //id相等 则 改变对应的dest和src
) a ?+ O0 o* N& T7 z m_Item.nIndex = nTmp;
( O$ e; U" F( X- L }" B3 P/ J7 E! a. l
}
' S3 N6 y3 a% }- C4 q}
3 O+ V' Y" O$ X/ W; I( m ?};! Y- R" N) b/ h( K$ o0 p, I2 _
-------------------------------------------------------------------------
* A G% r9 ]: Q& q% |4 l% G! N依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ |1 K; k2 D- C$ K
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
, f# s! m& g+ w$ H- M5 r% I紧靠其上添加:' O; R! J; Y, o2 H& N# X
if( pWndBase == &m_wndMenu )
2 O2 O, T, G. N' u( _2 M4 O3 o, g{/ \4 O7 Z; e5 s9 R- Z; m. z9 ^/ e& s
switch( nID )
* E# `, d2 n o6 V {
7 o% b* h9 R$ t* s case 2:
0 L" ?+ O* M4 h- ]; I W {5 E* m7 f% \- p* T# `
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
4 T/ G i; \) @" u if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ y# \: F* F$ R0 S/ d7 L2 c
{4 y! R& d; Z* F6 h
break;
$ Y( R: }8 y2 S L( r" ^0 o( X }
& |. r4 u+ ] F; n for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
3 Y7 X& E% M# M' d4 r9 H7 I {3 N0 |% \% Y- l: Q" c
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
& H% q- S. ]# F* `3 j if( !pItemElem )* m% b f% C- D3 q- i2 C% F
continue;
) J2 [* b# q% l$ v5 _ I if(pItemElem->GetExtra() > 0)4 G) L9 z( m; }% M
continue;+ T4 w; G, P" ^2 Y
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
* [& B j5 Q, _2 @$ \- Q continue;
' ]; @6 {1 Y9 c/ X4 x# ] if( g_pPlayer->IsUsing( pItemElem ) )$ T4 N# b4 W3 d) j; X
continue;
& p+ E0 O: j( y4 h3 M7 k+ r if( pItemElem->IsUndestructable() == TRUE )
) Y8 \$ L1 Y) F3 t. W {5 ]+ f, n: w* h$ ~4 K k4 b
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
# A( N! S; i3 H4 K$ w continue;
% [6 F3 s2 Y5 o: |3 B2 { }! K% G% v: e( r4 b" G
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);# G' ?' S! n4 N0 c( s" ^/ I
}( g2 {1 r! c: _6 ^- S
break;, q+ U6 L- G3 ?: d+ K# T+ K
}
; o) ]5 @4 G6 I A) N9 x case 1:' g J/ c, t$ ?# l
{
+ H4 O9 ^% }% u1 L3 i //整理背包8 b7 K& ~* A, @' h, H; s% Y
//////////////////////////////////////////////////////////////////////////
) |! ^. E5 I! L6 K //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );9 X) w3 L+ o p" |9 e3 G# e
//////////////////////////////////////////////////////////////////////////4 ~/ L" q" D7 |* z: `6 f" u
//////////////////////////////////////////////////////////////////////////
* i7 D/ e4 e, `, t CInventorySort* pInvSort = new CInventorySort;+ K+ |2 s- W5 x6 Q* X0 {
vector <sItem> vItem;
# N! K6 A( G% q8 ?6 w vItem.resize(MAX_INVENTORY);//初始化大小
7 {* J L/ h2 D+ U5 {2 i //////////////////////////////////////////////////////////////////////////+ J% C8 |; `3 i$ Q
//填充数据' s+ j( ?' n: m0 O* R) [1 Y; m
for (int i=0;i<MAX_INVENTORY;i++)
3 {& ~5 X1 C7 x" \ {% e, Z2 U9 U# |! I' p
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 l; p1 p# B: { if (!pItemElem)+ e. j* {/ h" U- m* x2 Z% n1 x# ?2 E
{0 a( e) K% _4 m$ i4 p. T6 K
vItem.dwKind2 = 0xffffffff;
1 f6 g* M; y1 G# B+ r* N# k vItem.dwItemId = 0xffffffff;) \, R e6 ^9 M3 F5 T" v f3 W
vItem.nIndex = i;
; s7 x# N0 `1 q; e; J; Z }else {. N+ [8 I5 P# I5 S
ItemProp* pProp = pItemElem->GetProp();, ?/ ~5 A+ g3 h" E2 k2 |& V
vItem.dwKind2 = pProp->dwItemKind2;
/ ^9 D4 l$ e4 r& h0 s: [, u vItem.dwItemId = pItemElem->m_dwItemId;
* i3 e0 `6 M8 ~; V: D, g vItem.nIndex = i;' o1 }3 Y/ H0 M! a1 q5 J
}& l" D: @! y. E& R0 }4 \
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* E' K* M" q+ o. T9 ~& [" v" h
}
' K l# e |; o3 {8 ^ //////////////////////////////////////////////////////////////////////////
) i# k; o2 O5 b# p- P& E; G sort(vItem.begin(),vItem.end());//排序" |8 ^/ l! h# }& l4 ]
//////////////////////////////////////////////////////////////////////////. b" [; G+ E* u" x7 T* M
//交换
& A8 p A* y; ?& f1 h) c/ c for (size_t i=0;i<vItem.size();i++)
: t. ~0 u' A. I {
& H& X8 i/ E. u, A1 X' a //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. J! x3 {7 E" ]) G
pInvSort->Add(vItem.nIndex);# V% d- f- N+ F
}- N8 U7 B, t ^
BYTE nDestPos = 0;
7 A- g F3 \. K) T for (int i=0;i<MAX_INVENTORY;i++)
; N; Y& d4 R# [$ b, L {" r6 @) I4 ]: @9 H8 N ]$ v1 J& b0 o
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
8 T# E: @* C* \* I, W) w! n if (pItemElem)
) S2 E& K1 n( k% g' c& I# R. G {" q% A w4 L! Y
if (IsUsingItem(pItemElem))! n* X- _; J" N% x ~0 ]
{
K. T8 B6 \) w& n8 r/ H //这个位置无法放
+ v& ~- F, x+ I nDestPos++;# {+ R' ^* o% l, b( A$ H1 Z W" y
}$ Y1 Y2 z( F$ Y
}2 E' d* g" o) K0 n9 I' N
BYTE nSrc = pInvSort->GetItemSrc(i);
' T! K, }9 _. h9 _ pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);, I8 {2 _( l' W+ R
if (pItemElem)
, P9 C6 b$ I: s* H2 X {/ B/ `: T( o5 p* U/ E, [3 {; |
if (IsUsingItem(pItemElem)) T. U7 h3 s! [* I
{
; ]9 @' K; K2 E" i& j+ H, I/ ~ //这个道具无法移动,跳过
: \$ G" Z! z9 H! V3 @3 g continue;
- I# G6 @$ K0 e4 L# l0 s }
1 U6 ]2 `$ f/ P* K: K }else{- W0 c* G1 C5 d' w1 R8 n
//空位置 不用动, _$ V6 W" Z. D& x
continue;
7 W4 V$ _* c- C5 e1 K }) U8 m; ]* ~1 d: t4 K
//////////////////////////////////////////////////////////////////////////; h) C i: F, \: x! {
//开始移动
% ]3 }/ W& [& J d. t if (nSrc == nDestPos)" B( j" t9 }" c* b% p+ d
{
# P. {" N; N. L# u$ \3 h //原地不动9 L# ~! K" |+ f
nDestPos++;0 o* H. n, A8 o1 L, {
continue;3 V" @, P( `. M6 o# @" u6 o I
}
" y6 S$ q5 P5 l5 g9 \+ Y9 X; g9 W* V pInvSort->MoveItem(i,nDestPos);2 @/ I4 o! P7 u' e8 o5 g2 b
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
8 `+ G' d2 A, A2 I2 A+ m6 e1 t/ B Sleep(5);2 ]9 R* U# |" M
//Error("移动 - %d->%d",nSrc,nDestPos);
0 y# T0 T8 ?4 \8 e* S* T nDestPos++;
+ {& f8 E; h% l }* e' s! t$ E/ y* e
//取第一个元素的信息
+ H( e9 r1 _" z; W x* R% f /*
+ x# T6 U3 z" t& h if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)# g- a/ `8 w4 X& v; l
{5 V' t' D$ V2 Q2 v8 E1 [$ R
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);6 M( M$ ]3 o/ A1 y; a) l; i
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);: n" K, H8 \: m) n) F2 P
}% O5 i5 N2 D* b5 m2 |0 D" G- _
*/
; `3 P+ {) X: Q/ e t //////////////////////////////////////////////////////////////////////////
6 n* j4 {) K2 h; m4 Y; A$ p break;% B( M0 x: ^& L& f7 O
}) ]2 ~ @0 ?6 j; z" t( K
} / y) `; Y( V+ R. c
}& h5 y& X$ P' p9 I
m_wndMenu.SetVisible(FALSE);
4 g- E2 O7 L% s
* j7 w- b) w3 q, y5 ?) m4 l7 j& z--------------------------------------------------------------------------------------------------------" j* Z N' } @
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)! q8 U) h/ K: U
{
p! s9 |6 U+ ZBaseMouseCursor();( l7 N; d6 j. [- a4 F/ o, B
}1 V- Q) w6 G' y- U! i" Z
在其下添加:
, p* H5 E: P; M2 u U3 V7 m' N! i6 Nvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
2 j. ?9 S; s" ~5 [{
, U/ }- o' }1 V6 T! W W- wm_wndMenu.DeleteAllMenu();+ |" f0 K5 J9 x; k$ Q
m_wndMenu.CreateMenu(this);
) w5 ?6 P2 f( o5 K+ ]. _ Rm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");* }0 O* v ^9 y- [
z# Y% n' H, |0 T
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
N9 W! b) S. ^) _8 c2 x{7 s0 K- W+ }7 G P- V
//P以上级别才可以删除所有道具% f. c1 n0 z: u7 Y
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
+ Q9 f! G# s* v/ j4 v4 Y5 n}1 M% ^+ N+ G b n' l; b
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
6 V1 q$ m0 _& d. \) }. r8 @m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
N+ `2 G4 x% m) Bm_wndMenu.SetFocus();
5 k$ s2 D% ~6 C! g& M9 V}% F& m3 q) s0 |% ~! q1 E
------------------------------------------------------------------------------------------------------------
: v6 h# Q( u( v6 @************************* A5 ]4 u" _- r( k
WndField.h文件' L2 A3 `( V& E& m7 u; _2 E2 t
*************************
5 y3 A/ F, E# f+ d% A5 W- O% C搜索:BOOL m_bReport;
1 U: ]0 Z$ C: [' w, o2 X其后添加:
: x7 y; |8 P8 R! f3 ?) OCWndMenu m_wndMenu;! o* i2 U! y# e, p0 X+ U
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
2 {7 @) O/ t6 d3 x8 _. F0 H8 L其后添加:0 n: E( q% e; G" x, \
virtual void OnRButtonUp(UINT nFlags, CPoint point);
9 N4 E; T8 f& s( \ K% V
# c6 E9 ~8 l# d' n" \" _. Y
M* Q, o. p+ `- q9 | |
|