|
|
源文件中_Interface文件夹下WndField.cpp文件3 b) H# u4 O' X+ m0 R% j" P: U
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )2 r4 i! s S( w8 U
- c# |7 x+ T# S4 A
struct sItem% |# j5 D: W. f+ A
{
8 _: Y0 o7 }6 UDWORD dwId;# }$ l) d1 j6 g
DWORD dwKind2;
# q6 M4 o5 A* k, ADWORD dwItemId;+ b( T4 U3 G* {/ f
BYTE nIndex;
1 i: O, a. \9 {9 XsItem(){
# W+ @5 ^: x( I" r) L4 h1 P dwId = dwKind2 = dwItemId = nIndex = 0;
, r# b5 L- D, I7 ~; o}+ Z v4 v! T0 H& a- P% D4 V
bool operator < (const sItem p2)1 y# v) Z9 D) k, k
{* s( ]: |+ e/ E6 i5 A7 N. R" g
if (dwKind2 == p2.dwKind2)
7 y) ^ O# {, O' k: q$ y& ^, D {. y8 o1 M: H: f' M2 X
return dwItemId < p2.dwItemId;* f; o, c& r" k! x. e. ~
}else{" y5 C. j) T |9 h) c: T) ?, H- f D
return dwKind2 < p2.dwKind2;) d0 A' M: W9 |) M7 v
}7 |$ V! R! W$ Q* k8 ~; O
}
; d6 ?+ h) s- H3 |0 _};
" \3 Q+ u, D6 [3 g4 k2 Dclass CInventorySort- h, g- _( b; ^) J' I" B& E
{
; @! [9 m4 z& j/ z1 @5 O) X/ Dpublic:3 H2 m- K2 q4 \- l( P0 R, a9 Y, T; R
CInventorySort()& P' r# |/ i/ U: W5 M F7 i6 ~
{
! ^$ e! `! A0 L; V1 @$ T9 q m_dwPos = 0;
, P+ \. \/ d& R0 H/ q}
1 {. M( `. ]6 F1 Z~CInventorySort(){}, z7 B5 t) ~4 \! q
private:8 S0 j4 P0 i+ Q: ]
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
( x+ y Z; T4 w: }DWORD m_dwPos;9 N q c! ~( ~* R- j& X# {: U+ N
public:2 M; _8 ?# p$ T M
void Add(BYTE nIndex)+ o9 ?& G# G+ c9 f- N6 p: o
{# _" Q4 [# Q3 c( j/ ] P* ]: ?) l
if (m_dwPos >= MAX_INVENTORY)/ J L- L/ `2 n) x4 F
{
5 `) \& J* h8 u+ N return;
3 e s" R S e' \6 h* \ }8 C" p6 M6 Z. v+ ^9 w' o7 c$ ]& n
m_Item[m_dwPos].nIndex = nIndex;' L6 f; c7 T( O$ o
m_Item[m_dwPos].dwId = m_dwPos;- f2 ]1 _( g6 m* o% r+ ?
m_dwPos++;; _: ^( ]% Y0 p3 F' P9 m
}6 Z0 ], t; V: n$ {# A, h
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
. A% i3 v" b- I! Y7 P{; r3 m; x( h2 a
for (int i=0;i<MAX_INVENTORY;i++)5 }3 I8 U- j7 Y, d# m0 X
{
% d' z4 _9 y5 _" n; {2 g if (m_Item.dwId == dwId)/ `- _# K9 ^ E0 A; b, E) W: _
{
1 I4 m; W- J/ N. ?9 h, C+ {/ _. G return m_Item.nIndex;7 s5 Q6 a1 `" Q; u: k( V2 Q' w
}7 J i% r. x, i4 _/ v/ [
}! z) A4 C; s. @8 [" {3 b& @
return 255;
5 }- d% `) d6 @0 k6 X}
3 u: ]/ c ~* ^4 R# }void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置8 T- J4 L. c' d1 m+ x) r! G7 b
{. u( @2 @9 _. y2 e
BYTE nTmp = 0;4 c- {! c% m, ~: w
bool bDest = false,bSrc = false;
( @& v; v# M! {2 l: w for (int i=0;i<MAX_INVENTORY;i++)
) x4 Y4 ?6 ~7 E& o S3 @ {% T# g8 ?/ s0 a2 n
if (dwSrcId == m_Item.dwId)
. K4 C4 G; N' F, ~/ } {2 H/ \3 c I: X: h
//id相等 则 改变对应的dest和src# p! W' |. ]' u
nTmp = m_Item.nIndex;( n( v; m# L" E. s7 W
m_Item.nIndex = dest;
. u3 Q, f/ k1 ^& Q/ r w3 l& w8 I8 S }
1 q5 q: ^! E; V$ ~: a }4 H) y( w4 y- d( @
//临时数据保存完毕,交换开始
6 a" t# M* D% @( M for (int i=0;i<MAX_INVENTORY;i++)
3 u/ Q- c$ H8 ?( a l {9 J! G1 y1 s. ]/ v7 D
if (dest == m_Item.nIndex): A7 B4 y+ T' {/ E) d! l
{2 Z T$ U* |; n4 p% n' r
//id相等 则 改变对应的dest和src+ u) L3 p! h: B5 ]: t, S6 i
m_Item.nIndex = nTmp;3 X' Q3 I2 [( E5 K
}1 e5 F" w0 l7 U: _. _9 Q6 ~, A
}5 P! a! V( v$ i
}
0 Q* J& E- E1 L' S# k6 C. _};: r6 b2 z; k1 ?: ]
-------------------------------------------------------------------------
' v+ j- Z' M* g3 T |, u8 M依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
0 g6 b0 q; ]7 S) L5 t, k搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
9 e( _7 c" ?) O3 N+ D紧靠其上添加:8 A6 v8 m% d) @; N
if( pWndBase == &m_wndMenu )
5 Q. G0 @% x5 G. ~7 D2 m; x; n{& E. _" i+ A0 _; R# V- v; c, l
switch( nID )
# K" I/ B7 ~2 \+ X# ]! g {# \6 M0 C0 U! [& T/ |1 e
case 2:+ a* c( N7 Q% U8 D
{
2 D" F$ \- N: X* @* I3 E. P //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);1 K) O$ X* ]* M, ?6 k
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
/ I& S* l5 U) r5 C {
- \4 k* B, j: {/ l0 x break;
, R7 y; d7 k6 I! t0 ?+ z }6 H. k! E, I- \ g) u; \
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
, C$ v' r5 s% F4 O. t+ Z& s' f& } {
0 l. o) L6 R( h! w3 V% M CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; [& \2 x8 x, U% o/ ]4 o& S. U# b; B8 I if( !pItemElem )0 }9 b" Z- h0 @0 b$ ^& ~2 h: ~# U
continue;
# |+ ~6 h; U7 L( c if(pItemElem->GetExtra() > 0)
8 Q% ^( Z9 |" h9 S' Z* M5 g; ^ continue;
( d! \6 j6 }. \( N8 I. I if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
- G& y. y) E. t+ h continue;5 l* F# Y! S0 A! l/ s5 S2 q
if( g_pPlayer->IsUsing( pItemElem ) )# g2 |% C& L- v7 X
continue;6 _0 _7 F0 G) [8 O0 v3 }' y* n
if( pItemElem->IsUndestructable() == TRUE )
5 `' H0 h6 K7 q8 O+ I5 q# J {
+ C* O" T; d! T( S; X2 D* A; r% Q g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );0 W! [7 k6 _4 h# `6 W
continue;4 Z ^6 N8 @ P; U* \
}8 n9 x& j3 ~; E! A8 Y1 _% }
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
z5 r9 ^6 X U$ r+ }+ K }3 ^- w6 o% f8 h& ~( [
break;
& _" f" j) p" A" }# B }
( q0 l# M" y1 m$ V. p case 1:
D- z( Q& ^ \* A& H& Z {
0 b0 f# O: N0 N6 e8 _) Y //整理背包
% \+ e5 [# N7 ?# Y( p //////////////////////////////////////////////////////////////////////////
- F$ y E6 A* X* q //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
; J! \* w$ M7 _! C' D0 x/ g, R, r$ m //////////////////////////////////////////////////////////////////////////8 A1 C: A9 h+ |, @' o
//////////////////////////////////////////////////////////////////////////
9 q5 Y* j# X# }- @* j/ `! ]; R CInventorySort* pInvSort = new CInventorySort;
7 u+ I1 G, C1 V. V. P' c, F* ^' I vector <sItem> vItem;
& h) x2 h' U# B vItem.resize(MAX_INVENTORY);//初始化大小4 G+ I9 g8 \; T3 D9 U% j
//////////////////////////////////////////////////////////////////////////
8 d3 v* u+ ^7 h //填充数据0 G$ L9 w2 u/ W% R
for (int i=0;i<MAX_INVENTORY;i++)+ }) K/ ]1 ?/ g0 t; b# x
{: k, r3 O7 \2 X2 M( x
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 [5 B5 W/ X# f2 O
if (!pItemElem)+ z( T# M7 v- Q" V
{! V; y8 _5 j* p
vItem.dwKind2 = 0xffffffff;( i% B* j: v4 W q9 _: C
vItem.dwItemId = 0xffffffff;, z: n; u& a, y6 F0 U4 R
vItem.nIndex = i;: x. c0 o1 L5 N6 ], [
}else {' R. f2 s- O* |& T
ItemProp* pProp = pItemElem->GetProp();( D! `% g. d2 `8 ^1 M; {
vItem.dwKind2 = pProp->dwItemKind2;
5 `. E' w1 Q" x+ w# T& y, C vItem.dwItemId = pItemElem->m_dwItemId;
! g! p; X3 ]+ v* I0 h vItem.nIndex = i;' A4 c) d) s( `) g
}
( Y1 |/ t9 m. S9 f) P* Z //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' \( `) @( c" j4 M1 C5 R$ ^
}
& B/ O, l9 S" h0 n# J! \* _8 X; W //////////////////////////////////////////////////////////////////////////
3 p6 G% {4 f( f7 V+ o5 c: w* x sort(vItem.begin(),vItem.end());//排序2 W$ n5 t' G. A1 t
//////////////////////////////////////////////////////////////////////////
: z/ d3 K- J. [% ~, i //交换5 f- a: J, {( z- x
for (size_t i=0;i<vItem.size();i++): z, @& ?7 r( t9 n0 A
{8 I! c# `) m6 z4 \1 D
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) C0 S4 R/ U4 w5 W6 } pInvSort->Add(vItem.nIndex);! T. p' @8 `! \7 o8 Q- K7 O
}
! j' [6 F9 [' I' b5 Q BYTE nDestPos = 0;
7 f h: z9 B2 O8 N% p6 d, q: h for (int i=0;i<MAX_INVENTORY;i++)
1 V; U) `8 N" i2 k' z {5 d/ J% y/ i' A6 L" h+ {9 h/ h
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
! W) p Z. I3 [9 y if (pItemElem). k7 \2 X; I' ~0 A: H! P, x( l
{
( t0 ]3 ^$ l& P! ~9 o) l1 p, A if (IsUsingItem(pItemElem))
. Z P1 N* p5 f/ L( E, o {
1 N$ c9 M+ o0 T( L* u! m) O //这个位置无法放
6 T4 a) U9 V, K" C nDestPos++;
) m, _4 v7 G: v8 L4 ` }+ M; V& P; r& b
}1 q) P' T( k% F8 z3 }! J4 a
BYTE nSrc = pInvSort->GetItemSrc(i);
% u' F. a+ R, Y* F, A pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);5 M6 X9 c5 N* V1 I5 m
if (pItemElem)
/ }9 N8 s+ G& f, Q9 O4 C7 w" ?, @ {
; t) Y4 r* m% L6 m% S8 r \9 I* Z if (IsUsingItem(pItemElem))
( w. i. S- D9 X [ {
1 f* {: @5 L! |$ \( |9 Z' ?$ F //这个道具无法移动,跳过
# U ^3 P5 W+ j: N/ W- j6 v+ \6 t continue;
) ~' [3 d) O$ V" q, D/ N }
9 h. l8 v8 x: Q1 u7 k2 T) x: o }else{
7 @4 w$ m6 o4 ]: \" k //空位置 不用动
4 T D# [2 i8 t3 x# W2 k' v' f continue;
- f7 n& M s& {. s' ? }
T; x; o7 p. M" {4 y //////////////////////////////////////////////////////////////////////////
2 U6 Q5 \. ?# Y4 T! k //开始移动' u9 J* F. m, A/ K
if (nSrc == nDestPos)
# p- K) i' ^6 n5 o, O- y {# G" t7 `) C/ S3 `
//原地不动
. x* q9 a6 e! ~ q( x: r nDestPos++;
2 X3 B! W1 z8 i' [0 n' ] continue;
+ r9 l* V0 L: B6 N! J! e }9 ?8 {1 S& e8 b$ Y9 `% m
pInvSort->MoveItem(i,nDestPos);' w( m Q; m) I
g_DPlay.SendMoveItem(0,nSrc,nDestPos);3 P: C' `& y& U$ e \
Sleep(5);
: o, A9 v: ^* f4 k //Error("移动 - %d->%d",nSrc,nDestPos);
7 x' T( j0 d) Z! S$ Y. S nDestPos++;, d% Q3 T: H7 { u
}4 w0 S+ B! i! k# M* |# [
//取第一个元素的信息
+ w# E. N4 U1 v /*
3 }! S8 A" S- }( F# ?0 X( N$ `0 D if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
1 y$ d7 R2 j% ]' P {
: X, g: _6 |3 H6 A& |7 t$ j Error("Move - From:%d,To:%d",vItem[0].nIndex,x);5 }2 f3 I) T) @- \3 s
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
0 j1 \4 z& s6 N" e+ ~: n }- u2 J' [3 q% k/ t
*/
( D C% i; ~( I( F5 g( z2 B8 D5 [, z2 L //////////////////////////////////////////////////////////////////////////* L' f. K Y9 L
break;
. Y; M1 O1 c$ L: m5 ?! F9 y# h# N }
6 H2 M: |- O k( U- d } # }8 \5 }/ D" a' u3 k
}) F8 d# V, k8 Z4 ^2 @5 u
m_wndMenu.SetVisible(FALSE);/ r8 K( m6 g: G
4 S. ]1 A' y! q$ X! s--------------------------------------------------------------------------------------------------------
* {# {6 G7 ?! g* o; h2 M搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
" @ v, R. K2 m{3 _ |; T% K0 p( d8 f9 {% e
BaseMouseCursor();
a! U6 w/ z: y; [; ?}8 {4 e! a r$ Q, d3 m5 I
在其下添加:
; ^9 L* N. O6 mvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
/ T' D: x$ y) q q& L# o7 k{
' z0 {0 [' X5 c1 p4 r) K4 Bm_wndMenu.DeleteAllMenu();- o, y. e* S F# |$ k
m_wndMenu.CreateMenu(this);
; f# u5 C* A+ v" e$ y( P4 d) vm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");( A* j8 S7 Y/ a- T# Z0 @3 m
, Z; ]- v4 ?8 d7 pif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 F) y# ~. D6 y) G8 H
{+ W% d$ a6 V& T
//P以上级别才可以删除所有道具% ]. I# [% R1 n' \/ R
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
9 _$ c' \% y5 Y7 Y}
* t8 E0 H8 V( s) d9 @" F: ym_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );4 E1 d& \8 w5 Q
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
& G, W, e* r* M+ Y+ _- u6 O3 lm_wndMenu.SetFocus(); r, b5 [% T- [8 C4 A3 p& ~
}$ M7 T/ d6 E- S6 a4 H) e9 |% Y
------------------------------------------------------------------------------------------------------------5 M' ~, h7 ^$ W, t1 z
*************************: g# r* Q, m% p; n. T3 H; u
WndField.h文件+ q6 Q9 N/ p1 [4 r3 |8 K
*************************, w4 u N' ~: N* C2 w4 v
搜索:BOOL m_bReport;) N }% Y5 [$ q. N; U
其后添加:
1 i& U& K( y5 P* U5 I2 `* rCWndMenu m_wndMenu;1 P `) ?% e3 A7 K1 E- B
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
% }6 n) g5 l& c其后添加:
4 m4 s, a! `8 V4 u4 d6 kvirtual void OnRButtonUp(UINT nFlags, CPoint point);
8 p4 |: I# k3 ^7 `
. j* o1 C5 v0 @" J. J5 _$ O0 d5 ]
|
|