飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
0 ^( q& y- C- G' R  O8 E/ P* F搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )* b$ d% P/ H( _& N$ L

/ G- |  K7 H+ ?( V( |+ W3 Fstruct sItem; g- J  u" w  H; o$ b* O, N
{
  v+ ?  A; o0 T$ lDWORD dwId;7 D! S' ^! K5 u/ o3 r
DWORD dwKind2;
/ p* c& J) B$ z% m! H! i$ ~DWORD dwItemId;; J6 L# _* l4 O$ _. Z$ Y
BYTE nIndex;
/ U  b8 e6 [5 z7 c# AsItem(){) j$ z% Z7 L: h" H
  dwId = dwKind2 = dwItemId = nIndex = 0;' ^2 D  J( ]3 `7 _6 g
}
' u2 n5 t7 G/ E4 q. O( a9 J: |+ U2 Tbool operator < (const sItem p2)
6 |/ u0 Y8 m, e* f{
" s5 ^1 }0 d3 Q' `% N1 L! p  if (dwKind2 == p2.dwKind2)
3 ~& v) l8 n3 c( h' n; R  {
! i5 y) Q$ p( _9 _3 l" T) p) b   return dwItemId < p2.dwItemId;
$ o3 W  q' }- ?5 z# _! a2 @; c  }else{  Z# ^$ \4 ~* M& j
   return dwKind2 < p2.dwKind2;
( O+ |* X( Q7 n# t' l, Y% ~, Q  }4 w" y1 A; m4 j6 b; H2 g9 K
}: R' f1 L1 r4 ~+ p" P( e; S7 l
};/ c- a4 T1 N$ n$ G  T, a! \
class CInventorySort
0 E8 L+ G5 L" C: x* y{% G5 Y1 k/ e& q4 b
public:4 J4 W7 \$ D8 n8 e0 v& C& ^
CInventorySort()
( F" v* Y, C; X  g. ^- L7 \{" z4 O+ ~4 K! J0 `- I' |- e/ C
  m_dwPos = 0;8 K; t2 e, ^1 ?' E* M. s
}( H8 P2 r1 ]* e8 r" S4 a$ C
~CInventorySort(){}% Z, @6 ?( d2 [9 W& a
private:
# G( z$ ~6 J5 d6 B1 BsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息( ^* ?; G$ c$ b  X' o
DWORD m_dwPos;6 h1 l% u* w8 @5 i+ h" B1 R
public:: J" s2 v7 G7 @' }' c6 F
void Add(BYTE nIndex)
5 c7 V0 c9 ]. r{+ |, h8 t: m6 q. Y' l; y
  if (m_dwPos >= MAX_INVENTORY)% a, B" S% E& D$ p5 {
  {/ P  C& e5 e8 S( h) A
   return;8 I, s8 Y2 s6 h+ T5 U0 Q* v+ L: w* {
  }
% @' T3 v& D# R- s5 i! F  m_Item[m_dwPos].nIndex = nIndex;2 g- V! k# [% B2 R0 l7 C& o
  m_Item[m_dwPos].dwId = m_dwPos;, s/ P$ R6 J( A% l2 ?
  m_dwPos++;& ?4 ~* [3 v6 U5 t- T6 ?2 Q
}1 h# E9 C  O- T! {  y4 ^
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
  a1 x7 J; R) q, D4 b* P{. L7 t3 y+ h$ n" o5 x* Q
  for (int i=0;i<MAX_INVENTORY;i++)
9 w: f! e: m; X; E7 [2 z, K7 C, c  {
! P3 M' N) l  H2 _7 f0 _   if (m_Item.dwId == dwId)( V' {; I' @( v! g2 k
   {
7 D. Z! N4 i. `1 q3 u, S+ c0 p4 A    return m_Item.nIndex;0 d0 Z+ K/ `5 s" g1 b* o! y: ~# y
   }, w: J3 m9 A# V% P2 \
  }, V' Q. F# B* U) J) _  j! Q1 B
  return 255;: g9 W7 F+ N* l" H8 l! t
}/ L$ m0 q" S8 |: _4 A# q% K
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
/ s, {" R3 {4 }: A{
& ?: F0 f9 `: v' n9 G  BYTE nTmp = 0;. E, h1 k% J1 i# e
  bool bDest = false,bSrc = false;* X" L& x# \+ S2 k5 U# L
  for (int i=0;i<MAX_INVENTORY;i++)
5 I1 V2 k4 C, ?2 T- E: y  {) u! s$ ?! A& N8 @* \6 L
   if (dwSrcId == m_Item.dwId)- C6 O$ b$ F) C8 {0 k  o& H6 H% C
   {
6 ~: }. V' {9 q6 Z. E# t    //id相等 则 改变对应的dest和src. {5 h5 Y8 o1 h3 n( i: G3 `
    nTmp = m_Item.nIndex;9 `* M' P0 }# A6 y! i# F. l6 j
    m_Item.nIndex = dest;
0 h$ s3 _0 e6 f( j" p7 @   }
# F3 c" ?" n' d  ]  }- ^1 P+ o* |' I+ A* _2 y
  //临时数据保存完毕,交换开始4 M; s6 ], t# u: e0 k& c: w
  for (int i=0;i<MAX_INVENTORY;i++)
% ]: D6 x7 k1 i7 M& r" [$ }7 V7 y) @  {
" I4 t/ d8 d9 k& {8 A, t   if (dest == m_Item.nIndex)* a! P- Z  a; F# @! ^
   {
: E- G7 X+ F( A6 g7 o0 {! Q    //id相等 则 改变对应的dest和src7 e  ^) M( x- n2 m# S3 f
    m_Item.nIndex = nTmp;
) {" Y/ O" l1 ~1 H7 ^7 h' E   }3 E0 m7 N; V" f  }) N4 S0 m0 H
  }4 F# N# i* E" O$ c/ o9 x
}
  G4 H' x0 V5 K4 E6 _) T};3 J# H% G4 b# s4 a' B+ \
-------------------------------------------------------------------------
( O. B5 l# w- P依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )) S4 W4 R! o2 z; I
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
8 ]9 [9 y5 C% L! @* e紧靠其上添加:
0 c9 \4 ~% p3 I8 Y7 T3 g- I  T' F2 dif( pWndBase == &m_wndMenu )
5 \4 }( V6 [& h- N6 I{, \9 L# c0 }9 k% R5 K7 h2 ]: X
  switch( nID )
6 F# {1 @" x3 n. R9 @  {6 m: o  D6 N4 I! `$ y: P  P, x& N  ~
  case 2:
8 P; \% K* Z, d" L  ^  l   {6 \* c( |7 X/ z& g  v1 ^
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
2 c* U, T* T  M4 k: p    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
/ R/ _) A9 d% _    {
# ^& m* R  N) M) d     break;
( f" x1 g8 h$ l: [/ M. M    }8 t' \7 C6 l/ t  p: }
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
1 A3 q% @6 i# J  J8 q* C8 S( ]- s    {
8 p2 @  z% q0 S+ `, r# p' D! A     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, e4 ?: p* C. u  a- P* g     if( !pItemElem )! v( v9 o7 R& ~0 [% o; a- E
      continue;; f8 S5 d7 H5 r1 r* v$ p
     if(pItemElem->GetExtra() > 0)
9 z+ s5 Z7 }& V& |2 l: E      continue;2 k7 t3 N4 e  P/ |
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 2 Q/ _9 p7 s  ]9 _( s
      continue;( t. Y0 m3 T- A5 I1 s1 @4 A
     if( g_pPlayer->IsUsing( pItemElem ) )* t: O  @, {, o9 D3 I
      continue;
/ a; v0 r) i- U: U     if( pItemElem->IsUndestructable() == TRUE )9 U/ C" v* z& s8 [  r
     {
' Y$ C  x6 m3 f# ?5 v      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );; [' U# S0 T" }) C. P9 n5 ?
      continue;2 E; {; y) _* D  ?& y
     }& G$ S  g6 H$ m
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);- W, t, `' R$ R/ h* [/ n9 W$ u/ R1 _
    }
" D& v3 }5 k3 Y" l7 O9 X6 W    break;2 _' o# N: g0 V1 O- K0 `0 E
   }9 b; Q! d- V( }/ {$ V
  case 1:% ^* H3 ^9 K& {* R
   {
# W* q* ~( G* W    //整理背包
$ ]- J& w  x1 o" t  g9 e* E    //////////////////////////////////////////////////////////////////////////7 t' [( r, [' V
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );! {7 P' |( {: v! K$ m* [
    //////////////////////////////////////////////////////////////////////////# L( M, F8 Y6 [' `# ?
    /////////////////////////////////////////////////////////////////////////// h; n& F3 r& Q5 z* O5 |
    CInventorySort* pInvSort = new CInventorySort;/ B7 V. q6 n( A* B# m# J
    vector <sItem> vItem;
/ K: I6 ^" ~7 f9 P# H1 O; K    vItem.resize(MAX_INVENTORY);//初始化大小8 E+ M* y4 R7 A9 x% ?5 J
     //////////////////////////////////////////////////////////////////////////7 l! g$ C. D4 z( z$ C/ ^$ C+ X8 h7 `
     //填充数据
2 W9 r2 W- {# w2 Q     for (int i=0;i<MAX_INVENTORY;i++)" E& d/ n, f. _  B; s' ]* [
     {
: j8 n: w/ u' |      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 z" q7 y7 j5 ?6 v* u+ ]
      if (!pItemElem)# D: d$ Q, B! h5 ?: o
      {3 E1 z8 L. b- W) m# b1 Q( k
       vItem.dwKind2 = 0xffffffff;0 a. i% o- ?: K5 `/ W
       vItem.dwItemId = 0xffffffff;2 v* ?8 \; X! M% n* n! u
       vItem.nIndex = i;
3 k; e* Z$ f8 B      }else {
: I4 f$ b: R2 O% {       ItemProp* pProp = pItemElem->GetProp();
6 `* k3 F5 r- j9 f. T9 W, e       vItem.dwKind2 = pProp->dwItemKind2;* I! g8 n5 Z3 i% S0 X% f
       vItem.dwItemId = pItemElem->m_dwItemId;
, U! z1 V7 F, c' p/ }* l, L) }       vItem.nIndex = i;
* d! D, U1 i4 q      }
9 s$ n' P8 j$ U; A# ]      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);: E* d5 I9 i1 N6 f$ P
     }* L1 Y; O3 y5 k1 |2 z" j
     //////////////////////////////////////////////////////////////////////////
: C) g% M3 k' w+ {0 {" {     sort(vItem.begin(),vItem.end());//排序/ E/ W  l  S3 G# V: {5 m& \2 H$ H
     //////////////////////////////////////////////////////////////////////////: V; v+ w2 z2 z0 r& A8 q" j. m5 x
     //交换" \% h5 [: z+ E
     for (size_t i=0;i<vItem.size();i++), F5 e7 K- {7 J3 h. [& v8 a
     {# y) e9 r  H! Q8 U" B1 k
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 h& d' q' ^9 R; u      pInvSort->Add(vItem.nIndex);
! @+ W5 E( I9 v' s* o2 ~9 |5 ]     }
2 S- m5 i- R$ g# k3 N7 j# _     BYTE nDestPos = 0;2 E! |9 U5 r% ^/ x2 x
     for (int i=0;i<MAX_INVENTORY;i++)
: S9 g& I2 K* e' N# V     {9 s) V8 y+ e+ T! |9 m. x
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);. e. D, L) a  M9 m( l. H6 X- [
      if (pItemElem)
/ c2 X3 z0 L, }) G* G$ V, O      {
* M& |2 Z+ M1 ]! S/ v$ @) w       if (IsUsingItem(pItemElem)): G  ]: L7 k" N  v8 j# S
       {( I% z4 ~, ~5 {
        //这个位置无法放! ~1 v, f, w1 c6 \* H9 l/ G/ Y
        nDestPos++;& M2 z: A5 N) ~5 ?1 w. o
       }
4 u$ V6 I/ [# g6 q: l  L      }, t2 h2 l; M2 x! H: S# x$ f) V
      BYTE nSrc = pInvSort->GetItemSrc(i);
* B; f- l- O$ w5 A& @      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);- X( `: O/ h8 R8 s: ~
      if (pItemElem)4 n4 O1 S4 C% D0 ]6 j
      {
! ?& z# h2 w) f" s7 a3 }4 {       if (IsUsingItem(pItemElem))! Z8 K. ?7 e1 M0 F- ~8 v
       {
) b" B! i! Z# X) j* K        //这个道具无法移动,跳过
6 u* u( d& Z( E- e        continue;, E- t4 [! u% ^) p
       }) ?! W; g/ g4 T$ G: M3 Y. ?/ g
      }else{
: Q" F6 y* J/ t4 }       //空位置 不用动
, T; h6 s) T: I* g       continue;3 {) u) Y' U$ F- t
      }
( B8 v  T: m% O; H      //////////////////////////////////////////////////////////////////////////% F: J* e* H0 o6 b
      //开始移动
' a+ S% e' X% H! T/ F8 _# Z      if (nSrc == nDestPos)
0 k% y* [* `) j* J      {
: E, n/ l* [1 ^7 U       //原地不动
4 H$ w) H7 `% A0 i0 Y, _       nDestPos++;
1 g" C- H) L8 D, a9 g2 k9 r       continue;: t7 T, c! z6 p: I% B% L1 F
      }0 H# O0 U1 |! w1 e* s& x: j
      pInvSort->MoveItem(i,nDestPos);& ~' b) A" _' y' B1 w5 o% G! ~
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);" m. P* F. m( q" W5 x$ \3 b3 i
      Sleep(5);
3 A: I: }2 L1 |. w4 u      //Error("移动 - %d->%d",nSrc,nDestPos);
0 F* K& A3 R! w2 @4 @      nDestPos++;
  S! O  r. i! n4 w     }
) `; @3 H2 I; _) h  a     //取第一个元素的信息6 }* r  h6 n' s: Q! m
     /*
: S7 T2 W' D# b* _. }2 ~     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
+ n- t5 V3 ~/ W  G+ N     {9 q" `" I2 F! q7 W( ]# `$ f; Z, |
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
- y+ r. Q5 }) y      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);0 n0 {3 G# H% D, g; C! c
     }% y+ m. I! o. f( W( P
     */
9 Z1 k0 \6 D' V    //////////////////////////////////////////////////////////////////////////
- k' ^" G7 s/ O4 s: Y' k+ Z    break;$ F0 d  ?0 ?9 o
   }9 N% ?$ O, w7 ~  `# H
  } 5 l3 H$ y* i6 d- q, h" L% k+ l" E
}
& D. o" W4 w; k" O: M, r, V6 Ym_wndMenu.SetVisible(FALSE);
  I8 a) A. _- C  ~2 u4 {9 C/ l; E$ c1 T& O( N) X
--------------------------------------------------------------------------------------------------------
7 s5 n" A; T# `! H搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)% S, c% X- L, @7 G2 d& Q
{
2 R2 B- m% D4 I. g6 K6 ]& e: n0 [BaseMouseCursor();
5 B7 G. ?; G  G1 q7 @# Y4 F7 T+ g}
+ ]  W3 l3 R  }在其下添加:4 t7 r+ e/ u. M2 I
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)7 f# L& d& T! i8 ?6 f
{; C& p  c9 [9 h! ^# T
m_wndMenu.DeleteAllMenu();. J4 Z$ V# m  S
m_wndMenu.CreateMenu(this);
. y7 x5 D  w! D3 p3 ?+ t2 [# G: Um_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
. M5 z. e- l; V  B/ W( b$ ]# C( N& y7 z* v- y& d
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 v; t1 b/ k! t" @! e{
/ d4 [8 t& [3 j) M; j  //P以上级别才可以删除所有道具: q4 P5 \% J/ |+ u
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");2 m5 c6 G* I) \* }+ f( Z! I% D; f
}* p; W) k- k; r9 `( f
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );/ j2 A: I: P8 P/ ^/ n
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );. [7 j) I  i  c
m_wndMenu.SetFocus();; J& p3 @) k2 Y$ ~( l& h
}
9 {  D5 H, a, K1 J3 g6 v( |------------------------------------------------------------------------------------------------------------
+ r! Y. \8 J+ w& M6 f*************************
* K* D% ~7 p$ @3 t1 lWndField.h文件
( _3 z; R! j' d( \! l" g$ [. l*************************( D4 {- i- N7 Q& ^& N' u$ B- o: L
搜索:BOOL m_bReport;1 l* B  a8 e1 M& u: x
其后添加:
: x8 J* V$ i- t$ j3 _1 f4 I$ uCWndMenu m_wndMenu;
) h! b% f6 C2 J; D( U; ?! t搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
2 l' J- B0 J% K1 I+ Q其后添加:
  n/ n1 P! E  R# ^virtual void OnRButtonUp(UINT nFlags, CPoint point);  {2 Q+ C! h8 R1 @! _! u
  m8 w# e0 m, k
8 q4 c5 G( x, b$ l" b

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-18 20:04 , Processed in 0.062600 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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