飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
* X! s& [4 t) u  j$ ^1 T; N; j4 V搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ J8 E' N- n, S
  w# g, c! m! H2 u2 T. M: e
struct sItem
! ^# D; G0 @" ]: I1 h* l; X{  i) p% N) i+ ]: Y) Z% ]+ B9 b
DWORD dwId;
& @2 n$ \  Y2 h, N% @DWORD dwKind2;
$ S! o3 P7 @1 X: @5 p& [DWORD dwItemId;
, b) _  l8 Z# K! D* v$ q, BBYTE nIndex;
' E1 C$ w4 v! z6 _  BsItem(){) G& w' }$ M5 p8 r! t! `. B4 m
  dwId = dwKind2 = dwItemId = nIndex = 0;
% c! x, P. J3 |# F}
, X9 p3 Z. P# ]bool operator < (const sItem p2)# l5 Q& K% {! k. g% h0 m0 d
{
: x: B0 h  r, `  if (dwKind2 == p2.dwKind2)% ?+ z0 C5 j' M  d; r. S9 W8 e
  {4 {# L3 `  }: r6 C
   return dwItemId < p2.dwItemId;
2 I" t' @( G2 m) g  }else{
3 m3 O0 q/ q) ~/ L+ A   return dwKind2 < p2.dwKind2;
( b4 j" D6 i4 f3 v6 Z  }. l. U9 O; o4 Y
}
' |  T$ Q5 i6 V% |( g};# Y; m& s6 y. M7 S3 t8 Q
class CInventorySort2 P$ d5 G2 a# M0 N" V; ^* N
{% b8 ]* J+ N) u. @8 }
public:
" o0 p( M+ A4 V1 P# c/ SCInventorySort(); o& M- V) A( U  x( h5 b3 v( _
{
( L1 }" W+ Z- h( U* _6 _  m_dwPos = 0;
: u/ r/ `1 y8 X, M& R# z}
& f+ w# l0 B) e8 [0 b~CInventorySort(){}
$ u) K7 d6 J$ A9 C* m  dprivate:5 u! r: h' Q0 D% v# v. T
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息" |2 f6 j0 d6 u! p
DWORD m_dwPos;5 F: y" z, S& R: h9 @. R
public:
8 w* z( E- x* b  G- fvoid Add(BYTE nIndex)$ P0 {9 `4 |& e0 ]  o+ x. z- |
{
) {. z/ j$ J% i2 }4 f3 o. {  if (m_dwPos >= MAX_INVENTORY)
9 F7 E; c* v* }3 ^3 {! [7 Y7 g7 l  {
; v! D! g  [+ ]$ z! k$ ~5 j   return;
/ q$ i$ N" V# \6 l" q' o  }
) U% {/ Q5 w" t# C" ]' w9 v( P; t  m_Item[m_dwPos].nIndex = nIndex;
/ _' J" V1 [+ F0 r6 c  m_Item[m_dwPos].dwId = m_dwPos;
- F6 k+ _" v5 I8 O3 {) W) S! {  m_dwPos++;, Y% g# X. g( A* h# g
}, R& j8 I3 j" d1 O/ I+ p4 q7 }
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列# B3 z$ x" Q# `% e; H
{
. X: f$ @8 b% {2 ~1 Y2 {1 s  for (int i=0;i<MAX_INVENTORY;i++): Y. F; M# M" |/ g
  {) T+ N/ a+ X* [% F$ v, {
   if (m_Item.dwId == dwId)# ~( v8 e6 {. D) x7 q7 n7 `3 v  B
   {) G' l" k) V) {& |, h
    return m_Item.nIndex;; E3 l* p/ B3 }3 ?2 O: Z) `
   }9 d0 q3 ?" o' t# X' G
  }
: ?2 D% n' @/ ]5 \! A; X4 @  return 255;' `% Q( k' ?3 c* Z
}
2 C0 H' I" K9 W5 L' fvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
9 X; r) o* d! v. k$ P9 Y$ o( v, @{
# U  O$ Y4 g1 X, u  BYTE nTmp = 0;0 \1 b9 a' k  T* [, }
  bool bDest = false,bSrc = false;$ {( a7 ~. X$ [4 e% I2 V% V. |
  for (int i=0;i<MAX_INVENTORY;i++)
6 f. z3 |9 v$ z  {; E3 L  e: j$ C. d
   if (dwSrcId == m_Item.dwId)
0 G9 s, j1 J+ o0 ]! _   {$ u* _" E" X6 w* g" u, C
    //id相等 则 改变对应的dest和src
5 \: S8 c+ k9 L- B2 E    nTmp = m_Item.nIndex;
. _7 D( Q$ `) t    m_Item.nIndex = dest;% @5 p, |/ b, M, L" H
   }! ?) i. s+ T6 H" j
  }
0 ~6 @1 Q0 p8 _+ D+ E  //临时数据保存完毕,交换开始8 @. O% `! ~: D5 O
  for (int i=0;i<MAX_INVENTORY;i++). |: G, _2 M$ q$ X9 h
  {5 d; c- s+ S/ p9 |2 J  }
   if (dest == m_Item.nIndex)* p; P% V* ^' {+ ]' ^
   {
% y& C3 r5 v. R    //id相等 则 改变对应的dest和src
5 i+ Q: Q* I6 b8 ?    m_Item.nIndex = nTmp;
0 F. g$ e$ w9 d   }% h. c3 C7 h; G
  }
8 Y5 W& M) H, N4 K' P. m% Z}- L0 r* Y" O& \9 a$ G& ~
};% e: r' c6 H0 V  C
-------------------------------------------------------------------------5 m2 l( A% T* R/ i& j: Z
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )5 r$ A' C1 Y/ v
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);1 j+ B/ u8 P4 E1 P1 u0 q+ e
紧靠其上添加:" M! [! d( c* K3 M/ n9 A
if( pWndBase == &m_wndMenu )3 O4 V4 U/ `4 H$ N
{* A$ I6 y, q# `) t4 m. b
  switch( nID )0 X: r: k9 J0 p9 Y* N
  {( ^2 I3 r) B1 a9 n3 I
  case 2:$ i2 M8 W! f4 t! G' [& Q
   {
# `2 D* I) h/ _$ L* p6 K, i    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
3 L9 b6 D7 q3 T7 N6 l& t3 ]6 s: |    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
$ x6 D: O# ]' j    {
4 V1 [8 l5 C, O* Y) B/ Y$ H     break;
4 A' \9 e/ K1 x+ U; l    }( s( y! T; H" e  ^# X& ?2 ^
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
" T3 S6 i! ], X( E4 L" d    {& A& D4 Z6 ^6 u! {5 p6 f  s
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 ~  }0 L/ E8 v% `/ E) V" V     if( !pItemElem )8 R% X! B! ]# ^- m# R
      continue;
9 {( [- l& Z8 P+ C( m     if(pItemElem->GetExtra() > 0)
: L5 c& L( c! Z7 k0 }, F      continue;" ^  v% B9 ~& n0 \. F4 H
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
1 F- H2 d' c' p      continue;
$ r. x0 B( C) n$ b     if( g_pPlayer->IsUsing( pItemElem ) )
! ~# w% ~7 ~3 h6 |( G$ v/ z7 }1 g" n      continue;3 B+ Y! [# [& O8 S0 u; N
     if( pItemElem->IsUndestructable() == TRUE )
# S4 @- R5 h( Z# ^8 N     {
9 }9 E9 k5 I1 n6 m+ [      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
; z; _  k) ]4 X. p  Y8 d+ C      continue;
7 ^. `0 a5 B4 P% a5 Z     }
5 L# l  ?$ }$ p4 \. S     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);+ |4 k- c2 N& D( z' ~
    }2 d* e$ J4 n- f. C
    break;6 I4 U3 C! L+ ?3 u; F& _8 r
   }& W# _  t( _- P; t$ K  r
  case 1:8 g1 Y, {- F5 _0 w3 x
   {
9 G3 [2 Z& ]1 D/ h3 d  x" v    //整理背包- @3 e) `" _) q& {. |& M
    //////////////////////////////////////////////////////////////////////////+ ]5 Q/ {, w# `  @$ ?% ]
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
! a% {/ \% ?( j$ o1 @- o    //////////////////////////////////////////////////////////////////////////
, y6 r1 m( k$ w* _9 m/ H- i    //////////////////////////////////////////////////////////////////////////) T/ M, j. L; [! e4 q
    CInventorySort* pInvSort = new CInventorySort;
( E  M) I6 {7 j1 s: o    vector <sItem> vItem;: t( }9 @: M+ K& p- m
    vItem.resize(MAX_INVENTORY);//初始化大小
. M% B" v- F- v" X: b     //////////////////////////////////////////////////////////////////////////" u; w( m5 X" Z8 K
     //填充数据
9 m: q4 T) y% F9 _# }2 s2 B" B- q     for (int i=0;i<MAX_INVENTORY;i++)4 @* e+ ]/ h3 A0 K. {
     {! V# |* b' x; D  ?3 \) E
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% ~1 z* J% p& E; X! C1 t: G      if (!pItemElem)3 H4 S) |; ]! G. }& M8 V; @
      {2 w) P1 ~2 X, ?( r! r
       vItem.dwKind2 = 0xffffffff;
9 @. m& V: z5 F- Z6 K6 ^       vItem.dwItemId = 0xffffffff;
+ {% M( W3 ~/ R% G/ J% ^       vItem.nIndex = i;
" A( T+ R4 q  w' _      }else {$ Q) j) R& S0 e* }
       ItemProp* pProp = pItemElem->GetProp();
2 I% U2 t4 }3 R, O. G$ x       vItem.dwKind2 = pProp->dwItemKind2;
% S3 b+ k, I, Q' E4 J$ w       vItem.dwItemId = pItemElem->m_dwItemId;6 e# q9 f5 x/ ^: s0 u, T  F- v- ?3 m
       vItem.nIndex = i;
! F2 t+ Q* s, e/ ^. j- |; y      }# q2 ]6 F7 k3 A+ A3 C
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 T# w- s) e: s9 ~+ f& [. X6 c/ Z6 n8 ~
     }7 B' V8 y% z# v6 `8 u0 E9 Y
     //////////////////////////////////////////////////////////////////////////8 B4 d; q( K6 m" ~4 u5 g$ {
     sort(vItem.begin(),vItem.end());//排序. M  F; P: C- D4 V
     //////////////////////////////////////////////////////////////////////////: Z+ Q' Q  F% `  }. r
     //交换6 A; G; ~4 ?1 \3 D1 P" S5 P
     for (size_t i=0;i<vItem.size();i++)! X. o: h6 `* e* Y0 C7 R1 v$ m/ O
     {
; C# h, m& s* a* P& W# u4 v      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# z" q; o. e* Q) B+ ]! v3 _# q) ^      pInvSort->Add(vItem.nIndex);1 n" j8 W7 |: P
     }) s5 l3 K* h$ i
     BYTE nDestPos = 0;4 s3 `/ {, G+ l) Q% m
     for (int i=0;i<MAX_INVENTORY;i++)
- i$ Q) _2 N! R8 c1 O9 \+ n     {5 C! S4 N$ \, _! _7 M
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
7 h) n+ {) i! W) M2 C0 V      if (pItemElem)/ ~6 t/ n3 Z0 o
      {9 P: V# \  R2 h  M2 M+ B
       if (IsUsingItem(pItemElem))
! L) n% p" ?7 S  m       {- F& A6 z) y% X1 \& v! H! e
        //这个位置无法放2 d+ m8 N7 L3 v0 [; D
        nDestPos++;
1 i" g' `9 r$ K       }8 _3 E, C3 z# i3 u6 M0 d2 T& v
      }
1 Y& H: {1 J) y/ \! e      BYTE nSrc = pInvSort->GetItemSrc(i);
. q0 B, ^$ g+ \: p      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
  @6 a: f3 Y, N; n3 j/ i1 g" m4 K      if (pItemElem)
! ~3 _5 I3 H; h5 s9 o! h+ ~      {
" U4 l; R$ H% X1 ^* i' [+ J5 ~' L       if (IsUsingItem(pItemElem))
+ J/ |/ K  x; z       {
- D$ }6 R9 ]3 |$ n. t  y        //这个道具无法移动,跳过2 S& g( M9 p1 b/ @1 @) K- n- [
        continue;4 H7 D; }4 r& p; [: W
       }
7 O/ s4 r4 a: Q$ R% t      }else{  L* g) x! e* z/ k
       //空位置 不用动" ]" Q) q7 x4 |- z9 [% Y# F
       continue;
" T& ^. ^, R  v. c2 y6 c' D      }  y( P$ a2 ]/ N3 n$ b
      //////////////////////////////////////////////////////////////////////////1 ^$ P  V% |6 U5 i) f& c, r* j9 i
      //开始移动" `. @2 T- b' r0 c: K0 W7 ]
      if (nSrc == nDestPos)9 x0 Y. p5 a; l! p
      {5 a4 ^' O0 K  e$ ]; u* Y
       //原地不动
( c2 X5 S; _) `8 G4 r9 Q       nDestPos++;. W& y) ]+ ~$ N
       continue;4 N& O  x4 ?5 u+ }2 w
      }  x  D! s9 G+ J9 @& n. Y2 k2 S+ W
      pInvSort->MoveItem(i,nDestPos);
# C* Y9 b. l" ~8 [" ]& T; V      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
$ r  |2 h$ G& a: S      Sleep(5);
* x0 O  @& ]! ]  y      //Error("移动 - %d->%d",nSrc,nDestPos);
( w" f% Q& E- k3 w3 |      nDestPos++;
5 J- }* P( b7 Z, s     }2 h, N( {4 k# p$ K+ ?2 `
     //取第一个元素的信息' c/ |" ?. x. g$ e2 F; C: X9 U# D
     /*: h, ?, T; R/ c: G6 _
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)- m* B& P: S& n
     {5 i& Q, x# F$ N1 f8 i8 a1 F
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
  K2 a; G/ G. K+ N( \3 q1 P      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
) q- b" C7 n8 G' }! I9 V  \     }
% @+ M* W+ j7 z. }0 F     */9 f9 S# U( n' C, u6 d
    //////////////////////////////////////////////////////////////////////////) \, n3 F/ A" A* u% x3 c
    break;
6 I* F% C3 t' A* B3 O! a% H  a$ y   }: Y) e, n! W) L: o/ [8 h( H- U
  }
2 L0 ]; g) O# i  ?/ G) j}
3 d+ F1 |9 b- m7 J+ `m_wndMenu.SetVisible(FALSE);! n( P' }# |/ @9 k; M( @) r) s

3 J( U& ]2 @' g" |( A--------------------------------------------------------------------------------------------------------  g$ i2 {& m: N; p
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
% j1 I; r7 U/ ?0 a2 z{
8 O0 r7 G1 p& _' Y9 h6 s8 JBaseMouseCursor();
! M5 R& E, e7 c9 S; B. f: s}  {( ~* G6 T1 ~0 L0 \
在其下添加:
) H) i0 o0 h5 z/ P" U, ^1 Nvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)' n4 x- d4 n! w% M1 ~4 {
{
( M+ R; x5 R4 |( c" fm_wndMenu.DeleteAllMenu();
2 K8 ~$ W, J6 q+ u# C# q: ?m_wndMenu.CreateMenu(this);
& s% [3 Q, q# N# ?4 W! ~8 im_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");! c( n6 r; k. U: V! t1 ?1 x" R- _

- y0 z9 L/ T" N! w% Hif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); p" x+ h0 e6 a7 S( Y' U: t: ~% [
{
% z+ }+ q6 u' X3 z3 y  //P以上级别才可以删除所有道具8 X$ ^! W/ T' b" ~! j5 n( X
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
% D( j/ T9 l- l) ]7 R8 H}8 E. D! M/ c) x
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );  N1 I) j) l' U% F' @
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );7 [2 T# V4 i) A  t
m_wndMenu.SetFocus();
( f$ f1 H/ G6 D! P) u  D: h}6 p8 l2 L- `) \+ C7 h3 t% x8 z3 B% r
------------------------------------------------------------------------------------------------------------2 D( W; g0 |, \3 u
*************************: k( f( X/ _" n& h4 G+ |
WndField.h文件( Y6 Z) }7 Y9 x4 [
*************************' N* ^5 k0 Q3 U! c
搜索:BOOL m_bReport;
& W# e3 k) B( j& {其后添加:: y2 O- y/ G1 N) a/ C0 E
CWndMenu m_wndMenu;
6 x# P" i" N+ U7 E; y搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);9 D; m5 ~# Y+ _9 A
其后添加:
& C" O% }3 t& Y3 Pvirtual void OnRButtonUp(UINT nFlags, CPoint point);- j! _3 b& R% K+ q
0 W* _- D7 V/ `0 f6 e5 k  V

' H% s2 N/ h9 ~* `) u, d

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-11 12:07 , Processed in 0.082152 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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