CreatureObject* CreatureManagerImplementation::spawnCreature(uint32 templateCRC, uint32 objectCRC, float x, float z, float y, uint64 parentID, bool persistent) { CreatureTemplate* creoTempl = creatureTemplateManager->getTemplate(templateCRC); if (creoTempl == NULL) return spawnCreature(objectCRC, x, z, y, parentID); CreatureObject* creature = NULL; String templateToSpawn; if (objectCRC == 0) { templateToSpawn = getTemplateToSpawn(templateCRC); objectCRC = templateToSpawn.hashCode(); } creature = createCreature(objectCRC, persistent, templateCRC); if (creature != NULL && creature->isAiAgent()) { AiAgent* npc = cast<AiAgent*>(creature); npc->loadTemplateData(creoTempl); } else if (creature == NULL) { error("could not spawn template " + templateToSpawn); } placeCreature(creature, x, z, y, parentID); return creature; }
CreatureObject* CreatureManagerImplementation::spawnCreature(uint32 templateCRC, float x, float z, float y, uint64 parentID) { CreatureObject* creature = createCreature(templateCRC); placeCreature(creature, x, z, y, parentID); return creature; }
CreatureObject* CreatureManagerImplementation::spawnCreatureAsEventMob(uint32 templateCRC, float x, float z, float y, uint64 parentID) { CreatureTemplate* creoTempl = creatureTemplateManager->getTemplate(templateCRC); if (creoTempl == NULL) return NULL; CreatureObject* creo = NULL; String templateToSpawn = getTemplateToSpawn(templateCRC); uint32 objectCRC = templateToSpawn.hashCode(); creo = createCreature(objectCRC, false, templateCRC); if (creo != NULL && creo->isAiAgent()) { AiAgent* creature = cast<AiAgent*>(creo); creature->loadTemplateData(creoTempl); UnicodeString eventName; eventName = creature->getDisplayedName() + " (event)"; creature->setCustomObjectName(eventName, false); } else if (creo == NULL) { error("could not spawn template " + templateToSpawn); } placeCreature(creo, x, z, y, parentID); if (creo != NULL && creo->isAiAgent()) cast<AiAgent*>(creo)->activateLoad(""); return creo; }
CreatureObject* CreatureManagerImplementation::spawnCreatureAsBaby(uint32 templateCRC, float x, float z, float y, uint64 parentID) { CreatureTemplate* creoTempl = creatureTemplateManager->getTemplate(templateCRC); if (creoTempl == NULL || creoTempl->getTame() <= 0) return NULL; CreatureObject* creo = NULL; String templateToSpawn = getTemplateToSpawn(templateCRC); uint32 objectCRC = templateToSpawn.hashCode(); creo = createCreature(objectCRC, false, templateCRC); if (creo != NULL && creo->isCreature()) { Creature* creature = cast<Creature*>(creo); creature->loadTemplateDataForBaby(creoTempl); } else { error("could not spawn template " + templateToSpawn + " as baby."); creo = NULL; } placeCreature(creo, x, z, y, parentID); if (creo != NULL && creo->isAiAgent()) cast<AiAgent*>(creo)->activateLoad(""); else { error("could not spawn template " + templateToSpawn + " as baby with AI."); creo = NULL; } return creo; }
void Input::processSetupLine(std::vector<int> *token_array) { if(token_array->size() == 1) { if(this->expected_rooms == -1) { this->expected_rooms = token_array->at(0); std::cout << "DEBUG - Input - Expecting " << this->expected_rooms << " rooms." << std::endl; } else if(this->expected_creatures == -1) { this->expected_creatures = token_array->at(0); std::cout << "DEBUG - Input - Expecting " << this->expected_creatures << " creatures." << std::endl; } else { std::cerr << "Bad Input. Rooms and Creatures have already been set."; exit(1); } } else if(token_array->size() == 2) { //std::cout << "DEBUG - Input - Calling Create Creature" << std::endl; createCreature(token_array); } else if(token_array->size() == 5) { //std::cout << "DEBUG - Input - Calling Create Room " << std::endl; createRoom(token_array); } }
std::shared_ptr<Creature> ObjectFactory::createCreature(std::string id, std::string rarity){ return createCreature(engine::objectLibrary.creaturePresetTemplates[id], *engine::raritySystem.getRarityType(rarity)); }
static Creature *initCreature(CreatureParsed *creatureParsed) { int i; GList *nextEventHandler; Creature *creature = createCreature(FALSE); GArray *objectNames = creatureParsed->objects; creature->name = creatureParsed->name; creature->title = creatureParsed->title; creature->description = creatureParsed->description; creature->messages = creatureParsed->messages; creature->attackable = creatureParsed->attackable; creature->woundRate = creatureParsed->woundRate; creature->counterattack = creatureParsed->counterattack; /* creature's attributes */ creature->attributes.strength = creatureParsed->attributes.strength; creature->attributes.dexterity = creatureParsed->attributes.dexterity; creature->attributes.intelligence = creatureParsed->attributes.intelligence; creature->attributes.initialTotal = creature->attributes.strength + creature->attributes.dexterity + creature->attributes.intelligence; /* health settings */ creature->maxHealth = creatureParsed->maxHealth; creature->state.health = creatureParsed->health; creature->state.alive = creatureParsed->alive; if (NULL != creatureParsed->allegiance) { if (0 == strcmp(dstrview(creatureParsed->allegiance), "neutral")) { creature->allegiance = CREATURE_ALLEGIANCE_NEUTRAL; } else if (0 == strcmp(dstrview(creatureParsed->allegiance), "friend")) { creature->allegiance = CREATURE_ALLEGIANCE_FRIEND; } else if (0 == strcmp(dstrview(creatureParsed->allegiance), "enemy")) { creature->allegiance = CREATURE_ALLEGIANCE_ENEMY; } else { g_outputError("%s is not a valid allegiance for creature '%s'!\n", dstrview(creatureParsed->allegiance), dstrview(creatureParsed->name)); exit(EXIT_FAILURE); } } /* initialize lua state for creature */ creature->L = initLuaState(creatureParsed->scripts); /* initialize entity-specific event handlers */ nextEventHandler = creatureParsed->eventHandlers; while (NULL != nextEventHandler) { EventHandlerParsed *handler = (EventHandlerParsed *)nextEventHandler->data; addLuaEventHandler(dstrview(handler->event), creature->events, dstrview(handler->function), creature->L); nextEventHandler = g_list_next(nextEventHandler); } /* add objects to the creature's inventory */ for (i = 0; i < objectNames->len; i++) { dstring_t *objectName = g_array_index(objectNames, dstring_t, i); Object *object = g_hash_table_lookup(g_objects, (char *)dstrview(objectName)); creature->inventory.list = addObject(creature->inventory.list, creature->inventory.byName, objectName); object->state.owner.entity = creature; object->state.owner.type = entity_creature; } return creature; }