Mit "netstat -tulpn" kannst du nachschauen welche Ports von welchem Prozess bereits genutzt werden.
Ports sind in der Spalte "Local Address" hinter dem ':', am Ende der Tabelle sollte jeweils der Prozess stehen der den Port belegt/lauscht.
Mit "netstat -tulpn" kannst du nachschauen welche Ports von welchem Prozess bereits genutzt werden.
Ports sind in der Spalte "Local Address" hinter dem ':', am Ende der Tabelle sollte jeweils der Prozess stehen der den Port belegt/lauscht.
Alles anzeigenDie 2 passt eben nur 2 mal in die 5.
#include <a_samp>
main() {
new wurzel_x = 4,
heron_a = 1,
Float:division = (wurzel_x + heron_a) / 2,
Float:rest = (wurzel_x + heron_a) % 2,
Float:multiplikation = (wurzel_x + heron_a) * 0.5;
printf("%.2f | %.2f | %.2f", division, rest, multiplikation);
}
oder viel einfacher(ohne % Operation): http://wiki.sa-mp.com/wiki/Floatdiv
floatdiv
sicher möglich!
/rcon password 0
oder console: password 0
oder script: SendRconCommand("password 0");
Hier muss rein garnichts gemoddet werden...
Ich zeig dir wie es geht ohne modden, weil es beim modden sowieso nur du selbst dann sehen würdest ingame.
Hier die Idee dazu:
-Erstelle einen NPC ohne recording abzuspielen und setze seine position.
-SetPlayerAttachedObject mit scale parametern für die Größe
Bsp: SetPlayerAttachedObject(botplayerid, 0, 1276, 1, 0, 2, 0, 0, 0, 90, 0, 10, 10, 10);
Alles anzeigenSchönen guten Abend,
ich würde gerne wissen wie ich die Position auslesen lasse...
new robs = random(sizeof(Rob));
if(!IsPlayerInRangeOfPoint(playerid,5.0,Rob[robs][0],Rob[robs][1],Rob[robs][2]))
{
IsRobbing[playerid] =0;
pRobCount[playerid] = 0;
KillTimer(pRobTimerID[playerid]);
robmoney[playerid] = robmoney[playerid];
}
Wenn ich da random reinschreibe sucht er sich eine Position aus, ich möchte aber das er die Position nimmt
in der der Spieler grade ist. Kann mir einer sagen wie ich das richtig umschreibe ?
Greetz
for(new robs=0; robs < sizeof(Rob); robs++)
{
if(!IsPlayerInRangeOfPoint(playerid,5.0,Rob[robs][0],Rob[robs][1],Rob[robs][2]))
{
IsRobbing[playerid] =0;
pRobCount[playerid] = 0;
KillTimer(pRobTimerID[playerid]);
robmoney[playerid] = robmoney[playerid];
//printf("robZone: %d", robs);
break; // gefunden, schleife beenden
}
}
Jede Rob zone wird überprüft
Manche Server-Hoster bieten es überteuert an, die haben einen Account und Adden dich dann dort für einen überhöhten Preis.
https://www.google.de/search?q…y&oq=sa-mp+hosted+tab+buy
Ersten 3 ergebnisse, oder auch weiter unten schauen
Name = TextDrawCreate(37.000000, 429.000000, "Version 1.0");
Das 37.000 solange erhöhen bis es weit genug rechts ist
TextDrawLetterSize(Name, 0.230000, 1.000000);
und diese zahlen erhöhen bis die schrift groß genug für dich ist
Ignoriere alle vorherigen Angaben über RAM-Verbrauch wenn Ihr kein Geld unnötig ausgeben wollt.
Normal sollten für SA-MP wenige hundert MB's ausreichen. (Hängt auch vom Script ab)
Letztens waren es bei uns 96 MB für 104 Spieler.
Könnt ja mal nachschauen bei eurem jetzigem Hoster wieviel euer Server an RAM verbraucht sofern das möglich ist.
PS: Vergiss aber nicht das das Betriebssystem auch noch RAM braucht.
Edit: 2 GB hatten bei uns lange ausgereicht.
Gab da mal eine Nummer die man wählt um Android Geräte zu Resetten.
Ob das bei PIN lock/der Notruf Eingabe funktioniert bin ich mir nicht sicher.
Wähl: *2767*3855# (Resettet das Handy)
Wie viel Arbeitsspeicher dein Server brauchen wird ist schwer zu sagen, hängt so gut wie nur von deinem Script ab.
Ich hab gerade 96 MB bei 104 Spielern
Du kannst einen Server mit 500 Spielern haben der nur paar hundert MB braucht oder eben auch paar GB
Edit: Immer dran denken das das System nebenbei auch noch läuft und Arbeitsspeicher verbraucht.
Falsche Angewohnheiten kommen eben mal vor.
Du musst bei SELECT auch ALLES aufführen wo du in WHERE benutzt
heißt:
SELECT produkte.ID,produkt.BizID,produkt.Preis,produkt.ProduktID,produkte.Name FROM produkt as produkt,produkte as produkte WHERE produkt.BizID = %d AND produkte.ID = produkt.ProduktID
SELECT produkte.ID,produkt.BizID,produkt.Preis,produkt.ProduktID,produkte.Name FROM produkt as produkt,produkte as produkte WHERE produkt.BizID = %d AND produkte.ID = produkt.ProduktID
Der dick gedruckte Teil
einfach mit "bind" mal rumspielen könnte die lösung sein
Versuch es mal mit "bind DieIPVomRoot" in der server.cfg
wenn das nicht hilft kannst du auch versuchen die ip wo jeder user hat hinter "bind" zu setzen
jede Version ist hier die letzte Version
Alles anzeigen
stock SavePlayer(playerid)
{
if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid)) //wir überprüfen ob der Spieler überhaupt noch Connected ist und ob er nicht ein NPC ist.
{
if(GetPVarInt(playerid,"Eingeloggt") == 1) //Und hier ob er noch eingeloggt ist.
{
//Nun speichern wir die Daten in der Datenbank.
mysql_SetInt("accounts", "Level", SpielerInfo[playerid][pLevel], "Name", SpielerInfo[playerid][pName]);
mysql_SetInt("accounts", "Geld", SpielerInfo[playerid][pGeld], "Name", SpielerInfo[playerid][pName]);
mysql_SetInt("accounts", "Kills", SpielerInfo[playerid][pKills], "Name", SpielerInfo[playerid][pName]);
mysql_SetInt("accounts", "Tode", SpielerInfo[playerid][pTode], "Name", SpielerInfo[playerid][pName]);
mysql_SetFloat("accounts", "Health", SpielerInfo[playerid][pHealth], "Name", SpielerInfo[playerid][pName]);
}
}
return 1;
}
Warum ?
Warum sendet man 5 MySQL Abfragen zum MySQL Server und wartet 5 MAL bis der MySQL Server die Abfragen verarbeitet und zurücksendet.
Was wird wohl um einiges besser sein ?
UPDATE `accounts` SET `Level` = '*ZAHL*' WHERE `Name` = '*NAME*'
UPDATE `accounts` SET `Geld` = '*ZAHL*' WHERE `Name` = '*NAME*'
UPDATE `accounts` SET `Kills` = '*ZAHL*' WHERE `Name` = '*NAME*'
UPDATE `accounts` SET `Tode` = '*ZAHL*' WHERE `Name` = '*NAME*'
UPDATE `accounts` SET `Health` = '*ZAHL*' WHERE `Name` = '*NAME*'
oder so alles auf einmal:
UPDATE `accounts` SET `Level`='*ZAHL*', `Geld`='*ZAHL*', `Kills`='*ZAHL*', `Tode`='*ZAHL*', `Health`='*ZAHL*' WHERE `Name` = '*NAME*'
Und hier das gleiche Problem:
stock LoadPlayer(playerid)
{
if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))//Wir fragen ab ob der angegebene Spieler auch Online ist, und kein NPC ist (nur zur sicherhheit)
{
GetPlayerName(playerid, SpielerInfo[playerid][pName], MAX_PLAYER_NAME); //Wir Speichern den Namen des Spielers in der Variable [i]SpielerInfo[playerid][pName][/i]
SpielerInfo[playerid][pLevel] = mysql_GetInt("accounts", "Level", "Name", SpielerInfo[playerid][pName]); //Wir holen uns den wert der unter "Level" eingetragen ist und Speichern ihn in unserer Variable.
SpielerInfo[playerid][pGeld] = mysql_GetInt("accounts", "Geld", "Name", SpielerInfo[playerid][pName]); //Wir holen uns den wert der unter "Geld" eingetragen ist und Speichern ihn in unserer Variable.
SpielerInfo[playerid][pKills] = mysql_GetInt("accounts", "Kills", "Name", SpielerInfo[playerid][pName]); //Wir holen uns den wert der unter "Kills" eingetragen ist und Speichern ihn in unserer Variable.
SpielerInfo[playerid][pTode] = mysql_GetInt("accounts", "Tode", "Name", SpielerInfo[playerid][pName]); //Wir holen uns den wert der unter "Tode" eingetragen ist und Speichern ihn in unserer Variable.
}
return 1;
}
Bei LoadPlayer wird das an mysql-Abfragen gesendet:
SELECT `Level` FROM `accounts` WHERE `Name` = '*NAME*'
SELECT `Geld` FROM `accounts` WHERE `Name` = '*NAME*'
SELECT `Kills` FROM `accounts` WHERE `Name` = '*NAME*'
SELECT `Tode` FROM `accounts` WHERE `Name` = '*NAME*'
4 mal mysql_store_result usw, obwohl es auf einmal auch geht:
So wie hier im Forum MySQL in SA-MP genutzt wird ist es sicher langsamer als jede andere Speichermethode und noch dazu ohne Threaded queries damit der Server anfängt zu hängen und alles zu ruckeln beginnt.
so ist es richtig:
Bei GamePad hat man halt auch automatisch Aimbot. Muss jeder Serverbesitzer selber wissen.
Wenn ihr den Aimbot von GTA San Andreas selbst blocken weollt, also joysticks:
Benutzt GetPlayerKeys in OnPlayerUpdate um es zu prüfen.
Bei der Tastertur sind die Up/Down und Left/Right tasten immer 0(nicht gedrückt) oder 128(gedrückt). Bei einem Joystick ist es immer von 0 bis 128, da man da den Knüppel ja auch einfach nur zur hälfte durchdrücken kann.
public OnPlayerUpdate(playerid)
{
new Keys,ud,lr;
GetPlayerKeys(playerid,Keys,ud,lr);
if(ud > -128 && ud < 128 && ud != 0) SendClientMessage(playerid, 0xFFFFFFFF, "Joystick(also GTA SA Aimbot) erkannt");
if(lr > -128 && lr < 128 && lr != 0) SendClientMessage(playerid, 0xFFFFFFFF, "Joystick(also GTA SA Aimbot) erkannt");
return 1;
}
Langsamer als MySQL wird es sicherlich nicht sein. Lade mal einen GF Acc per MySQL System ... Der Server lalalalalagt wie sau. Ob es bei SQLite auch so ist, kann ich nicht bestätigen.
Jedenfalls müsste man den ganzen Acc per einzelnem Befehl auslesen lassen. Dann gehts ja noch mit der Laggerei ;]
Gruss: Sonic
....
Dieses Forum braucht wirklich mal ein Tutorial für threaded MySQL-Queries, weil ich das Gefühl habe das sowas in diesem Forum komplett fremd ist.