|
|
源文件中_Interface文件夹下WndField.cpp文件
) I" R9 V& {+ f# g% Y$ L/ _2 A* _搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): O# Y: u6 Q" H6 `" u
/ d8 J, ]' o/ X6 _struct sItem, d0 X- Q! Y1 s
{
4 F5 e* o& x7 j# zDWORD dwId;/ a$ u2 P) @! U/ A# G5 R. Q' P
DWORD dwKind2;- u1 D, f4 o# K" B9 n& n4 j% j g
DWORD dwItemId;1 y x j" m4 [7 o! ^7 C7 o" }
BYTE nIndex;
! f% h& z3 I8 M8 Q1 N! T' KsItem(){
/ J! X# ?. V1 J4 v% ?2 E1 ~ dwId = dwKind2 = dwItemId = nIndex = 0;# C% R3 a' E: M1 c
}! P. u/ j0 J9 | h4 A6 r
bool operator < (const sItem p2)" @$ z: e/ b! ~ T5 V5 h6 R
{) o! e/ R0 @: ~! Y6 X) U
if (dwKind2 == p2.dwKind2)
+ g( W$ h1 s0 O% U" h {" u) h" o; |; `( A
return dwItemId < p2.dwItemId;
2 ~/ u! {, e' d* R5 ~, K }else{
* v1 I( s+ d C return dwKind2 < p2.dwKind2;
" i, r6 t7 K9 u8 f }
% C/ y, O% K0 G0 D8 C/ R}
: q1 n& a8 H3 m1 g3 `: Y& Y( Q};8 m$ @4 G( s" o0 y+ a2 V
class CInventorySort
) ?; w$ C# x' [. p M2 d( H$ F{7 R. }! z% B/ _6 I
public:- r1 ~; c9 T/ u) r- _- i% e
CInventorySort()
7 O$ w9 s4 \ U{6 D' Y1 h! i& r; F8 T7 n
m_dwPos = 0;
3 @5 F3 ~ ^) a$ o% F}
. w, I1 @+ H" Y1 E+ q~CInventorySort(){}% a1 V. E/ D2 C( w! X1 v) p5 p/ ?
private:
; r% B2 A* Z \* T; Z4 m8 isItem m_Item[MAX_INVENTORY];//存放排序好的道具信息 g+ N( H+ T% v+ ]+ a" P6 K& C5 ~% I
DWORD m_dwPos;
/ T1 y/ [( o' w4 dpublic:9 v* w/ j4 O* }2 I5 Y V! F
void Add(BYTE nIndex)
7 U/ p9 u/ f$ J{
! b e) C# K* b" C if (m_dwPos >= MAX_INVENTORY)
$ q" t9 S' z& L. I$ C {1 ]! E' Y; z" h y' ^7 s, ~
return;
4 R7 F: G+ G- _ } o7 I/ `! Z7 T% Q
m_Item[m_dwPos].nIndex = nIndex;
4 |7 g" x( G: R/ B' T( d m_Item[m_dwPos].dwId = m_dwPos;
% w! g, O; M' ] m_dwPos++;
* k1 S, X0 ^4 r$ a) ^. x+ @}; O/ m n- |5 [+ u+ J
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列 r: T3 h Z- j9 A2 ?! A$ y$ }
{$ t2 _4 O) u" c+ d! [& k: U
for (int i=0;i<MAX_INVENTORY;i++)
# m7 k7 t% G7 o" u; H {
4 ^8 H N( y6 ]# e$ s4 [! G4 j5 \ if (m_Item.dwId == dwId)
5 `% }) ]+ o; ^$ \ {. p) G& U/ X3 y: F' L1 u
return m_Item.nIndex;! O# R/ u- Y* | Q5 {1 C5 T
}
. M! _: k0 ?7 B8 G+ ] }
4 h/ ]; r8 E( ^4 R return 255;2 x v& ~: m1 u, [8 b0 X- F
}
/ B3 C2 X; k4 ~3 Q) m) avoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
) W& ?6 |) l. V8 z4 i* [{
/ h" K7 h: U/ w3 @/ W/ w7 R9 O6 a BYTE nTmp = 0;
8 u M* a: l) w' f n1 f bool bDest = false,bSrc = false;3 M; H8 [$ f3 ^7 |$ e0 u: R
for (int i=0;i<MAX_INVENTORY;i++)
. U1 \5 W, k) u; H, { {
% K$ X4 h k6 D if (dwSrcId == m_Item.dwId)5 i, }" V! ?9 ]& s+ t
{1 A4 _$ R6 z/ L' k* m* V T9 g$ C
//id相等 则 改变对应的dest和src5 r. p2 R7 }! \: o( H, j& }
nTmp = m_Item.nIndex;
7 {" T3 I; s; b! ]/ L, p m_Item.nIndex = dest;
! B, F& X$ [$ O# F0 J! m2 U }
! [& n, F+ R! g/ F8 F o, ?( n9 S+ o }# [* c% q3 w4 ]4 H6 E
//临时数据保存完毕,交换开始; _5 t6 u' d, ]" u3 O5 F8 A$ m
for (int i=0;i<MAX_INVENTORY;i++)+ z! n8 j: j2 T" W' c2 a2 I
{- N6 p5 |! ?1 v3 @/ t
if (dest == m_Item.nIndex): {) v' J; Q( @ I0 i
{8 ?/ B% J; e- U
//id相等 则 改变对应的dest和src
5 G% T0 j/ |7 N1 ^: D; {6 g m_Item.nIndex = nTmp;% A0 X: u; n# }, f
} H8 c* Z( i: q: f- Z9 S2 N. g
}
" w; I8 Z, f" e; a( Q: U& M}3 L" R7 D9 E$ s& O' {
};+ N) E" H* C' K# A/ H" h
-------------------------------------------------------------------------
. }: g }; I, a6 W1 H5 d/ U依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
8 K; v) z, U+ w; ]7 V6 T搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
6 m8 j- d2 Z {& l紧靠其上添加:
+ ~& \: t" c" F iif( pWndBase == &m_wndMenu )* T( S* _% V) e
{
# F' o6 G$ [) R! w b switch( nID )! V( c) e5 j# }4 }" c$ J2 I
{2 t$ ~7 Q3 w7 u" j+ z4 S4 K
case 2:
$ i" u2 h _+ z) g {$ Y" ^. I- r+ O2 P2 N2 M2 V/ p7 G
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
% o+ W& X2 U+ G' s) ?' \/ r if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ ]& x- A7 L: R [* i0 |
{; ?9 w) i& x! u* Z! {, @" f& F7 J' O
break;
0 [: ^/ A1 p/ U }
+ S7 ^6 R0 _ D/ ^: U for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
; D' ^( Q# n* {" l& P% I7 v0 \5 v& d( c {% W9 p: O) r. F$ S6 E4 `
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! M1 I) J9 I* l- f1 v) |7 p" X if( !pItemElem )5 p; N+ o7 D; n5 W. Y$ o$ o
continue;( p- j, w! b" T4 g) q) p8 T# Y0 K
if(pItemElem->GetExtra() > 0)
: N: r! v8 Y! |4 Q/ ? continue;8 K# F3 f4 Z! d+ C* h
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
3 l) f$ Z( c+ z8 N continue;3 @- {4 `+ o- }; L* V
if( g_pPlayer->IsUsing( pItemElem ) )
3 `. [- L# j3 r8 U% b1 C! j continue;) r$ p( A4 r* g: i. W9 i! z; E
if( pItemElem->IsUndestructable() == TRUE )
0 y5 O. X2 p) I: d9 n! ? {
: F) p4 C& V8 w1 Q" U7 d" ? g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
( g* F" Q( V/ p M/ D3 k' B# R continue;5 _; }( q g/ u+ d9 `
}
]& `1 ^3 S% i2 r4 I g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
/ u( q# _1 X0 H- u4 k }( q" j7 {) r/ w0 P3 U" D& o
break;
6 b1 }" V, C, v }6 u6 s$ e' v$ l2 M% j5 t+ b
case 1:' G1 x* F: v$ f8 _
{' k9 ]0 b. q7 U2 ?. s1 J3 z
//整理背包9 R5 F: X- {5 h/ `
////////////////////////////////////////////////////////////////////////// N: T" Z* ~ l: T, W
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
- W. K3 X5 F8 y& C! U+ o //////////////////////////////////////////////////////////////////////////
- {0 b T( F5 f, a3 f7 a8 y" R4 H //////////////////////////////////////////////////////////////////////////
- L( K& ^+ C; V2 |" M( N CInventorySort* pInvSort = new CInventorySort;
% D3 s( T% N% v7 f V" _ vector <sItem> vItem;2 ?2 [# J# Y: a) h6 N3 `6 ^
vItem.resize(MAX_INVENTORY);//初始化大小
" \, \0 M* j7 ~( a& B //////////////////////////////////////////////////////////////////////////
1 ]/ i m1 e, r# t1 G9 @5 l //填充数据+ x$ Z+ Y& n2 F9 c
for (int i=0;i<MAX_INVENTORY;i++)
) |3 e, I+ G1 u3 c; M% @ {
& l8 c1 R& w- g9 p2 m CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
4 H5 l- F) `. j* D3 b8 K0 v if (!pItemElem)/ m9 j5 U6 B6 y
{
( r' a/ k4 T8 [! {" P7 c vItem.dwKind2 = 0xffffffff;
% o! b; |/ U4 F3 o. _& a vItem.dwItemId = 0xffffffff;
+ R% @& [1 G* X# I vItem.nIndex = i;
( N$ H0 U& \; O& g5 Y }else {+ R- I0 o) j+ _" t& G
ItemProp* pProp = pItemElem->GetProp();" i4 m+ L0 |8 o2 S U7 t- J
vItem.dwKind2 = pProp->dwItemKind2;$ i0 Y2 G% i5 `9 h' v
vItem.dwItemId = pItemElem->m_dwItemId;
4 y: E6 ~7 S F3 n vItem.nIndex = i;
. {, c* A6 [" j3 O8 t7 K+ S" ~ }
, ?0 b, U0 O5 Z6 F! |+ ^& y) ? //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 G- d0 D9 j o( X# X' ]! k }6 v5 S) w1 @, Y D6 t( P9 u ~
//////////////////////////////////////////////////////////////////////////
2 U, F8 l# e! ]( I4 j4 H sort(vItem.begin(),vItem.end());//排序( |: k3 [/ }1 I+ b5 D0 H" A! o6 J8 q
//////////////////////////////////////////////////////////////////////////
; P9 T4 Z' _8 Z1 i/ @) M @/ P //交换! A3 V+ x" u1 p7 ?- H
for (size_t i=0;i<vItem.size();i++); p( M0 y/ z% B* B! R
{8 x2 w& }% k( {3 t. g
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 L% F! G3 h/ a, |2 r3 I4 P pInvSort->Add(vItem.nIndex);2 c5 z' U& o- i' l+ P
}2 B& C, `: j0 g2 G$ d
BYTE nDestPos = 0;6 e8 {( I4 N, z; v
for (int i=0;i<MAX_INVENTORY;i++)
1 R5 ~; o2 C" X {
' O/ Z0 i: |& @ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);# ]. z' i% Y3 e4 d( F+ I
if (pItemElem)2 N. ?7 G; S8 B; s1 i% o" c
{9 @5 Y0 z8 D* Q- ~
if (IsUsingItem(pItemElem))
5 l) }8 B0 H' x4 s* U; y {
( ?( q0 I- e" N3 c/ S //这个位置无法放
9 S- }" ]8 c3 G/ P nDestPos++;
/ k3 r( T; [4 [' M% G }% j. F7 Q) z! {: p2 L! Y
} S- N. ~4 [# P" a+ G! B
BYTE nSrc = pInvSort->GetItemSrc(i);
0 i* Q& l8 [+ S9 j pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);. w1 g% c7 _5 v
if (pItemElem)5 W% |( u# v) I: l8 A: h
{
8 K: |+ q1 q1 U" D$ X! y* E9 M9 q if (IsUsingItem(pItemElem))( H7 L) j+ P& Q2 Y) Z" S+ A
{
8 T, D0 w, Y, F, c' a1 M //这个道具无法移动,跳过
2 r1 _7 c! ~" w/ r- Y continue;; G$ h2 j1 z6 r: L1 V) J' C
}
7 r/ ~2 C* `5 @3 e+ Z }else{$ W. s' Z; A P, V
//空位置 不用动3 \" i) l+ P' y' b
continue;4 v. a+ s8 x" R4 |! x8 z; m; w
}) k+ K/ _7 V. K% L- j$ M
//////////////////////////////////////////////////////////////////////////% ^1 C" n1 S4 C! z6 M; E7 F. I* u- h
//开始移动
' a0 @* V2 c* F4 L if (nSrc == nDestPos)" Z5 \; R# V2 }. P( O
{
- k7 a! U1 @$ V2 ]& ~4 ^ //原地不动
/ y7 n" b+ P4 B; w0 Q2 y nDestPos++;0 G" b: y0 a6 p4 A% {
continue;
; u. t3 J; m2 g) {7 c# y- J, s }
9 r+ p% @) Y. e$ ~ pInvSort->MoveItem(i,nDestPos);
' g( j1 y" j: m: n5 V( m% r g_DPlay.SendMoveItem(0,nSrc,nDestPos);7 m3 @2 T" k6 a) l
Sleep(5);, R* L k2 E$ M. n8 S
//Error("移动 - %d->%d",nSrc,nDestPos);% T0 A% w. s- b1 Q+ ]* R/ k
nDestPos++;
0 u: t$ C- d0 q* C* z4 [2 W, w. F }7 n% v6 S' r+ K3 f
//取第一个元素的信息
$ _/ Q4 o0 c d( v( I /*& I1 i7 I) G! ~! h z8 {
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
, H6 d+ M$ S: n0 e) \ {
# E. m: I% P& {- l Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
% o z- H# X) C# n8 q+ T0 F g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);8 D J$ }9 F, k- [1 f7 V- y
}2 ] t$ d' w5 j1 L$ p9 ]
*// [2 K | G2 b; l( U- k* Q
//////////////////////////////////////////////////////////////////////////
. r: t) L+ i- K break;. P, s( m6 s+ [1 d7 J
}- @7 j/ E$ J( g
}
6 z* d) Y- a7 C/ Z( E4 l}; b: H1 E- I6 v4 b ^ s+ s
m_wndMenu.SetVisible(FALSE);2 s8 W5 s4 i, {4 E. O
+ B+ [7 [4 s) Q, ]$ u) R; F z1 I
--------------------------------------------------------------------------------------------------------" A% J p9 I( c( y' R( M0 Z; n
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
/ N% J- ~# k% _{6 L6 `( G: ?, u# j5 P( l
BaseMouseCursor();
/ s2 B7 d# l+ t$ ?" E}# O' G* l. g& S$ d4 T: A
在其下添加:7 T4 }+ N) L E& n) Q
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
O/ ]2 c' ]7 Z, K G* A# p{9 r2 i5 Q( e$ t2 N) E' ?: b0 a+ X
m_wndMenu.DeleteAllMenu();" Y+ I! g. z# c1 {8 Y) x$ ~6 w* Y
m_wndMenu.CreateMenu(this);
8 v& r4 |2 d0 g1 P+ H' s1 [4 `m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");# @& {: R S# c! V7 b
! @. p( D( _' N! L$ E' V# H
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- T7 i5 J7 I$ z7 y8 J3 b{
4 ^0 h$ g" i" ?3 B4 W* y //P以上级别才可以删除所有道具& h1 z& g5 q- \
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");5 I& P H% v( I C9 q' ~ N
}( y3 M c1 o8 w" V6 V8 J
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
: }2 c& I- V! Jm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );0 K. P+ m- G* g6 @
m_wndMenu.SetFocus();) y; l# O6 W6 Y9 N2 w! c5 d
}+ {( K% u& s3 A7 c2 n0 T7 P
------------------------------------------------------------------------------------------------------------/ C/ Y+ P$ d( h8 P3 l% H
*************************
. R2 u. }4 }4 R* n8 m ?/ zWndField.h文件
, ^3 c: R1 h6 k! n( l2 r*************************( R9 h2 \+ C9 k9 R6 e9 u
搜索:BOOL m_bReport;9 v+ I {' M9 a
其后添加:
. e. ]; i9 n% j* ~. Y" b2 z0 tCWndMenu m_wndMenu;
9 O) b, S" G* |搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
! p z4 m& }/ W% V" e9 X其后添加: ~. h! S$ M8 o8 h- f
virtual void OnRButtonUp(UINT nFlags, CPoint point);& E6 ^0 Q7 y8 y4 A0 J
% ?4 a0 C$ @' W, B d' r" k' a
) f+ c3 s' ^( t
|
|