|
|
源文件中_Interface文件夹下WndField.cpp文件
" l% V3 Q. b. B8 p% f搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 B! d) X7 z/ s ] q
6 r, B% n6 t6 Z! y. [. ] z: D; wstruct sItem
4 F& v- s X/ }+ x{
% x- j5 z5 M. v# f. x" WDWORD dwId;
8 ` q9 s2 _2 FDWORD dwKind2;+ z* H: E* r R/ G, [1 D# Q( [
DWORD dwItemId;
; L# M& G! ?) ?1 E6 a% I5 JBYTE nIndex;
& A" t- ^ Y; TsItem(){
5 B$ V( z: ]4 _! o dwId = dwKind2 = dwItemId = nIndex = 0;" X* Q$ p1 K0 r& L8 b4 Y9 ~) f
}
0 V2 U* C6 X. i3 I2 `$ K5 z9 Abool operator < (const sItem p2); Y# T5 k7 f3 q' l# I: j" y
{" C! B, ?# E. d3 s) {- g
if (dwKind2 == p2.dwKind2)7 {$ H! e% P1 e" f2 p1 l
{
) b+ b% N$ O) f8 f7 i/ {& t return dwItemId < p2.dwItemId;3 h/ {1 Z7 g/ d7 }# A& `
}else{. _! A* i+ t3 x. ~
return dwKind2 < p2.dwKind2;
& G9 W$ Y" \( f% Q! l }1 c# x1 X. q. M6 W2 O; {( u
}
) l& P$ A2 |: t; }3 H};
, K1 w# s, C9 [: }class CInventorySort
6 [# U8 r- @3 X' z( o{
8 m$ z1 A f1 N: T3 V5 M: H1 J7 l% A V8 Bpublic:3 [" z0 o+ } S: u- F5 V2 ?
CInventorySort()3 Z/ B$ P; e) n# B1 H2 b
{" a* L) ^9 ~' O3 n
m_dwPos = 0;+ U- E, ~ i: I
}
, o- z1 ]/ H E0 p7 C3 W- W* ^* k~CInventorySort(){}
, {1 O C: L4 i& T1 C4 kprivate:$ w: }9 Y9 p% J( a5 i( \3 M. E7 E
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
" b R. h5 m; i6 b1 F9 u+ y3 EDWORD m_dwPos;' S, n) B) m4 m. `
public:! j% b7 g! `) e
void Add(BYTE nIndex)( L1 ]5 \; \, K8 |- Z$ N
{ j5 K- y5 I$ k2 ~/ j
if (m_dwPos >= MAX_INVENTORY)
; h% B& m" W0 C) ~ {- f2 N" Y: A& S8 r, [/ }9 y
return; W! S' m. g ?! N, A
}
2 I& t6 D) ?) q0 h* J8 x4 r m_Item[m_dwPos].nIndex = nIndex;
' O# e! S: f- n m_Item[m_dwPos].dwId = m_dwPos;
5 W; y; a! A& W U0 Y m_dwPos++;
B Q% {. f5 G E, v1 J}3 Z9 W7 Q' E% G0 d. R @
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
3 z( U2 O8 `$ e7 U, d, c0 O, M' u{# R: m$ L7 ~5 c- Z, }
for (int i=0;i<MAX_INVENTORY;i++)
0 a8 U, H5 u% G8 w {
$ I) t" h# ?& _6 C; _! i5 k! [: J if (m_Item.dwId == dwId)
' j7 L4 ]& h2 s- R$ z- Y; o {2 a7 z0 i! t) Z
return m_Item.nIndex;+ P- C4 y( U- I% v
}
9 [ o/ y- g$ _4 h7 l0 r. H* ~' j- c }" w" c" f4 P- B8 r* F5 f
return 255;
5 Y/ W/ c8 N8 W, ]}# }) t0 ^) P( ~# d
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置- g! a/ T" z% x4 }
{9 d1 S \! O6 @' X1 A6 T8 h
BYTE nTmp = 0;
: s. B6 n" @- N/ Y# h ` bool bDest = false,bSrc = false;
2 ?/ m5 M7 q1 t for (int i=0;i<MAX_INVENTORY;i++)
! s9 s6 T0 L" C$ K) _; y+ ^ {
) Q/ P% A& z }% \& s; f if (dwSrcId == m_Item.dwId)
) W9 h* C2 }; z {
8 n4 H1 O: H. x2 b //id相等 则 改变对应的dest和src Q+ `! w2 s+ ]4 H( k4 G5 D" n( W
nTmp = m_Item.nIndex;& a( [2 D+ c8 g
m_Item.nIndex = dest;
2 r8 p8 y0 D$ q% U: y! I6 ? }7 Z+ `2 F% Y1 H" [, X" u3 Y) q5 `
}3 U& n. t1 j5 E1 n
//临时数据保存完毕,交换开始
: Q; l- U: Y$ R; |; P for (int i=0;i<MAX_INVENTORY;i++)% N7 D- n8 J$ `4 n N+ X, d
{
( `$ p( }0 u/ W9 z1 [' H6 T8 V if (dest == m_Item.nIndex)
- D& ^9 H7 k- j4 Z7 l | _ {
2 \/ U2 _ p2 H: r/ T1 ^7 A //id相等 则 改变对应的dest和src( Z8 \; i7 h; z
m_Item.nIndex = nTmp;) j% C0 }$ y) j8 H
}1 I2 ^, N% y& b! ~4 T+ J- t/ T
}1 W" o% X4 {: n$ N6 M1 g) d1 m( C
}: ^, [% `5 X; V1 H5 b+ l) `2 Q
};# F1 i/ z8 i, B
-------------------------------------------------------------------------' z! c' n! ~! `9 P9 b
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 _. C) q) N, ~( M
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
( g8 h7 D' u7 o$ v: a! b _9 M紧靠其上添加:9 i/ {) a5 b6 T6 |$ B$ n$ Y& S. u
if( pWndBase == &m_wndMenu )
8 u! N! x, M# @; c; \{
; ?: l1 x! P/ H1 ~8 e& M switch( nID )" e& [1 S5 c7 j! a' I2 A
{
6 u* m* A4 b. N2 s8 ]$ \ case 2:) M; ] K* K8 Y9 u
{
( m; e+ k$ t8 v! K! t1 h- Y- j //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
6 V7 Z( Y$ V( J$ A! L1 c. B# n2 c if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. n! _/ {% o; h7 r- c, _1 P! W' c5 Q {, |1 j. W+ x7 z- I, @2 J- T. B
break;
! N# Q: ?( [. y8 X2 T }
% h# x7 i, n9 R6 n for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)8 g! N; w7 d+ i: B! {8 Y
{
8 h! R& b* y) t CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% b! I* ] O* q# {
if( !pItemElem )6 V& k5 s% [ j9 p0 V
continue;; r3 A/ W2 Q# K6 _4 u
if(pItemElem->GetExtra() > 0)4 R) w' N( \, ^: X1 y; |# G* \/ N
continue;
/ Y |1 K+ c+ b: T9 `( H$ N if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 0 \& f0 x1 d4 ~- C9 {/ [ }
continue;
9 U% U) i# Y! ?/ |9 w p/ E if( g_pPlayer->IsUsing( pItemElem ) )( q, i+ H2 x5 g8 V- e% u5 J' s
continue;
. q8 e' G E/ Y6 ~7 M if( pItemElem->IsUndestructable() == TRUE )
1 D" c8 ]4 ?3 Q7 {$ J$ O' l! } {2 m0 U' h s9 m6 E7 S2 t
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
3 e t# S6 K7 J2 w) x/ Y continue;
# g/ L8 O ?' z8 r$ v }
' R, j+ u1 Z# R) o& A g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
( o c' n0 P0 }" G2 k C }
$ j- ~( I( S J$ q, x5 d( w break;& @* A: s$ @0 q3 Z& l: [
}' }0 d% O+ n. y) V8 K+ o/ N
case 1:7 G- V! ^$ }7 ~' P- j/ J8 E; b9 Z0 O
{% u9 W$ X; b9 W- Q4 c
//整理背包2 V* ^) T4 i+ w F+ i$ C+ e1 j
//////////////////////////////////////////////////////////////////////////3 W- ?2 Y$ u' \. w
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
+ Q3 |8 u9 K) Z- t& P //////////////////////////////////////////////////////////////////////////7 E% M- @9 c* Y u# N3 ]
//////////////////////////////////////////////////////////////////////////
% f T. ~9 w8 n CInventorySort* pInvSort = new CInventorySort;
2 e7 x2 k# [) m* a* P& A' } vector <sItem> vItem;
0 u) t0 o& e$ t0 P vItem.resize(MAX_INVENTORY);//初始化大小% M! P6 ?3 ~# Q1 r$ R. q" \
//////////////////////////////////////////////////////////////////////////. V$ N# F7 I: Y! p) T9 o& a) e
//填充数据
0 w, ]# y6 N& }7 U4 K! H. f for (int i=0;i<MAX_INVENTORY;i++)
. ]4 R, h: X( \1 ~* w {
4 i4 ~) r: ` t1 K6 c. W" ? CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 c' M L- U4 }+ z
if (!pItemElem)
4 |9 L" k1 N# U {. W9 K+ T4 a% D. x8 Y
vItem.dwKind2 = 0xffffffff;
! i c0 R" F7 W vItem.dwItemId = 0xffffffff;
+ Z& m4 l: q5 z8 b3 w0 p& j) n vItem.nIndex = i;9 J3 ?7 Q/ }6 e5 J+ l3 q& o
}else {- V4 l) W& a3 M% z$ o5 w+ w
ItemProp* pProp = pItemElem->GetProp();' ]- t) u' G5 f$ v5 v- t
vItem.dwKind2 = pProp->dwItemKind2;1 x( Z0 L: L# ]* V9 |
vItem.dwItemId = pItemElem->m_dwItemId;$ _* S( R0 D+ n% R0 E4 s- z& b
vItem.nIndex = i;) m3 s! [7 [+ H8 m. e
}7 R% E9 Z; k& a, `8 S
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 A' z1 z* }# F6 a: l3 U* @. ` }& j. A _6 O7 Z4 T' H- J
//////////////////////////////////////////////////////////////////////////1 \3 F8 Y( p; S0 N% S
sort(vItem.begin(),vItem.end());//排序0 Q# ^+ J! P- m1 X& T: S
//////////////////////////////////////////////////////////////////////////9 K; e1 _8 m4 B" y1 N
//交换
# \3 `8 F- N" |. q2 t* ?2 L8 _ for (size_t i=0;i<vItem.size();i++)
0 x! g) M' d! E9 g4 e5 t& X {
7 v7 i; g! [. r4 Q //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& |* C- Q6 |- Q; s3 E
pInvSort->Add(vItem.nIndex);9 V+ k1 e% u3 k4 ^
}
7 i7 Z8 r2 R' q* p( U/ d8 t BYTE nDestPos = 0;
) u0 Q+ g1 @( p1 k8 P/ p+ B for (int i=0;i<MAX_INVENTORY;i++)
4 d6 l5 h! p; [% ?* W7 J8 J {
& W: l7 ?& h# y, [5 b+ N CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);+ p4 O4 C# ^$ ~) V
if (pItemElem)
5 S' M2 ~5 D4 m3 [/ d# S1 I {
: B' W/ `4 B3 T- A! E. j g8 e if (IsUsingItem(pItemElem))
6 x7 W. o1 k0 ~+ j& k9 X/ o {; z* w5 S+ F' }
//这个位置无法放
; X: h: T4 l8 a- v# q! y2 S) x nDestPos++;3 c# k8 y2 V: @+ p* Q" ]8 Z1 E
}
! h. g2 G2 T3 X }/ Q8 `3 Q, L( j( {0 o: E. g( ~
BYTE nSrc = pInvSort->GetItemSrc(i);0 `- t: Y9 a$ a! Q: j, Q. ~
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
7 n# w7 p/ Z' C; y" ^ if (pItemElem)
& z8 i8 r7 C" b: n( t0 p+ a" j" r {% ~: O" F" M/ W3 U
if (IsUsingItem(pItemElem))
# b. Y D [* a {. D( |: i: U1 U" Z- j% N7 I; y* R
//这个道具无法移动,跳过4 s$ T* q; A& H P9 w* U6 ~
continue;, ~6 J) g! ]$ u7 Q! B% X2 Y
}0 m8 G0 p& z5 N l5 e) m
}else{% d8 _9 o9 H: I5 g( {4 @
//空位置 不用动% \( `4 @' [5 o6 ]6 V; r6 |( D
continue;
8 E2 f8 c* l; C- n: l* l' w+ O }
6 r- _5 n( }$ ]! v6 N* y, P //////////////////////////////////////////////////////////////////////////
" U2 Q; S1 O. |& @ //开始移动7 r F, A; H5 t; j
if (nSrc == nDestPos)* q0 S. o1 E- U: J" V
{
; i; w% q3 V5 U: s( n: b //原地不动
% F9 @0 m& C8 l- c+ a1 t3 O nDestPos++;3 B% @8 r& C: t- S. n
continue;
+ D: g7 Q% l" u0 n, S } L0 _; U1 ^: t; a% [
pInvSort->MoveItem(i,nDestPos);) z$ y, H" G$ y5 G9 r- u
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
* n1 } B7 i$ u7 M# h0 M5 f Sleep(5);
2 N; R3 g) y# G0 R( j //Error("移动 - %d->%d",nSrc,nDestPos);
3 g7 g! _- N& B. ~0 b4 m nDestPos++;* H S ^7 Z7 n [8 X. s! H: Q
}2 ~. A# p0 v+ v' N& Q
//取第一个元素的信息. [% Y: G3 P& y+ v1 F8 u7 s$ K! n
/*+ M2 Q! {# m( |1 P# m" ^2 Y3 B
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)+ Y7 b$ \- E9 @* k5 v+ |! E% @
{7 ?, Z# D, y3 N8 P" k
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
" w2 C" _- j) c/ R Z g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
) ^5 \6 y) C; r6 H3 X }
) r' F/ r, @& \9 w5 m: [0 O# ^( n8 c1 E' _ */
, L! b# Z+ j) M u //////////////////////////////////////////////////////////////////////////
# t3 o% A w8 z0 [" a: c- u( q- G( M! B break;
: e: i [# v0 `8 R: F# E; M4 D: T }
; m+ ~, I1 b, E+ Q+ L i } 7 ?4 f8 O. K0 d' O9 s
}/ {7 n4 L$ {6 [5 H. D, @. d
m_wndMenu.SetVisible(FALSE);
9 F8 f h! j3 Z5 |* R
" A4 v ~9 P* J--------------------------------------------------------------------------------------------------------4 g+ t/ R8 \" ] k& `' z$ l
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)9 U |$ K% N C" T3 h0 O
{+ h4 g' F4 i( Z& z$ ]2 b
BaseMouseCursor();) F2 |' V) U1 ~2 u8 B
}
; F* q+ ^# W% R3 O# m3 Q在其下添加:
: L: | Q6 J0 r/ P- ?5 ~0 \0 bvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)& R% i. U) n, D5 U$ \: k
{
2 {4 s- r# Q5 n4 Vm_wndMenu.DeleteAllMenu();
( a( N0 j6 P9 {; i0 Q, Hm_wndMenu.CreateMenu(this);
7 G* X- [7 s5 U$ ]! Gm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
$ b* c. S l+ d6 b
0 C+ H! Q* P) F; L; l" ~if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))$ |& i- u; K1 b7 O l- K; T9 j) ^
{
* n H# g' s! r) G9 E0 Y //P以上级别才可以删除所有道具& x1 c7 M+ x5 O
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
8 }8 [+ x4 q I" |& }}
( q* X& b# L tm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );- H0 }+ Z4 b/ ?- M& j
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() ); a# O" k: P5 w) h+ S8 j# F
m_wndMenu.SetFocus();2 J E% m3 \5 P" x- A; h" ?; l
}8 S1 }/ f8 w* `% v9 N# C/ H
------------------------------------------------------------------------------------------------------------
5 m9 ?: `2 U1 y*************************0 f) d$ y3 E* x& M. ~) V1 v( z
WndField.h文件
* c1 X! p& }% f1 m* [. V3 F! ?*************************
9 D8 j- _1 ?2 k! |/ A搜索:BOOL m_bReport;" U0 W& H: T$ U1 d2 m
其后添加:
6 Y0 h( ]6 ^/ S- RCWndMenu m_wndMenu; c! n/ b4 `$ u$ o+ V; o
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
! _" f9 z: n4 A6 o其后添加:7 c3 z0 F/ _9 q8 ?4 p: z. {% N: |
virtual void OnRButtonUp(UINT nFlags, CPoint point);3 r6 _+ ]' Z* m6 N1 {+ k
5 W6 C( m, J3 X# g
7 }* W. e9 S% @- J |
|