飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
5 b- r/ w8 P9 ?+ r- G搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )9 s. `; Z# N' c* F6 k% O2 o& h6 W) M
+ o! R  N' s+ P2 T" V$ y5 P$ w3 u2 d
struct sItem
$ |: j8 {- q% R/ S/ }{/ f1 U+ m8 }4 F8 N
DWORD dwId;; U1 B; r6 m: w+ `1 f" S8 m1 O2 ~
DWORD dwKind2;
, a4 l" T7 F# c- b- j9 S7 C" k) JDWORD dwItemId;
$ K! u# q1 Z, g  t, k5 `BYTE nIndex;
* T: A- f- S- j+ \; s! r# JsItem(){
* G1 y# s3 R$ `# w6 p  dwId = dwKind2 = dwItemId = nIndex = 0;0 a) V4 Q* o0 R6 Y6 p/ `( [2 ~4 x/ c
}) L9 C- r; M0 A3 b5 R6 l' t8 F' e
bool operator < (const sItem p2)- q7 t- j2 V4 r3 q5 I
{
* E  s- ]! J; o, U7 e  if (dwKind2 == p2.dwKind2): O! i: X4 H% c1 i3 y5 Z
  {
4 z+ u0 s) c/ z' h# L   return dwItemId < p2.dwItemId;
* b/ T! R& @" E$ E  }else{- f  @/ Q" j- n0 g8 _- S
   return dwKind2 < p2.dwKind2;0 ?$ o9 j; U# M( ^9 U
  }8 }2 n6 u5 f* i! m
}: b- V; M5 X% I+ v
};- A8 o# K" s! y/ f1 O1 k
class CInventorySort# f& G2 S2 B) U7 D2 f3 |
{/ t  ]- n( r" C) }( J! @# p4 f
public:+ }$ G+ J% A1 z! g4 L. Z, H
CInventorySort()
0 L0 h1 _" F6 G2 \+ @$ Z% v{
7 r" A6 {6 @9 }# G1 s: u' ?4 o  m_dwPos = 0;) z2 p) E; a; F7 K
}6 S8 k. m5 [$ q
~CInventorySort(){}
# {; O9 r+ `) D) {" f  X, Sprivate:$ z0 U( O+ [' o0 ]& X$ _3 v1 r- r
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息" d1 M* d6 f- K/ d' A% i- A
DWORD m_dwPos;
9 o# k4 e. f8 H. fpublic:. Y, s# A' P7 h
void Add(BYTE nIndex)
% N, r" O; @, V2 ?+ M{# r# ], i+ r8 W' ^
  if (m_dwPos >= MAX_INVENTORY)
7 [! {( {' _" P; C  {. D$ G% z. |/ k. |! Z  m
   return;
* ^4 m% s0 G" Z6 Y( g  }
) o3 {, r& S! s9 {3 j: q  m_Item[m_dwPos].nIndex = nIndex;
' ~2 k% ?( r9 m6 Q. {5 v' e  m_Item[m_dwPos].dwId = m_dwPos;. `2 I# _* r3 K7 P! f
  m_dwPos++;6 O; s- [2 {9 w
}
# U' \; I  U# Y8 H1 w) u' FBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
: C6 n* L1 F, m9 Y" i' k" b# x& b{
" I4 @2 a$ @0 {( F5 Y  V- N  for (int i=0;i<MAX_INVENTORY;i++)
0 [9 l% ?" k2 B' t0 w  {- I: ]3 M- L  @& S% W, r9 D2 k
   if (m_Item.dwId == dwId)
' u" h" j/ e& E   {
5 E4 _4 M: F( d1 a6 ~  f. N    return m_Item.nIndex;
% M" F7 ?# }# j; o! k+ K   }
1 e. F7 s4 {3 b# |* `" y: }  }
1 d; |* o2 E% I: M- L+ M) w  return 255;
  s  h4 P& |8 I, }' b/ X1 C}
) x4 h8 A( y% Gvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置$ x# ]7 A& ~# M9 q% S
{
1 o4 p; Z# h% q; i5 d  BYTE nTmp = 0;
, @# Q7 i- d2 G  v- ^) Q9 p, W  bool bDest = false,bSrc = false;7 w0 u9 B; \6 |# `2 S+ `
  for (int i=0;i<MAX_INVENTORY;i++)
( t! W" C7 a7 Y* y( Y: D9 |, O  {
$ l0 w1 w$ D0 F6 I' p   if (dwSrcId == m_Item.dwId)
9 y; [' T1 Z: h! X$ _* N, E  U   {
( X5 |4 z" u  y, c+ X; H    //id相等 则 改变对应的dest和src7 Z$ o5 t8 ?$ y4 L7 j
    nTmp = m_Item.nIndex;8 a" N/ k1 j4 A$ H4 x
    m_Item.nIndex = dest;4 P8 h# w+ d9 ^$ ]
   }
- o- u( w* o) q+ r$ K+ ~2 y- i  }
7 l; Q1 p/ {, G7 V6 S+ P  //临时数据保存完毕,交换开始5 p* C1 D1 h" P$ }1 N  _4 ?
  for (int i=0;i<MAX_INVENTORY;i++)
! l; c% [" s5 j: p: i  {
4 K5 B% k  g' g+ U0 m  J   if (dest == m_Item.nIndex)7 h5 K/ P0 O- v
   {5 C/ u: @+ ^9 d! j1 D
    //id相等 则 改变对应的dest和src
8 `; w/ f7 o% T! X# R+ w    m_Item.nIndex = nTmp;0 Q6 h; w3 @- n" Y' Y; X
   }
- @; v' B8 E1 [+ r6 b* B  }
  P6 N# I7 F6 I1 }: ~& U}
9 i1 U' f* ]4 x6 O9 H, C$ K4 _# |8 X};5 X+ k. C2 S$ K
-------------------------------------------------------------------------( z& w9 w3 }9 b
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )- ]& {0 d% y' h/ n
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);4 O' d9 J- F6 A: V! ]
紧靠其上添加:
+ D( H! {& P2 u, z5 v9 lif( pWndBase == &m_wndMenu )
( }" H2 v6 i( u& }7 @{
- G, x2 T, A$ W, N  switch( nID )
  f0 v4 O' v' `$ v" e( Y  {. c( R9 z  g9 @- X1 t1 S
  case 2:
7 z7 P, R4 \$ x! L9 S& ~% {4 a   {
' g! f, }. E5 V  {    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
& ^+ i4 q. ^9 j2 ^( r; E+ F' p    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" h7 J0 r0 j5 \& g1 ^7 s% i4 L    {
, Q  z$ d/ T/ h7 {) b" q; P2 W: k     break;+ _( S: X" v8 A0 r
    }% q) N' a% t4 `1 ~5 b
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
) U/ f+ |6 j0 B- z% L9 I    {
2 p; B. }, ^9 l& ^% Y2 n     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: w( P/ b: _! y& |0 \     if( !pItemElem ), n7 t$ {1 R; M; X
      continue;, h7 ^; ?! t  a
     if(pItemElem->GetExtra() > 0)& N( ]& N& K0 @( C4 u9 Z7 T1 W
      continue;
# T. q5 z, [) v4 a: h6 W, D& M+ E     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
/ g& t: t' d) w, S      continue;
$ n8 K) S( T) A/ w4 R: ^& e     if( g_pPlayer->IsUsing( pItemElem ) )$ v% i, X+ [$ j/ x* A
      continue;
: }7 p9 h! q. ^% b3 b     if( pItemElem->IsUndestructable() == TRUE )0 Q) ?# f4 ^7 n# D4 {2 y; ]
     {
# l1 _" W; }/ l5 R8 s      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
* q+ b% V7 J* ]4 l' ?5 {      continue;
3 Q2 `: a, W( v. M5 J* k     }
( F4 }6 a( D  t- ^) e9 F$ _     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);6 _. m" r% Y0 ^6 N
    }
& r7 p1 g  b3 W3 o4 D+ c0 A; X    break;& b6 a) t- T  c7 h9 }! r/ \8 ?
   }) U( C3 }& ^' `4 L1 W# p# `
  case 1:
0 P7 Q$ g3 K+ c- A4 N( q   {
! ]: `8 t2 F/ h8 T! N/ o: e; G    //整理背包
, g0 n; M4 f- K- O    //////////////////////////////////////////////////////////////////////////6 J* ~1 F2 |: ^% q
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );" S' [; D# |  v& {! \& h  L( `
    //////////////////////////////////////////////////////////////////////////3 l0 s+ H* C1 x! F4 I1 ~
    //////////////////////////////////////////////////////////////////////////
+ O! R. Y$ ?8 u- v9 F6 l* L) k    CInventorySort* pInvSort = new CInventorySort;. p6 g( k0 e6 P  r" d
    vector <sItem> vItem;" m* ~5 c0 }* [9 [
    vItem.resize(MAX_INVENTORY);//初始化大小/ t2 a9 C, c2 {3 b6 D6 [# U
     //////////////////////////////////////////////////////////////////////////* W/ u; q) V. V
     //填充数据
' o- F; U* F, u* o     for (int i=0;i<MAX_INVENTORY;i++)
" i. Y: B% W7 w8 ~( ^0 b  r     {" K$ F& o; p( y1 q* z
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);# g2 V- c2 m1 G5 H0 s. V  L# [
      if (!pItemElem)% _3 o! X+ W. q1 ^1 u  a% b
      {
, @( J  N& F' Q! c; H       vItem.dwKind2 = 0xffffffff;
- T! f; Q0 K. V& J       vItem.dwItemId = 0xffffffff;# }* `3 u: E: t1 n  F
       vItem.nIndex = i;, h3 s6 Q% @, B! j
      }else {. [: s! e. ?- g, _/ u# t) p6 G
       ItemProp* pProp = pItemElem->GetProp();
4 F3 K$ I5 L+ e& m4 _( ^* G       vItem.dwKind2 = pProp->dwItemKind2;: P; F- n- [, h& J7 i- {3 y" \
       vItem.dwItemId = pItemElem->m_dwItemId;  B& M  n6 d& _" }% X3 o% I
       vItem.nIndex = i;
' I3 w6 N, X7 I9 r      }
, i3 K+ h- V, Y; V) M      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 A- q$ y9 e# b  K  w     }
( e8 b0 `, v1 A# P! a" |     //////////////////////////////////////////////////////////////////////////, w( p% o" T9 V0 }
     sort(vItem.begin(),vItem.end());//排序
; _4 G+ ]$ y' }# V  q+ A+ q     //////////////////////////////////////////////////////////////////////////
# x: g; ~5 f6 I! u     //交换
* K. l2 I2 s3 {; D  e) t' T     for (size_t i=0;i<vItem.size();i++). u; x# P2 q) T4 y0 ]2 A
     {( _0 \8 O) C  [9 x  Y
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& X3 Q* u+ k2 \6 v
      pInvSort->Add(vItem.nIndex);) f6 n  p2 |8 y* d6 {) w) q) \6 }
     }" K+ a( e; m1 Z: a7 z3 q  `
     BYTE nDestPos = 0;
, O9 G& B0 `/ B2 ~9 Y- C3 a3 [     for (int i=0;i<MAX_INVENTORY;i++)' z3 I9 J: D' {/ {! M* n2 n
     {
8 e/ e; J) x! \) q$ ~; [# Q      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
! H2 b! Z8 Z" i7 M( B/ ]6 H/ O      if (pItemElem)0 G4 e. j4 S) j
      {: D) ]6 q) m7 ]+ v: h0 _. u4 ?1 N
       if (IsUsingItem(pItemElem))! Z( o! d2 a  ~$ T# @
       {
, I8 I$ b- i4 a1 u" ]; u        //这个位置无法放
* A- a4 C4 b5 I/ d- @6 `        nDestPos++;
. z- A& G/ C0 e+ B) d& O       }0 R0 Y7 r) L2 [; g- q
      }
  L1 m1 i% `' D9 E6 m6 M7 J) ^      BYTE nSrc = pInvSort->GetItemSrc(i);
7 j8 w( l- A# p      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);) k( |" s" S& D& d* q2 W
      if (pItemElem)
# S6 ^+ }* X* A  A* Y* l: Z      {0 D( R2 ?  }: y4 B% @6 ^
       if (IsUsingItem(pItemElem))
: n! o' o- }% W5 b. q& o, P$ {       {
" ]2 d+ e. Q% J, g/ F  \        //这个道具无法移动,跳过% g( @& j+ ~1 G
        continue;
0 L- V% W* m8 e0 |! ~       }3 Q3 m! @2 _9 T3 }1 y5 V
      }else{
! `6 `+ G! O) c; g       //空位置 不用动
/ J+ l3 Q! l# u       continue;
/ i1 l5 R: T9 ?8 h! r6 G" S0 c      }
: S! D5 o* g4 a" u1 ~      //////////////////////////////////////////////////////////////////////////
3 O3 m3 A7 i' V4 j4 y      //开始移动+ L2 N' R- O( y  a
      if (nSrc == nDestPos)
6 b' A7 ]6 I# d- H3 V; _      {+ H. y3 P9 ~( d& E
       //原地不动
! q6 [' y$ A; `6 Q9 p  B) j& g       nDestPos++;
% P- z9 ^$ l( U# K       continue;
% r4 d+ {3 N* ~) q+ |      }* d. j- S/ p* {7 z8 M. d
      pInvSort->MoveItem(i,nDestPos);
3 N% ^/ n. h  t& k" @0 W+ K" W7 O      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
/ _/ [* Z; |7 L1 v! }* {      Sleep(5);: X( i3 x5 S) l' Y
      //Error("移动 - %d->%d",nSrc,nDestPos);+ m8 ?; H: K2 A1 \, G0 q
      nDestPos++;- Q: i4 @' B# c' l- a
     }% f7 f: C( t1 O9 ]3 ?
     //取第一个元素的信息& t, f1 ]7 @6 u* F4 V- W, A+ L8 m6 p/ V. p
     /*
- l! Q* y: u3 z' N: k; Y6 N     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)" R5 j# Y! f7 e7 `8 A7 w+ B) \; D
     {1 H  D+ k, Y  r. g/ y
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);' @0 h+ m: Y5 z
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);9 B4 ^3 {7 V& G6 h  O% \  Z
     }7 ]- q# u  O8 M9 i
     */
; C& K7 z: x1 L/ r' I! D    //////////////////////////////////////////////////////////////////////////
7 L) U6 T) x: e  t+ a    break;/ H* R3 ], l! n* m" b8 N+ w
   }8 |" n, v+ \7 o7 x; j+ d
  }
8 {0 ^' e, }+ D, r* \6 |# o1 Z}) ?3 }9 F  n6 O. r( k
m_wndMenu.SetVisible(FALSE);
1 o8 i7 O3 n: d7 L/ }! e6 z+ @/ U( Y4 Y
--------------------------------------------------------------------------------------------------------% ]6 U3 s5 i  K* `  H) h3 `
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)1 }9 _  }/ h* S' t8 g
{
5 o: [" J- p+ m& f& \0 EBaseMouseCursor();
# M2 A7 g- J% _/ I}  L9 U4 ~8 W, \( |& f- x; E0 R
在其下添加:' H# d# X  v1 n, Y9 ?
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
0 W: |$ O, \2 n3 j  C, N3 H0 W{
  C0 L$ S; a1 N' l8 jm_wndMenu.DeleteAllMenu();" B& |# O2 l" \( A, b
m_wndMenu.CreateMenu(this);
: E6 W0 e% d0 J( }# |m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");% R0 I3 @6 Z* r: l( q8 `% @

4 h; z7 r; i0 w$ ?8 f; Wif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 R) r" K& M. W3 V
{
$ ?" Z: f- _' h+ H/ i+ F  //P以上级别才可以删除所有道具0 N3 X" [% p1 b) j0 U1 s3 [  Y
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");. p$ |$ [5 f/ z0 {' n& k" w) \
}- d6 n9 E$ G) n; R! p0 @
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
, o) h( B2 E! h: Mm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
( E& H! D) k' L# O2 rm_wndMenu.SetFocus();% O3 Y: }" \! z+ ?5 J/ v
}
% X1 E  b) X( E9 l5 D------------------------------------------------------------------------------------------------------------
5 i( ~" d" v  u8 [$ a7 x*************************. [- R/ [# T; ^/ O3 f; h
WndField.h文件: Y% Q7 X1 W! S3 W
*************************3 l- p% y5 `6 P9 ]5 ?$ r* {
搜索:BOOL m_bReport;
8 h# y( i4 r% D* H  a) r" s; q其后添加:
; U7 w* R: G9 S2 ACWndMenu m_wndMenu;
% S1 J4 A+ H% G; |搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);0 W& L( R$ V5 g5 j6 o
其后添加:
6 I" J9 a" U& h9 Zvirtual void OnRButtonUp(UINT nFlags, CPoint point);
0 m; ~: G& U/ P& k' B( n
3 G6 O$ |; Q( ^) I6 n
& @  }" G% H4 C( K1 y5 e( x

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-5 01:13 , Processed in 0.072694 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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