飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
7 H0 }, |0 i: z) e1 W( N  Y% A5 X7 q搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 d# \. s6 _3 J+ D$ h0 |9 x0 l: Z3 j0 j0 P7 H' _& R
struct sItem
5 {% o" T) }  K8 `" D{
7 U2 ~8 e$ l1 |0 qDWORD dwId;' _2 m0 P" A4 @; u- P+ u3 }  ?% p% r
DWORD dwKind2;
2 y' O' B! N2 d: hDWORD dwItemId;- b- N# @  G/ {5 x  W" o7 n& b% o3 [
BYTE nIndex;
/ h* Z" Q# `7 m( ]! GsItem(){5 I, I' i' |6 Y
  dwId = dwKind2 = dwItemId = nIndex = 0;
, C: k9 p0 j/ H! v: Z8 K}* ?( Y! c: H4 p7 }4 M
bool operator < (const sItem p2)& S# _. I! \( |8 H6 E. j# Q
{
2 P4 j& V2 I" Y6 V% I: u- g2 ~7 P6 V  if (dwKind2 == p2.dwKind2)
+ a5 G! O( r% K; P5 ?  a! b  {) w4 K. q- J$ _0 r1 K3 e
   return dwItemId < p2.dwItemId;1 |" T. Q) D5 |* W  E0 v; L! p4 I) j
  }else{
& l2 p! {% y6 v7 H1 U7 _" x0 ]- w' B' ]   return dwKind2 < p2.dwKind2;
2 u2 _% n' L  ?1 G  }/ S0 ~4 S. ~$ v; B
}: m1 k0 f& I6 q2 F( `
};. Z# U  x" i$ y
class CInventorySort
. a* R5 k6 a, `6 z- u- i& H$ r) r- J( ?{
$ n8 {( u2 |8 |: N; P; g; Qpublic:; V* q% H" P5 |6 P$ ~
CInventorySort()
# O5 j/ x- ~7 X! o2 Z{: c6 a% i% e+ ]3 c6 a' U
  m_dwPos = 0;
( |% }" N, V, H' X4 A7 V}" J1 q5 c; _- }* w8 ?3 \( t8 N4 x
~CInventorySort(){}" [' Z" j* u: v5 k% M
private:* T1 d$ S' M8 S& ^/ X
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息( `! b5 d/ k, ]
DWORD m_dwPos;6 ?" Y  ^/ \3 Q1 a0 K9 l
public:
% W6 j. D0 ~! l8 F1 q! X0 `8 svoid Add(BYTE nIndex)' r  ?) K2 Q- x$ H% ?
{2 H: H# w' i/ ^* X$ {
  if (m_dwPos >= MAX_INVENTORY). v4 E4 B/ M# U+ H7 [' S
  {4 a) t* H, }2 v
   return;
' h/ G; P' q9 Z0 f  }* j: a/ `. |2 Q% `, n2 N5 x& y
  m_Item[m_dwPos].nIndex = nIndex;$ j/ M  z) F8 o
  m_Item[m_dwPos].dwId = m_dwPos;9 F, t/ c6 \7 d1 r  b
  m_dwPos++;- _7 D& P( t+ i: E! L. J
}% d0 d2 X( @- M: [5 P
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
- |! H0 l; h/ _9 S) y{2 [* q/ A& F4 ~, C) j& Y
  for (int i=0;i<MAX_INVENTORY;i++)
' _, j4 E& L9 U4 ?& a2 _+ `% ?- j  {
( A- _* E0 L' O0 F& O   if (m_Item.dwId == dwId)3 e7 |: z: \7 m. n- b: E8 a
   {
! B6 a7 A1 t7 I1 S    return m_Item.nIndex;* t* L9 A4 Z; g
   }, @( F3 T. g8 M3 k& {' t) N/ Q
  }6 j1 `9 }) Q, W
  return 255;# b$ i" d- B" E8 i5 n$ U! t
}2 S% `. O+ f- S( |3 v5 I
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置$ H5 [- J2 |5 J2 U( d' c8 A+ h
{
) o" M9 E5 X0 d$ h! U" r, A$ ~$ ?  BYTE nTmp = 0;
# \+ u" d" B3 |  bool bDest = false,bSrc = false;
7 S, ^5 R$ U% |  for (int i=0;i<MAX_INVENTORY;i++)
% e) Y, n0 t, V, d5 |& @  {
$ X3 l; Z+ W  p  T- {   if (dwSrcId == m_Item.dwId)8 k( K. A5 B3 @; K2 s
   {1 t4 C! F, h, X: c7 t3 b- U. T0 ]9 t
    //id相等 则 改变对应的dest和src4 }; X; m! q9 X$ c8 [% _
    nTmp = m_Item.nIndex;
  `& g0 N1 j2 z, U+ x9 b- t    m_Item.nIndex = dest;
* W2 t! ^8 ~1 {; ^/ B   }7 ^4 {, S+ e3 l- d' v3 B
  }
0 }. n/ m3 |! X# h! i  //临时数据保存完毕,交换开始
$ u- x! D8 f3 W& `9 G6 I% l  for (int i=0;i<MAX_INVENTORY;i++)
$ U2 @, H9 d+ z' p, n- i  {2 Y% b6 _' A: a% P
   if (dest == m_Item.nIndex). \" X+ b  P( o/ o& t8 G
   {5 g" s( Q. A0 [. A+ g
    //id相等 则 改变对应的dest和src
: u1 W- f5 p6 ~2 Z, M, I    m_Item.nIndex = nTmp;  F/ R% @0 ]5 I# C8 G  _* l
   }. l" Z' L: P" v) b6 g9 w  {$ v
  }3 c6 q1 Q8 B, k/ b) j
}
  _; G. r0 ~, s+ J: M0 k& a) X, F; j};. J  g- o- l+ F& ~
-------------------------------------------------------------------------
8 B( z2 Z+ k; E9 H依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): ]2 q" l- W/ S+ K
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);( S6 P( P4 y' u$ h2 n+ Z- O. R
紧靠其上添加:& y( J; i6 Q: s& r0 N" ~2 g/ g/ r
if( pWndBase == &m_wndMenu ). [2 a5 F3 G) O% ]" e
{7 k3 v+ J6 @1 p  a9 H" m. o
  switch( nID )
. L" f- k& h' B4 m+ T# P  {
7 D/ y8 m6 O' c: P' B- s& m  case 2:! ?, m8 u  I) t9 e$ f! h1 H7 \
   {! F( B& P+ H( F) ^/ Q* e
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
$ h- e, f( s8 }! U% A    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))7 ]6 e. L7 h- Q2 q  Y4 x5 R
    {
% ]! P) ~7 P: A* m( L. j7 _     break;" c: f: l( O' y! K7 _
    }# H; R% ]/ @+ B& a8 s
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
3 ?6 k6 r+ x' L) R    {
; c0 e7 l  R5 h     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* @: w9 n! O5 ]
     if( !pItemElem )6 c0 ~- F. x9 v8 X4 Q5 }
      continue;" E0 B3 l; T# E% _4 p* Y
     if(pItemElem->GetExtra() > 0)* Q: U6 t* s0 d2 b# n0 c7 ?% s
      continue;" c+ |( r+ G6 I$ |. W. n  X! n
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
/ _9 [. {5 }! o% s* k' R: S      continue;
( V+ j0 D( e& ]0 `     if( g_pPlayer->IsUsing( pItemElem ) )
6 I' J3 |* Q2 b; _) @7 M" t      continue;
8 p1 c( L! M% A5 {2 K* w     if( pItemElem->IsUndestructable() == TRUE ). A7 _" r  s, w' I7 s* N
     {8 J& W: A( l1 y
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
0 t% z/ j) y) o5 |" c      continue;
2 G3 |8 P) a6 v0 d, ~  F; o     }# i3 ^; t* Q4 w  g" w# P3 k& y# s
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
9 k5 C& W" p; D! d    }
% f# r# ]! u: Z. f, D    break;7 y9 B( U! Q& {3 S+ o" e
   }
: s! p4 l! b5 I- ?, s' Q$ U  case 1:
% H  J& h. o& _0 k; H8 j5 l3 |   {$ \+ n! A8 h9 S
    //整理背包
  @4 S- X+ N6 f( o3 z& q" }    //////////////////////////////////////////////////////////////////////////6 V3 z1 X. [: P: s
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
* E8 t4 u/ F1 f; u. L& L% n    //////////////////////////////////////////////////////////////////////////3 U7 H3 m! Y$ Z, Z
    //////////////////////////////////////////////////////////////////////////" l1 U" [/ E0 H* Z
    CInventorySort* pInvSort = new CInventorySort;; o) U% A+ W/ o: {3 y5 V
    vector <sItem> vItem;
9 A4 J+ T6 v# O0 G- T    vItem.resize(MAX_INVENTORY);//初始化大小+ B& S# T4 V: Y2 C
     //////////////////////////////////////////////////////////////////////////8 _% T0 Y3 p  H/ ?1 L
     //填充数据1 |' Y5 \$ u1 ]) g7 ]: w# b6 t
     for (int i=0;i<MAX_INVENTORY;i++)5 G  d+ }+ _$ T# ~4 F, t
     {
. l, A1 `6 [+ f- s5 B4 X      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. H) N2 w( C. s
      if (!pItemElem)3 F: y# z& X: O% I5 a
      {
  _5 Y( q2 Q8 P% w) @8 V) n6 P$ E       vItem.dwKind2 = 0xffffffff;
' G  a& j1 g1 M+ R7 f2 b  ]. _       vItem.dwItemId = 0xffffffff;
8 k* y( J; T) U% ~7 v" _8 Z  g       vItem.nIndex = i;
4 W* Q; U, U7 N      }else {3 }1 |$ A! T# S6 I
       ItemProp* pProp = pItemElem->GetProp();
9 B9 P) f% e8 ^% s& T  M       vItem.dwKind2 = pProp->dwItemKind2;- {# {, V/ R$ U
       vItem.dwItemId = pItemElem->m_dwItemId;( ^/ E$ G$ Y- A" @3 ?' R/ M$ L
       vItem.nIndex = i;" b, Z/ h& ~9 L, k% ^
      }
2 ], Z. S( }* h( T. U. i      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
$ x4 f) a6 |: J% y; X     }4 N' Q& h- G  V7 I  X+ y
     //////////////////////////////////////////////////////////////////////////
# _4 {9 }6 ^- _: f! X& Q& U! r8 [2 ~     sort(vItem.begin(),vItem.end());//排序
& `; _/ l8 h1 K) Q, i     //////////////////////////////////////////////////////////////////////////! Q( Z; Q) B  N0 ~" \- C' {
     //交换8 X  ~, g4 k5 U3 y& I
     for (size_t i=0;i<vItem.size();i++)
" O0 P( l% h1 w% {" p     {5 l6 X! o' b* m9 _. W& @7 ?
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" ^7 ?! F' U; e) I3 x
      pInvSort->Add(vItem.nIndex);
% G' @" D2 \3 U5 k! p& ~     }
; n% |. ]$ u/ ~$ _- M     BYTE nDestPos = 0;
+ N8 S2 J( m8 T; A     for (int i=0;i<MAX_INVENTORY;i++)
/ k9 U+ W3 x& \& |( Y! G     {' B7 d! ?; K: E8 e4 a$ ~7 @7 \
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);! N# V$ k: F3 I
      if (pItemElem)
) V0 {2 ~+ e3 ^4 S7 s      {
. c8 X6 x- `( A4 }/ Z5 c       if (IsUsingItem(pItemElem))
( K6 U8 {" U  b0 _" y       {
6 [: R" B: ]/ }/ f' u& [, ~! j0 V        //这个位置无法放
& T' j- f6 S; |0 y. }        nDestPos++;
7 t+ L: P& G* d9 l! t       }
0 S4 W: p! h  I! e4 U; O6 G- u0 h      }
  |+ N! I& t" d4 K# y2 D      BYTE nSrc = pInvSort->GetItemSrc(i);* m5 |0 q! h. Q: v/ n
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
6 w9 Z9 {2 D6 n4 o% M      if (pItemElem)
( O6 S: v2 H/ E1 ~1 F9 _( M      {
6 v' x9 l. r8 V$ `( G       if (IsUsingItem(pItemElem))
* y+ H6 P) Y, A4 Y0 M       {
! a. b: K  [; D9 Z0 ^) y, H        //这个道具无法移动,跳过
+ X% I; v2 o) w$ \8 f        continue;$ H' z2 {' r; ]5 j4 h3 ?' Y
       }; z  L5 `" s% c
      }else{8 a+ w. k" _  |4 h) T$ C) [
       //空位置 不用动
( Y; u- k. T: s       continue;
/ t: L0 C+ T+ X" y" I      }2 z- R) K2 d7 @/ n4 A7 X7 O& v
      //////////////////////////////////////////////////////////////////////////- v- U" c3 f4 q% z3 X
      //开始移动
5 Z% a9 Y) Y$ a8 @% D      if (nSrc == nDestPos)* M& p7 S4 E  G, b4 k
      {
0 F5 G% R1 @$ v4 p) C       //原地不动
5 ]$ K8 @9 V9 p# A- g0 N+ q3 A       nDestPos++;( B$ ], Z, H3 K, M: d2 ^
       continue;
' s0 k+ U3 i' I7 m) R' O      }; M0 }& V* k+ O* m* U2 w
      pInvSort->MoveItem(i,nDestPos);
( x' ?/ M# N) r! T, M) Q      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
  \4 p2 q1 q5 C5 ?/ h/ A' I      Sleep(5);
$ @8 V# A5 a. {# _4 ]      //Error("移动 - %d->%d",nSrc,nDestPos);
1 N, F3 `' Y& s; c% j% k0 }) o8 W      nDestPos++;
  ]! F6 v" C: T. L8 n; c' a  w/ Q     }& s! g) k/ @4 E  G% F
     //取第一个元素的信息2 u/ `" ]( n& u* f3 E
     /*9 V. V2 Q' f& |
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff): [- m5 p( G3 _4 l0 R! I7 B
     {: N2 H4 o. c% R# m/ a! _. ]
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
& A7 \% W# a  z4 j% a      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
" `: K8 r  W$ K3 r( _+ T2 R4 K2 M     }. e2 ?% F0 e( u* J9 k) M
     */5 |7 L- o6 o5 V' m' ]& m& m
    //////////////////////////////////////////////////////////////////////////' h8 Y" E9 I4 V# ]$ s! |2 E8 h; z
    break;
9 A6 r* x9 ?$ g   }
8 {0 K. |7 R( u; {" _6 k- m  } + d8 q) X, }3 O& a% W7 a1 U' c" i
}
0 r1 a& q' v) f0 z/ Y' Rm_wndMenu.SetVisible(FALSE);
. j/ D/ L) U) [+ `8 T7 v. G
" ~' |7 b. l3 e6 d2 p! U--------------------------------------------------------------------------------------------------------( L/ j* e% Z9 i6 k; k1 G( F0 |$ {  Q
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)' o# w- f6 ?2 d: Q; T
{1 E! H2 z  Y( I  _8 C4 F$ a
BaseMouseCursor();( D; W+ ^3 u+ S5 R
}) Q8 C- @8 d8 P  D
在其下添加:
+ _9 b1 q9 W: D( j% n) m+ ~0 R0 svoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
4 t3 _: i1 ~0 Q0 R{: q) l3 O9 o; n. ]% l
m_wndMenu.DeleteAllMenu();# s9 |& e9 `  i
m_wndMenu.CreateMenu(this);, {+ |- a: D' w! b* J2 O+ O, E
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
* r; Q1 G. _6 W! A) `0 b4 m: M! G3 i6 @" }
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
4 ]2 K5 \6 y; c; C% f3 G{
, n, A/ c7 u: ^0 J  //P以上级别才可以删除所有道具
( s8 Z3 R5 {% {) S' d2 H  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");% f9 |, ?2 g. V: y3 z
}, u0 \0 H9 }& v0 ^; b0 |) ?' s5 _
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );! O" M) q2 {& m, t, h
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
; F3 z7 S) G( T" N; \1 Pm_wndMenu.SetFocus();
* ^3 V# K5 M. H- \, v}
0 q) K4 X! P+ E0 N------------------------------------------------------------------------------------------------------------2 w+ a+ y: u, b- o; ]3 U- r" _
*************************
; J4 V9 x- R8 T% ~- g9 @) p0 IWndField.h文件. [8 o) ^7 f5 e( J
*************************
. [( v5 Y* `! b2 n  G搜索:BOOL m_bReport;! M# t. w/ P0 C0 n* x: _
其后添加:
) f! O& R8 i* V6 s7 _. nCWndMenu m_wndMenu;
# e9 A: }$ }7 q搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
& f( H* a6 a) ?+ D其后添加:
: q. T3 p0 ]$ ^: D0 \- y2 pvirtual void OnRButtonUp(UINT nFlags, CPoint point);
  S- u6 {* n) @
. g& }$ f( o$ E2 K% O3 r; c$ W0 k6 c" U" R7 n' @% d! L- F

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-21 21:10 , Processed in 0.067030 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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