You are not logged in.

Dear visitor, welcome to samp4you.com | Community | Support | Forum. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

1

Sunday, June 26th 2011, 11:36am

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:

Source code

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:

Source code

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

Friday, July 22nd 2011, 3:48am

Also laut Serverauslastung ist es bei mir dadurch schlimmer geworden

3

Friday, July 29th 2011, 8:51pm

Dann hast du wohl irgendetwas übersehen...

4

Tuesday, August 30th 2011, 2:17pm

man kann es aber auch ohne M_Bot machen ;)

5

Saturday, October 8th 2011, 2:45pm

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

:alleswirdgut:

6

Sunday, March 25th 2012, 10:02am

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


Source code

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.




Source code

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]