飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件. L# @# H" g& }: x+ P
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: t8 v- D5 u0 `# D4 s& t: R4 N4 t! L; z/ t$ Q' n  p% U
struct sItem& `) k3 y6 ~  T7 m7 Q
{0 c( t' k1 W; G7 k) l. g* v
DWORD dwId;
0 F( w" D$ f! f6 SDWORD dwKind2;2 b, u# S/ E/ l" R/ B
DWORD dwItemId;" a2 c: _# y3 a& u7 r+ M; C) ^# _
BYTE nIndex;
. L$ e5 C7 O9 ]& psItem(){
# e/ G' O3 K) W: v" ]" e- d5 _: ~  dwId = dwKind2 = dwItemId = nIndex = 0;- a/ v* L4 h' ]4 I( G
}
6 S2 L$ a/ d* qbool operator < (const sItem p2)
/ r5 t7 s( l9 t1 A* i3 J- Z{5 J: w: _* J6 e" n
  if (dwKind2 == p2.dwKind2)
9 J2 i( t8 Z" a4 c1 S( `3 r5 Q  {8 ~  [2 X' q" c" |
   return dwItemId < p2.dwItemId;
$ r5 y& i' P. e0 L% L1 Y  }else{' y( m% G9 u$ j2 M% \# J; u
   return dwKind2 < p2.dwKind2;
( }) j8 t; Q$ O4 @) N  }
" [# w. H& M/ q# H7 F( q" V. b. S}
- C! Y9 l6 \; J, Y};# l! X8 c6 [# E
class CInventorySort
6 o* y. w/ S# A2 W/ P' G  S# A{
: L) ?* M& o: }- _public:" }0 b% N1 V! O/ w
CInventorySort()4 v5 {3 E% l/ d
{4 G& h) p9 y; @6 E
  m_dwPos = 0;
3 f) w0 g' ]& g" W, y}
4 ]6 W' i6 E6 ~' \1 t~CInventorySort(){}
3 A' k: G$ w: a4 f4 Yprivate:
* C" A5 U7 h, I% v# _- I- g/ j7 r7 NsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息1 ~7 K; z7 H: `
DWORD m_dwPos;. ]. p) w2 r' S9 J- T
public:
3 T! Q4 N8 o5 n- \8 b- pvoid Add(BYTE nIndex)9 o6 ~: O% k+ W
{" }: X4 z+ V: P' N9 x. X
  if (m_dwPos >= MAX_INVENTORY)- c2 o, u5 t3 E) S
  {
* o* ^' E1 m2 r+ c) f' d7 e7 A6 F2 i   return;( a5 X8 c8 [$ |2 P+ }
  }
9 S1 l4 ?  [7 m0 C' u  m_Item[m_dwPos].nIndex = nIndex;. |, ^) ~' P7 x. H. i/ F8 R
  m_Item[m_dwPos].dwId = m_dwPos;3 M5 J) r" Y! O1 Y( C! S0 `
  m_dwPos++;
; Q1 S  b' V! ^$ \}
4 w" ^/ H. ^7 ^: o/ NBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
- p: j, X, R3 D& b8 b{8 ^. u( a8 F3 Q$ }- n
  for (int i=0;i<MAX_INVENTORY;i++)
8 v: N5 o+ d" q3 m1 ?  {* d' }; E$ X" Z0 B8 F5 k
   if (m_Item.dwId == dwId)
! D) H, v" h6 D   {9 L% Q0 c( R. L; w3 N" D! |
    return m_Item.nIndex;; i* |% U0 [. k/ b; r0 O
   }: D8 E/ S! {; D& M) _; k
  }
2 E; M0 w1 K2 `" r( q1 ]  return 255;$ s" X, c0 Z' ?$ U
}
2 z* a1 P) X$ D0 D" w  dvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
$ d5 P" ]8 n  |{
* \: ^* F! H9 {6 J  BYTE nTmp = 0;
# _% v+ n" ?; Y$ `- L5 _4 @  bool bDest = false,bSrc = false;
1 U* b- E; _# Y3 m3 D  Y  for (int i=0;i<MAX_INVENTORY;i++)5 y' a2 J0 I$ s: w* h4 W3 L' Q  E
  {
: k$ e2 L/ @6 @1 j: x  j5 K2 ^   if (dwSrcId == m_Item.dwId)
9 ], J1 e# [9 t, y   {
5 L- B" _3 M# n, U, x    //id相等 则 改变对应的dest和src
& o" y) t" `* x# c4 e% E* l% t    nTmp = m_Item.nIndex;
' q% m8 P! Y' Y' j% O    m_Item.nIndex = dest;  J/ {  m2 }' E  O- S" ]* T
   }
1 @- w9 M# x# s# z  }
* A* ^, L; P# r  //临时数据保存完毕,交换开始
: d/ `/ P/ s. M( }4 F* A  for (int i=0;i<MAX_INVENTORY;i++), A& c3 h: U! b: p0 S! @8 G
  {: p6 o' ?5 ?( c6 ]  j6 s* X: N) E
   if (dest == m_Item.nIndex)( C# `+ r7 H# ]
   {, u) U  @9 I% O  C, v% F
    //id相等 则 改变对应的dest和src! h6 L% {8 t+ ]
    m_Item.nIndex = nTmp;
" z/ P9 W( {/ @3 W   }3 G' Y, i4 p: S1 {
  }! K! L1 l! u% D. Y+ b: S
}
- I, |1 w2 C+ e; `5 u9 w4 z% p; T};
% P0 u/ F( a/ n9 W-------------------------------------------------------------------------& H/ d" _# k9 G6 _1 I/ Y6 z
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )2 |, q3 f, I; p
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
' a1 R% ]: d" v/ T; F" H0 a紧靠其上添加:* x( m- o+ @4 i( {: J7 v
if( pWndBase == &m_wndMenu )
. M3 Y! h2 N! e  S{# ^1 G/ _3 u' N0 I. A7 q
  switch( nID )
# X; z% Y, O7 B; u  {
  G/ ~0 o) M; U+ q& Q3 V( ^5 ^  case 2:
$ @. A  e! Y9 }# |   {- l: Y  n3 E0 y% S' r) Q
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
1 l9 F! o5 e. s; k1 a. e# S    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 ~4 i0 n& r, @! b    {: j; D8 n3 i3 i7 J& f, b" t
     break;
  \: o+ g7 ]2 M' p    }& k5 j" }7 ~! ~- V
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
( m/ b4 G. v7 Z6 [: G* p    {, z+ Z6 e! _7 ]! w& v/ p
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);; N7 ?  Q( P% i& j0 z" a
     if( !pItemElem )6 z, v: O; @9 G9 V6 `' x3 _. G
      continue;) B* d: Z# X) s( [- ?; \! w
     if(pItemElem->GetExtra() > 0)
! V- b6 x; y4 }) [& _      continue;: u3 a4 {6 h- l/ w) N
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
' A3 L5 Z( [7 N/ H      continue;
: i  `* k7 p; M) y0 D     if( g_pPlayer->IsUsing( pItemElem ) )
" q* G: @' n" p8 n      continue;4 J* H, N, E* h* `
     if( pItemElem->IsUndestructable() == TRUE )# H3 p' _2 Z- w- G/ a
     {! Q3 q& n' A' S$ b( f' N
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
- {- j& c5 k9 ~( e1 |3 z- ^      continue;/ V) |% {0 _" n2 _: }
     }3 c" P* Z5 o0 [
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
% @/ l. L* w! T7 L# e$ i7 l, ~    }
! k9 C# j: N4 l, J5 W% D    break;
' w; `, ?/ O" T3 I( r1 ?   }. q( D) A& U) c" V
  case 1:
  r2 _  M  ^( v, w1 M  S9 ?( K$ M   {
& Q/ {5 e4 W9 z# E4 C    //整理背包
# m+ Z7 o7 p4 J3 j7 [* @9 |+ K' i6 [) G    //////////////////////////////////////////////////////////////////////////1 `# ?6 [- Z" j  A' ]  G) p; \
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );$ V% N0 w5 V2 |) I; f7 b7 {
    //////////////////////////////////////////////////////////////////////////
) x) d+ U% h$ q! r1 T    //////////////////////////////////////////////////////////////////////////
2 }: M0 z! a3 @$ V  r5 V- v$ ~. V    CInventorySort* pInvSort = new CInventorySort;# I0 D4 `. S  x4 o' X
    vector <sItem> vItem;# U5 M' J7 r, f  f7 V( C
    vItem.resize(MAX_INVENTORY);//初始化大小
7 n( B' ?8 L# Z6 T1 I" o6 B     //////////////////////////////////////////////////////////////////////////+ T0 ~7 n- v) q+ z/ P: K
     //填充数据; c0 H  s1 g. n9 j
     for (int i=0;i<MAX_INVENTORY;i++)7 j% A0 m5 o/ a( Y
     {
* {" Z( @2 Q& y% d! Z$ n" Y; P      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);# Z3 Y. v' T+ @, T- [
      if (!pItemElem)
4 S: D1 e7 d+ ~' p4 i) g. Y( @6 o      {: f. [& l0 b, M
       vItem.dwKind2 = 0xffffffff;
% [" I) ]' W$ b( x$ x       vItem.dwItemId = 0xffffffff;
7 B7 g% [8 y8 A# u' q: p       vItem.nIndex = i;
$ z, u6 K5 }- i  f3 y/ K' L* w' a      }else {  D4 E# _% K1 u* J8 B/ W4 D, g; y5 E
       ItemProp* pProp = pItemElem->GetProp();$ L3 T) n1 C7 `, n$ L) J8 N
       vItem.dwKind2 = pProp->dwItemKind2;( |  j; z) Y% T3 I" J& }+ X6 b: i- h
       vItem.dwItemId = pItemElem->m_dwItemId;9 C2 \' a7 M9 m9 L: t
       vItem.nIndex = i;# e( e; P8 r. ~- k) H
      }) F$ D+ \/ n% k" X  }
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- T$ I' a1 ^7 t% ]) M& w. P6 k     }' w4 f7 `# p4 ^
     //////////////////////////////////////////////////////////////////////////
$ m, ^* l) C, m0 _* D* ^9 {     sort(vItem.begin(),vItem.end());//排序2 a7 m2 B" q5 i: \, |! b) t/ i5 l
     //////////////////////////////////////////////////////////////////////////
1 ^8 {6 t( _% n9 \     //交换
0 x, ~; e" M) P; N1 _$ j     for (size_t i=0;i<vItem.size();i++)
$ ^5 n+ i' }/ |: j5 ~     {
; B( H2 u- M* s, i; ^3 n( V      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 y0 h& Q& a4 U+ d9 n
      pInvSort->Add(vItem.nIndex);% ?5 J! R6 w+ R% }7 L
     }& d* n  M$ ^; s% b9 W2 q# d$ h
     BYTE nDestPos = 0;- k5 y. B) N. r$ z' L- l& a
     for (int i=0;i<MAX_INVENTORY;i++)
% U+ ^3 N5 M% o     {
+ _6 D0 `$ Q7 G4 i      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
* m8 |" f# j/ c      if (pItemElem)
3 d1 T4 x% @  X+ s' i& _      {
' ~# S6 ^7 c9 L$ c1 T0 v       if (IsUsingItem(pItemElem))
$ J+ O' t" X" R/ ]2 \2 Y5 O       {2 C& }1 M% V  Q* I, j* o
        //这个位置无法放9 f, S8 w5 N# y) ?0 D8 `
        nDestPos++;
; V" i( }* E+ e" L8 C       }
( X0 i; B) G5 [; I' M8 X: d: `0 o      }
% ]6 h: O( ~- m% l- ]) `8 V      BYTE nSrc = pInvSort->GetItemSrc(i);
. v6 F. M9 ?- x8 B8 _+ l/ z, X      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);1 i: t& ^  M: R0 l, x: ~) V
      if (pItemElem)6 h; |2 I$ Q& h1 y1 \) f) Z
      {
) ?# k1 n& l& D6 h* f4 u' n4 C       if (IsUsingItem(pItemElem))8 }" }: Q' G" f9 l5 [
       {2 x0 v: L3 P6 U3 d/ Y/ G7 I, {
        //这个道具无法移动,跳过( i* L$ H  h# E$ T0 F8 m  I1 Q! m
        continue;
$ f) `; z1 e- Z4 ]" S! S       }
, v/ _& I6 e6 @8 S  j5 v; y# c      }else{! h- c& L4 I! A5 ^4 w2 ^% h. U
       //空位置 不用动9 {- b3 Z. C$ v0 y
       continue;
4 X. U( K4 k) S* c/ }0 f      }
- ^# K& [% I2 u: n* k. t      //////////////////////////////////////////////////////////////////////////- ~0 _0 H" b+ E4 `7 U! h
      //开始移动# ~; `* X3 ^+ t+ Y1 k
      if (nSrc == nDestPos)
: F! U. ?* P& i: p      {; C$ [: ]  t# I5 [3 q9 r$ \
       //原地不动
+ `$ r5 v' g7 N/ ^       nDestPos++;
2 u& S3 R4 Q* M2 L5 g" a       continue;
. _1 o$ I4 @5 ~6 t3 M9 w9 Z, m  I. U      }
6 t( O/ C+ H$ N/ Q& `      pInvSort->MoveItem(i,nDestPos);
8 S' X/ R8 Y, F0 C2 ~) q/ h      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
) P6 [- P7 C8 n. X* h; `* |      Sleep(5);
+ g0 L4 {% H7 p% g6 ]7 w* A      //Error("移动 - %d->%d",nSrc,nDestPos);) O( V% C. V, ~; ]/ U6 D
      nDestPos++;% ^) p- T3 q1 [2 {0 W
     }( I& O& b. @; m2 Z0 z/ V% g7 {
     //取第一个元素的信息
; ?, o8 ?- d9 i0 \( c) W     /*( W5 |, j7 x1 F( c% M& q
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
9 Z. j' r/ j+ [5 v) E     {
7 z5 R& `; o& \, f$ o' s% j      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);7 I; W6 g4 z# L$ u
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);( V  _* H$ g" \9 g7 U) R2 L9 B
     }* }0 K* M) i6 _% ^' `1 L
     */
2 Z+ D' w: V) f' t# V    //////////////////////////////////////////////////////////////////////////
5 K+ L# Z+ U" t! S; [1 O  @; u    break;; L4 v" E1 v8 F
   }
. s) y6 M( h+ H  k, W  }
8 x" o6 H! F( q# J4 u}# ~5 L. W$ f6 T" X8 f1 t* g
m_wndMenu.SetVisible(FALSE);. |) X: E0 i7 J# E% R3 G3 g

" x' o2 u4 z5 N: M3 z* g--------------------------------------------------------------------------------------------------------
5 S' ^$ y$ h  G- W- D搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
; e3 O3 O8 [; H  s3 W{6 f( ~; L" h, {+ f) R
BaseMouseCursor();# v& R3 M  [* c" F( F; f
}; c" D# \* r+ ~6 y) \+ ~
在其下添加:
4 C+ M& i1 K* V1 W# qvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
0 H3 R  e) G* I+ \* B{2 S5 {* j7 ?- s$ {4 g1 `
m_wndMenu.DeleteAllMenu();
- y5 g) E0 [+ L: `m_wndMenu.CreateMenu(this);9 m  X! L+ W. _) ?" F3 S0 H; X
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
: `- m! I* [$ S6 I/ R% Z' n& D: n, {3 e( q' g; v
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). f/ G3 k# Y$ N  M# A% u# s7 n9 u* ]
{/ c0 o$ T0 b: l, {4 e
  //P以上级别才可以删除所有道具
# V$ b. S5 X" \$ K* l: ?  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
& w# g, h+ s) x' x% [$ X}
8 q1 V, Z7 C2 i& Km_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );8 H# @( e& G, Q: F' j
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );, P' K. W3 Q" ^1 |4 B. P# N- B
m_wndMenu.SetFocus();
# x) i* N, \% I! r9 u}
+ T4 M. f! h% s  l5 m------------------------------------------------------------------------------------------------------------
+ q: Q; F3 `( c+ K$ U*************************2 K% k9 Z* r) [
WndField.h文件$ o# I4 v  e/ D8 @. n
*************************9 V( ^5 Y2 O2 ^8 ^* |3 @
搜索:BOOL m_bReport;
4 m. N) m" o* S! C1 |7 t: b其后添加:
; p5 `% g9 _9 k' k! I! O7 sCWndMenu m_wndMenu;
/ ?# R2 m# h1 M7 F  \+ Q搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
3 y" o8 @; v4 w4 G) Z% n) t2 y其后添加:
, \  n) z# o, x+ }+ Q- x0 b- avirtual void OnRButtonUp(UINT nFlags, CPoint point);
# m5 ?: o% L3 J# b8 Q; k+ v
, d* o% l+ A  J5 m
' B5 Z  f  _2 x% [9 c$ J

相关帖子

回复

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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