飞飞世界论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 18492|回复: 0
打印 上一主题 下一主题

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
$ K5 a) Y5 k9 B6 Q- C; d% D  R搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 C: D  t+ O1 i
) _- ~. j4 V1 a
struct sItem
9 _4 \' C) U6 t" g4 S) v{
% ~- d" H. ]+ u3 R) iDWORD dwId;3 G  ?/ Z3 ]! L# ^/ A
DWORD dwKind2;
+ s: M, D1 q5 RDWORD dwItemId;
# _; q& A$ [: p' K: C6 iBYTE nIndex;
2 o( z. e+ ]: ]* a* p) _sItem(){: F( D" H8 y3 L
  dwId = dwKind2 = dwItemId = nIndex = 0;
* B' y) U% B$ s+ j0 r}2 e& w0 M2 f  m# i4 H, R; \
bool operator < (const sItem p2)( E% T9 l* l3 l0 h# E
{# y. _. Y% D& C
  if (dwKind2 == p2.dwKind2)
: ?, q) B' A) w6 _! p  {1 G8 z+ c. U9 M; w
   return dwItemId < p2.dwItemId;% E* M) ?9 Y$ Y8 B' W; H3 T
  }else{1 _* C. P/ V+ c
   return dwKind2 < p2.dwKind2;
: l: i( k9 q( {% i9 h  }5 W! M; k4 ^, A) u! @' J9 }5 E4 ]
}/ i" w1 M2 |9 J$ O+ B6 m' d# a( G6 ^
};9 b) x6 q8 Y8 I" T
class CInventorySort- R/ j2 u- g  O* d9 P: h  r
{
3 \& d, t# d" `public:0 b; F, |! Q- A/ Y& O7 y. l
CInventorySort()5 b' _/ m4 [9 s5 m3 Y
{
/ k  }+ Y: Y) _3 p( x  m_dwPos = 0;- L1 i& \; Y0 P4 `
}" x1 ]7 T- y# T! V6 R1 i  b
~CInventorySort(){}9 y1 W! S& F) k/ f! q; O( i
private:( s8 E3 d5 f, u) B, x6 T6 A& `# ?
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息9 P! V% }# U8 c% E9 J
DWORD m_dwPos;3 x: P- @& d2 G1 Q* S/ l# a1 E/ o) V
public:% @- {8 F$ k) D2 m# {8 p
void Add(BYTE nIndex)( A1 f7 Z) f6 W3 g
{
) N7 j- e9 H1 U$ f- B# E0 P; Q" O  if (m_dwPos >= MAX_INVENTORY)
- h" E+ h2 [- o/ P- n3 d& {( t  {
6 E$ c$ }8 f+ `4 v   return;
6 |( Q9 |" F4 u4 y9 s  }$ @3 C5 V9 r4 i4 |0 z
  m_Item[m_dwPos].nIndex = nIndex;
# j& X' u0 t* D/ ]9 y* N& e  m_Item[m_dwPos].dwId = m_dwPos;
- X. t0 X; X; q/ i! M  m_dwPos++;  ?3 y* O# C* t5 f" k
}
; E5 f) O+ N) ZBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
& M! H2 [1 R4 X. F+ ?7 F: w{3 {) t6 l# l' j5 [" u5 k
  for (int i=0;i<MAX_INVENTORY;i++)
( ]' u7 P3 J3 I  p& t  {
% k$ L7 v( A! W6 [: o+ @6 }+ b! N; ]   if (m_Item.dwId == dwId)
" O! _4 W4 E& K! S3 F" Q   {
0 \! k' `  V9 r) P8 j6 j    return m_Item.nIndex;% V' n' b( j( g' A
   }2 A! W" z/ ~; n) o* G" w: Z
  }
9 @0 V" W! a2 @  return 255;: S+ T7 q0 h, [$ Z
}
1 j4 e2 h$ D, }: c. ?void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置" _! c9 e, c* H6 J# b. C7 \
{7 |9 p" B6 B- K2 C! k+ N' _
  BYTE nTmp = 0;
5 q7 d( u& m2 ~1 y6 f  bool bDest = false,bSrc = false;
: i7 r! u3 l( f. x! `  for (int i=0;i<MAX_INVENTORY;i++)
9 Y; {. T$ e8 _# }7 l$ M  {
9 n& O$ @: A2 x- j8 V" A3 l   if (dwSrcId == m_Item.dwId)* b4 c+ l. F* w# B
   {* s, o: b+ ~# F% G  e# _
    //id相等 则 改变对应的dest和src* |7 [' K( X* Q3 B  B
    nTmp = m_Item.nIndex;$ }: v- [6 s" C; ]+ N2 X4 {0 Y0 e
    m_Item.nIndex = dest;
8 Q2 e/ }+ k0 J- C4 A   }
8 V( s+ M7 ?+ \$ q  I- B  }
* y' h/ v( |# B/ v/ D' R  //临时数据保存完毕,交换开始
) f$ B/ T- N8 G8 N8 i  for (int i=0;i<MAX_INVENTORY;i++)
5 \  B  q8 A7 n) x8 w& I- P- z  {9 @' M% W; F; y' ^/ U: Z
   if (dest == m_Item.nIndex)
$ i7 z, q1 n$ e& S4 i3 T5 n0 S9 u& |+ _   {
; I% y$ ^% I8 t, E7 s    //id相等 则 改变对应的dest和src/ D6 K0 I; A0 t' J. G% B4 y3 W6 _
    m_Item.nIndex = nTmp;% C( V9 Z, w# V5 x- y5 ^3 Q  A4 B
   }
: g* G& b7 n. `! V7 q  }
7 U: _5 i+ X1 v$ U  ]( }}
# G4 O) i5 ^& J! z};8 Z" ~/ L9 M* F% n* i( F: Z0 H
-------------------------------------------------------------------------" ^" @6 M5 S: c. w2 R- S4 f
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 Q7 {+ V. n/ z  [: [' B" a
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);0 G8 Z" b9 ?, N
紧靠其上添加:3 m/ f- x# U4 J% F3 N
if( pWndBase == &m_wndMenu )
/ ]- m. z( t6 M. P& p8 N( T{  k/ v* T7 {6 c5 f
  switch( nID ). i4 S* k9 Y3 n* E; A
  {4 {+ S5 L" q4 z- X
  case 2:, r, @( P1 u+ q0 z9 E
   {
3 W7 }" C" B/ n; p* y    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);& U- V. [0 }9 |1 v6 N9 p8 q
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))" P# g$ H6 w  S8 Q: e  V( A
    {
1 y% g) B0 o: T' L, i6 n! o4 }     break;
1 Z5 c9 w; L4 b& \    }  V( q8 g, @3 c! H; D, x# W" H# j
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
: J/ n. Z) c$ |' t    {4 K, \. l: M" y2 @6 a) V
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& k7 P4 }. @/ Y  [
     if( !pItemElem )
2 {; E* V& v! D# U' Z      continue;* m  l9 q3 K; q# g- \2 {5 z3 ^+ W
     if(pItemElem->GetExtra() > 0); Z+ l8 K* n# f1 I0 T* A
      continue;! U* \) F. m4 T9 a8 X& I" [
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 4 N2 l; B) ^. ^1 Q9 R
      continue;
& y4 n5 K. m$ U$ R2 z1 k# C     if( g_pPlayer->IsUsing( pItemElem ) )9 l3 T2 c6 O2 G  b% l
      continue;$ i0 ?$ X  v5 g1 T2 V  k: e
     if( pItemElem->IsUndestructable() == TRUE )$ |9 W. g8 W% d. g0 @+ d; ?2 s( u) Q
     {
- ^6 P) C6 |& J9 j      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
; s4 @3 z& z6 p/ Z      continue;
3 d/ N# E  d- s3 c3 n) W* U     }, C4 w* g% L' D4 O7 Y, }5 [/ K
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
/ \/ c3 n4 t) X$ v    }
9 {2 N- s  O. M7 T" ~3 \8 P- v    break;
& Q5 d4 Z- I8 ~7 g$ s2 r8 Y* i. r   }4 b: @3 F8 Q( m& |
  case 1:
* [% ^  S6 J3 Y6 j# Z   {2 e) ^# r9 Y/ F, {- v2 _
    //整理背包  h! o- k* n/ v9 A
    //////////////////////////////////////////////////////////////////////////5 ^4 g2 E; A4 g/ g" T5 `! c
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );8 t# V% t. y( G+ e; o% }
    //////////////////////////////////////////////////////////////////////////6 V1 z( r9 U: K" q4 v1 M
    //////////////////////////////////////////////////////////////////////////# u# {& _/ v0 A) [, k+ c4 O
    CInventorySort* pInvSort = new CInventorySort;
* ~3 A/ u0 S# d/ `5 p$ }7 ~& l    vector <sItem> vItem;1 e2 W- E0 A/ Y! v, y- Z' @) b/ L
    vItem.resize(MAX_INVENTORY);//初始化大小
& K' q* K( }" J# s' D% d$ I     //////////////////////////////////////////////////////////////////////////
: @# V4 I( k; p( e: k) ~% C+ `4 F     //填充数据$ E  Y" f9 l' H( N; A
     for (int i=0;i<MAX_INVENTORY;i++)0 r- A  `) w0 B) J' n
     {' b9 \1 j% m; A7 f
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
# v$ ~% F/ \. s, p      if (!pItemElem)
; J- n( x  M3 l- X1 p5 b( n      {
, o  v, u* u: z' t: ^+ y6 b5 U       vItem.dwKind2 = 0xffffffff;& R( @" P' L3 a6 }* Z
       vItem.dwItemId = 0xffffffff;
# W$ k6 E! Z. Y" V       vItem.nIndex = i;* i, y7 h6 @3 n: e# i5 H& _% T( D- @
      }else {
7 U  N3 X% M  f# Y2 `$ F) E9 s       ItemProp* pProp = pItemElem->GetProp();
5 z5 t! N. s9 Q" a0 R       vItem.dwKind2 = pProp->dwItemKind2;
; |' U4 Y6 r# w3 K# P( X       vItem.dwItemId = pItemElem->m_dwItemId;' t% k# c* m; X  n2 k( ?8 M. h
       vItem.nIndex = i;
  S; p" ~  a6 W0 l- @* ^! m      }, H/ y* f! T: k
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);3 H  D1 h% n8 r& ]
     }+ K% p9 e, z, ?" H( ?
     //////////////////////////////////////////////////////////////////////////' `, k, r% W1 Z( r9 K9 p
     sort(vItem.begin(),vItem.end());//排序9 e) [$ O, L* `8 e$ M
     //////////////////////////////////////////////////////////////////////////
# T' h/ N4 w- f* S) Z     //交换" l) B6 N6 x9 q; Q" m$ M3 f: }
     for (size_t i=0;i<vItem.size();i++)2 @9 W: z& F$ ~/ S
     {
) o3 l! o8 O5 `9 }. Q) j3 Q; h      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 w; l, w, U( @$ I- f      pInvSort->Add(vItem.nIndex);
: R. E+ Y: i# D+ ?+ r/ m     }
2 [0 k' R' S: e: J  a     BYTE nDestPos = 0;8 ]! ?2 p" e2 ?
     for (int i=0;i<MAX_INVENTORY;i++)& E) a+ u2 s3 z2 w  H' w% K
     {, w8 P7 C: f7 Y, A0 Q
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
/ N2 H% y2 u2 l, f+ x* Y      if (pItemElem)
, r* H% {' X# `  o$ i      {
( g* A! `9 ~  c# b# S6 t0 x0 @       if (IsUsingItem(pItemElem))8 u, W5 p* f  y$ p( ~8 y. [
       {
" _5 g$ o9 w4 B% D; x0 K; j1 c; x$ O        //这个位置无法放
0 k7 v4 L0 h- K9 }        nDestPos++;, O0 R$ P  g$ b9 L9 B8 w
       }
* ?0 f& }1 x0 h      }) B. ~/ S: l5 Z9 y5 x
      BYTE nSrc = pInvSort->GetItemSrc(i);, L! L- j. \$ y( D; H
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);! N7 m( D+ a( Z- K, J/ X2 u
      if (pItemElem)
$ j3 O0 A+ l7 `$ z- q) a      {
( p0 x% |! n+ N4 y# H       if (IsUsingItem(pItemElem))9 }, s4 |1 T! R7 N  [. r( z
       {
" h, l# o0 K3 T( b5 O        //这个道具无法移动,跳过
2 ~  {" `) x' N5 h# e1 w        continue;
# l$ K; w* V- ^       }
) \1 b2 z3 h/ ]' }6 z1 j- F      }else{
6 R! J- X; G- F       //空位置 不用动
* B5 c3 x4 |8 R  `       continue;
$ d/ h. i7 q! e) g      }# G4 r! W$ V. d3 p% b5 Z
      //////////////////////////////////////////////////////////////////////////, t6 ~  c' Q- ?8 b2 U& e( Z
      //开始移动
1 g( P$ M8 k. j5 h# u/ K5 I! ?/ e" S      if (nSrc == nDestPos); u: P+ o- X  o7 O5 g- e. `0 V
      {3 r# y' y; T; o0 N5 Z/ K
       //原地不动
6 B$ _0 R- _% D9 n2 Q, Z       nDestPos++;6 u* i& f' o. N) q) T9 e
       continue;' j4 n% ~# V% `5 `
      }$ B4 E# }8 |: A) e' z1 q
      pInvSort->MoveItem(i,nDestPos);% T+ p' E0 F' i; M
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);* L: z0 ~$ c" F0 U/ g* ^
      Sleep(5);
& }1 w, T0 o& O9 U      //Error("移动 - %d->%d",nSrc,nDestPos);1 N- @6 I) R( U; b/ F! D
      nDestPos++;" c) T( l  ^& n3 C- ~/ B; z
     }( _7 T- I& Y! J& e: O% K5 u& j6 X/ y
     //取第一个元素的信息
( h- a# h2 H' V+ A9 ?( h0 e     /*4 A, p2 J2 @9 @( |; E- ^
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)3 o# K8 q" U. n0 t0 T5 z, e
     {
' N2 g- T1 a' S( e      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
6 u$ i& u9 j; d/ G& C  |* v0 O      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
' N( H3 z# n- G8 t. i. [. ]     }
7 n" P  }$ N% b! g6 x% u4 l     */
/ Z: j5 V( O( W3 h    //////////////////////////////////////////////////////////////////////////
: `% z# ?, s* I) C2 d% q8 m    break;8 Z9 R& w* |% ~
   }* {2 u' |5 k, Z
  }   i: j& O( [" K+ V8 [+ N
}
% P' d" f& Z, x5 _/ [% D! q8 _m_wndMenu.SetVisible(FALSE);
, p: s& B. s1 I# F
8 G$ y; N$ H9 ?# a--------------------------------------------------------------------------------------------------------6 q3 \$ d' T# Y0 S; H5 C2 R$ _
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)  w+ v( [: N; n6 E0 i2 P
{) n1 W5 T* b% h- Z  r" ]; m
BaseMouseCursor();
2 p+ r  t3 S4 Q% b% g1 l}8 o' c, Z  r" W
在其下添加:+ ]9 r2 }, R2 p% _) X4 d6 @
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
3 c3 H( C& E' N6 v{9 A6 W. D7 x  V, p0 P0 t  d
m_wndMenu.DeleteAllMenu();1 V. F" ?: H4 x. [
m_wndMenu.CreateMenu(this);
+ {$ Z$ K. z8 t1 [6 m* K4 e5 gm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
6 K- K. \$ }0 T) p5 |5 l9 B  Z7 O/ Q* r4 M9 H. c- t8 z
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 R. M  n; J* C6 v  Y{
2 I( `1 \; N9 i  //P以上级别才可以删除所有道具2 i% l( p5 O' w5 d  T
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");. N1 a5 H# y$ j2 J; h
}. \$ Z! t, H3 ?9 o8 V5 M7 m. g
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
8 o. q: v/ X. \. \$ z! }m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );' c+ V" l! z8 |/ w3 ]
m_wndMenu.SetFocus();- N2 f6 r# N# {$ x6 T! q- Q) m! i
}
' ~9 \. ~. V0 _6 y0 I$ E4 ~# Y------------------------------------------------------------------------------------------------------------2 {3 N5 i! R  |* T8 ]+ a! C, y
*************************& d) s; i# m8 c& Y: z4 c6 _7 H6 b
WndField.h文件6 u( [5 |7 x4 }1 N' w, R
*************************- n) N: q8 E- E/ D4 A
搜索:BOOL m_bReport;
7 c% @9 I- `1 f其后添加:& Y5 j7 U5 W7 P
CWndMenu m_wndMenu;
  f/ K4 w2 B: t5 T6 `4 }2 f搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
8 h, F0 w/ Y! H" ]; y其后添加:% B! R7 G* f' O7 A
virtual void OnRButtonUp(UINT nFlags, CPoint point);. H2 X8 n) {- u2 o' p, S+ l

6 K) V$ \! f4 D8 w6 L4 }0 F, ]
4 d/ ]" R3 }% A3 ^& C6 b, \( A5 v5 k

相关帖子

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|飞飞世界技术论坛  

GMT+8, 2025-12-14 17:13 , Processed in 0.062195 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表