Hier ein Tutorial das mehr Mainstream ist also kein Lua code oder so was sondern nur pure c++ :)
1. Was bedeutet ServerTick?
2. Wie benutze ich ServerTick und TickSpeed?
3. Wie baue ich einen Timer?
4. Wie mache ich Timelimits?
5. Beispiele
6. Schlusswort
1. Was bedeutet ServerTick?
Der ServerTick ist eine Zahl die bei jedem durchlauf erhöht wird. Es gibt 50 durchläufe pro Sekunde. Bei jedem durchlauf wird eine sogenannte TickFunction in einigen Klassen ausgeführt:
-GameContext (gamecontext.cpp) der bei anderen Klassen die TickFunktion ausführt und sich selbst in der TickFunktion (hier OnTick) unter anderem um die Votes kümmert.
Folgende
1. World: Die Welt (gameworld.cpp) welche bei allen Entities die Tickfunktion ausführt. Der Character, Pickups und Projektile sind Entities.
2. Controller: Der Controller (gamecontroller.cpp) gibt die Spielregeln vor und überprüft ob ein Team/Spieler gewonnen hat.
3. Players: Die Player (player.cpp) wo unter anderem der Ping berechnet wird.
2. Wie benutze ich ServerTick und TickSpeed?
[cpp]
Server()->Tick();
Server()->TickSpeed();
[/cpp]
Aufruf der Funktionen in C++.
Mit Server()->Tick() können wir den aktuellen Tick wert abfragen.
Server()->TickSpeed() gibt uns immer 50 zurück.
3. Wie baue ich einen Timer?
Jetzt bauen wir einen einfachen Timer in einer TickFunktion.
[cpp]
CPlayer::Tick()
{
if (Server()->Tick() % (Server()->TickSpeed() * 1) == 0)
{
//Code hier
}
}
[/cpp]
Der hier beschriebene Timer führt jede Sekunde den Code in der if aus. Das *1 ist ein platzhalter für die Sekundenzahl. Ihr könnt die * 1 durch eine andere Sekundenzahl ersätzen.
4. Wie mache ich Timelimits?
Um ein timelimit zu machen müssen wir erstmal eine Variable in die Klassen-Headerdatei definieren.
[cpp]
int m_MyTimeLimit;
[/cpp]
In die .cpp datei kommt folgender code:
[cpp]
CPlayer::Tick()
{
if (m_MyTimeLimit + Server()->TickSpeed() < Server()->Tick())
{
//Dieser Code wird jeden Tick ausgeführt bis m_MyTimeLimit auf Server()->Tick() gesetzt wird.
//So kann man z.b. Spamprotection realisieren
}
}
[/cpp]
5. Beispiele
player.cpp
[cpp]
if(!m_pCharacter && m_DieTick+Server()->TickSpeed()*3 <= Server()->Tick())
m_Spawning = true;
[/cpp]
Nach dem der Tee Tot ist wird der nach 3 Sekunden automatisch respawnt.
[cpp]
// we got to wait 0.5 secs before respawning
m_RespawnTick = Server()->Tick()+Server()->TickSpeed()/2;
[/cpp]
Vor dem Respawn müssen wir 0,5 sekunden warten. Nach 0,5 sek ist ein Respawn durch klicken der Maus möglich.
6. Schlusswort
Wenn es um Zeitgesteuerte Abläufe geht, ob periodisch oder zufällig ist die TickFunktion ein nützliches Hilfsmittel und in vielen Fällen sogar anders kaum zu realisieren.
1. Was bedeutet ServerTick?
2. Wie benutze ich ServerTick und TickSpeed?
3. Wie baue ich einen Timer?
4. Wie mache ich Timelimits?
5. Beispiele
6. Schlusswort
1. Was bedeutet ServerTick?
Der ServerTick ist eine Zahl die bei jedem durchlauf erhöht wird. Es gibt 50 durchläufe pro Sekunde. Bei jedem durchlauf wird eine sogenannte TickFunction in einigen Klassen ausgeführt:
-GameContext (gamecontext.cpp) der bei anderen Klassen die TickFunktion ausführt und sich selbst in der TickFunktion (hier OnTick) unter anderem um die Votes kümmert.
Folgende
1. World: Die Welt (gameworld.cpp) welche bei allen Entities die Tickfunktion ausführt. Der Character, Pickups und Projektile sind Entities.
2. Controller: Der Controller (gamecontroller.cpp) gibt die Spielregeln vor und überprüft ob ein Team/Spieler gewonnen hat.
3. Players: Die Player (player.cpp) wo unter anderem der Ping berechnet wird.
Quellcode
- Tick
- Game Context (CGameContext::OnTick)
- Game World (GAMEWORLD::Tick)
- Reset world if requested (GAMEWORLD::Reset)
- All entities in the world (ENTITY::Tick)
- All entities in the world (ENTITY::TickDefered)
- Remove entities marked for deletion (GAMEWORLD::remove_entities)
- Game Controller (GAMECONTROLLER::Tick)
- All players (CPlayer::Tick)
2. Wie benutze ich ServerTick und TickSpeed?
[cpp]
Server()->Tick();
Server()->TickSpeed();
[/cpp]
Aufruf der Funktionen in C++.
Mit Server()->Tick() können wir den aktuellen Tick wert abfragen.
Server()->TickSpeed() gibt uns immer 50 zurück.
3. Wie baue ich einen Timer?
Jetzt bauen wir einen einfachen Timer in einer TickFunktion.
[cpp]
CPlayer::Tick()
{
if (Server()->Tick() % (Server()->TickSpeed() * 1) == 0)
{
//Code hier
}
}
[/cpp]
Der hier beschriebene Timer führt jede Sekunde den Code in der if aus. Das *1 ist ein platzhalter für die Sekundenzahl. Ihr könnt die * 1 durch eine andere Sekundenzahl ersätzen.
4. Wie mache ich Timelimits?
Um ein timelimit zu machen müssen wir erstmal eine Variable in die Klassen-Headerdatei definieren.
[cpp]
int m_MyTimeLimit;
[/cpp]
In die .cpp datei kommt folgender code:
[cpp]
CPlayer::Tick()
{
if (m_MyTimeLimit + Server()->TickSpeed() < Server()->Tick())
{
//Dieser Code wird jeden Tick ausgeführt bis m_MyTimeLimit auf Server()->Tick() gesetzt wird.
//So kann man z.b. Spamprotection realisieren
}
}
[/cpp]
5. Beispiele
player.cpp
[cpp]
if(!m_pCharacter && m_DieTick+Server()->TickSpeed()*3 <= Server()->Tick())
m_Spawning = true;
[/cpp]
Nach dem der Tee Tot ist wird der nach 3 Sekunden automatisch respawnt.
[cpp]
// we got to wait 0.5 secs before respawning
m_RespawnTick = Server()->Tick()+Server()->TickSpeed()/2;
[/cpp]
Vor dem Respawn müssen wir 0,5 sekunden warten. Nach 0,5 sek ist ein Respawn durch klicken der Maus möglich.
6. Schlusswort
Wenn es um Zeitgesteuerte Abläufe geht, ob periodisch oder zufällig ist die TickFunktion ein nützliches Hilfsmittel und in vielen Fällen sogar anders kaum zu realisieren.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von MAP94 ()