@DJSatrox musst genau schauen, nur bei CreateDynamicObject natürlich den counter erhöhen
Bei SetDynamicObjectMaterial verwendest du i direkt.
#Handy
@DJSatrox musst genau schauen, nur bei CreateDynamicObject natürlich den counter erhöhen
Bei SetDynamicObjectMaterial verwendest du i direkt.
#Handy
Gibt es eine möglichkeit, oder ein Tool, was mir die Arbeit, mit hoch nummerieren erleichtert?
Das kommt darauf an, was genau du tun magst.
Die ID bei Objekten, als auch bei Fahrzeugen, werden sequenziell erstellt. Also einfach immer +1.
Diese Eigenschaft lässt sich super ausnutzen.
Willst du zum Beispiel immer die selben 2 Materialen setzen, bietet sich extrem ein 2 Pointer Ansatz an.
Das heißt, wir nehmen das Erste und Letzte Objekt und kennen nun alle Objekte die dazwischen liegen.
Sprich, sowas:
new firstLSPD = CreateDynamicObject(...);
CreateDynamicObject(...);
CreateDynamicObject(...);
CreateDynamicObject(...);
new lastLSPD = CreateDynamicObject(...);
for(new obj=firstLSPD; obj<=lastLSPD; obj++) //Geht alle Objekte durch
{
SetDynamicObjectMaterial(obj, 0, 14415, "carter_block_2", "mp_shop_floor2", 0x00000000);
SetDynamicObjectMaterial(obj, 1, 19480, "signsurf", "sign", 0x00000000);
}
Alles anzeigen
Falls dies nicht anwendbar sein sollte, weil die Texturen zu komplex für bestimmte Objekte sind, empfehlt sich ein einfacher auto-Counter:
new i=-1; //Wichtig bei -1 zu starten
lspd1int[++i] = CreateDynamicObject(2310, -274.975494, 899.826477, -37.414501, 0.000000, 0.000000, 180.000000);
SetDynamicObjectMaterial(lspd1int[i], 0, 14415, "carter_block_2", "mp_shop_floor2", 0x00000000);
SetDynamicObjectMaterial(lspd1int[i], 1, 19480, "signsurf", "sign", 0x00000000);
lspd1int[++i] = CreateDynamicObject(2310, -274.975494, 900.646484, -37.414501, 0.000000, 0.000000, 180.000000);
SetDynamicObjectMaterial(lspd1int[i], 0, 14415, "carter_block_2", "mp_shop_floor2", 0x00000000);
SetDynamicObjectMaterial(lspd1int[i], 1, 19480, "signsurf", "sign", 0x00000000);
lspd1int[++i] = CreateDynamicObject(2310, -274.975494, 901.446472, -37.414501, 0.000000, 0.000000, 180.000000);
So musst du nicht manuell zählen, sondern er macht das automatisch.
Bei Fahrzeugen zum Beispiel, ist der erste Ansatz aber super effizient, da wenn man prüfen mag, ob der Spieler z.B. in einem LSPD Fahrzeug ist, keine Schleifen mehr benötigt, sondern einfach lspdCar[0] <= vehicleid <= lspdCar[1] nutzen kann und somit sofort weiß, ob er drinnen ist oder nicht.
sa-mp macht spaß
Wofür genau gibst du in dem Bereich noch Geld aus? 😅
Nein, du musst die Logik nur drehen.
Also einfach negieren, das Gegenteil anwenden.
Anstatt den Fall, dass das Admin Level größer Gleich 1 sein soll, sagst du, wenn sein Admin Level kleiner 1 ist, (bzw in diesem Fall einfach 0), dann darf er es nicht tun.
Macht es viel aus wenn ich bei dieses hier es so mache ?
Das kommt darauf an, was darunter geschieht
Falls darunter auch ein return 1; steht, dann macht es keinen Unterschied.
Generell ist es eher dafür gedacht bestimmte Clean Code Prinzipien einzuhalten.
Hier mal ein Beispiel, was ich oft sehe:
if(IsPlayerInRangeOfPoint(playerid,x,y,z)) {
new a=random(10);
if(a > 7) {
if(y > 20) {
if(IsPlayerInAnyVehicle(playerid)) {
if(IsPlayerDriver(playerid)) {
if(IsPlayerLeader(playerid)) {
for(new i; i<MAX_HOUSES; i++)
{
if(i == 5 && IsPlayerInRangeOfPoint(playerid,i,i,i))
{
if(HasItem(playerid)) {
return SendClientMessage(playerid,-1,"ok");
}
}
}
SendClientMessage(playerid,-1,"Nicht im Haus");
}
else {
SendClientMessage(playerid,-1,"Kein Leader");
}
}
else {
SendClientMessage(playerid,-1,"Kein Fahrer");
}
}
else {
SendClientMessage(playerid,-1,"nicht im Auto");
}
} else {
SendClientMessage(playerid,-1,"nicht ok");
}
} else {
SendClientMessage(playerid,-1,"nicht geklappt");
}
}
SendClientMessage(playerid,-1,"nicht am ort!");
Alles anzeigen
Das ist ein sogenannter if-Tree des Todes 😂 Meistens geht das ja noch viel weiter.
Und oft ist das auch logisch nicht in der Reihenfolge, so wird meistens zum Schluss geprüft, ob man wirklich Dinge darf, obwohl vorher schon Dinge getriggert wurden.
Durch das return und gezielte Negation ist es möglich das aufzuräumen und deutlich übersichtlicher zu gestalten, dass du keine Ebenen mehr hast.
if(!IsPlayerLeader(playerid)) return SendClientMessage(playerid,-1,"Kein Leader");
if(!IsPlayerInRangeOfPoint(playerid,x,y,z)) return SendClientMessage(playerid,-1,"nicht am ort!");
if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,-1,"nicht im Auto");
if(!IsPlayerDriver(playerid)) return SendClientMessage(playerid,-1,"Kein Fahrer");
if(random(10) <= 7) return SendClientMessage(playerid,-1,"nicht geklappt");
if(y <= 20) return SendClientMessage(playerid,-1,"nicht ok");
if(!HasItem(playerid)) return SendClientMessage(playerid,-1,"kein item");
if(!InHouse(playerid)) return SendClientMessage(playerid,-1,"Nicht im Haus");
SendClientMessage(playerid,-1,"ok");
return 1;
Alles anzeigen
Alle negativen / Fehler - Fälle fängst du quasi vorne ab und übrig bleibt der Happy-Path.
Dann ist das auch sehr übersichtlich und eindeutig.
Aber Performance-Technisch ist da kein Unterschied. Nur deutlich übersichtlicher, da ja auch hier auf else etc verzichtet werden kann.
Willkommen zurück 🤘🏼
Der wie vielte neue Acc war das jetzt? Komme gar nicht mehr hinterher
Heyho, ja das existiert weil du es per Ajax ja immer mitgibst.
In einer normalen form wäre das nicht der Fall.
Die Frage ist, was $('#SwitchItem_1').val() zurückgibt, wenn der Wert gesetzt ist oder nicht. Vermutlich 0 oder 1.
Musst in deinem PHP Skript also prüfen ob es existiert und ob es halt 1 ist
#Handy
Problem gelöst.
Erleuchte uns doch noch kurz
Welche SA:MP Version nutzt du denn?
Und wo hast du die her?
Bei mir wird keine .dat erstellt 😅
Hey ist es möglich mit GeoIP nur IP Adressen aus Deutschland zu zulassen quasi als VPN Schutz zu verwenden und wenn ja wie stelle ich es an besten an ?
MfG
Je nachdem welches GeoIP Include/Plugin du verwendest kannst ja einfach z.B. GetPlayerCountry verwenden und prüfen, ob die IP aus DE ist oder nicht.
Aber das natürlich kein VPN Schutz direkt, weil es ja auch viele VPN-Server in Deutschland gibt.
Aber ja, so blockst alle ausländischen Spieler 😄
Ihr könnt euren Skin für IG-Geld ändern, gleicher Preis!
Das finde ich bisschen Schade 😅 Mir ist auch nicht ganz ersichtlich, wie man Geld verdient? Einige Stages habe ich geschafft, und dann stand da nur, dass es Training-Stages waren? :o Wo finde ich denn die richtigen?
Paar Anregungen evtl:
Aber sehr cooles Konzept an sich, viel Erfolg!
Hey, ja möglich ist das definitiv.
Als Orientierung kannst ja mal hier rein schauen: https://github.com/derpierre65/pWBB4/releases/tag/0.2
Glaube es gibt noch kein wbb5 include, müsste man dann selbst noch erarbeiten 😅
#Handy
Powerpoint, habe ich das richtig gelesen?
Ich empfehle dir den Windows Movie Maker oooder das kannst auch online auf so vielen Webseiten 4 free machen.
Ganz einfache Lösung:
1. Crashdetect laden.
2. Log genau lesen. Dann weißt du, welche Funktion fehlt und musst daran das Plugin abglesen