|
|
源文件中_Interface文件夹下WndField.cpp文件4 O7 O3 m* z3 ?: |4 `/ l
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 M- s$ s( N! L" h" N4 U
% F6 ]% T+ \4 W9 fstruct sItem
7 _6 v: g6 z6 V" D7 c2 h{0 [' W3 E {+ G
DWORD dwId;3 Z" n- X" c8 r. ]- C9 M
DWORD dwKind2;
$ x' O/ T% M! } xDWORD dwItemId;, X- c6 A$ A, t8 d
BYTE nIndex;9 Q/ ^1 F; i% V7 A1 F
sItem(){
3 h- {( I6 o1 N dwId = dwKind2 = dwItemId = nIndex = 0;/ @1 P' r, _. n$ x( M# j0 u
}
& e8 J7 {& c: [bool operator < (const sItem p2)
& h* U! i( f6 B$ m{
9 [ O" w T1 A7 c5 J if (dwKind2 == p2.dwKind2)6 ~6 V0 j) j1 R! `& @$ ]' I4 H
{
5 X) F7 _( t' J. [ return dwItemId < p2.dwItemId;
$ G9 h5 ?: N! h2 q" f }else{9 p$ z( A }0 i! N* P
return dwKind2 < p2.dwKind2;! s( |0 i6 V, h8 L2 R$ D1 E
}/ F% b2 b7 Y& R# ?
}
5 U4 z5 a0 ^6 ?8 F1 T& p! w};
, @0 O2 O( ]/ \+ R2 T6 gclass CInventorySort
# d2 `5 r4 j# C) I7 D3 q! h{) w( q% k& n9 x+ W% _
public:
9 s5 S* W5 k' c5 B% {CInventorySort()
- l9 c6 G& [1 |7 H3 c4 b- T: x{
+ W; M ]' K; ]' q7 \ m_dwPos = 0;
7 a) Y" P" u4 C% Z3 Z D}" [& {: [( P6 q9 G! S6 y
~CInventorySort(){}, b! i! V7 [, H
private:& f0 w( E$ e' l; b
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
0 a5 o. t0 X8 x; K: I* }DWORD m_dwPos;- g+ C" C, ?$ R. L' O% r5 _7 P
public:1 m: e# Y& ?7 j
void Add(BYTE nIndex)- a# l* i! u1 N, ]* z0 D/ j
{
8 W( }# m6 d1 u2 j( d0 j$ @ if (m_dwPos >= MAX_INVENTORY)
7 a) U" `% V1 [ {
" O# C' f2 H1 m" }0 P( b, D return; h3 [! J# e; ?+ ~" s
}% h9 I: ]: g" d- l* S8 Z+ Q
m_Item[m_dwPos].nIndex = nIndex;0 W. p2 x% ~: S
m_Item[m_dwPos].dwId = m_dwPos;, M3 H0 R/ @+ y3 P
m_dwPos++;1 L% ]* r2 i k8 O2 |% R
}
/ b9 O- B( p r/ N) W+ _, [- u+ MBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
) z3 ]4 z6 M( g4 D* W{( w8 I9 I3 I0 u- i5 @1 x
for (int i=0;i<MAX_INVENTORY;i++)
! b/ s' { O9 k8 b5 u+ M( D. c {
; n# y/ O- Q/ q/ E if (m_Item.dwId == dwId)
: R2 b+ ~& R2 G8 Z Z9 S, D {
: q$ d% [* f/ x return m_Item.nIndex;; J! T% ~1 c; X
}! b7 L9 t: a+ t4 J
}( M0 u% v' k4 a1 o6 a) K
return 255;: b2 ^( Q' C5 ^5 R+ ]+ g
}
6 g0 I: B6 }% |2 d+ t/ [, Pvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置* ~$ k' w9 V, B" S+ X* s" ~
{
! {* ?) {3 l' s. S7 | BYTE nTmp = 0;9 U, m0 a D8 y Q
bool bDest = false,bSrc = false;0 g8 S' t& o- v
for (int i=0;i<MAX_INVENTORY;i++)
+ y" t ?7 U1 `. x4 }- S$ ~ {1 F$ ~7 k$ W+ n. x' J
if (dwSrcId == m_Item.dwId)- ]- j9 N9 I* x9 Z/ M
{
! m; d' B: h' z7 r //id相等 则 改变对应的dest和src* Q x" a0 S8 M
nTmp = m_Item.nIndex;3 R! O w2 E+ A: t/ O5 T
m_Item.nIndex = dest;0 L7 u" u1 R; G
}
5 ~* M/ P- r" ~# d# Q }
7 e9 T7 R+ _; n: u% @" y* N' g2 E //临时数据保存完毕,交换开始! j# e8 H g: @: x( S* `
for (int i=0;i<MAX_INVENTORY;i++)1 E- T9 \" B! |% ]
{
4 _& G; c% l: ~& o' n( U if (dest == m_Item.nIndex)
8 E8 g2 E; T, h {# ~; d* {' g- l c/ p5 ^
//id相等 则 改变对应的dest和src
" B2 x. A% A0 c2 M m_Item.nIndex = nTmp;
6 m. \1 V( e9 C4 z* C }1 q( b6 ?$ Q6 ~' R2 m9 d
}
; l1 d1 ?. D2 s+ s# z}
; e3 X8 z6 H. [5 k. ^};
/ T, p& Y0 \/ a' N-------------------------------------------------------------------------
5 j8 L0 o6 k( l# {/ h- }8 V/ @依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) z9 j$ c" z# e* p搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
1 q% h4 L# s8 ]) W6 x: f" @紧靠其上添加:
h" E" K K: @2 D7 m, Fif( pWndBase == &m_wndMenu ). Q; X6 [) K' i' l
{
3 \, m$ d7 n. n0 A& P( c F& \1 D! r switch( nID )
2 }$ p( S* t& B& z0 |! U. m! O {
6 n: `* e* h, i7 n* ^7 c case 2:. f$ @5 [5 i S C
{6 l1 T# w& J! j5 t9 E6 f
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
/ L4 u- Q' e8 r if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& i" f; u& C! K8 @( e. p {& I2 z$ @' K7 X) W" D
break; i; r, ~+ i, ^
}# y" z" D; C6 }+ d, r/ n
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
, A! y: X$ s5 z+ W0 a4 R U {
# a6 q. A5 z* s8 n9 E CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ o- C: g' e+ O: D
if( !pItemElem )4 t4 E2 z3 Q; i
continue;6 ?' Y) I$ N( M( Y
if(pItemElem->GetExtra() > 0)" t1 H4 U6 z" N. r i& c: M; J
continue;/ i+ q' C% X: |( J9 h' Q
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) * R9 f9 q: v0 w3 I
continue;
( _" V! f3 v G if( g_pPlayer->IsUsing( pItemElem ) )0 f1 V1 S4 w3 b4 [ o# c
continue; C+ X( V) n! p
if( pItemElem->IsUndestructable() == TRUE )& ]& H0 \5 @8 S! a7 ]
{
: }! {3 ~6 n0 R0 ?$ a$ e g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
, E# M' T9 Q7 u& c' a continue;0 w v6 X3 b1 N# N
}
6 ~1 m: a7 i& T, {' d3 ` g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
8 [) q9 U6 O$ |! e& |" F }( b1 @% I. {6 t% Q# L
break;
% w1 I/ U9 [6 O2 {: P0 X, J! b }
x7 \9 x; L8 J) O+ _ case 1:' m1 f* ?4 \$ L
{
4 B8 |" Q, S6 k3 J1 X //整理背包
& a/ A! o) q; D //////////////////////////////////////////////////////////////////////////
* b" g2 k) V$ M2 Z# H& D' ` //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );* T, U. p8 O4 T$ M! r
//////////////////////////////////////////////////////////////////////////2 t' Y- T3 c+ \6 N& q5 m
//////////////////////////////////////////////////////////////////////////& W# b7 ]' @7 R) c1 P- Z- z0 [
CInventorySort* pInvSort = new CInventorySort;
4 c( @4 Q4 V& G; Z vector <sItem> vItem;' \5 F+ K: ?2 v2 @( K# R
vItem.resize(MAX_INVENTORY);//初始化大小: P- ^$ W2 H; n3 j, x H
//////////////////////////////////////////////////////////////////////////7 I6 K+ [) ]: M2 n9 l
//填充数据
! _2 u3 X' y% M n% [ for (int i=0;i<MAX_INVENTORY;i++)# A9 v+ Z% n8 Q
{
* I* V; u7 q5 M, U8 ^ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i); @% E0 {, ^% a) t$ V
if (!pItemElem)
% P) Q k: K+ ]. n `& U m {5 n \ y! E0 U7 n
vItem.dwKind2 = 0xffffffff;; ]! ]/ `4 \) {: S% W! }) a
vItem.dwItemId = 0xffffffff;% S h0 u4 w' P9 f) B+ V9 z
vItem.nIndex = i;
4 r# O, Z' I% J8 r6 Z! l }else {$ B0 x1 q' J1 j6 V% R2 B% Z
ItemProp* pProp = pItemElem->GetProp();5 h3 O+ J' L) Y. O6 k
vItem.dwKind2 = pProp->dwItemKind2;
! d/ Z5 R8 ]/ d vItem.dwItemId = pItemElem->m_dwItemId;
; x, k$ P) b6 N; K" ?3 W vItem.nIndex = i;
5 }9 t- f3 n7 `* z }) L# J; r* @, ~, U
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# F% J& I( f3 y; b, t }" h1 J( c# H; a V9 h
//////////////////////////////////////////////////////////////////////////- v+ }: p0 p/ D
sort(vItem.begin(),vItem.end());//排序8 X9 n5 Q% [8 B2 s
//////////////////////////////////////////////////////////////////////////
& g3 n M* P) l/ _0 s9 z$ P //交换
b+ t0 V `* O- Y for (size_t i=0;i<vItem.size();i++)
& X4 y+ e* `$ p, ~3 n0 L( G {
% ~6 T$ _ L# E0 l0 W //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);) P4 X+ Q5 X/ j6 l' v1 l
pInvSort->Add(vItem.nIndex);
# T1 L2 B( v9 h2 h4 X: t: u }
8 V1 X' v8 G- Z BYTE nDestPos = 0;5 Q0 x7 H& F% ~' v/ ^) f! H+ o
for (int i=0;i<MAX_INVENTORY;i++)
* C! b' c. v4 L6 _# W' L {
1 v; U' n6 L; u/ R& i CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
/ E: g" X) E9 t if (pItemElem)& e& q* p, g) ?( D
{
+ `' q! \* `$ |: e" M9 d if (IsUsingItem(pItemElem)), y% i Q/ I/ F$ ?* p n, b
{0 x0 w V; G: i8 O+ t+ D
//这个位置无法放( \/ z, ~7 ^4 V( S! i/ J) |6 I( g
nDestPos++;9 ?* r5 f) M+ }" L& u( j8 B5 N
}
& O9 @% U9 I. p1 R+ s }
# m( [4 `; o( {2 Q0 I! I/ r0 D& m BYTE nSrc = pInvSort->GetItemSrc(i);+ b. L: _7 C5 ?4 m. [0 Z
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);5 g" P; p$ ~* L& t; a, `+ u9 `$ _
if (pItemElem)* g6 d/ d& x, I+ E) J/ ^
{
0 A: _3 m- Q e+ Q2 k% [; V if (IsUsingItem(pItemElem))4 D. O% Y2 O2 n9 [% y* ?, D6 l
{( \; P8 j8 w) _7 g' i: y: l
//这个道具无法移动,跳过
7 }7 M$ Q0 F( _6 M) D" N" p- G- r4 A* s continue;/ O( K6 z i4 s+ D0 ~
}+ q* L4 G; l9 t4 G% D6 x$ I
}else{$ E `! b5 g' r* }( {6 Q# b
//空位置 不用动& W7 M" z V" s. N- ?
continue;
6 E0 n- d; V \. d9 z9 `' ^ }
: j/ i5 P1 e- C0 v //////////////////////////////////////////////////////////////////////////
$ x& F; \2 S1 F, n: S$ p i" o //开始移动; U+ d" S0 b: J: p* H# k
if (nSrc == nDestPos)
* L6 n* T* z! |8 m+ s5 l% o5 k {" J. m, Y& S8 O* c
//原地不动8 u) ]% {& K) o( `# b6 Z' @& X
nDestPos++;
. s& H2 T, [/ v7 _3 @6 m. `- s continue;( `3 [' i$ p5 J
}) S F/ F# q; o8 |- T
pInvSort->MoveItem(i,nDestPos);
" Y' m$ U, P" }8 z: y! W& N3 {. k g_DPlay.SendMoveItem(0,nSrc,nDestPos);
: n5 J S" [# C! P( q Sleep(5);
* ^- { ^, K- R" b7 d/ M! e //Error("移动 - %d->%d",nSrc,nDestPos);7 \1 y: x4 C) ?) S
nDestPos++;. h' Q8 l G% T: J
}, Q) `% `$ G& Y
//取第一个元素的信息+ S% S' y8 ]: ]/ G* [7 ~
/*
+ d5 r- Z' `) V7 M if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
. i V. X. k$ \" a# u. k' v+ ]9 d {. w" {. Q7 b5 e K- \ U3 W
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);6 i6 M n5 |5 H% F6 h
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);' O( i5 ?; _& |. h6 X4 a+ V
}
0 M! h" T" [' ^+ A, q9 O */
! |6 P3 f9 m4 D% o/ ]7 ` //////////////////////////////////////////////////////////////////////////$ {! t8 E W6 |% S; B2 X. y
break;
7 F3 g; k- [5 @& ^. G9 \/ G }
3 ?$ p. L1 J6 K5 E# a; X( G }
. u% L% g( X& q+ T- K2 {}
' T: U ]6 f w! v% _# Dm_wndMenu.SetVisible(FALSE);
0 E5 ?- l( _0 f u. J/ l9 U' n1 c( |' O* [- G
--------------------------------------------------------------------------------------------------------
/ h' l2 R$ e+ {7 W" m D搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point), j. R) x- E+ R* V6 s' j/ H
{
. `* g/ k- x' T8 O% v& gBaseMouseCursor();' S; ^0 h0 }+ v) o( G' w7 T: l
}
7 ?/ C* N4 f a9 l在其下添加:6 Y* h7 i6 I1 V; K* \4 D
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)$ O8 u* z. V) `8 R w
{
" Q K) o/ J5 Qm_wndMenu.DeleteAllMenu();+ f7 d) [ ~7 c4 U
m_wndMenu.CreateMenu(this);) O/ ]4 b3 l5 c! h# v" ~& F+ q
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
% L; R: p' o& g$ [5 P4 j. i3 K
! `/ F) d+ n# A" v1 ]: fif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)): O* o: K: T0 g( W+ Y- P1 Y9 ]
{5 S8 M( e& V2 P0 @6 V
//P以上级别才可以删除所有道具4 p% t) Z# g5 v, M6 l; V
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
4 E. D S( M% r2 f& q4 }}2 O0 m7 ?7 K+ Q
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
6 |" t+ H m/ _# Y4 ]- tm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
' d6 u8 E `4 Y g, Q3 H6 xm_wndMenu.SetFocus();. E, j) D: y z! G' D
}: b8 {) ~( ?$ S2 h- x/ G
------------------------------------------------------------------------------------------------------------" P o1 t& ^% Y
*************************
! l e1 S# I8 ]WndField.h文件
# [* \3 T" o* I1 r% N" t" v*************************+ Z+ j7 T3 z2 I
搜索:BOOL m_bReport;/ m) I# _# v% g9 H8 y7 n0 p
其后添加:
% L' O( j P; j/ iCWndMenu m_wndMenu;
n; S- n; R Y; e. P搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);5 ?' C. P# m% O
其后添加:
) a# h8 o+ L/ f4 ~$ ]5 t! o6 cvirtual void OnRButtonUp(UINT nFlags, CPoint point);
/ M7 e2 N! G# t. r
0 i4 N) s, P( Y
4 _* _- }0 A3 j7 O$ G$ t |
|