飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1090

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1090
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
# {6 [9 U; n5 H2 P' P8 R7 k搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
1 b% k$ x- E" _( a% m9 {2 T* A
3 T; e& G% }& istruct sItem/ w0 u, ^: I0 j9 l
{
: A- E5 ?: m% [! x0 hDWORD dwId;3 d8 g6 k. R5 I" R9 W
DWORD dwKind2;
3 ^$ n  R' J! a! u9 [8 E% [% z6 |( [DWORD dwItemId;5 _! _* {& A! H0 q- [% @
BYTE nIndex;
% \# z8 a" {' [sItem(){
* [9 C& B7 ?* H' a1 A  dwId = dwKind2 = dwItemId = nIndex = 0;
& A; V2 r! p: {( A5 E* d+ C}2 e; X- x( B- m* h- c) X
bool operator < (const sItem p2)
& P/ K) g5 ?: m{5 C. Q: H5 R7 x2 ]" u) G/ o1 X0 e
  if (dwKind2 == p2.dwKind2)
6 \8 k  z1 M/ _, _, N, h3 y2 q6 ?  {
" b5 ^# `4 F8 f6 o  p% Z6 V   return dwItemId < p2.dwItemId;
0 X1 N  n4 k6 b6 M! A  }else{
  e9 A0 b' M/ Z# d! c   return dwKind2 < p2.dwKind2;
6 `- C% w8 V+ b  }4 X7 i) x' W/ n* T0 ~
}
' s) D$ X' |6 [/ h  k};
; Y4 a* R; i& U1 q* Vclass CInventorySort
7 H" ^* Q/ j0 O. U6 E1 b9 O7 }{5 _4 `  C2 o8 B5 d
public:
0 o: R: X6 _4 W7 \* a7 _- Z/ JCInventorySort()
4 x1 R  d3 j# c) p: i/ \{0 x7 X  X7 b6 j
  m_dwPos = 0;% z& `$ |! y8 e3 j; J* F+ }
}
! G0 ~& R0 G6 k: H# }7 N! u5 c~CInventorySort(){}4 s' t: D$ r- D  H& _
private:
6 U$ C: r/ {) d4 b8 P) B1 b$ }sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息. A; D* D4 o; f1 w; a) ]! `4 q! m
DWORD m_dwPos;4 K: d# ~; Q* s
public:
2 F1 y8 J4 B+ @2 F0 ?void Add(BYTE nIndex)% i0 W5 c6 T$ ~: O1 t+ F; h5 l
{
. _. m# G& Q& M6 {9 z+ [  if (m_dwPos >= MAX_INVENTORY)! e( ~) X. T) i' |4 I* F
  {- Y6 e+ ?* x) p0 g( P4 V. f
   return;: }3 n, d4 F5 Z$ t! P$ v
  }
. m+ J4 q! b/ e) B; c( ~4 x/ q4 O  m_Item[m_dwPos].nIndex = nIndex;
" }8 v; s6 z) B  m_Item[m_dwPos].dwId = m_dwPos;
& }: O3 ~& E' r  m_dwPos++;( i) t: e* [8 L/ ?; z* ]
}
" u- N0 L4 t, }# R* c# X1 O. ~, PBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列8 U5 t1 n2 t6 I; [. F: V
{
6 i6 g- `( W1 G: K2 z  for (int i=0;i<MAX_INVENTORY;i++)
0 D* m6 @6 ~3 u' Q" f5 R8 N& S  {
2 U, C4 S# I$ U2 Z( R   if (m_Item.dwId == dwId)3 K8 x$ b+ n1 t* |; E- V; u
   {5 m+ f3 j5 M0 A
    return m_Item.nIndex;
& Z# _  w8 q5 _2 Y) w   }
9 Y7 \. i8 d5 @) P  }( Y! V* ^1 _8 ~& r7 m8 |' ~
  return 255;6 k7 G1 f' A2 Q# G
}
4 q7 E1 c) G  Z5 t4 \/ qvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
/ J- M, t% A/ {3 Y6 |7 w9 A$ S{' z3 V1 ^% }8 N& ?
  BYTE nTmp = 0;
' m: ~; Z8 ?6 G% _8 a9 T+ g4 m& T8 O  bool bDest = false,bSrc = false;
* @/ }( K  l, g- H$ N* w/ n  for (int i=0;i<MAX_INVENTORY;i++)
/ O& E6 y. i5 V3 W$ q  {1 G" `5 a3 O+ x9 o
   if (dwSrcId == m_Item.dwId)
8 X2 j0 m1 w0 b" O' g) i   {
: }7 |/ a7 W1 Y; e. b8 ]9 h" i/ w    //id相等 则 改变对应的dest和src
" U! D) I, ?  \( z) a! ^3 S    nTmp = m_Item.nIndex;/ Q: v1 w, @1 E. |
    m_Item.nIndex = dest;
9 F0 {7 R% W( o7 r   }
, D8 f8 G, @: q. T  }! Y, h# _( u. Y7 g+ p
  //临时数据保存完毕,交换开始
' |/ E7 C+ K3 i  for (int i=0;i<MAX_INVENTORY;i++)# Q$ C( J' ^7 {& Q9 b5 k. t
  {2 B- [  A; ]) s, k5 Z
   if (dest == m_Item.nIndex)
! B; ^8 N' M' E- y# K   {
  g$ _* x* q+ a$ C. v, f' j    //id相等 则 改变对应的dest和src
( _+ r' {) z( y  z9 `  R) b" y. m6 n    m_Item.nIndex = nTmp;! h4 {  K& s4 R
   }# S3 i$ ?! l1 o( ]$ l
  }
+ a4 U& p3 m- U5 k$ ?}
3 J- V* N; F) Q7 t, `2 e};
# O+ S* P# I7 d6 ?2 W( [# P8 f-------------------------------------------------------------------------+ \# J4 b4 `) M- {
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ R/ V6 q: l5 F+ k搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
0 c6 @6 U* d3 `紧靠其上添加:  n1 C* W( ~" X( _7 ^# w
if( pWndBase == &m_wndMenu )% \  Y/ a4 V/ r- w+ b- ^
{
* q' n7 O3 a% B' S! c  switch( nID ); v( H/ e9 c$ m& r
  {
8 m. k  W1 F4 _2 S. E8 q, n  case 2:' p# u3 q# L% Z$ Y) h$ j  T
   {
8 v/ u2 J# z; r, T& Y- i    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
, [8 ]) k( u  s. ^    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))$ ]% w! g8 p2 ^3 g4 r9 \! Q
    {
( \  t  }3 j( E     break;& d; m" |/ E, x  u& Y
    }+ h) d; r# N, y! M  r+ U$ v8 r
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)' c' d& ^3 ?5 z
    {
, B: W' M  G: {2 x     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
8 J2 W  @8 r  Z0 n7 K* s     if( !pItemElem )
7 @. {: ^/ ?" Q3 C4 \      continue;
2 ~  g+ c2 X: F% R4 x6 K     if(pItemElem->GetExtra() > 0)
" H/ o! O6 y6 w# \6 F! f      continue;
$ ~# B2 L4 j  F7 I     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
0 V+ s8 \8 S/ }      continue;
: q7 H* U3 s% M2 \0 r+ t! c     if( g_pPlayer->IsUsing( pItemElem ) )
% E; w( D1 J' B9 s/ d      continue;
7 h4 W' p8 q8 u$ ~& U2 x) U, u     if( pItemElem->IsUndestructable() == TRUE )
* U9 f7 n. R& m# q3 F     {
. u7 s5 Y- [7 p9 a: j5 }      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
4 M) h3 i" B0 U% l, \" |      continue;
$ Y! y3 Z2 t" z) d9 E+ v  F, `     }+ o, b4 b& k- @
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
& G* B3 a. ^$ U* \& M    }4 X" D* L, @. B
    break;/ t! o) d/ o% }' l
   }
: R3 x! {1 s, J- }2 `  case 1:
( s3 `6 i0 H. l9 b6 Z) y' m- Y5 p   {! p- J+ }/ ]8 Q( E+ P* M, R
    //整理背包1 u( S2 y- z6 u7 M/ g$ E4 |
    //////////////////////////////////////////////////////////////////////////
+ t4 z* [) Y1 D) J9 `7 |) B    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );" n! ^: q7 a; V: }& R7 Q
    //////////////////////////////////////////////////////////////////////////
8 D: H+ W/ G/ W- l0 }8 e0 W    //////////////////////////////////////////////////////////////////////////" ^* `. o- o5 t$ g3 r
    CInventorySort* pInvSort = new CInventorySort;# Y* x) H8 a) I, E4 t
    vector <sItem> vItem;
- {) x1 F& J# L9 L% C( m    vItem.resize(MAX_INVENTORY);//初始化大小  Q4 ~/ I$ m* [/ e0 A( ]' [9 z
     //////////////////////////////////////////////////////////////////////////
% P$ U2 s( z0 m% N8 N4 Q6 j     //填充数据$ @8 N/ D* F- `
     for (int i=0;i<MAX_INVENTORY;i++)
; J9 m8 K4 N& c4 m     {
" p! P+ g! z* E0 y$ t3 m      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
# ^2 S, F4 i3 I$ J1 }; e      if (!pItemElem)$ \& W% G- h2 E
      {
7 E9 u# \  G4 |% `7 a       vItem.dwKind2 = 0xffffffff;
# A& k1 n% Z/ W       vItem.dwItemId = 0xffffffff;( C9 A( O# u0 I
       vItem.nIndex = i;$ m" K! }3 G/ y; Z# ?: Q2 l" a
      }else {
& m/ K$ p7 a: s* W( l  O0 P       ItemProp* pProp = pItemElem->GetProp();0 w- D% p1 U' a+ V+ b
       vItem.dwKind2 = pProp->dwItemKind2;, m& `! t1 @& M+ \4 I9 b2 Z
       vItem.dwItemId = pItemElem->m_dwItemId;
1 w9 u. w. q  G       vItem.nIndex = i;
0 t; ]" [3 H4 T9 `      }
$ I4 W' N6 A- N. M- F, d6 y      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);; }9 ~1 K" o) J( w& R6 u
     }
2 U1 I6 t& D, p5 [     //////////////////////////////////////////////////////////////////////////
9 j! \( Z# g$ R0 b/ s: q     sort(vItem.begin(),vItem.end());//排序
4 i9 w5 [' U, ^& e; ^' Z     //////////////////////////////////////////////////////////////////////////
! t0 n" z3 j( l) @1 @3 Y     //交换
8 \1 Z# |  K, q) J9 O$ d     for (size_t i=0;i<vItem.size();i++)% l0 W; }) m" }+ f, j
     {7 i* _- |4 I) @3 L6 W$ ~9 C
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);/ f$ f0 t1 E9 [3 D
      pInvSort->Add(vItem.nIndex);
+ f' z  O6 b5 T4 N8 }5 V& O. o; Z     }$ |- b. B' |% _& W
     BYTE nDestPos = 0;
  ^' [) o: G# T+ p; F7 J6 |& b     for (int i=0;i<MAX_INVENTORY;i++)$ f1 \3 i1 d5 O+ d
     {* C6 f& Z5 \' G( P7 L' W1 ?1 T- \
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
  L( B. V" _( D9 U% l      if (pItemElem)& |$ z8 H$ C# z0 g
      {
' C, a$ Q2 h' v; ~* `7 [       if (IsUsingItem(pItemElem))# \, `' [# X( c# X  ?  Z5 n4 p8 u0 ]
       {+ c/ x3 b6 b  ~
        //这个位置无法放
5 J/ S: `% E* l9 o: B8 e        nDestPos++;! n1 b+ A8 s: r+ d# u# I
       }
1 P6 W3 U# d3 Y* }      }4 j$ n2 H4 `* Z! L" c
      BYTE nSrc = pInvSort->GetItemSrc(i);+ y6 E/ S) \4 T2 i9 H
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
$ S9 X: Q) r" @$ s& Z      if (pItemElem)( g; }8 S* d6 l
      {. U  @. p/ Q! P2 K3 ^
       if (IsUsingItem(pItemElem))
8 L* s0 Q, D9 ~4 x* v; o' c       {
+ a9 e) v% k, U! @        //这个道具无法移动,跳过
& ^3 ^  }/ u- Z) v* L  W        continue;
- \9 B" l7 F- M% b! w       }! R# _0 P0 ^4 [8 g, [; P* w/ a
      }else{2 N4 ?3 U6 J; o  ^. D0 ^
       //空位置 不用动
7 F6 L9 N, x& z' [7 U: ]+ K1 n# x       continue;) _; b& o4 a5 d4 ?/ U; g
      }  J* \5 r" {" W, E
      //////////////////////////////////////////////////////////////////////////1 P; `- w; S) c3 H2 R8 d
      //开始移动
7 m) Q: J* s2 F4 t  \/ t      if (nSrc == nDestPos)# p3 v" Z  b2 e+ O! E) a* Q
      {. a+ ^/ h# R, y3 a7 w/ {
       //原地不动
5 C/ \# c# S) U7 b5 `       nDestPos++;
: P) [$ A6 F" E       continue;
- L5 S4 c  h# E3 i' I" w      }
4 M& c  f2 E: S) B- r# m: J      pInvSort->MoveItem(i,nDestPos);- J/ k# j6 V( ^& Y! l) ?8 d9 p
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);9 [' f6 j+ Q% ^" p4 L' [  l/ \0 W. I
      Sleep(5);
) {  z. t& ?. p8 t: X) O. y! r* @$ }      //Error("移动 - %d->%d",nSrc,nDestPos);
4 R, h" @4 ?5 Y4 J( }! j      nDestPos++;5 [* ]$ m& J3 m/ z' |6 u( a
     }5 f4 A- L% [* U2 K% _6 w
     //取第一个元素的信息
7 W( u! l  d# M6 k5 c( H     /*
9 |0 }4 x8 I5 _- w- ]     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)) J3 K6 O* O9 U
     {4 t' O3 `9 P. P3 ^0 S( l# K
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);2 W/ F2 R3 t, n6 U, _
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);, u6 y2 D# b7 h; e. C0 X2 r# ~+ q
     }
* h: ?8 N+ @* G  ~* N     */
5 D+ @7 @5 A' w% D+ Z    //////////////////////////////////////////////////////////////////////////2 l3 r$ J8 X: @+ q0 @
    break;
  g3 q$ |4 I2 H* p   }2 N$ t. B5 N" \( b3 z( \
  } * D' l; b2 w" p3 x2 R  u$ n/ E
}
  E5 ]/ x! g3 Q! `! ], jm_wndMenu.SetVisible(FALSE);2 U4 a4 I$ J3 p* _0 J; I; J5 y
- G' n0 L9 x) a
--------------------------------------------------------------------------------------------------------
8 j  y0 E$ a- E9 D搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
, p$ c2 E$ V$ U9 u$ t2 L{
' a1 E. I/ t; S- q; i( XBaseMouseCursor();
/ {( t% o) E8 L* P4 u: h0 J( C# u}
# ~1 K) Y  ?" |在其下添加:0 |+ ^( V1 v! N; x% n
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
0 B; I3 }% b; P4 y/ u7 ~{
! s: @; O" e# {1 m7 e% \& ym_wndMenu.DeleteAllMenu();5 x8 |7 }! Z2 K) d# W6 A# x6 [9 f
m_wndMenu.CreateMenu(this);
, ]) X7 I, t  pm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");+ f3 d+ m$ J* `/ h; u4 }1 z
* e7 n# P2 J7 ~  W( l
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))2 {! G  B. p9 G! Y6 N
{
8 j. L3 O0 j3 |+ I4 Q$ P& G  //P以上级别才可以删除所有道具  _) l' F1 j& e. y3 ^
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
& X2 J7 D; {9 S# F}
6 L( @) A  F$ u' G) }% R  ^0 Ym_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
- i; Q, b+ ], y' o. T! {m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
* i# m( x1 X: |- ]# W* g6 s4 Gm_wndMenu.SetFocus();
0 s4 }: u4 o" W}
, w: X! d, R) o- b! y* _8 y2 }------------------------------------------------------------------------------------------------------------
) e/ Y; o; r4 @: i*************************6 e5 ~+ F5 F3 Q) |- K
WndField.h文件. V* E$ e; }8 W9 j
*************************7 F7 \) V: R1 h: D
搜索:BOOL m_bReport;
* g9 [0 i5 [: E( j其后添加:3 u1 M; E2 J! ?" L9 ^5 |
CWndMenu m_wndMenu;
. P5 P: e1 x: F搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);7 p+ u6 f# u( |. c1 r8 E+ c2 I
其后添加:. V' W1 V" ]( s8 O
virtual void OnRButtonUp(UINT nFlags, CPoint point);7 O! C$ g; ]' x) c) H. e
  U2 m8 n9 F- q* Z2 J! d- m; M8 L5 w
& L8 N* j/ C! R1 c: y$ Z

相关帖子

回复

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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