kox1906 Napisano 24 Czerwca 2020 (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 24 Czerwca 2020 przez kox1906 Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
ogbudowa 1 Napisano 24 Czerwca 2020 (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 24 Czerwca 2020 przez ogbudowa Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
ogbudowa Napisano 24 Czerwca 2020 (edytowane) . Edytowane 24 Czerwca 2020 przez ogbudowa do usuenicia Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
kox1906 Napisano 24 Czerwca 2020 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
ogbudowa 1 Napisano 24 Czerwca 2020 (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 24 Czerwca 2020 przez ogbudowa Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
Gość Napisano 25 Czerwca 2020 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
ogbudowa Napisano 25 Czerwca 2020 (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 25 Czerwca 2020 przez ogbudowa Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
Gość Napisano 25 Czerwca 2020 (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 25 Czerwca 2020 przez Gość Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
Paweł Napisano 30 Czerwca 2020 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