飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件# V) E: W+ F- i! `, Z3 Y
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ), Y  a, U* i# v# {' Q0 J/ K

5 z, p7 ?, U& G& h+ }& r/ s- c$ dstruct sItem
: A) Y. V6 p4 k( i$ w{
$ N" E# t+ t( P" x0 h: bDWORD dwId;
+ n9 m5 t( r9 G; v/ T% yDWORD dwKind2;
: A: Z4 o3 t4 f7 mDWORD dwItemId;, F; Q3 ~! S2 G# L1 v5 b
BYTE nIndex;: C1 q1 F: ~7 W( h9 v8 p( b
sItem(){
6 R, ]0 n1 N0 d# I+ B  P  dwId = dwKind2 = dwItemId = nIndex = 0;
% L% j& \$ Y) @, @}1 n6 I  `0 X8 w5 M6 z: d+ _+ K- v
bool operator < (const sItem p2)1 Y/ @$ I4 Y$ D9 I7 U
{. m* i5 e* j$ D( B2 b
  if (dwKind2 == p2.dwKind2)+ l) L0 N. `) d; W2 ^
  {& V. R+ m2 b1 F$ {; _  f
   return dwItemId < p2.dwItemId;3 g2 a  w, P" B" [' p
  }else{: ^  g7 B. ~8 e, y5 o
   return dwKind2 < p2.dwKind2;
9 X9 q; N% K* _$ a  }
# w- b+ U0 r$ @) n: i1 L' h- A! v" R}
. x; k  m6 q! ?- z};
. y% o1 C$ w( d) [, X/ W' Sclass CInventorySort
# w) z2 m3 U6 F3 W& o% D/ z{
4 \8 h, Y5 F! epublic:& p9 u3 [; F/ Q! `3 h0 Q! D
CInventorySort(). f0 i3 E2 S, l* |' p0 J5 A/ y% R9 g
{+ ]! R2 {8 v+ V- s& R5 x; L6 I
  m_dwPos = 0;) v* ]& \: f' O+ u. i
}
) @0 ?5 c" C, N1 h* ^, I~CInventorySort(){}
+ Y9 Z, d& W, tprivate:5 J# q5 Z) W- t
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
0 `) k4 z! q5 L" EDWORD m_dwPos;3 W& R; m% `7 B; ^- p* i7 B/ R' d
public:) f0 Z' q/ H" w6 ]" k0 ~
void Add(BYTE nIndex)
/ u7 Z$ i1 K- a; C7 ~{- D4 \8 b: j  ?+ J  h3 k4 s7 }
  if (m_dwPos >= MAX_INVENTORY); c! q1 R! f9 y, s8 n) ~
  {# t1 Z" Z/ T$ e% Q# ~  ?" u
   return;1 V% `) C% w7 C4 O4 s
  }) S7 v" G  n, |) O1 w
  m_Item[m_dwPos].nIndex = nIndex;7 W/ z) g! u3 @. O, R
  m_Item[m_dwPos].dwId = m_dwPos;% V% i  G& l: U& K
  m_dwPos++;2 w9 F* n5 }4 {# k3 n) |( E. s7 I  P
}
, D  g. u8 @5 SBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列/ N  ]" B; G" P9 }; B) d& p2 y/ S
{
, [7 N& G' u5 O7 }- @" V/ d  for (int i=0;i<MAX_INVENTORY;i++)7 y, e; g' U* U0 F
  {
. _4 D* S, h" d! T+ n   if (m_Item.dwId == dwId)
9 T9 Q2 E1 @  S: h' S+ z0 U   {# ~& h# z3 i2 T: m' G5 Z- u* o; @
    return m_Item.nIndex;
, w, o; A' i( [) t   }
2 x9 w7 b, h1 H1 H* d8 o  }
! |7 M) B7 W. e7 Z  return 255;
) {5 Y2 x6 Z4 f+ X7 m# |}
3 A/ E0 @: O# {void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
2 U/ H" e% A1 s3 `: S* z' j{6 f. y  o' q5 D7 v
  BYTE nTmp = 0;" C, A$ h$ T% H# V- Q
  bool bDest = false,bSrc = false;0 K! d' K4 h! U' ?
  for (int i=0;i<MAX_INVENTORY;i++)
5 O0 w1 [) I. P1 k  {
  a: o5 w9 f. i2 {# K, m  W   if (dwSrcId == m_Item.dwId)
; F" @4 L3 e! `: \' S- d3 F( R   {' @4 r, k2 W$ }/ _4 S5 \9 W) `& a
    //id相等 则 改变对应的dest和src
$ Q1 T$ ?8 j, F3 k; i% r- J    nTmp = m_Item.nIndex;
) \( `( d7 }7 z7 w    m_Item.nIndex = dest;- E/ u; [- u0 s: Z' U
   }
1 j' U1 b0 R  K( `$ \7 q  }, q5 V6 P: D8 @% P# @) m
  //临时数据保存完毕,交换开始
8 ~5 Q/ J( ]8 n  for (int i=0;i<MAX_INVENTORY;i++)
  ?  r% g; [$ f% c! v- v  {
5 S: U7 U& V7 m% u! ^$ R   if (dest == m_Item.nIndex)2 h+ t) N$ J5 n9 E! b
   {
) C/ L/ V' r- ?    //id相等 则 改变对应的dest和src+ i# k: B4 w( `, Y/ ^: i9 g
    m_Item.nIndex = nTmp;, r. I  E9 ]; G
   }# S8 q  ]. _# g% w: u7 }8 L
  }
" |5 c2 C& I4 K1 _- b% N}
! w! o  l/ c& [0 R& l};# E/ z" I( g9 c$ `: g
-------------------------------------------------------------------------
4 \' D# P  S# D. K5 Y依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( K7 A2 Y- j$ B% ~) w# j5 u
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);; j8 s2 f* C* W3 v5 G
紧靠其上添加:
( ~$ V: O# d1 O3 n9 o+ zif( pWndBase == &m_wndMenu )
& A8 e7 a* R0 T) Q' l( x{' [  `! \+ d: i: [/ U
  switch( nID ). H% x- a; w: k
  {% m* @7 @- u, M& ^9 p
  case 2:
* c' f1 I- N3 d  V0 q   {
$ x, Y' g. z, I    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);; k9 i7 a2 P5 b4 i! g5 F
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
3 m% n6 J! k7 w7 a  }& |( H& W    {
1 N9 f, g+ H% C* o     break;
, a5 [  l' Z; L- E! v& R    }
2 ~  n. n+ q: q/ c  N( j    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
0 N+ F% ~* z3 w* H) E/ n, A    {- y& l* h. j& H! K; }
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 O* ^& I$ k8 h) W4 Z1 @     if( !pItemElem )6 d% `. E# v6 B/ R" f, N  {' g
      continue;
& k& I/ N5 s3 e8 r9 m     if(pItemElem->GetExtra() > 0)8 `5 {4 R+ |5 [% r5 E9 T
      continue;
% N; w6 K  ?3 b9 u     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 2 D5 F& Q3 F4 j% p3 _9 f) v+ T
      continue;
: R' z+ ~9 x2 I9 M0 ]! [$ @     if( g_pPlayer->IsUsing( pItemElem ) )
/ t' z1 W, g/ T4 y( F      continue;2 |' i- |* {1 R* s
     if( pItemElem->IsUndestructable() == TRUE )
) @9 G) R% @+ n! I8 T0 Z( J% T     {
/ A% E) E( n" k1 `      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );" Z, U5 h2 ]" ^
      continue;) U- q8 C- ~3 a" V. K/ o
     }
2 J2 c7 g; l1 v) x2 l     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);, ?, {. Z# S3 o. U
    }5 k$ y: G+ C0 z) ]5 A* e0 I
    break;
1 I* z0 k5 g7 d8 ?* s* q   }
' ^) V# s5 C, }. t( d1 G4 |2 y3 N  case 1:+ ~: j% O$ s: n' b
   {% N$ |( f% N1 x7 t) e0 T: s9 Q0 `7 q
    //整理背包
8 ~, z5 P* F( A" ?6 z3 C, y) ~: h1 {    //////////////////////////////////////////////////////////////////////////
7 H: s$ q; _& y8 M: g3 |& w! _- j    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );( V, L" |# z/ c0 i7 |
    //////////////////////////////////////////////////////////////////////////
' G  I% S0 \+ M+ G7 L+ l    //////////////////////////////////////////////////////////////////////////
) w% B5 y0 [! g4 ^0 J6 x  H    CInventorySort* pInvSort = new CInventorySort;
# m, [) N/ l% b% h" {    vector <sItem> vItem;. @- m$ p$ R5 T* K1 v6 S" ]
    vItem.resize(MAX_INVENTORY);//初始化大小3 Z3 _7 O+ T' m' {' Q
     //////////////////////////////////////////////////////////////////////////
' C, b5 K  G0 u6 j% `  t     //填充数据
: Y( C; o$ H% e; f     for (int i=0;i<MAX_INVENTORY;i++)
. C) b: w# W7 C     {1 y' e) Y  Q9 T/ d6 L
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
8 f/ r* c* K8 g/ I+ I( e5 J$ Q2 V      if (!pItemElem)
( w; Q  y$ I3 j0 {2 a5 T! G/ ?; K% s      {" D$ [$ W; k: J/ l0 r4 w- _/ I
       vItem.dwKind2 = 0xffffffff;' [6 n. a# W. p5 z' d
       vItem.dwItemId = 0xffffffff;
/ J2 Y$ b7 S" Z0 j       vItem.nIndex = i;
( _+ _. N8 c5 @3 n: C5 t" E2 a" r# x# B      }else {/ N$ i' I% N6 @& s
       ItemProp* pProp = pItemElem->GetProp();9 @  j8 v3 S6 r* p0 O4 N# e
       vItem.dwKind2 = pProp->dwItemKind2;7 c, t6 _+ A$ b# s
       vItem.dwItemId = pItemElem->m_dwItemId;
: a/ ?7 F9 |  R3 N6 s" f       vItem.nIndex = i;
" x! L$ B7 M: l! V0 @) N# h      }
: `/ e( N9 F! ~+ @: U& z      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' j* q6 M5 K1 m- ^2 I$ K, h
     }/ |5 D2 c3 t! x5 U
     //////////////////////////////////////////////////////////////////////////9 a9 k4 }) _) i0 A5 o( {
     sort(vItem.begin(),vItem.end());//排序. N: V0 \% K5 R& ]; F2 M
     //////////////////////////////////////////////////////////////////////////
4 Q: k1 y# p  N. Z6 |! Z; U1 K     //交换
& W6 e1 }3 L+ X) k7 p     for (size_t i=0;i<vItem.size();i++)  W% s# ?- `9 I/ n/ H0 j
     {9 R5 g" g; C  I6 V3 M; w* O' r
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 R* X. I& r5 z! z) D+ h1 [
      pInvSort->Add(vItem.nIndex);
4 ]" {5 x5 Y$ ]; D     }
+ q: {( b# d0 \2 L; E     BYTE nDestPos = 0;
; q+ |: F- Q' C* w     for (int i=0;i<MAX_INVENTORY;i++)- Z% J7 r: I4 ~0 g  M
     {& n3 V3 o/ n. p- ?% G( A
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
: [7 x# Q. f( @9 k      if (pItemElem)7 p' Q3 D4 S" m$ S; U/ f/ G) s8 I
      {: K6 a1 ]( R& k  g5 s' \/ a
       if (IsUsingItem(pItemElem)): H8 A+ e% x% a
       {1 p. q6 A# L+ j2 F
        //这个位置无法放  \; c* T5 E2 }5 A/ E/ G: [
        nDestPos++;( X% i& t9 o: P7 m5 A
       }
) \3 Z& z: s* o7 E3 h8 R      }! ]: Z1 ~3 U( [  w( G" D
      BYTE nSrc = pInvSort->GetItemSrc(i);
! s( T, {# w! i+ U      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);' `3 Z1 v3 p/ b# r* i
      if (pItemElem)
1 Q  M1 _7 b) d      {8 r' \7 \( Z$ K& x! N0 H3 s3 s- w
       if (IsUsingItem(pItemElem))
! A- t8 q, Y: ]" v% y7 H. H+ Y/ i       {. O0 n6 ~, O- T1 H  R' K) _
        //这个道具无法移动,跳过' W9 _3 V5 F1 @; D6 ]* z
        continue;
& ^, T9 ]1 `' ]1 D       }) l  y" i) b' s5 y9 ~$ [) H
      }else{, C5 v% B' k) p' R+ o8 C
       //空位置 不用动) \" I9 d; D5 l3 v
       continue;
: d4 f9 f; x4 i) A# J& n      }
6 R' s$ k! E7 S* H$ K9 c( `/ A9 N3 }      //////////////////////////////////////////////////////////////////////////
2 B6 `4 s3 R- B* @% n# D( m" ^      //开始移动9 |! d& ~, j. v! I) ?; W  f: ~
      if (nSrc == nDestPos)
5 T0 }* Q  n- v7 X      {8 Y5 L1 ~* S  _4 T' l
       //原地不动/ y1 }6 ^" i( f; ]1 Q. l9 U9 L1 X- @
       nDestPos++;
. L' A2 ?: m( a0 i  h# ~! k       continue;
1 @2 d3 o8 q6 x2 i$ I. i      }* k0 {7 y7 q% a7 @+ M" u
      pInvSort->MoveItem(i,nDestPos);, G& F1 ~- m# l- T" X3 S$ ~* ~
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
. h$ |# \4 [0 ~      Sleep(5);
$ c/ V9 [6 H9 ?. b4 o      //Error("移动 - %d->%d",nSrc,nDestPos);# s4 ]2 \' K8 D" A3 H
      nDestPos++;
+ q" c6 g+ t. A7 c# k2 O     }; [6 p% g& w$ Y9 {! j
     //取第一个元素的信息% d! j, A* o) m( E
     /*2 ^6 N* m2 [  S% k2 t4 s/ n
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
3 O4 Z4 f: Y" D" N6 R/ S     {1 s$ i8 `- m- u7 d: R# Q4 E
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
7 Y) D) m1 S7 `3 [- L      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);3 ?/ @! ^" s. o% w7 h
     }
: _1 t+ C* h  T1 J- l     */$ b# _3 x' ^  c2 c* g1 g- C
    /////////////////////////////////////////////////////////////////////////// L8 ]. {% k2 p2 n. b/ U
    break;
* [! K2 f7 U7 j- U   }, p8 g% G/ {  s$ F5 d. E  |7 N3 l
  } 7 L% O  }4 I  G* V
}
4 v' G5 P7 O8 Y4 b! x: E& @m_wndMenu.SetVisible(FALSE);2 j1 p4 O- F1 e. Q- Z: i% [
. R/ k9 X+ |; R5 o* L" D
--------------------------------------------------------------------------------------------------------
+ K5 Q& q6 K; _& a# L# m搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)* G* [$ ^& L/ e* ~4 R+ ]# P% j5 d" Z
{
9 r7 s* }( H2 ]& E- uBaseMouseCursor();
1 X$ s% G4 y% B- c5 O* E6 @}# g1 r8 ?$ n3 h' z' m: U
在其下添加:
9 B8 a8 k6 d! H& A( q' G) Gvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point); u9 Q6 o! s2 d) }
{
. F) Y+ g9 a5 ^m_wndMenu.DeleteAllMenu();1 A, b: ~+ A- w, P6 M
m_wndMenu.CreateMenu(this);
" k7 e$ i- C0 b2 Km_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");. A0 A- G5 y3 \  M# o) ]2 B; z

/ f# r; G! {/ P( Z  wif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- v9 s4 J2 L" `/ e, N1 h+ r) p- {{  L# K. f5 l8 b1 f) Z
  //P以上级别才可以删除所有道具
9 ?4 }  E  P+ B* c3 g  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");  O( d! r0 B8 E9 Q) _5 f
}$ a/ @, N/ O5 M' _$ U3 L' u! O
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
0 s4 g3 n0 K3 W, tm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );8 F8 w$ ~( S# j8 C% K
m_wndMenu.SetFocus();/ H0 Q1 P0 Z6 [2 o  Y" W" g6 w( }2 g; c
}
! D% \" _# A% q5 R6 T  Q; |------------------------------------------------------------------------------------------------------------
) H+ G& F, Y0 n0 C) `5 I) G, H*************************4 s- c. h) z- X) a- j! T+ G
WndField.h文件/ a$ P( n. s$ J
*************************, Z& }( d3 `  {5 s4 w
搜索:BOOL m_bReport;: a- x( k3 y: ^% a
其后添加:
5 z  V6 e6 @- x$ w( K6 E& B3 U4 QCWndMenu m_wndMenu;8 _$ W! {" w7 k! |
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
) p  `9 X. Z9 c5 w9 u% c2 K其后添加:
' ?# o' |1 w% ^virtual void OnRButtonUp(UINT nFlags, CPoint point);
; p% R$ t2 ^1 y' I* }
  A  b# Q( M: j0 Y  S% Z( j0 V2 N9 Y7 A+ E" c' g5 x) n

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-31 09:16 , Processed in 0.064609 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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