|
|
源文件中_Interface文件夹下WndField.cpp文件
' w4 w. ]3 X: a搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ `% T6 p5 d7 t n6 ^: D. ~$ J
0 Q0 a0 j( {& y8 I
struct sItem
/ r: X( B5 q$ S) ~* v5 W* R{0 Y& M1 o" A8 g6 U
DWORD dwId;5 J. w& l; l9 ^ q v' b4 T
DWORD dwKind2;
1 ?, Y0 m8 r- `- R3 h2 rDWORD dwItemId;
0 H; i' X6 ~& n3 l! E( KBYTE nIndex;; G4 P4 }# Z& _
sItem(){ v) ?4 M6 Q- d4 r
dwId = dwKind2 = dwItemId = nIndex = 0; ~% H! ^$ u, t% m
}
/ X8 W* \* P/ T% i7 c5 u) F' jbool operator < (const sItem p2)% s3 U) ?7 c3 O
{* C5 [/ d: c! I4 L0 O
if (dwKind2 == p2.dwKind2); d; P- \( r0 f& _8 z7 I$ I
{, N9 x# q% J1 _% B: ]
return dwItemId < p2.dwItemId; u; a% x# I7 P8 I( { Z7 H R
}else{
4 O; h$ f6 E/ U; h2 [, W/ J7 U& T2 u return dwKind2 < p2.dwKind2;
$ M: |) {+ P3 l }
& s: r* p0 r u4 W1 C+ d. _}
/ b7 ~7 n0 [: O) |- g ]) K+ n};7 q# P2 v) I i: d, T1 f1 D
class CInventorySort
3 M5 a5 t' i2 g{7 f% S0 n% v2 D, C! ?8 Y
public:
! E/ a) e* `& v) J b% G# A' U; LCInventorySort()! m4 h; j, q: P7 S
{
% S/ h4 x+ G2 B. i1 b6 t m_dwPos = 0;
- @! Y2 R& h1 v/ M2 `; n}& |. U# b* Z) v* O$ C1 H% {/ g
~CInventorySort(){}
3 q* G1 d$ S/ t) E+ d- N* Cprivate:6 t; m- J4 W. j
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
0 ]2 f2 @; F* @ B. t8 P8 K# NDWORD m_dwPos;
: d+ |% E: @: Q) Spublic:
( z! {9 e* o' q4 v0 Avoid Add(BYTE nIndex) ?0 \: x: D' o# T6 b# @7 w: e
{
: _! U1 n$ k# R5 f if (m_dwPos >= MAX_INVENTORY)3 |1 O1 l7 F n6 n: g& d2 K+ B
{
3 E8 `. Y! L8 b# Q, ~) { return;
+ x4 c% S3 X z! B }
* [& p# q6 C, O8 y m_Item[m_dwPos].nIndex = nIndex;
$ o# P; @! F* x( h, |* N0 k3 g# K m_Item[m_dwPos].dwId = m_dwPos;
% t" q; q* B8 P$ ?7 |( i' y- z m_dwPos++;% Z) M, K! e- _- v9 D
}
% r W% H! W8 S5 s* Q6 m5 b3 ZBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列8 i( I* o* o. z
{8 _# r1 d2 m0 S7 ^/ U1 U2 A
for (int i=0;i<MAX_INVENTORY;i++)5 U( G% {1 J7 j' x6 h ^
{6 E9 p( M- M! w4 t; }: K
if (m_Item.dwId == dwId)
( |6 N& `* o9 o. K6 j* W) y9 ] {
: m4 c/ r, r" ^2 a9 k3 e, a) o return m_Item.nIndex;
& L k) v* u1 [5 P5 V3 w; s }
' [8 i% F+ c6 } }5 a" j% e |' T' @
return 255;- J9 o' b$ J* n
}
( \) y$ `9 _; ^$ g* O) hvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
, @8 ^& c5 v \6 R* d; ]2 u{& c' E! S2 @& E
BYTE nTmp = 0;+ _$ v' X& I" w& A& e% Q5 t8 T
bool bDest = false,bSrc = false;
! _8 W; ]7 N3 i. t, i6 E for (int i=0;i<MAX_INVENTORY;i++)
0 X$ |$ V Z3 F4 Y$ D' X9 W7 H" O$ x% l {4 e$ d9 a* P) V t
if (dwSrcId == m_Item.dwId) f! C5 U0 m4 E1 G
{
+ u9 U, T2 f" c: Z2 b, Q9 X //id相等 则 改变对应的dest和src
8 U0 e1 R5 h6 `0 U/ D4 X; r u nTmp = m_Item.nIndex;
/ Z6 P$ q5 Q% f7 e U9 x m_Item.nIndex = dest;
# T7 v7 z3 @0 M& @1 [1 A- C4 l F. _ }
& w$ \5 K, y& m" o& }. e2 v9 q }& l* [6 m9 t$ Y# q
//临时数据保存完毕,交换开始1 t, x2 V1 ^3 |2 s! S- ~
for (int i=0;i<MAX_INVENTORY;i++)) ^, |1 j8 q- v
{( D7 a" Z( q& \) R) Y
if (dest == m_Item.nIndex)
# X1 z$ H% h& D$ x0 ` {
' |; `* G# n& J1 z //id相等 则 改变对应的dest和src
% a8 b$ X- X3 M2 k m_Item.nIndex = nTmp;
( B; L* P. e6 R' k; _' [) O }( S# }! M* _, {- Q9 {, P: l
}. e% ~; R* q0 z& B; |
}
0 P6 g( [* s% U5 a9 b};/ f" Y+ F8 H, K! w; y
-------------------------------------------------------------------------) W2 k6 r7 P; T" k. D+ n/ {/ `
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
' w4 |) T& n" K搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);/ c7 q- l |; o( p3 [. K9 ]! [
紧靠其上添加:0 @+ a9 o. ]4 u/ `/ m/ m- S9 x
if( pWndBase == &m_wndMenu )
9 w' M, a4 J9 \8 i% p{) ^6 o& w( w A) y. g N
switch( nID )% d- ?4 s: x9 d
{
' ~; w! o7 s } case 2:
; a# t6 U' m6 { {* `2 n: X! Y( [7 o6 X- G: V8 O
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);3 V! V; [+ K; J( r
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
/ B) L3 T3 \: U9 P& G0 |# A% P) | {
4 i+ v9 ]% h/ p7 @5 w5 \( S) l break;9 }$ R0 \; [/ R( i, s+ e
}! W% @* M1 h a5 l
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)' t+ q1 B5 R1 v) [
{* K. t% J' H$ X' h; E5 n( J0 u7 x
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 A9 a$ X: L! L. J$ I
if( !pItemElem )
& J' B: f2 q* ^1 w# d- W continue;0 L7 x2 L5 I, z8 S
if(pItemElem->GetExtra() > 0)
( o8 r# I9 H2 A+ G continue;
; C" x4 G" v" I4 G if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) / l! @0 |. r$ d
continue;1 p6 Z7 I0 R' i7 r
if( g_pPlayer->IsUsing( pItemElem ) )
, r& A6 Y4 |7 R3 W continue;
7 ]9 R+ {7 ]9 S: M; t if( pItemElem->IsUndestructable() == TRUE )
2 Z* k( F$ z. s& D {: f5 S- C* q. a; l
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
2 h _2 ^' M& U& ?0 p4 l6 ? continue;6 D/ W4 t- [* H- ^; u8 b
}
" o9 g/ U( o: j7 z# Z g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
" R& C4 O v: @4 S/ T }
: ]( L, x; R3 O! I: o! Z4 F% m! p# ]3 T break;) {/ E0 T! E$ B2 D) F
}( x; t; E! W% s# U H( ^4 W: O5 r
case 1:
4 f4 `7 e. @9 d! W {. a5 x" Q) ?7 C7 @) {. m! u
//整理背包$ P! r$ ] a9 u9 }* |. k7 b
//////////////////////////////////////////////////////////////////////////
" h; D7 P$ r& k //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );8 a( y3 l7 v Z" s. l
//////////////////////////////////////////////////////////////////////////* Y, Z1 |* R) G T: L
//////////////////////////////////////////////////////////////////////////
8 Y8 ?2 T& I6 a$ [ ^ CInventorySort* pInvSort = new CInventorySort;& ^7 I0 s: p0 [4 B3 W" t
vector <sItem> vItem;
0 S( M7 p. }: U( z; Q vItem.resize(MAX_INVENTORY);//初始化大小3 _: M$ Q7 `$ d+ e8 H/ e; a
//////////////////////////////////////////////////////////////////////////0 u+ ]8 L& P" U, Z {
//填充数据
( l" N0 x v2 z for (int i=0;i<MAX_INVENTORY;i++)
: P2 h9 M8 {) F# w0 t; f4 T& ^. ` {
7 N/ }2 K. G+ [ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);: x$ e% F8 z0 R
if (!pItemElem)
8 k- N/ d* J& G) U4 I {
* }2 n# v* L2 L$ J# h vItem.dwKind2 = 0xffffffff;0 c4 _; T% S' O& n# C) M) H
vItem.dwItemId = 0xffffffff;
$ m' \5 _5 v* K X0 |7 ^ vItem.nIndex = i;( ~1 k5 w4 ?% A4 |
}else {
n; u& n% c/ l3 [- y! f ItemProp* pProp = pItemElem->GetProp();/ L& `. X% V5 J1 j5 I
vItem.dwKind2 = pProp->dwItemKind2;
# R+ }/ g" i4 r vItem.dwItemId = pItemElem->m_dwItemId;
0 I# J9 |0 M2 B7 v+ O- [* O vItem.nIndex = i;3 G+ Y$ }7 B* y1 V3 c! k8 O' ?
}3 q" C6 |' S+ `9 L5 I* d$ W( h
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" k" Z! ?5 f n0 }
}" T4 T$ G0 J# b6 {: F4 n
//////////////////////////////////////////////////////////////////////////& c/ _0 T- L: g; F
sort(vItem.begin(),vItem.end());//排序* U0 R& }1 h8 a7 {
//////////////////////////////////////////////////////////////////////////
& x- `! `0 t5 V2 g' e. A //交换' G5 C8 ~4 ]* u9 G
for (size_t i=0;i<vItem.size();i++)$ @$ S3 V; N3 _) w1 J! B7 R
{
5 ~4 ]9 K+ Y0 l //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);: {( I3 a5 L) V
pInvSort->Add(vItem.nIndex);
) U. q, P. L6 [. s; s }
3 I, ^9 b4 P" n: f7 ~% n BYTE nDestPos = 0;
U5 G# k; C7 r' J for (int i=0;i<MAX_INVENTORY;i++)
3 Q5 z- f9 x& |4 ]- i {
h: ]3 X6 u$ K, ? CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);0 O' X, Y" `- H# D7 M) x* i4 |+ L5 v
if (pItemElem)- g2 k7 v1 ?, c1 F1 Y0 K: J6 W
{
/ k7 H7 M# L. k if (IsUsingItem(pItemElem))
& X/ Z" Q8 d) f0 S) J$ r/ s {
2 S' Z' I' {: z& K v& F //这个位置无法放
5 |8 N+ T Q) l% P2 I' h" u nDestPos++;
% K) c* C1 p( m* E2 n+ Y }3 s3 [8 U: c \6 w; Z& U
}
C5 l; G0 F2 _" e$ W BYTE nSrc = pInvSort->GetItemSrc(i);4 @" P. B# `0 K; B% X: x
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
% W4 J" {: X' R* A if (pItemElem)7 o! M! N! n% L
{
& ^, B+ @/ t$ s+ k2 v6 i if (IsUsingItem(pItemElem))
6 k1 B* u( G! v6 @ }6 s {
' |; q K, R! e5 ^/ F //这个道具无法移动,跳过5 C' s* j) [1 i5 p( e
continue;& M% k; @4 ?- R, \6 l
}% B; j+ R5 J7 u; x3 [0 N
}else{
; ~/ P/ `% c; x: H+ B) Q1 `0 m# v6 V //空位置 不用动* y0 \2 W3 ]9 n* M+ v8 L
continue;9 u/ o" P. H: K- R4 B3 L! o
}
; |2 D: Y8 D) r L; a2 K0 z //////////////////////////////////////////////////////////////////////////
4 c! `/ Q; b, a* b1 W* x1 r+ G1 b //开始移动
) ~8 S' y A* x3 c if (nSrc == nDestPos)" A2 o) {" m7 G% f
{; |3 v: L% K, f- g# [) {# [
//原地不动1 Z* A: Y3 B; u; r0 _, H
nDestPos++;3 `- L- l7 Q3 x
continue;$ p5 P4 G& X, ]. k& v9 m8 ^
}* ~, c- x- t; L& N( w" {
pInvSort->MoveItem(i,nDestPos);
0 e; n: F+ a9 F/ h g_DPlay.SendMoveItem(0,nSrc,nDestPos);
$ ]; {/ b* k& O Sleep(5); b4 {; K0 E( C# }3 q9 P
//Error("移动 - %d->%d",nSrc,nDestPos);' Q5 F1 K M; \2 D# \! T& M
nDestPos++;5 E2 N' p" ]. j4 X) y
}
3 L8 L7 d* x; J% F) p, _ //取第一个元素的信息. ]2 o& u+ z) N) U, p& D$ Q+ ?/ Q. H
/*; d; I+ N5 q) @8 {- T" Q
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
3 n# E5 S6 N1 Q# ^5 c- V) H4 {2 `* @( }' H {6 z) f% t6 \5 Q; I
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
1 o5 W0 n3 M5 B" l* F, D C g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);2 Q- |& w' K) ?
}1 V5 x# c; H% Y5 u2 j
*/
( G4 z2 J8 B* I) A //////////////////////////////////////////////////////////////////////////" P' c. _2 L. [4 f' e9 \# y7 P
break;
3 M' k+ Z" j! ]) Y" E }. c ` k7 v* H+ W3 N) T
}
6 @8 `$ h' o- B9 s}# x; J+ s" c& d9 T7 y, r' p
m_wndMenu.SetVisible(FALSE);
2 J, `4 q+ [8 `/ u: a; J( X2 @& {4 n* }/ B8 g
--------------------------------------------------------------------------------------------------------% ~& S+ E7 ~8 e% Z+ j: B
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)! i3 b4 y7 W2 Y" o
{
- }7 O; h8 u9 E9 }/ L/ H5 x2 Z2 ABaseMouseCursor();
/ [/ F) G* s# F: Q$ w" B}9 T. i P S) [. |! |
在其下添加:
& e4 K* b! G' J2 ]0 U, Z5 ?6 \void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
: c' N: N+ Z/ c1 K- @* q7 W{
$ h7 z% y' }: Z# Z5 L9 bm_wndMenu.DeleteAllMenu();+ M+ c) \# m P. S: j' I$ ~
m_wndMenu.CreateMenu(this);) e" j$ ]$ R% J$ y8 I
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
6 p% Y- ]+ |# r0 M' e
: z8 B, T! G7 V& n: Kif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 H- |$ U+ a( M( d% t{
% F* P0 ?* Y: @) I" U& U4 m% R$ k //P以上级别才可以删除所有道具, u% j# U* f, O* ~- w
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");. ]0 L2 j7 [# s
}$ `8 J6 `& Z4 v7 ^) w+ c
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );. H1 y) j6 @8 ]; k7 q/ ~2 d
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
0 n1 |3 ^. u! k- |; J8 ?m_wndMenu.SetFocus();" y$ C" C5 {8 r. t Q6 F
}
) y) K6 n! ~+ ]" E+ A) M0 j, p------------------------------------------------------------------------------------------------------------4 U" N! j) C7 Q$ U
*************************
, g* E4 P+ \& U' u. d0 |0 lWndField.h文件4 K3 c* z0 `3 i
*************************- V9 x0 j- v/ ^9 K! H
搜索:BOOL m_bReport;
5 D' A) j. M$ b/ a' w8 @6 O( f: Q其后添加:4 {/ `+ I, V7 d5 Y" c9 K$ t
CWndMenu m_wndMenu;
( U' v$ W- g0 [% Z) b3 Y搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);0 G' t8 }: ?9 t8 y7 i" v& Z8 F
其后添加:, M4 A% I. n9 M* k" X( x% N: |4 ^5 A8 s
virtual void OnRButtonUp(UINT nFlags, CPoint point);
6 x3 O) p, ?7 V% C2 h& R8 ]9 E, R7 O) E
' J1 a# E. i) Q0 o1 u* O
|
|