Skip to content

Commit

Permalink
Merge branch 'master' into huntern-zh_cn
Browse files Browse the repository at this point in the history
  • Loading branch information
Hu1night committed Feb 21, 2024
2 parents a014f5f + a26404d commit 45644b8
Show file tree
Hide file tree
Showing 10 changed files with 157 additions and 60 deletions.
4 changes: 2 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1006,8 +1006,8 @@ set_src(GAME_SERVER GLOB_RECURSE src/game/server
weapons/hammer.h
weapons/hunthammer.cpp
weapons/hunthammer.h
weapons/jugninja.cpp
weapons/jugninja.h
# weapons/jugninja.cpp
# weapons/jugninja.h
weapons/lasergun.cpp
weapons/lasergun.h
weapons/ninja.cpp
Expand Down
65 changes: 33 additions & 32 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,37 +1,38 @@
DDNet-PvP HunterN猎人杀
===
模式规则:
# DDNet-HunterN猎人杀
[**DDNet-HunterN**](https://github.com/Hu1night/DDNet-HunterN)是一个基于[**DDNet-PvP**](https://github.com/TeeworldsCN/ddnet-pvp)(传统竞技)(基于DDNet 15.3.2)的[**DDNet**](https://github.com/DDNet/DDNet)模组项目 提供名为***HunterN***(猎人杀)的PvP模式

1.每回合都会秘密随机选择猎人。猎人必须消灭所有平民。
### HunterN的游戏规则:
1. 每局开始时会**秘密随机**选择玩家成为**猎人****平民** 且玩家只知道自己身份 猎人的目标是**消灭所有平民**
2. 猎人使用高伤武器、瞬杀追踪锤(20伤,长按追踪)和破片榴弹 **而平民没有锤子且只能使用常规武器**
3. 当玩家死时如为猎人死亡则通知其他猎人 且死亡原因和死后聊天**仅旁观/死人可见**

2.猎人造成双倍伤害,有一把瞬杀锤和破片榴弹,而平民没有锤子,只能使用常规武器。

3.活着的玩家看不到死去玩家的信息。

4.如果猎人死亡,将通知其他猎人。

5.在游戏开始时,玩家只知道自己的身份。

Rules:

1.Each round will secretly randomly select Hunter(s). Hunter(s) must eliminate all the Civilians.

2.The Hunter deals double damage and has an instant-kill hammer and fragmentation grenades, while Civilians have no hammer and can only use regular weapons.

3.The living players cannot see messages from dead players.

4.If the Hunter dies, the other Hunters will be notified.

5.At the beginning of the game, players only know their own identity.

在Ubuntu上使用CMake构建
---
1.安装依赖库
## 在Ubuntu上使用CMake构建DDNet-HunterN
1. 使用apt安装************
```
sudo apt install build-essential cmake python3 libsqlite3-dev libcurl4-openssl-dev zlib1g-dev
```
sudo apt install build-essential cmake python3 libsqlite3-dev
2. 转到项目目录编译服务端
```
2.编译服务端
cmake .
make -j16
```
cmake ..
make -j16
```

## DDNet-HunterN的服务端下载&配置
* 你可以下载**正式发布包**[Github Releases](https://github.com/Hu1night/DDNet-HunterN/releases)
* 或者下载**开发构建**[Github Actions](https://github.com/Hu1night/DDNet-HunterN/actions/workflows/build.yaml?query=branch%3Amaster++)[几乎汉化分支构建](https://github.com/Hu1night/DDNet-HunterN/actions/workflows/build.yaml?query=branch%3Ahuntern-zh_cn++))(下载需Github账号)

**关于DDNet-HunterN的一些配置指令**
* ```sv_room_commands```于控制台启用时才能使玩家创建/加入房间
* ```room_setting 0```于控制台输入可查看0号房间可用的模式指令 房间指令使用实例:```room_setting 0 timelimit 3``` (设置0号房间每局限时3分钟)
* ```/setting```于(管理员)聊天栏输入可查看所在房间可用的模式指令 使用实例:```/setting map dm2``` (设置所在房间的子地图为dm2)

**关于DDNet-HunterN的一些配置文件**
* 服务端启动时执行/autoexec.cfg
* HunterN房间启动时执行/room_config/modes/huntern.rcfg
* DDNet-HunterN的Mega_std_collection地图启动时执行/data/maps/huntern_msc.map.cfg
* 服务器资产定位使用/storage.cfg

**关于DDNet-PvP的Mega map生成**<br />
使用[DDNet-PvP附加工具](https://github.com/Hu1night/DDNet-HunterN/releases/download/0.3a1/DDNet-PvP.Extra.tools.zip)中的map_merge程序进行Mega map的生成<br />
使用用法:```map_merge 输出地图名 输入地图1 输入地图2 输入地图3 ... 输入地图n```<br />
使用实例:```map_merge huntern.map hunter1.map hunter2.map hunter3.map hunter4.map hunter6.map```<br />
2 changes: 1 addition & 1 deletion src/game/server/gamecontroller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2940,7 +2940,7 @@ void IGameController::SendKillMsg(int Killer, int Victim, int Weapon, int ModeSp
for(int i = 0; i < MAX_CLIENTS; ++i)
{
if(GetPlayerIfInRoom(i))
Server()->SendPackMsg((GameServer()->m_apPlayers[i]->GetTeam() != TEAM_SPECTATORS || !(GameServer()->m_apPlayers[i]->GetCharacter() && GameServer()->m_apPlayers[i]->GetCharacter()->IsAlive())) ?
Server()->SendPackMsg((GameServer()->m_apPlayers[i]->GetTeam() != TEAM_SPECTATORS || (GameServer()->m_apPlayers[i]->GetCharacter() && GameServer()->m_apPlayers[i]->GetCharacter()->IsAlive())) ?
&PlayerMsg : &Msg, // Is Hide Reason
MSGFLAG_VITAL, i);
}
Expand Down
120 changes: 101 additions & 19 deletions src/game/server/gamemodes/huntern.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,63 @@
#include <game/server/classes.h>

// HunterN commands
static void ConMapAdd(IConsole::IResult *pResult, void *pUserData)
{
CGameControllerHunterN *pSelf = (CGameControllerHunterN *)pUserData;

if(pResult->NumArguments() > 0) // 如果要加入地图
{
for(int j = 0; j < pResult->NumArguments(); ++j) // 逐个加入地图到列表
{
const char *pMapName = pResult->GetString(j);

for(int i = 0; i < 64; ++i) // 循环所有子地图
{
if(!pSelf->m_Maprotation[i]) // 在列表里找到了可用空位
{
int MapIndex = pSelf->GameServer()->Teams()->GetMapIndex(pMapName);
if(MapIndex == 0)
break; // 跳出到错误提示

pSelf->m_Maprotation[i] = MapIndex; // 加入循环列表
goto next_map;
}
}

char aBuf[512];
str_format(aBuf, sizeof(aBuf), "Cannot add map '%s'", pMapName);
pSelf->InstanceConsole()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "instance", aBuf);

next_map:;
}
}
else // 显示列表
{
char aBuf[1024];
str_format(aBuf, sizeof(aBuf), "Value: ");
for(int i = 0; i < 64; ++i) // 循环所有子地图
{
if(!pSelf->m_Maprotation[i]) // 列表走到了尽头
break;

const char *pMapName = pSelf->GameServer()->Teams()->GetMapName(pSelf->m_Maprotation[i]);
if(!pMapName)
continue;

str_append(aBuf, pMapName, sizeof(aBuf));
str_append(aBuf, ", ", sizeof(aBuf));
}
pSelf->InstanceConsole()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "instance", aBuf); // 输出
}
}

static void ConMapClear(IConsole::IResult *pResult, void *pUserData)
{
CGameControllerHunterN *pSelf = (CGameControllerHunterN *)pUserData;

for(int i = 0; i < 64; ++i) pSelf->m_Maprotation[i] = {0};
}

static void ConSetClass(IConsole::IResult *pResult, void *pUserData)
{
IGameController *pSelf = (IGameController *)pUserData;
Expand Down Expand Up @@ -64,7 +121,7 @@ static void ConSetHeal(IConsole::IResult *pResult, void *pUserData)

static void ConRevive(IConsole::IResult *pResult, void *pUserData)
{
IGameController *pSelf = (IGameController *)pUserData;// CGameControllerHunterN *pSelf = (CGameControllerHunterN *)pUserData; // Warning // Use CGameControllerHunterN instead of IGameController
IGameController *pSelf = (IGameController *)pUserData;// CGameControllerHunterN *pSelf = (CGameControllerHunterN *)pUserData; // Use CGameControllerHunterN instead of IGameController

CPlayer *pPlayer = pSelf->GetPlayerIfInRoom((pResult->NumArguments() > 0) ? pResult->GetInteger(0) : pResult->m_ClientID);
if(!pPlayer) // If the player does not exist
Expand All @@ -89,10 +146,14 @@ CGameControllerHunterN::CGameControllerHunterN() :
INSTANCE_CONFIG_INT(&m_BroadcastHunterDeath, "htn_hunt_broadcast_death", 0, 0, 1, CFGFLAG_CHAT | CFGFLAG_INSTANCE, "是否全体广播猎人死亡(开关,默认0,限制0~1)");
INSTANCE_CONFIG_INT(&m_EffectHunterDeath, "htn_hunt_effert_death", 0, 0, 1, CFGFLAG_CHAT | CFGFLAG_INSTANCE, "猎人死亡是否使用出生烟(开关,默认0,限制0~1)");
INSTANCE_CONFIG_INT(&m_HuntFragNum, "htn_hunt_frag_num", 18, 0, 0xFFFFFFF, CFGFLAG_CHAT | CFGFLAG_INSTANCE, "猎人榴弹产生的破片数量(整数,默认18,限制0~268435455)");
INSTANCE_CONFIG_INT(&m_HuntFragTrack, "htn_hunt_frag_track", 18, 0, 0xFFFFFFF, CFGFLAG_CHAT | CFGFLAG_INSTANCE, "猎人榴弹产生的破片数量(整数,默认18,限制0~268435455");
INSTANCE_CONFIG_INT(&m_HuntFragTrack, "htn_hunt_frag_track", 0, 0, 1, CFGFLAG_CHAT | CFGFLAG_INSTANCE, "猎人榴弹破片是否追踪定向(开关,默认0,限制0~1");
INSTANCE_CONFIG_INT(&m_Wincheckdeley, "htn_wincheck_deley", 100, 0, 0xFFFFFFF, CFGFLAG_CHAT | CFGFLAG_INSTANCE, "终局判断延时毫秒(整数,默认100,限制0~268435455)");
INSTANCE_CONFIG_INT(&m_GameoverTime, "htn_gameover_time", 7, 0, 0xFFFFFFF, CFGFLAG_CHAT | CFGFLAG_INSTANCE, "结算界面时长秒数(整数,默认0,限制0~268435455)");
//INSTANCE_CONFIG_INT(&m_RoundMode, "htn_round_mode", 0, 0, 1, CFGFLAG_CHAT | CFGFLAG_INSTANCE, "回合模式 正常0 娱乐1(整数,默认0,限制0~1)");
//INSTANCE_CONFIG_INT(&m_RoundMode, "htn_round_mode", 0, 0, 1, CFGFLAG_CHAT | CFGFLAG_INSTANCE, "回合模式 正常0 娱乐1(整数,默认0,限制0~1)");;

InstanceConsole()->Register("htn_map", "", CFGFLAG_CHAT | CFGFLAG_INSTANCE, ConMapAdd, this, "Maps to rotate between");
InstanceConsole()->Register("htn_map_add", "?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps] ?s[maps]", CFGFLAG_CHAT | CFGFLAG_INSTANCE, ConMapAdd, this, "Add a map to the maps rotation list");
InstanceConsole()->Register("htn_map_clear", "", CFGFLAG_CHAT | CFGFLAG_INSTANCE, ConMapClear, this, "Clear the maps rotation list");

InstanceConsole()->Register("htn_setclass", "i[class-id] ?i[CID] ?i[team-id] ?i[hunt-weapon]", CFGFLAG_CHAT | CFGFLAG_INSTANCE, ConSetClass, this, "给玩家设置职业(1平民,2猎人,4剑圣)");
InstanceConsole()->Register("htn_giveweapon", "i[weapon-id] i[slot] ?i[CID] ?i[ammo-num]", CFGFLAG_CHAT | CFGFLAG_INSTANCE, ConGiveWeapon, this, "给玩家武器");
Expand Down Expand Up @@ -130,6 +191,31 @@ void CGameControllerHunterN::SendChatRoom(const char *pText, int Flags)
}
}

void CGameControllerHunterN::CycleMap()
{
if(!m_Maprotation[0]) // 列表没东西
return;

bool CurrentMapfound = false; // 是否找到了当前地图

for(int i = 0; i < 64; ++i) // 循环所有子地图
{
if(!m_Maprotation[i]) // 列表走到了尽头 没找到可用地图
break;
else if(m_Maprotation[i] == m_MapIndex) // 是否在列表里找到了当前地图
CurrentMapfound = true; // 下次循环会试图寻找可用地图
else if(CurrentMapfound)
{
m_MapIndex = m_Maprotation[i]; // 切换地图
GameServer()->Teams()->ReloadGameInstance(GameWorld()->Team());
return;
}
}

m_MapIndex = m_Maprotation[0]; // 重置到列表第一项
GameServer()->Teams()->ReloadGameInstance(GameWorld()->Team());
}

void CGameControllerHunterN::OnWorldReset() // 重置部分值和职业选择
{
m_GameFlags = IGF_SURVIVAL | IGF_ROUND_TIMER_ROUND | IGF_SUDDENDEATH | IGF_MARK_MATCH | IGF_MARK_AMONGUS;
Expand All @@ -140,7 +226,7 @@ void CGameControllerHunterN::OnWorldReset() // 重置部分值和职业选择
//TeamClass[0] = CLASS_CIVIC; // TEAM_RED
//TeamClass[1] = CLASS_HUNTER; // TEAM_BLUE

int PlayerCount = 0; // 玩家计数
//int PlayerCount = m_aTeamSize[TEAM_RED]; // 玩家计数
int PreselectPlayerCount = 0; // 最近没当过猎人的玩家的计数
int rHunter = 0; // 猎人选择随机数
// int nHunter = 0; // 需要选择多少个猎人
Expand All @@ -156,19 +242,17 @@ void CGameControllerHunterN::OnWorldReset() // 重置部分值和职业选择
pPlayer->m_HiddenScore = 0; // 重置隐藏分
pPlayer->m_UseHunterWeapon = false; // 默认武器
pPlayer->m_Class = CLASS_CIVIC; // 重置玩家为平民
++PlayerCount; // 计数有PlayerCount个玩家
if(pPlayer->m_Preselect) // 猎人选择伪随机!我们要在m_Preselect的玩家里面选择猎人
++PreselectPlayerCount; // 计数有PreselectPlayerCount个玩家
}
}

if(PlayerCount < 2)
if(m_aTeamSize[TEAM_RED] < 2)
{
m_aTeamSize[TEAM_RED] = PlayerCount; // 你猜猜正常情况下没指令是怎么触发这个函数的
return;
}

nHunter = (PlayerCount - 2) / m_HunterRatio + 1;// 我们要多少个猎人
nHunter = (m_aTeamSize[TEAM_RED] - 2) / m_HunterRatio + 1;// 我们要多少个猎人
str_format(HunterList, sizeof(HunterList), "本回合的 %d 个Hunter是: ", nHunter); // Generate Hunter info message 生成猎人列表消息头

SendChatRoom("——————欢迎来到HunterN猎人杀——————");
Expand Down Expand Up @@ -246,12 +330,9 @@ void CGameControllerHunterN::OnWorldReset() // 重置部分值和职业选择
{
SendChatTarget(pPlayer->GetCID(), HunterList); // 给膀胱者发
}
else if(pPlayer->GetCharacter())
else if(pPlayer->GetCharacter() && pPlayer->GetCharacter()->IsAlive()) // 这个玩家出生了 所以OnCharacterSpawn已经过了
{
if(pPlayer->GetCharacter()->IsAlive()) // 这个玩家出生了 所以OnCharacterSpawn已经过了
{
OnResetClass(pPlayer->GetCharacter()); // 在这里给他们Class提示和武器
}
OnResetClass(pPlayer->GetCharacter()); // 在这里给他们Class提示和武器
}
}
}
Expand Down Expand Up @@ -289,7 +370,7 @@ void CGameControllerHunterN::OnCharacterSpawn(CCharacter *pChr) // 给予生命
pChr->GameWorld()->CreateSoundGlobal(SOUND_CTF_GRAB_EN, CmaskOne(pChr->GetPlayer()->GetCID()));
pChr->GameServer()->SendBroadcast(" 这回合你被选择为猎人Hunter!\n 猎人双倍伤害 有瞬杀锤子和破片榴弹\n 分辨出你的队友 消灭敌方队伍胜利!", pChr->GetPlayer()->GetCID(), true);
}
else if(pChr->GetPlayer()->m_Class == CLASS_JUGGERNAUT)
/*else if(pChr->GetPlayer()->m_Class == CLASS_JUGGERNAUT)
{
pChr->m_MaxHealth = 114;
pChr->IncreaseHealth(114);
Expand All @@ -300,7 +381,7 @@ void CGameControllerHunterN::OnCharacterSpawn(CCharacter *pChr) // 给予生命
pChr->GameWorld()->CreateSoundGlobal(SOUND_NINJA_FIRE, CmaskOne(pChr->GetPlayer()->GetCID()));
pChr->GameServer()->SendBroadcast(" 这局你是剑圣Juggernaut!噶了所有人胜利!\n 剑圣40心20盾 有盾反锤子且能斩杀", pChr->GetPlayer()->GetCID(), true);
}
}*/
}

void CGameControllerHunterN::OnPlayerJoin(class CPlayer *pPlayer) // 使新进旁观者收到猎人列表
Expand All @@ -326,7 +407,7 @@ int CGameControllerHunterN::OnCharacterTakeDamage(class CCharacter *pChr, vec2 &
return -1;
}*/

bool CGameControllerHunterN::CanChangeTeam(CPlayer *pPlayer, int JoinTeam) const // 加入膀胱者重置职业Flag
bool CGameControllerHunterN::CanChangeTeam(CPlayer *pPlayer, int JoinTeam) const // 加入膀胱者则重置职业Flag
{
if(JoinTeam == TEAM_SPECTATORS)
{
Expand Down Expand Up @@ -431,13 +512,14 @@ void CGameControllerHunterN::DoWincheckRound() // check for time based win
--DoWinchenkClassTick;
}

/*void CGameControllerHunterN::DoWincheckMatch()
void CGameControllerHunterN::DoWincheckMatch()
{
if(m_GameInfo.m_MatchNum > 0 && m_GameInfo.m_MatchCurrent >= m_GameInfo.m_MatchNum)
{
EndMatch();
SetGameState(IGS_END_MATCH, m_GameoverTime); // EndMatch();
CycleMap();
}
}*/
}

int CGameControllerHunterN::OnCharacterDeath(class CCharacter *pVictim, class CPlayer *pKiller, int Weapon) // 杀手隐藏分增减 和受害人职业死亡消息 以及延时终局
{
Expand Down
8 changes: 6 additions & 2 deletions src/game/server/gamemodes/huntern.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,24 +14,28 @@ class CGameControllerHunterN : public IGameController
int m_Wincheckdeley;
int m_GameoverTime;
//int m_RoundMode;
public: // Maprotation
int m_Maprotation[64] = {0}; // 存储MapIndex的数组

public:
CGameControllerHunterN();

static void OnResetClass(CCharacter *pChr);
void SendChatRoom(const char *pText, int Flags = 3);
void CycleMap();

// event
void OnCharacterSpawn(class CCharacter *pChr) override;
void OnWorldReset() override;
bool IsSpawnRandom() const { return m_aTeamSize[TEAM_RED] > 4; };
void OnCharacterSpawn(class CCharacter *pChr) override;
void OnPlayerJoin(class CPlayer *pPlayer) override;
int OnCharacterTakeDamage(class CCharacter *pChr, vec2 &Force, int &Dmg, int From, int WeaponType, int WeaponID, bool IsExplosion) override;
//int OnPickup(CPickup *pPickup, CCharacter *pChar, SPickupSound *pSound) override;
//bool CanDeadPlayerFreeView(const class CPlayer *pSpectator) override { return true; }
//bool CanDeadPlayerFollow(const CPlayer *pSpectator, const CPlayer *pTarget) override { return true; }
bool CanChangeTeam(CPlayer *pPlayer, int JoinTeam) const override;
void DoWincheckRound() override;
void DoWincheckMatch() override { ; }
void DoWincheckMatch() override;
int OnCharacterDeath(class CCharacter *pVictim, class CPlayer *pKiller, int Weapon) override;

private: // Intelnal function and value
Expand Down
9 changes: 9 additions & 0 deletions src/game/server/teams.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -861,6 +861,15 @@ void CGameTeams::AddTaggedMapVote(IGameController *Controller, int Tag)
Controller->AddVote(Controller, aBuf, aBufCom);
}
}

const char *CGameTeams::GetMapName(int NumMap)
{
NumMap--;
if(NumMap >= 0 && NumMap < m_NumMaps)
return m_aMapNames[NumMap];

return nullptr;
}
/* Hunter End */

int CGameTeams::GetMapIndex(const char *pMapName)
Expand Down
1 change: 1 addition & 0 deletions src/game/server/teams.h
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,7 @@ class CGameTeams
static void AddMap(const char *pMapName);
static void AddMapWithTag(const char *pMapName, int Tag); // Hunter
static void AddTaggedMapVote(IGameController *Controller, int Tag); // Hunter
const char *GetMapName(int NumMap);
static int GetMapIndex(const char *pMapName);

void UpdateGameTypeName();
Expand Down
4 changes: 2 additions & 2 deletions src/game/server/weapons.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ REGISTER_WEAPON(WEAPON_ID_NINJA, CNinja)
REGISTER_WEAPON(WEAPON_ID_EXPLODINGLASER, CExplodingLaser)

REGISTER_WEAPON(WEAPON_ID_HUNTHAMMER, CHuntHammer) // Hunter
REGISTER_WEAPON(WEAPON_ID_JUGNINJA, CJugNinja) // Hunter
//REGISTER_WEAPON(WEAPON_ID_JUGNINJA, CJugNinja) // Hunter

#else

Expand All @@ -27,7 +27,7 @@ REGISTER_WEAPON(WEAPON_ID_JUGNINJA, CJugNinja) // Hunter
#include "weapons/explodinglaser.h"

#include "weapons/hunthammer.h" // Hunter
#include "weapons/jugninja.h" // Hunter
//#include "weapons/jugninja.h" // Hunter

enum
{
Expand Down
2 changes: 1 addition & 1 deletion src/game/server/weapons/grenade.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ bool CGrenade::GrenadeCollide(CProjectile *pProj, vec2 Pos, CCharacter *pHit, bo
WEAPON_SHOTGUN, //Type
pProj->GetWeaponID(), //WeaponID
pProj->GetOwner(), //Owner
FragPos, //Pos
FragPos + d, //Pos
d * 0.5f, //Dir
6.0f, // Radius
0.2f * pProj->Server()->TickSpeed(), //Span
Expand Down
2 changes: 1 addition & 1 deletion src/game/version.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
#ifndef GAME_RELEASE_VERSION
#define GAME_RELEASE_VERSION "15.4"
#endif
#define GAME_VERSION "0.6.4, " GAME_RELEASE_VERSION ", 0.3a1"
#define GAME_VERSION "0.6.4, " GAME_RELEASE_VERSION ", 0.3a2_p0"
#define GAME_NETVERSION "0.6 626fce9a778df4d4"
#define GAME_NAME "DDNet"
#define CLIENT_VERSIONNR 15040
Expand Down

0 comments on commit 45644b8

Please sign in to comment.