Skocz do zawartości

Rekomendowane odpowiedzi

Napisano (edytowane)

Siema,

Tworzę serwer typu deathmatch i mam pewien problem. Otóż stworzyłem menu z wyborem broni, które po wciśnięciu danej pozycji daje graczowi odpowiednią broń. Chciałbym się dowiedzieć jak można osiągnąć efekt, że po śmierci gracza dana broń zostaje w jego ręce, a nie kasuje się? Dla przykładu, żeby zbyt długiego kodu tu nie dawać wymyślę plugin, który po wpisaniu !awp daje awp, a po wpisaniu !scout daje ssg08. Czy trzeba mieć dostęp do bazy danych? Może jest na to komenda w cs'ie? Przypominam: celem pluginu jest zapamiętanie broni w slocie pierwszym gracza do kolejnego odrodzenia. Oto wymyślony plugin:

#include <sourcemod>
#include <sdktools>
 
public void OnPluginStart()
{
    RegConsoleCmd("sm_awp", AWP);
    RegConsoleCmd("sm_scout", SCOUT);
}
 
public Action AWP (int client, int args)
{
    DeletePrimaryWeapon(client);
    GivePlayerItem(client, "weapon_awp");
}
 
public Action SCOUT(int client, int args)
{
    DeletePrimaryWeapon(client);
    GivePlayerItem(client, "weapon_ssg08");
}
 
void DeletePrimaryWeapon(int client) {
    int slot = GetPlayerWeaponSlot(client, 0);
    if(slot != -1) {                
        RemovePlayerItem(client, slot);
        AcceptEntityInput(slot, "Kill");
    }
}
Edytowane przez kox1906

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Dziękuje 1
Napisano (edytowane)
#include <sourcemod>
#include <sdktools>
#pragma tabsize 0
 
char g_LastWeapon[MAXPLAYERS + 1][256];
 
public OnPluginStart()
{
    RegConsoleCmd("sm_awp", AWP);
    RegConsoleCmd("sm_scout", SCOUT);
    HookEvent("player_spawn", Player_Spawn);
}
 
public Action AWP(int client, int args)
{
    DeletePrimaryWeapon(client);
    GivePlayerItem(client, "weapon_awp");
    g_LastWeapon[client] = "weapon_awp";
}
 
public Action SCOUT(int client, int args)
{
    DeletePrimaryWeapon(client);
    GivePlayerItem(client, "weapon_ssg08");
    g_LastWeapon[client] = "weapon_ssg08";
}
 
void DeletePrimaryWeapon(int client) 
{
    int slot = GetPlayerWeaponSlot(client, 0);
    if(slot != -1) {                
        RemovePlayerItem(client, slot);
        AcceptEntityInput(slot, "Kill");
    }
}
 
public Action Player_Spawn(Event e, const char[] n, bool b)
{
    int client = GetClientOfUserId(GetEventInt(e, "userid"));
    DeletePrimaryWeapon(client);
    GivePlayerItem(client, g_LastWeapon[client]);
}

 w g_LastWeapon" zapisujesz ostatnią wybraną broń a po spawnie ponownie ją nadajesz

Edytowane przez ogbudowa

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Napisano (edytowane)

.

Edytowane przez ogbudowa
do usuenicia

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dzięki wielkie,

Mógłbyś jeszcze powiedzieć jak działa ta tablica g_LastWeapon[MAXPLAYERS + 1][256] ? Jak Ci się nie chce to okej, będę jakoś żył bez tego ale i tak dziękuję 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Lubię to! 1
Napisano (edytowane)

każdy gracz ma swoją wartość 256 znakową zawartą w tej tablicy { "weapon_awp", "weapon_awp", "weapon_ssg08" } 

 

"MAXPLAYERS" jest zdefiniowane jako 65

Edytowane przez ogbudowa

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
14 godzin temu, ogbudowa napisał:

każdy gracz ma swoją wartość 256 znakową zawartą w tej tablicy { "weapon_awp", "weapon_awp", "weapon_ssg08" } 

 

"MAXPLAYERS" jest zdefiniowane jako 65

Nieprawda. Ilość klientów to pierwsze pole, a drugie to długość buforu.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Napisano (edytowane)
4 godziny temu, SUPER TIMOR napisał:

Nieprawda. Ilość klientów to pierwsze pole, a drugie to długość buforu.

opisałem jak to działa i pokazałem to na przykładzie, a nie za co odpowiada pierwsze pole a na co drugie, a nie widzę żebym napisał, że tak nie jest

bo myślę, że z

char g_LastWeapon[MAXPLAYERS + 1][256];

można wywnioskować za co odpowiada dane pole

 

19 godzin temu, kox1906 napisał:

Mógłbyś jeszcze powiedzieć jak działa ta tablica 

 

Edytowane przez ogbudowa

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Kocham to 1
Napisano (edytowane)
22 godziny temu, ogbudowa napisał:

y { "weapon_awp", "weapon_awp", "weapon_ssg08" } 

wprowadza w błąd. nie napisałeś czego konkretnie się ten przykład tyczy, więc traktuję to jako przylepę do zadanego pytania, a istotnie jest to błędny przykład w tym kontekście 😛 

 

char zmienna[MAXPLAYERS][3][256] = { "pole1", "pole2", "pole3" };

^ Stworzy tablicę zmiennych typu string, o kolejno - 65 polach "dla graczy", i 3 polach do manewrów**** o maksymalnej długości bufora 256 znaków.

 

22 godziny temu, ogbudowa napisał:

każdy gracz ma swoją wartość 256 znakową zawartą w tej tablicy { "weapon_awp", "weapon_awp", "weapon_ssg08" } 

precyzyjniej byłoby, gdybyś napisał "każdy gracz może mieć zadeklarowaną 256 znakową wartość tej zmiennej, np "blablabla". I już 😛

A wtedy, jeśli g_LastWeapon[client] = "coś tam" ->> to przy PrintToChat(client, "%s", g_LastWeapon[client]);     OUTPUT : "coś tam"

 

No cóż, sory. Nie chciałem szczypać i się wywyższać czy coś, fajnie że odpowiadasz ludziom, ale odpowiadaj tak, żeby na pewno zrozumieli, odpowiednio wyczerpując temat. Pozdrawiam Cię 🙂

 

 

*** czytaj 3 zmiennych typu string w tej tablicy - o indeksach [0], [1] i [2]

Edytowane przez SUPER TIMOR

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ę...