|
|
源文件中_Interface文件夹下WndField.cpp文件! ]& X7 D9 A6 F+ K. ^$ W
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 B; {: F. s; c0 l) E8 ?
; o+ w8 d( s( G# k& K( Dstruct sItem
" D, D* z# q) t. A{( d2 f. x+ f" g4 `
DWORD dwId;7 L( L9 P# ]2 Y5 M& q
DWORD dwKind2;! G7 k H7 Z U9 u
DWORD dwItemId;; V) _% Z3 l" w1 B
BYTE nIndex;; R9 E& A3 J4 g! O! S# B# A) F
sItem(){
0 B3 n/ s; B3 ]1 q2 s& g dwId = dwKind2 = dwItemId = nIndex = 0;
- O# v* e% `# D, }2 U7 X}
Q+ i- A8 p( V) W7 Obool operator < (const sItem p2)
" k+ S% l% i9 k7 _' M0 |{4 M. N; }( o" A9 \
if (dwKind2 == p2.dwKind2)
- `" ~0 ~7 p* }: ^ j {4 U9 ]5 h9 e# W
return dwItemId < p2.dwItemId;
7 n% q- d* ~" r7 O: g7 p7 O8 h% _ }else{
5 q3 o' c$ w5 S3 j# y return dwKind2 < p2.dwKind2;0 ]/ C* A) G9 }2 j) {0 O
}
+ ?+ i$ H6 {/ e7 P$ ^3 s0 O6 p" L" y; q}" V7 @& X5 |6 B! Q* g
};
- P: @6 P3 ~/ Oclass CInventorySort
8 c% J" B3 _! p8 Q0 }{) Y3 v+ m- }4 R, s* \% m
public:9 O% d1 \( V6 \/ n2 ~7 R* r
CInventorySort()
7 w" E" P% z& ]" b4 D{1 ?2 h9 B9 C4 Y0 O& a8 A
m_dwPos = 0; j7 P- k! a! O; x2 U3 x
}
+ I1 p k, Q2 N+ n2 r( u9 _~CInventorySort(){}
o+ @& f# y$ t7 I6 K6 G _private:
. u2 j1 L1 Q/ s, m9 q! I: n# csItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
, w/ I/ k$ p1 T" X! TDWORD m_dwPos;
/ { J. R3 _/ y# a; H) Q; W6 I* r3 a q, apublic:
1 ^/ `+ b7 E: v4 P* yvoid Add(BYTE nIndex)& p( E. F4 x; G0 s \( X
{
1 ~" I! \- r5 s% i: F7 v+ F if (m_dwPos >= MAX_INVENTORY)
! d, | V3 j7 E9 l) `. T r @ {
/ l" r) u& f3 [3 ?0 l return;" S2 u( X1 e1 V
}
4 e! {7 ^7 G5 P% \ q* u& S m_Item[m_dwPos].nIndex = nIndex;
5 w. ]& w+ T' @) C/ K! ` m_Item[m_dwPos].dwId = m_dwPos;
. o' h+ M# m' U/ n m_dwPos++;
/ ]: j) Y( X2 \9 F: @/ F2 `$ J}
4 h4 g( X4 g& PBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
0 Q1 } ~. T8 H9 j8 V' ?{3 p$ ^3 N8 G) z% O3 p' j. u7 e
for (int i=0;i<MAX_INVENTORY;i++)4 X( z9 [. I* c% z( g7 Y5 ~! I
{
) [: z) N7 z, l7 B& p! G* t1 | if (m_Item.dwId == dwId); A7 A7 o* g4 \
{7 k# a4 a U, E: f
return m_Item.nIndex;
7 W. s6 R2 b$ c6 O+ \! h% V+ m0 o6 d) e }9 S) ^' N' R3 `
}3 I$ Z1 p" h6 P8 k
return 255; H W9 A8 }# O a8 |" \
}
( c. c k( M* o8 Yvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置! p; X" H; O/ S: d
{
! ]" O: J: w) O! p& _4 C BYTE nTmp = 0;
9 b+ S7 @% F1 M# S' l3 n6 G bool bDest = false,bSrc = false;
( [; E7 v6 ]0 ^5 l, | for (int i=0;i<MAX_INVENTORY;i++)
& b) d8 b. q4 [4 S$ {) B {
! V" v1 W5 z' _- o' |& J/ J$ Y if (dwSrcId == m_Item.dwId)4 ?- A& c1 S6 _ h
{4 i% D( D5 t( |
//id相等 则 改变对应的dest和src
5 z8 W m; B3 \ nTmp = m_Item.nIndex;
' x1 A2 Z) X1 j/ E/ ` m_Item.nIndex = dest;# K d' ~9 c# h
}3 f* E ?1 A+ l1 j
} Q( b6 e" t, D
//临时数据保存完毕,交换开始
% M/ j$ z6 Y" E% M/ v/ p for (int i=0;i<MAX_INVENTORY;i++)# t/ y& f+ o" j0 _6 v
{" p/ b: R$ I# p4 v
if (dest == m_Item.nIndex)
2 g, k. ~0 N3 [! r9 I T {, G1 m. F0 K, K: h! c! m( G
//id相等 则 改变对应的dest和src4 v0 e, N. u# j& v
m_Item.nIndex = nTmp;9 H! D! L; }( V r
}
3 E% j' T' P: l% M% \ }
( \! }: J6 T0 [& G}
4 `7 L+ I0 _ ]# Z0 s z* m' n};( {7 P z+ r: K9 h
-------------------------------------------------------------------------; q; P4 b7 ^( V; {9 c: }; s) W
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, Z% S, P5 L: L" U/ Z$ x% G搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);+ f! V. i4 l2 |8 e. G5 R
紧靠其上添加:
0 e& P% j; Z0 t0 cif( pWndBase == &m_wndMenu )$ o, G' g+ K+ N" T# v P
{
* n4 S9 L1 ]# H0 A( b' L8 f switch( nID )1 s+ w" z5 K9 n3 }$ Z- n) S( j
{
/ o& m5 O1 c7 z; U7 |" g2 P case 2:
3 S; `7 T& V- e {
" ?( q# C9 C5 G8 c( a //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);4 A1 `; Y2 Q" ~2 q! a7 y6 ~- z9 G
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))2 p1 E P4 Q* E Z8 b
{
O# x3 a+ g X4 D- N8 b break;
4 E7 {3 I- a6 F5 R) y }
4 \9 e- y2 Y3 L9 R5 s for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)* R8 \7 y3 }, W1 \
{
5 s4 U2 x3 P/ ^/ A' ? ` CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 D# O, j7 p# k! L! H# O
if( !pItemElem )
3 `- L: e9 H2 a/ ^$ d0 T4 j" _ continue;. l2 q( M) ?. T& Y' P
if(pItemElem->GetExtra() > 0)
/ {. A/ |4 C' O/ Y& R. x; s9 _8 X continue;' _. O W$ q) z m& E/ p
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) % l4 K, ~7 Y9 I% ]& d
continue;
) i& e9 D! k' t2 Q8 }, O if( g_pPlayer->IsUsing( pItemElem ) )0 w6 `6 O" D- g! u3 e7 |& Q
continue;5 a% B, k& |% Q$ A( X7 Z. x" f- N
if( pItemElem->IsUndestructable() == TRUE )
" c1 r) d7 X. R' [; Q! r {
' _, z5 H6 y' ?' _% v* ?9 O g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
1 h3 W7 V* t: `) u# j. l continue;
' t }# U9 w5 D' z2 E4 j }' X) C1 k a" n( I7 N; r
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);: R/ d' A% V4 L$ ~4 m8 O
}4 m/ }! _- ~# h9 @ b' E! V
break;
( ^- |6 W6 h9 u& z4 V }7 F& j) Z( L! s% [) o9 z4 U
case 1:
) x+ a$ X: |5 A- s+ v7 D; B# t {6 P% ] F$ p6 S/ v; N2 \9 x, _) Q
//整理背包# B1 |5 }; ~9 }% ^
//////////////////////////////////////////////////////////////////////////
' k% O) D: k' N1 v) g8 U //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );* z8 ^1 X+ a% l4 q% x/ P
//////////////////////////////////////////////////////////////////////////
! I/ q3 s- o% O; u2 `, j //////////////////////////////////////////////////////////////////////////
0 ^- M8 F6 U$ n CInventorySort* pInvSort = new CInventorySort;" ^+ f& P: u! y: W
vector <sItem> vItem;
4 _4 \' S7 r4 f3 B8 M vItem.resize(MAX_INVENTORY);//初始化大小
5 h# F: |( [# R5 h$ G, ` //////////////////////////////////////////////////////////////////////////" _/ s; `8 `9 L
//填充数据
7 q7 t% C7 \% P8 X3 `% e+ z- f for (int i=0;i<MAX_INVENTORY;i++)% ~+ E8 l# q+ r( P# k
{
7 ^5 O( i4 p, k) b+ R" H- k5 n CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, c" y/ v6 G/ `. k if (!pItemElem)
3 C/ Y. ^6 U# p7 P2 P" y5 s& o {6 l5 }- \; B* V
vItem.dwKind2 = 0xffffffff;
( G4 y' J% ~- ]4 w; Y. V% n vItem.dwItemId = 0xffffffff;" g+ K$ \; G( ^+ f5 `! Y
vItem.nIndex = i;2 m* h; ^ q6 ?5 L' u3 b3 b' b
}else {
6 n; O. U" T- s# b& Q( `3 P' Q ItemProp* pProp = pItemElem->GetProp();
6 L7 e3 O% O( G. {- |% k vItem.dwKind2 = pProp->dwItemKind2;
6 v5 X! v4 w& ^7 b4 j- p vItem.dwItemId = pItemElem->m_dwItemId;! U+ }+ m u! J- Z8 j- p
vItem.nIndex = i;
: s8 F: ^. g/ F) T% m) S }
/ g' `) Y: X- [0 B+ t$ v$ f //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& }/ b9 W2 v& m. Z
}1 G/ U7 k+ \0 [) C; }) t7 D* x
//////////////////////////////////////////////////////////////////////////& _1 n1 E- H! r6 j, M
sort(vItem.begin(),vItem.end());//排序% v" } u+ ~; f1 V1 c
//////////////////////////////////////////////////////////////////////////
' H' S" p0 C8 x, }+ [ //交换. v9 o- n0 w' r- g( B' ^
for (size_t i=0;i<vItem.size();i++)6 Q2 o6 Q9 `4 G1 a, M$ m
{' E- e* a4 p6 T* H% @4 P
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);! C; b; D4 O. \0 \; u$ Y0 K0 i
pInvSort->Add(vItem.nIndex);
) X+ e9 u" K! ?' E+ R! a! t4 ] }
" n2 C2 A1 G2 | BYTE nDestPos = 0;, [1 i, M8 R$ X
for (int i=0;i<MAX_INVENTORY;i++)
0 r* S; `3 X u8 F& ]4 { {
9 U, h3 D# K9 H8 B CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);5 T7 {1 D* l. L+ H
if (pItemElem)
& V( ]9 U5 l E/ l0 H8 S- l2 e/ K {
$ ~" Z, E# e- w' ~& ? if (IsUsingItem(pItemElem))
6 p9 k* P0 U3 F% z% e1 E1 L {
" L/ a& c- s0 D //这个位置无法放7 K/ ?" Z; v2 E3 T: y5 Q. C# E
nDestPos++;$ t1 K$ B$ \# \
}
B7 {2 M M A* f }3 l' t+ q8 D$ d9 }- A4 w7 I
BYTE nSrc = pInvSort->GetItemSrc(i);1 U, C- y2 J4 X+ O" Z+ F8 I0 D+ ~) |
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
3 h/ v8 q. ?7 l3 a if (pItemElem)
5 R/ v4 Y( n; p3 U {
/ u. Z4 L3 E+ ?( O if (IsUsingItem(pItemElem))4 z3 z5 t0 J$ J" f, _4 h
{" G) e/ u1 \* k
//这个道具无法移动,跳过6 D8 C" C+ U s* q, G
continue;
/ i7 u8 M& X, k# O& [4 v, T9 t }/ J( Q# t( b8 ?: x3 D
}else{7 f. c3 D" n* q, b
//空位置 不用动( m1 V% c2 G5 n* @
continue;* G! b4 r8 Z! e, l
}% j3 x1 j5 p1 Y1 B- P
//////////////////////////////////////////////////////////////////////////$ |; z! `) q! R: O! u# M
//开始移动
2 t9 ^* n0 M+ ]0 i if (nSrc == nDestPos)/ c: S+ [( `; B, Z3 l6 {+ U- r
{7 z8 H' Z- u! h* x; a
//原地不动
) I5 H: v& y( [+ _/ u nDestPos++;* n3 K6 B/ D& H
continue;4 K Q9 f5 }+ R7 z
}
' ]! N4 C. U. f! O. t pInvSort->MoveItem(i,nDestPos);
8 K& k8 r$ B) F6 ]. r" e9 J g_DPlay.SendMoveItem(0,nSrc,nDestPos);* ~. H! O2 G+ o
Sleep(5);
3 K" [5 X% C# g! j //Error("移动 - %d->%d",nSrc,nDestPos);4 r% d4 \: F. q) [
nDestPos++;0 ^' M. F* `- c
}
( n" K! d4 u# Y6 {2 @ //取第一个元素的信息8 `9 ~1 W- N2 w
/*
7 |- }9 ?2 b* B3 X if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
& ~' X; h3 _/ J5 q$ d {( C u" K# U- v; {0 B8 _
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);+ F5 Q/ f: L' b4 ] \
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
% b5 b7 `- f, J }- O6 ?: `, P' J# `& N, B
*/! B/ k/ `( ?; p* n
//////////////////////////////////////////////////////////////////////////
8 X9 J- v: v$ o: e" K break;
- S2 a, |) ]) Z Y N, r) R } {. ?7 O4 h7 j( m
}
4 D. u& H( _ d: W1 X}' l& n6 e' t2 \ w) X7 T7 U
m_wndMenu.SetVisible(FALSE);
7 _: b. R) D: N1 A6 @& g; x+ i& w( K0 \0 ~ J, }) s: x
--------------------------------------------------------------------------------------------------------/ y$ g8 d. J6 e8 m4 E9 j
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
( t) K* m o# _& b+ U* q8 k{ y) z l) V: K" G9 ?7 ?
BaseMouseCursor();( i( ^- o9 n3 x
}- O0 ], X1 R @/ C1 e3 K- f
在其下添加:
, {6 _- y9 }. M5 Vvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)2 |; y6 w4 d0 i G$ n, y9 V$ \
{
! U' B6 t& I) S; M) sm_wndMenu.DeleteAllMenu();
* X" T; e `9 q/ E8 o. h: y$ S, Vm_wndMenu.CreateMenu(this);
# X% [7 ^+ f; [ D2 @* }m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
a2 t' @9 M: U+ p8 z1 I) y
# @7 N( t0 Z- l3 ^6 X6 \if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* C) j2 i3 J1 V, e X' ?/ {0 w( R{
% e, o5 c* b1 w$ A //P以上级别才可以删除所有道具! Q' b) s4 {2 @" r: G) t
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
% V. l6 \7 E: ~1 M9 ?$ [- D6 _- P+ {8 z}
/ y9 K( B y- gm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );/ [0 e% ?1 p+ X8 ^5 a. X7 \
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
, j+ L& n2 B% U1 ^7 d3 |' y! R' Om_wndMenu.SetFocus();
+ ~& K4 j3 E) _( ~}
5 K6 [7 P$ n+ o0 ] O8 F3 b% n------------------------------------------------------------------------------------------------------------
$ |4 v6 I! K7 e `1 s7 y, R*************************
% M- X- \* v2 l, gWndField.h文件9 ~" E) S% V" V! S
*************************' O6 c+ N7 z/ Q n0 X* G; G, E
搜索:BOOL m_bReport;7 w& H6 T/ i- q, h$ Z
其后添加:
& a# L9 G# B- B! x, C1 _CWndMenu m_wndMenu;+ ^, z/ P4 j! v! s
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);! H% ?3 ?3 f! e2 F9 d$ ?$ B# \
其后添加:
g5 c* J% p4 k) Xvirtual void OnRButtonUp(UINT nFlags, CPoint point);2 r' q1 b6 X3 F4 p1 o
# v3 s9 n) X; G
0 x2 v7 O; q; P( |8 ^ |
|