Dann printe dir das doch mal und schau..wieso es nicht aufgerufen wird und welchen Wert die clickedid hat..
Beiträge von Kaliber
-
-
Das ist schon so definiert...
Ehhh wirds nicht aufgerufen..oder was passiert nicht?
-
C
public OnPlayerClickTextDraw(playerid, Text:clickedid) { if(_:clickedid == INVALID_TEXT_DRAW) { /* -- dein Hide Code hier -- */ CancelSelectTextDraw(playerid); } }//Edit:
C
Alles anzeigen//Zu Frage 2, entweder odern: if(IsPlayerInRangeOfPoint(...) || IsPlayerInRangeOfPoint(...)) { } //Oder, coords in ein Array schreiben: stock const Float:pos[][3] = { {1415.0088,-1463.3322,106.6032}, {1417.3494,-1462.0212,106.6032}, {1419.8616,-1460.6096,106.6029} }; //Und dann schleife: for(new i; i<sizeof(pos); i++) { if(IsPlayerInRangeOfPoint(playerid,2.0,pos[i][0],pos[i][1],pos[i][2])) { //Hier dann dein Code break; } } -
...zeig mal das Makro oder die Funktion...
-
Interessant wäre, was bei dir SCMTA ist. (also ob Makro oder Funktion und bitte mal posten).
BTW 0+x macht keinen Sinn...da das immer x ist

Da du mit 0 anfangen möchtest, schreibe es so:
-
Also um deinen Code zu korrigieren, wäre es so richtig:
C
Alles anzeigennew x = GetPVarInt(i, "Kontostand"); if(x <= 500000000) { Reichensteuer = 0; SendClientMessage(i, Weis, "Keine Reichensteuer"); } else if(500000000 <= x < 1000000000) { Reichensteuer = 100000; SendClientMessage(i, Weis, "Reichensteuer(Klasse 1): .....$"); } else if(1000000000 <= x < 1500000000) { Reichensteuer = 250000; SendClientMessage(i, Weis, "Reichensteuer(Klasse 2): .....$"); } else if(x >= 1500000000) { Reichensteuer = 500000; SendClientMessage(i, Weis, "Reichensteuer(Klasse 3): .....$"); }Allerdings, könntest du es auch ganz kompakt schreiben, dann sähe es so aus:
C
Alles anzeigennew idx = getTax(GetPVarInt(i, "Kontostand")),string[128]; static const data[] = {0,100000,250000,500000}; format(string,sizeof(string),"Reichensteuer (Klasse - %d): %s$",idx,sMoney(data[idx])); SendClientMessage(i,Weis,string); Reichensteuer = data[idx]; //Die Funktionen: /* Stellt z.B. 100000 als 100.000 dar. */ stock sMoney(geld) //(c) by Kaliber { new str[24],i;valstr(str,geld),i=(geld > 0) ? strlen(str)-3 : strlen(str)-4; for(; i>0; i-=3) strins(str,".",(geld > 0) ? i : i+1,24); return str; } //Und um deine Klasse der Steuern zu bekommen: stock getTax(x) return (x<=500000000)?0:((500000000<=x<1000000000)?1:((1000000000<=x<1500000000)?2:3)); -
...verstehe zwar nicht wieso du meinem PNs und alles andere von mir ignorierst...aber okay.
Um z.B. die Koordinaten 30m vor deinem Auto zu bekommen, dafür sieht der Code so aus:
Cnew Float:x,Float:y,Float:z,Float:a; GetVehiclePos(veh,x,y,z),GetVehicleZAngle(veh,a); const Float:distance = 30.0; //30m vor dem Auto x += distance * floatsin(-a, degrees); y += distance * floatcos(-a, degrees); //Jetzt hast du die x,y,z Positionen für 30m vor dem Auto
Desweiteren eine Fahrzeug Hitbox, kannst du so machen, ich bin mal so freundlich und gebe dir direkt eine Funktion:C
Alles anzeigen//Hier das Makro dafür: #define IsObjectInArea(%0,%1,%2,%3,%4,%5) ((((%0) >= (%2)) && ((%0) <= (%4))) && (((%1) >= (%3)) && ((%1) <= (%5)))) stock getVehicle(obj) //(c) by Kaliber { new Float:x,Float:y,Float:z,Float:dis=9999.0,i=GetVehiclePoolSize()+2,Float:tmp,id,Float:p[6]; GetObjectPos(obj,x,y,z); for(; --i!=-1;) { tmp = GetVehicleDistanceFromPoint(i,x,y,z); if(!tmp) continue; if(tmp < dis) dis=tmp,id=i; } GetVehiclePos(id,p[0],p[1],p[2]); GetVehicleModelInfo(GetVehicleModel(id), VEHICLE_MODEL_INFO_SIZE, p[3],p[4],p[5]); if(z > p[2]+(p[5]/2)) return -1; return (IsObjectInArea(x,y,p[0]-(p[3]/2),p[1]-(p[4]/2),p[0]+(p[3]/2),p[1]+(p[4]/2))) ? id : -1; } //Die Funktion kannst du so z.B. Nutzen: new x = getVehicle(obj); if(x == -1) return print("Befindet sich in keinem Fahrzeug!"); printf("Befindet sich in Fahrzeug: %d",x); //x hat dann hier den Wert von der vehicleid des Autos!mfg.

-
Ich verstehe nicht so ganz, was genau du versuchst.
Beschreibe doch mal was eine Qualle auf der Straße mit einem Auto zu suchen hat?!

Eine kleine Beschreibung wäre ganz interessant

-
Stell mal den Kompatibilitätsmodus auf Win 7 oder downgrade evtl deine gta_sa.exe wenn du das nicht schon getan hast

-
Wie stelle ich jetzt beim Kauf des 4 fest, dass es schon 3 Gibt?
Hmm, naja, eigentlich genügt hier eine temporäre Variable:
C
Alles anzeigennew tmp; //Und dann da wo du dein Auto kaufst: if(tmp >= sizeof(lspd)) return ....; //Hier wurde die maximale Anzahl an Autos schon gekauft! lspd[tmp++] = CreateVehicle(...); //Aber theoretisch kann man das auch mit einer Funktion machen, falls alte Autos gelöscht werden sollten: //Da wo du das Auto kaufst: new x = GetFreeSlost(); if(x == -1) return ....; //Hier wurde die maximale Anzahl an Autos schon gekauft! lspd[x] = CreateVehicle(...); //Die Funktion: stock GetFreeSlot() { for(new i; i<sizeof(lspd); i++) if(!lspd[i]) return i; return -1; } -
-
Entweder nutzt du eine falsche mysql Plugin Version...oder das Plugin wird nicht geladen..
Poste evtl mal den ganzen Log...dann können wir dir besser helfen

-
hey ich hab mir jetzt mal zum scripten nen server geholt leider lädt der gamemode nicht.
Script[gamemodes/UltimateReallife.amx]: Run time error 19: "File or function is not found"
was soll ich tun?Lad dir das nativechecker Plugin und schau, welche Plugins nicht geladen werden, bzw dir fehlen

-
-
Einfach sowas:
C
Alles anzeigen//Oben im Skript: new bool:ticket[MAX_PLAYERS char]; //Du erstellst ja z.B. irgendwo den zug: zug = AddStaticVehicle(...); //OnPlayerEnterVehicle if(vehicleid == zug && !IsPlayerNPC(playerid)) { if(!ticket{playerid}) { RemovePlayerFromVehicle(playerid); //Hier hat er halt kein Ticket... } else { ticket{playerid}=false; //Hier hat er es benutzt } } //Um dem Spieler irgendwo ein Ticket zu geben: if(ticket{playerid}) return SendClientMessage(playerid,-1,"Sie besitzen bereits ein Ticket!"); ticket{playerid} = true; //Hier gibst du ihm ein Ticket //Und unter OnPlayerConnect ticket{playerid}=false; //damit es immer resettet wird -
Lad mal das crashdetect Plugin und dann poste nochmal den Log

-
Also hier wäre mal ein Vorschlag, ich hoffe ich beantworte dadurch deine Fragen.
C
Alles anzeigen//Als erstes definieren wir die Anzahl der Routen: #define MAX_ROUTES 5 //Du erstellst eine Variable oben im Skript: new bool:routes[MAX_PLAYERS][MAX_ROUTES char]; /* bool - um Speicher zu sparen, dadurch nimmt die Variable nur die Werte 1 oder 0 an. char - packed die cells der Variable dadurch verbraucht eine Cell nicht 4 Byte, sondern nur noch 1 Byte */ //Um die Handhabung damit noch etwas einfacher zu machen, ein paar Makros und Funktionen: #define SetPlayerRoute(%0,%1) routes[%0]{%1}=true #define UnsetRoute(%0,%1) routes[%0]{%1}=false stock GetRoute(playerid) { for(new i; i<MAX_ROUTES; i++) if(routes[playerid]{i}) return i; return -1; } //Dann unter OnDialogResponse if(dialogid == DIALOG_MATERIALIEN) //Oder am besten mit einem switch arbeiten { if(!response) return 1; //Wenn er auf abbrechen klickt stoppen. if(GetRoute(playerid) != -1) return 1; //Hier hat er schon eine Route ausgewählt! SetPlayerRoute(playerid,listitem); //Hier setzen wir den Spieler direkt in die Route, die er angeklickt hat :) } //Dann zum resetten (am einfachsten einfach unter OnPlayerConnect) for(new i; i<MAX_ROUTES; i++) UnsetRoute(playerid,i); -
Ist ja nicht so, dass dieser Fehler nun schon 1000x durchgekaut wurde...es gibt ja keine SuFu..nur Jeffry

Hier: https://www.microsoft.com/de-d…oad/details.aspx?id=30679
Und da die VSU4\vcredist_x86.exe downloaden und installieren

PS: Wenn das nicht hilft, mal Windows Updates machen

-
Die beiden Sternchen da weg

-