Beiträge von Kasakow
-
-
-
Ich benutze die Modifikation 'GT-MP', man kann in der Mod Bootstrap und eigene Styles einbinden. (Quasi modernere Dialoge als wie in SA-MP) Hab ich schon auf 2-3 Gameservern gesehen
-
Es geht aber auch darum wie ich es im GTA Multiplayer anzeigen lassen kann und den Inhalt der Inputs sowie die Klicks auf die Buttons zu verwalten
-
-> Callback <-
public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
//-> Geld abziehen! <-\\
return 1;
}Grüße
-
Tag, hätte mal eine Frage auf das Thema Javascript und CSS bezogen
Beispielsweise, ich möchte ein Login & Register Fenster einbauen, ein schön gestaltetes Fenster, basiert auf JS & CSS. (und html)
Wie geh ich da am besten vor ? -
-
Daran wird es nicht liegen, habe versucht mir eine Nachricht ausgeben zu lassen um genau das zu Testen.
Er erkennt nicht einmal, dass ich gerade geschossen habe beispielsweise.
Habs dann mit einer anderen Schleife probiert und einer anderen weise der Erkennung des Schusses probiert.-> CODE <-
//EDIT -> Ohne die Abfrage erstellt er Explosionen auf den gezielten Punkten.
-
Du könntest uns deinen Quellcode im Script dazu zeigen, dann könnte dir hier auch mehr geholfen werden.
-
@LuckyPatcher Das war von der Schleife.
Es funktioniert übrigens nicht ganz, hab zwar keine Fehler beim Compilen aber Ingame passiert nichts wenn ich schieße, aber ich weis dass das Callback oben aufgerufen wird.-> /explodegun <-
C
Alles anzeigen[Command("explodegun", "~r~SERVER: ~w~/explodegun [true/false]")] public void ExplodeGun(Client playerid, string state) { if(state == "on") { API.setEntityData(playerid, "expg", 1); return; } else if(state == "off") { API.setEntityData(playerid, "expg", 0); return; } else { API.sendChatMessageToPlayer(playerid, "Ungültige Auswahl!"); } }
-> Update <-
C
Alles anzeigenpublic void OnUpdateHandler() { var players = API.getAllPlayers(); foreach (var p in players) { //Explodegun System if(API.isPlayerShooting(p) == true && API.getEntityData(p, "expg") == 1) { Vector3 Test = API.getPlayerAimingPoint(p); API.createExplosion((ExplosionType)5, Test, 15, 0); } if (p.exists == false) continue; if (p.isInVehicle == false) continue; if(p.vehicle.health < 300 && API.getEntityData(p, "ccar") == 1) { API.setEntityData(p, "ccar", 0); API.sendChatMessageToPlayer(p, "~r~SERVER: ~w~Dein Fahrzeug ist kaput gegangen!"); p.vehicle.delete(); } } }
-
Kannst du mir mal den Code schicken den du dafür verwendest oder ist das exakt alles?
Die 2 Zeilen verursachen die Fehler, dass ist also quasi alles vom Code.
@DanRho Kein Problem, passiert.
Dankesehr, gibt mir keine Fehler mehr aus.
-
Hey, probiere dort eine Explosion zu erstellen wo hingeschossen wurde, habe dort aber ein kleines Problem mit Vector3.
-> Fehler <-
Code2017-07-27 18:07:54.5727 | Error | GameServer | Error/warning while compiling script! 2017-07-27 18:07:54.5727 | Error | GameServer | Error (CS1502) at c:\Users\Alex\Desktop\gtavmp server\resources\testsource\testsource.cs:45: Die beste Übereinstimmung für die überladene 'GrandTheftMultiplayer.Server.API.ServerAPI.createExplosion(GrandTheftMultiplayer.Server.Constant.ExplosionType, GrandTheftMultiplayer.Shared.Math.Vector3, float, int)'-Methode hat einige ungültige Argumente. 2017-07-27 18:07:54.5727 | Error | GameServer | Error (CS1503) at c:\Users\Alex\Desktop\gtavmp server\resources\testsource\testsource.cs:45: Argument '1': Konvertierung von 'int' in 'GrandTheftMultiplayer.Server.Constant.ExplosionType' nicht möglich.
-> CODE <-
-
Bitte auf keinen Fall einen SELECT * ohne Bedingung auf die komplette Tabelle machen, das ist komplett am Sinn vorbei und überhaupt nicht performant! Wenn in der Datenbank 50.000 registrierte Spieler stehen, dann werden alle 50.000 Datensätze an den Server gesendet, das macht keinen Sinn.
Um nur die Anzahl der Datensätze zu erhalten, reicht es, wie Douq auch schon sagte, einen SELECT COUNT zu machen, damit bekommt man genau einen Datensatz mit einem Wert zurück, anstatt die komplette Tabelle.
Danke für die Korrektur, schon richtig was du schreibst, Jeffry
-
Tag leute, wollte mal fragen ob mir hier jemand weiterhelfen kann?
Ich wollte einen einfachen /vehicle Command erstellen, aber es wird kein Fahrzeug erstell, genauso wenig wird eine Nachricht ausgegeben dass bereits ein Fahrzeug erstellt wurde.C
Alles anzeigen[Command("vehicle", Alias="v")] public void CreatePrivateVehicle(Client sender, VehicleHash model) { var hasCar = API.getEntityData(sender, "ccar"); if (hasCar) { API.sendChatMessageToPlayer(sender, "~r~SERVER: ~w~Du hast bereits ein Fahrzeug erstellt."); return; } API.setEntityData(sender, "ccar", 1); Vector3 position = API.getEntityPosition(sender); Vehicle veh = API.createVehicle(model, new Vector3(sender.x, sender.y, sender.z), Vector3(0, 0, sender.rotation.Z), 0, 0); API.setPlayerIntoVehicle(sender, veh, -1); API.sendChatMessageToPlayer(sender, "~g~SERVER: ~w~Du hast dir ein Fahrzeug erstellt."); }
-
new GetGuys = 0; //oben ins script
stock GetRegisteredGuy() //Zählen
{
mysql_pquery(dbhandle, "SELECT * FROM `accounts`", "@UpdateGuys", "");
return 1;
}
@UpdateGuys();
@UpdateGuys() //Updaten
{
cache_get_row_count(GetGuys);
return 1;
}Musst du halt noch auf deinen Code anpassen, nutzen lässt sich das ganze recht einfach.
ocmd:getregguys(playerid)
{
new string[64]; //string erstellen
GetRegisteredGuys(); //Accounts zählen lassen und in variable 'GetGuys' setzen
format(string, sizeof string, "Auf dem Server sind derzeit %d Spieler.", GetGuys), //String formatieren
SendClientMessage(playerid, -1, string); //Nachricht in weis ausgeben
return 1;
} -
Probiere dich doch mal daran zu orentieren was ich oben geschrieben hatte, zeig halt mal her wie du die Accounts speichern lässt. Quasi deine Speicherfunktion, Ladefunktion und Spielervariable.
-
Sieht ganz okay aus, aber finde die neuartigen selbstgemappten betretbaren Interiors, sollten jedoch viel mehr moderner gestaltet werden. 6/10
-
Würde für die Fraktionen am besten eine Spalte in der Datenbank hinzufügen, wo du alles rundum Spieleraccount verwaltest.
simple - Erklärung
schritt 2:Natürlich musst du den Wert 'Fraktion' auch speichern und auslesen lassen.
//auslesen
PlayerInfo[playerid][pFraktion] = cache_get_field_content_int(0, "Fraktion", dbhandle); //Muss natürlich auf dein Script angepasst werdenAuf jeden Fall um zur Funktion zu kommen die den Fraktionsnamen ausgibt.
stock FraktionsName(playerid)
{
new fraktname[50];
switch(PlayerInfo[playerid][pFraktion])
{
case 0:{fraktname="Keine";}
case 1:{fraktname="S.A.P.D";}
case 2:{fraktname="F.B.I";}
case 3:{fraktname="San Andreas Emergency Department";}
case 4:{fraktname="Las Venturas Vagos";}
case 5:{fraktname="Grove Street";}
case 6:{fraktname="San Andreas Army";}
case 7:{fraktname="Saint Jefferson Ballas";}
case 8:{fraktname="Terroristen";}
case 9:{fraktname="Yakuza";}
case 10:{fraktname="San Andreas News Corporation";}
case 11:{fraktname="Traffic Authority of San Andreas";}
case 12:{fraktname="La Cosa Nostra";}
case 13:{fraktname="Varrios Los Aztecas";}
case 14:{fraktname="San Andreas Driving School";}
case 15:{fraktname="San Andreas Electrical Service";}
case 16:{fraktname="Goverment of San Andreas";}
case 17:{fraktname="Russische Mafia";}
case 18:{fraktname="United Turks";}
case 19:{fraktname="Hitman Agency";}
default:{fraktname="ERROR";}
}
return fraktname;
} -
Du speicherst doch sicherlich den Account in der Datenbank mit einem Datensatz der entweder ein Text ist ("Name" z.B) oder anhand einer SQL ID die jedem Spieler zugewiesen ist, wüsste sonst nicht wie du deine Accounts speichern lässt.
-
Bei einer Switch-Funktion musst du bei case immer einen break nutzen.
Wenn du am Ende der Anweisung kein break setzt, so wird die Ausführung mit dem nächsten case fortgesetzt.
Dadurch wird dir der letzte case ausgegeben.Er muss nicht immer break hinzufügen, das beendet dann nur das Fragen der anderen Sachen, was nicht unbedingt dumm ist wenn er eh schon sein Ergebnis hat, aber zwingend ist es nicht.
Wäre das gleiche wie :
stock Datencheck(datacheck[])
{
new abgleich[40] = "Banane";
if(!strcmp(datacheck, abgleich, true))
{
print("Datenabgleich erfolgt, stimmt überein!");
}
if(strcmp(datacheck, abgleich, true))
{
print("Datenablgleich erfolgt, stimmt nicht überein!");
}
return 1;
}
Auch wenn datacheck "Banane" wäre, würde er unten nochmal prüfen ob datacheck nicht "Banane" ist, und dass weil man das ganze nicht stoppt, sobald eine Übereinstimmung statt findet. Aber die funktion an sich, kann er so lassen eigentlich.