飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件1 j- m0 B( B4 S
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: j) u9 o5 `0 T' T0 t
$ a5 N" R; u9 c- m: I+ Ustruct sItem
- t9 k$ ]" i; L; ]# x' J# ?2 b5 K{
" S/ J: ^) a, O  N5 k% z+ x" |DWORD dwId;
8 V8 i. y  q5 ]; S+ ~DWORD dwKind2;
. H! p8 I. X# z" [6 x0 g7 }6 H/ fDWORD dwItemId;0 E0 l; e+ D" N& h5 A2 B2 V
BYTE nIndex;5 n) ?3 X; T+ j( ?$ n+ V, }
sItem(){
. r" ]: X3 n% A  dwId = dwKind2 = dwItemId = nIndex = 0;
% n) ]& U  ]( U}
) n& C! R4 ]5 d3 u' a4 Gbool operator < (const sItem p2)
6 N- m, i- e4 @# H. F{
7 q) E$ `: v" S& ~: O$ |* i- T  if (dwKind2 == p2.dwKind2)
# g7 u9 T1 w  Z& D1 b; {  {
; O* y% M" Z, C2 b7 X, F   return dwItemId < p2.dwItemId;
" F* T; T& W- \; y6 r3 J- M' d6 P% F( I  }else{
9 i8 G. c. p; @& E' q9 T   return dwKind2 < p2.dwKind2;
; r) A( X, D% ^9 B/ Y  }
1 V( U* e- c2 Q6 p6 y}
9 d/ {# O, n" Q7 |& D};! H+ `/ h: \: C+ H& g3 g& g4 M
class CInventorySort
% {5 y/ t' k8 N: w+ }0 u" L6 ~{8 W: K* U( ?  g$ I. R; a) t8 u! s* a
public:9 ^  G$ s+ R- \( r5 p/ t$ L
CInventorySort()$ l  M) a  w* o# u& u/ N1 X. e
{
0 Y/ M2 {4 L3 |7 Y7 B8 W  m_dwPos = 0;
9 M5 Q9 N8 D2 L4 R5 s9 l}* q2 H6 e2 y4 U& v. s6 N! J
~CInventorySort(){}
* \: m) o  t# o" m, b; p! o% Zprivate:
2 a2 A0 X3 f1 ?; q9 m/ r/ UsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
, |/ H8 q) l% ]6 T" s7 rDWORD m_dwPos;2 l9 I% |. ?: P$ Y
public:& y2 c1 P8 a( x/ a; Y. G
void Add(BYTE nIndex)
4 ]  s3 n. c( v% y$ W7 q. {' \{
% ?! }3 G; z/ q. \8 s  if (m_dwPos >= MAX_INVENTORY)
4 I1 [$ y6 c$ {9 F' X* r  {
$ g4 a7 q  w! G+ q5 p9 w; c   return;0 ~% n. \. l$ L+ V6 W
  }' j) E8 C: a- q: f) S6 w+ {
  m_Item[m_dwPos].nIndex = nIndex;6 p* q# C6 E& V) A! l3 f# R3 j
  m_Item[m_dwPos].dwId = m_dwPos;1 j- M1 d8 x  R+ W4 z
  m_dwPos++;( c7 H$ v4 x7 V) |1 h6 ~
}
' ^: R( d7 E8 Y3 LBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列, o  v! b1 }6 Q/ m$ U* b( W, V
{' w3 @' T$ e6 C8 v0 {( I2 D+ D
  for (int i=0;i<MAX_INVENTORY;i++)$ e& ~" W5 p% T0 u0 p' p
  {
" I/ U/ I! y- @- T4 Q   if (m_Item.dwId == dwId)
  A" u2 ?( S" E6 A9 _  n% _2 ^2 M   {/ ]( y$ Z  X7 U7 n3 Z- T5 c. W
    return m_Item.nIndex;) p) r8 o4 c+ F5 z  O& t; T2 P+ u
   }* \6 s* l5 t, X* v  p  V
  }
. B& f* d' ~2 d8 o- X  return 255;" G; b0 S8 t3 S0 t/ |8 L
}# u7 Q' O  E% ^) S/ L" s- |) X
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置5 N8 K0 f0 T! l& N6 J* ]) t+ [
{; y( f, v, I' @  v- C$ u
  BYTE nTmp = 0;/ o2 L. L5 \1 x/ V$ k' s$ i
  bool bDest = false,bSrc = false;! [+ H* d  e$ V3 a
  for (int i=0;i<MAX_INVENTORY;i++)
/ {, G5 e7 t4 E9 d  {
2 b' I7 R$ E9 }   if (dwSrcId == m_Item.dwId)
3 z" w/ t4 S- Z   {* a6 z1 l- b% I9 ^. N+ L
    //id相等 则 改变对应的dest和src7 ?! H2 u# V' @
    nTmp = m_Item.nIndex;+ u7 T  H9 [! L6 c$ R# }( T
    m_Item.nIndex = dest;, N; P' U; `3 S& S5 x* {2 \
   }! a' o. o3 l/ @4 |( D6 y: L
  }
7 |! F! l" U' ~8 [$ L$ `+ M# H  //临时数据保存完毕,交换开始
! ^6 y, y! l1 z0 N7 F+ T# m  for (int i=0;i<MAX_INVENTORY;i++)' i1 M' _) y0 n9 e0 N5 W
  {( P5 T2 x5 C4 a/ u. Y$ N' c  C3 I
   if (dest == m_Item.nIndex)/ y/ v# _: m  L& m4 j
   {% u% s1 X& x8 A9 D1 Z
    //id相等 则 改变对应的dest和src
6 y0 r+ j# m8 i* n# `6 G    m_Item.nIndex = nTmp;9 F2 }7 f2 X2 W# k2 @" V
   }
& \8 S$ d4 I# [; b  }" c7 Q( B0 J. ^) x5 q; B5 c' A
}
, d' A7 ?+ X# r% `& _$ ?};/ \+ Z9 M! E9 f& M
-------------------------------------------------------------------------0 M1 }# q5 v# }2 t7 p
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
# s2 x8 o5 b+ R/ A' z0 u- ]6 |搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);' n; @/ _( }4 B0 u6 A* ?
紧靠其上添加:
( O$ K# N. B: @% _/ Zif( pWndBase == &m_wndMenu )! L0 O' E& g! J, }/ p- z) }
{
' c7 r, g, q- m; {9 r' W  switch( nID )
* o8 B# O/ S5 C; f7 D: c* k2 Y8 P  {
+ i7 y" W( K2 x8 L9 j# z5 g  case 2:" Y$ {* M0 i- Y1 b8 s
   {
3 C, Q5 c. e; w    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);, s( G. x. o  a( F3 c' D/ W
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 U+ y' V. K0 w4 g2 y) c) P
    {
8 l. `) r0 K) o6 k     break;
* v5 ^- u9 V" E3 m7 d% B    }' j8 ~$ \( {" |4 d
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++), T: I) ?8 G- Q* X, o
    {
+ K$ q8 R8 [) @6 r2 {! E( Z& Q     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
& i7 s4 P# [. s9 {3 i- p     if( !pItemElem )
+ O/ p/ M& y0 A      continue;
( K+ I5 A6 z' J+ c$ r8 }5 v     if(pItemElem->GetExtra() > 0)( r8 Y  D+ e/ t& J7 j- M# X  p
      continue;" R! ^$ ]4 s- V
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) * [: ~, |5 g- B7 u; [
      continue;! y& }% m2 u6 W% U% N0 ?
     if( g_pPlayer->IsUsing( pItemElem ) )
0 c4 L3 a8 k" D: x1 x# B' I: m1 f' ]      continue;% O1 k% n0 x# n
     if( pItemElem->IsUndestructable() == TRUE )& y/ u# s& {9 |5 o1 E( l' e  b0 I
     {
: c1 f8 O! M- Y, z      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
6 u8 k5 r" ^3 [% j: @8 l2 `      continue;5 G2 R; h" u7 V6 U0 G# Z8 D+ I. ]
     }
, y( }1 U, e8 P5 p% x6 R6 r2 M, `  D' D     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);; _1 J+ T+ k* o* R% a- T
    }* J, p+ k/ U' }
    break;  A: k" i& L$ n
   }. ]$ W( ~1 {# ?, j( Y4 q
  case 1:
' F; ^" J* W+ P$ C1 ]% B1 a- l   {) H9 U/ d! a0 V
    //整理背包3 [7 N8 h. X0 P6 S7 v
    //////////////////////////////////////////////////////////////////////////' y% q# F' B' S3 _8 o
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
3 k3 |& M  s9 G' \0 @    //////////////////////////////////////////////////////////////////////////
; \  X3 }- _* v. L/ C    //////////////////////////////////////////////////////////////////////////
5 h0 I3 ?* `) t% D3 \6 l    CInventorySort* pInvSort = new CInventorySort;
  I3 l% `! U. t: N    vector <sItem> vItem;; z# Z& d3 _+ a6 c! `- d8 b% n
    vItem.resize(MAX_INVENTORY);//初始化大小
! ]# {, M9 d5 [) k3 M     //////////////////////////////////////////////////////////////////////////: T0 n2 B" q& G9 ~
     //填充数据, N; W6 n1 E9 u) i$ D
     for (int i=0;i<MAX_INVENTORY;i++)8 h( w3 j9 A$ {6 E2 @+ D/ n$ A9 q, e4 I
     {
. J/ Y8 i3 A. G  M: I; J4 l      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) w; z1 j% d) G. k7 g
      if (!pItemElem)' W( {. `& U. t
      {5 W$ x8 V, w8 [
       vItem.dwKind2 = 0xffffffff;
. \+ v) N$ R4 x7 ?$ O       vItem.dwItemId = 0xffffffff;8 ~/ x0 Y* h" i
       vItem.nIndex = i;
8 F& R3 S2 O# r4 g% |      }else {" m" X2 O$ G* l2 K
       ItemProp* pProp = pItemElem->GetProp();
8 g! ~9 \( Y3 N) ]       vItem.dwKind2 = pProp->dwItemKind2;
! K: H7 @$ a& z% S3 ?       vItem.dwItemId = pItemElem->m_dwItemId;
( P( A8 P0 n7 U; V6 J) ]2 ]       vItem.nIndex = i;. B) [5 B8 v( d8 l$ J2 M5 t
      }  a9 M8 ^! r0 |3 e5 h
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 U# u! ^* }$ y. q. `. j  _
     }1 _, ~: F8 B5 E2 @  N
     //////////////////////////////////////////////////////////////////////////+ G% L  ]# `; d3 s) t! d
     sort(vItem.begin(),vItem.end());//排序$ r  f+ W5 n$ B9 V" o# Y" b
     //////////////////////////////////////////////////////////////////////////
5 Z5 {, J; c' @* R, \0 D, y     //交换4 r* o4 z& w: o1 M) D/ ^5 h. s
     for (size_t i=0;i<vItem.size();i++). I' b4 _0 B& r) g( c7 u
     {
" h9 @! y% b7 ], H      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, o" p' J! c/ P- Z      pInvSort->Add(vItem.nIndex);
& S; w8 j/ I! l* t$ ]3 m     }
. o( p7 I) k9 o* g& Q$ b+ R1 ?$ C     BYTE nDestPos = 0;) r# `" {; r4 J1 a3 t: T
     for (int i=0;i<MAX_INVENTORY;i++)1 s" S. C, u) }
     {
. z( I( v6 K8 F) m5 Y! O- i      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);6 c0 n, F1 g7 \0 y* B
      if (pItemElem)" J( Y' U' o9 ~( e& ~9 q# j, J
      {
3 v) X8 F1 _5 I       if (IsUsingItem(pItemElem))  P( f( E/ m( \- _1 q
       {
2 k$ U0 _: V  \: C        //这个位置无法放6 s4 x8 G2 l8 b1 r$ U  H1 t3 i
        nDestPos++;; |1 \. ]* Z1 l  m! H
       }
. g" A. H: }: r$ N" R      }
  i# j. y7 C: L* F% V* a% n3 V0 j* L      BYTE nSrc = pInvSort->GetItemSrc(i);$ A; ]# @0 @8 k
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);5 Q2 ~% T% ^8 m1 k9 Y; l- `- E
      if (pItemElem): ^& y! ]/ m+ t; X7 h
      {" W' Q- a# l8 `& v, w+ g
       if (IsUsingItem(pItemElem))
0 Q+ S8 ~/ C% p0 I; j8 K       {
: W  v" G: g( D2 U        //这个道具无法移动,跳过
" Q! z: [6 a% }6 \% V        continue;* r2 c0 N! s, K+ ?) w9 R
       }2 a0 R+ v  _2 S' J9 a  l
      }else{
- c! s' |1 F# M$ C) ?7 y       //空位置 不用动6 B( c1 F( U: F4 R8 b* P) y5 v
       continue;8 R1 Q9 Q0 f( K
      }7 W% N" n8 e( G* Z) w  m
      //////////////////////////////////////////////////////////////////////////  J& f3 Y8 K3 M5 c+ G; J2 j+ t7 v
      //开始移动
& a8 u, K; x0 a6 S      if (nSrc == nDestPos)5 R  J; c; R3 R  f/ y& ?
      {
1 N: y- B: P. a7 J/ M1 |; O+ D       //原地不动, Y! A" C" t& R  j, c
       nDestPos++;, C  y( f$ r9 ^- z' T3 z8 D5 K
       continue;
/ s: c( O' g, @. j2 f0 w/ M6 B      }# V& z$ K. c% P, t- E
      pInvSort->MoveItem(i,nDestPos);
4 }  S8 {( u! k1 g# P- H. ?( m      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
+ h) v8 d* a8 l7 K      Sleep(5);
3 a+ z; E, `( {1 s      //Error("移动 - %d->%d",nSrc,nDestPos);
* R2 r8 G# @7 a) h( Z0 M: y" s      nDestPos++;
' y/ f4 q# U9 e7 J' l/ M     }& N0 i' m, t8 k! g, J+ v8 s
     //取第一个元素的信息
: q/ Z! I+ U! V  J& U  {+ v     /*
8 j. l6 b0 s2 t# H( L7 V3 {9 s* Z     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
  _7 |) J3 u9 b! E5 E, k. t; w( n     {
, ?; p& M8 X+ Y      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);0 J. p) a5 w: d! D9 _
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
+ ?, T9 p5 @, u0 _( p) N: s! U     }7 [8 f1 t& o0 f  u
     */  M: O& |  N$ ?* c1 }" k6 Z5 d
    //////////////////////////////////////////////////////////////////////////
6 Q( w7 \+ W  ]& d  E    break;5 c1 s5 p; r- g4 ^/ d% N6 p
   }
2 `4 O: p& J, O" i  }
# v' x7 X! `  Y5 p6 C}/ z( Z% Y# O4 h! ]6 ~% q
m_wndMenu.SetVisible(FALSE);  @) B! p$ f7 b, O
8 j, m7 T( }9 U
--------------------------------------------------------------------------------------------------------/ s' W- m6 U5 V, o4 j* g  _: w
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)( M9 ]2 @8 s+ `' N7 S( `
{
' v  j7 a  c; ]/ R2 |$ `& eBaseMouseCursor();
$ y5 R( _5 q( T7 ]) ]* i- s}' |  J+ Q8 d0 F1 ~) i
在其下添加:
# E+ S& k3 o- I: y4 p9 _! w. ]/ Zvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)9 U' L% J5 c# M7 o
{/ d7 M; a8 l3 D, |- k, Y4 |! Z
m_wndMenu.DeleteAllMenu();
9 C$ s  R3 _$ B6 s! I4 S' g7 w' Nm_wndMenu.CreateMenu(this);
+ ?1 ~6 g' b3 nm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
% P$ h0 `+ x7 l: R( c$ X1 E( Y+ N' T
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. a: x$ |2 M5 P- W+ z{* K, {  I0 e$ L" H. W1 x# e
  //P以上级别才可以删除所有道具' G- T/ D  x- O) |" I
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
+ I5 {" I% x) M% P}
7 Z/ F, L  k: pm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
- l6 N. n" ?( b# ~- d9 D. jm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
, v" d# G/ h3 k9 Z' Mm_wndMenu.SetFocus();7 m0 T. \. Q' r8 q7 P" o# G  q
}2 V) o% }" E$ z
------------------------------------------------------------------------------------------------------------; |; L; t" [. j6 W9 E1 ]' t
*************************# k2 t9 s7 e$ J& f* f5 [
WndField.h文件
& i  ^  ?3 Y& W# Q*************************
; y% ^1 a% H/ U( S) U  S* T搜索:BOOL m_bReport;
4 C# G0 F$ L0 u( A; t8 W其后添加:# ?8 f; c. n9 `4 _# B
CWndMenu m_wndMenu;
  }  R# j+ X" p) R搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
8 i. g/ a0 V6 K9 w! w其后添加:' J$ {& j" P" F' d" r# i* J1 p
virtual void OnRButtonUp(UINT nFlags, CPoint point);: X3 d: C3 _' w6 v0 X- h* H

8 e5 O1 K7 u( _8 {7 O
5 a- K  Y% s4 Z$ Z0 g* Y

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-21 14:02 , Processed in 0.065177 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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