|
|
源文件中_Interface文件夹下WndField.cpp文件, o. E o& \. n& o8 [
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 t. C# d8 ]; I# b6 k
2 S* k& ?$ y# j- w8 \8 M' f
struct sItem' {6 R8 q, ]8 x/ B
{8 U+ t n2 }! [/ o4 l, M; Z% l1 e% v0 m
DWORD dwId;' _# x5 D9 K' P
DWORD dwKind2;
! @- F$ b/ p5 h, b! m( EDWORD dwItemId;
6 w( E& [; C+ C* y* rBYTE nIndex;% n) t* P* G* `# c/ Q: Q
sItem(){
) [8 z- \* L8 M dwId = dwKind2 = dwItemId = nIndex = 0;1 o1 A/ V3 z+ q. e8 p* D5 D
}
5 p5 T9 r' b) ?, Tbool operator < (const sItem p2)
! l J) Y" m' D. s$ C8 }$ e* p{, i5 Y6 R0 O1 A( E5 I- _
if (dwKind2 == p2.dwKind2)
' {7 T( v) R. \+ g. r+ e {
w& X! r) M- J7 e9 c return dwItemId < p2.dwItemId;2 i. @, T8 h8 d; v; F! u
}else{# ~8 E/ L& ^5 u8 G" `
return dwKind2 < p2.dwKind2;# P: X; V( S2 @* n3 {- P+ n$ M! {
}& X" a) f/ O5 r# i) U6 [
}) m8 w/ {" D" R6 [6 G3 A; S% X
};1 N% d. C0 T' u. b4 \/ C) R1 A
class CInventorySort
- O4 r" e) L+ a) }6 l{
) q- p8 H% ?7 j( ]+ h8 G; dpublic:, u& K. A. @% Q6 X
CInventorySort()
y& c8 {+ L" k{
0 a0 W& O0 t# a1 @4 q1 [ m_dwPos = 0;. t! F0 e6 ?! A, l
}
& D5 i3 N0 g( g7 ~~CInventorySort(){}4 ^) x6 H* u; J6 o
private:4 O' p' v: f/ L; n/ O
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息6 `+ H3 {8 y! G2 O; P S/ A' f
DWORD m_dwPos;
4 r2 S( r) ~! U. O. Apublic:
4 W, G4 o5 Y, n6 P( g" b/ Xvoid Add(BYTE nIndex)7 e) G1 }- l% K0 q4 `
{
- K/ d7 ?* ]2 R J5 `) _ if (m_dwPos >= MAX_INVENTORY)
+ }4 {. \1 s: @& N {
2 s6 G9 {/ e( e6 j: E' ~ return;
/ a! `/ ]! M9 Q$ t4 v }! m. W6 `3 y8 c0 x' t9 v+ P# H
m_Item[m_dwPos].nIndex = nIndex;# _' c" o2 O3 O
m_Item[m_dwPos].dwId = m_dwPos;2 ?/ D: R% K6 v! n5 f
m_dwPos++;
" }4 c) C0 E( r/ f' F& Y}
; B$ S7 k5 y- V& WBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列0 L7 x- f7 d& ?1 y8 p
{8 }- z+ l. f2 t
for (int i=0;i<MAX_INVENTORY;i++)
6 u5 k& M( L) u4 i* x) L2 V& T {
( I( V2 P, n3 N1 P* |5 q if (m_Item.dwId == dwId)
$ W2 p8 {8 g a {" _& u" D9 W) ^/ ^5 j
return m_Item.nIndex;9 X" f! ?0 p% Y" @2 p- ^* m( ]! ~6 D
}
" M6 o( M0 {' |& z3 d& e }& \) `5 K9 V1 B# N2 D
return 255;- O7 e" \! }: G# Q# d$ I
}/ S/ K+ P% F4 t1 g
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
. ~% \/ z; ]# e0 x{ _* P+ M7 u! w4 y
BYTE nTmp = 0;" n: o0 Y* C1 A" s ?0 X
bool bDest = false,bSrc = false;
4 }2 `$ U' I: F% d6 M" q1 _ for (int i=0;i<MAX_INVENTORY;i++)/ D8 ^; d# C( W& H" s
{8 J3 c, U' K6 }* E$ {# I
if (dwSrcId == m_Item.dwId)( C1 i. q$ f, u+ x
{
% R) \4 Q. Z: O4 I# V //id相等 则 改变对应的dest和src
0 K! ^+ i! g Z; p/ R nTmp = m_Item.nIndex;
5 K9 _! }# [- J( l m_Item.nIndex = dest;# s6 a% N9 X" e( Y" [2 N7 s
}* `& |7 h- s2 j T8 z
}
$ ?. N. e9 y$ k8 G$ S! q2 l //临时数据保存完毕,交换开始
. r$ |* {2 E$ ~# U2 g5 c+ s for (int i=0;i<MAX_INVENTORY;i++)5 D1 P# r+ r2 Q9 t8 u% u
{4 w# d( ] K$ J: j. D2 {0 e& v4 R" h5 S
if (dest == m_Item.nIndex)' K2 E% o9 T0 @7 C7 i
{8 l# m- p$ k, n6 x) Z" t3 i/ y/ {
//id相等 则 改变对应的dest和src
# q: f+ m& i3 T2 K m_Item.nIndex = nTmp;. F( E4 _4 r8 ^* U
}
/ B% `* R; l- F+ ^( U3 J }
- U# {1 [5 b2 O% o}( r' O0 s+ @( @ _! o9 m- ]
};8 Y. D6 W/ z! a- [$ l r: C
-------------------------------------------------------------------------8 Z" ^$ k' _* O' c N, E
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
6 u. `% [* T- r8 r$ s' o搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);- q$ U8 c: N8 [, x D; c
紧靠其上添加:
: X0 ~% a! J8 j4 Y7 i% W* Fif( pWndBase == &m_wndMenu )
; d0 o, w9 c5 F1 c9 E6 U! k{
+ o9 }9 i9 s" A switch( nID )
0 k8 m- B/ Y& m, U {
1 N& c1 t" W4 Y case 2:
, F6 ^! ~6 K* v2 \" W/ M% T {
: g4 \5 B* g q //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);. g- W& w; N0 d3 e8 a
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 U; D* z9 s' X) \ {
4 a L' S! V, S. Z5 b- h break;; s6 x- v, L+ {; @' P
}
3 Y6 O7 O8 b* H! z! }2 k: I for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)/ m z5 W, Z4 h. \
{
8 I0 ~3 @# k. q! M: S CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 M( P! K8 m! b6 C if( !pItemElem )
) L6 H& z! o [ continue;
4 C7 n6 s; s5 ^8 ]% G% ^5 b& P# Q) z8 W if(pItemElem->GetExtra() > 0)
# v) J$ u6 j8 t7 }/ M4 X, c+ c$ F continue;; [( x% f- ~# m5 n7 s& L
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ' U/ ^2 J, |1 B: w; r
continue;/ x4 G/ F0 _5 x
if( g_pPlayer->IsUsing( pItemElem ) )
$ [& j5 b8 Y7 r9 [1 [( [ continue;; j' r+ S, Y& ^& R4 p4 y
if( pItemElem->IsUndestructable() == TRUE )
9 ?' P/ X$ L* ?* |. | {
}) Q- d- ~. b/ v; S" x7 `, z' _0 L g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
4 Y; E, a" ~2 C7 s continue;
, g; V/ m. s) \6 T3 J4 J- g0 g0 [* C }
' h- o" T+ m/ `: M. d# Z8 J g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);& M0 H2 j8 k9 k# m1 o+ |
}
7 C' H$ f G( V: E. {: y) s" f break;8 m& n: Z& S/ e3 S( F, V
}
7 r% Y K" b' [4 k7 _% W* R case 1:
9 ~3 W6 ^# V" X {
) m1 h7 s3 n' G7 ?5 J8 C) ]: P) ]$ M //整理背包
/ k2 d, W* A, S* ~5 Z9 Y //////////////////////////////////////////////////////////////////////////! S6 ^3 C$ }8 D
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
) i9 L% ]" [- F% t ////////////////////////////////////////////////////////////////////////// F/ ], `9 [1 t% N, T0 d* {6 S
//////////////////////////////////////////////////////////////////////////
. ]8 o8 X6 ^! t; i3 ~ CInventorySort* pInvSort = new CInventorySort;' T, C' a6 ~0 {' _! E
vector <sItem> vItem;8 j' m( b7 o' t5 W3 X* T% {# C
vItem.resize(MAX_INVENTORY);//初始化大小
9 Z c; B t- A7 ]3 C //////////////////////////////////////////////////////////////////////////
' [' l- w/ Q. A //填充数据
- M5 F4 G/ L9 [! C3 N; g for (int i=0;i<MAX_INVENTORY;i++). @2 X+ E4 o: ?" `: d
{
' _+ X9 ?" z% B% ]7 n CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
& R( P( @1 q- k. f. }6 O4 u, e/ j if (!pItemElem)
% y& {2 \0 t0 S& s {
2 C- _9 K# o; V( z0 Y3 ]) t vItem.dwKind2 = 0xffffffff;
0 o0 o8 k4 @9 F6 V( V4 j6 ^9 n vItem.dwItemId = 0xffffffff;- @2 c9 m* U# l! |) }
vItem.nIndex = i;
2 h F4 `3 s2 N: Z1 C }else {
# ^" @/ i0 S+ U. T. N f- q2 x ItemProp* pProp = pItemElem->GetProp();3 p; X' B3 p5 k9 g5 R$ K5 X
vItem.dwKind2 = pProp->dwItemKind2;4 ]* y, h9 D! i- \ Q N) B/ @, J
vItem.dwItemId = pItemElem->m_dwItemId;
8 E) D8 D$ @) P! O5 h3 I# n vItem.nIndex = i;
+ ]7 l$ Q0 i5 E2 c( v/ ]" m) [ }: ^8 q: C$ p' y* i* E: j
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: n! Q8 B, B$ h8 z4 A6 e; [) e6 F }" y2 Q d7 G; L4 N: P* F B
//////////////////////////////////////////////////////////////////////////) Z% ?5 t- k# X7 K+ ^7 y( \2 G
sort(vItem.begin(),vItem.end());//排序
4 g2 V1 s7 W$ K! [1 U //////////////////////////////////////////////////////////////////////////
. H( ~8 B3 M4 _! o" f0 @3 }: N: [1 ] //交换' F" J o/ ~/ K) B- |8 n6 O/ O+ Z
for (size_t i=0;i<vItem.size();i++)) T4 u( s! [9 c; s7 [. v. F! _
{
/ o/ q) c! V# L/ @* s2 u //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 S# G- m/ q: ~5 \ pInvSort->Add(vItem.nIndex);
0 ?8 C. f* g# i }9 q. X$ S& y. H1 E/ t
BYTE nDestPos = 0;9 x& P/ ? L6 T- J6 k+ K! J0 }0 f
for (int i=0;i<MAX_INVENTORY;i++)! G B. r: `: S1 y+ N' Z
{( q; O. v% C! a ?
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);) I# l# ~3 U' g3 r6 j! B: J2 K9 s
if (pItemElem)* p' Z. U( L* T
{
( \* f* F* W$ e2 k4 H+ @! C2 g if (IsUsingItem(pItemElem))- [2 _5 T- N `
{% o, l3 Z6 ]8 D0 W! G+ @/ ^! y
//这个位置无法放2 X1 f! x+ l, f2 u4 M/ Z; }
nDestPos++;
4 {% e: v: U; A8 _2 T }
, v5 b5 Y9 Y3 \# C7 z6 t }
3 h/ k/ f+ z G1 H. |3 N8 n BYTE nSrc = pInvSort->GetItemSrc(i);
# ]8 r8 b) s1 y+ C0 f8 K! D3 [ pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);% @# z; B1 H4 \1 A
if (pItemElem)
, f; R$ K3 ]+ q9 x4 |4 l; ` {
, T- l) w: _. T0 k if (IsUsingItem(pItemElem))
: {/ f: N% ~8 J6 Q {
# h& j1 n/ N- T //这个道具无法移动,跳过. y% |: I) c/ O9 u) {
continue;8 Z& S5 q' q; \ Z" [
}
1 R. W/ R" L& c4 q Y }else{
$ ~5 k) r- q, \" P' E2 w2 e //空位置 不用动
7 v$ z5 L h7 p! ?$ G: Q continue;, O1 F4 w4 X$ X
}
/ S0 o8 b1 b! r( M( u% Q, [ //////////////////////////////////////////////////////////////////////////
! e( O7 B. W% f# e- y. N- S& X //开始移动
& ]4 Z/ S5 w! T+ X o& x! H if (nSrc == nDestPos)/ ~/ `. U, ?& G# H
{
u- @* r# U3 a: H# ~3 D //原地不动7 s- \3 u2 n/ e8 `$ D, z; Z+ z7 v; T
nDestPos++;
3 Y$ ]( }7 Z1 n0 ?* m( ~- u continue;
( S$ k8 h1 `) @/ |& ?9 n: ?2 b }
3 {4 \; K5 Y" X$ K/ [ pInvSort->MoveItem(i,nDestPos);
0 N6 [6 C% P% J A; |+ L# y g_DPlay.SendMoveItem(0,nSrc,nDestPos);! M# P; N8 c+ `* Z! z% x+ X8 k
Sleep(5);
" k* {2 O: ^$ _$ k6 F- i8 g8 M //Error("移动 - %d->%d",nSrc,nDestPos);
' B( J- ]4 \6 H% K. T8 ` nDestPos++;
( M# N; ?+ ?- G# u! O3 N7 ` q5 \ }/ d5 u6 T5 ~9 v; o: {
//取第一个元素的信息
$ ?, O4 _7 O- y: O& H /*# [; y+ _* {( |4 H5 ?: e
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
% G* g/ v* J. A1 |, C* J7 a {
. e! P2 p9 o, a) X) [0 f Error("Move - From:%d,To:%d",vItem[0].nIndex,x);: }" O' t+ H& \5 o+ x
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
2 O( N8 g, g+ w# w/ @ }
" j+ T3 p! p& e7 ~! y& S4 v$ S8 ^ */0 b" o$ L' a" F9 B
//////////////////////////////////////////////////////////////////////////
8 R. g/ |/ L# w: M$ J break;
7 Y3 w' U* [5 j3 y3 R }
. H% v; m- d6 \ } 2 _9 w8 j2 Q% g* g
}
( r, W3 _1 j( d3 I+ t. j$ o! Q; km_wndMenu.SetVisible(FALSE);
3 K+ g8 C! u ~0 n, _) c. B6 w% F6 B5 o1 r7 x% o
--------------------------------------------------------------------------------------------------------4 s0 |# w4 Z1 L; [3 e1 M
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
" V M( @! s w{3 J7 n; |3 u# V
BaseMouseCursor();
- c( w! g' P' J! M5 S}) U" {2 B3 B0 S) T1 |0 b; ^
在其下添加:
1 r( k% `; O+ \2 }' F. {# Rvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)* c# x% q1 I, _: f6 a
{) Y0 D+ l' a1 Q: w8 T% s8 O
m_wndMenu.DeleteAllMenu();- K* F; y4 C1 u0 N$ O* X( _
m_wndMenu.CreateMenu(this);
1 X6 t5 t) N/ ^! h" J# Km_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
6 b, ?2 `: `- x5 S' o" Z- `. l
# R; N+ k+ F) a( eif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))" v. Z) n3 s4 E
{0 t5 h+ c% f* E' J; _
//P以上级别才可以删除所有道具
2 l8 x4 V5 _; p* m* R+ G2 b8 h, R, X m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
1 I$ a4 J9 W0 p7 K8 _+ A}- m/ o7 f* }' Q4 D1 m& Y
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );" I5 F8 n' ?, l
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
# h5 t# T6 `7 C4 |; C; [m_wndMenu.SetFocus();
1 J0 Q% F7 N4 `9 F) Y# E& ?$ ~}
5 p4 h. a; m4 \0 D* C------------------------------------------------------------------------------------------------------------
5 U. G+ |0 v/ N3 O*************************
1 y% E2 B# H, k R* KWndField.h文件7 e2 I- `( @7 C. [, g
*************************
. A+ b& T. C7 [( u! j! Z! Q搜索:BOOL m_bReport;
! i9 T# s5 R6 Z; a1 `$ t- K6 f其后添加:% }7 _8 a+ X. e' F: C$ s
CWndMenu m_wndMenu;2 E0 N$ E& q8 e" |: u4 v8 p( J# U
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
" K, ]9 V6 t: P8 ^& z6 u! E; X" |其后添加:
) n$ E* I1 b1 b1 N: {9 qvirtual void OnRButtonUp(UINT nFlags, CPoint point);6 g& v3 V/ v7 N1 g- ^4 S5 ?% [
7 ?9 H7 I+ H3 y% H$ c8 L
7 ] k( }$ L6 L5 d, Y" L7 i$ w. ? |
|