Sie sind nicht angemeldet.

[Anderes-Problem] Dummy erkennen?

Bo$ca

cookie-cutter tee

(103)

  • »Bo$ca« ist männlich
  • »Bo$ca« ist der Autor dieses Themas

Beiträge: 112

Ingame-Name: redoX

Renommeemodifikator: 5

  • Nachricht senden

1

Sonntag, 9. November 2014, 02:16

Dummy erkennen?

wie kann ich schauen wer einen dummy hernimmt?wenn mir der Server gehört.
Gibts irgendnen trick?
Und wie kann man einen broadcast lange dortenstehem habem?
Ein Furz mit Gewicht ist Scheiße...

Sarah

Pwner!

  • »Sarah« ist weiblich

Beiträge: 604

Wohnort: ▬▬▬▬▬▬▬▬▬▬▬▬▬▬ ♥ bei Jimjam ♥ ▬▬▬▬▬▬▬▬▬▬▬▬▬▬

Beruf: ▬▬▬▬▬▬▬▬▬▬▬▬▬▬ ♥ Jimjam's Freund ♥ ▬▬▬▬▬▬▬▬▬▬▬▬▬▬

Renommeemodifikator: 11

  • Nachricht senden

2

Sonntag, 9. November 2014, 03:11

IP Adressen vergleichen.
Ewiges broadcast kannst du durch ein bisschen pfuschen im Code hinbekommen.




Meskalin

posting god

(1 234)

  • »Meskalin« ist männlich

Beiträge: 179

Ingame-Name: xush'

Renommeemodifikator: 10

  • Nachricht senden

3

Sonntag, 9. November 2014, 07:56

if (Server()->Tick() % (Server()->TickSpeed() * 1) == 4)
{
GameServer->Broadcast(-1, g_Config.m_SvBroadcastMsg);
}

Wäre eine möglichkeit, einfach in einer Tick/OnTick funktion aufrufen. Kann aber sein, dass ich mich mit den Parametern vertan hab, muss du gucken.


Meskalin.
1338 - the next level

John Kasper

pro-poster tee

(587)

Beiträge: 132

Clan: FaZe

Renommeemodifikator: 8

  • Nachricht senden

4

Sonntag, 9. November 2014, 11:04

if (Server()->Tick() % (Server()->TickSpeed() * 1) == 4)
{
GameServer->Broadcast(-1, g_Config.m_SvBroadcastMsg);
}

Wäre eine möglichkeit, einfach in einer Tick/OnTick funktion aufrufen. Kann aber sein, dass ich mich mit den Parametern vertan hab, muss du gucken.


Meskalin.

Ich vermute mal, dass er nicht coden kann

Tim

Pwner!

Beiträge: 1 303

Renommeemodifikator: 14

Danksagungen: 119

  • Nachricht senden

5

Sonntag, 9. November 2014, 11:33

IP Adressen vergleichen.
Ewiges broadcast kannst du durch ein bisschen pfuschen im Code hinbekommen.

und die ip, der spieler, der als letztes drauf gekommen ist (von den beiden) müsste der dummy sein

teeman
elementary os
provallo cms coming sooner

Kool Savas der beste, der King, der rappende Tony Hawk.

Assa

active tee

Beiträge: 290

Ingame-Name: Assa

Clan: FlyAc

Renommeemodifikator: 8

Danksagungen: 19

  • Nachricht senden

6

Sonntag, 9. November 2014, 13:06

Es gibt in teeworlds eine Option nur einen spieler pro IP zuzulassen, wenn du die Dummys verbieten willst.
Moment ich suchs dir raus:
sv_max_clients_per_ip <anzahl>

wenn du <anzahl> auf 1 setzt lässt du nur einen spieler mit genau dieser IP zu.


Bo$ca

cookie-cutter tee

(103)

  • »Bo$ca« ist männlich
  • »Bo$ca« ist der Autor dieses Themas

Beiträge: 112

Ingame-Name: redoX

Renommeemodifikator: 5

  • Nachricht senden

7

Sonntag, 9. November 2014, 22:41

Ahh assa frage dazu,
Wenn der server voll is und dann ich diese Einstellung mache,
Fliegen dann die dummys raus, oder der dummy + spieler, oder keiner?^^
Ein Furz mit Gewicht ist Scheiße...

solala.'

nameless tee

(30)

Beiträge: 8

Renommeemodifikator: 3

  • Nachricht senden

8

Sonntag, 9. November 2014, 22:50

Sollte der Server voll sein und du das machst fliegt keiner raus, da das nur beim Joinen überprüft wird.

Bo$ca

cookie-cutter tee

(103)

  • »Bo$ca« ist männlich
  • »Bo$ca« ist der Autor dieses Themas

Beiträge: 112

Ingame-Name: redoX

Renommeemodifikator: 5

  • Nachricht senden

9

Sonntag, 9. November 2014, 23:27

Ach fuck.
Gibts ne andere Lösung?
Also bei nem vollen server die dummys zu kicken?
Weil wenn der server ned vollis darf man dummys hernehmen,
Aber nicht wenn er voll ist.
Ein Furz mit Gewicht ist Scheiße...

solala.'

nameless tee

(30)

Beiträge: 8

Renommeemodifikator: 3

  • Nachricht senden

10

Sonntag, 9. November 2014, 23:35

Kommt drauf an...
Standardmäßig, nein. Solltest du jedoch lust haben es in deine Mod zu implementieren, ja.

Bo$ca

cookie-cutter tee

(103)

  • »Bo$ca« ist männlich
  • »Bo$ca« ist der Autor dieses Themas

Beiträge: 112

Ingame-Name: redoX

Renommeemodifikator: 5

  • Nachricht senden

11

Montag, 10. November 2014, 00:44

Naja die Lust wäre da,
Aber wahrscheinlich nicht das können.
Wenn man mir des step by step sagt dann würds schon gehen, aber will des schon machen^^
:S:
Ein Furz mit Gewicht ist Scheiße...

Meskalin

posting god

(1 234)

  • »Meskalin« ist männlich

Beiträge: 179

Ingame-Name: xush'

Renommeemodifikator: 10

  • Nachricht senden

12

Montag, 10. November 2014, 07:50

Ich könnte dir das eben machen, kannst dich ja mal in Skype melden: marie.epvp
1338 - the next level

solala.'

nameless tee

(30)

Beiträge: 8

Renommeemodifikator: 3

  • Nachricht senden

13

Montag, 10. November 2014, 14:38

Die frage ist dann nur: Sollen die Dummys direkt wieder joinen können, oder muss die spieleranzahl erst unter ein bestimmtes Limit fallen, damit man wieder Dummys auf den Server lässt.
Zudem sollen alle Dummys gekickt werden, oder immer nur einer wenn jemand versucht zu verbinden..

Bo$ca

cookie-cutter tee

(103)

  • »Bo$ca« ist männlich
  • »Bo$ca« ist der Autor dieses Themas

Beiträge: 112

Ingame-Name: redoX

Renommeemodifikator: 5

  • Nachricht senden

14

Montag, 10. November 2014, 14:43

Also perfekt wäre es wenn man bis zu 15 bzw. 14. Spieler nen dummy hernehmen kann aber wenn der 16. Kommt der dummy automatisch gekickt werden soll. Und erst wieder joinen kann wenn 14 bzw. 15 spieler ''nur'' noch droben sind
Des wäre nice ;))
Ein Furz mit Gewicht ist Scheiße...

solala.'

nameless tee

(30)

Beiträge: 8

Renommeemodifikator: 3

  • Nachricht senden

15

Montag, 10. November 2014, 14:58

Also perfekt wäre es wenn man bis zu 15 bzw. 14. Spieler nen dummy hernehmen kann aber wenn der 16. Kommt der dummy automatisch gekickt werden soll. Und erst wieder joinen kann wenn 14 bzw. 15 spieler ''nur'' noch droben sind
Des wäre nice ;))
Alle Dummys, oder nur ein Zufälliger/der erste Dummy/der zuletzt gejointe...

Bo$ca

cookie-cutter tee

(103)

  • »Bo$ca« ist männlich
  • »Bo$ca« ist der Autor dieses Themas

Beiträge: 112

Ingame-Name: redoX

Renommeemodifikator: 5

  • Nachricht senden

16

Montag, 10. November 2014, 18:56

Alle
Ein Furz mit Gewicht ist Scheiße...

Sarah

Pwner!

  • »Sarah« ist weiblich

Beiträge: 604

Wohnort: ▬▬▬▬▬▬▬▬▬▬▬▬▬▬ ♥ bei Jimjam ♥ ▬▬▬▬▬▬▬▬▬▬▬▬▬▬

Beruf: ▬▬▬▬▬▬▬▬▬▬▬▬▬▬ ♥ Jimjam's Freund ♥ ▬▬▬▬▬▬▬▬▬▬▬▬▬▬

Renommeemodifikator: 11

  • Nachricht senden

17

Montag, 10. November 2014, 19:41

Wenn ein 16. Spieler auf den Server joint sollen alle Dummys der Anderen gekickt werden?




solala.'

nameless tee

(30)

Beiträge: 8

Renommeemodifikator: 3

  • Nachricht senden

18

Montag, 10. November 2014, 19:47

OOkay

Da du das bei 15 Spielern/14 Spielern willst brauchen wir auch nichts groß in den Network datein zu verändern.

Also als erstes brauchst du eine Variable die dir sagt ob der Spieler ein Dummy ist.

Spoiler

C++ Quelltext

1
bool m_aIsDummy[MAX_CLIENTS];

oder wir machen es direkt in der "CClient" Klasse des Servers

C++ Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
class CClient
	{
	public:
 
		enum
		{
			STATE_EMPTY = 0,
			STATE_AUTH,
			STATE_CONNECTING,
			STATE_READY,
			STATE_INGAME,
 
			SNAPRATE_INIT=0,
			SNAPRATE_FULL,
			SNAPRATE_RECOVER
		};
 
		class CInput
		{
		public:
			int m_aData[MAX_INPUT_SIZE];
			int m_GameTick; // the tick that was chosen for the input
		};
 
		// connection state info
		int m_State;
		int m_Latency;
		int m_SnapRate;
 
		int m_LastAckedSnapshot;
		int m_LastInputTick;
		CSnapshotStorage m_Snapshots;
 
		CInput m_LatestInput;
		CInput m_aInputs[200]; // TODO: handle input better
		int m_CurrentInput;
 
		char m_aName[MAX_NAME_LENGTH];
		char m_aClan[MAX_CLAN_LENGTH];
		int m_Country;
		int m_Score;
		int m_Authed;
		int m_AuthTries;
 
		const IConsole::CCommandInfo *m_pRconCmdToSend;
 
		void Reset();
	};
 
CClient m_aClients[MAX_CLIENTS];


dort fügen wir dann unser bool ein ->

C++ Quelltext

1
2
3
4
5
6
7
8
9
...
int m_Score;
		int m_Authed;
		int m_AuthTries;
 
++ bool m_IsDummy;
 
		const IConsole::CCommandInfo *m_pRconCmdToSend;
...


dann müssen wir noch überprüfen ob der spieler ein Dummy ist -> Also schauen wir beim Verbinden auf den Server (z.B. direkt bei den Infos) ob der Spieler ein Dummy ist, indem wir die ip des Spielers mit den ip's der Spieler auf dem Server vergleichen (.. du musst natürlich auch bedenken, dass ein Familienmitglied evtl. auch gerade Teeworlds auf diesem Server spielen will.. - aber das ist ja nicht mein Problem ;) )

C++ Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
if(Sys)
	{
		// system message
		if(Msg == NETMSG_INFO)
		{
			if(m_aClients[ClientID].m_State == CClient::STATE_AUTH)
			{
 
				const char *pVersion = Unpacker.GetString(CUnpacker::SANITIZE_CC);
				if(str_comp(pVersion, GameServer()->NetVersion()) != 0)
				{
					// wrong version
					char aReason[256];
					str_format(aReason, sizeof(aReason), "Wrong version. Server is running '%s' and client '%s'", GameServer()->NetVersion(), pVersion);
					m_NetServer.Drop(ClientID, aReason);
					return;
				}
 
				const char *pPassword = Unpacker.GetString(CUnpacker::SANITIZE_CC);
				if(g_Config.m_Password[0] != 0 && str_comp(g_Config.m_Password, pPassword) != 0)
				{
					// wrong password
					m_NetServer.Drop(ClientID, "Wrong password");
					return;
				}
 
//Hier kannst du das z.b. einfügen (sorry hab grad keine lust das mit der ip raus zu suchen - musst du selber machen)
 
for(int i = 0; i < MAX_CLIENTS; i++)
{
if(m_aClients[i].m_State == CClient::STATE_EMPTY || i == ClientID) //hieß glaub empty 
continue;
 
if(Ip von Spieler i == Ip von Spieler "ClientID")
{
m_aClients[ClientID].m_IsDummy = true;
break;
}
}
 
if(m_aClients[ClientID].m_IsDummy && Spielerzahl >= 14/15)
{
m_NetServer.Drop(ClientID, "only one client per ip while server is nearly full");
return;
} 
 
if(Spielerzahl == 16)
{
for(int i = 0; i < MAX_CLIENTS; i++)
{
if(m_aClients[i].m_State == CClient::STATE_EMPTY || !m_aClients[i].m_IsDummy)
continue;
 
m_NetServer.Drop(i, "kicked all dummys on server - sorry :3");
//Evtl. solltest du nur einmal in den chat schreiben, dass alle dummys gekickt wurden, da es sonst etwas spammen könnte 
}
}
				m_aClients[ClientID].m_State = CClient::STATE_CONNECTING;
				SendMap(ClientID);
			}
		}

Und bei der Reset funktion solltest du IsDummy dann auch wieder auf false setzen ;)
zum Lesen den Text mit der Maus markieren


~Alles im Editor hier geschrieben und nicht getestet ;) Aber viel spaß mit dem Anfang, sollte er dir gefallen^^ (Formatieren musst du natürlich selber :*P )

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »solala.'« (10. November 2014, 20:00)


Ähnliche Themen