|
|
源文件中_Interface文件夹下WndField.cpp文件7 M9 ^! h# l+ e* A w' F
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
" l) \7 n5 L5 Z u! |% K0 Z3 A$ I9 p" e; Q& o
struct sItem C2 v' v$ I! `
{
4 {# H5 ?# j: a; B5 z/ E' PDWORD dwId;8 j: A O" v; n& Y% |6 @
DWORD dwKind2;# g# {2 R+ b; G
DWORD dwItemId;. [0 u- g# V7 A0 V8 C+ `4 u
BYTE nIndex;
3 A$ y% S4 E1 F: R2 JsItem(){3 L) X$ G( v, e+ |8 x. ~
dwId = dwKind2 = dwItemId = nIndex = 0;* g. u/ Q& K' n' _
}& L7 S {- ?1 ^0 i; X$ k9 {) g" o8 J
bool operator < (const sItem p2)- } c9 o* F) R9 }6 ^
{% A& W2 d6 K7 N) `! P/ w7 O5 L& Y6 T
if (dwKind2 == p2.dwKind2) X$ H M( e8 [& Y, Y J3 @/ a
{
; J6 n* ~: `* k/ D- Z" r: ~ return dwItemId < p2.dwItemId;
, B, T, o( b5 z6 ^3 ?- ] }else{
0 R7 s% M9 @: O% ?% ? return dwKind2 < p2.dwKind2;
2 ]' b9 w0 O4 G+ S4 O }
& h& W& g) P* A& f9 ]- X}2 H/ c: s+ C3 u" v# s+ Q5 K1 i
};( |8 @% ~1 q6 ?' M! ?/ G: n
class CInventorySort# x$ h8 h7 v% Q4 S7 C
{- Y* R, p4 K" {- c( e1 a7 t/ L
public:
$ H0 c2 L) L3 w) m3 E8 bCInventorySort()+ Q" T# k7 H3 f+ V J! { _
{( S3 m* B9 h1 _! l/ S: z9 G( W& [0 h
m_dwPos = 0;: r, @: z" B7 v% {0 X. v
}
. Q( s1 O- K/ T! u% k~CInventorySort(){}
: d: J3 p& @+ xprivate:5 x1 P! V" S# P$ \( v8 S9 i
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息! z: u( B8 _. }
DWORD m_dwPos;. p* j% r- R: F3 ? f
public:
0 `2 V" f$ Q g- M* Zvoid Add(BYTE nIndex)4 I/ n) F* ]& l U- x
{% S% Q. ~: g) h- P8 k8 C4 L
if (m_dwPos >= MAX_INVENTORY)
/ e( P/ a4 u3 O+ F {+ C7 t) Z Z8 a. B$ \' q1 `
return;
& K1 I) b5 j& R9 M' L$ S# I( ]1 R }5 a* ~' e V( }6 `5 d: M/ y
m_Item[m_dwPos].nIndex = nIndex;) }' N2 L2 W2 @" X! q) N
m_Item[m_dwPos].dwId = m_dwPos;' {5 p+ B. a0 b1 r
m_dwPos++;- p/ s; G& T& q5 k2 q' [3 `
}
7 I: K( T/ R: Z2 C! z" ^BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
$ t! q# k d/ O# ^* e+ `{
4 Y! b. a! h# }* y& x) |( F for (int i=0;i<MAX_INVENTORY;i++)& G7 k% ~! c$ h! W
{! |$ ^, n1 t1 V6 J
if (m_Item.dwId == dwId)+ X0 l) A. `1 `( E) f/ B
{
; y, K$ s9 S' _$ m# r% S' G! q9 F9 M return m_Item.nIndex;% K$ b2 C1 p6 B% S# @+ A
}
# D( _! |' d* q5 | }( r7 W8 k Q6 y
return 255;
% O8 `: h9 s$ Q}+ w' A9 k% j4 t9 q5 A9 R
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
' m6 z; V0 ]+ R- ` ^% u{
9 |/ ~# x7 x( U; I/ p BYTE nTmp = 0;
. [0 s) A. E6 J2 G bool bDest = false,bSrc = false;! z3 u4 I* z% y6 P0 f( e, h4 z& ^
for (int i=0;i<MAX_INVENTORY;i++)
+ T5 c# l, ~: A0 ] {
# e8 ~ _. |& S4 @3 e% a0 \; Z! E' \ if (dwSrcId == m_Item.dwId)
. `1 ~% f0 U1 G+ o9 b {
& L; R: h+ \4 Y c( u/ y2 A2 Q //id相等 则 改变对应的dest和src7 X- B n% @2 p* X- H4 Q% f
nTmp = m_Item.nIndex;
; Z0 P) h! T8 c m_Item.nIndex = dest;' q+ L9 V- `& ]
}
o) T" ^) F+ { }
' s) O0 s2 g& v1 c' ~" F x //临时数据保存完毕,交换开始
* l1 X, j* p6 r- b; H3 S for (int i=0;i<MAX_INVENTORY;i++)
/ \! D) q \3 \ {
* x" n; k3 R e( d* Q if (dest == m_Item.nIndex)2 q' |2 p2 K/ u" H
{
1 h4 {. N/ }. J6 O( h5 |- t //id相等 则 改变对应的dest和src
9 J+ X% |! B* V1 W m_Item.nIndex = nTmp;
8 }/ B' ^3 P; ^6 X4 Z- q }
7 y# V0 ^5 Z0 w8 @ }
& @) B2 m# v2 f}
' B/ y: r, ^0 g, O};7 }3 u- d% |8 s& r& [' A
-------------------------------------------------------------------------' ^: k$ Q. n9 z5 y% C' Q4 G2 ?, a
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
5 P& P1 k- ^! g5 m8 _: L! m搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
' u; N% c" X0 z; p' T2 E紧靠其上添加:
* ]% B5 D0 N6 Wif( pWndBase == &m_wndMenu ). t4 K G$ r! q2 \6 f, m: B
{
) f& |- G* e/ H0 ~' y2 e switch( nID )* Z3 B. Y# ?3 w1 ?
{
, S) Z- [$ p$ y9 p- h+ l4 Z case 2:
4 J3 g$ U1 o5 [/ v h1 _ {
; g4 Q4 `% v" m) R& d4 \3 f //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);3 L* f) m3 V4 j) R$ I( T# o. R
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
) q0 U P, A$ X2 M {' a8 d; h' ~2 a5 s4 j* n
break;
" x3 {4 z( _% f% E% | }
- \( ~1 K0 N! O t1 K6 q+ Y" Y for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)8 `, k4 o( ?- o% f9 y
{ {' R* ?9 M' l- }
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
( ?( U& T' s0 G3 X# j! M+ a if( !pItemElem )9 L0 b5 F/ y7 F6 f: K+ j
continue;
& O' l. W" T7 {/ T1 m& E- T) g if(pItemElem->GetExtra() > 0)6 z6 S& z8 [& Q+ Y
continue;
. ]4 J$ K% ]" p% V. ? if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 8 p/ l, G( f- R* x4 n2 o4 i* V
continue;
2 [0 B) ~2 B s: N& B a2 x if( g_pPlayer->IsUsing( pItemElem ) ); R& ]$ O. X6 e- _7 s
continue;, Z+ F6 ] S( o; p G: z2 P6 C0 V
if( pItemElem->IsUndestructable() == TRUE )3 D; o0 l1 l& r* T
{. A4 s! k6 j# i$ n
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
& e" }1 `# M0 ` _$ j) F( f6 h continue;& K1 h+ h- X3 e ? H- ~
}/ D. o( l g+ ^) I$ k0 |# S$ X
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum); c3 K7 D( e: |, A: u4 `
}. ]7 O' e) c1 c0 s6 l
break;
, V. S; v8 |6 R! i9 v }. \* {/ X8 E N% B6 {# r8 i
case 1:1 c W B- p6 H& f% R
{. E; h3 x( [, Y. I: ?
//整理背包
$ p. ?8 r0 @4 ?2 g8 V( R9 ?. C: M+ q //////////////////////////////////////////////////////////////////////////$ l3 r d* ] t" s- |
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
a( q7 U: U/ ~8 R/ H/ ]3 J; u //////////////////////////////////////////////////////////////////////////
4 F. Z+ w& y$ ]8 ?6 Z$ K //////////////////////////////////////////////////////////////////////////
/ a9 C6 T1 L1 s- b- u6 L! w! R CInventorySort* pInvSort = new CInventorySort;" q4 d/ u5 {( h( e8 \7 N
vector <sItem> vItem;
! ^! l, `& d$ y# q. L6 _ vItem.resize(MAX_INVENTORY);//初始化大小
; @0 h( M/ L- i8 p //////////////////////////////////////////////////////////////////////////
( b/ P7 Y2 ~! c4 Q9 a //填充数据
9 P5 A$ B# x+ s2 x {0 q for (int i=0;i<MAX_INVENTORY;i++)
8 ^* }5 {2 \9 L! X% y* E- K& k {
: u/ u7 L; x" c1 H [) K CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
. h3 e' a- n% u* x if (!pItemElem)
" T8 z2 y1 g$ r) ~+ i {
' q+ w( o! t* n; b! P+ A8 [, _ vItem.dwKind2 = 0xffffffff;) f7 C* M2 s9 f* O- A
vItem.dwItemId = 0xffffffff;
+ S8 k2 v5 F& n5 l/ p: ^/ O vItem.nIndex = i;" i3 k4 i: T$ G1 t- y# `" M. F7 J9 ^
}else {
9 w9 E$ o% K, i/ j2 \, B( U! I ItemProp* pProp = pItemElem->GetProp();( c1 }; ^# o. ]
vItem.dwKind2 = pProp->dwItemKind2;5 o4 i% d2 {' m' |3 V6 q& E2 x( _
vItem.dwItemId = pItemElem->m_dwItemId;
8 S4 c/ P3 |6 e5 x8 `# i vItem.nIndex = i;
; m: g# i. D x/ c X8 x }
! j4 v" `7 S5 J8 r //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- ~% Z6 P) l; x- m
}* [* _6 V2 d- Z
//////////////////////////////////////////////////////////////////////////7 t! z% v2 V' [- ]/ |
sort(vItem.begin(),vItem.end());//排序
3 e3 g3 e7 L2 b& J' j9 h' N8 X //////////////////////////////////////////////////////////////////////////! M$ N- }7 _2 j( [1 L6 ?
//交换% L0 C% L2 i$ e. h9 a
for (size_t i=0;i<vItem.size();i++); t+ A" D' K! b- S
{; z$ I+ [9 ^7 G5 }1 i2 {
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" L" ~, ]( E/ d) R: z: G( I
pInvSort->Add(vItem.nIndex);& _ o/ B5 s2 a8 }; g
}
1 z; V1 T' i. c BYTE nDestPos = 0;
# I% n: g( H- N2 ?. c5 } for (int i=0;i<MAX_INVENTORY;i++); G2 K2 Z3 e' T% A: e! A- T
{9 R( ?% f. D9 l/ V
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);- u7 _, Z1 a; K0 ?/ F! {
if (pItemElem): M+ ~4 C) `7 C. E5 j/ m+ E
{2 V7 s. a$ I. c. N
if (IsUsingItem(pItemElem))
- P6 b E, T4 y {& X+ v" o9 i1 M9 y
//这个位置无法放
; a0 z3 f3 Y( I- `. V8 p nDestPos++;
8 T- B' e, \' ?* J- ^ }
0 G' p6 [1 U& s% H+ X% E }
3 Z% r: ^# i' ^* f# q BYTE nSrc = pInvSort->GetItemSrc(i);0 K% A1 Q( {: E c( n
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);, a! ?: b; ?4 d/ n; ]. S4 y- w
if (pItemElem)
* ?8 m% S f! @1 U; F1 H3 C$ b. q6 S6 A {
2 j9 f1 Z. u& J* x& n) m if (IsUsingItem(pItemElem))3 f' v% g0 d$ K, m
{
( b$ s# [5 c6 i5 x r3 h //这个道具无法移动,跳过/ |: e% M% b6 R! D3 S2 O
continue;5 h8 w# Z) A+ @# A2 x$ Q* Q8 S
}- F4 i& m% _/ i; [$ J$ _6 d
}else{
8 |; T4 P4 G6 U6 e$ d* I" p //空位置 不用动
$ x9 o8 v* E! K3 c: f! o continue;& m# y" y. L+ F( g/ K) v. F6 b
}3 M" q, ^: l s! S" Z4 N- o2 w5 n
//////////////////////////////////////////////////////////////////////////
2 A% n6 i3 M: F. v //开始移动
; z/ o- ]& c ^/ e1 R if (nSrc == nDestPos)
/ N: W. x2 e: t$ k8 E8 V+ d {" \# H$ S0 x, v! |' [1 R6 Z( O% \; B1 j
//原地不动
3 z% ?# S+ Y" I5 r8 B0 X# h nDestPos++;
8 J# J6 N' K' e continue;
( N# h9 R& W8 H }
9 W) d2 i3 Q8 n) o' y' P# q% U pInvSort->MoveItem(i,nDestPos);
2 d. m/ t, }) ^ g_DPlay.SendMoveItem(0,nSrc,nDestPos);) r0 T+ \0 w: p$ }, J3 T7 N
Sleep(5);
, D" ~; Z" Z8 L2 w: @+ w/ a7 N% u; r //Error("移动 - %d->%d",nSrc,nDestPos);# E3 t, h/ a6 |6 j2 R, q' H5 }
nDestPos++;- _- p* }3 `$ C
}4 b7 j9 p6 v9 E0 u9 ]1 P) A
//取第一个元素的信息6 B6 R/ w4 @2 F& f) l5 [
/*
/ I! B5 r/ F9 h6 T \ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
2 b# L9 }- r0 k$ r, I! D* z- ` {
k' R" e- b$ B) q5 |- Z2 H Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
4 l: L* m. A: O) D* i+ Y9 z g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
I7 y: @0 \& x+ x; z9 w& p }3 q, e* e- s9 u$ B* U) B
*/
/ C5 p( g/ q( u) d9 x3 M4 w8 k //////////////////////////////////////////////////////////////////////////
1 ?# q( e# l$ o( V% m break;
3 Q6 ?; t }; W2 q' L' N! a }
. p1 }. K; k$ l+ Y1 c: q) X8 f0 ] } 8 e: p# O$ U! n/ Q$ P
}0 j8 E, n* N7 ]# J
m_wndMenu.SetVisible(FALSE);) U1 r& a8 t3 L9 }
% M6 ~) @% }9 @/ k* [1 m0 A--------------------------------------------------------------------------------------------------------6 F# z' B" N7 e! l
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)4 t! Z# ^# N: i
{
$ ~) n ?) K5 |9 D9 L8 ?# GBaseMouseCursor();# g0 `/ J4 T/ [. ]9 ]% ?) b8 \( i1 A
}
) @" p' K6 P9 y7 _( h- u+ a在其下添加:
7 P. J3 k8 v2 @* ^6 p, zvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
4 \- g% D. J% J- ^{
5 y4 Q2 A! g6 D2 X5 q9 j$ Km_wndMenu.DeleteAllMenu();
2 z' L. t) w/ n1 |* om_wndMenu.CreateMenu(this);6 F J# M% b2 Q+ U- C9 k: b: V6 s
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
9 S# w5 {, @' z- U! D& q) [8 L7 L8 p
7 [# m# ]: A$ q* b! Kif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ C% K2 ]8 P! F4 [4 v/ e
{
3 ~ e& j; z$ d2 x+ }! Y/ G //P以上级别才可以删除所有道具
" i Z2 _ Q4 m2 {: e: w5 _ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");( Y& R* q1 ?* M5 Q2 f
}+ g$ b7 `( I2 A: @ W$ N& t9 @1 E
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );: T, F, w4 t' X
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );- k( V0 k2 p0 }) Z* Z
m_wndMenu.SetFocus();' Y; d b& v# I& Z n5 r" e
}
6 W* L: ~ Q; z! K- Z------------------------------------------------------------------------------------------------------------
3 L* T; O5 s# B/ e" m/ C*************************
9 b0 F! x5 i! n3 O7 J: H$ s" _- BWndField.h文件
7 H/ E2 A$ T+ q$ u+ X! |*************************; t) S, S, @4 Q. F% D' F
搜索:BOOL m_bReport;
# A! x T7 p* `& N" U. E+ a其后添加:* O: K: ]% Z) \ r( @1 G- t
CWndMenu m_wndMenu;7 \; F3 c! N/ r3 b1 ]+ q- R
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);; I" f, G0 \$ {
其后添加:
}2 U) V( C$ d6 n. `virtual void OnRButtonUp(UINT nFlags, CPoint point);5 l+ l O8 r1 r
5 u+ A3 A t6 I1 f
% E6 \* d" G$ ] |
|