本文整理汇总了C++中GetUInt32Value函数的典型用法代码示例。如果您正苦于以下问题:C++ GetUInt32Value函数的具体用法?C++ GetUInt32Value怎么用?C++ GetUInt32Value使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了GetUInt32Value函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: event_Relocate
void GameObject::Update(uint32 p_time)
{
if(m_event_Instanceid != m_instanceId)
{
event_Relocate();
return;
}
if(!IsInWorld())
return;
if(m_deleted)
return;
if(spell && (GetUInt32Value(GAMEOBJECT_STATE) == 1))
{
if(checkrate > 1)
{
if(counter++%checkrate)
return;
}
ObjectSet::iterator itr = GetInRangeSetBegin();
ObjectSet::iterator it2 = itr;
ObjectSet::iterator iend = GetInRangeSetEnd();
Unit * pUnit;
float dist;
this->AquireInrangeLock(); //make sure to release lock before exit function !
for(; it2 != iend;)
{
itr = it2;
++it2;
dist = GetDistanceSq((*itr));
if( (*itr) != m_summoner && (*itr)->IsUnit() && dist <= range)
{
pUnit = static_cast<Unit*>(*itr);
if(m_summonedGo)
{
if(!m_summoner)
{
ExpireAndDelete();
return;
}
if(!isAttackable(m_summoner,pUnit))continue;
}
Spell * sp=SpellPool.PooledNew();
sp->Init((Object*)this,spell,true,NULL);
SpellCastTargets tgt((*itr)->GetGUID());
tgt.m_destX = GetPositionX();
tgt.m_destY = GetPositionY();
tgt.m_destZ = GetPositionZ();
sp->prepare(&tgt);
// proc on trap trigger
if( pInfo->Type == GAMEOBJECT_TYPE_TRAP )
{
if( m_summoner != NULL )
m_summoner->HandleProc( PROC_ON_TRAP_TRIGGER, pUnit, spell );
}
if(m_summonedGo)
{
ExpireAndDelete();
this->ReleaseInrangeLock();
return;
}
if(spell->EffectImplicitTargetA[0] == 16 ||
spell->EffectImplicitTargetB[0] == 16)
{
this->ReleaseInrangeLock();
return; // on area dont continue.
}
}
}
this->ReleaseInrangeLock();
}
}
示例2: MAKE_NEW_GUID
bool Item::LoadFromDB(uint32 guid, uint64 owner_guid, QueryResult *result)
{
// create item before any checks for store correct guid
// and allow use "FSetState(ITEM_REMOVED); SaveToDB();" for deleting item from DB
Object::_Create(guid, 0, HIGHGUID_ITEM);
bool delete_result = false;
if(!result)
{
result = CharacterDatabase.PQuery("SELECT data FROM item_instance WHERE guid = '%u'", guid);
delete_result = true;
}
if (!result)
{
sLog.outError("Item (GUID: %u owner: %u) not found in table `item_instance`, can't load. ",guid,GUID_LOPART(owner_guid));
return false;
}
Field *fields = result->Fetch();
if(!LoadValues(fields[0].GetString()))
{
sLog.outError("Item #%d have broken data in `data` field. Can't be loaded.",guid);
if (delete_result) delete result;
return false;
}
bool need_save = false; // need explicit save data at load fixes
// overwrite possible wrong/corrupted guid
uint64 new_item_guid = MAKE_NEW_GUID(guid,0, HIGHGUID_ITEM);
if(GetUInt64Value(OBJECT_FIELD_GUID) != new_item_guid)
{
SetUInt64Value(OBJECT_FIELD_GUID, MAKE_NEW_GUID(guid,0, HIGHGUID_ITEM));
need_save = true;
}
if (delete_result) delete result;
ItemPrototype const* proto = GetProto();
if(!proto)
return false;
// update max durability (and durability) if need
if(proto->MaxDurability!= GetUInt32Value(ITEM_FIELD_MAXDURABILITY))
{
SetUInt32Value(ITEM_FIELD_MAXDURABILITY,proto->MaxDurability);
if(GetUInt32Value(ITEM_FIELD_DURABILITY) > proto->MaxDurability)
SetUInt32Value(ITEM_FIELD_DURABILITY,proto->MaxDurability);
need_save = true;
}
// recalculate suffix factor
if(GetItemRandomPropertyId() < 0)
{
if(UpdateItemSuffixFactor())
need_save = true;
}
// Remove bind flag for items vs NO_BIND set
if (IsSoulBound() && proto->Bonding == NO_BIND)
{
ApplyModFlag(ITEM_FIELD_FLAGS,ITEM_FLAGS_BINDED, false);
need_save = true;
}
// update duration if need, and remove if not need
if ((proto->Duration == 0) != (GetUInt32Value(ITEM_FIELD_DURATION) == 0))
{
SetUInt32Value(ITEM_FIELD_DURATION, proto->Duration);
need_save = true;
}
// set correct owner
if (owner_guid != 0 && GetOwnerGUID() != owner_guid)
{
SetOwnerGUID(owner_guid);
need_save = true;
}
if (need_save) // normal item changed state set not work at loading
{
std::ostringstream ss;
ss << "UPDATE item_instance SET data = '";
for(uint16 i = 0; i < m_valuesCount; ++i )
ss << GetUInt32Value(i) << " ";
ss << "', owner_guid = '" << GUID_LOPART(GetOwnerGUID()) << "' WHERE guid = '" << guid << "'";
CharacterDatabase.Execute( ss.str().c_str() );
}
//Set extended cost for refundable item
if(HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAGS_REFUNDABLE))
{
QueryResult *result_ext = CharacterDatabase.PQuery("SELECT ExtendedCost, price FROM item_instance WHERE guid = '%u'", guid);
if(result_ext)
{
m_ExtendedCostId = result_ext->Fetch()[0].GetUInt32();
//.........这里部分代码省略.........
示例3: SetEntry
bool Item::LoadFromDB(ObjectGuid::LowType guid, ObjectGuid owner_guid, Field* fields, uint32 entry)
{
// 0 1 2 3 4 5 6 7 8 9 10
//result = CharacterDatabase.PQuery("SELECT creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomPropertyId, durability, playedTime, text FROM item_instance WHERE guid = '%u'", guid);
// create item before any checks for store correct guid
// and allow use "FSetState(ITEM_REMOVED); SaveToDB();" for deleting item from DB
Object::_Create(guid, 0, HighGuid::Item);
// Set entry, MUST be before proto check
SetEntry(entry);
SetObjectScale(1.0f);
ItemTemplate const* proto = GetTemplate();
if (!proto)
return false;
// set owner (not if item is only loaded for gbank/auction/mail
if (owner_guid)
SetOwnerGUID(owner_guid);
bool need_save = false; // need explicit save data at load fixes
SetGuidValue(ITEM_FIELD_CREATOR, ObjectGuid(HighGuid::Player, fields[0].GetUInt32()));
SetGuidValue(ITEM_FIELD_GIFTCREATOR, ObjectGuid(HighGuid::Player, fields[1].GetUInt32()));
SetCount(fields[2].GetUInt32());
uint32 duration = fields[3].GetUInt32();
SetUInt32Value(ITEM_FIELD_DURATION, duration);
// update duration if need, and remove if not need
if ((proto->Duration == 0) != (duration == 0))
{
SetUInt32Value(ITEM_FIELD_DURATION, proto->Duration);
need_save = true;
}
Tokenizer tokens(fields[4].GetString(), ' ', MAX_ITEM_PROTO_SPELLS);
if (tokens.size() == MAX_ITEM_PROTO_SPELLS)
for (uint8 i = 0; i < MAX_ITEM_PROTO_SPELLS; ++i)
SetSpellCharges(i, atoi(tokens[i]));
SetUInt32Value(ITEM_FIELD_FLAGS, fields[5].GetUInt32());
// Remove bind flag for items vs NO_BIND set
if (IsSoulBound() && proto->Bonding == NO_BIND)
{
ApplyModFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_SOULBOUND, false);
need_save = true;
}
std::string enchants = fields[6].GetString();
_LoadIntoDataField(enchants.c_str(), ITEM_FIELD_ENCHANTMENT_1_1, MAX_ENCHANTMENT_SLOT * MAX_ENCHANTMENT_OFFSET);
SetInt32Value(ITEM_FIELD_RANDOM_PROPERTIES_ID, fields[7].GetInt16());
// recalculate suffix factor
if (GetItemRandomPropertyId() < 0)
UpdateItemSuffixFactor();
uint32 durability = fields[8].GetUInt16();
SetUInt32Value(ITEM_FIELD_DURABILITY, durability);
// update max durability (and durability) if need
SetUInt32Value(ITEM_FIELD_MAXDURABILITY, proto->MaxDurability);
if (durability > proto->MaxDurability)
{
SetUInt32Value(ITEM_FIELD_DURABILITY, proto->MaxDurability);
need_save = true;
}
SetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME, fields[9].GetUInt32());
SetText(fields[10].GetString());
if (need_save) // normal item changed state set not work at loading
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ITEM_INSTANCE_ON_LOAD);
stmt->setUInt32(0, GetUInt32Value(ITEM_FIELD_DURATION));
stmt->setUInt32(1, GetUInt32Value(ITEM_FIELD_FLAGS));
stmt->setUInt32(2, GetUInt32Value(ITEM_FIELD_DURABILITY));
stmt->setUInt32(3, guid);
CharacterDatabase.Execute(stmt);
}
return true;
}
示例4: GetGUIDLow
void Item::SaveToDB()
{
uint32 guid = GetGUIDLow();
switch (uState)
{
case ITEM_NEW:
{
static SqlStatementID delItem ;
static SqlStatementID insItem ;
SqlStatement stmt = CharacterDatabase.CreateStatement(delItem, "DELETE FROM item_instance WHERE guid = ?");
stmt.PExecute(guid);
std::ostringstream ss;
for (uint16 i = 0; i < m_valuesCount; ++i)
ss << GetUInt32Value(i) << " ";
stmt = CharacterDatabase.CreateStatement(insItem, "INSERT INTO item_instance (guid,owner_guid,data) VALUES (?, ?, ?)");
stmt.PExecute(guid, GetOwnerGuid().GetCounter(), ss.str().c_str());
} break;
case ITEM_CHANGED:
{
static SqlStatementID updInstance ;
static SqlStatementID updGifts ;
SqlStatement stmt = CharacterDatabase.CreateStatement(updInstance, "UPDATE item_instance SET data = ?, owner_guid = ? WHERE guid = ?");
std::ostringstream ss;
for (uint16 i = 0; i < m_valuesCount; ++i)
ss << GetUInt32Value(i) << " ";
stmt.PExecute(ss.str().c_str(), GetOwnerGuid().GetCounter(), guid);
if (HasFlag(ITEM_FIELD_FLAGS, ITEM_DYNFLAG_WRAPPED))
{
stmt = CharacterDatabase.CreateStatement(updGifts, "UPDATE character_gifts SET guid = ? WHERE item_guid = ?");
stmt.PExecute(GetOwnerGuid().GetCounter(), GetGUIDLow());
}
} break;
case ITEM_REMOVED:
{
static SqlStatementID delItemText;
static SqlStatementID delInst ;
static SqlStatementID delGifts ;
static SqlStatementID delLoot ;
if (uint32 item_text_id = GetUInt32Value(ITEM_FIELD_ITEM_TEXT_ID))
{
SqlStatement stmt = CharacterDatabase.CreateStatement(delItemText, "DELETE FROM item_text WHERE id = ?");
stmt.PExecute(item_text_id);
}
SqlStatement stmt = CharacterDatabase.CreateStatement(delInst, "DELETE FROM item_instance WHERE guid = ?");
stmt.PExecute(guid);
if (HasFlag(ITEM_FIELD_FLAGS, ITEM_DYNFLAG_WRAPPED))
{
stmt = CharacterDatabase.CreateStatement(delGifts, "DELETE FROM character_gifts WHERE item_guid = ?");
stmt.PExecute(GetGUIDLow());
}
if (HasSavedLoot())
{
stmt = CharacterDatabase.CreateStatement(delLoot, "DELETE FROM item_loot WHERE guid = ?");
stmt.PExecute(GetGUIDLow());
}
delete this;
return;
}
case ITEM_UNCHANGED:
return;
}
if (m_lootState == ITEM_LOOT_CHANGED || m_lootState == ITEM_LOOT_REMOVED)
{
static SqlStatementID delLoot ;
SqlStatement stmt = CharacterDatabase.CreateStatement(delLoot, "DELETE FROM item_loot WHERE guid = ?");
stmt.PExecute(GetGUIDLow());
}
if (loot && (m_lootState == ITEM_LOOT_NEW || m_lootState == ITEM_LOOT_CHANGED))
{
if (Player* owner = GetOwner())
{
static SqlStatementID saveGold ;
static SqlStatementID saveLoot ;
// save money as 0 itemid data
if (loot->GetGoldAmount())
{
SqlStatement stmt = CharacterDatabase.CreateStatement(saveGold, "INSERT INTO item_loot (guid,owner_guid,itemid,amount,property) VALUES (?, ?, 0, ?, 0)");
stmt.PExecute(GetGUIDLow(), owner->GetGUIDLow(), loot->GetGoldAmount());
}
SqlStatement stmt = CharacterDatabase.CreateStatement(saveLoot, "INSERT INTO item_loot (guid,owner_guid,itemid,amount,property) VALUES (?, ?, ?, ?, ?)");
// save items and quest items (at load its all will added as normal, but this not important for item loot case)
LootItemList lootList;
//.........这里部分代码省略.........
示例5: GetGUIDLow
void Item::SaveToDB(SQLTransaction& trans)
{
uint32 guid = GetGUIDLow();
switch (uState)
{
case ITEM_NEW:
case ITEM_CHANGED:
{
uint8 index = 0;
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(uState == ITEM_NEW ? CHAR_ADD_ITEM_INSTANCE : CHAR_UPDATE_ITEM_INSTANCE);
stmt->setUInt32( index, GetEntry());
stmt->setUInt32(++index, GUID_LOPART(GetOwnerGUID()));
stmt->setUInt32(++index, GUID_LOPART(GetUInt64Value(ITEM_FIELD_CREATOR)));
stmt->setUInt32(++index, GUID_LOPART(GetUInt64Value(ITEM_FIELD_GIFTCREATOR)));
stmt->setUInt32(++index, GetCount());
stmt->setUInt32(++index, GetUInt32Value(ITEM_FIELD_DURATION));
std::ostringstream ssSpells;
for (uint8 i = 0; i < MAX_ITEM_PROTO_SPELLS; ++i)
ssSpells << GetSpellCharges(i) << " ";
stmt->setString(++index, ssSpells.str());
stmt->setUInt32(++index, GetUInt32Value(ITEM_FIELD_FLAGS));
std::ostringstream ssEnchants;
for (uint8 i = 0; i < MAX_ENCHANTMENT_SLOT; ++i)
{
ssEnchants << GetEnchantmentId(EnchantmentSlot(i)) << " ";
ssEnchants << GetEnchantmentDuration(EnchantmentSlot(i)) << " ";
ssEnchants << GetEnchantmentCharges(EnchantmentSlot(i)) << " ";
}
stmt->setString(++index, ssEnchants.str());
stmt->setInt32 (++index, GetItemRandomPropertyId());
stmt->setUInt32(++index, GetUInt32Value(ITEM_FIELD_DURABILITY));
stmt->setUInt32(++index, GetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME));
stmt->setString(++index, m_text);
stmt->setUInt32(++index, guid);
trans->Append(stmt);
if ((uState == ITEM_CHANGED) && HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_WRAPPED))
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPDATE_GIFT_OWNER);
stmt->setUInt32(0, GUID_LOPART(GetOwnerGUID()));
stmt->setUInt32(1, guid);
trans->Append(stmt);
}
break;
}
case ITEM_REMOVED:
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE);
stmt->setUInt32(0, guid);
trans->Append(stmt);
if (HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_WRAPPED))
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GIFT);
stmt->setUInt32(0, guid);
trans->Append(stmt);
}
delete this;
return;
}
case ITEM_UNCHANGED:
break;
}
SetState(ITEM_UNCHANGED);
}
示例6: memset
void Creature::generateLoot()
{
memset(item_list, 0, 8*128);
itemcount = 0;
int LootValue = 0, MaxLootValue = 0;
int itemsToGet = 0;
int creature_level = getLevel();
if(creature_level < 10)
{
itemsToGet = rand()%2;
}
else if(creature_level < 25)
{
itemsToGet = rand()%3;
}
else if(creature_level < 40)
{
itemsToGet = rand()%4;
}
else if(creature_level < 60)
{
itemsToGet = rand()%5;
}
else if(creature_level < 80)
{
itemsToGet = rand()%6;
}
else
{
itemsToGet = rand()%7;
}
m_lootMoney = (uint32)(creature_level * (rand()%5 + 1)*sWorld.getRate(RATE_DROP));
if( itemsToGet == 0 )
return;
MaxLootValue = (int)(((creature_level * (rand()%40+50))/5)*sWorld.getRate(RATE_DROP)+rand()%5+5);
const LootMgr::LootList &loot_list(LootManager.getCreaturesLootList(GetUInt32Value(OBJECT_FIELD_ENTRY)));
bool not_done = (loot_list.size() && itemsToGet);
std::vector<short> indexes(loot_list.size());
std::generate(indexes.begin(), indexes.end(), SequenceGen());
sLog.outDebug("Number of items to get %d", itemsToGet);
while (not_done)
{
int idx = rand()%indexes.size();
const LootItem &item(loot_list[indexes[idx]]);
indexes.erase(indexes.begin()+idx);
ItemPrototype *pCurItem = objmgr.GetItemPrototype(item.itemid);
if( pCurItem != NULL && item.chance >= (rand()%100) )
{
if( !(LootValue > MaxLootValue) )
{
LootValue += pCurItem->BuyPrice;
addItem(item.itemid, 1);
--itemsToGet;
}
}
not_done = (itemsToGet && indexes.size() && !(LootValue > MaxLootValue));
}
}
示例7: GetGUIDLow
void Item::SaveToDB()
{
uint32 guid = GetGUIDLow();
switch (uState)
{
case ITEM_NEW:
{
static SqlStatementID delItem ;
static SqlStatementID insItem ;
SqlStatement stmt = CharacterDatabase.CreateStatement(delItem, "DELETE FROM item_instance WHERE guid = ?");
stmt.PExecute(guid);
std::ostringstream ss;
for (uint16 i = 0; i < m_valuesCount; ++i)
ss << GetUInt32Value(i) << " ";
stmt = CharacterDatabase.CreateStatement(insItem, "INSERT INTO item_instance (guid,owner_guid,data) VALUES (?, ?, ?)");
stmt.PExecute(guid, GetOwnerGuid().GetCounter(), ss.str().c_str());
} break;
case ITEM_CHANGED:
{
static SqlStatementID updInstance ;
static SqlStatementID updGifts ;
SqlStatement stmt = CharacterDatabase.CreateStatement(updInstance, "UPDATE item_instance SET data = ?, owner_guid = ? WHERE guid = ?");
std::ostringstream ss;
for (uint16 i = 0; i < m_valuesCount; ++i)
ss << GetUInt32Value(i) << " ";
stmt.PExecute(ss.str().c_str(), GetOwnerGuid().GetCounter(), guid);
if (HasFlag(ITEM_FIELD_FLAGS, ITEM_DYNFLAG_WRAPPED))
{
stmt = CharacterDatabase.CreateStatement(updGifts, "UPDATE character_gifts SET guid = ? WHERE item_guid = ?");
stmt.PExecute(GetOwnerGuid().GetCounter(), GetGUIDLow());
}
} break;
case ITEM_REMOVED:
{
static SqlStatementID delItemText;
static SqlStatementID delInst ;
static SqlStatementID delGifts ;
static SqlStatementID delLoot ;
if (uint32 item_text_id = GetUInt32Value(ITEM_FIELD_ITEM_TEXT_ID))
{
SqlStatement stmt = CharacterDatabase.CreateStatement(delItemText, "DELETE FROM item_text WHERE id = ?");
stmt.PExecute(item_text_id);
}
SqlStatement stmt = CharacterDatabase.CreateStatement(delInst, "DELETE FROM item_instance WHERE guid = ?");
stmt.PExecute(guid);
if (HasFlag(ITEM_FIELD_FLAGS, ITEM_DYNFLAG_WRAPPED))
{
stmt = CharacterDatabase.CreateStatement(delGifts, "DELETE FROM character_gifts WHERE item_guid = ?");
stmt.PExecute(GetGUIDLow());
}
if (HasSavedLoot())
{
stmt = CharacterDatabase.CreateStatement(delLoot, "DELETE FROM item_loot WHERE guid = ?");
stmt.PExecute(GetGUIDLow());
}
delete this;
return;
}
case ITEM_UNCHANGED:
return;
}
if (m_lootState == ITEM_LOOT_CHANGED || m_lootState == ITEM_LOOT_REMOVED)
{
static SqlStatementID delLoot ;
SqlStatement stmt = CharacterDatabase.CreateStatement(delLoot, "DELETE FROM item_loot WHERE guid = ?");
stmt.PExecute(GetGUIDLow());
}
if (m_lootState == ITEM_LOOT_NEW || m_lootState == ITEM_LOOT_CHANGED)
{
if (Player* owner = GetOwner())
{
static SqlStatementID saveGold ;
static SqlStatementID saveLoot ;
// save money as 0 itemid data
if (loot.gold)
{
SqlStatement stmt = CharacterDatabase.CreateStatement(saveGold, "INSERT INTO item_loot (guid,owner_guid,itemid,amount,property) VALUES (?, ?, 0, ?, 0)");
stmt.PExecute(GetGUIDLow(), owner->GetGUIDLow(), loot.gold);
}
SqlStatement stmt = CharacterDatabase.CreateStatement(saveLoot, "INSERT INTO item_loot (guid,owner_guid,itemid,amount,property) VALUES (?, ?, ?, ?, ?)");
// save items and quest items (at load its all will added as normal, but this not important for item loot case)
for (size_t i = 0; i < loot.GetMaxSlotInLootFor(owner); ++i)
//.........这里部分代码省略.........
示例8: Remove
void AreaTrigger::Update(uint32 p_time)
{
if (GetDuration() > int32(p_time))
_duration -= p_time;
else
Remove(); // expired
WorldObject::Update(p_time);
SpellInfo const* m_spellInfo = sSpellMgr->GetSpellInfo(GetUInt32Value(AREATRIGGER_SPELLID));
if (!m_spellInfo)
return;
if (!GetCaster())
{
Remove();
return;
}
Unit* caster = GetCaster();
float radius = 0.0f;
// Custom MoP Script
switch (m_spellInfo->Id)
{
case 102793:// Ursol's Vortex
{
std::list<Unit*> targetList;
radius = 8.0f;
SurgeCore::NearestAttackableUnitInObjectRangeCheck u_check(this, caster, radius);
SurgeCore::UnitListSearcher<SurgeCore::NearestAttackableUnitInObjectRangeCheck> searcher(this, targetList, u_check);
VisitNearbyObject(radius, searcher);
if (!targetList.empty())
for (auto itr : targetList)
if (!itr->HasAura(127797))
caster->CastSpell(itr, 127797, true);
break;
}
case 115460:// Healing Sphere
{
std::list<Unit*> targetList;
radius = 1.0f;
SurgeCore::AnyFriendlyUnitInObjectRangeCheck u_check(this, caster, radius);
SurgeCore::UnitListSearcher<SurgeCore::AnyFriendlyUnitInObjectRangeCheck> searcher(this, targetList, u_check);
VisitNearbyObject(radius, searcher);
if (!targetList.empty())
{
for (auto itr : targetList)
{
caster->CastSpell(itr, 115464, true); // Healing Sphere heal
SetDuration(0);
return;
}
}
break;
}
case 115817:// Cancel Barrier
{
std::list<Unit*> targetList;
radius = 6.0f;
SurgeCore::AnyFriendlyUnitInObjectRangeCheck u_check(this, caster, radius);
SurgeCore::UnitListSearcher<SurgeCore::AnyFriendlyUnitInObjectRangeCheck> searcher(this, targetList, u_check);
VisitNearbyObject(radius, searcher);
if (!targetList.empty())
for (auto itr : targetList)
itr->CastSpell(itr, 115856, true);
break;
}
case 116011:// Rune of Power
{
std::list<Unit*> targetList;
bool affected = false;
radius = 2.25f;
SurgeCore::AnyFriendlyUnitInObjectRangeCheck u_check(this, caster, radius);
SurgeCore::UnitListSearcher<SurgeCore::AnyFriendlyUnitInObjectRangeCheck> searcher(this, targetList, u_check);
VisitNearbyObject(radius, searcher);
if (!targetList.empty())
{
for (auto itr : targetList)
{
if (itr->GetGUID() == caster->GetGUID())
{
caster->CastSpell(itr, 116014, true); // Rune of Power
affected = true;
if (caster->ToPlayer())
caster->ToPlayer()->UpdateManaRegen();
return;
//.........这里部分代码省略.........
示例9: GetGUIDLow
void Item::SaveToDB()
{
uint32 guid = GetGUIDLow();
switch (uState)
{
case ITEM_NEW:
{
std::string text = m_text;
CharacterDatabase.escape_string(text);
CharacterDatabase.PExecute( "DELETE FROM item_instance WHERE guid = '%u'", guid );
std::ostringstream ss;
ss << "INSERT INTO item_instance (guid,owner_guid,data,text) VALUES (" << guid << "," << GetOwnerGuid().GetCounter() << ",'";
for(uint16 i = 0; i < m_valuesCount; ++i )
ss << GetUInt32Value(i) << " ";
ss << "', '" << text << "')";
CharacterDatabase.Execute( ss.str().c_str() );
} break;
case ITEM_CHANGED:
{
std::string text = m_text;
CharacterDatabase.escape_string(text);
std::ostringstream ss;
ss << "UPDATE item_instance SET data = '";
for(uint16 i = 0; i < m_valuesCount; ++i )
ss << GetUInt32Value(i) << " ";
ss << "', owner_guid = '" << GetOwnerGuid().GetCounter();
ss << "', text = '" << text << "' WHERE guid = '" << guid << "'";
CharacterDatabase.Execute( ss.str().c_str() );
if (HasFlag(ITEM_FIELD_FLAGS, ITEM_DYNFLAG_WRAPPED))
CharacterDatabase.PExecute("UPDATE character_gifts SET guid = '%u' WHERE item_guid = '%u'", GetOwnerGuid().GetCounter(), GetGUIDLow());
} break;
case ITEM_REMOVED:
{
CharacterDatabase.PExecute("DELETE FROM item_instance WHERE guid = '%u'", guid);
if (HasFlag(ITEM_FIELD_FLAGS, ITEM_DYNFLAG_WRAPPED))
CharacterDatabase.PExecute("DELETE FROM character_gifts WHERE item_guid = '%u'", GetGUIDLow());
if (HasSavedLoot())
CharacterDatabase.PExecute("DELETE FROM item_loot WHERE guid = '%u'", GetGUIDLow());
delete this;
return;
}
case ITEM_UNCHANGED:
return;
}
if (m_lootState == ITEM_LOOT_CHANGED || m_lootState == ITEM_LOOT_REMOVED)
CharacterDatabase.PExecute("DELETE FROM item_loot WHERE guid = '%u'", GetGUIDLow());
if (m_lootState == ITEM_LOOT_NEW || m_lootState == ITEM_LOOT_CHANGED)
{
if(Player* owner = GetOwner())
{
// save money as 0 itemid data
if (loot.gold)
CharacterDatabase.PExecute("INSERT INTO item_loot (guid,owner_guid,itemid,amount,suffix,property) "
"VALUES (%u, %u, 0, %u, 0, 0)",
GetGUIDLow(), owner->GetGUIDLow(), loot.gold);
// save items and quest items (at load its all will added as normal, but this not important for item loot case)
for (size_t i = 0; i < loot.GetMaxSlotInLootFor(owner); ++i)
{
QuestItem *qitem = NULL;
LootItem *item = loot.LootItemInSlot(i,owner,&qitem);
if(!item)
continue;
// questitems use the blocked field for other purposes
if (!qitem && item->is_blocked)
continue;
CharacterDatabase.PExecute("INSERT INTO item_loot (guid,owner_guid,itemid,amount,suffix,property) "
"VALUES (%u, %u, %u, %u, %u, %i)",
GetGUIDLow(), owner->GetGUIDLow(), item->itemid, item->count, item->randomSuffix, item->randomPropertyId);
}
}
}
if (m_lootState != ITEM_LOOT_NONE && m_lootState != ITEM_LOOT_TEMPORARY)
SetLootState(ITEM_LOOT_UNCHANGED);
SetState(ITEM_UNCHANGED);
}
示例10: assert
void Vehicle::_AddToSlot(Unit* pPassenger, uint8 slot)
{
assert( slot < m_seatSlotMax );
if(pPassenger->IsPlayer() && TO_PLAYER(pPassenger)->m_CurrentCharm)
return;
if(pPassenger->IsPlayer() && TO_PLAYER(pPassenger)->m_isGmInvisible)
{
sChatHandler.GreenSystemMessage(TO_PLAYER(pPassenger)->GetSession(), "Please turn off invis before entering vehicle.");
return;
}
CreatureProtoVehicle* vehicleproto = CreatureProtoVehicleStorage.LookupEntry(GetEntry());
m_passengers[slot] = pPassenger;
LocationVector v;
v.x = m_vehicleSeats[slot]->m_attachmentOffsetX; /* pPassenger->m_TransporterX = */
v.y = m_vehicleSeats[slot]->m_attachmentOffsetY; /* pPassenger->m_TransporterY = */
v.z = m_vehicleSeats[slot]->m_attachmentOffsetZ; /* pPassenger->m_TransporterZ = */
v.o = 0; /* pPassenger->m_TransporterO = */
//pPassenger->m_transportPosition =& v; // This is handled elsewhere, do not initialize here.
pPassenger->movement_info.flags |= MOVEFLAG_TAXI;
pPassenger->movement_info.transX = v.x;
pPassenger->movement_info.transY = v.y;
pPassenger->movement_info.transZ = v.z;
pPassenger->movement_info.transO = GetOrientation();
pPassenger->movement_info.transSeat = slot;
pPassenger->movement_info.transGuid = WoWGuid(GetGUID());
pPassenger->SetSeatID(slot);
pPassenger->m_TransporterGUID = GetGUID();
if( m_CastSpellOnMount )
pPassenger->CastSpell( pPassenger, m_CastSpellOnMount, true );
RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SELF_RES);
// This is where the real magic happens
if( pPassenger->IsPlayer() )
{
Player* pPlayer = TO_PLAYER(pPassenger);
//pPlayer->Root();
//Dismount
if(pPlayer->m_MountSpellId && pPlayer->m_MountSpellId != m_mountSpell)
pPlayer->RemoveAura(pPlayer->m_MountSpellId);
//Remove morph spells
if(pPlayer->GetUInt32Value(UNIT_FIELD_DISPLAYID) != pPlayer->GetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID))
{
pPlayer->RemoveAllAurasOfType(SPELL_AURA_TRANSFORM);
pPlayer->RemoveAllAurasOfType(SPELL_AURA_MOD_SHAPESHIFT);
}
//Dismiss any pets
if(pPlayer->GetSummon())
{
if(pPlayer->GetSummon()->GetUInt32Value(UNIT_CREATED_BY_SPELL) > 0)
pPlayer->GetSummon()->Dismiss(false); // warlock summon -> dismiss
else
pPlayer->GetSummon()->Remove(false, true, true); // hunter pet -> just remove for later re-call
}
pPlayer->SetVehicle(this);
pPlayer->SetUInt64Value(PLAYER_FARSIGHT, GetGUID());
pPlayer->SetPlayerStatus(TRANSFER_PENDING);
sEventMgr.AddEvent(pPlayer, &Player::CheckPlayerStatus, (uint8)TRANSFER_PENDING, EVENT_PLAYER_CHECK_STATUS_Transfer, 5000, 0, 0);
pPlayer->m_sentTeleportPosition.ChangeCoords(GetPositionX(), GetPositionY(), GetPositionZ());
WorldPacket data(SMSG_MONSTER_MOVE_TRANSPORT, 100);
data << pPlayer->GetNewGUID(); // Passengerguid
data << GetNewGUID(); // Transporterguid (vehicleguid)
data << uint8(slot); // Vehicle Seat ID
data << uint8(0); // Unknown
data << GetPositionX() - pPlayer->GetPositionX(); // OffsetTransporterX
data << GetPositionY() - pPlayer->GetPositionY(); // OffsetTransporterY
data << GetPositionZ() - pPlayer->GetPositionZ(); // OffsetTransporterZ
data << getMSTime(); // Timestamp
data << uint8(0x04); // Flags
data << float(0); // Orientation Offset
data << uint32(MOVEFLAG_TB_MOVED); // MovementFlags
data << uint32(0); // MoveTime
data << uint32(1); // Points
data << v.x; // GetTransOffsetX();
data << v.y; // GetTransOffsetY();
data << v.z; // GetTransOffsetZ();
SendMessageToSet(&data, true);
if(vehicleproto)
{ // We have proto, no accessory in slot, and slot sets unselectable, unlike some seats
if(!vehicleproto->seats[slot].accessoryentry && vehicleproto->seats[slot].unselectableaccessory)
pPlayer->SetFlag(UNIT_FIELD_FLAGS, (UNIT_FLAG_UNKNOWN_5 | UNIT_FLAG_PREPARATION | UNIT_FLAG_NOT_SELECTABLE));
}
else
pPlayer->SetFlag(UNIT_FIELD_FLAGS, (UNIT_FLAG_UNKNOWN_5 | UNIT_FLAG_PREPARATION | UNIT_FLAG_NOT_SELECTABLE));
if(slot == 0)
{
if(m_vehicleSeats[slot]->IsControllable())
{
m_redirectSpellPackets = pPlayer;
//.........这里部分代码省略.........
示例11: WorldGetUnit
//.........这里部分代码省略.........
case SPELL_AURA_MOD_POSSESS_PET: {
sLog.outDebug ("ApplyModifier: Unsupported SPELL_AURA_MOD_POSSESS_PET");
break; }
case SPELL_AURA_MOD_INCREASE_SPEED_ALWAYS: {
unit = WorldGetUnit (GetGUID());
if (unit != NULL) {
if (apply) unit->ModifySpeedMod (mod->GetAmount() / 100.0f);
else {
if (mod->GetAmount() != 0)
unit->ModifySpeedMod (100.0f / mod->GetAmount());
else
unit->SetSpeedMod (1.0f);
}
} else {
sLog.outDebug ("ApplyModifier SPELL_AURA_MOD_INCREASE_SPEED_ALWAYS: Unit %X not found", GetGUIDLow());
}
break; }
case SPELL_AURA_MOD_DAMAGE_DONE: {
sLog.outDebug ("ApplyModifier: Unsupported SPELL_AURA_MOD_DAMAGE_DONE");
break; }
case SPELL_AURA_MOD_MOUNTED_SPEED_ALWAYS: {
sLog.outDebug ("ApplyModifier: Unsupported SPELL_AURA_MOD_MOUNTED_SPEED_ALWAYS");
break; }
case SPELL_AURA_MOD_CREATURE_RANGED_ATTACK_POWER: {
sLog.outDebug ("ApplyModifier: Unsupported SPELL_AURA_MOD_CREATURE_RANGED_ATTACK_POWER");
break; }
case SPELL_AURA_MOD_INCREASE_ENERGY_PERCENT: {
uint32 percent = mod->GetAmount();
uint32 current = GetUInt32Value(UNIT_FIELD_POWER4);
apply ?
SetUInt32Value(UNIT_FIELD_POWER4,current+current/100*percent)
: SetUInt32Value(UNIT_FIELD_POWER4,current-current/(100+percent)*100);
break; }
case SPELL_AURA_MOD_INCREASE_HEALTH_PERCENT: {
uint32 percent = mod->GetAmount();
uint32 current = GetUInt32Value(UNIT_FIELD_MAXHEALTH);
apply ?
SetUInt32Value(UNIT_FIELD_MAXHEALTH,current+current/100*percent)
: SetUInt32Value(UNIT_FIELD_MAXHEALTH,current-current/(100+percent)*100);
break; }
case SPELL_AURA_MOD_MANA_REGEN_INTERRUPT: {
sLog.outDebug ("ApplyModifier: Unsupported SPELL_AURA_MOD_MANA_REGEN_INTERRUPT");
break; }
case SPELL_AURA_MOD_HEALING_DONE: {
sLog.outDebug ("ApplyModifier: Unsupported SPELL_AURA_MOD_HEALING_DONE");
break; }
case SPELL_AURA_MOD_HEALING_DONE_PERCENT: {
sLog.outDebug ("ApplyModifier: Unsupported SPELL_AURA_MOD_HEALING_DONE_PERCENT");
break; }
case SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE: {
sLog.outDebug ("ApplyModifier: Unsupported SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE");
break; }
case SPELL_AURA_MOD_HASTE: {
sLog.outDebug ("ApplyModifier: Unsupported SPELL_AURA_MOD_HASTE");
break; }
示例12: data
void Vehicle::RemovePassenger(Unit* pPassenger)
{
if(pPassenger == NULL) // We have enough problems that we need to do this :(
return;
uint8 slot = pPassenger->GetSeatID();
pPassenger->SetVehicle(NULL);
pPassenger->SetSeatID(NULL);
pPassenger->RemoveFlag(UNIT_FIELD_FLAGS, (UNIT_FLAG_UNKNOWN_5 | UNIT_FLAG_PREPARATION | UNIT_FLAG_NOT_SELECTABLE));
if( pPassenger->IsPlayer() && TO_PLAYER(pPassenger)->m_MountSpellId != m_mountSpell )
pPassenger->RemoveAura(TO_PLAYER(pPassenger)->m_MountSpellId);
if( m_mountSpell )
pPassenger->RemoveAura( m_mountSpell );
if( m_CastSpellOnMount )
pPassenger->RemoveAura( m_CastSpellOnMount );
WorldPacket data(SMSG_MONSTER_MOVE, 85);
data << pPassenger->GetNewGUID(); // PlayerGUID
data << uint8(0x40); // Unk - blizz uses 0x40
data << pPassenger->GetPosition(); // Player Position xyz
data << getMSTime(); // Timestamp
data << uint8(0x4); // Flags
data << pPassenger->GetOrientation(); // Orientation
data << uint32(MOVEFLAG_AIR_SUSPENSION); // MovementFlags
data << uint32(0); // MovementTime
data << uint32(1); // Pointcount
data << GetPosition(); // Vehicle Position xyz
SendMessageToSet(&data, false);
pPassenger->movement_info.flags &= ~MOVEFLAG_TAXI;
pPassenger->movement_info.transX = 0;
pPassenger->movement_info.transY = 0;
pPassenger->movement_info.transZ = 0;
pPassenger->movement_info.transO = 0;
pPassenger->movement_info.transTime = 0;
pPassenger->movement_info.transSeat = 0;
pPassenger->movement_info.transGuid = WoWGuid(uint64(NULL));
if(pPassenger->IsPlayer())
{
Player* plr = TO_PLAYER(pPassenger);
if(plr == GetControllingUnit())
{
plr->m_CurrentCharm = NULL;
data.Initialize(SMSG_CLIENT_CONTROL_UPDATE);
data << GetNewGUID() << (uint8)0;
plr->GetSession()->SendPacket(&data);
}
RemoveFlag(UNIT_FIELD_FLAGS, (UNIT_FLAG_PLAYER_CONTROLLED_CREATURE | UNIT_FLAG_PLAYER_CONTROLLED));
plr->SetPlayerStatus(TRANSFER_PENDING); // We get an ack later, if we don't set this now, we get disconnected.
sEventMgr.AddEvent(plr, &Player::CheckPlayerStatus, (uint8)TRANSFER_PENDING, EVENT_PLAYER_CHECK_STATUS_Transfer, 5000, 0, 0);
plr->m_sentTeleportPosition.ChangeCoords(GetPositionX(), GetPositionY(), GetPositionZ());
plr->SetPosition(GetPositionX(), GetPositionY(), GetPositionZ(), GetOrientation());
data.Initialize(MSG_MOVE_TELEPORT_ACK);
data << plr->GetNewGUID();
data << plr->m_teleportAckCounter;
plr->m_teleportAckCounter++;
data << uint32(MOVEFLAG_FLYING);
data << uint16(0x40);
data << getMSTime();
data << GetPositionX();
data << GetPositionY();
data << GetPositionZ();
data << GetOrientation();
data << uint32(0);
plr->GetSession()->SendPacket(&data);
plr->SetUInt64Value( PLAYER_FARSIGHT, 0 );
data.Initialize(SMSG_PET_DISMISS_SOUND);
data << uint32(m_vehicleSeats[slot]->m_exitUISoundID);
data << plr->GetPosition();
plr->GetSession()->SendPacket(&data);
data.Initialize(SMSG_PET_SPELLS);
data << uint64(0);
data << uint32(0);
plr->GetSession()->SendPacket(&data);
CreatureProtoVehicle* vehicleproto = CreatureProtoVehicleStorage.LookupEntry(GetEntry());
if(vehicleproto && vehicleproto->healthfromdriver)
{
if(slot == 0)
{
uint32 health = GetUInt32Value(UNIT_FIELD_HEALTH);
uint32 maxhealth = GetUInt32Value(UNIT_FIELD_MAXHEALTH);
uint32 protomaxhealth = GetProto()->MaxHealth;
uint32 healthdiff = maxhealth - health;
uint32 plritemlevel = plr->GetTotalItemLevel();
uint32 convrate = vehicleproto->healthunitfromitemlev;
if(plritemlevel != 0 && convrate != 0)
{
uint32 healthloss = healthdiff+plritemlevel*convrate;
SetUInt32Value(UNIT_FIELD_HEALTH, GetProto()->MaxHealth - healthloss);
//.........这里部分代码省略.........
示例13: GetUInt32Value
bool Item::IsRefundOrSoulboundTradeExpired(Player* owner) const
{
return GetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME) + (2 * HOUR) < owner->GetTotalPlayedTime();
}
示例14: EndFishing
void GameObject::UseFishingNode(Player *player)
{
sEventMgr.RemoveEvents( this );
if( GetUInt32Value( GAMEOBJECT_FLAGS ) != 32 ) // Clicking on the bobber before something is hooked
{
player->GetSession()->OutPacket( SMSG_FISH_NOT_HOOKED );
EndFishing( player, true );
return;
}
/* Unused code: sAreaStore.LookupEntry(GetMapMgr()->GetAreaID(GetPositionX(),GetPositionY()))->ZoneId*/
uint32 zone = player->GetAreaID();
if( zone == 0 ) // If the player's area ID is 0, use the zone ID instead
zone = player->GetZoneId();
FishingZoneEntry *entry = FishingZoneStorage.LookupEntry( zone );
if( entry == NULL ) // No fishing information found for area or zone, log an error, and end fishing
{
sLog.outError( "ERROR: Fishing zone information for zone %d not found!", zone );
EndFishing( player, true );
return;
}
uint32 maxskill = entry->MaxSkill;
uint32 minskill = entry->MinSkill;
if( player->_GetSkillLineCurrent( SKILL_FISHING, false ) < maxskill )
player->_AdvanceSkillLine( SKILL_FISHING, float2int32( 1.0f * sWorld.getRate( RATE_SKILLRATE ) ) );
GameObject * school = NULL;
this->AquireInrangeLock(); //make sure to release lock before exit function !
for ( InRangeSet::iterator it = GetInRangeSetBegin(); it != GetInRangeSetEnd(); ++it )
{
if ( (*it) == NULL || (*it)->GetTypeId() != TYPEID_GAMEOBJECT || (*it)->GetUInt32Value(GAMEOBJECT_TYPE_ID) != GAMEOBJECT_TYPE_FISHINGHOLE)
continue;
school = static_cast<GameObject *>( *it );
if ( !isInRange( school, (float)school->GetInfo()->sound1 ) )
{
school = NULL;
continue;
}
else
break;
}
this->ReleaseInrangeLock();
if ( school != NULL ) // open school loot if school exists
{
lootmgr.FillGOLoot( &school->loot, school->GetEntry(), school->GetMapMgr() ? ( school->GetMapMgr()->iInstanceMode ? true : false ) : false );
player->SendLoot( school->GetGUID(), LOOT_FISHING );
EndFishing( player, false );
school->CatchFish();
if ( !school->CanFish() )
sEventMgr.AddEvent( school, &GameObject::Despawn, ( 1800000 + RandomUInt( 3600000 ) ), EVENT_GAMEOBJECT_EXPIRE, 10000, 1, EVENT_FLAG_DO_NOT_EXECUTE_IN_WORLD_CONTEXT ); // respawn in 30 - 90 minutes
}
else if( Rand( ( ( player->_GetSkillLineCurrent( SKILL_FISHING, true ) - minskill ) * 100 ) / maxskill ) ) // Open loot on success, otherwise FISH_ESCAPED.
{
lootmgr.FillFishingLoot( &loot, zone );
player->SendLoot( GetGUID(), LOOT_FISHING );
EndFishing( player, false );
}
else // Failed
{
player->GetSession()->OutPacket( SMSG_FISH_ESCAPED );
EndFishing( player, true );
}
}
示例15: VALUES
void Item::SaveToDB( int16 containerslot, int16 slot, bool firstsave, QueryBuffer* buf )
{
if( !m_isDirty && !firstsave )
return;
std::stringstream ss;
ss << "REPLACE INTO playeritems VALUES(";
ss << m_uint32Values[ITEM_FIELD_OWNER] << ",";
ss << m_uint32Values[OBJECT_FIELD_GUID] << ",";
ss << m_uint32Values[OBJECT_FIELD_ENTRY] << ",";
ss << wrapped_item_id << ",";
ss << m_uint32Values[ITEM_FIELD_GIFTCREATOR] << ",";
ss << m_uint32Values[ITEM_FIELD_CREATOR] << ",";
ss << GetUInt32Value(ITEM_FIELD_STACK_COUNT) << ",";
ss << (int32)GetChargesLeft() << ",";
ss << GetUInt32Value(ITEM_FIELD_FLAGS) << ",";
ss << random_prop << "," << random_suffix << ",";
ss << GetTextID() << ",";
ss << GetUInt32Value(ITEM_FIELD_DURABILITY) << ",";
ss << static_cast<int>(containerslot) << ",";
ss << static_cast<int>(slot) << ",'";
// Pack together enchantment fields
if( Enchantments.size() > 0 )
{
EnchantmentMap::iterator itr = Enchantments.begin();
for(; itr != Enchantments.end(); itr++)
{
if( itr->second.RemoveAtLogout )
continue;
uint32 elapsed_duration = uint32( UNIXTIME - itr->second.ApplyTime );
int32 remaining_duration = itr->second.Duration - elapsed_duration;
if( remaining_duration < 0 )
remaining_duration = 0;
if( itr->second.Enchantment && ( remaining_duration && remaining_duration > 5 ) || ( itr->second.Duration == 0 ) )
{
ss << itr->second.Enchantment->Id << ",";
ss << remaining_duration << ",";
ss << itr->second.Slot << ",";
ss << uint32(itr->second.Dummy ? 1 : 0) << ";";
}
}
}
ss << "','";
if(Gems[0] || Gems[1] || Gems[2])
{ // We get socket.
for(uint32 g = 0; g < 3; g++)
{
// Socket screen turn on.
if(Gems[g])
{
ss << g; // All your gem are belong to us.
ss << ":" << Gems[g] << ";";
}
}
}
ss << "')";
if( firstsave )
CharacterDatabase.WaitExecute( ss.str().c_str() );
else
{
if( buf == NULL )
CharacterDatabase.Execute( ss.str().c_str() );
else
buf->AddQueryStr( ss.str() );
}
m_isDirty = false;
}