Skocz do zawartości
LiveAndLetDie

[Rozwiązane] Ustaw graczowi losowy model podczas odradzania

Rekomendowane odpowiedzi

Napisano (edytowane)
Spoiler

 

Hey all, I am trying to create a plugin that sets player a random model (SetEntityModel) when they spawn. 

These models and all necessary files are received from external files to increase the flexibility of the plugin, instead of permanently encoding them.

So far I have managed to create 2 functions.

First function reads all lines from a file. All model files and such are stored in this file line by line. After reading them, the functions adds everything in downloads table (AddFileToDownloadsTable).

Second function reads model name from key values file and respectively precaches the model (PrecacheModel).

Hopefully everything is correct so far, but my problem/question is: how could I assign a random model for each player when they spawn? Here is the code and external files:

 

 

(Po pierwsze przepraszam, jeśli występują problemy z tłumaczeniem, mam nadzieję, że jest to jakoś zrozumiałe!)

 

Hej wszystkim, próbuję stworzyć wtyczkę, która ustawia graczowi losowy model (SetEntityModel) podczas odradzania. Te modele i wszystkie niezbędne pliki są odbierane z plików zewnętrznych w celu zwiększenia elastyczności wtyczki, zamiast ich kodowania na stałe. Do tej pory udało mi się stworzyć 2 funkcje.

Pierwsza funkcja odczytuje wszystkie wiersze z pliku. Wszystkie pliki modeli i takie są przechowywane w tym pliku wiersz po wierszu. Po ich odczytaniu funkcje dodają wszystko do tabeli pobrań (AddFileToDownloadsTable).

Druga funkcja odczytuje nazwę modelu z pliku wartości kluczy i odpowiednio wstępnie buforuje model (PrecacheModel).

Mam nadzieję, że do tej pory wszystko jest poprawne, ale mój problem / pytanie brzmi: jak mogę przypisać losowy model każdemu graczowi podczas odradzania się? Oto kod i pliki zewnętrzne:

 

#include <sourcemod>
#include <sdktools>

public void OnPluginStart()
{
    HookEvent("player_spawn", Event_PlayerSpawn, EventHookMode_Post);
}

public Action Event_PlayerSpawn(Event event, const char[] name, bool dontBroadcast)
{
    // ??????????????????????????????
}

public void OnMapStart()
{
    ReadDLFile();
	ReadKVFile();
}

public void ReadDLFile()
{
    char path[128];
	BuildPath(Path_SM, path, sizeof(path), "configs/dls.cfg");
	Handle file = OpenFile(path, "r");
	char line[256];
	while(!IsEndOfFile(file) && ReadFileLine(file, line, sizeof(line)))
	{
	    TrimString(line);
		AddFileToDownloadsTable(line);
	}
	CloseHandle(file);
}

public void ReadKVFile()
{
    char path[128];
	BuildPath(Path_SM, path, sizeof(path), "configs/dls2.cfg");
	KeyValues Kv = new KeyValues("Models");
	Kv.ImportFromFile(path);
	if(!Kv.GotoFirstSubKey())
	{
	    delete Kv;
		return;
	}
	char model[256];
	do
	{
	    Kv.GetString("model", model, sizeof(model));
		PrecacheModel(model);
	}   while(Kv.GotoNextKey());
	delete Kv;
}
dls.cfg 

// AddFileToDownloadsTable 

ścieżka 1 .vtf
ścieżka 2 .vmt
ścieżka 3 .mdl
ścieżka 4 // i tak dalej..
ścieżka 5 // i tak dalej..
dls2.cfg

// PrecacheModel 

"Models"
{
    "1"
	{
	    "model" "xxxx.mdl"
	}
	"2"
	{
	    "model" "yyyy.mdl"
	}
}

 

Edytowane przez LiveAndLetDie

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość

Witaj,

Przy czytaniu drugiego pliku, tj tego z PrecacheModel, możesz zapisywać ścieżki modeli do ArrayList
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!. Przy odradzaniu się gracza tworzysz bufor do przechowywania stringa i losujesz pozycję z ArrayListy używając

ArrayLista.GetString(GetRandomInt(0, ArrayLista.Length-1), buffer, sizeof(buffer))

Wtedy już zapisany, losowy model nadajesz graczowi. A to wiesz jak zrobić 🙂

Pozdrawiam

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
12 godzin temu, SUPER TIMOR napisał:

Witaj,

Przy czytaniu drugiego pliku, tj tego z PrecacheModel, możesz zapisywać ścieżki modeli do ArrayList
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!. Przy odradzaniu się gracza tworzysz bufor do przechowywania stringa i losujesz pozycję z ArrayListy używając

ArrayLista.GetString(GetRandomInt(0, ArrayLista.Length-1), buffer, sizeof(buffer))

Wtedy już zapisany, losowy model nadajesz graczowi. A to wiesz jak zrobić 🙂

Pozdrawiam

 

 

Dziękuję, działa idealnie. Problem rozwiązany!

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Wiadomość wygenerowana automatycznie

 

Problem został rozwiązany

Jeżeli się z tym nie zgadzasz, raportuj ten post

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.

×
×
  • Dodaj nową pozycję...