marx
-
Posts
38 -
Joined
-
Last visited
Never -
Donations
0.00 GBP
Content Type
Profiles
Bug Tracker
Wiki
Release Notes
Forums
Downloads
Blogs
Events
Posts posted by marx
-
-
Index: src/game/Player.cpp =================================================================== --- src/game/Player.cpp (Revision 6767) +++ src/game/Player.cpp (Arbeitskopie) @@ -247,6 +247,20 @@ Player::Player (WorldSession *session): Unit() { + // Jail by WarHead + m_jail_guid = 0; + m_jail_char = ""; + m_jail_warning = false; + m_jail_isjailed = false; + m_jail_release = 0; + m_jail_times = 0; + m_jail_reason = ""; + m_jail_gmacc = 0; + m_jail_gmchar = ""; + m_jail_lasttime = ""; + m_jail_duration = 0; + // Jail end + m_transport = 0; m_speakTime = 0; @@ -928,6 +942,66 @@ Unit::Update( p_time ); + if (m_jail_isjailed) + { + time_t localtime; + localtime = time(NULL); + + if (m_jail_release <= localtime) + { + m_jail_isjailed = false; + m_jail_release = 0; + + _SaveJail(); + + sWorld.SendWorldText(LANG_JAIL_CHAR_FREE, GetName()); + + CastSpell(this,8690,false); + + return; + } + + if (m_team == ALLIANCE) + { + if (GetDistance(objmgr.m_jailconf_ally_x, objmgr.m_jailconf_ally_y, objmgr.m_jailconf_ally_z) > objmgr.m_jailconf_radius) + { + TeleportTo(objmgr.m_jailconf_ally_m, objmgr.m_jailconf_ally_x, + objmgr.m_jailconf_ally_y, objmgr.m_jailconf_ally_z, objmgr.m_jailconf_ally_o); + return; + } + } + else + { + if (GetDistance(objmgr.m_jailconf_horde_x, objmgr.m_jailconf_horde_y, objmgr.m_jailconf_horde_z) > objmgr.m_jailconf_radius) + { + TeleportTo(objmgr.m_jailconf_horde_m, objmgr.m_jailconf_horde_x, + objmgr.m_jailconf_horde_y, objmgr.m_jailconf_horde_z, objmgr.m_jailconf_horde_o); + return; + } + + } + } + + if(m_jail_warning == true) + { + m_jail_warning = false; + + if(objmgr.m_jailconf_warn_player == m_jail_times || objmgr.m_jailconf_warn_player <= m_jail_times) + { + if ((objmgr.m_jailconf_max_jails-1 == m_jail_times-1) && objmgr.m_jailconf_ban-1) + { + ChatHandler(this).PSendSysMessage(LANG_JAIL_WARNING_BAN, m_jail_times , objmgr.m_jailconf_max_jails-1); + } + else + { + ChatHandler(this).PSendSysMessage(LANG_JAIL_WARNING, m_jail_times , objmgr.m_jailconf_max_jails); + } + + } + return; + } + + // update player only attacks if(uint32 ranged_att = getAttackTimer(RANGED_ATTACK)) { @@ -1116,11 +1190,16 @@ } if (m_deathState == JUST_DIED) - { - KillPlayer(); + { // Prevent death of jailed players + if (!m_jail_isjailed) KillPlayer(); + else + { + m_deathState = ALIVE; + RegenerateAll(); + } } - if(m_nextSave > 0) + if(m_nextSave > 0 && !m_jail_isjailed) { if(p_time >= m_nextSave) { @@ -3558,6 +3637,8 @@ CharacterDatabase.PExecute("DELETE FROM mail_items WHERE receiver = '%u'",guid); CharacterDatabase.PExecute("DELETE FROM character_pet WHERE owner = '%u'",guid); CharacterDatabase.PExecute("DELETE FROM character_pet_declinedname WHERE owner = '%u'",guid); + CharacterDatabase.PExecute("DELETE FROM `jail` WHERE `guid` = '%u'",guid); + CharacterDatabase.CommitTransaction(); //loginDatabase.PExecute("UPDATE realmcharacters SET numchars = numchars - 1 WHERE acctid = %d AND realmid = %d", accountId, realmID); @@ -13788,9 +13869,82 @@ } } - _LoadDeclinedNames(holder->GetResult(PLAYER_LOGIN_QUERY_LOADDECLINEDNAMES)); + _LoadDeclinedNames(holder->GetResult(PLAYER_LOGIN_QUERY_LOADDECLINEDNAMES)); + // Loads the jail datas and if jailed it corrects the position to the corresponding jail + _LoadJail(); + +return true; +} - return true; +// Loads the jail datas (added by WarHead). +void Player::_LoadJail(void) +{ + CharacterDatabase.BeginTransaction(); + QueryResult *result = CharacterDatabase.PQuery("SELECT * FROM `jail` WHERE `guid`='%u' LIMIT 1", GetGUIDLow()); + CharacterDatabase.CommitTransaction(); + + if (!result) + { + m_jail_isjailed = false; + return; + } + + Field *fields = result->Fetch(); + m_jail_warning = true; + m_jail_isjailed = true; + m_jail_guid = fields[0].GetUInt32(); + m_jail_char = fields[1].GetString(); + m_jail_release = fields[2].GetUInt32(); + m_jail_reason = fields[3].GetString(); + m_jail_times = fields[4].GetUInt32(); + m_jail_gmacc = fields[5].GetUInt32(); + m_jail_gmchar = fields[6].GetString(); + m_jail_lasttime = fields[7].GetString(); + m_jail_duration = fields[8].GetUInt32(); + + if (m_jail_release == 0) + { + m_jail_isjailed = false; + delete result; + return; + } + + time_t localtime; + localtime = time(NULL); + + if (m_jail_release <= localtime) + { + m_jail_isjailed = false; + m_jail_release = 0; + + _SaveJail(); + + sWorld.SendWorldText(LANG_JAIL_CHAR_FREE, GetName()); + + CastSpell(this,8690,false); + + delete result; + return; + } + + if (m_jail_isjailed) + { + if (m_team == ALLIANCE) + { + TeleportTo(objmgr.m_jailconf_ally_m, objmgr.m_jailconf_ally_x, + objmgr.m_jailconf_ally_y, objmgr.m_jailconf_ally_z, objmgr.m_jailconf_ally_o); + } + else + { + TeleportTo(objmgr.m_jailconf_horde_m, objmgr.m_jailconf_horde_x, + objmgr.m_jailconf_horde_y, objmgr.m_jailconf_horde_z, objmgr.m_jailconf_horde_o); + } + + sWorld.SendWorldText(LANG_JAIL_CHAR_TELE, GetName() ); + } + + delete result; + } bool Player::isAllowedToLoot(Creature* creature) @@ -14721,8 +14875,23 @@ /*** SAVE SYSTEM ***/ /*********************************************************/ +// Saves the jail datas (added by WarHead). +void Player::_SaveJail(void) +{ + CharacterDatabase.BeginTransaction(); + QueryResult *result = CharacterDatabase.PQuery("SELECT `guid` FROM `jail` WHERE `guid`='%u' LIMIT 1", m_jail_guid); + if (!result) CharacterDatabase.PExecute("INSERT INTO `jail` VALUES ('%u','%s','%u','%s','%u','%u','%s',CURRENT_TIMESTAMP,'%u')", m_jail_guid, m_jail_char.c_str(), m_jail_release, m_jail_reason.c_str(), m_jail_times, m_jail_gmacc, m_jail_gmchar.c_str(), m_jail_duration); + else CharacterDatabase.PExecute("UPDATE `jail` SET `release`='%u',`reason`='%s',`times`='%u',`gmacc`='%u',`gmchar`='%s',`duration`='%u' WHERE `guid`='%u' LIMIT 1", m_jail_release, m_jail_reason.c_str(), m_jail_times, m_jail_gmacc, m_jail_gmchar.c_str(), m_jail_duration, m_jail_guid); + CharacterDatabase.CommitTransaction(); + + if (result) delete result; +} + void Player::SaveToDB() { + // Jail: Prevent saving of jailed players + if (m_jail_isjailed) return; + // delay auto save at any saves (manual, in code, or autosave) m_nextSave = sWorld.getConfig(CONFIG_INTERVAL_SAVE); @@ -15693,7 +15862,7 @@ SetAcceptWhispers(true); ChatHandler(this).SendSysMessage(LANG_COMMAND_WHISPERON); } - + // announce to player that player he is whispering to is afk if(rPlayer->isAFK()) ChatHandler(this).PSendSysMessage(LANG_PLAYER_AFK, rPlayer->GetName(), rPlayer->afkMsg.c_str()); Index: src/game/Player.h =================================================================== --- src/game/Player.h (Revision 6767) +++ src/game/Player.h (Arbeitskopie) @@ -1899,6 +1899,24 @@ void EnvironmentalDamage(uint64 guid, EnviromentalDamage type, uint32 damage); + // Jail by WarHead + // --------------- + // Char datas... + bool m_jail_warning; + bool m_jail_isjailed; // Is this player jailed? + std::string m_jail_char; // Name of jailed char + uint32 m_jail_guid; // guid of the jailed char + uint32 m_jail_release; // When is the player a free man/woman? + std::string m_jail_reason; // Why was the char jailed? + uint32 m_jail_times; // How often was the player jailed? + uint32 m_jail_gmacc; // Used GM acc + std::string m_jail_gmchar; // Used GM char + std::string m_jail_lasttime; // Last jail time + uint32 m_jail_duration; // Duration of the jail + // Load / save functions... + void _LoadJail(void); // Loads the jail datas + void _SaveJail(void); // Saves the jail datas + /*********************************************************/ /*** FLOOD FILTER SYSTEM ***/ /*********************************************************/ Index: src/game/World.cpp =================================================================== --- src/game/World.cpp (Revision 6767) +++ src/game/World.cpp (Arbeitskopie) @@ -1124,6 +1124,9 @@ sLog.outString( "Returning old mails..." ); objmgr.ReturnOrDeleteOldMails(false); + // Loads the jail conf out of the database + objmgr.LoadJailConf(); + ///- Load and initialize scripts sLog.outString( "Loading Scripts..." ); objmgr.LoadQuestStartScripts(); // must be after load Creature/Gameobject(Template/Data) and QuestTemplate
-
Index: src/game/Level2.cpp =================================================================== --- src/game/Level2.cpp (Revision 6767) +++ src/game/Level2.cpp (Arbeitskopie) @@ -31,6 +31,8 @@ #include "MapManager.h" #include "Language.h" #include "World.h" +#include "math.h" +#include "WaypointMovementGenerator.h" #include "GameEvent.h" #include "SpellMgr.h" #include "AccountMgr.h" @@ -1867,6 +1869,42 @@ SendSysMessage(ss.str().c_str()); } } + + if (py && strncmp(py, "jail", 4) == 0) + { + if (target->m_jail_times > 0) + { + if(target->m_jail_release > 0) + { + time_t localtime; + localtime = time(NULL); + uint32 min_left = (uint32)floor(float(target->m_jail_release - localtime) / 60); + + if (min_left <= 0) + { + target->m_jail_release = 0; + target->_SaveJail(); + PSendSysMessage(LANG_JAIL_GM_INFO, target->m_jail_char.c_str(), target->m_jail_times, 0, target->m_jail_gmchar.c_str(), target->m_jail_reason.c_str()); + return true; + } + else + { + PSendSysMessage(LANG_JAIL_GM_INFO, target->m_jail_char.c_str(), target->m_jail_times, min_left, target->m_jail_gmchar.c_str(), target->m_jail_reason.c_str()); + return true; + } + } + else + { + PSendSysMessage(LANG_JAIL_GM_INFO, target->m_jail_char.c_str(), target->m_jail_times, 0, target->m_jail_gmchar.c_str(), target->m_jail_reason.c_str()); + return true; + } + } + else + { + PSendSysMessage(LANG_JAIL_GM_NOINFO, target->GetName()); + return true; + } + } return true; } Index: src/game/Level3.cpp =================================================================== --- src/game/Level3.cpp (Revision 6767) +++ src/game/Level3.cpp (Arbeitskopie) @@ -58,6 +58,13 @@ return false; } +bool ChatHandler::HandleJailReloadCommand(const char* arg) +{ + objmgr.LoadJailConf(); + SendSysMessage(LANG_JAIL_RELOAD); + return true; +} + bool ChatHandler::HandleReloadAllCommand(const char*) { HandleReloadAreaTriggerTeleportCommand(""); Index: src/game/ObjectAccessor.cpp =================================================================== --- src/game/ObjectAccessor.cpp (Revision 6767) +++ src/game/ObjectAccessor.cpp (Arbeitskopie) @@ -241,8 +241,11 @@ Guard guard(*HashMapHolder<Player*>::GetLock()); HashMapHolder<Player>::MapType& m = HashMapHolder<Player>::GetContainer(); HashMapHolder<Player>::MapType::iterator itr = m.begin(); - for(; itr != m.end(); ++itr) + for (; itr != m.end(); ++itr) + { + if (itr->second->m_jail_isjailed) continue; // Prevent jailed players to be saved itr->second->SaveToDB(); + } } void Index: src/game/ObjectMgr.cpp =================================================================== --- src/game/ObjectMgr.cpp (Revision 6767) +++ src/game/ObjectMgr.cpp (Arbeitskopie) @@ -5521,6 +5521,70 @@ return ++m_hiPetNumber; } +// Loads the jail conf out of the database +void ObjectMgr::LoadJailConf(void) +{ + CharacterDatabase.BeginTransaction(); + QueryResult *result = CharacterDatabase.PQuery("SELECT * FROM `jail_conf`"); + CharacterDatabase.CommitTransaction(); + + if (!result) + { + sLog.outError(GetMangosStringForDBCLocale(LANG_JAIL_CONF_ERR1)); + sLog.outError(GetMangosStringForDBCLocale(LANG_JAIL_CONF_ERR2)); + + m_jailconf_max_jails = 3; + m_jailconf_max_duration = 672; + m_jailconf_min_reason = 25; + m_jailconf_warn_player = 1; + + m_jailconf_ally_x = -8673.43; + m_jailconf_ally_y = 631.795; + m_jailconf_ally_z = 96.9406; + m_jailconf_ally_o = 2.1785; + m_jailconf_ally_m = 0; + + m_jailconf_horde_x = 2179.85; + m_jailconf_horde_y = -4763.96; + m_jailconf_horde_z = 54.911; + m_jailconf_horde_o = 4.44216; + m_jailconf_horde_m = 1; + + m_jailconf_ban = 0; + m_jailconf_radius = 10; + + return; + } + + Field *fields = result->Fetch(); + + m_jailconf_max_jails = fields[0].GetUInt32(); + m_jailconf_max_duration = fields[1].GetUInt32(); + m_jailconf_min_reason = fields[2].GetUInt32(); + m_jailconf_warn_player = fields[3].GetUInt32(); + + m_jailconf_ally_x = fields[4].GetFloat(); + m_jailconf_ally_y = fields[5].GetFloat(); + m_jailconf_ally_z = fields[6].GetFloat(); + m_jailconf_ally_o = fields[7].GetFloat(); + m_jailconf_ally_m = fields[8].GetUInt32(); + + m_jailconf_horde_x = fields[9].GetFloat(); + m_jailconf_horde_y = fields[10].GetFloat(); + m_jailconf_horde_z = fields[11].GetFloat(); + m_jailconf_horde_o = fields[12].GetFloat(); + m_jailconf_horde_m = fields[13].GetUInt32(); + + m_jailconf_ban = fields[14].GetUInt32(); + m_jailconf_radius = fields[15].GetUInt32(); + + delete result; + + sLog.outString(""); + sLog.outString(GetMangosStringForDBCLocale(LANG_JAIL_CONF_LOADED)); + sLog.outString(""); +} + void ObjectMgr::LoadCorpses() { uint32 count = 0; Index: src/game/ObjectMgr.h =================================================================== --- src/game/ObjectMgr.h (Revision 6767) +++ src/game/ObjectMgr.h (Arbeitskopie) @@ -543,11 +543,32 @@ void LoadWeatherZoneChances(); void LoadGameTele(); - - void LoadNpcTextId(); + void LoadNpcTextId(); void LoadVendors(); void LoadTrainerSpell(); + // Loads the jail conf out of the database + void LoadJailConf(void); + + // Jail Config... + uint32 m_jailconf_max_jails; // Jail times when the char will be deleted + uint32 m_jailconf_max_duration; // Max. jail duration in hours + uint32 m_jailconf_min_reason; // Min. char length of the reason + uint32 m_jailconf_warn_player; // Warn player every login if max_jails is nearly reached? + float m_jailconf_ally_x; // Coords of the jail for the allies + float m_jailconf_ally_y; + float m_jailconf_ally_z; + float m_jailconf_ally_o; + uint32 m_jailconf_ally_m; + float m_jailconf_horde_x; // Coords of the jail for the horde + float m_jailconf_horde_y; + float m_jailconf_horde_z; + float m_jailconf_horde_o; + uint32 m_jailconf_horde_m; + uint32 m_jailconf_ban; // Ban acc if max. jailtimes is reached? + uint32 m_jailconf_radius; // Radius in which a jailed char can walk + + std::string GeneratePetName(uint32 entry); uint32 GetBaseXP(uint32 level);
-
Index: src/game/Level1.cpp =================================================================== --- src/game/Level1.cpp (Revision 6767) +++ src/game/Level1.cpp (Arbeitskopie) @@ -1818,6 +1818,300 @@ return true; } +// Jail by WarHead +bool ChatHandler::HandleJailCommand(const char *args) +{ + std::string cname, announce, ban_reason, ban_by; + time_t localtime; + localtime = time(NULL); + + char *charname = strtok((char*)args, " "); + if (charname == NULL) + { + SendSysMessage(LANG_JAIL_NONAME); + return true; + } else cname = charname; + + char *timetojail = strtok(NULL, " "); + if (timetojail == NULL) + { + SendSysMessage(LANG_JAIL_NOTIME); + return true; + } + + uint32 jailtime = (uint32) atoi((char*)timetojail); + if (jailtime < 1 || jailtime > objmgr.m_jailconf_max_duration) + { + PSendSysMessage(LANG_JAIL_VALUE, objmgr.m_jailconf_max_duration); + return true; + } + + char *reason = strtok(NULL, "\\0"); + std::string jailreason; + if (reason == NULL || strlen((const char*)reason) < objmgr.m_jailconf_min_reason) + { + PSendSysMessage(LANG_JAIL_NOREASON, objmgr.m_jailconf_min_reason); + return true; + } else jailreason = reason; + + uint64 GUID = objmgr.GetPlayerGUIDByName(cname.c_str()); + if (GUID == 0) + { + SendSysMessage(LANG_JAIL_WRONG_NAME); + return true; + } + + Player *chr = objmgr.GetPlayer(GUID); + if (!chr) + { + uint32 jail_guid = GUID_LOPART(GUID); + std::string jail_char = cname; + bool jail_isjailed = true; + uint32 jail_release = localtime + (jailtime * 60 * 60); + std::string jail_reason = jailreason; + uint32 jail_times = 0; + + CharacterDatabase.BeginTransaction(); + QueryResult *result = CharacterDatabase.PQuery("SELECT * FROM `jail` WHERE `guid`='%u' LIMIT 1", jail_guid); + CharacterDatabase.CommitTransaction(); + + if (!result) + { + jail_times = 1; + } + else + { + Field *fields = result->Fetch(); + jail_times = fields[4].GetUInt32()+1; + } + + uint32 jail_gmacc = m_session->GetAccountId(); + std::string jail_gmchar = m_session->GetPlayerName(); + + CharacterDatabase.BeginTransaction(); + if (!result) CharacterDatabase.PExecute("INSERT INTO `jail` VALUES ('%u','%s','%u','%s','%u','%u','%s',CURRENT_TIMESTAMP,'%u')", jail_guid, jail_char.c_str(), jail_release, jail_reason.c_str(), jail_times, jail_gmacc, jail_gmchar.c_str(), jailtime); + else CharacterDatabase.PExecute("UPDATE `jail` SET `release`='%u',`reason`='%s',`times`='%u',`gmacc`='%u',`gmchar`='%s',`duration`='%u' WHERE `guid`='%u' LIMIT 1", jail_release, jail_reason.c_str(), jail_times, jail_gmacc, jail_gmchar.c_str(), jailtime, jail_guid); + CharacterDatabase.CommitTransaction(); + + PSendSysMessage(LANG_JAIL_WAS_JAILED, cname.c_str(), jailtime); + + announce = GetMangosString(LANG_JAIL_ANNOUNCE1); + announce += cname; + announce += GetMangosString(LANG_JAIL_ANNOUNCE2); + announce += timetojail; + announce += GetMangosString(LANG_JAIL_ANNOUNCE3); + announce += m_session->GetPlayerName(); + announce += GetMangosString(LANG_JAIL_ANNOUNCE4); + announce += jail_reason; + + HandleAnnounceCommand(announce.c_str()); + + if (result) delete result; + + if ((objmgr.m_jailconf_max_jails == jail_times) && !objmgr.m_jailconf_ban) + { + CharacterDatabase.BeginTransaction(); + QueryResult *result = CharacterDatabase.PQuery("SELECT * FROM `characters` WHERE `guid`='%u' LIMIT 1", GUID_LOPART(GUID)); + CharacterDatabase.CommitTransaction(); + + if (!result) + { + PSendSysMessage(LANG_NO_PLAYER, cname.c_str()); + return true; + } + + Field *fields = result->Fetch(); + + Player::DeleteFromDB(GUID, fields[1].GetUInt32()); + + delete result; + } + else if ((objmgr.m_jailconf_max_jails == jail_times) && objmgr.m_jailconf_ban) + { + CharacterDatabase.BeginTransaction(); + QueryResult *result = CharacterDatabase.PQuery("SELECT * FROM `characters` WHERE `guid`='%u' LIMIT 1", GUID_LOPART(GUID)); + CharacterDatabase.CommitTransaction(); + + if (!result) + { + PSendSysMessage(LANG_NO_PLAYER, cname.c_str()); + return true; + } + Field *fields = result->Fetch(); + uint32 acc_id = fields[1].GetUInt32(); + + loginDatabase.BeginTransaction(); + result = loginDatabase.PQuery("SELECT * FROM `account` WHERE `id`='%u' LIMIT 1", acc_id); + loginDatabase.CommitTransaction(); + + if (!result) + { + PSendSysMessage(LANG_NO_PLAYER, cname.c_str()); + return true; + } + ban_reason = GetMangosString(LANG_JAIL_BAN_REASON); + ban_by = GetMangosString(LANG_JAIL_BAN_BY); + + loginDatabase.BeginTransaction(); + loginDatabase.PExecute("INSERT IGNORE INTO `account_banned` (`id`,`bandate`,`bannedby`,`banreason`) VALUES ('%u',UNIX_TIMESTAMP,'%s','%s')", acc_id, ban_by.c_str(), ban_reason.c_str()); + loginDatabase.CommitTransaction(); + + delete result; + } + return true; + } + + CharacterDatabase.BeginTransaction(); + QueryResult *result = CharacterDatabase.PQuery("SELECT * FROM `characters` WHERE `guid`='%u' LIMIT 1", chr->GetGUIDLow()); + CharacterDatabase.CommitTransaction(); + + if (!result) + { + PSendSysMessage(LANG_NO_PLAYER, cname.c_str()); + return true; + } + + Field *fields = result->Fetch(); + + if(chr->GetName() == m_session->GetPlayerName()) + { + SendSysMessage(LANG_JAIL_NO_JAIL); + delete result; + return true; + } + + chr->SaveToDB(); + + chr->m_jail_guid = fields[0].GetUInt32(); + chr->m_jail_char = fields[3].GetCppString(); + chr->m_jail_isjailed = true; + chr->m_jail_release = localtime + (jailtime * 60 * 60); + chr->m_jail_reason = jailreason; + chr->m_jail_times = chr->m_jail_times+1; + chr->m_jail_gmacc = m_session->GetAccountId(); + chr->m_jail_gmchar = m_session->GetPlayerName(); + chr->m_jail_duration = jailtime; + + chr->_SaveJail(); + + PSendSysMessage(LANG_JAIL_WAS_JAILED, fields[3].GetCppString().c_str(), jailtime); + ChatHandler(chr).PSendSysMessage(LANG_JAIL_YOURE_JAILED, m_session->GetPlayerName(), jailtime); + ChatHandler(chr).PSendSysMessage(LANG_JAIL_REASON, m_session->GetPlayerName(), jailreason.c_str()); + + announce = GetMangosString(LANG_JAIL_ANNOUNCE1); + announce += fields[3].GetCppString(); + announce += GetMangosString(LANG_JAIL_ANNOUNCE2); + announce += timetojail; + announce += GetMangosString(LANG_JAIL_ANNOUNCE3); + announce += m_session->GetPlayerName(); + announce += GetMangosString(LANG_JAIL_ANNOUNCE4); + announce += chr->m_jail_reason; + + HandleAnnounceCommand(announce.c_str()); + + if (objmgr.m_jailconf_max_jails == chr->m_jail_times) + { + chr->GetSession()->KickPlayer(); + chr->DeleteFromDB(fields[0].GetUInt64(), fields[1].GetUInt32()); + } + else if ((objmgr.m_jailconf_max_jails == chr->m_jail_times) && objmgr.m_jailconf_ban) + { + uint32 acc_id = chr->GetSession()->GetAccountId(); + ban_reason = GetMangosString(LANG_JAIL_BAN_REASON); + ban_by = GetMangosString(LANG_JAIL_BAN_BY); + + loginDatabase.BeginTransaction(); + loginDatabase.PExecute("INSERT IGNORE INTO `account_banned` (`id`,`bandate`,`bannedby`,`banreason`) VALUES ('%u',UNIX_TIMESTAMP,'%s','%s')", acc_id, ban_by.c_str(), ban_reason.c_str()); + loginDatabase.CommitTransaction(); + + chr->GetSession()->LogoutPlayer(false); + } + else chr->GetSession()->LogoutPlayer(false); + + delete result; + return true; +} + +bool ChatHandler::HandleUnJailCommand(const char *args) +{ + char *charname = strtok((char*)args, " "); + std::string cname; + + if (charname == NULL) return false; + else cname = charname; + + uint64 GUID = objmgr.GetPlayerGUIDByName(cname.c_str()); + Player *chr = objmgr.GetPlayer(GUID); + + if (chr) + { + if (chr->GetName() == m_session->GetPlayerName()) + { + SendSysMessage(LANG_JAIL_NO_UNJAIL); + return true; + } + + if (chr->m_jail_isjailed) + { + chr->m_jail_isjailed = false; + chr->m_jail_release = 0; + chr->m_jail_times = chr->m_jail_times-1; + + chr->_SaveJail(); + + if (chr->m_jail_times == 0) + { + CharacterDatabase.BeginTransaction(); + CharacterDatabase.PQuery("DELETE FROM `jail` WHERE `guid`='%u' LIMIT 1", chr->GetGUIDLow()); + CharacterDatabase.CommitTransaction(); + } + + PSendSysMessage(LANG_JAIL_WAS_UNJAILED, cname.c_str()); + ChatHandler(chr).PSendSysMessage(LANG_JAIL_YOURE_UNJAILED, m_session->GetPlayerName()); + chr->CastSpell(chr,8690,false); + //chr->GetSession()->LogoutPlayer(false); + } else PSendSysMessage(LANG_JAIL_CHAR_NOTJAILED, cname.c_str()); + return true; + } + else + { + CharacterDatabase.BeginTransaction(); + QueryResult *jresult = CharacterDatabase.PQuery("SELECT * FROM `jail` WHERE `guid`='%u' LIMIT 1", GUID_LOPART(GUID)); + CharacterDatabase.CommitTransaction(); + + if (!jresult) + { + PSendSysMessage(LANG_JAIL_CHAR_NOTJAILED, cname.c_str()); + return true; + } + else + { + Field *fields = jresult->Fetch(); + uint32 jail_times = fields[4].GetUInt32()-1; + + if (jail_times == 0) + { + CharacterDatabase.BeginTransaction(); + CharacterDatabase.PQuery("DELETE FROM `jail` WHERE `guid`='%u' LIMIT 1", fields[0].GetUInt32()); + CharacterDatabase.CommitTransaction(); + } + else + { + CharacterDatabase.BeginTransaction(); + CharacterDatabase.PQuery("UPDATE `jail` SET `release`='0',`times`='%u' WHERE `guid`='%u' LIMIT 1", jail_times, fields[0].GetUInt32()); + CharacterDatabase.CommitTransaction(); + } + + PSendSysMessage(LANG_JAIL_WAS_UNJAILED, cname.c_str()); + + delete jresult; + return true; + } + + } + return true; +} + //Send mail by command bool ChatHandler::HandleSendMailCommand(const char* args) {
-
hmm oke i have to stay on mangos becos trinity changed db and i dont wanna loose all my custom stuff..so i have probs with git...is the structure totaly cahnged ---i tryd to add some patches manually what worked before like
announce patch
Index: src/game/Chat.cpp =================================================================== --- src/game/Chat.cpp (révision 6682) +++ src/game/Chat.cpp (copie de travail) @@ -437,7 +437,8 @@ { "aura", SEC_ADMINISTRATOR, &ChatHandler::HandleAuraCommand, "", NULL }, { "unaura", SEC_ADMINISTRATOR, &ChatHandler::HandleUnAuraCommand, "", NULL }, { "acct", SEC_PLAYER, &ChatHandler::HandleAcctCommand, "", NULL }, - { "announce", SEC_MODERATOR, &ChatHandler::HandleAnnounceCommand, "", NULL }, + { "sysannounce", SEC_MODERATOR, &ChatHandler::HandleSysAnnounceCommand, "", NULL }, + { "announce", SEC_ADMINISTRATOR, &ChatHandler::HandleAnnounceCommand, "", NULL }, { "notify", SEC_MODERATOR, &ChatHandler::HandleNotifyCommand, "", NULL }, { "goname", SEC_MODERATOR, &ChatHandler::HandleGonameCommand, "", NULL }, { "namego", SEC_MODERATOR, &ChatHandler::HandleNamegoCommand, "", NULL }, Index: src/game/Chat.h =================================================================== --- src/game/Chat.h (révision 6682) +++ src/game/Chat.h (copie de travail) @@ -103,6 +103,7 @@ bool HandleGonameCommand(const char* args); bool HandleGroupgoCommand(const char* args); bool HandleRecallCommand(const char* args); + bool HandleSysAnnounceCommand(const char* args); bool HandleAnnounceCommand(const char* args); bool HandleNotifyCommand(const char* args); bool HandleGMmodeCommand(const char* args); Index: src/game/Language.h =================================================================== --- src/game/Language.h (révision 6682) +++ src/game/Language.h (copie de travail) @@ -27,6 +27,7 @@ // level 0 chat LANG_SYSTEMMESSAGE = 3, + LANG_ANNOUNCE_COLOR = 1000, LANG_EVENTMESSAGE = 4, LANG_NO_HELP_CMD = 5, LANG_NO_CMD = 6, Index: src/game/Level1.cpp =================================================================== --- src/game/Level1.cpp (révision 6682) +++ src/game/Level1.cpp (copie de travail) @@ -115,7 +115,7 @@ } // global announce -bool ChatHandler::HandleAnnounceCommand(const char* args) +bool ChatHandler::HandleSysAnnounceCommand(const char* args) { if(!*args) return false; @@ -124,6 +124,16 @@ return true; } +bool ChatHandler::HandleAnnounceCommand(const char* args) +{ + if(!*args) + return false; + + sWorld.SendWorldText(LANG_ANNOUNCE_COLOR, m_session->GetPlayer()->GetName(), args); + + return true; +} + //notification player at the screen bool ChatHandler::HandleNotifyCommand(const char* args) {
honor patch
blink patch
and even this one
Index: src/game/Player.cpp =================================================================== --- src/game/Player.cpp (revision 6555) +++ src/game/Player.cpp (working copy) @@ -4335,7 +4335,12 @@ float baseSpirit = spirit; if (baseSpirit>50) baseSpirit = 50; float moreSpirit = spirit - baseSpirit; - float regen = baseSpirit * baseRatio->ratio + moreSpirit * moreRatio->ratio; + float regen = 0.0f; + if (level > 70 ) { + regen = baseSpirit * baseRatio->ratio + moreSpirit * GetStat(STAT_STAMINA) * (level+2) * .0000005 ; + }else{ + regen = baseSpirit * baseRatio->ratio + moreSpirit * moreRatio->ratio; + } return regen; } @@ -4353,7 +4358,12 @@ // Formula get from PaperDollFrame script float spirit = GetStat(STAT_SPIRIT); - float regen = spirit * moreRatio->ratio; + float regen = 0.0f; + if (level > 70 ) { //fix for mana issue + regen = spirit * GetStat(STAT_INTELLECT) * (level+2) * .0000005 ; + } else { + regen = spirit * moreRatio->ratio; + } return regen; }
jail
and impconfig_git have added git support in svn but i jave no idea how to import patch...looked videos readed guids but there isint any detailed guid nowere...git is better i wont argue but why not use 2 svns? one for pros one for noobs? is it to much work? i see noone will update old patches for git and if people cant even add them manually then i dont know whats gonna happen
-
old jail patch tred to add manually but failed
Index: src/game/Chat.cpp =================================================================== --- src/game/Chat.cpp (Revision 6767) +++ src/game/Chat.cpp (Arbeitskopie) @@ -401,6 +401,12 @@ { "instance", SEC_ADMINISTRATOR, NULL, "", instanceCommandTable }, { "server", SEC_ADMINISTRATOR, NULL, "", serverCommandTable }, + // Jail by WarHead + { "jail", SEC_MODERATOR, &ChatHandler::HandleJailCommand, "", NULL }, + { "jailinfo", SEC_PLAYER, &ChatHandler::HandleJailInfoCommand, "", NULL }, + { "unjail", SEC_MODERATOR, &ChatHandler::HandleUnJailCommand, "", NULL }, + { "jailreload", SEC_ADMINISTRATOR, &ChatHandler::HandleJailReloadCommand, "", NULL }, + { "aura", SEC_ADMINISTRATOR, &ChatHandler::HandleAuraCommand, "", NULL }, { "unaura", SEC_ADMINISTRATOR, &ChatHandler::HandleUnAuraCommand, "", NULL }, { "acct", SEC_PLAYER, &ChatHandler::HandleAcctCommand, "", NULL }, Index: src/game/Chat.h =================================================================== --- src/game/Chat.h (Revision 6767) +++ src/game/Chat.h (Arbeitskopie) @@ -376,6 +376,12 @@ bool HandleComeToMeCommand(const char *args); bool HandleCombatStopCommand(const char *args); + // Jail by WarHead + bool HandleJailCommand(const char* args); + bool HandleJailInfoCommand(const char* args); + bool HandleUnJailCommand(const char* args); + bool HandleJailReloadCommand(const char* args); + //! Development Commands bool HandleSetValue(const char* args); bool HandleGetValue(const char* args); Index: src/game/Language.h =================================================================== --- src/game/Language.h (Revision 6767) +++ src/game/Language.h (Arbeitskopie) @@ -21,6 +21,41 @@ enum MangosStrings { + // Added by WarHead for the Jail + LANG_JAIL_YOURE_JAILED = 950, // "You are jailed by %s for %u hour(s)!" + LANG_JAIL_REASON = 951, // "%s wrote this as reason: %s" + LANG_JAIL_WAS_JAILED = 952, // "%s was jailed by you for %u hour(s)!" + LANG_JAIL_YOURE_UNJAILED = 953, // "You was released out of the jail by %s." + LANG_JAIL_WAS_UNJAILED = 954, // "You have released %s out of the jail." + LANG_JAIL_NOREASON = 955, // "No reason given or reason is < %u chars!" + LANG_JAIL_NONAME = 956, // "No name given!" + LANG_JAIL_NOTIME = 957, // "No time given!" + LANG_JAIL_VALUE = 958, // "The jailtime must be between 1 and %u hours!" + LANG_JAIL_CHAR_NOTJAILED = 959, // "The character (%s) is not jailed!" + LANG_JAIL_DENIED = 960, // "Command forbidden for jailed characters!" + LANG_JAIL_JAILED_H_INFO = 961, // "You have %u hour(s) left in the jail." + LANG_JAIL_JAILED_M_INFO = 962, // "You have %u minute(s) left in the jail." + LANG_JAIL_NOTJAILED_INFO = 963, // "You're a free woman / man. ;-)" + LANG_JAIL_GM_INFO = 964, // "%s was %u times jailed and has %u minute(s) left. Last time jailed by %s. Last reason was: '%s'" + LANG_JAIL_GM_NOINFO = 965, // "%s was never jailed." + LANG_JAIL_NO_JAIL = 966, // "You can't jail yourself!" + LANG_JAIL_NO_UNJAIL = 967, // "You can't unjail yourself!" + LANG_JAIL_WARNING = 968, // "Be carefull! Only one more jailtime and your current character will be deleted!" + LANG_JAIL_ANNOUNCE1 = 969, // "The character '" + LANG_JAIL_ANNOUNCE2 = 970, // "' was jailed for " + LANG_JAIL_ANNOUNCE3 = 971, // " hour(s) by the GM character '" + LANG_JAIL_ANNOUNCE4 = 972, // "'. The reason is: " + LANG_JAIL_RELOAD = 973, // "The jail configuration was reloaded." + LANG_JAIL_CONF_LOADED = 974, // ">> Jail config loaded." + LANG_JAIL_CONF_ERR1 = 975, // "Can't load jail config! Table empty or missed! Use jail_conf.sql!" + LANG_JAIL_CONF_ERR2 = 976, // "Set all jail config settings to default..." + LANG_JAIL_CHAR_TELE = 977, // "The Character '%s' (GUID %u) is jailed and teleportet into the jail." + LANG_JAIL_CHAR_FREE = 978, // "The Character '%s' (GUID %u) was released out of the jail." + LANG_JAIL_WRONG_NAME = 979, // "A character with this name doesn't exists!" + LANG_JAIL_WARNING_BAN = 980, // "Be carefull! Only one more jailtime and your account will be banned!" + LANG_JAIL_BAN_REASON = 981, // "Max. jailtimes reached!" + LANG_JAIL_BAN_BY = 982, // "Robotron" + // for chat commands LANG_SELECT_CHAR_OR_CREATURE = 1, LANG_SELECT_CREATURE = 2, Index: src/game/Level0.cpp =================================================================== --- src/game/Level0.cpp (Revision 6767) +++ src/game/Level0.cpp (Arbeitskopie) @@ -30,7 +30,9 @@ #include "AccountMgr.h" #include "SystemConfig.h" #include "Util.h" +#include "math.h" + bool ChatHandler::HandleHelpCommand(const char* args) { if(!*args) @@ -60,7 +62,13 @@ } bool ChatHandler::HandleStartCommand(const char* /*args*/) -{ +{ // Jail by WarHead + if (m_session->GetPlayer()->m_jail_isjailed) + { + SendSysMessage(LANG_JAIL_DENIED); + return true; + } + Player *chr = m_session->GetPlayer(); if(chr->isInFlight()) @@ -123,6 +131,13 @@ { Player *player=m_session->GetPlayer(); + // Jail by WarHead + if (player->m_jail_isjailed) + { + SendSysMessage(LANG_JAIL_DENIED); + return true; + } + // save GM account without delay and output message (testing, etc) if(m_session->GetSecurity()) { @@ -205,6 +220,40 @@ return true; } +bool ChatHandler::HandleJailInfoCommand(const char* args) +{ + time_t localtime; + localtime = time(NULL); + Player *chr = m_session->GetPlayer(); + + if (chr->m_jail_release > 0) + { + uint32 min_left = (uint32)floor(float(chr->m_jail_release - localtime) / 60); + + if (min_left <= 0) + { + chr->m_jail_release = 0; + chr->_SaveJail(); + SendSysMessage(LANG_JAIL_NOTJAILED_INFO); + return true; + } + else + { + if (min_left >= 60) PSendSysMessage(LANG_JAIL_JAILED_H_INFO, (uint32)floor(float(chr->m_jail_release - localtime) / 60 / 60)); + else PSendSysMessage(LANG_JAIL_JAILED_M_INFO, min_left); + PSendSysMessage(LANG_JAIL_REASON, chr->m_jail_gmchar.c_str(), chr->m_jail_reason.c_str()); + + return true; + } + } + else + { + SendSysMessage(LANG_JAIL_NOTJAILED_INFO); + return true; + } + return false; +} + bool ChatHandler::HandleLockAccountCommand(const char* args) { if (!*args)
-
ye sry for that its not noob friendly at all...nvm moving on trinity
-
im using git but now i cant add shit on it..git suxs balls...
-
is there still jail patch around?
-
hmm isee still old rev there ? is it possible to update old svn then?
-
get back to svn
-
hy ysut wanted to ask some info ...can antone point me to right way...were i can find some % for dodge i wanna lower i a bit
-
oke i have some weird question..is it possible to add loot to players like on battlegound are you can loot players corpse can get little money...
i ysut wondering if i can make (change ) it like ´you can loot player corpse everywere and mabye event add 0.01% random items from killed ppl bag to loot...so if its possible can anyone point me right direction...thanks..i think some other like it to
[guide] getting mangos + forked branch + updating
in OldSource code management
Posted
nice guide cant ya merge arena and alterac patch to one patch file?