飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
0 w  _8 X2 j+ Y# {搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ [. _; }+ Q" ~. g( o) G1 C: t; w( G7 P
struct sItem( s4 o5 v& A" W" t2 d3 U! b" D; D  y
{
+ i) T* c, Y7 ?' C( fDWORD dwId;8 I# b2 F1 z- `1 u/ Y; m' H
DWORD dwKind2;
7 _+ k% o3 {6 W) R$ |DWORD dwItemId;
6 R1 a! T2 Z7 @# \BYTE nIndex;
" H! l" S& t/ h* h% qsItem(){
/ J$ @/ S; `6 f1 N7 I* ?  dwId = dwKind2 = dwItemId = nIndex = 0;
. }4 y# B" Y) @& A7 O4 h}
' L& k3 q2 {% E2 z* H5 w0 {4 J  Ebool operator < (const sItem p2)/ ~4 W, }' L. E; I# T2 r
{6 z% V# P6 Q4 g( c( H
  if (dwKind2 == p2.dwKind2), k! G: l  ?% d5 U" f6 b' q3 m* g
  {  f# X8 I. K5 o' k) i' e* i9 _( W) @
   return dwItemId < p2.dwItemId;0 Y6 ?0 X: q  p( l  G# f8 R; D
  }else{" Y3 I- S* O! _, K* [8 g; J
   return dwKind2 < p2.dwKind2;, N: F  H" E8 u9 [; \
  }
( `& ~8 `* {6 h6 s" D  E) i}
. K$ ]" `* M" l5 G, C};! G) v0 x+ m, f4 I6 Y# ]
class CInventorySort
$ h" w+ A+ A& t{9 V7 z9 ?7 l) l% D  C8 u3 S3 y
public:0 r9 x9 ]* m- q: t  j& m# \
CInventorySort()) w, Q! |  M% M- u
{
7 S: E! P0 b) g2 P, v  m_dwPos = 0;
% J) s7 f6 Y! [8 `* y}2 l- ^' M/ v) x# e6 j, q2 z& F% @$ \( R
~CInventorySort(){}$ N/ U- W+ _+ a7 f" K
private:
) n4 I* F# c) N. l; m9 b* ]+ TsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息) w. Z6 k& o# {. x0 z% m
DWORD m_dwPos;
3 V. y+ r; i8 p4 f. ipublic:
/ D5 V& \  j5 C! ]# \void Add(BYTE nIndex)  w& j$ v1 U0 _% o8 T  r
{8 F$ b4 x  ]0 R' v5 k# k0 x
  if (m_dwPos >= MAX_INVENTORY)' ~# p: D( `) Q4 z
  {
( T! F* j: ~2 V/ i3 k; p   return;# Y6 V6 b1 T4 [! H4 S" T& {7 F5 V
  }
) x- m8 p' Z% K% \; A  C& J  b  m_Item[m_dwPos].nIndex = nIndex;2 N5 M4 W( G1 G/ {7 b9 M- Q0 g' z
  m_Item[m_dwPos].dwId = m_dwPos;* K6 H) A9 Z, T9 G8 o* p
  m_dwPos++;
7 g$ O( J7 _, ?. d}: ^; Q: c& @6 F! R5 X
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
; @/ V! H5 h* T8 r{
! v% C- ]) Y; ?4 g$ x% p  for (int i=0;i<MAX_INVENTORY;i++)
% j; \& L3 g1 t& c  {+ E/ J0 _, S9 l% V! ]& ?
   if (m_Item.dwId == dwId)0 x3 J4 z% [! ~# Q1 A- C
   {# A% Z4 R& L" ~2 ~, ~
    return m_Item.nIndex;% d0 x2 r3 n3 ^$ ]' b
   }0 X7 H9 s  D. S4 `. |
  }
- P  E: |( j/ e& R3 V1 F& r  return 255;6 G: t5 R, G% X; ^6 R
}
% I8 v( @9 `4 L$ ]  fvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
' h0 F: ?. h8 l  U' [{
5 G( w0 m* l4 R7 @; W8 {  BYTE nTmp = 0;
* r8 k1 d4 \- ?( v  bool bDest = false,bSrc = false;% P  j) l* N4 F1 ?
  for (int i=0;i<MAX_INVENTORY;i++)
5 o1 W! C& s" B8 \" B: R7 X  {& m+ W6 B$ ^8 I: |+ n) \1 K2 ?
   if (dwSrcId == m_Item.dwId)5 y1 S6 n; O3 o& R
   {9 ^+ b+ L0 N# c2 g9 [8 _
    //id相等 则 改变对应的dest和src) p0 a7 Z' X; p2 W% [. t
    nTmp = m_Item.nIndex;  C/ W- t1 l* l0 @  J: q/ r
    m_Item.nIndex = dest;4 S& A; T) F4 ^& R
   }' q5 N5 a: O6 T0 j
  }* P# y5 T+ y- n
  //临时数据保存完毕,交换开始
4 T+ p( e# D8 W3 r* N& C  for (int i=0;i<MAX_INVENTORY;i++)
& h* \( A% t" C0 Y  {+ z; [; h( t3 z' x" g
   if (dest == m_Item.nIndex)- N) V5 M/ K1 z6 K
   {! j8 W- t% o) K; [. ^8 t
    //id相等 则 改变对应的dest和src
4 _* n! ?8 Y4 S. i# M$ l    m_Item.nIndex = nTmp;
: ?( f# j+ d$ k: h! v* d   }
3 |1 }4 ^+ N8 |- ]2 w- S  }4 q" _. y! R& k2 f$ w7 ^
}: t' X; F4 x6 Y( i- Z: G
};
/ `. c7 ]! O% b/ h9 j-------------------------------------------------------------------------, P1 Z* V% O/ I( s- G& [) _
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 r# p- b7 d; I# R* H3 c( C
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);3 ~& J. Z- u' Q) f
紧靠其上添加:
5 q5 q! T$ J( w1 x* p' l0 |if( pWndBase == &m_wndMenu )
+ v0 G" I' H0 w+ U% c- S{
5 a; d0 u7 P8 G  switch( nID )
4 R  C. d, B/ w- X, t( j9 `. \  {
4 s: C, a( W* B/ F  case 2:# g0 W: S/ I$ h8 J' z: I
   {8 p0 r9 U6 u9 J4 g
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);3 G5 {# n* l5 J" W. p+ W/ r- |
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ A$ X7 @* Y0 {  V
    {
1 o# n4 N( s8 `' ?4 J+ f, p* d     break;
( R* V, o: n+ O/ ]  w  D    }& {7 h; L1 ]( c
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)4 N1 @6 _; f+ ~) c
    {1 c" o$ E% S% ]
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);; o! Z* f1 `3 e6 H3 g" _
     if( !pItemElem )
1 N3 K3 T4 ^' g0 U      continue;4 n3 B4 W2 y! P0 M. I+ l$ W4 p* {
     if(pItemElem->GetExtra() > 0)! [7 t5 v2 s4 z3 L7 _0 r
      continue;
1 j3 ]) t& c$ T     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
4 v( r; L. V0 P2 F8 m      continue;
. T  x7 p+ ^7 P( d- V     if( g_pPlayer->IsUsing( pItemElem ) )
+ b7 b5 K$ v3 J5 m      continue;
& _% O2 D6 ~8 F' F& n4 t8 s     if( pItemElem->IsUndestructable() == TRUE )
7 m- O, `; C7 k: S4 N& g     {$ ]* e8 _; k, o1 H! y
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
7 }) E! b5 a8 P% B8 o$ f      continue;5 k5 P/ Y8 F- e7 O; m
     }
5 i4 q7 x6 Y" I) e9 D9 M, _     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);, F. v  t2 M& p1 e
    }
6 ^' I4 D# V' S2 {5 z) P    break;
. X. q, \0 r7 q0 D, f( S( u6 I/ ?   }! Q3 R! E- J: l
  case 1:
8 m* M8 {0 V. n6 |6 L* A   {5 G3 y) l! u# w) G
    //整理背包& ~( B6 D4 I9 H4 C
    //////////////////////////////////////////////////////////////////////////
# {* M; M5 t1 F    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );; k' }' Z2 C, O, L! [: L2 E( g
    //////////////////////////////////////////////////////////////////////////
! L$ G& K( @/ f% ^5 G* d( ~    //////////////////////////////////////////////////////////////////////////
6 ]/ T( t- `( j    CInventorySort* pInvSort = new CInventorySort;6 G* q/ V5 I; [
    vector <sItem> vItem;: R& H& U- g  l  ?
    vItem.resize(MAX_INVENTORY);//初始化大小( B8 [* O+ t6 {
     //////////////////////////////////////////////////////////////////////////9 P5 P# J! W3 a) [# Q
     //填充数据! R! @  S0 `0 @5 p. F$ z0 B
     for (int i=0;i<MAX_INVENTORY;i++)
% T6 Y$ \+ X) |+ i# G+ R     {! r% U' M: E: t% b4 Z
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
& n. p& c1 [  ^5 p: s8 A9 f* k      if (!pItemElem)& W: C1 |# C: ^: ]9 Y1 h- _" P
      {
1 N! P% _2 N4 Z5 D8 V# d       vItem.dwKind2 = 0xffffffff;, }9 h6 V$ Q" e: ?( D% j
       vItem.dwItemId = 0xffffffff;
  y( _2 W  N4 ^- [+ E. l+ q       vItem.nIndex = i;
/ ?) |/ f' l- j1 \" C4 H8 I0 p! A% C      }else {
6 \7 z& D2 S0 T( A& V$ w* ]3 \) b7 ?       ItemProp* pProp = pItemElem->GetProp();  |' I# a, S6 d" P6 T8 w1 F0 }
       vItem.dwKind2 = pProp->dwItemKind2;+ R( Z8 ^  ?/ u! N  S
       vItem.dwItemId = pItemElem->m_dwItemId;1 D% _1 Z3 c; F1 ~  M8 n
       vItem.nIndex = i;
7 e' `$ e) V* v; N( t, D& |      }
: l! H" L& N5 A8 Y' C% w      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);7 f- {" C: S# T5 O
     }; x1 p0 ^1 y7 p6 _
     //////////////////////////////////////////////////////////////////////////4 s! l9 v( e' _" e0 L( u+ X) g. {
     sort(vItem.begin(),vItem.end());//排序
% n1 N( ?; m1 l% Q% b' \9 g     //////////////////////////////////////////////////////////////////////////5 N& e( E, r5 k- ?
     //交换
$ N2 y- w* L; T" G     for (size_t i=0;i<vItem.size();i++)
5 B: w8 a1 |! h1 G6 \8 X' o     {  V9 v/ @, f% y+ j
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
* x, C% W# o) L. p      pInvSort->Add(vItem.nIndex);
# I4 [5 q2 U4 n. z( M     }% [, o) T) m0 d1 i5 I5 S0 Z
     BYTE nDestPos = 0;
! D. J% t: Y8 d2 m8 r3 ]  F% a" t     for (int i=0;i<MAX_INVENTORY;i++)
2 w. b7 f6 |* |5 [' U8 t7 F9 k' @# e     {8 B2 s; C+ m5 X) h6 s
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);, z. o- s- [' i8 [
      if (pItemElem)
( n- W2 z* J& ?  o/ E& T      {
7 {( L8 Q+ V: d7 Y( K& d# o       if (IsUsingItem(pItemElem))- m3 L& w9 ^( W% i0 R
       {
4 n" U& l/ N- p$ k        //这个位置无法放2 r0 c* J9 d' G# n- r+ C8 J/ _) Q
        nDestPos++;
6 m4 Z" \$ S: ^; q4 }       }
" [4 E- ?0 M# p" }      }  t2 P- I3 @, r& @
      BYTE nSrc = pInvSort->GetItemSrc(i);5 F( \0 M( F, f  @
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
6 u: l" ]+ U3 I' b      if (pItemElem); a7 e( E4 C5 `
      {! s( L, o, W# j2 L5 ~2 B
       if (IsUsingItem(pItemElem))
1 n* u* S" V  A, }) p8 n) T       {/ o; c0 V- b0 g2 i' J, M4 y
        //这个道具无法移动,跳过
, l" F" [' |8 y% E, H        continue;
& i6 U2 A3 E" J6 r       }
% M: I5 N1 o5 Y, y- n( z# o      }else{' M5 l9 p& G3 g3 r( Z2 {: b3 F
       //空位置 不用动3 n+ z; I5 ^6 h" f
       continue;6 W% s! R- V( O9 v; g* q( }
      }9 `9 Q% I& r) N6 t: e
      //////////////////////////////////////////////////////////////////////////
6 O+ Q( z  h( F% w4 H1 P& e9 [7 o      //开始移动+ r" C6 x$ Q' O/ u; Q
      if (nSrc == nDestPos)1 ]8 B( h: t, }9 s3 q/ z, }5 K
      {
4 w8 T, l3 s6 B( C+ b0 N" q       //原地不动  W" N: f+ x0 e! z" c0 A3 z
       nDestPos++;8 c- I3 b3 k; ]( k
       continue;
) ]; T4 |& k* r8 m# f6 ]      }
3 P' @7 k' n& J- ^+ M* v9 ~      pInvSort->MoveItem(i,nDestPos);
6 a4 C0 o- V. s; B( q8 v' ]( K      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
) ]: g: W- T) K3 q: C$ C* J      Sleep(5);& [& A0 Q; ]$ E9 g  H5 m
      //Error("移动 - %d->%d",nSrc,nDestPos);
- M$ ]3 r- W0 d; m& f9 X# d      nDestPos++;
8 U1 u2 z, `6 X2 e     }+ K7 Y+ K8 T- h4 Q
     //取第一个元素的信息
3 W. N7 g9 J! ?3 m4 |8 ]     /*
2 Z- U8 Z, M; G7 ]+ E* H% m     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff): C! O& S! h; _3 X( F- I" y/ {
     {5 Q9 ^) l: p2 x
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);( p% V, W. G. Z
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);3 o  h; {" q( S' [# Q/ c
     }, G; A& l  s  q5 S4 y
     */
* r/ i4 [: P* L$ m    //////////////////////////////////////////////////////////////////////////
2 p* s2 ^8 j- X& ]    break;
% U- u9 `) \( W/ G6 }   }: }  }# l3 N, N" Y; b2 Z' f( g, p
  } 9 |9 z" {: G  {' @( H8 K9 e
}
! K7 n' t  f. \4 Km_wndMenu.SetVisible(FALSE);
; M1 q; m2 U; y* h2 Y7 J+ [0 |
2 k# {$ Q% J2 E( p2 J) Y--------------------------------------------------------------------------------------------------------3 I% P1 G/ u2 r( ?! h
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)4 D+ I. w7 S4 [) s7 ^3 j: U
{
# o- y! D# {9 W5 z- n; X8 q% A6 SBaseMouseCursor();
" h% s8 C! Q6 ]: I) p8 M8 g6 D}; Q& I  R9 y  N
在其下添加:
, @  j  j, [( ?# G+ F2 _void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)9 ^4 y4 Z  A6 z( @8 R
{" k, Z8 S3 m* m8 N4 \& |: S
m_wndMenu.DeleteAllMenu();
* U# l2 O- H% D( _0 M1 wm_wndMenu.CreateMenu(this);' n3 W1 e# s! A0 g8 o
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
5 D. |7 [; C3 C, z2 t7 V9 `0 G% q+ H2 U# e+ v
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: v' {/ t% L  q4 Q! k" u5 q# d2 U{/ K+ L. e% K  u9 S) o* f8 ~3 ]& p
  //P以上级别才可以删除所有道具$ k5 u6 ~0 W& m, P1 P$ `, E
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");( h+ A7 N' o, R+ O8 ~8 p. c
}
; p5 h  v: Q1 _3 w% ^7 F) Fm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );7 l; S8 c! A9 R1 D, q+ N. ?- R
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );& w2 @# u. Z$ B. ~
m_wndMenu.SetFocus();
' W- v. N3 |% a; }0 u2 o6 O8 N8 G, O}
6 D# G# `& a/ V) Q------------------------------------------------------------------------------------------------------------
/ x5 C4 K" ]9 Q. @2 Z*************************
' V/ T# t, r, MWndField.h文件
, `% E; Q" \. q4 H7 A( N*************************1 c! P" T) u# a3 X
搜索:BOOL m_bReport;
6 K$ D) |) M7 h0 g8 V  q' x# v* W其后添加:
$ x* J. ~0 P& ?  w$ rCWndMenu m_wndMenu;
: q5 H/ W4 e3 E5 ~6 i" t0 \+ r+ w搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);- c" C3 y& A+ z0 S. X4 k7 o2 f2 l  {
其后添加:0 R8 I/ @  r2 k3 T
virtual void OnRButtonUp(UINT nFlags, CPoint point);
7 g- g% P" g# ^, G, @, ]  `; K6 a* F8 _) h

" }1 I% f+ H5 g

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-3 21:27 , Processed in 0.068464 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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