mirror of
https://github.com/EQEmu/Server.git
synced 2026-04-03 21:42:26 +00:00
Merge pull request #591 from EQEmu/2002_fixes
Added an optional rule value that forces startzones to be the same as…
This commit is contained in:
commit
bd364a4049
@ -226,6 +226,7 @@ RULE_BOOL (World, IsGMPetitionWindowEnabled, false)
|
|||||||
RULE_INT (World, FVNoDropFlag, 0) // Sets the Firiona Vie settings on the client. If set to 2, the flag will be set for GMs only, allowing trading of no-drop items.
|
RULE_INT (World, FVNoDropFlag, 0) // Sets the Firiona Vie settings on the client. If set to 2, the flag will be set for GMs only, allowing trading of no-drop items.
|
||||||
RULE_BOOL (World, IPLimitDisconnectAll, false)
|
RULE_BOOL (World, IPLimitDisconnectAll, false)
|
||||||
RULE_INT (World, TellQueueSize, 20)
|
RULE_INT (World, TellQueueSize, 20)
|
||||||
|
RULE_BOOL(World, StartZoneSameAsBindOnCreation, true) //Should the start zone ALWAYS be the same location as your bind?
|
||||||
RULE_CATEGORY_END()
|
RULE_CATEGORY_END()
|
||||||
|
|
||||||
RULE_CATEGORY(Zone)
|
RULE_CATEGORY(Zone)
|
||||||
|
|||||||
@ -1552,12 +1552,14 @@ bool Client::OPCharCreate(char *name, CharCreate_Struct *cc)
|
|||||||
database.GetSafePoints(pp.zone_id, 0, &pp.x, &pp.y, &pp.z);
|
database.GetSafePoints(pp.zone_id, 0, &pp.x, &pp.y, &pp.z);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Will either be the same as home or tutorial */
|
/* Will either be the same as home or tutorial if enabled. */
|
||||||
pp.binds[0].zoneId = pp.zone_id;
|
if(RuleB(World, StartZoneSameAsBindOnCreation)) {
|
||||||
pp.binds[0].x = pp.x;
|
pp.binds[0].zoneId = pp.zone_id;
|
||||||
pp.binds[0].y = pp.y;
|
pp.binds[0].x = pp.x;
|
||||||
pp.binds[0].z = pp.z;
|
pp.binds[0].y = pp.y;
|
||||||
pp.binds[0].heading = pp.heading;
|
pp.binds[0].z = pp.z;
|
||||||
|
pp.binds[0].heading = pp.heading;
|
||||||
|
}
|
||||||
|
|
||||||
Log.Out(Logs::Detail, Logs::World_Server,"Current location: %s (%d) %0.2f, %0.2f, %0.2f, %0.2f",
|
Log.Out(Logs::Detail, Logs::World_Server,"Current location: %s (%d) %0.2f, %0.2f, %0.2f, %0.2f",
|
||||||
database.GetZoneName(pp.zone_id), pp.zone_id, pp.x, pp.y, pp.z, pp.heading);
|
database.GetZoneName(pp.zone_id), pp.zone_id, pp.x, pp.y, pp.z, pp.heading);
|
||||||
|
|||||||
@ -353,7 +353,7 @@ bool WorldDatabase::GetStartZone(PlayerProfile_Struct* in_pp, CharCreate_Struct*
|
|||||||
in_pp->x = in_pp->y = in_pp->z = in_pp->heading = in_pp->zone_id = 0;
|
in_pp->x = in_pp->y = in_pp->z = in_pp->heading = in_pp->zone_id = 0;
|
||||||
in_pp->binds[0].x = in_pp->binds[0].y = in_pp->binds[0].z = in_pp->binds[0].zoneId = in_pp->binds[0].instance_id = 0;
|
in_pp->binds[0].x = in_pp->binds[0].y = in_pp->binds[0].z = in_pp->binds[0].zoneId = in_pp->binds[0].instance_id = 0;
|
||||||
// see if we have an entry for start_zone. We can support both titanium & SOF+ by having two entries per class/race/deity combo with different zone_ids
|
// see if we have an entry for start_zone. We can support both titanium & SOF+ by having two entries per class/race/deity combo with different zone_ids
|
||||||
std::string query = StringFormat("SELECT x, y, z, heading, start_zone, bind_id FROM start_zones WHERE zone_id = %i "
|
std::string query = StringFormat("SELECT x, y, z, heading, start_zone, bind_id, bind_x, bind_y, bind_z FROM start_zones WHERE zone_id = %i "
|
||||||
"AND player_class = %i AND player_deity = %i AND player_race = %i",
|
"AND player_class = %i AND player_deity = %i AND player_race = %i",
|
||||||
in_cc->start_zone, in_cc->class_, in_cc->deity, in_cc->race);
|
in_cc->start_zone, in_cc->class_, in_cc->deity, in_cc->race);
|
||||||
auto results = QueryDatabase(query);
|
auto results = QueryDatabase(query);
|
||||||
@ -376,6 +376,9 @@ bool WorldDatabase::GetStartZone(PlayerProfile_Struct* in_pp, CharCreate_Struct*
|
|||||||
in_pp->heading = atof(row[3]);
|
in_pp->heading = atof(row[3]);
|
||||||
in_pp->zone_id = atoi(row[4]);
|
in_pp->zone_id = atoi(row[4]);
|
||||||
in_pp->binds[0].zoneId = atoi(row[5]);
|
in_pp->binds[0].zoneId = atoi(row[5]);
|
||||||
|
in_pp->binds[0].x = atof(row[6]);
|
||||||
|
in_pp->binds[0].y = atof(row[7]);
|
||||||
|
in_pp->binds[0].z = atof(row[8]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(in_pp->x == 0 && in_pp->y == 0 && in_pp->z == 0)
|
if(in_pp->x == 0 && in_pp->y == 0 && in_pp->z == 0)
|
||||||
|
|||||||
@ -1087,7 +1087,6 @@ void Corpse::LootItem(Client *client, const EQApplicationPacket *app)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!IsBeingLootedBy(client)) {
|
if (!IsBeingLootedBy(client)) {
|
||||||
client->Message(13, "Error: Corpse::LootItem: BeingLootedBy != client");
|
|
||||||
client->QueuePacket(app);
|
client->QueuePacket(app);
|
||||||
SendEndLootErrorPacket(client);
|
SendEndLootErrorPacket(client);
|
||||||
return;
|
return;
|
||||||
|
|||||||
@ -225,8 +225,23 @@ void Client::OPCombatAbility(const CombatAbility_Struct *ca_atk)
|
|||||||
if (ClientVersion() >= EQEmu::versions::ClientVersion::RoF2 && ca_atk->m_skill == EQEmu::skills::SkillTigerClaw)
|
if (ClientVersion() >= EQEmu::versions::ClientVersion::RoF2 && ca_atk->m_skill == EQEmu::skills::SkillTigerClaw)
|
||||||
timer = pTimerCombatAbility2;
|
timer = pTimerCombatAbility2;
|
||||||
|
|
||||||
|
|
||||||
|
bool CanBypassSkillCheck = false;
|
||||||
|
|
||||||
|
if (ca_atk->m_skill == EQEmu::skills::SkillBash) { // SLAM - Bash without a shield equipped
|
||||||
|
switch (GetRace())
|
||||||
|
{
|
||||||
|
case OGRE:
|
||||||
|
case TROLL:
|
||||||
|
case BARBARIAN:
|
||||||
|
CanBypassSkillCheck = true;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Check to see if actually have skill */
|
/* Check to see if actually have skill */
|
||||||
if (!MaxSkill(static_cast<EQEmu::skills::SkillType>(ca_atk->m_skill)))
|
if (!MaxSkill(static_cast<EQEmu::skills::SkillType>(ca_atk->m_skill)) && !CanBypassSkillCheck)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (GetTarget()->GetID() != ca_atk->m_target)
|
if (GetTarget()->GetID() != ca_atk->m_target)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user