飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件/ t' U/ C) _7 n
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
# s- I# ^7 t" z( _8 Y: s
4 s7 s. [+ R- r& o6 N% X# Astruct sItem
; c+ ^& y# m/ e{8 T5 W8 a  a; I9 S" q; |: `$ o
DWORD dwId;
" E0 p0 T9 l) [) k! CDWORD dwKind2;
5 n$ y/ [; ^6 ^: k7 fDWORD dwItemId;
$ e. s* |3 O* R9 v8 o- M* h+ xBYTE nIndex;) Q8 C7 m( @; H& e# v+ Y6 E4 l
sItem(){
+ R& m, f, ^5 U" x  dwId = dwKind2 = dwItemId = nIndex = 0;# S2 n/ M* F$ j
}
% M& z( d- p$ h; [5 \5 pbool operator < (const sItem p2)! [' e, P  E+ B* \% @1 @
{
/ ~7 _0 }5 t9 A* s$ _2 S  if (dwKind2 == p2.dwKind2)
3 _4 S# k' i7 W  {
( t: }5 r* X6 {1 v8 I   return dwItemId < p2.dwItemId;
4 l5 O+ W& N0 Y; M, n" `  }else{8 q* V: f9 K' [  ?
   return dwKind2 < p2.dwKind2;
! [+ U" ^" V  O; i' }% _  }
, m( D( S: C( V+ V! i8 z+ d6 v: I}
/ h  J0 N" r* J, a};- l+ n% y# l+ Z+ P% u1 L# f7 b! L4 `! Y
class CInventorySort: J$ a* B9 [/ y0 @
{! t9 u- I, H  a$ [- y  n: V8 P) I
public:
  d9 L+ |: ^+ {" G) lCInventorySort()! u$ |1 M, n# m; j" H7 D
{& A, P" I3 V3 ?' q5 @9 u# c
  m_dwPos = 0;. [9 t2 I, C5 y3 R+ [5 |$ z: X
}* u( U( m" o+ \* {& S, ^9 w$ K/ j
~CInventorySort(){}
8 N* o. \/ U1 L+ ^  U7 Zprivate:* E3 N/ q  O/ m  ^
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
6 {0 _' l, t1 [- a3 WDWORD m_dwPos;
" w3 Q/ e( J! X3 a9 |  zpublic:
. s5 N/ d9 B  r8 q. @void Add(BYTE nIndex)
2 \. P. R( c- I0 j+ S7 `{
" e* t- t5 F6 w5 [* t/ v) z  if (m_dwPos >= MAX_INVENTORY)
- O+ b. C$ p  m0 h: k% _0 _/ D  {
. c( \: h) r: U* V/ x+ }9 {8 Y" J   return;
: q* u- q5 G5 Z% X$ Q  }
2 M( \: Z5 I" s3 p  m_Item[m_dwPos].nIndex = nIndex;
6 h0 J, \& A! e7 }' k9 ~  m_Item[m_dwPos].dwId = m_dwPos;4 ?: G; P' f3 p! i" D+ m
  m_dwPos++;6 P& o' d0 E/ O& ]0 @
}
# U( Q+ F9 V1 F5 {& r3 x: ]2 v+ CBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
7 q! [/ [/ V* `! I2 E2 r, o{2 y( ?- d& W5 k- N" l: w
  for (int i=0;i<MAX_INVENTORY;i++)6 G% ?1 p# Z4 a1 R! r% b
  {# Z" P+ z# P- \) o; E9 x$ B* T
   if (m_Item.dwId == dwId)
/ Z# |( f% k5 @) h0 T   {1 R! e; y" b( Z
    return m_Item.nIndex;
. f" a- z; e3 G- m9 @   }6 B- i3 X! k; i( a8 J; d
  }
( U- Q6 e& F: q# |: p  return 255;
9 i$ g" U4 t1 W6 R! @* x- f9 B4 u}7 N4 H& [  J, N# n1 M, V* V
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
% u2 t3 r; ~7 m6 `( l' s. j{" X+ _3 b" y# X; `! ~+ ~$ ^
  BYTE nTmp = 0;
7 S1 G3 H4 V5 T, t; S, ~  bool bDest = false,bSrc = false;
$ U& O& `3 B3 u7 S7 I" M  for (int i=0;i<MAX_INVENTORY;i++)
. [6 J1 Y& m! X6 z* {/ r) \- ~  {
: o7 |3 h. [% \/ H+ I  L0 B; v) k9 L   if (dwSrcId == m_Item.dwId)
% e% c5 Y8 a9 {( e+ u0 x2 h   {9 S' I: z; L! x8 q0 V+ j. V
    //id相等 则 改变对应的dest和src0 @1 V' p6 l+ t9 e+ a6 M+ \! C4 j
    nTmp = m_Item.nIndex;
* F: ?# O- V2 z2 o' E+ Z0 |    m_Item.nIndex = dest;
7 o' y+ {  X$ Z) C: m( \   }
) `) j2 `9 J% w9 g4 [% i. b  }8 d) s8 u1 a+ K
  //临时数据保存完毕,交换开始  \, S' y& L% M  ^, q4 p
  for (int i=0;i<MAX_INVENTORY;i++)
& r8 H( X" z7 h' Q) |" i$ k: O  {
% o. J* {; ]1 e! h   if (dest == m_Item.nIndex)
' q" r4 b/ [; c* E   {
  t! R8 Q( ]0 A4 `1 d2 y    //id相等 则 改变对应的dest和src
- T" d+ e0 \6 [" U( Q6 A, G* Q: O    m_Item.nIndex = nTmp;7 Z) M$ G1 X9 M
   }$ Y" l7 P1 W  g/ ]2 C
  }* x% i( R8 N( ]1 P
}
. V% v; o' B9 u1 k6 R};
4 r, }( a- Q+ E6 W' Z6 H  t8 G4 J-------------------------------------------------------------------------
+ {5 H/ L; z0 ~; w1 s依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 R: f) B4 G4 O' m, ?# c( V9 Q
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
' Y* a/ y: v( C, |紧靠其上添加:
6 d( e  W0 f+ B# ]/ nif( pWndBase == &m_wndMenu )
+ d4 _; Z5 W5 K1 ^{
! E! b7 k7 q  E4 r, Q  switch( nID )
7 D: O9 g/ Y8 z* b. F2 x0 t  {
$ N) m$ x1 E; Z- w( D4 I  case 2:
& l5 S- R! h: W) s( }; P3 V: l   {
+ a5 \4 l' R+ ?    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
6 h; |- o' V1 u9 k$ J$ Q, u    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))" L5 n$ A" x7 u+ L
    {' @4 Y; @' h2 e, _
     break;
" N. x7 c% j6 G: H# F    }
7 g1 }: X+ x" g* S- Q    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
% q, f, f: @' C. ^& N5 T& [! q    {
0 r7 o! k6 p1 B0 ]     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" C3 B4 {, ^+ c7 t7 b     if( !pItemElem )
: ^1 `% O1 _) B3 r. `      continue;( h( w5 _* Z8 s) k
     if(pItemElem->GetExtra() > 0)
$ p/ V6 {3 e+ N7 q+ S      continue;
! {, S9 h7 @: _8 Y! G- |     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
( l8 Q: _$ v3 s      continue;
1 u( i. O9 F7 e7 u& L     if( g_pPlayer->IsUsing( pItemElem ) )
6 X# S4 f+ \% U6 O      continue;5 ~5 [9 ^! t( r+ H, h% {- d" r9 f
     if( pItemElem->IsUndestructable() == TRUE )
5 ^1 H) c8 g7 x3 [2 U     {
0 m( p. Y& v( K2 i6 |/ S      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
- k/ q' }  U! K1 k5 m& l1 F      continue;
3 h- \5 G+ r' o$ n- J* D     }! z: A/ f$ t1 |; b+ h. F
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
' a& E/ y- ?, V' s    }
+ A4 {' a5 _& v  ~6 F# w: E    break;
4 A, ?, j" J- {' d  `* ]' w   }
9 n9 l$ D8 v: z1 x  case 1:9 P- [, Y0 F# f& z- ^
   {7 J" L* j+ O, q. c; p9 p
    //整理背包0 ]" z( S. a8 @% [
    //////////////////////////////////////////////////////////////////////////0 T7 x1 O7 n  P5 G- I$ F
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
& A, f, s' g8 g0 w    //////////////////////////////////////////////////////////////////////////
8 D4 v, f' S/ X7 g5 S    //////////////////////////////////////////////////////////////////////////# v' k5 K6 t; s1 O5 R; U
    CInventorySort* pInvSort = new CInventorySort;* b4 r/ u; Q: _
    vector <sItem> vItem;8 t: h- T. R/ `" J8 \! a( H
    vItem.resize(MAX_INVENTORY);//初始化大小
: W* H4 Y; q1 e" M; g) [9 m     //////////////////////////////////////////////////////////////////////////* k  ?) O/ X# ]/ u2 ^* q1 e" c  |
     //填充数据4 i" i) p! Q; o- G9 Y* F/ B
     for (int i=0;i<MAX_INVENTORY;i++). o5 I( H$ K3 w0 H- i" ?
     {( s% B  w( O' x. F7 h  A: q
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
) F( e# J0 O1 D; w      if (!pItemElem)
: m9 s  o& R3 m9 @- @- H      {
. x1 @. d4 F. {: m. w0 n7 s% [, \       vItem.dwKind2 = 0xffffffff;( G3 `5 C6 {$ u, t! K
       vItem.dwItemId = 0xffffffff;" Q3 P, }& G6 {! r: |* {7 N8 \9 U0 K
       vItem.nIndex = i;% w# E; R. l' p0 p* a
      }else {
5 i! L8 Y; k  c; I- x, B6 W       ItemProp* pProp = pItemElem->GetProp();
* l9 j' F4 l" t, v1 e2 M       vItem.dwKind2 = pProp->dwItemKind2;8 a- r7 Z3 e+ a+ r/ B4 C
       vItem.dwItemId = pItemElem->m_dwItemId;
# P0 t9 C2 t' D       vItem.nIndex = i;" s! j& s- {- h* v
      }
0 x0 M* g0 d! y: J  ~' ]      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 X& N: y, V7 q  x5 S
     }
, v2 l( a4 L! x     //////////////////////////////////////////////////////////////////////////
9 b3 r3 y7 q+ e4 A     sort(vItem.begin(),vItem.end());//排序
" ~6 d* A6 `# U* Z  E     //////////////////////////////////////////////////////////////////////////" R0 ^* F; [# D! k+ f3 E
     //交换7 i) }( `2 w/ o; G9 E6 G+ V# `
     for (size_t i=0;i<vItem.size();i++)& V9 m7 H' ~$ Z  U2 @' m
     {3 B! X9 c2 i& L/ C5 {& }
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
$ l1 x% S/ M5 q6 r# D" W' w# A      pInvSort->Add(vItem.nIndex);
  C5 K8 T$ x$ U6 y# F$ N     }
: N. K9 ~/ u: l. u  U3 m" P     BYTE nDestPos = 0;
' B, K$ r1 z$ h9 y7 n7 f     for (int i=0;i<MAX_INVENTORY;i++)
8 Q( i) o( C# H! q% Y     {+ K4 t( ^( y6 Q0 p/ G4 s6 i& v) E- w
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
0 Z4 z. _2 y  X- R& W      if (pItemElem)
0 b- C  @: ^" g$ \$ }$ L      {6 E  G) S9 B0 M  Q) h. z
       if (IsUsingItem(pItemElem))& T3 ^: ?: H9 |  F
       {" ^' T  n# u7 M# z* w, q" t
        //这个位置无法放# q, a5 o# U5 j# t# F
        nDestPos++;
& a. p1 V% E$ x. }( j       }
2 g& U6 g+ S9 _/ ^, r7 w- w      }
" x6 E( F% m3 z0 N6 Z* `& s      BYTE nSrc = pInvSort->GetItemSrc(i);6 C1 W# J6 Q) Y* j' M
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);3 j' u& h' R3 F
      if (pItemElem)2 \6 W  ~, |$ c9 o4 f
      {
# H7 a/ L3 I' }       if (IsUsingItem(pItemElem))6 F. H5 C5 [' q5 M; T1 `! ^# Z3 b
       {
6 a$ u# |; X( f% U+ A8 t+ K8 h4 Y        //这个道具无法移动,跳过
/ C/ @! R( ?* _% `8 u        continue;
( n" x  M1 W2 V; o* l/ s& e       }- L) k3 _/ t) H( M, l6 O
      }else{2 p2 t% a  x* `0 M7 @1 ^% I
       //空位置 不用动8 x# a) `4 F2 v+ J& P& B: Z
       continue;
) S! s, Z0 g$ F. o      }1 Z& |- `4 J4 ?& u
      //////////////////////////////////////////////////////////////////////////" @5 U/ e6 u2 P, |: \( E
      //开始移动
( W* c" U: y0 c1 v' @      if (nSrc == nDestPos)9 J3 d9 k( ^: t0 w
      {
1 z- }& o2 g; m       //原地不动
+ ]3 y4 F# }! v, v       nDestPos++;
& z; W* f2 [/ Y/ n5 ^- R$ V* I9 A       continue;6 Q( U9 [: Y9 |; ~" k
      }
" T, C; D2 u9 k$ e, v% q& R      pInvSort->MoveItem(i,nDestPos);
$ @2 h3 V! N% B/ f8 b      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
1 n( O& Y$ Q& m* F" o" [/ I% S      Sleep(5);
* E. M' V4 @( ~) D      //Error("移动 - %d->%d",nSrc,nDestPos);6 t% x) Z. y/ ^/ [7 o. F
      nDestPos++;9 E7 V% }" w, f0 A& \5 m
     }# i' W4 u3 \" z, x3 G  b( h0 Z
     //取第一个元素的信息8 t, d1 h5 f. x, F  p1 {& W
     /*
: `+ @! M+ s" \  q7 I; J, b; |     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
- b3 v9 r( l( y5 G     {
/ ]) ?+ Q. m2 z+ G) _; m      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
# @3 T' c9 I' {* w! r      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);. o" |+ Z  ~9 A7 b# n- [  }+ K9 C2 M' K
     }
, B$ i, s6 J; l0 D& Q     */
" A0 f' g; H" H) M6 K( O    //////////////////////////////////////////////////////////////////////////, \* k& F& k1 t5 D; y
    break;
& K+ S$ S% b) \. O   }
) t0 k# w5 m; P2 A  } " f7 \, {; G* F) D. b2 ]( t* H
}
- U: x: F+ v, U  dm_wndMenu.SetVisible(FALSE);# }8 ~0 M8 H' Q5 P- M2 E

, r* m0 c9 D$ g1 b, j--------------------------------------------------------------------------------------------------------
) g0 W% g% \2 @, X搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)( A$ Y% P8 h6 r8 ^4 k8 H4 N
{
8 Z( `0 h; p) z* dBaseMouseCursor();
, r6 _1 b4 N8 Q) M7 b- s# V}
+ H9 a* V5 }( N1 W' j. X1 ^在其下添加:8 h- o3 j: }5 a7 Y( l/ K
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point): B4 ?9 O+ o' \( e! p. ?
{8 V+ y" n8 U) s3 }1 S5 _$ n
m_wndMenu.DeleteAllMenu();
; z. M$ P, j; Q8 n, ?  `8 Jm_wndMenu.CreateMenu(this);
: H& O! w! U3 _( G/ Xm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");) `' }, f6 K8 y" N8 F

2 W& k4 P+ B5 E. P, b. gif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 [3 o( K! p3 n+ D
{
: {6 Y" z8 B7 t* a+ U  //P以上级别才可以删除所有道具
8 M5 l& K1 J: k6 p, P7 m' [. D  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");3 P. g$ }  B9 X. _: G4 G7 x
}
& D  Y+ ]+ Q9 H+ G7 s' ]m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
! l+ l3 m6 [: M$ x$ x) ]m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );' M1 F. L: c# |) v
m_wndMenu.SetFocus();
* |1 J0 n  c. P/ Z5 r}
8 g- ^4 T- F1 s$ x7 c9 r: w8 J------------------------------------------------------------------------------------------------------------% z% T7 ^# k( V. w% ~& l6 _3 L
*************************
8 E: M2 A; ?' z: [. t9 uWndField.h文件
( `1 S6 k: ]$ n  S5 {- D) u*************************4 p% n4 ~( j; a# Y: ^& \& s+ b- f
搜索:BOOL m_bReport;
8 G- X5 K& x; P$ }  q' l其后添加:
& b* j+ p9 C5 C" A& t0 d  k2 Z% hCWndMenu m_wndMenu;
4 l. ~6 t4 M$ Z搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);! |$ h2 _) i, E& T1 s
其后添加:5 N4 C- O8 l0 u7 }$ g
virtual void OnRButtonUp(UINT nFlags, CPoint point);( c- F2 J1 b: S9 X; K

" y0 @9 I# e; u9 k/ o4 R' c1 g/ O9 n" x: ^; O( F# Y! b

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-30 11:59 , Processed in 0.064708 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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