CPlayerBall::~CPlayerBall() { if (GetHoldingPlayer()) RemoveFromPlayerHands(GetHoldingPlayer()); if (GetCreator()) GetCreator()->SetPlayerBall(NULL); }
void IEffectPainter::WriteToStream (IWriteStream *pStream) { CString sUNID = GetCreator()->GetUNIDString(); sUNID.WriteToStream(pStream); CString sClass = GetCreator()->GetTag(); sClass.WriteToStream(pStream); OnWriteToStream(pStream); }
void GUICommentItem::Draw(const math::rectf*vp) { if (!IsVisible()) return; video::IVideoDevice *dev = Engine::getInstance().getDevice(); GUI::IGUIManager* creator = GetCreator(); const math::rectf& rect = GetDefaultRegion()->GetRect(); const math::rectf& clip = GetDefaultRegion()->GetClippedRect(); math::rectf bgR(rect); video::TextureUnit tex1; IFont* font = gFontResourceManager.getFontByName("Default"); if (!font) font = gFontResourceManager.getDefaultFont(); math::rectf oldScissor = GetCreator()->GetDevice()->getScissorRect(); dev->setScissorRect(clip); tex1.SetTexture(gTextureResourceManager.loadTexture2D("CommentBG.png")); dev->useTexture(0, &tex1); dev->draw2DImage(bgR, 1); if (font && m_Comment) { math::rectf tmpRc; tex1.SetTexture(gTextureResourceManager.loadTexture2D("twitter.png")); tmpRc.ULPoint= bgR.ULPoint+20; tmpRc.BRPoint = tmpRc.ULPoint + 30; dev->useTexture(0, &tex1); dev->draw2DImage(tmpRc, 1); tmpRc.ULPoint = tmpRc.BRPoint; tmpRc.BRPoint = bgR.BRPoint - 60; m_fontAttrs.fontAligment = GUI::EFA_TopLeft; m_fontAttrs.fontColor.Set(1, 1, 1, 1); m_fontAttrs.hasShadow = false; m_fontAttrs.spacing = 0; m_fontAttrs.lineSpacing = 10; m_fontAttrs.wrap = true; m_fontAttrs.fontSize = 18; font->print(tmpRc, &m_fontAttrs, &clip, m_Comment->text, creator->GetRenderQueue()); } GetCreator()->GetRenderQueue()->Flush(); dev->setScissorRect(oldScissor); IGUIElement::Draw(vp); }
void CPlayerBall::SetVel(Vector vel, float spinCoeff, int spinFlags, body_part_t bodyPart, bool markOffsidePlayers, float shotTakerMinDelay, bool resetShotCharging) { CBall::SetVel(vel, spinCoeff, spinFlags, bodyPart, markOffsidePlayers, shotTakerMinDelay, resetShotCharging); if (!m_bIsBallCannonMode && m_pPl == GetCreator()) SaveBallCannonSettings(); }
void CWaypoints::WriteGPX(const std::wstring& wstrFilename) { try { CGPXFileWriter GpxWriter(wstrFilename, GetCreator()); for (std::list<CPoint>::iterator it = m_Points.begin(); it != m_Points.end(); ++it) { GpxWriter.AddNextWaypoint(it->m_dLatitude, it->m_dLongitude); // Caution: field order is important, see http://www.topografix.com/GPX/1/1/ GpxWriter.CurrentWpt()->addAltitude(it->m_iAltitude); GpxWriter.CurrentWpt()->addName(it->m_wstrName); // <extensions> after all standard fields: GpxWriter.CurrentWpt()->addRadiusEx(it->m_iRadius); for(std::vector<CStringProp>::iterator iter = it->m_OSMPropList.begin(); iter != it->m_OSMPropList.end(); iter++) { GpxWriter.CurrentWpt()->addOSMTag(iter->Name(), iter->Value()); } } } catch (CGPXFileWriter::Error e) { MessageBox(NULL, e.c_str(), L("GPX write error"), MB_ICONEXCLAMATION); } }
void Pet::UpdateArmor() { float value = 0.0f; float bonus_armor = 0.0f; UnitMods unitMod = UNIT_MOD_ARMOR; Unit *owner = GetOwner(); // chained, use original owner instead if (owner && owner->GetTypeId() == TYPEID_UNIT && ((Creature*)owner)->GetEntry() == GetEntry()) if (Unit *creator = GetCreator()) owner = creator; // hunter and warlock and shaman pets gain 35% of owner's armor value if (owner && (getPetType() == HUNTER_PET || (getPetType() == SUMMON_PET && (owner->getClass() == CLASS_WARLOCK || owner->getClass() == CLASS_SHAMAN)))) bonus_armor = 0.35f * float(owner->GetArmor()); value = GetModifierValue(unitMod, BASE_VALUE); value *= GetModifierValue(unitMod, BASE_PCT); value += GetStat(STAT_AGILITY); value += GetModifierValue(unitMod, TOTAL_VALUE) + bonus_armor; value *= GetModifierValue(unitMod, TOTAL_PCT); SetArmor(int32(value)); }
bool GUIWebPageOrganizer::OnEvent(Event*e) { bool res=IGUIPanelElement::OnEvent(e); if(e->getType()==ET_Keyboard) { KeyboardEvent* evt=(KeyboardEvent*)e; if(evt->Char=='`') { _SwitchFullscreen(); } } if(res) { for(int i=0;i<m_pages.size();++i) { if(GetCreator()->GetFocusElement()==m_pages[i]) { m_activePage=i; toFront(m_pages[i]); break; } } } return res; }
bool GUICheckBox::_HandleKeyboardEvent(KeyboardEvent*e) { IGUIManager* creator=GetCreator(); if(!creator->HasFocus(this)) return false; return m_component->OnKeyboardEvent(e); }
bool Pet::UpdateStats(Stats stat) { if (stat > STAT_SPIRIT) return false; // value = ((base_value * base_pct) + total_value) * total_pct float value = GetTotalStatValue(stat); Unit* owner = GetOwner(); // chained, use original owner instead if (owner && owner->GetTypeId() == TYPEID_UNIT && ((Creature*)owner)->GetEntry() == GetEntry()) { if (Unit* creator = GetCreator()) owner = creator; } if (stat == STAT_STAMINA) { if(owner && owner->GetTypeId() == TYPEID_PLAYER && owner->getClass() == CLASS_WARLOCK) value += float(owner->GetStat(stat)) * 0.75f; else if (owner) value += float(owner->GetStat(stat)) * 0.3f; } // warlock's and mage's pets gain 30% of owner's intellect else if (stat == STAT_INTELLECT && getPetType() == SUMMON_PET) { if (owner && (owner->getClass() == CLASS_WARLOCK || owner->getClass() == CLASS_MAGE)) value += float(owner->GetStat(stat)) * 0.3f; } // deathknight's ghoul gain 100% of owner's strength else if (stat == STAT_STRENGTH && getPetType() == SUMMON_PET) { if (owner && (owner->getClass() == CLASS_DEATH_KNIGHT)) { value += float(owner->GetStat(stat)) * 1.0f; } } SetStat(stat, int32(value)); switch (stat) { case STAT_STRENGTH: UpdateAttackPowerAndDamage(); break; case STAT_AGILITY: UpdateArmor(); break; case STAT_STAMINA: UpdateMaxHealth(); break; case STAT_INTELLECT: UpdateMaxPower(POWER_MANA); break; case STAT_SPIRIT: default: break; } return true; }
void Projectile::Collide(PhysicalObject *pOtherObject) { switch (pOtherObject->GetPhysicalObjectType()) { case PhysicalObject::ePROJECTILE: //don't collide with other projectiles originating from the same creator if (((Projectile *)pOtherObject)->GetCreator() != GetCreator()) { //ApplyOnePhysicalDamage(((Projectile *)pOtherObject)->GetCreator()); ApplyOnePhysicalDamage(0); } break; default: if (GetCreator() != pOtherObject) { //ApplyOnePhysicalDamage(pOtherObject); ApplyOnePhysicalDamage(0); } break; } }
void CResource::SerializeToXmlFile(const nstring &file) { xmlTextWriterPtr writer = NULL; /* Create a new XmlWriter for uri, with no compression. */ if((writer = xmlNewTextWriterFilename(file.c_str(), 0)) == NULL) NOVA_EXP("CResource::SerializeToXmlFile: Error creating the xml writer", BAD_OPERATION); // automatic indentation for readability xmlTextWriterSetIndent(writer, 1); if(xmlTextWriterStartDocument(writer, NULL, "UTF-8", NULL) < 0) NOVA_EXP("CResource::SerializeToXmlFile: xmlTextWriterStartDocument fail", BAD_OPERATION); if(xmlTextWriterStartElement(writer, BAD_CAST "NovaResource") < 0) NOVA_EXP("CResource::SerializeToXmlFile: xmlTextWriterStartElement fail", BAD_OPERATION); if(xmlTextWriterWriteComment(writer, BAD_CAST "Common resource header") < 0) NOVA_EXP("CResource::SerializeToXmlFile: xmlTextWriterWriteComment fail", BAD_OPERATION); if(xmlTextWriterStartElement(writer, BAD_CAST "ResourceHeader") < 0) NOVA_EXP("CResource::SerializeToXmlFile: xmlTextWriterStartElement fail", BAD_OPERATION); if(xmlTextWriterWriteElement(writer, BAD_CAST "ResourceName", BAD_CAST mName.c_str()) < 0) NOVA_EXP("CResource::SerializeToXmlFile: xmlTextWriterWriteElement fail", BAD_OPERATION); if(xmlTextWriterWriteElement(writer, BAD_CAST "ResourceGroup", BAD_CAST mGroup.c_str()) < 0) NOVA_EXP("CResource::SerializeToXmlFile: xmlTextWriterWriteElement fail", BAD_OPERATION); if(xmlTextWriterStartElement(writer, BAD_CAST "ResourceData") < 0) NOVA_EXP("CResource::SerializeToXmlFile: xmlTextWriterStartElement fail", BAD_OPERATION); // Resource manager attribute if(xmlTextWriterWriteAttribute(writer, BAD_CAST "ResourceFactory", BAD_CAST GetCreator()->GetResourceFactoryName().c_str()) < 0) NOVA_EXP("CImage::SerializeToXmlFileImpl: xmlTextWriterWriteAttribute fail", BAD_OPERATION); SerializeToXmlFileImpl(writer); xmlTextWriterEndDocument(writer); xmlFreeTextWriter(writer); }
void Pet::UpdateResistances(uint32 school) { if (school > SPELL_SCHOOL_NORMAL) { float value = GetTotalAuraModValue(UnitMods(UNIT_MOD_RESISTANCE_START + school)); Unit *owner = GetOwner(); // chained, use original owner instead if (owner && owner->GetTypeId() == TYPEID_UNIT && ((Creature*)owner)->GetEntry() == GetEntry()) if (Unit *creator = GetCreator()) owner = creator; // hunter and warlock pets gain 40% of owner's resistance if (owner && (getPetType() == HUNTER_PET || (getPetType() == SUMMON_PET && owner->getClass() == CLASS_WARLOCK))) value += float(owner->GetResistance(SpellSchools(school))) * 0.4f; SetResistance(SpellSchools(school), int32(value)); } else UpdateArmor(); }
// OutputToStream() // Outputs an ImageData instance as ASCII text to the stream provided. void ImageData::OutputToStream( ostream &out ) { out << " Filename: \"" << GetFilename() << "\"" << endl; out << " File Format: " << GetFileFormat() << "; \"" << ImageFileFormatStrings[ GetFileFormat() ] << "\"" << endl; out << " File Size: " << GetFileSize() << " bytes " << endl; out << endl; out << " File Data:" << endl; out << " Bits Per Pixel: " << GetBitsPerPixel() << endl; out << " Compression: " << GetCompression() << "; \"" << ImageCompressionModeStrings[ GetCompression() ] << "\"" << endl; out << " DPI X/Y: " << GetDPIX() << "/" << GetDPIY() << endl; out << " Pixel Aspect Ration: " << GetPixelAspectNum() << "/" << GetPixelAspectDenom() << endl; out << " Gamma Correction: " << GetGammaNum() << "/" << GetGammaDenom() << endl; out << " Thumbnail: "; if( GetThumbnail() == NULL ) out << "No" << endl; else out << "Yes" << endl; out << endl; out << " Creator Data:" << endl; out << " Author: \"" << GetAuthor() << "\"" << endl; out << " Creator Program: \"" << GetCreator() << "\"" << endl; out << " Creator Version: " << GetCreatorVersion() << "." << GetCreatorRevision() << GetCreatorSubRev() << endl; out << " Comment: \"" << GetComment() << "\"" << endl; out << " Job Name: \"" << GetJobName() << "\"" << endl; out << " Job Time: " << GetJobTime()[0] << ":" << GetJobTime()[1] << ":" << GetJobTime()[2] << endl; out << " Date Stamp: " << GetDateStamp()[0] << "/" << GetDateStamp()[1] << "/" << GetDateStamp()[2] << " " << GetDateStamp()[3] << ":" << GetDateStamp()[4] << ":" << GetDateStamp()[5] << endl; out << endl; out << " Image Data:" << endl; out << " Width: " << GetImage()->GetWidth() << endl; out << " Height: " << GetImage()->GetHeight() << endl; out << " Type: " << GetImage()->GetType() << "; \"" << ImageTypeStrings[ GetImage()->GetType() ] << "\"" << endl; out << " Num Registers: "; if( GetImage()->GetType() == IMAGE_INDEXED ) out << GetImage()->GetNumRegisters() << endl; else out << "N/A" << endl; }
void GUIStatusLayer::SetProjects(kmd::SessionContainer* sessions) { const std::vector<kmd::SessionDetails*>& lst = sessions->GetSessions(); std::vector<kmd::SessionDetails*>::const_iterator it = lst.begin(); float y = 20; float h = 80; for (; it != lst.end();++it) { if (!(*it)->IsSession()) continue; GUIProjectStatus* p = new GUIProjectStatus(GetCreator()); p->SetPosition(math::vector2d(20, y)); p->SetSize(math::vector2d(0, h)); p->SetAnchorPosition(math::vector2d(20, 0)); p->SetAnchorLeft(true); p->SetAnchorTop(true); p->SetAnchorRight(true); p->SetProject(*it); AddElement(p); y += h; } }
void CWaypoints::WriteOSM(const std::wstring& wstrFilename) { try { COSMFileWriter OsmWriter(wstrFilename, GetCreator()); int iOsmWptCount = 0; for (std::list<CPoint>::iterator it = m_Points.begin(); it != m_Points.end(); ++it) { if (isWptModel(it->m_wstrName)) continue; // ignore models if (0 == it->m_OSMPropList.size()) continue; // ignore waypoints without osm tags bool bNameWritten = false; OsmWriter.AddNextWaypoint(it->m_dLatitude, it->m_dLongitude); iOsmWptCount++; for(std::vector<CStringProp>::iterator iter = it->m_OSMPropList.begin(); iter != it->m_OSMPropList.end(); iter++) { if (L"name" == iter->Name()) bNameWritten = true; if (0 == iter->Value().length()) continue; // ignore empty values OsmWriter.CurrentWpt()->addTag(iter->Name(), iter->Value()); } if (!bNameWritten) { if (!IsDefaultWaypointName(it->m_wstrName)) OsmWriter.CurrentWpt()->addTag(L"name", it->m_wstrName); } } wchar_t wcMsg[100]; swprintf(wcMsg, 100, L("%d waypoints with OSM tags"), iOsmWptCount); MessageBox(NULL, wcMsg, L("File written"), MB_ICONEXCLAMATION); } catch (CGPXFileWriter::Error e) { MessageBox(NULL, e.c_str(), L("OSM write error"), MB_ICONEXCLAMATION); } }
void GUIGraphPlotElement::Draw(const math::rectf*vp) { if(!IsVisible()) return; GUI::IGUIElement::Draw(vp); float alpha=0.5; math::rectf rc=GetDefaultRegion()->GetClippedRect(); GetCreator()->GetActiveTheme()->drawSizableBox(GetCreator()->GetRenderQueue(),rc,0,mT("Frame"),video::SColor(1,1,1,alpha)); GetCreator()->GetRenderQueue()->Flush(); if(!m_graphs.size()) return; GUI::IFont*font=gFontResourceManager.getFontByName(m_font.fontName); GraphList::iterator it=m_graphs.begin(); math::rectf r; r.ULPoint=rc.ULPoint; r.BRPoint.x=rc.BRPoint.x; r.BRPoint.y=r.ULPoint.y+m_font.fontSize; float fontSpacing=rc.getHeight()/(m_graphs.size()+1); fontSpacing=math::Min(20.0f,fontSpacing); m_font.fontSize=fontSpacing; for (;it!=m_graphs.end();++it) { GraphInfo* g=it->second; g->color.A=alpha; GetCreator()->GetDevice()->draw2DLine(&g->points[0],g->currSample-1,g->color); if(font) { m_font.fontColor=g->color; m_font.fontColor.A=1; core::string msg=g->name+mT("@")+core::StringConverter::toString(g->lastVal,4); font->print(r,&m_font,&r,msg,GetCreator()->GetRenderQueue()); r.ULPoint.y+=fontSpacing; r.BRPoint.y+=fontSpacing; } } GetCreator()->GetRenderQueue()->Flush(); }
void Pet::UpdateAttackPowerAndDamage(bool ranged) { if (ranged) return; float val = 0.0f; float bonusAP = 0.0f; UnitMods unitMod = UNIT_MOD_ATTACK_POWER; if (GetEntry() == 416) // imp's attack power val = GetStat(STAT_STRENGTH) - 10.0f; else val = 2 * GetStat(STAT_STRENGTH) - 20.0f; Unit* owner = GetOwner(); // chained, use original owner instead if (owner && owner->GetTypeId() == TYPEID_UNIT && ((Creature*)owner)->GetEntry() == GetEntry()) { if (Unit* creator = GetCreator()) owner = creator; } if (owner && owner->GetTypeId() == TYPEID_PLAYER) { if (getPetType() == HUNTER_PET) // hunter pets benefit from owner's attack power { bonusAP = owner->GetTotalAttackPowerValue(RANGED_ATTACK) * 0.22f; SetBonusDamage(int32(owner->GetTotalAttackPowerValue(RANGED_ATTACK) * 0.1287f)); } // ghouls benefit from deathknight's attack power else if (getPetType() == SUMMON_PET && owner->getClass() == CLASS_DEATH_KNIGHT) { bonusAP = owner->GetTotalAttackPowerValue(BASE_ATTACK) * 0.82f; SetBonusDamage(int32(owner->GetTotalAttackPowerValue(BASE_ATTACK) * 0.8287f)); } // demons benefit from warlocks shadow or fire damage else if (getPetType() == SUMMON_PET && owner->getClass() == CLASS_WARLOCK) { int32 fire = int32(owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_FIRE)) - owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_FIRE); int32 shadow = int32(owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_SHADOW)) - owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_SHADOW); int32 maximum = (fire > shadow) ? fire : shadow; if (maximum < 0) maximum = 0; SetBonusDamage(int32(maximum * 0.15f)); bonusAP = maximum * 0.57f; } // water elementals benefit from mage's frost damage else if (getPetType() == SUMMON_PET && owner->getClass() == CLASS_MAGE) { int32 frost = int32(owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_FROST)) - owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_FROST); if (frost < 0) frost = 0; SetBonusDamage(int32(frost * 0.4f)); } } SetModifierValue(UNIT_MOD_ATTACK_POWER, BASE_VALUE, val + bonusAP); // in BASE_VALUE of UNIT_MOD_ATTACK_POWER for creatures we store data of meleeattackpower field in DB float base_attPower = GetModifierValue(unitMod, BASE_VALUE) * GetModifierValue(unitMod, BASE_PCT); float attPowerMod = GetModifierValue(unitMod, TOTAL_VALUE); float attPowerMultiplier = GetModifierValue(unitMod, TOTAL_PCT) - 1.0f; // UNIT_FIELD_(RANGED)_ATTACK_POWER field SetInt32Value(UNIT_FIELD_ATTACK_POWER, (int32)base_attPower); // UNIT_FIELD_(RANGED)_ATTACK_POWER_MODS field SetInt32Value(UNIT_FIELD_ATTACK_POWER_MODS, (int32)attPowerMod); // UNIT_FIELD_(RANGED)_ATTACK_POWER_MULTIPLIER field SetFloatValue(UNIT_FIELD_ATTACK_POWER_MULTIPLIER, attPowerMultiplier); // automatically update weapon damage after attack power modification UpdateDamagePhysical(BASE_ATTACK); }
IGUIElement* GUIWebPageOrganizer::Duplicate(){return new GUIWebPageOrganizer(GetCreator());}
void Pet::UpdateAttackPowerAndDamage(bool ranged) { if (ranged) return; float val = 0.0f; float bonusAP = 0.0f; UnitMods unitMod = UNIT_MOD_ATTACK_POWER; val = (GetStat(STAT_STRENGTH) - 20.0f) * 2; Unit* owner = GetOwner(); // chained, use original owner instead if (owner && owner->GetTypeId() == TYPEID_UNIT && ((Creature*)owner)->GetEntry() == GetEntry()) if (Unit *creator = GetCreator()) owner = creator; if (owner && owner->GetTypeId()==TYPEID_PLAYER) { if (getPetType() == HUNTER_PET) //hunter pets benefit from owner's attack power { float ap_coeff = 0.22f; float sp_coeff = 0.1287f; //Wild Hunt uint32 bonus_id = 0; if (HasSpell(62762)) bonus_id = 62762; else if (HasSpell(62758)) bonus_id = 62758; if (const SpellEntry *bonusProto = sSpellStore.LookupEntry(bonus_id)) { ap_coeff *= 1 + bonusProto->CalculateSimpleValue(EFFECT_INDEX_1) / 100.0f; sp_coeff *= 1 + bonusProto->CalculateSimpleValue(EFFECT_INDEX_1) / 100.0f; } bonusAP = owner->GetTotalAttackPowerValue(RANGED_ATTACK) * ap_coeff; SetBonusDamage( int32(owner->GetTotalAttackPowerValue(RANGED_ATTACK) * sp_coeff)); } else if (getPetType() == SUMMON_PET) { switch(owner->getClass()) { case CLASS_WARLOCK: { //demons benefit from warlocks shadow or fire damage int32 fire = int32(owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_FIRE)) - owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_FIRE); int32 shadow = int32(owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_SHADOW)) - owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_SHADOW); int32 maximum = (fire > shadow) ? fire : shadow; if (maximum < 0) maximum = 0; SetBonusDamage(int32(maximum * 0.15f)); bonusAP = maximum * 0.57f; break; } case CLASS_MAGE: { //water elementals benefit from mage's frost damage int32 frost = int32(owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_FROST)) - owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_FROST); if (frost < 0) frost = 0; SetBonusDamage(int32(frost * 0.4f)); break; } case CLASS_SHAMAN: { float coeff = 0.3f; //Glyph of Feral Spirit if (Aura *glyph = owner->GetDummyAura(63271)) coeff += glyph->GetModifier()->m_amount / 100.0f; bonusAP += coeff * owner->GetTotalAttackPowerValue(BASE_ATTACK); break; } case CLASS_DRUID: { //Guessed float coeff = 0.55f; int32 sp = int32(owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_NATURE)) - owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_NATURE); bonusAp += coeff * sp; break; } } } else if (getPetType() == GUARDIAN_PET) if (owner->getClass() == CLASS_DEATH_KNIGHT) bonusAP += owner->GetTotalAttackPowerValue(BASE_ATTACK) * 0.4f; } SetModifierValue(UNIT_MOD_ATTACK_POWER, BASE_VALUE, val + bonusAP); //in BASE_VALUE of UNIT_MOD_ATTACK_POWER for creatures we store data of meleeattackpower field in DB float base_attPower = GetModifierValue(unitMod, BASE_VALUE) * GetModifierValue(unitMod, BASE_PCT); float attPowerMod = GetModifierValue(unitMod, TOTAL_VALUE); float attPowerMultiplier = GetModifierValue(unitMod, TOTAL_PCT) - 1.0f; //UNIT_FIELD_(RANGED)_ATTACK_POWER field SetInt32Value(UNIT_FIELD_ATTACK_POWER, (int32)base_attPower); //UNIT_FIELD_(RANGED)_ATTACK_POWER_MODS field SetInt32Value(UNIT_FIELD_ATTACK_POWER_MODS, (int32)attPowerMod); //UNIT_FIELD_(RANGED)_ATTACK_POWER_MULTIPLIER field SetFloatValue(UNIT_FIELD_ATTACK_POWER_MULTIPLIER, attPowerMultiplier); //automatically update weapon damage after attack power modification UpdateDamagePhysical(BASE_ATTACK); }
int IEffectPainter::GetInitialLifetime (void) { return GetCreator()->GetLifetime(); }
bool Pet::UpdateStats(Stats stat) { if (stat > STAT_SPIRIT) return false; // value = ((base_value * base_pct) + total_value) * total_pct float value = GetTotalStatValue(stat); CreatureInfo const *cinfo = GetCreatureInfo(); Unit *owner = GetOwner(); // chained, use original owner instead if (owner && owner->GetTypeId() == TYPEID_UNIT && ((Creature*)owner)->GetEntry() == GetEntry()) if (Unit *creator = GetCreator()) owner = creator; if (owner && owner->GetTypeId() == TYPEID_PLAYER) { float scale_coeff = 0.0f; switch(stat) { case STAT_STRENGTH: { if (owner->getClass() == CLASS_DEATH_KNIGHT) { if (getPetType() == SUMMON_PET) { scale_coeff = 0.7f; // Ravenous Dead if (SpellEntry const* spell = ((Player*)owner)->GetKnownTalentRankById(1934)) scale_coeff *= 1.0f + spell->CalculateSimpleValue(EFFECT_INDEX_1) / 100.0f; // Glyph of Ghoul if (Aura *glyph = owner->GetDummyAura(58686)) scale_coeff += glyph->GetModifier()->m_amount / 100.0f; } } break; } case STAT_STAMINA: { scale_coeff = 0.3f; switch (owner->getClass()) { case CLASS_HUNTER: { scale_coeff = 0.45f; //Wild Hunt uint32 bonus_id = 0; if (HasSpell(62762)) bonus_id = 62762; else if (HasSpell(62758)) bonus_id = 62758; if (const SpellEntry *bonusProto = sSpellStore.LookupEntry(bonus_id)) scale_coeff *= 1 + bonusProto->CalculateSimpleValue(EFFECT_INDEX_0) / 100.0f; break; } case CLASS_WARLOCK: { scale_coeff = 0.75f; break; } case CLASS_DEATH_KNIGHT: { if (getPetType() == SUMMON_PET) { // Ravenous Dead if (owner->GetTypeId() == TYPEID_PLAYER) if (SpellEntry const* spell = ((Player*)owner)->GetKnownTalentRankById(1934)) scale_coeff *= 1.0f + spell->CalculateSimpleValue(EFFECT_INDEX_1) / 100.0f; // Glyph of Ghoul if (Aura *glyph = owner->GetDummyAura(58686)) scale_coeff += glyph->GetModifier()->m_amount / 100.0f; } break; } case CLASS_DRUID: { //For treants, use 70% of stamina / 3 treants, guessed scale_coeff = 0.7f / 3.0f; break; } } break; } case STAT_INTELLECT: { //warlock's and mage's pets gain 30% of owner's intellect if (getPetType() == SUMMON_PET) { if (owner && (owner->getClass() == CLASS_WARLOCK || owner->getClass() == CLASS_MAGE) ) scale_coeff = 0.3f; } break; } } value += float(owner->GetStat(stat)) * scale_coeff; } SetStat(stat, int32(value)); switch(stat) { case STAT_STRENGTH: UpdateAttackPowerAndDamage(); break; case STAT_AGILITY: UpdateArmor(); break; case STAT_STAMINA: UpdateMaxHealth(); break; case STAT_INTELLECT: UpdateMaxPower(POWER_MANA); break; case STAT_SPIRIT: default: break; } return true; }
void GUICheckBox::Draw(const math::rectf*vp) { if(!IsVisible())return; m_component->rc=GetDefaultRegion()->GetClippedRect(); math::rectf oldScissor=GetCreator()->GetDevice()->getScissorRect(); GetCreator()->GetDevice()->setScissorRect(m_component->rc); m_component->Draw(); GetCreator()->GetRenderQueue()->Flush(); GetCreator()->GetDevice()->setScissorRect(oldScissor); /* math::rectf tChBox=tRect; tChBox.BRPoint=tChBox.ULPoint+skin->getRect(0,math::rectf(0,0,24,24),mT("CheckBox")).getSize(); tRect.ULPoint.x+=tChBox.getWidth(); float yCoord=0; int state; int butState; switch (m_state){ case EC_UnChecked: yCoord=0.0f; state=0; butState=0; break; case EC_Checked: yCoord=0.25f; state=1; butState=2; break; case EC_MouseOn: yCoord=0.5f; state=2; butState=1; break; case EC_MouseDown: yCoord=0.75f; state=3; butState=2; break; } tRect.clipRect(clipRect); video::SColor bclr=Color(); bclr.A=AlphaEffect ? Alpha:Color().A; math::rectf coordsRect(0,yCoord,1,yCoord+0.25f); video::SColor clr; if(!PushButton()){ if(BGOpaque() && !bkTexture->GetTexture()) skin->drawBox(getManager()->GetRenderQueue(),tRect,bclr,bclr*0.5,&clipRect); if(bkTexture->GetTexture()) device->draw2DImage(tChBox,bkTexture,video::SColor(255,255,255,bclr.A),0,&coordsRect); else{ if(Checked()) { skin->drawBox(getManager()->GetRenderQueue(),tChBox,mT("CheckBox"),state,bclr,&(clipRect+1),true); }else skin->drawBox(getManager()->GetRenderQueue(),tChBox,mT("CheckBox"),state,bclr,&(clipRect+1),false); } if(tChBox.isValid()){ tChBox.ULPoint+=2; tChBox.BRPoint-=2; } }else { if(Checked()){ clr=Color(); clr.A=AlphaEffect ? Alpha:bclr.A; skin->drawSizableBox(getManager()->GetRenderQueue(),tRect,butState,mT("PushButton"),bclr,&(clipRect+1)); }else { clr=Color(); clr.A=AlphaEffect ? Alpha:bclr.A; skin->drawSizableBox(getManager()->GetRenderQueue(),tRect,butState,mT("PushButton"),bclr,&clipRect); } } if(guiMngr->hasFocus(this)) { math::rectf rc=tRect; rc.BRPoint-=4; rc.ULPoint+=4; guiMngr->getDevice()->draw2DRectangle(rc,80,0,&clipRect); } if(ShowCaption){ IFont*font=gFontResourceManager.getFontByName(m_FontAttributes.fontName); if(!font) return; video::SColor clr,oldClr; clr=oldClr=m_FontAttributes.fontColor; clr.A=AlphaEffect ? Alpha:oldClr.A; m_FontAttributes.fontColor=clr; if(Enable) font->print(tRect,&m_FontAttributes,&clipRect,getRenderString(),guiMngr->GetRenderQueue()); else{ m_FontAttributes.fontColor=video::SColor(128,128,128,clr.A); font->print(tRect,&m_FontAttributes,&clipRect,getRenderString(),guiMngr->GetRenderQueue()); } m_FontAttributes.fontColor=oldClr; } GUIElement::draw(dt);*/ }