|
|
源文件中_Interface文件夹下WndField.cpp文件
& E1 x) Q' b4 O9 A搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) w7 }6 P$ r9 z P9 `) `' K, E, z
1 [8 A5 M) |! C+ r E+ ]struct sItem' K! G, g6 \& `0 [( S" S* O# t
{% ~1 c0 }% C9 @9 Q" L W0 I5 m6 x
DWORD dwId;
& T8 H3 _/ U5 B7 C) ]+ dDWORD dwKind2;8 L/ O9 w2 s# q( D8 L* T1 w3 D
DWORD dwItemId;/ `5 U4 J9 M+ J# c7 V
BYTE nIndex;
4 Y9 n2 E$ s! q; q# P, ksItem(){8 M6 l6 l; x8 M7 f* \3 w+ M* L7 E
dwId = dwKind2 = dwItemId = nIndex = 0;$ |) n. L1 ]6 g2 x
}
. U- I4 Y! i: s# tbool operator < (const sItem p2)/ O' j& q5 O- [3 E5 B; P
{
& U6 Z7 Q, n9 \2 d$ f5 i" h% v if (dwKind2 == p2.dwKind2)1 N: B& h5 i& Z$ w* f' j! h
{" A3 [1 q6 h* E' ^2 V+ ^
return dwItemId < p2.dwItemId;
1 c4 S; |, ^6 O' f( ]; K9 \- ~, Y }else{# A2 ^5 ?6 Z1 X" }
return dwKind2 < p2.dwKind2;; R8 D- e- |9 l' m% y
}
- N/ Q! K9 [0 T! \* S- C}
* Y: }2 A& @ L};
1 ?2 S0 |, i0 ~1 Fclass CInventorySort
6 R1 W$ z3 _! R; d{2 n7 p5 `3 S) ^3 U2 Z! i e) r
public:
; t6 @2 J- u3 t: P+ wCInventorySort()
- n* p0 }6 M& [{
. g! ]" A+ q6 l m_dwPos = 0;
d+ ^* u1 s8 C" o$ m$ Z}3 X' {) G) E# i! K
~CInventorySort(){} J7 E {( _% Z/ Q2 ?7 n! R0 M8 i
private:
9 v X9 h8 p- t: M5 K. tsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息( e7 f0 n5 d9 G8 c- [# ]. H
DWORD m_dwPos;' V2 \" K+ O% O4 F6 }# R
public:4 }* N# M+ q! G9 R0 s+ g/ W; A& |; Q
void Add(BYTE nIndex)
0 Z' a' o8 ^/ f( W0 s I{- V8 w6 N( E8 b% S4 A. r* N
if (m_dwPos >= MAX_INVENTORY)
" M; s0 `6 b/ m6 H/ y {. `5 G& _$ t3 F8 m' T$ ^9 J( U1 R1 Q1 p: \
return;* k; G- e# z( w8 ^) E
}; E+ B4 \0 `, {3 Z! i* U; f. P, l3 e
m_Item[m_dwPos].nIndex = nIndex;
% s( p7 z4 J3 q- _" M: r6 b3 K m_Item[m_dwPos].dwId = m_dwPos;
9 X3 Q/ ~/ B; I* D8 _ m_dwPos++;
: u Q+ ?; C- ?1 j4 p: ^3 v}; ^5 N5 r# A( L+ {1 b( X' T% L
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
2 S& `5 l1 r0 n0 u- w. J7 Y& t% E{
2 S1 l& Q J- ^( t for (int i=0;i<MAX_INVENTORY;i++)
T" l, w- K" F {
! U- r8 D7 x0 E2 B6 G if (m_Item.dwId == dwId)# Z. y5 c9 m; p) v5 e
{$ S- X$ P' \6 M' J
return m_Item.nIndex;+ ?# F5 D) J u: g/ C
}
' B: e; ]* J7 C e; r6 ], B+ c }
0 L) [; d3 _6 ~+ O) `1 S return 255;, Z' o; o, Y! L( q& s
}
9 L7 Y, ^! t& G$ z1 W* Vvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
* d! Y) v# @2 d6 z9 D2 e{$ @2 C5 v# g# a7 P+ O/ B' r: |
BYTE nTmp = 0;
# Z$ {4 n4 {6 y" Z( [ bool bDest = false,bSrc = false;
# y6 h& L- N3 A: x+ R for (int i=0;i<MAX_INVENTORY;i++)% |: i3 e9 R" Y, Y7 ]5 @" |
{
a- h5 o4 @% C' V& J if (dwSrcId == m_Item.dwId)
0 t; s3 A i+ { {, {6 S1 U' L- K* k, B3 |: A
//id相等 则 改变对应的dest和src
- @& k% i+ v1 R4 N6 }0 P nTmp = m_Item.nIndex;, Y! V/ x& W6 ?6 V: c. }
m_Item.nIndex = dest;
" A8 R( n( K* S* k: J }
/ n) f- o" `, m, q }
$ t# H7 J) E$ O6 I //临时数据保存完毕,交换开始5 o* ?2 T/ ]0 J* @! i. A
for (int i=0;i<MAX_INVENTORY;i++)3 j# k! g" P/ ^9 i2 `
{, g; ?/ W% j! F7 Z: G+ z
if (dest == m_Item.nIndex)5 z% F, @8 z/ I0 z# n
{
# G# `* F% A" x- S! v# o //id相等 则 改变对应的dest和src
2 Y: W# }+ a1 I m_Item.nIndex = nTmp;5 A8 R. T6 ^- R4 d! j4 ]
}
8 B0 H% H9 m: J2 k" C' l }# d/ x# a3 C' _- m. X
}
/ U2 Q+ z4 A$ W$ U( L* \5 j};; z% X$ M( a+ ]! W) _
-------------------------------------------------------------------------
" H) w* \9 l' g) K Z# Y- B7 b依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% d+ I' k* |' p: |% T( j
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
' _& d; ^$ G/ M紧靠其上添加:1 n. N6 g( R3 }/ L* k
if( pWndBase == &m_wndMenu )0 A2 _. x( J. j- w9 V* o2 q9 }
{- D+ Y0 J, N' B. C1 m( l0 k
switch( nID )8 a* Z2 q, u- m6 T, d
{
3 s7 D1 G; f7 Z# \4 V& `: m case 2:: \, _ v9 e% k3 X# g0 m* e' C6 S
{
% b0 L. t) W0 D* i, r T. ]+ ` //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
6 P- `% b. e9 E if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# m$ \7 T* ~, G+ ^ {. `/ {& v d1 d$ y5 U5 w& ?
break;$ V/ r5 J B7 H0 `
}+ p% d& g4 w' Y+ V- ^9 f/ X
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
. X0 S, P2 E; Y. G4 e" ]! }$ t: r9 [ {
) d) U$ E3 q3 a/ r( L CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ `. t8 F( r9 v% G
if( !pItemElem )
) l' b- ^' J& y continue;
4 w! ~0 V9 p1 Q( j if(pItemElem->GetExtra() > 0)
. s/ |7 j5 [* g# y% Y& h4 _ continue;
0 Q' f: E/ h% Q% [ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) - n2 u o4 E/ T3 _" q. K- l
continue;
* L6 Q) k5 J* C* _ if( g_pPlayer->IsUsing( pItemElem ) )
: A) Z6 m# t# }8 v) q3 N7 T$ y6 t continue;
8 o' I/ ~$ W: i' }: b( ~, Q) L+ m2 ] if( pItemElem->IsUndestructable() == TRUE )8 d) `! ^0 C. j
{
5 ^1 v% L0 C- E% d0 ^% V- W1 Y g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
O% x V: z- c! k5 m continue;
5 a( t8 _" M7 b }0 \% R4 g( b" l
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);/ r: @$ \' _6 b9 p$ [
}& m: @0 w" p- J4 c6 r9 |6 d3 x2 S
break;- f8 l, H5 Z+ Q
}
4 K9 m$ g- h: v9 R$ R: N1 W+ U" N case 1:
7 }! E! T3 l3 V! r {; X" o1 }+ a( c( j; a; ]4 @* Q
//整理背包
" I) [+ i- D* c; Y' M/ W* h+ V //////////////////////////////////////////////////////////////////////////1 V4 W" J) H8 W. Y$ n/ e: Q: x
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );% c: U6 w9 }! e* Y
//////////////////////////////////////////////////////////////////////////2 e$ W3 G/ l& g: n: ^; C3 G
//////////////////////////////////////////////////////////////////////////" h7 Z$ m6 A4 T
CInventorySort* pInvSort = new CInventorySort;+ Y/ `4 p2 p& _6 t1 n5 b9 h
vector <sItem> vItem;; B) ?$ V* L4 j, U5 ?" o' }6 S
vItem.resize(MAX_INVENTORY);//初始化大小# {( \0 U$ a2 ~
//////////////////////////////////////////////////////////////////////////% K' I) [7 v5 ~* J) [
//填充数据, l N& ^* Y- r' R' G' M
for (int i=0;i<MAX_INVENTORY;i++)
- f, p; ^( I4 I& q! p {
' P$ J1 t1 L6 F0 B& S0 C% y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 i* | y4 Q3 X& |
if (!pItemElem)
# R' }. u$ p. E- M {% Z2 i- n2 w% Y) Q
vItem.dwKind2 = 0xffffffff;
9 c' S- w0 P8 s* D vItem.dwItemId = 0xffffffff;6 u+ W; ]6 u- w1 k( Z
vItem.nIndex = i;
' }$ m' r& i; t }else {
# z5 E, m4 [9 P5 @/ C4 X1 w ItemProp* pProp = pItemElem->GetProp();4 N6 k+ o0 @6 \1 b* q4 j3 x2 n
vItem.dwKind2 = pProp->dwItemKind2;
6 L( n! [6 \* O: ]. ?) W7 ^/ G6 J vItem.dwItemId = pItemElem->m_dwItemId;1 S' H; W, f+ j4 K% k0 ~
vItem.nIndex = i;
8 a& i* T" {; I$ f }8 W$ I0 ^+ Y J% v7 w, K
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
3 r2 f; |* E0 m1 n2 x }" ? d& n' c5 e( j% g2 ^" l
//////////////////////////////////////////////////////////////////////////
1 S+ I Y* s0 Q1 r& g! m& o& t4 o sort(vItem.begin(),vItem.end());//排序
$ W4 Y+ ?6 T9 Z( z* } q. }/ q //////////////////////////////////////////////////////////////////////////
- e# c' b8 ?' D$ o* M- [/ c3 p8 ` //交换
; O! C! e. k& L+ I for (size_t i=0;i<vItem.size();i++)
2 a+ G' g- |+ R0 H( @6 W3 W {
9 o4 v( t' \/ J8 z7 e //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 f" T( o' d7 w7 l; B* D: i$ b
pInvSort->Add(vItem.nIndex);0 M* p1 ?3 ^$ l2 @, i2 d( N
}
* \ x' R9 P- s9 ]4 o ` BYTE nDestPos = 0;& O& y) o% u U
for (int i=0;i<MAX_INVENTORY;i++)
* B: W, s1 l' a( C, J. e {
0 n! H6 l8 L! C4 S6 C/ o CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);4 z" m7 b5 T, l3 [4 e7 u
if (pItemElem)% U- Y' a. D" }& u9 n
{
" m6 j0 A u1 r7 j' S8 R$ x if (IsUsingItem(pItemElem))
0 \6 z' Q& g) k1 o6 [" y) X {
+ z4 Y% M* [- m2 z( u3 ]; i$ ?3 e+ V //这个位置无法放
+ [, O9 h8 i9 m; I nDestPos++;5 o( s$ N2 C9 o, x
}0 Y' c2 Y8 C* T( j
}
6 T5 ]; U; @9 ^* p BYTE nSrc = pInvSort->GetItemSrc(i);
* K/ c- z8 z) Y$ `1 ] pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);2 P+ h, ?& \, B! }
if (pItemElem)
# P; @6 I5 ]2 ~! o! v5 u, [ {
& \3 ~; [8 Y8 D. G if (IsUsingItem(pItemElem))! n, H3 Z9 _$ v) e' m1 l8 y
{
! \8 b+ s4 B( a; u6 U2 v1 z- k5 I //这个道具无法移动,跳过
* W: B4 T: A4 x& [! y4 `3 O continue;
8 w3 }3 E& F' Q% W7 Z- ^ }
* t \' W% ]+ C9 U; [5 z# } }else{
; b& F' z- J% c/ ]9 x0 K //空位置 不用动 q- q' B3 O1 P# w1 ` P' p
continue;9 x9 g9 a5 D% F' ?
}
\% i$ d( G/ r //////////////////////////////////////////////////////////////////////////3 }( @, y" s& [) m) i
//开始移动
' F7 U- x% ~/ G" B if (nSrc == nDestPos)+ K, i* g( x6 m* h( ?
{
" X3 Q0 a+ A" R- r! r8 x9 c* b7 S( z //原地不动% ^: u& c/ W; ^4 M
nDestPos++;. [, @) v2 a: W$ N: @
continue;! h& R5 d0 n! K3 e2 r
}& e2 Q; Y! Y6 I
pInvSort->MoveItem(i,nDestPos);
5 n, E3 i7 }- E* G8 `; F g_DPlay.SendMoveItem(0,nSrc,nDestPos);" g3 Y9 w4 d0 \
Sleep(5);
( b% m: D, V8 n6 v0 J) c //Error("移动 - %d->%d",nSrc,nDestPos);
0 L- K- I C5 K$ r( I nDestPos++;2 J' }0 u$ k8 H2 `( K& m
}. ]4 v, u8 a" j0 P* q
//取第一个元素的信息
4 c! i7 C; c: I0 i" c /*
, A% ?2 {; ?) | if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)% o3 T3 c; X- h/ u) e, W% o, U: ?
{6 f; G G* h. V
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);: L+ Y- w' j- L. J6 _# t
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
4 }, G1 L W+ Q# a: w }
' P! m+ a- L' J, t6 x# d8 _ */) d" a0 D. [0 f
//////////////////////////////////////////////////////////////////////////
3 T. |' x) E. Z5 n2 e break;" a. ?2 h _2 m Z% C
}
0 U) k" l: G1 N* b& E } 7 T8 g6 t) u% @; m6 R
}
# Z e) G/ A- x! Q0 t' y9 N* |m_wndMenu.SetVisible(FALSE);
i5 K. {5 O4 L, L+ L. f7 }" Y# b' F
--------------------------------------------------------------------------------------------------------
: M6 U; z" J* y- s( V6 ]7 D" [搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)) Z2 r( ]! h. {( a$ {* ^
{
7 [7 q, O7 J" U" x* \' Y9 pBaseMouseCursor();
7 E5 ?" \# s4 F9 A' `; W% h% h}6 Y9 i; z- A: S/ B, r* V
在其下添加:
7 p; w& |. R- M( {void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)1 [/ |. O/ l* f7 X1 v4 P
{
6 s/ j& T3 F. Q0 |4 E6 {( b* a7 Sm_wndMenu.DeleteAllMenu();
4 f2 C" ^" F: n- {m_wndMenu.CreateMenu(this);. z" R6 _% N9 R) m# L
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");3 o6 N' e5 x; U9 f' ~/ ~
; i1 V+ h& P" E% V2 \5 L6 e. \
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& I) I- S* k4 O* c. m{# H/ c/ u; P/ g# D1 X
//P以上级别才可以删除所有道具
4 o$ h6 `3 q F5 @+ \- q m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");# C5 J% O7 O8 r2 L: ]
}
; G" t$ U# x" v$ i1 Q+ |. Am_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );, p3 j5 P; x& G$ Y% a: P/ y7 N
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
. B3 q" Z, K K: |9 }, l& xm_wndMenu.SetFocus();
) U! e3 ^8 l1 y" t O$ B1 I}; f4 F. H* a T w4 z
------------------------------------------------------------------------------------------------------------) ^9 B2 @ o/ i3 F# A* X
*************************
& ~* b) ^3 J6 [5 oWndField.h文件
) N7 G }* G9 ~5 K*************************- W4 d! N' S9 v8 E
搜索:BOOL m_bReport;
& c% y/ x! `3 ?! x其后添加:
0 a* n) m, o! q; g% vCWndMenu m_wndMenu;; S0 b$ n$ r8 {# p- s' W. E
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
$ C& k. S8 G1 [: \$ a8 v9 X其后添加:
* j" j7 H1 R2 P6 X5 i* Ovirtual void OnRButtonUp(UINT nFlags, CPoint point);
|- W6 c5 r8 C
/ [+ r& ], ^5 Q
; R6 H- [0 ~9 t3 i: Y+ q$ l |
|