飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
. l4 V. _1 y: L0 f+ O搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
5 x5 t" I8 O; n' w) x4 H- G6 T! S  T0 W* R7 U, o  s. W
struct sItem
7 ~4 I$ n# ]" T( _{3 M) y: p! `5 R& F( D7 }' E. z
DWORD dwId;- `8 C; l$ i) g  o' Q
DWORD dwKind2;( `: P9 |) {& x
DWORD dwItemId;( X; d6 [9 H" [6 B% ]+ S3 q
BYTE nIndex;
+ \, Y  Z& J- q$ M5 h1 c. _sItem(){
. _& a+ C1 o- P1 W2 a3 w  dwId = dwKind2 = dwItemId = nIndex = 0;, d8 S- ?3 r* v0 s& d- N: k# l6 C
}
; Y0 n& ]/ z: s! f/ N  Ebool operator < (const sItem p2)
7 t2 K. N* h. c/ g8 u- ~- u' a! x* S{
& y" t) u* B: m0 X  if (dwKind2 == p2.dwKind2)4 M7 H- g. C1 I% Z, v. L
  {7 W6 E$ ]: }+ z
   return dwItemId < p2.dwItemId;1 Q* g6 b4 @/ m% T  |  l; K
  }else{
' c; W5 @/ m/ E8 P0 E: n' T( U9 l   return dwKind2 < p2.dwKind2;
1 H9 `& d% l2 z  }' T4 T) u0 v+ ?( p/ v
}
  i% t! f7 ^% x0 g};1 s( z9 e% o4 L3 H2 o
class CInventorySort% f  l$ w8 t; Y
{# J+ t9 v. U5 u' B+ E& U0 S
public:
' t! y* S5 x' W$ J2 u& F: \CInventorySort()8 w- g# d) }5 K$ e( A) L1 \; y) l( @6 U
{
. b# K. U# y+ a0 A- v* x# q  m_dwPos = 0;
( k- r8 P- ]5 e& y" Z; L8 o  }}
9 \$ {5 w2 `- v. O6 o  i~CInventorySort(){}) `& o$ J4 L7 y$ L; ^5 z
private:
+ D, f) H8 |5 ~1 \# y6 IsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
/ X0 Y; B+ c2 G  |5 D' G6 kDWORD m_dwPos;
5 |! A5 \8 [; r  l9 {public:/ x+ \* m+ K* U( }/ S& U1 Z& q
void Add(BYTE nIndex)
' v, j% u4 [( i- |1 L0 p{
/ W( e) x6 t  k2 {  if (m_dwPos >= MAX_INVENTORY), E! _8 m9 a: F( G9 I9 C
  {
/ ]9 y6 m4 d% U7 g/ I   return;  T* D" h- f% j9 G! N
  }8 G- c, I% z0 f/ O- ?- f
  m_Item[m_dwPos].nIndex = nIndex;$ w0 {# C: L' r  K' \# k8 g
  m_Item[m_dwPos].dwId = m_dwPos;
5 p: G9 \" A0 A6 C$ d  m_dwPos++;* T) b9 k/ Z) j9 N
}0 ^( \) v( m5 z4 w
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列& }1 x7 d' k1 F0 J" c
{
/ Z. {! L  z, }# }  for (int i=0;i<MAX_INVENTORY;i++)
7 f, p  e2 D* E6 q' D+ l  {1 `( N# ?8 X+ Q* F' d& ^# w8 Q% y
   if (m_Item.dwId == dwId)& A" ~5 y# U/ |& k' Y* L7 Q
   {
$ K4 c: ?' I/ D2 Z, \" M    return m_Item.nIndex;9 q+ F1 p$ O# v; n- D" O8 p) f
   }& U7 N! \: e8 B; K9 I2 }0 y8 Q2 z
  }
* n. j: Y! i6 v( f3 J  return 255;
% F- H; o9 t' d" _/ B) M: F5 y6 ~}
# k* A" m* U% ], ~- tvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置2 R( l4 p) w& G4 B" A8 f/ \
{
8 `6 T' B- |) ?7 B* S7 T  BYTE nTmp = 0;
0 t% A' {. d! Z2 Q: g7 A+ n- j0 O  bool bDest = false,bSrc = false;
. l. K8 t( J- ]8 H# I- c0 L  for (int i=0;i<MAX_INVENTORY;i++)- K: q* p2 F4 Q' \
  {' n0 n! {- h9 F4 F+ B
   if (dwSrcId == m_Item.dwId)
: A$ p/ }+ m( Q1 @4 W( d5 }0 X   {$ H' k4 M& k; N1 `, i( T
    //id相等 则 改变对应的dest和src0 X) ]" M' i5 Q7 R+ o
    nTmp = m_Item.nIndex;
. [# r2 W$ r3 j' n# S    m_Item.nIndex = dest;+ y4 K8 ?9 I' `
   }
8 f( R$ g1 X; u  }
+ r0 Y* M& s: A0 c0 k6 m: Z  //临时数据保存完毕,交换开始
+ f6 @$ b$ d. O/ e  @* @  for (int i=0;i<MAX_INVENTORY;i++)
# i' k# i& P" S: A6 g: n  {
: a* S' J) ^" `% P7 t/ P   if (dest == m_Item.nIndex)3 s6 N$ b' h! f# D5 V5 H
   {& R, G% @- u3 k: w5 w- A0 F
    //id相等 则 改变对应的dest和src
. {9 n! O, N# l/ h    m_Item.nIndex = nTmp;
, d! x" E% r! j) I1 m) G8 P   }
' C. G7 y  @# N  a  }
" H) K, Q1 O4 g5 O3 T}! _( P: @/ n3 g0 R; `
};
( g* D0 r, C" n( T7 W+ d* p- Y-------------------------------------------------------------------------
- l, x0 `4 v0 |6 d2 s* D依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )) l2 U$ o& x6 q# z% S) B! j1 S$ u
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
5 O- P" j' ]' M% t紧靠其上添加:! B* w# z) m; H9 Y- L6 q. r0 k. d
if( pWndBase == &m_wndMenu )7 }& c0 |5 Z# }! c- l. h
{
* d# O6 |! B2 z3 l& ?5 ~+ A- b4 D  switch( nID )
, \% }! l. e0 K  {
7 s; Y' ]* Q- n. C' B  case 2:
6 ^& D( t/ U) v   {6 h! `) ^$ [) Q5 X
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);+ ~/ E! a, B: `8 b
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
% L0 m) {# k% Z+ z    {  q9 }( n. Z- r" |
     break;: M  j* }' m$ |& q2 O3 ^
    }
7 ]9 }  S3 L$ h2 U- E    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++). s( a: ]7 {; y/ w
    {2 M8 Q! B, P) T3 z6 ?. V$ l2 D! n
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);( Z  z* `/ S5 t. w- q
     if( !pItemElem )
: a& p2 U4 M6 R$ G      continue;
2 ]7 F9 L# c( Y* @1 B     if(pItemElem->GetExtra() > 0)
( R4 V% L. I3 ~  o+ D6 p      continue;7 m$ @9 I' g1 N7 w4 w
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
, m  n6 [" Q8 X  b0 H      continue;7 t% D& V$ w. |+ j+ n" b0 k
     if( g_pPlayer->IsUsing( pItemElem ) )& ^7 B: A0 Q0 B% A8 L
      continue;0 [4 W3 F2 ?6 O' x4 u
     if( pItemElem->IsUndestructable() == TRUE )
9 M7 \$ Y7 h/ s: J     {
+ {) i* y1 j% p" H& X      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
# V7 A) V, N1 z+ F      continue;$ U. I7 A: M. Q3 e/ y4 P
     }! N! l! H. _8 [5 A0 ?; W; n( ?
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
# w, B9 t5 P* m' s( f% {    }
% {8 e( `2 K# W; I3 {( X    break;/ h) l6 C5 K7 {2 T7 k, T
   }  w" R% d+ C/ h6 v+ z
  case 1:
0 k% s# M$ h0 ^+ W' F# V   {
" C  v$ N/ K& C& K9 p1 z    //整理背包; s% c. H7 m( A
    //////////////////////////////////////////////////////////////////////////
: @# j, `  t3 {6 ~    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
" J6 o3 k/ A: c7 G1 c7 o4 g# @. T    //////////////////////////////////////////////////////////////////////////
/ Y; C8 e" c/ P8 n    //////////////////////////////////////////////////////////////////////////" @) d! |. E4 h7 K$ \- H: P
    CInventorySort* pInvSort = new CInventorySort;  K5 I. m! k0 o
    vector <sItem> vItem;! }, G9 l* z8 x$ U. q! ]7 k
    vItem.resize(MAX_INVENTORY);//初始化大小/ _) G6 }  o, m, |+ C6 K+ o( j
     /////////////////////////////////////////////////////////////////////////// [& c4 B6 {7 H% ^  S8 N9 Z; w0 v1 s
     //填充数据6 z) N1 u7 P( \
     for (int i=0;i<MAX_INVENTORY;i++)
* w6 Q. X8 u. R& W; i     {: u4 r2 j" m( p( ~1 O; J
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% G0 M. R+ H1 g0 w6 t- [      if (!pItemElem)
& Y. `1 g* Q- @" A      {0 f7 L9 _) n( H& ?9 _, X8 y' l  q1 b# P
       vItem.dwKind2 = 0xffffffff;
& Q" ^% H- l' X       vItem.dwItemId = 0xffffffff;* Y  z) h4 D0 s
       vItem.nIndex = i;
& t, ^8 H: d: ^1 O4 ?- Z      }else {% a. n% `$ P9 B( N+ X( B! l* q8 O
       ItemProp* pProp = pItemElem->GetProp();
% Z1 {3 d& R4 Z1 i0 x; y       vItem.dwKind2 = pProp->dwItemKind2;! q" C, C/ e7 E/ I( w# H0 K( g1 k
       vItem.dwItemId = pItemElem->m_dwItemId;0 s+ ~! M6 f" J# y9 J6 x
       vItem.nIndex = i;0 f# ~  T$ P+ K% o$ @7 ^
      }& }& c( V3 r% m3 r
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. G* K% u  s' E$ \
     }% E+ O5 o: f: v& g+ d( g
     //////////////////////////////////////////////////////////////////////////
9 c; O; ?/ l) Y" F3 [     sort(vItem.begin(),vItem.end());//排序
+ t" V  d! u" X* T- V     //////////////////////////////////////////////////////////////////////////# Y: z1 p( V" W( W/ T- r
     //交换
8 t/ g; g# w& y# @+ j; m3 q% r8 `9 S     for (size_t i=0;i<vItem.size();i++)) G: J4 c+ D2 u6 E% A
     {
9 L- }6 e5 V* p- c- |5 y      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 X2 {6 J5 a$ U; K6 w
      pInvSort->Add(vItem.nIndex);& n5 q9 W7 K* {9 Q2 x, \4 U0 B
     }7 ]& n# c4 |4 l  f7 [; F( d
     BYTE nDestPos = 0;0 M% e- v& J/ f# D8 J) ^
     for (int i=0;i<MAX_INVENTORY;i++)
/ }5 h  Z3 ^% x     {
1 L1 H" S, D& A0 A9 k      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);) [' h4 r( C1 D" U3 V
      if (pItemElem)
. B8 c* ]( J5 P2 M, Q! n      {9 T9 \& a2 w2 y" N5 [
       if (IsUsingItem(pItemElem))
' \5 m2 O. Y) {7 s& R4 U1 T0 W& q       {
$ z# H3 Y6 S9 L3 @        //这个位置无法放8 D; w: i. O6 d$ @  }
        nDestPos++;. s4 i  g  V* q! [
       }1 w6 S: a' n  g) t) d
      }6 Y# l3 ?8 c0 G1 `
      BYTE nSrc = pInvSort->GetItemSrc(i);
$ a9 U- H/ H. Y2 y, [      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);, I3 r4 _, i1 o6 R# j: c6 Q
      if (pItemElem)
( e' X% o# d/ \: K      {7 A/ ]% g6 y" ~# J6 v
       if (IsUsingItem(pItemElem))
; G$ ]& Y, D& u: I8 {: p! V! r       {
4 k9 Z1 C; ]" p0 @1 E        //这个道具无法移动,跳过
/ `$ k5 H  ^# O" O! a9 J& {        continue;+ P, }4 z1 z, H4 u
       }5 }/ {5 l" ~. u$ V( t+ N
      }else{
, E4 i; M# _, {% L# ]       //空位置 不用动/ c5 z  \% n. a0 D, z$ b
       continue;8 \7 R, Z6 i: R& H# w7 K" W- c
      }( p+ a) I& j: f, I: t4 w
      //////////////////////////////////////////////////////////////////////////# d* G5 g. o- ]) \6 w
      //开始移动+ v! s" x4 a7 C* a, \. d) Y
      if (nSrc == nDestPos)
! w6 @, y% O0 H- `$ a  c3 m2 P7 G. h      {
- M1 I$ }% H1 J3 |: H% K       //原地不动
. n- r  S( `, X6 y       nDestPos++;; `" Q/ w# L- c4 U
       continue;
$ [, B4 I: S/ `( Z' d: t      }  s2 g0 R! l- I
      pInvSort->MoveItem(i,nDestPos);
1 ^5 a1 y5 w$ C9 b5 ~      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
4 N" f2 A4 q( J; [      Sleep(5);- T+ i3 J  r5 N+ L
      //Error("移动 - %d->%d",nSrc,nDestPos);6 N1 r0 K# g  c$ D  i1 ]
      nDestPos++;* j) L# d# t" T$ Q% h) S/ e
     }1 `4 ~- B3 t; h
     //取第一个元素的信息. i9 J& L# Y$ o6 ~- v
     /*: Y1 D. [9 O; }$ F1 @+ A
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)+ s, H( I- \7 b) G
     {3 C5 A5 w* h% K0 i: F: R
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);6 W+ g+ ^5 C1 R
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
7 r6 g  N' i% v     }
4 c8 \8 a; I6 C, g5 s3 a3 U- A     */; z! m7 \3 X6 b
    //////////////////////////////////////////////////////////////////////////: \8 {; h5 \: {; @! V& G& m
    break;: E1 z( p5 h) W  \
   }! O' ]2 K+ j) U7 I2 {
  }
  z" e3 u6 O* ^4 ]4 O- M}* [/ Z* e2 [+ w6 A' ~
m_wndMenu.SetVisible(FALSE);3 e  T5 P: U5 O4 ~+ g0 c# G/ @
: O) v4 G8 _% [/ C1 b2 b' z9 e# k
--------------------------------------------------------------------------------------------------------
) b" u9 a7 I, n& M! H6 g$ }搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
2 m1 F  n- W  Q{
4 ]0 M5 m& J+ m5 j  }- K$ {  i  k) mBaseMouseCursor();- W& K4 W4 G6 r9 `
}
+ f/ A; \9 C  B6 _! ~在其下添加:
! e2 T6 g. T( q) p1 O) R4 ~1 Avoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
& K- O2 v9 P& e& m8 g  F( r4 O5 t+ B. f{
7 F, {' U; e4 N4 l9 gm_wndMenu.DeleteAllMenu();
1 j" g3 p, X; M6 [! C: wm_wndMenu.CreateMenu(this);
# m& y3 o$ l7 c. p2 hm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");, C9 X; |% Y, e0 {# ]

4 u( S3 z# n! o1 P) a- M% hif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))" a  i* r0 [5 }
{
0 i% f4 c4 E" Q  //P以上级别才可以删除所有道具: v) E# ~' X  E& j
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");! I" q: }- f) g5 z
}
. s3 n( ~4 L8 U9 [$ rm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );2 [( ^% l( @3 Q2 o# G1 f
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );/ x2 X6 @4 F. S( K/ l7 R
m_wndMenu.SetFocus();3 f9 }  D6 W! x1 J/ u0 L$ z
}
( n1 \" x4 t" `+ m------------------------------------------------------------------------------------------------------------8 E4 @, I, ?9 V9 {
*************************
3 }4 C5 x, `' z' @3 B, z2 nWndField.h文件" f# g5 x7 g; L; E
*************************
: J( e+ [& Q9 L; i) a搜索:BOOL m_bReport;& `. q' J# ^- N! s' l4 F
其后添加:
. w2 _" Q6 p: O  aCWndMenu m_wndMenu;
5 u* D+ f! K# F& V, _7 u搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
1 F& O3 p& r8 B$ G' n其后添加:9 Q) H+ c1 Y- Y7 L. U* M
virtual void OnRButtonUp(UINT nFlags, CPoint point);
4 x& V0 U( V0 ]9 O* e. j& U& q/ D( K% W
* D4 W) }. O- v% z* t( `8 Z

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-9 18:31 , Processed in 0.063595 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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