|
源文件中_Interface文件夹下WndField.cpp文件. }# x, v2 e$ l# G% @ _9 `
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
# y0 V+ S V) h% P5 W$ ?, r+ I1 ? |2 }1 B: b! d
struct sItem) p6 l' y. Q, D- i% C) ~1 Y% S: b
{
! `. v, E7 u2 j' O. S6 T" K/ ?8 aDWORD dwId;& ^0 }+ ~! ?( l
DWORD dwKind2;- w8 f8 G$ r- `! S
DWORD dwItemId;
, Z$ }# O" M# c3 sBYTE nIndex;
- {* v6 }4 v; Q0 W% {% [& d# }2 IsItem(){
d& c8 T- I. ` @/ @5 @) s+ P dwId = dwKind2 = dwItemId = nIndex = 0;
3 j& x4 L; i* ]}5 Q# z" i) i5 @6 j2 L
bool operator < (const sItem p2)
# s( {9 `8 m+ H+ }{ T0 p: |: a0 N
if (dwKind2 == p2.dwKind2)
/ {2 r9 R( E! Y: p2 i- \ {
3 I1 b# ^8 e3 @$ u$ ?: f return dwItemId < p2.dwItemId;
! F( \' H2 C- y5 N4 B+ G }else{8 ~( Y: ]& N0 L" ^+ X1 q* e( b1 M/ X9 }
return dwKind2 < p2.dwKind2;& E3 b) ]3 O% [9 d
}- q* c/ O, W2 W7 ~3 ]* m
}
( { m# k* W: i. t8 y' q};) D6 l. o& ?( x
class CInventorySort
( s' X+ C- ]& {! V8 M' i{- B. e1 I( c. ]$ \" ^
public:9 B- m5 W8 d' Z
CInventorySort()
& N& I/ T5 s: [. M7 m3 |{
4 V7 k& ]: c$ l m_dwPos = 0;. v! F& q# |& T
}+ m! A! t7 E" K& u- Y( K
~CInventorySort(){}
2 E! r- Z6 H$ _- h: mprivate:
8 M% m- @* p* o& RsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
, \. d3 F3 Y, e- p* ~5 X+ HDWORD m_dwPos;
3 A& ~: R8 P5 j" U/ u2 j7 c. |" Cpublic:% s5 q4 B9 k5 W% @5 _
void Add(BYTE nIndex)
4 [$ |$ v* O: o& ^{
) z1 v8 H; V" e6 D+ A2 V) p& l8 } if (m_dwPos >= MAX_INVENTORY)
% C; D2 c7 ^8 p6 e; S: D {
4 g" T- @" ^" U* B! C return;" r- z4 W6 |5 N5 ^: o0 P5 h$ I; h
}- s' r J1 L! }$ ~0 ~* s/ J
m_Item[m_dwPos].nIndex = nIndex;
N8 Y# t- p: U m_Item[m_dwPos].dwId = m_dwPos;' I- {- L# i7 \( `) w, M
m_dwPos++;
" A! x0 Y1 e5 Z0 N8 @0 u$ n}2 [6 p) z, J6 @# B, k
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列0 g/ c% G! L9 _. n" V4 ~ _
{
' s* X' t/ Y, P. ]; u# G. | for (int i=0;i<MAX_INVENTORY;i++)
$ D1 D# I' F+ C$ D# g3 v" T- k7 [ {. f) o0 R' W, J4 B8 u9 l5 i( u( D$ ^
if (m_Item.dwId == dwId)
. t4 u/ T0 f- x {
9 ?( h0 ?" w3 e return m_Item.nIndex;1 r. A$ b6 b. v
}
/ E% `8 X0 c0 w& c. f4 x }
0 v1 F F, {4 A+ d+ M$ g/ y return 255;/ e: K* r! _4 w3 m3 V
}
$ F( |& Z7 d# E, O, Fvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
A: e. O3 I; ~2 Y{; ^. G3 W8 t3 w; d2 M! E" K* _
BYTE nTmp = 0;
+ r# V' j; F1 {- s bool bDest = false,bSrc = false;3 J# [- `9 m7 a+ u7 d
for (int i=0;i<MAX_INVENTORY;i++)
6 ^2 o7 u1 F: l1 v, j1 \+ f {
d7 e1 d2 w7 |, Y3 ^( I if (dwSrcId == m_Item.dwId)' P+ i6 x _7 E# L% w2 C: A; m
{" K4 }: {8 V7 j. A. ^9 ~' q* x2 q3 u
//id相等 则 改变对应的dest和src
2 K& T% _. J, J; A; k6 s& H2 a nTmp = m_Item.nIndex;# C) L6 g4 L, }$ e
m_Item.nIndex = dest;) \& F$ Y6 _! C$ m Q i- l
}9 p3 ^' \- \4 _& |9 A, I6 b9 E$ w
}
: }; n$ W4 W, {; Q% C //临时数据保存完毕,交换开始' \, R* [, A5 P1 A
for (int i=0;i<MAX_INVENTORY;i++)
# b7 S$ R; y0 O, \+ s% V {
/ H& T' U7 q6 ?& c& K* q, I7 A if (dest == m_Item.nIndex)
0 l- w/ {, B7 k {
. Z/ X3 [. x; B //id相等 则 改变对应的dest和src3 [7 U! I. |- b4 _' l
m_Item.nIndex = nTmp;4 h+ `$ z: j- ?8 i' ]; z' p+ s# f2 T
}
& o4 o" M5 N8 L1 N q! [- |8 c }
1 Q) ^3 f( d7 v3 U% r6 \/ c7 N! S* z# A. |}
. v( L: ^+ }4 {8 f};
" R2 P% l8 s. Q! Y6 f+ S------------------------------------------------------------------------- W1 O# T: D" h+ L
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, V1 v/ ^4 b4 n) ^搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
* ~2 e! Y! M+ G# M* Z, }$ c紧靠其上添加:. v/ i( ^5 w8 l7 m! c" y( n
if( pWndBase == &m_wndMenu )( \' E7 F0 F2 b3 h4 K
{; o! s! T$ A0 `6 s% t0 Y
switch( nID )
4 a6 q9 c+ b# [8 K. @4 L; l6 k {7 F% `3 l, y2 E6 ^0 d0 d
case 2:
2 O1 r: C% Z$ S( x/ o# W$ k {- `, D* Z0 m/ t
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);5 R5 z! A3 f, q
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 Q8 Z2 |0 n3 d* T7 ~) \ {
: w- t4 T8 r' I. @ break;
, A0 l8 U- ~8 X# p8 W9 z% R }
3 c; W+ O, W }' w7 f9 ?! r- P+ x for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)3 m, F7 ~& m" m/ i' l# A/ K. }
{) U" F7 `+ L! D6 i3 R0 Q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 l5 i6 B6 y0 F
if( !pItemElem )' l9 s) M6 l! f( ~' L* ]: I4 s
continue;
$ f% \# R4 }! W6 I if(pItemElem->GetExtra() > 0), a( I$ w2 E3 D7 [ H# _
continue;
2 t$ x# G) n4 m" w1 H& g if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 6 a+ M' ^* [* D+ {: n- ?
continue;
8 n, K0 W( e( e: w7 g2 I, P if( g_pPlayer->IsUsing( pItemElem ) )+ k) e+ U T5 X E e3 w2 Z
continue;
$ g( n" t. G8 l if( pItemElem->IsUndestructable() == TRUE ). y$ K6 z8 d' R: K2 c$ @$ G
{. Y, j9 _% s' h1 B& z" E, w
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
. Y# \" S2 J9 O, T X continue;
7 P9 o! g; j" e' }. E) j }
t2 l; D! E. G! u# z9 i7 V" H g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
( i2 g' P0 g, L: h& Y }
K' H6 c$ @0 e- c" K# Q# d break;6 p9 X& J/ Y {
}) s p! j5 H4 s u. u- U/ h
case 1:
. F! w+ }2 j6 _/ { {
2 k! X- ]$ V( x8 } //整理背包# ?5 o+ B% M3 j8 L
//////////////////////////////////////////////////////////////////////////
+ m, |2 R+ N( [4 E( B //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );8 N9 [+ l6 j/ W- r) j. J% [
//////////////////////////////////////////////////////////////////////////
p! J( z! p4 C$ g# x, E //////////////////////////////////////////////////////////////////////////
6 w6 C, N8 N+ `/ F% q X CInventorySort* pInvSort = new CInventorySort;
- y) a! r& K9 J( p vector <sItem> vItem;+ S) [* J+ O% p9 }$ |
vItem.resize(MAX_INVENTORY);//初始化大小* d c8 v: c8 G
//////////////////////////////////////////////////////////////////////////
6 u) c6 a3 }2 ], O* X% Z Z! o //填充数据# ]( i- O6 n. Z H
for (int i=0;i<MAX_INVENTORY;i++)
- \4 `3 O! R% `, I {
5 T7 K$ r2 U, {! N CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 R& p3 n0 u" t7 } if (!pItemElem)
$ V% n( `; i' G3 l- c0 G! w {3 Z/ B1 p: u* {
vItem.dwKind2 = 0xffffffff;
0 f9 Q/ ~, P$ \4 O, T6 [ vItem.dwItemId = 0xffffffff;
/ t- C: k' h) h: y2 W8 A2 b vItem.nIndex = i;8 @" h# Y* ^. f7 ~/ z: z* \9 h( G
}else {1 @; ~7 O4 r4 ?- D- [/ j# i5 x
ItemProp* pProp = pItemElem->GetProp();+ x: D: o* d. A* C3 E0 u- n
vItem.dwKind2 = pProp->dwItemKind2;+ y1 C$ D& h1 u# k
vItem.dwItemId = pItemElem->m_dwItemId;
% l; a* X' i* x% | vItem.nIndex = i;
) l# l, ]& Z4 W: _& G, T8 K }
4 u9 I" L! d# J! k6 m3 Y; N, R% p //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' d6 _: g4 s7 T5 T& e( G/ y8 ^ }
: |; h4 j1 D" n) s. q //////////////////////////////////////////////////////////////////////////9 ^% y" W$ {! u! D$ Y9 w
sort(vItem.begin(),vItem.end());//排序
- p5 k7 J+ B0 N8 W3 C; K //////////////////////////////////////////////////////////////////////////
5 L" h, }$ o# A2 m2 ~ //交换5 U" Q# H, u& P; g" ^1 k9 q6 A
for (size_t i=0;i<vItem.size();i++)2 Q+ V0 N8 y6 e) u x) [
{
7 B0 I! E. M- I3 l //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' z8 f& u! l4 J( l6 d7 R pInvSort->Add(vItem.nIndex);
2 \# W4 K3 A& X2 U9 f/ q2 t2 O% Y }" ^4 Y6 r& W" Y
BYTE nDestPos = 0;2 `% c: A3 k4 `; n
for (int i=0;i<MAX_INVENTORY;i++)7 h( I3 A; O6 V P6 e0 B1 m
{
4 ^! S3 T- ^' y9 |& R, K. \ y2 V CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
+ V/ M) @; X1 { if (pItemElem)
' ~, r9 n, q8 P {3 v' a3 Z6 h! ?) W9 ~/ R; o, M
if (IsUsingItem(pItemElem))
$ f. Q. w4 p4 [( Y4 a {
1 M C( ]: @" f) d- d* N //这个位置无法放
9 h/ {/ n3 h9 }. ]# Z! m nDestPos++;0 ~/ e; V# f( Z& }
}4 R0 N0 S2 i+ {7 y4 m9 Q3 s5 f3 K7 p
}
8 ^ f7 b9 m, w3 }' N' l( {6 } BYTE nSrc = pInvSort->GetItemSrc(i);1 _% k! A# X$ f. I
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
; _% k/ Q0 {9 W& X$ V- m if (pItemElem)7 V( Z" x( ^" G+ F' ?0 O% h
{# R* p( P( I# h# I8 F( x% ]9 K( g
if (IsUsingItem(pItemElem))6 j) @# L4 W. m! W
{
\5 Q. G1 B, c. O% n //这个道具无法移动,跳过! {( V2 ~$ R. E1 u$ ~
continue;
/ i$ q, z+ O* D+ S& a; @1 P! J& ?6 X }' M P3 V# c! S6 m% F/ I
}else{ D! l# ?) p2 R% g
//空位置 不用动
; M( b T h2 e) c I0 E; m continue;6 v/ x9 c8 o9 [! B3 }) @/ |0 l
}& x3 V% j- k/ Z. B
//////////////////////////////////////////////////////////////////////////
+ \) O( H" T' H7 `5 | //开始移动
5 {! [. ~$ ~0 U$ R if (nSrc == nDestPos)
9 {/ V3 o/ Z$ V$ d9 m {
2 B9 L# z/ M5 E, q //原地不动9 z G L- @, X* [, n
nDestPos++;# T, C4 \0 B! F3 l( _& j
continue;% y. K8 r. o3 O) P f$ K
}+ M" e+ {7 V E. q
pInvSort->MoveItem(i,nDestPos);: C' C `/ R3 E, w' A
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
" T) g% v0 t9 U( S# m& G4 f( z Sleep(5);
" d: ~7 e! U$ H( V/ b" d v- ` //Error("移动 - %d->%d",nSrc,nDestPos);. z, h* a2 S2 @' D9 ^6 @( b
nDestPos++;
$ D! V9 f, V, U0 \. T+ u" C1 ? }
$ X6 m/ v9 n) p R //取第一个元素的信息
0 }" A- L+ |- k5 t5 |7 A /*
9 W1 ^& w8 `4 \' V& Y9 i2 ^ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
" z z" \& m% z2 b$ h( G* Y {
& t2 E) Y* G; R9 D" W/ e8 ~4 D( c Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
) f: w1 B$ s. z7 `# j3 E3 K& S g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
. p- k7 E5 H6 f }
3 f) w9 c* C( K1 J G4 F- |9 A2 E */+ Z4 z0 G8 w' H& z! B8 b8 Y
//////////////////////////////////////////////////////////////////////////
5 _) Z6 g0 K/ F1 _ break;1 ]8 ~$ W$ Y, i
}( u/ ?$ K g9 j0 n5 c) W
}
$ e4 w: c0 s# W- r: P}. e8 p7 S1 }4 t0 M# P9 w
m_wndMenu.SetVisible(FALSE);1 `6 ^4 N# d* b; R7 ?9 c; P% d
3 I* w( b) N$ y/ q, Z, K9 {--------------------------------------------------------------------------------------------------------
& |! I1 j9 @: ~' J7 r) u# H搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
6 ~5 k1 P4 ^2 b+ t* F{
9 C; ~! d/ @* X: F$ d0 J$ P, |BaseMouseCursor();3 p1 t; M/ @1 H6 z1 \
} a: X4 _5 a. V8 D, ]/ K
在其下添加:' O; w! \- J |0 ?3 [8 z
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)6 t/ k7 q1 Z9 R
{
# r0 H6 x" \+ S) _! I0 Jm_wndMenu.DeleteAllMenu();
5 b- k! u* @& ^8 [1 `9 }7 J& Fm_wndMenu.CreateMenu(this);
6 I! {4 E8 z9 _ K6 c8 dm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");; N; G$ x# K0 r% ?. O8 B( e7 r
6 x9 }) ?2 y" O8 l3 m2 j, N4 U: T
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))5 g8 u* v1 ~1 J, [( n3 j
{" R: i8 P: a( ^
//P以上级别才可以删除所有道具$ q3 ]' ?5 M4 n
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
4 C: z1 o/ o: a4 H9 r$ O3 L- b- C}
4 E1 P* d# z2 H: H0 Bm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );% _/ K1 Q$ X' n, L/ U
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
4 Y! u3 u- Z: V% B+ X6 \9 ^- Am_wndMenu.SetFocus();/ ^7 @& U F# F6 B$ @2 u0 s5 T; t
}6 {' E- ^. x) f& |! S* [
------------------------------------------------------------------------------------------------------------
( T! Q% j. ?, b7 g*************************
* W- O% U! O3 ~! K2 vWndField.h文件
8 B% [8 ]9 B) |0 H) R( T! v5 q*************************
Y, b! R- W A+ k& a& l7 t5 V5 t搜索:BOOL m_bReport;
( {, g, J& K8 B其后添加:& w% ^9 B. h0 n( V5 {/ |/ X
CWndMenu m_wndMenu;: a+ f$ f7 E! \6 \: E
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
# |: h# |% i; P J5 K+ X K其后添加:
& F: @0 j2 ~# l0 h7 Ovirtual void OnRButtonUp(UINT nFlags, CPoint point);9 g; f& D' A6 R
% o% M! \ h' O1 s. o* v
! o2 A4 {6 d) g$ a7 S* R |
|