飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
( A9 _% g1 d! h! k* X% C9 h' e搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
" K- Y# e4 W+ L( J# ~7 F) m) [* y! \# K
struct sItem: R2 B$ y. b( g  D2 \/ M; A
{
" c/ d0 l7 E6 g& L, TDWORD dwId;
, |/ {4 D; T& s' zDWORD dwKind2;
# n. ~% L) {; ?DWORD dwItemId;6 F6 D) `0 _. X7 J. b- E# p1 f
BYTE nIndex;
# V, ]) V5 O  L4 D6 esItem(){' y9 M& B) g7 q
  dwId = dwKind2 = dwItemId = nIndex = 0;
4 D3 m: q8 m) m  Z, O2 B}
. A. D2 {1 }2 u$ v% m5 Q8 @bool operator < (const sItem p2)  Y# w" m+ b# [" \9 a$ J
{4 R0 N# k  d* m1 c
  if (dwKind2 == p2.dwKind2)
0 Y, P4 n1 [0 j0 i; S; m$ m  {
' ~; p. f% X  U; t0 N7 a2 u' |2 _   return dwItemId < p2.dwItemId;9 y' S/ }1 I9 X7 }+ Y# W7 x
  }else{
2 [' K9 R0 O, W+ V5 y" g   return dwKind2 < p2.dwKind2;
& h* j. }) a7 t+ S( z1 u  }$ X/ D; e1 [. d4 b1 d
}
' c% ~" |1 d" H  @7 h};+ N" C1 b- x/ r3 q. K% X: B8 H1 G
class CInventorySort( q2 u+ `* E, l& p, m/ X
{
, r1 ^4 a; }, u' x: [" f; xpublic:! L* v- A1 q* Y- H  a
CInventorySort()
' [, a0 k( ~% u; L+ M{
/ s4 ]6 w, }: f) f: O  m_dwPos = 0;
. @% M0 D0 W# G; W  Q}# V; ], A. ?9 s" A4 c
~CInventorySort(){}
* g, q- x7 Y% L. S; vprivate:
  ]- u) u4 Z! P( S, ZsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息5 J/ M2 n" p! I3 `9 G' r0 I( {" N
DWORD m_dwPos;
. I5 ~4 ]! n6 |) J- c2 l, [public:3 [6 c; M5 q7 v: a5 K# N' P- r3 f* _- k
void Add(BYTE nIndex)
/ f; `0 |6 V! V{3 a6 H4 ^* G# P- n1 Q
  if (m_dwPos >= MAX_INVENTORY)- q- i5 o% @: w* U* w: v- g1 J( \
  {0 A3 K  V) X* t* `' U! M- V
   return;# D. _! m1 g$ k6 g0 r! O$ Q2 h3 z
  }5 f0 a7 ?) g# U4 ]7 \
  m_Item[m_dwPos].nIndex = nIndex;
. x1 Y, E! [8 N+ O0 e  m_Item[m_dwPos].dwId = m_dwPos;9 @* e0 j/ Y, Z- L( _. r
  m_dwPos++;. T. ]" r9 R! ^/ n% |9 J
}5 O' r* f) D) q0 I# Z! Y8 p
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列; R- q: _& y6 O0 Y  a& m) [3 N& W' s( p4 |
{
$ ?" i1 W+ K! Q, T$ ^$ S7 t) x! I  for (int i=0;i<MAX_INVENTORY;i++)
, W- a0 B. v, C" x  {
6 F6 R9 I, W2 |% a) l# e   if (m_Item.dwId == dwId)$ U- G& C8 x5 X% o+ |0 e/ @* d
   {" ~1 D. Q! P) `+ C+ u1 h
    return m_Item.nIndex;6 ^: `1 `+ b( z8 q
   }
- k  v: F/ `0 S2 x% U2 N$ H  }
' Y2 {5 T2 f; N. w6 V# Y* Y  return 255;8 o" `9 P6 y4 Z
}
, G; s& ?& h9 q" z7 i, Y: fvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
8 h% s/ F! _4 s1 p" a9 |{- f# j& g4 P' f- |9 }& u
  BYTE nTmp = 0;
( U0 t  k4 V0 i' A" I9 \  bool bDest = false,bSrc = false;' P2 a. R$ y9 j% M
  for (int i=0;i<MAX_INVENTORY;i++)
. {* D7 X2 ?, |  {
) G/ O* K1 f: C# H( Y   if (dwSrcId == m_Item.dwId)
! X" f0 }# U" H5 ~: i   {( \+ g+ q% a4 M$ A/ j8 S
    //id相等 则 改变对应的dest和src
; T2 D, u% y/ q5 `( R    nTmp = m_Item.nIndex;
2 j; U1 E5 }( u% l0 t    m_Item.nIndex = dest;2 C2 d: U' a& U
   }
/ }/ i& A8 I+ z  |4 l  }
" ~5 a! p; k+ Z  //临时数据保存完毕,交换开始
$ U+ \  _& c$ _+ k  for (int i=0;i<MAX_INVENTORY;i++)% S" @$ H6 }$ X0 k7 b) H1 l
  {- `. Q/ T6 U* t
   if (dest == m_Item.nIndex)
/ G( w) j3 k$ E. B7 j& o   {
6 H+ U1 I% |( u7 d. F    //id相等 则 改变对应的dest和src
0 r% m6 \. j# t& E4 W$ d    m_Item.nIndex = nTmp;
# E0 L& ^& Z* \- s   }
, R& C$ [5 E7 W% v/ s( z; h5 ?  }
. G% M" W  m" w) E5 J}
& J  {5 |; N# f' f+ X, t! M};: e' T5 X" f/ |4 _1 s" A
-------------------------------------------------------------------------
( L+ d6 C9 Z; W$ Q: A依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) ~! i: ]$ V* z4 S4 ^搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);% Z0 m0 }  l. M, I% r
紧靠其上添加:3 S% s/ _& J4 R) w
if( pWndBase == &m_wndMenu )' q% z6 Z, @, T: v
{
4 v2 p) x$ P0 m, y1 c- _4 H# o! a  switch( nID )" Y- N3 U- l1 q1 V: Y
  {
" u0 `! y4 I( }  case 2:
) I$ H, P+ E7 W   {( b0 E3 F2 t9 S1 r  A! T
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
  W  x" n+ P7 W0 ]+ ~* Q3 d+ X* u# q    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% _* D; _# @8 \$ T
    {
+ _, A" D" ^" M) ]/ G% G0 l' v' _/ j     break;
' f* v! P/ H/ P& a4 j    }8 l" _; t, K9 C9 g! y8 L
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
3 U. V+ ]  b: u. c' ~. ^1 q    {: c6 l& Y, N7 T9 w6 R
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, v5 A, b; f: S+ `2 \% w: x     if( !pItemElem )  n% u* e6 |. e1 g  R
      continue;
: I' w# |* ?" `2 e. A. P+ q- W/ E     if(pItemElem->GetExtra() > 0)) `7 l4 x! A8 p; k1 }/ \
      continue;
0 H5 J+ _5 h; C  P     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
3 S1 U3 T4 q8 i/ G$ E" K/ C      continue;
: p# D  M* I/ G& b  m  |$ z  G     if( g_pPlayer->IsUsing( pItemElem ) )4 P, |; m6 B0 k5 W% h6 f
      continue;
! p" e* Y  [1 I9 B. {2 F+ ~     if( pItemElem->IsUndestructable() == TRUE )
# P) m4 \" m  h$ P$ z     {
' j9 H+ x! z& z1 V' R3 a      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );+ U: \$ d, I9 }% X
      continue;
, c( i  P- C; a2 U     }
0 ?  B7 e9 M) r! f* P6 A0 E     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);: H: m; x) y1 b2 B2 S! n  Q
    }! B3 l& }9 E$ H
    break;
2 \6 V2 O  S7 @; F7 d' w   }
& \/ u/ ?1 Q- f0 j# u* R  v9 T  case 1:! ^, Z% c) F( u7 Q; R. o& \, ~( w' H
   {
, ~! L; {# I, k5 [! X; m( g5 C- x    //整理背包
9 G3 W! Y: }( [6 W9 y9 z! n. k; @    //////////////////////////////////////////////////////////////////////////# S  I9 O& o  b7 P7 U2 X
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );7 V  j0 m8 s1 q, S
    //////////////////////////////////////////////////////////////////////////. _0 Z; n9 a, _* ^4 [8 a2 `- V
    //////////////////////////////////////////////////////////////////////////
9 {0 ?5 O& V$ q( P    CInventorySort* pInvSort = new CInventorySort;
, d1 U- Y3 v$ R2 a1 R    vector <sItem> vItem;0 Z$ e9 Q; M4 F& q  d. t
    vItem.resize(MAX_INVENTORY);//初始化大小
+ k: J9 \& }+ k( j  m" @     //////////////////////////////////////////////////////////////////////////0 V% P& y) n  H% w
     //填充数据
: ]8 o$ ]4 l* |3 m     for (int i=0;i<MAX_INVENTORY;i++)
. B& n' y, G1 Y     {
' G; z- b$ H7 f' R' \      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, q% V7 u: }; }
      if (!pItemElem)5 p: }" @& X  c: h- w) m- s9 n
      {
" |+ ~+ K, z. B0 Y0 o! j6 Y       vItem.dwKind2 = 0xffffffff;
8 k3 i! N+ X2 k* f       vItem.dwItemId = 0xffffffff;
% Y& _+ Y% t/ M. S0 L3 x/ K6 V" e# J       vItem.nIndex = i;+ Z% w+ j6 z4 S' G* D
      }else {
8 ]9 N" O9 Z* S# K+ J) p$ |/ Y7 ?       ItemProp* pProp = pItemElem->GetProp();: u( h, r  ^- U* k% n
       vItem.dwKind2 = pProp->dwItemKind2;
- }1 b# X9 M1 M, w, I) I0 X       vItem.dwItemId = pItemElem->m_dwItemId;
6 S$ K1 e% r2 C" E( {- C       vItem.nIndex = i;2 w* o; J5 M5 e; r2 K. S9 p
      }
0 C! s$ }4 h+ g, A7 @2 c* }      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 I' m& T$ O: _7 X$ a8 x     }% _& T( D& U" g, B/ f4 A( S$ f
     //////////////////////////////////////////////////////////////////////////
; Q: |; Y& e; I- a1 K. R& d     sort(vItem.begin(),vItem.end());//排序
! `- k1 f9 c. C* w6 F0 v: h     //////////////////////////////////////////////////////////////////////////( D( |+ P/ {* D4 G, T( N
     //交换# C4 H6 g, i! k% c' q
     for (size_t i=0;i<vItem.size();i++)8 I9 g0 o. ?% j$ x/ ]' M. S, y' N
     {7 T* h4 j3 ?) `* S4 }9 ^" Y$ k9 x6 d2 L$ ^
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);! C" O5 c1 k8 z" ?, ^
      pInvSort->Add(vItem.nIndex);1 ^& d4 g' |' M9 S' y% [
     }& j: U' g; u, M
     BYTE nDestPos = 0;
4 X/ f* `- U4 S* }; c  d0 _     for (int i=0;i<MAX_INVENTORY;i++)& ^7 k& o/ J* v0 k& j
     {
' X7 R0 [, w8 ]  c      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
& F: q* N: B+ E1 F      if (pItemElem)
3 @" ~) ]( A, L5 J" @) i1 }      {
1 G+ h3 {; N7 A+ F8 @       if (IsUsingItem(pItemElem))
6 P$ d7 j! [0 }' e5 R1 \1 S       {
  J: h3 M: E! v2 y3 F/ D0 w2 ^6 E        //这个位置无法放1 @9 Q& R1 ^3 v, e0 C& v9 o
        nDestPos++;
# @# X( _. o1 M  C8 e       }4 m, {$ b7 Y2 s' c' n+ X4 m4 r6 H
      }, B- h  C$ D- J% m0 i: x* _% M
      BYTE nSrc = pInvSort->GetItemSrc(i);
$ j0 g' K4 U1 Z      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
6 E, e2 v# `5 R  ~1 ?5 t      if (pItemElem)/ b3 ~1 `5 |  C$ F2 d
      {9 l" M5 K! G& R. h7 E
       if (IsUsingItem(pItemElem))
8 o  h9 |) N) r' [       {
3 @  g% ~0 Y6 N+ Q4 r        //这个道具无法移动,跳过8 ]/ k# L6 U0 W
        continue;
' {! \9 j3 d) o& _       }) n9 ~" J- i- m  ?
      }else{
; `7 E! d/ P$ X       //空位置 不用动
( q* Z" Q* g. N' P4 [) |% D       continue;0 |! ^+ v$ }+ h) W1 Q  e% N0 z( d- d
      }0 u5 T2 e7 h/ s2 K. U' n- q* K2 f
      //////////////////////////////////////////////////////////////////////////
9 J9 b2 x- ?! Y5 w      //开始移动7 Y0 V% v& d: J1 k- w8 N
      if (nSrc == nDestPos). w5 B6 Q1 _6 X) T& K# H" F9 Q
      {2 `, c+ d8 d& S- A8 I8 k
       //原地不动
* l; Z% ~& _4 k5 c$ r* E4 z3 k* Z4 _       nDestPos++;
" L1 g' h# V( {6 e1 }" D1 G       continue;8 [! A/ A8 y# j  |. N
      }
9 T' x) t, X( h      pInvSort->MoveItem(i,nDestPos);1 ~- }# x3 V+ y9 Z# @
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
0 b& [6 P1 @7 }      Sleep(5);& L$ e9 n% n5 [
      //Error("移动 - %d->%d",nSrc,nDestPos);6 @* f5 \3 t- m
      nDestPos++;1 t7 ?9 G& b) l, t: J- u
     }
$ b9 L4 ?4 h3 Z, W/ p& T     //取第一个元素的信息
) N8 x0 V8 t0 D# K$ S- `! E9 u     /*2 M- L+ F' u) o) {6 W3 [$ [( H
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)' u5 g/ v4 |, X/ I' t  |2 Z7 u+ p
     {( g* m% O( Y' Q2 l6 g: o5 O7 `
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
. X* j- i7 ~5 e+ g4 h0 i, g      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);9 ]' e" t" W- T
     }
5 L& M# a/ M7 X- r     */
$ t: ?- k# w$ O6 R( S    //////////////////////////////////////////////////////////////////////////# i2 D% ~# g% i. b# p9 s
    break;5 M% T' R, x- b+ N5 Z+ t
   }* Y( D+ }! D) L$ m* F! t* W3 m' w
  } ; P7 q1 P, g$ R
}
5 u% d' L9 O- g) ]- K; ^m_wndMenu.SetVisible(FALSE);
4 Y6 R# _! |0 Y' N$ j' R* j  r, l4 e+ M0 L- L
--------------------------------------------------------------------------------------------------------! ?  ?9 ^* L, ~$ n% t' f4 b
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)7 Z) ]+ c3 L9 U7 j
{
6 X: Y1 }( m" ~* d1 ?7 @$ c/ YBaseMouseCursor();( y' h" x( r: ^6 W% Y' P
}5 _& t4 z; a* x9 N1 e
在其下添加:
$ b+ A  p% ~: |! d6 I* H! F3 vvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
9 o0 q0 h4 B, {{
6 R: h# X! v( F+ g2 h. vm_wndMenu.DeleteAllMenu();
' s8 p$ l# Q$ {3 Cm_wndMenu.CreateMenu(this);" N% W. h0 Q9 E# D4 V( O2 }
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");3 E6 k: u' B- ~2 e2 w! Y
, ?) a( H$ P0 C: [% @3 }
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))! w/ i9 A* h1 S6 B
{
+ ?6 d, G$ a8 S  //P以上级别才可以删除所有道具! S& z+ a) x( {6 P
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");/ `% i2 K0 h  S! Q
}
- y8 I( s* f/ am_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
7 y% D6 l* D- v1 ?; y) om_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );  y8 _% K; l, \- G. s7 H, T- p
m_wndMenu.SetFocus();
! u: ?, A) c( d8 m0 ?}
. R7 p2 p8 `! D  X, r) d4 l$ {------------------------------------------------------------------------------------------------------------
. j6 Y. p0 f) J1 ^*************************  w8 k% [  X* A1 ?
WndField.h文件/ [8 o0 f, N8 P9 K! G: L
*************************
- a  l- |' D$ e0 ^$ d8 N9 D搜索:BOOL m_bReport;+ d9 @4 r( M' x& B) R
其后添加:1 D  v+ R$ Z  X- @; b
CWndMenu m_wndMenu;
' s% W7 B; p$ C& }+ L: V搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
6 n5 i( E- [; u/ k其后添加:3 q5 |. U9 v4 @5 s# D6 l- z
virtual void OnRButtonUp(UINT nFlags, CPoint point);
. P3 @% j& ^! M5 j4 k" t* l9 @* R$ Z# g  H# I

6 G/ A6 T' J- B; ^8 l: z

相关帖子

回复

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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