飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件- H  X+ p- v% w' }
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )3 }! g1 D: ?5 V4 w5 ?' q  e! Z

/ \! F$ |0 o3 {/ N; tstruct sItem
  a6 p1 N# M8 f/ R6 |+ X* u3 ~5 P# |{  B" }6 z/ v! T0 a/ f! {6 U
DWORD dwId;( q; [+ X$ [# ^; i+ F; s
DWORD dwKind2;( {0 [! o6 q, y5 M! m) S
DWORD dwItemId;1 x- m# I/ ]1 I
BYTE nIndex;, N6 b( [9 c* k3 Q) ?, ]
sItem(){
5 d, A9 h2 h" k, }% i& S  dwId = dwKind2 = dwItemId = nIndex = 0;
) A2 {% H/ i, y' O3 s: v% N  _}4 g7 ^  {& J) ^* |  T" q
bool operator < (const sItem p2)
* S- e$ z( s' h2 K7 X) v5 l{
6 e3 F: y; s3 d2 K  if (dwKind2 == p2.dwKind2)
( A- J( f3 B; u% ?9 U  {
2 ?( R% E- |5 P# X, l$ a   return dwItemId < p2.dwItemId;) \* f1 o; J8 E2 k# J
  }else{
0 B  |  Z; |9 l, K! n   return dwKind2 < p2.dwKind2;1 V5 b+ j5 L  s6 ^2 g( u; r
  }
7 K, C& S5 N$ d& q$ Y: h}2 I+ U1 N$ K4 s
};
0 ]1 W/ e/ h; P6 ^class CInventorySort- q. w/ d, d. r4 W- l2 j
{' a2 d: P" F6 U* F* g, R$ c
public:
" z* }5 y8 T* E$ U9 k; ACInventorySort()% |) }5 e/ T! ~
{8 S! ?, ]1 ?4 ^" I. n7 E
  m_dwPos = 0;
, b* j$ I3 Y1 t" a( ^$ V0 ?}
$ ^* H* F, K9 X! N/ b1 r& Q% h~CInventorySort(){}4 E/ Y( Q8 X' l" |/ V9 I
private:
' \. a6 j, L: L8 O% o1 O! U! GsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
7 z' B: Y8 L- z7 v! F/ I# }: aDWORD m_dwPos;
3 r- P1 M, X2 H; N& `public:
. P+ K" {; a3 ~: t9 d5 C% Fvoid Add(BYTE nIndex)
0 P5 w0 Y6 N. s, e9 J, h{
8 d8 d& z& R) N0 `" ~8 q$ V* L  if (m_dwPos >= MAX_INVENTORY)
+ m4 d) Y5 o' z& ?  {* r) q6 s' @# E" k
   return;
" _9 W* h' a; d7 z' n) ~7 {9 c  }' \0 C' {1 b& z  M$ R
  m_Item[m_dwPos].nIndex = nIndex;! s0 b0 q* y. I- c" b
  m_Item[m_dwPos].dwId = m_dwPos;$ X, u2 w. @/ d  b5 g  ~
  m_dwPos++;* h) B+ @( `$ J3 `$ ~* q
}
2 y2 X+ p8 h; F2 K" E9 m$ S% N9 CBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列; G" A& L5 i; c( M5 Q8 C6 k+ d
{3 |6 ?; Y! F8 j' y" h  e
  for (int i=0;i<MAX_INVENTORY;i++)
- H& V, G* V+ J3 v& F7 Y  {  \' N* J* B( v- W6 C4 b
   if (m_Item.dwId == dwId). }. f' ^7 |$ N# O6 C- d8 C
   {( x6 [% f  E. n
    return m_Item.nIndex;
' J/ [/ @( p/ m   }0 a% ^9 n! G  ]$ c. B. s
  }/ e: ]; ]; C& y( o9 S0 M9 X
  return 255;
: j/ S, E8 S! V9 G5 e1 |, C& i}7 t9 a. R3 K& {
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
$ \$ ^$ G* k9 s* r) T: Y: E. z{/ n( ~. R" P5 X8 |
  BYTE nTmp = 0;
7 M" Y. g5 ]4 f. Z  bool bDest = false,bSrc = false;2 r3 E2 F! M4 f3 U  y1 i
  for (int i=0;i<MAX_INVENTORY;i++)
* w* ?# T) e- d# y7 h4 e4 ^: S4 I) i  {5 E' s7 a2 `* x5 o" T/ k2 w
   if (dwSrcId == m_Item.dwId)
& ?# u- ?! D" H6 J: T' ^( `0 e   {
/ i- R- L, S' A1 K! `2 k1 i    //id相等 则 改变对应的dest和src) |- s# A% A6 ?) n6 I
    nTmp = m_Item.nIndex;" F' f1 \6 x5 C3 [+ B
    m_Item.nIndex = dest;
* o7 l% K- C3 n   }
- h6 b" g8 _" s; o* l  }
# a, \2 }1 k& S& N) J) V8 g  //临时数据保存完毕,交换开始& \" Q. P, {6 A* ?" J
  for (int i=0;i<MAX_INVENTORY;i++)- g' n: M, n. w) G" S; H9 e  e5 ?
  {# l) _: l1 Z( a+ v# j- `
   if (dest == m_Item.nIndex)
0 ]1 K/ P& W+ ^3 X   {% n2 U" L3 ~! |( c7 D
    //id相等 则 改变对应的dest和src5 o7 f0 B1 E0 D1 |6 |  x( C
    m_Item.nIndex = nTmp;
* m/ t) e1 j& Q: i* S3 c% W   }
! r* N! _8 g# t% o" ^3 b) O  }" l5 w- B/ H9 C; b
}. K8 @+ `! @: U4 }( W
};& c( J% c; C' i6 R2 Q. c: H' p
-------------------------------------------------------------------------7 ]4 x8 Q: B1 m# R& |* v4 b# ^7 _
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )2 G2 O0 E0 o* K8 F7 K) @
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
. H# G2 V+ v5 c* L! g) U( T  B紧靠其上添加:/ s( B6 }* s$ @9 R
if( pWndBase == &m_wndMenu )7 S, `& L" @( |: Z2 w& M
{
* l$ c" Y' }4 n  switch( nID )( @& G" v8 L' b; a( k1 e8 n
  {
6 x( i. W3 X5 J( c6 A5 \  case 2:
7 A4 [( Y8 O1 [   {
' l, l) [2 G9 A+ d' V    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);1 y0 V5 O* ~% B- e
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; j+ {2 A5 b1 g% X    {7 V4 b, R& c7 R8 c) |) p$ V
     break;; x2 ]* K, J' ^% u: \% D( {6 I
    }
) ^9 F' y7 y1 W* ?: h% O' J    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
2 S. E$ k8 v( ]+ y: ?4 g0 v: Q    {$ A) u8 J' ?  ^6 h3 X
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
. u1 a  a. L( a. o     if( !pItemElem )
7 w4 l$ L3 a/ d, L/ v$ E$ P      continue;9 m( t9 B, |. H9 @
     if(pItemElem->GetExtra() > 0)/ k: L. y* G+ ]- c' ^
      continue;' {* B( F) B- f" a
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
! u6 m. a) ~& J( Q  T. {  O7 q- Y! b  i      continue;7 |9 ]+ y9 o5 R; M1 q, x
     if( g_pPlayer->IsUsing( pItemElem ) )4 ~' ?' k/ r, X+ h+ M( p& @8 r' K
      continue;
1 H1 [' u' ]1 B7 y     if( pItemElem->IsUndestructable() == TRUE )
/ M( Z. k2 H" u# W# C     {
' b# I: e! I, D      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
- S( [& J) u( N" }2 ~, x      continue;$ k+ M" Q' Q( [# w" G, p7 I
     }
2 j8 y& K" t% z3 n9 y$ R     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
8 [8 j+ \3 H4 S) b# i. ~    }
8 ?' v: d2 [$ `# M' ?. s% L    break;
- E0 I! o3 n+ u2 L   }
+ z7 [6 n. _' \! ~1 w3 W* x: e  case 1:, O$ E9 _4 F8 [# A# b
   {
( d+ i2 F8 r% z$ y. Y" K( n7 o, K    //整理背包
" b5 ]1 ?2 ]" v2 H7 N    //////////////////////////////////////////////////////////////////////////
' u( V8 m- k2 X5 Q, j0 F" k    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );5 K" H+ [5 \% Y
    //////////////////////////////////////////////////////////////////////////# y' G( H3 R$ q! R! O1 j0 \+ L
    //////////////////////////////////////////////////////////////////////////
8 A) R3 L& G1 i# @4 x, b/ X    CInventorySort* pInvSort = new CInventorySort;
4 f6 P2 n& \) K7 g+ L    vector <sItem> vItem;8 O4 L2 P. [( h/ P5 W3 _
    vItem.resize(MAX_INVENTORY);//初始化大小
# G: ]( x5 v& o$ k: p0 L     //////////////////////////////////////////////////////////////////////////1 k: e" m& o3 A7 [2 S
     //填充数据
" V2 i9 a4 G- @9 V& X     for (int i=0;i<MAX_INVENTORY;i++)
: h- W! j* A6 H     {
0 D* v$ x' Z, _) _+ i! Z. o      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 T  ?" X$ C& `- h$ T, I( z& e
      if (!pItemElem)
" K% c. G+ d% T; i: k      {  J2 T5 {' f: L& Y* J0 S
       vItem.dwKind2 = 0xffffffff;. n# I2 _/ Y  o8 D3 c
       vItem.dwItemId = 0xffffffff;* W1 _+ ^. ?$ |: x8 L
       vItem.nIndex = i;( z& @( ]% T: q& P: X* V8 g
      }else {
) W. S3 U4 F3 K9 f       ItemProp* pProp = pItemElem->GetProp();
: ?6 H2 t5 E) a: z) ]  ]       vItem.dwKind2 = pProp->dwItemKind2;
1 P: `/ x& F1 H, [+ _       vItem.dwItemId = pItemElem->m_dwItemId;6 A0 X$ y, r- ^' s
       vItem.nIndex = i;* X/ C# {3 X5 p0 V  }
      }+ A* ^0 b+ O$ u% @6 R9 N! r
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);3 ]1 D" m" e+ S( _- W
     }
$ F* {7 K( D+ l2 C# s% G     //////////////////////////////////////////////////////////////////////////
) b" Z$ E  y6 f" [" B" Z& |# w     sort(vItem.begin(),vItem.end());//排序2 w. v# Y) ~6 w% o7 H
     //////////////////////////////////////////////////////////////////////////3 D1 t; I$ `- J; k1 S  i, w
     //交换
2 q1 d4 M6 F# y     for (size_t i=0;i<vItem.size();i++)7 d/ l- ^  `% I7 W
     {
/ r! I! e4 h- S5 K* @  {      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) l& [6 R! |5 D      pInvSort->Add(vItem.nIndex);
/ F, r6 _6 m9 P1 `* P8 |5 q& e! U     }: q7 {0 j: s/ m6 N
     BYTE nDestPos = 0;# t  N! f/ p: P" G
     for (int i=0;i<MAX_INVENTORY;i++)
, G& R3 {1 [6 M7 h- }     {+ s8 Q. b9 n9 \7 g5 p
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
3 p- F5 a, [+ |5 S4 _  F6 s5 ^      if (pItemElem)
9 [" ~3 ]2 s/ K# K' |& F0 W. B      {
/ W2 J6 W# U# q5 ~5 S       if (IsUsingItem(pItemElem))% f! W/ Y& \: Q. ?
       {0 y( C0 P+ A; |  B% _" t$ a
        //这个位置无法放
! `; O% B- _- c& l        nDestPos++;7 @1 Q0 x: t( t, I* n7 }
       }' N; Q3 r8 G$ g* Y. Z3 g% B
      }1 Q% k" u9 B8 {: S9 e) @
      BYTE nSrc = pInvSort->GetItemSrc(i);
: b- {, \# G) w      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);# f2 v! `) `% b( g8 J0 T" ]
      if (pItemElem)
! @" D, Z/ m4 P. W5 Z2 ?      {. |2 p1 I) e- R
       if (IsUsingItem(pItemElem))7 B, k( G2 q0 c4 {
       {: v$ u" j' {2 g9 N
        //这个道具无法移动,跳过  B  Y& o' Z% q5 l' i
        continue;
+ ?4 z. K% [, a  @% C+ n       }( k9 S6 B! F0 I: Y6 }5 m
      }else{$ A" f' Q2 R1 [3 ?
       //空位置 不用动
; F: q) V2 `/ i2 X       continue;6 H; B; ~& f/ \- _9 D
      }' k  b* @5 l' k# a" g9 k7 e) u
      //////////////////////////////////////////////////////////////////////////8 J- J! B& V5 d1 C! r/ S
      //开始移动
/ z8 R) n* d) P' F4 g      if (nSrc == nDestPos)
) B# `+ G* g7 R& c: @& k9 @& a      {0 E3 Z6 ~- I5 @# C5 a$ H* D
       //原地不动
, C8 y9 s6 I4 g0 h9 M/ R/ C) t       nDestPos++;
2 V$ S. V0 t, m+ e       continue;
7 M8 W9 V4 I- p8 K      }
+ M, \  [' u& P) I      pInvSort->MoveItem(i,nDestPos);7 r; y6 [% F, L: u7 W$ v* Q  J
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
9 O. n8 M5 q% u& Y      Sleep(5);
  F* ~1 x1 J8 q1 F, ~      //Error("移动 - %d->%d",nSrc,nDestPos);8 t" |& S" y/ I1 X% E5 }
      nDestPos++;' @6 M7 m% h# @# w6 ]" d
     }  F9 J5 c! g& a* O5 }2 }/ P
     //取第一个元素的信息6 e2 g- E! z2 K
     /*
; j1 h& B. ?4 H% m# g     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff): K+ ~! E9 l2 Q% D, N2 [! m5 ]8 c
     {
) ?. t: n9 l8 J3 j2 k9 S# X      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
4 U" T( e1 K+ i- o& W, ~- g% [      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
6 t$ D7 I4 U! j/ |  ^: ^' b     }  R* r+ x2 O9 E
     */
, L5 S* q! h/ R/ ^( r    //////////////////////////////////////////////////////////////////////////
: i  E. w; {- a1 K( g    break;
. ]/ H5 e- c" J% {1 s4 |   }/ p$ V5 j9 ~1 I2 R( X, d" \
  }
+ s% B$ {3 p6 K' K! t/ d% @" a+ O}5 S+ ~0 R, Q6 H* k
m_wndMenu.SetVisible(FALSE);
( D/ U6 a: s/ E4 M0 m% s
& _; Q4 Z- I* \" w/ t--------------------------------------------------------------------------------------------------------
1 ]- B7 C4 R2 M& O0 h1 P搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
1 l$ @9 m; F* V# C; B$ \' X{% ?( `* c: S; `
BaseMouseCursor();
* d+ B2 Z' f, r2 K8 U& h- s  f}
4 w9 v* N- s1 f  J& y. ^在其下添加:
( o" v: @+ K9 C/ N5 M. bvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)# l# ]' d( p( x7 Z8 p2 I
{4 `3 `( L, `! L$ f, \
m_wndMenu.DeleteAllMenu();7 @( f& S( M! h2 i- R1 i3 Y
m_wndMenu.CreateMenu(this);3 T* ~* v  i( F' L9 y
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");$ E0 E# D) L( j# p/ d
8 e, b" t! t' ]  a
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))8 m" n7 _( z) @4 O  H
{$ x  }" a1 v) y8 L
  //P以上级别才可以删除所有道具& }$ E: D9 R( s8 J
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");/ ]' P% `+ f8 q6 _. D  v3 Q
}
% L( ~! c* i4 @( j5 V9 N- m+ Gm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );- O" V6 j# E5 I# W
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );- [$ B7 E7 g, R' [
m_wndMenu.SetFocus();
* M1 n# `( m/ F8 p' _9 g2 W}
: t& Z: C$ O5 S------------------------------------------------------------------------------------------------------------
  |1 r9 T6 P' {9 O*************************) |# I3 X4 g$ m8 z4 Z+ V
WndField.h文件
" d! S2 Y9 c5 C. W*************************# m6 a$ _; F9 ?* y" x: P/ U* O
搜索:BOOL m_bReport;( \1 ]) ~- c/ ?9 f* K
其后添加:) X; C" D5 w. g( ]
CWndMenu m_wndMenu;; D7 W+ j5 i: m# j; i# I% ]
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);2 g6 v, N4 D2 ?
其后添加:! {. ]; c3 r7 D/ w0 D* t
virtual void OnRButtonUp(UINT nFlags, CPoint point);
' D5 |0 }1 c4 ~" G& e3 }8 p3 D4 \. I7 z
3 E$ N0 _+ g( k- U: Y; a2 U  X

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-11 08:58 , Processed in 0.081820 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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