|
|
源文件中_Interface文件夹下WndField.cpp文件* n, \* {- P2 o0 R$ i
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
6 ]: l5 x" j0 Y) N& M
5 o0 e8 S* V# Nstruct sItem
% m" `* k* p" S/ {% ]. @0 o% x0 R{
# A' r* _4 g8 p7 u3 MDWORD dwId;
?& L/ W( q+ A" I7 n; U: PDWORD dwKind2;1 ? Z2 m( G; _8 b7 O
DWORD dwItemId;
2 X1 Y7 \7 a2 ZBYTE nIndex;! ^8 ~# h& D3 \( v# \& V
sItem(){
( w8 p/ Q% K. e dwId = dwKind2 = dwItemId = nIndex = 0;
- X% ^8 {1 T# F) w& R: q}1 `' f6 G2 j) V* n$ k/ t
bool operator < (const sItem p2)
7 i0 M5 }, I0 ?2 K# v, p2 B, l{5 `6 X |% d2 u, l: [
if (dwKind2 == p2.dwKind2)* [$ X" f6 |; Y- M) w& b. S2 W& `
{% Q& r, O! P" R: u1 V6 o$ E2 c
return dwItemId < p2.dwItemId;* F+ z/ b- d, d4 z( X/ S
}else{
2 v; b! i7 n/ f3 a0 y4 P return dwKind2 < p2.dwKind2;' J9 R, c+ P5 p
}, {5 L# W2 d! n: W' C( W
}
5 O& M7 R: }* W4 ~) z# M};
# T- G m0 w5 A5 i" dclass CInventorySort
8 i8 _* p0 M& W, X{
1 H: k4 y+ _" p( P6 M3 g8 ^public:
3 J: k$ g4 l3 d! {6 z0 |' JCInventorySort(): B4 |, e6 K- J7 I
{
: o# c c* Z: S% S' G) i m_dwPos = 0;
; m& Q* ?- q- G4 j( ]! Z4 j}
& H5 W- \# g1 w8 x. y5 b: {( h~CInventorySort(){}" u/ y* b$ H8 m& p
private:6 u- Y6 D1 n3 t' Q0 o @
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息' O/ r& \; t- Q9 q n; L2 W
DWORD m_dwPos;
: y: m- H8 @$ B! y4 ypublic: h+ r( x6 {/ V( v8 Q2 O7 A
void Add(BYTE nIndex)0 Y* S% H8 T7 @' V. ~" M
{
1 R8 [ f5 ]2 I) ]3 O; v; `' N! O if (m_dwPos >= MAX_INVENTORY)+ S L' m- T* Z) W* |
{
; w! W+ B. v$ s# |1 s! {" ^- N return;# W3 }- l% R9 q/ Y5 K
}& [; a' ?: ^: T- F0 V- _
m_Item[m_dwPos].nIndex = nIndex;8 U3 i3 w1 G4 ^3 _
m_Item[m_dwPos].dwId = m_dwPos;3 }* Y' @: k% V6 j& g
m_dwPos++;
- s# Q1 p/ C% g}7 q9 ^, m: M# L
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
( d* Y$ w; c- _+ i6 Y{
! D! J) g# b) W3 y$ I- z1 y for (int i=0;i<MAX_INVENTORY;i++)
: p9 Q% u* T3 q$ U9 P* s {. S3 T: f2 U: U% Z; y
if (m_Item.dwId == dwId)
* S2 M4 Y4 M2 B: H" P/ K {
! i# B: V& [/ L: T return m_Item.nIndex;
- q! P* _ A6 o }, m; x b7 ^: Z: d X/ }, M
}
- i6 x H7 j" o1 I `& [' F% O return 255;
0 t* B& l% ^# F}
4 G1 q+ Y6 d5 i9 rvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
: x: I% `/ I- j5 t{
% O7 Q' k" Y; |+ i/ y BYTE nTmp = 0;4 W1 E+ v: P# E% R6 e
bool bDest = false,bSrc = false;3 w! I' C+ A% X7 s) @" Y9 d7 J5 h" ]
for (int i=0;i<MAX_INVENTORY;i++)' p4 E/ l9 H" b6 N; a G
{
* x* H& B4 Y& H% D if (dwSrcId == m_Item.dwId)
. S. i D& |9 B1 A8 O {
5 H) K5 q% K# m0 S" y9 B //id相等 则 改变对应的dest和src7 [% T3 D& m! G1 }0 F; _& m# R5 W
nTmp = m_Item.nIndex;9 m" X" ?3 o: x- v+ x o$ O7 A
m_Item.nIndex = dest;9 U( ?- ^% i* |( L2 @$ a5 N u- Y
}
" w: o$ W. \$ N' _% k2 I }; u3 g* b, _$ m& S8 n1 h+ T
//临时数据保存完毕,交换开始7 L0 l& {$ g/ T8 a3 S" F/ r( c
for (int i=0;i<MAX_INVENTORY;i++)* Y& p) L- l& S/ W) x1 u* c
{
* j8 F* m' @. F5 q% \# A, ]3 g2 u if (dest == m_Item.nIndex)
3 s Y5 n6 n9 E6 x( A' L- s$ k {
' x; }& o+ }9 V* q/ { //id相等 则 改变对应的dest和src
! I# I7 A- W1 L m_Item.nIndex = nTmp;
1 _1 e/ o$ s! Q; u9 j }
% l% Y, f1 [- }- W }' _3 Z" s3 T: g( l. L
}
6 U7 x" i0 X( {, A1 K( [};
. G& U" n2 R. u3 Y: X1 s) v-------------------------------------------------------------------------
9 a/ A W0 C* N( _$ o( Z依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )) z0 W) O# O) a9 X. X1 G0 p+ z3 Y
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);! v' d& K- |) D$ W9 y) y5 j* Z
紧靠其上添加:
. ]3 X- `* g1 y3 Vif( pWndBase == &m_wndMenu )
6 A3 V% n, O1 v( }! ]5 G* n0 k{) \+ ]$ n7 Z! F* H' n
switch( nID )
' z/ t5 r/ X/ [: k6 ] {
. X3 F# f& l k: p+ g) A case 2:& h6 q: G7 K9 ^1 g- s$ r e
{4 Z: s e/ B2 i; o
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);. y/ t% r6 @/ k+ ~! u/ y( [
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
( D! B; ?( g: t, ]+ R% ~/ I+ _ {; k6 |: F4 V8 k+ A7 s. Q
break;+ ~" G- \! g& g u
}( e, _* b. d) `9 ^/ v
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
/ \, ~% ]3 A U$ d& { {. r4 t. p/ R# Z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 U8 K- x8 X/ l if( !pItemElem )
5 H$ Z) r- ~+ E7 r4 V M8 } x continue;/ F# E! i9 }: B F4 G3 t$ Q
if(pItemElem->GetExtra() > 0)
* l% \# w% `+ u: U. B1 v% e continue;
8 a" k" t# Q* U1 w( r) r6 ? if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 6 }- E3 e: e8 ]; |8 l! X
continue;# Z, }. }4 H* t" N% K
if( g_pPlayer->IsUsing( pItemElem ) )* ], h: f* \7 {* p, ~0 q7 r2 X
continue;
& Z! W0 Y5 B0 X* j- y9 ` if( pItemElem->IsUndestructable() == TRUE )9 V' w+ Q/ c- d6 E! E
{
% e: [! G7 }6 c4 y7 E g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );% Q4 y7 w9 q) h" ], Y
continue;( Q i# z' u- C, J% m+ `
}
3 L) J( D+ H8 ^! n! A2 V) I7 g g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
& X# ~5 |# _; t6 S" G% l }1 _& J; |, E: e; H5 F, F
break;
* W' g+ Y9 i8 J# Z- r2 O' }4 K5 M }
# g/ Y& k* m! ]5 ~" V case 1:4 }+ y7 f [8 C0 z. U/ B* `+ j6 |6 B
{! \+ }' U* M) |5 v- r3 h
//整理背包 ]6 B1 e! ~" V( f
////////////////////////////////////////////////////////////////////////// P" W. d# [- D& S
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );4 {# X( G3 b& d; {# G! t$ D
//////////////////////////////////////////////////////////////////////////
& A) L. \/ u3 I1 _1 M //////////////////////////////////////////////////////////////////////////4 p7 S6 A# I8 m* i
CInventorySort* pInvSort = new CInventorySort;2 \6 v; \' y3 O Y
vector <sItem> vItem;
" r; ^, w6 V3 j, n% G# x vItem.resize(MAX_INVENTORY);//初始化大小* s0 Z6 o' q$ r; ~
//////////////////////////////////////////////////////////////////////////3 ?/ e( V" H/ \/ S7 d! R' g1 H
//填充数据+ Z: E2 a; _2 H+ n4 J
for (int i=0;i<MAX_INVENTORY;i++)
4 N4 U8 s m7 l {1 b }4 M; e( C* J' j
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);; X: y7 w5 u5 O% P% `
if (!pItemElem); w& Z, c# S% `( f
{* f# y ?. V) k2 S
vItem.dwKind2 = 0xffffffff;
& J% L% C- E' r5 b vItem.dwItemId = 0xffffffff;9 [6 @; W) I# Y# h
vItem.nIndex = i;4 P* }5 s* [0 H' B" q" S: O) ?4 t
}else {' c4 D' r; R# _4 c8 n
ItemProp* pProp = pItemElem->GetProp();
) F. p( u2 j3 K vItem.dwKind2 = pProp->dwItemKind2;, e8 P7 ~1 Q2 [- x
vItem.dwItemId = pItemElem->m_dwItemId;
5 h: V" Q* M1 ^- m6 l. Z3 a: |5 o. `1 @ vItem.nIndex = i;
: Q0 v; k0 ~7 F5 T7 Z" Z( ~ }
0 C5 h. Y" h8 d6 u% ]0 m( y8 Y# w //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' V0 S$ c: H6 y" J$ H3 T8 L5 g0 R
}8 r1 O$ m% c% X& v
//////////////////////////////////////////////////////////////////////////
! P+ D# I" k8 G3 s& B sort(vItem.begin(),vItem.end());//排序3 I( L |. r# i
//////////////////////////////////////////////////////////////////////////- W8 V$ Y I2 U F) o2 `
//交换
8 e# x" O$ h0 p. a3 [ for (size_t i=0;i<vItem.size();i++) s) T; v% }% P, `5 C; {. @
{3 \0 N6 G8 O- m) m4 t% z9 z
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" \9 w% }& p6 \+ T5 \5 h% n
pInvSort->Add(vItem.nIndex);4 d0 `6 g3 {) ^! l Z9 h
}
1 j5 [0 `- R4 ]. z' S: F# ~ BYTE nDestPos = 0;/ ~( ^0 C, m4 q ]0 {/ o
for (int i=0;i<MAX_INVENTORY;i++)4 \$ `9 a+ ~+ m0 O. M* X; V
{, s2 F$ f7 g5 A+ N
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
9 T4 y8 E2 j* F: o% e if (pItemElem)& y, K6 d) |( `
{
- V2 [1 G0 y% n if (IsUsingItem(pItemElem))
7 t: ^" b, B' S {; i3 a3 @# e6 `9 c( a4 S* l9 `
//这个位置无法放4 ]3 w$ P6 Y5 q! p8 }; t4 s
nDestPos++;
U" t+ q/ o0 ?# N" H }! Z8 w' {8 h; }6 z" m1 l8 m
}
2 v; x2 R2 |8 q9 r3 p" j) T- a BYTE nSrc = pInvSort->GetItemSrc(i);
1 u- b L; C6 x( ]3 |+ }) G0 \* ? pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
8 Q ]/ m8 m+ g3 Z if (pItemElem); h" a2 F$ w* A. Q% S
{, A5 P; a2 Z" k4 y
if (IsUsingItem(pItemElem))
* n9 H3 M7 M% V' ]8 i L# l; y( b {8 u+ k3 b, p+ R0 H* \, ^$ x
//这个道具无法移动,跳过
9 o# |/ c1 j0 Y- _5 r continue;6 O( i! u9 b& Q$ W0 J4 b
}) N( Q9 x; o9 A2 n
}else{ b$ ]- c, s/ M) p: b$ n6 v' Z
//空位置 不用动
6 }' j/ }2 _8 |5 h1 Z) a) ]$ @ continue;( _9 r8 ~+ c' p5 a# J7 d" p, v
}0 I% N$ \3 z& u! g% e
//////////////////////////////////////////////////////////////////////////# o' I% D `% t% M3 P- \/ P4 R
//开始移动
! d; j7 J( h/ u. ^* D if (nSrc == nDestPos)
( `% A0 g% g( i$ [8 j0 X {/ n: O2 J5 e% U Z
//原地不动
* f& n3 [! P6 n! X( n nDestPos++;
T0 @1 A5 ]+ K F0 ?% r continue;: Q% k& N) K7 I) w3 l' ?
}
: X2 S9 Z8 \: M# S a. W: y# p pInvSort->MoveItem(i,nDestPos);
q/ r) a; j k! @- Z$ c g_DPlay.SendMoveItem(0,nSrc,nDestPos); j# P* y% p, n& I; x% @
Sleep(5);. V- e2 ^% J% r. |
//Error("移动 - %d->%d",nSrc,nDestPos);
* X- A9 k8 \7 \$ b3 x nDestPos++;
% F' Z) {3 } o2 F- h# V ? }) n6 _; \, j) {# H, r3 F
//取第一个元素的信息
' Y0 C s% b1 q. |! Z- p' c8 S0 s /*
P$ Q/ Z5 Y8 d if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
+ m4 {- v5 Y5 T( o3 M: ` {
' G# l' [5 j- P: Z Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
: r8 k- C4 ~8 H2 U9 [, w g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);2 C9 k2 V" u5 J" c4 X0 D# b
}
- ]5 g; }! _, D, A8 q9 M */: g8 E A' `3 h H( {) N
//////////////////////////////////////////////////////////////////////////' f8 t, x& `4 Q/ J* J: K& V
break;9 l1 J* r: \* N& x' S' ]
}8 G7 g; x% E4 L0 V- j5 y7 [
} 3 |" A6 ]# J+ d* x. ?' D
}# q1 B% f- |5 H* j! g c; C1 T& Z3 d
m_wndMenu.SetVisible(FALSE);
& c- |/ T( \2 O3 K: @
& Y* V( J$ x4 M3 E. }--------------------------------------------------------------------------------------------------------
" g0 O/ f- Y8 N" H: o& [搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point); y2 {, m9 ]3 ]
{
4 ~# V! e* J8 H6 v# G! G/ FBaseMouseCursor();, g7 c- u! F* z, x" w- F
}
% J5 @% y" l9 g# N7 P* b在其下添加:
+ i+ ~5 s4 D' t: c: Y" y. B& J4 Jvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)1 @7 {! {2 b% b& \) F8 {0 S
{$ N f0 K$ K# I' c4 K9 M' B5 d+ l
m_wndMenu.DeleteAllMenu();
; W0 m' k8 T/ B) `. J5 Q6 Rm_wndMenu.CreateMenu(this);- j9 W# p: e+ T# t, `3 V
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
; `& l, }' }! W7 F- q9 I$ S# y, S4 U' _- v- J2 |! ]
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))8 z. F+ b5 w2 a9 n: ~
{3 M6 T1 e; Z' g; [
//P以上级别才可以删除所有道具
$ {: o+ r5 ~, R m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
' N' d; \7 v) g0 n9 E}
6 h) u0 g# _$ A1 d+ B. K7 Dm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );5 R. J+ h& F/ ]: w- ]
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
* ~8 ^3 A k* G( z$ Lm_wndMenu.SetFocus();6 t s+ ?8 a3 x2 [
}* H, _# E$ g1 r2 z) _! W
------------------------------------------------------------------------------------------------------------, |' O n+ T' N
*************************
1 _9 a n$ P2 V, q5 v0 BWndField.h文件* w, {2 D( u' F" m2 ]
*************************% V, @ {0 L( m; |$ _
搜索:BOOL m_bReport;& s3 s3 V: `' r1 s( z7 m3 v
其后添加:
8 d3 w2 d' l2 r, y1 f& [6 `1 K& CCWndMenu m_wndMenu;
! H2 [5 q, A& {) `( e2 M6 M o" E# x搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);0 K4 p: T, D7 h1 T: l4 P/ Q
其后添加:
% V, Y4 g e* G+ \9 {7 j3 Nvirtual void OnRButtonUp(UINT nFlags, CPoint point);" z. X5 E4 T% R" F! r' i$ ?' a
) v% d$ k3 v4 x% x8 _$ C- ~/ o3 G, V. P+ x8 h
|
|