飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
8 U- H1 g1 ~' q搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! T3 `# C( r" }8 e

8 `! N  L+ K$ [0 ]5 H8 f& kstruct sItem% E9 @. {* X6 J; l2 C
{4 p% D0 \. t- p; w
DWORD dwId;5 \; [" \! ?& Q3 \) u& d2 G* R
DWORD dwKind2;2 E( a1 I2 t3 Q! [( G
DWORD dwItemId;
, x: o5 b- X4 TBYTE nIndex;5 ?: R* q# J+ ]( B
sItem(){9 u0 b: s, ]  C' `% [
  dwId = dwKind2 = dwItemId = nIndex = 0;" g- N2 q( a. r7 ?7 v7 S6 ~1 M  M
}
- L7 u% @8 I0 \% w& }bool operator < (const sItem p2)
6 V7 e: @* Z# l# H% k) B' s/ `{
. H5 I; G6 \+ ~; C5 ]* v0 t  t/ U7 L  if (dwKind2 == p2.dwKind2)) W8 `$ f, l3 T7 F$ E/ {" \. L
  {
# n8 M# y1 A' |4 p   return dwItemId < p2.dwItemId;
- r2 W# R$ ~1 t3 D3 t9 n9 M. Y  }else{
) a* L$ b/ T( |2 }; b7 |   return dwKind2 < p2.dwKind2;8 ]9 q/ @3 G" ?' Y6 B2 s) f! s' Q" F# \
  }
) J  M' X1 F8 E" z}; H+ ~2 o& I; U0 k# q
};  f/ i. N1 j+ u2 {. o: |
class CInventorySort
* I9 S( ^: }; S7 q/ {{
. q; a- [; k% f( k3 a; ypublic:
) A# @& ?! G6 J% ]# zCInventorySort()
; r. Y$ D$ N% o8 v0 s/ W{
! T" r5 x0 ]- v+ p7 G& Q0 |1 o; P  m_dwPos = 0;+ m0 _. T& |, Q: z8 n
}/ J' [% k9 Y7 d, L4 c
~CInventorySort(){}
* w" A; t" _, P; d. Vprivate:
8 S* {% Y+ B3 F, J4 C2 n% A0 q* vsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
4 {7 v4 t$ {7 Y: l0 N7 d, gDWORD m_dwPos;. I; @. C) M* }
public:% t: B1 ~: I. j: D6 D: @; ?3 B: b# x
void Add(BYTE nIndex)
4 \5 o3 ?% c+ ^, v) r3 A* B{, k( m. c3 S  z( Y9 Z
  if (m_dwPos >= MAX_INVENTORY)
$ ~( ^4 o+ R9 n( K! c; m' K- x. o  {6 [7 \  v4 G1 b/ V
   return;
- c8 {5 D: s3 x1 ?1 _+ s$ t  }2 s3 |1 S* g$ ~( d
  m_Item[m_dwPos].nIndex = nIndex;- K7 N. V7 g4 ~* M) W
  m_Item[m_dwPos].dwId = m_dwPos;
+ b( b$ ^+ ]4 y0 m  m_dwPos++;$ k8 [4 ~- f7 ~  ~% r2 X+ f
}
+ `3 `3 P/ w8 YBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列- Q7 R7 t0 l) o. X; I
{
+ b4 ]2 E% d/ N3 p" Y5 g  for (int i=0;i<MAX_INVENTORY;i++)
( f, B3 N, c+ e; u  {
, r  Y' Q; x2 Z) x' u6 y$ M   if (m_Item.dwId == dwId)
& q5 L) l! _+ @) c* ~- a: {/ ]   {
% U- e0 k9 l& W    return m_Item.nIndex;
" g  I9 a) e$ [* W+ t1 k   }3 J/ ]0 j2 Q# S4 g
  }4 D6 a6 G" z: q, Z$ ~( d' I
  return 255;
& c$ N% m  }% Y" S# x/ s}
9 c' T9 v% X; z- E$ Xvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
+ J0 \- H' q) }3 k! Z5 X0 b{
9 W& I3 K; v1 w. A2 ]  BYTE nTmp = 0;5 r, w& I, e7 h! r5 ~6 N
  bool bDest = false,bSrc = false;
/ P9 O' P4 ^* K4 P, c$ t  for (int i=0;i<MAX_INVENTORY;i++)
2 P' W; r( O  `' ?  {
/ @1 y  r$ v$ `* `! o! {5 N" ]9 a   if (dwSrcId == m_Item.dwId)9 C$ v4 G% S- x* ?% I% R: J$ J( M
   {9 u# i' r/ N( O8 g. e
    //id相等 则 改变对应的dest和src7 g1 W- |+ [/ `; H2 ^
    nTmp = m_Item.nIndex;1 j- K  `6 j# I$ T* h# k
    m_Item.nIndex = dest;! f6 ?) x% ^, ?, X. z* F
   }
" @% f1 f8 ?6 c+ P% ]  }. q7 _4 @" c3 `" _  E9 J0 Q
  //临时数据保存完毕,交换开始
7 K7 w& a4 P+ o9 L. Q  for (int i=0;i<MAX_INVENTORY;i++)
! w' E, O' d  x2 T  D  {
4 x9 z/ o7 D4 c) @: N   if (dest == m_Item.nIndex)1 x" L3 ~) d5 n6 P; X2 v+ e
   {
0 U, v0 k3 M8 |1 g    //id相等 则 改变对应的dest和src
: f' Y/ P1 |3 B5 x* g    m_Item.nIndex = nTmp;- ^) n! d* E$ B, s! n* q9 B
   }' e  D  q: g1 L! ?& Y5 y
  }( d/ P. ]4 W/ g  j  U
}) X# O5 \" w5 {3 }% x
};$ w/ K1 M% u! X8 O/ i! U- L& e
-------------------------------------------------------------------------
+ N; U" j, K1 ]/ v" r' m; L& f依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! B' O0 v" j1 v$ p+ y
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
' W9 H9 i+ y' h6 U+ w紧靠其上添加:
0 q2 M% D' x& n2 l4 X! s: _if( pWndBase == &m_wndMenu )
1 m' a* I+ z% U( w& j, I{" ^+ i. J7 @) x' p3 `3 M0 ~
  switch( nID )/ t- B3 f3 Z$ }( `7 s
  {6 X* c9 X3 f  Y  m- u- M: `: w4 ^, n$ r
  case 2:
  h9 V7 `& s8 J, A6 j/ q   {
9 V1 P& i5 n! y( z4 n) N$ G$ Y    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
& k; _& Q. P9 T. V" b    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))4 @  Q3 ?8 ~2 U" k1 o% \
    {5 W8 g* M) b, }4 u7 l) N) R
     break;
. d$ |7 l7 V/ @    }
0 I, Q7 K* ]5 r: A* l    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)' U9 N! n8 y- z9 A' L4 f1 \
    {
! G! ~! I6 i. W( P% W$ R* N     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 G7 I0 Y2 V+ `  L' y3 I- |  E
     if( !pItemElem )
4 ^: G/ I4 W% a) ?1 [      continue;
, R" p6 o6 T9 R. I4 E     if(pItemElem->GetExtra() > 0)7 {9 Z3 N7 a7 Y6 H$ A" M' l$ i
      continue;  `) z' @. g& P8 R6 S6 t
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
/ X4 D8 U5 V$ @, p      continue;+ D# `) F) Z0 m7 r
     if( g_pPlayer->IsUsing( pItemElem ) )9 a6 m) ?$ d( _3 `
      continue;3 j7 t0 f; [# o& g
     if( pItemElem->IsUndestructable() == TRUE )
% G' d# O4 \1 q     {
7 C7 ~: c' E: k: Q      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
. S2 ]) o- X& D0 Q. K      continue;' n2 }7 J5 [1 ~
     }7 ~/ r2 V: r  D, P8 Z% a4 g! v( ~6 R
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
* w1 G6 F% H3 z' Q; c+ u2 P    }: Q& I# V$ n# h" q0 n7 y" G9 W
    break;9 L/ a0 f1 g3 }
   }
7 b1 x3 Q& [+ p9 k7 k: F& T) P: M  case 1:
# M( |! s& G& y5 c3 U7 U! ]- ~4 X   {
$ T" b1 d; O& L/ r2 e0 D; ?    //整理背包
: q- A3 a1 K$ {) f3 N    //////////////////////////////////////////////////////////////////////////
4 D8 E. U+ \9 X  A8 T1 C    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
( y1 L) V. i' Z. i    //////////////////////////////////////////////////////////////////////////
! S$ Z8 I0 X9 W9 h& {    //////////////////////////////////////////////////////////////////////////
" R( ~4 G- R2 P5 K6 e" Q8 e4 }    CInventorySort* pInvSort = new CInventorySort;8 g8 w. o) X  t- F1 g( ~
    vector <sItem> vItem;
( x# n- U+ p. t7 k    vItem.resize(MAX_INVENTORY);//初始化大小0 X7 l- k3 w+ s1 w
     //////////////////////////////////////////////////////////////////////////, e  t! n  P( U3 n2 W
     //填充数据  L: o" {& N, [$ b; g; Q: l7 G
     for (int i=0;i<MAX_INVENTORY;i++)  S& I5 I- J4 K# p  s* C: E0 f4 B
     {) b; B6 n( O8 w, c
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
4 o" ^3 I$ q( G! b) m& D      if (!pItemElem)
! c% @1 N6 o7 e+ ?& Z5 |      {/ |; R0 I& D0 Z# W9 r1 F* ?
       vItem.dwKind2 = 0xffffffff;
0 ^/ o( A. c2 X5 ]3 V       vItem.dwItemId = 0xffffffff;: Y$ N. O; U4 q" r: |8 [% c
       vItem.nIndex = i;
. T( q( v' z# F' k      }else {
% X. p$ R% D( w  k8 s       ItemProp* pProp = pItemElem->GetProp();- [, i( P2 Z  _
       vItem.dwKind2 = pProp->dwItemKind2;* X9 E( T8 j4 Z
       vItem.dwItemId = pItemElem->m_dwItemId;- R* Y, W; K, U
       vItem.nIndex = i;
4 [$ q/ D* y' M9 q0 C0 c4 J$ @      }* ]4 P& j# J: L4 D- l
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, i4 d, H. o' U. w0 z8 Q* B- t
     }
  r5 _( O4 G2 ]; j. W( I     //////////////////////////////////////////////////////////////////////////5 Z4 V# P2 G" w3 C
     sort(vItem.begin(),vItem.end());//排序$ [0 K5 b+ d8 [4 ^$ S
     //////////////////////////////////////////////////////////////////////////4 E4 ?# B0 N+ N& b  [
     //交换
7 ~. x, h* _( W! h     for (size_t i=0;i<vItem.size();i++)
6 a2 D. H5 |% s4 X/ K- l/ D     {: @; e2 z% P& R' e
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- C! A; \/ }3 d8 d! f/ @
      pInvSort->Add(vItem.nIndex);3 E  @/ S0 ]1 X8 X
     }' L0 H# h6 y9 q; l4 k3 h0 J
     BYTE nDestPos = 0;+ |1 F8 m# `0 ]" T2 c4 R1 ^5 J
     for (int i=0;i<MAX_INVENTORY;i++)
0 p. [# D" m+ n) n* I6 E* a     {
2 h6 R# |  S  e2 R; `0 D1 N      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
4 |& g( q' O+ U% m      if (pItemElem)0 w# L+ E$ c3 [
      {! c3 z/ A. a9 m6 V/ z
       if (IsUsingItem(pItemElem))0 Z+ A5 t% ~0 z/ G# c
       {& W; }$ c, G  u% O% c; c: d0 o
        //这个位置无法放
& S2 ^4 K6 a, `- S        nDestPos++;5 s5 o9 B6 w: d7 O- G1 z
       }8 S* G0 R8 K% r; [8 S/ r
      }
3 t( A8 N( k3 F, a5 g! Y      BYTE nSrc = pInvSort->GetItemSrc(i);
. {0 Y  r+ Z, g8 P7 T6 o      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);  R; A$ I) S5 I7 c* O; t
      if (pItemElem)
5 ~+ S, Z4 k5 F' d* y" G9 q      {. u" ~4 c# A( I' X9 d  @6 Q
       if (IsUsingItem(pItemElem))' ?  e. I$ ^( E; F0 H% z
       {  a$ t, t* `' H: y
        //这个道具无法移动,跳过
" l  u0 X: X, e+ {; Z# _        continue;
% ^+ F3 _7 ^9 H2 D3 N/ n  V       }: ^" @( F" `. D) X& I% v
      }else{) i# n! c2 X* ^/ |0 @
       //空位置 不用动4 M/ q* C) }0 a- V! m
       continue;( |; [! K! z% k& O
      }, G$ q5 L0 D8 T  `
      //////////////////////////////////////////////////////////////////////////) U* `, v1 X4 h3 m! l6 Y% z' g
      //开始移动' I- H) M. s/ ^) z. [& A
      if (nSrc == nDestPos)
$ _% o8 b. f; U      {( q2 S# W+ \( f
       //原地不动2 M9 G  V; ^8 v. V1 G
       nDestPos++;
( e; l% P' S, j3 H  R2 l- O       continue;( l9 z9 {* p8 Y9 k/ d7 `6 Z# U" {
      }
% D& s, m5 E. Y1 U7 D7 I      pInvSort->MoveItem(i,nDestPos);
' V, L9 M* j4 Z0 J" Q' }      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
* R3 Q0 v, N* N      Sleep(5);
& N0 o( a. B7 K$ y& J9 r      //Error("移动 - %d->%d",nSrc,nDestPos);6 N# h8 H& ^4 N! Z
      nDestPos++;
1 f" t; B( t4 i/ x0 ^# z     }* E0 g( `6 `% j8 [7 R6 ^" R
     //取第一个元素的信息$ x- D. U: k2 n  H/ i
     /*, j% h. [' W4 B0 G! _
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
. u: E4 h; A* x     {
4 z- M! k4 p7 N- _; Q      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
, t6 D, o& k3 D# P, e% r      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
2 @. g$ N' D% i7 n7 e" i6 d     }
0 x" |7 k* A7 ^4 e  |4 \     */4 a& R" q+ r# u. H- G% i1 B
    //////////////////////////////////////////////////////////////////////////, Y0 T' g4 J- A
    break;8 |0 j8 V- b6 d" l7 f5 ~$ L+ j( [
   }
. M  d- e# z% U2 v/ f  U  }
/ V% p# w2 U& o: V}: b  u1 `! n% T4 ]1 A6 E/ E
m_wndMenu.SetVisible(FALSE);" \8 S- |9 a) V, [4 r8 Y) h2 l: B, C* _
! J3 _& T  o, }: _% [
--------------------------------------------------------------------------------------------------------
1 {- V+ u( S- C) T搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
  D, }0 M! n' L5 b0 G9 d{
, W6 p9 o3 R1 F2 c( uBaseMouseCursor();# ^: A1 R, M7 H. W* C7 l- r1 w
}
8 ?' @' e( }( X  h在其下添加:8 s6 d& n' t8 j3 N
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
! z" f: O. D& Y& p7 C4 B{
& C2 O0 Z! @% `6 q* D6 D* H% c* Qm_wndMenu.DeleteAllMenu();
8 g' f( L' ^8 M9 B: \; D# lm_wndMenu.CreateMenu(this);' K7 _5 w0 i: `% l4 F  I
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
" y$ ]( f3 |# y7 T6 Q# z- G1 G/ C+ P8 m4 Y6 Z: Z9 m  l  S! q) f
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# u5 O  U2 B) a5 g
{' l% i9 h) m* E+ b9 O% s
  //P以上级别才可以删除所有道具: ]* E/ J2 J* u
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");- s  `4 ]1 _  B
}
% z- m  M) j7 l+ T/ U) M% ym_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );+ |- f% `7 D  z! K
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
9 A7 _4 {' v0 _# |3 s, a/ K; Vm_wndMenu.SetFocus();8 W; Y. T1 \+ h% @
}; x, K; ]$ X: T1 W
------------------------------------------------------------------------------------------------------------( U6 ]' u" }# @: r9 D
*************************
  e6 @9 P" t# ?+ l- _! ]WndField.h文件
: H# m6 F: g# L*************************" W% N/ \* \  T
搜索:BOOL m_bReport;* C" L- P5 D! d1 g, @6 N5 l
其后添加:
' K' D+ z8 J9 g+ k: e; e& UCWndMenu m_wndMenu;
( a7 R( C1 T5 c8 ?* h& b2 w搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
$ [; I/ {5 X# ]+ Y. m其后添加:3 Z5 x* ]& v9 O0 C8 M  Q% ]( E
virtual void OnRButtonUp(UINT nFlags, CPoint point);/ a8 n; r+ D5 \) p% s" M& m0 M

$ e" [, ?0 a1 F' x- M
4 n4 u" G! f% _1 Q: L9 R. ?1 n: x

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-29 08:27 , Processed in 0.142193 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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