Ejemplo n.º 1
0
/*---------------------------------------------------------------------*//**
	アイテムをユニット化
	※	ソウマから装備アイテムをフォーカスできるようにユニット化する
**//*---------------------------------------------------------------------*/
void ItemEquip::unitization(s32 ieqp, Item* item, u16 spid)
{
	UnitManager* unitmng = Game::getGame()->getUnitManager(); ASSERT(unitmng != 0L);

	// 既にあるユニットを一度削除
	if(_uidarrEq[ieqp] != 0)
	{
		Unit* unit = unitmng->getUnitFromId(_uidarrEq[ieqp]);
		if(unit != 0)
		{
			ASSERT(unit->getUnitType() == UNITTYPE_EQUIPMENT_ITEM);
			// 一度削除する
			unitmng->removeUnit(unit);
		}
		_uidarrEq[ieqp] = 0;
	}

	// アイテムを外した場合はここで抜ける
	if(item == 0L)	{	return;	}

	// アイテムユニットを作成
	EquipmentItemUnit* itmu = new EquipmentItemUnit();
	ASSERT(itmu != 0L);
	itmu->create(item, _unitOwner, spid);

	// ユニットマネージャに追加
	if(unitmng->addUnit(itmu))
	{
		_uidarrEq[ieqp] = itmu->getUnitId();
	}
}
Ejemplo n.º 2
0
/*---------------------------------------------------------------------*//**
	ユニット化した装備品を得る
**//*---------------------------------------------------------------------*/
Unit* ItemEquip::getEquipUnit(s32 ieqp) const
{
	ASSERT((0 <= ieqp) && (ieqp < EquipPlace::NUM_EQP));
	if(_uidarrEq[ieqp] == 0)
	{
		return 0L;
	}

	UnitManager* unitmng = Game::getGame()->getUnitManager(); ASSERT(unitmng != 0L);
	Unit* unit = unitmng->getUnitFromId(_uidarrEq[ieqp]);
	return unit;
}
Ejemplo n.º 3
0
/*---------------------------------------------------------------------*//**
	コマンドフレーム処理 - アイテムを拾う
**//*---------------------------------------------------------------------*/
int PcRole::execCommand_pickupItem(ExecRes* res, const ExecCtx* ec, const CmdParam* param)
{
	const int	STEP_ANIM_START		= 1;
	const int	STEP_ANIM_WAIT		= 2;
	const int	END					= 999;
	
	int step = param->_step;

	switch(step)
	{
	case STEP_ANIM_START:

		step = STEP_ANIM_WAIT;

		{
			// アイテムの空き確認
			ItemManager* itmmng = Game::getGame()->getMyParty()->getItemManager(); ASSERT(itmmng != 0L);
			if(itmmng->getEmptyItemIndex(false) == -1)
			{
				res->setDone();	// この時点で空きがなかったら失敗
				return END;
			}

			// アニメーション変更
			_sprtRef->pcUnit()->changeAnim(CharUnit::ANIMID_PICKUP_ITEM, false);
		}

		break;

	case STEP_ANIM_WAIT:
		if(param->_frmcntStep >= 20.0f)	// 実行フレーム
		{
			// 対象アイテム取得
			FieldItemUnit* fiunit = 0L;
			const ItemDef* itmdf = 0L;
			do
			{
				u16 unitidRsvPickup = _sprtRef->getReservedBefaviorParameter();
				if(unitidRsvPickup == 0)	{	break;	}
				UnitManager* unitmng = Game::getGame()->getUnitManager();	ASSERT(unitmng != 0L);
				Unit* unit = unitmng->getUnitFromId(unitidRsvPickup);
				if((unit == 0L) || (unit->getUnitType() != UNITTYPE_FIELD_ITEM))	{	break;	}
				fiunit = (FieldItemUnit*)unit;
				itmdf = fiunit->getItemDef();
			}
			while(false);
			if(itmdf == 0L)
			{
				res->setDone();
				return END;
			}

			// アイテムを拾う
			ItemManager* itmmng = Game::getGame()->getMyParty()->getItemManager(); ASSERT(itmmng != 0L);
			if(itmmng->pickupItem(Game::getGame()->getMap(), fiunit->getPlacementObj(), fiunit->getEleneStat()))
			{
				// 成功時
				fiunit->setEnable(false);	// ユニット無効化

				// メッセージを表示する
				VcString msg(VcString::format(GameFixedStrTbl::getString(GameFixedStrTbl::SID_GET_SOMETHING)->getRaw(), itmdf->getName(Env_getLangId())->getRaw(), "\n"));
				Game::getGame()->getConductor()->on(&msg, _sprtRef->getPcUnit(), 0);
				// SE
				///Game::getGame()->getSoundManager()->playSe(???, false, 1.0f, _sprtRef->getThisUnit()->getCenterPos(), 0L);
				// 通知発行
				Game::getGame()->getGameNotifier()->notifyPickupItem(_sprtRef->getPcUnit(), fiunit);
				// クエストの可変達成状態の更新
				QuestManager* qsmng = Game::getGame()->getQuestManager();
				qsmng->updateVariableAchievementState();
			}

			step = END;
		}
		break;
		
	case END:
		if(param->_frmcntStep >= 10.0f)
		{
			res->setDone();
		}
		break;
	}

	//STRACE("... use_item ...\n");
	
	return step;
}