飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1090

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1090
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
( V, g) p( U9 F$ x( N; f搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
0 d% X. T' y/ Z' X8 y% l$ B9 A. k8 c, W
struct sItem
$ n% ^& ~1 d: D9 H{, g: n6 g" ]/ k# `0 f
DWORD dwId;; j9 ~+ F( B( s: |7 e. y5 ^$ @
DWORD dwKind2;
$ T8 J( T! w. m0 bDWORD dwItemId;
' l) g' o' p8 ]- m; M" S' TBYTE nIndex;5 k' I. K5 f/ I4 A6 h) |
sItem(){/ U6 ?, j4 |) H( {" f
  dwId = dwKind2 = dwItemId = nIndex = 0;
* l! v8 l+ X% [, w7 F4 B}& m( W" J. {. T3 B2 l% e. Q' @$ k; Y
bool operator < (const sItem p2). v) Y7 S' r9 D5 M3 Y. L
{" w+ F2 T) I' [9 @3 u3 K
  if (dwKind2 == p2.dwKind2)
  F6 N; g$ U7 Y. W( X  {2 g. H  r7 r" @# f$ j' D
   return dwItemId < p2.dwItemId;
; b. g. Z; Y7 J( c. _' R; }  }else{) P- i0 U: o/ b6 }0 F
   return dwKind2 < p2.dwKind2;  ?- L* u. N0 h* p" g; L# @$ H
  }& s- h( p! B2 L, ^  ]  k( W. J
}# y; q: q( g% o
};% X/ W/ l+ R/ |; k$ n" a6 |( f0 j
class CInventorySort$ L" n! @& y* n- E# a) q
{) ~& \/ p& m: X9 S. z& `
public:
& F9 b. f& y, z, WCInventorySort()& N; A# V" X8 |1 ]' g7 i
{
+ K$ I7 F- @% r% E4 C7 e- a  m_dwPos = 0;. t- L+ T4 _$ T. e* }) l
}
6 c' p/ o/ q; V8 I, v  p~CInventorySort(){}
/ n' p: a" V8 f- Nprivate:
3 k5 p2 I: l8 [4 F, AsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
4 y! J+ h' e; |3 F8 [) c3 XDWORD m_dwPos;
6 C, ]3 V9 C5 W, z# spublic:
1 a- L+ ~5 M7 T# z) x9 ~$ q" Wvoid Add(BYTE nIndex)
9 y$ p, c, T5 v3 R/ Q6 _' w) W{( x  K! d* ]5 U# v4 c
  if (m_dwPos >= MAX_INVENTORY)4 o/ w1 _, n  {4 m2 K
  {
6 S/ M% L, q4 ]: K   return;: s* {' n: S" M/ \7 E
  }6 ^6 Y  R$ u8 S$ z
  m_Item[m_dwPos].nIndex = nIndex;8 `7 w% I, i# G" ]$ e! z# e0 g
  m_Item[m_dwPos].dwId = m_dwPos;
' {9 ?0 G4 P( c$ y9 @  m_dwPos++;* U  U) I% t  K8 _% y: f0 S' ^9 a
}" O/ u$ z( ]6 h0 r5 V
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列( g* o2 w) G2 z9 }/ F+ w! [. N
{
* s8 ~; E# L0 h) S  for (int i=0;i<MAX_INVENTORY;i++)- j% F$ @! f% m6 g3 ]( ~) V
  {
- Y, l: \& _4 T   if (m_Item.dwId == dwId)$ E6 K! B/ s: |8 L+ ~
   {
2 x3 H; f! E& x/ ?: F    return m_Item.nIndex;
2 C: n$ a) n5 k( q  F$ L   }
& G1 w5 Q2 w0 {$ d9 T6 |4 P  }# D8 o9 {% ~$ Q! I1 s# L2 b
  return 255;8 F" l# s# g8 M( l) g
}
+ ^0 M: U" q2 O  ^void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置* G0 M: E, E4 q4 ~! |2 l' e4 U
{5 B  ~& p2 I/ G
  BYTE nTmp = 0;
& m  F8 d- U, U  bool bDest = false,bSrc = false;
% a1 f  T4 i: U% P% [1 T  ~6 |  for (int i=0;i<MAX_INVENTORY;i++)
& }! U; b: K- o# x  D9 d% R  {% T8 s% s5 y& \9 e
   if (dwSrcId == m_Item.dwId)" t3 e/ W# \  a: [# `& V
   {0 ~7 s9 F' x9 j/ ?; `- S6 p; E
    //id相等 则 改变对应的dest和src: @; _4 D5 K' l, G) K4 B
    nTmp = m_Item.nIndex;
& I$ p6 y! {! @6 c1 a" Q2 M. D    m_Item.nIndex = dest;
& F! k' D7 c+ c& R; L/ @5 [+ C   }
3 _% y: T' e; z$ W  }7 |" B5 S& n5 k  S' h7 g8 |9 {
  //临时数据保存完毕,交换开始( ~( a# c0 w6 Z, P  ?/ G* h/ M0 |
  for (int i=0;i<MAX_INVENTORY;i++)( b* I  j  o. \0 S9 y* D1 o/ I
  {# F9 ~0 {: w0 C7 O
   if (dest == m_Item.nIndex): O' K" q/ P; R6 Z' v
   {0 o9 Q" n7 V$ @: {0 a
    //id相等 则 改变对应的dest和src
4 |6 o: p  _) ]6 h$ z    m_Item.nIndex = nTmp;- D! {8 H$ Q( q% P3 {) b5 q  G" p
   }# A) E% h- W& T$ {: ^- {% u' r
  }$ t+ `4 S9 x: e# x1 w" m
}4 v7 I5 A4 L  N% n
};9 J! t" _0 g# D, n3 e% C+ C& T
-------------------------------------------------------------------------
3 G& u8 i6 b0 a! d/ ^' t依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 ^3 H1 C9 g, ^, L- G
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
7 g. j9 C- A$ A3 x1 A紧靠其上添加:4 [# l. U3 V, p- T# D
if( pWndBase == &m_wndMenu )
5 {* g; f/ m6 U{* }; P5 G% l; F# T) e  x1 @
  switch( nID )
+ @6 |# m  {- b+ N) D  {  {
2 s  J% t8 I8 }$ u  case 2:, K0 g. c  n- m- g
   {
. W" b  e/ U& |5 f    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
; [% l4 \( u+ S    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& F; |* e/ @% y3 Q: t    {4 E  k& j2 g! Q) l& E$ y
     break;
8 s5 p- T. G3 s    }
* c; _9 z8 g- E' j3 J! o    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)# g3 R! w/ R: m! \
    {7 k% [* E3 ?* S- p/ O7 t
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 U3 S4 m% ]! S0 y) }8 d     if( !pItemElem )
8 f2 A7 [7 \# P& P3 m# @! l$ n      continue;
  x4 }+ T3 _- D* m& K# F0 Z1 X     if(pItemElem->GetExtra() > 0)3 ]8 x7 K% B; F. z
      continue;
* j! ~' l& X8 \* T! m: A     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
- [3 W6 ^( _' M  j      continue;
6 i, }. B" S0 Q& ~- f     if( g_pPlayer->IsUsing( pItemElem ) )5 b) O1 f. m+ S5 v4 Y; \" b" u. |
      continue;! V+ S3 @/ O4 s8 V
     if( pItemElem->IsUndestructable() == TRUE )8 T" T+ J. R* w0 b/ Y' B( j
     {
  V; v3 H6 Z( Y. }: @      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );! N' S) `* G3 ]; ~- x! d* c
      continue;
) I* C- L5 b9 ]* v5 W) ]  u* ?     }
4 p4 F" x" \+ {$ B4 H     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);& {- b) G4 \: Q2 k  O+ l( U0 k
    }
! A0 Y6 F& C- z- p; b    break;
& o$ T' G/ O% b; Z0 C, f6 R   }2 U0 [3 `; ]1 J9 T6 u
  case 1:: r& V- f2 q7 E5 }6 g( c% y
   {
* |- P2 g$ }: J8 x1 J& y    //整理背包# O9 p' B% y4 R2 ^
    //////////////////////////////////////////////////////////////////////////
5 X* J# |: q1 B- ^    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
9 K7 l; U$ G0 p8 g4 e( _) p    //////////////////////////////////////////////////////////////////////////0 s' q8 j$ x) P0 h$ ^
    //////////////////////////////////////////////////////////////////////////
5 O7 w4 u9 I# m, i$ l) z    CInventorySort* pInvSort = new CInventorySort;
, D. E! M4 r, T; n' ^7 A    vector <sItem> vItem;
. e4 k/ P! T6 ~4 c2 @    vItem.resize(MAX_INVENTORY);//初始化大小
8 d2 S9 @% e  T. _     //////////////////////////////////////////////////////////////////////////
8 ]9 j4 U9 f, Q$ j1 u4 A     //填充数据$ @* o8 @) z& @# {2 Q
     for (int i=0;i<MAX_INVENTORY;i++)6 T- Z2 ^% ^. p7 z
     {
4 g0 f) [) Y# @/ s% C      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);+ C3 s  k& z! d# E' ?
      if (!pItemElem)$ `( u; Q9 t: s6 z4 ?4 Y4 A2 v3 I5 q
      {9 @2 T* x  i# {; ^
       vItem.dwKind2 = 0xffffffff;, \; ]( L0 S1 ?6 u: \
       vItem.dwItemId = 0xffffffff;3 ^5 z8 @! v7 \, \  z+ n5 G( O) H# o
       vItem.nIndex = i;" x- C  G8 H. U8 ?8 S7 L$ g
      }else {: Z3 a9 U6 E  q) v) {2 d( ~
       ItemProp* pProp = pItemElem->GetProp();3 a- k5 D2 F5 b+ \/ {7 M
       vItem.dwKind2 = pProp->dwItemKind2;
& D' v' |4 R/ ?       vItem.dwItemId = pItemElem->m_dwItemId;% _  D  d4 I$ j, u  h0 S
       vItem.nIndex = i;$ C9 \7 F* E4 O: N- X
      }
/ b$ j1 @) s& ]6 G- J      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 u8 j: P1 T$ s  F8 Z
     }
# i. m/ W# w1 u! S% U     //////////////////////////////////////////////////////////////////////////
& ]0 b- z5 R$ R- U1 a     sort(vItem.begin(),vItem.end());//排序$ \2 y9 z3 I- b
     //////////////////////////////////////////////////////////////////////////
" G6 m7 F3 ]- `' _, t/ }' K; @     //交换
! u+ n* D7 L/ `7 Y6 ~! k. E( h     for (size_t i=0;i<vItem.size();i++)
6 s# }  f3 |& E3 H     {
" D9 U" b( G: w      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);7 n& H+ e" i. n. F: A
      pInvSort->Add(vItem.nIndex);
8 v1 h3 a5 [1 j: ~     }1 ]& ?: m/ c3 I$ z5 p5 X- s
     BYTE nDestPos = 0;
1 `5 m5 w& M! [  ?     for (int i=0;i<MAX_INVENTORY;i++)
( B. E% g* L/ i# P( ]0 N5 g& k     {
$ d0 c+ I" J0 K3 G  c4 V+ }9 i      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);- O- d" b5 i, {% H' N' H
      if (pItemElem)' j7 D4 {& T) d* L/ A
      {
& Y; V" w5 ~) ^4 |: t       if (IsUsingItem(pItemElem))& ?; a9 X# S0 q. M# _. ~! u
       {
9 ~3 q3 J4 l# x7 b; w9 W1 |        //这个位置无法放6 F1 X+ Q. P# z" R; I
        nDestPos++;
# l: `6 f& H, R       }" k* ^: p; j1 x  o4 g" ]6 H( w
      }" p  h$ W3 i% ~
      BYTE nSrc = pInvSort->GetItemSrc(i);
1 T' M. U# Y7 v% E      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
% h' x7 A; j. Z& B6 z- N. ~      if (pItemElem)/ b4 F3 O) {* E* I! Y% S1 S7 X
      {5 m) S2 v7 ]* U& b+ \1 }3 ^  ]( }
       if (IsUsingItem(pItemElem))# t, q% y( d7 [* q9 h( g
       {
: i( v) B. |+ z7 X: l; Q  z) q        //这个道具无法移动,跳过
( j$ {2 u; \/ o! t        continue;# m4 [5 }* x* y5 i
       }# j0 v3 f& W& }7 K3 Y2 S) z% T2 P  _
      }else{# ~2 ?' f# y) f4 `
       //空位置 不用动* F. R- V; F% P1 R( `
       continue;1 M4 I, a2 \( e2 w0 p) n
      }) p; Z! H0 D. K+ E. Z: d
      //////////////////////////////////////////////////////////////////////////
$ e+ e) i7 d- a      //开始移动1 f# M$ I; x+ P- O& p
      if (nSrc == nDestPos)+ j6 j' f5 C" P; h/ r
      {# N' R+ Z0 m3 P1 R
       //原地不动% }& h& u7 A9 T: ?: f6 ^
       nDestPos++;
0 A0 z9 n# r7 C6 f* T; V       continue;
/ W4 Y2 ^; \: U1 ^+ i      }* i" ^$ ~( z+ Y, K0 u
      pInvSort->MoveItem(i,nDestPos);
! h7 t! Y- b+ I1 ^      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
* ^3 B; w8 |/ p; l      Sleep(5);
$ q; g8 W8 }/ i* M0 R7 g# {      //Error("移动 - %d->%d",nSrc,nDestPos);
4 E1 k& |/ L1 k2 i  D: Z: B      nDestPos++;
( B  E& v7 a9 B" ~1 Y3 @# ?( q$ R     }2 n. U, h9 v( t5 s" F
     //取第一个元素的信息5 O2 R) `9 X) e9 p6 V
     /*
. G9 S5 D9 Q1 w( S9 {) ]. e     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)6 o1 W# t6 b4 F6 K  v" V
     {# O( p5 d0 _; }: R
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
3 v- z" o) a3 y! y6 ]      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
  y$ m: w! q) M9 K( ^5 n2 ~% |0 h     }
4 }' X8 |. }" _' k     */. B4 A- V1 @- c+ o
    //////////////////////////////////////////////////////////////////////////
. }3 V6 s5 |& ^( ], H2 S    break;
4 [# \& f0 E1 m3 D# ~   }
5 h4 @5 N1 L; E5 E2 l  } * v$ a3 D* j3 T* O, ~4 g) ?
}8 c, B/ y: ]2 o) m
m_wndMenu.SetVisible(FALSE);
; ]. j7 D* A; f7 e* `5 K' H4 |/ b% @- V( R- T7 b
--------------------------------------------------------------------------------------------------------
1 T; n, }; J4 R* a  f' h搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)8 i, E$ Z7 A% }# `/ E4 ~
{/ y5 ~( Y) G" r; T; B
BaseMouseCursor();  A0 g8 p9 [" N3 L
}! y# }/ p* a1 v! g* m, W
在其下添加:
- C8 p$ V3 T7 ^" L; o" W5 Uvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
3 V1 [: `8 t2 W5 \( s{
1 j5 t! P- d1 K* om_wndMenu.DeleteAllMenu();8 X% e7 V; R, B7 S
m_wndMenu.CreateMenu(this);
* o  E2 B9 v' O/ @m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");& j/ G0 }8 ]1 K6 Q

# w/ k. K$ L! a+ ~6 vif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))- H; _: A4 h) ~: H$ x, h
{/ ~; |6 s$ S6 A
  //P以上级别才可以删除所有道具
) y1 c% x% h9 O/ r  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");8 C: |. A; u6 g- C) S- c2 S
}
( Z* S0 |  l! [5 w5 |' um_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
$ Y5 M$ p4 I& ?0 b; j0 im_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
  N# m4 k2 ]; Zm_wndMenu.SetFocus();
; [' B- n" h: h* c3 U7 X6 S- ?5 R}/ M1 Q+ S$ _0 B1 Y% V' C
------------------------------------------------------------------------------------------------------------
% |, `! J4 [$ Z- @* N6 V! \*************************
; j3 Y( l5 S1 zWndField.h文件
: k6 G9 j: w+ W/ @/ E, P( O, X* p*************************
9 }" q3 \# ~3 p- X) S% y搜索:BOOL m_bReport;$ w( a8 R3 X& i$ D8 m
其后添加:9 S6 W* F7 w- s# f& D% |" D% H' }! c; L
CWndMenu m_wndMenu;
' e( U) T* B1 s/ Q+ F" [, \搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
1 R4 m: g3 M* r/ W9 D  v其后添加:3 [/ `; y! B; S) y! C
virtual void OnRButtonUp(UINT nFlags, CPoint point);# C+ P  U- J  d7 B9 D* Q9 k

7 _- u8 O- c/ W# H/ q8 R
8 g- L, U3 E% d1 n: s

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-28 06:26 , Processed in 0.067040 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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