keonji | Дата: Субота, 15.01.2011, 18:41 | Сообщение # 1 |
Скаут
Группа: Пользователи
|
Общее: PvP Token System [Rewrite] Стандартный Пвптокен, но добавлена возможность выдавать золото, честь и АП. Код модифицировали Batters, keonji, САХАЛИН и bondiano Нужен тест! Code diff --git a/src/game/Language.h b/src/game/Language.h index 38ec346..4f8e6a9 100644 --- a/src/game/Language.h +++ b/src/game/Language.h @@ -851,6 +851,7 @@ enum MangosStrings
// Use for not-in-offcial-sources patches // 10000-10999 + LANG_YOU_RECEIVE_TOKEN = 11050,
// Use for custom patches 11000-11999 diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 106fdb4..d40d80a 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -8000,7 +8000,7 @@ void Player::SendLoot(ObjectGuid guid, L if (!bones->lootForBody) { bones->lootForBody = true; - uint32 pLevel = bones->loot.gold; + uint32 pLevel = bones->loot. gold; bones->loot.clear(); if (GetBattleGround()->GetTypeID() == BATTLEGROUND_AV) loot->FillLoot(0, LootTemplates_Creature, this, false); @@ -21449,6 +21449,43 @@ void Player::UpdateFallInformationIfNeed( MovementInfo const& minfo,uint16 opcod SetFallInformation(minfo.GetFallTime(), minfo.GetPos()->z); }
+///PVP Token +void Player::ReceiveToken() +{ + if(!sWorld.getConfig(CONFIG_PVP_TOKEN_ENABLE)) + return; + + uint8 MapRestriction = sWorld.getConfig(CONFIG_PVP_TOKEN_RESTRICTION); + + if( MapRestriction == 1 && !InBattleGround() && !HasByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP) || + MapRestriction == 2 && !HasByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP) || + MapRestriction == 3 && !InBattleGround()) + return; + + uint32 itemID = sWorld.getConfig(CONFIG_PVP_TOKEN_ITEMID); + uint32 itemCount = sWorld.getConfig(CONFIG_PVP_TOKEN_ITEMCOUNT); + uint32 goldAmount = sWorld.getConfig(CONFIG_PVP_TOKEN_GOLD); + uint32 honorAmount = sWorld.getConfig(CONFIG_PVP_TOKEN_HONOR); + uint32 arenaAmount = sWorld.getConfig(CONFIG_PVP_TOKEN_ARENA); + + ItemPosCountVec dest; + uint8 msg = CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemID, itemCount); + if( msg != EQUIP_ERR_OK ) // convert to possible store amount + { + SendEquipError( msg, NULL, NULL ); + return; + } + + Item* item = StoreNewItem( dest, itemID, true, Item::GenerateItemRandomPropertyId(itemID)); + SendNewItem(item,itemCount,true,false); + + if( honorAmount > 0 ) + ModifyHonorPoints(honorAmount); + SaveToDB(); + return; + + if( goldAmount > 0 ) + ModifyMoney(goldAmount); + SaveGoldToDB(); + return; + + if( arenaAmount > 0 ) + ModifyArenaPoints(arenaAmount); + SaveToDB(); + return; + + ChatHandler(this).PSendSysMessage(LANG_YOU_RECEIVE_TOKEN); +} + + void Player::UnsummonPetTemporaryIfAny() { Pet* pet = GetPet(); diff --git a/src/game/Player.h b/src/game/Player.h index 544e7e1..6801a77 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -2019,6 +2019,9 @@ class MANGOS_DLL_SPEC Player : public Unit void _ApplyWeaponDependentAuraMods(Item *item, WeaponAttackType attackType, bool apply); void _ApplyWeaponDependentAuraCritMod(Item *item, WeaponAttackType attackType, Aura* aura, bool apply); void _ApplyWeaponDependentAuraDamageMod(Item *item, WeaponAttackType attackType, Aura* aura, bool apply); + + ///PVP Token + void ReceiveToken();
void _ApplyItemMods(Item *item,uint8 slot,bool apply); void _RemoveAllItemMods(); diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index d0c82d8..91d3919 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -697,6 +697,11 @@ uint32 Unit::DealDamage(Unit *pVictim, uint32 damage, CleanDamage const* cleanDa if(player_tap && player_tap != pVictim) { player_tap->ProcDamageAndSpell(pVictim, PROC_FLAG_KILL, PROC_FLAG_KILLED, PROC_EX_NONE, 0); + + /// PvP Token + int8 leveldiff = player_tap->getLevel() - pVictim->getLevel(); + if((pVictim->GetTypeId() == TYPEID_PLAYER) && leveldiff < 10) + player_tap->ReceiveToken();
WorldPacket data(SMSG_PARTYKILLLOG, (8+8)); //send event PARTY_KILL data << player_tap->GetObjectGuid(); //player with killing blow diff --git a/src/game/World.cpp b/src/game/World.cpp index abf273d..034178a 100644 --- a/src/game/World.cpp +++ b/src/game/World.cpp @@ -755,6 +755,16 @@ void World::LoadConfigSettings(bool reload) setConfig(CONFIG_UINT32_TIMERBAR_BREATH_MAX, "TimerBar.Breath.Max", 180); setConfig(CONFIG_UINT32_TIMERBAR_FIRE_GMLEVEL, "TimerBar.Fire.GMLevel", SEC_CONSOLE); setConfig(CONFIG_UINT32_TIMERBAR_FIRE_MAX, "TimerBar.Fire.Max", 1); + + /* PvP Token System */ + setConfig(CONFIG_PVP_TOKEN_ENABLE,"PvPToken.Enable", true); + setConfig(CONFIG_PVP_TOKEN_ITEMID,"PvPToken.ItemID", 29434); + setConfig(CONFIG_PVP_TOKEN_ITEMCOUNT,"PvPToken.ItemCount", 1); + setConfig(CONFIG_PVP_TOKEN_GOLD,"PvPToken.Gold", 100000); + setConfig(CONFIG_PVP_TOKEN_HONOR,"PvPToken.Honor", 75000); + setConfig(CONFIG_PVP_TOKEN_ARENA,"PvPToken.Arena", 5000); + setConfig(CONFIG_PVP_TOKEN_RESTRICTION,"PvPToken.MapRestriction", 4); + + if(getConfig(CONFIG_PVP_TOKEN_ITEMCOUNT) < 1) + setConfig(CONFIG_PVP_TOKEN_ITEMCOUNT,"PvPToken.ItemCount",1);
m_VisibleUnitGreyDistance = sConfig.GetFloatDefault("Visibility.Distance.Grey.Unit", 1); if(m_VisibleUnitGreyDistance > MAX_VISIBILITY_DISTANCE) diff --git a/src/game/World.h b/src/game/World.h index b289b91..31ee893 100644 --- a/src/game/World.h +++ b/src/game/World.h @@ -260,7 +260,15 @@ enum eConfigFloatValues CONFIG_FLOAT_CREATURE_FAMILY_ASSISTANCE_RADIUS, CONFIG_FLOAT_GROUP_XP_DISTANCE, CONFIG_FLOAT_THREAT_RADIUS, - CONFIG_FLOAT_VALUE_COUNT + CONFIG_FLOAT_VALUE_COUNT, + + ///PVP Token + CONFIG_PVP_TOKEN_ENABLE, + CONFIG_PVP_TOKEN_ITEMID, + CONFIG_PVP_TOKEN_ITEMCOUNT, + CONFIG_PVP_TOKEN_GOLD, + CONFIG_PVP_TOKEN_HONOR, + CONFIG_PVP_TOKEN_ARENA, + CONFIG_PVP_TOKEN_RESTRICTION + };
/// Configuration elements diff --git a/src/mangosd/mangosd.conf.dist.in b/src/mangosd/mangosd.conf.dist.in index f5ba807..390c66c 100644 --- a/src/mangosd/mangosd.conf.dist.in +++ b/src/mangosd/mangosd.conf.dist.in @@ -1519,3 +1519,38 @@ SOAP.Port = 7878 CharDelete.Method = 0 CharDelete.MinLevel = 0 CharDelete.KeepDays = 30 + +################################################################################################################### +# PvP Token System (custom patch) +# +# PvPToken.Enable +# Enable/disable PvP Token system. +# Default: 1 (enabled) +# 0 (disabled) +# +# PvPToken.ItemID +# The item ID of the token that players will receive after killing an enemy. +# Default: 29434 (Badge of Justice) +# +# PvPToken.ItemCount +# The count amount of the ItemID +# Default: 1 +# +# PvPToken.GoldCount +# The amount of gold that players will receive after killing an enemy. +# Default: 100000 +# +# PvPToken.Honor +# The amount of honor points that players will receive after killing an enemy. +# Default: 75000 +# +# PvPToken.Arena +# The amount of arena points that players will receive after killing an enemy. +# Default: 5000 +# +# PvPToken.MapRestriction +# The type of maps where players can receive the token +# Default: 4 - all maps +# 3 - battlegrounds only +# 2 - FFA areas only (both instanced and world arenas) +# 1 - battlegrounds and FFA areas only +# +################################################################################################################### + + PvPToken .Enable = 1 +PvPToken.ItemID = 29434 +PvPToken.ItemCount = 1 +PvPToken.Gold = 100000 +PvPToken.Honor = 75000 +PvPToken.Arena = 5000 +PvPToken.MapRestriction = 4
Сообщение отредактировал keonji - Субота, 15.01.2011, 18:42 |
|
|
|