飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
: f. @) M; c0 W* w/ I  F搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& E0 g! n5 M' |1 p4 {# c* Y- R
4 b& W- Q& P- J0 d
struct sItem
1 V+ A. B; H$ w& H7 n7 N{7 D3 K. X4 P/ H7 i+ g$ T/ R
DWORD dwId;% q# U# G0 E+ M' O5 ^& V" N3 _
DWORD dwKind2;
1 i; z+ Z6 w4 kDWORD dwItemId;
$ C1 c6 _$ G$ q: P: a0 eBYTE nIndex;# Z) D5 f4 u# F3 S1 A: v9 h
sItem(){0 j) T& j' ~) \6 S' \$ f+ N
  dwId = dwKind2 = dwItemId = nIndex = 0;6 z' ~$ _7 e- j' c! s
}; M8 w- s2 r8 W
bool operator < (const sItem p2)9 j+ h. K# P& S8 w
{) m- {, `7 w- D
  if (dwKind2 == p2.dwKind2)+ T9 u" C+ {! r4 o6 g, L
  {8 ^& B: C* P* E
   return dwItemId < p2.dwItemId;
' t/ ^' Z- U  d# J  }else{- d, n" Z9 O) z: }; u. y# o1 r
   return dwKind2 < p2.dwKind2;3 s! y5 k+ T! A. v$ U) P( a  e
  }# @& J8 `/ v" N
}
0 @; E. k- C1 T# s. a$ s3 P, {3 t7 M% d};9 _5 i: z, }7 g( K. b2 P
class CInventorySort
. G" Y( `! E- E" B- b$ Q{4 p* y8 }2 H7 A
public:7 s, o6 l3 O9 ]) u
CInventorySort()7 G' |& A/ R: h" o7 V' Z
{
8 y$ a! ^- @/ z1 B) r/ h4 j4 U9 T  m_dwPos = 0;  |- f& z5 D6 y$ s. f4 R7 p3 I( g# ~
}
6 w4 r# O# R# g; I~CInventorySort(){}
  X$ t* d# h, I: }9 s9 k0 @private:& {( g) j; r/ ^0 |
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息5 ~# f7 n2 b2 e- |& O
DWORD m_dwPos;
6 O& }; e# `! y" b/ ?% f- spublic:% P, v4 }$ p: {3 r
void Add(BYTE nIndex)1 W6 b5 q# @. f5 e
{
6 v& X7 C% @5 i1 [( S0 q4 T3 T  if (m_dwPos >= MAX_INVENTORY)  Q# v; q5 ~( D( d1 t' Y+ q
  {' Q* Z4 H3 {) N3 J
   return;6 R& y7 y. `/ g- `# m; q  P
  }
2 t/ W( L+ |+ T/ ]# l5 W  m_Item[m_dwPos].nIndex = nIndex;
6 M# A. N4 f. P- j9 d6 n, P) y2 N  m_Item[m_dwPos].dwId = m_dwPos;
+ Z: D' ~+ v6 p3 Q; a2 x8 h  m_dwPos++;
9 s9 d" a- X9 S8 Q4 O}
; B$ ^1 w& a$ A& M' b  \BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列- q' h( h6 o9 `9 d4 n$ n2 W% F
{3 G2 q3 G+ [, N+ k  o5 j
  for (int i=0;i<MAX_INVENTORY;i++)& G+ j1 ^: g5 r0 A
  {% @/ Q2 W7 E- V
   if (m_Item.dwId == dwId)) |9 f3 _" [8 N; j' k5 z
   {
1 V* Y: U0 h1 g- h( S    return m_Item.nIndex;; g; f/ b" l. C. C* ?0 ?* k
   }6 S8 L, k( w2 K( p4 f
  }
* j- p. a; O( \) m5 M/ z) ]  return 255;
7 X3 l! Q" B. c}
1 |8 k, w3 w/ X0 u7 q2 w5 {void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
9 F) G" w' P  H{4 O5 O, Z2 Q- u7 _3 x  Z8 j  ~
  BYTE nTmp = 0;
9 Z/ K' F) ?7 y1 k9 c  bool bDest = false,bSrc = false;6 d1 v7 l! h+ v+ }5 g9 Y$ H* S# h
  for (int i=0;i<MAX_INVENTORY;i++)5 [" O" `( K; I1 E0 ~( C$ `
  {8 e6 N/ n+ q* ]6 z/ l; Z9 |
   if (dwSrcId == m_Item.dwId)
  j0 _1 [; L7 }5 C2 t. d   {
* P9 F, D3 B: a; N; u; k8 N    //id相等 则 改变对应的dest和src) {3 o7 v4 N2 o: o1 N9 p8 X" o
    nTmp = m_Item.nIndex;
" q- V7 e# j" w8 }0 |    m_Item.nIndex = dest;+ Q" k" e# G- M  M
   }/ W' t* V1 A5 }/ Z& I, j/ J. q
  }
$ K/ d8 T- t' g  //临时数据保存完毕,交换开始3 ~0 ?' z+ b9 @7 r, x  {
  for (int i=0;i<MAX_INVENTORY;i++)
) d# k3 E0 h! m6 j& q9 n3 }5 w  {) ?* [3 j" O9 A8 T
   if (dest == m_Item.nIndex)
; i6 z8 ^; m5 e% q5 h   {4 K% v* T0 x4 i$ o3 s
    //id相等 则 改变对应的dest和src$ \$ B8 B2 ?3 @* a* I
    m_Item.nIndex = nTmp;
5 G" q! G7 }8 D, K: O% I. F   }
5 g# m+ M6 v* C& h# P$ Q& c5 C  }. O0 l% y7 `  J  ^
}
* R, @7 A, ?0 D7 P2 l# b};
( B3 V' }& h' [-------------------------------------------------------------------------
8 ^) S5 l+ G# H8 v0 k" D' v依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ I# p8 n; y" V: b6 R4 k1 ]9 e5 S
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);) i( ^6 ~1 ~/ \. q2 q4 K
紧靠其上添加:
3 J+ R  t. [  j7 T4 J% ?3 X# \7 ?if( pWndBase == &m_wndMenu )* ]. ]# m" V* a$ Y0 Z: W5 A
{8 p, f1 y. H2 b, Q
  switch( nID )% e3 s  Q( I& B) T+ Y3 F
  {
1 m! B) g7 ?& s6 z$ f, F  case 2:$ ^9 e( i. P; x4 |- C! k; M: R7 `
   {/ m# F7 B/ g8 E( b2 s
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);7 V/ J: ~* B, W  |
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))  y6 \8 t# s0 ], F
    {
$ O* P, F6 Q+ w     break;* q% T  k) i( \- h* J5 i8 a
    }( a3 x9 \9 v$ r) B
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)* }/ V& y9 O5 \. q. r9 }' S
    {
+ _& d: W% ]) d) j' G5 X     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 }' p2 ?1 b7 X1 L0 r
     if( !pItemElem )# u+ Z+ f( _: f' S# i; l- S
      continue;
- o9 K8 j: H& A4 A& L0 L4 `3 `/ M/ _  I" d     if(pItemElem->GetExtra() > 0)
( {  ?) y# F3 r& I% j# I( b      continue;, c8 W7 t* @0 e# r
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
5 r) U" q4 V6 F+ w; A- N      continue;% U& M8 U# n+ b( O4 _
     if( g_pPlayer->IsUsing( pItemElem ) ); _4 a7 Y: y1 y( E- a
      continue;
7 i; S5 }) x; C, P8 F; m5 l$ f     if( pItemElem->IsUndestructable() == TRUE ): [3 k! H. m8 Z8 k$ a
     {
2 _: W2 E5 H, }. N7 b; s      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
  H5 @/ g; _5 Y# A2 F3 t# z7 `$ A      continue;
* ?1 D) N; t' K5 x     }
( Q& S! m9 C0 y7 v! q1 v$ b     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);, k* |9 [' R$ ]* m, N1 n5 ]
    }7 g* n/ F* [" a0 }* `; }
    break;
8 ?( X. c4 D6 G4 g/ y3 {. F   }
" t; o& t6 ]% Q7 D$ h  case 1:
* Z6 e: Q2 z+ Q0 {+ M5 x   {5 {- }; p- C) L3 g) j
    //整理背包' {0 L$ c7 J4 i, d' q1 E
    //////////////////////////////////////////////////////////////////////////* E# I- D$ ]2 i6 {! t8 h
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
! s# s/ {/ z4 X% h9 V) n) `4 K    //////////////////////////////////////////////////////////////////////////
) V( \3 ?' b" k. J! I    //////////////////////////////////////////////////////////////////////////# @2 A. a' Z5 j# H8 ]$ s: d
    CInventorySort* pInvSort = new CInventorySort;
9 S/ L/ e6 Z- k6 w1 m  b    vector <sItem> vItem;
5 m3 u& \! t: m+ `$ ^4 z    vItem.resize(MAX_INVENTORY);//初始化大小! Z2 D; @: J1 }
     //////////////////////////////////////////////////////////////////////////
+ I$ s3 {4 i8 T" p7 ~8 \( j     //填充数据
+ C' {9 D+ n, v$ {7 _6 s$ z; r* J     for (int i=0;i<MAX_INVENTORY;i++)
( P; R3 U2 I9 h/ y     {: z% ~2 [" N+ c
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);9 j( ?+ i0 a4 `3 g
      if (!pItemElem)
' S# C7 U  ?( O) l' k      {
9 G1 J* s1 Q. R+ s1 x* f% P- g) }. j       vItem.dwKind2 = 0xffffffff;* `: K" _5 ]* j+ U" Y/ Y! c
       vItem.dwItemId = 0xffffffff;  |; v% D; M, ^! B
       vItem.nIndex = i;- g: B' }, `" a- {, v
      }else {
( h( N1 _# V  g: W7 N1 L* y       ItemProp* pProp = pItemElem->GetProp();/ R% R% \3 l( R3 z# r: z# y* ~- B
       vItem.dwKind2 = pProp->dwItemKind2;+ ?' `, o, E- i' M& r. U
       vItem.dwItemId = pItemElem->m_dwItemId;, D0 I: S$ q1 Z: c( w
       vItem.nIndex = i;4 Q, T1 n0 E& K2 M# z' U
      }- C' P5 D. w, |, {7 H0 B) H
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 a, C0 ?- S  B# i; ]" D4 Q     }( ^4 W1 x  g& p' e4 ?0 _8 I8 `. t
     //////////////////////////////////////////////////////////////////////////
  ^0 C! y/ ~. _0 y  M$ X     sort(vItem.begin(),vItem.end());//排序* C  J7 B3 r5 N% R- W. `$ n, l  b
     //////////////////////////////////////////////////////////////////////////
& P5 R! d& ]5 b     //交换/ f4 _# j8 \2 q: S4 D! U8 h
     for (size_t i=0;i<vItem.size();i++)4 B0 w  J, v" M
     {
4 Z; p: u) [4 [& r/ q5 j. m9 s      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 O4 T" Q% l9 ]( H; z: z6 m      pInvSort->Add(vItem.nIndex);! x8 s3 N7 ^# F# R3 A7 R8 k
     }1 u3 c7 X8 m! \" P+ `* }! z. s
     BYTE nDestPos = 0;
( o: D4 s6 j$ c     for (int i=0;i<MAX_INVENTORY;i++)7 }+ `5 V4 h0 e: j* x* T" L
     {
' ]' o+ Q+ [  x/ K      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
# E6 d. x0 j( `/ X( ]( E      if (pItemElem)
, X% Q% C& O4 f; U. F      {& u7 g% v. f+ d+ T# Z0 ^9 l
       if (IsUsingItem(pItemElem))
# Y" J, t0 W8 z- G3 r; T. x       {
% n4 K+ W; f  `, b7 o        //这个位置无法放
: w3 Q5 X& X! T: ~8 A* n, L- `& C        nDestPos++;7 P+ _; g( i, K8 ]9 R9 X) f. a5 I
       }
; i. u' [1 k3 n* u      }& q8 J2 Y  G! G+ O1 s" p8 Y, q+ Z
      BYTE nSrc = pInvSort->GetItemSrc(i);* R6 Q( i: f% ?( S) j
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
' ]5 K) A6 Y9 [8 @. O      if (pItemElem)2 `; R" J+ X3 {7 G$ R/ ?1 M2 D7 ~
      {
1 p: M4 V; |* I9 |! W       if (IsUsingItem(pItemElem))5 m; z5 Z' u: O2 m. M6 {* Z1 E5 |
       {
& V- R% K& E' w$ P8 {9 Y4 C        //这个道具无法移动,跳过9 Q; Y3 @* M' a7 c
        continue;
. n* h& J) N# `  \. K1 \       }
  D, L* n: B& q7 t      }else{
& V% k2 \2 V$ s8 V  a$ H3 w       //空位置 不用动2 u+ @4 _' o! s, f% \+ [6 d& _2 [0 H
       continue;
, H8 w. W& c- Q1 Y  J) d& J      }
: b0 t3 @# o4 I% H      //////////////////////////////////////////////////////////////////////////! C0 }; `& O- q
      //开始移动4 r% T! C; P' I4 L1 E9 k5 ], M
      if (nSrc == nDestPos)7 F8 e6 \# t9 p# k2 {. Q" t
      {  v" Q6 m3 q* {  P2 S8 K- B* W& M( ^
       //原地不动
( N! m* J5 }- y3 i1 `0 _       nDestPos++;
! g( t0 N" O8 n9 U% m       continue;8 @8 w* S& }" q+ |
      }+ ^; x/ S5 O  \) x+ Y: m
      pInvSort->MoveItem(i,nDestPos);
5 K" F- e' s2 P5 E: p* G+ S4 L      g_DPlay.SendMoveItem(0,nSrc,nDestPos);! q& Z! r- j3 i
      Sleep(5);& j# y0 d2 J/ J$ K
      //Error("移动 - %d->%d",nSrc,nDestPos);
: c. H# Z( F! m0 T* d      nDestPos++;
& @( L+ v2 h2 b  x4 \9 O2 ]     }- \/ Y. U- A9 q( G# F6 a
     //取第一个元素的信息. R4 W# _; o! l5 [
     /*
5 ?8 K9 v6 a: ~* ?; f* p8 ^, A     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
7 b! M) c2 ^( Y: a     {
7 r$ z: W* g  w: c' x      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
- m) b4 |! s6 C6 G& i- g! R0 O3 \      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
9 D* S5 o: V2 h( W     }
/ V/ H1 I# C  D) p     */
4 ^2 V; k' i4 g# G! h2 z) u1 `0 Y    //////////////////////////////////////////////////////////////////////////* B/ v* n) f0 q! K6 W5 o* l8 O
    break;
% x- d' l- I: X: U" W9 O4 t   }1 W7 a+ b( u( ?9 R. c
  } 2 D* F+ B$ m% D5 \  U
}2 o2 L4 k9 P. \0 R7 |
m_wndMenu.SetVisible(FALSE);
5 Q# W& F. m( U  p; L, L6 z5 e) _" ~7 i1 e- {
--------------------------------------------------------------------------------------------------------; v5 D* o! \# B) ~$ `$ b( \- \
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
. t3 z6 Y# B5 `6 Q{/ w4 Y; h% F4 s; F2 C5 v
BaseMouseCursor();+ J* {8 `6 Q* b/ m* m. b" V, @
}) r5 s1 Y) }9 ]3 q2 a5 h# R- C
在其下添加:
5 e; A# Q8 Y+ D- o6 D* nvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
4 O9 D; P/ h8 T{+ D+ y+ i& v7 h# R' g
m_wndMenu.DeleteAllMenu();; ^. ^4 G) M5 \& T- h, a" `
m_wndMenu.CreateMenu(this);
0 @4 x' q% s' T9 f# Q. j5 ?m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");- u5 }4 M+ ^+ Q  q% U
! _; ~! u* z$ r
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), x1 w2 c9 ]4 X' V. F- b/ G
{
, H' K4 r- G4 }" ~, K" ?1 S3 Y  //P以上级别才可以删除所有道具$ }, I1 E; X9 C
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
5 g! U7 Y5 q3 A" D" ^( k}7 U+ i  i5 A0 n4 ~) W  p
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );+ U6 Z# N8 V9 c2 i
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
2 I$ }% k% u5 U# G$ zm_wndMenu.SetFocus();
/ a* V' u  }  {* e}
7 C' r2 @) ^. [$ t------------------------------------------------------------------------------------------------------------
& y$ L. d1 s# H# K1 c*************************+ _! a9 r9 w# K: m% P  E
WndField.h文件
1 u' A& [2 R/ q5 s1 `1 [*************************5 A4 E6 y5 C- J% L1 u4 ]
搜索:BOOL m_bReport;. |; u- g- A* z. k
其后添加:3 u3 R; S( l. Y. A. F9 Y
CWndMenu m_wndMenu;! `4 f5 T' \# u: ?' w4 X
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
& ?6 P* e! h1 H1 O其后添加:
3 @0 [* A7 j0 o7 g6 @virtual void OnRButtonUp(UINT nFlags, CPoint point);
2 u( X( E0 z& G; U8 k$ u. l! T( C% H' l" m; t, L

/ d2 u7 K- {" W9 l8 Q5 m

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-21 02:43 , Processed in 0.182474 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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