|
|
源文件中_Interface文件夹下WndField.cpp文件7 s3 ?* Y% Y/ M$ \7 `
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
m9 I7 g9 h9 Q) j1 H+ I/ u0 G" W, ?' H- w O
struct sItem
' \& T$ r+ K: D) ]9 J{
7 J) F/ ~' V7 o- d5 p6 dDWORD dwId;
% v9 H0 l& \2 b) _' T; s7 fDWORD dwKind2;4 M7 z4 ~* v H* o% D) \6 j& @
DWORD dwItemId;4 Y' W3 N' \+ d/ j) H
BYTE nIndex;
1 {# ~* f) i3 P0 c" dsItem(){! S- ]3 R Z# T" C+ D" \
dwId = dwKind2 = dwItemId = nIndex = 0;
* S8 ~" b. M6 g/ u0 W}
* S& L! @$ @+ ~1 P, A) @bool operator < (const sItem p2)
- i* N7 U, m& i) Q/ v' g{
# X( r+ O& ]# U$ @3 C) o* m if (dwKind2 == p2.dwKind2)
* l( R/ M2 B" [ {
4 z6 z4 X( E" n return dwItemId < p2.dwItemId;
# ?( L( q: `7 a }else{
2 a# }. f7 p, K/ S' M return dwKind2 < p2.dwKind2;
! U" S6 t4 w) G- v4 P }: W3 s' l: T+ ]
}* v; [2 U0 N+ P0 E. X
};3 ? s" P* `% ~# M3 g% J) H
class CInventorySort
6 {( I* Z- s' z# O{
# g- x6 E+ _; x5 K# M; Epublic: D" L5 G7 c/ V8 [; _ \
CInventorySort()
, R @- \0 C9 I! s& J{
0 W$ w: Z, Q# E2 N m_dwPos = 0;6 ^! ?6 ~- W" g+ p/ ^9 C0 S
}6 ?0 F; h; n% `# A
~CInventorySort(){}
( r" t2 {% `: M' m+ A4 K% Sprivate:
. m" B: i: G3 w: A, NsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
* G- Y* L- S4 H' Z( dDWORD m_dwPos;
7 n& y% Y" ?" i1 fpublic:
: s" x" v: s) i8 A0 @void Add(BYTE nIndex)9 G5 U2 J3 b% e4 }8 e `
{0 ~) g5 y' h' H( q& ^7 e
if (m_dwPos >= MAX_INVENTORY)
: _( V1 G( A9 g6 a% r {% g1 P! H z$ z& G8 i7 {7 X
return;( U! _, E0 J1 D% l" n
}3 ~. Z7 W0 ~9 B( h7 H7 \' q. G
m_Item[m_dwPos].nIndex = nIndex;9 h5 k; ~% K& v- E3 _4 b% D/ ?) G0 C
m_Item[m_dwPos].dwId = m_dwPos;2 a/ ?) w& M2 O, D1 U2 d* @2 v
m_dwPos++;+ p0 l* j- t8 N# M
}
, f. i7 |1 X' R7 [ n8 |BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
7 q. b5 h0 c" G8 n) n{
. Q9 @. Q4 ]- h/ v/ u for (int i=0;i<MAX_INVENTORY;i++)% @ G' b8 {& q Q- m: t
{
$ y- e: ^4 u# J& z# { if (m_Item.dwId == dwId)
$ m/ b1 D$ O# N0 _ {
; R, N3 x) L; W' i& J( ? return m_Item.nIndex;
' N& Y$ w2 @4 G6 k0 F% D2 b. _ }
# d4 D4 l3 B! U }
; Z/ o% m8 K! F* }! C( r7 d) w return 255;
% ]. p+ A7 l& j% |0 l}3 s$ C$ x; m5 O
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置% o' @2 T% L' C4 v1 k
{
0 w E& F2 U( ]+ F9 g1 ]! w BYTE nTmp = 0;" ]8 ]8 J" w0 l) |, v
bool bDest = false,bSrc = false;
$ E4 n9 |5 r2 v0 R" O# m7 l A! N for (int i=0;i<MAX_INVENTORY;i++)
& e* b1 p) J5 U6 e3 h* t+ F' e {
7 g8 J- W% p l* I1 z if (dwSrcId == m_Item.dwId)
$ ^8 l6 E) V! W; Y m7 X8 G8 h1 d {! E0 N6 ?# Z/ f2 b' n5 a
//id相等 则 改变对应的dest和src! H: |8 U4 j# [' s5 W# _
nTmp = m_Item.nIndex; k8 W& z: q+ [0 O
m_Item.nIndex = dest;0 A: N3 q; V% u
}
+ [1 G1 a1 s+ s1 t3 Y1 C% d }
6 ?- ^: Z, ^( G& ^! \ //临时数据保存完毕,交换开始
9 ^. E1 n) P! m* k for (int i=0;i<MAX_INVENTORY;i++)
% X f: @2 g8 P. W7 _9 X {
/ w" B' I# m! F; |( ^ if (dest == m_Item.nIndex)
' L2 s; c1 ?& J, c% ~ {3 C3 N- ]' z& t: X+ p
//id相等 则 改变对应的dest和src/ Q) }& }, p# \0 b$ p/ z
m_Item.nIndex = nTmp;9 R# X5 G- m# a, b t
}
# U E7 ?+ @( J }+ a b; x) G" {
}
3 B9 U7 q( L' b8 a# g, I+ G P# ]};
1 s1 x& Z2 p6 u5 y) X2 U-------------------------------------------------------------------------0 _# v, R9 }( g% x0 K) D9 `: }
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )2 h. j* J2 u' [# g; v
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);) h( ~! ^/ W( j% f+ c
紧靠其上添加:
2 d5 O! Y$ ?% `" H7 ?- I6 qif( pWndBase == &m_wndMenu )
& u5 m) X; w3 p5 j# m& f$ v{
# S6 K& y* G0 X switch( nID )! G- y7 Z! c9 U* W
{
/ ~( I; m. N( L6 ? case 2:3 c8 b4 r8 R h/ ]
{
: y7 i( C8 @6 S9 t+ | //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL); ]' i. K) ^9 \/ K5 \
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); V) @4 `2 R6 D
{' x, W, ^& j1 |2 z7 p* a8 ^
break;1 C4 v3 j) j* A" t/ z
}3 K' j5 x0 ], i% N
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++) u. r$ |* D4 p6 y/ V8 i
{
8 Y: O! F. d$ F; Y2 [ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
( L1 J" i& a6 V% v if( !pItemElem )
- |/ E/ B4 x n' K) g& X w& M! Y continue;
4 {6 P0 t% ?" j4 q( f/ k; b; ^' Q if(pItemElem->GetExtra() > 0)! I- B' O. I% Z* p" ]9 a! S+ d
continue;
4 y: a, Y0 O" y" a1 ?" X if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
" C- |6 r/ R" _% {6 P* y0 _: ^ continue;
9 c% [. { z$ K8 E8 R5 \ if( g_pPlayer->IsUsing( pItemElem ) ), V- Q& q% G, N6 e3 j/ j
continue;
- o7 j6 \' A+ o if( pItemElem->IsUndestructable() == TRUE )0 D* d9 M) M2 N8 ?9 D/ c
{
1 Y. U0 i! z! r1 R& T8 f1 n- Y2 K g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );4 w+ E* z+ G* S
continue;
, z( T; v" d/ b/ \! q. X X+ A }
, d& B& F/ Z( H" r$ ` g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
" ~/ ~/ s8 l1 t) c }
6 j! z- }/ S0 m! T: G" K break;- x6 \" h% ^% s! Y' E0 H
}
& N: ?2 p, D1 d( r case 1:
5 e7 m; D5 p9 \1 ^ {; R' J% [# x, F, G+ y' O3 d @' @
//整理背包7 L; y* H7 m' b& v8 Z4 ^
//////////////////////////////////////////////////////////////////////////
9 j3 w3 i2 R0 C //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
4 q) K5 c+ p4 l) l- n" M //////////////////////////////////////////////////////////////////////////
/ u4 p3 { r1 p! q. c! t4 a1 e( ? //////////////////////////////////////////////////////////////////////////5 T( U5 p& c, P/ }9 O$ Y
CInventorySort* pInvSort = new CInventorySort;% i6 ~( v# P3 M2 N
vector <sItem> vItem;& D m" M: F( f- n1 u3 ~
vItem.resize(MAX_INVENTORY);//初始化大小
" @7 k/ g9 e( i8 I) ? //////////////////////////////////////////////////////////////////////////4 E3 ~ k: H+ e
//填充数据
3 W }& e7 K% x0 A4 N5 p7 w for (int i=0;i<MAX_INVENTORY;i++)
' j; `: u$ A1 J J {
6 H4 y \; H9 m+ o | CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* K3 M6 H* C. U3 c9 s
if (!pItemElem)
- O& `( `9 z! c. U( v {, H" N% h! [/ A8 P# e
vItem.dwKind2 = 0xffffffff;2 @* u. }0 b& J
vItem.dwItemId = 0xffffffff;
/ j! P7 p% M- d% ? vItem.nIndex = i;
: A' d6 ~1 d* Q% f& n$ ^. |9 x8 v }else { f- c' P) o+ O) N1 m' x
ItemProp* pProp = pItemElem->GetProp();
# _, l3 h7 V% \/ q3 B vItem.dwKind2 = pProp->dwItemKind2;4 _$ _/ {; A2 U0 R# \
vItem.dwItemId = pItemElem->m_dwItemId;; x# i1 i& ^& Q
vItem.nIndex = i;
$ w0 g9 w/ R; k+ W% u/ P/ ?6 Z* S }
; q9 R2 A, G4 S6 N8 t0 v G: m6 b //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId); a0 J. n" P: d- i, J' l
}
% Y I; k6 G& I: [ //////////////////////////////////////////////////////////////////////////
& V. N$ d1 o6 x. R3 [. ` sort(vItem.begin(),vItem.end());//排序
- a$ X! r. e5 s& m( l% l7 o //////////////////////////////////////////////////////////////////////////; B1 T- H3 [% t5 ]! M
//交换
+ k# Y+ n$ G1 k- b. Z for (size_t i=0;i<vItem.size();i++)
* ?/ ^5 {* `3 G, ], [ {; ?: ~ L' V/ ~1 k4 P
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& l, i8 O+ }- A" ^4 I# y
pInvSort->Add(vItem.nIndex);
- U9 `7 j) O! i9 V }
3 J% O) J0 _" D! o BYTE nDestPos = 0;
- k4 ]7 e0 f+ ^+ \& m+ b/ K! \ for (int i=0;i<MAX_INVENTORY;i++)
" i# n( a# \1 a8 z) }+ {, } {
O4 U4 w( L8 `- ^+ F CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);3 }! O. Z* ]8 I2 u. F5 H
if (pItemElem)7 Y' y1 J" O X4 O5 d0 R
{/ j1 _( X, M- G: m: O) S. y
if (IsUsingItem(pItemElem))
. t( Q" R8 o( u2 N {- T! x! E( ?0 x9 v) n
//这个位置无法放/ I1 w) [$ W" V" _7 B; W3 x
nDestPos++;0 Y1 V% c' c! q& m& I
}
- j" d9 K- \$ r0 M& u }
; Y% a3 @( F! W3 } BYTE nSrc = pInvSort->GetItemSrc(i);
# n2 O) k9 k+ ]$ z! e! v$ K pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);$ y# ]9 _) W& S M
if (pItemElem)/ D. \% k( i O
{2 L8 k, A+ H' P1 H8 N3 k
if (IsUsingItem(pItemElem))
, q. q6 J' w) D3 ] {
7 H8 {( r, V/ J! e" @# ^ //这个道具无法移动,跳过
0 m9 @! w* b0 p, q, t! b! ? continue;
# k& }: A& o/ {$ r# X }
0 Y$ a! w/ C! I$ T" P }else{) u; E d% o, | U
//空位置 不用动& Z9 w, ]) m, k" C
continue;* K# T, o2 D9 Z/ b+ l0 h1 D
}
: I; f+ D6 }" w4 D# ? //////////////////////////////////////////////////////////////////////////
5 @. ^& [/ X+ h3 H8 m+ X1 S //开始移动$ w1 U7 k- O3 G/ {/ B. Y
if (nSrc == nDestPos)
2 Q3 n0 \6 U# ^- `& D {; r3 T3 E4 A) f4 ?; ]1 D
//原地不动
# Z1 s2 t5 L3 X& d" C nDestPos++;
6 v& | U: d, b; ~9 ] continue;
2 J& u3 d3 K7 a5 J/ V* x0 W, H" G }8 S4 Z, N# q) d" L
pInvSort->MoveItem(i,nDestPos);% c7 W3 ?7 D) T7 U0 a; H
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
# T# ]# D# g: f2 } Sleep(5);3 G7 U" X+ m5 q& d: g, Y' d
//Error("移动 - %d->%d",nSrc,nDestPos);: J8 ^' B" x% }! `
nDestPos++;
* u% B. j4 Q' t }0 {5 G0 F0 J( H3 {( g' C
//取第一个元素的信息
- v6 ?. p1 e3 C /*
9 f& J3 X* F$ ` if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
% B' K. b! g3 a. C" E7 @ {
, C. B* E$ |2 h! a9 t Error("Move - From:%d,To:%d",vItem[0].nIndex,x);1 K+ w, h0 N; D, n; P
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
g/ Y/ q" K% l6 B$ f, H4 b }
7 a |# g6 p e7 c$ l: u2 v */- |. j0 X8 ~+ V8 d) X1 V2 a; A
//////////////////////////////////////////////////////////////////////////* }2 K- X2 o) z/ [- O
break;
- u( e2 K, S* S! K }
& i2 S# R4 u6 s7 g2 [ } ( P8 P6 C) @' \0 B& }9 l% t
}' x- h9 B( n& t3 x5 O/ f
m_wndMenu.SetVisible(FALSE);
/ I9 S9 y) o# s8 g; M
: t, M0 ?/ v4 g, a% }2 `- K& k9 W--------------------------------------------------------------------------------------------------------( @( S2 U& Z/ e# K G; t
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)3 l- k& M- n( M: H( G) n
{
% ]2 B; P/ D; H: M) \* VBaseMouseCursor();
6 ` Q& C) m: }" L0 `0 Z$ J! ~}2 M" g6 e, U1 a" T
在其下添加:
( Q( C( G3 H4 [void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)+ W$ q, E- F$ t0 l) S- e
{
; X3 S% O0 P6 U& b/ m5 Z- sm_wndMenu.DeleteAllMenu();3 w& |6 v4 I# [1 ~8 [3 H$ X
m_wndMenu.CreateMenu(this);
6 D0 y9 l& c' v0 t3 rm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");/ R. q2 N7 a0 J9 u9 y/ B* J! D+ F7 T
" u/ j0 k- {9 c/ N! uif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))' E4 E0 N% {0 G% ^, y' R
{
6 S; {! I0 i$ s: I7 v& g, d/ o //P以上级别才可以删除所有道具, s# Q' @8 v$ g$ }3 [
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");# T5 f/ e6 M- H2 ~1 Y
} p( ]; g: b9 U3 k4 v" X) D. I
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
/ j. P# K' Q1 e. z5 I7 d/ Qm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );. C- N7 C/ }5 k8 d
m_wndMenu.SetFocus();
6 v7 f) f. G. y# y}
. B5 k. S0 b( ~. J$ b------------------------------------------------------------------------------------------------------------
% _. h* D8 g' I7 |6 K6 p*************************4 }' G5 ?3 s6 l) n
WndField.h文件2 ]% @1 C6 M5 O* ^" ^
*************************
1 u$ I0 n9 j: ~6 t, @搜索:BOOL m_bReport;$ ~! [, G/ s" h- M; c1 m. Z
其后添加:
' U' e; K/ s0 ]% ^4 TCWndMenu m_wndMenu;2 Y8 ?$ I2 H, |5 w
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);& H1 Q2 R6 t8 F3 h! a8 p
其后添加:7 J5 G* u" b; Z8 T0 y* j! \4 @. M0 m
virtual void OnRButtonUp(UINT nFlags, CPoint point);2 H$ `) L! ~( b
: k& m' K0 o8 }7 P2 ^" z" r2 }6 Z3 E& a+ ?
|
|