|
|
源文件中_Interface文件夹下WndField.cpp文件9 c" B/ d6 v. N# v( q
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: [* I# H% ~) b$ W
# n+ O* b. a* T* V/ t4 r9 Lstruct sItem8 G! O. u# v1 H7 B. V
{
" s& O0 K6 L* l& X% K) I- {DWORD dwId;0 e& _/ f t z. D
DWORD dwKind2;
. I- W# M% {! p4 BDWORD dwItemId;
. M% T9 k8 P; r6 U, xBYTE nIndex;* Q* S2 {9 |, F. P2 t' z
sItem(){
- [6 A6 o$ y% H- J! ?5 y9 @ ` dwId = dwKind2 = dwItemId = nIndex = 0;$ P& b6 M/ E. |8 Z) b
}
2 q3 k7 D N5 w/ \0 J9 B1 a8 g) abool operator < (const sItem p2)
) y% T3 T, R7 s3 K9 U5 {{6 ?+ R5 r5 _" ?1 p& a- ^) N# O! W( u
if (dwKind2 == p2.dwKind2)' F/ {# j, g1 t( m7 L& ]
{
/ ?! C* P$ `1 t return dwItemId < p2.dwItemId;% M- L& T" ]+ n) `
}else{/ f/ c# U% [2 \7 n2 ^ q
return dwKind2 < p2.dwKind2;
5 U& b% f6 ?& P* a6 Q/ }6 T/ B }
# W& h% K5 A: I: W}! C; T6 r. n$ Q" g: e
};5 m' O" J+ H6 Y' ~) C, d
class CInventorySort
3 N; |1 _5 ^5 m7 J" ^{
( Q. \ j) s- m4 x3 l8 h4 H( b$ tpublic:* ^9 z% {4 c( e/ s
CInventorySort()& J7 W1 O x) e. C6 `' p
{/ p, l1 B4 U* n4 t
m_dwPos = 0;
# P/ K/ G; t1 d* H/ H* M4 T8 C, N& P}8 N% i; Y0 S2 O
~CInventorySort(){}
0 z7 F! t# L) @3 k1 o& }private:) ~- h% Y' W! ^) F7 w6 V, S
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
; n& f0 Z5 {4 h/ ?# X4 ^8 jDWORD m_dwPos; H2 Q# ?1 z2 ^$ `; M8 K A2 D
public:
+ C1 b% t$ r' o, [5 B% t' [! ]8 xvoid Add(BYTE nIndex)
/ } I8 I5 z# R7 {{
; j$ s, m: H0 A) s8 v6 ?7 } if (m_dwPos >= MAX_INVENTORY), ]! V4 ?: y5 {, K4 N# K! q
{1 k8 g! f# N) w. \: ?" c8 }7 M8 g4 \
return;
+ o6 z6 |6 ]* C' F }
1 t6 @& G6 S6 F& I3 A/ H m_Item[m_dwPos].nIndex = nIndex;
. S" [* Y! ], [% [5 \: K m_Item[m_dwPos].dwId = m_dwPos;
! y( a8 ^2 L% j m_dwPos++;. U9 o0 `) l; K3 K6 }2 R
}2 |9 P/ X# Z0 p$ |8 U# h
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
" x$ L* I- W$ h{7 I& P2 [$ p# f2 `8 O0 Y. a- C5 P
for (int i=0;i<MAX_INVENTORY;i++)
7 \5 ^: b3 P( D N, P8 n; i {
' i# Y3 v0 d2 O: e& H( z" y' ^6 X) z if (m_Item.dwId == dwId)
. H: o2 g! @! F7 ~; J5 f {
- ^" f4 O! i5 t. o q4 `7 x return m_Item.nIndex;
1 p% i6 T3 b0 \; A5 ~2 z }
& B$ n- v5 C! y4 i }$ j5 B8 B( u s: `2 O. B v
return 255;
: o! ? N1 }: e$ D* q& Y}
% z9 K! P) U# U# Evoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置! w Q6 r, v) X! H
{( ], H* _' t) r, u( z# P
BYTE nTmp = 0;
; ? ^& n: n# [/ R& q7 r3 S bool bDest = false,bSrc = false;1 e# E) \+ e! b: J3 p; J
for (int i=0;i<MAX_INVENTORY;i++)5 m7 |7 d$ n3 L
{2 v ]2 q! @% e8 R: o& ^ o
if (dwSrcId == m_Item.dwId)
+ ^2 F! S6 Y5 O2 e5 _" D5 E {6 F; y4 C5 D/ _( _( X
//id相等 则 改变对应的dest和src
! U3 S" S8 I# P1 I6 N" n nTmp = m_Item.nIndex;$ i8 N, |2 U. v F- L
m_Item.nIndex = dest;
^* Z8 N3 H: \: S, |5 {; l }+ }. B' b/ T3 P$ Q' T3 W0 X
}+ {' l& Y/ p8 n4 U9 z/ m& D
//临时数据保存完毕,交换开始
" j5 @9 A3 r3 A9 O" \& T for (int i=0;i<MAX_INVENTORY;i++)0 t7 n+ ]5 G, [- A
{* E7 t3 n, \1 \1 D
if (dest == m_Item.nIndex)
3 O- p" n+ \. A {9 E6 w- D& W1 p" V$ _9 f9 ]) B
//id相等 则 改变对应的dest和src
v! k2 D& s" ~. O1 Y6 O: f7 m9 k m_Item.nIndex = nTmp;
3 }, Y( ]- M( N! a2 \ }) \3 o" ]5 O9 `2 W# y! @6 b4 `
}5 l _# S; u% `7 D [
}& S( b' c# I- ~
};1 i$ a" J$ ^/ p1 w5 r, L i
-------------------------------------------------------------------------$ {% A, K0 _' b- y; h
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 k& v; ]9 a+ `6 T搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);& g0 S! _- _( n: R' |" a/ ^$ a% `
紧靠其上添加:, V4 n7 ~' d0 ?- H
if( pWndBase == &m_wndMenu )- {) g5 k, {5 ?3 O7 o; ]1 e
{
# N* h: w$ o! _/ i switch( nID )
) D) P5 X* C" V7 H0 r# G+ B {" M( X1 i' n$ o1 l/ [! E
case 2:
4 ?) y) @$ q9 Q9 O. u! K {2 z7 n9 H' u' f( z4 \0 G
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);2 L! S, K4 \9 R3 p$ J
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ p& B/ [: ~5 Q3 P/ w, e# {
{
$ _( q/ K# G" e4 ^/ K break;# S+ f5 L0 N+ C4 H' _4 C6 C7 z
}+ B' l& {8 P* z& Y2 }" h1 Y! v
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
8 Q% t- `! R# _7 E. |( A {
; F! V$ p5 Q/ O2 l7 f! c CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 v1 G) \& @. J1 U" v if( !pItemElem ); _' {; \4 K; L( l5 @
continue;& n5 R. o/ t" r, [( z4 {0 D! }
if(pItemElem->GetExtra() > 0)
, g* Z. Q- N! [, U, Q continue;3 l/ Q. ]) L1 f* P4 L: v3 ]
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
8 K+ w4 n% n/ H% r: b continue;; z& T1 t4 x& s# p
if( g_pPlayer->IsUsing( pItemElem ) )# ?% r1 D% s7 O2 K1 @5 O/ W
continue;
1 T6 K/ q. s' I: [9 c! A* ?* W9 s if( pItemElem->IsUndestructable() == TRUE )" ?/ m- X. g2 e2 v0 `
{
/ o7 ~! T6 m/ T, { g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );0 \* f1 ?4 _% y0 g! z
continue;& g: Z0 J3 N' [; ?6 @- x8 J1 G' S) l
}
4 y7 h( V0 }( N& b" M g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
, |. z' A% M4 Q }# T* K& D# g/ u$ m
break;
$ Y* w! h! a+ o5 G }
1 W. Q) C/ r& | case 1:3 d0 v9 f3 W9 Y- m) M7 D8 u9 t7 j
{& s7 q& d5 N7 E7 p
//整理背包
2 X0 Q( @# U; t0 o9 h1 z //////////////////////////////////////////////////////////////////////////
) u2 w* Y% {" O( b* N4 d' N //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );+ F) ?# Q* L0 [3 z+ L' u
//////////////////////////////////////////////////////////////////////////: x! h' c9 p) B P
//////////////////////////////////////////////////////////////////////////
7 e/ o, ]2 E0 B# c, ~0 U0 e5 a9 A/ d CInventorySort* pInvSort = new CInventorySort;# G T; E2 n% R2 y& m' z9 w6 v3 ?! e
vector <sItem> vItem;& J- N" B& ^5 e
vItem.resize(MAX_INVENTORY);//初始化大小
2 h% N; Y" X! D //////////////////////////////////////////////////////////////////////////
' }& H* g8 w, D. b3 k0 @ //填充数据5 u' A6 f# P E5 Y
for (int i=0;i<MAX_INVENTORY;i++)2 Z* n+ B+ U" E# R+ b
{- B, W/ } m2 q# `" |$ ?
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
& f- P& c* r: I1 ]% c if (!pItemElem)$ I$ Y3 l9 S5 E0 j
{
, f6 c+ s4 H6 t vItem.dwKind2 = 0xffffffff;
# a6 r, c3 u/ T+ A$ x vItem.dwItemId = 0xffffffff;/ U V/ t* P- k2 ?# d' w% B8 F) f8 c
vItem.nIndex = i;
% X2 n" f' J( Z* G }else {9 c0 o$ Y4 f, B# S; W4 I9 e
ItemProp* pProp = pItemElem->GetProp();( M9 \6 ^5 Y* D! g( p+ I. [$ ]
vItem.dwKind2 = pProp->dwItemKind2;2 L# f1 T" N4 h; n5 C* D% I0 ~, i4 H
vItem.dwItemId = pItemElem->m_dwItemId;# k0 o/ m4 y( d5 i. C9 D3 |
vItem.nIndex = i;& y3 G6 p$ }$ c0 x F! c
}! j, s$ g4 B; g1 l5 E( ?
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);; E7 s Z$ k# |
}
2 d% Y' a. z$ b5 Z4 r //////////////////////////////////////////////////////////////////////////' }7 N1 A8 J" N& |7 S! _' @
sort(vItem.begin(),vItem.end());//排序2 v2 D* g" ]+ F% e3 _2 [
//////////////////////////////////////////////////////////////////////////
! q* o$ p7 W1 Q6 l: M) ` //交换
% I& g/ t7 q) W) q1 b for (size_t i=0;i<vItem.size();i++), w6 y/ E, K# `$ X0 n: b9 D3 N
{1 i- X* N+ Q1 \5 _5 w( e
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
& |0 k# @9 H' g% k& ~ pInvSort->Add(vItem.nIndex);) ?' k8 i0 m0 m' T" U) Q) M/ N
}
3 L+ m7 R S' O& \: J BYTE nDestPos = 0;0 H2 n& v0 ^* O; F' O
for (int i=0;i<MAX_INVENTORY;i++); u& S: }; V. N' H$ S9 ~
{ { Y) \' X! A! E2 M, g
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
1 |# R4 m1 `: \9 s, o' h: `. v if (pItemElem)7 k4 J3 i; t) x2 R
{ U; V/ \! Q* {# S; g
if (IsUsingItem(pItemElem))8 \0 b+ \% @: Z' x" C8 H
{/ I; ?) w- ]2 h6 h6 c; \0 O
//这个位置无法放7 Y3 t! R* @; V0 ~1 T8 e, x* }% {
nDestPos++;
. Z4 b" ?! c' k" _% J* P5 S5 Q: f6 V }
$ _1 c& U) K9 [/ |6 r. G( j; K0 S6 v }
1 P1 N d/ \! m7 a! b2 b/ W/ p BYTE nSrc = pInvSort->GetItemSrc(i);+ o, Q1 H% z. i+ y
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);* o1 H/ K3 y' t2 |
if (pItemElem)9 U! w' O5 y7 p
{
& X0 ~0 N+ ]0 J4 p3 u* b" r" J, F if (IsUsingItem(pItemElem))
4 L% h0 L }2 f" I {1 f( t, ^( o i# n$ U9 D
//这个道具无法移动,跳过8 Z# ~5 x; H0 r$ s6 |0 r
continue;
* N$ B( |( \ P0 v/ E) W, s2 d }
" z0 L* x( P) j0 C5 I; p }else{
' ~/ Y/ ]# h/ ?+ G //空位置 不用动
) c% ?. S( h2 c7 v5 v. z( U Y8 |; R continue;
# D& W; I$ o8 Z6 `5 W' O }2 y# r3 m* L3 T. j ]* m
//////////////////////////////////////////////////////////////////////////
# W( v' E$ q3 | f) s/ U$ [# |) c //开始移动
) A$ @) \+ s; M2 {( i5 _. D5 k if (nSrc == nDestPos)
6 y; j5 @5 T. m9 F3 P* C {
6 u! A' ~7 h6 P7 F2 i) Q //原地不动: B! C6 y' T( W5 Y
nDestPos++; k, L% h$ T2 s1 Y( y v( w1 W4 h7 c
continue;- L4 Z6 W' q$ p! ]7 v1 N
}
4 A: @1 l7 u* i pInvSort->MoveItem(i,nDestPos);( F, S5 v/ h4 d% Y1 {
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
+ U3 m4 p- \! b8 y; Z* n% r# Z Sleep(5);
) D8 Y( T- ?- s) v+ M& C1 n+ A //Error("移动 - %d->%d",nSrc,nDestPos);
2 ~ I, ~; b+ ?* g6 B% A nDestPos++;
2 p7 ]+ m1 {1 _' V }
3 K) ^) B! `4 W2 q) ^ //取第一个元素的信息
, h) B% B: ?1 Q /*
6 r* v8 M7 F) ]' k if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)9 n( f# k+ i4 s1 S" N7 V3 d: \
{+ y2 @3 V5 o7 F. s3 @" x- U4 _) w
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
5 _5 R9 K* V9 C8 I) D g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);: T3 p& R/ ]3 i2 S0 T" K4 C% e3 M. S
}
' f( l4 ~+ [% o" R# R6 l */
/ N7 R" R9 N8 a/ A# c4 A0 l //////////////////////////////////////////////////////////////////////////5 \ ?1 z! H: @1 z& ]. v0 L4 b
break;- Q3 u Y# c" x. h
}
5 p' H C9 q7 ] n8 D }
) U& u2 B; I# M& v1 D/ E}, K! o& o0 Z$ f# h9 l
m_wndMenu.SetVisible(FALSE);+ u, A* e1 k) r2 t6 @* [/ \
6 | d) g' m2 C6 W' K/ m
--------------------------------------------------------------------------------------------------------8 {$ S1 a5 y. m
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
: H2 R8 T/ J: W( G( j4 O; e; O{" z# [; K. X8 u% R. }+ v6 n
BaseMouseCursor();
' q, Q8 w5 u2 u& i}$ y: x9 ^- K5 l0 ]( I% g. ~
在其下添加:3 ~& n1 M* i; V5 t
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
$ v' t& x( `+ K{# ~5 I0 z. x3 @5 i8 Q# P: V `
m_wndMenu.DeleteAllMenu();+ G8 o9 T4 t5 L) `
m_wndMenu.CreateMenu(this);
/ w3 g" E) k) l6 |( F& um_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
1 |7 h T8 ~# I. E9 e) R5 r t+ _" Y; x5 ?# l
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. ?9 g3 W A9 C6 R: e6 I; o0 Y/ h{
" r3 S; k! \$ p7 R //P以上级别才可以删除所有道具1 {* e) W; A8 k3 v3 `: K
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
2 m. d' P% p3 b+ c& r z/ u}! P! g0 q2 w8 N" B% G
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );. ]+ j0 K* \% o, M8 p& {% C/ ]
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
Z1 e: r+ k" \7 M) P% zm_wndMenu.SetFocus();# ]. \- O4 R- g: ^6 H
}- Y5 y( L r& c: l/ A
------------------------------------------------------------------------------------------------------------& F! |# h9 Z/ X# w9 N0 K* F8 a2 v
*************************
( A% C) [8 a, J' S1 {' n I' k& GWndField.h文件
' e, ^1 d$ ?2 |7 J************************* i) l- ^, @4 v0 b( I4 x
搜索:BOOL m_bReport;
2 J8 u, r( T/ C: w8 | @其后添加:2 S2 p$ \2 D. B7 n& U. c
CWndMenu m_wndMenu;7 w) \' ~/ X. V- O4 R8 A0 T
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);5 }. h& r1 {3 C- H
其后添加:
, S7 f$ T5 X/ jvirtual void OnRButtonUp(UINT nFlags, CPoint point);
8 X6 n) O& ]& c+ N+ M! k1 z
2 r) \- C$ g# r) V2 J" |3 g- S T; I+ P$ L4 P/ R. O
|
|