Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: sourceserver.info. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

LuLaLau

Anfänger

  • »LuLaLau« ist der Autor dieses Themas

Beiträge: 41

Rootserver vorhanden: Nein

  • Nachricht senden

1

Sonntag, 8. September 2013, 13:24

zRIOT Scriping

Hey Leute, ich versuche bei Zombie Riot etwas zu programmieren. Weiß jedoch nicht richtig weiter.

Mein ziel ist es die Config bzw. den Code so an zupassen, das ich
1. Auslesen kann wie viele Spieler da sind

und 1.2 denn sagen kann wenn 10 Spieler, dann nimm die days.txt

wenn 20 Spieler, denn nimm diese.

Alternativ die aktuellen werte der Days.txt auslesen und denn eben count + oder - X

Was für mich jedoch noch interessanter ist wäre das:

Day 1

Spoiler Spoiler

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
"TestDay"
	{
		"count"					"100"
		"healthboost"			"0"
		"respawn"				"1"
		"deaths_before_zombie"	"0"
		"fademin"				""
		"fademax"				"" 
		"zombieoverride"		"zombie1,zombie2,zombie3"
		
		"boss_spawn"			"bosszombie1"
		"boss_spawn_count"	"1"
		"boss_respawn"		"0"

	}


Die Files dazu müssten folgende sein: (Daydata.inc)

Spoiler Spoiler

Quellcode

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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
/**
 * ====================
 *     Zombie Riot
 *   File: daydata.inc
 *   Author: Greyscale
 * ====================
 */

enum ZRiot_DayData
{
    String:data_display[32],
    String:data_zombieoverride[32*MAXZOMBIES],
    String:data_storyline[192],
    data_count,
    data_healthboost,
    bool:data_respawn,
    data_deaths_before_zombie,
    Float:data_fademin,
    Float:data_fademax
}

#define MAXDAYS 31

new Handle:kvDays = INVALID_HANDLE;

new arrayDays[MAXDAYS][ZRiot_DayData];
new dCount;

LoadDayData(bool:defaultconfig)
{
    decl String:path[PLATFORM_MAX_PATH];
    Format(path, sizeof(path), "%s/days.txt", gMapConfig);
    
    if (!defaultconfig && !FileExists(path))
    {
        return;
    }
    
    if (kvDays != INVALID_HANDLE)
    {
        CloseHandle(kvDays);
    }
    
    kvDays = CreateKeyValues("days");
    KvSetEscapeSequences(kvDays, true);
    
    if (!FileToKeyValues(kvDays, path))
    {
        SetFailState(""%s" failed to load", path);
    }
    
    KvRewind(kvDays);
    if (!KvGotoFirstSubKey(kvDays))
    {
        SetFailState("No day data defined in "%s"", path);
    }
    
    decl String:display[32];
    decl String:zombieoverride[32*MAXZOMBIES];
    decl String:storyline[192];
    
    dCount = 0;
    do
    {
        KvGetSectionName(kvDays, display, sizeof(display));
        strcopy(arrayDays[dCount][data_display], 32, display);
        
        KvGetString(kvDays, "zombieoverride", zombieoverride, sizeof(zombieoverride));
        strcopy(arrayDays[dCount][data_zombieoverride], 32*MAXZOMBIES, zombieoverride);
        
        KvGetString(kvDays, "storyline", storyline, sizeof(storyline));
        strcopy(arrayDays[dCount][data_storyline], 192, storyline);
        
        arrayDays[dCount][data_count] = KvGetNum(kvDays, "count", 25);
        arrayDays[dCount][data_healthboost] = KvGetNum(kvDays, "healthboost");
        arrayDays[dCount][data_respawn] = bool:KvGetNum(kvDays, "respawn");
        arrayDays[dCount][data_deaths_before_zombie] = KvGetNum(kvDays, "deaths_before_zombie");
        arrayDays[dCount][data_fademin] = KvGetFloat(kvDays, "fademin");
        arrayDays[dCount][data_fademax] = KvGetFloat(kvDays, "fademax");
        
        dCount++;
    } while (KvGotoNextKey(kvDays));
}

GetDayDisplay(day, String:display[], len)
{
    strcopy(display, len, arrayDays[day][data_display]);
}

bool:ExplodeZombieOverrides(day)
{
    if (adtZombies != INVALID_HANDLE)
    {
        CloseHandle(adtZombies);
        adtZombies = INVALID_HANDLE;
    }
    
    decl String:zombieoverride[32*MAXZOMBIES];
    GetDayZombieOverride(day, zombieoverride, sizeof(zombieoverride));
    
    if (zombieoverride[0])
    {
        adtZombies = CreateArray();
        
        new String:sZombies[MAXZOMBIES][64];
        ExplodeString(zombieoverride, ",", sZombies, MAXZOMBIES, 64);
        
        for (new x = 0; x < MAXZOMBIES; x++)
        {
            if (!sZombies[x][0])
                continue;
            
            TrimString(sZombies[x]);
            new zombieid = FindZombieIDByName(sZombies[x]);
            
            if (zombieid == -1)
                continue;
            
            PushArrayCell(adtZombies, zombieid);
        }
        
        return true;
    }
    
    return false;
}

GetDayZombieOverride(day, String:zombieoverride[], len)
{
    strcopy(zombieoverride, len, arrayDays[day][data_zombieoverride]);
}

GetDayStoryLine(day, String:storyline[], len)
{
    strcopy(storyline, len, arrayDays[day][data_storyline]);
}

GetDayCount(day)
{
	new String:currentMap[10];
	GetCurrentMap(currentMap, sizeof(currentMap));
	if (currentMap[0] == 'z' && currentMap[1] == 'h' && currentMap[2] == 'c')
	{
		return 9000;
	}
	if (currentMap[0] == 'z' && currentMap[1] == 'e')
	{
		return 9000;
	}
	if (currentMap[0] == 'z' && currentMap[1] == 'p' && currentMap[2] == 'o')
	{
		return 9000;
	}

	if (gDay == 4 || gDay == 8 || gDay == 17 || gDay == 22 || gDay == 23 || gDay == 24 || gDay == 25)
	{
		return (arrayDays[day][data_count]);
	}
	else
	{
		//PrintToChatAll("Day: %d", gDay);
		new realPlayerCount = (GetHumanCount() * 2);
		return (arrayDays[day][data_count] + realPlayerCount);
	}
}

GetDayHealthBoost(day)
{
	new hpAdd;
	if (gDay == 4 || gDay == 22 || gDay == 23 || gDay == 24 || gDay == 25)
	{
		hpAdd = (GetHumanCount() * 1000);
	}
	else
	{
		hpAdd = (GetHumanCount() * 5);
	}
	return (arrayDays[day][data_healthboost] + hpAdd);
}

bool:GetDayRespawn(day)
{
    return arrayDays[day][data_respawn];
}

GetDayDeathsBeforeZombie(day)
{
    return arrayDays[day][data_deaths_before_zombie];
}

Float:GetDayMinFade(day)
{
    return arrayDays[day][data_fademin];
}

Float:GetDayMaxFade(day)
{
    return arrayDays[day][data_fademax];
}

BeginDay()
{
    gZombiesKilled = 0;
    
    new zombiecount = GetDayCount(gDay);
    new zombiemax = GetConVarInt(gCvars[CVAR_ZOMBIEMAX]);
    
    new spawncount;
    new bool:respawn = GetDayRespawn(gDay);
    
    if (respawn)
    {
        spawncount = zombiemax;
    }
    else
    {
        spawncount = (zombiecount < zombiemax) ? zombiecount : zombiemax;
    }
    
    ServerCommand("bot_quota %d", spawncount);
    
    decl String:display[32];
    GetDayDisplay(gDay, display, sizeof(display));
    
    new bool:override = ExplodeZombieOverrides(gDay);
    
    new maxplayers = GetMaxClients();
    for (new x = 1; x <= maxplayers; x++)
    {
        if (!IsClientInGame(x))
        {
            continue;
        }
        
        ChangeClientDeathCount(x, 0);
        
        if (!IsPlayerZombie(x))
        {
            continue;
        }
        
        if (override)
        {
            new size = GetArraySize(adtZombies);
            if (size)
            {
                new zombieid = GetRandomInt(0, size - 1);
                            
                Zombify(x, GetArrayCell(adtZombies, zombieid));
            }
        }
    }
}


Jemand eine Idee, oder einen Tipp wie man da am besten vorgehen könnte ?

LG


1. Nachtrag:
Nach http://docs.sourcemod.net/api/
Wäre es ja so:

Spoiler Spoiler

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
if(IsClientInGame == 5)
{
Format(path, sizeof(path), "%s/days1.txt", gMapConfig);
}
elseif (IsClientInGame == 10)
{
Format(path, sizeof(path), "%s/days2.txt", gMapConfig);
}
else
{
Format(path, sizeof(path), "%s/days.txt", gMapConfig);
}


2. Nachtrag zum 1. Nachtrag:
Meine Idee wäre das obrige Beispiel mit einer Switch Anweisung zu machen, die ich so regeln würde:

Spoiler Spoiler

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Ermittle die Anzahl der spieler und nutze anhand der Zahlen die passende Days.txt um den Schwierigkeitsgrad zu erhöhen
	switch(IsClientInGame)
		{
		 case 10: cout << days_txt = "days.txt"; << endl;
				  break;
		 
		 case 20: cout << days_txt = "days2.txt"; << endl;
				  break;
		 
		 case 30: cout << days_txt = "days3.txt"; << endl;
				  break;
		 
		 case 40: cout << days_txt = "days4.txt"; << endl;
				  break;
		 
		 default: cout << days_txt = "days5.txt"; << endl;
		}
	
    Format(path, sizeof(path), "%s/"days_txt, gMapConfig);


Ich kann nur nicht sagen ob es richtig wäre :D

Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von »LuLaLau« (8. September 2013, 14:45)


fluxX

Super Moderator

Beiträge: 1 056

Wohnort: Österreich

Beruf: IT Systemadministrator

Rootserver vorhanden: Ja

  • Nachricht senden

2

Sonntag, 8. September 2013, 16:16

Da IsClientInGame nur true oder false bzw. 1 oder 0 zurück gibt, kannst du das also nicht so machen.
Ebenso sind wir hier bei Sourcepawn und nicht bei C# oder C++ :D

vill. kannst ja damit was anfangen:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
..some function..()
{
	if(GetRealClientCount(true) == 5)
		Format(path, sizeof(path), "%s/days1.txt", gMapConfig);
	else if(GetRealClientCount(true) == 10)
		Format(path, sizeof(path), "%s/days2.txt", gMapConfig);
	else
		Format(path, sizeof(path), "%s/days.txt", gMapConfig);
}

stock GetRealClientCount(bool:inGameOnly = true)
{
	new clients = 0;
	
	for(new i = 1; i <=GetMaxClients(); i++)
	{
		if(((inGameOnly) ? IsClientInGame(i) : IsClientConnected(i)) && !IsFakeClient(i))
		{
			clients++;
		}
	}
	return clients;
}


Greetz

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »fluxX« (8. September 2013, 16:23)


LuLaLau

Anfänger

  • »LuLaLau« ist der Autor dieses Themas

Beiträge: 41

Rootserver vorhanden: Nein

  • Nachricht senden

3

Sonntag, 8. September 2013, 18:29

Hilft mir mit der Days.txt schon weiter, danke !

Nun kommt der Teil, der etwas komplizierter werden sollte. Das die Eigenschaften der days.txt erweitert werden.

LG

LuLaLau

Anfänger

  • »LuLaLau« ist der Autor dieses Themas

Beiträge: 41

Rootserver vorhanden: Nein

  • Nachricht senden

4

Dienstag, 10. September 2013, 08:43

*haha* okay nachtrag:
ich bekomme das zRiot ding irgendwie nicht richtig Compilet.

Ich nutze SourcePawn und habe ja bei zriot mehrere Ordner
unter anderem:
addons
cfg
materials
models

Interessant ist ja nur
\ScriptingSP\zRiot\addons\sourcemod\scripting\zriot

da gibt es die daydata.inc
wenn ich die bearbeite und hochlade passiert gar nichts, das müsste es doch aber, oder ?

Das muss ja nicht compiliert werden.

Es muss ja "nur" die "zombieriot.sp" im Ordner
\ScriptingSP\zRiot\addons\sourcemod\scripting

compiliert werden, wenn ich da etwas ändere, oder irre ich da ?

LG

fluxX

Super Moderator

Beiträge: 1 056

Wohnort: Österreich

Beruf: IT Systemadministrator

Rootserver vorhanden: Ja

  • Nachricht senden

5

Dienstag, 10. September 2013, 13:37

Ja nur die zombieriot.sp, alles andere wird von dieser Datei aus included (also die ganzen .inc Dateien).

Greetz

LuLaLau

Anfänger

  • »LuLaLau« ist der Autor dieses Themas

Beiträge: 41

Rootserver vorhanden: Nein

  • Nachricht senden

6

Dienstag, 10. September 2013, 13:41

Dacht ich mir, wenn ich aber die daydtata.inc komplett leere und den server neustarte gehts ohne Probleme weiter.

Das fand ich nämlich sehr merkwürdig.

LG

fluxX

Super Moderator

Beiträge: 1 056

Wohnort: Österreich

Beruf: IT Systemadministrator

Rootserver vorhanden: Ja

  • Nachricht senden

7

Dienstag, 10. September 2013, 13:48

Die .inc oder .sp Dateien brauchst du sowieso nicht auf den Server hochladen^^

Greetz

LuLaLau

Anfänger

  • »LuLaLau« ist der Autor dieses Themas

Beiträge: 41

Rootserver vorhanden: Nein

  • Nachricht senden

8

Dienstag, 10. September 2013, 13:53

Denn wieder verstehe ich nicht, wie ich änderungen vornehmen soll.

Ich muss ja die daydata.inc bearbeiten und in zRIOT intigrieren oder der .sp ja sagen das was geändert ist.

Verstehe also nicht, wie ich meinen eigenen Code da intigriere....

LG


// Nachtrag:

Denn muss ich ja aus allen files eine zRIOT.sp machen oder eben die zombieriot.smx .....frage: Wie mache ich das ?!

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »LuLaLau« (10. September 2013, 13:59)


fluxX

Super Moderator

Beiträge: 1 056

Wohnort: Österreich

Beruf: IT Systemadministrator

Rootserver vorhanden: Ja

  • Nachricht senden

9

Dienstag, 10. September 2013, 14:15

Wenn du dir die zombieriot.sp anschaust dann siehst du im oberen Teil sowas:

Spoiler Spoiler

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "zriot/zombieriot"
#include "zriot/global"
#include "zriot/cvars"
#include "zriot/translation"
#include "zriot/offsets"
#include "zriot/ambience"
#include "zriot/zombiedata"
#include "zriot/daydata"
#include "zriot/targeting"
#include "zriot/overlays"
#include "zriot/zombie"
#include "zriot/hud"
#include "zriot/sayhooks"
#include "zriot/teamcontrol"
#include "zriot/weaponrestrict"
#include "zriot/commands"
#include "zriot/event"

d.h. du musst nur die zombieriot.sp compilieren alle andere Dateien holt er sich selbst (wegen dem oberen Teil).
Würdest du jetz aus allen Dateien eine eigene .sp Datei machen, dann könntest du diese eh nicht richtig compilieren, da dir code Stücke fehlen (vom Hauptplugin).

Greetz

LuLaLau

Anfänger

  • »LuLaLau« ist der Autor dieses Themas

Beiträge: 41

Rootserver vorhanden: Nein

  • Nachricht senden

10

Dienstag, 10. September 2013, 14:21

Ah, okay.

Ich bearbeite die daydata.inc und compiliere die zombieriot.sp die daraus die smx macht ?!

K, checked :D ^^

Danke !

Ähnliche Themen