飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
0 y. u) y$ |' H$ P( s: j' f搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 M: {! j2 |* f
/ w( l1 Q- \/ K( M
struct sItem* V+ l( l; {7 y4 X' o
{
- ]7 w! J( K  i( WDWORD dwId;
* F6 z: k! j6 b( y4 N2 {* _DWORD dwKind2;, o5 y& h8 w4 \: N0 V
DWORD dwItemId;
" v7 ?  @  }; ^8 @BYTE nIndex;
% K7 D2 o6 C, Y. vsItem(){
( S* r( \  G( o3 |+ z* K  dwId = dwKind2 = dwItemId = nIndex = 0;  j1 e4 ~* V) w7 ~# V1 ?, C
}
0 o" v# F. i% w' J" ^' _3 gbool operator < (const sItem p2)3 R/ L! V; J9 k0 K
{
1 T+ g" g1 R+ F* z0 R9 g  if (dwKind2 == p2.dwKind2)
) n) P! c9 W& T4 i# Q  {, @& }1 x$ ?+ c
   return dwItemId < p2.dwItemId;) ~  J( L7 g" D
  }else{
2 Z! T: T1 Z. [- ^4 _2 g2 g   return dwKind2 < p2.dwKind2;8 J5 ?: [# p1 U4 K2 }+ K
  }
" _! a8 e- j9 W/ C* O}
- P8 f4 F$ ~" o: K+ `: f};
7 }7 Z* B* ~7 ^class CInventorySort& b$ s/ W  C8 w
{* K; [1 |# w1 ~+ ~4 F1 F. D9 _
public:' S$ m8 A) W) Y# @/ r
CInventorySort()
8 N& s( H3 z+ |+ h, ?) R4 U{. r& p6 E, }1 a. u7 R8 _
  m_dwPos = 0;
- x" r3 m2 o7 j) o7 G! j}
0 D/ H  E2 V, C4 T; K- g~CInventorySort(){}7 t( n3 v. r8 D$ p: A# X
private:8 X# V- J/ T/ X( n7 v
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
$ g* e( C2 C9 x! G+ w3 x) _DWORD m_dwPos;
. l* `% u# t" q' N& D/ p+ Vpublic:: m* Z1 `/ b* ]& |6 R
void Add(BYTE nIndex), q) Y  e6 p# Z; {
{  J- \" P! s0 X' G: q
  if (m_dwPos >= MAX_INVENTORY)0 Z$ W" i! V5 J. \6 D( ]+ {. L
  {( B7 a5 ~, T4 }" u7 f
   return;
6 _6 k& ]* l# A- ]% W% M  }
* c* y2 y' B' a, \) k& _6 b2 X  m_Item[m_dwPos].nIndex = nIndex;
! o$ R4 b2 g1 A6 t8 L- o  m_Item[m_dwPos].dwId = m_dwPos;
/ r8 J$ @7 i: f  m_dwPos++;1 m  K& _" R* w7 V
}, J, y& e# ]! l7 |
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列- s& s) D) D# B2 d& Z7 v
{
& I/ t) y7 P! o9 \+ m# E1 N  for (int i=0;i<MAX_INVENTORY;i++)
4 A8 U: f# N# ]2 a  {$ ]3 {8 ^+ Z5 |3 I1 {7 D5 A" u
   if (m_Item.dwId == dwId)
' `5 v: L# t2 X/ o1 N0 S# l8 C   {7 A% V6 G( h* G! L$ q" U
    return m_Item.nIndex;
5 K+ ^' u1 w( r# \% e% U7 H; \   }
  S' r' A! H) h1 V8 q  }6 r! |* O/ N3 _$ w( B
  return 255;
5 u3 z7 N, E7 `' \}& `$ E3 L4 Z% q
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置* g  O5 y& G0 G4 X/ o8 e
{/ J1 N8 H- S$ ?# u5 N- ~
  BYTE nTmp = 0;
$ u  G% R; Z+ x; X3 @  bool bDest = false,bSrc = false;  @8 N" v% O# e* V8 s4 t# U% l- i
  for (int i=0;i<MAX_INVENTORY;i++)* X0 o5 M" k# K7 F) D: l2 Q4 K
  {
, J& P6 e# W2 y' V   if (dwSrcId == m_Item.dwId)
  H* Z* f! o# T( T( J   {
9 r4 u3 ?  \- E7 N0 k  A1 y4 i' c    //id相等 则 改变对应的dest和src. m. ~- [5 I: n" ^
    nTmp = m_Item.nIndex;) \0 j; A) f. q2 r+ f
    m_Item.nIndex = dest;
# l9 R% p+ O6 u% _( e, {   }' W- Q5 @6 w7 H8 h6 h6 E+ `
  }
. _! d+ n6 \" T) @# \* Z! J& J  //临时数据保存完毕,交换开始
2 A# e' z/ \* L' s. a9 I% r7 I  for (int i=0;i<MAX_INVENTORY;i++)
4 g, X' `2 U, l/ }/ E  {
8 z* R; Z" l' b( C' J$ ]   if (dest == m_Item.nIndex)
3 X$ Y/ U# ^- [8 H* l; Y3 O  @   {+ k/ u9 |4 u5 O9 A
    //id相等 则 改变对应的dest和src2 v+ ~# B9 w& I& p5 O1 I
    m_Item.nIndex = nTmp;
# }: x2 O' `1 A: i   }
2 D& ?2 T9 J/ E0 O6 N' `  }
8 f" i, }/ H7 e! W5 Z$ c}- ?, ~3 N) G) K5 W6 k) U7 c
};
- c( t' X! C9 T7 L1 k# N$ X% j-------------------------------------------------------------------------
# U7 N0 E. o' X' [$ r依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ r; \9 |1 b# T# P2 F
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);" _4 V3 b: T3 d7 D0 t( S& H0 e! ~: q
紧靠其上添加:- x2 j) ]0 x: v+ Q+ _9 U
if( pWndBase == &m_wndMenu )
4 S: Y9 S) H" a& ?! H6 n, o{
( Q4 {( h- m" @. H) K9 l  switch( nID )
: N3 Q6 e, }# K% v  {
- i' U( m) Z8 Z: N7 w& Y1 s0 r* [  case 2:
$ f3 Y2 H/ F" |9 j" _3 h4 y* k* c   {
7 o* Y1 o4 N# y, ?; U    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);5 y3 T. j% ?- {- r, V$ c, L
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ n% F3 r+ E% v; _0 Q
    {3 O+ h8 Q) y8 w9 ~7 m  n
     break;/ c- O% p+ L) a6 N8 q. I4 p
    }
% R9 [8 C; q+ a- y' @' {. I5 ^  C    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
# F3 T) ?0 y" s( H    {  n  [- p7 h$ S8 t
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- o# v" {. o/ T8 m0 }  n
     if( !pItemElem )/ Y' ~, x# M4 l
      continue;2 O! E* A! {7 w1 Z! H6 b3 l1 O
     if(pItemElem->GetExtra() > 0)! l" j/ d2 H2 ~( f; n. k8 d; o" h
      continue;* B  _, ]! X4 x( P5 e- @
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
# k2 {9 `, T- E6 E      continue;
7 z5 a$ A1 ~1 i& ?9 O  [% w7 y     if( g_pPlayer->IsUsing( pItemElem ) )' V( g0 }& W8 s, Q7 R6 l1 x
      continue;
# s5 B! v* M' t, M7 [     if( pItemElem->IsUndestructable() == TRUE )
/ p: C6 x! |7 a* j0 K' `0 A4 s2 ~     {
2 U4 r8 i( Q& f2 }& d" Q      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
5 B3 h& u: ]" {9 M  A      continue;
0 I) v* K; `9 R$ n8 H/ J     }
  U  [+ O! y' H. z     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
' D4 c: k4 l% x: O    }
2 b% n8 G3 J" d2 k3 k( M    break;% K+ ?4 x3 c: W; J$ [/ d. {
   }1 f8 U  [7 F: Z- R0 H
  case 1:
: _7 W9 `( `* s& K   {
) \: M3 Y* `: J) r- y' m! W7 `/ l    //整理背包
3 A! v* K/ g1 I% r! n4 h8 R/ W    //////////////////////////////////////////////////////////////////////////
/ x2 m" o' m3 [5 W' ^: v8 x    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );1 B: {/ F" d4 `4 h8 L1 e0 s
    //////////////////////////////////////////////////////////////////////////
. t' }4 ~' m, ]1 M    //////////////////////////////////////////////////////////////////////////( I& F" O% n) [8 l. p" M
    CInventorySort* pInvSort = new CInventorySort;% o" N5 {" L, ^2 A0 W' p& |
    vector <sItem> vItem;9 I; e' H8 I8 V) g1 z& X
    vItem.resize(MAX_INVENTORY);//初始化大小
" H: q$ I, {  o& H9 ]     //////////////////////////////////////////////////////////////////////////
1 P1 q$ O& j" e) t6 P+ B* [1 |" H     //填充数据. T3 h. I. b: E7 A2 a6 F
     for (int i=0;i<MAX_INVENTORY;i++)
5 r7 i' M5 P/ d$ s0 v  m+ t, W0 }     {
0 X6 I- e! m, j" b9 |/ C! F      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);9 A6 r2 ]: o8 v/ W0 I1 u7 \
      if (!pItemElem)( I8 `5 A% o& O3 o$ I0 |) c. u
      {
: J; E( x  H& H+ ]2 m- l) N, S       vItem.dwKind2 = 0xffffffff;* d, C% z; }* L: f) d5 O' g9 h
       vItem.dwItemId = 0xffffffff;
4 c1 O+ e+ a- n1 j' G: E       vItem.nIndex = i;
' t! j4 F7 d8 K4 v8 W. X. f      }else {
6 K8 ]. h& L5 J2 i# ~' Q& a       ItemProp* pProp = pItemElem->GetProp();+ p3 c4 J7 ?! O( b) p
       vItem.dwKind2 = pProp->dwItemKind2;, F; p$ Y4 a& ?* L& T; k+ V
       vItem.dwItemId = pItemElem->m_dwItemId;  |1 P8 Z& z- Q! v$ l/ g6 ?
       vItem.nIndex = i;
: b  `7 r; b6 i, m* u* J      }, U3 I) {8 y6 T9 g0 Q4 Z
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
( P6 ~% z2 B2 R% N2 w0 A     }
+ _5 ~" ^* M' V4 H8 X+ t- m. t7 ]     //////////////////////////////////////////////////////////////////////////
! t) ^5 S" w9 l( b* D0 S     sort(vItem.begin(),vItem.end());//排序0 i* }5 R- p: ]9 q; o
     //////////////////////////////////////////////////////////////////////////
- X/ h" ~+ x& e$ Q, c) E5 J     //交换
4 j2 b# Q7 X/ c3 J     for (size_t i=0;i<vItem.size();i++)
7 m* n, h* q; O* }2 ^" R& v     {* k/ F% S9 r& c3 ~
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 u5 S( X% A: @; E# b  w
      pInvSort->Add(vItem.nIndex);% B* C! }) w$ R* v1 ^: T9 |5 y4 _
     }- p5 u4 d+ r" B$ Z2 p
     BYTE nDestPos = 0;
2 S  w9 Q3 {9 Q2 u6 F4 B+ G     for (int i=0;i<MAX_INVENTORY;i++)( ^. i& G5 u3 s, S
     {! V: x; D/ m' \9 t
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
/ g  z9 f& P$ N7 ]' k      if (pItemElem), c$ b4 @( ?6 o- j6 w; p- [% v6 Y6 A; K
      {
6 R' t" D. u( d- q* R- _1 w       if (IsUsingItem(pItemElem))
& v! t# X; R( I3 D; ?/ s, u' A" o       {
- K( r! D; X' I/ f* s        //这个位置无法放
3 A8 b4 a0 L; I4 D& K3 x0 F* |        nDestPos++;& N- }( E$ r% @' L/ o7 F3 `; `% y
       }
6 @' ]# b8 T- _9 p( T* a: T3 G2 `      }+ k" ~+ A! }& L* W# m6 {! ?& F6 o
      BYTE nSrc = pInvSort->GetItemSrc(i);* W# R" ^3 U( ]$ h9 |8 A) h7 a! H% y
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
; u% i0 p/ a4 h8 |# v- w5 j  C      if (pItemElem)' L2 c( b% s& C' O# Q3 A
      {8 M% v/ I; t1 d. d
       if (IsUsingItem(pItemElem))
' ^# H- R1 h* V7 W: v$ ]/ y       {
$ G$ g4 b7 H8 p6 {, f        //这个道具无法移动,跳过$ Q8 k0 C1 Y) i7 B2 {0 U! T( R
        continue;! A. Y) ~* i, Y  u2 v9 M
       }- t, K6 k& g8 M0 g5 |
      }else{  w& K3 l4 d  Q: D, a1 J* m
       //空位置 不用动
' e: |6 d3 X3 _  y$ P  A       continue;
  o* a0 a0 P, e" P) x. g, s; P      }7 n7 {5 z+ m7 p3 o' E
      //////////////////////////////////////////////////////////////////////////
" ]! s2 r) {2 b% t      //开始移动% l5 t5 [2 Z# B2 i, I7 u7 Q6 b
      if (nSrc == nDestPos)) p% h# [# z- p# ~" a
      {1 R, j5 {0 D  y. k; b3 w
       //原地不动
' v- ]" D! s! L: b: ~# W  I       nDestPos++;9 U9 X0 Z; r9 u. o% F# h
       continue;( q/ q6 s/ A% ?) m3 ~$ K
      }
9 m: t6 Q( w  S: K1 M6 \" K' S      pInvSort->MoveItem(i,nDestPos);. {6 k1 C" N" e7 H- [2 e0 M4 T( A
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);9 a) [/ ?$ C' `' d1 l- a( l: ^8 l) F
      Sleep(5);
4 U$ k; e0 j0 K# T9 U" n* X  A6 `$ k      //Error("移动 - %d->%d",nSrc,nDestPos);* O! n8 X$ B# f4 ?1 _3 l% X5 ?
      nDestPos++;, m1 w3 @9 V/ R8 ~0 c. F# q
     }
. ^; l# J) O8 {1 V5 f' A     //取第一个元素的信息
4 H9 V$ W5 O1 a$ R6 Z2 o9 U. O     /*: ~! h& K* `4 ~. z: X
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)7 g" k8 Q3 N% _8 e3 n- {
     {1 @- e* g/ l% R- u2 `
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
+ t$ H' `& F6 d. |9 z      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);1 N- Y, c7 P& G8 V) C4 L) m8 ]
     }
0 b9 ?! m' L4 h3 `/ t& f     */. L$ w& a3 p: n( P4 i
    //////////////////////////////////////////////////////////////////////////
: g! ~+ Q6 [- H0 f. U: H5 }1 s" m4 Z    break;
6 S/ D( P3 p; q4 x- }# @   }, Z% r1 V- U7 q2 q6 ~% [& ^1 I  _
  }
5 @+ S% a* o, v- W$ h6 \; z7 F}9 i% H, f3 o& o8 k! G
m_wndMenu.SetVisible(FALSE);
1 b# O+ r* w7 V- P1 X5 I
, M/ M0 C1 z3 J- U7 o--------------------------------------------------------------------------------------------------------
! B  y, o, Y% Q% p" z( a7 ]8 R. l搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
6 d) |# i" [0 q! l4 R{
7 Q, r3 i( ~! Q! R8 kBaseMouseCursor();5 p+ g" w  o8 _9 X( [8 V
}
1 i2 q, S" |) l+ i6 |' V在其下添加:
+ X4 J5 u" m1 O- V" L6 Gvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)! ^4 s! S! x! L; y% Q
{4 Y: m% S5 \% i% S
m_wndMenu.DeleteAllMenu();2 l" @0 j' C4 U( c: R0 l2 c, L5 ?
m_wndMenu.CreateMenu(this);
7 T1 u2 W3 {% ?9 `" fm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");9 ?* I, `0 V5 M& e0 s6 a) B7 k

: y6 X$ D: Q% `! F5 \! r1 }! ~if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ s, s. t: g' v. o) X2 v
{
# t2 `  y) O! ^+ _0 s  //P以上级别才可以删除所有道具* O: F) J( H9 z% h; z( G7 ?
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");* t" c- |) w& w7 E' m  [
}/ f4 B4 H$ F' F+ c4 T5 v2 w, v
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );0 p) c+ K6 O, l2 e
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
( d! W! ~* @+ L# Rm_wndMenu.SetFocus();
. M% D. d7 ?3 j& Y}$ f. o6 e5 p/ o" @
------------------------------------------------------------------------------------------------------------+ L# J: ^. R  [3 Q/ v) u
*************************
2 K. T6 y* j2 kWndField.h文件
% l) L) D4 C( e5 x" P*************************
* K* D  X! |" N/ T* K1 q搜索:BOOL m_bReport;) |" g- e- w/ Y
其后添加:) u/ X8 h" Q7 w, z" U
CWndMenu m_wndMenu;6 W9 p0 x. Q. L8 z0 p" y: s2 @
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);0 J( c5 _# E4 u. B/ X. v* W/ g' E
其后添加:' e' o$ u! ]- E. f' z- ^
virtual void OnRButtonUp(UINT nFlags, CPoint point);
' N4 v- m$ S2 u
: }* O) K4 n1 \$ E- H
: u. R: r) O! N/ J5 g

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-13 19:43 , Processed in 0.073439 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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