示例#1
0
void MissionCompare(struct RBNode* _GuyNode, struct LinkedList* _Missions) {
	if(_GuyNode == NULL)
		return;
	for(struct LnkLst_Node* _Itr = _Missions->Front; _Itr != NULL; _Itr = _Itr->Next) {
		struct Mission* _Mission = _Itr->Data;
		double _Percent = _Mission->MeanPercent;
		struct MissionFrame _Frame = {0};
		static int _Fired = 0;

		_Frame.Owner = _GuyNode->Data;
		if(_Mission->Trigger != 0 && CallMissionCond(g_LuaState, _Mission->Trigger, &_Frame) == 0)
				continue;
		if(_Fired == 0 && _Mission == StrToMission("BANDT.1")) {
			_Fired = 1;
			MissionCall(g_LuaState, _Mission, g_GameWorld.Player, NULL);
		}
		for(uint8_t i = 0; i < _Mission->MeanModsSz; ++i) {
			if(_Mission->MeanModTrig[i] == 0 || CallMissionCond(g_LuaState, _Mission->MeanModTrig[i], &_Frame) != 0)
				_Percent = _Percent * _Mission->MeanMods[i];
		}
		if(Rand() / ((double)0xFFFFFFFFFFFFFFFF) <= _Percent)
			MissionCall(g_LuaState, _Mission, _GuyNode->Data, NULL);
	}
	MissionCompare(_GuyNode->Left, _Missions);
	MissionCompare(_GuyNode->Right, _Missions);
}
示例#2
0
void MissionOnEvent(struct MissionEngine* _Engine, uint32_t _EventType, struct BigGuy* _Guy) {
	Assert(_EventType < EventUserOffset());
	for(struct LnkLst_Node* _Itr = _Engine->EventMissions[_EventType].Front; _Itr != NULL; _Itr = _Itr->Next) {
		struct Mission* _Mission = _Itr->Data;
		struct MissionFrame _Frame = {0};

		_Frame.Owner = _Guy;
		_Frame.Mission = _Mission;

		if(CallMissionCond(g_LuaState, _Mission->Trigger, &_Frame) != 0)
			MissionCall(g_LuaState, _Mission, NULL, _Guy);
	}
}
示例#3
0
void BulletinItemOnClick(struct BulletinItem* _Item, lua_State* _State, struct BigGuy* _Selector) {
	MissionCall(_State, _Item->SuccMission, _Selector, _Item->Owner);
}