|
|
源文件中_Interface文件夹下WndField.cpp文件7 `: R- Q& e9 v3 n6 @- P
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ), f/ R* {: y ?! h, F' C. U& M
! ~6 C9 P! N: y9 W& estruct sItem
% l* O/ b: B7 Z5 V{
7 b. a0 a' ~7 R: U" ` ^DWORD dwId;
, s- B5 I% e5 g: a, j0 L# q+ zDWORD dwKind2;2 |( p# u6 O, g% u# c) p
DWORD dwItemId;
5 h( _+ _( |! J; [BYTE nIndex;
+ Q$ {/ A: e: K" {) SsItem(){9 U: p' m) l) t9 J1 D0 U
dwId = dwKind2 = dwItemId = nIndex = 0;2 G0 ~' W8 Q5 Y8 y
}
/ `( Z3 q. D6 o# j! E0 Gbool operator < (const sItem p2). ?1 e% c* M$ d( t
{
9 U7 k% V$ J1 L4 g. z) ^0 K! V if (dwKind2 == p2.dwKind2)4 A5 C5 z8 _ ?* U+ m& E8 F. f, @5 k9 n$ U
{% u2 {! [) q0 e3 W
return dwItemId < p2.dwItemId;
( I4 u6 M5 O: N3 N }else{
3 X- p3 @. a* I0 ` return dwKind2 < p2.dwKind2;7 t/ e; I4 ^! P0 {* Y3 D
}( x" e8 Q7 U7 t- O# g% `3 n2 j
}: j$ X0 d( y6 @3 p2 u( T+ k
}; M4 S; b, ?3 p0 R3 Z5 Y1 p
class CInventorySort0 z% K! U; u7 b( X1 T- t
{0 K7 F: d/ V7 U
public:
' \1 g* l/ y& p K, P. mCInventorySort()
" K7 W$ j$ \& S+ m9 y$ h{
, R: h5 v# z. R) D5 X7 g: H m_dwPos = 0;1 d( z. x: y' u7 D
}9 b: q, U" W4 ]7 ?6 L. d" Y' a
~CInventorySort(){}! S0 I; x" N- O
private:
& Y1 C8 H( @5 f+ b+ J* i/ xsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息5 ?, ~2 G) H3 `+ L, m T" J2 p
DWORD m_dwPos;6 g, ~8 g, g9 a6 k
public:
* `+ {" \5 \. y0 p1 yvoid Add(BYTE nIndex)* `4 ^: l4 r5 E% E
{
; s# q7 l3 I5 M3 X' d if (m_dwPos >= MAX_INVENTORY)& E I, Y' W2 D4 @
{1 P+ |/ a1 J7 I/ e% l& _
return;
* K! X4 s% g2 L# @ [ }: v6 _5 S* M3 X
m_Item[m_dwPos].nIndex = nIndex;0 }$ X: a) ?2 ~. x* ?& J: H
m_Item[m_dwPos].dwId = m_dwPos;
1 X8 V' E' X, m5 }, T# x( I4 { m_dwPos++;
* r2 l' J/ j& x! x N}
5 \; Q* J4 ]$ P' IBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列; b0 v* K$ k% O& N, n
{
/ E7 a" }( L3 Z# v* O7 S K$ y* h4 |6 _ for (int i=0;i<MAX_INVENTORY;i++). {' Q. F; ~3 l/ {6 ? o& F( A
{% t* _0 }7 O. h
if (m_Item.dwId == dwId): v# e7 p1 w& {2 A: X* V' ^! {
{
( F9 R) a9 Y' \7 \' |/ ~, g return m_Item.nIndex;
& t+ p; v$ v- [# b6 v; G& b }
7 v7 i+ B" M7 m( x& q }0 C5 O. L" y5 L6 d4 B/ K
return 255;
6 I2 i3 R3 E, u v8 }; {. s0 f5 W* Y}' j) L: v0 K+ H; G
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置8 g* b6 b; q+ U2 S& q0 m4 A0 e7 W3 m
{
0 L7 a7 m0 w' W8 D, T+ l BYTE nTmp = 0;
( P6 Y' V9 x( M, ~) a5 _. V8 S9 Q7 o bool bDest = false,bSrc = false;
( g2 ^, V% Q) I3 X O for (int i=0;i<MAX_INVENTORY;i++)/ p" \ O5 K( S) b+ t' Q
{
' m+ p$ V+ e$ F+ _: P& D" Q+ e if (dwSrcId == m_Item.dwId)
+ P- c: k; d+ }# T8 h% x: V9 J {
$ @) ^% w0 q' y; Y/ x //id相等 则 改变对应的dest和src
* I, D8 i R* o9 H; j$ I x7 b( E$ ] nTmp = m_Item.nIndex;
7 R0 ^" i/ i G m_Item.nIndex = dest;
( }0 ], n' S+ z( e8 K }
# d$ R* K& ]# F" D }7 B; _) j t" W- z4 d4 _- N- F2 z3 b
//临时数据保存完毕,交换开始
# W0 Z; p- d( s: i for (int i=0;i<MAX_INVENTORY;i++)7 `$ w' h, S% `: H$ e. K
{. x' m' n' S2 o" P
if (dest == m_Item.nIndex)
- a' R- v* Q0 b( i) C {- E( D/ q: z. s% C7 N
//id相等 则 改变对应的dest和src
6 k/ C- N9 z$ t* ~3 I1 m) W m_Item.nIndex = nTmp;
2 }5 D( H5 x1 c$ U }1 y: o/ g( M! n9 ~
}
) V8 y( M% c4 F( p. q$ J}
5 f. s- e7 _1 K$ `) {};# B/ U$ z* L+ o+ C f9 I! {
-------------------------------------------------------------------------9 E. Y: [+ z _% _8 w5 p1 Y3 b7 W1 u
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( d% t( C) E/ n& U0 x+ _/ B
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);5 J0 G3 y2 \1 f' j) a+ R( A
紧靠其上添加:
: V3 L. d1 q. R8 V, y2 Xif( pWndBase == &m_wndMenu )
& _2 {7 Q: ?9 b C# s/ M6 o7 y# Y{
3 S! i/ B+ s* F3 y. Q L# p switch( nID )0 e# M: O) q1 x G
{
7 y0 f) Q* [" C8 k4 U' k case 2:$ y' d$ ~! @: C% n+ _# M
{/ S I [+ E$ |$ }
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);$ z& u$ }& S# o, K+ B7 v* ]: l
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 c+ g; m' U/ n {
0 W/ o6 m4 [: T/ { break;
0 f0 V# h1 B4 G; z; X2 B$ E }
* S8 `4 |0 g! c' ^9 @) k3 k for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++), m+ s: v% a/ s& M
{6 T+ [: J9 e& \+ E1 J" R `. ]7 s
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);9 h0 N7 D9 }. a8 U; \6 c9 C
if( !pItemElem )
s$ B3 ^/ U, n2 j& o continue;
O8 l3 z# Y( K) s4 `9 c if(pItemElem->GetExtra() > 0)
# T; e2 O F2 z continue;3 [1 e3 h) I+ ?# t2 T8 k: h% t0 @/ O
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 8 Y9 S5 e4 g/ x% E. v& X
continue;8 v: O/ z8 O, t9 ?6 U! x& c4 F
if( g_pPlayer->IsUsing( pItemElem ) )
9 s# J% b+ i) e% i continue;
/ V' G0 p/ n9 |# l+ z if( pItemElem->IsUndestructable() == TRUE )& U$ ]2 m' r$ x* T `7 W
{
; L) @) c2 r/ Y& b5 X- |& v g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
$ q0 I1 \; {4 b/ e( d$ Z' Z continue;
' K, A8 T1 _2 Y4 j- `, A( C }4 ~( y" o, R3 h" p6 n
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
1 b; ]" W2 J7 y1 N }: l) P* b& D5 K5 Y0 l, C! t
break;
) C+ W6 n2 f( q0 a* s# i# |9 E1 m }1 F1 S- |8 \1 s0 f- j8 q
case 1:1 Q% J1 ^% B f7 a. o# c
{
# X$ |" O/ U) L; O1 e //整理背包( t8 P, C9 I# B# C; a
//////////////////////////////////////////////////////////////////////////! F1 b) o0 U! ]( v/ C2 V
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );% m) i5 X2 Y* Y! J8 B& Q' c/ ~# ?
/////////////////////////////////////////////////////////////////////////// ]) ^* P$ _* p9 H# l# J$ e
//////////////////////////////////////////////////////////////////////////6 X$ ~3 E6 {$ B
CInventorySort* pInvSort = new CInventorySort;
- G- m. P4 V& X5 T vector <sItem> vItem;
0 P; ?0 i% Q" G vItem.resize(MAX_INVENTORY);//初始化大小
* ]$ |/ v A2 |) E //////////////////////////////////////////////////////////////////////////
9 S8 X; R2 _! p. G2 D //填充数据
- V O0 x9 r) L, _5 e$ Y for (int i=0;i<MAX_INVENTORY;i++)/ {! A( E8 {6 ~4 L5 d" r2 ?
{, k; f& O2 D6 i) [
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: s7 @' A! q/ G& a. a+ ]4 | if (!pItemElem)9 O' I X% g, [9 l2 n) `$ d# |
{9 S" t% H* C' Q5 | i
vItem.dwKind2 = 0xffffffff;
+ R' m, y& {( {4 a" e3 B# F# X vItem.dwItemId = 0xffffffff;
+ \9 @( z) G( P1 {5 y+ o vItem.nIndex = i;+ C5 ~) e, ^" T. ?& \
}else {+ e8 m" I2 s. {" i
ItemProp* pProp = pItemElem->GetProp();
* o' m6 ], f! b8 Z D$ Q1 p vItem.dwKind2 = pProp->dwItemKind2;
- i* J/ m7 { h! R- q! q* E/ t vItem.dwItemId = pItemElem->m_dwItemId;
$ N+ k) ~0 N3 M+ w1 B$ k* A vItem.nIndex = i;( W. D. U$ r( z# n8 i: z5 I( Y
}
7 u: M2 ]! b- L+ \1 \5 z //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
2 s8 e2 |# F! w; X/ T }4 t) m$ a2 p* k5 r' r7 F W) w! d- k
//////////////////////////////////////////////////////////////////////////
& N2 n& z" K! Q3 l. w' l sort(vItem.begin(),vItem.end());//排序; ^+ b0 d* G$ r% w; e2 P3 E* r3 V
//////////////////////////////////////////////////////////////////////////
8 V( J9 O0 a5 ~1 w //交换
1 z& J# }" r$ i5 A7 [& u$ ` L) i for (size_t i=0;i<vItem.size();i++)
9 T6 E! n; n- i$ } { Q7 K8 A" r( E k
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);3 h+ W) K2 M0 R+ z. y
pInvSort->Add(vItem.nIndex);
4 k# F3 Q- d3 x4 j8 U5 x }6 v! X7 r9 s! B! a
BYTE nDestPos = 0;9 I( P" q( O$ D K6 U
for (int i=0;i<MAX_INVENTORY;i++)
2 P( ^% y/ f2 I' R+ H {
' }7 B$ f" H& z' y! b CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);( k3 ]! V$ q9 n6 [) M
if (pItemElem)
) p1 n8 K, o' Q3 u+ i+ ^) F {
7 m/ Q! \+ b8 O if (IsUsingItem(pItemElem))
9 ~, G/ L, q. o: d' @$ u8 d {1 P: w. c7 F# w
//这个位置无法放
' F9 c7 z, Z& F8 v nDestPos++;
: Y( t' N- z/ n# {9 M5 O$ J* x }
# t2 t9 Z& F. e2 C8 f" d }
- y/ U: h# [2 O. i4 u' }* S' k3 H& ? BYTE nSrc = pInvSort->GetItemSrc(i);8 h# k! u4 _) g! s9 {8 t+ S- H
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);6 @- X+ C/ W7 t& b2 z; A6 C ^
if (pItemElem)
8 L# C4 A6 X. x {: E# j0 L9 I3 Y% @
if (IsUsingItem(pItemElem))" d; F& z+ t4 O6 M6 j9 v
{
9 j# Z: V; Q- s# A9 R% t! q* |6 d //这个道具无法移动,跳过$ v) I+ `4 w3 ], t" O" s; Y7 @3 K
continue;' y! w3 d O7 t0 X1 F3 I
}; w# P: G8 |. n6 _' L& V4 j
}else{
- g8 @& ^- Z( _0 J9 a6 m0 D# D //空位置 不用动
% b) Z4 T" I% _- h3 t continue;
& ]4 B0 v5 L8 m9 T) U6 m( d+ `% o }" g+ k' r+ k' E& B
//////////////////////////////////////////////////////////////////////////( H: @' f8 p' m+ L
//开始移动
5 K$ M, m/ t+ r% } if (nSrc == nDestPos)/ B9 ~3 Q5 z9 O/ ]5 q$ t4 S' m
{# f- c2 R! o" k/ S+ U
//原地不动8 N2 h* ~- b$ b3 @
nDestPos++;; d, M' q0 w- ~3 R
continue;* W0 [ ` l" y3 Q
}
/ B) q! ^& Y- m# j% h& u5 K( z9 p2 i pInvSort->MoveItem(i,nDestPos);4 @* p8 b7 v; m# N# O$ J9 G. X8 D
g_DPlay.SendMoveItem(0,nSrc,nDestPos);% z1 \- J6 e5 r# @- V) M6 b" i
Sleep(5);4 |7 ~& V) M6 H# B- R
//Error("移动 - %d->%d",nSrc,nDestPos);
2 f) n7 u, ^( [4 d4 \! ]* U" n nDestPos++;
4 L! b, L. _- i7 y( v }
1 z: C* L; S2 D {8 e' K4 T4 D //取第一个元素的信息
! _# T z/ c$ X4 O' s& ~& q /*
/ ]1 `) f+ _% a6 g1 Y if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
0 |! [2 l' a) f, m, d% A! m {
+ y0 J' G* A$ G" T. E Error("Move - From:%d,To:%d",vItem[0].nIndex,x);) U) \' X; e _9 g% d% K
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);7 b6 d- R- A; y$ M) T
}6 N5 Q( i% p! H, _& `: J5 w. n
*/
m; K/ V! Z F; _$ f1 F' O; b //////////////////////////////////////////////////////////////////////////
; q+ Q' B+ w6 S break;. ]3 z. Z; V# x5 I- X
}
% y9 X$ M: n$ r P! S" M& ^9 G }
: l6 G8 w8 v# n3 }7 y}$ J+ J M* O: Z* u4 t$ Z" p0 K, u
m_wndMenu.SetVisible(FALSE);
4 U4 H- K' {: q* y1 m8 i2 f" B( H2 \
--------------------------------------------------------------------------------------------------------% U1 W% u8 A& J* F+ }0 t
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
* D0 ~2 p! I; ]$ y8 C5 A1 E- T{
$ \+ y% e" l u! d, NBaseMouseCursor();
" r1 a2 t2 c, I}
6 ]- G7 j' J; G, m在其下添加:9 C7 r- F7 N9 o" i! ?5 h$ z# ^% v
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
1 W: n$ X8 ^8 `. K+ q3 _{4 ?7 i1 i. |7 b+ _5 S2 q. I
m_wndMenu.DeleteAllMenu();
* ~& v7 i$ I6 Y( r& x' a! Tm_wndMenu.CreateMenu(this);
( N* N. f8 _% Am_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
" }7 l% L8 W6 `9 E" ]
9 @3 T& U- E; a1 v6 aif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 L3 `& d% S$ B( `
{
L/ L5 y+ S) Y% t5 E, q% O //P以上级别才可以删除所有道具# \- B2 T6 L( [; |" @ G
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
- w1 a0 \5 H5 _# V N, l}
+ q% p0 j* y. {" X/ e1 ym_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );! w& x2 K+ U8 i0 _, F2 J
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );* f7 `8 {% c& }4 {
m_wndMenu.SetFocus();
+ I8 C% \7 ^& v}; L6 w2 X, ]! ~
------------------------------------------------------------------------------------------------------------9 U6 U1 o1 g& y7 v4 @
*************************- M; A/ Q) u+ f1 E: e5 E( H: m
WndField.h文件# o4 u! x0 j% W! w; ~
*************************
8 ~7 d* u. I- P6 G, Z, e- x搜索:BOOL m_bReport;+ {. e* B6 D# o8 G
其后添加:5 M; `* l9 U' L5 u V2 U
CWndMenu m_wndMenu;
. r Y5 J. F" }) \8 W5 S搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
" N Q; V t2 F% G$ b- X, B其后添加:' }1 e4 m$ ?6 ^1 \
virtual void OnRButtonUp(UINT nFlags, CPoint point);9 a) F+ c) ~7 c7 ^
& L3 z: f- J# r7 Y, i; w1 j" ~; @: s
|
|