|
|
源文件中_Interface文件夹下WndField.cpp文件2 u: ?% ~8 w, s- M2 n2 r, w8 ?
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' @7 R# T' s) F* |6 a! }: C* Q
! Q: m4 C; [. Q1 `0 q: L2 d. Ustruct sItem
& l) Y0 p* r, s{
. a0 k4 F8 n$ Q y5 b# O/ lDWORD dwId;
* s- }; X( O0 a* e: m pDWORD dwKind2;
$ h0 u. X F- ], a/ G Z+ XDWORD dwItemId;
% ?0 G3 d+ l6 p! c) Y, GBYTE nIndex;- ^; ?+ v8 K) T/ N8 O! G' c/ [2 k
sItem(){7 i) b+ M) s% u
dwId = dwKind2 = dwItemId = nIndex = 0;# |$ Y1 T+ l! P5 u; Q1 X1 @" W" Q+ Y
}
, _; ]# c, v+ J! v) S7 obool operator < (const sItem p2)
# g2 y, q2 ~+ y7 L- v{ ~7 @+ o% B& {, D
if (dwKind2 == p2.dwKind2)
* t2 N) ]1 d# u! j2 T) ]0 G" I: \3 t {
( R/ |8 T% j" W5 E return dwItemId < p2.dwItemId;
0 {3 `1 B$ V/ A }else{
+ E- s' M& t3 |; V/ H4 }5 `; G4 V return dwKind2 < p2.dwKind2;% ^4 ^: [" n0 G. [
}; L( A" K) y6 ^0 i+ D/ |3 E
}
+ A. A9 m# a" ~! X7 ]# ~};0 v/ d* ~% w0 [0 r( G# X7 p) a: T
class CInventorySort
+ [, G9 L( [/ Q. `" `" F{2 I" s9 {, U b; h8 f8 h
public:
. @! r+ E; ^$ c( Z9 z, N# lCInventorySort()1 t$ q7 A) i+ h0 |! r
{$ q9 G+ \; P# t5 d
m_dwPos = 0;" G# `0 j% R0 n6 }! f5 M
}5 w' E. \1 r8 f$ Z* i8 Q
~CInventorySort(){}/ K* G2 Y7 z" U* m9 o2 u3 I
private:- }% k0 M4 u# ^& R2 y. ?7 `( |
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
% c% B7 h0 S. r- u x2 nDWORD m_dwPos;
9 e9 ?* _3 R2 E; \public:
& e0 I, F' ~& z) Dvoid Add(BYTE nIndex)4 @. ~4 v! o. Z1 w1 k# A! z
{
5 h6 j" P2 \; k# w/ d) J if (m_dwPos >= MAX_INVENTORY)
& K4 Z7 u7 x* x. x$ b {
; a; u3 w. @0 a return;# ^- n. [5 L. s0 W5 p( X. L
}
" r+ X1 B& } ^% a: Q. {. D m_Item[m_dwPos].nIndex = nIndex;$ V* F) _$ r0 r6 s, p- P2 B
m_Item[m_dwPos].dwId = m_dwPos;
0 E% G$ W/ g, h m_dwPos++;
" r0 n6 w/ S& G" N8 z# f0 @7 T' h7 @9 Q}
X& P- h& E% g$ }BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列1 k$ W1 Q, ]6 r; x
{* b5 F+ G" g2 `4 S; y; Y
for (int i=0;i<MAX_INVENTORY;i++)4 Y/ n3 G- l) _& Z9 [' h
{
4 h2 _- ]* F9 |' ?& R3 V if (m_Item.dwId == dwId)
% U% [ H* E! g# h {
( ^5 S1 o6 C+ o+ \( D* Z/ X return m_Item.nIndex;
) L7 ?3 [% s; I: w( k' A }9 r( h, m) G {* o9 d
}
# V' J: M" N) f2 P" | R return 255;
, X5 ?7 a7 k5 ]7 P# D}
& K8 T6 p2 E* V7 g: Qvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
4 X- z4 l! g$ @ j3 k, H. x{
7 w0 v# ^3 I$ z2 E H% y BYTE nTmp = 0;
( |- O" ~; Q8 d bool bDest = false,bSrc = false;
& c0 `3 R. u- ^ for (int i=0;i<MAX_INVENTORY;i++)
# p% J3 c! G3 g5 _4 M0 P {
- g4 r& o* O) b, o if (dwSrcId == m_Item.dwId)
7 q+ s* k1 {' n( f8 ~- ]2 b4 ?3 T {* ^0 z, p' v+ \( u# [
//id相等 则 改变对应的dest和src: L$ j0 Q3 a2 [
nTmp = m_Item.nIndex;
7 H( ^6 u' P" j7 s- X8 x m_Item.nIndex = dest;
9 a4 Y$ D5 p9 p. Y7 K4 F }6 `% B4 h2 }/ P2 L7 @: y( j9 R4 O7 _
}
4 Q9 S$ A1 D/ v& Q; |' p3 x //临时数据保存完毕,交换开始6 S X. y. L; g; f( \- [
for (int i=0;i<MAX_INVENTORY;i++)5 y6 k, q) N6 R8 u- ~
{1 j* ^" g! Q7 M6 g4 }
if (dest == m_Item.nIndex)5 A+ j6 n! {' `, U
{
$ A" @+ H% X/ V: ] //id相等 则 改变对应的dest和src
; _, a {: V* m" ^( h. t; w: }. N$ Z$ z m_Item.nIndex = nTmp;; @) J" E6 v- o" z6 c+ ?/ m
}# W0 q# {& K; W* V, p G
}! B3 u# ]4 K) P* _8 G8 n
}# U; h# D* X5 H7 F3 c
};
) c( A# o7 R6 c2 \1 d0 u* U-------------------------------------------------------------------------( Z/ F7 R4 {9 s; Q9 q
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )- y3 c" b% M1 P5 u! x
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
8 i" r. b+ [: _- @% W紧靠其上添加:# L; o+ {- W+ P; O ?9 q
if( pWndBase == &m_wndMenu )* N0 } C# G# X$ D7 B. _! W
{; [4 X# r; t3 o& y) T
switch( nID )8 L" d. S+ h t7 K- n
{( s; N2 x3 C9 O2 Q# |' g8 O
case 2:
( [4 p) X n0 a& | {
4 z$ j' {/ ?) _1 }# ?2 t8 E+ D //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
5 Y6 ?8 g8 u N# J/ F- O if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# O$ f; d2 E* G/ [6 X
{( P# N+ z: T& r: u- R
break;' {) l0 B+ f6 h [5 i E* U
}
' b4 G5 a; Z$ ~: M7 S7 v1 o- A0 Y for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)1 _8 `3 k& G$ b _8 f9 m# |7 ^
{8 x7 i) U( t# m; c
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% E- o5 D7 x4 K( I if( !pItemElem )
) l& Z0 a! o' f# Y. D2 P continue;
) g* ~- p5 c) f) {" c7 ^ if(pItemElem->GetExtra() > 0)" m) F% ]! h$ e3 }4 s0 B6 `
continue;
9 X9 I! ?, i& i# ] if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 5 s& J) l) r4 X% x5 y
continue;7 N- z/ c8 k( O* Q" x; |# v7 w' |
if( g_pPlayer->IsUsing( pItemElem ) )
3 H4 B! W5 N2 X1 G& j/ [ continue;2 f; _8 M3 T8 M/ C- o
if( pItemElem->IsUndestructable() == TRUE )
4 C$ h. S) ?- _3 g* z) n {
- s3 r6 ^& e) k8 I7 W g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );% N# n) [9 I. A2 S5 R8 ^9 w4 b
continue;
. d# ~7 i9 |; L: p- i- S; k- O$ B" S }
) Q1 j5 G7 @( R- Q$ P g g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);+ q1 a: E5 Y4 e
}
! y$ ^1 ?$ x1 ]/ P break;
7 j- w: B2 M# w1 A* S1 F9 @ }
9 P6 D) T) b v* b7 I# {4 _9 X case 1:
( V% ~. R4 J) ^6 O/ i: t {8 ^4 E7 V) Z' n) n7 k8 P1 M8 l0 y# m
//整理背包
: A, q& i- S7 A* x2 T/ I4 i5 Z //////////////////////////////////////////////////////////////////////////
' k/ G: e6 ~, X8 m% X3 l8 M //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );9 ~0 O) ]9 }6 s8 f% N) [2 |0 A( H: e" q
//////////////////////////////////////////////////////////////////////////2 h7 |1 g* S8 c( K/ ~9 X
//////////////////////////////////////////////////////////////////////////
& W1 v3 |/ h! N CInventorySort* pInvSort = new CInventorySort;" I: X) X9 x7 { E# X) q" t
vector <sItem> vItem;. F" T8 a& n; i" M, w3 o6 C9 | U
vItem.resize(MAX_INVENTORY);//初始化大小
+ |% v3 E+ V1 U8 d# p- M2 P- E( z //////////////////////////////////////////////////////////////////////////
+ r" E# ` s5 L( M6 O% v //填充数据
0 G% H8 I/ B5 a0 p for (int i=0;i<MAX_INVENTORY;i++)
" q# G x' i) q {
5 `9 F3 V) h) V8 ]0 t1 A8 P9 I0 ~ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% r4 A7 p3 J4 U0 G; R0 a- n if (!pItemElem)
6 x% n/ l! V# L! Y" v0 e# t {' {, n$ L: `0 d+ I3 Y) G/ K
vItem.dwKind2 = 0xffffffff;$ W! f/ A0 Y. ]5 Y) n# t: z
vItem.dwItemId = 0xffffffff;& m" f' D2 ]! R5 B+ O$ ~
vItem.nIndex = i;- E$ O* ]1 t& [( U1 O$ W$ c# Z- l o
}else {
/ o# i" _- q4 o5 s0 W- [ ItemProp* pProp = pItemElem->GetProp();
/ x. i. y$ z- B vItem.dwKind2 = pProp->dwItemKind2;
+ d0 w$ Q2 k# q8 R! t! T vItem.dwItemId = pItemElem->m_dwItemId;
+ f/ C3 d9 A. ^% c vItem.nIndex = i;
- S; C. G# f' E2 j: r5 ` }6 [9 S; _- M# p# }2 }/ ~
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- y8 f' L! t, D, v L1 o5 P1 C
}
$ e+ d/ q+ u2 C( ^$ J //////////////////////////////////////////////////////////////////////////$ x+ I5 \0 k( H. ^7 l, M6 b# N9 b
sort(vItem.begin(),vItem.end());//排序1 u: t' C( o# c, y7 v2 \
//////////////////////////////////////////////////////////////////////////
" |9 @3 x( o5 v1 e //交换
5 u* P+ v, d4 w9 w/ Q for (size_t i=0;i<vItem.size();i++)
: v i, U( {4 u' ^/ K3 L1 M {
- ^" F; N! q: v1 ^2 N //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId); H( m/ I+ g- O& b" b
pInvSort->Add(vItem.nIndex);: U3 ?7 \0 ?2 |
}) u% n J: c M5 I/ H& u: }. e$ y
BYTE nDestPos = 0;
3 |$ M N5 K, F S for (int i=0;i<MAX_INVENTORY;i++)' @/ K: O/ P; |
{! S1 Y, W& R) V% D' s9 z4 J
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);. ^9 I+ u1 O2 ]' m
if (pItemElem)
4 s" x9 s( a' m: U {1 g% c/ m, _" e. W& p
if (IsUsingItem(pItemElem))
6 G. w4 o1 ?( u" _! w {
6 u" C* L( h' T* D //这个位置无法放: a2 j2 R. V* `( J i! H
nDestPos++;, @. y) Y8 Z7 n. g/ p2 d( s
}
5 |4 x6 y2 d, l1 |! G( |' d }3 I7 Z$ l! u$ w4 V
BYTE nSrc = pInvSort->GetItemSrc(i);/ I/ |6 W5 [' Y( C) ]4 s- T" y
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);, A- ` m1 M/ f& A8 c
if (pItemElem)) `1 ~9 q* Y, @* J- W! d
{! O6 t2 m; j b* a+ C1 D
if (IsUsingItem(pItemElem))
: r; e9 {$ \4 ~( E5 | {
) n# y$ R* _6 \5 q: F //这个道具无法移动,跳过
7 y) p! Z4 b6 T3 n1 B continue;
# u8 u# B- q& |& H6 e }. i" A5 J f, |
}else{
0 e" r) Z5 u" p/ n //空位置 不用动) u- ^- s [" @/ c4 q/ b- D
continue;
! h7 n: {. Z* c$ R }. W/ l1 z' U1 r, t
////////////////////////////////////////////////////////////////////////// u# V* `3 ~$ m1 h! B6 `5 y C
//开始移动, k0 L, e* t/ e
if (nSrc == nDestPos)
' s$ g" `& `9 y0 O2 f, L {' M( {* V) w+ j8 g4 u* M
//原地不动" h9 Q% ]( U; G+ c" y- I Z4 n- u% B
nDestPos++;
4 a) T; I# s# u* t; Y5 }! q continue;) {& l% e8 o4 l7 k2 {% d- `
}. J% t0 ? b6 o9 ^: r+ |* s: g: o
pInvSort->MoveItem(i,nDestPos);' e+ ~ i% D5 s' O) H. i
g_DPlay.SendMoveItem(0,nSrc,nDestPos);, |7 ]2 U3 x+ J
Sleep(5);
6 i: ~3 Y" I3 Z6 o. l" B$ {2 I //Error("移动 - %d->%d",nSrc,nDestPos);
& L4 ~" }, G- l' C+ ^, o nDestPos++;' a5 d2 m9 K$ R9 i# [/ X
}# U) V! q9 E- W- V5 g8 l$ |! d, I
//取第一个元素的信息
7 B) g0 C* ~; V& `. |7 U% w4 {1 Q /*
y% i" N% k2 y+ T( C; R g; d if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
$ m. f4 }7 n5 N+ W. f0 C7 z {
- ]( J0 D3 h8 K2 [, {# ` Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
# K6 N' y' {% x2 }: a4 ^ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);. ^! A6 P J( h. e
}, U* ]6 Q2 U! W5 f5 Z: A& I
*/! w$ u3 }; P# d& q- ]/ J% g$ y w$ Q
//////////////////////////////////////////////////////////////////////////
" p* l" B9 v% }7 r break;& a+ x6 L8 @2 M
}
4 _; h2 F2 K# @9 k4 o. h+ A8 n$ y4 k } : T% }4 @! ]6 s6 X# h& l7 h
}' K2 B! o9 }' T5 G2 i8 B
m_wndMenu.SetVisible(FALSE);
/ ^/ f( p7 e W x$ r
* p+ G, ?7 ^+ N' f# e# t0 a% Q5 n--------------------------------------------------------------------------------------------------------& K& ^6 R+ W7 P! l" g8 \# c
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
% o$ b- V2 V3 R3 w# j{" }* ^$ H$ v" @* z/ h9 O- w9 H* b5 p
BaseMouseCursor();& s6 Y, K4 F& o( R: l2 j
}
! M( ?2 n W, h6 ]$ i+ d在其下添加:
& |, g3 S2 M4 w$ d3 m6 {void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)# p( N) j- `" v7 }
{7 l5 G9 u9 y" n
m_wndMenu.DeleteAllMenu();
8 u- h' ]4 V, g; f7 h! M0 W- Rm_wndMenu.CreateMenu(this);. r8 e1 e. W( h% h0 M
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");& I; U/ N1 p6 t: [& X! w* Z
- |. u+ D; n( a) Z6 `; n0 I3 j
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
% A7 @! r. Q0 H' I' m; z* a{
( Z8 j0 f$ E, ]$ f- V* ^. y+ o //P以上级别才可以删除所有道具
+ o0 I2 E* d) o. |* ` m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");/ h7 T B8 N+ Q* u& z* o8 c
}# _$ w) ?7 U+ q' m' h
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );+ E1 X% A- W0 E9 t
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );6 R7 }* [ ^! ?, ?
m_wndMenu.SetFocus();
5 J8 D" E7 Z/ c# k3 }1 i}
$ ^/ Z0 m% B( @ g* z) T: T------------------------------------------------------------------------------------------------------------
0 h0 Y3 Y8 b& v+ u$ d' Z! Q*************************
4 a6 m- }) b2 i. e; v4 RWndField.h文件: W5 J+ r- ?% V
*************************
( g. V3 {$ I7 l! H搜索:BOOL m_bReport;
. q4 M+ y' J# p o6 h# `其后添加:
7 `3 \( `- w. \* P' {* ACWndMenu m_wndMenu;
1 f' L g& m" |搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);9 W$ r2 Z$ q0 L$ N0 F5 x4 n( @
其后添加: I. e6 z+ m& ?6 {0 D. J
virtual void OnRButtonUp(UINT nFlags, CPoint point);9 V. C; p% L9 v* i9 s( g I: K
: i- L3 c* B1 W& e" e' l" U& l% |$ {: k y" V
|
|