Пример #1
0
/* UCollectData: Collect data from segStore for each stream s of each 
   state n and store in seqMat[n][s]*/
void UCollectData(Sequence **seqMat)
{
   int i,j,s,numSegs,segLen;
   long int n;
   float obsPerState;
   Observation obs;
   Ptr p;
   
   numSegs = NumSegs(segStore);
   for (i=1;i<=numSegs;i++) {
      segLen=SegLength(segStore,i);
      obsPerState=((float) segLen)/((float) (nStates-2));
      if (obsPerState < 1.0)
         HError(2122,"UCollectData: segment too short[%d]",segLen);
      for (j=1;j<=segLen;j++) {
         obs = GetSegObs(segStore,i,j);
         n = (long int)(((float)(j-1)/obsPerState)+2);
         for (s=1; s<=nStreams; s++){
            if (hset.hsKind==DISCRETEHS){
               p = (Ptr)((long int)obs.vq[s]);
               StoreItem(seqMat[n][s],p);
            }else
               StoreItem(seqMat[n][s],obs.fv[s]);
         }
      }
   }
}
Пример #2
0
/* UCollectData: Collect data from segStore for each stream s of each 
   state n and store in seqMat[n][s]*/
void UCollectData(Sequence ***seqMat)
{
   int i,j,k,n,s,numSegs,segLen,order;
   float obsPerState;
   Observation obs;
   Ptr p;
   
   numSegs = NumSegs(segStore);
   for (i=1;i<=numSegs;i++) {
      segLen=SegLength(segStore,i);
      obsPerState=((float) segLen)/((float) (nStates-2));
      if (obsPerState < 1.0)
         HError(2122,"UCollectData: segment too short[%d]",segLen);
      for (j=1;j<=segLen;j++) {
         obs = GetSegObs(segStore,i,j);
         n = (int)(((float)(j-1)/obsPerState)+2);
         for (s=1; s<=nStreams; s++){
            if (hset.hsKind==DISCRETEHS){
               p = (Ptr)((long)obs.vq[s]);
               StoreItem(seqMat[n][s][1],p);
            } else if(hset.msdflag[s]){
               order = SpaceOrder(obs.fv[s]);
               if ((k = IncludeSpace(msdInfo[n][s],order)))
                  StoreItem(seqMat[n][s][k],obs.fv[s]);
               else if(!ignOutVec)
                  HError(2122,"UCollectData: no space corresponded to order[%d]",order);
            }else
               StoreItem(seqMat[n][s][1],obs.fv[s]);
         }
      }
   }
}
Пример #3
0
bool Bag::LoadFromDB(uint32 guid, uint64 owner_guid)
{
    if(!Item::LoadFromDB(guid, owner_guid))
        return false;

    // cleanup bag content related item value fields (its will be filled correctly from `character_inventory`)
    for (uint32 i = 0; i < GetProto()->ContainerSlots; i++)
    {
        SetUInt64Value(CONTAINER_FIELD_SLOT_1 + (i*2), 0);
        if (m_bagslot[i])
        {
            delete m_bagslot[i];
            m_bagslot[i] = NULL;
        }
    }

    if(!IsInBag())                                          // equiped bag
    {
        QueryResult *result = sDatabase.PQuery("SELECT `slot`,`item`,`item_template` FROM `character_inventory` WHERE `guid` = '%u' AND `bag` = '%u'", GUID_LOPART(GetOwnerGUID()), GetGUIDLow());

        if (result)
        {
            do
            {
                Field *fields = result->Fetch();
                uint8  slot      = fields[0].GetUInt8();
                uint32 item_guid = fields[1].GetUInt32();
                uint32 item_id   = fields[2].GetUInt32();

                ItemPrototype const *proto = objmgr.GetItemPrototype(item_id);

                if(!proto)
                {
                    sLog.outError( "Bag::LoadFromDB: Player %d have unknown item (id: #%u) in bag #%u, skipped.", GUID_LOPART(GetOwnerGUID()), item_id, GetSlot());
                    continue;
                }

                Item *item = NewItemOrBag(proto);
                item->SetSlot(NULL_SLOT);
                if(!item->LoadFromDB(item_guid, owner_guid))
                {
                    delete item;
                    continue;
                }
                StoreItem( slot, item, true );
                item->SetState(ITEM_UNCHANGED);
            } while (result->NextRow());

            delete result;
        }
    }
    return true;
}
Пример #4
0
bool CPlayer::BuyBackItemFromMultiVendor(uint32 slot)
{
    DEBUG_LOG("WORLD: BuyBackItemFromMultiVendor");

    uint32 entry;
    ObjectGuid vendorGuid;
    GetMultiVendor(entry, vendorGuid);

    Creature* pCreature = GetNPCIfCanInteractWith(vendorGuid, UNIT_NPC_FLAG_NONE);
    if (!pCreature)
    {
        DEBUG_LOG("WORLD: BuyBackItemFromMultiVendor - %s not found or you can't interact with him.", vendorGuid.GetString().c_str());
        SendSellError(SELL_ERR_CANT_FIND_VENDOR, NULL, ObjectGuid(), 0);
        return false;
    }

    // remove fake death
    if (hasUnitState(UNIT_STAT_DIED))
        RemoveSpellsCausingAura(SPELL_AURA_FEIGN_DEATH);

    Item* pItem = GetItemFromBuyBackSlot(slot);
    if (pItem)
    {
        uint32 price = GetUInt32Value(PLAYER_FIELD_BUYBACK_PRICE_1 + slot - BUYBACK_SLOT_START);
        if (GetMoney() < price)
        {
            SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, pItem->GetEntry(), 0);
            return false;
        }

        ItemPosCountVec dest;
        InventoryResult msg = CanStoreItem(NULL_BAG, NULL_SLOT, dest, pItem, false);
        if (msg == EQUIP_ERR_OK)
        {
            ModifyMoney(-(int32)price);
            RemoveItemFromBuyBackSlot(slot, false);
            ItemAddedQuestCheck(pItem->GetEntry(), pItem->GetCount());
            StoreItem(dest, pItem, true);
        }
        else
            SendEquipError(msg, pItem, NULL);

        return true;
    }
    else
        SendBuyError(BUY_ERR_CANT_FIND_ITEM, pCreature, 0, 0);

    return false;
}
Пример #5
0
/* LoadFile: load whole file or segments and accumulate variance */
void LoadFile(char *fn)
{
   ParmBuf pbuf;
   BufferInfo info;
   char labfn[80];
   Transcription *trans;
   long segStIdx,segEnIdx;  
   int i,s,j,ncas,nObs=0;
   LLink p;

   if (segId == NULL)  {   /* load whole parameter file */
      if((pbuf=OpenBuffer(&iStack, fn, 0, dff, FALSE_dup, FALSE_dup))==NULL)
         HError(2550,"LoadFile: Config parameters invalid");
      GetBufferInfo(pbuf,&info);
      CheckData(fn,info);
      nObs = ObsInBuffer(pbuf);
      
      for (i=0; i<nObs; i++) {
         for(s=1;s<=swidth[0];s++)
            obs.fv[s] = CreateVector(&dStack,swidth[s]);
         ReadAsTable(pbuf,i,&obs);
         for(s=1;s<=swidth[0];s++)
            StoreItem(dSeq[s],(Ptr)obs.fv[s]);
      }
      CloseBuffer(pbuf);
   }
   else { /* load segment of parameter file */
      MakeFN(fn,labDir,labExt,labfn);
      trans = LOpen(&iStack,labfn,lff);
      ncas = NumCases(trans->head,segId);
      if ( ncas > 0) {
         if((pbuf=OpenBuffer(&iStack, fn, 0, dff, FALSE_dup, FALSE_dup))==NULL)
            HError(2550,"LoadFile: Config parameters invalid");
         GetBufferInfo(pbuf,&info);
         CheckData(fn,info);
         for (i=1,nObs=0; i<=ncas; i++) {
            p = GetCase(trans->head,segId,i);
            segStIdx= (long) (p->start/info.tgtSampRate);
            segEnIdx  = (long) (p->end/info.tgtSampRate);
            if (trace&T_SEGS)
               printf(" loading seg %s [%ld->%ld]\n",
                      segId->name,segStIdx,segEnIdx);
            if (segEnIdx >= ObsInBuffer(pbuf))
               segEnIdx = ObsInBuffer(pbuf)-1;
            if (segEnIdx >= segStIdx) {
               for (j=segStIdx;j<=segEnIdx;j++) {
                  /* SJY: The HInit code I copied this from had no */
                  /* SJY: CreateVector call here -- a bug? */
                  for(s=1;s<=swidth[0];s++)
                     obs.fv[s] = CreateVector(&dStack,swidth[s]);
                  ReadAsTable(pbuf,j,&obs);
                  for(s=1;s<=swidth[0];s++)
                     StoreItem(dSeq[s],(Ptr)obs.fv[s]);
                  ++nObs;
               }
            }
         }        
         CloseBuffer(pbuf);
      }  
   }
   ResetHeap(&iStack);
   if (trace&T_LOAD) {
      printf(" %5d obs loaded from %s, streams: ",nObs,fn);
      for(s=1;s<=swidth[0];s++) printf("[%d]" ,swidth[s]);
      printf("\n"); fflush(stdout);
   }        
}