飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
4 M, S; N0 M6 [6 G5 i搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
! k6 N. L$ X, Y( ^( ?7 w/ c, ~" p% q& @; K& h
struct sItem# y) H  U& o# }$ M. q, v5 t- c! T" }
{
6 L. q# ^5 l- T: S, M! e2 X1 cDWORD dwId;7 s1 O) L; Q9 n( t
DWORD dwKind2;
( U0 x4 i/ B8 k: a8 UDWORD dwItemId;
4 a5 s. T* p- q  D8 o9 d: jBYTE nIndex;  ^* j- n2 Z9 D3 M
sItem(){- d( ^7 N) S. |# l* e1 t
  dwId = dwKind2 = dwItemId = nIndex = 0;
% P( t, J& ?) J  c0 g}4 H' O9 Q8 c8 Z2 b
bool operator < (const sItem p2)9 T  V( L# [3 a) W" ~2 E+ g
{
3 U6 F7 ^: B' J; C  if (dwKind2 == p2.dwKind2)1 m5 L* ^' P, G% h
  {
* `+ z3 ^! @" W2 x   return dwItemId < p2.dwItemId;% N8 H0 X9 u3 D( o0 n4 H% }
  }else{
! j" O2 g+ `& D) K   return dwKind2 < p2.dwKind2;6 i: x; E' r' H: x, r
  }
: f- W# b: h( W}
" k1 Q/ P* c  U+ F};
6 ?: r" i/ z& }/ M" w, g) v0 sclass CInventorySort. `/ \* k( y* c% Y* C4 q3 r+ {+ i
{
2 n7 }% P2 E( F7 w0 r: vpublic:6 H% o; {- E$ Z+ M4 I' M6 M3 f
CInventorySort()1 ?" A" M" t; C# N" {2 M" u
{# {9 `5 j) R# W; P( y
  m_dwPos = 0;
; a1 k- F* C/ P0 q! Y}
3 t. A% t" f0 {6 a$ k~CInventorySort(){}% D' u9 }9 w6 L# h
private:
, J& G' a1 D; c2 o( ^sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息* @3 P) p2 Y9 D# S+ X
DWORD m_dwPos;5 G1 O6 m* T- o7 i) ]1 t$ U7 d
public:
8 X0 V4 C9 D8 C% M( E+ Q' Hvoid Add(BYTE nIndex)( S7 }+ g4 X  P6 y
{
  Q9 T1 k% Q) W( Q$ K$ f- c: Y$ z9 S  if (m_dwPos >= MAX_INVENTORY)  `- P- n; [- d
  {5 @7 g& W% @, r' _$ P. n0 v* L4 [1 u
   return;
# J! \. K: V. y) i  }2 l* _0 t* l! V% ]" M! p
  m_Item[m_dwPos].nIndex = nIndex;
( f6 g  Q* f5 \9 @: u! P  m_Item[m_dwPos].dwId = m_dwPos;  k0 j0 c3 v7 w$ j. M) r
  m_dwPos++;: I" U/ n7 D: A! N' R
}
1 V( H3 p9 ~' b! [BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列& z! l! y4 |/ f- A1 M, U( Q
{
( i0 y1 m, Q( Q( P- l1 |9 l: J  for (int i=0;i<MAX_INVENTORY;i++)
7 l4 q$ D1 r. |" b  {
0 L: H5 \5 V# `! a: c4 [. X   if (m_Item.dwId == dwId)$ j+ w  N5 W2 \1 s0 A8 }
   {
9 W/ F: t2 y  ?) o& c4 @    return m_Item.nIndex;0 A8 }$ X7 H% @0 t/ @
   }. E7 u8 E* n8 ^2 y+ e
  }+ E* a8 _/ F" g9 \9 D
  return 255;
$ P! e4 @& |9 O; F3 z$ C2 P) ~}+ T- W1 ]3 T' p+ S$ t, L
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置% m: Q7 y  P  h
{$ o" L( e: h% |7 L& u! M9 U7 Y
  BYTE nTmp = 0;
7 V. y9 N2 ^2 f5 Z9 G, R$ [0 k  bool bDest = false,bSrc = false;
: g0 ^: j7 j4 D  for (int i=0;i<MAX_INVENTORY;i++)  ?' k9 |: |+ Z* A5 D- i
  {
6 Q" [+ X# l6 }. |" F   if (dwSrcId == m_Item.dwId): t1 T- g( W0 C/ F
   {
2 D6 P+ `+ x1 P5 u$ c1 b) M    //id相等 则 改变对应的dest和src
+ t; j( l$ Z8 h$ Q9 t) {% \7 e. c# z+ {    nTmp = m_Item.nIndex;
5 }! {& U& L+ H    m_Item.nIndex = dest;
2 V: H' W/ t2 Y% P- G+ T4 r1 t) U7 [4 f   }
2 ]  \- g* _" F" n& J0 u  }
# W" h& ]! \3 W9 _3 A* l1 R) j  //临时数据保存完毕,交换开始
. c: F( Q1 T! {9 V  for (int i=0;i<MAX_INVENTORY;i++)
0 S: Y! n) Y0 W6 a  {
+ _6 Z* Z6 s6 [) \" N; Y   if (dest == m_Item.nIndex)
; Z, v: Z% ~, T/ P  k" _2 }   {7 J) f+ c) C4 U; o1 W) d3 U
    //id相等 则 改变对应的dest和src& F& U! f5 T: C+ R2 l
    m_Item.nIndex = nTmp;
2 s3 u; v% n7 A) `# g, a   }# G3 {  W3 B# T9 v( K( G
  }
* }/ D$ n9 t1 l0 Q" d( N  \}
4 ^4 @* U, L% Y4 O* z$ g2 o};3 N& Y! ^) U6 R
-------------------------------------------------------------------------
- O! e* V3 x  m依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )2 m9 R# T. T; b. v3 q
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);- b+ d8 h0 ]  G' O3 e. o
紧靠其上添加:4 M0 A* K. A1 P% ~) B" e9 N
if( pWndBase == &m_wndMenu )8 l+ z' e5 |8 j2 |0 y
{0 o/ I7 r+ I# y2 k+ ^$ Y, V* g% n
  switch( nID ): W9 f# {5 G: v' e; j
  {
$ N' [& B5 t1 _/ s  case 2:
9 c! y+ |; V% N$ }% e   {5 e0 r8 |$ {% M; Z/ P
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);+ |5 W+ I9 V( a$ j: d
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 j0 w( a7 y9 `
    {& l' {. u& \; O! q4 x7 i! R
     break;) S0 S  c9 T" q- R+ p( f
    }
4 z5 u" _+ }/ |2 q6 e* Z; q9 u! Y    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)" j. c: {# H' c- `# f6 Y) s* W
    {
' l4 r+ i( ?8 B* z9 q5 _     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" h' i7 D! I8 O& R+ R& {/ }     if( !pItemElem )3 T% P% }3 O( o( d: O3 o2 m9 m, |
      continue;
* ]) E) E: l1 X$ ^     if(pItemElem->GetExtra() > 0)
3 o& _' j1 O& [& Z6 p      continue;1 v; p8 ]. y6 M
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) * p7 k# W4 p8 l( z( r
      continue;; X9 r6 P5 |3 J0 r6 j6 c0 t/ A: F
     if( g_pPlayer->IsUsing( pItemElem ) )% K) y/ k' c+ M" ]/ w: b" j
      continue;
  [5 d# s8 P0 R+ J; X) W5 K     if( pItemElem->IsUndestructable() == TRUE )2 N: O4 w# m1 `1 b
     {. H$ R: L7 B% J
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );% h; p5 f7 @2 c4 X
      continue;- |! R" h2 L$ x# V8 n: A0 C
     }
; p0 }4 B6 y1 t- y4 W4 X     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);7 W% J# z/ E0 X1 l9 [! q
    }
7 q( s8 Y+ j- g    break;0 f( V8 ~6 l+ m) M: j' r7 q
   }
, o) q6 R* L# K0 b5 M  case 1:; m, R9 v* R; r4 j, W5 z
   {5 u! M* _% q/ Z5 f
    //整理背包2 {# o2 f4 z9 @% V
    //////////////////////////////////////////////////////////////////////////
' t6 {* S# ?: U, D: l2 h  T    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
" j! e* j" ?0 C& |% c    //////////////////////////////////////////////////////////////////////////
4 r9 [* t* D' t; N# P    //////////////////////////////////////////////////////////////////////////& m9 ~. U6 R( e: V3 B
    CInventorySort* pInvSort = new CInventorySort;: i8 i9 t5 i( _8 F& |  r4 ^
    vector <sItem> vItem;
# k' I( z# V$ [, f9 i8 d' ]    vItem.resize(MAX_INVENTORY);//初始化大小
4 M, p% V4 W3 b5 M7 |1 }/ _     //////////////////////////////////////////////////////////////////////////" I$ J/ h$ z/ o+ v+ v* K: k9 r- x; q
     //填充数据
0 z# X" k( l7 Y; l4 H7 {0 T     for (int i=0;i<MAX_INVENTORY;i++)3 B# q* W& R" i) f/ F- Y+ M4 D
     {
% |' Y! _6 ^: N6 _, `2 O      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! @1 R- }, H  T/ D" y! C      if (!pItemElem)
9 s/ c" s4 Y1 \% v8 O      {. q% n  F) {# O1 o4 {' V4 c
       vItem.dwKind2 = 0xffffffff;% p( ?  ]/ p0 A. Z0 c/ O3 R' m* O* t
       vItem.dwItemId = 0xffffffff;
- H! k/ W/ [2 B4 v% F0 g  {       vItem.nIndex = i;
6 o. X7 c! F- O      }else {
! {- b  `2 G9 l" f% X1 s3 \       ItemProp* pProp = pItemElem->GetProp();
8 `9 ?: t# m- E1 V; ~# X       vItem.dwKind2 = pProp->dwItemKind2;
' A. `6 }2 q: b/ U       vItem.dwItemId = pItemElem->m_dwItemId;, F! p" J8 p$ g9 \3 k& {3 p( b
       vItem.nIndex = i;( \# Y' `- |0 j: K
      }6 P: c, u9 z" s9 g. I- K
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 K+ ?  t/ V. H, G! c" j     }
( v# K; {( i( W# ?     //////////////////////////////////////////////////////////////////////////
5 _9 X1 s' J" e  I7 D+ m     sort(vItem.begin(),vItem.end());//排序
% `' Z8 m/ }3 d     //////////////////////////////////////////////////////////////////////////5 h8 @! b* o/ u' h3 D9 x) h
     //交换
% j& p. W* W4 X" V6 @, T, ^$ w1 n1 N     for (size_t i=0;i<vItem.size();i++)1 @3 p$ L& c% D- D/ M
     {
; ]/ }  a& h6 E& [) E4 _/ V3 _      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);3 N1 d' K- D  T4 \5 Y
      pInvSort->Add(vItem.nIndex);
( n; I% i& d1 P7 q4 S: i( c1 `7 {     }- |# @# X- }! b1 E6 L2 D
     BYTE nDestPos = 0;8 @8 i. @0 M/ ]  C8 a  P& L( ^2 Q5 Z
     for (int i=0;i<MAX_INVENTORY;i++)+ \! \! b3 ?$ y# D
     {
6 ~, X1 R" }. S; z      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
6 `2 d( \9 R- K( {4 i      if (pItemElem)
; a$ E8 [' e) ?: o      {6 w  R9 `% ?; h2 s
       if (IsUsingItem(pItemElem))
4 E" G$ k, V  q/ o       {0 v  S6 U( E0 d( v) K
        //这个位置无法放
  U$ ?8 o- |. s  O1 j        nDestPos++;
3 s6 n5 v) z0 M2 F3 \4 t) o       }8 [  v% n+ F; }# ~
      }
8 j0 m1 b# s$ _5 ^. g      BYTE nSrc = pInvSort->GetItemSrc(i);! w( d/ O, J7 n% Z/ H6 `
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
# G+ f& E. y- m, M      if (pItemElem)) J+ ]( t. o  M, j
      {
2 g- A) i  N, e, z- i       if (IsUsingItem(pItemElem))+ g. {$ I: U, r
       {# K  B0 F1 p% g# Y
        //这个道具无法移动,跳过
- o! M# W) D/ ]# d        continue;
9 O! h: q4 _1 T- Z' V6 a) h2 A       }9 v. G3 @7 ^" Y0 ^' A
      }else{
4 s; \1 M9 a. {/ J+ Z! g( _( r       //空位置 不用动4 g$ T' R* Z# }! N0 c: m
       continue;' l8 g! j) _4 N
      }
5 |) U5 l# |( ?" {      //////////////////////////////////////////////////////////////////////////
& [1 ]! {" b  _6 J% p/ I! K, V9 ]      //开始移动
+ q, A, @$ e( K  k7 g      if (nSrc == nDestPos)
' D7 \9 W9 o2 g& b3 c      {$ w4 ?  f: J$ y, W/ Q' X
       //原地不动
: {' k& c! w  B1 F  h% U% f       nDestPos++;; T. Z% u. `+ p- h. v% J+ K2 [# d. s- G. k
       continue;" v/ b& i  L. @# l6 G
      }9 t* T$ `4 ?: |, e+ E5 S1 G
      pInvSort->MoveItem(i,nDestPos);
6 f: p1 r5 Z) b, \/ ?& ]* p      g_DPlay.SendMoveItem(0,nSrc,nDestPos);7 ^# V: S$ K- E5 N/ l& N
      Sleep(5);6 g0 h/ p8 z0 o3 R
      //Error("移动 - %d->%d",nSrc,nDestPos);: ~/ F0 C6 o; {3 U2 u" q& B
      nDestPos++;
* W+ W) {- ~; q7 J     }' F, W. d; E1 c- _  |- E3 |2 [' V: L
     //取第一个元素的信息  A4 H3 y9 c% A" Z/ D' j
     /*$ x/ t; x) O* ]; o$ H1 T
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
' V4 g: V. V" ^     {
9 e% o! P9 @3 c8 w: |7 n2 T3 p      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
# L' z( E) `5 ]  z7 W      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
$ l, f3 B  N8 Z/ u$ u( C3 Q. ~     }5 K& u. v# k$ g7 o
     */
1 S' l; k$ H- G    //////////////////////////////////////////////////////////////////////////% U6 o! D% B" C, ^6 h1 p$ \% p8 L) F
    break;! |2 x" B6 I- j- x. m% c+ |0 N( f
   }1 o) E7 Z" T7 @8 b
  }
, i* o  ^2 r" P& U}% O  Y( a3 R, ~% \; L0 I) v
m_wndMenu.SetVisible(FALSE);! W* U; X/ I2 d3 ]
. c  k0 B8 W# j; [
--------------------------------------------------------------------------------------------------------
8 K1 J5 d7 @& j6 P搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)  b% P, r- J- B/ U1 p
{, b7 x4 \3 O9 {# E$ Z/ l
BaseMouseCursor();
7 |- \% |1 ?+ W% ^/ x2 M( n}. w0 F9 d/ M" U
在其下添加:4 a& y6 T) n# p# c/ V
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
  v. X; @3 Y) ^# c5 R{5 x8 W% x" ]8 B6 H, i
m_wndMenu.DeleteAllMenu();9 |; L' A7 s, H1 H; |
m_wndMenu.CreateMenu(this);1 |( ?7 h- z. n7 y
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
3 W: K9 R7 S0 ?7 G1 v0 n5 N! \8 p  Y# F; C0 h( P( E
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ X" \1 s6 O) p, Y
{
5 {% ]8 o2 N3 A4 x8 o4 p  //P以上级别才可以删除所有道具
7 u: w& K% J3 C3 {: P; h5 u' J; a  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");9 V5 |+ @3 F/ W+ w8 q9 _1 r/ {$ |. m2 [
}
, {& i8 k" P* U0 A9 Z" em_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );5 A5 K' \! {: W7 s; f, n
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
9 X; r2 K5 r4 jm_wndMenu.SetFocus();" c) y, S2 Q& \6 V4 x
}% N& \4 }  c2 q' n0 }. y
------------------------------------------------------------------------------------------------------------
$ q# g% s( g' S5 B*************************8 ?) }' s8 F7 Y0 p0 f. @
WndField.h文件
9 c, N) q' [1 Z$ o************************** @- a  Z" s6 \0 R# ?
搜索:BOOL m_bReport;0 \" ~2 Z2 Q' M& P: L
其后添加:& U6 u* b0 D; G: }+ r& M6 X0 Y
CWndMenu m_wndMenu;2 [. i7 b$ D' T3 L
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);0 A* A5 e, q; p+ S
其后添加:% G# Y1 j0 v' D8 H4 j6 l# l" Z
virtual void OnRButtonUp(UINT nFlags, CPoint point);
0 n" h% |& R( a9 |! n
: C  e# X, L. c4 v7 U
3 D( x6 _2 b% C- J; r2 e0 F$ S

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-22 06:44 , Processed in 0.065147 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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