飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件  K. X1 j. o$ Z# X; f  [
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )9 |) b8 P4 u+ I2 j* o: `6 B
2 g2 d3 x& o- k& q: E. l/ d  i
struct sItem
) y. C/ S& V2 j" M' o; Y/ Y2 i{' D2 {* a9 H: x' b8 h
DWORD dwId;% {" ?( {3 E8 b; k( e
DWORD dwKind2;2 `1 o+ I+ z/ \1 S
DWORD dwItemId;
. p0 B! E; u3 X$ `, `BYTE nIndex;7 S8 X. r8 X' b9 R
sItem(){
8 W% ^7 B* e: \& J# y+ C2 o* R  dwId = dwKind2 = dwItemId = nIndex = 0;5 ^! x* _0 E9 `8 D2 {) W
}
. p* J' r5 {$ g3 Q: j3 x- }bool operator < (const sItem p2)
& H5 f' P+ c- T- N2 D( v  u{
+ z6 E  a' i1 L$ }  if (dwKind2 == p2.dwKind2)3 u& l' P% L/ e: ]
  {; d1 p$ h, I  v9 Q' S5 w4 ^
   return dwItemId < p2.dwItemId;* H& S* I& P' Q3 }) H+ Z
  }else{
. V8 W5 T; r/ q! R  a6 T   return dwKind2 < p2.dwKind2;+ s9 p9 ]1 ~, r: y4 Q: j
  }; D- J% ~8 X! v* q6 Q( z
}
/ a- j. P4 n' N+ J4 y* o" P. ?};; v+ j1 u# ]) i. n
class CInventorySort
6 b5 ?* b  O5 M2 i{
: x% V% U0 c. b2 Q7 B/ ^  v! h( dpublic:
& e/ v9 y- o2 P7 G+ hCInventorySort(), O! H' Z; b% v
{8 P! \8 l9 d5 Z) q  {- p7 I
  m_dwPos = 0;
. @& x3 z9 \6 N* `# U% K* y}0 r9 }4 W; Z' S5 Y4 K& j
~CInventorySort(){}. a# X% i! m- y! w* l9 q9 q
private:
; m2 s( }: n; H9 E2 XsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
8 C+ L+ x& G9 B  I9 d2 ADWORD m_dwPos;
! W* ]2 Z1 I6 ypublic:; W2 S; o3 ^2 F" h. c& e7 ?7 S
void Add(BYTE nIndex). F+ c2 S8 F+ V
{# f' |1 F: o2 p4 J6 T$ J4 }. c
  if (m_dwPos >= MAX_INVENTORY)
# A  y# z4 S/ R4 ^  {
5 w( D' n& {; }3 F. `# q   return;: I( Z" ]  K, o2 b  E
  }
. \5 |+ I  d( F  m_Item[m_dwPos].nIndex = nIndex;" L+ L! e' ~8 f: M
  m_Item[m_dwPos].dwId = m_dwPos;+ S$ H/ Q% o/ u9 _: f8 ~- N. l  m
  m_dwPos++;5 n4 C0 z5 U. }7 |2 U& k% y1 T
}
2 @( I/ F; d5 @BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列/ U4 ~$ Z. L5 L  N3 j: w
{
0 ~* ~, X5 {" s- G( O  for (int i=0;i<MAX_INVENTORY;i++)" S& t) |0 E4 ~$ ^: B& t7 u3 K
  {
$ P1 Y& c' D6 P/ _! x  r7 @   if (m_Item.dwId == dwId)
! c& R8 x5 X1 \   {
# ~& o: C( [: a( E% ?$ B    return m_Item.nIndex;! Q% c+ y) R6 n' X# m2 I- p
   }
" B2 f3 {# |$ [( J' p( X6 q- x  }* [  n4 a0 {0 Q) F4 g; k
  return 255;
* j3 |5 \3 d3 }, c}& e9 `: g) R- O9 I
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置  v: t  T  m9 Z' `4 E6 T
{
$ @$ z4 H1 I, p3 K8 I+ P3 V  BYTE nTmp = 0;
1 I# y- h" x/ m6 ]$ S  bool bDest = false,bSrc = false;
0 `- j4 p7 q" x" U) s4 m  for (int i=0;i<MAX_INVENTORY;i++): w7 o+ Z4 T/ v6 \8 ~* a$ ^! C; D% I
  {
# j+ W) v" j. p4 T2 b   if (dwSrcId == m_Item.dwId)
! [$ R3 k6 J/ Q   {, G8 u% G. e! K( {) `1 r  g
    //id相等 则 改变对应的dest和src, G, d* c; k7 ^0 N4 D9 N: z; T6 S4 |
    nTmp = m_Item.nIndex;. B: l" a! c0 X% k. ]) N
    m_Item.nIndex = dest;
8 _- z/ |  h" j   }
* y3 j* j" Q7 i  }6 }/ L7 |/ c) G) z- N
  //临时数据保存完毕,交换开始& k; |  y% |9 _
  for (int i=0;i<MAX_INVENTORY;i++)
% S* \( s/ C/ [7 N( \5 T" h2 Q  {
" ~! {5 T5 h! C: m   if (dest == m_Item.nIndex)
; ~% p7 {2 E  I6 z" f, M9 \+ ?9 z/ u   {
/ c  i' h" z7 O4 t. c" I    //id相等 则 改变对应的dest和src4 N9 G% F* x! ^& [6 {/ q
    m_Item.nIndex = nTmp;
) b1 _0 c# w# M0 N% X' b: j! F) c; B   }& T6 p- w% w" ^6 |, l
  }
9 e+ u* l! v/ a}; t# L: w. e$ k; U9 B
};5 v7 J0 u7 _/ I" o# G9 j1 \& G7 @' ?
-------------------------------------------------------------------------- O% U0 j$ ^$ A" a, K) R
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
# A$ E3 ~0 s2 t& R* g搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
' g+ A# w! H* J; e紧靠其上添加:- p* q' W0 Z; C1 N
if( pWndBase == &m_wndMenu )
( h1 _5 r: J% j( w{) C7 ^9 G  \4 t. T! z
  switch( nID )
( w" Z" K, m+ u( p: r  {
# b* z0 b  }6 _/ {1 T" _9 F: k  case 2:
9 e9 Y$ `" r: v$ W, H   {1 k! C% e9 a/ C5 e' S0 z8 U$ t
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
4 r6 P$ q, m0 n4 {- z& t    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))( M- k, f, l# ]; V8 W% L1 N5 c% Z0 }
    {
: K) s1 n6 U1 i     break;
2 k% U' [( ]' W3 x7 v7 G2 G    }0 Q* {) v- \2 `8 V- K* ]
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)( |) `* t. ~+ \
    {1 A. l" p, P: {: |' P  y0 q0 g
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);; ~" v: s0 d$ [  O$ ~
     if( !pItemElem ); F  S. x8 `4 m% C) l
      continue;
8 m. O( a: |9 X: e& [/ E/ I     if(pItemElem->GetExtra() > 0)
- N; j  Z, i: [  v% Y' G      continue;  N! R- ?7 C4 z- h
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
5 [5 t+ M* o3 P* E5 R  w. A      continue;$ Z4 `9 g9 o4 m& U2 b3 f* i8 ^# ]
     if( g_pPlayer->IsUsing( pItemElem ) )1 @; y: ~0 F% o  G: n0 _
      continue;3 p; P6 S* h+ o0 g
     if( pItemElem->IsUndestructable() == TRUE )
# c9 n0 t& ^; ]' x, I, B     {/ T! P% j, J! R
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
7 ^, w$ D6 D2 ]% n5 L! M7 S      continue;) N) K; @  r) l: s
     }7 I. n9 |" v* w8 ~0 C
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);, h! q- z) r) V8 w' {2 V  P; L
    }5 P- @$ a& b6 R8 d0 m/ j0 ]
    break;
7 I  `! T* c" ?& h! W' s- y6 K. d   }% c  k: Z3 b% q& b
  case 1:! ?, v- U; u3 _! T, j
   {* `1 c2 I% d3 K2 C2 ^6 E$ S
    //整理背包
9 g, U0 ^! O2 Z% l) S' ?    //////////////////////////////////////////////////////////////////////////4 m- z. _& R4 y$ x. H! J
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );6 ?/ R5 v% o5 Y5 l5 U
    //////////////////////////////////////////////////////////////////////////
& ]8 Y2 W; y& q- q! L3 {    //////////////////////////////////////////////////////////////////////////- {3 Z3 {& Z6 \/ H0 H0 R2 ^
    CInventorySort* pInvSort = new CInventorySort;
- @. G8 b/ y) q0 Y; D    vector <sItem> vItem;4 M+ X1 z% _: M. `! t
    vItem.resize(MAX_INVENTORY);//初始化大小6 i) e: ?& I: R5 ~* E$ W
     //////////////////////////////////////////////////////////////////////////
# g4 @0 s6 T' i2 l) w1 @     //填充数据
- C( ~+ x0 E' T( `) \4 \" |- \     for (int i=0;i<MAX_INVENTORY;i++)
+ S+ ]+ n9 L& u" [; \     {* x' l% o( k/ {: G# m
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; Y9 y" W9 `( b; y- Y      if (!pItemElem)  o% R, \; R4 S8 O! v8 f& E2 g
      {
- l# q$ @: x7 P) E8 }5 ~       vItem.dwKind2 = 0xffffffff;( S3 r, V/ P2 \0 `& m4 I
       vItem.dwItemId = 0xffffffff;2 Z9 @. _7 O% L* M$ |3 r
       vItem.nIndex = i;8 E4 q6 @2 \/ T" o8 q" J
      }else {
- D6 Q2 [( Z3 H. Q- i" v/ z       ItemProp* pProp = pItemElem->GetProp();+ o( t' v6 A* K" F
       vItem.dwKind2 = pProp->dwItemKind2;% r/ s; F9 b0 ~1 t$ |3 ^, ~. v
       vItem.dwItemId = pItemElem->m_dwItemId;
7 ^5 C& }8 i$ F       vItem.nIndex = i;5 i7 T; F% _  F  {2 B* {6 k
      }8 U4 Y. z! H# g5 t" T6 d. O
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
0 n0 b2 [& A9 b1 j- W  Z  z: {+ o     }5 V9 _7 t& y  E& w/ o2 j
     //////////////////////////////////////////////////////////////////////////3 D! ^% r5 I+ R2 y# f" _# X5 p
     sort(vItem.begin(),vItem.end());//排序8 p% X; V& E: ?: M7 H; n
     //////////////////////////////////////////////////////////////////////////& N! b3 b0 v# w. @
     //交换
: k/ F4 a0 z( f! h0 y8 b     for (size_t i=0;i<vItem.size();i++)
+ d4 r: `" }" @. m+ r6 _5 U     {
5 e8 O* y9 k3 @2 y7 d/ y      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);# M9 n+ |/ i7 L7 x; f/ o+ U2 W* V; {
      pInvSort->Add(vItem.nIndex);
0 e: E$ Z9 f5 l4 ?* |$ i) J( L     }9 q$ d6 C, v0 j* i1 {9 `5 X
     BYTE nDestPos = 0;
; ]* D6 {4 ?/ ~5 Q     for (int i=0;i<MAX_INVENTORY;i++)
1 v& y1 Y2 V4 `9 H/ X  Q     {7 Y0 o. {: k* u- F' N4 _& F
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
+ f9 o: W6 m& U4 O5 O5 A      if (pItemElem), Z3 r. N" ^7 H
      {
. o* K4 W/ H3 o5 I- H       if (IsUsingItem(pItemElem))
9 |) i. I6 S9 p       {# U5 b* S' c, y) Z8 M
        //这个位置无法放: y% g$ _- X" G6 X" x: S% `
        nDestPos++;3 {4 g+ @6 s- Q) A" E6 l8 g
       }
! N# b* k( Q' ~5 p      }
0 i. P2 V* w; _+ y' ^7 V) e( R      BYTE nSrc = pInvSort->GetItemSrc(i);
- G( u3 d7 w$ B( O5 l0 B+ b+ I      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
7 ~' C3 P, x& _9 \3 _8 Q) `      if (pItemElem)
: K; g3 x' O1 j; f/ i, F; Q( [: N3 ]      {. r' P5 {4 \6 v" G. ]& W  a
       if (IsUsingItem(pItemElem))$ i# c' t3 u+ W
       {0 H  }: y  F* Q. C) d, o% t+ _
        //这个道具无法移动,跳过9 |/ @0 T0 ?4 [6 D  g, U
        continue;4 b( V. c" O& E% u, ?$ ]
       }
3 S' o7 @, U. v# }      }else{% S( S, h; H6 ~2 q+ |; p6 z  ?
       //空位置 不用动
) \4 _- E( W: _* V       continue;
! C, Z5 ~% Q' {7 |% s' a! P. q      }5 k+ Q' U4 S( I2 O
      //////////////////////////////////////////////////////////////////////////
" A9 X! r% P* o      //开始移动! ]- E7 c' p/ j5 O4 W, n
      if (nSrc == nDestPos)
5 f2 A& y$ B! j2 F- {      {
4 K* Z6 G) _5 e7 A       //原地不动
" K3 X- y" y. Q1 ?       nDestPos++;+ I4 Z- m& h' p0 z& Z* i% n9 j# u
       continue;
9 J8 g. Z4 r+ E1 }( q! ^      }9 I* t4 b, s! M7 M1 a
      pInvSort->MoveItem(i,nDestPos);+ v) s( V5 F+ M
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
, d' s1 n+ K7 O; x7 ?' x4 C# Y3 m      Sleep(5);& H0 u  v, G3 J7 v* G
      //Error("移动 - %d->%d",nSrc,nDestPos);
- A* m. v" {& p: S* ^      nDestPos++;* P) k: I! W: R
     }) Y1 f) w8 R9 {; l& k
     //取第一个元素的信息6 K/ Z8 ]# P/ i/ O  Y" D) S+ h+ n
     /*+ E, W$ Q1 \3 i( s
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
! ^! |5 T7 {! T1 F7 X0 O     {6 r5 R; Z6 B$ i: f2 `# `' G
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
. N) Y7 T; I$ J, A! @      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
1 C4 g( s# ?5 w     }
% r, s* l* E$ U2 G8 M4 A% I5 e     */0 d/ W+ r3 F& t+ o/ G4 K: e
    //////////////////////////////////////////////////////////////////////////
% {' i& ^) h0 H7 W. S& V    break;
- u6 }6 h8 O. P   }- `4 e; m% \1 l0 n) n5 w0 z& a/ s
  }
8 h- q( P# g% I: c4 }+ U}. D* S" I8 {+ Q
m_wndMenu.SetVisible(FALSE);
# \# _' F6 L* w1 k" X
# t4 a9 f/ S/ g! F/ h& B5 a* W--------------------------------------------------------------------------------------------------------
4 l$ b6 }* D; O  A/ R9 K2 r搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)! U) m6 L# f; \' _: J5 _
{
% u1 j$ m9 V5 Z7 P6 XBaseMouseCursor();0 d0 E  Y" a% L6 d& R9 v' f, V9 S
}" L; u) x3 o( }
在其下添加:& X# ^+ z% J; C: z: B9 z
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)5 S" [% G: O* t: ~& i* C$ Q
{' S$ S/ y/ ?" N2 |. O
m_wndMenu.DeleteAllMenu();( t0 j( t5 u( n
m_wndMenu.CreateMenu(this);
: j1 h% t. B6 U7 R; ^( [m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");) \" {0 `+ s+ N- ?6 C8 K

) v1 F+ f6 B# R2 a/ i# w% sif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))2 l0 N. l, Y6 q* h8 o0 l
{2 a8 a. D% E4 N
  //P以上级别才可以删除所有道具
/ q3 p8 f# _# e* f+ t8 U$ @8 o  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");* L% d( J2 P" r: a  y" |
}
. s! [- M7 w6 t% Am_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );! V( o8 Z' a! P) _/ z
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
2 P2 D, w9 T4 i& t) rm_wndMenu.SetFocus();
5 q  `4 k  O/ W}
# h5 C2 M# T& C9 F- c. ?, @1 T------------------------------------------------------------------------------------------------------------
( G& O' F0 r* |$ T1 g; X*************************
, R/ |0 ]4 `7 a7 v+ q" ^WndField.h文件
9 _/ w0 Y/ B1 P% z5 S/ D*************************
5 `7 k6 M4 s. p; W5 {搜索:BOOL m_bReport;
7 G/ x4 q# F* s其后添加:
3 P7 a0 ?) x- q# NCWndMenu m_wndMenu;- H5 _  d, F" {4 ?6 f! R
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);$ c6 \  f8 P/ a4 ~) h
其后添加:
- j+ H% h  g/ ]5 h) z- dvirtual void OnRButtonUp(UINT nFlags, CPoint point);
' m& X- }9 \1 _- i2 P# u1 T' G! x! B* d. ^7 [/ O

4 V* o  I# J( K

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-11 21:57 , Processed in 0.062887 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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