飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1094

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1094
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
2 x) D+ |" a4 U2 x搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
& d& d, a! r6 Q9 v0 n/ i3 q5 x/ w7 s4 D1 h8 D4 n6 m1 R& K
struct sItem
: x* m6 R# K8 q  k' Y+ }{7 D! {' M- _; B3 K" a1 k3 [" ~
DWORD dwId;! m* d5 w, j# U& V+ q
DWORD dwKind2;
/ n# r3 a0 c, }# o) PDWORD dwItemId;
# `! E% {; `* q  E) `9 E+ V8 ?BYTE nIndex;
" @1 J# R' l* y0 YsItem(){9 O8 y6 p- m& T3 A
  dwId = dwKind2 = dwItemId = nIndex = 0;3 a& J& ?) ?# `! Q" ]% c
}$ @4 V: H1 O  B& {9 ?4 f
bool operator < (const sItem p2)
# Q* N0 W4 p+ _  Y3 ]{" u& E# ~; l* y6 l4 g
  if (dwKind2 == p2.dwKind2)0 b9 O  S' x8 T3 v* t3 w
  {
/ T" T2 e  R  B8 W4 `2 s   return dwItemId < p2.dwItemId;
4 t. r& b2 c( a4 K) ^  }else{2 }+ C% ^0 ]. Y% F5 J0 e
   return dwKind2 < p2.dwKind2;
; b( ^9 f+ l. @8 r  }
0 c: `7 v  {9 c1 G' V; Y}
' z' p/ n4 w+ t9 N! T, E/ ^2 C: p- u};
* U0 ^% v- N7 m* @$ t, ?; Fclass CInventorySort! X. |! P: M' ]: b, [) o
{
8 L5 P; ~' u3 U5 y) Ipublic:
5 p+ o. Y9 X7 }$ {7 ^" {CInventorySort()
  K6 \; G: V  E6 {! h+ |3 L' ~; ^{
7 O+ o0 @0 V( W3 y1 a, t8 S  m_dwPos = 0;3 E0 r4 C$ G$ e. U
}. }1 M7 W$ i  V
~CInventorySort(){}4 j" [, I5 L7 S8 d- _  U6 _
private:
2 A5 z- c1 D  i$ OsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
6 D# D" K" O, U! KDWORD m_dwPos;
. A; ^& {) U/ ?) Ypublic:
  {$ |  v9 |, d& Gvoid Add(BYTE nIndex). d2 k9 i% d1 L8 P
{
+ x, o, l7 K/ i1 ]6 D: c  if (m_dwPos >= MAX_INVENTORY)
( A& Z2 O" M( b' g  {0 F, O5 E$ q! z
   return;
! J8 J1 ?! `( _( f: M  }! E! Y5 V0 D, i0 Q
  m_Item[m_dwPos].nIndex = nIndex;
4 I3 _3 D7 b/ y/ r  m_Item[m_dwPos].dwId = m_dwPos;& u4 _* P1 [; r; v+ ?2 E
  m_dwPos++;
; D5 Y3 g3 @6 J+ p. S- n" ?}% j1 O9 I2 j8 Z3 L+ E/ {
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
. q! I3 ?) o- ]6 N{
% h& ]' h8 A7 C$ u9 N3 J, p  for (int i=0;i<MAX_INVENTORY;i++)8 C, _! }0 o! [- z
  {
- l( W- Z+ j7 m: [* I4 m   if (m_Item.dwId == dwId)5 f% F" ?$ k; C$ U0 m% d( v, P1 c2 M
   {6 K/ k! m1 m) @) |3 T
    return m_Item.nIndex;' L$ F, H0 x0 b! w& I  }) _! a
   }
. M. x0 s% [, y# _  }- P5 y2 d2 Q; [: O- t5 y$ _
  return 255;! m" Q% L. B* J, ^
}
4 s8 c, G3 f% Z/ o+ ivoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置4 U8 s, x: g" }% j) s" ?( v9 n
{4 F% U- _4 a9 [
  BYTE nTmp = 0;4 q; G/ n8 G" [+ G) Q6 M
  bool bDest = false,bSrc = false;$ }, d* |/ J7 v6 m
  for (int i=0;i<MAX_INVENTORY;i++)0 C- F4 I# T9 I% x+ J
  {
0 j) ]0 e3 i) x3 S) \/ g6 K   if (dwSrcId == m_Item.dwId)
7 U( I: r0 ~( ?! V- K. T6 h. x   {
- R$ N; p  i% U3 ~    //id相等 则 改变对应的dest和src
% C2 p5 M0 K" [4 O% Q1 d    nTmp = m_Item.nIndex;; E% p, B! U8 N' P: F& M9 H
    m_Item.nIndex = dest;, W% B( ~: F1 S3 f7 X6 E( o0 E
   }
9 x+ G, n3 J% G0 q$ z7 S, e1 q  }
7 @3 C- ~, M  k  U0 W3 f6 m  //临时数据保存完毕,交换开始
: v! g' ~$ w. k  for (int i=0;i<MAX_INVENTORY;i++)$ v4 v7 \- x2 K  R" W  q
  {! `8 ?- a% v' i& S, q; z
   if (dest == m_Item.nIndex)2 W! X% A" U& j9 Q, s, @3 ]+ i0 U
   {+ l% G# q# w1 e
    //id相等 则 改变对应的dest和src0 e" b1 O9 a$ u9 {. Q
    m_Item.nIndex = nTmp;
' d, n' a) o% g# U- J% n- i+ k   }
' j2 }% W& u- u# c  }
. X9 M  @) p% ]" C}
4 o7 [9 s" b+ R4 a& s9 n9 g. }};
; ^4 T/ f- `/ h/ s( g" I9 a-------------------------------------------------------------------------  E  o" o1 W+ m: R6 F6 p
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. s+ L! R, {5 l3 ]2 D% ~0 O搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
/ D+ X$ H8 _, E8 B' V+ e紧靠其上添加:+ i6 ^. z2 i( t3 [
if( pWndBase == &m_wndMenu )
9 ]; q$ m1 ?/ t' j* R& W{0 I) K7 R! `0 M, A
  switch( nID )
9 Y; S/ K7 f; |0 j  {
$ u' i  f. u* r( `% ~5 A  case 2:2 Y: _% {/ d6 W! x9 ^" z
   {
, Q1 u' Z& A7 L    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);3 A  G. z2 Z* [
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
) E, _0 @3 n4 p  J2 E1 n    {% l' n1 T. d0 ^6 n. M' ?" x' \6 g
     break;, g, T& W. _" a. C+ e8 j8 e4 Y
    }  g7 q3 a; t3 V7 C: x. h
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)8 K5 c% o7 X& a% S. I/ @
    {. G: K7 _/ K( Y4 X
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! F" u6 X5 Y6 ]3 z* F# l/ g5 c7 p
     if( !pItemElem )
) W7 M% H/ I6 u& A1 n8 I. J7 v: C      continue;
9 [2 M6 @) @$ G% l! l4 K5 b  P     if(pItemElem->GetExtra() > 0)
# G# U$ E& f7 Q3 D6 I( N7 [      continue;6 ^2 R% C$ s1 _  x1 z/ H* j
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 8 I* h9 d  S8 [* v3 u+ I' ~0 m
      continue;
% z5 y0 ]4 L& d( s! E3 A     if( g_pPlayer->IsUsing( pItemElem ) )+ C/ V' k0 F- y' r( v( t
      continue;
3 ?* _. |6 a6 x+ J     if( pItemElem->IsUndestructable() == TRUE )
3 G5 g7 S% ]% d* }     {3 c7 P& i5 Q( ~% e
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );: _- Q% D3 P% V' _: ~$ C6 G
      continue;
; R, L8 F$ M6 i$ p     }
) s0 Y/ M( b: N1 Z     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
( y' p/ c( h1 y# {& N+ F& r* h    }
; l, d( \( r5 \2 A; p8 I    break;7 X: ]) j! K1 f/ m) Y1 x1 x+ t) }
   }* a' ]$ |. W' v6 x$ R
  case 1:
: ^) x; R/ v4 D   {5 i' @8 Z0 t: S( H$ y5 }
    //整理背包
( Q6 W: y8 E, S* H! v    //////////////////////////////////////////////////////////////////////////
8 v! c" N- z+ }* o    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );8 l/ s* _- Q' z. q3 Z" A
    /////////////////////////////////////////////////////////////////////////// ?6 t& h+ u3 ]! S' J+ R/ y
    //////////////////////////////////////////////////////////////////////////
" T' d$ o. g0 K- C/ `  Y* Z    CInventorySort* pInvSort = new CInventorySort;
9 `2 t& `7 j) }8 m    vector <sItem> vItem;
9 e$ ~; G  ~, E7 F% V' H    vItem.resize(MAX_INVENTORY);//初始化大小3 K$ R6 @: t" ]+ P, g7 G- k8 ?
     //////////////////////////////////////////////////////////////////////////8 q8 p( I5 q7 U4 }9 X
     //填充数据
+ |. [8 n6 \$ a* M1 \# V- |     for (int i=0;i<MAX_INVENTORY;i++)) F8 }/ I- w  J# _4 @' V! j
     {- [7 ^+ X  l. O, i% r8 C
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& |! o) ?8 O" B" _
      if (!pItemElem)
6 f% O+ h* C0 o3 F" K  K7 L      {
$ m2 W( c0 l2 V$ s! j, U2 }       vItem.dwKind2 = 0xffffffff;
9 s7 n" r" ^0 D% E. C- f3 X       vItem.dwItemId = 0xffffffff;% w' `, J7 B# V9 j8 ~, E7 r4 d
       vItem.nIndex = i;
) l, d# Q/ U0 J# z      }else {. Z- H2 d5 L5 T7 t
       ItemProp* pProp = pItemElem->GetProp();( K1 j. k/ q/ @+ c& l# a2 v
       vItem.dwKind2 = pProp->dwItemKind2;$ r; ?' i  d' E" a- |9 j% D% L
       vItem.dwItemId = pItemElem->m_dwItemId;
; i1 T8 a" a8 {& \6 b       vItem.nIndex = i;
* g- B. n% k; C7 |& L, G* Z+ h      }4 m1 I, D# a  |5 z* V
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 ^% ?0 e6 O9 o% B" f7 L5 r     }
  c  j9 L$ M$ I1 y7 Z; }8 P& I# i$ j$ E     //////////////////////////////////////////////////////////////////////////4 [" u1 @- ^% V0 O2 Z$ ^2 R- L
     sort(vItem.begin(),vItem.end());//排序( C% w2 ^( W2 \0 {6 l: ?* j! q6 c
     //////////////////////////////////////////////////////////////////////////9 i6 P! A  y8 e7 D/ v! h' b" x
     //交换
* i: A" a+ @+ i0 u+ i! a     for (size_t i=0;i<vItem.size();i++)% `: m9 \1 T4 ?: C
     {
* n' ~9 w2 T) l3 w6 Z/ w" N9 c- ^      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 T7 }6 x9 a! G
      pInvSort->Add(vItem.nIndex);
. f& \4 Y/ B: [0 N7 s. S( ^     }' `" ~& l# N9 |- F" o
     BYTE nDestPos = 0;8 m+ t" l; B/ R4 V, ?9 m
     for (int i=0;i<MAX_INVENTORY;i++)+ H& ]3 l0 s( }3 `+ }  J
     {4 u7 w" z9 {* S8 J
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
2 i8 u9 \- ?! V0 G2 Q      if (pItemElem)
5 \) b. \9 P3 U  y% a      {
& o! G) E  y: N# z6 b       if (IsUsingItem(pItemElem))5 h2 e6 i$ i3 C7 Q: B& I- w; I& T
       {) p! \# O6 m1 t, Y
        //这个位置无法放
  U1 l2 ?. [+ i! j; {; D$ R        nDestPos++;
; K7 C: j0 T4 X! M1 s       }
8 b) {9 a% I2 U      }
$ F" ?/ f8 x) z' ?9 b0 n$ j      BYTE nSrc = pInvSort->GetItemSrc(i);6 O4 \/ S; u" d) u, U
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);' K) K( H0 l0 E) T% p! k
      if (pItemElem)
4 p( q" r) y& }0 R8 ~8 L1 k+ F      {
. a+ G$ V, v4 ]$ [       if (IsUsingItem(pItemElem)). q8 R& j$ |% i6 D0 J( X
       {
. u  n& l# r! m! L2 j; I* o1 q        //这个道具无法移动,跳过
) T8 M& s; W  Y; _6 L  V: G        continue;- n+ j5 ]2 M* h0 K$ |
       }
. c. e$ u$ b+ o- L      }else{+ E7 Z& n# V1 j7 i' z& n2 Q
       //空位置 不用动
+ u8 G3 [9 K5 G0 A$ y: ]9 G5 S       continue;
7 \5 Q* t3 t6 w/ F      }3 [% U2 w$ g4 i8 ]6 L
      //////////////////////////////////////////////////////////////////////////5 d" ^: k2 }$ i. i6 @
      //开始移动! w, Q7 \, ^. j/ L8 O
      if (nSrc == nDestPos)) i1 Q' `5 y- Z2 I3 l' l
      {( w; _4 V' b/ J; V
       //原地不动
4 V/ t6 x" q# E2 l# f       nDestPos++;, X2 A, W: k3 `. ?6 K6 K
       continue;: Y/ x+ @' n+ g' L4 Q4 j$ L
      }
8 x2 [' S4 e0 M5 e2 J9 q- V* V      pInvSort->MoveItem(i,nDestPos);
  n7 g# v! V8 M) N% R1 t2 I! N      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
9 b; D2 q7 c& @) @$ n( ?      Sleep(5);8 ?* f; n: I; c7 Q) n0 N
      //Error("移动 - %d->%d",nSrc,nDestPos);& j& h) _4 T  E) u  E" {
      nDestPos++;8 M- R1 R- h) j8 ?" d5 F* Z$ P
     }# V) J  `% ?  u; h
     //取第一个元素的信息
# r* A! [9 \- n& Y+ [     /*
  V0 V6 q4 _* F: `5 z- C' V. R     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)  F0 ?7 J0 }7 v+ w& h! _+ |- C
     {
, z  s% u# m$ e# o5 \, i7 O0 p      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
+ Q! }4 j) j& q; n$ Q      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
( k. T% j* [& b     }
6 z' e5 `2 G8 }! o0 {/ m# ~     */
9 g# t0 B" f; f    //////////////////////////////////////////////////////////////////////////
" o0 W( [0 E* O" n    break;- d+ E) y0 E, P) e/ M0 B
   }7 w5 z7 ^2 |% T4 i! S
  }
( T" J8 F' U0 }. b' O' w; P" \}: J0 f0 S6 ?) R
m_wndMenu.SetVisible(FALSE);8 c+ ]- J: L  @# C- Q. N) |
% I! n3 W" l, p4 K7 w- v0 b
--------------------------------------------------------------------------------------------------------% g$ z& Q" {: L0 H$ a) k
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
2 ^# P! @' n( `$ y0 t! O{  [4 p! \4 n6 P- M# X3 T
BaseMouseCursor();; x2 x  T9 {# A% ~3 z
}
, a' L+ _$ f- T. m) ]# l5 C/ m在其下添加:& X" _# Y+ S8 H* F5 a9 `' y
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)+ X; v7 \- N/ O) p' @6 b5 H, ]) G
{3 `$ s: E# ?- b& w7 Q, V
m_wndMenu.DeleteAllMenu();
' k' s6 v7 \$ A( g3 r# Um_wndMenu.CreateMenu(this);% X+ f2 O! `) Z9 X. |
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");0 g, ]8 C$ b. O/ L  ~; A

# S+ b0 _" [9 oif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ o4 x/ e, Y; F. Y2 K
{1 d* ?" d% X) a4 N+ w/ ~
  //P以上级别才可以删除所有道具$ h$ |6 O& c* a0 L
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
9 I& ~" q/ ~* m# H+ s% r}
; W/ O2 W& z" N$ O: B6 |( Om_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );3 K& `2 v& A1 ~, D, Q
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );7 s9 g- Z) z' h
m_wndMenu.SetFocus();6 _  n" Y  ~* N# ?8 T
}, f5 p* G+ W5 l: t+ @# D
------------------------------------------------------------------------------------------------------------
2 ]1 v. ~. z6 V) K*************************2 f; v+ H; l7 x/ O0 I( n' C
WndField.h文件7 D9 ~% I: |' _$ U
*************************8 {  K3 \* Z- X
搜索:BOOL m_bReport;) ]- U$ s& P: I$ Q+ t8 w
其后添加:
  C+ s7 p0 m5 e6 cCWndMenu m_wndMenu;
+ y6 }2 }# w% z1 M$ H搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
4 t4 |( f6 q( s' C( H6 j. t/ W) l9 R其后添加:
3 r5 I! L4 x$ Y3 E& i5 Bvirtual void OnRButtonUp(UINT nFlags, CPoint point);* R( _4 S8 Z" x# k4 o: v# ?% B
! }9 k2 p- [9 ?8 l

% g' n% e/ x6 v3 ?2 O' O( g

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-31 04:06 , Processed in 0.070208 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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