|
|
源文件中_Interface文件夹下WndField.cpp文件6 b* Z3 j! V- m8 n9 F( C4 R; D; X$ x
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )) N" p& W' t- M' ^& O/ y
, `/ h4 R# |6 u& q" z
struct sItem8 g( c) X; M a0 u2 a& o2 m h& T
{' ^% y2 l- l& r6 g7 b
DWORD dwId;
( J% Q9 f/ B; P3 b$ qDWORD dwKind2;
7 I! V, i5 k. Q) U/ i/ i# sDWORD dwItemId;
i* I" @% w0 l; s9 n+ a1 A+ j/ VBYTE nIndex;( @8 M- D5 o X% ^& ]
sItem(){
, _+ _1 A) A5 x# C6 G dwId = dwKind2 = dwItemId = nIndex = 0;
: U' r' Q+ W9 S7 x! h% c" ^/ V}* U9 f5 V7 o" {: g7 B- c6 e, ~
bool operator < (const sItem p2)
6 k! D5 W0 w$ k) x{8 ?2 b* ^! v% ?+ Y- i: s( i# m. A
if (dwKind2 == p2.dwKind2)6 |2 U* N5 P) K V: J0 W, Q; h$ _
{
@1 D7 ^0 l7 X: z5 U return dwItemId < p2.dwItemId;: X+ J" P4 l& S5 R% `
}else{( J6 n. S! B( c6 K
return dwKind2 < p2.dwKind2;
. {( ~; G1 L1 V S0 ? }* B+ R) q$ u7 F3 t9 o' \4 e
}! V* O) C6 O9 F: U1 G, y
};& d/ z, d8 \ K# c" B5 o& k
class CInventorySort
- H* }# l: a. q( L" {{8 H' P9 a4 [" h# b+ n
public:
* ^7 V6 }# ?5 R7 kCInventorySort()" c: o1 @) W [- s, y0 C9 a/ N
{& k$ `( \4 d, \
m_dwPos = 0;
3 k# ^' Q/ m& s7 G}$ A! b9 Y$ d, y; Z ?
~CInventorySort(){}3 n) w# v; ~% @* k, t/ A2 R8 ]
private:
# `4 n$ m8 `& csItem m_Item[MAX_INVENTORY];//存放排序好的道具信息; L( l2 W( C! z m
DWORD m_dwPos;
: I/ y3 U2 ?1 s7 Q) B7 a& xpublic:
& r% Y, R# z% w9 b8 J& T( \void Add(BYTE nIndex)
! v Z, ]6 c/ ]1 J" j4 m{' {& b9 A s" F$ O
if (m_dwPos >= MAX_INVENTORY)9 e; y8 n& y2 K" H- k& {
{
# H# H; @ l$ N5 v return;0 W4 k9 I. t& F+ @
}7 y% ?' E7 o1 K) l, x
m_Item[m_dwPos].nIndex = nIndex;
) e8 b1 W6 T, g+ P1 `+ T& _: N m_Item[m_dwPos].dwId = m_dwPos;
/ \/ x- N7 T% N m_dwPos++;
+ l$ x) [# L! U# p' r% e$ t6 J}0 m9 |( Q& I, ~0 L0 w% t
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
# k6 ?/ t- x# `2 u7 F, `{
4 i/ R/ ], x$ ?. x for (int i=0;i<MAX_INVENTORY;i++)
* k- q7 F' h$ X3 ]: n W {" n; Z# V/ [) R- D/ R
if (m_Item.dwId == dwId)
! r; l3 }! I, }6 z3 U% T5 K {
5 e3 m. | w: \( r7 o return m_Item.nIndex;* V% O" z }1 v8 @) X, k2 Z0 G$ \
}1 X$ N, P; j [5 Z2 K/ o
}8 `) T3 F% ]! g
return 255;0 x6 h) O3 P) X/ Q: J
}* v/ m: O: D$ l8 e# y
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
4 D& y2 ^9 z. h, N% |+ Q- C& K{
( g S7 b, b1 R BYTE nTmp = 0;% B/ E3 |$ d+ M5 |8 _) ^
bool bDest = false,bSrc = false;4 f1 J# R9 k& |! m6 V
for (int i=0;i<MAX_INVENTORY;i++)( X: n4 w& z9 a: d& _
{
- _' n5 |$ y" p6 h if (dwSrcId == m_Item.dwId)
1 P% p! D3 _2 j6 v. n3 m D {
& n( L5 O( m4 k* d6 f( e/ L }/ i //id相等 则 改变对应的dest和src
' t+ H4 b- f9 Y% B nTmp = m_Item.nIndex;1 S: F/ K* t$ Q# u2 B1 j
m_Item.nIndex = dest;1 j; ?+ C% I" {" M" m
}
1 f) L* ~# E& a$ w) ] }6 V# a5 i; T3 u3 p
//临时数据保存完毕,交换开始 ]8 a( ]+ W, k' T! l) b
for (int i=0;i<MAX_INVENTORY;i++)# W& K: M; V* W( |; ~
{, ]: t0 J. @' L% x
if (dest == m_Item.nIndex)! g; Y4 ? ]8 A
{
. C! H- S# Z! v! o; X, K6 \ //id相等 则 改变对应的dest和src! p, K5 v; M8 h2 L! ^
m_Item.nIndex = nTmp;
4 J1 }. J: t. B, X2 o* j }3 p, }7 m6 y7 A. ]; [
}
6 u7 T9 R+ t2 _" m: U}
: @2 C% u `3 s8 K2 ~7 n# e3 |3 g7 B};# @' _+ S$ h5 `9 z0 }+ }4 \8 j
-------------------------------------------------------------------------( S$ u/ X5 P; `- y
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )* R+ w5 G7 o9 ?8 p
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
: w G( [; T# l( s& J0 O f, [紧靠其上添加:% I9 m; l* J- V! ^+ M, J
if( pWndBase == &m_wndMenu )
; v: `( r- l% a* _# u{
" [9 [9 L p- k8 e1 y- O switch( nID )! h8 d, P) {) X$ B2 O
{
6 G4 K5 T6 ?# J3 K0 r1 m case 2:
J# S J, h O+ z0 ^# s {
: ~7 _6 u, @, l: D; V4 f! h //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
$ @& u% ^% w5 e5 x# b( k if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; ?, f5 y# c3 F9 W {
) t- {, @+ O8 N; B1 T break;8 }( c, b% h6 Z" s4 r
}
& H. ?- }9 W0 `2 X9 {. p$ T for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)# F9 x- Z3 M2 d1 k
{+ x) ]2 F ]3 H( p
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: [- L2 c: j1 g9 X5 I( _2 d5 u if( !pItemElem )! k) P. }& Q) O6 p
continue;1 `$ Z& }+ A4 ?7 J! b" k, P
if(pItemElem->GetExtra() > 0)
+ Q) ~* }2 x: Y# G- ?5 j* d3 h continue;1 C) X& w V" R2 i
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) " U6 k7 l q, ^0 f. M$ p5 D
continue;
1 G {: H6 N9 S if( g_pPlayer->IsUsing( pItemElem ) )
# L! R' e3 W( V( B" b continue;7 H& L7 p: k+ G2 e% R& ^, |
if( pItemElem->IsUndestructable() == TRUE )
' u3 o) w) }+ [" \& }8 e4 Z. e {
; L w v+ R+ ~& c g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );/ u9 P5 c5 O# i% c. H
continue;6 U7 g6 k7 H8 p' N, e, q) l
}' D$ y# l3 G* c, Z. f/ A
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);' k7 N! `: V; V9 a
}
+ k0 Z1 H! f! y2 Q( c break;
( o4 E' y! i/ d6 X2 X5 k% s }" n4 m) E+ V$ j/ ~( {! r$ t: r
case 1:" B `8 @, `: B
{
, _, p- R% [; L- q //整理背包# F! j- h2 @$ F
//////////////////////////////////////////////////////////////////////////
* c+ \/ K$ p7 V //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
5 V0 G _5 z$ Z0 t8 V //////////////////////////////////////////////////////////////////////////
( w, J, V. l$ F8 W' A, }/ H! R2 q% g //////////////////////////////////////////////////////////////////////////0 C1 K9 f8 o" m2 \6 |; I
CInventorySort* pInvSort = new CInventorySort;* y) w! j, d4 ~ |
vector <sItem> vItem;
2 R1 J5 T$ b% G8 c& C vItem.resize(MAX_INVENTORY);//初始化大小
# A0 C- n$ h! c- S //////////////////////////////////////////////////////////////////////////! g& f2 F0 e: ~
//填充数据) `3 k: T, R5 A$ s' ]7 f% L
for (int i=0;i<MAX_INVENTORY;i++): n! H% ^( C G$ t
{- o, [+ y K& a$ E: B( w
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 O h1 H, I0 [& ] M$ r if (!pItemElem)
@* U; H# y: H {! {5 D" r x9 K1 h9 w8 ]% r
vItem.dwKind2 = 0xffffffff;* n, }$ p! R" {6 x- J. @+ ]
vItem.dwItemId = 0xffffffff;
% L8 {+ x. ?5 c* w6 _! Z vItem.nIndex = i;3 u5 F6 D8 I; Q
}else {1 L5 k! f9 S$ D2 k- n
ItemProp* pProp = pItemElem->GetProp();( R( }% w! z% |% ]) T& L2 J
vItem.dwKind2 = pProp->dwItemKind2;
8 M9 _! r- q$ c Y vItem.dwItemId = pItemElem->m_dwItemId;4 y9 a1 I8 i+ e( i3 s
vItem.nIndex = i;
7 X1 g4 k5 R4 j1 s8 [ }
" L) ~% x) C2 ]3 J+ D3 { //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 _6 k* R$ }$ e/ ?- E/ P& g }
# D/ e! z, s+ k+ L3 d8 [ //////////////////////////////////////////////////////////////////////////
2 X" @- N6 ^4 g! z) U sort(vItem.begin(),vItem.end());//排序
5 {8 z) R4 r9 u2 Y/ g% v2 I1 | //////////////////////////////////////////////////////////////////////////
* \1 F5 x. @; w3 d' t7 M //交换
' o7 m* d) [: y+ ^5 q: ]; ^" i" ? for (size_t i=0;i<vItem.size();i++)
8 G( ?5 u9 U2 p' n% T" } {
2 B9 e* n9 O. o7 V4 I/ F //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- g9 T* B7 f0 I3 v8 R" c1 K pInvSort->Add(vItem.nIndex);2 f8 B. n1 A( P! U6 g
}
+ ?, w. p3 @/ [. T8 j- r BYTE nDestPos = 0;8 B9 }: g$ }1 j* _+ w1 f
for (int i=0;i<MAX_INVENTORY;i++)7 K7 c& F' `7 G9 r+ F& J3 n
{" n: T# F' b7 G5 V, b
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);5 ]! ~' b5 U! ]; n5 y
if (pItemElem)
3 ?& m; r' B0 R) u$ I5 I {
8 j! V/ x& J# E0 D8 X' ?* Y if (IsUsingItem(pItemElem))
' X+ ] @, u0 K V6 U {
6 F6 {% t Z v: P R //这个位置无法放9 O; Q/ C+ a6 w' |" E" s
nDestPos++;
. s9 u& B! f% T7 o }: L' X( N; @0 l3 ?
}$ J0 \2 H u6 u
BYTE nSrc = pInvSort->GetItemSrc(i);+ z: z+ @2 y! @! c5 ]! ]; }
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);& A; Q) \% c P# k5 X# l
if (pItemElem)
( |" t! d: t! Z7 O! M- W/ W {8 I# W! X, g% d% ?' X: k/ {
if (IsUsingItem(pItemElem))
3 G' c: t& K# s/ u/ c {9 a8 P8 i% k& `
//这个道具无法移动,跳过% \! i# d+ ^; p1 |
continue;: Z' ~9 @) X$ ?4 l6 x0 R
}
0 y% v& w4 x3 Y1 [5 E+ J) q }else{
9 m) U8 J6 p+ G; |# @" B //空位置 不用动
1 K( v$ z& ]0 M3 ^ continue;. C7 z6 L( q; ~
}/ l& A' N/ I; f) `$ a9 y* t# T8 {! k
//////////////////////////////////////////////////////////////////////////
, { y# C+ ]8 d //开始移动% J: b m) I2 X) [# { [
if (nSrc == nDestPos)
; z' e6 R' O) P% r' k8 | {% k# `0 l+ h) j, n5 q( t' Q
//原地不动* `" w" R" ^6 F* Q. ~
nDestPos++;" t, O: ^+ K) T3 d7 ]( t& Y _
continue;
( f1 V+ O5 h; v! w/ s2 { }
q1 w$ ~* h* O- N: z' Q1 d! R pInvSort->MoveItem(i,nDestPos);
# p: n. Q. ^8 ` g_DPlay.SendMoveItem(0,nSrc,nDestPos);
- ~- C% S; \/ f8 o9 k, x Sleep(5);
( v: P& P# q; _0 k% a5 ~ //Error("移动 - %d->%d",nSrc,nDestPos);
% A7 c2 [& m1 N- L5 q- p nDestPos++;
Q( y- V" H7 U. M- t: }' J }
# L7 `) C, k% B5 Q //取第一个元素的信息# Z9 K* b4 n* h8 k3 Y' X2 R; J
/*
3 [- y# w: O, ?& V# B$ V if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
7 V6 I- Z5 A- f% j- x {
& `: b. U' [1 j' O% y6 B$ N! f Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
( _! s1 C$ _/ |# H2 m g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
( @4 P( X/ \* v9 C$ U }9 R" f7 X1 e' f r( Y9 K1 H
*/0 t) ~# ~6 P" |9 w9 W. g
//////////////////////////////////////////////////////////////////////////) g0 h+ g" ?7 ~+ P$ u
break;; \3 T9 D h: w5 `1 ~0 A& B
}
7 w- e3 t# L& O) l }
) D( Q r. }& y. ^$ F}
% h5 Q6 V' ~ A9 D( O9 W8 vm_wndMenu.SetVisible(FALSE);
$ b# P" F H4 z; z7 b# V. A& n; Z( ~+ J) Z, p. l
--------------------------------------------------------------------------------------------------------
5 J" t! w- R0 H/ Z6 u9 d( V搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
# F7 Q# ~2 Q- g6 A4 ]+ n0 |{- Z4 h) E3 B) N+ ?, c6 @) x
BaseMouseCursor();0 R2 \* S& i2 J
}
- n, a5 K3 N! S3 _在其下添加:. y6 ]# P. X- {" g' p9 Q* m
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
& E0 S, X: U1 Z* X, L{* g9 V7 m- u" h/ @2 A
m_wndMenu.DeleteAllMenu();' D E6 a- ^0 f. d8 {9 P+ Q5 ]4 V! b
m_wndMenu.CreateMenu(this);/ c' Z# U% a) E) b/ | M( A7 w- _
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");4 N% P" k+ v* N. V/ z; S! m0 w
7 R1 w' D2 U! Y9 B; ?! ^
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 x! w! a3 c, t% \1 R+ }
{
& Z3 T! E- ^* N7 p( ]3 n //P以上级别才可以删除所有道具* ~0 s# q, I2 w
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");+ E: A4 w& B. C. x3 g3 L
}. b- O0 T) G" S; o- s1 G, ~
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );$ q$ T; y7 v5 D; j' L* X
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() ); d R7 o. l# g$ \) _4 h/ Q+ A
m_wndMenu.SetFocus();
3 u1 g6 k% u* S( E}
; s, n- m# F- s8 {------------------------------------------------------------------------------------------------------------
6 u8 T5 M8 n' w7 V8 q. L2 P************************** C6 S, [; s: r! f6 x) Q A
WndField.h文件
* B. w! H) Q$ s. N*************************
9 Z b% @ F- X8 t' W1 w搜索:BOOL m_bReport;
0 f! L; t' i* o# Y7 k其后添加:: q5 z' o; y/ n' B, E" u8 x
CWndMenu m_wndMenu;' V2 ?) @! M: k! u1 c( T' x
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
8 M+ {' g: ?/ @* E9 P6 y0 m其后添加:
- b" }7 J" Q0 x( M. p% Cvirtual void OnRButtonUp(UINT nFlags, CPoint point);
8 A0 p; ]& u5 F# c6 R* T+ N( Y# ~& U$ g
4 S' V! U6 m/ D# M. c4 f8 n |
|