Alles anzeigenUngetestet, aber sollte so funktionieren.
PS: Wieso überhaupt ein Timer? Kannst ihn ja auch ohne kicken..
public OnPlayerConnect (playerid)
{
if(sSpieler[playerid][Gebannt] = 1)
{
DelayKick[playerid] = SetTimerEx("DelayKickPlayer", 1000, false, "i", playerid);
}
return 1;
}
da muss ein fehler sein weil da 26 errors kommen!
[SAMMELTHREAD] Kleine Scripting Fragen
- Rafelder
- Unerledigt
Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!
Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
-
-
Eigentlich müsste das richtig sein, hast du vllt irgendwo anders im Script ein Klammerfehler o.ä?
beim if(sSpieler[playerid][Gebannt] = 1) sollte man 2 = Zeichen verwenden ( == 1) aber das gibt nur eine Warnung und kein Error.
Hast du kein SekundenTimer im Script der jede Sekunde läuft und Spieler irgendwas abfragt? Falls ja finde ich da den SetTimerEx unnötig.
-
Da lohnt sich das generell nur wenn man vorher noch eine Nachricht schicken möchte.
Ich denke einfach falsche Copy&Paste Anwendung.
-
C
new max_tank[211]; max_tank[0] = 80; //Bedeutet der Landstalker hat ein maximales Füllvolumen von 80 Litern //Abfragen: (angenommen wir sitzen in einem Landstalker) new v = GetPlayerVehicleID(playerid); printf("Landstalker hat ein Tankvolumen von %d Litern.", max_tank[GetVehicleModel(v)-400]); //Das gibt dir 80 eben aus :)
Hier mal ein simples Beispiel
Okay. Aber wieso "max_tank[0] = 80 ? Wofür steht die 0? und wofür die 211?
-
211 Fahrzeuge von ID 400 bis 611. Daher das -400. Die 0 in max_tank[0] steht für das erste Fahrzeug mit der ID 400, den Landstalker. Du musst ja die Tankgrößen irgendwie festlegen.
-
Ah, das macht sinn. Also fängt man aus performance Gründen bei 0 an? Zur übersichtlichkeit könnte man doch auch 400 nehmen und die voherigen ignorieren oder?
Geht es auch so?
GetFuelSize(vehicleid)
{
if(GetVehicleModel(vehicleid) == 411 || 412) return 60;}
Ich glaube das "oder" ist falsch. kann ich überhaupt 60 returnen? als tankgröße? Ich will generell ja nicht nur mit playerid abfragen können, das auto muss ja beim server start bereits benzin bekommen
-
Du kannst statt vehicleid natürlich die modelid direkt übergeben. Das so zu machen, ist aber wiederum nicht Sinn der Sache, dafür ist ja das Array gedacht, damit du nicht so viele If-Abfragen oder eine switch-Anweisung brauchst.
-
Mit dem array müsste ich doch 211 mal max_tank[0], max_tank[1],.. listen, oder? Von der schreibarbeit her dachte ich, geht es schneller wenn ich die modellids 411 und xxx und xxx und xxx = 60 liter. Ist es performancetechnisch ein großer unterschied?
Also sagen wir mal ich mache es wie in Kalibers Beispiel. Und möchte die Autos beim server start befüllen. Also setzte ich sinnigerweise bei "onvehiclespawn" an, oder? dann habe ich ja keine playerid. Somit müsste die abfrage dann so aussehen: ?
printf("Landstalker hat ein Tankvolumen von %d Litern.", max_tank[GetVehicleModel(vehicleid)-400]);
korrekt? Dann bleibt mir nurnoc hdie frage wo ich am besten diemax_tank[x] = y; im script plaziere?
-
Du könntest es auch wie mit den CarNames machen:
Code
Alles anzeigenstock const CarName[][] = { "Landstalker", "Bravura", "Buffalo", "Linerunner", "Perrenial", "Sentinel", "Dumper", "Firetruck", "Trashmaster", "Stretch", "Manana", "Infernus", "Voodoo", "Pony", "Mule", "Cheetah", "Ambulance", "Leviathan", "Moonbeam", "Esperanto", "Taxi", "Washington", "Bobcat", "Whoopee", "BF Injection", "Hunter", "Premier", "Enforcer", "Securicar", "Banshee", "Predator", "Bus", "Rhino", "Barracks", "Hotknife", "Trailer", "Previon", "Coach", "Cabbie", "Stallion", "Rumpo", "RC Bandit", "Romero", "Packer", "Monster", "Admiral", "Squalo", "Seasparrow", "Pizzaboy", "Tram", "Trailer", "Turismo", "Speeder", "Reefer", "Tropic", "Flatbed", "Yankee", "Caddy", "Solair", "Berkley's RC Van", "Skimmer", "PCJ-600", "Faggio", "Freeway", "RC Baron", "RC Raider", "Glendale", "Oceanic","Sanchez", "Sparrow", "Patriot", "Quad", "Coastguard", "Dinghy", "Hermes", "Sabre", "Rustler", "ZR-350", "Walton", "Regina", "Comet", "BMX", "Burrito", "Camper", "Marquis", "Baggage", "Dozer", "Maverick", "News Chopper", "Rancher", "FBI Rancher", "Virgo", "Greenwood", "Jetmax", "Hotring", "Sandking", "Blista Compact", "Police Maverick", "Boxvillde", "Benson", "Mesa", "RC Goblin", "Hotring Racer A", "Hotring Racer B", "Bloodring Banger", "Rancher", "Super GT", "Elegant", "Journey", "Bike", "Mountain Bike", "Beagle", "Cropduster", "Stunt", "Tanker", "Roadtrain", "Nebula", "Majestic", "Buccaneer", "Shamal", "Hydra", "FCR-900", "NRG-500", "HPV1000", "Cement Truck", "Tow Truck", "Fortune", "Cadrona", "FBI Truck", "Willard", "Forklift", "Tractor", "Combine", "Feltzer", "Remington", "Slamvan", "Blade", "Freight", "Streak", "Vortex", "Vincent", "Bullet", "Clover", "Sadler", "Firetruck", "Hustler", "Intruder", "Primo", "Cargobob", "Tampa", "Sunrise", "Merit", "Utility", "Nevada", "Yosemite", "Windsor", "Monster", "Monster", "Uranus", "Jester", "Sultan", "Stratum", "Elegy", "Raindance", "RC Tiger", "Flash", "Tahoma", "Savanna", "Bandito", "Freight Flat", "Streak Carriage", "Kart", "Mower", "Dune", "Sweeper", "Broadway", "Tornado", "AT-400", "DFT-30", "Huntley", "Stafford", "BF-400", "News Van", "Tug", "Trailer", "Emperor", "Wayfarer", "Euros", "Hotdog", "Club", "Freight Box", "Trailer", "Andromada", "Dodo", "RC Cam", "Launch", "Police Car", "Police Car", "Police Car", "Police Ranger", "Picador", "S.W.A.T", "Alpha", "Phoenix", "Glendale Shit", "Sadler Shit", "Luggage", "Luggage", "Stairs", "Boxville", "Tiller", "Utility Trailer" }; #define GetVehicleName(%0) CarName[((model==0)?(0):(model-400))]
Nur dann eben mit der Tankgröße -
new max_tank[211];
zu:
new max_tank[212];Mit dem array müsste ich doch 211 mal max_tank[0], max_tank[1],.. listen, oder? Von der schreibarbeit her dachte ich, geht es schneller wenn ich die modellids 411 und xxx und xxx und xxx = 60 liter. Ist es performancetechnisch ein großer unterschied?
Ja, du hättest alle 212 Indizes im Code stehen. Was wäre deine Methode mit "und xxx"?
Du könntest es z.B. alternativ so machen:
for(new i = 0; i < sizeof(max_tank); i++)
{
switch(i)
{
case 0, 15, 19: max_tank[i] = 60;
case 1, 20, 99, 150: max_tank[i] = 70;
//...
}
}
Der Vorschlag von Madd92 ist aber am sinnvollsten.Dann bleibt mir nurnoc hdie frage wo ich am besten diemax_tank[x] = y; im script plaziere?
OnGameModeInit.
printf("Landstalker hat ein Tankvolumen von %d Litern.", max_tank[GetVehicleModel(vehicleid)-400]);
Das kannst du bei OnVehicleSpawn so machen, ja.
-
-
Danke euch!
Madds letzter Vorschlag sieht übersichtlich aus. Da kann ich dann gleich noch so eine Tabelle mit Verbrauchs Faktoren der Modelle machen, super.EDIT: Okay, ich hab jetzt 2 Tabellen (Tankinhalt und verbrauchskoeffizient) aber ich schaff es nicht "GetVehicleMaxFuel" abzufragen
Wie sollte das aussehen?mein "Tank[i] = Tank[i] - GetVehicleFuelUsage(i);" sagt undefined symbol "model" ?
-
Edit: nee stimmt auch nicht, bin grad zu blöd dafür xD
#define GetVehicleMaxFuel(%0) CarTank[%0 - 400] würde gehen, aber da ist dann keine Abfrage drin, ob die ModelID valide ist.
Vielleicht auch lieber einfach so, statt dem Define:Codestock GetVehicleModelMaxFuel(modelid) { return modelid < 400 || modelid > 611 ? 0 : CarTank[modelid - 400]; }
Weiß grad nicht, ob und wenn ja wie man das als Define implementieren könnte.
-
Es hat geklappt. Also ich hab den wert nicht überprüft o bder richtige rauskommt, aber der script hat es angenommen. ich teste nachher nochmal
-
Hey wie ich hier vor kurzem mal anmerkte gehen bei mir einige TextDraws nicht, anscheinend gehen die manchmal?
Mir ist aufgefallen ein paar Pickups verschwinden manchmal für reallife Tage und sind dann nach 50 Server restarts wieder da, genau so wie mit dem Textdraws wie behebe ich das?
-
Wie kann ich einen AudioStream abspielen den ich vom lokalen Server beziehe, also keine remote Adresse?
Wie muss da meine PlayAudioStreamForPlayer Zeile aussehen, wenn die entsprechende Audio Datei beispielsweise im gleichen Ordner liegt wie der Server?
-
Der Stream wird vom user requestet, nicht vom server..
Das heißt...du musst es aus der Sicht vom user schreiben...und da gibts nunma nix lokales auf dem Server...dat sieht der nicht xDAlso musst es so machen:
http://server-ip/sound.mp3
Vorrausgesetzt Port 80 is frei usw... -
Wieso kommt hier nicht das gleiche raus??
Tacho bringt 0-167MPH:
getPlayerSpeed(playerid)
{
new Float:x, Float:y, Float:z, Float:rtn;
if(IsPlayerInAnyVehicle(playerid))
{
GetVehicleVelocity(GetPlayerVehicleID(playerid), x, y, z);
}
else
{
GetPlayerVelocity(playerid, x, y, z);
}
rtn = floatsqroot(x*x + y*y + z*z); //
return floatround(rtn * 100 *1.35); // *
}Aber nun kommt plötzlich eine Zahl mit 10 Stellen hier raus.. :
getFuelSpeed(vehicleid)
{
new Float:x, Float:y, Float:z, Float:rtn;
rtn = GetVehicleVelocity(vehicleid, x, y, z);
rtn = floatsqroot(x*x + y*y + z*z); //
return floatround(rtn * 100 *1.35); //Ich versteh es nicht. Wieso ist das so?
-
Aber nun kommt plötzlich eine Zahl mit 10 Stellen hier raus.. :
dann hast du vermutlich %f statt %d angegeben.
BTW: du brauchst nicht den return Wert von GetVehicleVelocity speichern -
Leute wisst ihr vielleicht wieso immer beim Compilen (Keine Rückmeldung) kommt und dann nach einer Minute ca. fertig Compiled?
-
Leute wisst ihr vielleicht wieso immer beim Compilen (Keine Rückmeldung) kommt und dann nach einer Minute ca. fertig Compiled?
Ein (oder mehrere) sehr große Arrays global deklariert.
//Also z.B. oben im Skript sowas wie:
new [1000][1000][1000];