飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
' f: q' ]# u0 l) h搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
  n! L- e" }4 E9 [0 _% R2 O3 w; Z" q: O0 n% r; N' w2 x1 L( h6 s
struct sItem
6 T. V! f0 ]* a: H  D{
5 z1 y7 }$ ~6 R+ ]6 b0 IDWORD dwId;
; A& h2 C( a5 ?DWORD dwKind2;) M% ^4 s( r8 w9 X8 p
DWORD dwItemId;
1 Q5 M( W( D$ d7 c3 r0 Q2 fBYTE nIndex;0 Z+ L& I7 f" t1 }2 h# _8 \
sItem(){: ]2 _# d) X. G# y+ _6 p
  dwId = dwKind2 = dwItemId = nIndex = 0;) T/ `8 G* W. T( u5 w+ o) S
}4 h% C* y) R+ N4 v" m" x, G4 I
bool operator < (const sItem p2)
& s( n  [4 P+ T{
0 Z" m. K' ~- t' L  if (dwKind2 == p2.dwKind2)* K' m& H  L  c8 ?# ~. P
  {
7 e) ]: x3 P  S; V6 J" f2 V   return dwItemId < p2.dwItemId;
! N2 P- e" t1 `% g; Q# Z. J+ u  }else{
: ?0 k7 p; |! q/ D6 N   return dwKind2 < p2.dwKind2;% I9 s% N! s/ g& h! h" h
  }2 u( ?8 s# c7 Y; i
}
) F; R+ J, }" g};' f# g& q: y+ A" ~
class CInventorySort
: i8 I+ l1 E0 i. d! V! v( u4 m  d$ |{$ y: t" o* ]& D. m6 E
public:
9 g- S' _9 u5 FCInventorySort()
7 X6 M: E" ~8 X{% h* h- \! r/ H8 Q5 N
  m_dwPos = 0;1 i) J8 _# j5 h/ p% M: w/ e
}4 x- y  R/ d/ n0 D4 Z; P, T$ A% \4 z
~CInventorySort(){}
( A* r6 F6 J- x6 Zprivate:
0 f$ x5 J; q4 w: z; g/ RsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息" D8 ]% N! w% O: S, |# o( B
DWORD m_dwPos;
! v1 G" \, L' [5 z. Ypublic:
7 W- |; a, {. _8 z2 T1 j8 wvoid Add(BYTE nIndex)
' D( g% F: V" C( M. u0 G8 X{% }' p. a! g& N1 c% W  f7 p
  if (m_dwPos >= MAX_INVENTORY)* w+ _8 D: {* E; |8 I
  {
/ M, o7 J6 H5 p- P& q0 N' d1 X   return;
1 h. B5 @" F, P) e5 x" k  }
; o) Q" O% ~# R* ?' [. D  m_Item[m_dwPos].nIndex = nIndex;1 o- T4 z: j+ c4 |$ q5 i* P9 e" e4 F& J
  m_Item[m_dwPos].dwId = m_dwPos;
* E3 R8 a5 a9 z4 }: A+ }, W, w  m_dwPos++;) W3 Y- f" n( M1 @; p
}2 l9 _7 C7 C" P- Z# O/ A
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
# a' `$ _7 Z8 l8 p. M* ^{" m/ R1 i( d8 D8 J
  for (int i=0;i<MAX_INVENTORY;i++)
( w, }! B% a  ]0 Y2 ?  {
7 a$ S# ?* Y* {' g7 O% I5 R   if (m_Item.dwId == dwId)
* I$ T! E+ i7 R+ e   {) @9 d. ?# J0 U+ N8 T
    return m_Item.nIndex;) a, C/ b; L4 `3 s' R- H6 _
   }* s# _- m; {5 F% p8 U
  }0 M0 i8 w6 g) @! m
  return 255;
% A- W+ c9 h" V& F}
" N* X) |0 H! l! B3 qvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
! e8 `7 K  m8 L* |: ~0 N{
3 V6 G( g9 g4 A6 u9 x3 [  BYTE nTmp = 0;
, W  R9 M4 L5 C! V% k- ^* b, y% A% j' I  bool bDest = false,bSrc = false;7 }9 B1 B) T" n. G. G7 U- P. j
  for (int i=0;i<MAX_INVENTORY;i++)/ Q/ C" Z  I1 Y" m) s3 u
  {
! y4 J7 }3 b  I0 N( S& E   if (dwSrcId == m_Item.dwId)
) }, x" Z! z& M2 S; C* p6 [   {
7 t; W: r) _* v, ~4 Z3 Y    //id相等 则 改变对应的dest和src
) {1 s& \0 ^6 C: Q    nTmp = m_Item.nIndex;8 t/ I5 m' O: P1 v2 F$ K% u
    m_Item.nIndex = dest;7 V2 |. ^7 C/ ^2 R+ Q* N
   }( D' H' A' @5 r( |
  }
% ~7 D( ?' P- p7 ]1 P, x  //临时数据保存完毕,交换开始- I/ z& E9 b" `! L  W
  for (int i=0;i<MAX_INVENTORY;i++)
/ X: G* V6 s% q; l0 U  a  {
9 x/ x+ R6 A% ~9 d   if (dest == m_Item.nIndex)5 O; }* D# K. J4 V$ P# U& h3 o1 d
   {
; a" |4 k8 t( ]  ?+ g2 B3 D3 [% v    //id相等 则 改变对应的dest和src( @! o! |% M8 A5 G
    m_Item.nIndex = nTmp;
* D6 g( R" G5 p7 l: {8 F6 B   }  D2 T8 E! D- E2 `
  }
3 N( L8 J- j# a, f2 o( |}
" w4 z: `0 f6 e( M5 p: n};
$ \) v8 `' l& `-------------------------------------------------------------------------
' }4 o0 i) ^- c6 p- i. p6 g# z依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 V8 \* W5 h7 y. g
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
" d6 R& ?! u& u( P紧靠其上添加:
+ ]: D" X  R' a# R) t3 A2 yif( pWndBase == &m_wndMenu )
9 ^& k% R) {$ s5 R% F' f: o8 {5 b{
$ j/ W. O! V" p6 l  switch( nID )8 t& E7 S  |# w. k& X
  {% e' n" L$ W, p2 C$ S% S
  case 2:% B7 v6 q# {! c: ?# y  y5 h
   {1 G$ k5 y) @) d$ z
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
& \7 b2 C1 O% b$ i4 K4 \2 O    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% H# S+ j- G: u& F; u- f% B1 p
    {
; ~; _3 R, a$ D6 x- U5 C) s     break;' y7 S& O' x& i0 h' _+ `0 a
    }# H6 Q# l% V6 _2 `
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)& L( B' B0 _+ w8 A
    {7 s# s; L: Q* Y" ^
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 f5 q! f7 K( k1 }$ S$ V& R     if( !pItemElem )
/ `: d8 u1 x' E- f      continue;
3 Z" H9 ~9 f: _5 L5 T. {, o     if(pItemElem->GetExtra() > 0)
& l3 C9 J  x) H0 o; s7 X2 |      continue;
; [/ x: q* o; m3 a+ L) U+ e     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 0 Y- \: a9 Z1 m/ H: Y
      continue;1 \  w7 c2 j$ s. x  M4 O+ }
     if( g_pPlayer->IsUsing( pItemElem ) )
9 I9 g5 K2 |! a2 N+ \/ w      continue;' o# O9 g3 b4 L
     if( pItemElem->IsUndestructable() == TRUE )
: q9 z/ Z4 X4 T7 Q4 y0 K     {# }, i3 N" G8 E( \, o! c; {9 {0 ~
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );# e/ E! y' ^/ X
      continue;5 w2 J5 R9 E: v8 A. l7 G
     }5 C! D  q6 \6 Z
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
: Z: A1 M% V' X( k' ~    }% J( R% S/ r5 C0 `0 C% e- b
    break;; N8 e: Y& ]9 P+ x. L
   }
' o( q0 q* p1 Z( A# F5 |, c  case 1:/ Y6 j3 D: P: O
   {: L: i3 C* ^  p( ^8 q, i
    //整理背包5 r8 @% ?3 t* z
    //////////////////////////////////////////////////////////////////////////8 }) K8 W! {" J3 K
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
8 r, h2 P* @, h- Z7 J    //////////////////////////////////////////////////////////////////////////
% ]& d# U4 k( A    //////////////////////////////////////////////////////////////////////////" m8 b) f* k* u4 ~
    CInventorySort* pInvSort = new CInventorySort;
, p! e% B" l& B0 f& q* L    vector <sItem> vItem;! U; G4 {6 K9 k9 m1 B
    vItem.resize(MAX_INVENTORY);//初始化大小
5 I. J- u4 x8 d! ^6 s1 [     //////////////////////////////////////////////////////////////////////////
4 M4 U! o% H/ j2 R     //填充数据
7 s1 F4 ^8 x4 E; U+ ?  ?1 a; J     for (int i=0;i<MAX_INVENTORY;i++)! F  R7 i( g: r7 i
     {
8 V6 X+ @* Y$ [$ ?9 V; C      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) X! W  g  D5 b( S3 e
      if (!pItemElem): a1 Q- @4 }5 ?4 c* }. G- o* A
      {, O* b* _4 G0 r$ B. F
       vItem.dwKind2 = 0xffffffff;  N2 ?* N& h; E2 g/ Q
       vItem.dwItemId = 0xffffffff;7 J4 p, R: z% @# Y! v* }6 m+ A# ~
       vItem.nIndex = i;
& \* O: k' c4 e2 `; N9 q! ^      }else {5 b" K! x+ `# t
       ItemProp* pProp = pItemElem->GetProp();
7 U. ^/ t$ |9 c. n. z2 S9 o% u       vItem.dwKind2 = pProp->dwItemKind2;
$ P) K: ?6 [1 g       vItem.dwItemId = pItemElem->m_dwItemId;
& p; F/ j) P" X7 n       vItem.nIndex = i;& w/ R& k" r3 P9 n4 r
      }4 H0 R( n3 [2 m; Y0 |- @
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);3 K; ^& p+ R& ~
     }5 l+ ~: |) ^% U3 z
     //////////////////////////////////////////////////////////////////////////
% p9 q0 A# q- K- h" W; H$ P     sort(vItem.begin(),vItem.end());//排序, E- o$ Q; F2 t- G
     //////////////////////////////////////////////////////////////////////////$ \4 S% B' L2 k' X, V5 m6 w8 ?* Q9 D
     //交换
# |6 X2 e( R6 S& n     for (size_t i=0;i<vItem.size();i++)& I8 @. V8 N  M. @2 X* l, s
     {
3 }# u! j- `. B$ g      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- ^. l: ?- i6 H% j5 z, W6 V7 F3 j! |      pInvSort->Add(vItem.nIndex);: v9 K) R7 Y! a& Z( h2 v
     }/ ~" g" [3 v' Z3 S  A$ Y
     BYTE nDestPos = 0;
) P; S. h% {: h  V8 C4 y3 f     for (int i=0;i<MAX_INVENTORY;i++)
/ @$ d  g2 `' N& x3 d5 @3 v     {# `+ d3 l3 N* `( z8 n* d4 Q1 c
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
9 Z  q" B: Z4 Q% v4 R$ L2 Y: N2 L      if (pItemElem)2 Z1 _& G( M" N2 A$ i" N6 G2 ?
      {
& K" P* A2 a4 J" O       if (IsUsingItem(pItemElem))
- n/ O2 d" q, E: v3 ^/ u' D4 I5 Q       {# J/ `) X/ W: h: O& A0 Q
        //这个位置无法放* b9 j* Y, H" }& E; N
        nDestPos++;
, D  a( V& R! ~) l4 ^; V$ C/ ~       }: D0 ~! v7 c, {; ?6 Y
      }
9 J( ~# k! e, t. {      BYTE nSrc = pInvSort->GetItemSrc(i);
( S$ f2 P3 o, |: F      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
( w+ ^+ u% v5 F& Z4 E      if (pItemElem)* p. _% s2 I* M9 e
      {
7 m+ P2 r+ ]. T       if (IsUsingItem(pItemElem))8 G3 B0 U8 b" p! ]. U( |
       {& Y9 F2 v; a8 M/ y. h6 t
        //这个道具无法移动,跳过
) F$ g4 v- v  P" M. g2 E$ q/ N        continue;/ E! T! ?4 A. @6 k5 t# q1 \
       }
% S& T4 k, e2 B- ]  o6 j: u5 l6 r      }else{
$ ^# c' _' W* @2 ?" C& h2 t4 ~/ w       //空位置 不用动
% [4 b8 V  d3 J5 `       continue;6 V( E+ r9 o! ?1 [7 B1 L) F
      }
7 r7 e6 {9 D% y' t' f  p% r      //////////////////////////////////////////////////////////////////////////
1 N: R! @8 M% s3 ?" X      //开始移动  M2 Z' @5 i" p* b. v
      if (nSrc == nDestPos)
! K/ ]6 ?, }/ ~      {. P+ F) f, y9 [5 c- h2 h2 H
       //原地不动3 }/ @" O0 ]' h& s4 Q0 c, N
       nDestPos++;, e7 d# r8 N- Q" o6 F* o
       continue;7 U0 R8 A) a$ ~, V
      }
( ~- w# S- L; N; P& ]      pInvSort->MoveItem(i,nDestPos);
! ~" @- s5 L6 W6 H1 I  @2 {0 a. d      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
( k- s8 [7 X4 b/ W* P      Sleep(5);
2 V( o! a. E2 u4 U      //Error("移动 - %d->%d",nSrc,nDestPos);5 B: e6 c$ D: y4 }3 \0 U  x+ W! H( p
      nDestPos++;
2 A6 Y# a& `) i1 {) I. H     }4 U& {* W1 I" W2 `
     //取第一个元素的信息
* b9 d1 u  Z/ Z: u' {4 g     /*
* P0 n6 q; _; m0 x/ A     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)8 Q" F/ m+ t7 l, q4 a* E
     {  F' \/ }' b! f0 H
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);  L! u! g6 R/ o/ o; M. m
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
- c. e# k6 ]6 ]0 A3 n* n# E6 h* C     }
( B* c& V5 R+ C1 |1 R; {     */6 f7 w* X- v: S9 ]( f
    //////////////////////////////////////////////////////////////////////////
6 I, B+ V- E/ z' i% z6 i    break;& p9 M9 k* I, m$ ~& W3 z' k8 x$ W
   }
5 J9 r; P7 z: Y" m  }
! g( P; t" z! Z) r}8 h) ]9 B; H  R$ w
m_wndMenu.SetVisible(FALSE);
* J: w0 S/ e8 H% W# z: j0 m+ _  x3 L$ Z
--------------------------------------------------------------------------------------------------------
2 ~5 K8 P$ k0 I# N7 b4 `/ |2 e搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
2 {1 B$ }) ?6 C9 ~+ @# {. f{- i8 ?8 j% _9 q0 L0 h# E
BaseMouseCursor();
9 k* d- }9 X7 N( S+ O}1 x! l2 |9 ?7 n
在其下添加:% N2 q" r- N7 s* a
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)4 p3 R7 W5 M$ C$ I: P5 Y+ _
{
) A( y. }% n  z6 w- {! F0 W0 z) vm_wndMenu.DeleteAllMenu();
5 _" ?+ W' b& t, wm_wndMenu.CreateMenu(this);5 [  X5 I; V# o' c0 e
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
. e, {0 `6 a' C& m5 A" Y( {# f% u0 v& Y) z+ _
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 q; M' G& @6 P4 Z) c3 l, h0 d6 r
{
7 ~+ t- q7 J$ ?/ x  //P以上级别才可以删除所有道具2 E6 D7 g% Y# v1 O, m' `3 N9 m
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
$ U! q  h! H4 n0 C) W}# {& \7 }* b+ y4 Z- V, A
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
! }/ g; j- w# H7 ^m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );8 Z! i+ r' E1 {  j2 W3 P. @
m_wndMenu.SetFocus();$ m$ T- ]( ?+ C  k; Z% A8 o( R# M3 x
}% B3 v8 F7 L! V8 S$ \% q7 c
------------------------------------------------------------------------------------------------------------/ H/ N- W% P. z. p% w# p6 A7 I
*************************4 b* `: @, i$ C8 Y- _
WndField.h文件5 N6 d, Y7 ?9 X$ i  t
*************************
1 T2 u  Q3 S4 S4 X# {7 _搜索:BOOL m_bReport;" H3 ?' \2 e3 t& a! t
其后添加:
& V6 C8 T5 ~& C0 w1 w7 B4 v6 LCWndMenu m_wndMenu;1 W8 W! d% r, q  I. Z
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);% l+ C3 k8 ^' Y. k4 \& e
其后添加:; f- Y* m- A9 x& d
virtual void OnRButtonUp(UINT nFlags, CPoint point);
& W) P" ^* A, v3 H- X& v7 ?) Q; ~  w, |+ ?

- a  ^  U2 v* u/ o1 p7 }$ D

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-8 20:09 , Processed in 0.067179 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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