飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
9 K  q) d; B6 `+ o搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): i# C0 N) E2 h9 J# \2 {
) W1 B. q- w" X7 o4 ~* r% k
struct sItem
% f4 }0 [7 ]4 a* \# r{" `' _# H) l3 O
DWORD dwId;
8 b% l8 @) b2 g! z: J- H4 VDWORD dwKind2;
* d5 B- M. q* p  E8 d. e3 I5 s1 `DWORD dwItemId;
9 C) {3 l3 s( W4 h1 Q# cBYTE nIndex;
, @; J4 m9 A2 LsItem(){
' s0 h) D5 n: ^& m) y/ K, L  dwId = dwKind2 = dwItemId = nIndex = 0;
0 `6 N% o( a5 \}
) B$ k5 W9 j6 m. G, S. tbool operator < (const sItem p2)
6 b  ^3 ]8 @* s2 }{
- o5 V" g' k! e: J8 _* [2 w  if (dwKind2 == p2.dwKind2)" e# ~4 t8 v* C. W
  {8 G2 X9 z" T; {
   return dwItemId < p2.dwItemId;
+ M. a! `5 ~' c: y" O) L9 q/ A+ d+ c, B  }else{8 u" Z0 |- J$ e4 A% K. B
   return dwKind2 < p2.dwKind2;
/ k% O! L; [0 T$ R$ \- R: ~  }* c- F5 G9 L$ V5 k
}9 V9 x8 z% Z1 G6 e. M+ K
};) ?. d; i0 i! |& {5 Q: h0 m
class CInventorySort) q, u4 K- e& O0 \4 z8 m2 G
{
7 w* a# G! \# T, a. Dpublic:
; g/ I2 M5 c" G" fCInventorySort()
6 ~! d0 H0 d3 @{7 s- U; F! ]0 K; p2 Y( L  p: M
  m_dwPos = 0;
3 Y! [  ?7 u5 Z: k# @9 ^  l: D}
; L" a( M, k+ |# n2 h~CInventorySort(){}, `, F+ ]( _3 p6 g
private:
2 e* T% c  i  D1 T  ]8 e& Z* m: }sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息( ?% h* b; W' F# x$ W5 S$ C
DWORD m_dwPos;
2 L: P6 K1 Q% W, l9 o$ R$ Wpublic:
; p' k: A3 R" [/ b# |: ivoid Add(BYTE nIndex). {1 I" K; o* d
{. B' N+ f3 N# ~1 F* s5 t
  if (m_dwPos >= MAX_INVENTORY)' G9 E# p. ~' Y9 ?" V) g, a
  {/ y* a* k. v: E5 j8 ?' f2 s& r/ g
   return;9 V+ b- @$ R! G5 Y% n: ~$ B+ Z
  }5 V$ q! q4 D( [/ j9 A
  m_Item[m_dwPos].nIndex = nIndex;+ p' o6 w5 q6 ~3 V( ], g
  m_Item[m_dwPos].dwId = m_dwPos;
) u$ E8 b% c4 D, |  Y  m_dwPos++;
. w7 o) U: r6 r}
& V5 ?9 {1 V% L" rBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
" M4 M% @+ D& |" l{
; A2 Z! z, }% |6 R1 U0 [  for (int i=0;i<MAX_INVENTORY;i++)
; N# R6 d3 K/ F4 v) ]+ ^/ D! o0 |  {
/ g  B' j3 H; l, T7 O$ ]( Q4 f   if (m_Item.dwId == dwId)$ V+ ?, X1 k5 N" Q5 N* Y; O
   {
( T7 T$ V' T! f  C# P) E2 k    return m_Item.nIndex;: X/ b; z3 `- o# a) [
   }- h& t! i/ E! }
  }6 o% b: o& g8 c% n; r2 F4 O% V
  return 255;1 i' F  K. e$ Q
}
0 V! W1 H8 `' i8 Q+ G) a4 [void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置# B+ d- r) M3 B( M6 G
{: s2 V( |( W7 t
  BYTE nTmp = 0;. X& g4 A9 Y: h
  bool bDest = false,bSrc = false;
* \( a  O' G( q% v4 H7 f. f  for (int i=0;i<MAX_INVENTORY;i++)- J) b! ?; C5 {  g' y
  {
9 P4 W1 @8 Y2 E- _& B$ x; Z3 T+ S   if (dwSrcId == m_Item.dwId)
- c- X  y& K3 a! K! K" f   {
9 y3 R3 W' K. t3 c8 E$ D    //id相等 则 改变对应的dest和src
+ N! e* F2 {, c' W$ M( t; z    nTmp = m_Item.nIndex;3 W  _. x) C. F( y: j0 y/ _% t
    m_Item.nIndex = dest;: Z: H  Y# Q# [# ^
   }4 `) c, y4 @  t9 c: b9 }
  }: `9 ~1 o- K1 E* L6 k0 V
  //临时数据保存完毕,交换开始
& ]  o6 ^1 w8 e& U: h! t/ y  for (int i=0;i<MAX_INVENTORY;i++)/ |/ A% ?, A9 k  z
  {
. u1 N3 z; E0 n# G/ }9 E- q   if (dest == m_Item.nIndex)# p4 _( p% u7 y- n5 _+ a
   {
9 U6 u! U! _8 y1 q    //id相等 则 改变对应的dest和src7 \% C/ J: G( }' t& ]
    m_Item.nIndex = nTmp;
- F; \0 n% `" E   }5 A- ^, @1 b: w& e+ E
  }
- I# e* h4 i0 Z; O! P# D* {}0 g( O2 g+ ?! C$ J
};# @/ Y' h$ o7 H
-------------------------------------------------------------------------: T- x# k) |% Y0 ~- B
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 G# h) O0 [8 {- r
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
! G1 J8 w4 u8 M+ e1 B+ V- I2 B紧靠其上添加:
7 S4 t- M- |6 Q$ H" rif( pWndBase == &m_wndMenu )
  P: U* [2 V! E2 `  E% h{* N. B8 n1 P# F! s2 {3 }9 y& f
  switch( nID )& i# i. p# p2 f( Q3 u
  {' E8 r' r  U1 B: R0 T. ]8 a
  case 2:
+ H$ y  w* i! M   {* b, B: y- J! E2 _* K& G2 M
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
$ p8 X7 {6 n: l+ M    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))8 G5 R7 R' f8 W* w2 f* m/ J8 _
    {
, f9 m, Q0 c/ H& _) u     break;- t5 c7 ]6 i1 z7 b5 g/ j$ r
    }
' ]1 k" O0 @1 S4 d5 o$ W  }9 x8 Q    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)! i1 L2 ~5 q' N, ]
    {
0 }( K- p2 |" s2 L2 P     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
) ^+ a) y+ T3 p3 T     if( !pItemElem )# ?( E: j5 \" W& w4 g2 F
      continue;
. ?9 M2 s- N( f6 e2 U8 A     if(pItemElem->GetExtra() > 0)* u$ a0 E* ]8 m( n7 R
      continue;, Y( n; M8 f% C9 G: h
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 4 n9 H/ ]8 l0 q! v
      continue;
, q" K( q  [, I     if( g_pPlayer->IsUsing( pItemElem ) )
! L8 m$ u3 w* u9 S- k      continue;- l8 c5 [' z6 x$ F( e
     if( pItemElem->IsUndestructable() == TRUE )
& w7 a' n8 l/ l. e6 l& K1 Z1 x5 ]7 R     {
( H4 y, ?7 K% v! H: d" g      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
# I$ D5 o9 e& x$ a0 R7 C      continue;: n/ E. }% K. \/ B5 ]% @
     }$ J" L( P, K# E+ W) a$ s: f
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);* ?  R1 O$ y+ {% I" n8 s
    }
+ z# _; q$ c! X" C3 l* H7 s    break;
2 Q% w6 d' r2 P1 t   }
7 C% D' k. ~  z7 T: l- B! s0 i  case 1:
/ |# V, N0 p# Q) z; r' F9 A   {
) h0 u4 K  Y* j+ a* J  C! @    //整理背包
$ M- j) R1 J' w5 m/ q; W    //////////////////////////////////////////////////////////////////////////
! c/ U4 D% ~( w, J$ }    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
1 q0 l/ ?- l& A. w) o; s    //////////////////////////////////////////////////////////////////////////3 o, S8 U" w9 g. X: B
    //////////////////////////////////////////////////////////////////////////
+ t/ F$ {7 i/ o$ q- A    CInventorySort* pInvSort = new CInventorySort;
4 B5 F9 ^* w' Z/ w* Y/ y0 Q* U    vector <sItem> vItem;$ e+ K2 _; _/ X3 M
    vItem.resize(MAX_INVENTORY);//初始化大小# {, h: ?4 ^5 {/ g8 X
     //////////////////////////////////////////////////////////////////////////
1 u: R" R5 }7 v& t: r6 u     //填充数据6 l4 g0 J* F  R9 R+ I; ?
     for (int i=0;i<MAX_INVENTORY;i++)
; X4 O3 ]; @4 P% b     {
) ]* a3 ^* r- l      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, p) G2 u5 X: C% e
      if (!pItemElem)" K- b$ e, `1 H
      {
: L8 N& J8 c/ Y; o) c2 n0 u4 r       vItem.dwKind2 = 0xffffffff;# i8 [0 T6 B0 o' q) b+ B! E- F) W
       vItem.dwItemId = 0xffffffff;4 g4 q/ k( T' o9 {) K5 m* z8 \$ j
       vItem.nIndex = i;3 V4 z: h0 b" o1 ~- z; G
      }else {$ M$ K0 z# R2 X, s/ Q9 e
       ItemProp* pProp = pItemElem->GetProp();
2 ^, B) \1 c# m/ q       vItem.dwKind2 = pProp->dwItemKind2;
4 {, H" `& {: J       vItem.dwItemId = pItemElem->m_dwItemId;3 U4 X. _  r! P1 A: j
       vItem.nIndex = i;6 u! b  h1 F0 o" _3 X& B
      }
7 |. U8 T  B+ h4 r, E      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);  m& n5 _* j# i4 u  H% K6 G4 _# x
     }7 }( k6 A& @8 I: ]
     //////////////////////////////////////////////////////////////////////////
) B( ^: ^' |8 F# |7 N& \; F     sort(vItem.begin(),vItem.end());//排序
  t  E# l; ]& l0 z/ b2 \3 l     //////////////////////////////////////////////////////////////////////////
. a( b$ ^: U* Z9 h1 l7 R     //交换9 {: k0 @7 K# `, z$ ^) B8 z7 K' }
     for (size_t i=0;i<vItem.size();i++)
5 I  Z( s' v, H% m1 s. B+ H6 L     {
3 r$ O% l0 P- d* H) g5 r1 h1 S% [      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
3 \! A& J! n5 N      pInvSort->Add(vItem.nIndex);
/ r0 ?7 o* k$ w     }& d9 N' }2 S* s; _
     BYTE nDestPos = 0;+ P  @0 z+ O. `! S1 k9 Y
     for (int i=0;i<MAX_INVENTORY;i++)
! H- Q; w8 c0 ], v' \% e     {
! W! ]9 C# V' ?. w6 \      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
; u+ v& _# E) j/ ~% i  B      if (pItemElem)
+ @2 e5 D, ~1 y' \5 Q4 U      {4 r1 r, w  ?/ G/ G/ L$ H
       if (IsUsingItem(pItemElem))7 O! G2 z0 Q6 f, y
       {7 R3 I6 R# @* U( P) y" r
        //这个位置无法放5 X( J6 I% g& \6 I
        nDestPos++;/ \; D5 L) c% p. s" F; C
       }# T8 V* n( D3 I: s! G* d: t
      }# D' p9 j5 s. v5 g; j7 o+ S
      BYTE nSrc = pInvSort->GetItemSrc(i);
! b9 M, }' d- c, _3 a2 H      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);& S- W0 e( h- S5 W0 B, C
      if (pItemElem)- i: `# w3 w! @" l: i/ S4 H* p' p* E
      {3 |6 u% K& w% a8 Y
       if (IsUsingItem(pItemElem))
0 B$ U0 Y1 X: C9 B8 ~* i       {
. Z9 b' I. B$ P        //这个道具无法移动,跳过
, w9 w/ {6 Y/ [3 u        continue;0 |% y' P( A. d& _( y: n
       }
1 x' @$ m- |8 Z# E2 i: i* s      }else{
' q! S& q6 V& z( ~       //空位置 不用动
" {* o  N" V$ |7 @: B& m* k       continue;) y" {1 |7 j9 Q7 O  ]' ]
      }( y$ s5 v- I9 K2 x! E
      //////////////////////////////////////////////////////////////////////////, s6 T- Z' F  R4 q& L
      //开始移动
3 B; B  G2 |+ J4 i4 l( L- B      if (nSrc == nDestPos)
6 `; f' S; W( k! H8 \" [% d      {
/ d- ?9 t( M" A+ o) C9 X7 f       //原地不动) ^, z4 Y4 B% |: \6 ]
       nDestPos++;
. T5 r& u; E# _5 P- {( ?6 ?7 F       continue;
2 Q4 e' v" F8 }* L, f8 I2 G4 l      }9 Q3 W9 \* Y/ m* d  w6 D! Z, |# @
      pInvSort->MoveItem(i,nDestPos);4 s  [+ A/ t, A- c# k" J5 F. f
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
/ F% ]8 y  c  P0 e, }      Sleep(5);
5 Z  J, ]& s# y# P, g' `; U- M( J      //Error("移动 - %d->%d",nSrc,nDestPos);  c; T* ]6 Z8 L3 W9 Q7 B+ C4 [
      nDestPos++;  X9 e7 \$ P* q7 P) p4 ?( e
     }9 p: A4 u5 I/ i0 w* B
     //取第一个元素的信息
  f" ]; v0 U8 e! D     /*/ u4 q9 N7 H" ]4 A! A
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)0 I/ H. N( U4 b8 }  S, X
     {
1 y0 n0 ?& x+ ~9 L4 Z, m      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);8 ^. Z. r2 ?% u; N
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
' x- `! u% m% C7 {7 s6 ~     }
: b7 F5 C; K7 t     */
) H% b7 B' a. X8 Q/ T" W    //////////////////////////////////////////////////////////////////////////! p1 v$ e5 d) R/ q) J6 k3 k
    break;1 C) C: M+ Q+ h+ @8 }
   }4 j) w7 p% T- h4 u3 x7 T
  } 1 `, C2 G1 E7 f3 e
}0 L9 i$ m' y5 x1 H, I* \  F5 w
m_wndMenu.SetVisible(FALSE);! E$ ~, H+ ?8 ~( U
& Y) ^8 x4 Y* l4 b( y1 e
--------------------------------------------------------------------------------------------------------
: z" u' d+ S) N8 c7 T/ p搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
, T4 y, o8 {9 ]2 Y% F, }+ O, V3 T{
4 i7 G/ h5 M  Y3 l" cBaseMouseCursor();
/ \# L" j- _& z/ E1 w' ^$ d9 n}% ~9 J' M& l9 \) {
在其下添加:3 ~0 C. ]$ ^$ x
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
+ G$ W! t! n; B4 c5 y* T0 R0 E, \" {{9 P2 h) j2 u! p5 A: k
m_wndMenu.DeleteAllMenu();
. u) z. ~4 G7 o( C  N, _3 u, Km_wndMenu.CreateMenu(this);3 v; P1 w: A) d
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
: g9 w0 m4 K9 A7 {. y' k0 y
9 q/ W; i+ _% {+ S% ]if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- [5 u6 T! v: _, ?: Y$ f{  Q( E1 q  P6 ]* _1 K- o
  //P以上级别才可以删除所有道具' f: x4 O8 s6 r6 O! C9 D
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
- U+ U# v9 D, p0 K( u4 W' f5 e}8 o9 A- s: V" f
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
  E/ G* @0 g, R1 Hm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
8 Q6 Y! J* c7 W* M- O" Vm_wndMenu.SetFocus();
( N) w: v" r; a5 T}) k- \. s7 Y6 e. c1 U! _
------------------------------------------------------------------------------------------------------------! s4 Y' J3 X0 P+ X; W
*************************
* [6 X1 m# O3 H4 DWndField.h文件; [( Q6 K$ Y, @: L" h
*************************2 E* [( x0 }9 ~$ u. u
搜索:BOOL m_bReport;) |6 w1 e; `2 C# N# x! d2 v) `
其后添加:
( q" a; L$ O  D# ^CWndMenu m_wndMenu;
3 R7 z# E! s7 V3 K+ ]! k搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
9 X% f' ?4 s' X! p# U其后添加:( E4 \% n2 G4 U1 r2 i# p  q
virtual void OnRButtonUp(UINT nFlags, CPoint point);
% i( R% ?) i6 V8 c3 i
4 U) b: J& g9 N; V% ]: k5 P2 N% D
5 f% D- n' \* u9 d; }/ {1 I

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-9 00:26 , Processed in 0.073676 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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