飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
$ V; E7 e! Q9 T  y+ `2 T搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
( H2 x. @/ ~5 z/ s8 E# r5 k, e1 x* y
struct sItem3 [, p" b5 W- U: U5 g" X5 k
{
. K# u0 V( }8 [4 l0 C8 M" A, sDWORD dwId;
$ l) k/ v* Q# R2 x9 |DWORD dwKind2;
  E7 {. B9 Z% J* F: }0 MDWORD dwItemId;( T  U/ V, s3 K) {6 t
BYTE nIndex;
( B! D4 d- |8 ~+ n7 U, z/ m$ RsItem(){% B8 z5 u) y5 m
  dwId = dwKind2 = dwItemId = nIndex = 0;2 h! P1 y: Y- h; B) p* v! ~
}' a/ d& s; h# Z/ a! {7 C
bool operator < (const sItem p2)
; A9 ^3 V8 o- p$ {, l1 I  k{
8 f' M* v. v0 h2 i: v; @  if (dwKind2 == p2.dwKind2)* l3 r  e/ Q  N- @
  {
2 Z" v) {4 D5 [. k3 k: O8 X4 W& j   return dwItemId < p2.dwItemId;
! D" m4 \1 Q7 P- `* q  }else{
# d" z( q) v5 ~  J: \   return dwKind2 < p2.dwKind2;- s' N& [( G5 {8 k
  }
/ R0 s. n' S$ x9 e; R}% T% p( w9 m7 s) N+ {( n: b
};2 Z/ w1 ~$ D  b7 }2 e. F! K
class CInventorySort
7 S' o& z0 g& V. w; Q$ n{
! e- R3 F/ f+ H) epublic:
2 f, f% L& Z4 }# RCInventorySort()& I/ }" H3 j4 g" I
{$ m8 U. Z% E9 J+ {
  m_dwPos = 0;
( _4 W+ g) E2 u}
) j/ W3 R+ L* [) i0 S) E~CInventorySort(){}$ X0 x; o$ U  b$ J1 @$ V6 J5 L/ z
private:
) [2 P2 t! Q$ K8 u2 OsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
$ l0 g3 W+ z9 _' L' |DWORD m_dwPos;
3 F/ t. ]9 N. q0 ^) b2 G/ Lpublic:$ }- q* z8 V3 L6 v0 s
void Add(BYTE nIndex)
6 `3 q3 [$ B( m) Z" U/ O{
+ P% Y' U8 }9 H6 @! Q  if (m_dwPos >= MAX_INVENTORY)
5 O2 D5 w2 \4 K/ s. T6 q  {
+ k8 W7 E' i3 O* U   return;7 L5 s% p: z6 ]+ E+ m
  }
% o+ E2 j) U) L3 V# x* i+ k  _/ X  m_Item[m_dwPos].nIndex = nIndex;% R4 [+ T: V) z2 U) U" y% a
  m_Item[m_dwPos].dwId = m_dwPos;7 v( m' @( A% S- g( g* F0 U# u% j8 }1 S
  m_dwPos++;
9 ]& e2 _! g2 c- C4 k2 v}  R/ ]  b8 ?& v) u' }( ?5 z) R
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
. H1 R$ z* N8 R" n& y{
: l: v+ k  O" [  N" k  for (int i=0;i<MAX_INVENTORY;i++)
! }4 E5 A" U7 q1 I" ^5 T  {
4 x# B7 |" ~% W8 Q1 T   if (m_Item.dwId == dwId)
, p& g; ~" d6 c: q" K; \   {+ Z$ o8 A, O) h- D5 D
    return m_Item.nIndex;
8 q/ }, d: [* ~2 [9 a   }; J! P# e9 \6 G! A6 [
  }* ^' C- o. \$ T" |7 i
  return 255;
' m" x" q2 k. E' S8 S/ _  c}) K: O7 ?  w. `
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置* q# H9 f7 x' ]3 Y6 w4 ?: C/ O# m
{1 w5 M1 _8 N4 l5 v# s, D
  BYTE nTmp = 0;
- h- r0 V# R4 Q) ]; ?2 Y, v, W  bool bDest = false,bSrc = false;  S+ B1 ~4 b$ s( J" {6 {7 L8 n
  for (int i=0;i<MAX_INVENTORY;i++)
8 d% G; Y& f9 a. K. m  a  {" f9 G1 O2 Q6 o, g, R& X
   if (dwSrcId == m_Item.dwId)
: O1 U) M& y+ v, M4 j$ ~- T   {
& V5 s7 b/ ]3 L1 x. t9 ~* p    //id相等 则 改变对应的dest和src
( x  C1 |6 X, S" b1 d0 _    nTmp = m_Item.nIndex;2 N) N5 D: b3 N+ T  s3 Q  S
    m_Item.nIndex = dest;
2 @$ i1 g4 Z) x) r; ?   }9 M6 z; ~. B$ z! O, a7 ~' J
  }
0 f( I# ^, W) E% v/ U. Q2 r  //临时数据保存完毕,交换开始
) C5 U4 H+ M9 _2 a5 y  for (int i=0;i<MAX_INVENTORY;i++). d. U) E; G; {' ?
  {) P- Z4 ~" J/ L8 @
   if (dest == m_Item.nIndex)
7 ~7 d/ L1 H0 O# s* O1 j( t   {. O4 C" Y) i. W- H$ f
    //id相等 则 改变对应的dest和src4 L5 {- r' k* f( N* X
    m_Item.nIndex = nTmp;4 O+ J6 @. G; e- J9 w8 L& m' ]
   }
. c, \1 T- `# X# v3 \  }
* D" Z0 l% e5 Z9 q6 G4 q8 B( `}
: G+ e' {0 Y9 s" E};
& [2 i! Q* j/ D5 t' Q-------------------------------------------------------------------------
8 r* }3 e  K4 W( Y依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 O+ q( [; ?7 X2 z% w; r搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
: r. p- h. N/ J: F+ Q紧靠其上添加:
7 m$ R. b* j1 T* w" c" ?: b% h* D$ eif( pWndBase == &m_wndMenu )0 k" Z, l0 R( i" Q
{
* Y0 e; a; s8 [7 P  switch( nID )- I4 n  ?7 f6 j+ `) B3 L& z" B
  {- Z! R. _! x+ J+ M/ D" m! H" a
  case 2:) w( k- G5 ~' Z1 u) m" _8 K
   {
. J) d$ s) j4 u8 y  Y+ V    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
( @; X) v- @" s4 @    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
3 a( Z; v  I  T1 E0 o    {
0 p; x) \' Z" q$ S  P: E     break;
" d3 a7 T; v/ v1 Y& d+ [    }2 U0 l$ a$ a5 k
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
) q* b  D! H6 i" G    {
* p) h6 K3 M# o6 @7 D; h# M* g     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
+ K! a- h. ]& \4 Q) |! v  \! r! M     if( !pItemElem )& B" ?) r. [1 h8 q( k# c, C0 `; `# ?
      continue;1 t: c% P; R9 S
     if(pItemElem->GetExtra() > 0)
" u1 k. N, q% W& S1 [      continue;9 i! `4 f# }' p+ c; v* Q: h. ]: B
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
, O5 M5 e" L5 J$ Y) I" Z/ P      continue;4 j% h( R+ H3 t- i: [
     if( g_pPlayer->IsUsing( pItemElem ) )9 I! S8 {$ g  @/ Q
      continue;( p: s. q) [( I- N" w5 {+ ?
     if( pItemElem->IsUndestructable() == TRUE )
, r+ H, q/ E* D' k, ^# g" `, [     {! a8 j* Q9 Y( y
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
! f8 A, o, q8 x4 d( g4 a  z      continue;6 H: p0 e% @5 s: r/ S6 {
     }7 K3 F- L$ i6 I- J* b3 I$ T
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);* O7 G6 q2 X9 L  F& G
    }- K; H% J4 y( i+ M! K
    break;
. ^; P5 ]7 h. F- S: \$ l   }
# Y1 p. M: f6 d  case 1:* ^2 u9 U, ?9 m
   {: {3 Y. V5 }' r$ U; s
    //整理背包
# ]: E; ~: C# c' ~8 P' J    //////////////////////////////////////////////////////////////////////////
* S2 W" K* [6 G( R    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
) N" l+ g4 a% w+ w& ~- R; }    //////////////////////////////////////////////////////////////////////////
5 r- V2 n; t8 O6 }6 j    //////////////////////////////////////////////////////////////////////////; `" x2 h8 Y, g
    CInventorySort* pInvSort = new CInventorySort;
* M7 J+ p) V" G0 |    vector <sItem> vItem;
/ o3 L- S5 n0 X% n3 B0 }4 x$ W    vItem.resize(MAX_INVENTORY);//初始化大小
9 C: L9 ^" [' ?0 K     //////////////////////////////////////////////////////////////////////////0 J8 i+ X* i) i- P- S& [
     //填充数据2 S( {, G/ o0 F
     for (int i=0;i<MAX_INVENTORY;i++)+ [( t1 J  Z$ o. }( w0 K8 K
     {
! s* p$ u  N/ x: R8 @      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 \. P! F. w" b4 s/ R
      if (!pItemElem)2 j9 t, H, i* h# ^2 q7 a
      {
7 N# ^0 S3 C( v7 J       vItem.dwKind2 = 0xffffffff;
6 L4 G" n, W5 l       vItem.dwItemId = 0xffffffff;
5 n  {# F$ t5 z       vItem.nIndex = i;% _1 e7 L% i& @6 ~; z; A. Y
      }else {, [  v- U: O  B' T5 N5 z
       ItemProp* pProp = pItemElem->GetProp();
, Q  o0 a3 p- q- {8 N       vItem.dwKind2 = pProp->dwItemKind2;2 |8 y/ L) Y( e4 Q
       vItem.dwItemId = pItemElem->m_dwItemId;' F& n, Q- ~! l0 }5 t9 |0 {
       vItem.nIndex = i;% }3 @, V$ s+ F% Z! b7 T9 x5 M
      }
) z) |  q8 n, O      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; F! S- W2 x/ g     }" v. w  T9 G$ V& j6 y. b
     //////////////////////////////////////////////////////////////////////////" N( M, g: @1 A, @2 f- X( E% ~
     sort(vItem.begin(),vItem.end());//排序5 L2 }* `4 u( j7 B# S! V; z
     //////////////////////////////////////////////////////////////////////////
+ L/ L5 ^+ f3 [( }1 k: }( p     //交换; h" s2 S' b( l; u$ _9 `
     for (size_t i=0;i<vItem.size();i++)- M" e# M8 O; G( r
     {( U7 _9 y& K! o9 r
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# i# L- y) ^) C* ~" r      pInvSort->Add(vItem.nIndex);( m6 c2 S" B) Q0 H
     }
. [, ]' G5 l" z' l+ `% t0 J5 Q     BYTE nDestPos = 0;
0 r! @4 f, U; U/ a& r- M! a     for (int i=0;i<MAX_INVENTORY;i++)' w4 }7 c& X; {& Z# O! a
     {
0 D# O# }8 I  n      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
: `5 F/ _+ B1 a1 ^      if (pItemElem)
+ v- C. q+ @( \4 F2 H      {
8 C9 I5 N6 v9 @- G7 F  F       if (IsUsingItem(pItemElem))
( I" E8 O7 }. t6 G' t  Z       {( l5 v: J) @1 @6 t
        //这个位置无法放3 t0 Y' ~) j$ _. [2 ]" Q3 @* F8 d7 U4 y
        nDestPos++;
- f' J: h1 t; W       }; V" s9 d! }/ c5 W" j
      }. w7 Z& S) Z+ D  K7 D5 E
      BYTE nSrc = pInvSort->GetItemSrc(i);  W5 M/ R+ O0 _1 ~
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);, L' }3 R7 v5 J- Z9 ?
      if (pItemElem)
6 y2 b" P$ P  F! m, O      {7 q3 R9 N% y$ L- e& K  ~  u3 B# n
       if (IsUsingItem(pItemElem))
) ~2 H% h7 A* d& ~* p/ V: ~+ a       {
* @7 T$ W9 ^& t5 L7 A% j        //这个道具无法移动,跳过
) n! p6 Q% w9 n  Q) R        continue;
' v6 A5 X* e6 }       }" Q/ B) H. i, h- z5 {  |
      }else{8 E" e* L1 l- ?# Q3 S
       //空位置 不用动8 y  y; W3 V6 f' D/ G
       continue;) @5 ~( _- L! C) V0 C- B+ ]
      }
. Y, D: M  Q1 e+ X# t; b& V1 }      //////////////////////////////////////////////////////////////////////////, I; i. D1 p& C$ d2 X& d6 t
      //开始移动
2 T7 @$ k( N) y6 a: x' i7 ~: u3 C      if (nSrc == nDestPos)6 q6 D, }; c" Q& Q
      {' P/ F; b7 V' \% L5 t! |( M$ G6 f; h
       //原地不动- H6 ^. K' P8 r7 r8 G
       nDestPos++;
4 ]5 H, R. l& }$ _" V, L! v7 t8 R       continue;; o5 a9 ^! B4 Q" o. u
      }
5 S5 V9 L0 I( Y* Z+ {$ i, f      pInvSort->MoveItem(i,nDestPos);
: L( s9 P$ P& F2 k) I      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
% Z( h% M: a: [% `5 C; B& `      Sleep(5);' u* ~) C2 \' y9 r: [; g# r
      //Error("移动 - %d->%d",nSrc,nDestPos);
& C5 r8 M7 v# j$ A6 E# v; _      nDestPos++;
' f, S4 s9 Z6 {" j' D0 `     }$ A) {- E+ l! {2 ^. h8 R
     //取第一个元素的信息8 _4 \" ^6 F& w
     /*0 G4 p& [  g9 s8 H( m3 L% [. T
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)0 j% r. e- P, V
     {: f3 w2 Z4 @# ^+ @2 M
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);% w5 Q5 x0 f, b3 y) ~
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
) A4 `% `( A0 C7 ?; b; s3 Q7 }     }
' w% n  d0 Z5 \0 n     */8 d' v6 T' z9 x  ~! N
    //////////////////////////////////////////////////////////////////////////
5 t& W) {# u$ }! T# s  H4 E" ]    break;. F) N6 `/ G6 f5 I) F$ M
   }
) k* Q4 o2 a) b2 H) y$ ~* k  } + V$ S% \' u* n3 S" [& L
}
& F  v0 B- z0 e/ sm_wndMenu.SetVisible(FALSE);
) c( _. _/ o% h8 F  V/ |
! ]! R0 [9 N, i- q( i--------------------------------------------------------------------------------------------------------
& ]9 S3 k. J& j, b搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
$ \( @, B! N0 }{
( H( |3 \! H, \' M+ rBaseMouseCursor();& Z/ f6 [" P1 F8 B; Q' n( Y
}. Y: E& B; }5 f9 u: Q- F: u5 i1 a' |" I
在其下添加:
; g" ~* ], d3 W% p! \void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)3 s- c8 M" @$ D7 f
{0 @# G  X+ n2 }0 ?
m_wndMenu.DeleteAllMenu();
/ g% i- x( [0 u; m. Lm_wndMenu.CreateMenu(this);/ `6 F. J9 {/ t& y8 }
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");* @; ?/ L+ R3 L+ z& z  i

5 S3 Z) ?  P* B- w1 [8 mif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), K/ |% I0 D# K6 r
{8 E) o, c$ W% T
  //P以上级别才可以删除所有道具
- G% v. l, T- i/ w0 ^# w  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");6 I& e6 b% t- l- k. p- A7 K, G
}& W9 W% G6 b- E) B* ~/ T% c
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );; U: Z1 P5 ~0 ]: C6 Z2 w5 |$ @
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );% ?4 {1 I. V5 Y3 d3 A
m_wndMenu.SetFocus();
; \7 H& E7 G8 r3 m7 s  ~}
& q( |5 W7 k* J6 J  F------------------------------------------------------------------------------------------------------------- i, c% T, c5 y
*************************
( ?5 R5 h3 z+ q6 h" @( d5 iWndField.h文件3 Y# P# j1 X9 @+ c
*************************
& I: |. _" G9 b8 t# \  j2 a& F) R搜索:BOOL m_bReport;
" f4 f* A6 ]  ?) ]其后添加:
2 ^8 M, b9 N* W) S/ M1 gCWndMenu m_wndMenu;
) X: n% j1 h' f5 d! Q$ a" F搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
* _; o0 i! @/ D( Y+ \9 _其后添加:% z! W1 t) \9 N2 D) h
virtual void OnRButtonUp(UINT nFlags, CPoint point);# h+ }! ?" x' Q' q/ V
0 }  o# a# T5 a& b+ X) d
- W0 I' v( g1 }3 W& a. ?

相关帖子

回复

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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