|
|
源文件中_Interface文件夹下WndField.cpp文件: K5 t" t+ X5 q- S+ U9 C- l8 [
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): m( G- N, [6 `- C4 ^4 ]2 Q
- K% T( \" ?& W" Bstruct sItem
/ q+ [+ J/ W) }' f# m{ V2 l% F( e6 e- H6 O
DWORD dwId;
/ k# W2 ^: y' c" |- l1 \( Q5 kDWORD dwKind2;2 _: j% P9 q3 ?6 H; D- Z; ?
DWORD dwItemId;
- s) c3 m+ F; l1 cBYTE nIndex;
0 l4 L9 S3 l0 LsItem(){
0 g3 m$ M6 L: [4 S( p! F3 Z$ k dwId = dwKind2 = dwItemId = nIndex = 0;
8 @- {% r/ V9 Z! e) _( I/ i}5 K5 a& F. |! P# ~) d
bool operator < (const sItem p2)6 e3 J) x7 y; S- M9 K( U+ _
{8 ?. S! M3 z6 e u+ c6 D
if (dwKind2 == p2.dwKind2)
( r- \) t* R4 B! f" L9 W {
6 r( L. [6 M7 C$ v& T$ o; H return dwItemId < p2.dwItemId;
5 N% p( s) |1 r1 v5 O. F: e }else{0 n" Y/ S. I, @/ g- l
return dwKind2 < p2.dwKind2;
0 y; G0 Y% t8 H1 P* y0 @6 G7 M }; }0 f' R, R" M
}
` c; ^5 c1 ]# U7 S};4 |! F1 d+ q& D
class CInventorySort* M; B! b. c$ F' r1 ~& @6 Q: b% E
{9 c. X) q1 H& n) q F! e {1 Y
public:
2 Z& R! n3 W0 v2 A Q# A0 G3 vCInventorySort()& D/ P U! ~% M% S
{: a) _" F" H) P0 Q8 t
m_dwPos = 0;
4 y8 F0 N0 K4 [: _$ \& x9 c' T2 X}
( l P$ U9 g; M1 a" ]$ j+ u# m~CInventorySort(){}
* f' j# ?3 u z5 yprivate:
- a# X: U8 g+ T8 h( T2 RsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息, y0 f g. Z) U; x2 y
DWORD m_dwPos;
4 @! U) z, t" ~public:
2 g; H" T* x" u* ^void Add(BYTE nIndex)
& P* b( p5 ~0 ?3 C; G{
8 |, z) x- u( Y% f; y# O5 X. Y3 J if (m_dwPos >= MAX_INVENTORY)
* J k; {4 l$ Y9 E' v: I {
2 \5 s: M6 G. j3 k return;
" W( q- W+ K: l' g }
) h5 k0 ~7 r d) M3 H( U m_Item[m_dwPos].nIndex = nIndex;
- a& t" w2 t( K; C$ x m_Item[m_dwPos].dwId = m_dwPos;( U( C3 v: O7 j# Z1 n9 P
m_dwPos++;
& w0 J$ `% D3 j; p1 O0 d5 P: l}
* B8 e; K3 ?" [; W2 o2 R% aBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列6 X/ q3 ]- D; n v
{
: o w) b( J5 C+ U U for (int i=0;i<MAX_INVENTORY;i++)
! q) @' W5 u* F1 G {
1 r; ?* K { J if (m_Item.dwId == dwId)
0 r, P9 h. P4 |- H {
2 L- v: d5 u' H4 Z- p; R+ P return m_Item.nIndex;, ^+ Y6 [1 B# D2 u0 x) @3 P
}
1 u6 ?6 u& o$ U }0 a: X+ x$ z8 e- h- U7 J6 r0 O
return 255;" r- X% R: L- J0 h* K
}
1 V% f6 I- O& b2 q! T# G8 dvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置, \% Z {( R' ~1 |& V( }* S) D* i
{
* T% B; j# F6 x' G, }! @9 Z$ J BYTE nTmp = 0;
5 T0 n: X. F+ h" c" { bool bDest = false,bSrc = false;
9 [- K& C: k# h, q! u- J% } for (int i=0;i<MAX_INVENTORY;i++)/ R5 H1 {$ u( {1 \
{( W6 L8 j! ~; P
if (dwSrcId == m_Item.dwId)
& p8 Y, I/ s6 ~ {
V& W4 _! D+ v+ W! w2 k4 P //id相等 则 改变对应的dest和src
% y) K9 k/ n* i" N" u8 p. L- g nTmp = m_Item.nIndex;
# |4 \6 \3 G* Q m_Item.nIndex = dest;
_9 \" G' H, L0 Q }2 ]% j2 p) O8 n- w' L8 @
}: q4 i' @ K+ m
//临时数据保存完毕,交换开始
I5 n3 Y8 e7 f q7 g, n for (int i=0;i<MAX_INVENTORY;i++)( H" ~. p L' s# ?! E$ i
{
, d7 j; _4 r* u' H. V if (dest == m_Item.nIndex)& H: Q$ B0 _) ^# A# T- i
{
2 h2 V3 Q- z' h //id相等 则 改变对应的dest和src
. H, D& U. E- J% {6 |& Q# w+ ] m_Item.nIndex = nTmp;7 F3 ~ x3 ^( U
}
; C7 T' \! @! w }
- u( A1 S- H; l6 ?}0 V i% J, ?! q, `. \* x s
};% e. Y# D& Y! B' r1 r8 T4 l; `8 O
-------------------------------------------------------------------------' v: }: H2 W! c' }$ u @
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 o7 K7 r7 P4 u' `& A1 v# [8 E/ M# e( U% m
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
% ~0 \' k! }/ p% [0 _, K! K% Z紧靠其上添加:6 h/ b1 D- w( H0 y
if( pWndBase == &m_wndMenu )
B) h8 I4 @; g6 m. y5 J{4 i0 O5 c2 ~3 p8 L8 a2 w7 ]" y2 s
switch( nID ); Y. z3 L2 S, ?. D
{, g8 O8 A# F' ?7 Z g& h g- V
case 2:/ @% C9 k8 \2 _& p9 V) @
{
; ]% B9 @- H5 y* }) j //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);0 L5 E# E# I6 C9 i
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
1 ?- L: D! P& A% I {( T; N ^( k: f4 w+ ~1 ]2 D
break;1 h& u2 b* q! R3 ~& A: C5 [7 O. N
}
; M. b* G* {7 `) E for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
% K: U; G( [4 k {) u" K, D8 C( R: y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 i1 D# g1 |' z
if( !pItemElem )
L8 E% B% ]7 o1 t' L2 t continue;, O: p+ Y' r# g l3 S
if(pItemElem->GetExtra() > 0)- G- \6 P5 o0 ^2 g) S, v% ~! c
continue;: s3 t }* P; o0 [4 ]8 Y
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
0 [9 N% y4 `- n4 w6 F continue;
$ u* o5 o# W) Y5 B6 O, W1 Y# ^0 @ if( g_pPlayer->IsUsing( pItemElem ) )) h+ X9 B7 p% ]
continue;$ w; [% m3 b# x4 z5 N4 [
if( pItemElem->IsUndestructable() == TRUE )1 ^9 F- B5 B! F; Y. ?
{. v) ] B8 _4 k
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
+ }9 @, x6 ^6 C2 N, y continue;7 k# k3 C) x0 V, L% F, [' P
}5 q( Z4 `& C( e$ |4 j! [
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);% _' K9 l$ ~. N& t/ f8 D8 }, u
}
' H& _8 g6 m- Q8 _/ z, r, O1 w7 b Q break;
* D4 W0 V8 m f }. l o6 Z6 o$ _ X1 p: x
case 1:
" g+ j- Z. U0 ^+ t. u {
+ q7 [# d5 S: `( P //整理背包. {/ q4 }( Y: k* e3 G
//////////////////////////////////////////////////////////////////////////& f& G: ^* g) ]2 ]9 R
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
, c" F1 k( Q9 M! @- g* C+ ] ////////////////////////////////////////////////////////////////////////// v& X! N4 Y/ Z) [% E) j
//////////////////////////////////////////////////////////////////////////% a0 Z* Y7 z2 m0 G- K! ^
CInventorySort* pInvSort = new CInventorySort;
1 P, m) |5 t5 l+ v/ z5 p- ^ vector <sItem> vItem;
5 @% N2 V; J8 F vItem.resize(MAX_INVENTORY);//初始化大小
6 v' a5 o7 E* X) T, _' G //////////////////////////////////////////////////////////////////////////
# w. |! _3 G! x+ x* t7 s //填充数据/ ~$ b! Q% u5 k8 W8 @
for (int i=0;i<MAX_INVENTORY;i++)+ v8 r! a- P6 `& e; P% d3 p
{
/ Q0 i: s8 Q2 Y) R6 S# ` CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
& l; X& B0 x! M' g3 p2 _8 u# J; M if (!pItemElem)
- i. l% B4 K, I' ] h# P- C$ n- @! k* f4 Y {
8 G( q" ?2 P, E" a vItem.dwKind2 = 0xffffffff;7 T2 k) T+ j$ @, H* h# J
vItem.dwItemId = 0xffffffff;
$ t- E3 @& G) T9 [ vItem.nIndex = i;
9 ^+ C- \ J$ |+ j& X: Y3 T( V }else {
# a" N" } I( G {% J1 [* k: E* G ItemProp* pProp = pItemElem->GetProp();
5 Q# L3 c X- l+ U+ V1 h' Z vItem.dwKind2 = pProp->dwItemKind2;
, b8 b% G# w/ b- t; a& {% y6 b vItem.dwItemId = pItemElem->m_dwItemId;' n; k3 M* A, d7 q9 a
vItem.nIndex = i;
- j0 ?& p8 Y; N! S. P: v2 t) i* U }- O# o+ x8 v- V+ ?4 T. S. H
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ C& a; n+ o+ `; `6 r
}! ?# R7 ]8 Z/ @7 ?) }) U0 d
//////////////////////////////////////////////////////////////////////////; V' n. u- U; Y/ n3 j
sort(vItem.begin(),vItem.end());//排序) O! F9 o1 Q3 d- f
//////////////////////////////////////////////////////////////////////////
1 d. r+ W3 i, f) e6 n; o+ D //交换6 N0 }' r. L/ }0 x1 I: z, ]& `
for (size_t i=0;i<vItem.size();i++)
) b% L+ W _5 U( d {9 y& \6 @9 W' a
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 u. Y2 Z) \# h" l7 l6 n+ z pInvSort->Add(vItem.nIndex);8 V* [; U# B. E# Y; O; L4 k
}
t. N2 Y8 `" Q: S+ T: f9 E BYTE nDestPos = 0;0 i1 {. H5 O8 ^ H
for (int i=0;i<MAX_INVENTORY;i++)
( m, n" ^3 t; U. r; T& S {
; P; K* L8 _8 T. K) Y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);, u8 t0 Z# }/ }4 w, t3 w
if (pItemElem)
5 O' u0 }; p+ h. R0 n* G( l- E {
4 A& @% ]) |: n4 f8 T& v, S; v. p if (IsUsingItem(pItemElem))# C6 ^$ e E/ B q+ b/ G
{
) ^! K: j/ q: d: F1 G' u //这个位置无法放- J8 d4 a D2 _5 Z. X" E1 r
nDestPos++;
/ T0 _, g: {4 [# ?$ X' H! \ }
, V+ y# h( u2 D* F7 t( I }, ~+ r% y/ R6 x' o" }7 q3 F
BYTE nSrc = pInvSort->GetItemSrc(i);# B! {6 j$ ^3 W
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
8 H+ o( X0 n& G) e if (pItemElem)
/ F% k& m$ Q" k7 Q: Y {
; S1 B: Q2 D; e$ v if (IsUsingItem(pItemElem))
6 s0 P. M, s% Y/ U) ` {
3 T( x& n5 p* Y# Y0 J4 X3 E y //这个道具无法移动,跳过
" h, j" Y7 a1 u! y8 B- s6 \1 G continue;4 g1 S) [3 @) t. j0 k, \
}
; C1 W" p! k6 H2 h }else{! B7 c% C, @, F9 o( }
//空位置 不用动
: W L" D) f+ c v/ o continue;
( e7 T- p- |9 v p }
; E) t5 h: B; @, C, n9 H/ u //////////////////////////////////////////////////////////////////////////
& |1 a7 }% |8 | M //开始移动
5 Q1 b/ |, p! u/ i& p, o if (nSrc == nDestPos)0 z. q5 l. f# m' z' z# j0 E
{% R' w" z1 R$ M. ?3 M. Y
//原地不动
- c( u, p0 }0 ~: u nDestPos++;
( P" j. B2 i6 G i9 u8 c continue;
# t4 X. M5 ]7 l9 g7 d }& n2 i* Z5 U0 Y( T$ A" D: J. Q
pInvSort->MoveItem(i,nDestPos);
8 ^! h" L- {& F6 C$ J g_DPlay.SendMoveItem(0,nSrc,nDestPos);/ o! j3 y* i* r r1 A
Sleep(5);. G+ ]1 V9 c( U6 `. n! H+ R9 ^
//Error("移动 - %d->%d",nSrc,nDestPos);
B" c# S: J7 ] nDestPos++;
8 r$ R5 W8 \) v7 w% w }/ o7 _5 @" a3 V& B; x
//取第一个元素的信息
1 i4 L- t+ V) ^: L8 N; R /*% \) m7 j4 v& L' L% n) x! V
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)9 S6 u' J% E" m
{
. A6 `% L, _+ Z, A: ?- C5 L) q: p4 N; Q Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
' z6 ~1 J& l5 d8 d( V g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
: m* w. H: \* N2 w }* k4 x4 g+ i# v
*/
- r1 _4 N7 c9 i3 ?! z //////////////////////////////////////////////////////////////////////////6 o6 ^& X6 N( h1 w `8 i
break;- Q, o% r+ j k. g
}
9 w# H* H1 Y1 W+ x. C. v- l } + [. R( v" C9 H2 ^6 {! h5 G9 A" h
}
: _0 m" C' t5 lm_wndMenu.SetVisible(FALSE);( |6 I6 i* ~: P
! ?$ X$ s: g Z6 e4 \+ s: K--------------------------------------------------------------------------------------------------------& v- ?, ?' r, R) J4 {
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)2 B0 z' S2 V: I% E! h
{
! ] u) Y/ P- y. q6 v0 i/ h( GBaseMouseCursor();4 Q$ P5 J/ M4 m1 N4 q$ N6 _$ J
}
9 p$ Z4 T, U6 ^" e% ?在其下添加:8 a! @- U; t) O9 h% T9 s+ L( o( h
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)" M+ r V& K* r' V3 b' k: e; q
{
- _% x. y) F2 Y$ Fm_wndMenu.DeleteAllMenu();2 \% G% S6 p' G/ Q" {- Q
m_wndMenu.CreateMenu(this);
+ o4 u8 _4 \9 y% {( ^m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");1 \* {8 V& Q7 @$ S+ y
( c/ D$ k" s* l4 a. ?
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); ?: O$ \5 H$ X# v
{
5 U8 |( k" b; @ J: q3 x6 O //P以上级别才可以删除所有道具( I- m2 H+ I5 E" w
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");5 C% A/ s% J% x' i1 E/ Y( A! l2 [
}
* w% T& X- p* wm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
! j) C& M( A' Z" ]3 cm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
5 E% ~" _ l' P% g2 f4 [7 ?5 im_wndMenu.SetFocus();
6 |) O" g% o1 A# d7 W}5 a+ ~; d3 g! k5 {. D: F
------------------------------------------------------------------------------------------------------------! P( K1 }' [7 C% ?- v0 b
*************************
% q. s K7 B. T' b% c G$ `WndField.h文件
, M( w/ O& R# J1 \. j2 g4 V& `4 t*************************
1 R) X% F7 ~+ A4 n) u m搜索:BOOL m_bReport;
8 s( y& k" m; m" J) C7 w其后添加:
. Q4 C' U; u2 e; L7 M/ w2 ICWndMenu m_wndMenu;
2 i- b5 _( D; ` ^+ H搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
( H v* @% ] P: g) ]2 ?% g& Z其后添加:* Z; a! h% e/ W" z; z" I% \; E
virtual void OnRButtonUp(UINT nFlags, CPoint point);8 {6 M; \) ]7 U+ E; }
7 ] V& K- D+ j6 L* Y
- f2 n- R) y6 x, s8 N, \! F8 b
|
|