飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1088

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1088
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件2 u: ?% ~8 w, s- M2 n2 r, w8 ?
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' @7 R# T' s) F* |6 a! }: C* Q

! Q: m4 C; [. Q1 `0 q: L2 d. Ustruct sItem
& l) Y0 p* r, s{
. a0 k4 F8 n$ Q  y5 b# O/ lDWORD dwId;
* s- }; X( O0 a* e: m  pDWORD dwKind2;
$ h0 u. X  F- ], a/ G  Z+ XDWORD dwItemId;
% ?0 G3 d+ l6 p! c) Y, GBYTE nIndex;- ^; ?+ v8 K) T/ N8 O! G' c/ [2 k
sItem(){7 i) b+ M) s% u
  dwId = dwKind2 = dwItemId = nIndex = 0;# |$ Y1 T+ l! P5 u; Q1 X1 @" W" Q+ Y
}
, _; ]# c, v+ J! v) S7 obool operator < (const sItem p2)
# g2 y, q2 ~+ y7 L- v{  ~7 @+ o% B& {, D
  if (dwKind2 == p2.dwKind2)
* t2 N) ]1 d# u! j2 T) ]0 G" I: \3 t  {
( R/ |8 T% j" W5 E   return dwItemId < p2.dwItemId;
0 {3 `1 B$ V/ A  }else{
+ E- s' M& t3 |; V/ H4 }5 `; G4 V   return dwKind2 < p2.dwKind2;% ^4 ^: [" n0 G. [
  }; L( A" K) y6 ^0 i+ D/ |3 E
}
+ A. A9 m# a" ~! X7 ]# ~};0 v/ d* ~% w0 [0 r( G# X7 p) a: T
class CInventorySort
+ [, G9 L( [/ Q. `" `" F{2 I" s9 {, U  b; h8 f8 h
public:
. @! r+ E; ^$ c( Z9 z, N# lCInventorySort()1 t$ q7 A) i+ h0 |! r
{$ q9 G+ \; P# t5 d
  m_dwPos = 0;" G# `0 j% R0 n6 }! f5 M
}5 w' E. \1 r8 f$ Z* i8 Q
~CInventorySort(){}/ K* G2 Y7 z" U* m9 o2 u3 I
private:- }% k0 M4 u# ^& R2 y. ?7 `( |
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
% c% B7 h0 S. r- u  x2 nDWORD m_dwPos;
9 e9 ?* _3 R2 E; \public:
& e0 I, F' ~& z) Dvoid Add(BYTE nIndex)4 @. ~4 v! o. Z1 w1 k# A! z
{
5 h6 j" P2 \; k# w/ d) J  if (m_dwPos >= MAX_INVENTORY)
& K4 Z7 u7 x* x. x$ b  {
; a; u3 w. @0 a   return;# ^- n. [5 L. s0 W5 p( X. L
  }
" r+ X1 B& }  ^% a: Q. {. D  m_Item[m_dwPos].nIndex = nIndex;$ V* F) _$ r0 r6 s, p- P2 B
  m_Item[m_dwPos].dwId = m_dwPos;
0 E% G$ W/ g, h  m_dwPos++;
" r0 n6 w/ S& G" N8 z# f0 @7 T' h7 @9 Q}
  X& P- h& E% g$ }BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列1 k$ W1 Q, ]6 r; x
{* b5 F+ G" g2 `4 S; y; Y
  for (int i=0;i<MAX_INVENTORY;i++)4 Y/ n3 G- l) _& Z9 [' h
  {
4 h2 _- ]* F9 |' ?& R3 V   if (m_Item.dwId == dwId)
% U% [  H* E! g# h   {
( ^5 S1 o6 C+ o+ \( D* Z/ X    return m_Item.nIndex;
) L7 ?3 [% s; I: w( k' A   }9 r( h, m) G  {* o9 d
  }
# V' J: M" N) f2 P" |  R  return 255;
, X5 ?7 a7 k5 ]7 P# D}
& K8 T6 p2 E* V7 g: Qvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
4 X- z4 l! g$ @  j3 k, H. x{
7 w0 v# ^3 I$ z2 E  H% y  BYTE nTmp = 0;
( |- O" ~; Q8 d  bool bDest = false,bSrc = false;
& c0 `3 R. u- ^  for (int i=0;i<MAX_INVENTORY;i++)
# p% J3 c! G3 g5 _4 M0 P  {
- g4 r& o* O) b, o   if (dwSrcId == m_Item.dwId)
7 q+ s* k1 {' n( f8 ~- ]2 b4 ?3 T   {* ^0 z, p' v+ \( u# [
    //id相等 则 改变对应的dest和src: L$ j0 Q3 a2 [
    nTmp = m_Item.nIndex;
7 H( ^6 u' P" j7 s- X8 x    m_Item.nIndex = dest;
9 a4 Y$ D5 p9 p. Y7 K4 F   }6 `% B4 h2 }/ P2 L7 @: y( j9 R4 O7 _
  }
4 Q9 S$ A1 D/ v& Q; |' p3 x  //临时数据保存完毕,交换开始6 S  X. y. L; g; f( \- [
  for (int i=0;i<MAX_INVENTORY;i++)5 y6 k, q) N6 R8 u- ~
  {1 j* ^" g! Q7 M6 g4 }
   if (dest == m_Item.nIndex)5 A+ j6 n! {' `, U
   {
$ A" @+ H% X/ V: ]    //id相等 则 改变对应的dest和src
; _, a  {: V* m" ^( h. t; w: }. N$ Z$ z    m_Item.nIndex = nTmp;; @) J" E6 v- o" z6 c+ ?/ m
   }# W0 q# {& K; W* V, p  G
  }! B3 u# ]4 K) P* _8 G8 n
}# U; h# D* X5 H7 F3 c
};
) c( A# o7 R6 c2 \1 d0 u* U-------------------------------------------------------------------------( Z/ F7 R4 {9 s; Q9 q
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )- y3 c" b% M1 P5 u! x
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
8 i" r. b+ [: _- @% W紧靠其上添加:# L; o+ {- W+ P; O  ?9 q
if( pWndBase == &m_wndMenu )* N0 }  C# G# X$ D7 B. _! W
{; [4 X# r; t3 o& y) T
  switch( nID )8 L" d. S+ h  t7 K- n
  {( s; N2 x3 C9 O2 Q# |' g8 O
  case 2:
( [4 p) X  n0 a& |   {
4 z$ j' {/ ?) _1 }# ?2 t8 E+ D    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
5 Y6 ?8 g8 u  N# J/ F- O    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# O$ f; d2 E* G/ [6 X
    {( P# N+ z: T& r: u- R
     break;' {) l0 B+ f6 h  [5 i  E* U
    }
' b4 G5 a; Z$ ~: M7 S7 v1 o- A0 Y    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)1 _8 `3 k& G$ b  _8 f9 m# |7 ^
    {8 x7 i) U( t# m; c
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% E- o5 D7 x4 K( I     if( !pItemElem )
) l& Z0 a! o' f# Y. D2 P      continue;
) g* ~- p5 c) f) {" c7 ^     if(pItemElem->GetExtra() > 0)" m) F% ]! h$ e3 }4 s0 B6 `
      continue;
9 X9 I! ?, i& i# ]     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 5 s& J) l) r4 X% x5 y
      continue;7 N- z/ c8 k( O* Q" x; |# v7 w' |
     if( g_pPlayer->IsUsing( pItemElem ) )
3 H4 B! W5 N2 X1 G& j/ [      continue;2 f; _8 M3 T8 M/ C- o
     if( pItemElem->IsUndestructable() == TRUE )
4 C$ h. S) ?- _3 g* z) n     {
- s3 r6 ^& e) k8 I7 W      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );% N# n) [9 I. A2 S5 R8 ^9 w4 b
      continue;
. d# ~7 i9 |; L: p- i- S; k- O$ B" S     }
) Q1 j5 G7 @( R- Q$ P  g     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);+ q1 a: E5 Y4 e
    }
! y$ ^1 ?$ x1 ]/ P    break;
7 j- w: B2 M# w1 A* S1 F9 @   }
9 P6 D) T) b  v* b7 I# {4 _9 X  case 1:
( V% ~. R4 J) ^6 O/ i: t   {8 ^4 E7 V) Z' n) n7 k8 P1 M8 l0 y# m
    //整理背包
: A, q& i- S7 A* x2 T/ I4 i5 Z    //////////////////////////////////////////////////////////////////////////
' k/ G: e6 ~, X8 m% X3 l8 M    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );9 ~0 O) ]9 }6 s8 f% N) [2 |0 A( H: e" q
    //////////////////////////////////////////////////////////////////////////2 h7 |1 g* S8 c( K/ ~9 X
    //////////////////////////////////////////////////////////////////////////
& W1 v3 |/ h! N    CInventorySort* pInvSort = new CInventorySort;" I: X) X9 x7 {  E# X) q" t
    vector <sItem> vItem;. F" T8 a& n; i" M, w3 o6 C9 |  U
    vItem.resize(MAX_INVENTORY);//初始化大小
+ |% v3 E+ V1 U8 d# p- M2 P- E( z     //////////////////////////////////////////////////////////////////////////
+ r" E# `  s5 L( M6 O% v     //填充数据
0 G% H8 I/ B5 a0 p     for (int i=0;i<MAX_INVENTORY;i++)
" q# G  x' i) q     {
5 `9 F3 V) h) V8 ]0 t1 A8 P9 I0 ~      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% r4 A7 p3 J4 U0 G; R0 a- n      if (!pItemElem)
6 x% n/ l! V# L! Y" v0 e# t      {' {, n$ L: `0 d+ I3 Y) G/ K
       vItem.dwKind2 = 0xffffffff;$ W! f/ A0 Y. ]5 Y) n# t: z
       vItem.dwItemId = 0xffffffff;& m" f' D2 ]! R5 B+ O$ ~
       vItem.nIndex = i;- E$ O* ]1 t& [( U1 O$ W$ c# Z- l  o
      }else {
/ o# i" _- q4 o5 s0 W- [       ItemProp* pProp = pItemElem->GetProp();
/ x. i. y$ z- B       vItem.dwKind2 = pProp->dwItemKind2;
+ d0 w$ Q2 k# q8 R! t! T       vItem.dwItemId = pItemElem->m_dwItemId;
+ f/ C3 d9 A. ^% c       vItem.nIndex = i;
- S; C. G# f' E2 j: r5 `      }6 [9 S; _- M# p# }2 }/ ~
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- y8 f' L! t, D, v  L1 o5 P1 C
     }
$ e+ d/ q+ u2 C( ^$ J     //////////////////////////////////////////////////////////////////////////$ x+ I5 \0 k( H. ^7 l, M6 b# N9 b
     sort(vItem.begin(),vItem.end());//排序1 u: t' C( o# c, y7 v2 \
     //////////////////////////////////////////////////////////////////////////
" |9 @3 x( o5 v1 e     //交换
5 u* P+ v, d4 w9 w/ Q     for (size_t i=0;i<vItem.size();i++)
: v  i, U( {4 u' ^/ K3 L1 M     {
- ^" F; N! q: v1 ^2 N      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);  H( m/ I+ g- O& b" b
      pInvSort->Add(vItem.nIndex);: U3 ?7 \0 ?2 |
     }) u% n  J: c  M5 I/ H& u: }. e$ y
     BYTE nDestPos = 0;
3 |$ M  N5 K, F  S     for (int i=0;i<MAX_INVENTORY;i++)' @/ K: O/ P; |
     {! S1 Y, W& R) V% D' s9 z4 J
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);. ^9 I+ u1 O2 ]' m
      if (pItemElem)
4 s" x9 s( a' m: U      {1 g% c/ m, _" e. W& p
       if (IsUsingItem(pItemElem))
6 G. w4 o1 ?( u" _! w       {
6 u" C* L( h' T* D        //这个位置无法放: a2 j2 R. V* `( J  i! H
        nDestPos++;, @. y) Y8 Z7 n. g/ p2 d( s
       }
5 |4 x6 y2 d, l1 |! G( |' d      }3 I7 Z$ l! u$ w4 V
      BYTE nSrc = pInvSort->GetItemSrc(i);/ I/ |6 W5 [' Y( C) ]4 s- T" y
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);, A- `  m1 M/ f& A8 c
      if (pItemElem)) `1 ~9 q* Y, @* J- W! d
      {! O6 t2 m; j  b* a+ C1 D
       if (IsUsingItem(pItemElem))
: r; e9 {$ \4 ~( E5 |       {
) n# y$ R* _6 \5 q: F        //这个道具无法移动,跳过
7 y) p! Z4 b6 T3 n1 B        continue;
# u8 u# B- q& |& H6 e       }. i" A5 J  f, |
      }else{
0 e" r) Z5 u" p/ n       //空位置 不用动) u- ^- s  [" @/ c4 q/ b- D
       continue;
! h7 n: {. Z* c$ R      }. W/ l1 z' U1 r, t
      //////////////////////////////////////////////////////////////////////////  u# V* `3 ~$ m1 h! B6 `5 y  C
      //开始移动, k0 L, e* t/ e
      if (nSrc == nDestPos)
' s$ g" `& `9 y0 O2 f, L      {' M( {* V) w+ j8 g4 u* M
       //原地不动" h9 Q% ]( U; G+ c" y- I  Z4 n- u% B
       nDestPos++;
4 a) T; I# s# u* t; Y5 }! q       continue;) {& l% e8 o4 l7 k2 {% d- `
      }. J% t0 ?  b6 o9 ^: r+ |* s: g: o
      pInvSort->MoveItem(i,nDestPos);' e+ ~  i% D5 s' O) H. i
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);, |7 ]2 U3 x+ J
      Sleep(5);
6 i: ~3 Y" I3 Z6 o. l" B$ {2 I      //Error("移动 - %d->%d",nSrc,nDestPos);
& L4 ~" }, G- l' C+ ^, o      nDestPos++;' a5 d2 m9 K$ R9 i# [/ X
     }# U) V! q9 E- W- V5 g8 l$ |! d, I
     //取第一个元素的信息
7 B) g0 C* ~; V& `. |7 U% w4 {1 Q     /*
  y% i" N% k2 y+ T( C; R  g; d     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
$ m. f4 }7 n5 N+ W. f0 C7 z     {
- ]( J0 D3 h8 K2 [, {# `      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
# K6 N' y' {% x2 }: a4 ^      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);. ^! A6 P  J( h. e
     }, U* ]6 Q2 U! W5 f5 Z: A& I
     */! w$ u3 }; P# d& q- ]/ J% g$ y  w$ Q
    //////////////////////////////////////////////////////////////////////////
" p* l" B9 v% }7 r    break;& a+ x6 L8 @2 M
   }
4 _; h2 F2 K# @9 k4 o. h+ A8 n$ y4 k  } : T% }4 @! ]6 s6 X# h& l7 h
}' K2 B! o9 }' T5 G2 i8 B
m_wndMenu.SetVisible(FALSE);
/ ^/ f( p7 e  W  x$ r
* p+ G, ?7 ^+ N' f# e# t0 a% Q5 n--------------------------------------------------------------------------------------------------------& K& ^6 R+ W7 P! l" g8 \# c
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
% o$ b- V2 V3 R3 w# j{" }* ^$ H$ v" @* z/ h9 O- w9 H* b5 p
BaseMouseCursor();& s6 Y, K4 F& o( R: l2 j
}
! M( ?2 n  W, h6 ]$ i+ d在其下添加:
& |, g3 S2 M4 w$ d3 m6 {void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)# p( N) j- `" v7 }
{7 l5 G9 u9 y" n
m_wndMenu.DeleteAllMenu();
8 u- h' ]4 V, g; f7 h! M0 W- Rm_wndMenu.CreateMenu(this);. r8 e1 e. W( h% h0 M
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");& I; U/ N1 p6 t: [& X! w* Z
- |. u+ D; n( a) Z6 `; n0 I3 j
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
% A7 @! r. Q0 H' I' m; z* a{
( Z8 j0 f$ E, ]$ f- V* ^. y+ o  //P以上级别才可以删除所有道具
+ o0 I2 E* d) o. |* `  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");/ h7 T  B8 N+ Q* u& z* o8 c
}# _$ w) ?7 U+ q' m' h
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );+ E1 X% A- W0 E9 t
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );6 R7 }* [  ^! ?, ?
m_wndMenu.SetFocus();
5 J8 D" E7 Z/ c# k3 }1 i}
$ ^/ Z0 m% B( @  g* z) T: T------------------------------------------------------------------------------------------------------------
0 h0 Y3 Y8 b& v+ u$ d' Z! Q*************************
4 a6 m- }) b2 i. e; v4 RWndField.h文件: W5 J+ r- ?% V
*************************
( g. V3 {$ I7 l! H搜索:BOOL m_bReport;
. q4 M+ y' J# p  o6 h# `其后添加:
7 `3 \( `- w. \* P' {* ACWndMenu m_wndMenu;
1 f' L  g& m" |搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);9 W$ r2 Z$ q0 L$ N0 F5 x4 n( @
其后添加:  I. e6 z+ m& ?6 {0 D. J
virtual void OnRButtonUp(UINT nFlags, CPoint point);9 V. C; p% L9 v* i9 s( g  I: K

: i- L3 c* B1 W& e" e' l" U& l% |$ {: k  y" V

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-23 05:20 , Processed in 0.104969 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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