|
源文件中_Interface文件夹下WndField.cpp文件
" B& k" c! X1 t: {( o$ d7 Y) |搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 b& S4 k( s6 S+ J* m1 h
) ]5 f' L0 S/ H+ \6 L" C8 F
struct sItem
/ I( L' p+ K* L- _{
3 o2 j! s; @1 E) v9 z zDWORD dwId;
& A2 b! |7 ~% D. fDWORD dwKind2;
% Z5 E0 S0 c" V' G7 ]5 lDWORD dwItemId;
8 l- X4 j3 X) e" Z) G0 B# k7 T9 sBYTE nIndex;
: i! E4 t: A& R2 V* Z- z: t' DsItem(){" U K7 S* u. A9 K+ J- R
dwId = dwKind2 = dwItemId = nIndex = 0;
& Y" z0 O/ g8 p. W1 \9 h}, h& ^/ `6 I! ~) G6 i* _- `# l
bool operator < (const sItem p2)
7 G+ {8 k. z& a6 w- N3 Z6 ^( T2 R5 f{2 [0 r9 l, W' C3 B# I1 _( z7 ]
if (dwKind2 == p2.dwKind2)5 H3 k- q4 ?; F, r/ S: Z K8 A0 Y
{6 v5 H# L3 Z/ S3 \6 }1 M
return dwItemId < p2.dwItemId;0 z8 e R9 b q. q; C
}else{; c0 e+ H5 `; |9 D) G; ~
return dwKind2 < p2.dwKind2;
/ y: x) s6 `' ? }, R/ r* b! G; T$ i2 Q
}
9 u( g) U3 o9 |% {};
9 r3 n b7 } s" ?2 L2 ]class CInventorySort+ I# B) H- x4 K; n. h3 J
{
( a z# T$ z/ V/ t# _/ gpublic:
: h8 g8 a9 t8 C0 vCInventorySort()3 T8 b9 V6 X# D9 J# F$ y% @
{
# s7 h' D" c, y% F m_dwPos = 0;. G) Y# ~5 b1 o/ q9 e
}
: v* [+ ^! E3 g/ n' h~CInventorySort(){}4 g, j5 l4 j; P4 c+ z
private:
5 l3 T9 G/ `6 l u3 l# H& psItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
' d, `1 v! J: h) EDWORD m_dwPos;4 d [; X: d3 G0 ~
public:
8 Y) u ^( t0 h! x2 T+ I6 Ovoid Add(BYTE nIndex)( ]3 \" p4 a7 M: `
{6 k2 E. e. y& _5 f( b$ v% |7 t! r
if (m_dwPos >= MAX_INVENTORY)* F& J, ]% m+ L1 ]4 G% q
{) g+ e9 N5 p" \$ Y0 R
return; H$ e1 Y' F4 e
}
1 w$ J2 c1 R0 @5 K" }- W m_Item[m_dwPos].nIndex = nIndex;( \0 P. a j' y0 }! _
m_Item[m_dwPos].dwId = m_dwPos;; Y$ {1 w# `( V9 \, Y5 O
m_dwPos++;
5 U/ m: F7 t, ?0 r1 P}
7 O* |4 h' c) D6 ^, s, eBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
( w, h. H. [% W$ |3 |, @{# g7 S% z) |$ p, X/ h- ^0 y
for (int i=0;i<MAX_INVENTORY;i++); o# R( k* {+ s) w0 b! u
{
, I" r1 k4 O! b if (m_Item.dwId == dwId)
" V' c. j! T6 n. B {
) @! R* ?8 I8 h, w3 w) [+ X return m_Item.nIndex;4 N3 u) b8 T9 Q& X" j6 m r, H5 l* j
}
1 y1 G: \+ P" l4 x0 g& b }
+ e8 _ [. m1 ^! b return 255;
( l5 h% O6 V3 i}
% M! S- p6 u/ `' S9 |void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
1 P* _6 w I9 `" S) m1 Z{5 X+ n& b. s+ e3 m4 y
BYTE nTmp = 0;
0 c) U5 G! R+ q: e bool bDest = false,bSrc = false;! C u5 |- W3 R" ?3 k
for (int i=0;i<MAX_INVENTORY;i++)
0 u* ~5 V% H2 c- H) [ {
4 ~7 h3 q4 R" d: X! q/ {9 { if (dwSrcId == m_Item.dwId)
, W# ] v+ w2 X {
1 `0 P. h6 S, ~* g# T //id相等 则 改变对应的dest和src$ d2 K" {/ Q: F/ h2 W' Z5 O9 X% ]
nTmp = m_Item.nIndex;3 g7 f, C( f" f
m_Item.nIndex = dest;
& h! l- \$ U/ m }
( @. i8 _& b6 ~ }
% o1 T/ G+ B8 z8 G //临时数据保存完毕,交换开始, h7 Y# C/ p, x1 ^
for (int i=0;i<MAX_INVENTORY;i++)* v. g N+ q' B; S
{
5 E/ v6 P& d2 \# q if (dest == m_Item.nIndex)
' N9 N, L" E. j Q- N5 X {
% f* a5 Q% c) w0 H //id相等 则 改变对应的dest和src+ g& s; R6 u! f5 B. D; `
m_Item.nIndex = nTmp;$ x W, ~1 {5 B
}% {- z! `; n5 A' I
}
# ]. T4 C" b8 \% e5 `5 ^, V# [}. B! M' [% b4 g# [6 O q
};/ R) A) b0 J; X( S
-------------------------------------------------------------------------# ]/ f* q% w0 C0 r3 K% U: h
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! _, y& N# u2 E' o0 W! ]
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);# h; S; E5 y' k+ Z8 d7 z
紧靠其上添加:
~" A( A0 z: m* Tif( pWndBase == &m_wndMenu ), F" p }+ t: H; o" l7 E2 a9 b- f. r# H
{
R; b, m/ |& ~7 H; P switch( nID )9 [- u( O* k+ ]1 Z. V. ]
{
7 L/ B% w1 G' T; D case 2:
3 W' }, n! t, q. D+ n( @# }, u8 j {! m0 T3 I- W v( I1 z E
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);, o5 A, c5 s' Y3 @" y
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 Z, f) H- Z- x- _5 F: k {
5 Q) w( k) u) h& F$ O break;; i2 T" A' k4 {
}
4 G4 c H2 Q7 b$ ? m- p for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++). q! p* n: B$ m$ o& ?" _3 z
{
) x) A& T' Q2 D! L% D5 K) P CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);: V6 Y* p5 W" b4 l& F! P: l: R
if( !pItemElem )# E; m1 M/ b: o5 |. B- v
continue;$ x/ B8 u3 s2 e b
if(pItemElem->GetExtra() > 0)9 z3 A( F) ^. t7 B' P9 q
continue;" g% }+ J2 Z, c$ f
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
9 \: {: ^( H4 o2 @' s6 p continue;7 x% q8 Z# Y7 K" S' L, y
if( g_pPlayer->IsUsing( pItemElem ) )
g; P8 n/ q. `; F& l0 F continue;3 C5 c% U4 Q0 p* j7 g7 G
if( pItemElem->IsUndestructable() == TRUE )- i# ?) _- o- x+ I& l
{
- C0 I8 { N- A6 R# _ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );/ Q( \7 J. z* I6 V
continue;- T1 a i9 i( c1 @6 O
}4 D) f" p# Z9 P1 ^; C, @
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
* u" n5 |5 Z: ], b: J& g/ B }4 O! c0 d, T0 T' w. o7 c, V0 _/ n
break;
' J. R7 P0 ~8 v$ H4 T$ X }' [* o1 X% Q) M8 q7 @9 b
case 1:
$ U4 c# O: S0 M/ S {3 W* ~3 B+ k; |& k
//整理背包3 N% E' l* @$ w1 v2 s9 s; _
//////////////////////////////////////////////////////////////////////////
" \; m, @/ A; n5 X0 F //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );+ b/ \0 l: K! h0 U& z9 F q4 P, E# E
//////////////////////////////////////////////////////////////////////////
* S7 ]* A+ m9 n3 B, Z: [+ R. x1 }! \ //////////////////////////////////////////////////////////////////////////
+ d1 J0 z7 G( n' N% M, ]& i CInventorySort* pInvSort = new CInventorySort;
. @1 ~- @7 L. w* _ vector <sItem> vItem;: W" }( L3 P& s c! v8 O
vItem.resize(MAX_INVENTORY);//初始化大小; ?" q* o& u1 f& ?" P
//////////////////////////////////////////////////////////////////////////
. o- T) g: s9 T7 B" }7 W //填充数据
3 U( H: f9 l5 Q7 r, M7 m8 N/ O for (int i=0;i<MAX_INVENTORY;i++)6 L$ Y, e( D! E% p0 e
{5 C9 h3 h8 H Z( Z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
' `( N4 c2 P) Z: Z! B' o2 E5 _ if (!pItemElem)
' U! E" H% j+ D& ~4 ^3 S {- Y- b4 j2 B% f' u
vItem.dwKind2 = 0xffffffff;5 Z- M% [/ H8 V. k( F
vItem.dwItemId = 0xffffffff;
0 P; g O/ z7 _$ S" S' [9 s- \ vItem.nIndex = i;: h& `/ x7 K" Z- S( D* x: R0 |
}else {
4 d- j$ I/ b$ T% P Z ItemProp* pProp = pItemElem->GetProp();$ U. t+ D6 K* l) O
vItem.dwKind2 = pProp->dwItemKind2;1 l; L, ?/ Z: _, u9 |, b. R# q
vItem.dwItemId = pItemElem->m_dwItemId;+ D4 O: h3 Q( H9 u$ W. v7 O
vItem.nIndex = i;/ Y+ A& E u- M; D/ a/ |
}
% t8 e" S/ i& Y' w* B; N //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. w5 }. Y7 e( s" k" ^
}4 G, E5 S: ]) G$ ^
//////////////////////////////////////////////////////////////////////////
: W! n+ Q6 z8 a2 Y sort(vItem.begin(),vItem.end());//排序% l% ^ f# I' U6 q, n
//////////////////////////////////////////////////////////////////////////3 R: p |3 f* k. ?$ ^
//交换
8 b- h- t! k/ S: G for (size_t i=0;i<vItem.size();i++)7 Q$ H5 }$ f$ d8 o4 n
{
. d; j$ X% r' Q6 P0 n //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
& Q/ ]) f, I1 ? pInvSort->Add(vItem.nIndex);2 f: y6 G7 k; ~& N+ @0 k
}
. @+ F) b; b L# y- _ BYTE nDestPos = 0;
5 d4 M2 Y4 Q% s2 a9 O# @9 f for (int i=0;i<MAX_INVENTORY;i++)
' I; ^" o/ R$ R9 M {
' u, \& j! S7 n7 i7 Z- T) Z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);$ O4 ]) Q4 s; @; V
if (pItemElem)
, U7 x+ ~" v0 k* K5 o {. G5 ?: Y4 z7 |! `0 x0 F, o% S z
if (IsUsingItem(pItemElem))
9 q" ]7 C. g, a6 J, o {
6 ~0 \/ X8 L$ b0 o //这个位置无法放* J, ^ k9 U: ~3 u$ [8 P: h# i
nDestPos++;6 u+ K8 B; F3 [% A
}" Y+ I+ m$ u/ ]' W
}
, k# H/ u4 J' ]; t8 H6 q9 u BYTE nSrc = pInvSort->GetItemSrc(i);
% h" y4 Z5 l' ]5 L0 h pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);, u C, v& ?6 Z% A' u
if (pItemElem)! }/ E4 O- F0 R9 u* f
{
# U. z; X v: f \$ T \7 \ if (IsUsingItem(pItemElem))! y' ]' w0 j \% n+ O# q
{
; B. u3 A1 s1 J0 L) z //这个道具无法移动,跳过2 Z) ~+ S r1 |3 ^' [- Z
continue;
$ d" E3 H! ^4 k: X( P5 y) W! e7 \ }+ r+ ?4 G( n" N5 _7 L$ E0 p
}else{
( h; f: l5 s: B, ]' I7 c7 Y //空位置 不用动
4 H/ m/ P. p- M4 Q. O+ x continue;
& G6 z5 P3 t8 q @ }9 K) K# a3 X" q7 b+ h5 Z& z }
//////////////////////////////////////////////////////////////////////////0 M, m. u2 [ ~& G4 k
//开始移动
; N: f; l* o+ R$ l f if (nSrc == nDestPos), v2 m3 S6 \ v g# h' N2 J. _$ W- D
{
9 w) i; T3 r( i9 _ w, I //原地不动" G( P, G( j1 }. s" f
nDestPos++;2 b. _' |. v+ l6 Y+ B
continue;
& U, y+ W+ l5 A0 r, H0 ^% x$ }! l }
& \4 @! U; r: R7 d# h pInvSort->MoveItem(i,nDestPos);
: A4 q; j% a( U6 w& N, I% F g_DPlay.SendMoveItem(0,nSrc,nDestPos);1 N/ p6 E- o* H/ V
Sleep(5);
4 _, l% l7 G; | //Error("移动 - %d->%d",nSrc,nDestPos);9 f+ L: i3 b6 e& _- t0 f
nDestPos++;
: O& k% I3 E N( l }7 N% k- B9 m. v$ W
//取第一个元素的信息6 G( J1 ~7 _$ w# W
/*; m5 Q+ w4 B! i% C- b) y
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
1 d1 |6 B. q& K$ o {
3 G' f# I4 f) y* [ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);9 L- ?3 t. Z' c; J' @; w
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);5 b: B$ S6 ]9 m0 {
}
& ?, a( a9 [: W. ^+ q7 r5 A */
& C+ ]# U% y- x //////////////////////////////////////////////////////////////////////////
. B$ T! i6 A& k. ^" q7 E# ^* n* a break;9 G8 Q1 D) |9 G ~7 u- k% F
}
3 O0 S0 J5 K5 u" k }
5 n9 I5 r: B' A, S- I* ` }# \: w}* _9 a |7 R; a# {* f: _
m_wndMenu.SetVisible(FALSE);
( u/ y& k/ V! M+ s: g! W: O' {. K: P1 s/ z4 x& {
--------------------------------------------------------------------------------------------------------
0 ?+ d# r+ E/ ?, G搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
% n" _$ V- ]0 k8 q0 F{
0 s- U1 H& @' C9 @1 m0 F9 H: L2 cBaseMouseCursor();6 b* e8 z; P: h, u2 H9 g5 x
}
0 g, F8 }2 k/ o) t: P在其下添加:1 z$ K0 ~' N+ X. s- T: i5 I
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)0 C8 F& _3 f3 p
{
, ]" h6 j1 D5 x: ?" U; r$ k3 Pm_wndMenu.DeleteAllMenu();
0 e( m2 z6 ]5 S. V! X; e: m; cm_wndMenu.CreateMenu(this);
' a5 C- j2 K, C2 {* zm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
. V) ~) S9 {4 X) [ d& d% v+ C& E8 w: K- D: }+ i
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))4 B7 Z8 Q0 R$ B/ ^+ P! o
{
# j: m( E! A3 p O2 h: e' i //P以上级别才可以删除所有道具
' W8 F8 P0 K9 l( w6 J @" J/ {8 J0 x m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");2 T6 ]' e( v9 V* c) v3 R' N' @% X
}
# K4 |3 v4 c# V& [6 p0 gm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );* _8 e8 e; M4 |
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );" z7 r1 H" D1 o8 j9 X/ F% L
m_wndMenu.SetFocus();
" R; `1 L! p; }1 F" V}! |# h; F x7 _* U7 u9 P0 j
------------------------------------------------------------------------------------------------------------
/ V g8 O, S5 N+ H0 u/ h*************************
( j! b; g0 l7 i0 Z+ n; {4 z% ^WndField.h文件
+ e0 W2 F( S+ Y% _************************* U( J4 ^) \1 K! t+ h3 _5 M! V
搜索:BOOL m_bReport;
3 d6 S& J% |! i$ c6 {其后添加:1 T1 ^5 K. b5 y+ W: V6 \
CWndMenu m_wndMenu;
/ K- j/ C0 h, R, [% c9 g- f8 a搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
1 ~9 E. H3 Q' U# e/ x其后添加:
. e+ b; u$ `4 o3 r. w* m( p$ ?7 ~9 nvirtual void OnRButtonUp(UINT nFlags, CPoint point);, H0 L* U# N- t' G$ s; b
$ v C+ @0 r( U& v' ~) ?7 J- e
7 j0 o# }4 K3 j; O |
|