|
|
源文件中_Interface文件夹下WndField.cpp文件
2 I& r# T$ s2 G9 o0 g搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
5 E# Z/ f9 {2 f/ S& j: m4 W' A8 y9 ?- `$ V, P# {
struct sItem
* m$ z& K! |, D4 G, H{
5 N9 O# U: t- I: O4 u0 ~DWORD dwId;
8 f2 c. L4 V8 @/ S3 L6 GDWORD dwKind2;
+ A |# @. ?5 x* P* h% u8 XDWORD dwItemId;
- Z1 m+ ^# h. {4 p8 [! Z0 lBYTE nIndex;$ w& P( X- `4 ^7 e9 [
sItem(){0 x8 B. ~* \: L+ [* _; a" s3 ]
dwId = dwKind2 = dwItemId = nIndex = 0;
7 G- [) n/ N3 q6 E1 z}5 A* m; y( y w* f+ D3 W$ C
bool operator < (const sItem p2)
' n9 A* }9 Z( K6 n" k; T3 L{
: A# A. C, \5 M& a if (dwKind2 == p2.dwKind2)' h9 M4 G& e1 E" A M5 b
{9 v, i6 X; Q; W6 M
return dwItemId < p2.dwItemId;
% O% |" t5 h m; f }else{
. G3 S/ k0 e2 h; R return dwKind2 < p2.dwKind2;
- ^% W. a7 B5 {3 Q# R }
+ p q% E# u' {, Q ~8 J8 W6 {}
( c# n# g, y1 u, \/ z0 g3 a+ M};
( j& _/ A% C9 ]. \9 Zclass CInventorySort
) p" o9 `8 s( e" n3 O' k7 u{
* t8 r! N4 o% {) B" spublic:% c2 y$ \; ^# i9 Z8 ]/ h7 p4 T
CInventorySort()
+ f# K' p* W6 k, `8 G) i{
3 J3 s- ~1 c0 w8 W: h8 q0 D3 w! j m_dwPos = 0;: {9 W( }& Y+ O; \! ^, J0 z$ D
}
. d! M2 j' r( z8 P8 s& T9 w~CInventorySort(){}7 B: l; o# V& T5 b; R8 s0 A5 q
private:* C* G3 b5 i& G0 v8 ]
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息+ I+ S( F. v, S& C3 K& [- e
DWORD m_dwPos;8 N4 W% K5 [: Q' |6 N' O
public:
! R" v) T+ ?1 X V7 }void Add(BYTE nIndex). p8 q# F1 s% I$ A) \* b
{
h( a3 c% m1 j# l$ ~& t if (m_dwPos >= MAX_INVENTORY)% d& v9 O4 T6 M4 e: p. `, Y) W4 [
{
9 [- o. H5 r! d" x return;% v3 L0 E/ }, l% B, a
}8 N8 L( Y8 Y" D5 @1 A% B0 A
m_Item[m_dwPos].nIndex = nIndex;
, r" }" e8 i: k9 [. A m_Item[m_dwPos].dwId = m_dwPos;
/ _! m: d% w3 s$ K m_dwPos++;& [, q2 K* d; t4 n* r1 ]% D/ ]! a
}. n4 U6 F9 n( `. v/ s
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列+ w: o9 f' V, G5 b. v& K: }0 d! Z+ N
{
3 w/ u1 ~) q# y) O. H( {" M for (int i=0;i<MAX_INVENTORY;i++)
% {/ E$ K0 V$ V+ E; G3 i# M {
/ u8 F8 l/ p. U6 n4 W6 B0 S+ a3 D1 d if (m_Item.dwId == dwId)
$ x/ Q. U& N# _0 }$ k2 W {
1 _4 h% e; F' K Q0 `* r) q$ l return m_Item.nIndex;6 a( M, I1 R* b. l& T
}
& C7 F0 _# R& } }
& ?. @- h& T% w return 255;
. x& C& J$ ?" O$ B; B}
3 t1 s' `8 J& v9 Z, cvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
. u/ |0 j! y3 D4 {' B3 v{2 e5 l/ @# C/ L. C
BYTE nTmp = 0;) D6 @$ d. X; s" _' A7 B
bool bDest = false,bSrc = false;
; Y' W/ t$ Z! |( D3 A" [ for (int i=0;i<MAX_INVENTORY;i++)* t$ i6 t4 }( V* ~) f. b
{ f" q" a. C2 W! m# C# W5 m
if (dwSrcId == m_Item.dwId)$ [% K7 W. ?2 ^* q- i+ {
{
! I6 X( ?* y% h7 C //id相等 则 改变对应的dest和src
- H1 z2 x2 S$ @0 i$ \ nTmp = m_Item.nIndex;! v. g8 X9 I" J8 p8 L) b
m_Item.nIndex = dest;" A4 A. J# p( d6 y, q
}
. j8 t, v9 _% r }: L' W& p+ l% {" c5 ?
//临时数据保存完毕,交换开始' }( W) E+ u9 l2 i
for (int i=0;i<MAX_INVENTORY;i++): ]1 M8 |, R# S2 N' [
{ [8 b* P9 b1 Z
if (dest == m_Item.nIndex)
4 q9 r3 H5 G" ]- {6 \ {
2 T1 C) {1 k3 R( \8 m //id相等 则 改变对应的dest和src, q9 P1 J6 V8 l8 Y( r7 S
m_Item.nIndex = nTmp;7 l) I& q* T, o5 I
}
4 r; F# I- ~" J( m* _3 T }. X4 h, |" Y% M0 F8 ?
}
" r6 E' {5 I; A9 m0 t};" g( {! J% Y9 l; w
-------------------------------------------------------------------------
5 n! S1 n! T% n5 o& }' j依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ o- V7 p6 h9 t) ]搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
# x, Q9 c' a5 N$ i" b1 i {: z: {紧靠其上添加:( u f5 s7 y# I8 a& u6 W& \: D' J6 }
if( pWndBase == &m_wndMenu )
' k( m% l0 _5 j, X, h$ L% a{6 f/ `" \! Q$ v9 R, a6 B
switch( nID )
0 u. c+ {' a$ l; l. i6 M( A {/ n! N. f8 ]- D' N1 Q4 O
case 2:6 l& [" M$ l% u- @. {
{
' P" f5 H3 \* s! Z //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
" D' A6 k% s7 S( D; B if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). ]# w% O7 I# i8 {9 q! s( `
{
/ `/ f$ H/ J4 P* \5 F9 p9 z break;6 L8 a% z2 z. Y2 W' x
}6 i; M. s$ \5 E. \* x
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
, d$ f- f1 s* H' u8 l" Q {" _/ n/ e" R2 D1 l1 W: U1 U) z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. s/ j2 B; G: I; g! [! E
if( !pItemElem )
# B" `; v8 a( o8 D$ C continue;* Y% D% A: Y H' R
if(pItemElem->GetExtra() > 0)
* c; v6 D( f& ] continue;& s1 h& G. {4 [5 E% h7 O% Y: k% I- X
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 4 T) K" C2 r9 F) [5 p
continue;, e" A: O! d7 G9 U* b" {
if( g_pPlayer->IsUsing( pItemElem ) )$ D5 J) @+ C/ Q; b0 S! ?
continue;
1 `2 b* ]" B( A) e8 o% d if( pItemElem->IsUndestructable() == TRUE )# ]) d9 @! }3 T4 _) i3 u/ e: j( r
{+ }/ R) Y5 c+ i! c' H
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
5 ^7 s, z: K* d! s' s8 y Z continue;. e- k# H. N# F5 [# ]/ j5 S
}
8 ~( g: Q" P B+ } g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
" g7 i) e3 L) Y' ?/ F. F% c, h( n1 Q }
* S8 W0 h6 u& J break;5 D7 w/ W1 B/ @; G/ z, Z3 N
}5 B9 _( t- e! L/ [
case 1:, _ E* J4 I- H# h- \# ?6 E
{7 K) e+ L0 A. O8 a4 X6 [, H
//整理背包, T- K4 G. \# V( h* y
//////////////////////////////////////////////////////////////////////////7 L9 s8 M2 l, w
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );9 ` w& s9 q$ o1 o) R* u( E
//////////////////////////////////////////////////////////////////////////) i/ s- a1 f/ f: w- s6 Z
/////////////////////////////////////////////////////////////////////////// q0 j, d1 }' h( |9 ~/ M3 o
CInventorySort* pInvSort = new CInventorySort;. E; C$ \/ o6 \- m- m
vector <sItem> vItem;
) T! f- A* {) ~5 \ vItem.resize(MAX_INVENTORY);//初始化大小
- J" p& B; L, W% L# M //////////////////////////////////////////////////////////////////////////
N, ~( w, X9 B; Z0 I //填充数据
/ z6 Z, M# b, B1 S0 X1 x for (int i=0;i<MAX_INVENTORY;i++)
1 A* L6 q ^, n: q { S: k7 r8 P6 a8 K# |+ X# S$ U
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! @7 u0 }" ?6 n& [ if (!pItemElem)
1 ?: h0 F- w: s3 S; m {0 V- ?* y: A- [0 [& a
vItem.dwKind2 = 0xffffffff;
- ~4 |! x- A1 b" {9 ` vItem.dwItemId = 0xffffffff;
7 s% m% v0 i, m5 j0 E/ L vItem.nIndex = i;4 R- K& K/ |9 ?$ V
}else {
2 H2 x: `; X9 l1 m7 v) n; _ ItemProp* pProp = pItemElem->GetProp();. u& z# u! w) W8 v: }
vItem.dwKind2 = pProp->dwItemKind2;% ^. ^9 ?3 V' k7 s& Z
vItem.dwItemId = pItemElem->m_dwItemId;1 ?' O4 L/ n* [+ ~) G; v" P: t1 c) L" d
vItem.nIndex = i;
6 V, Y4 ^: i1 x- h0 y }% o6 z2 x4 \. E4 g* S3 @
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
* y' |/ P/ x* B' r5 R3 C; ] }
+ H) T8 {/ \- W" Z6 q8 W6 A //////////////////////////////////////////////////////////////////////////
- \0 Y( o& q* J0 l sort(vItem.begin(),vItem.end());//排序
/ t H0 W5 r7 _2 e+ Y8 b) {/ D6 w //////////////////////////////////////////////////////////////////////////" d9 [! I! p% t$ l' P" i" r
//交换 S7 {" M( j9 m$ Q
for (size_t i=0;i<vItem.size();i++)
# `3 @' M, J: ^4 \3 y {: Z( w: H, @! B* u, h
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);! R! T- Q) x! G: o6 t* q
pInvSort->Add(vItem.nIndex);3 j1 W3 r" X- \
}
* @$ k3 l$ o& D Z c# z5 a BYTE nDestPos = 0;3 o$ {; L5 H: T6 i* k! ^& v$ Z
for (int i=0;i<MAX_INVENTORY;i++)
# U0 W* z' O, K {5 ?' b" }7 n- o1 c) N8 }' s
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
# ?" \6 a2 U; m' o. m. L+ E if (pItemElem)7 B3 U; x9 \$ Z. U; e) U8 s
{# i( f8 @( j4 I W6 V# s
if (IsUsingItem(pItemElem)): O! E8 \" @) Q. V! Q" }
{( I2 p* x2 }8 w1 h
//这个位置无法放$ M) e2 z- r' C
nDestPos++;& B& d" g* d' n' U
}3 p! y m7 K, j0 |* M$ g j
}% b* n3 K# |/ _
BYTE nSrc = pInvSort->GetItemSrc(i);( o" Z5 F. k8 @( Y
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);, p8 _, b' w c
if (pItemElem)
p6 O4 V2 x2 ?) g N; P {4 D2 D3 I% ]" m0 P% J: B& X
if (IsUsingItem(pItemElem))4 M0 q2 n% x( {" f7 F( t# E/ Z* \
{2 P4 u% v' R- r% w; j6 s& u9 z
//这个道具无法移动,跳过
' k' A8 U% c1 }; q. r% {, ^$ m continue;
. S, R& K" V3 C8 Z$ ` }/ N; \6 e& E; O- b
}else{
2 k4 E- Q/ t1 ^* R ?" g2 R //空位置 不用动
! D9 o* D f5 V H6 X continue;
* g6 R+ J: o: @9 Y6 N5 o8 P }
" V! j5 A" D" h4 A //////////////////////////////////////////////////////////////////////////7 e& R$ n! V- K6 R3 o6 |/ @
//开始移动5 {! N) R$ M% p, L- a1 q4 _1 e
if (nSrc == nDestPos)
0 v5 }) V+ f+ a+ n3 N {5 m' C0 V/ } L3 r' z
//原地不动
& o* n" J* T9 I9 M3 @ l0 u+ `0 X: C nDestPos++;* q+ k. y' N7 R3 {$ c: c
continue;) b. M. ?4 [9 T; K9 E$ F0 {
}
7 n% F" I) G: I7 M/ ` pInvSort->MoveItem(i,nDestPos);0 O1 t$ l' b( ^0 l# f
g_DPlay.SendMoveItem(0,nSrc,nDestPos);& b- p6 X7 B% w2 _7 L
Sleep(5);6 p- X+ Q( |& V) Q9 k! l
//Error("移动 - %d->%d",nSrc,nDestPos);' l% o% d8 p- n4 h; d
nDestPos++;
0 N: d3 B3 X. s/ E( x% X }
2 U4 b, @3 \7 X //取第一个元素的信息
/ F7 i* ]9 b7 @# B( D3 N /*
1 f- I, Z) `3 ~0 _ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)$ i" T1 z5 {- D6 v& H% f
{
1 C, S4 M6 I" y7 N- O; j( R: m Error("Move - From:%d,To:%d",vItem[0].nIndex,x);* j" D b7 z+ q$ l7 A( X, G
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
$ J/ r9 e+ [+ y- p+ B6 k9 | }
* O2 S0 f1 a" z: `& g */2 d, u, N O3 _
/////////////////////////////////////////////////////////////////////////// V/ p7 q, a6 |( f0 |, d
break;
" }8 E- v6 `8 x/ n' o }3 M9 F p4 N2 Y/ I
}
6 J/ y# [( r1 u: H# r$ p" y7 w}
4 e1 ]4 ]/ e/ Gm_wndMenu.SetVisible(FALSE);
: t+ z& T: p- P* B
! l: i2 m9 y! e4 K# ]% `4 _" @--------------------------------------------------------------------------------------------------------8 `0 Q; p* }* c3 P- a
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
) I) Y$ F7 J+ S6 ~+ G* _8 j3 F% C{: S& x% j( \* R* X( y0 t
BaseMouseCursor();- F9 h5 A: Q+ H7 K! t" e9 L
}
/ o# y4 l) E8 s* B h在其下添加:
8 p/ [" I5 u/ r: ]! ?/ Jvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
" k6 s9 p6 S s0 k, G{
5 ?2 O+ a( S/ Cm_wndMenu.DeleteAllMenu();" p: u. t* E# E' D6 o: z
m_wndMenu.CreateMenu(this);
6 V8 w8 P2 n. t: s/ ], l8 H- pm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");: Z: B1 i7 S$ W" U: n# Y$ G6 Y$ ^$ O' T- z) d
) K) t3 C& |; Z, x+ l( @if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
, w: H: t4 b" r$ K{9 G2 C* F) `9 v% D- _4 d" a7 Z ?
//P以上级别才可以删除所有道具
1 s8 J" N, g' q" @% x' V m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
2 \4 Q) e; E" g$ i+ v3 y2 Q}! }% \ w- D) w1 ?$ a2 D; E
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );- c5 e8 `' h; @1 w5 c
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
1 f+ L8 A) x5 }$ p0 A, l6 G1 Nm_wndMenu.SetFocus();
. v* H G4 r2 E4 |! l7 N8 v$ U( Q- F}9 `9 N8 O! ]/ a4 \ R
------------------------------------------------------------------------------------------------------------
6 R( A5 ~' b) g, ~- z5 R*************************
# s# v q7 ~) E5 v* v sWndField.h文件
# C; h2 Q, _6 J7 S. E3 m+ o- Z0 e*************************
. G; Q% b% b( l& u搜索:BOOL m_bReport;/ \' v# R2 G5 L
其后添加:/ G: Q! H" G4 |% O- x
CWndMenu m_wndMenu;
7 U1 ]; P3 y5 z$ ] c搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
& u1 w2 u1 u5 r4 M: Q4 u: X# A其后添加:
7 r0 `% ~$ m* b9 A" p, ]# O8 Svirtual void OnRButtonUp(UINT nFlags, CPoint point);
$ p3 |* s- o3 S5 Q A# [+ T+ @3 c3 c" D) N0 z, E, P! s) D0 |% R5 I
" y$ Q1 r& t3 y) X+ c
|
|