飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
1 q" I- h, ]+ V1 y+ k搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' F1 F9 R5 g) I' M  m- Q" K

) w9 I/ X+ Z: w, B- B1 pstruct sItem
) P5 w2 U; o5 R6 Z( H- [{7 o9 b/ t9 ]. P) h
DWORD dwId;
2 z% G( B& C: P9 a, _6 @, y) {4 yDWORD dwKind2;0 }& g" @+ W+ u* K4 R
DWORD dwItemId;
6 p( H% P" Y2 |/ G: e( hBYTE nIndex;
$ h0 {$ Y( o3 m5 bsItem(){
, W3 W; P1 C+ l6 e( H% @, k& i9 y1 u  dwId = dwKind2 = dwItemId = nIndex = 0;
9 ^$ P7 |$ l1 y  f6 g9 ?. C}. q" f# v2 f4 }' D3 v- K% r
bool operator < (const sItem p2)3 M+ w$ [8 W0 s1 B3 a! b
{
% s% t) K, s$ m9 b& @8 J  E8 X  if (dwKind2 == p2.dwKind2)8 k0 |! r8 r# P% P) D
  {
! w0 f+ |, o( B   return dwItemId < p2.dwItemId;
& {% I: X3 a  z/ r+ U  }else{! w: E/ Y6 U- `& V3 T* k
   return dwKind2 < p2.dwKind2;
0 m: B% N( T% Z/ \# M" h- C2 U  }5 w( d% G9 W7 \  B
}/ v: L3 h8 W. R" v8 F" {2 u5 u
};
! X" ^* e7 R  Mclass CInventorySort$ s% E+ m1 B- Z& d, M" S7 @
{
6 M' |3 o8 s7 j' }' {" @. F1 p4 |+ Zpublic:9 e2 j# O% g: m5 C
CInventorySort()8 _$ p; K( P) S, n2 ~8 r
{
  w2 F7 [  J' Z% r; Z! F5 d. R9 S  m_dwPos = 0;9 ^1 R  }; |  H
}; w) K! C' q( j, K! m2 j
~CInventorySort(){}
% j: W  a$ W* f: d+ B/ ], bprivate:
. o2 b0 I4 V5 ]8 h9 rsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
* b( H# r. `# F, x" [DWORD m_dwPos;! y* @2 U8 n- h$ _  K; J
public:% U: c) ~+ ?/ Y/ [$ T0 ?$ T2 `. C1 p2 t
void Add(BYTE nIndex)
! S& @/ E& u9 J; D& ?{
7 {& r: y. I' ~( D  if (m_dwPos >= MAX_INVENTORY)% c- s+ k7 n& ~8 q5 w
  {, y' i( {7 }7 N
   return;
9 S3 B7 F0 V( G$ f" a7 A! N  }
' F! X$ L1 J6 P  x- B& f  m_Item[m_dwPos].nIndex = nIndex;8 w; _3 Y( \, v: T
  m_Item[m_dwPos].dwId = m_dwPos;% ?, y" B4 s- [5 w0 {
  m_dwPos++;
7 k) H# P4 c2 z/ u; r- U' R$ ^}9 Z% W; j7 y; n8 C
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
2 _$ H6 D$ }1 J# U% \- |{
% Q8 J4 \/ O, R( g  e: R' f  for (int i=0;i<MAX_INVENTORY;i++)
& m/ d; j* [  l9 u' Q6 ]  {
* \' }1 j8 I8 `- {& q  ~   if (m_Item.dwId == dwId)
. c" t: W  g0 e+ E4 t   {6 l* Y+ ?$ y8 c3 P0 ^
    return m_Item.nIndex;
( {! ]( S5 A+ f# L+ m. X: w9 _   }7 K* I5 `5 A% d9 ?- @) p& q4 y
  }
- L, O0 J9 W& @  return 255;/ ]# y* u, O3 u2 t
}
- W+ a1 E: g% e, |3 Tvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
2 I+ @. C  l& ~2 e$ G2 j1 g# n{
& U9 S( F3 f$ E" t+ ^  BYTE nTmp = 0;
" H0 A2 L- B! I+ _% R  bool bDest = false,bSrc = false;
* _1 v. |0 h" D' x  for (int i=0;i<MAX_INVENTORY;i++)
" Y! z! y6 F7 H9 w/ y  {
$ Q/ R; i9 _! g' s7 K4 l$ X   if (dwSrcId == m_Item.dwId)1 |$ g* N, c( b- d) X0 Y
   {) @( Y0 N, }+ H- h1 v
    //id相等 则 改变对应的dest和src
& P! @* @, T. ]/ X4 a    nTmp = m_Item.nIndex;0 }5 w; F& m4 b: e  x
    m_Item.nIndex = dest;
% E3 u" W9 |/ f  V# d: P   }
# y5 c0 t# u+ e5 Y3 e$ r  }$ O$ \; S# S* B% B! q
  //临时数据保存完毕,交换开始# A4 T2 B7 o5 s. X0 ^
  for (int i=0;i<MAX_INVENTORY;i++)
; O; W1 k% P2 C  g( _& u  {! N2 `6 i1 u/ b. Q
   if (dest == m_Item.nIndex)* W& }, U5 H- \: b1 a2 F2 z
   {! k/ E* d: i! k$ P6 B
    //id相等 则 改变对应的dest和src
0 P) x! O5 C. l  m" E! \- O6 r    m_Item.nIndex = nTmp;
' c/ I& I. C" {: o/ a* F' D5 D   }" Q$ U9 y) N" @- L! [3 Y% O* _
  }
# V" w2 \: v7 }# P  z1 M7 u}( O/ ^5 x+ z+ u$ X  F
};
- }" E3 y9 b2 C-------------------------------------------------------------------------
8 j$ s5 m5 _1 l" H1 C依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 M  s% z+ m. a: r* W# z. t$ ~; ^搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
6 y; [! _% s0 L) m. W紧靠其上添加:
. ?  D: f9 a; U. B; Lif( pWndBase == &m_wndMenu )
4 i& P5 K7 D$ O8 ]7 d{; p: c1 b/ g5 C  l. Z* |
  switch( nID )# f  [( _8 ?* z- R7 c2 U
  {$ s' W1 p( u/ `9 `; k2 T
  case 2:2 g7 g/ q3 R6 p. w2 z2 }' J
   {8 F) X8 Z5 Y* a, `7 P
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);- N- x2 B- E, S+ `# [
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: A1 W- v- |6 L: [    {
4 u$ M' X: R% W5 X     break;. [0 W( l/ ~& l* J
    }
+ H) {% y' `% d4 ?4 P1 J7 ^3 S    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)% ~) f8 o. t* Y1 _' ~& y
    {" Y% N: l) t( z) f* g# X
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
# Q7 R1 S! W' D) D     if( !pItemElem ). A% e, o% _( ?4 w' z
      continue;
3 ^! x" j" ^3 S4 v& F( |     if(pItemElem->GetExtra() > 0)
9 L: e) N" x9 g4 s: r. e      continue;' y% X( |+ I; s: o
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
) h5 _0 N" ]5 _      continue;
- r8 _3 m/ D; S& e  S7 l% X     if( g_pPlayer->IsUsing( pItemElem ) )  N+ i, H# I* X' ~+ R0 K6 K. b* I, q
      continue;
% f! z2 z- [% [; c     if( pItemElem->IsUndestructable() == TRUE )
, e; z4 I' P- _/ r% l0 f% y     {: m) H/ Z/ W& G0 B  d# v
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );) \7 Z+ j' i; ~3 u7 r7 c! E* j2 V* r
      continue;% [% s( A# ]- b% ?5 e0 b# ~* l
     }! T! y- k: h3 X+ T& h0 w: x
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
/ I0 Y+ d" f+ E0 }& l2 Q8 Y( y    }
) ]! J9 `; S/ ^' E4 m8 ^4 V    break;6 z) _* I# B* _% q0 {+ K! ~/ T
   }
2 f% F- Z. }' Z4 u$ O% G6 M8 p6 `: M  case 1:
1 e& V' Q/ a3 d" B- C   {2 n3 r9 `9 X% D8 o% B" P
    //整理背包
) W2 r2 X# p+ _4 k* M+ o- O! G- V# J5 x  V    //////////////////////////////////////////////////////////////////////////5 i/ v& x/ B: \2 b' Z
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );2 h! z; j3 D% g) e9 m' E$ j/ s
    //////////////////////////////////////////////////////////////////////////3 P( {) A& I6 m( z/ D7 j- P
    //////////////////////////////////////////////////////////////////////////" g* p; a, D; q0 g! r- f
    CInventorySort* pInvSort = new CInventorySort;* i8 \- d  r2 [) Q) _
    vector <sItem> vItem;: P- V* C3 q- w1 V( k8 u' I. P! w
    vItem.resize(MAX_INVENTORY);//初始化大小
6 g9 J# `/ ^" r/ y. a) p3 \     //////////////////////////////////////////////////////////////////////////* T, h9 T. C8 [0 A% r4 W  E
     //填充数据- @( H" e- ]9 }) w
     for (int i=0;i<MAX_INVENTORY;i++)4 B4 a: k$ w2 l3 K' Q
     {/ d1 _% d4 L# y% |/ ]7 q, G
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, m% s( F0 q0 H7 o2 m
      if (!pItemElem)
, R) z. T, X" ~& |0 _( S* B      {7 g+ u4 K9 u3 e9 e5 ^# |. o
       vItem.dwKind2 = 0xffffffff;
8 S! Z  T. I& b9 u- x. o       vItem.dwItemId = 0xffffffff;
! A3 e, I0 ]/ D: _4 S8 r       vItem.nIndex = i;
( W' J1 j1 S, t/ k9 u, l      }else {) q0 }# u' i3 r5 J% ^- C+ U
       ItemProp* pProp = pItemElem->GetProp();, F( w7 |+ J- {5 X$ V) P# ?
       vItem.dwKind2 = pProp->dwItemKind2;
3 O& j" [' i( N# c# P3 ^. N       vItem.dwItemId = pItemElem->m_dwItemId;
! u) a) f  s, K, T$ {4 g0 S       vItem.nIndex = i;
& F* [! l: n6 c! R0 ~      }# a2 Z1 |) Z2 `, c& G  v. @
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);0 i3 _# c; f1 f$ s& r1 Q- j4 y: I, ^
     }
' I, n  a: y- {     //////////////////////////////////////////////////////////////////////////3 J/ a+ ~4 W/ H1 ]! `2 x- v6 G
     sort(vItem.begin(),vItem.end());//排序
( N; W1 u3 i! Q+ ^     //////////////////////////////////////////////////////////////////////////5 o* m, j9 H) C* n: o- v% k
     //交换+ W4 M8 d) C. P$ F
     for (size_t i=0;i<vItem.size();i++)
% t1 }2 g6 v/ T5 N& i' J, o     {
% d+ [, {/ C6 G      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ v( G5 Q* P. o
      pInvSort->Add(vItem.nIndex);% N' c" l9 l6 V7 [% |
     }
' N0 K8 @' r% T4 K" h, d' A     BYTE nDestPos = 0;, {- |+ x. i: M5 O: b0 J8 E9 ?
     for (int i=0;i<MAX_INVENTORY;i++)
+ Q. f0 ?% Z! B     {
+ {- t- J: t, [5 S3 q0 }      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);: E& T) e8 x' t! T  Z$ c, F4 V
      if (pItemElem)
% H/ N( C: o  t- L% p5 F      {
1 ~- r" P) Y% S. K9 g6 g% T       if (IsUsingItem(pItemElem))1 k9 W- d% L6 R- Z  f" |5 Q
       {
( P: ?+ M8 K3 D: E$ s$ ^( d7 O2 B        //这个位置无法放- C; z# k& r/ ~- H- n; z
        nDestPos++;9 d: C" N( F' b4 `
       }
+ ]* l: P* v4 [7 E' r      }
( m1 w$ ~4 w7 h9 a8 u- G8 D7 s. P1 M      BYTE nSrc = pInvSort->GetItemSrc(i);' G2 p5 X( m+ j+ U) E
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
6 E+ i- Z: M' L% U) {9 ?      if (pItemElem)* q4 C% D- W6 r/ i/ w
      {' ]$ C! i9 j" Z' g# g
       if (IsUsingItem(pItemElem))
. _( }, P& I: F, y2 Q       {7 }$ y/ T  F# U7 W% Y: r
        //这个道具无法移动,跳过. L' }% t8 M6 L/ ~$ t: Z
        continue;
; y3 I  O$ b: u+ }       }2 c+ m& x- ~: r  [
      }else{. g+ Y  P0 _2 e
       //空位置 不用动
7 L" l' x; Q$ d- F8 G       continue;% _4 u' I! [( Y& l
      }
! @1 j) J$ Q  s6 d& z' u3 K  ]& y5 N      //////////////////////////////////////////////////////////////////////////' z; b' ^! J' m! X  ^
      //开始移动7 k6 \' y. Q/ w7 S5 p
      if (nSrc == nDestPos)
( t7 g# P/ Y- \      {9 f  c) n5 C/ Q8 a% N" Z
       //原地不动" R" T5 C& ~- h% V% v
       nDestPos++;
: H* Z! c% u- q0 D. I       continue;
4 O+ L% l$ T; m9 i9 A      }
( g; A8 B8 o4 L( G# @' s2 Z      pInvSort->MoveItem(i,nDestPos);
3 K, l7 @4 Y- ]  |# Y      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
6 @# }& [2 z/ w* [: @      Sleep(5);
8 W7 o) l7 E- I      //Error("移动 - %d->%d",nSrc,nDestPos);
# {% b% L3 d! ]- x' m      nDestPos++;! q- E2 K; Z4 D- {0 _2 [: q" k
     }  ~& ~3 p7 N8 S  u. K
     //取第一个元素的信息' r3 G" [1 @2 ]! U9 `# a
     /*
: ]5 n' |; H  R9 Y# c3 x/ ]. w     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
6 B' N' k) ?- v( M$ I     {! m" ^$ `4 Z4 Z- K5 V( d3 j
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
' ~4 p/ H# o! P4 h7 W% ^      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);4 e' u6 J4 _/ O
     }5 @& X' ?7 c- g& W: @7 e8 W% B
     */, T, U$ t0 q- d8 n# [
    //////////////////////////////////////////////////////////////////////////: F1 z- B  Y) {, a+ f" ~0 A: k
    break;
. E" Z3 R# J' H0 \" a: `- }8 T   }+ j7 M$ B2 P( s+ a# g
  } , o$ @7 {1 b0 l8 O/ n" q( o' \
}
$ Y4 |5 B. R8 q2 p6 e6 im_wndMenu.SetVisible(FALSE);
! ]" J' {) k. x$ B
$ _, K# T) R( B9 D. Z1 D* D1 o--------------------------------------------------------------------------------------------------------
( B; d$ H% A0 H: v3 u% A% X2 f: I搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
) a: n( v& p: t6 m# P' o, |+ c! v{
& ]! l' S; I$ `+ k7 X' K- K3 }BaseMouseCursor();
% L- [/ h. t$ c}+ V: [* x- @% j6 Y. z6 k
在其下添加:$ [  W1 ~, ~8 Y0 y
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
# c9 {2 B. _, B. \{2 g* v5 i  Y/ \. f
m_wndMenu.DeleteAllMenu();4 k, o) c. o, }: i( V5 g* m$ J
m_wndMenu.CreateMenu(this);' ~, n$ T  T: ]! {
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
2 O" y! Q$ Z2 n7 h0 l2 ]$ m
# L1 ^2 O9 N& B$ l) f; sif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))  n* P) P; ]( J+ m% g
{
% m0 @( E- [4 Q* v. a% ]  //P以上级别才可以删除所有道具  V. I2 i- F5 c4 r* C5 K
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
. [3 P* T0 R: b1 x- S}
) l# }3 R( |- B! km_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );, K! h, N8 e% S' M8 [3 \
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
% z) H4 O; H! |! o3 _m_wndMenu.SetFocus();7 Q2 ?' X. G) B. v
}
7 ~0 G4 u  s( p5 p4 p! j' k------------------------------------------------------------------------------------------------------------
7 X2 W  e2 l8 I$ n4 x6 H, h*************************
/ y4 S& T# F  m& H7 o0 x* ~  w0 }WndField.h文件: I8 x& d9 M! K" a4 r" {" p# W5 U
*************************- f1 N. L/ h  K3 E* L- H; i& N
搜索:BOOL m_bReport;% P# x. i! R% P- {3 h1 O; N
其后添加:+ [& N! @4 W! }) ]/ W
CWndMenu m_wndMenu;
; Z3 r# c% E/ O2 t7 V$ m搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
0 Z$ l! g; s3 S* {, T! j2 ], j5 K其后添加:( Z% q) ?2 D* \) {
virtual void OnRButtonUp(UINT nFlags, CPoint point);" W9 ~8 r6 j9 F0 E3 j

  ~3 }) b: _( C& @+ w
* u$ r2 F* h) e4 r! v# p1 B

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-4 09:48 , Processed in 0.068371 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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