|
|
源文件中_Interface文件夹下WndField.cpp文件
; e/ F/ t5 ^$ g; E& _搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
- [. e+ w1 w. ^% ?$ ]2 _8 m: e) O9 j3 L. S8 ^( K( b7 d2 E
struct sItem
' O" z$ J! k% b# m4 ~{3 O; y9 `2 ^) E" ], G/ q. M
DWORD dwId;
3 w4 g8 A0 A6 X9 y- [5 VDWORD dwKind2;1 G- z: r- \; O" c1 i
DWORD dwItemId;
/ F$ h8 u) D3 S1 wBYTE nIndex;
% k) b; W$ @5 D" M2 N& BsItem(){
! c l b( O) N$ e6 r r dwId = dwKind2 = dwItemId = nIndex = 0;4 _7 j8 c8 a4 _
}
! z+ Z/ G" r, m, tbool operator < (const sItem p2)
# [+ M5 z6 ]) R, d: Q{, D/ I P# @4 T( @+ a7 R+ Z
if (dwKind2 == p2.dwKind2)6 A( f' h. M6 a/ ?
{( y5 B j) S/ L4 S4 G9 c/ |
return dwItemId < p2.dwItemId;" W0 g3 _7 h4 _( l1 O
}else{# Y0 s" l9 \% ~- O- x5 |# ?) |
return dwKind2 < p2.dwKind2;
# t% T3 R2 L) @: n% F' ]7 `! P }
9 D2 T m; z$ Z; A! C( u- r) _}
- Y. }* e) x' H7 n1 B! ]9 A/ X};: K3 _ V( {" m m7 o1 r
class CInventorySort
/ n% `* K3 K0 K1 R! j{6 G' C1 ]2 e6 P' P# L
public:
# ]5 N' Z; t* o% I+ RCInventorySort()' k9 t. ^! j" v" R' x# x; @8 M" C+ d+ S
{
6 D. y. }5 b1 y4 g- @2 w m_dwPos = 0;" G9 U5 E+ S, E4 Y
}# b0 P. p( W" O& v) [, u- l7 w8 [
~CInventorySort(){}
G2 Q& c' \' }8 l+ @/ _private:
9 u3 @- i& K4 h8 k& U% VsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
% F6 X& B0 l- K, qDWORD m_dwPos;6 y9 z3 `/ m3 |0 |! `( L- u
public:
) E4 B9 u3 x0 c$ {' K) Yvoid Add(BYTE nIndex); b# \2 z% Y* X) b" c
{
6 i0 T9 m" y( x$ i if (m_dwPos >= MAX_INVENTORY)
- ~7 g X; H2 d6 t {! G' H" }+ `( W
return;" R, c( n6 V# E! `/ V
}1 u9 B$ W% R0 I, S* b0 w, G3 ~
m_Item[m_dwPos].nIndex = nIndex;
3 H& k* d* c. o% G2 z m_Item[m_dwPos].dwId = m_dwPos;0 F! { `/ S* E6 o, B
m_dwPos++;
, b6 z" e! @/ k) S}
# V( j/ x/ D. G9 G6 gBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列& [2 }: n) G2 w4 k
{7 Y0 o( N. V' p8 q+ F7 ~# \' L
for (int i=0;i<MAX_INVENTORY;i++)7 q! b" {# s- } c3 u
{: C) s2 V9 X0 g4 N0 ?! _3 Z3 e
if (m_Item.dwId == dwId)+ j' s8 P: J5 \6 D
{
4 ]$ t) T0 z* Y' G return m_Item.nIndex;/ u$ y% [1 }% F" F" ?
}
( T& a0 z; ?) v" L1 E }
' o, s5 F* q! m/ v return 255;
9 K8 ^ {. A/ @7 F}
* X, A4 c2 C* T4 nvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置 w+ v1 h/ C' T
{
9 b+ m* _) r/ L1 _7 ~. V' \ BYTE nTmp = 0;
5 x' B( n& n% M2 F+ F2 |+ _ bool bDest = false,bSrc = false;; g& z! t0 @4 X2 _' Y3 _( I7 @/ D
for (int i=0;i<MAX_INVENTORY;i++)
7 |# z$ l# t! v- S9 r {% l; C+ v& F4 ?% N" u- |9 g# N
if (dwSrcId == m_Item.dwId)% h! x5 w, L- {$ r2 X; u
{+ C% z1 S5 L: M. x" P$ Z J5 S
//id相等 则 改变对应的dest和src4 w1 Y" [! q: n
nTmp = m_Item.nIndex;
1 Z) v0 C& k) b2 ^) q; X m_Item.nIndex = dest;3 t5 V$ |, e( ~; A, o2 g6 h
}
0 l& E% c0 G+ r" @$ M+ X, _ }8 p, H. q- @! f+ G% J; T/ X/ X& m# v
//临时数据保存完毕,交换开始 V7 a1 y% m( [/ d4 _
for (int i=0;i<MAX_INVENTORY;i++)8 P$ \: R$ y, N0 `6 V5 o
{0 X/ p2 y+ s* T! k
if (dest == m_Item.nIndex)2 a! Z# ~6 p9 z& [+ c, C
{' k* `: c& n& {" H+ H
//id相等 则 改变对应的dest和src& Y" F8 o/ }! \
m_Item.nIndex = nTmp;
3 M$ b7 ^% y% q% W& F6 q }$ @+ \) Y$ e5 C `' y7 |/ h
}
7 _# g( g4 y* g- d2 X7 e}
8 b& {- \. W* t8 k3 f4 {) A, e};5 L8 I9 c, p2 S8 d7 W6 u
-------------------------------------------------------------------------2 f: b5 F2 D/ H
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ d3 Y1 B t$ _+ s7 ^
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
$ k# O% `) n. I; _8 k紧靠其上添加:
5 U. _. p5 b3 R/ g: a/ ~if( pWndBase == &m_wndMenu )
: |, F/ q$ N. M, o{
. W. p% y. F0 ?$ O* n( n& l: E) [ switch( nID )
) K8 ?* }7 z5 h" Z" V) Q7 B {4 t! d$ F$ {9 _+ i6 K$ d9 G
case 2:/ e3 l6 K( S) }: H, R( q ]. J* k* T, g
{
/ s; n/ M! j0 X c //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);, @+ P7 T! s$ q+ [7 Q4 b: G
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- n1 @) p! `9 L# O% f2 d. @$ t {+ k3 B. _- j# L8 E0 j' ^3 [ f$ h; {
break;
$ e9 D9 @3 i' z- ]' R }
" w) c5 _1 Z B% i$ A for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)1 q1 k/ e. ~2 E. }$ x
{+ Q; \4 p" w# S) n# M- K
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 j, q8 j5 I4 _# u7 f5 d5 G
if( !pItemElem )& O( T9 N2 j$ r! ?
continue;
! V6 i# S0 n8 \) J; x- T( n: K' F. L if(pItemElem->GetExtra() > 0)
4 Q* ?7 [, k8 h continue;5 u( h Y* U i) m* j" d
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) - P2 c8 _ b$ q- x
continue;
' g: a! l* o9 [! l if( g_pPlayer->IsUsing( pItemElem ) ) i+ i3 t7 `( L0 q) M0 X
continue;$ q3 I$ D8 j0 R/ u
if( pItemElem->IsUndestructable() == TRUE )7 K: x( e/ ]- D7 Q8 [3 q) Z$ U
{
0 g6 U6 h+ f! b+ D8 r/ F g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
; ^3 ?4 u% J6 R9 P- ]/ L. S& v- X continue;9 A) d2 ^/ E, x& I
}
$ \3 B3 T7 m s0 z( S5 W g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);' u1 a! G1 m, p: W5 n+ f5 s& U$ I
}
, ?' }2 `. V1 i' k" t1 B$ \; I- t break;2 g% U. g! C: N) ~: B
}6 L, V+ j6 b# b# I, y$ V$ a
case 1:
, ]& R$ {+ l0 h# }0 L { m6 |, Z! J! e( H8 @
//整理背包% b/ O1 E4 X- X* R
//////////////////////////////////////////////////////////////////////////
0 W) q5 X: ]5 b9 m1 g, ? //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
" w; k2 w4 l9 t4 R //////////////////////////////////////////////////////////////////////////
8 V9 W/ @7 k1 K* T: Q //////////////////////////////////////////////////////////////////////////
* z" D. w2 R1 { CInventorySort* pInvSort = new CInventorySort;# D7 I* g' q+ p0 M0 w0 U
vector <sItem> vItem;6 t& n8 z. J2 V. w- }( l7 ~
vItem.resize(MAX_INVENTORY);//初始化大小
* A) E' {6 G. H5 {* N //////////////////////////////////////////////////////////////////////////
0 o; ] b* e- \" q3 n //填充数据6 U6 H9 E: h- [6 |
for (int i=0;i<MAX_INVENTORY;i++)# C4 g8 n4 X4 l' v* [
{
\- _- Y6 r8 O- e: R2 ?9 }; _' e' ] CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* {! Z. x# G- r0 Y& e0 r: r0 m+ B L. W. {
if (!pItemElem)
5 d% @) N E+ v7 _# c) ], v; f r2 Y9 i {: i5 b7 b, ^$ \- |+ D2 e
vItem.dwKind2 = 0xffffffff;; T" `( A5 g/ v7 \( k
vItem.dwItemId = 0xffffffff;
- s! Z: T9 f8 M) Y1 o vItem.nIndex = i;6 k! V- i' o9 N' Y5 f: j
}else {: }5 U6 _( ~! N3 t# R) j- X; K
ItemProp* pProp = pItemElem->GetProp();6 g- U7 j$ Q. z' |$ `# a6 y
vItem.dwKind2 = pProp->dwItemKind2;8 c( I* j( f1 [0 z0 A
vItem.dwItemId = pItemElem->m_dwItemId;
' {1 y3 |9 v1 Y) s vItem.nIndex = i;3 I, _: h9 ]- W
}
% u, C f" S: W" }* v //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 N7 |5 B. f! m/ j2 S
}/ o6 H2 o/ u5 M. w) s' f
//////////////////////////////////////////////////////////////////////////
, T' }$ `; P5 @- w; F sort(vItem.begin(),vItem.end());//排序
4 L8 ^9 X1 A8 i* ^. f' d7 a //////////////////////////////////////////////////////////////////////////
& @: H* e$ d2 [3 b' D$ N5 K //交换
0 W' ]- ~% u7 T9 m% M n) o for (size_t i=0;i<vItem.size();i++)" q( T4 Z2 N" W0 G
{4 M* L+ q; G% Y& F
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& Q* d5 t% D0 k
pInvSort->Add(vItem.nIndex);
9 G; ^; n& u( m+ ^ }/ Z k5 Z4 F- l" t# B9 e
BYTE nDestPos = 0;
/ d1 l% M4 d: j$ O6 b) p& Q) U for (int i=0;i<MAX_INVENTORY;i++)5 {) M' |) [: y( g. k
{
* ~: \- t) [- j5 ^9 x) _$ y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);1 Y% U& e+ P8 Q" Z
if (pItemElem)
4 ]/ a: N# }9 o {$ i+ r1 ~+ }% V& y( X9 C
if (IsUsingItem(pItemElem))
- H4 @- n( G: x- E# c; M {
7 W2 B! e9 ~6 B3 G7 u* d7 p8 ^ //这个位置无法放
# M7 ^' ~0 M% O nDestPos++;/ u8 n- k ]5 L, U
}
1 Q0 K. U) @5 V$ T% |2 @ }
% }% d6 L, b' f% l* `9 a5 n BYTE nSrc = pInvSort->GetItemSrc(i);
+ Z( C1 o2 ~- _4 f0 O A2 m$ O! U1 e' i pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);9 Z$ h6 F) _( _2 E' B* _/ N+ w
if (pItemElem)7 ?1 A. S6 c5 V9 c8 z, T
{
* E1 l, C9 C# r& \: | [! ` if (IsUsingItem(pItemElem))7 j- C8 H; v- U. R9 F" ]# [! F
{
3 T$ \1 ]4 z, b //这个道具无法移动,跳过' ^( m" o* z) [2 y W9 F
continue;
/ n+ E7 O9 u- L( m5 ^ }( g5 d V( P5 } ?! P
}else{0 b9 v/ R% c* i- u
//空位置 不用动
0 N+ q5 v5 h- U7 p" s continue;1 h. G# n9 u2 h1 S( C! v) I
}
" r$ Q- Z; I4 D3 ~* z; J% Q& s( a //////////////////////////////////////////////////////////////////////////
- Z) K9 N2 L3 ^1 E$ k' B //开始移动0 U5 X3 k( y0 _4 c* b5 u
if (nSrc == nDestPos)) l) o9 p/ Z+ W
{
; p8 q/ T9 Y0 `' V1 G, @; }6 ^% x# _, P //原地不动
! ^" k& _; c$ F! y. w nDestPos++;8 h1 c+ q: J6 [9 ~2 b7 z
continue;: Z+ x2 J0 }) |7 F; z) f9 F' J
}
: ^1 j! x) \$ N4 V4 ~* I pInvSort->MoveItem(i,nDestPos);$ o9 i' q, h7 G* z: |
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
+ e! H: {- T5 M) O; c+ e Sleep(5);4 b# r' X& Y" K
//Error("移动 - %d->%d",nSrc,nDestPos);
1 l$ j% K4 r' k nDestPos++;
1 C ]/ A. y9 W8 e0 j }
* ]6 w4 i, E- O0 Z& l- k2 A //取第一个元素的信息
2 O$ y& p2 W8 R# F ` /*
: c; \5 @, K2 z2 {' p if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
: m& X& E3 \& z: \ u4 ] {
% d7 }. N6 }) C' W4 q# |# h Error("Move - From:%d,To:%d",vItem[0].nIndex,x);$ _# i, |* B& \' x/ K8 U; m
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
' e, Y8 x, X% { }
) U6 f; K/ z$ O+ @4 Y% { */3 p0 z" S7 J; S6 T* U
//////////////////////////////////////////////////////////////////////////7 F: A# i. `4 j# C: D
break;
- W1 _. U. j7 J! C5 {- _ }
7 i/ k/ b, X8 U2 q8 i' l% O% z } # x; }- }$ C/ e% L0 d8 F h' M
}
, E1 Z0 ~( w7 M& c jm_wndMenu.SetVisible(FALSE);
4 z# ~! B) f' `/ n- f n8 G- Z2 `3 ^4 B
--------------------------------------------------------------------------------------------------------9 u# z) Z$ q- {6 Y
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)- g5 g: }' `% U* e. S" z" p
{
$ T. s5 t% U1 k, J4 lBaseMouseCursor();
6 C& [( @' A) W0 N; j4 V}
g6 b( C7 \5 H在其下添加:
7 \# J! ^3 }! ^* a: V& wvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
5 B+ ~ g0 d5 P% n{% d/ ~2 n, w2 P. m9 Y
m_wndMenu.DeleteAllMenu();
% b9 k4 T% w9 Dm_wndMenu.CreateMenu(this);
) c3 g" W+ i! Hm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");9 x7 t& q2 N: r- H; ~8 d1 A0 B, q
2 L4 G/ u5 N" L- f, L! E, D( x
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))- {' l9 t( D9 w8 p( b8 s4 o
{, f- H$ Q) o8 x9 V9 |& h
//P以上级别才可以删除所有道具% T5 z1 T& E: F/ ?) R# a
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
9 Q j" @. M; X3 }& X}
- u! F8 _. v3 n, `+ y$ a3 v. [4 Rm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
7 X" T5 W6 l; Q8 T. r& ]m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
# l3 L* ~9 G# ^6 k' k( k, sm_wndMenu.SetFocus();
) E) E" X( y0 m6 `+ u0 T! u9 Q4 Z" v}; O0 p8 c0 r# x
------------------------------------------------------------------------------------------------------------3 ?/ d# T/ ^. E1 f, i, N8 S9 \5 L
*************************+ ]( C2 L/ y5 B
WndField.h文件$ @4 }! F0 R; R
*************************
: V4 M' Y6 l! W3 w搜索:BOOL m_bReport;
, ?) ~1 I9 F u( `1 M6 w0 @其后添加:2 N3 _* ?. R% l+ [. |& m/ P
CWndMenu m_wndMenu;
+ x. M5 i* J4 ^& @8 E& F) k, Y搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);3 m: @+ _4 n4 a8 h9 p# B: @
其后添加:; ]# k, T+ _) k* t
virtual void OnRButtonUp(UINT nFlags, CPoint point);
+ L) e: ]( D1 z2 k* p: V
% j' l% H& S+ s) S7 ]5 N: y4 {# g* }
|
|