PvP Token System
|
|
Code diff --git a/src/mangosd/mangosd.conf.dist.in b/src/mangosd/mangosd.conf.dist.in index 0bb942e..339b5a1 100644 --- a/src/mangosd/mangosd.conf.dist.in +++ b/src/mangosd/mangosd.conf.dist.in @@ -1375,3 +1375,33 @@ Ra.IP = 0.0.0.0 Ra.Port = 3443 Ra.MinLevel = 3 Ra.Secure = 1 + +#################################################################################################################### +# PvP Token System +# +# 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.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 = 0 +PvPToken.ItemID = 29434 +PvPToken.ItemCount = 1 +PvPToken.MapRestriction = 4 diff --git a/src/game/Language.h b/src/game/Language.h index 823d6d5..938755b 100644 --- a/src/game/Language.h +++ b/src/game/Language.h @@ -848,7 +848,7 @@ enum MangosStrings // 10000-10999 // Use for custom patches 11000-11999 - + LANG_YOU_RECEIVE_TOKEN = 11050, // NOT RESERVED IDS 12000-1999999999 // `db_script_string` table index 2000000000-2000009999 (MIN_DB_SCRIPT_STRING_ID-MAX_DB_SCRIPT_STRING_ID) // For other tables maybe 2000010000-2147483647 (max index) diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 65c6ac0..34535df 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -21017,6 +21017,35 @@ void Player::ResummonPetTemporaryUnSummonedIfAny() m_temporaryUnsummonedPetNumber = 0; } +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); + + 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); + + ChatHandler(this).PSendSysMessage(LANG_YOU_RECEIVE_TOKEN); +} + bool Player::canSeeSpellClickOn(Creature const *c) const { if(!c->HasFlag(UNIT_NPC_FLAGS,UNIT_NPC_FLAG_SPELLCLICK)) diff --git a/src/game/Player.h b/src/game/Player.h index a1ea792..158da81 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -1950,7 +1950,9 @@ class MANGOS_DLL_SPEC Player : public Unit void ModifyHonorPoints( int32 value ); void ModifyArenaPoints( int32 value ); uint32 GetMaxPersonalArenaRatingRequirement(); - + + void ReceiveToken(); + //End of PvP System void SetDrunkValue(uint16 newDrunkValue, uint32 itemid=0); diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 06d1533..98af84b 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -580,6 +580,11 @@ uint32 Unit::DealDamage(Unit *pVictim, uint32 damage, CleanDamage const* cleanDa player->RewardPlayerAndGroupAtKill(pVictim); player->ProcDamageAndSpell(pVictim, PROC_FLAG_KILL, PROC_FLAG_KILLED, PROC_EX_NONE, 0); + // PvP Token + int8 leveldiff = player->getLevel() - pVictim->getLevel(); + if(!pVictim->HasAuraType(SPELL_AURA_NO_PVP_CREDIT) && leveldiff < 10) + player->ReceiveToken(); + WorldPacket data(SMSG_PARTYKILLLOG, (8+8)); //send event PARTY_KILL data << uint64(player->GetGUID()); //player with killing blow data << uint64(pVictim->GetGUID()); //victim diff --git a/src/game/World.cpp b/src/game/World.cpp index 3361b5e..c9a4ffb 100644 --- a/src/game/World.cpp +++ b/src/game/World.cpp @@ -954,6 +954,15 @@ void World::LoadConfigSettings(bool reload) m_configs[CONFIG_THREAT_RADIUS] = sConfig.GetIntDefault("ThreatRadius", 100); + /* PvP Token System */ + m_configs[CONFIG_PVP_TOKEN_ENABLE] = sConfig.GetBoolDefault("PvPToken.Enable", true); + m_configs[CONFIG_PVP_TOKEN_ITEMID] = sConfig.GetIntDefault("PvPToken.ItemID", 29434); + m_configs[CONFIG_PVP_TOKEN_ITEMCOUNT] = sConfig.GetIntDefault("PvPToken.ItemCount", 1); + m_configs[CONFIG_PVP_TOKEN_RESTRICTION] = sConfig.GetIntDefault("PvPToken.MapRestriction", 4); + + if(m_configs[CONFIG_PVP_TOKEN_ITEMCOUNT] <= 0) + m_configs[CONFIG_PVP_TOKEN_ENABLE] = 0; + // always use declined names in the russian client m_configs[CONFIG_DECLINED_NAMES_USED] = (m_configs[CONFIG_REALM_ZONE] == REALM_ZONE_RUSSIAN) ? true : sConfig.GetBoolDefault("DeclinedNames", false); diff --git a/src/game/World.h b/src/game/World.h index 977a440..f67cd72 100644 --- a/src/game/World.h +++ b/src/game/World.h @@ -199,6 +199,10 @@ enum WorldConfigs CONFIG_LISTEN_RANGE_SAY, CONFIG_LISTEN_RANGE_TEXTEMOTE, CONFIG_LISTEN_RANGE_YELL, + CONFIG_PVP_TOKEN_E NABLE, + CONFIG_PVP_TOKEN_ITEMID, + CONFIG_PVP_TOKEN_ITEMCOUNT, + CONFIG_PVP_TOKEN_RESTRIC TION, CONFIG_SKILL_MILLING, CONFIG_BATTLEGROUND_CAST_DESERTER, CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_ENABLE, -- 1.6.3 .3
Сообщение # 1 отредактировано Tomogavk - Вторник, 29.12.2009, 01:33
|
Tomogavk, можно узнать поподробнее о патче?
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки. ©
Сообщение # 2 написано 29.12.2009 в 22:54
|
Quote (Pro|100|Hens) Tomogavk, можно узнать поподробнее о патче? Угу, мне тоже интересно
Сообщение # 3 написано 29.12.2009 в 23:07
|
Система как на тринити, включаешь в конфиге, выбираешь итем который будет даваться, выбираешь количество этих итемов, и на каких зонах, их 4: на аренах(включая гурубаши) на бг, на бг и на аренах и везде
Сообщение # 4 написано 30.12.2009 в 01:28
|
даваться за что? за килы в тех зонах?
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки. ©
Сообщение # 5 написано 30.12.2009 в 19:43
|
Quote (Pro|100|Hens) даваться за что? за килы в тех зонах? Именно за них
Сообщение # 6 написано 31.12.2009 в 00:05
|
Tomogavk, также под все ревы? ну спс но плюс еще дать не могу пррости
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки. ©
Сообщение # 7 написано 31.12.2009 в 00:07
|
Quote (Pro|100|Hens) Tomogavk, также под все ревы? ну спс но плюс еще дать не могу пррости Ну пока под новые ревы работает, если перестанет пишите подгоню.
Сообщение # 8 написано 31.12.2009 в 00:15
|
Tomogavk, мне патчи интересные бы для 2.4.3 хотелось бы узнать подойдет ли сброс кд и вот твоя эта. итд.
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки. ©
Сообщение # 9 написано 31.12.2009 в 00:19
|
Quote (Pro|100|Hens) omogavk, мне патчи интересные бы для 2.4.3 хотелось бы узнать подойдет ли сброс кд и вот твоя эта. итд. Сброс кд подойдет, да и эта должна подойди, если не подойдет напиши я скачаю 2.4.3 и подгоню патч под 2.4.3
Сообщение # 10 написано 31.12.2009 в 00:20
|
Tomogavk, в асю добавь 365932722
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки. ©
Сообщение # 11 написано 31.12.2009 в 00:29
|
Pro[100]Hens, Подошла для 2.4.3??Добавлено (05.01.2010, 00:02) --------------------------------------------- Tomogavk, Можешь зделать для 2.4.3) и чтобы падали на бг и на гурбаши арене баджи...) с меня +8))
Сообщение # 12 написано 05.01.2010 в 00:02
|
Это для 3.3.0 идет? Что-то когда исходники мангоса пытаюсь патчить ошибки выдает.Добавлено (25.01.2010, 14:52) --------------------------------------------- Это для 3.3.0 идет? Что-то когда исходники мангоса пытаюсь патчить ошибки выдает.
Сообщение # 13 написано 25.01.2010 в 14:52
|
руками ставь, для 3.3.0 немного строки не совпадают.
Сообщение # 14 написано 28.01.2010 в 05:03
|
Quote (Enigman) Подошла для 2.4.3?? подошла, все робит на ура.
Сообщение # 15 написано 28.01.2010 в 14:39
|
Сообщение # 16 написано 10.04.2010 в 22:43
|
Nomerno, так-как вы юзер готовых сборок, вам не понять... это делается при компилировании ядра
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки. ©
Сообщение # 17 написано 11.04.2010 в 00:07
|
Сообщение # 18 написано 11.04.2010 в 00:38
|
руки обломаю блин [cut] diff --git a/src/mangosd/mangosd.conf.dist.in b/src/mangosd/mangosd.conf.dist.in index 0bb942e..339b5a1 100644 --- a/src/mangosd/mangosd.conf.dist.in +++ b/src/mangosd/mangosd.conf.dist.in @@ -1375,3 +1375,33 @@ Ra.IP = 0.0.0.0 Ra.Port = 3443 Ra.MinLevel = 3 Ra.Secure = 1 + +#################################################################################################################### +# PvP Token System +# +# 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.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 = 0 +PvPToken.ItemID = 29434 +PvPToken.ItemCount = 1 +PvPToken.MapRestriction = 4 diff --git a/src/game/Language.h b/src/game/Language.h index 823d6d5..938755b 100644 --- a/src/game/Language.h +++ b/src/game/Language.h @@ -848,7 +848,7 @@ enum MangosStrings // 10000-10999 // Use for custom patches 11000-11999 - + LANG_YOU_RECEIVE_TOKEN = 11050, // NOT RESERVED IDS 12000-1999999999 // `db_script_string` table index 2000000000-2000009999 (MIN_DB_SCRIPT_STRING_ID-MAX_DB_SCRIPT_STRING_ID) // For other tables maybe 2000010000-2147483647 (max index) diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 65c6ac0..34535df 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -21017,6 +21017,35 @@ void Player::ResummonPetTemporaryUnSummonedIfAny() m_temporaryUnsummonedPetNumber = 0; } +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); + + 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); + + ChatHandler(this).PSendSysMessage(LANG_YOU_RECEIVE_TOKEN); +} + bool Player::canSeeSpellClickOn(Creature const *c) const { if(!c->HasFlag(UNIT_NPC_FLAGS,UNIT_NPC_FLAG_SPELLCLICK)) diff --git a/src/game/Player.h b/src/game/Player.h index a1ea792..158da81 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -1950,7 +1950,9 @@ class MANGOS_DLL_SPEC Player : public Unit void ModifyHonorPoints( int32 value ); void ModifyArenaPoints( int32 value ); uint32 GetMaxPersonalArenaRatingRequirement(); - + + void ReceiveToken(); + //End of PvP System void SetDrunkValue(uint16 newDrunkValue, uint32 itemid=0); diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 06d1533..98af84b 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -580,6 +580,11 @@ uint32 Unit::DealDamage(Unit *pVictim, uint32 damage, CleanDamage const* cleanDa player->RewardPlayerAndGroupAtKill(pVictim); player->ProcDamageAndSpell(pVictim, PROC_FLAG_KILL, PROC_FLAG_KILLED, PROC_EX_NONE, 0); + // PvP Token + int8 leveldiff = player->getLevel() - pVictim->getLevel(); + if(!pVictim->HasAuraType(SPELL_AURA_NO_PVP_CREDIT) && leveldiff < 10) + player->ReceiveToken(); + WorldPacket data(SMSG_PARTYKILLLOG, (8+8)); //send event PARTY_KILL data << uint64(player->GetGUID()); //player with killing blow data << uint64(pVictim->GetGUID()); //victim diff --git a/src/game/World.cpp b/src/game/World.cpp index 3361b5e..c9a4ffb 100644 --- a/src/game/World.cpp +++ b/src/game/World.cpp @@ -954,6 +954,15 @@ void World::LoadConfigSettings(bool reload) m_configs[CONFIG_THREAT_RADIUS] = sConfig.GetIntDefault("ThreatRadius", 100); + /* PvP Token System */ + m_configs[CONFIG_PVP_TOKEN_ENABLE] = sConfig.GetBoolDefault("PvPToken.Enable", true); + m_configs[CONFIG_PVP_TOKEN_ITEMID] = sConfig.GetIntDefault("PvPToken.ItemID", 29434); + m_configs[CONFIG_PVP_TOKEN_ITEMCOUNT] = sConfig.GetIntDefault("PvPToken.ItemCount", 1); + m_configs[CONFIG_PVP_TOKEN_RESTRICTION] = sConfig.GetIntDefault("PvPToken.MapRestriction", 4); + + if(m_configs[CONFIG_PVP_TOKEN_ITEMCOUNT] <= 0) + m_configs[CONFIG_PVP_TOKEN_ENABLE] = 0; + // always use declined names in the russian client m_configs[CONFIG_DECLINED_NAMES_USED] = (m_configs[CONFIG_REALM_ZONE] == REALM_ZONE_RUSSIAN) ? true : sConfig.GetBoolDefault("DeclinedNames", false); diff --git a/src/game/World.h b/src/game/World.h index 977a440..f67cd72 100644 --- a/src/game/World.h +++ b/src/game/World.h @@ -199,6 +199,10 @@ enum WorldConfigs CONFIG_LISTEN_RANGE_SAY, CONFIG_LISTEN_RANGE_TEXTEMOTE, CONFIG_LISTEN_RANGE_YELL, + CONFIG_PVP_TOKEN_E NABLE, + CONFIG_PVP_TOKEN_ITEMID, + CONFIG_PVP_TOKEN_ITEMCOUNT, + CONFIG_PVP_TOKEN_RESTRIC TION, CONFIG_SKILL_MILLING, CONFIG_BATTLEGROUND_CAST_DESERTER, CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_ENABLE, -- 1 .6.3 .3 [/cut] меняем на [cut] diff --git a/src/mangosd/mangosd.conf.dist.in b/src/mangosd/mangosd.conf.dist.in index 0bb942e..339b5a1 100644 --- a/src/mangosd/mangosd.conf.dist.in +++ b/src/mangosd/mangosd.conf.dist.in @@ -1375,3 +1375,33 @@ Ra.IP = 0.0.0.0 Ra.Port = 3443 Ra.MinLevel = 3 Ra.Secure = 1 + +#################################################################################################################### +# PvP Token System +# +# 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.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 = 0 +PvPToken.ItemID = 29434 +PvPToken.ItemCount = 1 +PvPToken.MapRestriction = 4 diff --git a/src/game/Language.h b/src/game/Language.h index 823d6d5..938755b 100644 --- a/src/game/Language.h +++ b/src/game/Language.h @@ -848,7 +848,7 @@ enum MangosStrings // 10000-10999 // Use for custom patches 11000-11999 - + LANG_YOU_RECEIVE_TOKEN = 11050, // NOT RESERVED IDS 12000-1999999999 // `db_script_string` table index 2000000000-2000009999 (MIN_DB_SCRIPT_STRING_ID-MAX_DB_SCRIPT_STRING_ID) // For other tables maybe 2000010000-2147483647 (max index) diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 65c6ac0..34535df 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -21017,6 +21017,35 @@ void Player::ResummonPetTemporaryUnSummonedIfAny() m_temporaryUnsummonedPetNumber = 0; } +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); + + 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); + + ChatHandler(this).PSendSysMessage(LANG_YOU_RECEIVE_TOKEN); +} + bool Player::canSeeSpellClickOn(Creature const *c) const { if(!c->HasFlag(UNIT_NPC_FLAGS,UNIT_NPC_FLAG_SPELLCLICK)) diff --git a/src/game/Player.h b/src/game/Player.h index a1ea792..158da81 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -1950,7 +1950,9 @@ class MANGOS_DLL_SPEC Player : public Unit void ModifyHonorPoints( int32 value ); void ModifyArenaPoints( int32 value ); uint32 GetMaxPersonalArenaRatingRequirement(); - + + void ReceiveToken(); + //End of PvP System void SetDrunkValue(uint16 newDrunkValue, uint32 itemid=0); diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 06d1533..98af84b 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -580,6 +580,11 @@ uint32 Unit::DealDamage(Unit *pVictim, uint32 damage, CleanDamage const* cleanDa player->RewardPlayerAndGroupAtKill(pVictim); player->ProcDamageAndSpell(pVictim, PROC_FLAG_KILL, PROC_FLAG_KILLED, PROC_EX_NONE, 0); + // PvP Token + uint8 leveldiff = player->getLevel() - pVictim->getLevel(); + if(!pVictim->HasAuraType(SPELL_AURA_NO_PVP_CREDIT) && leveldiff < 10) + player->ReceiveToken(); + WorldPacket data(SMSG_PARTYKILLLOG, (8+8)); //send event PARTY_KILL data << uint64(player->GetGUID()); //player with killing blow data << uint64(pVictim->GetGUID()); //victim diff --git a/src/game/World.cpp b/src/game/World.cpp index 3361b5e..c9a4ffb 100644 --- a/src/game/World.cpp +++ b/src/game/World.cpp @@ -954,6 +954,15 @@ void World::LoadConfigSettings(bool reload) m_configs[CONFIG_THREAT_RADIUS] = sConfig.GetIntDefault("ThreatRadius", 100); + /* PvP Token System */ + m_configs[CONFIG_PVP_TOKEN_ENABLE] = sConfig.GetBoolDefault("PvPToken.Enable", true); + m_configs[CONFIG_PVP_TOKEN_ITEMID] = sConfig.GetIntDefault("PvPToken.ItemID", 29434); + m_configs[CONFIG_PVP_TOKEN_ITEMCOUNT] = sConfig.GetIntDefault("PvPToken.ItemCount", 1); + m_configs[CONFIG_PVP_TOKEN_RESTRICTION] = sConfig.GetIntDefault("PvPToken.MapRestriction", 4); + + if(m_configs[CONFIG_PVP_TOKEN_ITEMCOUNT] <= 0) + m_configs[CONFIG_PVP_TOKEN_ENABLE] = 0; + // always use declined names in the russian client m_configs[CONFIG_DECLINED_NAMES_USED] = (m_configs[CONFIG_REALM_ZONE] == REALM_ZONE_RUSSIAN) ? true : sConfig.GetBoolDefault("DeclinedNames", false); diff --git a/src/game/World.h b/src/game/World.h index 977a440..f67cd72 100644 --- a/src/game/World.h +++ b/src/game/World.h @@ -199,6 +199,10 @@ enum WorldConfigs CONFIG_LISTEN_RANGE_SAY, CONFIG_LISTEN_RANGE_TEXTEMOTE, CONFIG_LISTEN_RANGE_YELL, + CONFIG_PVP_TOKEN_ENABLE, + CONFIG_PVP_TOKEN_ITEMID, + CONFIG_PVP_TOKEN_ITEMCOUNT, + CONFIG_PVP_TOKEN_RESTRICTION, CONFIG_SKILL_MILLING, CONFIG_BATTLEGROUND_CAST_DESERTER, CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_ENABLE, -- 1 .6.3 .3 [/cut]
Ой ща по саням дам ! http://wow.grin.by
Сообщение # 19 отредактировано САХАЛИН - Четверг, 26.08.2010, 21:17
|
САХАЛИН, а у меня на исходниках 10155 проблемы diff --git a/src/game/World.h b/src/game/World.h index 977a440..f67cd72 100644 --- a/src/game/World.h +++ b/src/game/World.h @@ -199,6 +199,10 @@ enum WorldConfigs - нету такого в world.h CONFIG_LISTEN_RANGE_SAY, CONFIG_LISTEN_RANGE_TEXTEMOTE, - и этих строк CONFIG_LISTEN_RANGE_YELL, + CONFIG_PVP_TOKEN_ENABLE, + CONFIG_PVP_TOKEN_ITEMID, + CONFIG_PVP_TOKEN_ITEMCOUNT, + CONFIG_PVP_TOKEN_RESTRICTION, CONFIG_SKILL_MILLING, CONFIG_BATTLEGROUND_CAST_DESERTER, - и этих строк CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_ENABLE,
Сообщение # 20 отредактировано AlO - Четверг, 26.08.2010, 22:51
|
Я реализовал так: Code CONFIG_FLOAT_LISTEN_RANGE_SAY, - это 10400, не знаю что с этим получится но компилится вроде норм, попробую запустить если крахов не бут значит всё ок. CONFIG_FLOAT_LISTEN_RANGE_YELL, CONFIG_FLOAT_LISTEN_RANGE_TEXTEMOTE, CONFIG_PVP_TOKEN_ENABLE, CONFIG_PVP_TOKEN _ITEMID, CONFIG_PVP_TOKEN_ITEMCOUNT, CONFIG_PVP_TOKEN_RESTRICTION, CONFIG_FLOAT_CREATURE_FAMILY_FLEE_ASSISTANCE_RADIUS , CONFIG_FLOAT_CREATURE_FAMILY_ASSISTANCE_RADIUS, CONFIG_FLOAT_GROUP_XP_DISTANCE, CONFIG_FLOAT_THREAT_RADIUS, CONFIG _FLOAT_VALUE_COUNT Я не помню как в 10155 выложи кусок скрипта попробую поправить. Выкладывай со строк CONFIG_FLOAT_LISTEN_RANGE_SAY да строки CONFIG_FLOAT_VALUE_COUNT я запишу сюда готовую комбинацию.Добавлено (27.08.2010, 01:05) --------------------------------------------- AlO, я вот не догоняю такую штуку должно быть + int8 leveldiff = player->getLevel() - pVictim->getLevel(); или всё же я прав что написал + uint8 leveldiff = player->getLevel() - pVictim->getLevel(); но тогда не понятно почему у меня при компиле лезет ошибка. 
Ой ща по саням дам ! http://wow.grin.by
Сообщение # 21 отредактировано САХАЛИН - Четверг, 26.08.2010, 23:23
|
САХАЛИН, ххх, я тоже думал что так можно, но вдруг функцианировать не будет?Добавлено (27.08.2010, 10:56) --------------------------------------------- САХАЛИН, я думаю должно быть int8 Добавлено (27.08.2010, 10:58) --------------------------------------------- САХАЛИН, у меня в исходниках такие же строки как и у тебя.
Сообщение # 22 написано 27.08.2010 в 10:58
|
вабще это все очень старая реализация но как вариант когда я еще несколько месяцев назад использовал эту реализацию я просто переписывал под новые определения Code diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index a5a7917..6ae7068 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -866,6 +866,11 @@ uint32 Unit::DealDamage(Unit *pVictim, uint32 damage, CleanDamage const* cleanDa group_tap->BroadcastPacket(&data, false, group_tap->GetMemberGroup(player_tap->GetObjectGuid()),player_tap->GetObjectGuid());
player_tap->SendDirectMessage(&data); + + // PvP Token System + int8 leveldiff = player_tap->getLevel() - pVictim->getLevel(); + if(!pVictim->HasAuraType(SPELL_AURA_NO_PVP_CREDIT) && leveldiff < 10) + player_tap->ReceiveToken(); } // Reward player, his pets, and group/raid members САХАЛИН, uint8 leveldiff = player ...не делайте так! Code diff --git a/src/game/World.h b/src/game/World.h @@ -173,6 +173,9 @@ enum eConfigUint32Values CONFIG_UINT32_TIMERBAR_BREATH_MAX, CONFIG_UINT32_TIMERBAR_FIRE_GMLEVEL, CONFIG_UINT32_TIMERBAR_FIRE_MAX, + CONFIG_PVP_TOKEN_ITEMID, + CONFIG_PVP_TOKEN_ITEMCOUNT, + CONFIG_PVP_TOKEN_RESTRICTION, CONFIG_UINT32_VALUE_COUNT }; @@ -307,6 +310,7 @@ enum eConfigBoolValues CONFIG_BOOL_NO_COOLDOWN, CONFIG_BOOL_HURT_IN_REAL_TIME, CONFIG_BOOL_NO_WAIT_AFTER_CAST, + CONFIG_BOOL_PVP_TOKEN_ENABLE, CONFIG_BOOL_VALUE_COUNT }; diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 49ac6de..229ac92 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -20027,6 +20027,6 @@ void Player::ResummonPetTemporaryUnSummonedIfAny() m_temporaryUnsummonedPetNumber = 0; } void Player::ReceiveToken() { - if(!sWorld.getConfig(CONFIG_PVP_TOKEN_ENABLE)) + if(!sWorld.getConfig(CONFIG_BOOL_PVP_TOKEN_ENABLE)) return; но это еще не все, его надо под основание переписать
Сообщение # 23 написано 27.08.2010 в 12:29
|
lanc, хорошо тогда подскажи как вот эту часть патча, переписать под новые определения, у меня только в Unit.cpp проблема с int8 leveldiff = player_tap->getLevel() - pVictim->getLevel(); частью кода, а так всё вроде прекрасно, но если менять int8 leveldiff = player_tap->getLevel() - pVictim->getLevel(); то и строку if(!pVictim->HasAuraType(SPELL_AURA_NO_PVP_CREDIT) && leveldiff < 10) тож колупать придётся. + + // PvP Token System + int8 leveldiff = player_tap->getLevel() - pVictim->getLevel(); + if(!pVictim->HasAuraType(SPELL_AURA_NO_PVP_CREDIT) && leveldiff < 10) + Добавлено (27.08.2010, 14:20) --------------------------------------------- Переколупал пачт, вот чё получилось, не знаю пашет или нет ) [cut] diff --git a/src/mangosd/mangosd.conf.dist.in b/src/mangosd/mangosd.conf.dist.in index 0bb942e..339b5a1 100644 --- a/src/mangosd/mangosd.conf.dist.in +++ b/src/mangosd/mangosd.conf.dist.in @@ -1375,3 +1375,33 @@ Ra.IP = 0.0.0.0 Ra.Port = 3443 Ra.MinLevel = 3 Ra.Secure = 1 + +#################################################################################################################### +# PvP Token System +# +# 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.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 = 0 +PvPToken.ItemID = 29434 +PvPToken.ItemCount = 1 +PvPToken.MapRestriction = 4 diff --git a/src/game/Language.h b/src/game/Language.h index 823d6d5..938755b 100644 --- a/src/game/Language.h +++ b/src/game/Language.h @@ -848,7 +848,7 @@ enum MangosStrings // 10000-10999 // Use for custom patches 11000-11999 - + LANG_YOU_RECEIVE_TOKEN = 11050, // NOT RESERVED IDS 12000-1999999999 // `db_script_string` table index 2000000000-2000009999 (MIN_DB_SCRIPT_STRING_ID-MAX_DB_SCRIPT_STRING_ID) // For other tables maybe 2000010000-2147483647 (max index) diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 65c6ac0..34535df 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -21017,6 +21017,35 @@ void Player::ResummonPetTemporaryUnSummonedIfAny() m_temporaryUnsummonedPetNumber = 0; } +void Player::ReceiveToken() +{ + if(!sWorld.getConfig(CONFIG_BOOL_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_UINT32_PVP_TOKEN_ITEMID); + uint32 itemCount = sWorld.getConfig(CONFIG_UINT32_PVP_TOKEN_ITEMCOUNT); + + 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); + + ChatHandler(this).PSendSysMessage(LANG_YOU_RECEIVE_TOKEN); +} + bool Player::canSeeSpellClickOn(Creature const *c) const { if(!c->HasFlag(UNIT_NPC_FLAGS,UNIT_NPC_FLAG_SPELLCLICK)) diff --git a/src/game/Player.h b/src/game/Player.h index a1ea792..158da81 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -1950,7 +1950,9 @@ class MANGOS_DLL_SPEC Player : public Unit void ModifyHonorPoints( int32 value ); void ModifyArenaPoints( int32 value ); uint32 GetMaxPersonalArenaRatingRequirement(); - + + void ReceiveToken(); + //End of PvP System void SetDrunkValue(uint16 newDrunkValue, uint32 itemid=0); diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 06d1533..98af84b 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -866,6 +866,11 @@ uint32 Unit::DealDamage(Unit *pVictim, uint32 damage, CleanDamage const* cleanDa group_tap->BroadcastPacket(&data, false, group_tap->GetMemberGroup(player_tap->GetObjectGuid()),player_tap->GetObjectGuid()); player_tap->SendDirectMessage(&data); + + // PvP Token System + int8 leveldiff = player_tap->getLevel() - pVictim->getLevel(); + if(!pVictim->HasAuraType(SPELL_AURA_NO_PVP_CREDIT) && leveldiff < 10) + player_tap->ReceiveToken(); } // Reward player, his pets, and group/raid members diff --git a/src/game/World.cpp b/src/game/World.cpp index 3361b5e..c9a4ffb 100644 --- a/src/game/World.cpp +++ b/src/game/World.cpp @@ -954,6 +954,15 @@ void World::LoadConfigSettings(bool reload) m_configs[CONFIG_THREAT_RADIUS] = sConfig.GetIntDefault("ThreatRadius", 100); + /* PvP Token System */ + m_configs[CONFIG_UINT32_PVP_TOKEN_ENABLE] = sConfig.GetBoolDefault("PvPToken.Enable", true); + m_configs[CONFIG_UINT32_PVP_TOKEN_ITEMID] = sConfig.GetIntDefault("PvPToken.ItemID", 29434); + m_configs[CONFIG_UINT32_PVP_TOKEN_ITEMCOUNT] = sConfig.GetIntDefault("PvPToken.ItemCount", 1); + m_configs[CONFIG_UINT32_PVP_TOKEN_RESTRICTION] = sConfig.GetIntDefault("PvPToken.MapRestriction", 4); + + if(m_configs[CONFIG_PVP_TOKEN_ITEMCOUNT] <= 0) + m_configs[CONFIG_PVP_TOKEN_ENABLE] = 0; + // always use declined names in the russian client m_configs[CONFIG_DECLINED_NAMES_USED] = (m_configs[CONFIG_REALM_ZONE] == REALM_ZONE_RUSSIAN) ? true : sConfig.GetBoolDefault("DeclinedNames", false); diff --git a/src/game/World.h b/src/game/World.h index 977a440..f67cd72 100644 --- a/src/game/World.h +++ b/src/game/World.h @@ -179,6 +19,10 @@ enum WorldConfigs CONFIG_UINT32_TIMERBAR_BREATH_MAX, CONFIG_UINT32_TIMERBAR_FIRE_GMLEVEL, CONFIG_UINT32_TIMERBAR_FIRE_MAX, + CONFIG_UINT32_PVP_TOKEN_ITEMID, + CONFIG_UINT32_PVP_TOKEN_ITEMCOUNT, + CONFIG_UINT32_PVP_TOKEN_RESTRICTION, CONFIG_UINT32_MIN_LEVEL_STAT_SAVE, CONFIG_UINT32_CHARDELETE_KEEP_DAYS, CONFIG_UINT32_CHARDELETE_METH OD, CONFIG_UINT32_CHARDELETE_MIN_LEVEL, CONFIG_UINT32_RANDOM_BG_RESET_HOUR CONFIG_UINT32_VALUE_COUNT }; @@ -324,6 +330,7 @@ enum eConfigBoolValues CONFIG_BOOL_CLEAN_CHARACTER_DB, CONFIG_BOOL_VMAP_INDOOR_CHECK, CONFIG_BOOL_LOOT_CHESTS_IGNORE_DB, + CONFIG_BOOL_PVP_TOKEN_ENABLE, CONFIG_BOOL_VALUE_COUNT }; -- 1.6.3 .3 [/cut] Добавлено (27.08.2010, 20:09) --------------------------------------------- lanc, поправь патч будь хорошим человеком 
Ой ща по саням дам ! http://wow.grin.by
Сообщение # 24 отредактировано САХАЛИН - Пятница, 27.08.2010, 14:21
|
А сам не знаю с++ )Добавлено (01.09.2010, 13:30) --------------------------------------------- Ну так что народ помогите с патчем + не обижу )
Ой ща по саням дам ! http://wow.grin.by
Сообщение # 25 написано 01.09.2010 в 13:30
|
мне тоже он нужен под старые ревы =/
Сообщение # 26 написано 02.09.2010 в 00:29
|
Это под старую, а мне нада под новую, так что {IceCat}, качай бут пахать.
Ой ща по саням дам ! http://wow.grin.by
Сообщение # 27 написано 02.09.2010 в 19:51
|
Дайте кто нибудь ядро мангос 2.4.3 с этим патчем, с меня +
Сообщение # 28 написано 07.09.2010 в 22:35
|
Ой ща по саням дам ! http://wow.grin.by
Сообщение # 29 написано 07.09.2010 в 22:37
|
Сообщение # 30 написано 08.09.2010 в 16:35
|