Vielen Dank Jeffry!
Peinlicher Fehler
Beiträge von [BSRP]MomoGrimm
-
-
Guten Tag,
leider habe ich zurzeit ein Problem mit meinem Mining-System.
Zurzeit glaube ich, dass das Problem in einer dieser beiden Funktionen liegt, jedoch finde ich keinen Fehler. Kann mir wer helfen?
GetClosestErz(Float:x, Float:y, Float:z)
{
new Float:closestdistance;
new closestore = 5000; //Falls gar kein Erz existiert, wird 5000 zurückgegeben.
new Float:distance;
new Float:erzx, Float:erzy, Float:erzz;
for(new i; i < MAX_ERZE; i++)
{
if(!IsValidObject(Erze[i])) continue;
GetObjectPos(Erze[i], erzx, erzy, erzz);
distance = GetDistance(x, y, z, erzx, erzy, erzz);
if(distance > closestdistance) { closestdistance = distance; closestore = i; }
}
return closestore;
}stock Float:GetDistance(Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2) //Aus der uf.inc
{
return floatadd(floatadd(floatsqroot(floatpower(floatsub(x1,x2),2)),floatsqroot(floatpower(floatsub(y1,y2),2))),floatsqroot(floatpower(floatsub(z1,z2),2)));
}Mfg:
MomoGrimm -
Mach es mit einem Array. 1.: Ganz oben im Script erstellen:
#define MAX_STATUEN 500 //Kannst du beliebig ändern. Höhere Zahlen können jedoch in der Schleife zu hohem Leistungsverlust führen
new StatuenObj[MAX_STATUEN];
new StatuenPick[MAX_STATUEN];
Dann machst du eine Schleife:
for(new i; i < MAX_STATUEN; i++)
{
if(!IsValidObject(StatuenObj[i])
{
StatuenObj[i] = CreateObject(...);
StatuenPick[i] = CreatePickup(...);
return 1;
}
}Beim Aufheben auch eine Schleife:
for(new i; i < MAX_STATUEN; i++)
{
if(pickupid == StatuenObj[i])
{
//Statue aufheben lassen
DestroyObject(StatuenObj[i]);
DestroyPickup(StatuenPick[i]);
return 1;
}
}Ich hoffe dass es so richtig ist und einigermaßen funktionieren wird.
Mfg:
MomoGrimm -
Was funktioniert denn nicht so ganz ?
Sag die Fehler bitte deutlicher.
Er hat gesagt die Farben gehen nicht richtig. -
Ups das hätte mir auch einfallen können. Sorry, dass ich dich so gehetzt habe und garnichts produktives beigeleistet habe Hauptsache, es funktioniert
-
Ok, ich weiß nicht woran es liegt. Probier mal das was ich oben gesagt habe oder mach dir mal einen neuen Account auf dem Server. Wenn das nicht geht, weiß ich selber nicht mehr weiter.
-
Schick mal das Enum, was du in sInfo[playerid][spawnchange] nutzt. Also wo level, spawnchange usw. drinne ist.
Ich kenne mich mit MySql nicht aus, aber probiere mal bei ausgeschaltetem Server spawnchange mit den Wert 1 zu erstellen und dann zu joinen. Guck mal ob es dann geht oder spawnchange aus der Datenbank wieder verschwindet.
-
Hast du sowas wie logged[playerid]?
Wenn ja dann könntest du eine Funktion machen, diese ShowTextdraws oder so heißt. Dann überprüfst du einfach immer bei OnPlayerSpawn ob er logged[playerid] ist, und wenn ja, kannst du ShowTextdraws(playerid); ausführen. Und bei Ganggebietstextdraws musst du halt immer in der Abfrage, ob er in der Nähe eines Gebietes ist, auch "if(logged[playerid])" einfügen.Hoffe ich konnte helfen und es ist richtig,
Mfg:
MomoGrimm -
Das ist zwar unwarscheinlich, aber warscheinlich geht /spawnchange nicht.
Probier mal:
ocmd:spawnchange(playerid, params[])
{
if(isPlayerInFrakt(playerid, 0))return SendClientMessage(playerid,COLOR_WHITE,"Du bist in keiner Fraktion.");
if(sInfo[playerid][spawnchange]==0)
{
sInfo[playerid][spawnchange]=1;
print("Spawnchange auf 1");
}
if(sInfo[playerid][spawnchange]==1)
{
sInfo[playerid][spawnchange]=0;
print("Spawnchange auf 0");
}
SendClientMessage(playerid,COLOR_RED,"ACHTUNG: Du hast dein Spawn geändert du Spawnst ab jetzt an deiner Fraktion Basis.");
print("/spawnchange");
return 1;
}
Und sag dann hinterher was da in der Konsole steht.Schick auch mal bitte wo du überall sInfo[playerid][spawnchange] nutzt. Also Spielerdatei laden, Spielerdatei speichern usw.
-
1. Sicher dass du in der Fraktion 1 - LSPD bist?
2. Was steht aktuell in der Datenbank bei spawnchange? Wenn 0, setze es auf 1 und guck dann ob du in deiner Sitzung richtig spawnst und ob nach der Sitzung bei spawnchange noch 1 steht.
3. Such mal nach " [spawnchange] " und guck ob du es irgendwo falsch/ungewollt setzt oder ausliest.
-
Kein Problem
Hast du das jetzt durch print oder durch checken der Datenbank hingekriegt? -
Guck mal was in der Datenbank bei spawnchange steht.
Ärgerlich wäre, wenn es auf 2 oder so wäre, weswegen /spawnchange nichts bewirkt und bei OnPlayerSpawn if(spawn == 1) nicht aufgerufen wird -
Ändere /fcarsell mal folgend um:
if(strcmp(cmdtext,"/fcarsell",true)==0){
printf("Vorher %i", FactionCars[fc][fPrice]);
printf("Vorherdividiert %i", FactionCars[fc][fPrice] / 2);
if(GetPlayerLeader(playerid)){
if(IsAllowedFactionToBuy(GetPlayerFaction(playerid))){
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER){
new Carid1 = GetPlayerVehicleID(playerid);
for(new fc;fc<sizeof(FactionCars);fc++){
if(FactionCars[fc][fVehid] >= 400 && FactionCars[fc][fVehid] <= 611){
if(Carid1 == FactionCars[fc][fCarid]){
if(FactionCars[fc][fFaction][0] == GetPlayerLeader(playerid)){
FactionCars[fc][fVehid] = -255;
if(DestroyVehicle(FactionCars[fc][fCarid]))
FactionCars[fc][fCarid] = -255;
new fText[178];
format(fText,sizeof(fText),"Du hast das Fraktionsfahrzeug erfolgreich für $%d(50%% vom Kaufpreis) verkauft.",(FactionCars[fc][fPrice]/2));
SendClientMessage(playerid,FACTION_COL_YELLOW,fText);
GivePlayerMoney(playerid,(FactionCars[fc][fPrice]/2));
printf("Nachher %i", FactionCars[fc][fPrice]);
printf("Nachherdividiert %i", FactionCars[fc][fPrice] / 2);
}
else SendClientMessage(playerid,FACTION_COL_GREY,"Du bist nicht der besitzer dieses Fahrzeuges.");
return true;
}
}
}SendClientMessage(playerid,FACTION_COL_GREY,"Du sitzt in keinem Fraktionsfahrzeug.");
}else SendClientMessage(playerid,FACTION_COL_GREY,"Du musst der Fahrer eines Fahrzeuges sein.");
}else SendClientMessage(playerid,FACTION_COL_GREY,"Deine Fraktion ist dazu nicht berechtigt.");
}else SendClientMessage(playerid,FACTION_COL_GREY,"Du bist nicht berechtigt diesen Befehl anzuwenden.");
return true;
}Daran kannst du eventuell erkennen, ob im Verlauf des Befehles FactionCars[fc][fPrice] beeinflusst wird oder ob es von Anfang an 0 ist. Außerdem kannst du dann sehen, dass wenn das erste bei Nachher funktioniert und das zweite nicht, dass es an der Division von FactionCars[fc][fPrice] liegt.
-
Kauf mal ein Fahrzeug, guck in der Datenbank welchen Wert der Preis hat, und guck auch mal was bei /fcarsell im Chat steht.
-
Kurze frage,
was steht bei dir im Chat, wenn du das eingibst?Könnte es sein, dass fPrice = 0 ist?
-
Ich sehe es gerade garnicht, wo setzt du denn das Geld?
-
Du kannst oben im Script eine Variable mit einem Array erstellen z.B:
Fahrschulwagen[20];
Du hast nun 20 Variablen. Diese sind Fahrschulwagen[0] - Fahrschulwagen[19]. Fahrschulwagen[20] gibt es nicht, dafür aber Fahrschulwagen[0].Dann kannst du 20 Fahrzeuge erstellen (z.B. in OnGameModeInit);
Fahrschulwagen[0] = CreateVehicle...
Fahrschulwagen[1] = CreateVehicle...
[...]
Fahrschulwagen[19] = CreateVehicle...Hinterher kannst du folgendes machen:
for(new i; i < 19; i++) //for-Schleife, wobei i nacheinander die Nummern 0 - 19 abarbeitet.
{
if(IsPlayerInVehicle(playerid, Fahrschulwagen[i])
{
//Hier kommt das hin, wenn er in einen der Fahrschulwagen ist.
}
}Hoffe, dass es einigermaßen richtig ist.
Mfg:
MomoGrimm -
Speicherst du das richtig ab? Wenn ja, wie?
PS: Wenn du das Script nutzen willst, achte am Besten auf Grammatik- und Rechtschreibfehler. Fraktion Basis klingt nicht schön, und schlechte Schreibweise schreckt einige Spieler ab.
-
Schick mal /spawnchange bitte.
-
PlayerPlaySound(playerid,17802,0.0,0.0,0.0); rausnehmen.
Und das ist normal wenn du mehrere kriegst. Immer, wenn du einen Schuss abgibst, kommt 1 Sound.