Das liegt daran, dass wenn du vom Spieler die GetPlayerPos nutz die z Koordiante vom bauch deines Charakter aus geht also musst du ca -0.9 rechnen oder mit MapAndreas arbeiten um es ganz genau zu bestimmen.
[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
-
-
Das klingt super danke für die Schnelle Antwort, Aber habe tatsächlich noch nie MapSanAndreas verwendet inwiefern kann man das mit einbinden?
-
-
Hat X[] einen Text3D: Tag?
-
Hey, ich wollte mal fragen wie man bei einem Script (bzw WestSide) die Preise von den Personalausweiß oder Scheinen ändern kann. Muss man die im Script ändern?
-
Das klingt super danke für die Schnelle Antwort, Aber habe tatsächlich noch nie MapSanAndreas verwendet inwiefern kann man das mit einbinden?
Damit kannst du genau bestimmen was die Z Koordiante an der X/Y Position ist, bedeutet die genaue Höhe vom boden
(ist jetzt denke mal nicht für diesen Befehl wichtig, nutzen hatte es bei mir z.B als ich etwas aus der Luft auf den Boden Moven lassen wollte, also ein Object)
Hier das Plugin
https://forum.sa-mp.com/showthread.php?t=120013 -
Ich versteh es nicht. Ich will, dass man das TextLabel nicht durch Objekte sehen kann, heißt Testlos = 0
füge ich hiernach 0, 0 , 0 ein sehe ich das TextLabel nicht einmal
CreateDynamic3DTextLabel(const text[], color, Float:x, Float:y, Float:z, Float:drawdistance, attachedplayer = INVALID_PLAYER_ID, attachedvehicle = INVALID_VEHICLE_ID, testlos = 0, worldid = -1, interiorid = -1, playerid = -1, Float:distance = 100.0);
-
Ich versteh es nicht. Ich will, dass man das TextLabel nicht durch Objekte sehen kann, heißt Testlos = 0
füge ich hiernach 0, 0 , 0 ein sehe ich das TextLabel nicht einmal
CreateDynamic3DTextLabel(const text[], color, Float:x, Float:y, Float:z, Float:drawdistance, attachedplayer = INVALID_PLAYER_ID, attachedvehicle = INVALID_VEHICLE_ID, testlos = 0, worldid = -1, interiorid = -1, playerid = -1, Float:distance = 100.0);
Dann setz die default werte anstatt 0...
Also INVALID_PLAYER_ID, INVALID_VEHICLE_ID und dann 0 für testlos
0 sind nämlich für beides valide IDs, also versucht der Streamer des text label an einen Spieler bzw. ein Fahrzeug zu attachen, somit siehst du es nicht. -
Hey,
Ist das so richtig @Mogly1
C
Alles anzeigenstock CreateDrugVegancy(playerid, drugart, samen) { new query[500]; for(new Drugs=0;Drugs<MAX_DRUGS;Drugs++) { if(Drogen[Drugs][drgArt] == 0 && drugart != 0) { //GetPlayerPos(playerid, Drogen[Drugs][drgXpos], Drogen[Drugs][drgYpos], Drogen[Drugs][drgZpos]); MapAndreas_FindZ_For2DCoord(Drogen[Drugs][drgXpos], Drogen[Drugs][drgYpos], Drogen[Drugs][drgZpos]); Drogen[Drugs][drgfraktid] = Spieler[playerid][pFraktion]; Drogen[Drugs][drgArt] = drugart; Drogen[Drugs][drginterior] = GetPlayerInterior(playerid); Drogen[Drugs][drgvirtualworld] = GetPlayerVirtualWorld(playerid); Drogen[Drugs][drgProduceDrugs] = 0; Drogen[Drugs][drgWasserzustand] = 100; format(Drogen[Drugs][drgOwner], 24, "%s", GetName(playerid)); Drogen[Drugs][drgNextDrugsIn] = (60*60); format(query,sizeof(query),"{00FF00}Pflanzen-ID {FFFFFF}%i\n%s\n{00FF00}Besitzer: {FFFFFF}%s, %s\n{00FF00}Drogenmenge: {FFFFFF}%i{00FF00}g\n{00FF00}Neue Drogen in {FFFFFF}%i:%02d {00FF00}Minuten\n{00FF00}Wasserzustand: {FFFFFF}%i%", Drugs, DrugArtByName(Drogen[Drugs][drgArt]), Drogen[Drugs][drgOwner], FraktionsName(Drogen[Drugs][drgfraktid]), Drogen[Drugs][drgProduceDrugs], Drogen[Drugs][drgNextDrugsIn]/60, Drogen[Drugs][drgNextDrugsIn]%60, Drogen[Drugs][drgWasserzustand]); DrugLabel[Drugs] = CreateDynamic3DTextLabel(query, COLOR_WHITE, Drogen[Drugs][drgXpos], Drogen[Drugs][drgYpos], Drogen[Drugs][drgZpos], 7.5, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 1, Drogen[Drugs][drgvirtualworld]); mysql_format(MySqlConnection, query, sizeof(query), "INSERT INTO `server_drogen` (`pflanze`,`drgfraktid`,`drgArt`,`drgXpos`,`drgYpos`,`drgZpos`,`drginterior`,`drgvirtualworld`,`drgProduceDrugs`,`drgNextDrugsIn`,`drgWasserzustand`,`drgOwner`) VALUES ('%i', '%i', '%i', '%f', '%f', '%f', '%i', '%i', '%i', '%i', '%i', '%s')", Drugs, Drogen[Drugs][drgfraktid], Drogen[Drugs][drgArt], Drogen[Drugs][drgXpos], Drogen[Drugs][drgYpos], Drogen[Drugs][drgZpos], Drogen[Drugs][drginterior], Drogen[Drugs][drgvirtualworld], Drogen[Drugs][drgProduceDrugs], Drogen[Drugs][drgNextDrugsIn], Drogen[Drugs][drgWasserzustand], Drogen[Drugs][drgOwner]); mysql_tquery(MySqlConnection, query, "",""); format(query ,sizeof(query), "{33CCFF}(( %s %s: Eine Pflanze (%s) wurde gepflanzt! ))", GetRankName(Spieler[playerid][pFraktion], Spieler[playerid][pRank]), GetName(playerid), DrugArtByName(drugart)); SendFraktionMessage(Spieler[playerid][pFraktion], COLOR_WHITE, query); format(query, sizeof(query), "{C2A2DA}* %s pflanzt %s Pflanze an", GetName(playerid), DrugArtByName(drugart)); RoundMessage(playerid, COLOR_WHITE, query, 10.0); switch(Drogen[Drugs][drgArt]) { case 1://Ganja { Spieler[playerid][pGanjaSammen] -= samen; Drogen[Drugs][drgobject] = CreateDynamicObject(822, Drogen[Drugs][drgXpos], Drogen[Drugs][drgYpos], Drogen[Drugs][drgZpos], 0.0, 0.0, 0.0, Drogen[Drugs][drgvirtualworld]); } case 2://KOKAIN { Spieler[playerid][pKokainSammen] -= samen; Drogen[Drugs][drgobject] = CreateDynamicObject(825, Drogen[Drugs][drgXpos], Drogen[Drugs][drgYpos], Drogen[Drugs][drgZpos], 0.0, 0.0, 0.0, Drogen[Drugs][drgvirtualworld]); } case 3://OPIUM { Spieler[playerid][pOpiumSammen] -= samen; Drogen[Drugs][drgobject] = CreateDynamicObject(866, Drogen[Drugs][drgXpos], Drogen[Drugs][drgYpos], Drogen[Drugs][drgZpos], 0.0, 0.0, 0.0, Drogen[Drugs][drgvirtualworld]); } case 4://spice { Spieler[playerid][pSpiceSammen] -= samen; Drogen[Drugs][drgobject] = CreateDynamicObject(866, Drogen[Drugs][drgXpos], Drogen[Drugs][drgYpos], Drogen[Drugs][drgZpos], 0.0, 0.0, 0.0, Drogen[Drugs][drgvirtualworld]); } default: printf("FEHLER » Stock 'CreateDrugVegancy(pid: %i, drugart: %i)' wurde nicht erkannt.",playerid,drugart); } return 1; } } return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Es wurde bereits die maximal Anzahl an Drogenpflanzen gepflanzt."); }
-
Hey,
Ist das so richtig @Mogly1
C
Alles anzeigenstock CreateDrugVegancy(playerid, drugart, samen) { new query[500]; for(new Drugs=0;Drugs<MAX_DRUGS;Drugs++) { if(Drogen[Drugs][drgArt] == 0 && drugart != 0) { //GetPlayerPos(playerid, Drogen[Drugs][drgXpos], Drogen[Drugs][drgYpos], Drogen[Drugs][drgZpos]); MapAndreas_FindZ_For2DCoord(Drogen[Drugs][drgXpos], Drogen[Drugs][drgYpos], Drogen[Drugs][drgZpos]); Drogen[Drugs][drgfraktid] = Spieler[playerid][pFraktion]; Drogen[Drugs][drgArt] = drugart; Drogen[Drugs][drginterior] = GetPlayerInterior(playerid); Drogen[Drugs][drgvirtualworld] = GetPlayerVirtualWorld(playerid); Drogen[Drugs][drgProduceDrugs] = 0; Drogen[Drugs][drgWasserzustand] = 100; format(Drogen[Drugs][drgOwner], 24, "%s", GetName(playerid)); Drogen[Drugs][drgNextDrugsIn] = (60*60); format(query,sizeof(query),"{00FF00}Pflanzen-ID {FFFFFF}%i\n%s\n{00FF00}Besitzer: {FFFFFF}%s, %s\n{00FF00}Drogenmenge: {FFFFFF}%i{00FF00}g\n{00FF00}Neue Drogen in {FFFFFF}%i:%02d {00FF00}Minuten\n{00FF00}Wasserzustand: {FFFFFF}%i%", Drugs, DrugArtByName(Drogen[Drugs][drgArt]), Drogen[Drugs][drgOwner], FraktionsName(Drogen[Drugs][drgfraktid]), Drogen[Drugs][drgProduceDrugs], Drogen[Drugs][drgNextDrugsIn]/60, Drogen[Drugs][drgNextDrugsIn]%60, Drogen[Drugs][drgWasserzustand]); DrugLabel[Drugs] = CreateDynamic3DTextLabel(query, COLOR_WHITE, Drogen[Drugs][drgXpos], Drogen[Drugs][drgYpos], Drogen[Drugs][drgZpos], 7.5, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 1, Drogen[Drugs][drgvirtualworld]); mysql_format(MySqlConnection, query, sizeof(query), "INSERT INTO `server_drogen` (`pflanze`,`drgfraktid`,`drgArt`,`drgXpos`,`drgYpos`,`drgZpos`,`drginterior`,`drgvirtualworld`,`drgProduceDrugs`,`drgNextDrugsIn`,`drgWasserzustand`,`drgOwner`) VALUES ('%i', '%i', '%i', '%f', '%f', '%f', '%i', '%i', '%i', '%i', '%i', '%s')", Drugs, Drogen[Drugs][drgfraktid], Drogen[Drugs][drgArt], Drogen[Drugs][drgXpos], Drogen[Drugs][drgYpos], Drogen[Drugs][drgZpos], Drogen[Drugs][drginterior], Drogen[Drugs][drgvirtualworld], Drogen[Drugs][drgProduceDrugs], Drogen[Drugs][drgNextDrugsIn], Drogen[Drugs][drgWasserzustand], Drogen[Drugs][drgOwner]); mysql_tquery(MySqlConnection, query, "",""); format(query ,sizeof(query), "{33CCFF}(( %s %s: Eine Pflanze (%s) wurde gepflanzt! ))", GetRankName(Spieler[playerid][pFraktion], Spieler[playerid][pRank]), GetName(playerid), DrugArtByName(drugart)); SendFraktionMessage(Spieler[playerid][pFraktion], COLOR_WHITE, query); format(query, sizeof(query), "{C2A2DA}* %s pflanzt %s Pflanze an", GetName(playerid), DrugArtByName(drugart)); RoundMessage(playerid, COLOR_WHITE, query, 10.0); switch(Drogen[Drugs][drgArt]) { case 1://Ganja { Spieler[playerid][pGanjaSammen] -= samen; Drogen[Drugs][drgobject] = CreateDynamicObject(822, Drogen[Drugs][drgXpos], Drogen[Drugs][drgYpos], Drogen[Drugs][drgZpos], 0.0, 0.0, 0.0, Drogen[Drugs][drgvirtualworld]); } case 2://KOKAIN { Spieler[playerid][pKokainSammen] -= samen; Drogen[Drugs][drgobject] = CreateDynamicObject(825, Drogen[Drugs][drgXpos], Drogen[Drugs][drgYpos], Drogen[Drugs][drgZpos], 0.0, 0.0, 0.0, Drogen[Drugs][drgvirtualworld]); } case 3://OPIUM { Spieler[playerid][pOpiumSammen] -= samen; Drogen[Drugs][drgobject] = CreateDynamicObject(866, Drogen[Drugs][drgXpos], Drogen[Drugs][drgYpos], Drogen[Drugs][drgZpos], 0.0, 0.0, 0.0, Drogen[Drugs][drgvirtualworld]); } case 4://spice { Spieler[playerid][pSpiceSammen] -= samen; Drogen[Drugs][drgobject] = CreateDynamicObject(866, Drogen[Drugs][drgXpos], Drogen[Drugs][drgYpos], Drogen[Drugs][drgZpos], 0.0, 0.0, 0.0, Drogen[Drugs][drgvirtualworld]); } default: printf("FEHLER » Stock 'CreateDrugVegancy(pid: %i, drugart: %i)' wurde nicht erkannt.",playerid,drugart); } return 1; } } return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Es wurde bereits die maximal Anzahl an Drogenpflanzen gepflanzt."); }
Du musst trotzdem GetPlayerPos nutzen.
Die MapAndreas funktion gibt dir lediglich eine Z Koordinate zurück, abhängig von den X & Y Koordinaten die du ihr gibst.
MapAndreas_FindZ_For2DCoord(Float:X, Float:Y, &Float:Z) <- nur Z ist eine referenz -
-
Moin hab folgendes Problem.
Sobald ich mein Script compile kommt folgende Errormeldung "error 035: argument type mismatch (argument 3)"
Ich möchte nämlich bei dem Command "/suspect" hinzufügen das man auch eine Menge eingeben kann an Wanteds die der Spieler erhalten sollHier der Command:
ocmd:suspect(playerid, params[])
{
new pID, reason[64], wanteds, string[256];if (!IsACop(playerid)) return SendClientMessageEx(playerid, COLOR_GRAD1, "Du bist kein Staatsbeamter.");
if (PlayerInfo[pID][pTot] >= 1) return SendClientMessageEx(playerid, COLOR_GRAD1, "Du kannst aktuell keine Wanteds vergeben.");
if (sscanf(params, "us[64]", pID, reason)) return SendClientMessageEx(playerid, COLOR_GRAD1, "Verwendung: (/su)spect [SpielerID/Name] [Grund]");
if (!IsLoggedIn(pID)) return SendClientMessageEx(playerid, COLOR_GRAD1, ERROR_OFFLINE);
if (!IsLoggedIn(pID)) return SendClientMessageEx(playerid, COLOR_GRAD1, ERROR_NOT_LOGGEDIN);
if (IsACop(pID)) return SendClientMessageEx(playerid, COLOR_GRAD1, "Du kannst Beamten keine Wanteds eintragen.");
if (PlayerInfo[pID][pJailed] >= 1) return SendClientMessageEx(playerid, COLOR_GRAD1, "Der Spieler ist aktuell im Gefängnis.");
if (PlayerInfo[pID][pTot] >= 1) return SendClientMessageEx(playerid, COLOR_GRAD1, "Der Spieler ist aktuell tot.");
if((PlayerInfo[pID][pWantedLevel] + wanteds) > 60) return SendClientMessageEx(playerid, COLOR_GRAD1, "Du kannst maximal nur 60 Wanteds vergeben.");PlayerInfo[pID][pWantedLevel] -= wanteds;
PlayerInfo[pID][pWantedLevel] ++;
PlayerInfo[pID][pWantedWitness] = playerid;SetPlayerCriminal(pID, playerid, wanteds, reason);
new uhrzeit[32], method[64], query[256];
format(method, sizeof(method), "suspect %s (%s)", GetFullName(pID), Menge, reason);
format(uhrzeit, sizeof(uhrzeit), "%02d.%02d.%02d - %02d:%02d", tag, monat, jahr, stunde, minute);
format(query, sizeof(query), "INSERT INTO `script_coplog` (Player, Method, Amount, Uhrzeit) VALUES ('%s', '%s', '%d', '%s')", GetFullName(playerid), method, PlayerInfo[pID][pWantedLevel], uhrzeit);
mysql_function_query(myCon, query, false, "", "");
return 1;
}und bei folgender Zeile kommt der Error
SetPlayerCriminal(pID, playerid, wanteds, reason);
-
- ein Parameter würde hinzugefügt was die Function noch vorsiehtvorsieht
Entferne mal den Wanteds Parameter und sehe was passiert
-
@Awayus:
Da ich soein "schlechter" Scripter bin
Du musst natürlich die Funktion umschreiben wenn du die ein Parameter hinzufügst aber das müsste man eigentlich wissenCode
Alles anzeigenCALLBACK:SetPlayerCriminal(playerid, declare, wanteds, reason[]) { new CopSU, turner[25], string[128]; if (IsLoggedIn(playerid)) { PlayerInfo[playerid][pCrimes] += wanteds; strmid(PlayerInfo[playerid][pWantedReason], reason, 0, strlen(reason), 255); if (declare == 255) { format(turner, sizeof(turner), "Niemand"); strmid(PlayerInfo[playerid][pWantedWitness], turner, 0, strlen(turner), 255); } else { if (IsLoggedIn(declare)) { GetPlayerName(declare, turner, sizeof(turner)); strmid(PlayerInfo[playerid][pWantedWitness], turner, 0, strlen(turner), 255); CopSU = 1; } } format(string, sizeof(string), "Du hast ein Verbrechen begangen ( %s ). Zeuge: %s", reason, turner); SendClientMessage(playerid, COLOR_LIGHTRED, string); format(string, sizeof(string), "Aktuelles Wanted Level: %d", PlayerInfo[playerid][pWantedLevel]); SendClientMessage(playerid, COLOR_YELLOW, string); new InRange; for(new i = 0; i < GetMaxPlayers(); i++) { if (IsLoggedIn(i)) { if (IsACop(i)) { format(string, sizeof(string), "[WANTED] Verdächtiger: %s, Zeuge: %s, Verbrechen: %s", GetFullName(playerid), turner, reason); SendClientMessageEx(i, COLOR_COP_MELDUNG, string); if (CopSU) { if (GetDistanceBetweenPlayers(playerid, i) <= 150) { InRange = 1; } } } } } if (InRange == 1) { pWantedLoseAllow[playerid] = 7; } UpdateWantedTD(playerid); CreateWantedLabel(playerid); } return 1; }
-
-
Hi,
Ich habe hier Türen, beim öffnen frage ich ab, ob diese Tür bereits offen ist (Zeile 11.)
Dafür habe ich eine globale Variable erstellt, jetzt habe ich mehrere Türen.Es wäre ja nicht schlau, wenn ich in Zeile 16. erneut eine Globale Variable erstelle wie z.b IsDoor2Opened
C
Alles anzeigennew i = /*X*/(playerid); if(i == -1) return 1; switch(i) { case 0: //Tür 1 { new Float:x,Float:y,Float:z; GetDynamicObjectPos(X[i],x,y,z); MoveDynamicObject(Y[i], x-1.6816,y,z,1); UpdateDynamic3DTextLabelText(X[i],-1,"/*X*/"); IsDoorOpened = 1; //is Tür 1 offen } case 1: //Tür 2 { UpdateDynamic3DTextLabelText(Y[i],-1,"/*X*/"); //Soll auch eine Abfrage ob die Tür 2 offen ist } }
-
Dann verwende dafür einfach ein Array.
Statt new IsDoorOpened; machst du einfach new IsDoorOpened[2];
Und dann deine Abfrage so:
new i = /*X*/(playerid);
if(i == -1) return 1;
switch(i)
{
case 0: //Tür 1
{
new Float:x,Float:y,Float:z;
GetDynamicObjectPos(X[i],x,y,z);
MoveDynamicObject(Y[i], x-1.6816,y,z,1);
UpdateDynamic3DTextLabelText(X[i],-1,"/*X*/");
IsDoorOpened[0] = 1; //is Tür 1 offen
}
case 1: //Tür 2
{
UpdateDynamic3DTextLabelText(Y[i],-1,"/*X*/");
IsDoorOpened[1] = 1; //is Tür 2 offen
}
} -
Kleines Problem, folgender Code:
Code
Alles anzeigenpublic Fraktions_Save() { new query[1024]; for(new i = 0; i < MAX_FRAKS; i ++) { format(query, sizeof(query), "UPDATE `server_fraktions` SET `name`='%s', `spawn_x`='%f', `spawn_y`='%f', `spawn_z`='%f', `spawn_r`='%f', `interior`='%d', `world`='%d', `member`='%d', `memberlimit`='%d' WHERE `id`='%d'", FrakInfo[i][fName], FrakInfo[i][fSpawn][0], FrakInfo[i][fSpawn][1], FrakInfo[i][fSpawn][2], FrakInfo[i][fSpawn][3], FrakInfo[i][fInterior], FrakInfo[i][fWorld], FrakInfo[i][fMember], FrakInfo[i][fMemberlimit], i); printf("Die Fraktion %s wurde erfolgreich gespeichert!", FrakInfo[i][fName]); } return 1; }
Die Server Log gibt nicht den Namen der ersten Spalte aus.
Code[05:55:03] Die Fraktion wurde erfolgreich gespeichert! [05:55:03] Die Fraktion Federal Bureau of Investigation wurde erfolgreich gespeichert!
Ich muss in der Datenbank doch nicht bei null anfangen, oder?
-
@Fernandez_:
Es hat den anscheind als wird beim Laden der Fraktion 1 kein Name zugewiesen dadurch bleibt die Varriable für den Namen leer. -
Wenn du Fraktionsid 0 nicht speichern willst, dann fang den for-loop einfach bei 1 statt bei 0 an.
Statt:
for(new i = 0; i < MAX_FRAKS; i ++)Dann einfach:
for(new i = 1; i < MAX_FRAKS; i ++) -
Es bringt dennoch nicht die gewünschte Änderung Leon.
-