예제 #1
0
void SkillAlchemy(UINT8 *m_PacketBuffer, bool *pRetn)
{
	*pRetn = true;

	st_Window *pServer = (st_Window*)m_PacketBuffer;

	INT16 cId = pServer->Header.ClientId;

	if(cId <= NULL || cId >= MAX_PLAYER)
		return;

	st_Mob *player = GetMobFromIndex(cId);

	if(pServer->Slot[0] == 0xFF || pServer->Slot[1] == 0xFF || pServer->Slot[2] == 0xFF)
		SendClientMessage(cId, "Coloque os três itens necessários.");
	else
	{
		for(char i = 0; i < 3; i ++)		
		{
			if(memcmp(&pServer->ItemId[i], &player->Inventory[pServer->Slot[i]], sizeof st_Item))
				return;

			else if(pServer->ItemId[i].Index != player->Inventory[pServer->Slot[i]].Index)
				return;
		}		
		
		Composition(pServer, player);

		SendClientSignalParm(cId, 0x7530, 0x3A7, 2);
	}
}
예제 #2
0
void OpenSMOKE_GasStream::lock()
{
	if (assignedKineticScheme == false)
		ErrorMessage("The kinetic scheme was not defined!!");
	if (assignedMassFlowRate == false && assignedMoleFlowRate == false && assignedVolumetricFlowRate == false)
	{
		//	ErrorMessage("The flow rate was not defined!!");
		AssignMassFlowRate(1.e-10, "kg/s");
		iUndefinedFlowRate = true;
	}
	if (assignedMoleFractions == false && assignedMassFractions == false)
		ErrorMessage("The composition was not defined!!");

	Composition();

	if (assignedTemperature == true && assignedPressure == true && assignedDensity == true)
		ErrorMessage("Only 2 between: T || P || rho");
	if (assignedTemperature == true && assignedPressure == true)
		{ /* Nothing to do */						}
	else if (assignedDensity == true && assignedPressure == true)
		{	T = P*MW/Constants::R_J_kmol/rho;	}
	else if (assignedDensity == true && assignedTemperature == true)
		{	P = rho*Constants::R_J_kmol*T/MW;	}
	else ErrorMessage("2 between must be assigned: T || P || rho");
		
	Concentrations();
	Density();
	FlowRates();
	SpecificEnthalpies();
	Enthalpy();
	SpecificEntropies();
	Entropy();
}
예제 #3
0
	double calculateMZ(double mass, int charge, int pre_charge /* = 0 */)
	{
		Param& param = Param::Instance();
		double electron_mass = param.getParameter<double>("electron_mass").first;

		int coef_h = (pre_charge == 0 ? charge : pre_charge);
		// TBD: this should be controlled by parameter.
		// int coef_e = (pre_charge == 0 ? 1 : 0);
		return (mass + coef_h * (Composition("H").getMass() - electron_mass))/abs(charge);
	}
예제 #4
0
	double calculateMass( double mz, int charge)
	{
		// int mode = param.getParameter<int>("mode").first;

		// Be careful of the ion mode.
		Param& param = Param::Instance();
		double electron_mass = param.getParameter<double>("electron_mass").first;

		return abs(charge) * mz - charge * (Composition("H").getMass() -electron_mass);
	}
예제 #5
0
	void evolveComposition(CompositionHelper::UsedComposition usedComp)
	{
		std::cout << "\n==Evolving a composition==\n\n";
		std::cout << "Composition Before Evolution\n";
		usedComp.composition.printDebugInfo();
		enemyComposition = Composition(util::game::getEnemy()->getUnits());
		std::cout << "Loaded Enemy Composition\n";
		//respond to units with counters
		if (usedComp.useCount != 0)
		{
			for each(auto unitType in enemyComposition.getTypes())
			{
				if (unitType.isBuilding() || unitType == BWAPI::UnitTypes::Zerg_Larva)
					continue;
				//std::cout << "Responding to unit: " << unitType.c_str() << "\n";
				auto counters = CompositionHelper::getCounters(unitType);
				auto intersection = usedComp.composition.getIntersection(counters);
				if (intersection.getTypes().size() == 0)
				{
					//add random unit type from counter list
					BWAPI::UnitType randomType = util::calc::getRandomType(counters);
					usedComp.composition.addType(randomType);
				}
				else
				{
					int evolveType = rand() % 100;

					//increase amount for existing unit type
					if (evolveType <= 50)
					{
						BWAPI::UnitType randomType = util::calc::getRandomType(intersection.getUnitMap());
						usedComp.composition.addType(randomType);
					}

					//add a new counter unit type
					else if (evolveType <= 75)
					{
						BWAPI::UnitType randomType = util::calc::getRandomType(counters);
						usedComp.composition.addType(randomType);
					}
				}
			}

			std::cout << "\n==Composition Evolved==\n\n";
			std::cout << "Composition After Evolution\n";
			usedComp.composition.printDebugInfo();		

			////possible mutation
			//int mutateProbability = rand() % 100;
			//if (mutateProbability < 5)
			//	composition = mutateComposition(composition);
		}
		else
		{			
예제 #6
0
void OpenSMOKE_GasStream::ChangeMoleFractions(BzzVector &_values)
{
	AssignMoleFractions(_values);

	Composition();
	Concentrations();
	Density();
	FlowRates();
	SpecificEnthalpies();
	Enthalpy();
	SpecificEntropies();
	Entropy();
}
Composition CompositionObj::make(Pool *pool, std::string name)
{
    auto res = Composition((new CompositionObj(name,pool)));
    pool->addComponent(res);
    return res;
}
예제 #8
0
	Composition InternalSite::getCleavageShift(FunctionalGroup& fg, const size_t idx)
	{
		std::multiset<FunctionalGroup>::iterator iter = _groups.find(fg);
		return (iter != _groups.end()) ? iter->getCompositionByID(idx) : Composition();
	}