|
|
源文件中_Interface文件夹下WndField.cpp文件
. M8 j A9 x& O搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ k9 K. w5 q$ B' U- L$ t" |+ p
9 L2 e; O! t. L
struct sItem0 n: }7 a6 [- v- ^3 u3 N) K
{
4 |6 d D) A! z9 \5 O! q- k6 pDWORD dwId;
5 E* O6 Y- a) mDWORD dwKind2;
. ^& h2 B" A+ h- q$ xDWORD dwItemId;9 Q! b4 i: R7 N
BYTE nIndex;
2 g6 n9 V: a0 fsItem(){2 @2 u' [) J: q8 |$ V) S/ c
dwId = dwKind2 = dwItemId = nIndex = 0;
8 G2 V4 n' e) e; ] }# ]9 b" u}
5 i5 ]( @8 l% i' Sbool operator < (const sItem p2)) c5 y$ e/ l5 ?! z
{
l! G& g6 U/ F d+ { if (dwKind2 == p2.dwKind2) L; q4 z# G4 A
{
8 _0 B: c* B, s0 ~/ k7 a4 K return dwItemId < p2.dwItemId;& H. M, X0 ~ k
}else{8 b8 O7 m- { I" _/ P0 K: D3 F
return dwKind2 < p2.dwKind2;
+ U- p9 ?& S( N9 f4 z+ L }
0 z; e& M7 a' t' f}" v# @# ?6 E' Z- C' N3 e
};
3 b- R c- h4 q" _8 P; l) @class CInventorySort8 H, |: @# X$ j9 W b2 g- |2 c
{
4 B/ a( _" ?9 K! xpublic:6 T) h* _. y% ?. X
CInventorySort() ~: B5 d5 @8 s5 |8 @* W
{
3 O0 f- v( Y% D; g+ [5 u6 P$ | m_dwPos = 0;
5 r% f7 d0 g, F4 ?% Z1 f* W j}
* W/ f- e) u3 X1 K9 ~# `8 C~CInventorySort(){}
) B1 W2 O; K! p. Mprivate:, \8 A/ Z3 \- W. e
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息# X {5 \* h# i% N
DWORD m_dwPos;
" c! L" a' r: p9 i1 ]! Ypublic:
2 W1 M; Z9 Y- Y: \8 kvoid Add(BYTE nIndex)4 l/ O! n8 b o7 m( a
{
9 R2 {, w. H# k4 l" p5 K if (m_dwPos >= MAX_INVENTORY)
; [+ h% F# z' x0 ~+ R* L: U9 n {
9 }, z3 v; D7 z! @1 k' V, ~5 ] return;8 |9 w' X! t! x% f- y: U9 O
}$ l7 S5 n3 x! L2 x7 w
m_Item[m_dwPos].nIndex = nIndex;: s! p0 D5 Q8 v
m_Item[m_dwPos].dwId = m_dwPos;( q# W( q4 r& R! ^
m_dwPos++;
9 O) m) ^9 X( s- m' ?}
1 ]1 r$ g. V. V- d+ ]BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
1 M% a9 ~/ j5 o{
1 H( A9 o3 W% l1 Y* v- O+ j for (int i=0;i<MAX_INVENTORY;i++)
3 `# Y' A/ ~" ?! M- @ {6 ?" {. L1 \7 J3 F9 m
if (m_Item.dwId == dwId)) x7 [2 H* C/ p- x# E1 F3 k6 ^2 H
{
* y6 i8 E! j5 d' |0 g return m_Item.nIndex;
0 R' V" ]# I; u; A m+ h }
8 z# {# `9 X& e }3 K& S* z% S# k6 Q) }2 a
return 255;
( J0 C+ F7 g. `7 s}( m3 T- f2 b$ f
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置; e1 d5 m+ f% N: L _
{
' _3 Y9 [6 p; j! Z BYTE nTmp = 0;
/ _. L% P0 D6 i, I bool bDest = false,bSrc = false;
) I/ I% [" n7 q; F5 T for (int i=0;i<MAX_INVENTORY;i++)' }0 _6 k8 W( k+ }/ x) a+ i
{, f* }# Z j" w" Z' n+ n. A3 Y7 ]
if (dwSrcId == m_Item.dwId). r, G* l7 D5 g; d# k# Q
{0 c$ _8 F3 l. N3 E! C
//id相等 则 改变对应的dest和src
2 A( K2 S/ j7 Q8 b" q- J4 R- i) m nTmp = m_Item.nIndex;3 h. s( L9 B( p/ }8 E& V% _: V# N7 j
m_Item.nIndex = dest;
1 w) j# I7 s5 b; L }7 ~+ D" s. A. |$ g) F9 q
}0 x" V2 A B. d, W
//临时数据保存完毕,交换开始
9 P% W- y4 E4 E2 s: T+ s4 s3 u, } for (int i=0;i<MAX_INVENTORY;i++)
" d5 l. i5 _: m x$ Q& Q( k {# z3 v% E* A+ a* D" n" u
if (dest == m_Item.nIndex)
7 l/ k$ Z' ]) {' u0 L6 L9 c {; J) j* \& b( `- H
//id相等 则 改变对应的dest和src
: f7 p: H$ H2 B m_Item.nIndex = nTmp;
7 t9 |* f! w6 |$ B* U( I2 j }
; s% v" B. q. o {$ ~ }# H# R7 b" T- K( C
}
# c4 r" L& M6 p! B7 u};
7 L2 O# F1 t% G7 c6 D-------------------------------------------------------------------------
0 D; [* j4 O2 u依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 l3 O3 b' N, h3 r
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);3 m$ y6 }& `% q* t4 o% G- W' t1 n
紧靠其上添加:
e8 l% k, s5 i: j n( ^0 m4 aif( pWndBase == &m_wndMenu )
2 h" J1 {6 A' ]& j" W6 a{
' B0 I4 D; O; ]" e" S switch( nID )
O8 \% |$ V3 E {# M. e6 N+ b- S1 X
case 2:/ o( ]8 ]0 x, n4 g6 E Q
{! f6 y) ]* R' n; ~
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
. m f) d8 f4 v6 T if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 q/ E: P, p5 C: t* _7 X; o) o9 b {4 Q% t5 e( W2 q% X. w
break;
4 m/ L/ ~8 S( w6 D/ |% z6 T* @- S }. ]; C1 J8 ]5 c; o: j
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)3 {) i/ g2 F8 G* @
{1 n) J$ N4 E: y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 D$ }. X1 S- Q; r) v5 W( A6 C+ f) Q
if( !pItemElem )! f& C" b. O( a* J8 O
continue;. I/ s) l" H S7 n
if(pItemElem->GetExtra() > 0). V `. g/ W9 N5 W
continue;
0 n6 e! O+ Z+ R if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
) p' `& t2 S+ E/ z/ ~ continue;$ N( m- B. G2 q. e7 a
if( g_pPlayer->IsUsing( pItemElem ) )
V& U) O7 Q! ]. j$ e" |9 K continue;! p' |' Y6 |% W% L
if( pItemElem->IsUndestructable() == TRUE )6 q3 I2 Y0 I: j$ d3 L! w
{
/ I& K4 `% ^7 Y; F) F' w. j# |+ ~ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
/ N" Y% p0 v$ b- Q. z$ S. }; O2 p continue;
* C; O: F% D M; E }" g, T' ~, I+ B" ]& a& ~
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
7 c$ y, U, j- ]# o6 I6 e0 t) n }
' v+ N1 E. |1 G2 d break;
! f4 Z7 P9 t9 J( S# G: s& R# C' B- s }
( F. q) A/ F8 c) V ` case 1:
1 h" h& q/ K) G" d: E2 J3 M {: _4 G& k0 E/ Q$ p: l+ F
//整理背包# o7 h% D# K7 w/ q
//////////////////////////////////////////////////////////////////////////; e, p' q! O& v0 j; E! ?
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
% b3 V, Q5 j6 W; j5 s1 H2 l //////////////////////////////////////////////////////////////////////////
. m) m2 O5 b& ~2 U5 L' A$ o //////////////////////////////////////////////////////////////////////////
' U# a8 O; ~$ w k1 N CInventorySort* pInvSort = new CInventorySort;
- K- B! B- w+ {* W* d0 g: p vector <sItem> vItem;
6 y3 h" k( G# [9 ?: K {7 q vItem.resize(MAX_INVENTORY);//初始化大小
8 a$ W k1 H. h( N; X$ O, K$ \ ////////////////////////////////////////////////////////////////////////// D+ _0 c5 X& X( D M* s3 N
//填充数据
3 p1 R. y3 c( ] for (int i=0;i<MAX_INVENTORY;i++) A- g1 J) [/ U1 x( \) j9 R y- h
{
+ S+ I* U. j+ ~ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
/ B& j; ^1 `, c* s& e if (!pItemElem)
' T3 x* O& {& Y$ E; ]' |- U/ x+ J1 c {2 F1 r, l1 Q& K0 u3 X2 ^9 Y. n1 ] U
vItem.dwKind2 = 0xffffffff;
" Y- d5 k, d$ Y' M6 O vItem.dwItemId = 0xffffffff;+ H) H4 p2 }, G2 U5 t0 x, L% h3 I- {
vItem.nIndex = i;+ F9 L; B: e9 K0 E3 L- I e
}else {
6 B( Q+ u2 J# v! T' n ItemProp* pProp = pItemElem->GetProp();
?) V) w$ ^: a1 s vItem.dwKind2 = pProp->dwItemKind2;( D2 \# F8 E. l+ Q/ r
vItem.dwItemId = pItemElem->m_dwItemId;+ @$ [$ G; u, L( P, T; F
vItem.nIndex = i;9 N$ P5 g9 S4 L, V
}0 s' e( Q x0 _: l
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, B4 v- P! |. o }$ Y/ l I$ A. l" G
//////////////////////////////////////////////////////////////////////////$ D! c5 I+ |' R! i
sort(vItem.begin(),vItem.end());//排序4 [- A6 E+ o7 @) L3 c# n, l! Y1 x$ o' l
//////////////////////////////////////////////////////////////////////////
2 z) v) n4 v* J8 A+ L% P //交换
$ P5 e: P. p$ f$ }: n; Z for (size_t i=0;i<vItem.size();i++); F/ R4 k/ n) P( f
{
: r3 A3 a9 J5 \, V" P7 {3 r2 y //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 d2 b1 w9 z" u, T
pInvSort->Add(vItem.nIndex);
: s, V6 D3 d% S1 U9 K" s1 ^9 I _: s. V1 l }7 L8 L ]2 X" `( p, S; n
BYTE nDestPos = 0;
8 d; l: _+ P/ ^' s* d6 h for (int i=0;i<MAX_INVENTORY;i++)4 n8 h+ G0 N! X' N2 l$ k' z
{
( z( {( w% A% i+ A9 G+ h CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
3 I$ G4 w+ j/ `/ `* a/ h# W/ r. @ if (pItemElem)
) i$ u7 ?, N4 ^' A2 I! H' { {
& K; ]. I: J2 y+ x5 C& U9 N, V if (IsUsingItem(pItemElem))
: i( l! U: c# s; u& v( R' B/ n {
1 ~3 T( |& T0 Q" V! k //这个位置无法放
; V; @% ], Q, e- R3 a nDestPos++;
' j% M" |: h) l+ E* \0 c0 @ }2 h p2 {/ `. @0 E/ h
}
1 {$ ?! B) [3 g0 J' v! v BYTE nSrc = pInvSort->GetItemSrc(i);0 n1 \: M8 `, D" a. H
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);; K O1 X j: H' o8 @: {% f
if (pItemElem)/ [. p) J$ [6 p/ V
{
. P0 r$ W1 Q) {# t* A# _ if (IsUsingItem(pItemElem))
, }7 C" C: g& m# `. k/ l) L/ ? {' p, e0 P0 f, \7 R' j
//这个道具无法移动,跳过
/ Q# R1 w! w! P% k, ?) _ continue;7 F! ?0 O Y& c! c- p1 N/ M
}
" w% b" p# @* L }else{
) x8 g5 w4 }6 G4 h# p //空位置 不用动
8 Z' G+ o- c0 g: p continue;
- [( L8 @1 x6 h; H2 t( | }8 j# ]4 |5 Z8 G
//////////////////////////////////////////////////////////////////////////
& b; d8 _0 b5 s //开始移动
, {( d, h3 Z/ u2 ] if (nSrc == nDestPos)6 Z% F# ]" y* h$ S" e! J& K) H
{
4 F' X3 y, L& S$ c //原地不动
) f4 g9 V' [6 H( G1 R% S nDestPos++; O! q7 c9 F. M5 w
continue;
5 k1 b. r3 b' A$ y, P) x( d' V }+ z: J6 y& L l3 {+ t
pInvSort->MoveItem(i,nDestPos);
" j0 ]7 [) s2 b1 p' [ g_DPlay.SendMoveItem(0,nSrc,nDestPos);$ e& b$ z& e& }7 d
Sleep(5);- |5 F: P) B1 V$ b4 h1 X% S
//Error("移动 - %d->%d",nSrc,nDestPos);/ D/ W6 _/ ]3 M3 h+ i% |+ ?
nDestPos++;
" t* |% S! S+ {$ E }
7 b! X) ?# Z) ]: Q //取第一个元素的信息* \& U! [) m- o' e
/*
. c1 X+ q/ Q# K6 j V if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)! v& ~( ^% b: u% U2 `
{
& S& F# P# w W8 M8 I Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
& W) x" e' {5 g% [' ~2 ~8 v4 F8 m( ? g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);+ X- Q$ D! O7 p) w w: Y) E
}
G4 b0 {* F% O, C2 j) r */* m d6 Y0 Q: Q
//////////////////////////////////////////////////////////////////////////
- Q& w. z7 C/ U3 u* W/ D% L break;
7 ?- z0 R; o8 \7 w5 L( L- ]! Q8 W }
0 h1 d& }8 m- j, c) b6 @ }
/ q {1 ~) m* c! N U% m}
~( w! D+ a7 U' P H7 @! Wm_wndMenu.SetVisible(FALSE);* d }7 _4 ?3 T u$ s# j8 x6 q
9 t6 P) i- p2 [ u" f0 J
--------------------------------------------------------------------------------------------------------
' ?) d" ~# Y. `' p搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)0 s8 K5 o1 j8 |0 ?" @5 @* O- D7 C
{
% F+ q/ Q6 |: L5 R5 @) H+ N% CBaseMouseCursor();
; U+ p# o5 l: J! I/ x- \# ]% k}; v6 f: p0 o5 I! I" b
在其下添加:
( o" H0 o1 n B+ zvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
5 m% J; j" `! G% Z; N. E) r; y# y% P, l{* i% _3 @- I1 u
m_wndMenu.DeleteAllMenu();
$ l" I% j# `# X y8 `0 `; Dm_wndMenu.CreateMenu(this);
[: }; n. w1 }7 |- L; V+ y, K% Um_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");: f5 I; A+ N8 x# t$ F, q
1 ~# m P0 i- {" n+ t! H* _if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), ^* V4 [. S' U& U8 W5 m% @5 N
{, c/ u/ n. h. {; d, k
//P以上级别才可以删除所有道具& S6 J8 z# r& z7 j% f
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
$ _0 K* z( t( [+ j8 n}
8 L/ B: \4 z4 t3 E' c; U$ wm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
. Z) n; x7 B2 R p4 ~( Wm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() ); P- `5 `3 l8 @! }! V
m_wndMenu.SetFocus();
- B% Z$ i9 k/ {9 k& Z9 b4 p+ \}/ S0 G7 G" h+ l/ S
------------------------------------------------------------------------------------------------------------
8 Y+ V# A$ U& Y. g# O) x1 Y$ Y*************************
2 P7 V: W- N5 g/ S- YWndField.h文件% d- k/ z/ K0 |3 o6 |
*************************5 G. N% `1 s- b8 F( g* F
搜索:BOOL m_bReport;* u- d) X0 x" H8 O2 ?
其后添加:
/ k; c. @$ ^: I# ACWndMenu m_wndMenu;1 |5 ` l8 W% n) y
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
3 Y6 z2 m$ d( v% g其后添加:
3 E! [" l4 Q* b) |2 d% D4 O1 Gvirtual void OnRButtonUp(UINT nFlags, CPoint point);6 ?' s/ i( U: n- n
/ R @+ o6 ^/ W( h6 s! o' c3 _" f% m# p1 `+ _7 T O/ o7 r
|
|