|
|
源文件中_Interface文件夹下WndField.cpp文件& y% `4 H4 i, Z' n" f1 @- g
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, }% ^$ M3 E9 f5 D. p) m1 N( H R5 w2 n3 [. R
struct sItem
8 q' w8 B. C" Z; I/ S9 p" \{" \3 z( @5 R3 E8 D6 }! i( e: R. b3 u; V
DWORD dwId;
/ d8 t6 f' X- H/ v Y% ?6 n4 cDWORD dwKind2;
; L1 @5 n& k# \8 |) LDWORD dwItemId;
1 D8 i" Z" X$ B0 O- ~5 qBYTE nIndex;
3 n/ s5 |# F* Q( C3 v; HsItem(){! p& r0 w9 @! U& r ]
dwId = dwKind2 = dwItemId = nIndex = 0;. I4 D% l0 }& s* D3 S5 N6 _
}5 x2 _: r* n) l' l# T" b; [
bool operator < (const sItem p2)
- m" |: t( I2 S' M1 T3 g{/ h. g, X" |7 ?+ x
if (dwKind2 == p2.dwKind2)2 _3 Z1 e8 ?) w% V9 Q
{
* Y, Z+ ^4 J6 {6 _9 j' x% y& x return dwItemId < p2.dwItemId;
; D4 Y" e* @9 {' w' L }else{# F% ~8 _0 H- M+ k
return dwKind2 < p2.dwKind2;. \3 ~/ v1 A! V0 j* y
}; B. v- |1 l: [- O" E. T3 |" n
}
: T# R! z) z+ F) `+ W* T5 o$ h. t};0 O/ @1 R7 A+ S& q* _3 }
class CInventorySort
2 Z- _" b& u4 p: }! k! Y{1 c- Q! y1 l% i
public:
) p% ^* o/ [- a9 J! ]0 SCInventorySort()7 Q5 P% {+ L: j1 V
{+ V" o& C/ g. X3 K
m_dwPos = 0;
1 {" H+ u. a: y$ S# S3 q}
6 _1 A4 u' L- u. V+ Y, _~CInventorySort(){}2 v: s' R( L, _
private:
% C. e: u& \, H! n# G- c# a. U- HsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息4 J, q3 a3 p" x3 U% ]
DWORD m_dwPos;$ I; q4 k$ V% H
public:& {* p" Y" D. x- z
void Add(BYTE nIndex)( `# h3 ?( g: z. T# _
{
# }' ^. ?) G7 \7 T6 ~, k if (m_dwPos >= MAX_INVENTORY)& r7 J$ n; R+ N' L& W
{
2 u1 V: W3 E9 q return;
5 b& a$ {2 q0 |+ A) N }
: p5 j& V9 _8 u m_Item[m_dwPos].nIndex = nIndex;4 }, i9 I* [/ L$ K1 Y! N y
m_Item[m_dwPos].dwId = m_dwPos;3 n0 b9 m. e& ~, }; s* F+ v% O0 l
m_dwPos++;! U- l1 u) \& _+ h: p9 {
}& e5 s& y6 K* C" P* r
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
4 e; c8 _* z/ x) C* _; e{
4 F- P" ]+ T0 y1 @/ O! `+ K* W7 h( t for (int i=0;i<MAX_INVENTORY;i++)
( H/ O* I& A$ ]' a/ ]0 H {* { ]( a8 H( F o
if (m_Item.dwId == dwId)3 k2 ]5 g2 W' }* G
{2 G* @$ D0 C2 I
return m_Item.nIndex;+ u" z$ X* X! ^2 {2 \: P
}
4 ]+ b W2 `$ _( x }6 S& B2 ~; B: V2 ^ Z8 |" B
return 255;
. M* _, s+ h) r. V6 q- Y}
C4 r* \' N+ }$ [3 g1 [void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
5 e7 c, Q2 V0 N8 ^# f( g9 K; |{
- [$ I# N0 {2 _$ F/ f BYTE nTmp = 0;" M8 k' V1 j$ ^& e
bool bDest = false,bSrc = false;
7 W3 c& u; w. j4 M for (int i=0;i<MAX_INVENTORY;i++)% B0 f E+ W# U
{
3 b7 _8 p9 Z: B: ^ if (dwSrcId == m_Item.dwId)
0 j/ K4 C% l! p+ R2 s3 q' c' t- S {
/ A" t# M4 ^6 L6 W //id相等 则 改变对应的dest和src
& @, e# t9 U" q5 M0 F nTmp = m_Item.nIndex;' ~1 M! e, Q! s/ {) N4 K' X
m_Item.nIndex = dest;* Q9 s; G5 d& A. B4 B: V# I
}) l$ e3 {- s) f6 Z
}* @$ c) ^7 j; J$ f/ y
//临时数据保存完毕,交换开始! L% W' r0 Y# W% E% L
for (int i=0;i<MAX_INVENTORY;i++)- ~* X% R ^ Q5 X% s% N
{$ u6 M& H( s$ W) m- W3 x$ E
if (dest == m_Item.nIndex)
; p, c/ F6 W2 L% N9 \' P2 B! ^ {
, L: Z$ x& n0 Z# x- h+ P- t //id相等 则 改变对应的dest和src
3 {4 n4 N5 d0 i1 o m_Item.nIndex = nTmp;
: ~* d; ~# A2 H5 V# {9 c) y }
& h) g8 e' L$ j, r& B }! T: G! J* f5 r' A: X3 h
}% r7 z$ g8 F+ @$ v+ J9 [
};- @ s1 C* P1 `! ~
-------------------------------------------------------------------------
" {; O l, p) p: l依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 v8 m( O/ G" Y- ?搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);* n1 A+ P, S2 U9 \3 |( x
紧靠其上添加:5 m4 u4 p/ @4 D. ~% @$ q R4 _
if( pWndBase == &m_wndMenu )' U3 y T6 N. h Y6 b7 e. E7 m
{& E% I" _% n; n8 x" B4 j5 J) }
switch( nID )! H% y4 ^# d' m
{
- \7 j) Z3 n$ ]9 \0 |2 A case 2:
* I+ q2 {" J2 B( o9 C {& {) O: @! Y D: u
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
1 a P, D! E2 w9 f6 T5 V7 r( x if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). J/ H# z4 E$ B# _0 m
{7 E7 o, d `$ d2 I; l9 @6 u
break;
! O# n. O4 B; [) i8 v) O }
- K( ~3 ?9 a1 E1 m! q( V; |5 z for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)/ [# Q0 [, k. o& u. P3 D( p& X
{
& z! ^# g J+ Z0 C CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 `: Z5 W/ V* k6 B' X if( !pItemElem )" \. J5 e1 Y v8 V& k/ r
continue;
0 \! j/ {; F$ [2 @- l9 Q if(pItemElem->GetExtra() > 0)$ G- R/ T, T% d
continue;* Y" s+ v! S8 N6 K; F
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) & ^4 h. ?8 Q6 K0 I8 a) }4 K
continue;
$ _) G( M+ |* c% G! ]: o! @) \ if( g_pPlayer->IsUsing( pItemElem ) )
9 R! m+ S$ I) K- i5 }, Y+ _& j continue;
& W+ V/ h* i# P% I8 A! j J if( pItemElem->IsUndestructable() == TRUE )& \% E6 A8 A3 P- |+ v# n/ |' U
{6 }! Z) X& y6 r* a
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );7 ]# U, M3 p: d2 b
continue;& ?, M( B# ~ ^, M( M
}
3 s5 r* X7 C" U3 v g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);! m3 `+ o0 Q! S1 m" Y9 N
}
* n( V$ I" ^: Y) N1 R* R break;
6 y. M" `/ k' D2 S: x$ Q$ y/ r t9 l }8 W: h- C3 F6 D: v& W
case 1:; o) @, P: ^' z7 H7 H- l4 G& U$ G
{, R# v9 j( u/ z+ J# V( N( I' m2 y
//整理背包
3 a$ i3 K7 `' w5 ]3 t/ H //////////////////////////////////////////////////////////////////////////$ G% Y$ ^- n2 J; T1 O( p
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );/ S- y' ^9 h' v4 Y) q
//////////////////////////////////////////////////////////////////////////
/ @2 z1 |; C q( a; P //////////////////////////////////////////////////////////////////////////' E Q9 \" z0 Q3 S
CInventorySort* pInvSort = new CInventorySort;
3 i! s2 f# y0 R3 ?: r. ?$ s- W vector <sItem> vItem;
; v4 L* Y# n& f- D& q vItem.resize(MAX_INVENTORY);//初始化大小
Y1 u' p1 d& X$ c& Z //////////////////////////////////////////////////////////////////////////
% o* X: `# ~! M' t5 d //填充数据0 M! P, f" ]/ U, f7 Y- c2 [5 Z
for (int i=0;i<MAX_INVENTORY;i++)( R& V6 Y( F0 M, _: d: @5 `
{
' k0 |' d7 B+ Q3 k, G% C, J" t CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" P% n i+ i5 _4 B! q
if (!pItemElem)
: }+ g' Q# d& {" D5 F {
; b1 e8 [9 ]" Z; e' Q$ T" L/ D4 i vItem.dwKind2 = 0xffffffff;8 c$ y- V7 [! [: T
vItem.dwItemId = 0xffffffff;
3 \/ ^& B5 n! h vItem.nIndex = i;
8 o8 J+ Q2 ? U4 @% V8 v! s }else {) O) ^2 g# G7 W. p
ItemProp* pProp = pItemElem->GetProp();
# q5 |: P/ W& S3 C6 p/ k vItem.dwKind2 = pProp->dwItemKind2;4 w7 a4 m( |1 S
vItem.dwItemId = pItemElem->m_dwItemId;4 w+ I3 y$ u# i# W4 [: W
vItem.nIndex = i;1 h3 V: l: c' g. ]* d2 h: P
} v3 N- O2 t' ?
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ c- S4 ^9 B( a) \0 H' ]
}
0 V2 r3 [0 s) g) x //////////////////////////////////////////////////////////////////////////' u6 |- ?% v. s0 V4 P
sort(vItem.begin(),vItem.end());//排序. x4 g1 n' @$ D+ c# g. N7 |$ J/ m
//////////////////////////////////////////////////////////////////////////
$ v* S& R. _0 x, h8 o2 v6 M //交换 U, `. X# y3 ?% r
for (size_t i=0;i<vItem.size();i++)
3 \; @- I) N- x' D {* {* I0 s/ |; @ ~5 g- Q
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" K; [1 _/ G# t
pInvSort->Add(vItem.nIndex);
+ A# Q6 |5 j l }
9 `/ N- P: R& v2 j$ Y BYTE nDestPos = 0;; f/ s f; R% X. g
for (int i=0;i<MAX_INVENTORY;i++)
0 Z$ I& w! \3 ]2 Q {
) I2 c+ r* W0 S( d CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
. B) E. c) y4 C. v3 w if (pItemElem)2 S. Z' @: t. B8 b! h" l$ S% |0 U
{* j8 I/ F0 {" a) T, j' f$ @6 ?
if (IsUsingItem(pItemElem))
0 [1 h% ]$ J s3 x( l2 t3 e {/ n' s% `7 x- R- t; a8 r6 E
//这个位置无法放2 ^1 Q v2 w! G2 O- a
nDestPos++;8 w w, V1 X9 \
}
' X) }4 T" L! | S4 N }
. s9 r0 j; @: v BYTE nSrc = pInvSort->GetItemSrc(i);
8 b. q H& X# @9 i& I; d pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);" X# X- |$ F$ M+ d Q5 R% a2 {
if (pItemElem) Q- [/ u5 x* G- V& u( D+ {$ v9 A0 }
{1 j, o2 o3 l7 ?' {) V1 J e m
if (IsUsingItem(pItemElem))
# K2 R( Y5 x, N4 \ {
4 `" |7 v9 T% ?& S! p7 V //这个道具无法移动,跳过
- O. O+ z" M/ K; q5 N. K/ T; D- d continue;+ n. f) C/ c5 ^( r, I; S: {9 e
}
, ~7 @# Y; U T( Y: T }else{! r1 V/ s* ?& Z: Z9 a) i
//空位置 不用动
7 y8 r4 I9 ], b3 h# s continue;
, D3 i- Q6 t7 T7 j; D }
) H% O2 o) v |! K2 b+ U" i. B! V/ i' J //////////////////////////////////////////////////////////////////////////
% P E! {6 F9 Q+ k3 M2 N9 I) n& t7 O //开始移动
) G7 t3 ~- [6 P' [8 [6 G- m if (nSrc == nDestPos)
( ]/ K+ g; K" i K& b9 c {
# e0 f& m8 o) \1 ? //原地不动# d1 D2 b: w3 f. X6 p0 z$ T
nDestPos++;$ P# |# b9 i+ T. q- X& x. _3 ]8 g# @4 V2 W
continue;
* P) m1 S, D; \7 x( g5 t3 g }& {- M0 l) Z; s" P+ ?) r' a
pInvSort->MoveItem(i,nDestPos);
) b7 H: i1 w/ R* ], j8 C g_DPlay.SendMoveItem(0,nSrc,nDestPos);
% u1 I4 j" o, w B. I+ G Sleep(5);
& i% V# J2 _3 M" x2 ^ //Error("移动 - %d->%d",nSrc,nDestPos);
* I$ R5 |% m7 o y6 C+ B nDestPos++;
2 ]: N2 v+ u9 |& x }
; k! E1 v: l9 B& R( g4 j' C //取第一个元素的信息
/ F2 W; \& H+ M0 h /*% F; V" N& C* W$ y0 ^7 ~! ?
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
4 z6 h; [" W/ h& n {
; Q% v! M, G3 S9 S8 E Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
: J; x& g6 R/ a" l) X" n% y) u4 f g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
( f; Z2 E- s2 `& ?/ X' z1 \0 n }
! h! \* A. I1 c4 F1 p: c, ]7 T8 s */' E# {% V- L8 \" b, b! t& T
//////////////////////////////////////////////////////////////////////////
4 M+ W4 d+ E4 z+ I" Z* e# D Q/ X break;
) U4 Y* O! L7 W0 ~6 f }8 }4 {: @2 F) L
}
7 T3 E1 h! X( [. l5 Q" X- |& j8 V6 y X}
! C5 e- {+ d8 X$ c( Pm_wndMenu.SetVisible(FALSE);. h, D9 Q* z# q6 G/ l) K p- ]
( c+ p; }% \7 X8 Y--------------------------------------------------------------------------------------------------------
) C+ @. o2 d+ m2 G( H搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)1 f4 E. Q1 g$ o* q9 |
{
D) {9 k' d8 _3 i. XBaseMouseCursor();9 I( x3 Z) i. E+ }$ G
}8 R; V0 z% Z& H3 s2 K1 R
在其下添加:( u$ X, q! L! m2 l8 m
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
. P$ G0 Q# V% R7 z( y @: `{$ K, g6 n' z$ m
m_wndMenu.DeleteAllMenu();
& `3 \) Y, f9 _2 q N( om_wndMenu.CreateMenu(this);
P+ |' n' n9 w. @: v* gm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");' s# D# b6 Z, t' ~) A* R. Y% d
- s% B. [, \1 B7 v7 kif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))) h) k7 T+ j, a8 N
{
0 h! b" I5 G, n* e //P以上级别才可以删除所有道具! y# @: h8 Y6 c) Q2 I
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
* b/ q/ g7 E" W+ x}
# k( E' }5 H, _% zm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
7 k1 H: U+ F& i: h: fm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );: X: h1 `' ?9 \5 p* h' p2 z
m_wndMenu.SetFocus();
. O+ Y) v" B. p" {2 t}
- f9 i) j( D, m------------------------------------------------------------------------------------------------------------' O. e$ L+ d9 e* L+ G) J
*************************0 l, z6 s' L4 _2 ?3 i
WndField.h文件
/ T, c" ^% ~3 l1 s G7 u*************************0 c5 ?8 p' w+ w1 i$ J4 a* g
搜索:BOOL m_bReport;
. v( R/ e/ e- r- Z0 |2 L7 N其后添加:, R! f5 o, A' y9 @! d V. Z0 J
CWndMenu m_wndMenu;
: G) p' K( M( U搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);+ R$ l* [6 X) N: @3 m
其后添加:
, A4 n8 \" M! Z6 Y- @2 b% svirtual void OnRButtonUp(UINT nFlags, CPoint point);9 u. e: B/ _% o- v; ?0 ^
) ]6 @- W7 H- A2 k4 H$ y% z
( B, }1 G- ]% `& ]! {; }. k
|
|