|
|
源文件中_Interface文件夹下WndField.cpp文件: t9 W8 I$ Z: _% i8 G7 [9 [
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
/ P2 z: |; w% i) _
* L* K7 [& V! g# @2 N# \struct sItem
: k. z7 s; A+ r" M) n1 Q9 W: T{' @; K+ T4 u# J* o6 s9 D% v
DWORD dwId;
1 d9 O/ O7 |! L+ rDWORD dwKind2;+ A' w/ Y- [8 W& s' b2 y
DWORD dwItemId;8 x' G3 C a0 M/ n
BYTE nIndex;
" M2 g& w, H* Z% A, L: x( Y: @0 NsItem(){
: r+ k! G' z/ N5 V dwId = dwKind2 = dwItemId = nIndex = 0;7 {9 ]7 w+ X3 T1 D1 x) n6 `7 u
}! l+ P! ?7 I7 {
bool operator < (const sItem p2)
! R/ m" }; [! ~* C/ G K9 B{# }. x! k3 M( f2 H
if (dwKind2 == p2.dwKind2)/ j8 T& l, m* J: F. T8 G
{
7 q7 H; K2 \& ?; g8 [4 a, I9 Z return dwItemId < p2.dwItemId;
) W. F3 W1 y+ t$ G( I) L0 h3 |* ]: N }else{
3 f0 E8 l$ h1 d- n; D! @$ D return dwKind2 < p2.dwKind2;/ a2 F- M; {1 v: W1 c5 j( ]
} b' b. r) v* B1 T. w$ d
}6 R' o) n& v B3 U; U2 C$ W L
};
3 G! g7 t4 R+ c' j; s7 wclass CInventorySort
+ d9 c2 b% V8 u' ~{
# @5 A1 W o$ M+ K" |- q2 epublic:
/ |" n. p4 M- l4 CCInventorySort()0 F* g5 T( T% H9 O' ?+ T
{3 S2 p2 G7 Y7 Q# j. S
m_dwPos = 0;
- Q1 G& G" b/ B}
7 a5 T; T( V2 I1 @: z/ @8 B- H~CInventorySort(){}# h. u3 K8 ~( l# v: m
private:. v$ s# t, X( k. a4 w- D4 q
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息/ Q/ k; Z# g' G5 H5 a( j# I
DWORD m_dwPos;" z; i; F& z% E# }
public:
/ D( S' z9 W$ d1 j, A" ?void Add(BYTE nIndex)0 D, S3 O- B' }- G" i/ T
{
, ^$ X+ r$ B5 N0 {1 X) H if (m_dwPos >= MAX_INVENTORY)
, O/ N+ j) z* \# ]: H {
0 m4 e f; h. b return;
5 h- ^ o# T% V, O }
4 G- A: l( R! |9 c* w m_Item[m_dwPos].nIndex = nIndex;
2 b0 i8 c, A: K; d, P m_Item[m_dwPos].dwId = m_dwPos;
! X& l6 `9 J& P' \7 a, ? m_dwPos++;
0 w* |: G$ g4 p/ q: ^/ n& [}
% h/ W0 p: I7 k% }9 w/ qBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
5 N/ c. _5 v0 U" `{
H1 f9 e/ i7 E5 o' l for (int i=0;i<MAX_INVENTORY;i++), N, C6 K4 v& K9 ^
{
/ k( D" s5 R! d3 Z if (m_Item.dwId == dwId)
4 |& l1 c3 ]* M6 t8 x {: F& `6 \0 l9 ?/ q9 f# f
return m_Item.nIndex;
) B9 Z; z- o, z B) h% v4 @ }
" I4 I! _1 @. I }. h o# r% s+ U/ d+ \' G
return 255;
( F: E/ P" c, i6 g# r) P8 k& m}
5 n, W2 z) {- `/ y- x7 x3 K3 ivoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置, {2 b) H7 N: D1 G7 d9 D; D
{# L7 T+ f( @& c- j9 w5 @8 h
BYTE nTmp = 0;9 u& x5 n& O [$ P0 J" R( T( _
bool bDest = false,bSrc = false;
7 x5 y* G, {6 I& d; Y for (int i=0;i<MAX_INVENTORY;i++)2 Z- k5 o# j2 N) W* G
{1 {' T1 W' _; Z! h1 i- G4 k9 v
if (dwSrcId == m_Item.dwId)
9 i$ }4 \# v: ~* @2 g6 ] {
+ h; l G- C. q$ {' s. T //id相等 则 改变对应的dest和src) a/ c7 S- F9 O* F$ f
nTmp = m_Item.nIndex;
/ a4 ^/ }" R) A7 w7 ]! s' s8 ^ m_Item.nIndex = dest;
: T, X6 H$ R! k; I1 z }
5 o' ?4 h3 U* s8 \/ b }
7 G0 m- K( l) Y% e //临时数据保存完毕,交换开始, }, l: T* I" ^: ]7 g# H. a
for (int i=0;i<MAX_INVENTORY;i++)* b) ^6 |: E; W4 M8 D
{3 L* K& S8 C' r) f+ f) j+ [ p
if (dest == m_Item.nIndex)
. w1 H" D6 w( K l1 _ {
7 r5 E* w0 E; s& j" N //id相等 则 改变对应的dest和src
9 `" d. m3 @ A m_Item.nIndex = nTmp;9 l" t5 n" K; i6 h! p$ y& h
}6 U, d d* H0 n8 G; C) M! \. W2 o# T% k
}
" X9 [6 y- E) T- v}
) J# h1 Q$ c$ \& z6 |' V1 Q9 d};1 V+ ]# p6 U( m$ ^; j
-------------------------------------------------------------------------
$ _& ]4 ^7 N# {依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
5 m6 e# S% @# l搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);# l0 _5 u7 S, f) b
紧靠其上添加:
9 j+ U2 u$ i8 o# n- Xif( pWndBase == &m_wndMenu ) m! r# \% D# n0 x" _& M! x/ M/ I
{( I9 H ?# i3 E9 c. v& \
switch( nID )
1 L6 i/ m' P% |4 I5 x4 u {8 H6 j- A/ L" C, m" _" _. h
case 2:9 \7 j8 d, V) ? n
{) P9 w D3 q, L# _- y
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);7 ^3 \ [& t. m6 ^
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 r1 f- q4 z) M) k5 ~( p
{
' n: z" u: ]( c5 b1 c5 e9 f0 ^& H break;
& Y* ?* z- p. \ }
2 v" A% A+ M/ t; { for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)% W9 Y7 v+ _: B6 x7 w# J3 A
{
8 `/ V6 j9 a3 O6 D) x, H7 \1 u CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- E3 z: d9 l ~5 _5 q
if( !pItemElem )
5 u) M2 f( ?2 k continue;- ^9 ~; H/ r; }% T8 U
if(pItemElem->GetExtra() > 0)
: q) h8 B+ ?) s% ]3 O5 h# J. X continue;; O5 T% @3 J) E% L
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
- ?) Y7 E2 h7 [ D continue;
. ?+ z) {6 D- C& ^0 ?: v if( g_pPlayer->IsUsing( pItemElem ) )' `6 T- B0 l3 j0 ^
continue;$ S: Y- ~7 j9 g( t
if( pItemElem->IsUndestructable() == TRUE )! h6 W$ g; D: D+ B8 e6 C6 [
{
: R' T4 w7 a' M# r3 m8 K0 r g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );7 G% T& A* H" t: Y: _- F6 ?6 D
continue;# E* u, q) |! i3 E4 A) Z( ^+ |* P
}
5 [/ m& Y, T) [- _ x g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
~" d6 s( P; U! _* T }; H# k- N( X4 N) `& i. P
break;* A- N; Z/ O. z# |6 r% S% d ?; i
}+ ?1 {" _. ~/ c$ R6 J" Q) ?2 E' t
case 1:
7 @0 p$ {( m: o" k {$ J$ `( ~1 W, E4 m; a- F7 u
//整理背包* _! ~$ ^5 e/ t" j
/////////////////////////////////////////////////////////////////////////// ?; H1 _; J& Y; x
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );% v& i% @: P" T! H+ M
//////////////////////////////////////////////////////////////////////////
* \/ G& v T8 B- u$ {# B D //////////////////////////////////////////////////////////////////////////* L q; }6 H3 U9 `: f1 n
CInventorySort* pInvSort = new CInventorySort;
& @% `5 E" R4 } g$ e vector <sItem> vItem;- Y) v/ X" i5 l
vItem.resize(MAX_INVENTORY);//初始化大小2 G& X, {0 t- j8 @6 z3 y% G
//////////////////////////////////////////////////////////////////////////
% T& P8 |, f6 L9 s0 R" W //填充数据3 B% Z9 R' ?, E. _; i( L |
for (int i=0;i<MAX_INVENTORY;i++)
0 `) o2 w0 K, B {
2 L N$ z0 j7 {. l7 A8 q: C P8 m7 T CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* B! ]' i7 M3 y& a; h if (!pItemElem)+ r) W% w/ R$ v6 D7 s. h& T9 J
{3 \8 y1 |- J) B& e! G" J
vItem.dwKind2 = 0xffffffff;+ s/ S- p8 V e# G
vItem.dwItemId = 0xffffffff;
8 C, Z0 G2 V& T( p vItem.nIndex = i;
" |: U4 c5 G' c$ J+ M& w8 @/ t# _& l }else {
@$ H8 R6 A* i; H) B2 ^3 s; h5 z ItemProp* pProp = pItemElem->GetProp();3 F- D6 K0 u3 a5 r
vItem.dwKind2 = pProp->dwItemKind2;! P4 B$ C8 U* ~- T9 [
vItem.dwItemId = pItemElem->m_dwItemId;
- C# i. M: q$ Z& |7 F- A vItem.nIndex = i;/ v4 a M/ Z* c/ d4 @' K! @
}5 W4 a4 ~# _: ?7 J
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);! {; W8 o* Q1 B) R* ?+ f- M
}9 ]# x1 `2 f( K- i9 T) E0 O$ M
//////////////////////////////////////////////////////////////////////////: L' O/ W1 D& t v* l
sort(vItem.begin(),vItem.end());//排序
, g" [/ Q1 @) c7 l8 k( o //////////////////////////////////////////////////////////////////////////
! o' n; Z+ p3 o4 j. o //交换
* I' A- t" B i, P: v for (size_t i=0;i<vItem.size();i++)8 N ^* z: B: I/ @1 S |) `
{
3 ~( E: l. H3 h _ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
t1 N( l( P9 u$ s4 N! K0 `4 q, Z pInvSort->Add(vItem.nIndex);7 g2 m) V: O6 q4 a" F8 I5 {0 P v$ R
}
5 }! L. {' D; ~$ G2 @- o9 }: v. g% n BYTE nDestPos = 0;
$ q# i# W2 g \4 ] for (int i=0;i<MAX_INVENTORY;i++)7 U. {9 S( D8 @7 q
{
1 \, H) o' \0 Q5 j) P3 f4 u CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);- f; d. r/ v6 K$ a; I% q; U0 o
if (pItemElem)
3 \& }6 D# w. e- N {. S6 p3 [" F- `& S. c* o) ^
if (IsUsingItem(pItemElem))8 I# C5 r* Q9 d( s+ d
{
* G' @1 Y. C" }7 `4 l+ b //这个位置无法放
8 h- T0 D# K- ]3 Q* C2 O nDestPos++;6 B0 k! y! N" k t8 u
}* e/ z4 V/ H& Z
}
5 u; K$ K5 ]/ L6 r `. m6 X BYTE nSrc = pInvSort->GetItemSrc(i);
$ _" C2 W9 d; Z4 C$ | pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);) Y+ ]7 o7 P. q/ r9 ^. \8 N
if (pItemElem)2 p. N( Y# i3 t) N) I9 M/ \
{
% n9 D) B, }2 s6 J if (IsUsingItem(pItemElem))
# w) T7 ^$ \8 Y9 W6 z2 u7 ] {
3 q; ]$ m& r* D& b! j' ?; }; ? //这个道具无法移动,跳过
- L7 n3 o% W% t) S! T continue;
6 I' I+ x6 h, W+ p2 _1 t1 ~! a }
5 H! K) z6 ^8 i# ~( k }else{
! r0 t& b, G4 n* @ //空位置 不用动
: h9 q( ]+ S1 w! q4 o: E; d, ^ continue;/ G& c$ R9 f! {& @$ V, Q) w" P
}
8 _2 c( j$ |1 o) J //////////////////////////////////////////////////////////////////////////
! K, X X5 J3 W //开始移动
& h# E0 @+ k: b3 { if (nSrc == nDestPos)
+ L; O5 y* C: R8 F1 e/ {2 t {6 Y$ d- S9 G$ D) f
//原地不动/ u* X: `" B, Q; n+ L
nDestPos++;" }! a. ~5 P0 H. x3 C% O
continue;
s: d* R9 S& {6 x+ }) C# F }; N' J2 F. L* E/ {& I
pInvSort->MoveItem(i,nDestPos);
7 e; v% _# y, L g_DPlay.SendMoveItem(0,nSrc,nDestPos);2 Z* G; \' r0 {9 Q; E& p6 X
Sleep(5);; z |4 r1 ^; x( [! Q
//Error("移动 - %d->%d",nSrc,nDestPos);
' I8 |! S) n8 O1 ? nDestPos++;
( S2 u$ T. X# o3 g! v& _. g }+ u$ y, |3 h' }( i
//取第一个元素的信息
o- o8 b3 I2 z- f2 D2 Y! j9 h* L /*
* J4 w5 I5 r2 }& A2 ]+ b if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)/ q( `4 T4 |2 o6 X7 I8 z
{( S" O2 D1 h7 U. C
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);# ]# g; I1 |! o$ B
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);* [6 O" w+ R B* \
}
9 K, }+ c! j% U q */
/ Q* {: b. J% u! s //////////////////////////////////////////////////////////////////////////
6 H1 C' \: `1 y* B+ q break;, A+ S7 I; g. @) v ?# p, G9 F2 m3 `
}( Y6 k& Y2 l6 n3 d# Q$ \8 }, u" h0 F
} & H S T/ H; Q) }/ d5 c8 R
}
( F* E7 V6 G7 q B9 |1 r) d. g' I! n7 lm_wndMenu.SetVisible(FALSE);
3 m) d! Q5 v; C _
# b( a$ T# c+ [3 t/ h--------------------------------------------------------------------------------------------------------
: e7 L- x! Y( S. Y搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
+ E& {/ f4 I0 u0 ^- m{% }5 s- i) m1 q- b6 f
BaseMouseCursor();
- D8 _( ~/ v1 w$ ?& _}
0 P E/ D( |$ ^: ~在其下添加:3 O7 K$ k5 Z0 p5 [) A
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
2 \: F; z4 B$ b+ R, M' s$ v{$ Y& j( B; w9 w. l& q" Y* }
m_wndMenu.DeleteAllMenu();
4 w$ e. _) F0 s4 q# f9 ?m_wndMenu.CreateMenu(this);" p+ K, d' p/ f1 r
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
/ E1 }. m2 @% G1 c9 K. y8 e* `; j) A
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); L+ W4 ?/ d# V! X' Z0 ?7 J. h
{
* D' |( ~! d A% M' ] //P以上级别才可以删除所有道具
/ Y) V9 Z/ P1 G6 e! @ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
9 `( i: g- Z7 z}
5 T1 S+ u/ s k; K3 I1 em_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
$ `8 d/ F. w) Z! Tm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
) D6 M- M, [9 l* E$ |4 Q7 s. ?m_wndMenu.SetFocus();2 @# ~+ n3 a5 \" F( f
}2 D6 w6 K2 k9 Y/ e7 v
------------------------------------------------------------------------------------------------------------
# S H$ W% _: q*************************
/ W+ ]/ ], [ ]' ~2 E/ wWndField.h文件# o) M+ W7 n( j5 z9 p, W; Z0 ^3 g
*************************2 o0 X8 l& f5 H o2 O
搜索:BOOL m_bReport;5 M% S3 C. d2 L B8 L8 |/ n, j$ ?6 Q
其后添加:8 |- n3 h! X! _0 s) A2 m
CWndMenu m_wndMenu;
+ ~+ S4 y1 R/ @8 n# x搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);8 j0 {+ W& ]! m
其后添加:3 C' |) m) Z& A4 W& l/ M
virtual void OnRButtonUp(UINT nFlags, CPoint point);! t: e& e& L' U: U. h j
4 \ a8 Y. I: L( }! ]$ q8 S8 @+ W& ?1 ^
|
|