|
|
源文件中_Interface文件夹下WndField.cpp文件5 m; V: j+ _ w9 w
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
* Y9 o/ p$ q: S8 ^7 q7 ?% M* d; g: b+ G
struct sItem! d' Q; S, E: ?& U2 [8 q/ [& b
{
4 e e" [1 ?) jDWORD dwId;7 d5 m# a0 R, d9 r- q
DWORD dwKind2;3 W" Y. `7 s& B
DWORD dwItemId;
1 D; j) T, C3 C0 \$ uBYTE nIndex;
+ d- b& I- L: L+ ~ [) @sItem(){% O6 y2 {% x; p8 {/ Y! f' M
dwId = dwKind2 = dwItemId = nIndex = 0;
2 p3 T5 [7 A1 u% H: ~}
* Y" L# w/ H7 S3 l4 {bool operator < (const sItem p2)
, R0 y# U2 |2 d0 @{8 u, [' Q' j. |
if (dwKind2 == p2.dwKind2)
& P0 E6 A8 U8 V; S {7 A U1 Q& o) ^, D7 A. H
return dwItemId < p2.dwItemId;
/ D0 p$ L) X# P7 j# V4 ] }else{
% _4 N' g8 A1 \2 E! w9 I' f8 {% A return dwKind2 < p2.dwKind2;
6 v g0 e& L8 M- e( i& y8 C% V8 H3 @ }3 G1 Z6 O. \0 S/ l! E
}
. E4 E! J6 u% c. z! G* |7 k};: n7 z- @$ \: L3 L$ f x \. s0 O- `
class CInventorySort
: t& R1 C; N A6 ]2 m' |0 I7 s$ X{/ e% W4 ?* V% j# K
public:/ l4 `: r; Y( V k
CInventorySort()
2 E K0 ~. c+ E{
; i% i3 D# ~" y$ k' w: M m_dwPos = 0;
! a% N9 U3 W% n0 G}
* r8 |) [8 ?' u2 f- W; z~CInventorySort(){}: Z1 _. l, z# b0 [* N
private:. u/ R1 ?7 W" |% G
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
$ {' @0 L0 t' { {! oDWORD m_dwPos;
, o3 J3 o" a: C( Q* A. s2 h) S: H- ?public:
0 F4 H8 m- a. v4 |) [) Vvoid Add(BYTE nIndex)1 N" k: `" S" s5 G9 f
{# m* t! n/ N# h5 q6 B
if (m_dwPos >= MAX_INVENTORY)
( _2 I Z0 ?7 Z1 Y {( x! A3 J; }9 R, p/ C; X2 C L0 Q4 E
return;8 Q* h4 Q( F9 U
}
; d. x$ P+ l3 C0 X m_Item[m_dwPos].nIndex = nIndex;, T2 g# N% e. }5 T b! \+ |- k$ |
m_Item[m_dwPos].dwId = m_dwPos;
# \8 S& T8 g+ [4 R0 X% n3 s m_dwPos++;* E) Z9 X" d" `& m
}
8 H, u+ X( w9 |- F% b5 h2 I. I2 j1 RBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
2 R9 B" N2 x5 B9 S3 U{
' q# f1 G7 O/ `0 ]5 ]8 d for (int i=0;i<MAX_INVENTORY;i++)* Y3 _0 }; Z: E0 h2 g
{
' r& v% H( s. y+ N- f+ W if (m_Item.dwId == dwId)
, _0 W% c: A M X& J4 _ {& r. ?+ j: V$ ?4 {* ?
return m_Item.nIndex;: H4 q$ x+ d) b
}% A1 P! {6 M5 E8 @& l! K3 X, N
}" u! N) T! T5 u+ g7 z! F
return 255;
! ^5 O' g3 K4 I}% i7 E e; X) v" U; V
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置4 Z2 m8 M$ e, w3 x5 s* w
{
. I2 b6 b7 Z: i BYTE nTmp = 0;- B! Z" J3 h3 j& v$ n) W5 \7 V [
bool bDest = false,bSrc = false;
3 R$ ^0 P) r; @1 W. ?+ | for (int i=0;i<MAX_INVENTORY;i++)
7 E# S+ G; J. @7 ?2 O) y' z3 ^6 d {
9 p2 E- M5 n. N if (dwSrcId == m_Item.dwId)
" W. u5 v5 ]# i3 W: H {
% O; a3 w8 L$ w //id相等 则 改变对应的dest和src. a! a' A5 M3 X" h I" H
nTmp = m_Item.nIndex;
$ I X2 G$ L* s s, s( d/ l2 O m_Item.nIndex = dest;
1 O8 Z" K" R. V' o4 L* a }! A* W- P8 V& D+ q, S. w
}) y+ _" s+ v4 l! ?, V# Z1 X
//临时数据保存完毕,交换开始* ?$ f0 Y5 N* t f: c) K
for (int i=0;i<MAX_INVENTORY;i++)
; I/ P L7 M7 Y9 s) }& u$ g {. ~8 f. \# }) c3 M4 b
if (dest == m_Item.nIndex)
. R7 y8 c. {9 Y: r% P {, h) @) `- w% r; A: _
//id相等 则 改变对应的dest和src
1 B2 t3 s* r" o* p* z7 H m_Item.nIndex = nTmp;
+ G# C; }1 b5 u$ u) X7 l }6 L- {! [1 t0 s
}
, Z F6 R4 O1 g6 o) m0 d( n( W}# J/ \3 M' A8 \$ b7 i# ~8 y% V
};- Z/ Z6 Z1 `8 E$ F5 @: `5 I v
-------------------------------------------------------------------------: M O) F! t* `% }, s( X# g1 c0 t$ L
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( _& o6 b) k0 V
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);- Z$ Y: X. Y; ?) h" P0 l# L6 Q ]( d
紧靠其上添加:9 z$ }1 P$ h# K& O- |
if( pWndBase == &m_wndMenu )1 ~3 E) K, D; x
{
. t3 C( J- j, ~ W3 w. T& G- z4 g switch( nID ): q% y# n, `; y6 U8 p
{4 R Q Q0 d4 W. h \; N
case 2:. z/ J1 ]3 ~$ J) G2 `* X% A
{
' T' P; K- R7 t# f //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);" W- y K, B3 @
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. r3 G* T: }) T( O. [ {& K' Q8 [1 u+ S9 z3 ~# o
break;3 T. Y+ F' |2 ^! ]
}
0 H- U. j! `' p! f- {- a! `2 T' n for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
; |$ q$ L# k z9 N$ m/ o5 S6 Y8 r {
" {/ z$ Q8 d' q# L- D# F CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 x/ t- F6 [# \" k
if( !pItemElem )6 d- c4 d9 A7 R! o, W: Z
continue;
' u* h! q! e+ v4 V4 V, P& i; p if(pItemElem->GetExtra() > 0)
( H( _. U. q4 d5 Q ^( l continue;
+ ^" _ |% K. k+ T# y7 x, J7 X; n if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
+ i9 k" E( C( } s& P) K/ Z/ D continue;1 n( H$ W8 s9 Q
if( g_pPlayer->IsUsing( pItemElem ) )" Z q; I8 e% ~0 }6 f0 Z3 M
continue;
( A+ G! e, |8 P. R if( pItemElem->IsUndestructable() == TRUE )# y/ c( O9 G9 t: |3 @% x
{
! F! Y3 l4 ^' c7 G, b g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
' e1 z+ E# k u5 G% Z, Q- m) J! ` continue;6 _, b9 {6 o) l0 _1 B8 O' i
}+ Z% j+ [# t; }3 S e; G
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
" O j. @+ W) U: z# t% G1 c }
3 G S; Z' q. ~ break;$ ^% r5 q( {2 ^ `( Y1 }0 K
}# Q- f" q1 ?+ T9 J) S- q, y# @
case 1:
) l8 V4 t2 U$ L {8 B- K' m- x5 o' u2 h+ E" P3 {
//整理背包( f' P, t4 c W* h
////////////////////////////////////////////////////////////////////////// o7 \! u# W7 H9 R$ }. H
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
% G' K1 V# n, V1 q3 }7 r0 p //////////////////////////////////////////////////////////////////////////" A! T4 M: ] O
//////////////////////////////////////////////////////////////////////////
- n G" J; I3 G2 T3 A9 b CInventorySort* pInvSort = new CInventorySort;
2 o$ z' g7 d- h9 H! O vector <sItem> vItem;4 J; e- ~! ^2 y8 X; j# }- _
vItem.resize(MAX_INVENTORY);//初始化大小
2 K8 \; h0 c1 F, Y* D { //////////////////////////////////////////////////////////////////////////
. C7 ?$ a' T; ]( d2 k //填充数据% E( V; N6 o* S! X% e* ] ?
for (int i=0;i<MAX_INVENTORY;i++)
0 [: D9 k7 l0 F1 R% [" P {' W1 i$ F8 r; F9 G* s$ ^" H* O
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) J( Y5 V3 N3 ?- |
if (!pItemElem)
h1 r9 {0 E4 ~. }. W% R! Y# E7 G/ o+ s {% }8 O' I1 {; y- I# S' u
vItem.dwKind2 = 0xffffffff;
# W+ H9 r) @$ m" f. z vItem.dwItemId = 0xffffffff;
8 n- Y* ?/ Z: Y4 C k vItem.nIndex = i;' ?, M5 B+ Y( G8 S2 K
}else {& u; K- D8 y- [$ |" l+ U+ Q& I
ItemProp* pProp = pItemElem->GetProp();2 `: o' x; l {; P f
vItem.dwKind2 = pProp->dwItemKind2;) G# @- W* ^9 W1 Z H7 P
vItem.dwItemId = pItemElem->m_dwItemId;
2 Q' o* k; K; ?0 } vItem.nIndex = i;" Y i7 @6 Y4 E/ _' X0 [
}) U1 C2 d+ E: s( A4 [$ O# g8 }
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);: q5 z2 k% R4 z9 `9 k O: u3 M1 B
}
8 F) o" @ h0 v4 v& z. b8 d //////////////////////////////////////////////////////////////////////////
! c# B6 I1 T9 {2 x$ ~: ` sort(vItem.begin(),vItem.end());//排序' P: Z5 Q: m0 M/ m4 h, V" Q
//////////////////////////////////////////////////////////////////////////3 N& Z6 U* ?5 b- W" g* e1 X
//交换, v. ~5 @' ]9 k
for (size_t i=0;i<vItem.size();i++)
1 F% H% L' Y2 Z) ]3 c {
! Y6 [: v- V. _3 _ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
3 _3 ~9 u+ B% f& n pInvSort->Add(vItem.nIndex);# @; u0 H* \+ h t" B; r
}
- n/ c8 z3 X9 p% R1 q) ?. Q BYTE nDestPos = 0;
% k& y1 q3 r$ L R) B for (int i=0;i<MAX_INVENTORY;i++)2 J; i' j% I6 m9 `1 `: H
{
9 r- H3 W. L! w5 H+ v! b8 p CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);& R( G" w+ x6 t, @0 z* P0 E
if (pItemElem)0 K! ?+ H2 {) x- J5 C
{
) J& k8 @9 F4 u/ a% p. W5 ] if (IsUsingItem(pItemElem)); D. f+ e( q |8 B# d8 f4 ^
{& y5 G( Y4 m: w3 E' @
//这个位置无法放) y; g" ~3 g* Z6 y& N+ ~: H$ y) \
nDestPos++;
( b" j+ F8 y: D7 b0 y }, ^8 f' Q$ W: O" g
}
( `+ u3 k1 a w$ N# x8 X& F BYTE nSrc = pInvSort->GetItemSrc(i);6 S) E3 i! C) O" L$ }9 m% Z
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
' }, R# v3 A% A C t. f+ \& G T if (pItemElem)$ Z4 b' ~; c- y+ n
{6 F1 F7 V. ]* d) Y' K4 V
if (IsUsingItem(pItemElem))
6 _! e2 ]- z$ N$ v/ v* w2 q8 [ {
+ S+ L& A* A/ w. N5 i8 E. q" y //这个道具无法移动,跳过
7 v7 A Z/ e) w& `: Q0 J continue;
2 S, Z# O2 |: L5 _9 L }
$ R0 {) V' Z0 U0 J' L+ ? }else{* K& ~4 h6 S7 V7 L6 h) x
//空位置 不用动6 Z3 ], C' L/ M5 I3 f7 X
continue;
- c* y# G$ G/ J. S% E4 ?! c }
1 |- H- A. G/ |! E. Z //////////////////////////////////////////////////////////////////////////
8 P3 l* G; s/ Q/ |7 y& L: t5 G- m //开始移动
1 d3 n( {6 }, S4 b: o. S if (nSrc == nDestPos)2 E8 ?0 X9 r! x3 {( |+ K9 W
{2 B% F$ B* P9 F! {! c B: K# \( J9 w
//原地不动
a* E2 J0 _' W1 r z% S6 l nDestPos++;
Y$ s' C' s0 G% E) A& x5 u! } continue;8 P1 _ {3 y7 D# ~) k& S9 W
}
/ z: \5 k7 |5 F$ B" J/ \ pInvSort->MoveItem(i,nDestPos);+ z$ \& a5 T% D+ G
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
* k0 ?/ Y* Y5 I9 h3 ~- @* V Sleep(5);) v4 y( f' k' k4 G& Y. z7 R0 ~. _
//Error("移动 - %d->%d",nSrc,nDestPos);' C& `0 P' s% v! k0 K) S: {
nDestPos++;& o4 G3 D# ~/ l
}! v' x. A7 e7 ^. d* b L
//取第一个元素的信息3 X+ N/ m6 M o e' x0 i8 H
/*
0 r Q7 D- d4 g- ` if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
9 S# \2 i) S0 V F) T {# i+ f K+ s1 j* c+ p8 D {, A- D* ?
Error("Move - From:%d,To:%d",vItem[0].nIndex,x); }1 u" a3 R! K6 Z
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);- |6 s: F+ p/ C2 ?+ \* c- x
}
5 R4 r# p5 S4 f# ^2 Z */* `+ z1 X4 u0 B3 r0 s' S
//////////////////////////////////////////////////////////////////////////
& O+ j4 ~$ @' j" N& p( P! w! N- E break;: [% S4 h8 |$ W1 O
}
7 k5 ]! h- E! y+ C }
7 m1 H4 a, [3 W0 B0 x; G$ `3 K}
% E0 q. A/ i$ T) `" jm_wndMenu.SetVisible(FALSE);% p1 ?! t" i. Q8 \' d
: S6 N& q. Q2 s
--------------------------------------------------------------------------------------------------------
" V5 L! B5 Y# h) }搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)+ w' Z, R8 U' R) o; c
{
3 F+ ^* [6 _% \! e! S: y% _2 HBaseMouseCursor();
- G+ ^0 W4 u8 I9 u2 a}4 @1 J! L0 e: c; u
在其下添加:
* f: A+ i, S2 N4 @( D$ K3 zvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point), Y# j4 n) u" m9 t% K$ V
{9 Q+ n& s" C2 v2 t+ y. N" R4 j3 O3 I4 S
m_wndMenu.DeleteAllMenu();& u/ O6 t; t _* b3 H
m_wndMenu.CreateMenu(this);/ L6 B3 p0 w* P, l
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
3 M. w S4 x( c$ D% R4 H* i
# ]& U) r: \ d X7 Pif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 D% m' ?2 o4 X% d* L{
- j" n3 _6 ^0 _, z! A //P以上级别才可以删除所有道具7 \) }% J* V1 ?% D
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");! q5 L5 D, T: r6 f I/ i* Q
}) x" i' ]+ f) @3 U
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
7 `$ h: u0 j. Z5 A/ B7 }) Hm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );& {4 G9 s! Z. ]
m_wndMenu.SetFocus();4 N; e% }9 d0 e4 [2 }
}
- R/ b1 g4 {8 ]' r------------------------------------------------------------------------------------------------------------
* Y5 O! K% l# x, h8 E( o+ B*************************
6 D; J+ ` m0 Q# x# OWndField.h文件5 ]/ R0 W7 @1 h0 b
*************************" t4 ?+ T4 p' @7 C) Z- _
搜索:BOOL m_bReport;7 X% J- l6 i i3 H$ f+ [# w
其后添加:
9 u/ V0 ]) R, C* z" b" C/ x) vCWndMenu m_wndMenu;! f) V' q6 x- y
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);9 J( B, e# ^) M* H
其后添加:
. d7 G+ q( k7 _( S S* V) V6 ovirtual void OnRButtonUp(UINT nFlags, CPoint point);
* q( c0 h9 V( r- j* K* q: T P+ _( d( h N% S/ Y& a8 `( z" i5 d
0 W! W( z2 d2 C+ l
|
|