飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件  h4 r0 c- q! i, R6 g
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! ^$ q$ |& j$ d5 `  u/ F

2 J: E5 A4 }* @* qstruct sItem1 x) p% M7 y+ q" ?' K  Y
{/ f3 F, H# g8 D% q. u9 r
DWORD dwId;5 f4 V9 e! J1 P4 }0 A) h9 Q) {! b
DWORD dwKind2;
4 `. G' o) U; @  [; R7 m2 eDWORD dwItemId;
8 _5 ~  P- S4 C  ]# NBYTE nIndex;
" C3 {6 e% z6 L# {2 {) psItem(){
7 X, t) S! F- M; ~) a* V  dwId = dwKind2 = dwItemId = nIndex = 0;1 k8 f! l2 c. c* M* T1 y
}
& p5 G5 e/ L4 T( Mbool operator < (const sItem p2)! O" Y3 S- b- @
{$ u8 R# `7 v4 \9 _
  if (dwKind2 == p2.dwKind2); w0 d) v) A" t( W. A# s6 i$ _
  {
+ d, W! l! r) d9 X7 j   return dwItemId < p2.dwItemId;
/ ^2 ]* `! }2 u  }else{; T$ D! X2 @+ r# X, y0 ?2 j, n8 m0 m$ M
   return dwKind2 < p2.dwKind2;
1 N4 Z) e# R7 |' v6 u3 O  }
, [$ Z& I4 _" v5 R2 j}
- U. {* s/ F: o2 j3 f};
! r/ A7 H# D& Q6 \) o. y* Mclass CInventorySort6 [# X" Q: b  g* [7 ]
{7 @! W/ i' g+ p" A4 P
public:5 |: m% O1 }% v- O8 m
CInventorySort()
& p5 [9 r$ }( K9 l{
2 d( P6 f% A' q# b! A  m_dwPos = 0;
9 {4 g( j6 F/ f. m$ m& Y6 z5 n5 Z}7 ~1 j8 n* C4 I! ~
~CInventorySort(){}
2 m% I& Q+ o! x/ V& R  n. Hprivate:
* l/ X  x& B4 csItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
- W' \7 l, M& G+ u6 G2 P- cDWORD m_dwPos;8 A  {( ~5 M3 i$ Z5 G
public:& x* {& N2 w' U8 B6 c3 Q
void Add(BYTE nIndex). i# o$ ?3 k' N) S, {6 k
{
7 W: s+ n  Q0 f- B9 p% Q/ b  if (m_dwPos >= MAX_INVENTORY)$ p2 O" z, B& D0 F
  {8 V$ _. Q8 ?* {1 U& I/ l
   return;$ a! g5 R. I' j7 v1 ~
  }/ g  I+ o" V+ Y( K
  m_Item[m_dwPos].nIndex = nIndex;+ `4 u3 W1 B$ Y
  m_Item[m_dwPos].dwId = m_dwPos;
$ I0 g* M1 u  p0 h& C  m_dwPos++;
. v9 f. n# Q1 i* E1 z}
' L! T& ]8 ]4 H6 X: q" D, g' ^; pBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列% H! w% q% o; a$ F' h# ]3 [* k
{% X! @$ }! M& F* @$ O$ f: e
  for (int i=0;i<MAX_INVENTORY;i++)
" E8 X8 E1 D0 c. W: ^# T  {
) U: j& e0 o8 p7 @   if (m_Item.dwId == dwId)) p+ y) h9 M( Y: B
   {& v9 U. X' I) s, v4 o+ w" `
    return m_Item.nIndex;
! [, B0 h1 m: z+ ?7 Q: @   }
) N8 ?* a& e7 W- f% a" Y" \  }
. }( c% |8 k+ ~) @  U+ O, c  return 255;# Q# m+ m9 ]1 c1 S  G/ B+ g* O& ^9 Q
}
% N+ |3 e# k3 F. D, @0 Lvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
9 S/ p2 o  o# W{+ f+ A2 `% s, u; O/ U
  BYTE nTmp = 0;$ G3 g) @5 z9 p7 A7 E' f# j* r
  bool bDest = false,bSrc = false;8 P- u; o) I4 l- J
  for (int i=0;i<MAX_INVENTORY;i++): n7 z. u  M+ A* o
  {
% u7 B2 c: ~: r  d   if (dwSrcId == m_Item.dwId)
) s' I, Z. e9 \1 u9 c) L- J1 U   {
) S9 {% K3 v7 u9 p. L/ e    //id相等 则 改变对应的dest和src9 w5 x+ s8 q* E
    nTmp = m_Item.nIndex;
9 p' f% H0 d+ K8 r$ t0 P4 V' c    m_Item.nIndex = dest;
/ j3 Q$ Z; b: q! O   }, T* f" v, n0 j3 H' b9 g7 w1 v+ C
  }9 `; d" P3 _2 X0 e* P
  //临时数据保存完毕,交换开始" n+ B  P6 E- \: Z
  for (int i=0;i<MAX_INVENTORY;i++)
! D/ L# g  S, @' x  {) z& v/ T5 M  p# ~
   if (dest == m_Item.nIndex)" ]  m  L" Y& J- Q: R
   {  M  V5 \% [) c& V. T! I. @
    //id相等 则 改变对应的dest和src
, j" T# E3 V) K; D# c1 F    m_Item.nIndex = nTmp;- D, D- z- X" A. n4 S5 B' c
   }
0 o9 c0 l* m) g2 I  }' k& I5 c& V6 ^. o. i, h4 ^" e  x
}- t+ V/ |, [" }
};1 g, ~7 N& E3 D# o7 N6 ?) D
-------------------------------------------------------------------------. N" f$ Z+ A" d6 a
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
/ D$ `2 F# `! ~0 L$ A$ C5 G1 W搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);/ T* G! k! D" e4 X# @( w. v
紧靠其上添加:
. M8 G& t/ z0 b: D+ C( ~if( pWndBase == &m_wndMenu )- h; ^; F; X3 J/ W& Z3 U
{- v2 `9 u) N+ z( f/ R+ X4 u6 c
  switch( nID )7 z$ e6 B/ Y6 J6 T2 d
  {; N' V4 q/ p( B' k2 o9 J2 o" J0 w% f
  case 2:
: y" F8 \  \% R: h   {
9 c  u8 n6 m6 B4 x    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);4 U' a! V2 ^/ n; L8 w
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))5 m0 t9 U/ g5 W+ `0 k( @
    {! [% k8 C% u& z. F
     break;: i( ]! n2 C5 Y# [
    }
6 ^6 Q' X" r) u7 z7 O$ f    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)& e8 U, D4 [( B8 @
    {
) z5 s0 @+ Y. f! t     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
$ u0 j& E6 Y# d0 _8 H     if( !pItemElem )
# w& c, q" H" I, c: ^: P      continue;
- }0 G% _8 y: J2 p1 `     if(pItemElem->GetExtra() > 0)
1 I. R( p1 w9 S  S6 {      continue;. c' i- E5 K! C) V# m! Y  c
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
/ _) \" F7 z4 k% A% a$ y      continue;
5 o. d7 C$ g7 d: ~& V     if( g_pPlayer->IsUsing( pItemElem ) )
) e$ e) r3 x( n% u/ F& ?      continue;  a* U4 Z! ?5 m1 u9 `( V: N, H
     if( pItemElem->IsUndestructable() == TRUE )% b! X0 t+ m" W# }! Q3 h/ m
     {& b+ x1 _) ]' r- y" K$ |
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );! c- d) M" `8 d3 v2 c
      continue;
4 c( a9 o  }3 U: Z     }/ K- x; O- e6 s
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
- l6 Q" M" B; u( u    }1 S( [. w' h9 p( B3 k. i
    break;
: B( \  p, |0 t8 P( T   }
& w+ _6 L1 |/ _2 F4 Z" p  case 1:
. P0 u$ ^5 W* \0 F   {7 F' c! z) ?$ h! X& ~8 h
    //整理背包- P, ^4 O' I- \
    //////////////////////////////////////////////////////////////////////////
; V) D5 O$ P/ t; g! ?    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
5 V9 Q+ S$ _* a/ d, G! b    //////////////////////////////////////////////////////////////////////////
7 v% h% F; m0 p" b( U    //////////////////////////////////////////////////////////////////////////7 [) L+ h2 N/ i4 T# Z, \8 X
    CInventorySort* pInvSort = new CInventorySort;
. C9 p* {$ `% |, W0 S2 R/ k    vector <sItem> vItem;! H8 a9 r' P, w0 `
    vItem.resize(MAX_INVENTORY);//初始化大小
! M4 T$ r# R) _& A5 Z/ i     //////////////////////////////////////////////////////////////////////////6 l+ J/ X9 z! d: {8 Q& Q) r8 @/ F
     //填充数据
  d' I& q$ l& v2 q1 t! K4 ]     for (int i=0;i<MAX_INVENTORY;i++)
( H( t* H8 I, Y0 B5 x     {1 Y: `7 v$ \9 t
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* d* m( q% {! r' E' F. ?9 g2 |
      if (!pItemElem)8 N2 l! z0 Q' g, u6 ]2 Y; }# x
      {
" g8 t: z" m* R% o" n       vItem.dwKind2 = 0xffffffff;" i+ a$ l# r4 R# ]0 [/ G! h
       vItem.dwItemId = 0xffffffff;
+ |2 E0 g4 I4 I& D  [6 V       vItem.nIndex = i;% Y6 b  u( l# C: ?1 u) l: F
      }else {
% m0 p, q+ C1 F. c# y       ItemProp* pProp = pItemElem->GetProp();
/ g& W+ D" x+ H5 T9 z* h       vItem.dwKind2 = pProp->dwItemKind2;0 s4 o) T* h( d" t% @
       vItem.dwItemId = pItemElem->m_dwItemId;* m6 c- b" I5 o) z! Z* x
       vItem.nIndex = i;1 Y7 [. M& O5 f% r
      }
$ N, C' T/ m, \9 |) z! _      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 l1 i" i/ W6 X* s1 f  n     }
1 s" b3 d+ h( l     //////////////////////////////////////////////////////////////////////////
0 u- W- g) ~4 w" p  q4 g     sort(vItem.begin(),vItem.end());//排序2 Y: z& S- Y) O8 _, |  X2 j
     //////////////////////////////////////////////////////////////////////////
8 l; Y7 T1 ^6 s9 r     //交换
6 k+ j5 y( B: c2 W     for (size_t i=0;i<vItem.size();i++)
1 D7 E0 l  f; d# I; n" F& J     {! p* d6 v+ U1 b. W1 O& l
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ n4 U0 z7 @2 V9 c' D
      pInvSort->Add(vItem.nIndex);
! `, n$ I& _  s% Z- M& Z: K/ J2 _     }+ z: N% @7 Q! K. o
     BYTE nDestPos = 0;0 H' O$ R3 }9 ?7 S+ F* O$ }
     for (int i=0;i<MAX_INVENTORY;i++)
: ?1 a+ N: ]/ j( p     {
: S' \1 m( U/ x: |      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
0 j1 N8 y/ u5 N      if (pItemElem)- }* ^6 }9 j, l: X+ F: S: @: Z
      {# f, c' b3 }  H$ [
       if (IsUsingItem(pItemElem))
& ^5 r( K/ F# a  |2 O6 R       {2 ?5 v; j1 ~3 ]5 u. D9 R& c# o
        //这个位置无法放
) x9 }( a2 D" E' Z* w        nDestPos++;
) C& U; u# ?0 l( S/ E3 |$ I       }
9 {- y0 e2 i1 F+ u. W      }( B+ o) f9 `6 F% C' a
      BYTE nSrc = pInvSort->GetItemSrc(i);
9 O5 M/ y  t8 F      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
' f0 K: x8 L, c" s      if (pItemElem)- H5 L& C7 y  p7 `# y
      {
! N9 |+ i9 _& I0 `, P% _' c       if (IsUsingItem(pItemElem))7 }, ?' u  V. H! c. i( i  b* m; h# C
       {6 ^; ?# T7 t4 }+ ]5 ]" Z
        //这个道具无法移动,跳过# G( h1 g9 M+ X1 y* d
        continue;1 [8 P' H( {' g6 Q# i" K
       }
# z7 F+ V% z3 I      }else{
2 L% \& _) }! `% V, e4 |       //空位置 不用动  q& T; m1 K' @# {- o0 ^. G
       continue;
4 E4 z- `2 q/ u! T( v2 D      }! t4 v1 g5 n& o4 V; d1 i1 {" N2 t
      //////////////////////////////////////////////////////////////////////////4 |5 }/ s9 E$ u
      //开始移动
" r  }/ Z* g8 l2 c; F      if (nSrc == nDestPos)4 r" n3 Q' X0 w7 X9 o: r
      {
; }8 Y' ~  a6 \" O       //原地不动- e1 N; z$ a+ A/ u& ^  a# h) L2 A0 @4 a
       nDestPos++;
# G0 C/ N$ V" M& `4 F       continue;  H+ b/ G5 L) l, _9 M1 |
      }
2 A; T8 j" L5 I# i      pInvSort->MoveItem(i,nDestPos);
# P- A. [. j9 j      g_DPlay.SendMoveItem(0,nSrc,nDestPos);4 J5 s. q9 ~8 Q) a
      Sleep(5);
8 T4 P( O4 w& z7 a& X      //Error("移动 - %d->%d",nSrc,nDestPos);& V5 \3 A# A; `# {
      nDestPos++;
# o. I, `& q. B     }* [! r3 E6 {; B, M
     //取第一个元素的信息
! X7 Y. M! y9 d0 i     /*
) B5 p0 a; x3 _' S- R     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
2 L* p: p3 a- ]/ M6 g     {: ^. W8 s& {3 K. w% e3 W3 l" J
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);- Y( U! r- z5 {/ y2 R: ?
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
5 S7 H2 Q$ V7 l: u& j4 s% ]$ A% G     }
8 U' E, C5 w$ X$ V1 d0 i1 @     */
% z# `8 s6 R* A. p; I7 ^    //////////////////////////////////////////////////////////////////////////; Z" C* b( E' a1 C% ]: d' C
    break;
/ L- z! ^; A! ]( W7 q0 ]   }7 _5 k! s( k2 S# \9 Y" F9 e
  }
1 I4 _' f, r+ ~. s}- B# d- ?  ?2 a" B# K9 m6 X
m_wndMenu.SetVisible(FALSE);" V' j' Z& `( P7 d' E2 F

7 y" A0 `( M; x--------------------------------------------------------------------------------------------------------- U! v: z% y$ n) p  Z
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)  b2 W+ S+ X  i% d/ X
{! h) R9 T' A6 |2 O, [) y
BaseMouseCursor();/ e. I0 f  G: f7 T; _
}
, {& ~# }: f/ l2 e在其下添加:
8 E4 h, f" o; t0 ^! i+ w0 wvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
  E6 D! b$ [3 N* Y( m% c  I/ b{
4 g; u- K# P2 Cm_wndMenu.DeleteAllMenu();1 Q: I; m* B& q8 l7 c
m_wndMenu.CreateMenu(this);( G" f2 b9 f( o& [# k
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
$ O( @; Y( `7 X0 s# t' n  \. A( v# o+ M
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))2 w3 `; ~7 U, f* l5 z# ?: ]
{- [4 ~; Y! p2 f( ~5 h
  //P以上级别才可以删除所有道具
- X" \, Q$ `! \" f0 ~. p# r  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
5 g) @9 E$ B1 a, }}
3 {4 ]: G( o. _! Q" u. x2 ~  Um_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );7 R9 X* q6 c7 I4 H" M' e! F
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );" ?9 |6 C% Z3 s  B- F1 M0 w/ X# U
m_wndMenu.SetFocus();. W3 m# c- G$ D1 a" g/ t! N
}( O2 H- t/ n, `. P0 i# Z& m# M) @
------------------------------------------------------------------------------------------------------------# L( |& @% y  _# _
*************************
* C! q( X+ o. S% Q0 e* aWndField.h文件: |' `4 I/ i7 _+ @  r, C
*************************
$ Q( }5 [/ P/ P/ w- N搜索:BOOL m_bReport;7 T, B+ b: q/ Q: o, a: C0 V
其后添加:
" ]. Q) I5 d3 F' q( ?CWndMenu m_wndMenu;
3 D! ]) F( b: y8 I1 s搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
% i$ l# Y* t% n& B其后添加:# @/ C% y, I1 z% M! B9 {
virtual void OnRButtonUp(UINT nFlags, CPoint point);+ K) s$ R+ }- v
  Z) X, C) F1 v2 _7 L' f

" X8 _' {' M. w' B  F& u% y! U

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-15 21:59 , Processed in 0.060368 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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