|
|
源文件中_Interface文件夹下WndField.cpp文件, E" D/ d9 B7 X# l
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
( x8 j9 g- `" ^7 L% i- A0 f5 Z
& D9 L0 s# `9 S- k& o! R' S$ }; Istruct sItem
9 _! y; }+ ?2 J1 B$ a5 `{
, L+ B/ r1 g0 V* X# [4 V `7 O2 aDWORD dwId;
+ \& R6 S" m& UDWORD dwKind2;3 j9 `7 U' k. e% f$ I( U
DWORD dwItemId;- g6 G8 x0 @+ S: {! _
BYTE nIndex;
5 O" T& z+ @: @- q" AsItem(){
! n' G+ D4 O' S6 B dwId = dwKind2 = dwItemId = nIndex = 0;
- P& Z+ \: q' k3 I}9 X. p* H0 P! W6 ^* W
bool operator < (const sItem p2)
% N, j* Y: H) e& L* x* E0 `$ M' N{8 y/ M" [5 g) @! d6 L
if (dwKind2 == p2.dwKind2)
; S" D' q2 L; q8 B2 }9 y8 e {
" r' j9 q" `5 T) e8 x) w8 z: Q return dwItemId < p2.dwItemId; K) M% I1 D/ J3 g; M0 h
}else{! h8 p7 o2 v7 M/ N
return dwKind2 < p2.dwKind2;
6 Q6 @. N. K! q- ^1 w( m x$ s }' c# v5 E3 Y3 ?% C" _
}: L. ]8 D0 m3 ]3 D
};# m D' T) D7 L3 u" x0 F: g
class CInventorySort4 e4 S: b2 W9 p- y
{
9 o1 Z1 { @( n& q4 K6 tpublic:7 Z5 Q: i! m( O0 t% e9 E
CInventorySort()
Y7 j Z) G* B3 i{3 h+ R* V. C+ ^2 \! M! a
m_dwPos = 0;5 n) u+ x1 ^9 x) C& Y: H0 P* E: }) m
}
3 o S! I2 Q0 `7 W& ^7 T~CInventorySort(){}& L* @2 D& |* G, q% U
private:
9 U; f6 k) B4 n5 [sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息$ a2 G% K' G9 P5 G4 l) Y5 q
DWORD m_dwPos;
& G* D$ ?5 a$ U) w* o. }& hpublic:
9 C. l& C+ v0 Avoid Add(BYTE nIndex), W; a% g* m7 X* n7 u7 ?8 m. D
{
3 u5 ], w2 A( o4 X0 N! S* _! T if (m_dwPos >= MAX_INVENTORY)
0 a& v8 \4 s& _2 Y* E {, a- Y! V% Y0 ]& w7 h9 I
return;
) _+ ^ E1 G# G9 m$ B }* r. @, \6 _: W% [
m_Item[m_dwPos].nIndex = nIndex;
! {( P1 i/ `, M" B4 g) S" } m_Item[m_dwPos].dwId = m_dwPos;
4 W1 c* c8 L$ ?( d# c" `1 |# F m_dwPos++;
J' O! Z# w y/ T}, j- T5 t3 m. X# G8 B$ a
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
- E/ M% j4 x9 v: U/ G+ }; d9 h/ g{: E* N( Y: B. P; m$ I5 q( ]! |
for (int i=0;i<MAX_INVENTORY;i++)
7 }: \: l4 q9 Q8 f8 i- g& @ { q# j! O" B$ ?# @1 A% {; {1 v) w! @
if (m_Item.dwId == dwId)/ ]# o" G% `' N; }) t
{
$ n! ]# V; B8 {* x% |0 t0 m return m_Item.nIndex;
9 S0 g% E8 T9 P# V8 I2 L }
# J8 h% P2 c& k }
; M$ W% r8 [2 \3 w) F& ^ return 255;2 Q7 z( R4 O/ X/ W4 N) m$ \
}8 u: L$ q a; x' ~
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
6 P9 p/ @1 n3 b7 y( U5 J8 O' f{
& N- }2 ^2 a% J3 \0 m" c8 R BYTE nTmp = 0;
K; r- M. t) {: w. h bool bDest = false,bSrc = false;
- C1 {; J& L) W) R for (int i=0;i<MAX_INVENTORY;i++)
* F- k/ v2 N8 C4 y; ` {
% f1 B5 z# g" j2 \, R' _' [ if (dwSrcId == m_Item.dwId)& ~& M' r+ i" L' L5 G b
{
* q! L, G3 ^4 D1 l5 [ //id相等 则 改变对应的dest和src% Z* Z& M, l/ p) N5 E
nTmp = m_Item.nIndex;4 [% S! @* r. A! A+ z# G+ D! c( I
m_Item.nIndex = dest;
0 c- h* V! q- c; w }9 J0 p j/ ]' `% n5 R, S
}+ q) c. T8 g! g" a: \, m5 H5 n: C! ~
//临时数据保存完毕,交换开始" x8 q( C" L! D$ Z: R! s5 h7 z
for (int i=0;i<MAX_INVENTORY;i++)$ A w- \4 T- _' f1 \7 T
{( P8 W) S- l' c* S- m5 v
if (dest == m_Item.nIndex)4 _4 x: I& \) R# Z: `' r
{
1 Q4 _0 r: k" P X //id相等 则 改变对应的dest和src1 W1 H' f: q% Y8 D3 ?) p
m_Item.nIndex = nTmp;. k+ ~) V% ]9 S. r. i# H7 ]
}
+ e3 e" A, g! T9 Q" f; S, E }3 ~# E. s; K' ~$ z) V, R
}
; _6 P* k' ]' t; [};
/ Y8 B [# s' M- e, z0 P% k4 V0 A-------------------------------------------------------------------------5 T* h/ C, t0 a: k7 }* M
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). i' L/ M& x- p: f$ b% L; _
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
; p, K# e6 q4 {紧靠其上添加:
" ?2 K! s1 C4 z6 Lif( pWndBase == &m_wndMenu )/ G; ] a3 e& Z* ?
{6 G8 L; b; m; G. H* L6 K& r
switch( nID )* \& x" c; D7 `8 n/ D W
{- v1 Z- s7 S% m! v
case 2:
: A2 j) B1 i# B! Y2 a {6 F8 E5 u/ K* P0 g6 }" `3 n$ S
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
7 Z- t0 y& p4 Q0 Q& C. B if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))$ e a; X! n# e& {
{
! A# \4 x2 a1 P) \1 i2 m8 f- p break;
, e" t( [& c! q6 J4 ?3 ~ @! E; ? }! Q6 I5 i- P* t6 A9 Y6 G5 j
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)* E7 K- G" L3 L I, v. v
{
4 \) b4 v* [" e8 j4 U3 R, p CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 M2 o9 W! }% w0 [
if( !pItemElem )
, K# A% ]+ t2 B continue;4 C% S3 `; ?% G6 G% s8 x9 C* }
if(pItemElem->GetExtra() > 0); B, R8 ^3 D' Q4 y0 [2 a
continue;) y2 j) R0 S6 _: h4 `- H
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 0 {/ x5 f+ p2 M" Q6 `
continue;
$ m$ i; ]0 a' y2 A if( g_pPlayer->IsUsing( pItemElem ) )
( O* ]& M! f7 q' o% x. I( a+ u5 y continue;
, k+ Y* U( k2 Q3 U+ U+ B; u+ s; c if( pItemElem->IsUndestructable() == TRUE )$ g# P4 L& {/ I- O
{( R4 m+ G3 t+ O* S ^$ R
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );4 Z# {& o! K: m% j& d
continue;3 r) o9 O( O6 F7 _8 A
}: u a5 l& H2 R: V7 R( t" J
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
! b6 n1 W. F5 E7 a8 z+ c' Q }
1 L6 Q E+ c& R% @' e# E break;
: I' R% i2 H; c: |( d) Z- u \ }
! g% @" f/ m/ ~1 f5 I+ Y case 1:
; H8 k8 w9 Z- Z( n. d1 e |6 e& \ {
; y0 n# Z5 f4 I3 H/ e2 p' q! A/ h //整理背包1 a# P& t2 k, ~1 X$ J
//////////////////////////////////////////////////////////////////////////
3 K) m7 `% c. T' O. g //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
0 n8 R; Y9 ^# u8 h( _ P: m3 j //////////////////////////////////////////////////////////////////////////
. y {' W* j* Y% V" B" B8 C //////////////////////////////////////////////////////////////////////////
& X4 o. R& d( P. `" k# X! T9 P s CInventorySort* pInvSort = new CInventorySort;
2 q+ O' u# c4 ~2 y- t6 y vector <sItem> vItem;2 ?2 H+ [2 X& T% P
vItem.resize(MAX_INVENTORY);//初始化大小9 S' b5 N6 X& L( p8 e) W
//////////////////////////////////////////////////////////////////////////: T2 }3 U9 |2 P7 W; [' T
//填充数据6 Q: y6 Y0 w$ ], i, u
for (int i=0;i<MAX_INVENTORY;i++)
/ v- x& }2 ? g2 @) \0 y. p, B {
4 s; ]# H: ~- B. b4 P& L CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
4 A: X k' X P if (!pItemElem)$ ]6 |$ G9 b7 c7 F, C0 r$ T+ I
{
( F; K( _. [) K) L& y1 c! M# O$ o, S vItem.dwKind2 = 0xffffffff;
- i, D- H$ Y7 K3 ] vItem.dwItemId = 0xffffffff;" K$ A, p& W, G) _
vItem.nIndex = i;
3 y* P" o3 a/ Z3 n& `2 y }else {
' y! I* J, q/ t% F. U# D* U. r ItemProp* pProp = pItemElem->GetProp();* k9 H: B1 [! H. n$ b* j
vItem.dwKind2 = pProp->dwItemKind2;4 S2 e7 u2 ^: U5 y7 b1 F
vItem.dwItemId = pItemElem->m_dwItemId;
& h& Z1 c) |- @% }: v0 k vItem.nIndex = i;
J; ~* r% ~" Q* D) A2 C }
5 D' z8 V( f' ?; ?1 O: R1 }. Y& e //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);0 [9 F. q, _/ [3 ^( n) B( c
}# o9 A7 u+ u3 z; A
//////////////////////////////////////////////////////////////////////////* v0 ~$ M! I5 y5 J- R1 v
sort(vItem.begin(),vItem.end());//排序
& }% L6 ?8 ?7 q3 V$ P //////////////////////////////////////////////////////////////////////////+ Q3 @# k9 |4 D W8 X8 G
//交换4 a7 Z/ b/ c. S* I9 _
for (size_t i=0;i<vItem.size();i++)
: b- ]: o" M5 r$ A: Z {
+ p, B `* h* h7 V4 B0 L# o* z //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ Q" Y7 X8 u& z3 D& r
pInvSort->Add(vItem.nIndex);) m& \( |7 g9 k z2 m; y3 b0 Y
}+ O- |" r7 s& X1 {* I3 ^4 r
BYTE nDestPos = 0;3 ^6 Y8 y9 K2 X9 I& O
for (int i=0;i<MAX_INVENTORY;i++)! \- g0 B$ q; a. \
{
% U* n! u; D: B0 K* j7 p1 M CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);& G/ a' h* i0 G# L( n
if (pItemElem)
& K J. k( @9 K' E8 B+ z {
$ E* F! {- P2 j1 r+ `6 F) Y9 c# p if (IsUsingItem(pItemElem))
* K% z0 T5 t8 g {
& s7 H; x/ W* _: e4 D2 g2 m; U //这个位置无法放3 }* Q. o* @3 H$ F& M
nDestPos++;9 s. J6 r2 ]7 i, Y: p
}3 G \) |* E: e }) S6 P
}" u; B- V& _7 m
BYTE nSrc = pInvSort->GetItemSrc(i);( }; {% j* f0 ]/ `& d; ~
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);7 u; o4 N5 z) u0 A
if (pItemElem)$ J( A. R+ s% v: J
{, h" v4 K- m+ l6 b& G/ f# l5 M$ [
if (IsUsingItem(pItemElem))
+ T P) B) O5 K/ t& C$ V; G {9 I" M2 S3 X( O! t4 S& ^5 E. `
//这个道具无法移动,跳过# z3 o2 [# T' J1 F7 I3 E _+ K
continue;' J6 V9 K8 U" I+ T- v, k6 R
}1 K- H3 B0 w/ _+ Q3 X/ H) r
}else{
- a8 g- T$ o' ?! k! r, ~; y //空位置 不用动
: p$ p6 P/ V# s7 q2 ?/ c continue;
y" a, u7 A* k' P }2 p" G- [9 P" ~4 p$ t* }
//////////////////////////////////////////////////////////////////////////
) g5 B! h, d1 a3 y6 M! j1 ?. _ //开始移动- @! i+ i% K2 R. M$ @
if (nSrc == nDestPos)/ W# e! N! _& q Z& s
{
7 |7 [( x1 W$ g* e //原地不动
9 ?2 _( e, e* D$ J9 V nDestPos++;
' _; t9 ?) }+ W t, a continue;8 b, Y, p' [/ X
}7 D: x1 J2 L7 F/ K' u
pInvSort->MoveItem(i,nDestPos);
* {' ~; k( t! e8 g g_DPlay.SendMoveItem(0,nSrc,nDestPos);& u4 `4 T: K+ P
Sleep(5);
9 J4 a% w- @* A3 e //Error("移动 - %d->%d",nSrc,nDestPos);' v9 ~" v8 K2 m1 X' E9 E& ?
nDestPos++;: S3 i2 r2 v, p& Q. _6 p+ a
}0 |) s5 }4 B6 {
//取第一个元素的信息' _/ K( Y. `* \/ x. G
/*
- n5 _# t/ U$ k& n/ G if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)8 Y# _+ Y: Z# w6 _3 b) R
{ b! R. i/ j7 [9 }+ S
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);7 Q# c, g) Y1 T3 L2 |+ M
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);" D- G5 O( b: R. m2 J2 G
}
& X1 G3 u9 N5 Z7 u* ?, l */
' l6 w7 |8 t7 h/ }$ e1 W //////////////////////////////////////////////////////////////////////////: ?5 c: h$ D' A: Z
break;1 V1 U% e0 @' f3 N' y o
}/ d3 `3 v: p& o6 Q9 z, }
} + i, r" M1 h) D$ f
}
0 K. |0 E& G, I# s xm_wndMenu.SetVisible(FALSE);
$ J# N2 D" e+ m% X8 t% v( G: d' t, L2 f0 {
--------------------------------------------------------------------------------------------------------) o i5 v0 e4 K
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)3 ^1 Z) C" I4 k9 j* |# Z7 q2 ]
{
+ c& {$ M3 K/ D: L- XBaseMouseCursor();
8 M9 X K' \0 z0 i2 [* A}
) \' l. Z3 Z2 T在其下添加:
7 I# n1 I+ R: d# Wvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
" }+ O4 W& O$ r: I! r# ~& j& q9 D{) j! R1 b/ t; e3 v& C! U$ U
m_wndMenu.DeleteAllMenu();! L1 n; K: I4 M8 K# M6 }
m_wndMenu.CreateMenu(this);8 x. Q$ `9 m9 `& S& v
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
. ^# a( ?, ]8 {9 V
8 I8 g( T. i; h7 }if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 x# o. @4 Z9 g4 _" v- _. R7 V4 I; c, n{& a; i2 B" {: I; N' V- e) e
//P以上级别才可以删除所有道具+ m8 o1 r2 \0 e* I0 J
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");' g, T3 }! L3 T4 `; m) S" s! D
}
' h: v* W \: m' j# P0 @m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );- q7 m+ s2 a7 R' A3 N# p6 n2 }2 F
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );8 R1 l4 P; i$ m$ [ a
m_wndMenu.SetFocus();
/ D& A7 h% v- S, w: V, B' X9 P}
( h, D C; `0 F, E8 b" R5 R------------------------------------------------------------------------------------------------------------' R% \4 h, `6 X
*************************
* k! {" J, q1 n' |WndField.h文件
. ~, v/ s; A* _7 c/ ?/ a*************************
; R0 [7 R4 z/ H搜索:BOOL m_bReport;
. t6 R- e' {: H6 ~其后添加:. \: b i7 H' p2 m4 m; U
CWndMenu m_wndMenu;
' o" T5 h. w% ?; ~& l3 _% r) i搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
& p* s& o$ {, A其后添加:
* N) }( U* N6 r; {virtual void OnRButtonUp(UINT nFlags, CPoint point);
- q; @( ]# j0 q% E% K2 U% R9 M( ?" D5 ^% |2 U# m' D
, o( N3 A J* e- E
|
|