Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

[Globall Offensive Mod] problem z dodaniem więcej niż 56 skinów !Serwer CS 1.6 !


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
5 odpowiedzi w tym temacie

#1 PATYrek

    Początkujący

  • Użytkownik

Reputacja: 0
Nowy

  • Postów:18
  • Imię:Patryk
  • Lokalizacja:Polska
Offline

Napisano 24.09.2016 22:09

Witam,

Prowadzę serwer ostatnimi czasy o spopularyzowanym modzie: "CS:GO Mod"

Korzystam z paczki niejakiego: Deroida

Link: https://forums.allie...ad.php?t=265653.

Link do sma: https://forums.allie...91&d=1436250157

 

Opis problemu:

Podczas dodania więcej niż 56 skinów do folderu "skins.cfg" broń o ID-57 wzwyż nie zapisuje po zmianie mapy w /menu (ekwipunku).

Sprawa jest oczywista iż za zapis odpowiada ten fragment kodu, sedno sprawy siedzi zaś w tym iż za żadne skarby nie chcę mi skompilować lokalnie powyżej tych [Data][56] np. [Data][57] itd ...

Za pomoc oferuję admina na tym że serwerze na zawsze, bez obowiązku opłat składek administracyjnych.

GT: http://www.gametrack...3.176.208:2030/ (serwer nie posiada żadnych płatnych reklam, co świadczy o jego poziomie)

No jeżeli uda się naprawić te bugi to serwer będzie spokojnie full bez jakichkolwiek reklam :).

 

 


new pFile, Name[32];
pFile = fopen(SaveFile, "rt");
get_user_name(id, Name, 31);
 
if(pFile)
{
new Line[256];
new LineName[32], tData[5][8], Data[MAX][8];
 
while(!feof(pFile))
{
fgets(pFile, Line, 255);
 
if(Line[0] == ';' || strlen(Line) < 2)
continue;
 
parse(Line, LineName, 31);
 
if(equal(LineName, Name))
{
parse(Line, LineName, 31, tData[0], 7, tData[1], 7, tData[2], 7, tData[3], 7, tData[4], 7,
Data[0], 7, Data[1], 7, Data[2], 7, Data[3], 7, Data[4], 7, Data[5], 7,
Data[6], 7, Data[7], 7, Data[8], 7, Data[9], 7, Data[10], 7, Data[11], 7, Data[12], 7,
Data[13], 7, Data[14], 7, Data[15], 7, Data[16], 7, Data[17], 7, Data[18], 7, Data[19], 7,
Data[20], 7, Data[21], 7, Data[22], 7, Data[23], 7, Data[24], 7, Data[25], 7, Data[26], 7,
Data[27], 7, Data[28], 7, Data[29], 7, Data[30], 7, Data[31], 7, Data[32], 7, Data[33], 7,
Data[34], 7, Data[35], 7, Data[36], 7, Data[37], 7, Data[38], 7, Data[39], 7, Data[40], 7,
Data[41], 7, Data[42], 7, Data[43], 7, Data[44], 7, Data[45], 7, Data[46], 7, Data[47], 7,
Data[48], 7, Data[49], 7, Data[50], 7, Data[51], 7, Data[52], 7, Data[53], 7, Data[54], 7,
Data[55], 7, Data[56], 7);
 
Kills[id] = str_to_num(tData[0]);
Points[id] = str_to_num(tData[1]);
pKey[id] = str_to_num(tData[2]);
Chest[id] = str_to_num(tData[3]);
Rang[id] = str_to_num(tData[4]);
 
for(new i; i < MAX; i++)
{
uWeapon[i][id] = str_to_num(Data[i]);
}
return PLUGIN_HANDLED;
}
}
fclose(pFile);
}
return PLUGIN_CONTINUE;
}
public Save(id)
{
if(!is_user_connected(id))
{
return PLUGIN_HANDLED;
}

Użytkownik PATYrek edytował ten post 24.09.2016 22:12

  • +
  • -
  • 0

#2 Master Yoga

    Support Team | Mocarz

  • Support Team

Reputacja: 136
Zaawansowany

  • Postów:275
  • Lokalizacja:Magistrala Adresowa
Offline

Napisano 25.09.2016 00:28


Sprawa jest oczywista iż za zapis odpowiada ten fragment kodu

 

Tak się składa, że ten fragment kodu odpowiada za odczyt, a nie zapis  :giggle:

 

Wywali ci błędy bo pewnie nie zmieniasz wielkości tablicy. MAX jest chyba zdefiniowany na samej górze

#define MAX 66

Znając, życie zwiększając tą wartość będziesz musiał przerobić zarówno odczyt jak i zapis skinów.


  • +
  • -
  • 0

HTML ★ CSS ★ JAVASCRIPT ★ AJAX ★ JQUERY ★ PHP ★ C++ ★ PAWN ★ SQL ★ Objective-C++


MKW0tb8.pngMKW0tb8.pngMKW0tb8.png


#3 _McHappy

    Wszechwiedzący

  • Support Team

Reputacja: 243
Wszechwidzący

  • Postów:501
  • GG:
  • Imię:Radek
  • Lokalizacja:Tak
Offline

Napisano 25.09.2016 08:43

Sprawa jest trochę bardziej skomplikowana - ale też da się z nią uporać.

Błąd przy kompilacji jest spowodowany tym, iż funkcja parse() zostaje przeciążona zbyt dużą ilością argumentów do wczytania.
W tej sytuacji, jeśli zamierzasz obsługiwać zapis/odczyt danych gracza przy większej ilości skinów, polecam zmienić sposób ładowania postępu graczy.
Przykładową metodą będzie rozbicie pierwszych kilku danych (tdata - statystyki gracza) za pomocą strbreak() i pętli po czym użycie np. stocka explode() od Dark'a: https://amxx.pl/topic/43223-explode/
by wczytać stan posiadanych skinów.

No i oczywiście, jak kolega wyżej wspomniał - zwiększ MAX w sekcji zmiennych pluginu.

Użytkownik _McHappy edytował ten post 25.09.2016 08:51

  • +
  • -
  • 0

#4 PATYrek

    Początkujący

  • Autor tematu
  • Użytkownik

Reputacja: 0
Nowy

  • Postów:18
  • Imię:Patryk
  • Lokalizacja:Polska
Offline

Napisano 25.09.2016 09:05

Szczerze się przyznam iż jest to coś wykraczające poza moje możliwości.

Dlatego też napisałem temat tutaj aby jakaś życzliwa osoba wyedytowała mi ten kod.

Jeżeli potrafisz to zrobić to napisz proszę do mnie na GG -  43213737.

Odnośnie tego: "MAX"

To była jedna z pierwszych rzeczy które w tym kodzie zrobiłem.

Zwiększyłem na: "#define MAX 120".


Użytkownik PATYrek edytował ten post 25.09.2016 09:19

  • +
  • -
  • 0

#5 tytusek

    Czempion

  • Power User

Reputacja: 229
Wszechwidzący

  • Postów:822
Offline

Napisano 25.09.2016 18:53

parse ma ograniczenia do chyba 60 zmiennych potem kompilator wywala 


  • +
  • -
  • 0

#6 _McHappy

    Wszechwiedzący

  • Support Team

Reputacja: 243
Wszechwidzący

  • Postów:501
  • GG:
  • Imię:Radek
  • Lokalizacja:Tak
Offline

Napisano 26.09.2016 12:29

Kolejną przeszkodą jest ograniczenie funkcji fgets(), które nie radzi sobie już z buforem 2048 znaków. Nie sprawdzałem wartości granicznej, ale w pewnym momencie silnik wyrzuca błąd 'stack error'.
Silnik w obecnej wersji niby radzi sobie ze stringami o długości 1024 znaków, jednak wystarczy to jedynie na powiększenie puli skinów do ok 70-80 sztuk.

Również i z tym można sobie poradzić, zmieniając dodatkowo zapis statystyk gracza np. do pliku nVault.
  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych