飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
  g, o. N2 C' H$ I( c( T搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
! n' R9 {8 @4 Q: X! ~" H( Q2 _% A( |, S" ~: {
struct sItem4 U1 Y: o6 r" B0 S. ^$ D
{! j, P% I/ c5 @; f% G1 f- _
DWORD dwId;
& V. O; ^6 K1 C8 ~+ l: E% C9 {2 FDWORD dwKind2;1 g/ i9 {. b- M/ e; K
DWORD dwItemId;$ D7 y9 ]; o+ ]! p% O
BYTE nIndex;
3 N0 q9 N5 w8 a4 o' [) v9 UsItem(){5 ^+ ~1 D# k! t  x
  dwId = dwKind2 = dwItemId = nIndex = 0;+ G( E+ P! ^5 d) P
}9 O* Y! z6 d. I2 u- h- Q
bool operator < (const sItem p2)1 `' K) J) C% S" }& o
{) j: z7 P9 N2 \
  if (dwKind2 == p2.dwKind2)
2 g$ f6 f% q, X, w  {
3 V) |0 ~' B* Q3 x! K- a8 p   return dwItemId < p2.dwItemId;  M7 U; d; O$ |: s8 g
  }else{$ Q& B4 @* O) U4 [, A# a
   return dwKind2 < p2.dwKind2;
* u" f; u; G* w# R: @* O: P  }" Z. o0 y4 ^. i, Z- I
}
& n# B- I$ {8 w7 l3 d( z2 J};8 y' l+ U$ G  R& z" d# H  a" d
class CInventorySort* y. F3 B0 M1 p
{3 @) h$ }7 H* Q! C) M1 {% I
public:
; X! C5 |1 s' eCInventorySort()
2 J" V; s! n. t3 x$ Q/ N8 l{- M+ i+ m7 W9 |! M  O
  m_dwPos = 0;, p( @8 g& e$ f- ?/ F4 C/ o  B
}! i7 I4 f7 H1 H, l1 |4 Z
~CInventorySort(){}
1 j% J, B! O+ P9 W6 b6 C9 D  |5 `$ [private:
* G1 W: w! {  U8 [' [sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息9 O' `0 [, @) w8 D/ M5 Y% u: B
DWORD m_dwPos;# B: V3 l! a5 _. F, H: q  W" ?
public:3 D5 y4 T2 L; o; P
void Add(BYTE nIndex)
: {9 z; K/ l0 m' ^/ `0 g2 |{8 ]' E# f6 v5 T, k
  if (m_dwPos >= MAX_INVENTORY)  ^6 I3 E$ _+ a
  {
+ U. u  N* `: j+ c   return;: m! e3 U2 ?1 d. O! `5 b6 k
  }
' B8 L3 O: m0 x0 E8 ]6 R" U/ B  m_Item[m_dwPos].nIndex = nIndex;
  O4 N) @: q3 o. p! I) g3 N  m_Item[m_dwPos].dwId = m_dwPos;
! ~# ?$ i; V8 p: P  m_dwPos++;
, [* @1 @: X7 y6 O/ y& J. R}
5 F$ W- b7 U! n# F) WBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列7 Z3 T2 m: \, d" Q" p) j# r
{
; |. l/ ^, d7 J2 m2 C1 D# F  V' Q  for (int i=0;i<MAX_INVENTORY;i++)
7 B4 W7 ~" ?* e+ [0 @, C  {! ?2 p! Z$ j2 B# I& l7 {/ S  Q
   if (m_Item.dwId == dwId)
- H! ^* j* p$ y   {
4 `4 A$ N; r) i& _    return m_Item.nIndex;3 P( Q6 G# B6 c% r. \- l% c0 M" T
   }
, J  k! M/ ~, E3 u  }  {! k7 w% m4 A- M) |
  return 255;0 K( Q- N3 Q, d8 l( `2 N
}& H/ E+ }# v* L* p
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置5 f1 ^+ e- T; N# u  P0 p1 k
{$ v1 G9 U; y6 s8 Q! |! O: ^$ a
  BYTE nTmp = 0;
9 C5 R$ g1 B  t( w* l" t. t' ]' U  bool bDest = false,bSrc = false;
& B! U  S6 L9 f  for (int i=0;i<MAX_INVENTORY;i++)
. g0 M! L5 v& a; b/ E  {& V* ^7 l8 }( u' ~4 m* M! N
   if (dwSrcId == m_Item.dwId)
( V  Y0 q- m; g$ k2 T   {
2 y1 k1 S. A  j9 X. R1 B    //id相等 则 改变对应的dest和src  N8 H& g4 l/ a) v9 f( a
    nTmp = m_Item.nIndex;
- [4 {. `5 Z# K  v6 b  |0 P    m_Item.nIndex = dest;- R9 L% w$ `7 w8 o7 l! G
   }4 E/ j. W6 V/ ?' b, Q2 q- _
  }! t0 G* [1 s' K2 R( C
  //临时数据保存完毕,交换开始
( L% ~% \9 Z' W5 `% u% ^  for (int i=0;i<MAX_INVENTORY;i++)
* P) p8 a1 Q' C4 T7 F0 Q  {
% R! ~' f( B- ?1 y9 A   if (dest == m_Item.nIndex)
) A- m5 {9 \4 ~+ P" O2 O1 \& j- ]9 F   {# B  Q5 Q$ G6 i9 c2 [
    //id相等 则 改变对应的dest和src
  T. t5 Y# y9 {  y8 o$ B: `    m_Item.nIndex = nTmp;  F" h; v$ c) _: C
   }+ u% A3 a; a, ~' o
  }
. d3 F7 _  G/ p. x3 P8 P}
5 F. c% {+ Y( B2 {( p/ r};1 n, h1 E% c- Y% z) U: R: a
-------------------------------------------------------------------------$ V5 N; _2 k+ K6 E. j( H7 `5 U
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
  ~- p4 n$ p; j  _: m* J: N5 T- w搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);4 @/ E( |/ V4 x+ j7 X
紧靠其上添加:
% e4 {: y4 E6 y8 [if( pWndBase == &m_wndMenu )) E# L+ J0 I6 t) e( M; @
{
8 i" F1 y; Q7 C" c9 @  switch( nID )9 ^& P1 Z( X( a/ p$ w: x3 H
  {) j+ R! }* k1 l% B
  case 2:3 x! E( Y* e% }( U
   {
6 a0 ~8 B" {. \4 E7 Z  N- L    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
; d# S, Q& G" d% L, g: {( l    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 u* Q9 f! G! G  H8 \3 Q    {$ u7 f3 K: B- N  o4 c. E
     break;# [, s2 J* P" ]0 i4 m; u1 L
    }
: i: }5 ?; }5 W) x% D8 f    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)& m6 W0 Y/ }  I0 X5 o$ e5 L8 h
    {* s0 Q  S  S& R
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 \' i. F' w1 Z: Y2 s
     if( !pItemElem )
% s8 p1 h& p4 S+ H* z9 `      continue;% F1 e, x5 ]/ h
     if(pItemElem->GetExtra() > 0)- r$ t! @7 J6 y. k; a5 Y
      continue;! P/ ^. a& h* }; l
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
# S. T7 z6 `4 I3 F      continue;
, t) u% A! }, z: N. e     if( g_pPlayer->IsUsing( pItemElem ) ): `/ X- ?9 e5 B: ~  @1 a
      continue;6 _3 q2 [0 Z' r! z5 [* W# i$ P
     if( pItemElem->IsUndestructable() == TRUE )
' t5 y8 m) d3 a: t2 j8 z& |     {, ]/ Y1 }; j+ G
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
- H4 f  l0 I& S: c9 S; T      continue;8 h3 Y7 m3 b( L& m
     }
2 D7 b5 b* [) r1 r8 K; w6 w- W     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);( s6 j1 m. \+ m) S
    }1 P" q6 g# Q" _$ k& @: x; L: X
    break;1 @6 ?9 k: z' u7 b% m' N
   }7 f0 i/ X8 W) s2 `* ~
  case 1:! Z+ w) I9 n. l9 Q7 C* y
   {$ K8 n% D; J7 @/ E, I" r: p: N5 j% ]
    //整理背包
9 B. f, {! l+ f" ?    //////////////////////////////////////////////////////////////////////////  k7 p! j+ m5 b
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
5 k. f% j2 z' m  q8 C+ F    //////////////////////////////////////////////////////////////////////////
" b3 S. r) P" C; e    //////////////////////////////////////////////////////////////////////////
! h! F* x8 R- C" A) o    CInventorySort* pInvSort = new CInventorySort;
' m8 |. Q8 }, ?5 l2 k- o3 }    vector <sItem> vItem;3 C8 B1 u1 \4 `" P2 B& h
    vItem.resize(MAX_INVENTORY);//初始化大小
( N2 A# }- s- n# O- P) S+ b5 p     //////////////////////////////////////////////////////////////////////////
/ B& _& x! o& a  Y' O     //填充数据
3 \  T3 u! P9 t/ m     for (int i=0;i<MAX_INVENTORY;i++). P1 `2 g! W: J' ?
     {
$ A! f0 }6 p  s2 v/ u3 ^      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% R/ h  R& H7 T/ u6 q9 O      if (!pItemElem)1 T, \7 ]0 H+ _- i" A' s! R
      {" ~1 x0 A) @8 h$ A7 w
       vItem.dwKind2 = 0xffffffff;
- S  }2 N9 q- m. V" c+ B       vItem.dwItemId = 0xffffffff;: e. b0 I/ X0 g5 n
       vItem.nIndex = i;
: \8 ~5 J2 e5 `  `, k      }else {+ z6 z( h$ d! F5 Q$ m
       ItemProp* pProp = pItemElem->GetProp();
3 I- |0 ~- x* L       vItem.dwKind2 = pProp->dwItemKind2;
$ h2 n9 i$ C' R2 ?       vItem.dwItemId = pItemElem->m_dwItemId;" t; N" I. M. c7 D$ @
       vItem.nIndex = i;
9 p: S' E" t* V0 `9 l: v4 |# ^      }
  P8 V2 {2 |# U8 H1 T, u      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ }8 d4 P; N' K0 f
     }
8 w; {8 V+ f* j( _6 l' Z     //////////////////////////////////////////////////////////////////////////5 x+ ~& s- N. q3 `: C7 \
     sort(vItem.begin(),vItem.end());//排序( |# R/ E9 t. p: l* r5 m1 T/ x& y) p
     //////////////////////////////////////////////////////////////////////////! A- l; b5 s6 m
     //交换
6 @3 k0 W4 y6 u, {: M( s7 o$ z     for (size_t i=0;i<vItem.size();i++)
1 h3 M/ d  W: z/ W- ?( B1 G2 U     {
1 {* H& z) e  F* J7 X5 h      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# c& c5 F7 ~4 l; d+ W      pInvSort->Add(vItem.nIndex);
$ Y, V% P- L- N9 k7 s% z' ~* {     }
$ q& o; _2 B  ?2 U     BYTE nDestPos = 0;4 F7 ?& N# v9 E  k
     for (int i=0;i<MAX_INVENTORY;i++)
" e# [! M% V: Y$ ]$ [6 t  L$ z     {
9 D% O4 n! ]9 X( O& h      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
! B4 y- P# o1 H! W2 ?2 b5 D# I' m$ r      if (pItemElem)3 i% `9 {( R" m- ]% i) y3 w* {! J2 y9 ^
      {  y5 x& \& [! o2 G% a
       if (IsUsingItem(pItemElem))
. K, c; S. ^5 \: b       {
, P( s: ^$ `6 I        //这个位置无法放
; }( t2 N7 I6 ]. c/ z. W        nDestPos++;
8 X% [& S8 d$ s+ h- f3 ]2 {       }
, `  \# [- G5 ?; i/ }      }
0 F+ [9 a; S9 o      BYTE nSrc = pInvSort->GetItemSrc(i);
$ V& F8 M0 P/ N7 j$ [4 i4 n$ _1 p      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
% k' x0 e3 O) ^* `" c' j0 n: w      if (pItemElem)9 e6 w& S/ r5 A6 T- {1 r4 L
      {
+ o( {. S+ F# @8 a$ O       if (IsUsingItem(pItemElem))& i( `4 J# J  n+ W
       {
) ?* \% J0 j0 }; J        //这个道具无法移动,跳过
3 S/ n4 t4 G, X. G- d; y( s        continue;
) ?1 p9 x2 v9 [" a       }
& m* m" R7 x- g& {' j8 r3 d3 ]      }else{
/ G$ v& a% @: l$ j- Z' i% X       //空位置 不用动) b1 w0 |* ?! F" H9 }0 V! q+ m9 O& B
       continue;
( i" i3 y3 J$ F- W      }; t  Z' ]/ Y; y4 V8 A1 \
      //////////////////////////////////////////////////////////////////////////3 h/ S. M% Q+ y, o
      //开始移动+ G9 Z6 o0 J+ b5 T
      if (nSrc == nDestPos)' v0 v/ j4 _% I; X$ k& r: B& B
      {
2 v" q" z% E# j" E! O       //原地不动
; _& I; Z3 N7 t6 t. |. x       nDestPos++;
  C  b0 v1 b3 z, X9 z       continue;
2 |% D1 u* I6 i" J  |+ S, f) N; B      }
! E# A  r5 s! M      pInvSort->MoveItem(i,nDestPos);3 x) j1 ~4 x: o0 V, }5 g5 y
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
# K2 X5 z: k# s  Q8 |/ {      Sleep(5);6 H. |2 H+ e8 j# i
      //Error("移动 - %d->%d",nSrc,nDestPos);8 \1 l1 O1 H) _
      nDestPos++;$ B; [+ E& ?+ @' |0 |
     }
3 a* q& Q( p. k1 D5 r     //取第一个元素的信息  s; z: U' K. C( F8 F7 b4 I
     /*
- x- U4 u" n% V, Y& U" O/ ]" l     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
3 {8 r3 t% B, o/ A7 l7 m     {
+ R7 E! n3 g, `; X0 j- R, s6 v$ i% x      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
4 t9 o, [+ x+ S* }" u; s- |, X3 N      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
! [& J4 _) N! ^# r     }3 |, |! I& ]- ~# ]7 J; n2 O
     */* A4 K9 P0 a; i8 s" I8 d$ q
    //////////////////////////////////////////////////////////////////////////3 u, N; S6 ~& P5 ^
    break;
# v$ ~  m" m2 w; r: J6 n: g1 i5 s* p   }1 O7 E, x: V) \$ x+ H9 W
  } 5 x, {; o% L" y, G, R: R
}- N! O+ m$ j9 c* B1 S8 I, C; V4 ]
m_wndMenu.SetVisible(FALSE);( n. z/ P- S6 g/ y6 ^- b

$ l' A  b/ U9 r) x--------------------------------------------------------------------------------------------------------' h* q' F' }8 k$ V0 z
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)" Z) R0 p; N/ @. p
{( G' V# v; m7 g: D
BaseMouseCursor();' x! L1 y5 ?* h1 R: |
}
# x. E  r5 j( w9 j! p在其下添加:
  b' j8 ?3 P2 Wvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
- W2 I9 j) [8 d* l: E; Y. R) Q{
& X5 J4 r( Q* gm_wndMenu.DeleteAllMenu();* A! i; R% g& w; o2 _1 W" j
m_wndMenu.CreateMenu(this);. H% T+ [2 @! t. R9 m) a
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");% S, f6 p' ^) U  Q/ [" l  T

& X/ S' y$ q0 Eif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))5 u& a+ r2 D( N, m8 T
{$ t, g+ w7 L: I! S) A! ~
  //P以上级别才可以删除所有道具
+ v/ c( _" B/ s" G  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");& z& u) Z4 _1 G
}, ]7 B" Q7 C# k" Z- }  y% |; ]
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );7 Q' E3 }+ W8 w9 V4 P( N
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );6 j% y# N7 S6 s3 }3 a0 [; l! n; Q
m_wndMenu.SetFocus();; O/ G' @6 K) Y$ z
}4 p7 W: k0 s! l/ S; A3 E/ [7 Y
------------------------------------------------------------------------------------------------------------
$ T* o- ^9 I* d2 Y* X*************************% ~/ ~! Z5 c+ G8 F1 I; I7 e
WndField.h文件. T7 ]6 Z7 R7 \& N- |
*************************3 t0 L, p$ d( p3 u' j+ o% f5 C, o6 g0 m
搜索:BOOL m_bReport;5 B, p! b: U8 K& E4 m4 p5 n
其后添加:
5 ?9 x& E8 o+ e) @% L; t! {- x0 t' n8 }" DCWndMenu m_wndMenu;0 O$ \3 C- O; e; d& ~
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
$ Y  \1 Z* M; `* a$ b' g- ]其后添加:
8 L3 M; a- P" [virtual void OnRButtonUp(UINT nFlags, CPoint point);
* _% G* _4 H) C. B  i1 g% A; _8 K- W! X6 q# F* J: ~4 R+ t, A
" M4 o9 _6 @, X8 O8 t2 I. T

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-25 02:21 , Processed in 0.062815 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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