|
|
源文件中_Interface文件夹下WndField.cpp文件
* X! s& [4 t) u j$ ^1 T; N; j4 V搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ J8 E' N- n, S
w# g, c! m! H2 u2 T. M: e
struct sItem
! ^# D; G0 @" ]: I1 h* l; X{ i) p% N) i+ ]: Y) Z% ]+ B9 b
DWORD dwId;
& @2 n$ \ Y2 h, N% @DWORD dwKind2;
$ S! o3 P7 @1 X: @5 p& [DWORD dwItemId;
, b) _ l8 Z# K! D* v$ q, BBYTE nIndex;
' E1 C$ w4 v! z6 _ BsItem(){) G& w' }$ M5 p8 r! t! `. B4 m
dwId = dwKind2 = dwItemId = nIndex = 0;
% c! x, P. J3 |# F}
, X9 p3 Z. P# ]bool operator < (const sItem p2)# l5 Q& K% {! k. g% h0 m0 d
{
: x: B0 h r, ` if (dwKind2 == p2.dwKind2)% ?+ z0 C5 j' M d; r. S9 W8 e
{4 {# L3 ` }: r6 C
return dwItemId < p2.dwItemId;
2 I" t' @( G2 m) g }else{
3 m3 O0 q/ q) ~/ L+ A return dwKind2 < p2.dwKind2;
( b4 j" D6 i4 f3 v6 Z }. l. U9 O; o4 Y
}
' | T$ Q5 i6 V% |( g};# Y; m& s6 y. M7 S3 t8 Q
class CInventorySort2 P$ d5 G2 a# M0 N" V; ^* N
{% b8 ]* J+ N) u. @8 }
public:
" o0 p( M+ A4 V1 P# c/ SCInventorySort(); o& M- V) A( U x( h5 b3 v( _
{
( L1 }" W+ Z- h( U* _6 _ m_dwPos = 0;
: u/ r/ `1 y8 X, M& R# z}
& f+ w# l0 B) e8 [0 b~CInventorySort(){}
$ u) K7 d6 J$ A9 C* m dprivate:5 u! r: h' Q0 D% v# v. T
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息" |2 f6 j0 d6 u! p
DWORD m_dwPos;5 F: y" z, S& R: h9 @. R
public:
8 w* z( E- x* b G- fvoid Add(BYTE nIndex)$ P0 {9 `4 |& e0 ] o+ x. z- |
{
) {. z/ j$ J% i2 }4 f3 o. { if (m_dwPos >= MAX_INVENTORY)
9 F7 E; c* v* }3 ^3 {! [7 Y7 g7 l {
; v! D! g [+ ]$ z! k$ ~5 j return;
/ q$ i$ N" V# \6 l" q' o }
) U% {/ Q5 w" t# C" ]' w9 v( P; t m_Item[m_dwPos].nIndex = nIndex;
/ _' J" V1 [+ F0 r6 c m_Item[m_dwPos].dwId = m_dwPos;
- F6 k+ _" v5 I8 O3 {) W) S! { m_dwPos++;, Y% g# X. g( A* h# g
}, R& j8 I3 j" d1 O/ I+ p4 q7 }
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列# B3 z$ x" Q# `% e; H
{
. X: f$ @8 b% {2 ~1 Y2 {1 s for (int i=0;i<MAX_INVENTORY;i++): Y. F; M# M" |/ g
{) T+ N/ a+ X* [% F$ v, {
if (m_Item.dwId == dwId)# ~( v8 e6 {. D) x7 q7 n7 `3 v B
{) G' l" k) V) {& |, h
return m_Item.nIndex;; E3 l* p/ B3 }3 ?2 O: Z) `
}9 d0 q3 ?" o' t# X' G
}
: ?2 D% n' @/ ]5 \! A; X4 @ return 255;' `% Q( k' ?3 c* Z
}
2 C0 H' I" K9 W5 L' fvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
9 X; r) o* d! v. k$ P9 Y$ o( v, @{
# U O$ Y4 g1 X, u BYTE nTmp = 0;0 \1 b9 a' k T* [, }
bool bDest = false,bSrc = false;$ {( a7 ~. X$ [4 e% I2 V% V. |
for (int i=0;i<MAX_INVENTORY;i++)
6 f. z3 |9 v$ z {; E3 L e: j$ C. d
if (dwSrcId == m_Item.dwId)
0 G9 s, j1 J+ o0 ]! _ {$ u* _" E" X6 w* g" u, C
//id相等 则 改变对应的dest和src
5 \: S8 c+ k9 L- B2 E nTmp = m_Item.nIndex;
. _7 D( Q$ `) t m_Item.nIndex = dest;% @5 p, |/ b, M, L" H
}! ?) i. s+ T6 H" j
}
0 ~6 @1 Q0 p8 _+ D+ E //临时数据保存完毕,交换开始8 @. O% `! ~: D5 O
for (int i=0;i<MAX_INVENTORY;i++). |: G, _2 M$ q$ X9 h
{5 d; c- s+ S/ p9 |2 J }
if (dest == m_Item.nIndex)* p; P% V* ^' {+ ]' ^
{
% y& C3 r5 v. R //id相等 则 改变对应的dest和src
5 i+ Q: Q* I6 b8 ? m_Item.nIndex = nTmp;
0 F. g$ e$ w9 d }% h. c3 C7 h; G
}
8 Y5 W& M) H, N4 K' P. m% Z}- L0 r* Y" O& \9 a$ G& ~
};% e: r' c6 H0 V C
-------------------------------------------------------------------------5 m2 l( A% T* R/ i& j: Z
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )5 r$ A' C1 Y/ v
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);1 j+ B/ u8 P4 E1 P1 u0 q+ e
紧靠其上添加:" M! [! d( c* K3 M/ n9 A
if( pWndBase == &m_wndMenu )3 O4 V4 U/ `4 H$ N
{* A$ I6 y, q# `) t4 m. b
switch( nID )0 X: r: k9 J0 p9 Y* N
{( ^2 I3 r) B1 a9 n3 I
case 2:$ i2 M8 W! f4 t! G' [& Q
{
# `2 D* I) h/ _$ L* p6 K, i //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
3 L9 b6 D7 q3 T7 N6 l& t3 ]6 s: | if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
$ x6 D: O# ]' j {
4 V1 [8 l5 C, O* Y) B/ Y$ H break;
4 A' \9 e/ K1 x+ U; l }( s( y! T; H" e ^# X& ?2 ^
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
" T3 S6 i! ], X( E4 L" d {& A& D4 Z6 ^6 u! {5 p6 f s
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 ~ }0 L/ E8 v% `/ E) V" V if( !pItemElem )8 R% X! B! ]# ^- m# R
continue;
9 {( [- l& Z8 P+ C( m if(pItemElem->GetExtra() > 0)
: L5 c& L( c! Z7 k0 }, F continue;" ^ v% B9 ~& n0 \. F4 H
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
1 F- H2 d' c' p continue;
$ r. x0 B( C) n$ b if( g_pPlayer->IsUsing( pItemElem ) )
! ~# w% ~7 ~3 h6 |( G$ v/ z7 }1 g" n continue;3 B+ Y! [# [& O8 S0 u; N
if( pItemElem->IsUndestructable() == TRUE )
# S4 @- R5 h( Z# ^8 N {
9 }9 E9 k5 I1 n6 m+ [ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
; z; _ k) ]4 X. p Y8 d+ C continue;
7 ^. `0 a5 B4 P% a5 Z }
5 L# l ?$ }$ p4 \. S g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);+ |4 k- c2 N& D( z' ~
}2 d* e$ J4 n- f. C
break;6 I4 U3 C! L+ ?3 u; F& _8 r
}& W# _ t( _- P; t$ K r
case 1:8 g1 Y, {- F5 _0 w3 x
{
9 G3 [2 Z& ]1 D/ h3 d x" v //整理背包- @3 e) `" _) q& {. |& M
//////////////////////////////////////////////////////////////////////////+ ]5 Q/ {, w# ` @$ ?% ]
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
! a% {/ \% ?( j$ o1 @- o //////////////////////////////////////////////////////////////////////////
, y6 r1 m( k$ w* _9 m/ H- i //////////////////////////////////////////////////////////////////////////) T/ M, j. L; [! e4 q
CInventorySort* pInvSort = new CInventorySort;
( E M) I6 {7 j1 s: o vector <sItem> vItem;: t( }9 @: M+ K& p- m
vItem.resize(MAX_INVENTORY);//初始化大小
. M% B" v- F- v" X: b //////////////////////////////////////////////////////////////////////////" u; w( m5 X" Z8 K
//填充数据
9 m: q4 T) y% F9 _# }2 s2 B" B- q for (int i=0;i<MAX_INVENTORY;i++)4 @* e+ ]/ h3 A0 K. {
{! V# |* b' x; D ?3 \) E
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% ~1 z* J% p& E; X! C1 t: G if (!pItemElem)3 H4 S) |; ]! G. }& M8 V; @
{2 w) P1 ~2 X, ?( r! r
vItem.dwKind2 = 0xffffffff;
9 @. m& V: z5 F- Z6 K6 ^ vItem.dwItemId = 0xffffffff;
+ {% M( W3 ~/ R% G/ J% ^ vItem.nIndex = i;
" A( T+ R4 q w' _ }else {$ Q) j) R& S0 e* }
ItemProp* pProp = pItemElem->GetProp();
2 I% U2 t4 }3 R, O. G$ x vItem.dwKind2 = pProp->dwItemKind2;
% S3 b+ k, I, Q' E4 J$ w vItem.dwItemId = pItemElem->m_dwItemId;6 e# q9 f5 x/ ^: s0 u, T F- v- ?3 m
vItem.nIndex = i;
! F2 t+ Q* s, e/ ^. j- |; y }# q2 ]6 F7 k3 A+ A3 C
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 T# w- s) e: s9 ~+ f& [. X6 c/ Z6 n8 ~
}7 B' V8 y% z# v6 `8 u0 E9 Y
//////////////////////////////////////////////////////////////////////////8 B4 d; q( K6 m" ~4 u5 g$ {
sort(vItem.begin(),vItem.end());//排序. M F; P: C- D4 V
//////////////////////////////////////////////////////////////////////////: Z+ Q' Q F% ` }. r
//交换6 A; G; ~4 ?1 \3 D1 P" S5 P
for (size_t i=0;i<vItem.size();i++)! X. o: h6 `* e* Y0 C7 R1 v$ m/ O
{
; C# h, m& s* a* P& W# u4 v //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# z" q; o. e* Q) B+ ]! v3 _# q) ^ pInvSort->Add(vItem.nIndex);1 n" j8 W7 |: P
}) s5 l3 K* h$ i
BYTE nDestPos = 0;4 s3 `/ {, G+ l) Q% m
for (int i=0;i<MAX_INVENTORY;i++)
- i$ Q) _2 N! R8 c1 O9 \+ n {5 C! S4 N$ \, _! _7 M
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
7 h) n+ {) i! W) M2 C0 V if (pItemElem)/ ~6 t/ n3 Z0 o
{9 P: V# \ R2 h M2 M+ B
if (IsUsingItem(pItemElem))
! L) n% p" ?7 S m {- F& A6 z) y% X1 \& v! H! e
//这个位置无法放2 d+ m8 N7 L3 v0 [; D
nDestPos++;
1 i" g' `9 r$ K }8 _3 E, C3 z# i3 u6 M0 d2 T& v
}
1 Y& H: {1 J) y/ \! e BYTE nSrc = pInvSort->GetItemSrc(i);
. q0 B, ^$ g+ \: p pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
@6 a: f3 Y, N; n3 j/ i1 g" m4 K if (pItemElem)
! ~3 _5 I3 H; h5 s9 o! h+ ~ {
" U4 l; R$ H% X1 ^* i' [+ J5 ~' L if (IsUsingItem(pItemElem))
+ J/ |/ K x; z {
- D$ }6 R9 ]3 |$ n. t y //这个道具无法移动,跳过2 S& g( M9 p1 b/ @1 @) K- n- [
continue;4 H7 D; }4 r& p; [: W
}
7 O/ s4 r4 a: Q$ R% t }else{ L* g) x! e* z/ k
//空位置 不用动" ]" Q) q7 x4 |- z9 [% Y# F
continue;
" T& ^. ^, R v. c2 y6 c' D } y( P$ a2 ]/ N3 n$ b
//////////////////////////////////////////////////////////////////////////1 ^$ P V% |6 U5 i) f& c, r* j9 i
//开始移动" `. @2 T- b' r0 c: K0 W7 ]
if (nSrc == nDestPos)9 x0 Y. p5 a; l! p
{5 a4 ^' O0 K e$ ]; u* Y
//原地不动
( c2 X5 S; _) `8 G4 r9 Q nDestPos++;. W& y) ]+ ~$ N
continue;4 N& O x4 ?5 u+ }2 w
} x D! s9 G+ J9 @& n. Y2 k2 S+ W
pInvSort->MoveItem(i,nDestPos);
# C* Y9 b. l" ~8 [" ]& T; V g_DPlay.SendMoveItem(0,nSrc,nDestPos);
$ r |2 h$ G& a: S Sleep(5);
* x0 O @& ]! ] y //Error("移动 - %d->%d",nSrc,nDestPos);
( w" f% Q& E- k3 w3 | nDestPos++;
5 J- }* P( b7 Z, s }2 h, N( {4 k# p$ K+ ?2 `
//取第一个元素的信息' c/ |" ?. x. g$ e2 F; C: X9 U# D
/*: h, ?, T; R/ c: G6 _
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)- m* B& P: S& n
{5 i& Q, x# F$ N1 f8 i8 a1 F
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
K2 a; G/ G. K+ N( \3 q1 P g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
) q- b" C7 n8 G' }! I9 V \ }
% @+ M* W+ j7 z. }0 F */9 f9 S# U( n' C, u6 d
//////////////////////////////////////////////////////////////////////////) \, n3 F/ A" A* u% x3 c
break;
6 I* F% C3 t' A* B3 O! a% H a$ y }: Y) e, n! W) L: o/ [8 h( H- U
}
2 L0 ]; g) O# i ?/ G) j}
3 d+ F1 |9 b- m7 J+ `m_wndMenu.SetVisible(FALSE);! n( P' }# |/ @9 k; M( @) r) s
3 J( U& ]2 @' g" |( A-------------------------------------------------------------------------------------------------------- g$ i2 {& m: N; p
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
% j1 I; r7 U/ ?0 a2 z{
8 O0 r7 G1 p& _' Y9 h6 s8 JBaseMouseCursor();
! M5 R& E, e7 c9 S; B. f: s} {( ~* G6 T1 ~0 L0 \
在其下添加:
) H) i0 o0 h5 z/ P" U, ^1 Nvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)' n4 x- d4 n! w% M1 ~4 {
{
( M+ R; x5 R4 |( c" fm_wndMenu.DeleteAllMenu();
2 K8 ~$ W, J6 q+ u# C# q: ?m_wndMenu.CreateMenu(this);
& s% [3 Q, q# N# ?4 W! ~8 im_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");! c( n6 r; k. U: V! t1 ?1 x" R- _
- y0 z9 L/ T" N! w% Hif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); p" x+ h0 e6 a7 S( Y' U: t: ~% [
{
% z+ }+ q6 u' X3 z3 y //P以上级别才可以删除所有道具8 X$ ^! W/ T' b" ~! j5 n( X
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
% D( j/ T9 l- l) ]7 R8 H}8 E. D! M/ c) x
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point ); N1 I) j) l' U% F' @
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );7 [2 T# V4 i) A t
m_wndMenu.SetFocus();
( f$ f1 H/ G6 D! P) u D: h}6 p8 l2 L- `) \+ C7 h3 t% x8 z3 B% r
------------------------------------------------------------------------------------------------------------2 D( W; g0 |, \3 u
*************************: k( f( X/ _" n& h4 G+ |
WndField.h文件( Y6 Z) }7 Y9 x4 [
*************************' N* ^5 k0 Q3 U! c
搜索:BOOL m_bReport;
& W# e3 k) B( j& {其后添加:: y2 O- y/ G1 N) a/ C0 E
CWndMenu m_wndMenu;
6 x# P" i" N+ U7 E; y搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);9 D; m5 ~# Y+ _9 A
其后添加:
& C" O% }3 t& Y3 Pvirtual void OnRButtonUp(UINT nFlags, CPoint point);- j! _3 b& R% K+ q
0 W* _- D7 V/ `0 f6 e5 k V
' H% s2 N/ h9 ~* `) u, d |
|