飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
7 a* D3 a7 ~  c搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 s3 x% k6 T7 b- K; X% F  ?
0 s) L. M% i+ D. sstruct sItem
3 ]  C2 ?/ Z8 T5 B, {1 G{0 n3 a% U: e  c& L1 m# s) |- k; m) C
DWORD dwId;4 f( _" j7 C. ]+ g
DWORD dwKind2;/ \' Q1 \; S' \: U' K1 P( {
DWORD dwItemId;
8 z6 S0 ~) v! m; q" O5 |$ s0 zBYTE nIndex;
! @6 x8 b; z% HsItem(){( y' F) G8 E, U2 m0 C& Q
  dwId = dwKind2 = dwItemId = nIndex = 0;
* y1 E6 z0 i. W& e$ ?; J}
. {9 A- i* N! P: Ubool operator < (const sItem p2)% P9 s0 ]$ w! Q, B% _2 k) M. U
{
* i- {  R) C( [' v& {$ f. S  if (dwKind2 == p2.dwKind2)
3 L, d& Z# ^/ J8 N  {7 ~- j  \* O1 Y
   return dwItemId < p2.dwItemId;% T& @% K5 A8 I# b
  }else{# r, D2 q- V1 w9 S$ l3 @
   return dwKind2 < p2.dwKind2;  x5 h3 e0 ]; G
  }& A4 i( A- q. d, Q' J
}
; @9 i1 L: W  h$ N  o$ x2 u' @8 b};
3 @" [: q( E- R# iclass CInventorySort* n# Y5 G! U( m, ?; L) M2 H0 z% J
{+ x2 U- l4 J3 f/ O* n
public:
. ]0 q" O& U* N* X3 R, D$ D! Q: C$ q/ ~CInventorySort(), S/ ]2 B! l& u! v
{  U* N% U/ K$ Z9 D3 ~/ g
  m_dwPos = 0;
' m/ O% G7 {  B* y7 e3 z}
% {" M& `) D3 D# F~CInventorySort(){}: S# {6 Z- c8 o6 l: J4 j( ^# H4 Z
private:
! J% V" s3 `: V, O, f0 XsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
! u0 g+ N/ k1 h6 lDWORD m_dwPos;& K+ @3 m, s, D( s0 ?
public:
2 z& _4 C% k  i% ?. Svoid Add(BYTE nIndex)4 k. s: |7 Q" }  \5 b- @/ }7 k
{
; m1 u# G; K8 `  if (m_dwPos >= MAX_INVENTORY). V  k8 c4 F* G" a. C8 y; y% ~
  {" h$ Q3 F$ C' Q" V8 {2 y& q3 |
   return;
  v, d$ e, B/ a6 i0 `: P  }
4 l' q( k* y: Q: O9 u  m_Item[m_dwPos].nIndex = nIndex;
) r2 s  s% Y. y* |  m_Item[m_dwPos].dwId = m_dwPos;
4 K( C5 G+ H/ N  m_dwPos++;
/ n; a9 `) o9 y}
0 ~% T! J& \' ^BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列! X) T  v. \- v% E) P% S" F* h( A
{
2 j  \6 K$ d9 P  {+ _* Y  for (int i=0;i<MAX_INVENTORY;i++)
) Z0 K. f: |! {+ U; Y  {
( F5 f+ v, Q7 f! a! N* h1 x   if (m_Item.dwId == dwId)" |) K) J7 T' m' k  H; _: P9 X
   {
$ I( k( D+ I! Y0 v7 X) |2 z    return m_Item.nIndex;
' t9 O* U. q: j   }; X! F9 [  B2 y
  }
* x& l4 O8 F6 S$ x$ i2 Z  return 255;2 B1 K* p' Z- v! |
}4 `2 V/ s7 @; e0 J% G, H
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
& H- I/ G' M4 w# w8 L{+ u% x: A+ L0 H0 o# o
  BYTE nTmp = 0;* o* Q7 @" _% V; r, u* ?- K" L
  bool bDest = false,bSrc = false;5 \- m& o0 r, n0 M$ q$ s9 k
  for (int i=0;i<MAX_INVENTORY;i++), }! Z5 P- |0 ~! ]
  {
0 i2 p& G( z! I/ s4 p5 `9 R% ~   if (dwSrcId == m_Item.dwId)
9 Y1 q. Z+ i# `0 [* s/ I   {5 Z3 A6 s7 U0 H. ^7 ?
    //id相等 则 改变对应的dest和src
' ^) @8 _/ U8 m) Y& F8 h    nTmp = m_Item.nIndex;
: P0 {/ E" `; x+ D6 a! U    m_Item.nIndex = dest;) n: Z' r" B8 ]' z9 n# N
   }+ `2 Z- M4 s  s1 r) a
  }/ h+ J. x2 v  V4 m
  //临时数据保存完毕,交换开始
. }8 ^: i% W/ W7 r( B5 `7 \; f! M  for (int i=0;i<MAX_INVENTORY;i++)1 d* ]7 I5 i- f: S
  {! t8 |' |9 z( r! Y, H: v- }& g9 l  t
   if (dest == m_Item.nIndex)
* x- Y7 L: y% m$ N9 |+ ?   {
2 S$ L) c) d. p7 i* ?2 |    //id相等 则 改变对应的dest和src
  O) j% X1 n8 I3 W5 ]& A  K    m_Item.nIndex = nTmp;0 R# ?# ~& S9 i8 a4 O' A% C
   }
' D9 b( A7 `2 [$ E' }  }
% L0 i% h) ?) O# L}
  F5 u8 N4 H9 _% T. Z) h8 ?- C7 C};0 U- k( D+ e) L' @) @. w
-------------------------------------------------------------------------
0 Z8 p" S% _: A& t' o8 S$ h4 j依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 W9 s* d" e$ X' G' _. o搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
0 Z/ R: `  j1 N4 i8 g' K紧靠其上添加:
  @% F0 |3 O% {- Q  g* U1 Iif( pWndBase == &m_wndMenu )& g! G- K( j' A$ N
{
; R6 v; ~* P5 p0 T  switch( nID )
, H5 u- a4 a5 A; }+ n" |8 t  {. v  |! |3 O7 a8 @% J  S8 P  A
  case 2:- f) ]5 z' e3 f& i8 U$ `
   {" ]) ]/ x6 O9 |) Y  I& ?! S3 r
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);; X- V. `0 _7 p1 r; L5 U( J7 T
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& Y( F+ t% R1 _' @    {
& R% H* b1 K1 F. {4 e2 \3 O     break;  d' E+ w, M9 Z( K8 ^
    }* k7 f7 b8 F5 V" ?5 q0 _
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)* k* U9 X9 r& {+ |% r
    {
4 {% j$ k- `: @7 d     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. H/ ]# o9 n' a! b$ w
     if( !pItemElem )
/ X% R7 j2 h2 o      continue;
8 c3 y% ]& g' b7 n( ^" k9 R2 c     if(pItemElem->GetExtra() > 0)
: R3 r5 Q0 Y9 v# r      continue;$ e& R% S2 G& u0 k# L
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) : _1 c0 O1 k" I! D/ w) n5 Z
      continue;9 J$ c# C  o6 Q- C
     if( g_pPlayer->IsUsing( pItemElem ) )
9 s" x6 j$ ^. y7 ]8 I* t  D$ }7 ~# E1 ^      continue;+ b9 p: R; x9 S
     if( pItemElem->IsUndestructable() == TRUE )  ^* w- g$ q6 t" O" M; Q
     {* W( i- v* N! z. O) b  m% C
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
1 W) S9 `" U- n3 b* k) z' a* A+ @$ P      continue;
- }6 `- N% m# p4 V: p' j     }
8 v$ D/ |! ^' u- X6 a1 e* F5 R2 i     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
% Z3 u2 r' M7 y1 j; N    }5 m' I; e9 b. `) v7 x- e' f
    break;# L% m7 ]9 L8 y: k* L2 J
   }! E5 l/ l; `* A1 P' g
  case 1:
  |5 J: ^1 s5 i+ U. s3 N, u   {' B/ h( V- \' e& `3 W5 o
    //整理背包7 c/ o# m$ n8 ^8 `6 M- Y
    //////////////////////////////////////////////////////////////////////////
2 o0 ]) x  `6 D    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
3 F( }1 d( A) T, `    /////////////////////////////////////////////////////////////////////////// n% q$ ]) }9 V9 i, e  {: W* V
    //////////////////////////////////////////////////////////////////////////& C- f+ Y! X. ?- C5 n6 u
    CInventorySort* pInvSort = new CInventorySort;: t/ h0 ^- w' R6 ?7 M
    vector <sItem> vItem;
8 u# P* u; }7 T( e8 J% m) [/ P" @    vItem.resize(MAX_INVENTORY);//初始化大小2 P5 n5 |8 a* \
     //////////////////////////////////////////////////////////////////////////
- w6 c- h! n3 O& a- Z: C     //填充数据
+ \/ n! P* m7 @* ]/ E     for (int i=0;i<MAX_INVENTORY;i++)
! W& k1 `+ f; [% \7 H     {
/ Y) D: E4 `: ^# a: ^. \      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! N/ V8 }, T5 n: x
      if (!pItemElem)# ]- ~" Q/ y2 M
      {3 Y( z/ J2 X5 U7 \7 S1 e4 W" F4 K
       vItem.dwKind2 = 0xffffffff;  B& B/ c5 s" j  `4 c+ D4 }4 Y
       vItem.dwItemId = 0xffffffff;
! P( A: a; \" C% u! ]       vItem.nIndex = i;+ H8 @2 w- E2 q9 |) B/ Z
      }else {+ [" t9 L2 ?; k+ p# @' K
       ItemProp* pProp = pItemElem->GetProp();! D; o4 E: T4 x2 U$ \* c  `
       vItem.dwKind2 = pProp->dwItemKind2;
& l- v$ T+ p" A: {0 ~2 N       vItem.dwItemId = pItemElem->m_dwItemId;
8 O6 V( @, |" o2 ]       vItem.nIndex = i;
) b' c* R4 s% m4 v) N4 T      }
: f- a8 _3 [. `6 |, t0 T      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
+ }  }  Z" M0 F/ H6 m     }4 v3 S- T* M# V- A- l
     //////////////////////////////////////////////////////////////////////////
, X6 k0 o. {& o* @6 T; Z. p5 }$ U# v7 O     sort(vItem.begin(),vItem.end());//排序1 J, ]! E9 I. q& [  ]0 L7 Y
     //////////////////////////////////////////////////////////////////////////) B0 W: W7 `4 k: `/ D! Z/ \2 W
     //交换/ n2 @- C4 V0 {3 e8 V9 T% N
     for (size_t i=0;i<vItem.size();i++)% R* X5 {6 L5 Y- O, ^1 C" j+ ]8 E
     {- R" J5 [. K" R3 c9 {
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);: O& L9 ]( j( f0 N. ^$ u8 p* B
      pInvSort->Add(vItem.nIndex);
. q" R3 C- k7 q* D- C7 i" c0 }     }- l$ ^- a- I* N5 ?4 h$ Z4 H
     BYTE nDestPos = 0;* c) T# Q. ~/ t7 U% T3 a
     for (int i=0;i<MAX_INVENTORY;i++), s) E# Q; q" n
     {
7 S& r" k+ J( B      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);) w" h/ v' \: o6 ]4 @7 Z
      if (pItemElem)3 S3 \3 e; b% R7 A2 \2 h( l7 k
      {1 d4 l1 E% D! i. z
       if (IsUsingItem(pItemElem))3 \7 _3 I' K* C3 m$ m( s1 B
       {5 `) x6 m; e* P5 @
        //这个位置无法放) d7 s1 p- a! z, j# \
        nDestPos++;
) v9 W# J* a- }' T. {       }! }4 G1 g+ Y  p4 n4 V1 K& Q
      }
( l/ _& |$ Y1 \, ^1 Q$ Z4 ~  C! ]) A      BYTE nSrc = pInvSort->GetItemSrc(i);
0 N: P" @6 i) a0 N      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);! `3 ?4 G& h2 n- j# P) g; m" g
      if (pItemElem)5 F9 @3 n7 q4 u+ E" m
      {
( D( o& d% P6 E       if (IsUsingItem(pItemElem))
+ m3 |) \1 K- Z' i3 s/ \, E       {
9 C2 w! u  P* {% w, p# |        //这个道具无法移动,跳过
! i" A9 @9 F* G! p' L        continue;
! O. R' k! F+ Q2 l' Y       }  Y# ~* E4 A+ k
      }else{- \' g4 i" Y+ T8 i; V0 h
       //空位置 不用动  D0 D  v9 q+ S9 O3 D+ g
       continue;
$ L0 U$ L; j( N5 n9 D      }
* z' ?7 {& G' A6 N      //////////////////////////////////////////////////////////////////////////7 D& g* N6 i. y
      //开始移动
3 n3 ]. c. x7 }# \      if (nSrc == nDestPos)
' ]9 p: |* r  ~: Y4 X  `      {$ B' F" b' }' X
       //原地不动
2 [; e+ u1 T1 h' Y       nDestPos++;- m/ W9 D0 L' ]6 T4 Z
       continue;) t" C+ t9 }" \. Q9 L/ L
      }
) U8 W7 ]5 H& O0 |# y      pInvSort->MoveItem(i,nDestPos);3 i- s# k; H& ?% O
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);6 L% i: o! W( z! R! U8 C4 V
      Sleep(5);0 Q( [7 ~% F9 X* M; u* _
      //Error("移动 - %d->%d",nSrc,nDestPos);
. l" a) Q+ W1 O; C1 u1 t. Y) V      nDestPos++;: U' \) o5 A$ m
     }$ ~/ s! S3 f0 U7 B. k. U- W
     //取第一个元素的信息
% U( G9 f3 H* g3 K7 `6 y     /*/ v% }) l+ l/ ^, O2 C5 N
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
& Y2 s: s2 ~5 C. @, o4 j     {
  ^2 [+ J' s# T2 c7 e      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);% s. i. S' q1 J( S
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);) r, h% F$ W, h# R  _' p
     }& n0 u6 t7 Y. u6 ~0 Q; `$ l
     */
( x7 y9 m5 h0 {# a4 Z' ~    //////////////////////////////////////////////////////////////////////////
& Y+ U& E$ y* b/ g: p* Y    break;
! o  H1 D( W9 b; M& P) h! g   }) S$ N7 v7 E: p
  }
/ G. v" [$ ^2 Z" a0 M  X8 i* R}8 Q8 D  Z" a  a: m
m_wndMenu.SetVisible(FALSE);
9 q. w% U0 u+ s# B
9 U! S' t. \" O# @--------------------------------------------------------------------------------------------------------
  I; _7 ?& Q- b- E  N搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)# h: L# |. P& k0 u* h& t
{' u6 K9 l( L% K  W
BaseMouseCursor();* ?" }/ X9 M1 J6 Y
}; e9 e4 D# y/ P1 t, r
在其下添加:/ {4 ]; A7 g& I
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)8 I! \2 r) t' [
{
$ u' R0 r/ e5 R2 p0 rm_wndMenu.DeleteAllMenu();
, I4 U6 ~1 Q/ `1 fm_wndMenu.CreateMenu(this);
  {; ]& w' E( B7 }m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
! `- T2 L- u+ k) Q1 N4 `3 h2 T9 T
4 H' B0 N5 r# b, @, p3 vif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))' ]6 k2 e# R/ Y7 d& n
{
2 X8 v/ T! d/ J1 r  //P以上级别才可以删除所有道具
! x( c7 q3 f0 e- s; Z2 `  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");( H  C1 L9 q$ w1 F
}
2 s$ N9 M+ y5 q; [7 J. Um_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
, Q/ q6 r0 }; Z! N+ Y+ c5 f+ }m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
, d$ g7 L% N2 im_wndMenu.SetFocus();
& |6 a. f5 ~9 o% D" W/ q}
6 [: ~, X1 _$ p; u6 u( {( m: |7 i! }------------------------------------------------------------------------------------------------------------
9 s. o% `& u4 X! d0 s  q*************************
& q7 \5 `& L8 O; d. H$ TWndField.h文件
5 w3 D/ U9 ~* z5 B3 i4 R. H: y************************** `3 T! k! }4 C
搜索:BOOL m_bReport;# W( {9 V6 v! [  G4 ]3 a
其后添加:
) E+ Q/ q1 Q# v5 y3 v. ~CWndMenu m_wndMenu;3 _1 A/ k7 L$ j! R' M
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
, K9 J+ R7 H; U, s$ b其后添加:
& p7 d+ ~$ s/ B' }& Svirtual void OnRButtonUp(UINT nFlags, CPoint point);
5 j3 V( u2 z) v' F. r, K; S, z) k3 S1 m0 ]

9 M6 F7 \3 C, i. T3 a

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-12 18:07 , Processed in 0.064611 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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