飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
+ ]. \) h( T  }: y5 K搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% j( s6 P' m* n& Z, l3 ?: U
. T- u- x4 U* x: K4 h
struct sItem! i' W8 w& a) o6 A6 o. _
{/ E4 \3 B7 N& `4 o2 D
DWORD dwId;
" s5 C, t; J4 A% e; J+ ?DWORD dwKind2;
0 w6 z9 `2 J# G1 E0 RDWORD dwItemId;
6 |! O& X& R5 f9 l3 HBYTE nIndex;- Y; Q! g( M5 l" F: h; k
sItem(){# V! z; d/ Q% `3 O& {& X
  dwId = dwKind2 = dwItemId = nIndex = 0;
4 G8 r& I1 d8 R}
8 q3 x. U; S6 {) Ubool operator < (const sItem p2)
% f  I' f% @6 U& |{
& z0 u0 U3 r; R6 q& D  B  if (dwKind2 == p2.dwKind2)
: y  K- @+ b+ e/ ^) G  {
( _9 H7 ^( N6 ?  P1 c* ^   return dwItemId < p2.dwItemId;
8 w$ X9 s" @0 y# e' w. z  }else{
, I# m9 C+ g4 A9 ]5 D; I   return dwKind2 < p2.dwKind2;( N* `9 {! C0 ~, V. G: J
  }
" b9 r* V; Q3 {, J/ A2 ?1 U}" M3 j  e7 P  r1 |
};
$ N5 v" D& F( Fclass CInventorySort
: B% j3 p6 m% n( m+ `{) F7 T3 l1 @0 i0 {. ?
public:
1 R, B9 Z/ Z2 _: BCInventorySort()! W; ]- P9 E  R' c6 S9 W3 [3 x
{+ r& f* R4 T5 Z$ C, p* m. L) X
  m_dwPos = 0;( j) o$ U. S( {% l$ P0 w. H
}$ e" F2 t1 H8 |! F2 L
~CInventorySort(){}: f3 Y- g: b. L9 n! k* i
private:
5 u+ H% x6 i/ D+ n6 u/ M8 Z# VsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
& b+ U2 R: e5 v: m7 n' K/ h8 y2 pDWORD m_dwPos;
2 }& R* V, |& K( Jpublic:5 B9 o$ V: K( w! ~; r
void Add(BYTE nIndex)
8 O5 s  X9 d+ |1 E; s{2 m9 N; f2 C6 f1 A/ u& z, J2 d
  if (m_dwPos >= MAX_INVENTORY)5 y& e+ u- g  Z& Z8 a1 U
  {
- ~. O. R# D: {7 p   return;; f7 H  P: Q# H3 X9 s. N* v. @
  }4 v" o% C, G, |1 p- S3 `
  m_Item[m_dwPos].nIndex = nIndex;: A: I* v- f, H1 N4 F2 q& w" e
  m_Item[m_dwPos].dwId = m_dwPos;! ?( u- Y; S. K' O) N) j; Z: \
  m_dwPos++;
. R5 n" m2 l1 u) D: c- K1 {}8 O+ ^# Z! P- M
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
1 p, @" w: c# m6 u8 ~) S) T* Q{
3 B  c4 C7 J5 M9 c6 n0 M- i% f# Y  for (int i=0;i<MAX_INVENTORY;i++)
6 X% b0 |- Q$ ~% C  {$ G3 W6 X( \0 r# |# p+ K! B
   if (m_Item.dwId == dwId)/ x0 p$ f3 t% Z3 ]! F9 p
   {& \' P+ _. `6 s& [# x
    return m_Item.nIndex;
  S; s0 p# `3 C. ]4 I8 K4 s0 R# Z   }- }4 A- g/ N2 B
  }
0 e( J9 l$ T& U2 P4 I( J  return 255;% ^$ G' D( k0 x; M% T0 E" U, v0 a
}
% F' X9 \- g) j1 zvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
" I/ P% V& z7 q3 T" t$ b" y{
+ Y% T  _5 T7 G2 x& T' |  BYTE nTmp = 0;
" S5 Z$ z! X/ D  bool bDest = false,bSrc = false;
1 q- K; j; Z+ |  for (int i=0;i<MAX_INVENTORY;i++)
2 @8 I, c3 s/ w2 Z  {8 r; L. H( |$ C* f' K
   if (dwSrcId == m_Item.dwId)/ F3 s3 ]; w$ H/ j
   {
8 J1 m$ M7 l7 C) q) @% A8 p$ g& b    //id相等 则 改变对应的dest和src" q2 L4 ]$ D/ }; [2 v
    nTmp = m_Item.nIndex;9 a) I0 Q1 [' D1 H5 T# l: ^
    m_Item.nIndex = dest;
( q" A- b5 m  y- X; q- t: ~   }
: o; [' ~! E1 b$ a  }4 Z) q9 `  v; w$ E
  //临时数据保存完毕,交换开始
6 |1 _  _$ ]& J& @- Z  for (int i=0;i<MAX_INVENTORY;i++)" \! Z- m$ m0 o; f; G
  {; s( q8 }# |& N: R7 m
   if (dest == m_Item.nIndex)
8 f6 N( K8 q% t5 ~   {
: M! W' H4 C9 ~9 Q: Y+ }    //id相等 则 改变对应的dest和src' _9 l6 R# ]" S& j% n' b- Q) g; r( Y
    m_Item.nIndex = nTmp;; E; x. p1 B2 Z8 M+ B7 b. G' `
   }# ^8 s  U4 }6 ^5 J% P! M- q( T
  }7 B6 m! ~' }6 ^1 z
}; F! F' \; \$ j- v  J+ w
};
: n0 N& A. N7 T* @-------------------------------------------------------------------------0 r2 C! G, x# M0 J6 K: b
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 r3 I1 b  C& i: V* S搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);8 ?& f" O+ a, v9 O: o" E5 c, _
紧靠其上添加:$ ^" F# b4 J$ c- o! V
if( pWndBase == &m_wndMenu )
% C4 u: z- w+ N3 ?+ R{
* j5 D" H( U. J8 o0 s5 q) f  switch( nID ); `: e* l; v8 I& j' M
  {
( c) W" K" u2 e  J1 [" [! v  case 2:
* z3 ]3 @% z" @! R% q/ z; X   {
" _) C* s1 G% \2 h. h& C+ l    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);3 R: F/ |, W0 B" s% S5 a; u. p
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
4 E& C& @% p% p    {
/ P) A+ ?9 g( U# }  b7 Q     break;# E2 s% r! y  h/ c
    }- k% N) k+ t' p3 H  d
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
- {; K6 R6 L* n2 i9 H    {; T. W. g% b8 J' e
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- Y5 \, E1 ^5 _! ^( g' v     if( !pItemElem )
1 ^. u5 K4 W% ^5 f) A2 H      continue;
% H7 y$ p3 ?  h+ h4 K; C# e     if(pItemElem->GetExtra() > 0)1 d% f8 h4 Z! K$ Y/ W8 t9 _
      continue;7 f  |# |$ d/ p5 y+ A
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 7 B* v$ z/ m; ^# [; |
      continue;
% R5 n! V3 G. b% T     if( g_pPlayer->IsUsing( pItemElem ) )
3 H/ o) X5 c+ ]$ ^% l+ P      continue;
4 J5 _$ m" \3 p% L  I2 S& Z     if( pItemElem->IsUndestructable() == TRUE )
" P1 Z# T/ ?2 X0 m1 U     {' Z1 a4 j' u5 {% `6 }& t1 p% l
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
4 n3 k' y7 _; M      continue;
& O; b3 e& t1 Y     }1 n' \( W# q: b2 h: R, Z- E4 D2 G
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);; Z+ g1 W0 M0 Q7 v
    }
5 s" j# f7 T' P0 b' `! M3 c    break;
3 h  y8 z  O4 Y; @1 h# T# U) s- k   }2 |( p: i8 A: t  C) k6 [
  case 1:; c6 a) j% c' v4 A/ J
   {
% g0 y2 h0 Q8 y+ n4 D    //整理背包) @7 j+ D- R  p; U2 d* ^
    //////////////////////////////////////////////////////////////////////////% D+ F  z# z& |& ~& t  M: d
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
+ a7 v/ f5 U0 I: p+ I    /////////////////////////////////////////////////////////////////////////// A! w( {0 n3 e( O
    //////////////////////////////////////////////////////////////////////////
% R1 q7 C2 O# l; h! x1 q: }    CInventorySort* pInvSort = new CInventorySort;4 U! U; i. L- B
    vector <sItem> vItem;
" ?. }6 x8 m: Y* ^    vItem.resize(MAX_INVENTORY);//初始化大小
  K# |! {2 \/ d% ]2 J     //////////////////////////////////////////////////////////////////////////
2 c, z  v% u: B/ S0 Y6 k: Q# U8 i     //填充数据
1 W! e! y1 w, U. h     for (int i=0;i<MAX_INVENTORY;i++)
0 }  K. D0 X3 h. |, L! B& X     {
2 f  d0 c! s' ]8 G/ \) ^      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! P# X' `, }" m" Q3 l" v- M
      if (!pItemElem)1 v+ P% p$ S6 q5 q8 a- V( y
      {5 u5 U* u: ?9 f! Z* s$ Q
       vItem.dwKind2 = 0xffffffff;5 x- K5 u* k  i% [
       vItem.dwItemId = 0xffffffff;
, `" f7 r* U' y) g, A7 r. U( k# k2 Y       vItem.nIndex = i;
2 I: b* t4 B- F/ J' f! m' L" v      }else {
+ j# M) i7 n3 u  W6 a" }: B( _       ItemProp* pProp = pItemElem->GetProp();$ N; Z7 v( H2 |8 d" I
       vItem.dwKind2 = pProp->dwItemKind2;
8 R4 B, U4 y, N       vItem.dwItemId = pItemElem->m_dwItemId;
+ b% T( s2 p8 R1 X       vItem.nIndex = i;
) p6 x3 M* o# e" o4 p- a3 K      }$ U9 @; |+ X3 i% P5 x  J
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);  P  M3 I: x' n; M9 C
     }9 Q5 F3 F$ b: r  O+ I4 e
     //////////////////////////////////////////////////////////////////////////
2 i% I; L5 a( K% |1 p- v     sort(vItem.begin(),vItem.end());//排序
% ^8 V' T4 @- x- J/ f     //////////////////////////////////////////////////////////////////////////
1 X2 ]" l  S8 y3 E     //交换/ C' T8 D3 G' O- E! H
     for (size_t i=0;i<vItem.size();i++)
6 j' [! {( v( W/ J     {+ n8 q. p( z( ^7 h' ~% j
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! q" m+ y5 S  ]2 q- x/ `      pInvSort->Add(vItem.nIndex);
+ r6 Y- c* _& D6 E- {     }
. t' \  }; u7 ]- J) j     BYTE nDestPos = 0;1 ~& w- _7 ^3 s
     for (int i=0;i<MAX_INVENTORY;i++). z, c3 W9 j3 [: g
     {
) k% f/ \, f' [1 z6 ^7 J      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);2 l! Z' J1 X) h# k. E
      if (pItemElem)
) C4 w/ I0 S: j% m9 _4 a      {$ J% R- G' P) S' T  B) ?( w" x6 Y2 r; ]" P
       if (IsUsingItem(pItemElem))
7 ?! n9 g* h  G, p       {0 k$ h$ n' x; m. b/ C
        //这个位置无法放
. M( e0 r. r2 q# [7 k        nDestPos++;6 P  U5 H" {% ]& p
       }5 p0 ?6 p1 ?- N$ L
      }
" F3 L9 D4 C6 }4 a4 y      BYTE nSrc = pInvSort->GetItemSrc(i);) P1 {) V1 u# M1 I7 S5 S
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
; o3 o0 H3 h# A+ E" v      if (pItemElem)
. r- q. \5 j3 Q      {0 \6 S3 }$ R1 S- r7 s
       if (IsUsingItem(pItemElem))' S$ A& R) o+ X# d, f( a6 I
       {
# ?+ @/ m) R- S# y( ^) Y3 U; E        //这个道具无法移动,跳过' t# }+ n, `' N
        continue;
( @# j1 F2 H4 O, u& t: M       }
8 \3 }1 @: `- L3 e5 r      }else{
; z* H- m2 N; K; e4 g       //空位置 不用动- W% V# j2 e" s5 e* ]6 i
       continue;2 u6 Y7 S: n+ i( F  e* c
      }9 W4 k" ^7 [4 G: C
      //////////////////////////////////////////////////////////////////////////* k: T3 t* ~0 w! j7 s. z7 F
      //开始移动9 N. j% a+ o& z# W
      if (nSrc == nDestPos)2 U/ W/ H; [% d# b" e* _
      {# W4 B" G! N& D) u/ {
       //原地不动2 W# \7 s1 W7 p2 S7 D( l  L
       nDestPos++;
( l6 K; ?; b) n4 G" R; @  Q& c       continue;
- M( C9 a( G. J1 |      }
) i" ]  d; p: a0 j# G; `      pInvSort->MoveItem(i,nDestPos);
' P$ W( }& ^  l7 x" y      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
8 x9 t- j6 e4 ^1 |% k6 t+ J      Sleep(5);
, o9 s8 D+ a8 q- j% B4 y6 \! |9 Z6 }$ r      //Error("移动 - %d->%d",nSrc,nDestPos);
: S7 W' ~7 I  {1 \      nDestPos++;6 S. v1 v4 ?1 t4 M! [- D* F
     }
4 k  Q- g7 H$ c9 \, c& \     //取第一个元素的信息. p8 t7 A& w! d) y& l! ~
     /*; c( H; Q+ R5 P5 s0 z" `
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
7 z+ [/ Z6 _* t  r& ~8 H     {' X# W" v1 c: l
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);1 N3 M3 X, ^- K9 T9 [7 J6 _
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
9 B9 k$ v% Z' s- U& a     }2 {6 N' ^, [  V$ w/ D' a5 G
     */% u3 h' v! D7 ~
    //////////////////////////////////////////////////////////////////////////
0 v5 E1 z# H. _, w- i    break;
1 b; L9 i& V7 |* W& f, r   }( d+ W% P6 F( q1 g3 \
  } : u/ G9 a$ w+ l1 Z7 I; t1 n
}  ^: r/ s# N. B! `
m_wndMenu.SetVisible(FALSE);
% h' |" B# p( L; P0 |. M$ X8 N6 W: V8 j- O4 F1 U& h
--------------------------------------------------------------------------------------------------------. V$ b8 K$ V( w
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)' S" z/ I- l8 e
{/ w5 E9 s4 u( p8 G7 X; H( C
BaseMouseCursor();# [% j* `/ U8 P5 ]1 c; g! e  P3 I
}' K& O8 g7 L5 u, H/ s& c4 r4 ?
在其下添加:! I0 i  \& U+ ?' a
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
$ d3 E, _& d( R1 Z: H% G$ s{* ]2 r# E9 ~! K/ S" P
m_wndMenu.DeleteAllMenu();$ o+ W; k& O' B: k, _8 n, }) P
m_wndMenu.CreateMenu(this);  b( ~4 C' \$ l; w
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");, I' j" Y6 t% w- M

- u3 [' q! Y* J7 V* h# ?3 Z0 Eif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
( m% @  F. w% y9 T{
: j! M1 t) H7 `+ R" R. d* n- Z* S  //P以上级别才可以删除所有道具
6 m" G8 b  {8 C& _  h) g7 b  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
2 H- {) }& d/ _# _+ x2 s}
7 r" @, z. X% l1 ~2 `9 |m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
, v* \% L7 H! |3 G  w) v) j8 {+ x  ~m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
2 d  g0 S# W( D$ am_wndMenu.SetFocus();
- Z  _) O7 m7 }+ |6 E& K. A}# ^8 F  M% m  |" F
------------------------------------------------------------------------------------------------------------
, M7 c, N9 [/ E# b*************************
9 e5 I0 J7 s' F7 D* T/ RWndField.h文件
" B- ]- Y( Z" i  w$ t% w" _# n*************************
8 n( @4 o, f1 E( H! G搜索:BOOL m_bReport;: I" p5 x4 [5 \6 w) S# s5 }
其后添加:' G" ]3 [4 K: f3 P! p# n5 A
CWndMenu m_wndMenu;( M  n* k$ g$ R' v3 ~; g1 x
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);1 [, ~) f  r3 c$ _/ h
其后添加:" Q: Q" s- z9 w1 B' K5 l( j! V9 M
virtual void OnRButtonUp(UINT nFlags, CPoint point);
- U, `  ^; e- Z) G0 c
  @, t4 C* [4 r+ p2 _- g( ], Z& Z  V% p& V6 B# K

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-12 17:21 , Processed in 0.057873 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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