Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: samp4you.com | Community | Support | Forum. 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.

1

26.06.2011, 11:36

OnPlayerUpdate-Bug beheben

Viele Reallife-Gamemodes (aber auch andere) verwenden die Funktion OnPlayerUpdate(playerid) zur Speicherung der Spieler-Accounts. Seit der Version 0.3 von SA:MP ist diese Funktion jedoch bereits implementiert und wird für jeden aktiven Spieler 60x pro Sekunde aufgerufen.

Dies hat zur Folge, dass die Festplatte und somit der Server stark belastet werden, und es schnell zu Laggs kommen kann.

Um diesen Bug zu beheben, müsst ihr die folgende Anleitung beachten.

Eine neue public-Funktion erstellen:

Quellcode

1
forward SaveAccounts(playerid);


Im Script müssen alle Zeilen mit OnPlayerUpdate(playerid) oder OnPlayerUpdate(giveplayerid) (der Parameter "playerid" ist variabel, daher am besten nur nach "OnPlayerUpdate" suchen und von Hand ersetzen) durch SaveAccounts(playerid) (Hier auch den Parameter "playerid" beachten und ggf. ändern) ersetzen.

Auch die alte OnPlayerUpdate(playerid)-Funktion zu SaveAccounts(playerid) umbenennen.
Falls in dieser Funktion "b_OnPlayerUpdate(playerid);" oder "M_OnPlayerUpdate(playerid);" vorhanden sind, müssen diese Zeilen gelöscht werden.


Falls in der alten OnPlayerUpdate(playerid)-Funktion folgendes zu finden ist:
  • M_OnPlayerUpdate(playerid);
  • b_OnPlayerUpdate(playerid);

dies einfügen:

Quellcode

1
2
3
4
5
6
public OnPlayerUpdate(playerid)
{
    M_OnPlayerUpdate(playerid); //Nur einfügen, wenn diese Zeile auch bei der alten Funktion vorhanden ist.
    b_OnPlayerUpdate(playerid); //Nur einfügen, wenn diese Zeile auch bei der alten Funktion vorhanden ist.
    return 1;
}


Somit ist der Bug behoben! - Es wird keine Garantie für die einwandfreie Funktionalität übernommen - ein Backup sollte vorher angelegt werden.

2

22.07.2011, 03:48

Also laut Serverauslastung ist es bei mir dadurch schlimmer geworden

3

29.07.2011, 20:51

Dann hast du wohl irgendetwas übersehen...

4

30.08.2011, 14:17

man kann es aber auch ohne M_Bot machen ;)

5

08.10.2011, 14:45

Hab es probiert , die Laggs werden nicht mehr so Extrem.
Liebe Grüße,
ihr samp4you Team.

:alleswirdgut:

6

25.03.2012, 10:02

Thema: Ressourcen sparen

Ich erkläre euch mal meine Wege Ressourcen zu sparen.
(Achtung der angebene Inhalt ist nicht zum Kopieren und Einfügen gemacht und bedarf es auf euren Gamemode angepasst zuwerden.)



Erstens:


Spielerdaten nur speichern wenn nötig sprich immer wenn sich sehr wichtige dinge ändern wie z.b. Geld,Skin und Level.


hier z.b. das Geld


Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public AntiGivePlayerMoney(playerid,money){
    AntiCheatInfo[playerid][OldMoney] = AntiCheatInfo[playerid][NewMoney];
    AntiCheatInfo[playerid][NewMoney] = AntiCheatInfo[playerid][OldMoney] + money;
    GivePlayerMoney(playerid, money);
    MysqlSaveData("Accounts","Geld",AntiCheatInfo[playerid][NewMoney],"Name",SpielerInfo[playerid][Name]);
}
public AntiGetPlayerMoney(playerid)
{
	new money = GetPlayerMoney(playerid);
	if(AntiCheatInfo[playerid][NewMoney] != money)
	{
if(AntiCheatInfo[playerid][NewMoney] <= money)//Geld ist höher als es der Server vorgibt
{
AntiCheat(playerid,4);
ResetPlayerMoney(playerid);
}
else//Geld ist niedriger als es der Server vorgibt
{
AntiCheatInfo[playerid][NewMoney] = GetPlayerMoney(playerid);
}
	}
return AntiCheatInfo[playerid][NewMoney];
}


Zweitens:


OnPlayerUpdate sinnvoll verwenden statt einen Timer zu erstellen den jeder Timer verbraucht Ressourcen.




Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public OnPlayerUpdate(playerid)

 if(!IsPlayerNPC(playerid))//Schließt alle Bots aus dies spart mit sicherheit auch einige Ressourcen.

new iTime = gettime();

if(SpielerInfo[playerid][MinutenTimer] < iTime)
{
new hour,minute,sec;
gettime(hour,minute,sec);
printf("%d:%d:%d :%d", hour,minute,sec,iTime); //[color=#ff0000]Dient nur um zu verdeutliche das er jeder Sekunde aufgerufen wird[/color]
SpielerInfo[playerid][MinutenTimer] = iTime+59;
SpielerInfo[playerid][OnlineMinuten] ++;
if(SpielerInfo[playerid][OnlineMinuten] == 60)
{
SpielerInfo[playerid][OnlineMinuten] = 0;
SpielerInfo[playerid][OnlineStunden] ++;
SendClientMessage(playerid, FARBE_GELBGRÜN, "PayDay");
}
}



[/size]