|
|
源文件中_Interface文件夹下WndField.cpp文件
) x; X" p% s0 ]! e搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 w5 M6 d1 ^1 p; Q6 B$ K: I0 z
7 [- W" t: A! k3 E2 fstruct sItem u$ N8 q* {+ V% s; T& `4 _! `
{
$ O% [/ j5 s8 ?, {8 g% j1 lDWORD dwId;. Y& k( L3 E. t' D9 |0 |. M
DWORD dwKind2;
* h/ V; f, V" J8 S. h2 a( G9 xDWORD dwItemId;
6 _0 S& j# D5 ^+ P0 ~3 ~BYTE nIndex;
$ H$ N0 ^1 `/ @5 I6 wsItem(){
6 h8 w( M# T' R% { dwId = dwKind2 = dwItemId = nIndex = 0;
/ `2 Q" ~ Q! H9 `; D}
& V% R" o! L4 O1 ^0 C& ~bool operator < (const sItem p2)- R, ^# g4 @: i& \/ c; F
{
. G- A+ e7 f2 V, {4 Y1 U4 k" S+ R if (dwKind2 == p2.dwKind2)
; f0 j- J2 |* R& X" o( ] {
# j+ G- `9 K8 X6 r% C5 k return dwItemId < p2.dwItemId;5 ~8 B+ U3 B4 @' Y8 G
}else{
F- G* ~ ~; F return dwKind2 < p2.dwKind2;
3 _/ w" a: ~6 L }
5 o% `. R& ~8 x. Z6 s1 |}% [8 o- a* n7 `
};+ B! U7 ~, U7 `) k! w7 e
class CInventorySort/ V' c+ S1 F& }9 g V
{
" K0 b8 d5 }4 N2 N' l3 Lpublic: w& {; R! H5 I1 E7 I- _% E
CInventorySort()
$ } u& `1 ^0 X{
5 F1 J g" w0 {; W/ ]5 Q m_dwPos = 0;# G7 @1 x4 S6 u7 p* l; v
}! Y* K- \$ `# P
~CInventorySort(){}3 a( ~6 L! z6 R$ T* `9 n; B
private:
8 x, ~* n& S0 d; LsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息3 f+ G) U* M8 a. {6 }
DWORD m_dwPos;
8 o$ b: a' {# Q) T- ?0 Dpublic:
+ K, q* w& W3 ivoid Add(BYTE nIndex)
' W% i% c% k4 a7 v{; B! @' d& r6 R/ E" b
if (m_dwPos >= MAX_INVENTORY); Y8 C. ^* y/ e8 Y/ F" M
{# h, Z8 N" E6 \# w5 _1 D$ {4 a
return;
: X" f6 ?" y- N* `. e J9 c+ ~7 J4 e1 u }5 N) R# i: [$ {/ ~' S' }( Z8 ^
m_Item[m_dwPos].nIndex = nIndex;
1 k9 ~! Y, S9 J+ \& ^ m_Item[m_dwPos].dwId = m_dwPos;1 w1 _( m S, Z
m_dwPos++;% x$ ?7 n/ V, D4 d" v
}5 d; i/ M% l" T9 Z' u Q
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列/ r' H; T& h- f( \4 \! M4 a
{
3 }9 c% v% w: L1 ^5 T t6 m for (int i=0;i<MAX_INVENTORY;i++)
$ U8 _( ?3 |4 Y { X. ]! V/ k8 U0 y' V2 l
if (m_Item.dwId == dwId)
$ g$ }) {& w6 `& I/ N4 G {- e% t& ^. Z0 w& y$ {
return m_Item.nIndex;% [' n: Q0 {2 w! V3 A/ i
}; R" D P$ }* U
}
' ^1 i8 y8 `* m3 w. S& C. f. E return 255;
! y! d2 S' K* [7 f7 B- P}
- ^: d- t2 A. s% u! V0 dvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置6 K8 N" g% E# }: W# V
{
9 O. z! Q' ?3 S* z+ t) X6 C4 m" B BYTE nTmp = 0;
9 j- L$ a! {. ?* D! J3 y- e8 }, w bool bDest = false,bSrc = false;
/ a+ U7 L# z5 P% v, `4 { for (int i=0;i<MAX_INVENTORY;i++)
4 D6 f2 m8 j7 k w1 I' d* h+ j {
5 L* C% c) A8 R& ^; v5 a if (dwSrcId == m_Item.dwId)
% |" \ [$ `' u2 u0 \# v {
% ]1 D! B/ G, {/ i" \& ` //id相等 则 改变对应的dest和src
6 |# j9 Q, ? z1 [: C( t+ W nTmp = m_Item.nIndex;
J7 m& g7 O9 E7 j' _0 Y1 W/ Z m_Item.nIndex = dest;) q0 \, M3 M1 L4 ]( @
}0 k) S4 j% Z& T4 d3 ~: @
}
( m6 n) j* Z& l" r. { //临时数据保存完毕,交换开始) h x _- y, w4 y! f2 r
for (int i=0;i<MAX_INVENTORY;i++)
& X0 ^5 x6 u) C( L. I8 ` {* f' k2 W, r5 R
if (dest == m_Item.nIndex)# S' w: f7 C. r
{+ _1 ^. ~$ z' v) p. d
//id相等 则 改变对应的dest和src- Z0 p; E( e2 c7 \, d$ v. U
m_Item.nIndex = nTmp;/ j) L* t( l/ |$ f9 i
}7 `* m( A) q% W
}
6 _4 c7 Q6 j. k}
# U" u6 J) X! G A5 C+ f};
& w9 `* V/ @5 w-------------------------------------------------------------------------) P3 t9 s. ]" g
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )* }( r! K) _1 T: I: X
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase); e7 p0 ^: W5 N. q
紧靠其上添加:
/ s0 r& d8 T. w, j- @; oif( pWndBase == &m_wndMenu )- G+ p5 l/ H, T
{
# [. X( a2 s, @! q y3 K switch( nID )
, w4 ^ z0 v# x6 Z& N {
- d3 @0 S" u) }* M' u9 c) L case 2:
8 c$ {' e4 v; z) ~' v* _4 }# z {
6 f' t1 X4 L1 A' _8 _9 k //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);2 c0 `& J" p0 a7 n0 H8 G- |! H3 {. E
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))7 k+ \5 f, w! `& [# D+ M, p
{
9 u1 \0 R: o4 z2 U" p M; o break;1 j- G( b& i, j* G, L
}
' g* y& l% b( L% \' b1 p' d) e# Q for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
N3 n/ K0 u! O5 J, L {# Q, ^! K: X8 Z# V" |; R6 f
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* i7 n7 u. m1 A* l R4 ]7 s
if( !pItemElem )$ I/ e# U9 k! Y/ J; I
continue;
: H8 S& q1 L0 k# O if(pItemElem->GetExtra() > 0)
& u: p0 `6 b/ M7 T. b continue;
- m0 J T3 S8 ?( h6 C& F5 S; k' ? if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 6 V9 R' R( X7 T% Q
continue;
# h f T5 C( O0 t if( g_pPlayer->IsUsing( pItemElem ) )+ V& g; {2 C: ?
continue;
; A4 l; R; x1 l0 n2 s6 G' B4 | if( pItemElem->IsUndestructable() == TRUE ), n* \4 Y8 N% E7 k; `. P$ r* E, M
{
% ?9 [) r+ |# O6 z# _. }* Z& p) n g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
% C p. c3 S% }$ S" S6 r, ?$ } z continue;% O3 |, @$ a9 W. u. z% z' {, y
}$ B- ^/ z/ M- f7 P1 a$ h
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);- R3 f% t5 H+ L
}
- }/ s; R: v3 ]2 \0 U4 _ break;
) R: T6 N6 E* M3 f _ }# E8 ?) c% K& K% l
case 1:% O- v7 \7 T: w
{9 }" u5 P2 M9 r9 g% y9 ^1 X3 n
//整理背包5 X0 l1 Z1 |/ p& E
//////////////////////////////////////////////////////////////////////////$ {. I9 e$ t0 J4 g$ u+ g# W
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
9 M2 X7 P* O' l //////////////////////////////////////////////////////////////////////////7 z" S2 g* e6 f( r" ?" F9 D
//////////////////////////////////////////////////////////////////////////* h$ ^3 G( C; H3 S' ?/ G5 B _
CInventorySort* pInvSort = new CInventorySort;6 V3 p7 v. B5 W& K$ e% ]4 f& v
vector <sItem> vItem;
K1 r) w/ ?* A4 l- i1 {5 K! t vItem.resize(MAX_INVENTORY);//初始化大小
: V# S# C, ~1 z( c$ d ?1 F+ m //////////////////////////////////////////////////////////////////////////
! S: ^! {1 _/ U //填充数据
' e% q# i2 ?# t. [1 N6 ?# g/ v for (int i=0;i<MAX_INVENTORY;i++)
) U4 v* `3 W" c6 E W( a4 G5 Y) z {. M: ]: Y' D+ a* O6 _: H6 x9 T- g
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" [0 e. ^/ Z1 X4 |3 ? if (!pItemElem)9 A6 R/ v4 O6 Y$ @( V7 Y( k& k" a& I
{# O& f# C) A# F: n |
vItem.dwKind2 = 0xffffffff;
; H8 X3 m8 N1 |' k! D vItem.dwItemId = 0xffffffff;3 @% G0 `' T9 K2 ~: R1 c' y
vItem.nIndex = i;
+ c v8 S$ ?/ {7 }$ y- I! M2 i }else {
: d" A8 p: K' r9 ?/ O ItemProp* pProp = pItemElem->GetProp();3 Y$ O2 S& S6 n* X
vItem.dwKind2 = pProp->dwItemKind2;, e; g3 w) i, J& D* S j- h- A
vItem.dwItemId = pItemElem->m_dwItemId;
1 A* x6 F1 d7 W8 S, ] vItem.nIndex = i;
0 p! J9 S( Z9 O. v }
/ |) a L' f# M* _6 Y- M' N( m$ G- D //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. Y* w9 v, o" J9 Q9 d- }3 p }
" H8 R) k. x/ \/ ?6 F //////////////////////////////////////////////////////////////////////////: ?1 x W3 P2 P5 a
sort(vItem.begin(),vItem.end());//排序
% S2 I4 [" v. J; J% K7 F //////////////////////////////////////////////////////////////////////////' A0 X; g7 G8 X; g
//交换
3 U2 ? N' a2 M; o2 o) k7 R for (size_t i=0;i<vItem.size();i++)
; A! g( K4 E( g6 V4 C# { {
8 m9 O/ w3 g2 m //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. f. T0 E q0 e4 J
pInvSort->Add(vItem.nIndex);
' L% i, U6 p$ e* F, l; R2 i9 N }
' k+ ^ y, y2 n! q1 Q, p$ j BYTE nDestPos = 0;
/ D6 @7 s7 X3 V/ {* C# ? for (int i=0;i<MAX_INVENTORY;i++)
/ ]" q; m5 x' K8 F/ E5 c {
g1 A. Q: T7 g$ t) s n9 {6 a CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
0 [$ y. w8 ]0 x2 i' B* \& V if (pItemElem)2 b0 L3 a7 t$ z" Q T
{6 s7 D, k% c6 o) R" g" |
if (IsUsingItem(pItemElem))
7 D: a6 l5 c6 O {
- i, w/ T7 B9 O# _0 x0 U //这个位置无法放7 M8 W: V( Z* h9 B3 v1 c8 i
nDestPos++;: ?$ u6 P2 m, S
}
/ } n) y, s- H& e( V) l& z# y' K }, x; W, `, ^2 I. K1 n2 F9 A
BYTE nSrc = pInvSort->GetItemSrc(i);
" `4 O4 w& b1 `8 E- S pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
6 }0 ^6 o0 q3 V" ]3 D if (pItemElem)
U' { E1 U% T" e9 s" R0 \1 ^5 W0 r3 S {8 D% X) t T; J( b5 F# @
if (IsUsingItem(pItemElem))3 x" Z7 O+ I h5 @7 Q' Z$ {
{
& D9 k( p) u1 T1 L& u' y7 Q //这个道具无法移动,跳过
7 J% R: m; ^* b- r, y continue;. L9 E+ |# T6 |; V* C
}
) }7 ]- B8 H0 i2 l- |& _8 k) ? }" l }else{
/ R- _8 i/ s* H9 h* v //空位置 不用动; g# N3 g: d, p7 p
continue;5 o3 i/ q4 G/ P( r/ r
}2 P$ \7 ]" F- Y; `4 k) q
//////////////////////////////////////////////////////////////////////////! d+ q% m/ L. v
//开始移动3 f8 J: D# n3 C3 S2 O: Q
if (nSrc == nDestPos)8 B3 ]9 [0 X. ^2 D5 A
{3 l- N: K9 d" U3 F" l
//原地不动' L- b. G% X9 e: i) c0 l- h
nDestPos++;$ S$ y7 v; S5 c' J* x6 v5 V
continue;- Z" J; h$ e+ u9 B7 J. \
}: \2 n# a$ g+ ^7 r& w `
pInvSort->MoveItem(i,nDestPos);) H, F' O8 e. l- X5 k
g_DPlay.SendMoveItem(0,nSrc,nDestPos);0 U( ]9 |( U" F! t4 L, }
Sleep(5);
6 B/ L h3 a5 G$ {- z/ R //Error("移动 - %d->%d",nSrc,nDestPos);
2 I, A* c6 g% _ t. d$ L) k6 K; g nDestPos++;/ _8 ^: a3 U; p. w: p, G5 |& E4 P: W. m
}, l0 }2 N- A$ r# J; i. y
//取第一个元素的信息
+ S, k( u/ Q- z /*- ?1 u3 V& S7 R/ B
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
7 ~6 M( D) L9 w {( r! @% m, A9 {. \) r
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);; Z# f/ p! }, l5 _' R- l3 y
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
2 v6 p1 X, _# j, r }
* ~/ i6 T, r: W9 F4 C3 Y+ V6 k; r */
$ b/ n- }' ]1 Q% M //////////////////////////////////////////////////////////////////////////
1 g) d7 k4 a$ n9 r break;/ u' }7 L+ K/ U0 c
}
3 B% {3 R( G* q x2 Z. f* l" O }
4 W0 Y, a2 Q8 {3 w& J. q8 ^$ l}! k6 d. ?$ A9 V4 G% x" q
m_wndMenu.SetVisible(FALSE);
( |; G- h& E- x X' f; r
0 y# x3 U9 J+ ?: O( n3 J--------------------------------------------------------------------------------------------------------% h X* A& y( u/ J8 H+ g1 D
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point). a d7 c1 }8 {# [- T8 ?
{3 c7 v: G! F, M* F4 F
BaseMouseCursor();
+ b- \9 Q1 N3 Q! j% d! Q2 g}
& X& Z% }( D. {3 d' `在其下添加:1 ~- ~6 E# Y0 w* n6 N
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)! |- ]3 s+ J& I4 @/ Q+ S( {1 f5 U/ \2 g
{* J- v7 y) X5 N8 E) l' M# S
m_wndMenu.DeleteAllMenu(); V( a4 E0 H( b, B5 G: X
m_wndMenu.CreateMenu(this);
) G! y! l- C4 `; B; Lm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");4 m, a4 S- t: L0 d6 d
" j6 p! }( `# }% m7 U' I' Z7 ~if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
' S* h/ z3 v- z: _* [. j' t{
. G3 ^5 I. q0 `) S' D //P以上级别才可以删除所有道具/ o& E) h: T* J1 R
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
" j( c6 G* c& p ]# { A; J}
% F. G* L' [$ _9 \1 _m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );6 f" D( x3 n, c' ?" f+ X
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );/ e( y' i7 c9 X
m_wndMenu.SetFocus();
$ o8 ~1 y; L1 H# t}
! k$ Y3 k- r" m- m) t------------------------------------------------------------------------------------------------------------/ r1 @% S# Z% c; L' ~4 |4 W
*************************
$ r% w; t% s$ n n8 L) ]WndField.h文件0 ~, r( a7 c% d7 F% F, n
*************************, I; E% Y" \) s; Q* Z0 b3 O
搜索:BOOL m_bReport;5 M. U6 k7 J3 q: S; o; c5 y. B
其后添加:' e' A6 R/ `6 A% Y: Y* D- W
CWndMenu m_wndMenu;
! Y( \0 u8 c' v; J9 ] g搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);' C4 ^2 ]7 ]2 V. j
其后添加:
* L9 k/ K8 W8 H" l3 C9 s- Ovirtual void OnRButtonUp(UINT nFlags, CPoint point);% k9 T0 o' F4 v' _: d
h' x) C7 `( [# [' g5 i. m7 ]! V% `4 p# e9 q+ `/ Z& Z/ r8 R
|
|