|
|
源文件中_Interface文件夹下WndField.cpp文件 m4 \8 D8 r9 d4 U, @/ q
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). X3 {# K& c8 J2 ?& L
( \9 N; F) K/ E* c( m0 }
struct sItem9 z; U; M/ _! i. i& F
{* W4 S& R) K. Z9 ?* I/ [ g, F
DWORD dwId;& Z. l. P$ F; \/ r7 Z
DWORD dwKind2;
5 n, c5 `: N7 }* `' N- IDWORD dwItemId;
/ N4 ^3 i( [, Q9 o; Y; tBYTE nIndex;! m s2 g* a/ \8 n- V( M4 _* o! Z
sItem(){ \" e0 P0 h$ y, c, ^; {+ B- h. S* U5 x
dwId = dwKind2 = dwItemId = nIndex = 0;' S4 e# x# @: Z& f
}3 B& g9 x/ z% a( _6 e4 _% X
bool operator < (const sItem p2)) z, N+ E2 d: Q6 \1 ~5 _& k3 s4 U: i
{8 q6 {- j- l$ v9 z
if (dwKind2 == p2.dwKind2)6 F+ r1 Z; O' s4 F/ M" l
{* u* Z5 m* k# S7 Z; l3 k( `: w: ?6 w
return dwItemId < p2.dwItemId;
. P" M" p' M# v. c u* R( l$ ]8 H5 p" s }else{- {) C! p& v; v9 @( h
return dwKind2 < p2.dwKind2;8 f( k4 L! Q+ G8 [" @3 T" q
}
/ l( s1 O' W, s2 S8 ^" k5 G B}
. |% Q( F0 Q* |, b7 z8 @( f};2 _. H' h$ {) e- h# s0 A4 z% W
class CInventorySort- |& `1 \; g. e2 ~; j
{
4 e2 J$ Z6 J! Y6 S0 O1 |public:; J8 L* \( H' a' U8 o
CInventorySort()
8 d- @0 `) ^+ S% I{. K2 | B# D" T" Z3 }
m_dwPos = 0;
# k3 _; m' g* [, ?}
1 z4 ?. s- |0 m, O7 b3 X7 R. o, g~CInventorySort(){}
) b2 p0 g2 D; |) `# z2 Mprivate:
* H, l/ ~( k! X! G& y8 M$ U( [# LsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息5 v/ D/ r7 j% B
DWORD m_dwPos;; b. I6 R+ ^3 W
public:3 B' F: @& ^1 Z k, m- s
void Add(BYTE nIndex)) X. f/ f9 B8 g2 |1 h
{8 A& P: h- M: z/ c
if (m_dwPos >= MAX_INVENTORY)
# s5 U, ]9 H' y% D/ X {
; a8 x4 d" w4 h1 J return;" G8 Z& m* S. |$ |2 @
}
+ ?# M- ?: h5 d) X m_Item[m_dwPos].nIndex = nIndex;+ u0 M0 F9 r% m* C
m_Item[m_dwPos].dwId = m_dwPos;) u* ^- Y2 `1 ]8 `4 f- i
m_dwPos++;
9 M5 x' ?3 \- g7 E) z& j, j}. y" {% c! q; O* q) t" f3 w3 v; _
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
3 b4 _& |! @9 D' C# o, k{, q8 H1 A, g- x. A# f" X
for (int i=0;i<MAX_INVENTORY;i++)
! G. c" | e- `5 q! @+ x4 p2 p {$ T; m! j. l, q2 \& [& v, G0 E
if (m_Item.dwId == dwId)7 t4 A1 ^: Z8 l
{4 u( x- c% z# v; z4 ~) Y
return m_Item.nIndex;( C2 n( ?2 Z/ N
}
; s) N* i7 `7 D# c) F/ M+ s; [5 M; V H }9 {5 _! m6 L2 m
return 255;5 e: Z% }) y0 l4 ^- z8 Y
}5 X! f8 H3 d4 E I% S3 z" f
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置7 H# P& h1 s4 i; o( U* A
{( K1 |$ E n8 K+ g! ]
BYTE nTmp = 0;1 I+ q- d; [) [+ H4 F) V8 X7 l
bool bDest = false,bSrc = false;2 K" j) N& N- G1 [7 U% V, r8 K
for (int i=0;i<MAX_INVENTORY;i++); V, V( m. A4 z" K# K+ t
{
9 G, \% p1 }0 A1 Q5 A: |: z" P w if (dwSrcId == m_Item.dwId)
2 g ^- i) s! a/ i$ U% P0 |" p {" g2 u6 t9 G/ @1 i. k2 k$ ^- O
//id相等 则 改变对应的dest和src7 L6 d; ^ O" g: M# j* z
nTmp = m_Item.nIndex;1 p2 R9 h# `2 U0 x& z0 e
m_Item.nIndex = dest;
) C, D: I2 `" t5 d4 ]3 {# V }/ l4 h+ \) @$ P/ S# _, ~
}4 f _- J( K# o/ v6 |, m; B5 L
//临时数据保存完毕,交换开始4 b' n1 r+ h4 f1 f8 l- z
for (int i=0;i<MAX_INVENTORY;i++)
# u# y; C/ p) j2 y7 { {7 w k! r* Y3 ]( s0 g, m
if (dest == m_Item.nIndex)* j. I# O5 X9 |3 Z2 T( [6 A
{
% `: A$ N1 p) Q# \6 e: f //id相等 则 改变对应的dest和src
A1 i; N9 d1 r. k$ ?$ @9 q m_Item.nIndex = nTmp;' h- {+ s+ _$ u: e
}
4 r6 u) t* Z& S0 a. ~& Q }0 H" E) n' U; Y) z- [- D
}: M. c+ k. I9 b" N$ `" M
};1 n6 E4 e* B6 t* a3 _& A
-------------------------------------------------------------------------
7 K# H5 i: Z. J& T依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! z7 V5 y5 g$ D4 _# K, ^: O( W5 L+ {! y
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);) L+ a' `% m+ i+ e: ]2 ~. G
紧靠其上添加:2 E/ I( Z$ g6 f7 B
if( pWndBase == &m_wndMenu )
! I$ ?& q- q7 B& \5 `0 I{
. b1 _" B7 S) j, T9 I, E4 U switch( nID )
! [2 s. H" d8 N6 l+ h {
5 z" u# p4 m2 I9 N/ | case 2:
, O2 A) {4 U+ x3 ~# y' \ {
3 L" u6 y7 k" _ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);4 `- c- m, r) i4 N- H0 x: z7 W
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
$ ^1 ?- _/ V; T4 Q {
/ W( W# A1 Q0 `5 H4 K* Q- Q1 f6 x break;
8 |* j5 f$ m) L8 S0 ] }9 M* P. c" d' r+ l: Z
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)4 P- y+ @' G4 ]: S( Q/ W" F2 `! H1 ^& i
{
4 Z, k+ ]% b) m. O! ~ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
4 e5 K- m8 n3 _( M" N6 o5 q* e. R if( !pItemElem ); c* C9 g9 J* s' v8 n! z, v
continue;
" A, j: w: S6 s' \2 [; Y P if(pItemElem->GetExtra() > 0)4 I4 e2 ]- v# R; g& B
continue;
p( G7 M2 N% a( B$ k3 h( i if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
2 A/ a$ M3 a* s' ?. w continue;8 j0 `& K; H+ t3 r# F
if( g_pPlayer->IsUsing( pItemElem ) )
& c+ v! O( T$ ^/ u8 A+ R* M/ U9 D' V4 I continue;
$ A9 n Y4 I# m( ^ if( pItemElem->IsUndestructable() == TRUE )9 u8 ^6 Y Q2 H( {) I+ _0 K T
{
9 z% N$ l+ v* {3 C. S% g6 x6 p) g g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
* A; l- i% s) F8 Y4 | continue;$ m- C& G. Z) @ ? J Y$ A
}' m3 e) r& ^4 {7 z; {# J
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);: W" f; c! A% U) E& R6 q' c
}9 _ K/ o; H$ s1 Q
break;
4 Z5 e! ~* q3 M }
, s3 ]. i9 p9 X case 1:' B7 N# u- w& S# t
{% a; `( R! m" S0 z
//整理背包
% l. j1 I, I+ t4 G! c //////////////////////////////////////////////////////////////////////////
0 O, `4 o9 q- }# a; T //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );% X. D+ q! i: v2 `. _: ]; g
//////////////////////////////////////////////////////////////////////////7 i; m) ?" Q% X4 f
//////////////////////////////////////////////////////////////////////////
! z0 D6 c5 E* ~6 N6 W) s9 N CInventorySort* pInvSort = new CInventorySort;4 s7 U! u: s2 c) F4 M: D4 N, \8 M
vector <sItem> vItem;& A; J2 x1 U8 H. I+ q
vItem.resize(MAX_INVENTORY);//初始化大小+ X3 ?# r) d5 N, h
//////////////////////////////////////////////////////////////////////////
- B! w4 _. c% Z& u( ?7 H //填充数据
3 P8 ^1 P- I) E, J/ d% C for (int i=0;i<MAX_INVENTORY;i++)
: T# N' A' _# s9 N" M F, S# } {
7 N' |, z& ~ x& \8 \ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- D3 j2 o( q; u- Q. x8 @ if (!pItemElem)
H. b0 A! B- ^ {9 w+ L/ L( D! I. C7 s6 n7 R ~, k
vItem.dwKind2 = 0xffffffff;
. h& W7 }% l7 V/ n! g/ D# V- U vItem.dwItemId = 0xffffffff;2 U+ [, ~4 b; B9 `, F
vItem.nIndex = i;+ O0 ?/ ]# z* [& B. {
}else {
2 l( M6 A* n7 q6 n1 u4 \ ItemProp* pProp = pItemElem->GetProp();3 O( L, I; d, G0 X- G: w% K9 ^9 o
vItem.dwKind2 = pProp->dwItemKind2;; J+ [( j3 L9 [
vItem.dwItemId = pItemElem->m_dwItemId;
1 k B' [* v4 `6 ? vItem.nIndex = i;( }$ o* X) H/ j. h6 m9 T9 `
}1 ?# ]) F. S9 S3 [" s, d8 U- B( X
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
0 b5 G$ w" q( j; a& H }* y% o1 _$ Y. N
//////////////////////////////////////////////////////////////////////////
, e( v$ L& Z& c. ~ sort(vItem.begin(),vItem.end());//排序+ M) e" T o' b4 o2 ^* v c' M- V
//////////////////////////////////////////////////////////////////////////. z, h( v* q4 F! t4 v; q
//交换/ F. V4 Q* j4 s. h
for (size_t i=0;i<vItem.size();i++)1 U+ a* U9 f- q
{
+ P# m" w0 q" M, ] //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 q5 J5 M8 A* D( W F7 M2 @: M pInvSort->Add(vItem.nIndex);, k: e8 k; o! Z) E; @5 `7 h
}, O7 _! [) l& n7 u
BYTE nDestPos = 0;3 q+ c% I. A6 E# U
for (int i=0;i<MAX_INVENTORY;i++), r, ]2 O9 n# c; ~+ o: d+ Q( b. h4 d
{
1 Q- B6 C$ G4 W* [, e CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);! R; ~5 V& h8 ]3 ]( H
if (pItemElem)) h5 a) [1 q5 S
{0 a5 V7 a9 h9 `, ~$ ]7 B
if (IsUsingItem(pItemElem)); m9 W% {4 ~5 s* c
{
Y i' d8 r! ^( [' |+ S3 X, p: u, w //这个位置无法放
9 W J9 f0 k4 I- V, r nDestPos++;
% S ^+ r: g) N+ ]+ \3 p }1 K' M* q. f2 h. Y: Q
}
5 Y4 R1 U+ }+ H: t) l7 R BYTE nSrc = pInvSort->GetItemSrc(i);# `( i0 }# g! p0 P {. Q0 C( D
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);: Y5 @2 O: h, Q. U# L
if (pItemElem)1 f8 `& a* H6 m5 z+ N5 ]
{0 H& F+ V9 ?3 R! H/ }0 I5 r% @
if (IsUsingItem(pItemElem))
3 [! O o% S s( N5 ? {
- C' D5 o& ^- M* I //这个道具无法移动,跳过! `7 ~# [* |+ t) q
continue;: z" O5 l4 {# O& I
}6 I; k( o& B. t: C% G* I/ J
}else{
; |. L! ]8 r8 ^( e+ Z" J# \: K //空位置 不用动8 L7 s% h/ j8 K1 j+ V
continue;
. x. g' e: |# r. N: l }
$ E* J9 A+ h& L: }% n% x# L //////////////////////////////////////////////////////////////////////////
" E! F$ N$ ~* P6 v% n O //开始移动
& ` E0 [6 P. E5 N# E( \+ r if (nSrc == nDestPos)2 C4 g0 @& g+ _! m A T8 b
{
& m* y2 M: w0 r- a //原地不动) O4 D( [: J3 D5 @5 D* n4 _4 r9 \7 @9 Y
nDestPos++;. e, e( C/ G/ r; X" B
continue;
3 u- C4 B' G" l }$ j% x$ m8 A9 Q/ y% ^0 U; O3 S4 h
pInvSort->MoveItem(i,nDestPos);
" Q1 T& U" t8 d3 E3 } g_DPlay.SendMoveItem(0,nSrc,nDestPos);
5 U( W- _9 t1 ?/ U Sleep(5);3 g' L7 G* ^7 p/ n) \4 |4 S* m2 C% L
//Error("移动 - %d->%d",nSrc,nDestPos);
6 l& u; Z, L7 `( K$ f0 A+ w- \ nDestPos++;; p. c* S; q- ~8 K' `1 M' X
}
: P L+ i6 {# z //取第一个元素的信息. H( q& G/ {% l: j/ G6 |
/*
5 g0 i% E7 H6 a3 v if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)" F2 _& E* g4 K0 y( k! I: Y- H
{; t1 l! O9 U; ]$ k
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);4 z+ x' U- s2 z7 k3 k0 o* ?
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);3 M; Q, T3 N. L
}0 _3 j4 d8 e* \3 I" Q
*/! R& N4 J0 ~+ L& |/ k8 R3 Y; D
//////////////////////////////////////////////////////////////////////////2 ~5 w6 R; c7 n3 Q1 m
break;
8 ~& c5 B! V! d ~/ b% K+ G }+ e1 T, K, M" [* k8 W
}
. \$ M7 S8 R2 m$ |. N P}
5 o0 a4 ]- G. b) Tm_wndMenu.SetVisible(FALSE);% ? J* L& D: s7 z* e) k
9 \% I J4 U5 n! @0 y0 d
--------------------------------------------------------------------------------------------------------6 T. D( K/ ?, C' s4 ~+ e. J2 |* h
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)! m p5 I/ T' ?% K( W( X
{
8 c: D3 p3 L4 P9 g& VBaseMouseCursor();
) P; D' t8 @! _) |}
' {! O. j7 S# o8 ?! Q8 A在其下添加:
& |& W3 K& ]1 M9 c$ u, P a W, jvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)1 W& ^" O& x! H* T0 h# [
{
) r' U: H8 X" I. pm_wndMenu.DeleteAllMenu();0 ^& w2 x7 n0 s6 U8 k9 S& L
m_wndMenu.CreateMenu(this);% n9 N6 G# O0 Z/ H
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
% k0 P% m/ R+ f& f) W( F8 ^5 F. O! Y( Y$ b3 g
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% r% S) r+ J2 A6 Y
{
" W4 K/ }! b% g9 p! s; g) o //P以上级别才可以删除所有道具) [7 o: i8 ^ Q- _3 _! I& p6 L( s
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
& Y6 z! S# ^2 C, u}& [2 s/ @- i3 l1 ]/ U# _4 d* w
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
G& Q: F. o* _2 P8 B/ ?m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );) L. l+ f3 s, v
m_wndMenu.SetFocus();$ P# i0 m& |; ?$ n, k. _
}
) |/ L2 e5 |' M6 I5 X& x* _------------------------------------------------------------------------------------------------------------8 u1 m- y: t/ O9 \
*************************
/ h4 v' d2 i' G2 E8 E: UWndField.h文件1 }5 v' ^1 s4 P5 |8 y
*************************# A* ?5 z$ q% a( a1 B: \" s
搜索:BOOL m_bReport;( v- c% w5 U; i) W1 g4 o8 ?
其后添加:" g# u( Y& J1 y2 k2 U
CWndMenu m_wndMenu;
' ?/ n ?' v" V5 p0 j5 W$ O. \搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
. k' B: [% r# l) M5 u其后添加:/ k( W: x% Z' }. j5 o# ]
virtual void OnRButtonUp(UINT nFlags, CPoint point);
( ~, [4 S7 r& m1 H) @0 G) S
+ S8 ~( l' Z( K8 ~* g' Q9 y, C6 u' {8 L* c, w
|
|