|
|
源文件中_Interface文件夹下WndField.cpp文件! n: s* C! C6 |& u' ~
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )4 n! U; i$ d$ W# k
% u! @8 g8 G3 c
struct sItem
. q% q' F* t4 {( }/ m! z0 W5 O# {8 Z9 V{
( F! J' v/ B/ o% Z$ DDWORD dwId;
: P+ I8 F7 Q, r" q; k6 LDWORD dwKind2;/ P( R/ H r& d; z% ]
DWORD dwItemId;3 ?9 d# a& q6 |
BYTE nIndex;1 q P' K, c b, Z
sItem(){
1 w/ A3 k Z: `2 g( I/ |+ U- I dwId = dwKind2 = dwItemId = nIndex = 0;
) C7 q" ]3 d+ L! q$ z* l- x+ S}
, V; A( a6 `2 Ybool operator < (const sItem p2)
" k% U6 X3 o: N# z* G0 v2 S{# R4 a" e2 Z+ `
if (dwKind2 == p2.dwKind2)
( i8 V% a' ^' y& m {/ |# G, S" l2 N* {! E4 e6 W# C9 e+ p
return dwItemId < p2.dwItemId;# g- ~- e2 f- W% R% `" _/ e
}else{/ T+ p& |$ C, i
return dwKind2 < p2.dwKind2;
- D9 o# M" g- |* u$ O- ~$ C }1 }# v% `( \2 [7 G
}
: }9 q0 `& v9 K0 T7 F2 U& l};" u6 }# O+ O% d9 f
class CInventorySort
* h$ a- {: X7 [' G+ J4 o/ N{" ]8 J: v% L) E- z2 W7 S
public:! Y& [, ?/ p; s1 U- h( }
CInventorySort()0 ]0 c& r' I( N( D/ ?. v3 n5 T0 L
{
2 S/ z) v4 O! ^, M m_dwPos = 0;
. f2 h: U' s0 H! c}
3 q9 z$ s5 T0 z, e# ]( c~CInventorySort(){}
% E9 g2 @. ?2 z3 Sprivate: G; A. a; R6 l( x5 Z* f2 m0 w
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
) ?* x, m5 ^7 ]: m, HDWORD m_dwPos;
( |. @3 s% q7 ?! H0 D. b$ h- n5 Upublic:1 T* p; N$ k# m1 @- b
void Add(BYTE nIndex) }2 r0 D' j' k0 @: w% m. Z6 } W* \$ N) i
{0 t+ ]1 Z% K. y9 x
if (m_dwPos >= MAX_INVENTORY)3 _7 l, V* i% w* w5 f8 {: d- R
{
# D P; K7 g: @* |$ p: b$ l+ B return;
' E! ~6 t, G( O, ] }( U8 E5 F# z w Y/ e' ~4 O' s4 ]
m_Item[m_dwPos].nIndex = nIndex;
. x: @* F6 o' G5 e m_Item[m_dwPos].dwId = m_dwPos; p5 c' D" K# Q
m_dwPos++;" h6 T- a$ V5 ?- f* }5 S, v
}
% |/ Q% Y! w V3 u% zBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
" Z) q) p; @+ K{
; z6 \# {0 H" A for (int i=0;i<MAX_INVENTORY;i++)# N! C! \' O ]4 A, t
{
( @ ~# }) z8 p3 |! C! D2 H if (m_Item.dwId == dwId)
/ h: S& x" K# r, Q {) T: v: Q6 O. r, b
return m_Item.nIndex;
, f$ r* l. r+ S6 V; D( ~ }
5 X: N9 x7 J9 D7 x4 M }& o$ b6 i# M T( t; N. }
return 255;
. ^1 M1 ~- q+ L3 ~}
" v6 ]9 T# [1 d, g# h& vvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置% i, B. G% `2 P9 g" l0 t) A
{) L6 A* I- Z3 m) p5 ^7 V$ i3 x
BYTE nTmp = 0;# E# r! O Z8 r- H
bool bDest = false,bSrc = false;
7 f q3 B0 Y- [0 R% h/ y for (int i=0;i<MAX_INVENTORY;i++): d8 ^$ L& W. m$ T7 i8 @0 Y3 ^
{) R0 @3 G, {( y& N" k
if (dwSrcId == m_Item.dwId)9 s2 z; g0 R5 v# L$ v! x$ a g% M
{
6 ?' v5 r8 H) X/ ] M4 L# ] //id相等 则 改变对应的dest和src! E7 i6 _# F8 _1 f8 p' e
nTmp = m_Item.nIndex;6 I" t3 m; }6 u
m_Item.nIndex = dest;
7 X E' Z' b! o( G! Q/ n }
# O0 G( H p+ s$ z# ]. | }# T: K& u, @5 h( z
//临时数据保存完毕,交换开始
1 H( X; W5 a& ^- z1 D" D for (int i=0;i<MAX_INVENTORY;i++)
6 J R3 C) Z! G/ R/ { T {; V. E& M& m: G6 E: Q
if (dest == m_Item.nIndex). Y' n8 D) V# G" e2 Q
{0 `6 G% Q' V. ?) O4 K( E2 {4 R
//id相等 则 改变对应的dest和src
0 I# W* `3 M2 p1 }% Z" b m_Item.nIndex = nTmp;
4 |* y' s2 j& Q0 Q! [; t }: `, v1 a2 M) [
}
4 e# y2 i6 s4 d( ]2 ?}" L5 q. r0 ~& J
};
! k% P& y3 Q* i3 D-------------------------------------------------------------------------
/ L& A/ |# @1 d/ F依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
" d4 Z/ L( K4 Y8 b {+ N搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);! b& M! G, L2 ^6 B5 A" ~
紧靠其上添加:
0 b- X2 s5 i0 d' V) V \, tif( pWndBase == &m_wndMenu )% B& [. D5 L# }9 }, V
{9 i, J( R. ?( ?/ _9 x1 B' ~' X
switch( nID )# }$ f, z: Q; u
{
/ x4 H4 {6 W3 f, u" T. } case 2:
" [+ N; U2 _. O3 c* n3 i- s9 _( f {
( V4 j* ?. V5 ^" {2 w, |) i# ? //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
, E5 K$ i# {: z/ u) _8 r" V+ J if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))4 h+ G4 e- g3 N7 t+ R1 W' K+ x' b3 _: Q
{- q$ {0 I; i5 r7 G4 o* v
break;( F, Z1 X# S: C9 `3 g/ Y
}* {$ x6 F2 c( v% A$ J9 {& H
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
: }2 i0 E+ X# ], x! p5 D% { {5 Q- B# v. W2 s3 {! s L3 X* g% _
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* l- I+ ^- u, M, Y# Q/ |% i if( !pItemElem )
$ U+ i A* p6 P2 r% q! m continue;
# V1 h% H; K1 F N2 m+ @0 R if(pItemElem->GetExtra() > 0)
( k; P. l. b0 V0 ?* {/ l* M continue;
, J( {" O/ g6 q {6 y6 H if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
( R0 b s9 H" F8 i9 M continue;
* n- t7 Z; v' p# f- M9 B3 b if( g_pPlayer->IsUsing( pItemElem ) )& p7 U. X ~+ I9 ~$ a& B3 K
continue;) L& [' U, r- P Q
if( pItemElem->IsUndestructable() == TRUE )
- K. ^4 ?4 i, \2 D: ]0 I5 ^1 `, Y {
1 ^+ e: o* y, O7 ~* c3 r( H g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
" j2 U3 h( [' U& F% R- f! `: L3 Y continue;
; o0 A8 R% k2 b: z- { }
, s2 d; k4 a: M0 B4 X( I$ C g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
6 U% i8 P0 Z" `$ O8 x" Y }
: M3 D y/ _7 F( Z! }. O break;
2 L. a1 \# Q8 a }
/ Y- W6 r5 N# [* Z# g- b$ c9 _2 V8 |9 D case 1:2 r8 y% I* b8 x& i1 \* k4 E
{1 V0 w0 W1 O# k- [& o# a
//整理背包
9 [, Y3 l% j0 e. Y' I /////////////////////////////////////////////////////////////////////////// k8 p3 d0 z9 B; L! t
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
& Y( W e# ?" H, S$ E9 _! x //////////////////////////////////////////////////////////////////////////
) t: |6 {6 A. @5 ?1 j //////////////////////////////////////////////////////////////////////////, _8 J, f4 k) f+ D( O
CInventorySort* pInvSort = new CInventorySort;: c) w8 P9 b# N% B( I# {7 z
vector <sItem> vItem;/ L' d" {1 i8 ^9 a8 |8 G7 o' Z" p
vItem.resize(MAX_INVENTORY);//初始化大小
, ^' g% Q x4 X* }& B- D //////////////////////////////////////////////////////////////////////////
" ~/ h- \! D6 u% [1 `9 s //填充数据
+ l! v! `* a9 D1 ], Z. _" t for (int i=0;i<MAX_INVENTORY;i++)9 @ @* W+ P; {7 u6 y9 h2 L: l7 L, C
{! Z! u S. @. X' q1 T* J
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);8 j$ f3 k5 d7 Z1 w; ?- @
if (!pItemElem)
) |0 o$ m- K; A; r$ ?9 G' G( a- Z {9 N( }4 B( l+ k5 A5 {5 C- h# \
vItem.dwKind2 = 0xffffffff;% Z% A# K+ H& L' c ?$ d
vItem.dwItemId = 0xffffffff;+ }# k( L* Y [5 y0 d' O
vItem.nIndex = i;' p4 P; F/ q. x' h7 R
}else {
% z' n; i! t. V$ a! E ItemProp* pProp = pItemElem->GetProp();
2 P7 _8 q2 }0 ^0 w2 k) b( g& O vItem.dwKind2 = pProp->dwItemKind2;+ X) H8 ?$ F) c; p$ C* @: l% X+ e
vItem.dwItemId = pItemElem->m_dwItemId;
' Z+ l5 `6 O$ N3 F vItem.nIndex = i;
& D7 l: z6 ?0 _& T$ x) b }7 t. w$ c6 }( s: b9 a4 A4 g
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# A, H9 c- b- r }
' @9 ^, E, B" F7 L //////////////////////////////////////////////////////////////////////////. _5 M, e: Y/ j+ Y0 g# {; u
sort(vItem.begin(),vItem.end());//排序
5 L, \4 x9 S8 X `6 S/ U //////////////////////////////////////////////////////////////////////////
) [1 ]! y4 R4 r' @/ u //交换
; ~( M3 |, u* U! f( {" U! g) ? for (size_t i=0;i<vItem.size();i++): K% d4 U% a; @
{
8 }# s3 U2 \4 C: Z //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 u# \, v* K8 I( ~( N7 p
pInvSort->Add(vItem.nIndex);
4 h; a5 ^" h3 ?# ^* z( m }( c) Q0 ~) t! q7 H. W0 p* K. Q
BYTE nDestPos = 0;
, }2 }! q1 X- W( V: V8 y for (int i=0;i<MAX_INVENTORY;i++)3 _+ b! B6 p" g8 y9 x h* v8 l
{9 b/ `7 O- ]7 ^3 c6 X& ^. r1 G
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
) S5 d# U2 ^4 G. u" o/ R/ Y0 B if (pItemElem)
; } \9 b3 L' @% N O4 B, L: S { z/ _/ U6 v/ A9 h" |
if (IsUsingItem(pItemElem))3 o- q3 i' Q8 `" ]
{8 H; L& d! d+ v l/ r; h9 [
//这个位置无法放" p1 F: m1 b" q" s9 Y8 [5 L% t% d
nDestPos++;
4 Q" {0 E* D. [3 k% o u }
y# @0 V3 t2 B" f }
4 i2 o/ W, H' m5 O$ F" z BYTE nSrc = pInvSort->GetItemSrc(i);( A5 e- S" |: L7 B! p }% ?
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
3 D& y. F3 B3 R! K3 ?/ x if (pItemElem)
7 Y; k- l$ r5 S7 k! B {
7 w$ r7 ^4 {- r3 c0 g" ~5 ? if (IsUsingItem(pItemElem))
' L9 P0 T) R" U" J# o C {" A2 n" e, R3 o( M( i. d0 e4 Y o
//这个道具无法移动,跳过
9 D0 y$ L6 X0 m! \2 \ continue;
! H+ M3 F( `7 f }
* N1 ]' v7 e2 s }else{
2 R! C; s3 Z. ]/ O5 x //空位置 不用动
# f' r1 Z$ S; O0 I continue;
/ W# c, a" s7 ~6 h }
! }; ^0 M, K2 _ //////////////////////////////////////////////////////////////////////////8 ^, C% n6 `% z4 b( J" K
//开始移动
" r0 [& T, Q" D, ^& G' @ if (nSrc == nDestPos)
+ z- M. f/ D: \ {$ x' E* o$ A, c# ~' E: |# K
//原地不动9 W6 ?4 n+ L8 b, ?
nDestPos++;5 U( z: Q7 P2 |0 q# k' [
continue;3 d! z$ G/ ?% f( C4 d) }
}
2 P" C3 d" C" K pInvSort->MoveItem(i,nDestPos);0 c& Z5 l' K9 o2 n3 w7 i
g_DPlay.SendMoveItem(0,nSrc,nDestPos);5 n2 X2 b/ Q! }5 G3 i6 e0 X. N
Sleep(5);: }% s" o3 N6 l/ G8 s' L7 `( [$ h
//Error("移动 - %d->%d",nSrc,nDestPos);$ n. K6 w! f* P- ?
nDestPos++;
, J! _, c8 e; o( u9 i }: b9 B9 N% u v" T
//取第一个元素的信息
8 Q+ N, u0 E: \; u* S /*& t) X9 i& r3 P9 _4 h! i1 I8 T; }
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
& ^/ T1 @9 w( H |" r {
" `7 t7 e5 Y; J* h! j% _! `! r Error("Move - From:%d,To:%d",vItem[0].nIndex,x);! W( {3 Z' t8 K( s* A8 m
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);( b, S _3 i! V1 R" |) R1 ?" \$ D
}
- ]0 ?, U7 K; ]" y */
* e) U9 V, B! N5 x' q1 f //////////////////////////////////////////////////////////////////////////
" q. g3 k- {+ s" F5 }6 Y break;- ~1 y7 h8 I z% p; ?2 N4 o
}
) a2 O/ l$ Q9 X o, F( x- k" w7 x: H }
4 X" [6 x& k3 @, t2 v2 r; b+ n}
; M& h$ L, s. X. ^7 o# @m_wndMenu.SetVisible(FALSE);
, W! A3 g7 W* Q* [$ p5 T3 m- i8 X+ y9 ?# }, D& q
--------------------------------------------------------------------------------------------------------: P5 j6 V' N5 }& u; ^4 g6 _7 \
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)+ S" T" v! v$ q5 T- B
{
8 u" g# ?8 f' J1 q' @( R/ UBaseMouseCursor();
$ u' f" V% v# p$ S8 f}, |9 X: W* x/ c7 J1 H
在其下添加:% b2 Q2 j, e- I! W' V9 }" e
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
* r4 X+ ^. e3 [% {{
$ h: K/ c9 q l7 F5 `1 km_wndMenu.DeleteAllMenu();
5 G( N p" I7 v+ {m_wndMenu.CreateMenu(this); ^6 [/ E. f( X# p8 h$ @
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");! i9 I6 R3 C' H6 L1 o8 f/ S5 }
) j6 |4 {( e( ~
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))$ M8 c3 u, A8 n( S
{
4 m: ]/ \0 U/ J //P以上级别才可以删除所有道具
. m' @4 A d) h4 F) E+ m; K m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");8 m! ?: @& c$ Z# I
}
# \. \% \# s- q. Y0 s/ l2 }m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point ); {5 E4 k: D, H
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );5 }' R/ y" h, t8 f- u
m_wndMenu.SetFocus();9 |; o* v+ A; R8 \. ~$ h8 B
}
5 W0 o; K4 G6 y8 n------------------------------------------------------------------------------------------------------------3 t7 ]) X, C0 {0 d4 @
************************* j5 \7 l3 r6 P, j$ I3 a
WndField.h文件 U) Z, I2 E# ~: V
*************************
( @# S9 c) C L! m6 r' W0 z2 n搜索:BOOL m_bReport;
5 t) Z5 G- T7 ~0 V2 w5 E其后添加:
6 c) b8 F" ^6 |3 r4 e. fCWndMenu m_wndMenu;5 R% H# \: F( e. b0 s
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
0 [' y4 |0 x. F9 z, A其后添加:/ b1 w$ F- d. V4 I+ ~* Z
virtual void OnRButtonUp(UINT nFlags, CPoint point);
. v. N# I, b1 T1 t [$ d
" E8 x7 p' E1 q9 r' o# [3 g' H: a# I& m% M; Y& ^
|
|