飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1090

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1090
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
6 a0 i  {' x  _0 v& [搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& p) ~$ m+ S# J7 d( L) p
! j" }- K3 ?# T
struct sItem4 t9 j) ?: p- {7 c$ R6 b
{9 q! Y. x& D( ]; T; x9 F
DWORD dwId;
3 M  R; n/ ?" a. hDWORD dwKind2;
! `2 ^* T: j8 T7 n4 YDWORD dwItemId;) Y7 e+ }5 I7 m" R8 l& i8 q1 j
BYTE nIndex;
1 O+ s+ k, E, x% H; _sItem(){+ M- L- C. L4 z: C- S' M
  dwId = dwKind2 = dwItemId = nIndex = 0;
) w: p4 e# {' |# t# A, {7 K! A" ^}
" U+ s& v( v  xbool operator < (const sItem p2), G) g" B, b  P* K. J. h
{
7 I% f2 Z* D6 {& V9 x# [  if (dwKind2 == p2.dwKind2). N3 H$ Y+ P1 U
  {
+ s! p2 v/ m9 s) w  V   return dwItemId < p2.dwItemId;$ a; p4 e) @: N: f, w4 c
  }else{) @( @& Y% ]  t
   return dwKind2 < p2.dwKind2;# |, s' |9 x5 w* A4 V" e* Y
  }
! w$ q2 D, U4 u6 |9 g0 N+ e}* n4 s3 Q# m9 d& \7 |6 {/ v
};
8 D% w7 Y* m5 l9 k0 Rclass CInventorySort
! |& U& u, |) `/ B9 o  U4 N{
$ g/ y3 w0 o6 g' j& B9 Dpublic:
/ Y9 C8 P, M- `! i" P+ _CInventorySort()
* C) ^5 G/ U# x; Z3 o{
; T: c( O  Y" S3 [$ r) ?) `  m_dwPos = 0;0 X0 F/ P* x) L
}
/ A6 H4 \' H$ ^$ y~CInventorySort(){}  A) ~* ~9 J- C2 S% K; G4 ~) V! {0 h; k
private:4 @+ o; e' f$ o9 X9 g
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
; }/ F% Z3 T# ~9 NDWORD m_dwPos;4 }8 I& r5 |" o: U
public:9 g5 h& }$ ]& y) O3 d. _3 J
void Add(BYTE nIndex)
  D- Z1 `# k1 w7 L8 k3 D{" v, V' a( t9 Z& ]; y+ t7 ^  R  b
  if (m_dwPos >= MAX_INVENTORY)+ H8 z( q9 K1 c# }/ Z* _
  {- o* k9 v# ~7 G
   return;8 p) v  _' Z( S& B6 E- {
  }
3 z7 t# A* m5 i* f4 Q) _  m_Item[m_dwPos].nIndex = nIndex;
; ?+ q7 @4 o- R( X& C7 A: V1 @5 ]  m_Item[m_dwPos].dwId = m_dwPos;. r4 D5 _4 B, h' m. [
  m_dwPos++;
& A  c+ h5 H) B# |}- z. K% E* U' N( Q: S  W# U& c
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列7 f+ ^/ W. }9 w1 C
{- R7 L0 I: {) N, Z$ R+ F
  for (int i=0;i<MAX_INVENTORY;i++)" _6 e* F: Q* Y8 Z& R3 Q2 J
  {
$ t! d2 ?7 g6 A, U   if (m_Item.dwId == dwId)
% J6 C4 ~$ j8 p+ \2 y/ m, V   {5 c3 s# c+ G- i
    return m_Item.nIndex;
8 z% L$ m$ L$ B: k   }6 j8 x; w! c# m+ d1 w% R. Y
  }
6 p, j4 R, b% L5 D  u! k$ X  s  return 255;
/ ]8 g% }& q5 d( E}+ F) v7 |" F- S, Z; H
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
4 T7 S7 n" C# J/ q{
6 C- _5 U; I4 S4 X6 I6 V  BYTE nTmp = 0;. Y# ?  x/ f+ g+ L
  bool bDest = false,bSrc = false;
  g4 [- a$ `1 }2 p* a$ U  for (int i=0;i<MAX_INVENTORY;i++)' m6 M: o6 W! K( d
  {# a% y5 t, Q4 z: t1 N5 u
   if (dwSrcId == m_Item.dwId)
$ z1 n7 [( x  N+ |4 H4 u3 C   {3 ?0 D" d& y2 ~+ P2 ]7 y3 s
    //id相等 则 改变对应的dest和src
6 m, F$ E, F# a; t3 [5 k0 v' U    nTmp = m_Item.nIndex;
9 Y* z5 K$ v2 H8 h9 R& D    m_Item.nIndex = dest;) k1 V* q8 @: @/ R0 ]( |
   }
# K6 Z: a" h  }0 N' X  }
! c/ u( d, \4 z  //临时数据保存完毕,交换开始
5 v* [! X" S5 x" t. H/ [  for (int i=0;i<MAX_INVENTORY;i++)/ u0 F/ V6 K$ x
  {
3 q9 j: ]  d1 b   if (dest == m_Item.nIndex)
6 w& n: Q0 V5 s' \0 m   {! N  U' Z8 G/ ~* R7 Z- O5 C
    //id相等 则 改变对应的dest和src
  u. x. Z  d# P    m_Item.nIndex = nTmp;8 l$ B; Y+ K. j% F, Z
   }
; k. x+ L' V1 V2 `  s# J6 Y  }
6 d6 M0 u7 F( m- s# i}
) w% W, l7 E, Q1 o8 w" J# n# v};0 V5 n9 L& Z& k& f) {( `) N0 U
-------------------------------------------------------------------------
- O. l' r. i4 _/ }依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )  R% j3 o: j, ]  [5 x
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
- K& a( x7 d% Q* a+ U! |紧靠其上添加:; A+ d: A  l' f2 C4 [" W: C
if( pWndBase == &m_wndMenu )5 c* G( q3 l! B
{+ p( q& X, i* J5 D) j% \* V( S; z- Y
  switch( nID )6 X  u  u, @. }* {  N& U& [) g! z
  {/ f$ N2 H9 W; d  g6 d' Q0 {$ g
  case 2:
: L$ w/ U. W: P! L5 o. B   {- z. a7 t" j0 c- U  V
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);, s9 v; ?. C6 g1 G7 \& E' ?9 x
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 U6 Q/ Q% ~' n, C& p7 X    {; t8 x7 P4 K" c+ W) ?5 J
     break;
) i5 W+ W' f% D    }
- {5 Z9 _, ?5 a* i9 S! \! V8 v    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)- r+ E8 [, ^/ ]0 v' f
    {
# i: g3 R, y7 j6 o* |( F: ^     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 M" y2 Z% Z# o( ]' f# V     if( !pItemElem )3 P, f, H' {, R& C6 ?( V1 L2 S
      continue;  `" c- f% E4 y! z/ p
     if(pItemElem->GetExtra() > 0)/ V/ K! i; B2 X/ O) k
      continue;2 [- S9 Z+ U4 |" m' w8 C
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) : ^% T5 k: U1 D( S1 ^
      continue;
3 |9 n# q% F. F     if( g_pPlayer->IsUsing( pItemElem ) )
! I- F! E) n; |1 b( U5 M3 o& f! ^      continue;
. f3 `! A6 z( i, z, L2 R     if( pItemElem->IsUndestructable() == TRUE )
# z& Y8 u7 l; l, u' w: P) Y     {
" v" o2 i: U! H# C2 H( M! |      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
0 q6 P' l/ k0 L% _, j      continue;; G* c; l  _) y+ D& j6 q8 n
     }
) e$ c9 f2 {4 B. b4 W9 ~     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);2 s/ k7 J/ Q' N+ z) [: M
    }
: M7 \# Q% f+ I6 d6 [  Y1 R' T. [    break;
8 j# _. O- f. o) ?4 U   }' F3 ]5 k8 o0 Y6 A7 Y3 m9 R% Z" V
  case 1:
  F6 p' c0 w4 f$ |; L   {& a  C0 N# d7 u) T: s- W: C
    //整理背包' ^4 ~( N, |( h$ w' R) t
    //////////////////////////////////////////////////////////////////////////( Q, a- C4 D4 N) A. d
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );% L1 @2 T% S! i* L; l( u& B
    //////////////////////////////////////////////////////////////////////////
% z7 G9 p- A/ e( M8 p8 P/ F    //////////////////////////////////////////////////////////////////////////
7 B1 Z  p  m6 D1 H6 f4 b3 M    CInventorySort* pInvSort = new CInventorySort;7 |" a8 M! v! M
    vector <sItem> vItem;( c, [8 N. Q1 D( \+ J0 r: e
    vItem.resize(MAX_INVENTORY);//初始化大小
7 j6 O$ l" P0 l( X9 u+ ^     //////////////////////////////////////////////////////////////////////////
5 p$ p7 y6 |! v. M, q# d     //填充数据; N& H' `# A% f3 I. n$ _- x* E
     for (int i=0;i<MAX_INVENTORY;i++)2 `  k& ]+ [' @/ ^' z) Q, t* L9 c7 G
     {
) R1 |9 W& w. x  g      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! v' A( {5 z% T3 t0 C$ f
      if (!pItemElem)
+ A5 d  N/ S5 y      {7 H% S" H) Q$ C/ b" Y, N# i6 Q
       vItem.dwKind2 = 0xffffffff;
& V1 q4 X  c# C5 T       vItem.dwItemId = 0xffffffff;
! K6 v5 L0 B7 j% ~; T# i9 J       vItem.nIndex = i;) i6 B$ o& s# X, H2 z
      }else {
! @, G. A* m1 |/ ~       ItemProp* pProp = pItemElem->GetProp();
8 P7 l( F8 V: ]5 Z" U       vItem.dwKind2 = pProp->dwItemKind2;
; \. G3 l! S3 k! ^6 s       vItem.dwItemId = pItemElem->m_dwItemId;
  `6 u5 ^  I3 i$ y& ]       vItem.nIndex = i;
( d5 v4 c0 `1 Q; q9 W/ W' K4 f3 E      }
1 ~' V7 |5 s8 _$ R7 {3 B      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);# a, L& J0 s  m
     }
( U: K+ x: x* q* O* a7 e     //////////////////////////////////////////////////////////////////////////
6 k$ e9 j) y1 R0 a     sort(vItem.begin(),vItem.end());//排序
6 |3 j' K* m+ Z" n0 q4 t     //////////////////////////////////////////////////////////////////////////
& N+ g* F# R1 e! A- i  Z4 P# l     //交换
/ F5 s! M0 g- u' }     for (size_t i=0;i<vItem.size();i++)0 J' y' v% x4 n; B7 Z" P# \
     {8 K# ?' p# f/ z; l% ~/ _) y
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
$ w3 g; V4 R, S      pInvSort->Add(vItem.nIndex);
( U* c0 b) X8 j     }5 S& U( w" m' Q1 j/ h3 j' x
     BYTE nDestPos = 0;' [' D6 {* ^% v! W( h
     for (int i=0;i<MAX_INVENTORY;i++)7 O$ d* f% j: u# ]" d: C- W
     {) x% D" C6 ?& W; v2 X) T1 {& f3 u
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);3 H. T1 r: g1 P2 ^" k' `0 J
      if (pItemElem)
/ X) [9 s  Q! k' ^- k( Z      {
# j2 K! @$ F% c2 P- X4 H       if (IsUsingItem(pItemElem))
2 N! c) X' p$ @1 N; ^7 \+ V       {
' g/ i- M, a) A        //这个位置无法放1 ~2 H8 T- H4 ~. R8 d
        nDestPos++;
! K1 ^6 d2 e3 ~" g' _5 E: x       }
8 U. e; h7 p; e3 y0 W      }
# a- d# r  l& t, h. t      BYTE nSrc = pInvSort->GetItemSrc(i);9 V1 B+ W; b* ~* q
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
3 \: u9 {5 {8 t5 G      if (pItemElem); u6 q8 j9 m. x  [( L8 g
      {( c9 y( n, Z& L7 V2 c
       if (IsUsingItem(pItemElem))* }/ L( w4 b3 W* Z+ _
       {2 ~2 \  I3 q* `5 n+ u/ O
        //这个道具无法移动,跳过
3 }: F! ]: w0 Y7 E        continue;
9 |) q$ k" G+ F) C( C       }
) z# s% e) `) |      }else{6 [) C  D2 B- a8 a% p! l- j, m
       //空位置 不用动/ a0 O% J) M2 ~
       continue;
  ^2 i% y2 S0 ]+ I2 ?; p      }! ^" F0 x+ p5 W5 @- e9 B
      //////////////////////////////////////////////////////////////////////////
; k( I- M* Q9 _; {! z2 |# p      //开始移动* z" x7 K. ^# F# G- T
      if (nSrc == nDestPos)4 K1 I, j1 F$ t7 ]3 f: L7 `, t
      {+ K/ b8 _/ X8 t" I  p
       //原地不动' {( ?6 X: r. E% ?' P
       nDestPos++;
* h. y! Z! m& B9 J% J/ y7 `       continue;( Q* w$ {" P7 r$ m9 ~
      }
5 w0 D8 g! Z* G. J( Y$ G& }) T- b! y      pInvSort->MoveItem(i,nDestPos);
$ K# `5 b: D- L. T  |7 F      g_DPlay.SendMoveItem(0,nSrc,nDestPos);3 M1 O& J- R4 c" w2 W3 m7 j
      Sleep(5);! A) S1 Y' \7 \* L" V0 v+ i6 ?3 O; W
      //Error("移动 - %d->%d",nSrc,nDestPos);
3 o$ a" Q: h4 h* |      nDestPos++;! f- b" l4 h3 x' C
     }2 f7 W) |, n' I/ z- ^
     //取第一个元素的信息
2 t. ^4 b, |  L8 h; i     /*
# \$ B& _. W% n9 k+ a9 b     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
4 ~1 P  p/ }3 i$ ~! k     {
/ z& u& V4 g* Z3 A% t' R. U3 I3 n      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);  }4 q: \! L2 a( u# z( [
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);# U6 p' w3 J; w2 R4 n3 K
     }
/ p, s; R1 w4 ]3 J$ y( _2 V% D     */- }% j! x. x5 K) F
    //////////////////////////////////////////////////////////////////////////
8 [% {' F% R% B9 M. J0 C    break;  L! i( y% R- n! H) l
   }; E: O5 D4 Q* X3 U# y+ b5 H# x. E
  }
8 b* d5 S! D# B}) Q* S2 \% A" y& U* [% }
m_wndMenu.SetVisible(FALSE);( \8 d8 y( `+ i$ C/ z& d

0 W! F) }6 l( |& C) ~--------------------------------------------------------------------------------------------------------7 N( D; O3 b/ o" M
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
7 f. ~- K; V$ t, r$ u! a{% v- |) |# n8 e  T2 N1 V
BaseMouseCursor();0 M0 N9 x0 x1 a
}
0 O+ _2 D) D# P) ^  G4 t在其下添加:6 H2 }( ~+ f3 B# Z  y+ q8 F
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
5 U2 p5 [! U' \/ K, d8 E9 R8 S{- p' Z' x2 C  V( X3 X' z
m_wndMenu.DeleteAllMenu();. W5 m  L0 T5 R4 P$ O, y6 F
m_wndMenu.CreateMenu(this);
' N3 W. E, U( I. F. l8 B  D0 ?m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
; L/ K  a! O$ q4 [; Q2 f1 p3 L
! C, ]$ |% b( T) i- Uif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
$ s+ a. A( ^( G/ l; i) h3 A{
& m# I- x$ |& u) U5 x  //P以上级别才可以删除所有道具
4 E" t: U% `& R# W: j8 v0 Y  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
; l! H  s8 N2 |. l' P% r}
  Z' H7 e3 d" g  J! Am_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );7 }* y9 d- r& z0 q
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
! w* O1 J" ]7 t; w. ^  Xm_wndMenu.SetFocus();
8 G- T$ A9 V; L/ D, k% H}
. M3 e) j" P- s. @* Y2 W------------------------------------------------------------------------------------------------------------9 Z. e1 P0 n: G  V
*************************: y9 U% U  @8 F* a* J' A" B( O
WndField.h文件6 B, b: _2 \5 S$ ]" x' t
*************************
% C/ d6 m, r2 T  y搜索:BOOL m_bReport;+ a. W+ v% \; F6 |0 k  y, K
其后添加:
% I/ P) k" {" ]8 d7 G: HCWndMenu m_wndMenu;
8 V* ]9 C4 a8 n: T+ e" v搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);. }+ m4 r- Y: v
其后添加:
* V6 |3 h4 U4 I* |; \/ V; _virtual void OnRButtonUp(UINT nFlags, CPoint point);
9 d# B2 F& {* X/ n" Q! A: r
' g" x6 A# E3 t$ B* M  \3 x* P4 }
9 l" G, f: Q1 W' c

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-27 22:56 , Processed in 0.076088 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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