|
|
源文件中_Interface文件夹下WndField.cpp文件- Q. Z3 F( }$ Q2 Q
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 R3 {% d9 \3 A$ M5 p5 o' n& D/ Y" s% O% r# ?1 _0 s$ J& |
struct sItem
$ k/ H7 }$ P6 e2 F* T; A4 \1 c{
. U4 V1 n" A" E1 S4 sDWORD dwId;2 m' X7 ~& f7 Z. P8 I8 r' H) A6 Z
DWORD dwKind2;
7 u2 A6 e$ _- ?/ ?6 |DWORD dwItemId;( N5 P: |& T% ~. n# H
BYTE nIndex;
4 {4 u3 y9 v7 y8 ^9 h: VsItem(){
3 K2 ]& F0 m; K8 W C8 y: s dwId = dwKind2 = dwItemId = nIndex = 0;
+ C/ w' i: l. r+ z- B}
9 z9 ?% V7 T/ o! x# mbool operator < (const sItem p2); O: ^$ W9 g8 `4 f+ N J
{
5 ]8 H6 N8 |8 z if (dwKind2 == p2.dwKind2)% w+ ^7 ^6 K; }
{
4 j0 H" q/ o* O4 ?/ ^) U return dwItemId < p2.dwItemId;
1 E! j5 ?: `$ B: k" {0 E }else{+ I9 H& S2 C& l/ e: @6 W* P. ^
return dwKind2 < p2.dwKind2;8 y3 w+ E; t( w3 u; Y* }1 u8 N
}
/ i4 C3 P9 W/ e! {$ u. I}# Y4 h+ s# i2 M4 q* b+ v/ M J1 V
};2 G! j+ e! P4 W
class CInventorySort1 A1 y, S3 ]" u) b) ], k7 [
{
7 V7 |+ G* B$ z$ j+ N+ xpublic:! X% v: Q! _8 K9 P8 Y, J
CInventorySort()- l8 W- t: R$ L# i- l; D8 e8 _( A
{
3 f: B* a3 l5 a4 J* y m_dwPos = 0;
% p; Q$ L+ F9 s+ W}) Z: ~! ^9 R/ p$ c4 W8 A; N: P
~CInventorySort(){}5 g' L, J5 a1 A' T! J' @! I
private:# k: O9 u' `8 n D2 Z0 O8 l: G
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息. S2 k% c4 O. C
DWORD m_dwPos;8 I( u2 A$ ]* ~7 N
public:; _: N3 f' O% A; B/ N. y
void Add(BYTE nIndex)
1 Y- t+ p, C% N0 ?( s3 u{, u; R$ [( @: K; Y) @3 ^
if (m_dwPos >= MAX_INVENTORY)( ^- L. Z& r# h S1 x
{
3 Z4 A, K6 }7 l9 C3 Y0 H return;8 L# o: `) W4 |
}
5 Y* ]" I4 [% F& P% E& E& e m_Item[m_dwPos].nIndex = nIndex;
1 D3 D, j4 V5 w; x# Z' c m_Item[m_dwPos].dwId = m_dwPos;$ B4 x7 D# X: B; Y+ g
m_dwPos++;$ p1 P6 ^# f0 X2 i( a3 K; n! V
}
% P2 e6 X. Z# W1 T ~1 sBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
# q& k, K8 f4 A2 K4 M{% A4 G5 ], [: B7 e3 V/ b
for (int i=0;i<MAX_INVENTORY;i++)
% h7 p- D: `/ s9 D* |% _ N {
/ J0 _* v! E$ s$ m. a if (m_Item.dwId == dwId)
" @0 ^, z9 z; l0 v- H {8 o" E6 K+ \& w( U- G1 e+ o
return m_Item.nIndex;
* Q0 D( O$ j# P; ]- t! i% G }
5 Z) n, N7 T$ |$ k9 f }( G' I& r& G* N' J, q, b: _4 |
return 255;
: u4 J' C, L. h/ R}
4 A4 [. @' s; O/ e8 _void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
8 s* R# {7 P d6 Q X{
+ n# c3 i; T! @0 ~ v7 \3 b BYTE nTmp = 0;9 o: K I8 B' X$ d
bool bDest = false,bSrc = false;
, _8 M( v! l p* k for (int i=0;i<MAX_INVENTORY;i++)3 o _7 S: S9 w
{* z; {0 _+ h2 A
if (dwSrcId == m_Item.dwId)7 M7 t: [" B2 V! q4 v4 `
{
" I8 _( K3 g4 s, G) p //id相等 则 改变对应的dest和src
9 `1 b7 \% N' m% T nTmp = m_Item.nIndex;
5 y. ?+ u" D; T1 Z2 }' B' B m_Item.nIndex = dest;; _; x F9 G0 b. k' @' m8 t
}
" k* R; P) ^, C0 @% q. F }, ]1 _! s8 Z3 m8 ?5 _; D& s' q/ a
//临时数据保存完毕,交换开始
& U0 y9 G' j9 d/ l for (int i=0;i<MAX_INVENTORY;i++)2 |& Y" b/ t/ }: y
{
( k/ x' N' T0 ~ if (dest == m_Item.nIndex)
6 X" ~" K( K) r; F1 Z0 x" a+ ? {; u4 p9 y% g& G9 s- ]9 W
//id相等 则 改变对应的dest和src
2 h: Y$ |" m) E4 y( y: h* m m_Item.nIndex = nTmp;* N+ U8 G5 e( C* B" p
}
: h( [# F, R4 i. X# r6 C" L }( N% X/ j( `; Q" g- }/ v3 K j
}
* L+ _! H' y0 P% E& O) @, u( l};
- @1 {9 W4 n" h4 K& _, F" c/ C' B-------------------------------------------------------------------------" @+ y' b- _8 s+ T. D
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% o7 a0 y2 S9 Q _, x$ z搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
% ?9 L/ a6 l: i/ L0 u紧靠其上添加:
1 J, ~3 [5 e6 cif( pWndBase == &m_wndMenu )8 }; o! {- Q0 D# b" n; c: r9 q) O; P
{
. q5 [, R8 V& ]( {: w switch( nID )& \( d& X8 F* q- M( A% ?0 x8 g
{
6 U, |5 l8 u6 d7 d case 2:
& ^9 P+ f- U1 s& |+ W& e {2 b# ^ G! h, F% v) o" B7 E0 s+ I3 }
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
( ]/ O% |- h% c" V( M1 U4 b: f if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 Z& l4 R, U3 T+ r9 d2 l4 g {
3 x; o9 u# ^6 v! c9 L4 u break;- i* @0 t+ S4 [
}. j( J7 D) Q# W7 E0 V
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
: ~ \. n* }- k, j0 q {
, x) d# e* D. \$ h: s, p CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- T+ Z& h" n' }! j if( !pItemElem )# _7 R( A) _4 L
continue;
( i: l k! Z) U9 y8 q M; p/ E if(pItemElem->GetExtra() > 0)
' g7 ~9 B3 a. B5 S3 h2 T* k- K9 V continue;
( q" K. U2 Q% T8 K% P- c$ j. K- \7 f if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) & U8 i* W. o! J" L, J
continue;7 H, O2 q7 d/ f) Q6 P- D
if( g_pPlayer->IsUsing( pItemElem ) )5 N/ d& \5 U9 {8 G" M
continue;8 a4 q( [$ `3 {+ O! M! p
if( pItemElem->IsUndestructable() == TRUE ) H& L! X- _# \0 V* { w3 v# o! k
{' m' P2 [( q3 Z$ \
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );) d% o4 t+ Q1 L1 C+ V
continue;
1 Q" v! p, }$ r5 Q# F }2 Z, ]& S" ~0 _% G# f" i
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
* V# { A/ H- f. J0 \, R; J, u }# B# t( f( v3 w# |) S: M" Y
break;
4 ?4 m4 `4 O& s3 A }
4 _4 [. ^7 d0 D3 a$ G case 1:; b. i. u6 K& Q. s; z
{
/ |# ~7 I6 v# x5 b //整理背包
/ P+ M) D% f% y //////////////////////////////////////////////////////////////////////////9 n; C7 w( z+ v
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
9 v) t% n+ E( k* d1 i2 R- j7 Y //////////////////////////////////////////////////////////////////////////
& }! B% y9 F" G* X( b7 ? //////////////////////////////////////////////////////////////////////////" E/ ?0 A& P6 N) D! z
CInventorySort* pInvSort = new CInventorySort;2 }% O( T3 B. L6 N
vector <sItem> vItem;
% K' A) A& }+ n7 M( g4 M# N: Y vItem.resize(MAX_INVENTORY);//初始化大小
9 ~5 O- ^+ ?' T) O. ` //////////////////////////////////////////////////////////////////////////
: P( j9 n; r; I8 j; Z //填充数据
2 I# u$ |, s% R4 ]6 N0 R for (int i=0;i<MAX_INVENTORY;i++). p7 { m L# X/ O% k! h
{
- f! D g7 x9 b( R5 V CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 p# R% f4 Z, Q! z% k# @3 e
if (!pItemElem)
7 M& m) T5 O1 g' q3 [# S* L/ ~( | {: g& \$ X; y- i/ x: ^
vItem.dwKind2 = 0xffffffff;
0 t+ H( b9 V$ h* @/ g vItem.dwItemId = 0xffffffff;
% W6 p6 K* k4 R" h vItem.nIndex = i;
* p6 a! u; N8 }% Z9 ~6 w }else {# u3 D6 n4 B" W5 c
ItemProp* pProp = pItemElem->GetProp();- w; Y' s# g f# m
vItem.dwKind2 = pProp->dwItemKind2;
6 p ?4 k' g: W0 D: k vItem.dwItemId = pItemElem->m_dwItemId;; [1 Y6 ]* s# l4 |: ?4 h
vItem.nIndex = i;& Y0 H; f4 w d
}
5 l: F& c2 [+ b2 t( W //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' O: C) G2 f7 z7 v! H5 _
}
+ C0 _) o2 L: W" e //////////////////////////////////////////////////////////////////////////9 k: o3 P$ M U( Z* N
sort(vItem.begin(),vItem.end());//排序
, `' P9 L! V' L- o2 \& u //////////////////////////////////////////////////////////////////////////
' u. i8 G, B* r' _2 M; `0 V; h( I //交换
; \; i/ `5 P# |- z, v4 m8 { for (size_t i=0;i<vItem.size();i++)
) i8 E* v0 T* R- w8 y: S {7 T$ v. x3 y0 D, n# E" \
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( d+ a$ P F/ q5 \7 [) g- v1 a
pInvSort->Add(vItem.nIndex);
& r8 M; z i, `$ } }
, w6 g( Y0 I) Z; h, l3 J BYTE nDestPos = 0;3 G- x {+ A2 P. O; j5 n8 b
for (int i=0;i<MAX_INVENTORY;i++)
6 \* _5 D6 Y* t8 u1 H {
4 h+ m t- n7 U4 |5 K) q3 N CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
/ y- i7 c& I+ T# s% X3 x if (pItemElem)/ s' b0 l$ n% p* J3 |3 D
{. q: A5 G% e( ?) G; w {( Y
if (IsUsingItem(pItemElem))% U h; @7 i- S& o
{
, P6 Y0 f+ k0 E' k% ?" p2 ^5 G( x7 {7 n9 Q //这个位置无法放( t$ i6 ?1 i. F$ Q1 y" W8 |
nDestPos++;
3 g5 F7 h, a* W2 t' F& l }
9 H9 `" `- m L: ?% |# A6 o }
# }" y. I* t* X BYTE nSrc = pInvSort->GetItemSrc(i);7 `; \! y8 a- J* b* p2 X% o
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);6 O# J% }' l+ x
if (pItemElem)3 d6 v" N. }1 m* o
{
8 t5 L* G+ \9 C: Q if (IsUsingItem(pItemElem))! o8 H# c3 c. Q, v) M
{' M& Y+ s' E8 M& a
//这个道具无法移动,跳过
$ `8 t7 Y8 f N4 @& q$ d5 U. F continue;
, w7 M* N! `2 W8 N2 k( y8 D* f }
. @7 P# w+ J. p- c; f& D# `- S }else{
$ t# ]% m, S9 C/ V2 W, K //空位置 不用动
5 f* G* `% |* z- L9 D! s9 Q continue;. u8 ]2 L V6 Z
}
0 M) S( ^. y& v1 B //////////////////////////////////////////////////////////////////////////
/ |' q6 Y3 C4 k4 t! x1 N- T //开始移动2 U0 J9 @# u2 V
if (nSrc == nDestPos)* a3 Q1 c, ]" X% G6 G
{
# S2 z9 c! n+ F" ?5 V4 P/ D //原地不动$ s6 `5 c* t( P9 Q4 V( p/ T' w9 A
nDestPos++;% P9 L9 ^% N: i0 a( }8 X( |
continue;
- D- T" b( d3 E/ N, b1 v9 b" W }
& l& @6 Y! u# ^. f& N: k b pInvSort->MoveItem(i,nDestPos);
7 T( q/ {4 `2 M" m+ g' u$ E7 \ g_DPlay.SendMoveItem(0,nSrc,nDestPos);) `1 A( q; g6 {2 |' k* j) U7 D) D
Sleep(5);
; t) ^0 Z8 }! s, {7 k+ u //Error("移动 - %d->%d",nSrc,nDestPos);
) c1 z3 o. c. _9 M( k$ ` nDestPos++;. \/ `$ U6 w1 u7 y6 p t2 b* R- X
}% z: @3 `& }: q, k* M4 G! {
//取第一个元素的信息' g7 W6 A! B$ M. J8 f. v) Y$ s0 v
/*
2 V5 T; d$ w. R5 X if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
" [. E$ j' m% R5 x/ o d- V8 T {
) U/ @# J' ~0 s6 q8 i5 |& { Error("Move - From:%d,To:%d",vItem[0].nIndex,x);; F) |3 F/ U& q k1 n$ ^6 L
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);0 ]3 i( z) C# F
}' ?3 y4 q: O! d
*/( J" i6 a+ u8 T) }
//////////////////////////////////////////////////////////////////////////9 E8 h( s' E3 ]7 t0 }1 @
break;
- W5 N( Y7 D' ^! z! ~ }
) l8 x+ f9 Z- e* g- H. a/ X7 E) q }
; h( T. Q m" w+ N; Q$ C/ y}
. ]; S; m) \& Pm_wndMenu.SetVisible(FALSE);, F4 v7 _: n- Z* J: a A& j
* V$ M6 X( E) ~5 C--------------------------------------------------------------------------------------------------------
9 e( |) C# s0 G$ U& t搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
8 a V3 l8 ?# o6 @ b$ `# }{
( q! `# z. Q% G4 f. ABaseMouseCursor();: @9 r, z# M5 g2 L
}; X1 r6 L4 m8 a6 g- @- R' u
在其下添加:$ V1 ~. E& `' T
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)3 u& B* b8 x8 L8 }
{6 m+ v |0 b: y( A& `! ?
m_wndMenu.DeleteAllMenu();0 R* _( D! P# k: D
m_wndMenu.CreateMenu(this);
$ n. ?/ o) J. [+ sm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");- H: b2 p1 t& p4 c; x$ B
0 Y0 `- z1 |3 z! L: O
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 |$ |% y7 s+ t! |$ L5 i{0 Y; X9 F3 n0 t8 a# C- L9 a
//P以上级别才可以删除所有道具
6 D' P! K0 k8 C: k; Y4 P$ U m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");5 l l7 i6 o+ `% p: Y- f: l
}
: v5 H( D Y1 s& j/ }7 Sm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );% r: V8 }( \1 G! @
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );/ }$ d: }5 z8 }; @
m_wndMenu.SetFocus();
. r. @+ a) A9 O/ L4 v/ m# n2 x}. C+ V+ C$ D, @# T, s
------------------------------------------------------------------------------------------------------------
/ Q {" M6 {3 ^9 t4 p: i' e2 G*************************, O2 @0 M1 B/ {$ Y F* t& E- S
WndField.h文件
3 }( t+ [$ r" d7 u) \4 v& L*************************! p3 I( } I3 `/ Q# }+ C
搜索:BOOL m_bReport; H$ q2 K- M* i2 _# [' L
其后添加:
2 {$ p3 f1 x+ r* ^CWndMenu m_wndMenu;5 l( K; H: |# V/ ]0 Q7 `
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);0 c& N, ?' e& {& _; V+ c1 q, @
其后添加:
6 g$ q+ i0 J# hvirtual void OnRButtonUp(UINT nFlags, CPoint point);
* [' ^; S1 H" |% k/ J- t- H& ^2 p `: ]
- w% C1 Q$ J& m- {0 m3 a; ] |
|