|
|
源文件中_Interface文件夹下WndField.cpp文件
; u! Q# X2 f: p( s! i9 C搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )# C- | y% ^ K/ D
% |" x' U* _3 P4 s9 F, @; ?struct sItem
0 A: T# { w* J( H6 q" [: e- H{+ H" l6 e, P, ?( ^, p3 j4 L
DWORD dwId;
; Q( }% f. w0 w8 Y7 nDWORD dwKind2;4 }8 U- Z* O8 s2 F% d
DWORD dwItemId;; t; Y6 I0 P4 g6 T5 z- ^
BYTE nIndex;9 P6 ~ l( z$ r, j# P7 \! R# S
sItem(){. l7 c6 u" @$ a# [# q* [, z' d
dwId = dwKind2 = dwItemId = nIndex = 0;
+ d3 ^& y, q& g5 Y}
0 K! w7 f9 W: bbool operator < (const sItem p2)
+ C, i- S4 X9 f- \{
) \$ {, O; h# w9 F3 N if (dwKind2 == p2.dwKind2)9 y# D8 b" Z) {% u
{
2 k! Q8 n" F- u d. n% m( L return dwItemId < p2.dwItemId;* j4 \1 }. H# V" J% {
}else{
' c% f- j$ b% A1 Q7 ?4 Q return dwKind2 < p2.dwKind2;% e& K" Y0 V, w+ v$ u
}
8 ^/ q4 @; G+ r/ s; B ^3 X6 t$ n' o5 L}9 d) Z9 b# `: J# t: U8 y
};
0 q' M& C1 r2 M( D( @9 n0 s% I7 dclass CInventorySort
! B9 z( q9 ^0 ~+ E7 I" K I{3 M" k J# _' i! j7 @ _; w
public:
' P/ @( O; }2 z& \9 h+ RCInventorySort()
2 u0 q; m8 h0 p% C! U7 D* x{! [4 t5 K3 x+ F2 O1 C+ C3 ?" }
m_dwPos = 0;
+ l2 t; J; r$ X8 ` d; C}
A6 C" ~" J8 J( A( `~CInventorySort(){}
1 l! k% ]0 v' a) a, ]4 b7 V8 y0 X( Jprivate:1 H4 t+ ^% S/ [4 g% e
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
% s6 V: f) v; e4 TDWORD m_dwPos;
/ ?' i( F, M5 U, ?% Epublic:
; q! l- r& R& w& ?8 yvoid Add(BYTE nIndex)% M: f( O+ W& M- r5 Q$ b, G' |3 W
{) w( e2 \2 D4 r- O
if (m_dwPos >= MAX_INVENTORY)
( P6 L% J7 y4 x {6 F+ O+ U3 l5 x8 P, f; k, w
return;8 e9 H$ N, v4 q+ s
}
/ T4 h/ x3 l5 ^2 _! B m_Item[m_dwPos].nIndex = nIndex;
8 E6 M$ o9 C3 }9 Y m_Item[m_dwPos].dwId = m_dwPos;
% _* v; {( x1 }% }. q4 c m_dwPos++;! V% b$ Q! h i" X+ {5 d& w4 ^# x
}
h8 {: U5 y- b; Z8 D+ gBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
3 F) P* ^0 ]6 L+ w. L{
* G; |" `$ W$ v% x* P for (int i=0;i<MAX_INVENTORY;i++)
" G3 k, [, t& v& R {
4 c P. Y6 Z e, T V+ u& e* C+ Y if (m_Item.dwId == dwId)# d% F9 Z/ y. D) e! F* J7 o5 C
{, A& y+ `; v' Z) J5 l
return m_Item.nIndex;
( g6 k% I2 g4 y8 ]7 E* I' b7 Z7 g }: z3 q" ]) Y6 J) N5 C: ^# ^& _
}
& E; z% M" Z/ T! r6 k9 C7 h return 255;) x6 m% C) n; B& d: I2 Q C# F
}6 n E# q5 N' M( u. v0 o/ J, B0 b
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置: _0 G* ?, g" ^2 W. I
{/ {2 _$ u, O9 ~( C3 O
BYTE nTmp = 0;
# D9 [; ?: o9 K; Y bool bDest = false,bSrc = false;0 f- t# |2 `0 Y8 X. A$ d2 ?
for (int i=0;i<MAX_INVENTORY;i++)" k# x [& E6 U" e1 ~
{8 H& `8 B/ }- ]6 \4 N4 `
if (dwSrcId == m_Item.dwId)
8 |* `0 u: e! q- H. y2 {6 \ {
) b; `4 ~& p2 D. A //id相等 则 改变对应的dest和src f; F5 ]! \3 n* U, L
nTmp = m_Item.nIndex;9 [2 v& o) f( L' @( k
m_Item.nIndex = dest;
# x6 N: ?( H3 S3 U }
G+ _, c4 y% H: K: ^5 B }
! `0 g9 h" E9 {% s //临时数据保存完毕,交换开始
1 z0 v' e- M" p! i X4 [ for (int i=0;i<MAX_INVENTORY;i++)
4 c' ^% S3 i) j) W( ~ {
5 P q# k6 y* S1 q if (dest == m_Item.nIndex)
* x" c' ]4 `( _% F6 Z- K {
9 \ c R6 Z0 _- A //id相等 则 改变对应的dest和src# a( l$ w V7 q: o! {
m_Item.nIndex = nTmp;: Y5 J" ?, M7 Q# _/ m
}& e1 T* c7 z: C. Y
}2 C5 j. V- @/ A' l" s3 M
}
O" v! w' g) ]& `/ m};# [) \, l* H3 {6 U" ^5 `
-------------------------------------------------------------------------
$ r! ]/ e' v" g6 i5 L$ H3 k# G% W依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
( n+ l) }. p9 x$ f8 E/ s* y搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);% |+ v: ~0 x8 o( w/ e
紧靠其上添加:
6 v& `! _4 h/ k7 v7 J0 Wif( pWndBase == &m_wndMenu )3 b% F) Y: f) u% u' G- p
{
' N2 w5 K( X% {& P$ m% f) S- o switch( nID )
1 X' U; V; j1 M% a4 N0 T( C {
1 X( \; D2 h5 J0 k3 O case 2:
0 ~5 m& `! L- y* ]$ U5 y { `$ T6 q7 V8 Z
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
9 S% O4 ?+ n* _% l# Y if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), a( R1 Z: x+ `+ T
{
: w( M8 h: r3 p) _9 C$ G break;
$ Q' e( l, B0 T }
8 h; m' Y j. m for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)$ r1 t5 }* h1 j8 O. W, f7 [- F
{
* t/ w8 Y1 p1 P/ ^' _ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);: ~1 O' I! N; L7 I" w& f7 t& @
if( !pItemElem )" e; S( n1 F8 H( L, b
continue;5 ^7 a. I% Q# A2 B4 j9 X6 p
if(pItemElem->GetExtra() > 0)# \( O6 }: l/ j* t/ Y
continue;
: x* T: R3 y- R8 D) {5 g& K if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 7 Q2 I; B4 }& ]
continue;
" j) i1 b9 M- m; Y, i+ @ if( g_pPlayer->IsUsing( pItemElem ) )
- P; d3 P% d" X4 G. f- i1 R: v0 W continue;
' n+ V9 e, v1 L: ]0 Q if( pItemElem->IsUndestructable() == TRUE )5 v6 y3 Z3 S- }( c& c2 u& f
{# |' M4 }( h' @; C
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
( U7 ^) i. a* s# f1 h5 M( x/ E( \ continue;
1 \# H6 A" B8 X) r/ Z# k( W }
2 L0 Z3 f4 p9 S7 m1 ~* k3 Q! J g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);8 p0 N! ?0 T. S
}* I* M6 L t" \& y9 ]$ z
break;# A! M7 S( |4 c/ B. ?# r
}
& b. Y4 L5 J7 v3 c case 1:, [- ?3 J4 \+ c! f
{
' e- ]: J* t6 D% z% M; Y //整理背包, E6 ^6 P; i0 I: u+ N( d3 v. d
//////////////////////////////////////////////////////////////////////////: a3 k+ [' x5 q
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );" a, @7 q6 P1 X. X+ N+ A' C
//////////////////////////////////////////////////////////////////////////
: F1 r7 i1 e- w+ G( @7 m9 V6 s0 q //////////////////////////////////////////////////////////////////////////
" s9 V' |1 ^/ [, q( l CInventorySort* pInvSort = new CInventorySort;
: ~1 t1 l' q8 b/ u vector <sItem> vItem;
) a6 x3 {: d5 M1 Q6 u7 ] vItem.resize(MAX_INVENTORY);//初始化大小
: @) F: C. N, o% ` //////////////////////////////////////////////////////////////////////////! A! q0 \1 r+ a( k/ f
//填充数据
- t, V- E" x# J3 ~ for (int i=0;i<MAX_INVENTORY;i++)& k$ C. Y% H- ^1 o, a" _$ a K
{5 E( C0 ?) Q, Z% r0 [; U) e0 E K& x7 M
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 h0 v- z# }5 C; t* a4 E if (!pItemElem)
: r, m6 B, q, [. c {1 R I+ f8 m. r; Z
vItem.dwKind2 = 0xffffffff;+ K D# a' M* {+ B! {" A/ X
vItem.dwItemId = 0xffffffff;8 ~2 A' i, `$ i
vItem.nIndex = i;
% H& T' D* k; w8 e }else {/ l9 j) H3 Z- s( }
ItemProp* pProp = pItemElem->GetProp();( ~3 g1 ]' z( L' G8 z: \! f
vItem.dwKind2 = pProp->dwItemKind2;( v7 D1 ]6 b7 T' y7 [
vItem.dwItemId = pItemElem->m_dwItemId;
7 y: I ?7 H, w, \% K( ~2 v+ J vItem.nIndex = i;( r" y% [7 v4 f) \* g1 Y+ l
}
7 m6 S# d" ~. S/ j. J7 R% ]0 p //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
+ a4 V2 N" a: w3 j0 x; h }
' n, ~: W9 ]% Z% T. k7 y H //////////////////////////////////////////////////////////////////////////
4 U& S* Y, e- k sort(vItem.begin(),vItem.end());//排序
/ C) J2 h2 O% q/ x ////////////////////////////////////////////////////////////////////////// b. q. T: W+ A
//交换" q8 X" \9 |8 a/ d
for (size_t i=0;i<vItem.size();i++)
8 ~) ^( a& a9 S2 P1 p {& O; e2 D( }: R
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. j7 n9 A& W$ m2 u
pInvSort->Add(vItem.nIndex);
% J0 {$ R0 \( v1 R N& q0 w }
6 @/ K0 @* y# g U. W! P BYTE nDestPos = 0;
) ^ K9 A7 z$ R' F. B for (int i=0;i<MAX_INVENTORY;i++)/ A1 F9 _" \4 x' T/ B5 q% s
{' m: x u- Z8 _8 g* l: _
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
' b, ]1 B* ~. J; r, ^8 l if (pItemElem)4 W8 M4 ?& P+ ^3 z& q" @
{5 K, g0 P( |( U0 I* T% ^- Z
if (IsUsingItem(pItemElem))* x5 N: ]7 ]4 ]% w+ }- s
{
: y9 n7 N5 b+ {! y; _ //这个位置无法放' R, x$ V" y5 {! t1 j) v
nDestPos++;6 s0 R; V. [1 \0 y5 ^1 ]
}. V8 g. R( B* A; N/ u
}
" s1 _. ? N+ y BYTE nSrc = pInvSort->GetItemSrc(i);( Z* Z4 h" F5 T9 V i+ ]& ~
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);) c" o) C/ S9 t2 v- ^$ _
if (pItemElem)( d" {' s9 ^6 N& ?) b: S7 c
{+ j o _4 E, V* O- ~- b b( e
if (IsUsingItem(pItemElem))
8 m6 K' d; x; H) }9 d8 [ {
% x" |' O8 n. q //这个道具无法移动,跳过" E' o8 ?9 x( f3 A$ m4 q/ N& B7 Q
continue;
) r7 K# q7 J3 ~5 O3 d }' Y+ a' G9 |( [; T
}else{+ r, E" c0 M& i$ R( ]* f" w: q
//空位置 不用动
# E$ Q! _7 c5 \; I- }2 X continue;
6 ]; a+ j& F! z* M5 T5 z8 U. y6 C }
" D3 ~( M6 C# n) n2 v5 }: T //////////////////////////////////////////////////////////////////////////: J! O$ q4 b/ Q+ R' `9 ?* j$ o
//开始移动
3 c# P6 a0 e4 G& U/ ]3 A if (nSrc == nDestPos)
k6 Y& e: C1 z, r5 U {& t' q% h+ H, I9 W8 [5 a X g4 J3 N+ |; \, `
//原地不动+ B2 k" ]2 z, V
nDestPos++;
5 [9 x* u3 R9 A+ n1 A. g w continue;( o. b7 ~: O( ^! d
}
/ S9 i" B- \5 U1 H- y b% R, `$ P pInvSort->MoveItem(i,nDestPos);' Y! j. o# R- F, \8 R$ L
g_DPlay.SendMoveItem(0,nSrc,nDestPos);! w, q! ?1 i; C4 W1 c
Sleep(5);
9 G5 m% o5 b" I3 u //Error("移动 - %d->%d",nSrc,nDestPos);4 e0 A- r5 E! J8 W! X
nDestPos++;. @8 {2 b' I- l/ n4 W6 Q) J$ P9 A
}7 P# a9 R/ ~& h' M
//取第一个元素的信息
! G- T# }8 J- H /*
0 X; Y3 L9 R3 e; s/ @$ a if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)# d$ R* a! o1 W/ N
{
5 B7 s/ D, v1 {) o Error("Move - From:%d,To:%d",vItem[0].nIndex,x);- [8 _# D5 y. q3 N
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
- i& r; I3 a! S }
7 d: a/ `+ R' e; o% x5 c- a; I% M7 `- B */
8 N4 ^5 x& V- `1 @& C1 w/ { /////////////////////////////////////////////////////////////////////////// g- v m. _$ W( I5 F
break;3 a) L) }! E A- T- h# U% q
}
6 ~' ~/ W- C( P+ g. k1 g Q } 0 c; `0 Y6 Y$ }, ]$ A' e' N
}
3 n: b( v) z9 @; o; C: q" w! f, Wm_wndMenu.SetVisible(FALSE);: }' D# g7 f1 O% k' c* _1 Q
( n, y% i. m0 A! R0 @9 ?- q7 [, k: W3 x
--------------------------------------------------------------------------------------------------------; t2 M+ [! x+ b# A8 j( {
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
6 W: {! j; O8 t: z{- X' t) c# O- P0 x) c
BaseMouseCursor();
; P# G$ l- @4 k8 O2 @7 p/ m}, W" r, I7 e) l' I3 f, G
在其下添加:
# y# j: d: h) E$ a1 v" k: p1 tvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
, S- [9 c, P4 G{
" |( V0 `" h7 Q2 sm_wndMenu.DeleteAllMenu();9 K7 f% ?& u7 m: {
m_wndMenu.CreateMenu(this);
, |7 p3 S/ H7 T! ?/ D1 tm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
* J0 g* l" P7 g0 u( q) E+ c7 a/ ^ O! h1 C) D; i# I
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))$ P; U' V K$ {- o8 e3 G
{ t$ d% G1 Y* |7 |+ D/ g) N) b
//P以上级别才可以删除所有道具
* b8 h- u0 C5 s m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");2 F- w- Y2 C4 S
}# p: g X0 i1 K1 P- ?* l
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
% f+ Y7 q3 u) _5 gm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
/ s- o7 y1 s; a3 n" `1 v& ~m_wndMenu.SetFocus();
, N* l) \3 @" X/ u3 R8 S" j& `}
; T0 z- p7 m# [/ y------------------------------------------------------------------------------------------------------------( v& c: I) q# H. h, W6 |. s/ H0 D
*************************
9 M) P, y' g! Z+ e( mWndField.h文件
) S2 b( {' _% R3 F$ e( M) I! Z*************************
0 U; T% k# }- S1 B2 Y6 `3 j8 h6 q搜索:BOOL m_bReport;
! I& V" [& A5 Z2 N5 \4 G其后添加:
3 Z) X; K; K; zCWndMenu m_wndMenu;
! B6 @1 z1 m; p. ]搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);) G* t5 m6 Q+ N' W" k0 B/ n* U% @
其后添加:0 Z! Y/ p2 ?+ ^" G" a+ [0 O' S
virtual void OnRButtonUp(UINT nFlags, CPoint point);
9 ~, F- O6 ~6 y( G$ P: P
( W' C6 t- i7 ]3 [! A/ q6 b0 r) X! s, [+ G8 k, N
|
|