mirror of
https://github.com/OpenFusionProject/OpenFusion.git
synced 2025-10-20 20:30:19 +00:00
Compare commits
4 Commits
lua-more-b
...
44560a46b7
Author | SHA1 | Date | |
---|---|---|---|
![]() |
44560a46b7 | ||
![]() |
21d280147c | ||
![]() |
b765821552 | ||
e61682dfb2 |
@@ -66,6 +66,9 @@ motd=Welcome to OpenFusion!
|
|||||||
# location of the database
|
# location of the database
|
||||||
#dbpath=database.db
|
#dbpath=database.db
|
||||||
|
|
||||||
|
# should there be a score cap for infected zone races?
|
||||||
|
#izracescorecapped=true
|
||||||
|
|
||||||
# should tutorial flags be disabled off the bat?
|
# should tutorial flags be disabled off the bat?
|
||||||
disablefirstuseflag=true
|
disablefirstuseflag=true
|
||||||
|
|
||||||
|
@@ -16,8 +16,9 @@ EntityRef::EntityRef(CNSocket *s) {
|
|||||||
EntityRef::EntityRef(int32_t i) {
|
EntityRef::EntityRef(int32_t i) {
|
||||||
id = i;
|
id = i;
|
||||||
|
|
||||||
assert(NPCManager::NPCs.find(id) != NPCManager::NPCs.end());
|
kind = EntityKind::INVALID;
|
||||||
kind = NPCManager::NPCs[id]->kind;
|
if (NPCManager::NPCs.find(id) != NPCManager::NPCs.end())
|
||||||
|
kind = NPCManager::NPCs[id]->kind;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EntityRef::isValid() const {
|
bool EntityRef::isValid() const {
|
||||||
|
@@ -64,6 +64,9 @@ static void attachGroupData(std::vector<EntityRef>& pcs, std::vector<EntityRef>&
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Groups::addToGroup(Group* group, EntityRef member) {
|
void Groups::addToGroup(Group* group, EntityRef member) {
|
||||||
|
if (group == nullptr)
|
||||||
|
return;
|
||||||
|
|
||||||
if (member.kind == EntityKind::PLAYER) {
|
if (member.kind == EntityKind::PLAYER) {
|
||||||
Player* plr = PlayerManager::getPlayer(member.sock);
|
Player* plr = PlayerManager::getPlayer(member.sock);
|
||||||
plr->group = group;
|
plr->group = group;
|
||||||
@@ -109,6 +112,9 @@ void Groups::addToGroup(Group* group, EntityRef member) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool Groups::removeFromGroup(Group* group, EntityRef member) {
|
bool Groups::removeFromGroup(Group* group, EntityRef member) {
|
||||||
|
if (group == nullptr)
|
||||||
|
return false;
|
||||||
|
|
||||||
if (member.kind == EntityKind::PLAYER) {
|
if (member.kind == EntityKind::PLAYER) {
|
||||||
Player* plr = PlayerManager::getPlayer(member.sock);
|
Player* plr = PlayerManager::getPlayer(member.sock);
|
||||||
plr->group = nullptr; // no dangling pointers here muahaahahah
|
plr->group = nullptr; // no dangling pointers here muahaahahah
|
||||||
@@ -168,6 +174,9 @@ bool Groups::removeFromGroup(Group* group, EntityRef member) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Groups::disbandGroup(Group* group) {
|
void Groups::disbandGroup(Group* group) {
|
||||||
|
if (group == nullptr)
|
||||||
|
return;
|
||||||
|
|
||||||
// remove everyone from the group!!
|
// remove everyone from the group!!
|
||||||
bool done = false;
|
bool done = false;
|
||||||
while(!done) {
|
while(!done) {
|
||||||
@@ -252,6 +261,9 @@ static void leaveGroup(CNSocket* sock, CNPacketData* data) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Groups::sendToGroup(Group* group, void* buf, uint32_t type, size_t size) {
|
void Groups::sendToGroup(Group* group, void* buf, uint32_t type, size_t size) {
|
||||||
|
if (group == nullptr)
|
||||||
|
return;
|
||||||
|
|
||||||
auto players = group->filter(EntityKind::PLAYER);
|
auto players = group->filter(EntityKind::PLAYER);
|
||||||
for (EntityRef ref : players) {
|
for (EntityRef ref : players) {
|
||||||
ref.sock->sendPacket(buf, type, size);
|
ref.sock->sendPacket(buf, type, size);
|
||||||
@@ -259,6 +271,9 @@ void Groups::sendToGroup(Group* group, void* buf, uint32_t type, size_t size) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Groups::sendToGroup(Group* group, EntityRef excluded, void* buf, uint32_t type, size_t size) {
|
void Groups::sendToGroup(Group* group, EntityRef excluded, void* buf, uint32_t type, size_t size) {
|
||||||
|
if (group == nullptr)
|
||||||
|
return;
|
||||||
|
|
||||||
auto players = group->filter(EntityKind::PLAYER);
|
auto players = group->filter(EntityKind::PLAYER);
|
||||||
for (EntityRef ref : players) {
|
for (EntityRef ref : players) {
|
||||||
if(ref != excluded) ref.sock->sendPacket(buf, type, size);
|
if(ref != excluded) ref.sock->sendPacket(buf, type, size);
|
||||||
@@ -294,6 +309,9 @@ void Groups::groupTickInfo(CNSocket* sock) {
|
|||||||
|
|
||||||
void Groups::groupKick(Group* group, EntityRef ref) {
|
void Groups::groupKick(Group* group, EntityRef ref) {
|
||||||
|
|
||||||
|
if (group == nullptr)
|
||||||
|
return;
|
||||||
|
|
||||||
// if you are the group leader, destroy your own group and kick everybody
|
// if you are the group leader, destroy your own group and kick everybody
|
||||||
if (group->members[0] == ref) {
|
if (group->members[0] == ref) {
|
||||||
disbandGroup(group);
|
disbandGroup(group);
|
||||||
|
@@ -416,6 +416,9 @@ static void itemDeleteHandler(CNSocket* sock, CNPacketData* data) {
|
|||||||
|
|
||||||
Player* plr = PlayerManager::getPlayer(sock);
|
Player* plr = PlayerManager::getPlayer(sock);
|
||||||
|
|
||||||
|
if (itemdel->iSlotNum < 0 || itemdel->iSlotNum >= AINVEN_COUNT)
|
||||||
|
return; // sanity check
|
||||||
|
|
||||||
resp.eIL = itemdel->eIL;
|
resp.eIL = itemdel->eIL;
|
||||||
resp.iSlotNum = itemdel->iSlotNum;
|
resp.iSlotNum = itemdel->iSlotNum;
|
||||||
|
|
||||||
|
@@ -386,6 +386,9 @@ static void taskStart(CNSocket* sock, CNPacketData* data) {
|
|||||||
static void taskEnd(CNSocket* sock, CNPacketData* data) {
|
static void taskEnd(CNSocket* sock, CNPacketData* data) {
|
||||||
sP_CL2FE_REQ_PC_TASK_END* missionData = (sP_CL2FE_REQ_PC_TASK_END*)data->buf;
|
sP_CL2FE_REQ_PC_TASK_END* missionData = (sP_CL2FE_REQ_PC_TASK_END*)data->buf;
|
||||||
|
|
||||||
|
if (Missions::Tasks.find(missionData->iTaskNum) == Missions::Tasks.end())
|
||||||
|
return;
|
||||||
|
|
||||||
TaskData* task = Missions::Tasks[missionData->iTaskNum];
|
TaskData* task = Missions::Tasks[missionData->iTaskNum];
|
||||||
|
|
||||||
// handle timed mission failure
|
// handle timed mission failure
|
||||||
|
@@ -110,7 +110,7 @@ void Nanos::summonNano(CNSocket *sock, int slot, bool silent) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void setNanoSkill(CNSocket* sock, sP_CL2FE_REQ_NANO_TUNE* skill) {
|
static void setNanoSkill(CNSocket* sock, sP_CL2FE_REQ_NANO_TUNE* skill) {
|
||||||
if (skill->iNanoID >= NANO_COUNT)
|
if (skill == nullptr || skill->iNanoID >= NANO_COUNT || skill->iNanoID < 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Player *plr = PlayerManager::getPlayer(sock);
|
Player *plr = PlayerManager::getPlayer(sock);
|
||||||
|
@@ -106,10 +106,11 @@ static void racingEnd(CNSocket* sock, CNPacketData* data) {
|
|||||||
int timeDiff = now - epRace.startTime;
|
int timeDiff = now - epRace.startTime;
|
||||||
int podsCollected = epRace.collectedRings.size();
|
int podsCollected = epRace.collectedRings.size();
|
||||||
|
|
||||||
int score = std::min(epInfo.maxScore, (int)std::exp(
|
int score = std::exp(
|
||||||
(epInfo.podFactor * podsCollected) / epInfo.maxPods
|
(epInfo.podFactor * podsCollected) / epInfo.maxPods
|
||||||
- (epInfo.timeFactor * timeDiff) / epInfo.maxTime
|
- (epInfo.timeFactor * timeDiff) / epInfo.maxTime
|
||||||
+ epInfo.scaleFactor));
|
+ epInfo.scaleFactor);
|
||||||
|
score = (settings::IZRACESCORECAPPED && score > epInfo.maxScore) ? epInfo.maxScore : score;
|
||||||
int fm = (1.0 + std::exp(epInfo.scaleFactor - 1.0) * epInfo.podFactor * podsCollected) / epInfo.maxPods;
|
int fm = (1.0 + std::exp(epInfo.scaleFactor - 1.0) * epInfo.podFactor * podsCollected) / epInfo.maxPods;
|
||||||
|
|
||||||
// we submit the ranking first...
|
// we submit the ranking first...
|
||||||
@@ -132,8 +133,9 @@ static void racingEnd(CNSocket* sock, CNPacketData* data) {
|
|||||||
std::vector<int>* rankRewards = &EPRewards[epInfo.EPID].second;
|
std::vector<int>* rankRewards = &EPRewards[epInfo.EPID].second;
|
||||||
|
|
||||||
// top ranking
|
// top ranking
|
||||||
|
int maxRank = rankScores->size() - 1;
|
||||||
int topRank = 0;
|
int topRank = 0;
|
||||||
while (rankScores->at(topRank) > topRankingPlayer.Score)
|
while (topRank < maxRank && rankScores->at(topRank) > topRankingPlayer.Score)
|
||||||
topRank++;
|
topRank++;
|
||||||
|
|
||||||
resp.iEPTopRank = topRank + 1;
|
resp.iEPTopRank = topRank + 1;
|
||||||
@@ -143,7 +145,7 @@ static void racingEnd(CNSocket* sock, CNPacketData* data) {
|
|||||||
|
|
||||||
// this ranking
|
// this ranking
|
||||||
int rank = 0;
|
int rank = 0;
|
||||||
while (rankScores->at(rank) > postRanking.Score)
|
while (rank < maxRank && rankScores->at(rank) > postRanking.Score)
|
||||||
rank++;
|
rank++;
|
||||||
|
|
||||||
resp.iEPRank = rank + 1;
|
resp.iEPRank = rank + 1;
|
||||||
|
@@ -67,6 +67,9 @@ int settings::MONITORINTERVAL = 5000;
|
|||||||
// event mode settings
|
// event mode settings
|
||||||
int settings::EVENTMODE = 0;
|
int settings::EVENTMODE = 0;
|
||||||
|
|
||||||
|
// race settings
|
||||||
|
bool settings::IZRACESCORECAPPED = true;
|
||||||
|
|
||||||
void settings::init() {
|
void settings::init() {
|
||||||
INIReader reader("config.ini");
|
INIReader reader("config.ini");
|
||||||
|
|
||||||
@@ -111,6 +114,7 @@ void settings::init() {
|
|||||||
EVENTMODE = reader.GetInteger("shard", "eventmode", EVENTMODE);
|
EVENTMODE = reader.GetInteger("shard", "eventmode", EVENTMODE);
|
||||||
DISABLEFIRSTUSEFLAG = reader.GetBoolean("shard", "disablefirstuseflag", DISABLEFIRSTUSEFLAG);
|
DISABLEFIRSTUSEFLAG = reader.GetBoolean("shard", "disablefirstuseflag", DISABLEFIRSTUSEFLAG);
|
||||||
ANTICHEAT = reader.GetBoolean("shard", "anticheat", ANTICHEAT);
|
ANTICHEAT = reader.GetBoolean("shard", "anticheat", ANTICHEAT);
|
||||||
|
IZRACESCORECAPPED = reader.GetBoolean("shard", "izracescorecapped", IZRACESCORECAPPED);
|
||||||
MONITORENABLED = reader.GetBoolean("monitor", "enabled", MONITORENABLED);
|
MONITORENABLED = reader.GetBoolean("monitor", "enabled", MONITORENABLED);
|
||||||
MONITORPORT = reader.GetInteger("monitor", "port", MONITORPORT);
|
MONITORPORT = reader.GetInteger("monitor", "port", MONITORPORT);
|
||||||
MONITORINTERVAL = reader.GetInteger("monitor", "interval", MONITORINTERVAL);
|
MONITORINTERVAL = reader.GetInteger("monitor", "interval", MONITORINTERVAL);
|
||||||
|
@@ -38,6 +38,7 @@ namespace settings {
|
|||||||
extern int MONITORPORT;
|
extern int MONITORPORT;
|
||||||
extern int MONITORINTERVAL;
|
extern int MONITORINTERVAL;
|
||||||
extern bool DISABLEFIRSTUSEFLAG;
|
extern bool DISABLEFIRSTUSEFLAG;
|
||||||
|
extern bool IZRACESCORECAPPED;
|
||||||
|
|
||||||
void init();
|
void init();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user