|
|
源文件中_Interface文件夹下WndField.cpp文件, K' Y9 N" d9 O# `" b/ L* }: v. N
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
" T- \$ g4 ]% G f% v) g) J
0 _: o% B- c2 n5 T: estruct sItem
% e: M5 @* ^' V5 X{
/ N. W9 ^3 J: S6 K" z& R5 o! Q( ^DWORD dwId;
; M* c7 ~! @, G3 s$ @3 XDWORD dwKind2;$ `4 L: u# [1 t8 o9 j! F6 v
DWORD dwItemId;8 T# T, |3 e: p0 x
BYTE nIndex;, ~+ c' ~ _. C/ e
sItem(){
! i0 f1 x( T, e1 }" M dwId = dwKind2 = dwItemId = nIndex = 0;8 Q: T7 b+ ^, Z( n/ E( M
}
# N# t( _$ G# j9 Y7 f# V: j( P9 R0 jbool operator < (const sItem p2)
+ O, S/ S# d6 P2 q{2 T" b7 x" s0 G! Y* o
if (dwKind2 == p2.dwKind2)2 Y8 w0 }) c( `# t: _1 ~3 d4 f: V% L- Y
{
- r, |0 e$ M8 l: h! s% R7 l return dwItemId < p2.dwItemId;
) ~$ P9 i: S9 @6 z# L }else{
7 Q& v( p. x, D) F return dwKind2 < p2.dwKind2;! ]) z, x% t6 g
}2 Z/ }6 g, C; i1 w
}! _! q L: a2 ?
};
- K7 f) j" J. b. x4 Z5 Lclass CInventorySort% p+ o' p5 {! t4 k% F- Q
{
3 X' E2 Y$ v1 h8 Z) W# Bpublic:
' ~* o+ V9 w+ _+ o, G# yCInventorySort()
0 V5 `6 e& l8 n/ e3 M{
+ K" ]2 I/ i' R! `" B m_dwPos = 0;
+ r7 Q! n" {% C% G) p}
7 e ]8 O% A3 j- A~CInventorySort(){}. l2 X G8 m' D* ?, l( s' S0 T
private:
2 ~" Y; T5 r4 G( `# ^' UsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息4 J# P0 ^& ~" U$ m
DWORD m_dwPos;
7 L5 A% A$ Q2 a: [- ~3 d6 ]public:+ Z0 I& V7 z$ o& K1 q0 j
void Add(BYTE nIndex)
4 s6 `4 _* q: t" g: x% f4 L{
. o, H/ L* I8 O7 Z- C& O if (m_dwPos >= MAX_INVENTORY)5 b& {5 V0 M9 T" p6 E1 H+ f4 P
{
- q: Z9 B& W+ w& j4 _8 s( B; p: C return;
: W, ]: h8 ~8 v) w0 K% l }: ~) R/ I" L7 l9 ~3 l9 q& H
m_Item[m_dwPos].nIndex = nIndex;$ W& @, w1 T( B" @2 ]
m_Item[m_dwPos].dwId = m_dwPos;
" V1 g* e; z# R5 P4 L7 n: m m_dwPos++;
$ B$ | ~" ]# K3 q* D}
8 ? C% \3 z J6 I8 A6 tBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列( V ]/ j: `( @6 Y
{
; q4 ]/ s2 _5 T G! A$ k2 n k for (int i=0;i<MAX_INVENTORY;i++)3 J5 |, v) s4 d Z! |
{
3 w l1 B8 B+ j1 J6 g if (m_Item.dwId == dwId)
9 n$ S+ I' Z3 U) E {
% o. ^" T( f4 c x8 l1 J; a' s7 S return m_Item.nIndex;" I3 h+ _( [) L2 R
}
' f# h% u+ f' }9 x8 f }+ }2 i) Q8 Z& f3 ^' K! j
return 255;# J# D; T+ u$ ^1 n
}
5 ^) q! ]0 J; Z0 }. L6 f6 ]/ p/ Dvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置- c/ f" s$ l' j" j* N6 v3 s) ]8 o# N
{
/ y" M, A0 l0 o: Z: g; R I1 i/ F BYTE nTmp = 0;9 s/ I- g" o5 h( {, M3 u" V
bool bDest = false,bSrc = false;
1 @, n5 \; c0 R+ I for (int i=0;i<MAX_INVENTORY;i++)
3 r. m/ ~( D" O% a/ M2 k* K+ A {
7 D$ N! q! o" \- A" w if (dwSrcId == m_Item.dwId)4 M' V7 c7 E2 k1 J6 p1 k
{
, P! m& F1 F4 x: l. R6 Q! c' Q2 q //id相等 则 改变对应的dest和src* b- O L4 D; N/ e$ }* t
nTmp = m_Item.nIndex;
8 E0 E# w' F( y m_Item.nIndex = dest;
/ P, B! b. M4 L% U6 `8 ` }
; ]- ~5 @; M" ^4 r& v/ x7 V% z* { }
+ X" t5 Y2 S% a //临时数据保存完毕,交换开始
3 ~8 M K9 }2 d/ v3 H# s+ M# e9 m for (int i=0;i<MAX_INVENTORY;i++)
. E' l: I6 B e x2 q {
& X3 Y$ v" h Q& r& [/ r! M if (dest == m_Item.nIndex)
( p" K8 N4 ]6 Q/ l4 ~: z% ^! Z {, V$ h5 @: ]/ B7 v" m
//id相等 则 改变对应的dest和src w' h8 j. b6 X* O0 x
m_Item.nIndex = nTmp;5 }- p/ w7 ^$ ^! h/ n$ j. j
}- ?2 C4 _; `+ a. t- z, }) A
}- u% g+ X# l' S2 h0 Z' @# t
}% X E0 x2 q4 e3 L
};- b& o) D& X" V7 u
-------------------------------------------------------------------------9 V. @3 }# K: G; m- `( \
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
' d* q0 ]. [5 d# v搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);& E4 ^5 {4 ~" Z$ i7 k
紧靠其上添加:
( S1 J4 x+ z( e* [2 r: aif( pWndBase == &m_wndMenu )
# o1 B4 S% E/ x# [5 i/ |. k% w{
4 n+ m8 k3 S5 U4 o3 k0 I switch( nID )
5 N+ g2 t- n; X. m {
& M% p9 X2 ~5 a2 D case 2:0 P, i' ?% ]1 H4 |0 {' v* j
{, I% Q3 f W+ d
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);1 b4 ?! P4 K/ e K) \% S& y
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)): P* ]1 T5 a9 B% i, o' g. `
{
& ?$ N- S7 s/ A* t5 K. h break;( K' ]# y; F. L ]) B. j
}
* S% k& v" }, t3 q q for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
# {0 `; Z4 `8 T- H/ ? {7 ]4 z2 |& t- z! Q* }# Q3 r
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
8 Z7 [" S* Y/ M7 a/ H if( !pItemElem )
: ]" q/ B1 n/ B2 Z+ O continue;
& [9 G# Z! v6 m% i2 `% O3 B if(pItemElem->GetExtra() > 0)( @ S, a7 ^ `3 Y. T" M
continue;/ `$ E% p4 M( i8 [
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ' t; h4 d3 t/ G
continue;
' J; a1 V. m, T, I+ x2 K if( g_pPlayer->IsUsing( pItemElem ) )
' n- V7 T5 X c/ D5 B4 }8 z continue;
7 N7 b7 f9 D+ t6 _1 R. y$ L if( pItemElem->IsUndestructable() == TRUE )9 d3 Q6 f' b5 ]/ V8 X
{
1 L/ @3 m8 {$ U: |5 j- P4 B g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
* p @$ p) z# j. S9 A ] continue;( P5 O, W1 m+ i& |# H8 o
}- d* x# k; ]. f! j- e( G
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
$ u. W: F* L$ o& E6 t1 W" I }
; ?& A4 q# e5 @5 m5 `# n break;
' Y; z7 t d1 O9 A) w% k }
* ^. K" r4 H# m% Y case 1:, b7 B" Y3 A8 k( d
{; @5 s" Y/ u, s% k5 ~
//整理背包- T8 d2 e# |1 H3 I; N
//////////////////////////////////////////////////////////////////////////6 E- i) W' K4 g
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
4 \' }/ c: L! D3 B: O0 U% T //////////////////////////////////////////////////////////////////////////; ~" l% U1 ^) D+ Y! w" ^
//////////////////////////////////////////////////////////////////////////& @, z0 A0 C- E1 z. d
CInventorySort* pInvSort = new CInventorySort;% ~3 ?! o0 A1 ^! Z( g# Q8 d% E1 ~9 {
vector <sItem> vItem;
- L- w. d: d: \ y" ^$ O/ a* | vItem.resize(MAX_INVENTORY);//初始化大小8 u0 E- t0 d. z. m# Q- d5 e% z0 F
//////////////////////////////////////////////////////////////////////////: B. c0 W- D* q' Q2 k9 q b" d4 J8 w/ i$ I
//填充数据0 ^3 E9 A" Y/ l" @: E+ i7 s2 u; O+ h
for (int i=0;i<MAX_INVENTORY;i++)
" U' @1 Y4 S, ~* a {4 |/ a, s6 \* M1 Z9 t. O
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 M" j0 h5 P$ b2 t# l9 Y if (!pItemElem)
9 h# \ u" u( R4 x3 i" w {* I; A0 s1 K0 f% M
vItem.dwKind2 = 0xffffffff;! u5 t6 v: n; u; P h3 G2 T
vItem.dwItemId = 0xffffffff;
o2 a! Z+ Y# ?0 y- @% ~ vItem.nIndex = i;5 V! U* Q/ ?6 O, Y
}else {$ l( C8 e& u) v; i
ItemProp* pProp = pItemElem->GetProp();; \- ?5 ?' N) O* y/ q
vItem.dwKind2 = pProp->dwItemKind2;
3 e+ B7 o/ m# l& s vItem.dwItemId = pItemElem->m_dwItemId;" y. ~' x. e2 A2 d8 C W
vItem.nIndex = i;5 o b* T% ?5 Z* S0 ?# c
}: U5 x/ R! [, d7 P# _% \
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
0 A4 {: U+ D: Z }
4 O0 P! }/ i$ S$ X, X //////////////////////////////////////////////////////////////////////////
4 L3 k6 @4 N6 m- r sort(vItem.begin(),vItem.end());//排序' `" g: T i/ N; e. t% p
//////////////////////////////////////////////////////////////////////////, z7 M- m( }: n/ ^# @7 Y
//交换% G8 U j; }% Q4 M/ Z
for (size_t i=0;i<vItem.size();i++)) o- O& \2 t" v- J z9 K/ L; D
{
+ [/ p" ]8 D) r) F; k2 ` //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" J* Z7 W: H+ q+ x0 S3 C, X
pInvSort->Add(vItem.nIndex);
5 U& V/ m7 s5 ?& q }
! d6 K% q9 q& l. E Z- v BYTE nDestPos = 0;
% S3 \! X. }7 O! }2 S% @ g1 x" h for (int i=0;i<MAX_INVENTORY;i++)- [$ u, U7 ]/ Y: B/ a6 S
{
% ^% a# d2 H0 I8 q) r CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);; x# J2 _6 e7 a& L- Q2 B
if (pItemElem) N7 C/ J! U' a1 [
{7 `$ d7 Q, N2 u8 I
if (IsUsingItem(pItemElem))
+ S8 G/ s/ y( N8 i {
: P; w4 _0 j+ v4 k //这个位置无法放
, r# n- X* V" n& A; I nDestPos++;
; @7 C4 L* ^& P% F( U4 F' r& A5 L- N) m }
1 L0 I/ w% B/ k+ N A+ |( E }
D g8 _( j [! i c! }3 ? BYTE nSrc = pInvSort->GetItemSrc(i);, ~ \- T; s W! p+ x+ {
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
' U$ m3 q5 x' S m5 W4 K! A if (pItemElem)
8 S" z5 f+ `. G {
7 ?& w, x' O+ n7 b if (IsUsingItem(pItemElem))
* W8 J- n) ^9 C {% ?' L- w" T/ h5 ^1 E
//这个道具无法移动,跳过
0 K/ b5 x; \! ?. X+ g continue;/ M& x: z$ [& D
}
2 v! ^* z7 L! l* e5 M# U% G* e! Q }else{& t# {" E- m. ] r
//空位置 不用动
+ A$ O* O1 n; C) _ continue;
- n1 G- E4 t2 k2 D) ^ }
& h `! H/ G4 w3 y1 X d: t# t //////////////////////////////////////////////////////////////////////////
, h! J# d! [: U _/ G //开始移动
/ z& `- z5 i+ P0 G if (nSrc == nDestPos)
2 s' H* @7 O. y/ P3 i {
$ f) b3 J$ F2 { //原地不动
6 |( `3 n/ j; Z2 b4 X% p, E nDestPos++;; H7 n( } U4 ^+ c4 ~9 M
continue;
$ {2 L& Z% S, ` a f4 ? }7 h6 f' a6 l# p/ I4 \
pInvSort->MoveItem(i,nDestPos);
# A$ N4 S7 W8 q' y. m: \* u& d g_DPlay.SendMoveItem(0,nSrc,nDestPos);
4 |3 N. k$ [, J7 l1 u9 X" t Sleep(5);1 \' O' J% h, c
//Error("移动 - %d->%d",nSrc,nDestPos);+ q$ T. n- {2 _8 G4 f! c' n
nDestPos++;9 I7 V6 |3 a U% n: d0 F9 B0 E! H
}/ V; O/ A# q- \5 Z% G
//取第一个元素的信息' T5 R% [4 S' o, j
/*
4 d" [+ U; [2 K$ W3 i& y if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
; T @# s$ F. S T {3 N4 E) j: I) N3 v. ?/ ^- z
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);) v4 h* @( { p% W: m+ K1 [+ m
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);1 d9 d" p6 K6 i' T/ N
}
! I) g9 c9 \( c */
1 G7 N; ~' Q6 s //////////////////////////////////////////////////////////////////////////5 v |" N' b: t% f+ W% L
break;. p2 n" M( a. |: Z* L
}* K( e4 }" ^; T7 `" z3 P- G% |
}
- k9 m! i; a: d, G# Y) B* ~+ w}
" E A4 X/ J5 C; H dm_wndMenu.SetVisible(FALSE);7 C4 z( ~6 U8 M! {7 y0 H
! `3 i; S: o+ g/ y, P--------------------------------------------------------------------------------------------------------
: ]& s3 y2 i5 A. t& q搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
+ C7 r: \ }* G- L( T0 c+ Y4 N& h{
4 }: q8 \4 G* d6 j8 ^$ e* VBaseMouseCursor();+ m4 h) D6 c, F" q8 |: a7 C& T
}
[3 F; `: @. s' n0 v在其下添加:- _3 ~, w5 K7 Z! r8 e
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)* }1 q y. \1 c4 L7 \
{
( L7 I- r+ x: D9 T1 Mm_wndMenu.DeleteAllMenu();
, l' C3 k& E& _m_wndMenu.CreateMenu(this);
# h4 o# H) ~+ z& C; Q8 T& Pm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
0 T* _, n8 d' U% v. {9 F; O: `: p3 [( J
. q; Y- W5 @: H! j1 E6 X6 P8 Uif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" N: |3 J# R: N- U! {{/ W, {/ g2 ~8 A. }
//P以上级别才可以删除所有道具
% i7 k* W2 Z6 K6 M3 g) P( r! q m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");- y, s' H2 K* x3 u- M3 @
}
# L8 {4 x U6 v- h! x& @m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );. W# i+ T; T' I* f# A
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
: Z; d; L& i4 V% Ym_wndMenu.SetFocus();4 p9 K. G+ f# b! m5 u2 Z9 f& E; n' V
}
* Y5 F" ^7 k/ e5 f) I" E i------------------------------------------------------------------------------------------------------------7 z' m/ h4 F/ B$ Z4 g
*************************
. H. Q- n+ v2 {3 j( jWndField.h文件; U& W& {9 o: ~! g( {/ j0 A
*************************0 k9 F4 g3 S3 h) d5 w
搜索:BOOL m_bReport;. y' h5 l) c0 O) u2 {8 C
其后添加:
. ?- c3 B7 k+ R, YCWndMenu m_wndMenu;
* ]& ^# |& U" @. @搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
8 n* a, i+ c+ F# N+ _' B其后添加:
' o, v: b! i2 S0 vvirtual void OnRButtonUp(UINT nFlags, CPoint point);
* }) {+ |( l9 G, c1 [) }& |: \* r. n, D
; d% D9 W8 W" J. N4 C! P. g
|
|