飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件% B' q- F1 V4 V0 {& j; I" h
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 F, Q  v9 s: M+ P' O4 b4 K, V" z# z3 g; I# Z# R2 q
struct sItem
5 k" x& \1 d, [( }6 f8 [+ Q{& p6 {! u3 o6 j1 Z% q2 W) Y
DWORD dwId;
: f4 h! b: R7 t+ S3 ^; U: EDWORD dwKind2;0 C: @+ Y2 P" a
DWORD dwItemId;
. V- G. m3 |2 J) j. ABYTE nIndex;8 `! D) {4 _! b1 s
sItem(){  p+ ]% d$ k; Z2 |
  dwId = dwKind2 = dwItemId = nIndex = 0;8 j7 o: P3 o$ ~
}
' W% O% R, ^" M* d# o+ A- r* W1 A! \( ybool operator < (const sItem p2)% T) Y* [, X5 F4 Z
{
) S' M7 w+ ~' D2 e+ j7 _9 O- E  if (dwKind2 == p2.dwKind2)
3 B: Y  G& N) y8 v* `' [  {, j  N7 d- V9 X' J. h
   return dwItemId < p2.dwItemId;
+ O, P" R# c% k4 ]4 f0 x+ Q, y0 {* m  }else{6 E+ G( ?+ R6 p$ O' W
   return dwKind2 < p2.dwKind2;
: a0 P: O, }5 J: X& t  }0 I0 m8 [  q; X& a* A
}
* T1 |) I( s+ s8 S7 ]};3 R! j( @$ d, @
class CInventorySort
3 v: L) X: x+ S  W6 C  f{. T7 Y9 o8 h" @6 v$ S
public:: F3 _" n3 p* z
CInventorySort()" X& ^) G- c9 `- D+ H
{' d; {# |$ k5 m- X9 j6 Z6 `
  m_dwPos = 0;
7 j* ^. Q& i9 u. q+ a$ k$ L3 m}
0 {$ l1 ?8 {* q+ |7 {$ S~CInventorySort(){}
  M3 V, L$ T' g5 [' Lprivate:; a/ Y( v% s. ]) g2 N$ A
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息) K& y5 p! J% N
DWORD m_dwPos;
# H! W3 R+ o' J5 a0 l; dpublic:
" e% u4 y" I& |& _) yvoid Add(BYTE nIndex)
- n1 B+ \/ P! `7 {, A8 r- [{, `) o  {* F2 q+ V# o& T& t
  if (m_dwPos >= MAX_INVENTORY)
7 i4 Z3 e! u. `( D) L0 C+ {  {, e7 {+ u  `7 e# |" |
   return;4 l9 U% w/ I7 x2 W" @
  }
6 c* y9 }$ u: K; _, m& u5 M% O  m_Item[m_dwPos].nIndex = nIndex;2 F8 b9 ~5 m: Q: ~+ E
  m_Item[m_dwPos].dwId = m_dwPos;8 {2 K9 Y1 v5 v2 [  z8 ~  M+ f
  m_dwPos++;
4 H* v* T7 a& m6 b( }* D}
- ^7 x' O! K1 aBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列$ i" a: f! p) ?
{% {& \. C" e$ o( a5 v1 J! g
  for (int i=0;i<MAX_INVENTORY;i++)
5 W- v4 @; t. N( d' T" w  {
& g, q  ]: o! ]- P" S( ~" v   if (m_Item.dwId == dwId), r3 [. o* K6 e% ]
   {* ^/ {; C8 ?% }
    return m_Item.nIndex;
6 S& N5 Y5 v4 R7 G( T0 P2 o   }" S; X0 |8 U$ @" G- m
  }: }7 M! W. J8 O- L
  return 255;. N% m+ a) Y# M
}! b5 h& h0 b; F) i
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
% b  @5 @- Y0 M& ]0 X{
+ ^. Q( |, Y( Z4 m; F) E. z2 d  BYTE nTmp = 0;
# ^. m3 c( g1 M9 m; J+ D/ P  bool bDest = false,bSrc = false;
* m/ W* ?+ j9 T( y5 `7 u  for (int i=0;i<MAX_INVENTORY;i++); B1 ?% s$ g7 v* T) p$ b7 s7 r
  {
/ ~& V- I1 o" {   if (dwSrcId == m_Item.dwId)/ t+ i5 |- W! ~9 T* k
   {  k/ \5 `/ Q) d" q3 Q
    //id相等 则 改变对应的dest和src
$ l9 [& G# Q. _! v/ p    nTmp = m_Item.nIndex;1 U, w* V8 G% q5 |; W+ v4 O, q& V" U! \
    m_Item.nIndex = dest;
" [6 Y! g3 c1 \1 }) G   }) |) r" H& V$ a9 J6 J7 R0 L( J
  }4 e! k+ w1 [% V9 E! U, Q1 t
  //临时数据保存完毕,交换开始
3 ^9 S1 r; p" a0 T  for (int i=0;i<MAX_INVENTORY;i++)2 ~* x# R& w) S0 ^* {. B, Y
  {0 z/ ^' {3 g4 H1 S: s. ^" c. z. n0 K
   if (dest == m_Item.nIndex)1 |# t$ a+ s" K' i  ~) R
   {
  {1 y$ p# y' `( ?; E    //id相等 则 改变对应的dest和src7 W! Z9 I$ w4 D* D' B: @% M9 r
    m_Item.nIndex = nTmp;" l3 d! k3 \' r5 z& L  G
   }2 j$ Z4 N9 o6 W+ m
  }- j: P5 W9 k& Y) N
}% a9 h- h4 w) s" b$ K+ K
};
) R' A0 p: F0 @; C' D1 u3 t-------------------------------------------------------------------------5 M$ Q3 g0 f1 ~' O
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 W# ]: h0 C/ J  u搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);0 Z+ l  f1 R" W& ^
紧靠其上添加:! F$ R( `5 p& L: w0 \7 j) R/ {
if( pWndBase == &m_wndMenu )
' V% k: G5 C& j1 H{
6 F6 ]" r7 M0 u- E! ?# i0 h  switch( nID )4 i2 B% h' D1 p6 ]4 E
  {$ \: ~; L2 g+ E# F& x" p4 l7 W$ k
  case 2:
5 d8 f2 v2 [+ L; @4 Q+ D3 A2 n   {
3 z9 B9 K. \) b3 t    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);; o8 o1 B- }# S: [8 N& S: M
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: L* P) d( t- M5 v3 P* f/ ]    {" W' z$ B9 `' E: E/ h6 t
     break;" c8 J8 a5 T0 T: F, V' W
    }
( ~! R" _: Z6 q. ?5 i$ x    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)2 V% W8 |% e, H! C! j
    {
: {1 L/ Q1 w9 ~     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 x. Y- ?8 U6 O" w8 [) @
     if( !pItemElem )
+ p# G( Y8 z9 E  i; d      continue;3 G' g& v# Y8 o( _1 [! X
     if(pItemElem->GetExtra() > 0)/ Q6 S) y1 Y7 I7 s  ?
      continue;$ V+ [& X7 c) J: c. a
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
1 |8 `: f; i9 S8 _      continue;
# u/ @  o" r! |     if( g_pPlayer->IsUsing( pItemElem ) )% \5 x. N6 t/ e, c* b
      continue;" @. f. `; f' v7 a
     if( pItemElem->IsUndestructable() == TRUE )4 ]+ B* m) o( ?$ L9 H* T
     {
* L% j7 P7 Z& `      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
/ v' M% P  j- x0 E: q      continue;
2 B1 _( V4 z+ |7 E# ^! b7 T     }
! V) V+ b- [" A2 B6 O     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);. `1 C& n+ [. ~+ n3 c& r
    }1 P. n: J& Q1 J5 |
    break;
; Q2 i5 N7 o# W2 G( X0 \   }. R% S! P# n) \, z: H
  case 1:
" j0 u- M7 _% V) O, R" M   {% i& a- n$ v/ f
    //整理背包
; e: c/ t) e1 M0 a& t; b8 T    //////////////////////////////////////////////////////////////////////////
3 F$ N9 w- ?7 c    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );3 ?, n" \* Z. A9 Y+ `1 w1 d  ?$ f
    //////////////////////////////////////////////////////////////////////////$ O8 \2 K' e  S% p$ U# X
    //////////////////////////////////////////////////////////////////////////
1 e6 Y1 B' P/ q" e. k    CInventorySort* pInvSort = new CInventorySort;: r, W9 E" c, \2 H
    vector <sItem> vItem;
( i4 E- b6 ^' G/ d6 ^    vItem.resize(MAX_INVENTORY);//初始化大小
0 |5 h$ [& f+ U# i' A     //////////////////////////////////////////////////////////////////////////
6 u9 G. J& P0 k: \4 X+ X) {1 |     //填充数据$ p  {" t5 E5 s5 R2 |8 n. O
     for (int i=0;i<MAX_INVENTORY;i++)9 B/ T8 l' M9 L
     {
( L7 S% J3 m& G" X      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 I2 ?' R' q0 ~# H" V      if (!pItemElem)
9 O! [8 Q% A) h6 }* d# y1 z8 P8 a      {
0 H! h1 }  g1 a: i       vItem.dwKind2 = 0xffffffff;$ f3 }  q6 E2 \$ {# j# G( D% A& S0 c
       vItem.dwItemId = 0xffffffff;" |. \* i$ q+ c0 g# s
       vItem.nIndex = i;
4 J  a- m/ I( F5 ^  n' J      }else {* o/ q3 ?& e4 O/ t3 O% k% H$ S
       ItemProp* pProp = pItemElem->GetProp();
% G$ e$ H" g2 S8 A       vItem.dwKind2 = pProp->dwItemKind2;8 o3 o& e+ v) z$ ~0 G# Y
       vItem.dwItemId = pItemElem->m_dwItemId;/ y) m+ ?' |. C8 Z' i
       vItem.nIndex = i;$ }0 q1 W0 F0 U. a4 o! @7 B
      }5 F# N& y  }: W8 J' Z
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( Y" c$ i, ^9 Z
     }
& c  p- R3 w1 o' A     //////////////////////////////////////////////////////////////////////////* L  q7 a2 U; r/ A
     sort(vItem.begin(),vItem.end());//排序
; K% u) a5 e% h4 \     //////////////////////////////////////////////////////////////////////////, X/ M- R9 R! c! v& ^" N
     //交换
' ^( ]3 C$ k( ~- I     for (size_t i=0;i<vItem.size();i++)% X+ ]* X( t( M" E  t$ `$ D! X. s
     {# t+ e( c  t4 z5 e& F; l/ N
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);7 O) C5 d7 v" g3 T  A! x$ P6 q% N4 k
      pInvSort->Add(vItem.nIndex);0 b1 n" I$ a# H$ o# s
     }
& f% g2 l- L: U$ I& f1 J3 q3 ]4 d     BYTE nDestPos = 0;" M$ X/ k3 N$ Q" T8 A+ y! \. `
     for (int i=0;i<MAX_INVENTORY;i++)
2 u/ e4 n8 @8 f9 q* v# A     {
0 o( @; q6 A& M3 d6 i+ E. A- e      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);, C1 z3 P- l* @: D1 |& n
      if (pItemElem)0 S3 s3 J2 D; c  W
      {1 d3 v) v) w. y
       if (IsUsingItem(pItemElem))3 p' Q5 |/ G9 z- |( H5 P" @9 z
       {: n' O. c: ]8 b. X! ^. ~9 I2 ^
        //这个位置无法放" B4 T* ?. o1 N  J4 k
        nDestPos++;
! E9 u3 y- B) Q8 E( @2 j; O" u4 u0 G0 I       }# ?* L7 Y% l$ e
      }7 V. E$ h  c. k/ s( g
      BYTE nSrc = pInvSort->GetItemSrc(i);
( G3 |$ ?! b9 ]# ]! F9 k      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
3 ^( y0 g6 \  g- p# E      if (pItemElem)
( D+ v/ N; }. \0 Q      {" t1 r9 g9 V* _+ y6 {$ h) R
       if (IsUsingItem(pItemElem))+ g( w: M9 Q1 C4 a
       {
" C. g% H( y2 K/ \/ y        //这个道具无法移动,跳过
5 @- n* P7 s* W( b        continue;
2 f. {! O5 W, M       }+ B6 N# E  y7 v5 l6 }/ Z. Q" V
      }else{9 I8 s/ \9 I$ A
       //空位置 不用动
* `8 B  e8 o& p) d- ^       continue;6 L8 q! x6 J3 k! |3 ~
      }
; N) G) t; q8 X* ?- w6 l      //////////////////////////////////////////////////////////////////////////
& f/ o% o) ^5 h8 X0 R# A& d; z) P      //开始移动
, H; ]) E8 V  Z! n2 x      if (nSrc == nDestPos)( d# O1 ~0 ^0 W, X% S* {0 ]
      {+ }/ N. z  @* P$ B8 c
       //原地不动
+ R1 Q( v, ?) W$ w" c2 ~9 Z       nDestPos++;
# j; R0 J2 i4 V; @) ~7 p       continue;
- O( J0 P' g. b% e- g      }
+ O; |6 h0 C7 y# `$ d! ^      pInvSort->MoveItem(i,nDestPos);9 Q) G- H" F6 l2 Q; B5 G
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);4 e/ s+ k( C8 p, v2 r
      Sleep(5);* R$ }& J- I* H* e! ?
      //Error("移动 - %d->%d",nSrc,nDestPos);
. f8 J8 a: u: E      nDestPos++;
) M4 ]+ ]- V3 I     }( Q, k& g2 k( R. m0 X6 B( W( b: O
     //取第一个元素的信息3 K: ^/ K) }0 O) i# d; V/ P8 F
     /*
2 o0 X% g" Z+ V0 H7 x8 x     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)- x% ]  H2 V* {) i5 F" d0 x+ h
     {4 @3 d$ R, o: S* l
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
) I# y  |& X' V. y' J! f5 K1 {      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
3 g" U+ D0 ]* q. `4 R     }& _5 I5 |! B9 j- X" k. p: T
     */
  ^, u- }, d$ a7 g5 X4 N* c/ E    //////////////////////////////////////////////////////////////////////////& ]' r2 e  B: m8 ]
    break;
& g% ]6 J8 z+ \" h; c" a   }
2 Q, _. N) U5 x1 I  } ; J% T- n$ ?: r8 [
}% E0 L- j; ?2 w* w0 `0 m' r9 e. s3 }
m_wndMenu.SetVisible(FALSE);3 e. l7 s2 s9 |% P
# u) @( ~. u5 C3 }+ q, M0 M4 f1 g
--------------------------------------------------------------------------------------------------------6 {! _* o3 Z+ j$ T4 y3 Z
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)  q, n5 N- x3 H/ q' g% c# z
{8 g1 @8 E9 t7 G- c
BaseMouseCursor();
% a1 g2 d) v1 I% _) l6 K}
$ v2 I: p% X3 ~. U  [+ @在其下添加:
" J' Q6 M4 G; i* j! r% c( W0 zvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
8 ~5 j" Z9 _4 K7 V{  w" N' n" i* S; x
m_wndMenu.DeleteAllMenu();' W) K* U) b, H( `  u8 o
m_wndMenu.CreateMenu(this);
  N6 o' q3 |% h5 n' |" L) Em_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
& s$ P2 o: P+ L* M! ?' E" b7 ~6 h3 a5 N: E; u% P
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))4 P( T6 m- a- e, H# r
{/ y+ B+ E6 q% \/ b5 m
  //P以上级别才可以删除所有道具% W/ g7 u% e; _
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");* w) q, f6 N5 u# `+ |3 m: U# v9 i
}0 B3 g1 Q' e  {
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );1 l# J) T+ k& W- F" \
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );& W4 n* A7 ?; F3 x  E
m_wndMenu.SetFocus();
& |  V9 \+ s* D}
% o7 N9 ~. C& e8 M------------------------------------------------------------------------------------------------------------
' Q( g. t( p  t/ k, i; _( _*************************
* T1 }8 K5 w; I6 @/ P7 \. |. NWndField.h文件# }  K5 P& x0 n. H7 e% U
*************************
$ l& _( y3 T8 h7 u搜索:BOOL m_bReport;
& N) u, W5 h4 ]+ H* K7 t/ {( I3 |  O( M其后添加:4 y! _+ G! ?: q4 f4 T9 D
CWndMenu m_wndMenu;) h, D" B/ x4 p  _; W/ K
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
5 |6 _( a  E, _+ x! I% f其后添加:% N$ p! b$ |* _0 ]- T
virtual void OnRButtonUp(UINT nFlags, CPoint point);
4 h. s& R9 ]$ p/ o9 j1 I& h4 d6 B& X# D! G9 y
% j! N8 ?- M/ C/ A& i' O

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-2 14:01 , Processed in 0.067294 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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