飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件% t5 u# O+ f- _. ^$ Q
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% O- }" y0 U% O1 H. E/ u+ W

5 s0 F2 @. N7 w5 ]  L& G: pstruct sItem3 q. r* ]0 M% a
{8 `/ f. B* ~1 k3 e, b
DWORD dwId;; D  n% ?6 _) k) q+ V- r1 u) g
DWORD dwKind2;# C3 X) p; x6 Q, o7 V
DWORD dwItemId;
# p, _2 B+ c4 j. T- S/ A$ lBYTE nIndex;/ y* o3 }7 `! U& C7 D& m- X) X
sItem(){; i* V+ ~  k0 c4 @
  dwId = dwKind2 = dwItemId = nIndex = 0;
! _$ N9 G. j3 N; t; p$ V}; }4 I3 C3 {; Z; _
bool operator < (const sItem p2)6 Q* c2 W2 M7 `: O8 y- P" M( q
{
4 |/ l( l6 c) _! J/ q1 }2 E( f  if (dwKind2 == p2.dwKind2). c* O1 W. H+ t. ?: K
  {
( s6 g0 H0 T8 f- C' P   return dwItemId < p2.dwItemId;: W0 R6 _7 ?7 T# G
  }else{
1 y& }+ f$ q8 D7 X, F1 w   return dwKind2 < p2.dwKind2;* x% `! d! K0 A; C/ B5 u$ B
  }1 V: o  ?7 g- S/ H# @
}
# J& T; \9 }- O};
# L; K8 Y  Y, L1 Y7 R: R* }( cclass CInventorySort
4 R9 L- I; {1 J# l7 x( ]4 Z; u1 U{' }! I0 H7 e7 L2 M; _
public:
- ]+ m, p0 F- l: v3 R) \CInventorySort()
, x0 N  b5 C6 F9 a7 G/ Z9 a{
8 h3 p% _# p: I5 W2 f3 S  m_dwPos = 0;9 }  A) q6 c/ ?: r, Z. M, L( g
}: A; r4 e9 q7 d. O6 I
~CInventorySort(){}& X4 @  N( ]- a
private:: l. s0 Z* b0 {; ]% I# K
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息) F1 Z  p! F+ ~: B! H: b
DWORD m_dwPos;7 q- X/ a0 [1 I7 U' y; Q: M) V
public:. I1 _7 }) M: N' h' W
void Add(BYTE nIndex)! }" O; ^+ D5 k! [3 b7 J
{/ l5 {9 q3 q7 a- M; n6 h
  if (m_dwPos >= MAX_INVENTORY)
0 J$ }9 L0 `. L* P8 x  {
5 ?: r% R* u$ w6 o4 T   return;
4 w& P; K% P' X7 C' K; B  }
$ k$ [4 [! T' u" r  m_Item[m_dwPos].nIndex = nIndex;
& n- Y1 \9 v# N+ A0 c. k& G  m_Item[m_dwPos].dwId = m_dwPos;( e8 p8 P; b  p. @
  m_dwPos++;
& V* Q5 K% G) @1 q( {) F}
7 f) S1 r" j1 m! u! a% fBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
/ a6 E2 |& i+ c1 S{
, r6 k2 u; k! a# [5 i+ h0 F  for (int i=0;i<MAX_INVENTORY;i++)3 ?4 L8 `, V( \% a1 `: D
  {4 X# p: C- S2 M6 a
   if (m_Item.dwId == dwId)8 z( ]% Z- ]' t4 P' i" g
   {; i2 _/ [: `8 p7 Y1 p  f9 ]) U
    return m_Item.nIndex;  }# b$ q" `% _2 U- L; E
   }3 Q9 }, o; [7 ?. D% S8 I, X7 _
  }
4 I$ V- S, l& u; E  return 255;
, |# G& u" w* E* s}
! Q1 X4 \3 A( E3 P! g$ i( Y2 qvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置/ F+ R5 f3 O& z7 g2 c, a5 V
{
" g  V9 ]7 m$ X& n1 T  BYTE nTmp = 0;
2 n/ L# T+ u7 p* i' T0 A  bool bDest = false,bSrc = false;
, {$ M. I2 p5 t" K  D1 O  for (int i=0;i<MAX_INVENTORY;i++)
0 Y; {0 v5 Y8 d) l  {, o9 [2 w* D6 h1 g" x/ b
   if (dwSrcId == m_Item.dwId)9 K, e* {" Q9 ]6 k; j
   {
, H( @* W! ?0 U7 h    //id相等 则 改变对应的dest和src( |* \- W& u4 L, j% u4 {; Q
    nTmp = m_Item.nIndex;% B- _" i  S* G$ T+ ]4 ?% y2 s
    m_Item.nIndex = dest;
7 c8 w7 a: B6 J( h  C: v   }
3 R& M4 z' I0 l( |: K! ^% s  }+ K/ W% E5 n7 Q. Z6 L! k
  //临时数据保存完毕,交换开始
% b( G" z+ T* U: z  for (int i=0;i<MAX_INVENTORY;i++)
4 {" x+ w# E6 f* j0 y0 Q  {
2 X2 L( j* ]+ a) ~2 R6 J0 @   if (dest == m_Item.nIndex)9 B  F* _# i1 L6 g- ?. X
   {
  t. ]4 a- `3 t1 G6 q    //id相等 则 改变对应的dest和src! S3 d; ?, c4 s) Q4 v7 ]! Y5 }
    m_Item.nIndex = nTmp;
( {! f( Y4 `* Q# W" r   }
  O( a0 F: S2 \  }. t/ Z/ X* R; q% C" w( C  t6 S: l
}
( \. v2 m7 r( ^4 H3 R. b1 E- i};
" f/ P5 T$ B+ Y6 u! S9 v& A! k-------------------------------------------------------------------------
( l6 V& |7 p' ?, B依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): Q. y9 N% {; `! ^; P! p1 Z: L# P
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
7 f2 ]4 u- S- F' U, l1 z紧靠其上添加:; I8 T' V, Q2 F+ c; E
if( pWndBase == &m_wndMenu )
/ h1 w+ p' ]4 d- C5 w8 N{& _" X$ x! u9 Q: e6 Q* j+ z
  switch( nID )
( W( l" C# D) E/ Z4 F9 h  {
0 ?0 u' @  C" _- E' z& Q3 o: \  case 2:
# \) a) y& {+ t; J8 E2 P   {3 b7 m3 Q2 H0 F2 G$ X3 L+ k
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);8 X2 d  \3 o4 f9 z5 f  V
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))8 Y( g+ o& h4 {! b' D3 H6 ^+ `
    {7 I8 ]" G0 R4 j. q; s( B9 F5 F
     break;
! H7 A/ c3 i" k/ F4 H0 }4 d    }
" x& \) N# N+ s8 e, l% ~    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
3 [5 t* i$ n/ y$ l" U& I    {6 m/ E7 X1 k6 k/ x' _8 a3 {4 h
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);8 v! O0 q0 A% r& M( q
     if( !pItemElem )% L5 L+ N4 I; ^6 k; j1 ~( M; t0 B
      continue;/ \9 L0 q/ Z) W6 ?" f
     if(pItemElem->GetExtra() > 0)+ F: y/ b4 T+ d: Z# V1 u5 O
      continue;9 S5 ~9 x$ T1 P7 B1 R( a* A
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
  p  C5 u# S8 B  A/ ^5 @; i      continue;3 R8 ?6 N% G) G  z0 c; d$ p
     if( g_pPlayer->IsUsing( pItemElem ) )
5 E6 m1 M8 M7 j# {" p5 E      continue;: X7 x+ T, f9 Y
     if( pItemElem->IsUndestructable() == TRUE )
3 Y2 z8 {- ~. L- t# @3 ^     {
  P! [- {! i  J( |; k! ?      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );+ F, O& p3 R2 V, X8 C, I5 U
      continue;
3 A9 u4 |5 |# c. p5 `7 K     }
( x  a3 P& i  N, |( o     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);% J; r+ ?7 ]( U% }6 \, J
    }
* _9 ?$ F8 E) D( y    break;+ v3 Z  x% R6 }# N! I' m
   }: Q  x0 S, G: [+ i1 p; ~
  case 1:6 E. Z, r2 d+ r$ }) f
   {
9 N# [* z' t+ z' x' O7 Z    //整理背包+ f3 ]1 ^" S- x4 n" H; Q5 T
    //////////////////////////////////////////////////////////////////////////* r3 s6 @  a4 m$ b& C3 n
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );( J  C" C- A) `$ i! o
    //////////////////////////////////////////////////////////////////////////
8 a) b. q7 ?  G9 X3 C) t    //////////////////////////////////////////////////////////////////////////
3 E4 J  {9 }* V( f1 ]  c    CInventorySort* pInvSort = new CInventorySort;
$ v1 V& J! P, l    vector <sItem> vItem;$ d# D( u5 K5 C7 e* O  D; N
    vItem.resize(MAX_INVENTORY);//初始化大小
: h. Q/ y7 |, J. P     //////////////////////////////////////////////////////////////////////////
- a9 N% R( B* A. V+ `2 `& [( R     //填充数据) Q: p9 q# M+ ?& e2 Q/ O* ?
     for (int i=0;i<MAX_INVENTORY;i++)
+ {5 e; u( b9 ]; |2 `     {
$ Q1 f5 V6 d, M; Q( }0 J$ H0 m, ^      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, w8 b; a! w2 r9 A2 J1 E) g
      if (!pItemElem)0 _% P" Y. ]8 R. p( A
      {
( {: n0 ]' k! ^  \5 n( I, ?8 w7 j; ^       vItem.dwKind2 = 0xffffffff;! w( H3 D  u5 \: F' G
       vItem.dwItemId = 0xffffffff;
; T$ q. g. r: `/ i6 Q       vItem.nIndex = i;
# Z5 X6 \# [& N      }else {  H% b0 s; I  X, R% Z& `
       ItemProp* pProp = pItemElem->GetProp();
8 e( w. g% Z! V* O2 u! b6 n       vItem.dwKind2 = pProp->dwItemKind2;
6 j. A$ O, N6 H4 j       vItem.dwItemId = pItemElem->m_dwItemId;
- @6 Y5 c$ h) {2 `       vItem.nIndex = i;
3 s( i& n( I5 n/ R* z4 |6 {- f      }/ G! r& k. ~8 g/ }8 n" v0 |
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. W% B0 x% }7 K; \! U6 D! S8 ?2 ]     }6 a( t% c' ~, _( M/ y8 z
     //////////////////////////////////////////////////////////////////////////: Y1 Q; }( w, G/ z1 `, a
     sort(vItem.begin(),vItem.end());//排序, W: p% `: X1 o; b3 q
     //////////////////////////////////////////////////////////////////////////
; }0 P3 z: M% @" E6 t4 T! w     //交换
: Y8 V# s& Q* G4 r/ J! p0 S* T4 t     for (size_t i=0;i<vItem.size();i++)0 D" n( P* B$ P& [5 v1 s
     {
$ L0 n. e5 Y$ n/ \; n; S      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 Y* p- T% [4 }* n" M& A% G# x      pInvSort->Add(vItem.nIndex);
+ }8 s) C8 t; K, `4 P1 e     }
- O4 a8 U' g  ~& o* q, [     BYTE nDestPos = 0;8 R$ Q9 N- @8 w& ^3 v. v/ q. T$ P
     for (int i=0;i<MAX_INVENTORY;i++)
5 y9 K2 z8 J" j! H6 E5 a% Q, c     {! D' |1 L% Y; a3 @! z( |% n
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
/ H1 E2 X: b2 i! h, H- v& r      if (pItemElem)
: ^, f* Q2 e* f, p9 q9 p8 B; A1 x9 c      {
% `! q4 [2 ]* S- _, ?. P& z       if (IsUsingItem(pItemElem))  W$ y' j# ~) s4 g( E
       {# ]9 @: c! p/ r2 ^8 M2 W5 a4 [0 l3 K; O
        //这个位置无法放. C" B) P# K# b- X2 s
        nDestPos++;2 T8 b3 V! g+ v$ k! T
       }
) X+ h* m; t1 G2 a) C      }0 E4 ]( d& E" Z% W. S
      BYTE nSrc = pInvSort->GetItemSrc(i);" h# @' H3 ~1 R' ^5 m
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
5 X; X' s6 q. b: l" C      if (pItemElem)! H; ~$ B6 q, U; M- x9 ]. C, Z
      {
/ q0 F% z: y2 t- S8 ^       if (IsUsingItem(pItemElem))
- B- ]$ |$ R4 l' `* P# U* ?1 C4 o       {
$ A9 _" Y3 t  s        //这个道具无法移动,跳过
, {( p6 ]+ S- M8 R  f        continue;
5 `3 h4 L! K/ N) D5 u% @$ X       }
: M8 c; M: F" Z8 e- s% p      }else{: A3 h, y6 A, i, D+ e; m! g/ ~& n4 M
       //空位置 不用动
- j2 A0 r' p5 w# F. m1 u5 j       continue;
; _. j0 I$ c/ A% D      }4 V& N/ y7 `5 o( ]
      //////////////////////////////////////////////////////////////////////////% N& F$ ^" u6 i8 ?5 g+ N
      //开始移动/ X& J7 p- q; c8 c
      if (nSrc == nDestPos)
$ h/ T! W3 z% A7 L( f      {
* }6 n* R; ~' `) U- b6 E$ v$ \       //原地不动. h( ^  e. [1 Q) c3 k: e3 V0 h
       nDestPos++;
4 c$ C" P" Z6 a" Y6 E+ x       continue;
2 i% F2 r5 {# n; _, x7 ^      }, b- t* V0 O. d" o) `# |
      pInvSort->MoveItem(i,nDestPos);* p2 q. n6 R- V- I5 V* k7 z8 z/ q* Q
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);* _* O3 Z1 n3 ~0 V. p
      Sleep(5);* k$ H$ X; G2 [) C0 A. `7 ^3 D4 [/ @
      //Error("移动 - %d->%d",nSrc,nDestPos);
8 ~  I4 f- ?2 x8 k- Y6 a% j! z      nDestPos++;; \2 d0 m& Q' ^9 o2 R/ ^
     }7 ?% n) v. \, o  C& F5 X8 G
     //取第一个元素的信息
# M  \& W; \! r7 H' }/ P     /*
, [+ s, p% r# m5 n- S  N     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)3 V4 M& Y! ~2 ~. d9 s" ~6 R' H' s/ ?
     {
' {' M; f( _7 h; l6 W( V      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);5 n0 g% b6 B3 X+ h
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);) [+ ~. Z$ `3 W4 P, m$ f
     }+ I* e( i( |+ p
     */
- z6 @9 x6 J" j8 y    /////////////////////////////////////////////////////////////////////////// r: k4 I4 R+ g
    break;
6 ]# R+ b4 v5 E% a& K1 y, {5 H   }+ \- G+ o% V: v7 o1 d" O# K
  }
! w) |( r0 N/ E0 ^$ ]}
: s3 N9 X% ^3 U) ?) Jm_wndMenu.SetVisible(FALSE);
3 [" t& l! F! @1 A  e: b; c; |+ |! D5 X5 P+ n2 C- _
--------------------------------------------------------------------------------------------------------
1 x6 G# i5 s$ j: a7 X0 ?' w搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)9 @: E0 k+ p& S7 H3 |
{7 C/ Q8 o( y3 |8 w/ c6 Q) k
BaseMouseCursor();
2 R5 \+ P, I9 b, y}& |6 Y3 Z( x4 A; N1 O
在其下添加:
7 w: w0 K7 x3 W; ]; X# qvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
# v8 f% Q- n0 W1 a{
( r$ ~  p: N& v2 t8 y$ _m_wndMenu.DeleteAllMenu();
2 U1 d7 ^0 x+ Ym_wndMenu.CreateMenu(this);; w9 s5 \. G7 d3 w
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");$ n; l/ O1 @" X& T' O

# z: e2 c: `2 V6 k1 A+ Lif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; w6 f: S% M, A# o0 u{
& [7 ?/ {- g$ ?' P! A  //P以上级别才可以删除所有道具
: o* v) k$ v6 f2 m; x! ?  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");3 o9 r* Z9 r# M0 a1 k3 y& r' J& {
}
/ k5 f1 _( S5 ?5 Ym_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
2 `# p& w7 [6 ~. G3 qm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );% c0 V$ ~+ m0 z. Z
m_wndMenu.SetFocus();
- [( W& }7 C3 H: F5 a8 }}3 y# Z7 A2 i7 @) |3 C
------------------------------------------------------------------------------------------------------------
/ b( |: L: r3 c  A* p) w5 C/ N*************************. c& ]) p/ U. U4 O" J+ l8 ^
WndField.h文件
! s, z, S1 L% j* `( ~0 B) P*************************: X  h+ W: j1 d: o
搜索:BOOL m_bReport;- x# M3 a3 J& z1 `# `
其后添加:
* S4 e% \7 B) y. p2 i1 K  [CWndMenu m_wndMenu;
  |4 ~  w2 x9 R; Z' u9 [$ x搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
. c, d4 E# d/ e其后添加:
/ g2 J7 f  L5 q- C7 ~& {* Kvirtual void OnRButtonUp(UINT nFlags, CPoint point);5 K* N2 W& |% W6 |3 w' `

, Z; c* B' B7 T5 K: e/ x3 p5 b- z
. P% j( O0 f; R

相关帖子

回复

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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