飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
) F( u4 L% h( l. H/ R& j( `% m5 q搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 Y! r: t% P0 F) l7 i* T2 ]
: N4 ?; q( [7 Lstruct sItem8 z! S% K3 C$ T" h4 j' A, q
{
/ W3 c& `) G# n& {1 F5 G6 _DWORD dwId;9 U* C7 p$ L5 n9 {6 U% \8 R
DWORD dwKind2;
& S, Y8 k% T$ |2 u* K+ d+ oDWORD dwItemId;5 y- p: x  `' g; f; o
BYTE nIndex;+ ]% y% \" x& I1 S# O2 W& Q# M
sItem(){1 }% T+ K, b! k* h! M
  dwId = dwKind2 = dwItemId = nIndex = 0;- C) s/ J$ r8 B7 h
}  y6 K5 x( @0 C0 ^
bool operator < (const sItem p2)
% P! m" C, @% `{
" W7 ^/ m8 Q% M/ F  if (dwKind2 == p2.dwKind2)5 c7 }! O6 p' l" G  o
  {
( H) W& B2 V/ s# ^2 i! E   return dwItemId < p2.dwItemId;
9 \  l- j/ ?8 }  }else{
- P# t1 T7 f4 M2 D1 k" U   return dwKind2 < p2.dwKind2;
4 g0 [+ T& \% G9 X+ v  }$ h, x) J; Y( b7 e$ M! |9 W
}2 D) |; H6 @/ n& ]
};
# v) `% ?+ j2 C- Iclass CInventorySort
+ ?9 E9 G! Y! q7 v7 t; I{
9 X& n  q* ?/ A: b) m% d2 l$ m. \0 k9 dpublic:8 n# _! L7 `- A( J1 L! ^
CInventorySort()+ o5 `* `9 Q3 \+ \0 t( b
{% ]) _# j7 a( j4 z# S
  m_dwPos = 0;9 b7 W8 ~  K7 E' l3 Y$ x5 y/ r, X; W
}
8 G: e6 S; G# Z4 f) t~CInventorySort(){}
- D+ u; c  ^. y/ i, gprivate:
; x. z' A& L+ V# b: @5 IsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息) }6 v; |1 v% m& }) K7 P6 o* y& }
DWORD m_dwPos;
& t1 b+ Z- r: i; gpublic:
( R, v" i' r- i) Kvoid Add(BYTE nIndex)+ W  l' Q' u: _  z/ h
{
. o9 h. q0 I  r" `* j5 b- Z  if (m_dwPos >= MAX_INVENTORY)
& _! P4 W' f; P, N  {7 y% M5 u% `, q# _& _# q
   return;
/ V8 X) B% G. n* b% u/ H  }
& B' w5 l5 X1 G/ a" ?* \  m_Item[m_dwPos].nIndex = nIndex;
4 H3 Q! p% ?0 C3 L" G- b0 z+ _  m_Item[m_dwPos].dwId = m_dwPos;
2 y& l- H5 k& ]1 P  m_dwPos++;
) H9 Q  z# F. E6 i$ l1 w# n6 l/ S4 x" U}
8 s, `* u# H; ~BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
' E+ r7 P- l. S0 K1 c. h. r{; B4 V7 I" }8 Z" l4 g
  for (int i=0;i<MAX_INVENTORY;i++)- i" X# |$ v, S/ U( o
  {$ [% x, Y& x+ S/ i7 p0 c
   if (m_Item.dwId == dwId)
( e! R$ ~* o, f7 ^+ ^/ n' |& B   {
% ]1 ]  H$ D0 @! l1 c' M$ c" X    return m_Item.nIndex;
; e% ]$ X, c3 N: W& M0 K8 g   }
" J7 `, E) ]" s# S* t. \  }
% x# `$ V2 Q$ Z% i3 L  return 255;- i* u# t8 N+ y/ z$ ^9 @
}
! G. |3 L, a7 Tvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置8 m; O0 _! K% w% M% S
{
, @! \- d$ J, j$ ~) [( J; k  BYTE nTmp = 0;# p2 @* R% B5 F, r# c  j4 m
  bool bDest = false,bSrc = false;0 R3 ]" P9 A# }& @
  for (int i=0;i<MAX_INVENTORY;i++)3 _: J  n, n- i3 u7 ^
  {: Z. x  D$ ^" g: P# l/ p+ D. L
   if (dwSrcId == m_Item.dwId)$ S. _' U/ ~! q0 V
   {
, I  T) M, e) W6 m+ S8 o2 o    //id相等 则 改变对应的dest和src
+ I8 W6 c- x$ _. z: d# \8 K    nTmp = m_Item.nIndex;, f+ ?+ l# |. p0 P3 S& S$ C" ~2 z, T  w
    m_Item.nIndex = dest;& G+ r! {$ I& m' i& P6 J
   }6 h/ G* M7 Y7 d7 H6 `
  }  I8 z% l" L% O, s- a
  //临时数据保存完毕,交换开始
# S8 t$ g2 m2 B* O: ^  for (int i=0;i<MAX_INVENTORY;i++)
5 I, A" e! x" o5 W7 b  P0 M' d! n  B  {& A% p7 i' q) l  ^# D7 V
   if (dest == m_Item.nIndex)$ T, M/ V* T) F: e
   {! |) d' v9 R4 j$ i% I/ E5 |( D
    //id相等 则 改变对应的dest和src& e' a, c4 f6 @8 L" ]2 P. ~
    m_Item.nIndex = nTmp;
2 e$ N8 q7 D! s& k6 ~   }! \0 o4 k" f! N% A
  }
( y! R* y5 A( q* B9 y9 R2 J}5 O% ^- G8 i) X$ B3 l% @3 I* _; [
};% R9 \; ^, E6 E4 \
-------------------------------------------------------------------------
) _! f  L$ ]" p6 L2 G6 C依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )3 y9 w1 r8 _3 I( W6 p: E
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);5 _" t; H/ N9 I, j# G1 a1 n
紧靠其上添加:' k9 G' {- K( X
if( pWndBase == &m_wndMenu )
4 u1 b5 _' g: Y{0 d2 \/ @3 Q- b! x+ H! D" }
  switch( nID )# s0 T$ F; h$ [( {: {) p1 R
  {( N& t( @7 ]7 Q7 B
  case 2:
! g2 V5 i5 Z* v' v; R   {7 L3 D2 \2 Q4 n9 h# {! g
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);6 L, Y# s$ L$ K: c* E) g! S
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
, Q* T1 [- `0 m( H    {
$ \0 F$ R; k4 }4 \6 N3 P     break;
% t/ N- Y1 U6 q- i    }
6 O$ c  @+ \9 Y    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)" c: f0 c! B+ K! S
    {
' X0 O4 R1 f2 f) ?/ K     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
& s3 z5 l; l) r- K     if( !pItemElem )
' z; z* E9 o1 N+ j      continue;
3 s( n( f6 {5 D( L4 n8 N2 q     if(pItemElem->GetExtra() > 0)
: N7 w# g6 d. }      continue;
: _2 c) g3 G* L     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 8 _6 S2 w: O: K% W
      continue;1 [2 ^' J9 F: ?" l# ?$ |, O
     if( g_pPlayer->IsUsing( pItemElem ) )
" w7 I8 C5 l- K      continue;
2 B) T7 |, {  S1 u     if( pItemElem->IsUndestructable() == TRUE )
" W7 C. h3 A" S     {( U& b+ v; Y7 j) e. g
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );, I. [8 X! p+ q5 R
      continue;& j5 j2 `+ A3 ]5 ~+ y) r
     }" ^) B8 i- q( p4 m" v
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
9 G3 c  e2 X& J    }7 W# V1 k: x% @4 N  Q! w
    break;
& C- G, ^4 S" \+ \   }
7 j5 P" ?% j7 q+ q% G: j  case 1:/ f/ s* w4 E6 r# u* G  {' z6 ?
   {
, O" m: Q# q- p6 T3 @    //整理背包
% _7 X7 U  p" ]6 G; c& h, O7 L" [    //////////////////////////////////////////////////////////////////////////. H3 G' f7 J3 C1 \
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
* E- `3 L5 q2 Q5 C* C. T9 i    //////////////////////////////////////////////////////////////////////////" d  S5 F, w1 y$ v9 ~% P1 X
    /////////////////////////////////////////////////////////////////////////// G: G% c3 H  q9 R
    CInventorySort* pInvSort = new CInventorySort;
6 [1 k& q2 _: W3 R$ M    vector <sItem> vItem;0 O( ^, D1 I9 D5 x4 y) {
    vItem.resize(MAX_INVENTORY);//初始化大小
" U9 k4 \  D0 q0 I     //////////////////////////////////////////////////////////////////////////
/ d% ?8 w: g; V3 l% t  j     //填充数据1 a; F* O4 \% X3 x, T+ I5 X
     for (int i=0;i<MAX_INVENTORY;i++); H* r% F4 k- o( X8 C
     {1 _$ R: m: v7 ]0 Q
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- R% r, s+ G# x: f) V" r, R      if (!pItemElem)
% n1 A7 H! A; a3 H      {+ N8 w0 e1 n9 q- G
       vItem.dwKind2 = 0xffffffff;
' ^4 H6 o0 b5 K       vItem.dwItemId = 0xffffffff;
7 Z% O3 k; S7 S' r. i7 H       vItem.nIndex = i;9 O) W; q' c8 ~( y5 d1 a
      }else {
- V# E$ h2 ~5 O! D1 ~! T       ItemProp* pProp = pItemElem->GetProp();
5 z4 u* p7 Z) Z, }( Y3 \" _       vItem.dwKind2 = pProp->dwItemKind2;0 _! ^/ o- Y4 a
       vItem.dwItemId = pItemElem->m_dwItemId;
7 Y0 }' u$ o4 X% V( P       vItem.nIndex = i;3 V' c: }* b+ M8 \
      }  ~7 I% u0 a( R
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);: b) n/ U; L3 f, ]) ?
     }
) T9 F9 @" c4 g: |. k     //////////////////////////////////////////////////////////////////////////
3 }! H. V! v, Q7 r2 J' |2 _5 m9 c, x     sort(vItem.begin(),vItem.end());//排序4 g& P( I5 |  I8 H; N* h
     //////////////////////////////////////////////////////////////////////////
  f" S- z7 O2 Q* S3 l- a     //交换8 w* Q" V& I- C+ n# y
     for (size_t i=0;i<vItem.size();i++)
  A# _0 v; T& l9 m4 e# U' i5 `  N     {+ \; ^$ X4 r& p+ B0 P4 g+ w
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" y3 E+ w. L" E' D      pInvSort->Add(vItem.nIndex);( g% d  i% q6 S
     }
/ \: P; N8 D7 M- P1 c4 e4 _     BYTE nDestPos = 0;1 R/ ^& K* l$ E2 L: |! r! ]
     for (int i=0;i<MAX_INVENTORY;i++)0 v' t5 W1 Z; p" i# n5 A1 C
     {
/ g2 q1 n" p% }. D: o1 Q      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);) ~+ T: W" a/ |) k# ~' {! U- w
      if (pItemElem)) l& B3 B# P1 v3 x) r
      {: j4 v' R! m7 t
       if (IsUsingItem(pItemElem))
2 ]* E" ], J: o) I4 f7 F4 u3 E4 p       {& J6 K0 x% q, _2 b" Z9 L
        //这个位置无法放! L6 ~" C8 q) s0 b+ ?, H
        nDestPos++;- S# L: m1 T! L( R4 x
       }
6 l1 J# n/ w9 r$ o+ N: K      }* |3 ^8 R4 w( i9 V+ m5 R
      BYTE nSrc = pInvSort->GetItemSrc(i);; Y) I- T0 |" d: o/ B( r) b( Y+ Y
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);# x' g) |0 v: r9 }( |2 r( @- ?
      if (pItemElem)
! r% s. |, i( Q% L& g# G      {
% R4 E6 I% d. J, \5 S       if (IsUsingItem(pItemElem))
! E) s" `; T4 K" |* l' c3 C4 F       {
2 J% N. y  C4 M# K# y4 |4 S7 S        //这个道具无法移动,跳过; F$ k$ C5 X( B$ \4 R% R) f
        continue;/ j% N' U% y; w, a* s
       }
1 K$ }# r: h& ^$ C$ |/ D) q' }      }else{
" m8 P( x$ ^6 j, z       //空位置 不用动
$ F8 |& t4 g' f: _- _. H! H2 h& V       continue;
. h) z% s7 c7 p4 F5 D% [1 M5 p4 u      }- i( N9 k# @# z* F8 `3 q
      //////////////////////////////////////////////////////////////////////////
" R2 l' d; D8 y$ R% f" l& ]      //开始移动$ e1 ?$ W) e! p6 F' p
      if (nSrc == nDestPos)
( c* P% Q4 T3 D7 c* I      {* r7 N, H: }' s" |$ p  x8 A, ~
       //原地不动
& e  ]+ o; }7 z4 w. |! B: [       nDestPos++;# H% t- d' \" E+ K! ?6 I
       continue;4 A$ D5 U# x6 }1 D+ Q7 B
      }
2 U6 u& i& o7 d      pInvSort->MoveItem(i,nDestPos);
- p( e; A: c4 S, z$ P, {. A; H5 ?& I      g_DPlay.SendMoveItem(0,nSrc,nDestPos);3 U# u& p: \2 ~1 Q# I( m1 J
      Sleep(5);
) W6 {' c6 A3 [      //Error("移动 - %d->%d",nSrc,nDestPos);- ^, _  N/ e% X" s
      nDestPos++;
; @9 ]& m4 g# w& |4 g0 o     }% T4 `- y: C" W0 ?
     //取第一个元素的信息1 w: u7 o8 k) w' w: e
     /*
0 {4 y0 \/ n! P- J6 q& u     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)# J" q2 W0 ^& w+ u
     {; K, [# m7 ~7 L! V) Z& ]/ P
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
+ A, R$ K  {7 t4 e. w' S/ t      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
7 Q/ e2 A0 n9 x0 P* t- i     }, j% ~) S, p( s1 a
     */$ y% J3 ], _5 L  n: d3 t, P) c
    //////////////////////////////////////////////////////////////////////////( v7 r+ g% K8 N! e( i# \
    break;
+ |) a8 G2 o4 A! p   }
2 \8 m8 o& D* l, [5 @# m+ h  } * Q' s' b, k6 c& _% s" h1 e
}1 q: }* Q) a! U
m_wndMenu.SetVisible(FALSE);7 U. U8 v" m, f. s
4 W+ _7 A; C, y
--------------------------------------------------------------------------------------------------------
% j: h. y! M5 u5 }& y7 ~/ ?2 T搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
3 k. `+ G. y3 h% r' b6 q$ ]{
- e2 W$ [/ R! ~, R% rBaseMouseCursor();  g. d: y# g# t/ @
}
* E$ N# f& w: i# C8 \在其下添加:
0 E  O6 M" s# pvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
5 x; N, Q" x/ g  N: A1 q& s. k: d{
" a, k  P3 O9 R3 U- Y+ C4 Rm_wndMenu.DeleteAllMenu();7 C0 v: t+ Z2 ?1 l% r
m_wndMenu.CreateMenu(this);7 j7 R' @/ ]* f6 Q$ j8 T; D
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
. ~- H& o9 {# v; S& ^! [4 z! v* c7 X8 |; O: l) P
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 j: q- R, @# u$ g2 P% c% e( U
{
7 z' O7 ]4 e  p6 j( `6 ~  //P以上级别才可以删除所有道具) z/ f+ O3 g2 H2 x2 l3 i8 j
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
, U7 |( u  W# z! y3 k2 U# S: C9 a) Z}
" j' O4 ]  e/ x) y7 d/ Qm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
4 v2 ^4 Y' j; mm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
7 I& N* |# }  \; z" u( i2 a/ w5 Ym_wndMenu.SetFocus();" K- E1 l: ^$ x( D  n8 a" _2 R
}
& ~  m8 x0 C. C" F+ K------------------------------------------------------------------------------------------------------------* C+ v" Q! e  i' P) K1 `5 `
*************************- h; s- Z/ z$ Y% x
WndField.h文件! U$ c8 K. y0 x5 E, K6 Y. B- f. G
*************************1 F/ M8 F0 x; |) M" n
搜索:BOOL m_bReport;
, o1 i6 f# S6 P! G: _其后添加:& i6 o, x. ~5 a5 f
CWndMenu m_wndMenu;
. O8 [% f2 }: g' |0 w+ i) }% b搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);4 I; m9 D' `, e) j" c
其后添加:
4 v" J' ]& |8 k6 V. G6 E- K2 {" Evirtual void OnRButtonUp(UINT nFlags, CPoint point);
/ ?" q6 x8 ^, v! q* E  G
% P/ U5 s& K3 g/ m% f2 d: s" g3 g, p  g8 e7 f' a" R# ]

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-23 06:53 , Processed in 0.141996 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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