飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
8 E& c' s; }/ u搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
8 t- [+ P' N3 X3 p
* `9 m' l% N) E8 O7 ostruct sItem
6 B, T7 @! [$ ~6 i- J{! K3 G2 [# U( U# m
DWORD dwId;& f6 r8 z) O2 |; @1 c1 `
DWORD dwKind2;
, a$ Q, {" u+ h2 I: |DWORD dwItemId;5 L& [! A# B0 p% m1 V$ i
BYTE nIndex;
- U3 _; C: |/ C! I1 K/ ]; YsItem(){  l: Q7 C+ p5 e& A) v) g
  dwId = dwKind2 = dwItemId = nIndex = 0;9 O6 y" l+ ?. |
}, W" T2 {, ?  h! j, W9 w
bool operator < (const sItem p2)# o5 b8 Q3 y0 N" o, Q" t
{
  A1 Y# ?0 v% U) L  if (dwKind2 == p2.dwKind2)
' {* r5 ]' o: e  {
! I, k0 Y" a6 h6 D4 m/ `) k   return dwItemId < p2.dwItemId;
4 p$ ~+ V' v- X' r: R' a! Y; d" |  }else{, w# m1 g6 T! n
   return dwKind2 < p2.dwKind2;
4 }; s" M7 o( u, F! D0 t4 }  }
7 z8 A; P! q" E, w* x& [}
" e- z2 Y+ U' m) Y* W. V" i};1 y8 l: a7 ]) s7 H. G+ i
class CInventorySort# \1 T( m& L! y! u
{, |7 s7 k0 _, m& ]0 ~+ \' R6 A
public:
/ g7 n. D) `) ~+ {3 ^CInventorySort()' b  B$ X& n" W( K# P
{
6 L5 _) Y. ?  N) O, J: L  m_dwPos = 0;
! Q( c0 V1 s' i/ c. J}. |; r% P4 g. |- f0 \5 p( l7 T
~CInventorySort(){}. X5 d) w& u& c4 H: y; r$ d. c" C7 B
private:
7 O9 ]2 c7 Z- [7 |( m  lsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
: p& W1 b: C9 r: |# i3 Q7 {DWORD m_dwPos;
4 Y9 s3 g, p$ c( n6 ]( `! ppublic:
; x$ b; u2 Z5 l2 svoid Add(BYTE nIndex)
$ f8 g) V4 j$ v2 E{
: b# u# n1 N6 Q& U, ^  if (m_dwPos >= MAX_INVENTORY)
3 E  M; M* c  Y( Z4 D" ?  {  i  X) d! c4 k4 @1 u
   return;3 z0 F- R% Q* L0 @0 w" k" X" ^
  }
5 {' U) F5 W0 N' M% j' [6 r. R  m_Item[m_dwPos].nIndex = nIndex;
4 h6 u* i, t$ Y8 `: l+ F' J  m_Item[m_dwPos].dwId = m_dwPos;
3 m( G" y$ n. L& S, l4 c  m_dwPos++;# h4 E" Y" v8 `! S( n
}) V& I6 x8 S0 J; G9 v
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
; b5 e+ |5 V2 ?7 Y% V* b  M  }{
% k3 ~6 g4 ?% p! K, z  o; _8 j: U5 Q  for (int i=0;i<MAX_INVENTORY;i++)4 ]% J$ Q- N4 |$ i# J0 k
  {
3 ]" ?) Z: [$ Q4 x* Z  T   if (m_Item.dwId == dwId)- G+ W% A7 d7 \( P8 X
   {2 _) P% `3 z! d" ?0 ~. b
    return m_Item.nIndex;% B& ?1 C3 \# z  A& k( x
   }
( ^7 O0 {7 z/ [+ m" \) r: j  }
! J9 H1 r/ w& ~' P  return 255;. m7 Z- d  `' ?- }/ B  y5 U
}
( T% Q  |2 N$ ]) v& Z$ dvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
! i8 [9 M5 e' I( M6 D* t{
7 J' }' N4 U  e$ c7 r  BYTE nTmp = 0;; E( y# e. @5 H' {' L
  bool bDest = false,bSrc = false;
2 D: S8 B& J8 Q5 t+ O3 _9 @6 M  for (int i=0;i<MAX_INVENTORY;i++)3 a4 Q3 i  C/ q1 m5 O! v! I1 U) s# q
  {) B5 B, d& y) s5 Q/ Z
   if (dwSrcId == m_Item.dwId)
. R/ t  z& F2 a( e* w) F   {
3 d& _5 q! ~: `" O4 V: b    //id相等 则 改变对应的dest和src
5 w5 b! M6 G: W    nTmp = m_Item.nIndex;( K& n% e4 x* O. F9 M8 ]6 N. j
    m_Item.nIndex = dest;6 L8 f5 N3 y6 l
   }& c) `+ r9 e3 v5 U" M5 `
  }
. h4 F: o5 B) ?  //临时数据保存完毕,交换开始- B  s% H" T* J4 F+ m! ?* a
  for (int i=0;i<MAX_INVENTORY;i++)
0 N" o4 K/ D3 a/ c& O  {
' c9 x0 E! P! l  A' d   if (dest == m_Item.nIndex)* s5 K" b7 N, q  v5 l- L9 M
   {
% {( u: m. d* G6 l* F! p; p    //id相等 则 改变对应的dest和src* y- R) g$ x! {# T* m
    m_Item.nIndex = nTmp;& X! `' [7 n7 B( Y7 h3 \3 [8 Z
   }: v8 t, ~; e. a) R' g; n% ^
  }
# q1 S+ P  z5 P7 Z9 H}
) C5 q1 `! N" _8 }; K  L};( b5 s! s4 P$ x& `$ b
-------------------------------------------------------------------------" r. T* g& c: _  B+ y
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 x' {& {& h1 f9 P$ Q
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
6 L% P* p# @% k; o0 o紧靠其上添加:  E, n  A4 H2 Z. s6 z  o8 @3 I
if( pWndBase == &m_wndMenu )
1 ?% @1 }2 e; c  ]. h3 M. M{& F1 v, O5 _+ B! `# @" J( i7 X) L
  switch( nID )# z- r4 U0 g' H. S
  {5 B, j* b. R% D' G
  case 2:% C1 `6 i+ ?" g5 K# R$ y
   {# ?  @2 U1 e& ?" q8 V' O6 {
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
- X5 T& T& H9 j& P/ f/ l8 E  R, i    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# G6 W' z( z+ V* I; `' s
    {
. E* n0 H/ I0 f     break;
; @/ h% z% I, ^6 j    }! U- I  z7 V7 e. W; i2 e' Z( l- I
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)$ w' O  b2 v( v
    {# [) U# {. m% u- f
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 D& Q/ k$ Y; }( c  y& g     if( !pItemElem )
- h: X  z: h8 r+ `      continue;
: s: D8 H+ ~7 L2 H; ~: ?, r     if(pItemElem->GetExtra() > 0)
# Y- U* G2 m5 G* r" y      continue;
' K$ p5 Q* x( b! i) i     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) & ]4 [5 g1 N/ ]4 Q
      continue;2 [. H) z" `' \1 A* a. `. P6 B7 f" f
     if( g_pPlayer->IsUsing( pItemElem ) )( d: P8 [/ p9 e4 c; Q! l$ |5 m
      continue;
( w- u! |* m$ t$ o4 Z& y6 j     if( pItemElem->IsUndestructable() == TRUE )
/ E' ~! g' C6 D     {" V  s8 s( S8 @0 \+ v; L+ @
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );. G. ]* N7 y9 N  {3 W& |. d" N
      continue;# t% y* R) e- Q0 A/ y3 z
     }
1 z/ @' j/ s& L- r     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);* n9 w% V7 h6 }$ f
    }/ x4 F! r6 l$ b8 l- W
    break;
9 Q0 R7 n* ?1 s' Z, Y% u  s. b   }
( D, V5 r: B6 |9 I0 r. R* S/ u  case 1:
: s# F7 [1 g- z5 Z( _   {# m, U4 Y9 Q  [9 \7 t& g
    //整理背包
! G3 x- F( [( N    //////////////////////////////////////////////////////////////////////////- V) D7 w' `) q
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
8 `- F5 P/ D( p5 ~: S7 G    //////////////////////////////////////////////////////////////////////////
7 d! h- G! ~, Y- ], F; P7 n    //////////////////////////////////////////////////////////////////////////3 t5 \" p! E/ `
    CInventorySort* pInvSort = new CInventorySort;
/ s- N/ R2 w% x% {    vector <sItem> vItem;+ R; s% O+ ]3 S, T7 _
    vItem.resize(MAX_INVENTORY);//初始化大小
% }& K+ D1 N; _/ {* r% k7 j) M     //////////////////////////////////////////////////////////////////////////
% Y  Y7 l0 g! O3 p0 n0 E0 p     //填充数据
! i% s# `1 C" s, Y     for (int i=0;i<MAX_INVENTORY;i++)
( d* d4 P& ?( ?9 b3 g     {6 g' x/ Y: ?2 m8 T* X' R2 b  y
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
/ p' e5 L/ u" Q% ]* \, u      if (!pItemElem)$ r5 ]: M5 U. Z" a
      {& c& X  P, ~  J
       vItem.dwKind2 = 0xffffffff;
1 ?, }2 ?( k9 \% V9 M$ o+ l       vItem.dwItemId = 0xffffffff;
  b3 e$ [+ S6 r       vItem.nIndex = i;% V; i! n) b2 Z; m$ O) T, E
      }else {% }1 a7 U6 P0 M6 P7 R$ S( }
       ItemProp* pProp = pItemElem->GetProp();
) f- {, ~+ f% k; ]! O# S& `       vItem.dwKind2 = pProp->dwItemKind2;
. ]# h5 y, K9 i1 B) S: B+ [       vItem.dwItemId = pItemElem->m_dwItemId;6 d0 B+ M$ Z6 E9 B; D* N
       vItem.nIndex = i;
' m0 K2 g$ |) H. `+ T+ Q      }$ s, G  Y3 _0 c! q/ u7 R
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);7 T/ W& I- A1 C( j
     }$ z% g9 i- F9 D- J5 x  A
     //////////////////////////////////////////////////////////////////////////( _+ M) ^) @/ s& U6 G; v7 ?" ~
     sort(vItem.begin(),vItem.end());//排序
- w! H1 X, @% z' W% u, R6 W     //////////////////////////////////////////////////////////////////////////4 P# r! ?4 `. e- X4 T3 k/ e: g, I8 t
     //交换
" i0 M4 ?! |+ \, d" T; n: k6 \& S     for (size_t i=0;i<vItem.size();i++)
2 U2 m& @, i* X4 W     {
2 c2 C  m6 {! X6 W8 P      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
0 c+ @$ S8 r* w  T. d0 B& g9 G/ n      pInvSort->Add(vItem.nIndex);
% E% H8 v' C+ Z7 P     }
' F' l3 Z, |- r! N8 K; K     BYTE nDestPos = 0;
0 C; n3 E5 }+ Z2 i/ h     for (int i=0;i<MAX_INVENTORY;i++)
8 A* k9 s; u! v& q' g1 `; _     {3 q6 Y0 t1 M8 n# S  ]
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);/ `& @* j5 B# q, V0 F% O
      if (pItemElem)* R' X3 {# d- @- s$ g4 m
      {
( Y8 {) R* k8 x; [! Z: e       if (IsUsingItem(pItemElem))
4 G$ Q8 Q# N1 x$ Q- F       {! j! j8 Z* R9 h7 V( K1 ]
        //这个位置无法放
8 G1 L! e% E4 }( O/ @        nDestPos++;5 @% ?. `4 ~& r5 r* D0 r. Q
       }
9 W+ z- q+ x3 j- U# `      }
5 O6 s% Z; m2 u5 x      BYTE nSrc = pInvSort->GetItemSrc(i);1 N( M) v: d/ D& z
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);, @2 z/ @. p$ H  ~) w. `
      if (pItemElem)
! V; {6 `* A( I! O      {1 M- K: ]4 z4 l3 R
       if (IsUsingItem(pItemElem))! d1 h9 I+ Z5 w8 ^( c# w
       {
7 t! q# Y# O9 E+ \        //这个道具无法移动,跳过
3 [' e. O8 G' f9 n. T* @  C        continue;! k; p6 O& y4 B
       }: v+ g( v$ K, R( P: ?! |/ ~+ `
      }else{
7 i: ^5 `% _' Q4 ^       //空位置 不用动
" m# l% A1 d7 r. ?       continue;; L: s8 s. a3 m9 _- E
      }, v# [' {! B+ l, b6 P
      //////////////////////////////////////////////////////////////////////////+ g, D, I3 C- Z& `, w, v
      //开始移动) A4 ~) Y% u/ V! K) k5 Z6 X
      if (nSrc == nDestPos)0 n& z4 `: N( ?+ q# M
      {
7 U$ j, ~+ |& h* P       //原地不动; f) S+ c$ p8 o* v( V
       nDestPos++;
  q6 r5 x8 Y. D       continue;
* P1 u, T$ c* @! W6 x8 v6 \& K      }1 L" _; r0 i: n* ~# A$ r% l0 X
      pInvSort->MoveItem(i,nDestPos);
+ j2 w" w- ^! B. A! p! B      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
/ `* l5 G9 ~0 w8 k5 C5 E) l. b      Sleep(5);( z# B6 N* D/ U. x
      //Error("移动 - %d->%d",nSrc,nDestPos);& `7 r4 I5 x7 p' A0 N/ V# `+ l
      nDestPos++;
' C* ^- L0 f7 K! y7 I" ~. ?     }
" u4 @% z4 V, O4 H. W& B. \     //取第一个元素的信息
: j2 \  R# Z& U" j3 f9 l     /*$ m3 F% U- [( Y' V, a5 l+ ~
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
9 A1 B" F. T0 G     {( a' S6 g' p" H4 w" D  ?# l& Z
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
+ b" T9 ^  F: Z2 @* H* n      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);, R6 ]% \8 v6 {) [
     }9 B1 o7 F$ D; d7 R" L7 E4 _  l
     */; `' ?/ P( _6 u# R2 K( @; P
    //////////////////////////////////////////////////////////////////////////
0 w3 M# N7 X. T7 w3 N    break;: P/ Z  ^2 n6 h. H2 O2 H
   }
4 z- u8 ~. b# p6 n$ }: T  }
% y: {: Z# W& t: u2 A" V% }% m$ o}
! \' X8 V3 g) sm_wndMenu.SetVisible(FALSE);! D. }3 E6 X1 u( L& r
& g9 \9 o/ z& |- v2 [) {% p
--------------------------------------------------------------------------------------------------------
) m. K5 Z& o  Y+ `) R搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)) r0 y7 n5 [9 Y/ c4 k. R. r7 k
{: Y" y* G" z* z) I* Q
BaseMouseCursor();4 I: }8 W; k; n5 q+ P( E
}
% D" v( M1 I; h在其下添加:( R+ W: A* u: d4 P. m6 F4 Y
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)' A: j$ F; ^+ ]
{
3 y% X+ t# j# Y- w; M+ [m_wndMenu.DeleteAllMenu();. j8 R0 I9 G, z6 s
m_wndMenu.CreateMenu(this);
: c) y6 Q' t# v7 J% m3 Wm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
9 {$ g, Z, D8 Z+ M1 ^* ~! M) p* T7 P! g5 a& x! U) p
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 o/ p( k. t* }4 i. e* }
{3 w! P: c! k6 S& k; h" D- Y0 O
  //P以上级别才可以删除所有道具! D: v' C% z) @8 W: v  X/ ^, W
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");7 l; {; c! d2 x9 x- D, M0 E1 l
}/ x; j# z+ b. y* {% h' N: Z
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );' \$ S( w* T* U: X# L
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );" ^' [8 D3 }1 j4 M0 K" |  ~4 V
m_wndMenu.SetFocus();
- z) A* V! F5 {+ |; L4 P9 _}
8 N) o- o$ k# A! p& V! G& o------------------------------------------------------------------------------------------------------------
: s! r  H/ \# t3 K% y' r# Q/ w7 L*************************
$ R5 p) h* x" \4 o7 ]' \! m3 c; QWndField.h文件
. O+ W. D. O! F( w$ Y; a" k*************************% j4 H# U, m3 |; w) w8 d
搜索:BOOL m_bReport;
; j2 |6 J$ ?- K0 p! q其后添加:2 ?' g2 r8 N; k  {
CWndMenu m_wndMenu;
, p8 j% L9 m5 {& p搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
) f9 f- v5 F! z1 }其后添加:: v1 K% m/ ?5 g9 K4 A( x+ z% N2 |4 b
virtual void OnRButtonUp(UINT nFlags, CPoint point);
/ o5 C& B; d: P" M8 ?7 K! {3 S
/ o( [6 ?# d2 ?$ `9 W
: I, S7 l- t' L. A8 M

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-25 07:54 , Processed in 0.060801 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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