飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
  s$ F4 U8 w& D! T% c1 }+ K搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" j( ?& }: a" e* q5 r6 a6 R
+ ?5 Z# g9 d& L2 l# O: v+ y# c" m
struct sItem; C, `  s) P7 X8 ~* U; I- f- @
{" m# p' t+ |/ Z, T. q2 Z/ Y* H; l" a
DWORD dwId;( B  x3 h% G! h: _7 b2 a, ^
DWORD dwKind2;; B4 a8 E- Y' \5 t
DWORD dwItemId;
" }* r9 {7 b: s" }& dBYTE nIndex;3 z( O  w: p0 a5 P. ^2 t
sItem(){
7 |5 r4 k& s6 u( {$ x/ a" m! \6 N  dwId = dwKind2 = dwItemId = nIndex = 0;" W: Q1 d9 X, }* H. o
}
( S3 U" l# L, ?+ Gbool operator < (const sItem p2)" [5 O+ a6 x, }, T" [% y' B
{
8 x+ Z" ~7 f; R, n7 }9 t  if (dwKind2 == p2.dwKind2)
& d# S4 H1 k% @5 t( O+ F  {
; H" G9 c  l2 R; ?4 |/ {   return dwItemId < p2.dwItemId;$ s1 P+ i' l1 P3 N# f: F) a3 @
  }else{
" l/ b9 z$ T6 g, H2 n, a3 l& C   return dwKind2 < p2.dwKind2;
& R8 b" A% ]" ]3 L' V  }
) }/ f2 }5 E7 `( O  l}/ r. V9 s. D+ E8 X
};4 T$ G, Z* j  n: `1 l3 L, V9 f
class CInventorySort; t; ~/ d& Q$ @# }' }) j6 @1 j
{
4 Q' M* g$ ?' c: i9 r" ypublic:
8 L6 r/ I& y7 A0 DCInventorySort()2 b" b0 l# f' ?* d
{1 e8 d- N, ?% Q7 I
  m_dwPos = 0;
# z" Y9 u  V- Y}( ]+ Z1 B" d3 u0 j# M
~CInventorySort(){}
6 U/ h+ w$ r* M* Q1 Eprivate:2 o4 x- K3 r% K. `4 k3 X
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息' `' [8 e0 i6 `& O  t/ I
DWORD m_dwPos;
6 h7 T1 z! v3 x/ e0 V# f! X+ Opublic:+ I2 Q! `1 q7 W  b) P; Y/ y
void Add(BYTE nIndex)0 z1 S2 L) V  k
{
- ]2 x& }* `( X* G  if (m_dwPos >= MAX_INVENTORY). t# t& _% O3 q
  {* `! Z) n. i2 |
   return;. b" l8 t; S  B& Y. V0 P0 N
  }" S' U* v/ e$ H- Z
  m_Item[m_dwPos].nIndex = nIndex;# M' x( I2 ?. ~; F6 a6 Y  s* z
  m_Item[m_dwPos].dwId = m_dwPos;
- C4 R5 s  D/ j8 |  ?  m_dwPos++;
, r6 _' D6 A% v! G* ]}/ H$ ]3 |# L2 M2 B
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
% ]$ T1 u5 z7 B) c  l* a{
2 F9 c$ u* X) E7 S( t  for (int i=0;i<MAX_INVENTORY;i++)2 C7 ~5 c' X* C1 P( J& I- v5 ~
  {
4 |9 E! w% t3 w1 b: c   if (m_Item.dwId == dwId)
8 Z2 \3 p# X4 c; K& r7 u4 r3 Y% s* @   {
( O+ Y/ p; K; G. @( E: v- t    return m_Item.nIndex;7 Y- x0 k( b! E4 A* ]  Z/ K- f
   }* _  X: m; }' L% u. }7 V# |
  }) [: X0 |4 n: ~$ v; Q
  return 255;+ ]/ ]% h$ P" I3 G2 L0 Q0 b  U. U6 c
}5 G5 h/ ~# J' k, [" M9 w7 n! Z
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置2 i6 @. O3 b7 J' N5 ]# @
{+ h8 I2 L2 U7 Q
  BYTE nTmp = 0;; G* q" O  R8 G( C
  bool bDest = false,bSrc = false;
& Z+ z+ P# q" O, v; d9 f  for (int i=0;i<MAX_INVENTORY;i++)
9 ?5 M8 T( [4 O; I  {2 H- S9 ~  I0 y! p( D
   if (dwSrcId == m_Item.dwId)
4 l! T5 O4 }% w2 `: {5 q7 N   {
% N" Q0 o% |4 l3 Z: H  m, i- N    //id相等 则 改变对应的dest和src
, |3 ?6 k5 F# x0 q4 H) e    nTmp = m_Item.nIndex;
3 C2 p5 F( t6 Y    m_Item.nIndex = dest;- l. X# R* \9 ?$ t- ^; y
   }1 j, T# @, x4 x7 u
  }4 v8 P4 M, F) f% \) ?
  //临时数据保存完毕,交换开始# H9 J# a7 `: w( z3 |
  for (int i=0;i<MAX_INVENTORY;i++)
+ Q8 b9 K$ z5 z# M3 v6 B2 C, M  {, g5 y$ }, g* R
   if (dest == m_Item.nIndex)
* o/ g+ H2 Q. X   {4 W+ E4 ?5 `* P) O
    //id相等 则 改变对应的dest和src
) T- h$ t1 c0 U) s    m_Item.nIndex = nTmp;- Z) c7 S- F3 |: a1 Q
   }
) r2 p- A. g9 U( E, o. _3 e# p  }
- B/ a# n  f1 i( d( X}
- d6 P# B3 ?1 P- G- c4 r) `1 x};
* s2 A" i. s8 M1 L( P8 o-------------------------------------------------------------------------: {* u% n  J2 v9 \( D6 T' s0 G
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' ]% P' K" N- _9 K- N$ D+ ?# }0 K  I
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);% n& G& g7 i1 a+ a
紧靠其上添加:
/ L# r- c) |9 }5 S" w% F, p6 wif( pWndBase == &m_wndMenu )
" f' o/ J; c1 y8 z# {{& Q. v. Z1 z* U1 O
  switch( nID ), t1 J5 A- H# L3 n
  {
' s2 l6 X% Z& t* g" `6 a! {  case 2:
# L4 b, V* |3 q2 _8 t   {
8 ~6 d$ D4 i7 d/ q$ Z    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);3 O) Q& e1 N( ?& s+ J# [
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))4 l6 F( X$ |7 A! m5 \5 u  n& X, A, ]
    {
2 j7 W2 N. [) q, P     break;
1 d" g; O. a. ~6 [    }* I6 f$ B, U4 P; W
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
( m; p8 e; v# l+ H/ r    {! c3 b8 Q  t" s* D. ]
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. [5 w3 u) J3 f& m
     if( !pItemElem )0 L; x1 V2 [* m( ?: S$ O- B# I
      continue;
7 ~# z5 c1 }$ L6 v/ w2 R+ c     if(pItemElem->GetExtra() > 0)
6 b) M' X+ ~) @      continue;
% `0 o) d  ?# s& \5 f     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
& x$ @+ N3 ]: B% n      continue;
( l. I* D& Y3 d4 I     if( g_pPlayer->IsUsing( pItemElem ) )0 v6 Z5 Y9 U% P& ^7 ?7 v
      continue;; a0 V) ?  g; j6 u' d
     if( pItemElem->IsUndestructable() == TRUE )) O9 a! u8 W4 c: r2 D( Y7 n
     {
' K9 X) Y1 d+ \! G6 `      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
& ~6 q+ \4 D" Q: \      continue;
! O9 `: e0 T0 b2 O8 e1 c     }
- T6 C  T5 o# O     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);" s2 ~8 R  E3 D- t! c& I1 z0 X: |
    }
" ~: e; [, s$ H0 i9 @/ j" Q    break;) Z/ t. V' K$ J. ~8 j
   }
2 `/ i' f) O# \6 f; S  case 1:$ V" i% m4 `$ Y# a: P. A. N/ p
   {
/ r% l5 ?1 v2 g9 |+ i. u2 Q  L    //整理背包
$ i  @$ M* |+ p1 f; D& W    //////////////////////////////////////////////////////////////////////////
! o( y. V( V5 W" @1 Y    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
2 T3 T( c6 `* J3 {3 ^3 U% e& ]; N8 G    //////////////////////////////////////////////////////////////////////////
4 J' x2 T4 N1 [1 g: D3 L4 H    //////////////////////////////////////////////////////////////////////////
6 a/ D/ z5 o/ O' ]. c    CInventorySort* pInvSort = new CInventorySort;, o1 w0 ~" d- ^
    vector <sItem> vItem;
# L1 w8 K$ K, d; S2 B# Z    vItem.resize(MAX_INVENTORY);//初始化大小
: s6 f0 S. a. x) @% |. _% Q5 r     //////////////////////////////////////////////////////////////////////////8 m, ^' {; s0 {7 i; g
     //填充数据
6 n' C- O2 Y1 P  t3 B     for (int i=0;i<MAX_INVENTORY;i++)6 R9 U4 s7 h5 \( E
     {
- H3 H4 ]9 W5 K# b( L      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 _) {5 O" Z* j) D% z
      if (!pItemElem)
; z) U# @8 K# K- J      {
- F  z0 A7 D; H4 x' K' y8 A       vItem.dwKind2 = 0xffffffff;, ?# Z2 [  G1 B. m
       vItem.dwItemId = 0xffffffff;) {' s' y: ^9 U/ s) S& n+ X
       vItem.nIndex = i;
9 r4 W' H1 H4 Y      }else {
! A3 K7 U7 L4 q# M' a3 V       ItemProp* pProp = pItemElem->GetProp();
. N5 D! I* L$ h) ^5 M  ~       vItem.dwKind2 = pProp->dwItemKind2;& N0 ^( H' I9 K! Q0 a0 w
       vItem.dwItemId = pItemElem->m_dwItemId;9 t0 h, _2 j! U$ d& e
       vItem.nIndex = i;+ h& X3 B" L" R! S! M
      }
. D: m' ?  u8 Y7 G  N      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ G. `3 v0 W% U. H5 h9 f3 C
     }2 t# X! S6 Z8 j& ^- n
     //////////////////////////////////////////////////////////////////////////
# p4 p6 C* w* @( ]' @( r; Q' E     sort(vItem.begin(),vItem.end());//排序0 o# J7 d5 y9 C+ m9 T! r7 P
     //////////////////////////////////////////////////////////////////////////0 ~# W5 V5 t5 |. u( H. f
     //交换8 H0 B+ m0 q+ G. i' P( Q% m7 s+ H
     for (size_t i=0;i<vItem.size();i++)
6 I3 P- x+ C( t/ F9 U; |& x     {
' F: b( h, |3 x6 O" I# Y      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
  \8 `: r/ Q( z4 N6 ]      pInvSort->Add(vItem.nIndex);6 L# J7 X+ D6 G3 r( w# R/ U
     }* |/ n2 ]4 @: C  C" m7 V
     BYTE nDestPos = 0;9 v: Y  u1 J5 T& @0 B. W3 \/ b4 Y
     for (int i=0;i<MAX_INVENTORY;i++)
8 ~# s) \. I4 T+ t( U     {
) m3 c+ y. v# D# F      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);' z  F7 P( v' o4 y: t( R
      if (pItemElem)* _& Y, X( F# Y1 B8 \7 @% ?
      {  R: f1 M. x+ V7 H2 a
       if (IsUsingItem(pItemElem))
/ w! E( C1 m* d! S8 D       {* g1 s, r+ y% L* O
        //这个位置无法放5 j- x$ f  z- e  {) @' T$ [
        nDestPos++;
2 |( C' \0 q+ f, b- b) |: ]5 e' X       }
3 W/ ~' V: D9 ~0 t      }
% [  t8 |% T9 N- {* H( R& q, \      BYTE nSrc = pInvSort->GetItemSrc(i);
8 B3 ~4 Z" w. x( d) g; S3 ]2 i- E; o      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);: G. G" S+ Z" B& ^
      if (pItemElem); I! n- k& ^( U4 i& K8 G% ?
      {1 y) Z8 {- {: c; s8 e% c
       if (IsUsingItem(pItemElem))% H6 F$ J: x6 `
       {
* i3 S( J* }* u        //这个道具无法移动,跳过& J- C' c; g/ E6 u4 l
        continue;
4 g, T, y( ~, q; A       }
! W5 k* H  {3 a, V. @, O      }else{
  o! Q$ S# N. z, U* b       //空位置 不用动
4 V8 ]+ m) Q. E# \' q' h" i! G       continue;
6 N% j, M- W  I* i3 t1 r      }* M+ S2 m2 {" G; s7 [% @) S0 G
      //////////////////////////////////////////////////////////////////////////
  t. x  @8 B5 m3 r* e' x3 \      //开始移动
# l0 h. x: z' L" ?9 R      if (nSrc == nDestPos)
. M1 H6 R# @0 o/ j      {- u( ^6 M, p( k; S
       //原地不动! O; A  G0 O9 I. V( }- o5 I, t
       nDestPos++;7 {; T! m( ~( t
       continue;+ n' y' X# Z" }; b  m
      }' h" X0 c: B! j. P) C0 J
      pInvSort->MoveItem(i,nDestPos);) t: `. l/ e3 s: |
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
! M! u* Z! b( q8 N- p) x      Sleep(5);
% b; E  q7 T( y" d      //Error("移动 - %d->%d",nSrc,nDestPos);/ B. h; V- m  o8 ~
      nDestPos++;& B/ \% d% T6 M, F4 t
     }
) @$ f; k' q% o" a! @# I! ~+ B0 q" X     //取第一个元素的信息, B! @1 G1 z( F
     /*
$ N0 `& U4 M) [( P( _1 e* ]+ W( e     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
/ x6 @& D( \/ p8 P     {
4 U: }" G% }% ?/ k) H7 `  u      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
% s/ s0 f. h0 Q      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
  M( n  H! v- [- Q     }
) p, |8 J/ d2 a, v     */$ p( F  R( C* L5 A" a0 I: M
    //////////////////////////////////////////////////////////////////////////
; Q! q9 M' f  o    break;
/ U0 z" A+ l' h' X6 ^   }% J/ p' g& y9 a6 q$ v' a7 `
  }
9 n- w3 L$ U0 W+ Z8 h3 d}
6 Y$ E  H) U) R0 N! u4 i' N+ gm_wndMenu.SetVisible(FALSE);/ L0 i) G6 O. ^: e/ C; E; E
, K; H# D- l9 W" F
--------------------------------------------------------------------------------------------------------9 X" U- p" H  g3 R& s4 L- `& v
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
% ?' W6 t. ]7 C! ^. z{" }, l2 j  p3 N( H- \
BaseMouseCursor();, j0 C1 O9 v: a4 U
}
- P- _/ M' R# F* @* }# s4 q7 ~& U在其下添加:: Y3 f5 _+ o$ M2 u
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
; \9 c7 p3 A1 [$ i/ A0 c7 I$ V{
2 P, T. d/ q# \7 j( f9 X; ~0 wm_wndMenu.DeleteAllMenu();
% P" \8 O0 {9 b& m  |, \% _m_wndMenu.CreateMenu(this);+ r/ G, Q( A6 t5 b
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");& n. e+ i5 G9 P: \* ^
5 k: I# l" Q9 H) |* t
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ z3 a9 o( i' V
{  H6 V/ H/ Y8 }
  //P以上级别才可以删除所有道具
' {0 E. L$ F% V* B  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
9 J: a: r/ u7 v}
5 [! l; B- Q; v$ V$ im_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
# u4 K% ^; o- ?+ r# ?, G3 Um_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
" L. ]" N! a. bm_wndMenu.SetFocus();  Z% `( S" h, \  U5 x+ i; H6 X
}
0 a* J6 D/ S, a7 ^$ M------------------------------------------------------------------------------------------------------------
& c, }1 c- {2 r# Z5 N8 m*************************
' `% ^5 {' m2 R% g! g- RWndField.h文件4 |/ m$ m. E$ Y; ~1 Q
*************************
) w& s, n$ ^4 C1 D" L& i$ n* E9 ~9 H搜索:BOOL m_bReport;$ j6 m. K) N7 J6 B6 N3 X$ u8 ~& j
其后添加:
4 z# M& U( Y) E3 m3 lCWndMenu m_wndMenu;$ X! m3 M1 [+ [! I! o- z
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
, n$ J& |% `2 T& X7 b' Y其后添加:
  @% ^9 x9 F# V5 I6 ivirtual void OnRButtonUp(UINT nFlags, CPoint point);* A% V* `2 p/ \* u! X* @
( R, k! I3 H" H( x: h

' C) T1 R4 `6 V+ E) g8 q

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-18 20:38 , Processed in 0.069231 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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