飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1092

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1092
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
& V6 j7 o0 U4 D; X搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; x0 D6 G" q1 J. Y# c% l$ R4 @2 w+ |( w, t# S
struct sItem
1 o, C$ G" h5 X" `/ {{+ ~& s$ B3 o, n; X! {) E- o
DWORD dwId;
" }3 q2 I  R5 E' O$ HDWORD dwKind2;
8 e" H. q( v, V6 EDWORD dwItemId;3 [' n' W: G4 w5 Y: o/ N* o
BYTE nIndex;
5 j% T4 J! {: U: n+ ]. _- ~3 KsItem(){, v& y! O! p& P3 x3 I
  dwId = dwKind2 = dwItemId = nIndex = 0;
" x" B8 N6 U- \. g% ~}
+ c/ @2 C# a0 Sbool operator < (const sItem p2)4 E) T( n: s7 [  @4 T0 G; \
{+ _3 t3 `( L9 k/ @7 J
  if (dwKind2 == p2.dwKind2)1 L/ }5 ~% K. `& V) c
  {
; f4 {$ h" M& D# K2 D: a8 j) x   return dwItemId < p2.dwItemId;; }" w6 s% G# a& K  E" s/ Z
  }else{
! n' e; M; i+ B! o2 G- p' u5 o   return dwKind2 < p2.dwKind2;
6 m) @, Y/ E9 m9 E" M+ z) E) S, G  }0 w5 P: Z3 }4 W. _
}* R/ Q3 h+ a4 S# B
};8 f5 r- b8 _- S. U: s# L
class CInventorySort% t6 M0 F8 r6 ?8 r3 U( V
{! i; Z9 E5 m: ^3 A/ e
public:
2 J( l. C! e' @5 l: s2 Y1 NCInventorySort()- Q! w) m6 L- k' R- {
{
6 z: h+ T0 E: U$ @# b: A  m_dwPos = 0;" G  b5 y9 S8 G. o( q! K4 u% P
}
, Q) z3 ~. s7 C+ o! F~CInventorySort(){}
9 V) ^* J3 q; `1 g  a# {1 vprivate:
0 @# L* v: w0 h/ f7 MsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息( @' l, O% h9 f% c& |0 I/ q
DWORD m_dwPos;3 e6 x* l3 Z0 Q* ]
public:0 H4 D0 x5 f) H
void Add(BYTE nIndex)& \2 c% S8 u! b: S% h3 a# C. K+ O
{
- j8 j5 T2 @, M- t; n2 G$ A  if (m_dwPos >= MAX_INVENTORY); e, z" a$ k  T" W1 M! f
  {7 n6 I2 r6 v( m9 S  K
   return;
) q/ K) a2 _( |$ l  }
0 c$ a" P; p. I, S0 ^0 k  m_Item[m_dwPos].nIndex = nIndex;7 ?' J: `3 J# }& ?4 ^2 ]4 e
  m_Item[m_dwPos].dwId = m_dwPos;
2 y9 C2 Z1 T" d  m_dwPos++;$ w) }$ {+ c. H0 Z: @
}
* w5 o9 F/ K2 l/ I4 \; PBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
) F& k* U+ W) r; [{, w+ u  K3 H3 l: ~! D# g5 ^
  for (int i=0;i<MAX_INVENTORY;i++)
% p) w: _' y/ g1 I, V3 V  {
& s7 w2 ]1 G+ d   if (m_Item.dwId == dwId)5 K: a  f  b+ i9 r- x
   {' ~; [  t/ L) g2 T2 L; o, I
    return m_Item.nIndex;0 [* N, o9 M0 P7 _; C* h
   }
, P; l6 J! V! \2 g- j& Z1 v& S  }
% F  ]3 [. s) m+ R( u  return 255;  v+ y- f/ V4 s: C/ E' o2 b
}
! x% }8 z0 K) Qvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
8 l% Y6 ?( u9 w& ~4 W) M{; ]. `! M: W% F; p% t2 m; a
  BYTE nTmp = 0;4 X; f+ |/ T+ O4 D/ L. u
  bool bDest = false,bSrc = false;6 h$ r& k1 y# u  l' V8 A
  for (int i=0;i<MAX_INVENTORY;i++)
9 i3 p: v( D& f# t1 I- e- u  {# d! m! w! \" @! ]* u' }
   if (dwSrcId == m_Item.dwId)
4 K6 G7 ~4 e- {% f   {
+ |% o- [3 o$ T7 i) B4 D6 h; }    //id相等 则 改变对应的dest和src
. `/ [) s  ]7 @0 M) u    nTmp = m_Item.nIndex;
2 D! E2 w  |" L2 S: ^    m_Item.nIndex = dest;) ]& Q7 B7 y% J- w6 b7 @
   }- i% O& _% ]5 q( X) F
  }
; D7 d  s6 v( L0 h7 i: \" Z  //临时数据保存完毕,交换开始
6 }; v: I; ^) G, Z! t8 v0 F/ c. B3 h  for (int i=0;i<MAX_INVENTORY;i++)
: u8 I. b0 r* C0 D1 Z5 F' t  {
3 ]- f3 F4 Q: o   if (dest == m_Item.nIndex)
1 @8 Z. x2 g  o' a% {   {. X! r6 B# f4 M  S! d( V
    //id相等 则 改变对应的dest和src
2 D0 J" P) e4 `2 Y( r/ H7 ]    m_Item.nIndex = nTmp;. O8 @+ {, \% x+ A
   }  E3 e2 ~6 v5 S. e$ D% H
  }
! r5 [; P" J$ k}# t0 l) o% ?9 p: y, x& @
};
5 i: ~3 f* N1 L, t6 P$ w& b! G% o5 h-------------------------------------------------------------------------
) G7 C- C  [% \* `5 S依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ), y% \# A8 d5 V7 y7 h
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
, [4 D- O5 d% k; Z) P/ c紧靠其上添加:2 x; v; @: |( q) R# g' G
if( pWndBase == &m_wndMenu )! c& `  C4 v3 ~" g& e. |4 a
{. Z; ]+ \- a! Y
  switch( nID )
$ B0 g- g' D$ K, j% E" _7 K. h9 D7 E  {
+ w) U) d& w1 E$ y" ^, @  case 2:2 h4 a& }4 c: h* b7 l) M& B
   {$ t  E2 n1 }0 c  t2 l
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
5 z6 H- V+ ?+ P" B1 |8 k* B    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
1 O6 `: A2 V$ {7 r  E0 S    {
1 A* W, ]* t; Q% U- q     break;( K  c, D$ W! `" g; z( O4 T- h0 D# K
    }
! d7 A# ]" z( \- P. W7 s: [    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
9 e- I' D/ q* o( s' P9 j    {4 Q  A- B+ E3 k
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; Z3 m  x1 a0 D9 L     if( !pItemElem )9 M8 `4 d+ h4 `0 ^& s, O( P
      continue;
7 T- L6 j/ e0 ?# Z3 \     if(pItemElem->GetExtra() > 0)
9 S! L4 R, D3 L/ D4 r9 u  [! O      continue;
5 W  ?5 g5 W; z  K. v/ O* Q/ ?1 B     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
6 u8 C) e# ?' P* g      continue;
, m0 I7 t: z9 A7 R" t2 H     if( g_pPlayer->IsUsing( pItemElem ) )8 c  |5 h" z+ b+ K' b
      continue;
8 X- E# [+ J$ ~) a  h' k     if( pItemElem->IsUndestructable() == TRUE )
" z! V! i% {4 X8 G! j5 B     {& ]9 H9 ~7 j0 {  ?6 B8 B
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );1 U. s( E5 C: y7 l6 I' K
      continue;
% N& i7 f  o" f$ z( M     }# _8 _* I9 e# _* }6 I3 b
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
/ ?# E% b/ c/ E, J, f    }% x2 P- f$ [( p( e
    break;, P; S/ z7 b, Z* y8 A: E( n! E
   }' E: Q+ |" X; ~  K; y
  case 1:7 s  Z! |8 c  q" d  F! ~
   {/ i1 |2 D" G" i/ {0 c9 H* v9 _
    //整理背包# Z" s9 y1 r# F" b) ]
    //////////////////////////////////////////////////////////////////////////: t- R1 b7 |* f6 \2 P8 V' w
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );% F; U1 A4 e! P  m3 |! o# L' v
    //////////////////////////////////////////////////////////////////////////7 e0 K6 i, S/ y. V. z9 x2 P! ?7 D8 I
    //////////////////////////////////////////////////////////////////////////
. R! E/ u: v& G. }4 c2 B9 R. w9 y    CInventorySort* pInvSort = new CInventorySort;
$ M& ?8 \) ]2 O' K3 O: F. Q    vector <sItem> vItem;
' O9 P! e4 a0 {/ x3 Y    vItem.resize(MAX_INVENTORY);//初始化大小
8 o2 T. j; {  {     //////////////////////////////////////////////////////////////////////////
1 O* M, j( r1 V% Y     //填充数据( `" T' h; ~* p4 @5 q( J4 @
     for (int i=0;i<MAX_INVENTORY;i++)
8 |) i, ]% X. g; n; f     {: r* ?! N$ G! E# A
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
) g$ p) @6 `& G  e4 k      if (!pItemElem)
$ Z" d; \$ D0 ~. ^, u4 o      {% g9 p" ~" a# a3 J# M9 s+ @
       vItem.dwKind2 = 0xffffffff;' U' q. F* I# V8 c
       vItem.dwItemId = 0xffffffff;0 K" k" Y; K* P; y4 @5 p) c1 E  k
       vItem.nIndex = i;% F1 m% j# u/ S, k0 {. t
      }else {
# s" k& o# `. y  k1 E$ \       ItemProp* pProp = pItemElem->GetProp();& F$ r$ ?2 h! k  ?
       vItem.dwKind2 = pProp->dwItemKind2;) Z5 v+ x2 D! i4 ?  p
       vItem.dwItemId = pItemElem->m_dwItemId;
, u; `, A! d( \% }* @' U       vItem.nIndex = i;0 ?( r; H0 `" P! A- l' t5 \
      }
; J6 A( t9 l" ~      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 q- F5 t+ y' U" `     }: X  A0 q9 u( A% F0 ~
     //////////////////////////////////////////////////////////////////////////
1 y6 q: T8 R# Y# [     sort(vItem.begin(),vItem.end());//排序
6 |6 f' O! t" k8 L1 x     //////////////////////////////////////////////////////////////////////////
: `6 e/ N( `  b0 z% i# ]. }     //交换/ ~9 B. Y' J/ j5 y* U( P
     for (size_t i=0;i<vItem.size();i++)) D8 l' D& |( c% ?
     {  U4 `0 |" S, Z4 z
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& Z1 c! J: O3 H* m! k0 F" s( e
      pInvSort->Add(vItem.nIndex);
& j7 D6 {& V( ~! `/ F     }
( w/ f& }7 \/ m! j$ x     BYTE nDestPos = 0;4 A9 F- }2 `7 X/ P7 j0 p3 k
     for (int i=0;i<MAX_INVENTORY;i++)
8 {3 C/ O4 T( d     {
1 L$ g2 z8 U& `' r      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
; A8 j  z: {) a' }' {$ }      if (pItemElem)5 C5 G' q" O; O# h; N7 d% }; @
      {
3 x5 b  Y  m4 T7 ~3 p       if (IsUsingItem(pItemElem))1 V4 R) ]& e4 b9 P, E+ H% V
       {
4 [# R# l: S' C7 f, `+ a* `        //这个位置无法放
, g& ]" E( g" B        nDestPos++;1 b4 F: ?/ H* y0 @7 D
       }
0 [$ X( _( L; T, A$ q9 u      }
$ _( X+ |" z  U: G% U      BYTE nSrc = pInvSort->GetItemSrc(i);
" C+ L; K4 n! Q6 K0 q      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
% @0 a' e7 Z4 r: s1 v0 |8 {7 T      if (pItemElem)
$ J8 U3 e# Y9 N& T      {
! Q- K9 f5 @7 o; \4 X$ i4 X       if (IsUsingItem(pItemElem))
, o! Q" R& p9 T# _* n& y5 M( \       {1 c: ~9 q% G& w  D5 @
        //这个道具无法移动,跳过
# O6 ?! X9 v, \- n) O' R5 _        continue;
8 ~) w( E: k9 P4 z8 o       }
  V% J* l# b! V4 m" x      }else{) ^% p- B7 Q  i3 J; }7 w) q
       //空位置 不用动$ y- D/ k$ X6 k9 B! s; d
       continue;
" p. x. P( ?1 O( T+ D2 }      }) Z- y8 n% \% V- S" Y
      //////////////////////////////////////////////////////////////////////////8 s3 |: L4 d, s  g
      //开始移动$ [5 k! R' }; K: |7 F3 t
      if (nSrc == nDestPos)% M. Z- U( c7 \4 e6 U, k: m: @1 l
      {% V& D  [" T" U+ h2 U* @
       //原地不动
8 w$ V; R) i% `3 _       nDestPos++;: C9 \8 I# v& Q& F0 u
       continue;
* b' E1 ~. v& f9 W- X9 V8 Y      }. B- {& P" X4 q4 p, Q7 q
      pInvSort->MoveItem(i,nDestPos);
/ n8 H- p5 P4 _8 \) _- X0 M6 T      g_DPlay.SendMoveItem(0,nSrc,nDestPos);6 b; u7 {* f# P7 i
      Sleep(5);
- |% b0 ^1 Y. x- W& C. M      //Error("移动 - %d->%d",nSrc,nDestPos);: @: n) Z% B- B$ O. m
      nDestPos++;, n& j# w9 E: L8 b7 P9 t
     }2 k/ @8 D( O9 Y7 f2 [
     //取第一个元素的信息
3 q& z" }& w* i* Z+ |; a2 c, S     /*
$ O0 w- J. a% S% R8 v     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)$ n, X2 g: P1 ]) A. d  ~$ h
     {
1 ?& g( i+ Z; b8 [8 O7 H5 R/ y# p      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);2 x$ U" j" J+ L. ^1 k0 s$ n
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);2 P+ Z& Y) I- N0 t. }1 u
     }
0 }" `3 N* t" f# @- R0 ]/ k7 d" q+ W     */* L9 i6 w6 o+ j" Q
    //////////////////////////////////////////////////////////////////////////
7 d$ k! J0 L3 v; }5 T' T. c    break;
$ }3 b7 ?! }9 Y# q% \7 i# G$ ~   }7 o9 o# s' p! t2 F
  }
( \! B7 N# C; s* n8 t% @8 W5 P9 k}$ [9 j% b: s9 q0 k# f  l
m_wndMenu.SetVisible(FALSE);' B+ {; L9 w; q: h

7 Q/ j7 K" e, \$ ]! j  i$ `--------------------------------------------------------------------------------------------------------9 h" x! d* C, G* j
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
' U- p- n) X! ?2 T% \1 m{6 l5 @' H7 H  w
BaseMouseCursor();
) L. @/ i% f6 q/ S3 y/ `3 n}$ s9 v' B- J$ U4 _4 [  N+ I; p. g  a
在其下添加:7 Z! w8 w) ]$ b; L
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
$ V+ q( c: ^( Q$ K8 c{4 c* H. h( |/ D) C2 C
m_wndMenu.DeleteAllMenu();' B4 g& l  L- N
m_wndMenu.CreateMenu(this);
4 [  J  y: K6 R7 D: _/ X- e! Dm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
- h3 j9 }  A$ ?+ c: W$ t3 m( w  {8 z; L
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); s: D8 Y5 q& H) y  W9 n& ]
{, V* x6 i1 Z- u4 v# V4 Q0 `; a
  //P以上级别才可以删除所有道具$ z4 U& Q  p- K( D- T
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
2 U: b( l$ H0 e$ ?% u+ {}, |, `- Y6 I' l5 ~! f
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
" D, {* ^% F) s8 \. y. m6 M1 vm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
' b7 n3 P% U( `! B/ ?& Pm_wndMenu.SetFocus();" w1 T  P2 T2 U- e/ P; ~- e
}+ j: M; B9 A$ N: f% Y, [0 \
------------------------------------------------------------------------------------------------------------8 ~; A' m% ~$ o) a( k2 B
*************************
2 [  i4 |1 V, D# v" U- c: W' JWndField.h文件4 O% a- k5 s6 t* Q( b
*************************
% H& ]5 ?4 v1 o& c0 e搜索:BOOL m_bReport;
; j- ~) O2 T& w# {' K0 |其后添加:% c. Q) J+ ?% b* Y/ i4 [! g, z+ {
CWndMenu m_wndMenu;; K  _4 s& O0 _5 n
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);% d: A4 T5 U3 Q' b/ \8 H# S
其后添加:% a' {/ o* ]: v+ `
virtual void OnRButtonUp(UINT nFlags, CPoint point);7 z2 m: y5 r! b% a9 A

8 }7 l: B3 _$ @( n0 q4 R) ]9 a; R- W! n0 y# j

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-30 08:00 , Processed in 0.066189 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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