|
|
源文件中_Interface文件夹下WndField.cpp文件' a# A7 [3 h: a" j+ {3 b
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 F3 z/ O& w# S7 W
7 {% b( I) U$ S# Ustruct sItem
1 A- L1 y# `) e5 N8 V) F) G{7 E3 ~9 m; ]: t/ E
DWORD dwId;3 c) J4 ~$ p# l
DWORD dwKind2;
/ T, A3 p L4 w" Q) c6 NDWORD dwItemId;2 X! _# M1 Q0 [' S0 l
BYTE nIndex;5 l# }% R G7 F" w+ q
sItem(){
1 B8 c8 H3 { z! K5 a. k+ \ dwId = dwKind2 = dwItemId = nIndex = 0;
$ W8 P9 `& Z$ s2 R) U& B. z5 B}
, R2 |8 y& ?& k3 p& a5 Ibool operator < (const sItem p2)
* D$ l) M+ Q- b( r{
4 }7 g1 D9 G3 r8 I$ R- V) Y4 g if (dwKind2 == p2.dwKind2)6 E3 y, a) s+ W9 U- [
{
% p2 g! a9 s" \: r. S; G# U return dwItemId < p2.dwItemId;
3 R7 C/ B' }# c1 @% S- K }else{0 k* Y% q8 T; [. m
return dwKind2 < p2.dwKind2;1 @$ T9 Q7 J, L( N
}
" s* F' S% S9 [! \}* u+ g1 B% V# u0 F5 c* R
};1 p$ I8 ?: Y+ O6 O
class CInventorySort
5 u% M3 s! h7 G: w{5 I$ P. }# ~+ `
public:
% |( s9 U9 @0 M& ICInventorySort() }. x; L0 \. a0 L
{
- g9 n- N7 X" i, e! c3 C% ? m_dwPos = 0;
) f2 ?. o( S" F}% l( J" W, I( B0 D
~CInventorySort(){}( {7 I# r( W; p8 ^
private:
/ F! ~0 `6 M2 gsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
% e: V+ d& S1 p6 t! {DWORD m_dwPos;
8 `: j! T6 }- c) ?! u6 _public:9 w" Z; ^, K, U b' r. ]
void Add(BYTE nIndex)! S* O3 k9 c6 d0 _4 f
{
9 P, g- m: k# m( C if (m_dwPos >= MAX_INVENTORY)
" Z0 v9 S) Z7 u. S* [7 |6 F {
8 }" u8 z; J1 ? return;
0 Q$ L( Q0 D, W" ]) z) D# Y }- X0 z3 Q, i: N
m_Item[m_dwPos].nIndex = nIndex;
% N% o4 g) D! D m_Item[m_dwPos].dwId = m_dwPos;% S" T5 N y& X# a- ]+ c1 P' c
m_dwPos++;
1 X& H/ [6 W m0 q7 h}
# h! t4 V& C9 O$ nBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
1 R0 T- `( v) X/ I& N+ G+ j7 Q7 f{
4 D+ ^+ L4 _! Z% {" w for (int i=0;i<MAX_INVENTORY;i++)
' Y* K8 }' o, B( e: u {0 N+ ?' g* L$ w/ `# `+ V
if (m_Item.dwId == dwId)6 [& z" i7 Q+ e! c1 |/ |+ p& X! W
{
9 w0 c4 A& i4 A4 o4 c' M return m_Item.nIndex;
# {# [5 [% {* v1 u }( O: v8 G) o2 a- j- P! T
}
O7 A5 A/ B& b6 M" c* {, i return 255;
0 f0 l+ i: N1 A* [+ P( i}
- Y1 w ^$ H7 n6 S" yvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
) N, _/ T+ r& f1 J{! G: r: N1 ^0 r d4 H
BYTE nTmp = 0;9 r8 r8 A% g- Q( r
bool bDest = false,bSrc = false;
3 p' S+ Q8 \9 m' G M7 X for (int i=0;i<MAX_INVENTORY;i++): G* q9 A$ t, [8 T( J9 t7 u
{0 [2 s( X: s+ [- G0 x
if (dwSrcId == m_Item.dwId)
3 ?2 {5 B. a5 c! L8 v {! u7 O* P! E1 s6 v9 v+ B9 W
//id相等 则 改变对应的dest和src% k* x! h2 _8 V: W
nTmp = m_Item.nIndex;
/ C( R0 { @( r4 S. a6 |; ^: B m_Item.nIndex = dest;% u$ y8 O* O3 b* E7 `6 W) k" A y' ]/ k
}
8 P" U- p4 f: i% m }
3 F! ]- l) ^1 o& P% A+ E( g1 J //临时数据保存完毕,交换开始
" K# F9 q# e1 `) ~. l for (int i=0;i<MAX_INVENTORY;i++)
+ E( j* W2 W A. m8 X {
" `, ^# E* W- b- ^( ], M9 x if (dest == m_Item.nIndex)
1 m _( R0 V9 |7 a# E M$ B( p; M {
$ n, P2 x. J! o //id相等 则 改变对应的dest和src
7 T5 V' u7 M% H/ f; c8 j% B m_Item.nIndex = nTmp;! ?0 @0 y' z8 H" ^( e
}
+ P! S/ g6 v; J, {6 |8 ^! I }
8 X1 t/ b' S4 u( `+ G}2 x) A7 C& [) M* ^ A2 t
};
, z* H, @- h1 b7 S-------------------------------------------------------------------------* C P9 r0 C' A7 _: N3 m
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& W; O2 M _$ N0 a9 r
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);# Q% L3 d2 w6 I8 N
紧靠其上添加:
" y1 O+ N4 x z/ m, yif( pWndBase == &m_wndMenu )7 H! C7 R% k7 y% b9 Z+ V
{( X. z8 i7 ?% G4 b
switch( nID )1 m1 A& G2 o. V# R1 ~* X3 H
{" P# J! T+ G# S) o0 y/ I6 D1 v7 i
case 2:9 }0 x0 Q" S/ W3 g' O3 D$ k8 [
{
2 h. ^ g9 O: ^0 A' ]0 D2 e! U% q //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
3 E$ s# s! d" [* H; p! ~ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 J4 s, A) y; Y7 V2 _/ h {
( d0 [# i! x# i break;
5 N: {8 p9 M6 ` }
; h* T; d s9 U* f0 {" Z k+ `% e) l for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
4 T. x7 Y# \+ b9 j3 C {
; Q6 p2 b, [9 {! w& e% E+ Q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 h A9 W0 `5 ~ if( !pItemElem )
' ~9 W( ]1 w/ A) _5 { continue;
( Q+ ?4 g& E. l& A7 N3 o1 Y# [ if(pItemElem->GetExtra() > 0), F6 [$ k8 m# o6 w& p
continue;
9 {; s+ j" r* x: n if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 4 e( G' B$ p/ B r+ p; D8 ]$ ?
continue;6 B! @& ]. p6 I$ W* Z( z9 t3 ^
if( g_pPlayer->IsUsing( pItemElem ) )
! g0 G# _6 b/ w p continue;
8 y( G$ Q! v8 g. I1 M6 G6 N if( pItemElem->IsUndestructable() == TRUE )8 S5 w$ s) A% Y; n% x5 ]4 t
{* H: L/ N4 Q* W( r- ^1 Q5 S
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );' u' l! P8 Y) V# w, f+ j4 ~
continue;# n+ [" B% C5 q' N1 W" H
}
2 C& ^7 K0 T& p g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
: w# Z" C, f2 R; a }
- P- v$ g. c& @4 H5 H! E2 B/ v3 Z3 s break;
5 l. B( @7 U0 M2 c7 A/ T: b9 { }
( N/ w }; ?- F/ q6 O case 1: Y1 z% c: b/ @2 t6 K; u
{* V% G) Z' {* q( A; @ Y4 M5 v- s; v: f, e
//整理背包
# x7 q: T. |7 f1 R- e: k, T* w //////////////////////////////////////////////////////////////////////////
- s, X( ^! O! s: y( o6 i, ` //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
( s5 R+ q% C) A% ?4 V6 T //////////////////////////////////////////////////////////////////////////
& c$ d: [ V, k! n% G, m //////////////////////////////////////////////////////////////////////////) l& G0 w5 y: z5 _& E
CInventorySort* pInvSort = new CInventorySort;) l( F3 j$ ^* E7 m* l
vector <sItem> vItem;
, \! ^) ^/ a" L g! C! m* p6 J vItem.resize(MAX_INVENTORY);//初始化大小) p* T: d8 ], s1 Z0 j! n
//////////////////////////////////////////////////////////////////////////) f# E5 u) @% w8 o$ R' O0 f- u- v5 c
//填充数据4 F$ ^* n. q* i% v8 u& h
for (int i=0;i<MAX_INVENTORY;i++)8 x7 }9 t2 `0 m+ B% y1 h
{
5 e. h0 {: T9 Q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 J, h! V0 W: P
if (!pItemElem)) f$ B- g0 y w7 D; G0 r- z3 Q& D
{
. j: k* L3 B& J5 J& M vItem.dwKind2 = 0xffffffff;) n& j o2 H3 ^1 c
vItem.dwItemId = 0xffffffff;% j8 U3 `0 d9 P% e
vItem.nIndex = i;
+ c( f) P, F8 C }else {5 l0 u! s( h0 P# B) E/ S
ItemProp* pProp = pItemElem->GetProp();: ~5 c* Z* i, c$ ]! ?
vItem.dwKind2 = pProp->dwItemKind2;9 R5 i. x8 t2 F F. [5 ?" [! R
vItem.dwItemId = pItemElem->m_dwItemId;
& l4 p* w( C/ {. C1 Z; z# @( F8 s vItem.nIndex = i;
# a$ h% C: n" t }
1 J0 @9 V8 a7 u5 q d4 W! T //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( |! N5 e; l6 d& h
}+ I+ `% K2 V' F$ d
//////////////////////////////////////////////////////////////////////////$ s' Z: B2 N; k% i
sort(vItem.begin(),vItem.end());//排序
8 v2 ]" ? B' l! V4 T: p! O //////////////////////////////////////////////////////////////////////////
6 v! `* c9 y2 A7 h( t //交换
# Y. A5 g' k3 |" Q, O* B/ S for (size_t i=0;i<vItem.size();i++)
! b# c9 T& P0 u! x+ @, j {; s8 Y* @; [% m7 Y# }, _ X& P' P
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- \4 e% f t4 y0 L
pInvSort->Add(vItem.nIndex);( J l2 t7 h* m, y
}8 y, s+ W& H+ W7 ^9 [
BYTE nDestPos = 0;
3 Y+ d4 K8 {) ~ for (int i=0;i<MAX_INVENTORY;i++)
, S& y, @* B' n/ N4 h7 f2 r* k {
l8 ]% K# q: w, o CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
) ?/ S1 T A) F* k if (pItemElem)0 v* W/ `1 m2 m4 A6 p% U) t% r3 `
{' l6 b6 X; w+ Z7 K8 I* f
if (IsUsingItem(pItemElem))
; }: d, t' e/ D5 D; [. o {/ ` S; q9 L: C* V% B9 h9 Y
//这个位置无法放$ t9 I S1 E3 }8 t9 e, q
nDestPos++;/ _' z% E1 _8 p- V3 ?
}
( X D9 C, k; Z$ v }
: h+ a9 H; j0 P! D BYTE nSrc = pInvSort->GetItemSrc(i);' N7 I1 I2 k& N) [# P S- K% ^
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);% u- m g R, A& D( ?9 w0 [
if (pItemElem) e. L8 H7 q2 M/ U, d
{
( a/ I0 ~1 ]2 u/ a4 \/ S+ s4 {9 I if (IsUsingItem(pItemElem))
9 |# g: u: L" u! z/ N2 q {( W. ~8 R" I- F' s1 R: \: H# Y: l
//这个道具无法移动,跳过
1 q- N4 z, ~3 Z7 | continue;7 @- f5 J$ f* V% v! J Z# h
}! b0 ~3 Z' U0 L- {1 F
}else{
0 b- q. ]4 X: j1 u* J //空位置 不用动( M3 z+ m) ]0 r
continue;
: t9 j: m0 o: |8 g }
- L2 Y% w" N: p' m6 M& { //////////////////////////////////////////////////////////////////////////- O |* J" ~' Q' r6 T/ u+ l
//开始移动
4 f- m% P. ~9 }0 n+ { if (nSrc == nDestPos). D( F7 J0 F" R2 z7 C2 n: U( U
{
' I, z/ a$ d( o2 }* S7 y+ c! p" k //原地不动 {9 }% W- V) J
nDestPos++;$ @) T9 Y% K0 `" k/ [3 y
continue;
9 U1 L2 f* y' z8 r0 `% s }
. f% ?8 S$ v) y w2 P9 a" t, } pInvSort->MoveItem(i,nDestPos);
+ I5 ~+ W. m2 P/ i, Y- X4 o" C g_DPlay.SendMoveItem(0,nSrc,nDestPos);: J" ^" B! l1 ]# t! D
Sleep(5);# ?7 v n% P: r8 ~! t' Y
//Error("移动 - %d->%d",nSrc,nDestPos);
! Y( w% d" x& J |& G nDestPos++;/ @% R3 ~$ D# o1 Z, p( I) r: g
}
4 c f$ J, {7 L8 `+ K //取第一个元素的信息4 U4 d# k! l. T; [
/*
: i' }; T2 O, r" q m: B if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
+ V9 I a: k# O( }# V& Y2 K {
0 ^9 B2 K7 O. [! x" P1 c7 h" i Error("Move - From:%d,To:%d",vItem[0].nIndex,x);- [0 a+ H4 c! e3 b7 @! e+ e' Y
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);& q/ n- O: E( r$ \* X
}, Y% U' q5 {2 N5 [
*/
" a* X6 g( |( T+ T5 m7 h; ^6 ` //////////////////////////////////////////////////////////////////////////
& U" |/ ~' D/ K5 | break;
4 \% q. ]1 ]0 X% L) G }& M! o8 T9 D3 ^
} * e- i( u0 g3 x7 p" ^/ }
}4 R, u! A0 e( e; ^" L. e5 L
m_wndMenu.SetVisible(FALSE);6 `# L. }! q- h; E( i
% r: L1 R4 @: D5 I! e: i--------------------------------------------------------------------------------------------------------
/ Y) A# y* F! d8 q- |5 t搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
1 N+ N& `1 Z( V$ X{
}0 H& _! V& h) GBaseMouseCursor();
$ C2 j( T2 \2 @ @, g6 L}
1 `, T: z$ \" L8 O' z在其下添加:6 X! D' U0 m! T/ o& e1 q
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point), Y! b" w; w, i- D
{* d1 H$ E, ?* S9 J2 [4 K
m_wndMenu.DeleteAllMenu();6 A6 w0 @" y2 N! }. i) {) J
m_wndMenu.CreateMenu(this);+ v! A0 B* C* n3 z$ I( ~7 N
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
+ g0 a9 D. D1 l+ r' Y1 ]
+ H1 N* [6 g. | U# r( G, E4 jif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 z8 O. r. a3 s! P* W( o{2 ^- ^3 n9 q& l0 U2 ?6 `5 i( x1 s
//P以上级别才可以删除所有道具( j6 y. }; O u* o0 i( F
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");0 u$ J5 c+ Y& r! m! q
}: g$ ~: k% A1 y& E/ @
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );+ c0 n3 ~4 z; C |2 b. g1 p0 }0 ~4 R
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );7 {" `4 j7 ?8 t/ G4 Y
m_wndMenu.SetFocus();
8 j" b% n" q9 m2 v2 }}6 U- P8 v' {; B0 Z) J4 C
------------------------------------------------------------------------------------------------------------
- Q; M/ }. |# n2 v*************************9 ?/ Q% ~& O; ^+ o4 I0 _! y+ y
WndField.h文件) l4 A* X- B3 a! J. s
*************************" A# E6 }' Y" f
搜索:BOOL m_bReport;
6 q* u( O" m& G" B1 B- i4 s其后添加:1 v) v5 ?) s8 P0 W7 \
CWndMenu m_wndMenu;
6 D2 z0 h: j b# c搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);7 h* b6 m, v, T# \" [
其后添加:1 d! @% `5 o4 i
virtual void OnRButtonUp(UINT nFlags, CPoint point);6 D, k* q' L3 X* l2 D: [6 M
& M( r: R" }. C
2 [) x, Q; Y) v- G+ ]3 ? |
|