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:
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:
new 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): .....$");
}
Alles anzeigen
Allerdings, könntest du es auch ganz kompakt schreiben, dann sähe es so aus:
new 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));
Alles anzeigen
...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:
new 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:
//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!
Alles anzeigen
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:
new 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;
}
Alles anzeigen
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:
//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
Alles anzeigen
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.
//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);
Alles anzeigen
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 ![]()
Auch nicht welche, die vielleicht diesen Aktionen ähneln?
Nein.
Bei dem Fegen, kannst du aber anstelle einen Sweeper nehmen (574). Dann machste Cechkpoints und er soll diese abfahren.
Und anstelle des schüttelns, check einfach ob er gegen den Baum schlägt oder nicht ![]()
Ich kann mich irren, aber ich bin mir zu 90% sicher, dass solche Animationen leider nicht existieren. ![]()
Schau dir mal dein format an...du hast vergessen den Namen von dem Spieler da einzufügen ![]()