飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件8 J/ w+ R  g  G1 ]3 C
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! U/ u8 U$ I3 X: {# n3 S  A6 c

4 e# X3 l+ Y$ s  n4 cstruct sItem
. {& Y' ]1 v, e{
( X5 R. c" i8 Z, i& qDWORD dwId;
& p# j) N* s& E) s* L7 _5 IDWORD dwKind2;
; ^" S& R# n  z2 r8 h& `DWORD dwItemId;2 n7 q/ }( X2 [1 k& M( Y
BYTE nIndex;
  w3 B# ?) `9 }6 ]7 QsItem(){
8 ^- C5 ^0 ^" }% E* e  dwId = dwKind2 = dwItemId = nIndex = 0;
6 V- w9 l( S$ v  X; z: V3 r2 c, P( b}8 O3 ], \7 _6 \
bool operator < (const sItem p2)6 x, ]6 C# c" t+ @+ h
{
. T  f' i4 Y7 O" j" f/ x+ F  if (dwKind2 == p2.dwKind2)/ {9 V0 m2 s) |( I
  {
+ m# @) U+ `% l2 j( K   return dwItemId < p2.dwItemId;
, E5 H# Z) t; W& n  }else{7 i) r) a% v6 }
   return dwKind2 < p2.dwKind2;
3 q: r: `& N# S) o$ b# U  }3 r7 t; x7 `; R
}- F. S& {0 q  X) O& f1 `
};- [+ d) d" Y* h+ a* X
class CInventorySort
+ f! E1 p: d5 A6 T, z{) m- s. W7 \* p0 Z
public:5 S3 l4 P* |6 A8 N9 d* K3 k( j: ?
CInventorySort()  `8 ?; ~* @5 y% R3 t+ a  H$ w
{+ Z, O& P9 i" R( F
  m_dwPos = 0;
6 x  S- N# K8 W6 z& E}0 ?' g5 g1 T7 e( l) ^2 e
~CInventorySort(){}
5 h0 \% h! E9 p  f6 Jprivate:
& n1 p5 h7 l% }& bsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息9 Q. ]9 ^+ X  b& v3 z( l0 t; M
DWORD m_dwPos;1 x$ l7 u; W5 T1 E7 i7 @/ k
public:* t  x6 {) v" ~3 s
void Add(BYTE nIndex)5 [: N  e# m# c, |
{
+ H( m1 N3 u/ `' j- C, p  if (m_dwPos >= MAX_INVENTORY)
4 r: S$ K+ x4 k5 e9 ~  {
% c# R7 ~# r) S) S+ y; x6 |   return;
- b9 c* w$ X0 M# l# K  }
, g& D# g+ H. g0 I  m_Item[m_dwPos].nIndex = nIndex;7 P/ ^0 p* _* Y  C' a$ @% a
  m_Item[m_dwPos].dwId = m_dwPos;% T* S) O( z# w7 K5 o
  m_dwPos++;. f0 g; s: [( n
}
8 q7 k- y. G* l0 gBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列% u0 _; V7 W. c
{
4 a' Y1 M! O. r- C4 M5 ]8 Z+ w" ]  for (int i=0;i<MAX_INVENTORY;i++)
6 _4 L+ `1 v5 {8 T# h8 z2 b# \  {' V/ C# }/ a1 n2 Y7 Y
   if (m_Item.dwId == dwId)
8 g4 G, Y; D- A+ V. N  g4 M: Q. F   {
' |% Z& V% U3 k, n    return m_Item.nIndex;: Y2 Q1 M! C% K
   }2 P4 z1 w, o/ ~  J
  }
7 r. _  Z5 ^0 O+ ~+ i5 Q2 G; A  return 255;
7 `. [  |$ R7 t9 Q# z  i- X}( m( k8 i! D* c, j9 g6 B0 ~  S
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置6 n0 ^3 N3 V& w0 T4 `4 ~
{( G( D7 ]9 B, ~2 |
  BYTE nTmp = 0;! K% ]" w( Q# s: F$ ^+ z& i
  bool bDest = false,bSrc = false;  L( O5 b8 g( `- U8 Y+ \5 w
  for (int i=0;i<MAX_INVENTORY;i++)6 r7 G7 A) D3 _' z. ~6 M1 j+ @; S
  {
# ?& c. a9 {7 M. V6 N   if (dwSrcId == m_Item.dwId)! p+ b) [& R# K& g
   {
: k- C3 K; m# H$ J    //id相等 则 改变对应的dest和src
& E1 C* u- H6 {9 q# K6 D: f    nTmp = m_Item.nIndex;: y  E3 y; _) t( Q: x+ C
    m_Item.nIndex = dest;
8 Y6 Z1 b4 e. F" F3 f   }
- }8 k; O1 \; A) Q6 h9 ~) \7 y; E  }
# v4 \, L! d- _  P% _2 ~  //临时数据保存完毕,交换开始
. K7 m9 V* g  D# E- d0 c5 a5 E  for (int i=0;i<MAX_INVENTORY;i++)0 [9 k2 b! s. l
  {
1 M7 M/ K4 Q* i9 z) R3 y   if (dest == m_Item.nIndex)
2 k, T/ @+ o3 H   {5 d1 m  |) @$ k1 s4 u
    //id相等 则 改变对应的dest和src
. |- Q( y8 W& z* e+ Q3 Q5 \    m_Item.nIndex = nTmp;( X' Q# k, q4 d6 V% y9 M
   }
. \* p. Y9 y& T' T1 R; z4 A' f( k  }
7 W7 O+ }# O7 m* z! }- `$ w. q: y}! d" q6 E/ r% a' E$ i+ d
};) a( A* r+ T$ K, Y+ F! c* F3 n
-------------------------------------------------------------------------7 i7 W8 l* N- J: ^+ C
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ o: U+ j: u( X! V搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);8 j  z0 w8 y: W' o# K- F; F
紧靠其上添加:
1 U  k3 @5 z  d) x( f" C4 xif( pWndBase == &m_wndMenu )( e* o. `2 P+ l& g
{+ J. {, e$ ^, R8 H# H3 T
  switch( nID )5 v4 U; d, A3 _2 Y2 [5 U: w* y& x
  {
0 r% ?* K2 [& q1 l5 B2 I0 e  case 2:/ y) R. a) |; u% H* q
   {' p- {; B# r5 n7 K' L) s
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
; _: f' k5 \/ _, J) f( i+ X    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); T- E% g+ L. H" N" J# m# \; g
    {; u1 g6 Y8 [) o9 q7 o
     break;
) L7 Z) y( Y/ Y( Z4 B    }! c) |( Y( _! {& m+ T+ s3 e
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)8 I9 c$ O! U  u( ~; _# h
    {
) u& y2 b* p& U# l% [; o     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; o+ {+ @% ^, ?8 p     if( !pItemElem )3 j: I# I) u4 O/ h5 K  t9 }$ o
      continue;
5 Q& c, l$ L6 Q3 U- g     if(pItemElem->GetExtra() > 0)
+ V+ k. K8 u) m& y3 S      continue;
1 R9 a2 L9 Z$ d/ _2 }7 Y' @$ g     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) * M7 k7 z1 s& y0 v* F1 r( w- l+ Z5 Z
      continue;. _) T% I& n! |9 {  Q9 `! g
     if( g_pPlayer->IsUsing( pItemElem ) ); H- `/ X0 @+ w- h+ y9 f, C
      continue;
# O$ j& {9 `0 M, ?9 D/ ^     if( pItemElem->IsUndestructable() == TRUE )
" ?$ H! |9 m0 c; b3 e     {
" y- i0 U) C) g: A0 D: S$ y8 m4 g. p      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );! j# C$ r% }/ c. L7 o
      continue;' C; N6 @0 X! ?. D" r- R
     }7 u0 Y# c8 B6 y- ~1 [$ W
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);% V4 ^+ P% |& L+ v4 {) L
    }& [9 x% z5 o- ?( N& a) @
    break;
: X3 |4 P  q/ L! @* G  @' a   }
) c$ E0 x; O, V: ?$ e# `& U  case 1:
, E: C' i& W8 h" Q; V) f% X   {
6 ^& @  c0 n, t    //整理背包( s1 F( Z1 K9 m. C, @: ~
    //////////////////////////////////////////////////////////////////////////! J3 f) P% q1 W/ j6 L! F' n8 T
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );& `! c3 n+ B3 _; ~0 o
    //////////////////////////////////////////////////////////////////////////
3 S+ Y0 T! `, _- }: u" F' F- q: ]    //////////////////////////////////////////////////////////////////////////1 l& Y* f; b6 w
    CInventorySort* pInvSort = new CInventorySort;5 [0 Y2 F  P: H. p0 E
    vector <sItem> vItem;
# i. [; \- o- g5 {7 Z    vItem.resize(MAX_INVENTORY);//初始化大小
, o& V: c1 X2 ^- U& z( F% w# Y     //////////////////////////////////////////////////////////////////////////
4 s2 m7 B6 b3 H     //填充数据
! O, E: W6 ^) ]8 k6 G* }3 v' {5 Q     for (int i=0;i<MAX_INVENTORY;i++)' f+ u. ?/ p% M  h/ t$ k* G
     {( M1 p3 j+ \" }
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 X7 |3 B0 }6 f. v      if (!pItemElem)4 }- m9 N: l" u. u( ]: N4 v* h
      {5 F. D- W1 i. I) h9 Z
       vItem.dwKind2 = 0xffffffff;# g9 B7 M0 y: K' l; R, h, `6 f
       vItem.dwItemId = 0xffffffff;
4 i( M7 D, u5 d       vItem.nIndex = i;
3 l- n* ?5 K7 m& h1 N7 k7 |; ?      }else {
0 R' r1 I- s6 q9 k* S5 u) S       ItemProp* pProp = pItemElem->GetProp();, d# z% z$ A* F$ o0 F( N4 B+ X
       vItem.dwKind2 = pProp->dwItemKind2;
# V: w( h8 ]# d" Q: G  c' s       vItem.dwItemId = pItemElem->m_dwItemId;3 P1 ]6 b8 X) _) Y' s6 O' X+ w
       vItem.nIndex = i;8 A0 h9 n! Z% {6 X. t' F* y5 j
      }, x' Z0 N. R( L% r1 T8 f
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" L/ v7 h4 b) s     }: c8 h1 V2 `# ^0 Y" p0 T
     //////////////////////////////////////////////////////////////////////////
+ ^8 J- e5 P$ ^4 O( W     sort(vItem.begin(),vItem.end());//排序
* @6 Q6 Q4 @; L/ x& {     //////////////////////////////////////////////////////////////////////////3 a4 Q5 Z) Z/ R: {. Q  x
     //交换/ b0 I; D4 e  ~! f. ?2 y' J
     for (size_t i=0;i<vItem.size();i++)$ y3 f6 [% l  R/ E7 Z$ [  C
     {
: e& }& c* B+ r. ~  w) a  b      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
% |) L) H: w+ y' H+ W4 P1 C2 [+ U      pInvSort->Add(vItem.nIndex);
7 o' V1 E  k1 Y9 {4 U5 j9 l     }
  [8 F0 \3 V0 j     BYTE nDestPos = 0;
! g" j! F; Y7 u! Z     for (int i=0;i<MAX_INVENTORY;i++)
! L2 l) i9 U9 `/ K1 `3 I& ^     {
5 d9 c1 |$ L( O- ~5 P      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);& P# m+ L5 F2 F
      if (pItemElem)7 D* B8 o. X1 E# y' J0 P* W
      {
: w0 R4 l2 U& ~& P" }; J0 M; b       if (IsUsingItem(pItemElem))
3 L5 }2 H+ w; w+ n       {* `, x: H, U) D) x! v
        //这个位置无法放
, Y1 l; Y! n' u: q/ j7 e        nDestPos++;
: Q: L' g+ z  c9 B- k& o       }0 Y2 d; Y" }1 v; J3 f
      }6 N) V$ b0 }8 _4 @1 P
      BYTE nSrc = pInvSort->GetItemSrc(i);- H# m( L+ o" N& }, n
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);# o4 r$ g' C' Z0 ]/ w2 J
      if (pItemElem)
' U) C* Z9 u) ^( I$ ]7 M      {
+ f- k3 U5 N( R       if (IsUsingItem(pItemElem))  w& r0 E* d- Q+ `# I, O
       {2 }. u4 {% g# B0 Q8 l
        //这个道具无法移动,跳过! e, J3 D4 b. ]1 ]1 a! O
        continue;0 W0 e, @% f: Z* i  t. a5 `
       }
( ~6 ]9 L% h2 }6 {8 \1 x      }else{
  b/ ?7 u8 Z/ v# T* S/ D       //空位置 不用动
- F" B; x6 a* B       continue;
  W' a& d! l$ r+ c6 J      }
" r9 _0 U' d0 m9 U( E6 v0 X1 U      //////////////////////////////////////////////////////////////////////////  r( _& O( m7 N# N5 _
      //开始移动
6 K! U1 F: m& A* z5 R      if (nSrc == nDestPos)
. F8 v' j0 ?, ~( A; ~9 L$ q      {
+ ^" t: Y8 |3 h       //原地不动
8 a% ]! @% G4 H$ Z. \( Z4 G       nDestPos++;
4 r) k; {* [2 L: d1 v0 `$ H. d+ i       continue;
) C, w! ?! m9 T      }
& k$ U0 P5 y  h, t) ^      pInvSort->MoveItem(i,nDestPos);
5 U; N; }0 y$ O      g_DPlay.SendMoveItem(0,nSrc,nDestPos);% I  U7 |3 }% b8 z# _$ ^
      Sleep(5);
$ V  E" f2 }% q* O2 X; V" C      //Error("移动 - %d->%d",nSrc,nDestPos);
  T4 l/ u9 ^# K      nDestPos++;* a/ ^) M6 f2 Z8 X$ G$ e
     }3 ]* H2 h  b3 U" \$ _
     //取第一个元素的信息1 Q! {: a: }5 x. }* _
     /*3 r  [8 c$ I. k! K9 T8 Q& l
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
+ G$ M9 U4 @, s/ z8 k& k     {
5 O6 X& O$ o" P" U. M' X& P      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);. T, q8 g9 O; Z8 G' @
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
+ f! o& [6 v* y" z: D     }/ f/ p9 _; K6 @# l
     */: B  a" Z8 I7 o" T: S  e. v
    //////////////////////////////////////////////////////////////////////////- D& k) _2 Z1 [* }( j& r
    break;4 |8 g) {! `. w7 a& s  w
   }
4 ]; N  q) ]- |  } # J1 }2 Q5 Z2 V* B$ K  i, {2 n. C
}8 r$ N: m8 r: h# b5 h- Y  {
m_wndMenu.SetVisible(FALSE);
! B$ ^/ E* }! ~4 [0 [% k7 f! l1 Z# o( G, y% h
--------------------------------------------------------------------------------------------------------
: e! L6 w  _6 k1 `$ _- n- r* h3 g搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)4 K; @* O, E+ F: [' ~7 }
{, ^) y( b- C7 [7 K2 M' S, H' h
BaseMouseCursor();2 E  @: e) E: s5 y* `* l: k5 g
}6 T! [6 s  R( y' V9 j* |$ D2 S1 x. p
在其下添加:( K3 z2 u3 ?& P. Y+ J
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)6 }  b" H: \( f3 u5 B
{  Y) @& ]- `$ M% T
m_wndMenu.DeleteAllMenu();. y# R' `( J. `! ?+ S5 l" v9 W3 t
m_wndMenu.CreateMenu(this);1 |, @$ `/ n  W
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
+ y% f6 j4 Z: ?! ]
) E' k$ i# b  i5 ^% s- n. [if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 r+ g! D- p& Y6 ^$ U! p{
/ E7 r' D4 B' H& @* Z3 O- m  //P以上级别才可以删除所有道具, X" g3 ]2 h* W0 U3 y* K( g" F
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");3 _3 n/ Y! w! S
}
8 R! N& h  Y( Fm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );# m% M5 m# j5 c9 h- p
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );. S& `' J: \4 m" w. t. U( l6 k
m_wndMenu.SetFocus();
; w. ~' t: r# V1 Z0 {" y& b0 d$ y8 }7 \}
- @$ ~1 k+ [) r9 P------------------------------------------------------------------------------------------------------------
4 X& M6 K& M; S: X* M' ]9 U% Z3 ?*************************; M1 |3 D3 n) C
WndField.h文件0 f) ?, F% h" v6 o& Z: d5 C
*************************& n0 U3 s: k' k" {
搜索:BOOL m_bReport;
6 r$ E0 n0 W& h! J: U2 d6 ^其后添加:4 G& U/ H9 M- M
CWndMenu m_wndMenu;
$ b+ Y; \+ v6 m" f3 ], p搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
9 w/ O. w/ L+ v. X& x) A其后添加:. F9 w) M+ [" l7 m1 A* t
virtual void OnRButtonUp(UINT nFlags, CPoint point);: f& p& ?8 }$ n" H/ @% U7 t
, K: [8 L% j1 L$ x$ O9 x& S/ j2 a
, b9 q; j, Q+ D6 Y4 V9 w( j/ e

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-21 04:49 , Processed in 0.064292 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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