飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件% k1 I6 b) K+ W, N. n+ T/ J$ ~
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
* F' J5 m; }4 r4 |4 m2 f5 n9 ~0 ~8 H) M
struct sItem6 x' c7 N0 p& w4 Y! u, p+ p
{
7 O) C) Z) u$ l, V, D9 C7 v# H1 ~DWORD dwId;
3 s, d  D: B* n% `DWORD dwKind2;7 x! T, v( r7 `: q
DWORD dwItemId;
- |; E- B, \7 E2 e3 L- \7 NBYTE nIndex;$ u+ D& \$ w- ~3 y. o# T+ h
sItem(){
" _, X) g+ `( T4 W0 Y- O0 w  dwId = dwKind2 = dwItemId = nIndex = 0;+ O5 r" I1 p. ~( h, z5 M% ~
}: _  D$ G" n4 y8 Q! U
bool operator < (const sItem p2)
9 ~+ o' D- h8 Y3 o{
* |$ M- {; i; |& Q2 a0 c) N8 B  if (dwKind2 == p2.dwKind2)
) p0 y8 e6 `3 s& v  {
- }& N  f. N3 A   return dwItemId < p2.dwItemId;4 d& V, e( a+ |! r1 a  c9 h  {' d
  }else{
! o( M0 `; {' @" D   return dwKind2 < p2.dwKind2;
) l- x2 n" V+ b4 R+ S6 d( Q  }) }  @( y4 p2 {; b; N
}9 O# ^! t. v6 B2 S: T, F5 i# A
};
4 ]) [  M- R$ f( b, c, lclass CInventorySort. L/ W6 [6 i( {5 r& O
{* n, ~+ f0 a0 K2 M/ o# g" R
public:5 M- Z" I; ]( m. M
CInventorySort()
7 E+ T% Y# H: Z" l{8 E7 z, O+ ^5 J  ~/ q% `( [, a
  m_dwPos = 0;
: i. p% Q+ I2 ]. M}
& n" z8 z4 v- e~CInventorySort(){}* p2 b3 ]6 k6 I
private:
& L/ ^% z& F+ F* v$ zsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息0 L3 p2 k' j8 T8 L* c: V  h0 B* V
DWORD m_dwPos;
1 p7 I& f& n6 }: g; Rpublic:
9 l  V, y  {% e+ I* s  S4 {% r) rvoid Add(BYTE nIndex)! `# I% r! q# z2 C/ H- ~
{
" N1 S3 M) V9 X. s  if (m_dwPos >= MAX_INVENTORY)
- o- `4 F% n  w" O' ~/ E0 S; r  {+ {- R: e0 C1 b& g7 }8 k' O- c1 m
   return;
+ P- b8 c8 {  T" e4 [5 k  }
* N( C: n- ]6 z# \! x  K$ Z! A- W$ |  m_Item[m_dwPos].nIndex = nIndex;( @) L3 _4 z& A2 G
  m_Item[m_dwPos].dwId = m_dwPos;
5 V$ f) g7 A' ^. Z+ |  m_dwPos++;
( v  z: |, q6 W}
  R# B; T: B8 @, W) V% `  xBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列8 q& Q- j* S% T* O2 q0 d
{
* }) W! [6 X3 {& G  e& p* i. I  for (int i=0;i<MAX_INVENTORY;i++)
# P3 g1 N9 j4 d  {- G* }. d5 Z$ a$ v0 Q
   if (m_Item.dwId == dwId)/ b7 k7 Q$ x( F! Y* E6 O9 x, s
   {0 k$ b8 y* k. T" z  n
    return m_Item.nIndex;/ w' y1 O, Z+ v6 T; \, S( C! e3 k
   }* _# e. G7 X: V" T2 y
  }
6 {8 X$ b* I9 }4 R( {( I  return 255;% ]- k$ l  R+ C0 b. @  L1 e' ?4 `
}& c: C1 X! a( S; _
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置( e5 I. ]" _1 A! _4 [
{
3 ?% S# S# K/ L2 q) S9 o  BYTE nTmp = 0;  s, a3 c2 P$ i% R5 m; f8 n' u
  bool bDest = false,bSrc = false;
1 f% p+ e9 C- [5 Z  for (int i=0;i<MAX_INVENTORY;i++)! A' G$ Q# p+ _1 j# a
  {
$ M0 k+ U" C' p$ i- [: ~' ?: Q   if (dwSrcId == m_Item.dwId)) ^( @! R( u  p3 o& K
   {% J+ m$ p. p+ x& _& y
    //id相等 则 改变对应的dest和src3 ]' b4 s8 d- E) b" B6 {
    nTmp = m_Item.nIndex;8 B5 W" E; Q; F
    m_Item.nIndex = dest;5 r7 f& a# h+ i, U- E2 e/ n* w% k
   }9 a! a: S7 l/ V0 j
  }
2 k+ W, U; m2 b7 a  //临时数据保存完毕,交换开始
4 P) v8 i- }6 V. M- r# A3 e6 n( p! _  for (int i=0;i<MAX_INVENTORY;i++)# a( N( y8 }8 O. s6 F: b
  {
+ l$ |2 K5 H* p$ f; Z7 s   if (dest == m_Item.nIndex)8 o& s! V; s- P5 R2 U
   {/ x9 z; S8 v) S6 W9 h: h
    //id相等 则 改变对应的dest和src
4 V5 S; {$ ^9 h" I( v3 |% V    m_Item.nIndex = nTmp;
) ~$ p$ `9 @& G- D   }
' m" G+ \- I0 j6 P3 u6 X  }  M; R; Z/ W* g0 N. B7 j
}0 ~2 r' }  _# G. b; N( U
};
- I7 n6 v9 X" @, I-------------------------------------------------------------------------
. w, B3 i$ a6 ?4 x3 V, j8 ?0 }依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): G/ b7 d/ y2 O, M: R
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);, _& H# J- Y$ z5 b$ J) M4 r2 N
紧靠其上添加:
. @9 l$ ~7 {' ]0 p# cif( pWndBase == &m_wndMenu )
( A% A" p; `7 y4 ~; c" @! O& {{
. i$ g; F! m! H3 }* G  switch( nID )% ~) }2 f6 ^2 C" X# t6 l+ l
  {
3 h4 g, E/ D6 N, m- H  case 2:1 d  y3 m8 b' r
   {/ L( m2 B/ o' C
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
1 ~1 S7 N1 q. S- a# q% G6 S/ P    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- O: S0 k4 z8 x) G    {
$ V3 z6 ~' b$ y9 A" K     break;* I* m0 C& e: W3 E  E8 E: X- r
    }
3 s1 `- e' l2 t    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
# o. b* c, u9 E; f    {% r2 t' w" l; |; u/ R5 h
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. D2 h* I& y8 g2 B
     if( !pItemElem )
9 G4 ]/ v8 F' g( g- c; B      continue;
. X+ g/ K* |" j! e/ d     if(pItemElem->GetExtra() > 0)
4 u/ F9 i/ ~5 W$ Y: O  ?" f+ @      continue;! o/ D9 |% r; @* Z  P  I
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 4 w6 n, h( t& s# B! c
      continue;
5 P' ^& `9 \5 S0 M8 U     if( g_pPlayer->IsUsing( pItemElem ) )  |  f5 E; n9 K: W5 m0 q
      continue;
  Z  q: d; R; M& P* w     if( pItemElem->IsUndestructable() == TRUE )8 R7 I/ L5 S2 @+ M% N2 m/ R9 `, W9 B
     {
3 q7 G1 b; c2 M* I4 V% N      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );7 y" M; W$ Z+ q: s- o9 C
      continue;$ v) \; D% X) a: O# b
     }/ Y% M) ?- B, k% }
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);, P9 l# U9 Z. T4 q3 C- u3 F( O
    }
5 ~5 |3 k: U+ F4 i# ?; @: r    break;
, A( A# W# u1 y9 v5 H6 X   }# `/ E+ ^" K* t* T% O2 ^' t$ s- y
  case 1:
5 s$ R4 n" I7 P/ h: {7 l   {7 w6 j* `* U3 n0 }' ]
    //整理背包2 b0 Q8 h$ r! M% d
    //////////////////////////////////////////////////////////////////////////9 R) k4 j& x7 I8 D$ S: W
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
6 A/ R) y: o; @6 O& I    //////////////////////////////////////////////////////////////////////////
1 O3 N+ [5 {6 K  x! X    //////////////////////////////////////////////////////////////////////////8 a, r; N/ ~1 k, s2 T! ~% W
    CInventorySort* pInvSort = new CInventorySort;
% |+ v7 K2 e5 w$ L8 Z" O7 n3 L( R    vector <sItem> vItem;
* a" k5 \* u. Z- V: c8 u5 p    vItem.resize(MAX_INVENTORY);//初始化大小
0 b5 F6 j: j. Y     //////////////////////////////////////////////////////////////////////////
+ _& i+ i, y9 H, L/ e. I6 a% N     //填充数据
* k4 a/ o( l& g: ?& P     for (int i=0;i<MAX_INVENTORY;i++)
* h1 @- U4 |; |* j6 g  x     {8 W, d% E4 P$ r( @8 R: K5 t" h3 I
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 |/ i& f; z" G" E$ v/ p4 `      if (!pItemElem)7 c$ k' o/ D; `3 F7 ?; `  _
      {
# w! ^/ ]. S1 c: ?2 K( b       vItem.dwKind2 = 0xffffffff;! A- Y- C7 x/ g: U3 K6 I
       vItem.dwItemId = 0xffffffff;) c! h/ P5 w% R/ j8 d7 t
       vItem.nIndex = i;
: D* E  V) a+ |/ o+ o7 W( k      }else {( z1 q) c5 N! B
       ItemProp* pProp = pItemElem->GetProp();! _* m* O9 k5 U* v, p  G3 u
       vItem.dwKind2 = pProp->dwItemKind2;
( t# h8 B. ?: y) ]& ]0 ~# z7 g       vItem.dwItemId = pItemElem->m_dwItemId;
( l: i7 g6 o9 ?. L/ f! F* f       vItem.nIndex = i;5 H$ G! ?2 A3 L
      }. R& v$ O& Z& q' x! s
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);1 j" c% l3 v; L/ F3 s: H+ u8 J
     }) L( e" ^0 m$ U
     //////////////////////////////////////////////////////////////////////////3 ]7 L, q$ Z! B$ I: g7 t, R: C
     sort(vItem.begin(),vItem.end());//排序; [# G/ g4 \0 U  n5 p( N% a" ?4 N
     //////////////////////////////////////////////////////////////////////////
( G) S( J& a4 g8 G% C+ k     //交换
  ^  i3 c) j( q  z8 R; ^; [     for (size_t i=0;i<vItem.size();i++)( [: a5 k5 `1 e9 i! h' c
     {( i: ]) `1 ^* o8 n4 F  [
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ v0 C0 y$ b/ s, E* I
      pInvSort->Add(vItem.nIndex);7 S% g# _1 u( B! K) q+ s
     }
- d3 e5 ^6 L( n6 B5 K+ h0 o     BYTE nDestPos = 0;' N6 ~4 V  D6 b9 b
     for (int i=0;i<MAX_INVENTORY;i++); V3 G+ c6 M" I; `; N0 ~) k
     {
! \, q  N: l! [! C      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
& M9 _; |/ U2 q0 H+ N7 |      if (pItemElem)% Q8 B- |1 R+ C% U4 r+ |
      {0 b& Y. Q* Y% g: Z5 k" {& ?8 [
       if (IsUsingItem(pItemElem))% D; r) ]. U! a$ q* t; ^4 t
       {# a4 u$ X5 o4 [8 n" d% _+ v
        //这个位置无法放$ a' j5 x# ~$ M2 O1 T
        nDestPos++;
" e, S3 R- M& d7 g1 e$ B       }) j! |! _$ N# g
      }* e8 t+ W0 p" ?" B$ n8 C
      BYTE nSrc = pInvSort->GetItemSrc(i);
7 r0 l( L9 a' }, R! J      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
& F7 L: ]9 p5 y1 }7 s- u      if (pItemElem)& A, H% `8 F" F4 j9 T
      {8 p6 u( i3 T, n4 A( Z" }. k
       if (IsUsingItem(pItemElem))
5 h' q1 ^; w3 O" ]" S( U1 |  ^/ G       {4 Z' a7 P! i. I1 J- R
        //这个道具无法移动,跳过5 U! y( e2 @0 P) F" a; J# d8 _, i
        continue;! j$ }" C4 I+ w- ~" J& Y
       }! _) [3 ~% V2 C- C5 W# D4 b  `
      }else{
$ e7 Q' I5 L- K/ e( C       //空位置 不用动2 O  v1 d6 s! N0 z) Z
       continue;& t& e9 t  k. U# P
      }
! O4 T. P, O/ j, p- X      //////////////////////////////////////////////////////////////////////////9 @+ o4 B( y( C/ y) W% @0 H
      //开始移动
6 B. v  x' y; g+ @7 C$ W) d" z8 }( V      if (nSrc == nDestPos)
; M% Q! M9 ]# _9 \, t6 F5 [+ u5 m      {
; F, x( ?6 G* K3 Z/ @/ S' k; ^  @% i       //原地不动  ?2 v+ ?# Q9 P
       nDestPos++;
. M4 ~1 I/ J+ S3 b6 }8 J" f       continue;
8 q9 x3 K, k' a      }# x/ S3 C- E; s) A
      pInvSort->MoveItem(i,nDestPos);
. \  d$ q( H" S- p! w      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
& g4 x3 E# [! r      Sleep(5);
$ I, @5 F$ G& b8 y3 d: a9 f1 x      //Error("移动 - %d->%d",nSrc,nDestPos);
% @; _) L, P' f: }2 p+ F      nDestPos++;$ s5 Q: m7 a# I9 q' G
     }
! @2 T8 z. }# P/ ]     //取第一个元素的信息! m3 B: g8 C: y# b7 W
     /*
$ y- j4 p! [( q7 ]" r3 @     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
6 u* y: }5 A! Q8 |4 x2 K     {7 i* Z4 k$ F/ S* S
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
3 C) h1 N  H/ @# T4 j' F% K( \      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
8 q0 j& r8 i5 Y4 V2 \, N     }
" G8 y$ P* D% q0 \- ]     */
. l/ s+ T% {- I. M; c    //////////////////////////////////////////////////////////////////////////
- K  x% ?& R9 w5 H    break;
; |7 N3 Z& u9 c3 j; l+ U% K   }
4 F* ~- y+ n$ {0 r  } ' e% f: V; n+ A0 E  H
}
7 m$ e7 L( n% U8 J& M+ x* nm_wndMenu.SetVisible(FALSE);
( S6 r) b( m) |. l1 ]7 B% `! M! \. P, x
--------------------------------------------------------------------------------------------------------6 e; W" {' v$ t. R: j4 \
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
; s  ^3 y2 }" r# j{
4 @& G& f( i! k( Q9 v% qBaseMouseCursor();
: l6 j7 v% _- ?6 [# n! L}6 X6 G- L* c! H' H1 F% g6 b
在其下添加:
4 t! o" s* G3 |2 E7 Lvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
$ O: V6 ?; K, _- I" M' ~9 a8 X{
- `6 y- R& c) C9 bm_wndMenu.DeleteAllMenu();
2 E3 E# m2 u9 E. l" q2 T* E8 Rm_wndMenu.CreateMenu(this);
6 G7 i' e5 ^: ?4 `: ?+ z% Pm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");2 z! [. u( {  f+ Y

" j  M( e+ B, o6 J. ]1 cif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
3 Z9 b8 b5 f9 d! v3 h5 q& @{
" W2 r  m) {  m# O. d% s; V) m2 `  //P以上级别才可以删除所有道具% D& d! F1 V9 ^$ U% r0 O
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
7 d7 D' y3 k1 i+ j}
, u- C+ @- s, y# R5 h. dm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );' _2 M$ x! l! G! [6 N! l
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
8 {. X5 r: K4 X' U; Wm_wndMenu.SetFocus();3 m* N6 o# q' q* D
}
; E9 [2 Y3 N+ i& Q) s5 H) k------------------------------------------------------------------------------------------------------------% A* g2 ^5 K; X
*************************
- g4 K! Q6 X% c( o7 MWndField.h文件
1 y' ~% X$ I9 o3 P7 o*************************
: G( q* I/ F0 u; k5 @搜索:BOOL m_bReport;9 H# j4 O8 @. e
其后添加:
# w# m1 v7 V9 d! N: m1 zCWndMenu m_wndMenu;
, X7 e" y$ P! _! z3 X2 ^搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);* Z5 ~# T) A6 [# W' I, t( ~& L
其后添加:
6 t$ H+ G( \( Y. G/ A/ o  t2 k# Fvirtual void OnRButtonUp(UINT nFlags, CPoint point);
4 q; \- x1 I/ M9 H3 A
. _+ g4 U9 l( c( U* q
# c  c2 \+ r* f: W( K6 B0 b

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-11 18:22 , Processed in 0.094209 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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