|
|
源文件中_Interface文件夹下WndField.cpp文件
/ O* t" Z- _8 P搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
' ~* w0 R! \( b! u9 ] {* T0 B' [" q
struct sItem& m# }- x: @2 G G0 _
{
4 F( q( T: D- |) i1 WDWORD dwId;5 C; x/ C: F3 I" b
DWORD dwKind2;( J1 E# _) K, A& q" B
DWORD dwItemId;9 M/ \$ ?3 m3 ]( L9 C
BYTE nIndex;
; }# D% s8 m' F" Y dsItem(){8 z) F; N4 H0 x% g l) a' S
dwId = dwKind2 = dwItemId = nIndex = 0;( V! d( B5 j6 A0 e) g# r
}
4 O A! {9 ^" \' v; h8 T) jbool operator < (const sItem p2)
0 G7 _" y( P$ _% |2 \9 u: f{
8 ^6 c" y/ y, s! Q: _% ?2 t if (dwKind2 == p2.dwKind2)/ M5 Z# C# M2 H' [" ]! @
{: A9 v1 Z) U) H# O
return dwItemId < p2.dwItemId;
2 k1 \1 ?2 J" |9 L' r0 k8 r2 M }else{
8 F7 w6 p+ }0 y return dwKind2 < p2.dwKind2;8 Z1 M J- i6 M: T' e5 K. B
}) S3 a& ?$ S$ l1 ?# I4 z
}& ~3 E2 h5 t- P# Z# x4 Q
};3 b/ G5 a K/ X4 v
class CInventorySort
5 @2 B/ ^& y! Q4 U5 L$ N{
8 e. k$ R5 y4 q. |' v0 dpublic:( @0 `' ]$ ?$ U. }6 A z
CInventorySort()/ \" V; c- d. m- h: i
{
9 `' w! p+ W+ a; S' O% |0 a' c9 G m_dwPos = 0;
' o3 J) W" w9 l+ K! K, ]! S}6 Z, g( Z& x- @% O1 g0 ?
~CInventorySort(){}
$ O1 M. ^, O8 E; w) qprivate:
) j7 s2 x3 V: a0 WsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息; i0 [7 S& L1 h3 x
DWORD m_dwPos;
' R/ X% r A2 o: u- cpublic:; N3 y" Y# x; @! d* D
void Add(BYTE nIndex)* [; c Z2 Z: x J7 k
{
" Y* ~' B' N/ I, H if (m_dwPos >= MAX_INVENTORY)
( H, w! `( N" R: V7 \( |. g {: [3 A% _. b; m6 v; m
return;+ ~9 V: K+ y/ ?- H) Z/ o
}
+ n. t1 }% ]/ H9 J' R m_Item[m_dwPos].nIndex = nIndex;& k0 Z! j; w! B( r7 Y9 a1 h
m_Item[m_dwPos].dwId = m_dwPos;" L# r1 c* z; G. A9 l# U* ^" E, P
m_dwPos++;& @6 W3 z% q* F1 ~
}0 b1 N, U: }% v
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
) n: ~. i3 B5 ]. I) y8 I1 q/ ^{
6 P5 M& p2 b# i for (int i=0;i<MAX_INVENTORY;i++)
) J c2 Q- B" T! B {" v% ?( O; h# d7 {+ l, y
if (m_Item.dwId == dwId)
* S2 |+ N& r N% O) i' g {- h; H. S+ V% R- Q4 Z p
return m_Item.nIndex;
6 M p8 H5 r) G- z) n }
: K# a8 `; Q' \5 f/ A# e% z }# N: F( U" W3 j$ g/ ]$ C5 X q
return 255;
/ ^7 {' G( J3 Z}
, x, L6 Q3 t3 q) J' |void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
+ k$ O' J3 t- `! U{
: `( K; M5 o% i$ A$ r; d BYTE nTmp = 0;
/ p/ x, `( p* M9 N' C bool bDest = false,bSrc = false;- i; F, n3 q2 d% W1 k M0 U
for (int i=0;i<MAX_INVENTORY;i++)* j I* W7 `2 j1 p; C* ?
{) e8 Z P8 {2 k: Z* a4 M0 t
if (dwSrcId == m_Item.dwId)
3 J8 [ s- a6 j {4 I" P7 k8 v3 b. k- m4 q
//id相等 则 改变对应的dest和src! b7 L7 _0 c: A6 D/ l
nTmp = m_Item.nIndex;- h) L1 _2 v6 \! t/ d R" w. l* _2 O
m_Item.nIndex = dest;
! |) x, D; n( w5 y5 J5 W& W5 n }8 h) U/ N |/ H/ h/ b1 B
}( S" T- C! `# E3 g( A9 `4 y
//临时数据保存完毕,交换开始4 y/ s# A: C# r
for (int i=0;i<MAX_INVENTORY;i++)% _# _4 J! C* ~; U H5 a- _
{
2 r r. N0 T( i' h+ {, S1 J if (dest == m_Item.nIndex)" {/ v" y% ?, d! H8 Q. c
{( b. A4 G* S4 z, O y1 ~+ @# f
//id相等 则 改变对应的dest和src
6 }5 N. G! ]" u/ j! N8 [ m_Item.nIndex = nTmp;
$ k5 h; C( p# f# l: f }
! W( U- u% e: W+ n- T }
0 w) G4 ]! T; t}
& @2 ?( [0 H$ f$ J r2 j/ P" o/ b; Z};- u, H+ O4 z/ _( j
-------------------------------------------------------------------------
* z. b# W+ A& A( L6 ]依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 P6 B9 S t% \8 w) W搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
5 X7 p) O0 S6 k紧靠其上添加:
" x; ?6 ~! |7 R* X9 gif( pWndBase == &m_wndMenu )
, I6 e! N! ~5 L8 Z6 t{
5 g& b0 o: t/ k3 q5 _( y switch( nID )( b: C6 y8 h( P3 S9 j7 D3 J. z
{
8 s& \$ M( g' \7 H' Q8 w" | case 2:- U# ^* i- A M
{" A& |: k; r3 T5 [$ z
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
! R# W' s2 A; n! S7 V( k5 m if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); }# T1 G6 f2 l7 \
{' |' D% M+ J5 T+ W/ {$ f. Z5 P
break;
" w, c, ]. C+ H0 v+ K) m0 H }: D6 c6 s- R' L; ?! \
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)6 _* n) p2 u3 d$ y6 \
{
+ l* G0 [# j2 a CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 \0 A- k* a I* d+ t
if( !pItemElem )
0 _* Q/ S% C# A! D+ l* p0 l continue;
; }$ e- z. Y& I% R1 w+ W if(pItemElem->GetExtra() > 0)
" B" |1 ]4 I0 F/ [# G0 l9 D/ j; t, [ continue;9 Q$ E: ?" ]) y7 k2 A5 C
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) # D# K! i1 M/ \' ~9 [7 j4 G
continue;( N h( B- F2 c, {
if( g_pPlayer->IsUsing( pItemElem ) )+ O! a1 U5 [9 a4 y
continue;$ H6 L7 b+ k& @8 g
if( pItemElem->IsUndestructable() == TRUE )( C3 M7 t% X8 T! {" q6 _% q
{
4 e- L& S3 j* P0 W9 C1 H6 ]7 `& p g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );$ R1 Z6 v0 r% v+ J
continue;
, k5 e- D# L, c } D1 \: \, @+ i" Q8 t4 {( ^
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);! R# v G" J' O
}' L7 C+ o- y8 I( Q: f
break;! y3 E1 \& g8 o& e/ I+ @
}
7 }; R/ y$ e/ T case 1:# B" J4 n5 h( [) C' j. z1 n
{- U, x8 D# z3 M! P, \" g
//整理背包
' }2 K1 c, ?: |9 z: t //////////////////////////////////////////////////////////////////////////
d8 w" x; ^5 ]. z9 S //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );1 i; O# E5 U; O5 e: S; |
//////////////////////////////////////////////////////////////////////////
5 v2 K$ O' ~+ x; A. n //////////////////////////////////////////////////////////////////////////- _/ O; b; K$ s5 ]0 M
CInventorySort* pInvSort = new CInventorySort;+ H- [0 a" G# O" C
vector <sItem> vItem;4 e4 C! X2 T" j, \8 @, A5 x7 k
vItem.resize(MAX_INVENTORY);//初始化大小( G$ y2 X M( r4 t$ v
//////////////////////////////////////////////////////////////////////////$ _: B/ d' w1 s; ]# c
//填充数据1 H/ m+ }# A( h+ C
for (int i=0;i<MAX_INVENTORY;i++)! W: }* F3 h! M. X
{
+ a; d( w! k* b CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ @- t* R( m+ E
if (!pItemElem)
) j& g: J) M8 _( R: \% p4 B/ T {
9 n- ~# R: l: |$ S vItem.dwKind2 = 0xffffffff;
' N9 f/ _ ~+ A0 l; F$ T" c8 H vItem.dwItemId = 0xffffffff;* h7 h9 b, a; V5 s
vItem.nIndex = i;
, w' b+ Q: p5 `$ M9 X$ r }else {
" Y7 F( V! Q) M. Y2 y# m+ z, U ItemProp* pProp = pItemElem->GetProp();
3 u$ P6 h5 y; D, D& N- t2 W3 t vItem.dwKind2 = pProp->dwItemKind2;
1 w9 i# V- H3 H: ?4 d vItem.dwItemId = pItemElem->m_dwItemId;2 ~" n) h! n- t4 N; g$ I
vItem.nIndex = i;6 `' j. a. q& j' w% [
}
& Z0 X0 r' e5 P1 |5 m; Q* @ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, |. V$ x( K/ i2 R3 O
}8 \4 I. }) G# y a
//////////////////////////////////////////////////////////////////////////$ U% j6 T; ]% N8 z" c9 b
sort(vItem.begin(),vItem.end());//排序
) S% o5 C. U' V }/ V //////////////////////////////////////////////////////////////////////////' T" w) Y7 _& a: M
//交换
8 x# w) x4 E* W. U1 Z' t for (size_t i=0;i<vItem.size();i++)
0 c' `, ]2 h* ~) h+ ^6 V5 a {
" [, a1 f# A" a* ]6 `! O6 n //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! Q" m4 y9 H# \" ~ pInvSort->Add(vItem.nIndex);
; V7 q; v% q$ R. ~% F, F9 F4 B }
" f% {0 \) p) M u. Y/ u0 P, w BYTE nDestPos = 0;$ c* j' A' f. i) @1 @3 \8 i1 R
for (int i=0;i<MAX_INVENTORY;i++)1 ^* Q1 ~+ u- x4 t) H
{
! [: R4 V; e7 J$ l CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
W& _' e8 P- t" N/ c5 E if (pItemElem): g3 z8 l8 T( r5 o8 U, y5 [
{) y, ?1 M0 h4 n
if (IsUsingItem(pItemElem))
' R. k/ i2 d8 P, P C5 H, ~ {
6 \! d7 _" F% `' q& I //这个位置无法放; o# k" w* \, F1 [+ `( f, Z
nDestPos++;4 d0 |9 c, R7 r$ Y) f, u& O
}
+ p" y: O! x5 l }# D) m9 t0 q. D' x* t
BYTE nSrc = pInvSort->GetItemSrc(i);, d. D; ~$ z n/ B
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);/ {6 f, p5 h P9 g9 \
if (pItemElem)
- n9 Y4 {1 N0 h- I6 l {
' B& ?! ]; D4 w1 W9 f4 m if (IsUsingItem(pItemElem))+ g2 L& C( l+ |6 [) e) X5 {4 V
{2 e' r3 w, y- c& m' l
//这个道具无法移动,跳过 Z1 ?6 A. ^3 m& e
continue;: v& ~3 H# q7 n1 C3 Z& `2 X- d
}
+ m! K8 c3 x; R8 n2 W }else{6 z) T9 {% u# I, D% r4 R; C3 ^
//空位置 不用动8 ~; `7 |& S" V2 S) e
continue;
* `! j% m9 y8 {, H" t- d }) w" b: L6 g8 E1 \# z
//////////////////////////////////////////////////////////////////////////
$ S& V d$ B1 z //开始移动) x1 a/ p4 r$ U) V
if (nSrc == nDestPos)" V' B3 A) o" U. ]( v% X
{& ]/ n0 Z C5 C, ?7 E
//原地不动
+ M- @! |% U/ i' F- q/ I# l( Z9 V nDestPos++;
- ~4 N1 i# s" P! v4 e' W3 G continue;
6 u9 z* R, {8 z4 f/ O }
3 A% }2 f7 x6 a" \2 S. d pInvSort->MoveItem(i,nDestPos);
* ?' F+ D/ B% t/ Z# |9 @% h g_DPlay.SendMoveItem(0,nSrc,nDestPos);0 ]8 Q: m0 x, h# V
Sleep(5);
% R2 M# D5 v; J+ _+ d //Error("移动 - %d->%d",nSrc,nDestPos);
/ ^3 e; I" P5 M nDestPos++;
2 L0 @$ j/ s5 _; G$ u' }4 g }
, h$ O1 D7 S8 A/ a; w //取第一个元素的信息) O& O: ~. G: C+ ~; S3 U
/*- V" V) b* U5 U) q' G! F% H
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)# n. \. k" U0 u/ h- [. n
{" C' z- h# w8 g: y
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
, N9 c6 c) @6 G1 y7 m g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
1 e6 k# ^# C7 }6 z }
) m2 ~2 U% }2 c: ? */
$ I \% J: N0 L4 C //////////////////////////////////////////////////////////////////////////
' r3 J) I% K ?2 z' G break;
, J* ^. k" e$ L+ b }
/ V" j1 [, ]! s6 G! z; \- Z }
& w5 i# l. {$ C Q- P}0 x7 K8 c. D" M1 l
m_wndMenu.SetVisible(FALSE);/ U! v! X2 ?2 g3 E5 Z- `& {' d
% a, g6 z I# A0 ?% ^( N( i9 [
--------------------------------------------------------------------------------------------------------
8 Z. {6 T- U& ^. t' a* q3 ~搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
8 b: \" ], D6 \2 Q. @( `# I. Q{/ j6 r* I4 ]$ h7 J( F
BaseMouseCursor();5 k2 i' b8 Z8 v: ?
}
+ {$ w- K. \' F& [- |# l' L在其下添加:7 D1 @8 }7 n3 q" W+ R
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)( s9 G3 K& H$ B
{
; o' \8 C( _. F0 c9 ^4 om_wndMenu.DeleteAllMenu();
# [% A4 `+ x" Rm_wndMenu.CreateMenu(this);
2 j1 m( |0 L) e. U: Lm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");& B. J' a2 ^) Y
5 s8 Y6 v' g+ s Uif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))- g/ S7 x& S) H
{0 T9 D$ k0 C7 m0 b0 [1 ?+ ]+ A
//P以上级别才可以删除所有道具3 W% ? Q% ]- b, n
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
5 v4 t+ r6 \& c( H% a- a. Q}
: a) e: G" i) b) p9 e. P$ vm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );2 n& b! |- k; B2 w0 [
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );5 i. G) b5 T) ^0 i R9 u
m_wndMenu.SetFocus();
6 M. T- o* `) J. v5 }7 o( [1 Q}% T3 z Q) d2 _
------------------------------------------------------------------------------------------------------------
5 [. t9 ?3 M) S# B*************************7 O" b* o+ |- V' s \' `
WndField.h文件
" z4 N; H7 E+ G3 c. `. W*************************
5 {- F, G# h% D8 d9 q搜索:BOOL m_bReport;3 O: y+ `: W8 x$ J& x. C
其后添加:
: \$ D+ j" b7 X& p4 _' ?CWndMenu m_wndMenu;1 @! d7 K. E' f5 a+ J1 W
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);8 i- w& w* x& W( o1 F; k1 I
其后添加:5 |+ k8 z/ h4 G0 Y! z4 n5 @5 t. P
virtual void OnRButtonUp(UINT nFlags, CPoint point);
* w7 `4 ^; y3 s$ W' G! S' I$ u: G
8 \" X( q% E" |, q b3 Y |
|