bool InstallationObjectImplementation::isAttackableBy(CreatureObject* object) { if( !(getPvpStatusBitmask() & CreatureFlag::ATTACKABLE) ) { return false; } if (object->isPet()) { ManagedReference<CreatureObject*> owner = object->getLinkedCreature().get(); if (owner == NULL) return false; return isAttackableBy(owner); } else if(object->isPlayerCreature()) { ManagedReference<PlayerObject*> ghost = object->getPlayerObject(); if(ghost == NULL) { return false; } if(getFaction() == 0) { return true; } if(getFaction() == object->getFaction()) { return false; } if((getPvpStatusBitmask() & CreatureFlag::OVERT) && ghost->getFactionStatus() != FactionStatus::OVERT) { return false; } else if(!(ghost->getFactionStatus() >= FactionStatus::COVERT)) { return false; } } return true; }
Vehicle* Balaenidae::spawn(dWorldID world,dSpaceID space,int type, int number) { Vehicle *v; if (type == MANTA) { SimplifiedDynamicManta *_manta1 = new SimplifiedDynamicManta(getFaction()); _manta1->init(); _manta1->setNumber(number); _manta1->embody(world, space); _manta1->setPos(pos[0],pos[1]+28, pos[2]); _manta1->setStatus(Manta::ON_DECK); _manta1->inert = true; alignToMe(_manta1->getBodyID()); v = (Vehicle*)_manta1; } else if (type == WALRUS) { Walrus *_walrus = new Walrus(getFaction()); _walrus->init(); _walrus->setNumber(number); _walrus->embody(world,space); Vec3f p; p = p.normalize(); p = getForward()*450; _walrus->setPos(pos[0]-p[0],pos[1]-p[1],pos[2]-p[2]); _walrus->setStatus(Walrus::SAILING); _walrus->stop(); alignToMe(_walrus->getBodyID()); v = (Vehicle*)_walrus; } return v; }
bool InstallationObjectImplementation::isAggressiveTo(CreatureObject* target) { if (!isAttackableBy(target) || target->isVehicleObject()) return false; if (getFaction() != 0 && target->getFaction() != 0 && getFaction() != target->getFaction()) return true; return false; }
bool BattleSquad::move(int tgx, int tgy, unsigned int &eventflag, bool costap) { MapDataManager* mapdatamanager = MapDataManager::getSingletonPtr(); if(mapdatamanager->getPassable(tgx, tgy, getFaction())) { float mapapcost = 0.0f; if(getHorseId() != "none") mapapcost = mapdatamanager->getCavApCost(tgx, tgy, getFaction()); else mapapcost = mapdatamanager->getInfApCost(tgx, tgy, getFaction()); LuaTempContext* luatempcontext = new LuaTempContext(); luatempcontext->strMap["squadid"] = getSquadId(); luatempcontext->intMap["srcx"] = getGridX(); luatempcontext->intMap["srcy"] = getGridY(); luatempcontext->intMap["tgtx"] = tgx; luatempcontext->intMap["tgty"] = tgy; luatempcontext->floatMap["apcost"] = mapapcost; Trigger("MoveTo", luatempcontext); mapdatamanager->Trigger("MoveTo", luatempcontext); mapapcost = luatempcontext->floatMap["apcost"]; delete luatempcontext; if(costap) { float ap = getActionPoint(); if(mapapcost <= ap) { ap -= mapapcost; setActionPoint(ap); if(mapapcost <= 2) { eventflag |= MOVEEVENT_CHARGE; int curdir = GetDirection(getGridX(), getGridY(), tgx, tgy); eventflag &= 0x03f; eventflag |= SetChargeDir(curdir); } else { eventflag &= ~MOVEEVENT_CHARGE; } return true; } } else { return true; } } eventflag |= MOVEEVENT_WRONG; return false; }
/* * Get the unit's minimap sprite index. Used to display the unit on the minimap * @return the unit minimap index */ int BattleUnit::getMiniMapSpriteIndex () const { int unitSpriteId; //minimap sprite index: // * 0-2 : Xcom soldier // * 3-5 : Civilian // * 6-8 : alien // * 9-11 : Dead unit // * 12-23 : Xcom HWP // * 24-35 : Alien big terror unit(cyberdisk, ...) if (isOut()) { return 9; } switch (getFaction()) { case FACTION_HOSTILE: unitSpriteId = 3; break; case FACTION_NEUTRAL: unitSpriteId = 6; break; default: unitSpriteId = 0; } return unitSpriteId; }
/* * Get the unit's minimap sprite index. Used to display the unit on the minimap * @return the unit minimap index */ int BattleUnit::getMiniMapSpriteIndex () const { //minimap sprite index: // * 0-2 : Xcom soldier // * 3-5 : Alien // * 6-8 : Civilian // * 9-11 : Item // * 12-23 : Xcom HWP // * 24-35 : Alien big terror unit(cyberdisk, ...) if (isOut()) { return 9; } switch (getFaction()) { case FACTION_HOSTILE: if (_armor->getSize() == 1) return 3; else return 24; case FACTION_NEUTRAL: return 6; default: if (_armor->getSize() == 1) return 0; else return 12; } }
string SupplyDrop::getExportLine() { string ret = "SupplyDrop():setFaction(\"" + getFaction() + "\"):setPosition(" + string(getPosition().x, 0) + ", " + string(getPosition().y, 0) + ")"; if (energy > 0) ret += ":setEnergy(" + string(energy, 0) + ")"; for(int n=0; n<MW_Count; n++) if (weapon_storage[n] > 0) ret += ":setWeaponStorage(\"" + getMissileWeaponName(EMissileWeapons(n)) + "\", " + string(weapon_storage[n]) + ")"; return ret; }
/** * Get whether this unit is visible. * @return flag */ bool BattleUnit::getVisible() const { if (getFaction() == FACTION_PLAYER) { return true; } else { return _visible; } }
/** * Add this unit to the list of visible units. Returns true if this is a new one. * @param unit * @return */ bool BattleUnit::addToVisibleUnits(BattleUnit *unit) { for (std::vector<BattleUnit*>::iterator i = _visibleUnits.begin(); i != _visibleUnits.end(); ++i) { if ((BattleUnit*)(*i) == unit) { return false; } } if (getFaction() == FACTION_PLAYER) unit->setVisible(true); _visibleUnits.push_back(unit); return true; }
void CoaEncodedDiskMenuComponent::fillObjectMenuResponse(SceneObject* sceneObject, ObjectMenuResponse* menuResponse, CreatureObject* player) { TangibleObjectMenuComponent::fillObjectMenuResponse(sceneObject, menuResponse, player); TangibleObject* disk = cast<TangibleObject*>(sceneObject); if (disk == NULL) { return; } String faction = getFaction(disk); if (faction.isEmpty()) { return; } String file = "@theme_park/alderaan/act2/shared_" + faction + "_missions"; menuResponse->addRadialMenuItem(20,3,file + ":use"); // Read if (faction == "rebel" && !isDecoded(disk)) { menuResponse->addRadialMenuItem(68,3,file + ":decode"); // Decode } }
bool BattleSquad::init(std::string srcpath, int team, int unitnum, int x, int y, int d) { if(!Squad::init(srcpath)) return false; DataLibrary *datalib = DataLibrary::getSingletonPtr(); setTeam(team); setGridX(x); setGridY(y); setDirection(d); setUnitNum(unitnum); int squadtype2; datalib->getData(srcpath + std::string("/Type"), squadtype2); if(squadtype2 == SQUAD_NORMAL) { setUnitMaxNum(unitnum); setFormation(Line); } else { setUnitMaxNum(20); setFormation(Loose); } float covert; covert = getAttr(ATTR_COVERT, ATTRCALC_FULL); if(covert > 0.0f) { switch(getFaction()) { case 0: setViewbyPlayer(1); setViewbyEnemy1(0); setViewbyEnemy2(0); setViewbyEnemy3(0); break; case 1: setViewbyPlayer(0); setViewbyEnemy1(1); setViewbyEnemy2(0); setViewbyEnemy3(0); break; case 2: setViewbyPlayer(0); setViewbyEnemy1(0); setViewbyEnemy2(1); setViewbyEnemy3(0); break; case 3: setViewbyPlayer(0); setViewbyEnemy1(0); setViewbyEnemy2(0); setViewbyEnemy3(1); break; } } else { setViewbyPlayer(1); setViewbyEnemy1(1); setViewbyEnemy2(1); setViewbyEnemy3(1); } setAmbushPlayer(0); setAmbushEnemy1(0); setAmbushEnemy2(0); setAmbushEnemy3(0); setActionPoint(0.0f); setAPSetup(0.0f); setAPBattle(0.0f); return true; }
int CoaEncodedDiskMenuComponent::handleObjectMenuSelect(SceneObject* sceneObject, CreatureObject* player, byte selectedID) { if (!player->isPlayerCreature()) { return 0; } SceneObject* inventory = player->getSlottedObject("inventory"); if (inventory == NULL) { return 0; } if (!inventory->hasObjectInContainer(sceneObject->getObjectID())) { player->sendSystemMessage("@encoded_disk/message_fragment:sys_not_in_inv"); // The disk can't be used unless it is in your inventory! return 0; } TangibleObject* disk = cast<TangibleObject*>(sceneObject); if (disk == NULL) { return 0; } PlayerObject* ghost = player->getPlayerObject(); if (ghost == NULL) { return 0; } String faction = getFaction(disk); if (faction.isEmpty()) { return 0; } bool decoded = isDecoded(disk); if (selectedID == 20) { String file = "@theme_park/alderaan/act2/" + faction + "_missions"; String title, body; if (faction == "imperial") { title = file + ":disk_title"; body = file + ":disk_text"; } else if (faction == "rebel" && decoded) { title = file + ":disk_decoded_title"; body = file + ":disk_decoded_text"; } else { title = file + ":disk_encoded_title"; body = file + ":disk_encoded_text"; } ManagedReference<SuiMessageBox*> box = new SuiMessageBox(player, 0); box->setPromptTitle(title); box->setPromptText(body); box->setUsingObject(disk); box->setOkButton(true, "@theme_park/alderaan/act2/shared_" + faction + "_missions:close"); // Close ghost->addSuiBox(box); player->sendMessage(box->generateMessage()); return 0; } else if (selectedID == 68) { if (faction != "rebel") { return 0; } String file = "@theme_park/alderaan/act2/shared_" + faction + "_missions"; uint32 decoderCRC = STRING_HASHCODE("object/tangible/encoded_disk/dead_eye_decoder.iff"); bool hasDecoder = false; for (int i=0; i< inventory->getContainerObjectsSize(); i++) { SceneObject* sco = inventory->getContainerObject(i); if (sco->getServerObjectCRC() == decoderCRC) { hasDecoder = true; break; } } if (hasDecoder) { String key = "disk_name_decoded"; StringId stringid("theme_park/alderaan/act2/shared_rebel_missions", key); Locker locker(disk); disk->setObjectName(stringid, true); player->sendSystemMessage(file + ":decoded_data_disk"); // Using the old Imperial Decoder you were able to decode the Dead Eye message. return 0; } else { player->sendSystemMessage(file + ":decode_failed"); // You do not have the required decoder to decode this message. return 0; } } return TangibleObjectMenuComponent::handleObjectMenuSelect(sceneObject, player, selectedID); }
string SpaceStation::getExportLine() { return "SpaceStation():setTemplate(\"" + template_name + "\"):setFaction(\"" + getFaction() + "\"):setCallSign(\"" + getCallSign() + "\"):setPosition(" + string(getPosition().x, 0) + ", " + string(getPosition().y, 0) + ")"; }
void CPlayer::CreatePet(uint32 entry, bool classcheck) { if (classcheck && getClass() != CLASS_HUNTER) return; CreatureInfo const *cinfo = sObjectMgr.GetCreatureTemplate(entry); if (!cinfo) { BoxChat << MSG_COLOR_WHITE << " This pet doesn't exist in our database. Please report that creature " << entry << " is missing." << std::endl; return; } CreatureCreatePos pos(GetSession()->GetPlayer(), GetOrientation()); Creature* pCreature = new Creature; // used guids from specially reserved range (can be 0 if no free values) uint32 lowguid = sObjectMgr.GenerateStaticCreatureLowGuid(); if (!lowguid) return; if (!pCreature->Create(lowguid, pos, cinfo)) { delete pCreature; return; } //-------------------------------------------------- if (GetPetGuid()) UnsummonPetTemporaryIfAny(); Pet* pet = new Pet(HUNTER_PET); if (!pet->CreateBaseAtCreature(pCreature)) { delete pet; return; } pet->SetOwnerGuid(GetObjectGuid()); pet->SetCreatorGuid(GetObjectGuid()); pet->setFaction(getFaction()); pet->SetUInt32Value(UNIT_CREATED_BY_SPELL, 13481); if (IsPvP()) pet->SetPvP(true); if (!pet->InitStatsForLevel(pCreature->getLevel())) { sLog.outError("Pet::InitStatsForLevel() failed for creature (Entry: %u)!", pCreature->GetEntry()); delete pet; return; } pet->GetCharmInfo()->SetPetNumber(sObjectMgr.GeneratePetNumber(), true); // this enables pet details window (Shift+P) pet->AIM_Initialize(); pet->InitPetCreateSpells(); pet->SetHealth(pet->GetMaxHealth()); // add to world pet->GetMap()->Add((Creature*)pet); // visual effect for levelup pet->SetUInt32Value(UNIT_FIELD_LEVEL, 70); for (auto x = 0; x < 6; x++) { pet->SetPower(POWER_HAPPINESS, 66600000); pet->ModifyLoyalty(150000); pet->TickLoyaltyChange(); pet->SetTP(350); } // caster have pet now SetPet(pet); pet->SavePetToDB(PET_SAVE_AS_CURRENT); PetSpellInitialize(); pet->learnSpell(27052); pet->learnSpell(35698); pet->learnSpell(25076); pet->learnSpell(27048); pet->learnSpell(27053); pet->learnSpell(27054); pet->learnSpell(27062); pet->learnSpell(27047); pet->learnSpell(24551); delete pCreature; }