飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1088

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1088
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
+ K$ G# |$ q! u# x4 Y搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )  c! W! f. @- C, P# z0 J
: f) j% Y1 r& B! g$ I
struct sItem
7 c" m# _2 ?0 s4 i6 K+ ]* c{
: {6 K# ~' N9 q1 ^7 HDWORD dwId;
; g: F: Y: {5 A( e3 x+ QDWORD dwKind2;
' w9 m  a' R- |: G) ~  `9 [- eDWORD dwItemId;! N: S3 F* N7 ^  ~
BYTE nIndex;% A5 M: L4 J* k9 A5 O0 q
sItem(){
+ l0 F6 Y3 z( w% @  f; d  dwId = dwKind2 = dwItemId = nIndex = 0;
9 C! G. t1 ~/ l+ X6 C0 v}
6 r! r! a: x( b% H+ obool operator < (const sItem p2)0 g7 T+ Q; {  P* d7 O5 u
{, d4 k5 ?9 {8 \
  if (dwKind2 == p2.dwKind2)- ?& x0 `) I" g% ]
  {- i- [+ L$ }9 U/ Q
   return dwItemId < p2.dwItemId;2 r' k# n$ e2 K
  }else{# V2 s' V, F, i! b7 p# U6 _
   return dwKind2 < p2.dwKind2;
! Y0 T8 E/ A9 ^" ^' l' H& N  }2 p9 s8 ^  j/ m* j5 p# T
}5 M& {% a4 A' I- i4 I8 e- j
};
) I1 H/ @9 j. T" C0 s$ yclass CInventorySort. \8 i. p$ n9 u2 x: p- E) m, @4 [  s
{: }2 p# _4 @$ \$ Z8 W9 w
public:3 G. n; I2 C' v- e8 y) w% y- s, j
CInventorySort()+ I( q& U& V. F! Y3 n7 G- D
{$ c1 D2 V: _. K# j, \" Z
  m_dwPos = 0;' J* m' v: l4 u" Q* j1 L
}
7 `" P3 w0 K& H% t3 V* C~CInventorySort(){}' J4 ~% X$ G1 L& ~7 y1 L# B. V9 j
private:
% \% G/ H" _, b" X: OsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
% N/ n% Q" k0 I; [DWORD m_dwPos;9 O4 L4 E" Q0 h/ b+ Q
public:
; x/ y5 n  U: x+ {7 T) x, x, ivoid Add(BYTE nIndex)
/ s& }% P9 v: b; p2 _4 \. I3 ~{1 ]% d) T- d4 B- ~4 G" \
  if (m_dwPos >= MAX_INVENTORY)
/ n& S* X7 ]& U- `  K8 ~  {5 X4 d+ U. p* Z* c" J
   return;! l; @% L/ C" V0 O4 B
  }
& w1 A4 n1 @& h( N8 F9 s  m_Item[m_dwPos].nIndex = nIndex;2 i+ M  x# t: G5 j/ ]
  m_Item[m_dwPos].dwId = m_dwPos;6 N  ]; s* u0 i
  m_dwPos++;0 y& I& H5 d$ a) E- w3 H
}
' I1 A, p# `8 w( N% _1 ~% sBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列* i. S% Z) V$ A
{
1 w5 J7 a- ]2 }  G5 }  for (int i=0;i<MAX_INVENTORY;i++)% m: X$ ]0 T) V1 Q4 m1 n9 W
  {
0 W( l* G9 X2 @7 j! J   if (m_Item.dwId == dwId)! t5 Z: d0 M: G! z; y
   {: c& d9 [9 `0 R
    return m_Item.nIndex;: L; o3 @, l) I8 r/ l
   }
. `0 b+ J5 P5 d. x5 R# t  }9 ~$ J! j: Y6 j5 E4 e
  return 255;
7 ], w& G: O" }% f. [* h# @}' g% \5 P  |, f9 w5 T
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置" K# w" {0 ]+ f+ Z( a8 ]2 P
{8 [- ?" j! Y/ `' j
  BYTE nTmp = 0;3 b% E* d8 s2 c& K9 o5 l0 e5 S% I" Z8 ^
  bool bDest = false,bSrc = false;
, n9 {+ m1 A* x- H0 a$ y% J! z) s  for (int i=0;i<MAX_INVENTORY;i++)# V" R, d6 o; c0 R$ e
  {
( R/ q( k; P3 P" f! {! e   if (dwSrcId == m_Item.dwId)
( a" g8 R& p- ^8 I  o/ `0 [8 y   {
, B" u+ c. ?$ y% H, K    //id相等 则 改变对应的dest和src
. c7 {! v2 A! \* ~: R  h; ?    nTmp = m_Item.nIndex;
3 j5 P6 M  F$ v( j  t; ~% i    m_Item.nIndex = dest;
4 D) m. E: C. ]3 I6 b$ p" N   }; P' d$ O' l; D* O2 S4 q
  }2 L3 w$ F  ?. e+ x4 q- l1 W1 u
  //临时数据保存完毕,交换开始
- X* F* Q+ Q: x6 \  S( g  for (int i=0;i<MAX_INVENTORY;i++)$ c2 T5 `; k& h/ }# H% n
  {
) ?8 u8 s/ c; y' ]   if (dest == m_Item.nIndex)* r5 \( g" Q) l( y* E
   {; n0 j( O3 I; t, L
    //id相等 则 改变对应的dest和src. n! e; L( R# g7 @
    m_Item.nIndex = nTmp;
4 F8 e# ?3 E! W+ W6 v6 H   }
8 O& y! c* T7 a6 [8 X. F1 e  }
- p1 D6 M. ?6 ]) }}) B7 a1 P; _; u7 F1 y0 T
};
1 y( q2 a  T" Q. `-------------------------------------------------------------------------
5 m! C) k/ m' ~3 m7 H, |0 L依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )  o1 @; F4 M. T6 C! e6 a; ]
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);6 s" C. n" ?6 b0 x5 M" D
紧靠其上添加:
+ w2 _: L; H" u) f$ V$ X- N: Pif( pWndBase == &m_wndMenu )
6 X7 l) H' y. O; X) u1 N* [3 i# W{
! z% X# i' ?7 S- a! Y  switch( nID )
8 Z9 p5 m' I; h( Z% T  {
/ C$ w/ X& d# n8 f  U( {  case 2:4 x9 o" R6 w. f( K6 L1 u* S
   {8 L  S1 |+ A& J, E
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
" E) u' x) G  \    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# D2 `4 p4 s2 y* K% C    {
  ~) m, A2 e5 t) Y! o0 I     break;$ e: ]% C; E" S0 e. a1 [
    }6 F0 ], E( P( }/ F9 |2 |' {7 Q& _
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
7 r/ v& x; Z6 E    {
9 I- m9 j; ^0 o     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 B4 }  N( o7 }     if( !pItemElem )- w+ K- b$ T" s! I5 ]0 G( Z% h
      continue;" d0 m7 Y; F4 n! {- r0 `
     if(pItemElem->GetExtra() > 0)
0 U* P- v) h2 C- k$ v      continue;- w0 k  ?$ h1 j' ^% I
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) . U* r1 K" {1 Y! @$ R
      continue;
' F/ _8 }2 c; w; ^; a     if( g_pPlayer->IsUsing( pItemElem ) )- }, Q9 Q* j" x6 }
      continue;; L. n9 H0 I! Y- K  h% H
     if( pItemElem->IsUndestructable() == TRUE ). k0 [" B, l9 y! X1 y4 W
     {
6 y4 y- a. f6 Z' ~! B) V8 Z5 N! Z      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );* U6 ], E9 I, K! X4 K
      continue;" ^  i$ W$ ]" b
     }
' [5 [0 N' f0 ?& a3 b     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);6 A4 ?: d+ S0 `9 w' n
    }1 N0 v% e0 x& B" V( O9 J
    break;
, i  ~5 j8 a% S   }4 t( \& S. W8 M4 M) H+ X  p
  case 1:
" \# T2 x; o: _3 @; Z   {
( N: e/ F6 R& C4 e    //整理背包
& ~, a% e5 X5 ?: H% Z6 M; r% M- E# I    //////////////////////////////////////////////////////////////////////////( S& h9 ~2 c7 e" \/ j& l
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );0 s- u* D) h- \6 r9 M
    //////////////////////////////////////////////////////////////////////////0 [5 k& Q% Z: x1 |: S
    //////////////////////////////////////////////////////////////////////////1 n  U$ P- I" w5 Y' J# E
    CInventorySort* pInvSort = new CInventorySort;
5 A( q( U) k: I- o6 T    vector <sItem> vItem;8 w1 t, e9 y6 \: A1 `
    vItem.resize(MAX_INVENTORY);//初始化大小
+ R  b9 {, x/ k( ?     //////////////////////////////////////////////////////////////////////////
6 Y4 {4 j. P3 ]1 Q/ h$ e3 S     //填充数据2 d" B# v8 D* J+ r
     for (int i=0;i<MAX_INVENTORY;i++)
; x( ^0 G8 p& j     {9 W! d+ ?$ |* R3 }2 |9 _, t- y3 s
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 F. K- @; C# C% N) }; q      if (!pItemElem)
! I2 {0 [' J' K6 x- ?% q      {% B- J  ^, c( N" B- B: o7 H
       vItem.dwKind2 = 0xffffffff;' O- l% V- r! j" Q  @9 C) Q: t
       vItem.dwItemId = 0xffffffff;
) t9 e: N1 P7 j$ u% j6 o$ P1 A       vItem.nIndex = i;
2 a4 ?' t5 z  X      }else {, ^& R( x/ N3 q- [; n" B* h( q' [
       ItemProp* pProp = pItemElem->GetProp();, T5 z/ w- V9 I
       vItem.dwKind2 = pProp->dwItemKind2;
# Y& C; ?0 C( w6 m       vItem.dwItemId = pItemElem->m_dwItemId;
3 q3 c9 o, m4 B- s  c1 }       vItem.nIndex = i;
) Q: Q5 p! p5 d9 E+ C      }. m3 ~7 a* m8 ?( N' j+ k0 b  F, v1 L
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
& S' z7 I6 D7 L     }8 f& A. o. Y+ _& n$ K$ g7 ~& V
     //////////////////////////////////////////////////////////////////////////
$ S6 \& R$ b! J# I" L     sort(vItem.begin(),vItem.end());//排序
3 q& L8 Q7 W. P6 ?( a6 \/ S     //////////////////////////////////////////////////////////////////////////
2 n# T+ _1 V6 r; Z     //交换" g6 B* v1 b8 d* ?$ G" W
     for (size_t i=0;i<vItem.size();i++)
( ~% s2 X3 E: W- t" Y  n% G0 r     {
1 R5 L7 E* z# M7 v; v% u: ~      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- m# ?; Y# A6 {2 E
      pInvSort->Add(vItem.nIndex);; O- ?) O" I. Q2 u
     }
# Z1 b' c! s. ^2 B* f& f     BYTE nDestPos = 0;9 q: R& M# ~1 M6 ]
     for (int i=0;i<MAX_INVENTORY;i++)
" P7 H2 S- d- i% z     {
1 M" v  c% a% r; H  [& P      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);7 Q0 \0 @) w; ]' d9 T( H/ }
      if (pItemElem)& `/ I1 c: a% C' X
      {
1 S! F5 Y2 }# d& ^3 `: f2 T/ j       if (IsUsingItem(pItemElem))
0 K* ?! K3 M1 k' _. }       {
- O* G8 S( g, [$ G. {( A        //这个位置无法放
8 O1 W+ \% i/ z5 Q* ~$ L        nDestPos++;
* q  `7 W3 P+ _       }' H% {: P( ?9 A$ P) e- I% i$ z
      }
4 x, R1 T  F. a  b      BYTE nSrc = pInvSort->GetItemSrc(i);& [, d( }* P* a: |0 s9 P
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
  a8 k+ t' P5 p1 g; \1 ], j      if (pItemElem)
) w) b; P# L! ^8 u* n1 l      {
* h+ E( j$ }% p- J6 D& N       if (IsUsingItem(pItemElem))$ ?% @8 z8 F$ B- e
       {  |  q( }9 u8 V* [! i
        //这个道具无法移动,跳过
! r- i9 u# |& g, k* p. c3 E( Y1 q        continue;" `& W; S  M. M( t( G1 G
       }2 F5 w/ _, g3 u# U1 t9 p" B9 L
      }else{
& F" ~4 ~' q' ^6 P! f- ~: V       //空位置 不用动
" x5 A9 S3 ^6 c# \9 c7 P7 l& R1 f/ ?       continue;; N" a! p' @- F+ w9 I- |# H, L
      }" ]: _% D7 w5 s8 y/ m; ^
      //////////////////////////////////////////////////////////////////////////
) {0 F, F4 Y9 g9 S9 U" {  `9 A      //开始移动
2 a% S2 h( |$ c      if (nSrc == nDestPos)  k8 u3 O( U' K9 D- j2 M
      {' n6 b5 t: Z% x) H: |: T) x1 B
       //原地不动! N, N4 P- }+ g: l+ e/ f
       nDestPos++;
3 f' s! P" {& f, f+ h, A  A3 z       continue;' @! z" F: @8 K% C" h7 E, L( e7 X
      }7 D! f; H3 B* {
      pInvSort->MoveItem(i,nDestPos);
, A! n. `; J1 J      g_DPlay.SendMoveItem(0,nSrc,nDestPos);- d) I9 u( z$ T6 H; F' p8 Z
      Sleep(5);
$ S" E& r7 p4 ~) o) M) Y  G      //Error("移动 - %d->%d",nSrc,nDestPos);6 u2 e; u, ^5 D7 m4 D  F& Y* M5 d
      nDestPos++;8 B& S+ G0 n) }" }6 }' B( ?* P
     }
6 {/ N. `$ g8 Q  q; R* T3 x7 H/ z( p+ P/ `     //取第一个元素的信息
$ `1 {! C  P. Y9 v3 M4 e     /*& i2 D4 X2 o4 l: H& ~
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
0 A' ~  D4 w- v' H     {
( e9 z" l8 o. Z* A+ |8 c& _: P      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
' R# o) r! e9 v9 w8 Y      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
- W% S- `0 B: u* y1 r8 U     }- u) k2 Z+ s; v4 ^
     */
' y6 B% k! v2 g+ @6 @& n% r0 v: p    //////////////////////////////////////////////////////////////////////////# v3 f& I! r3 ^, k8 e0 F
    break;1 N! i+ u  I, p8 A' f  \; ?1 {
   }5 _0 X5 Q1 S  W! o& l
  } 9 G" i  u, E5 M* S* o) V; l  f
}' H- e! T% n- C' k6 H5 G# \4 W
m_wndMenu.SetVisible(FALSE);
4 d6 R, g/ L) |' K' z0 ]3 t2 [0 g
0 c& ~* @' b" W4 C--------------------------------------------------------------------------------------------------------4 k* E3 N" B- a5 ?
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
5 _+ A3 F8 H: l) j{
* z4 i0 A0 y  I! I0 k* IBaseMouseCursor();
9 a2 h. y1 @  z}$ u2 z# |! u# v, v* u% g; f
在其下添加:
# j& S; a+ m; t4 D% fvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)/ e" l4 _% p- r0 R0 O5 o; i
{
- N. t1 V2 [5 ~) vm_wndMenu.DeleteAllMenu();0 j% d: q; e" x- C9 C' D1 }
m_wndMenu.CreateMenu(this);
+ e) i' ^+ K/ g6 s* j6 Mm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");' ^( y. f$ N2 s: b* H

9 k4 a7 |: D. S! K( Y5 l+ Zif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
) ?; f6 W1 f" p) _7 p{& p& ?# ]' }9 G/ m( H( f( n! D+ R% z
  //P以上级别才可以删除所有道具
- n; R0 B) h6 {& Y) q5 b$ z  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");# B2 r( B7 w; e: p
}
4 f$ B* f! c7 Fm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );. ~" t& _3 ?3 c5 h- i# Q0 a
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );  n' s& d3 V+ t9 T9 X. E% G) c
m_wndMenu.SetFocus();
+ e5 F0 i+ t: D' Z% G}
$ x3 d- m; n+ i5 c! Y% L+ T------------------------------------------------------------------------------------------------------------0 y; J( A* P( S; d( N
*************************
; n8 m/ \9 |# k2 t) t* u" _WndField.h文件
( E& w. u6 D, }* \*************************6 f7 D& h0 R1 R- W& Y3 `* z
搜索:BOOL m_bReport;
/ W% K) i( E$ c6 ~+ Y2 _其后添加:* l# z6 e3 V1 e4 g- l, H" _" c1 B
CWndMenu m_wndMenu;
& W% o. w7 u$ C. d0 i" u7 k! F搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);3 M. d( ]/ d9 ~/ g
其后添加:- a" _( G) C  A' Y2 {
virtual void OnRButtonUp(UINT nFlags, CPoint point);0 D: J+ o, H( _, v

( q( L& ^5 T; v# {
/ P$ c9 p% ]- G, s' x3 {& e

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-24 00:22 , Processed in 0.065023 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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