Hey,
habe ein System gescriptet, womit man Objekte ingame erstellen und bearbeiten kann.
Beim Bearbeiten habe ich jedoch ein Problem, und zwar ändert sich die Rotation und Position nicht.
else if(newkeys == KEY_ANALOG_DOWN) //Numpad 2
{
if(Spieler[playerid][EObj] <= 0)return 1;
new obj = Spieler[playerid][EObj];
new Float:rx,Float:ry,Float:rz; GetDynamicObjectRot(Objekt[obj][o_obj],rx,ry,rz);
SetDynamicObjectRot(Objekt[obj][o_obj],rx+0.5,ry,rz);
return StopDynamicObject(Objekt[obj][o_obj]);
}
else if(newkeys == KEY_ANALOG_LEFT) //Numpad 4
{
if(Spieler[playerid][EObj] <= 0)return 1;
new obj = Spieler[playerid][EObj];
new Float:rx,Float:ry,Float:rz; GetDynamicObjectRot(Objekt[obj][o_obj],rx,ry,rz);
SetDynamicObjectRot(Objekt[obj][o_obj],rx,ry,rz-0.5);
return StopDynamicObject(Objekt[obj][o_obj]);
}
Bei der Veränderung mit "Numpad 4" klappt es, mit "Numpad 2" jedoch nicht..
Ist dort irgendwas dran falsch?
Beiträge von ErikSon
-
-
Das ist kein Error, sondern ein Warning..
Du hast es nicht richtig eingerückt..
Machs so:
if(IsPlayerConnected(player1) && player1 != INVALID_PLAYER_ID)
{
if(AccInfo[player1][LoggedIn] == 1)
{
if(level > AccInfo[playerid][Level])
{
format(string,sizeof(string), "You can't use /setlevel on %s .", pName(player1));
return SendClientMessage(playerid, yellow, string);
}if(level > ServerInfo[MaxAdminLevel]) return SendClientMessage(playerid,red,"** Admin has already this Level!"); // [(2452) : warning 217: loose indentation]
format(string,sizeof(string),"* Admin %s has granted premanent Administrator Level %d to %s.", pName(playerid), level, pName(player1));
MessageToAdmins(yellow, string);GetPlayerName(player1, playername, sizeof(playername));
GetPlayerName(playerid, adminname, sizeof(adminname));
new year,month,day;
new hour,minute,second;
getdate(year, month, day);
gettime(hour,minute,second);
//hier dann dein weiterer Code -
if(sscanf(params,"dD",color[0],color[1]))
Liegt vlt an dem großen "D"
Versuchs mal so:
if(sscanf(params,"dd",color[0],color[1])) -
Passiert trotzdem nix, wird nirgents hinteleportiert.
if(killerid != INVALID_PLAYER_ID)
{
SetPlayerPos(playerid,2044.4293,-1402.7386,68.3260);
SetPlayerCameraPos(playerid,1996.2949,-1451.4928,13.5547);
SetPlayerCameraLookAt(playerid,1998.0272,-1449.7122,13.5594+1);
TogglePlayerControllable(playerid, 0);
}SetPlayerPos(playerid,2044.4293,-1402.7386,68.3260);
SetPlayerCameraPos(playerid,1996.2949,-1451.4928,13.5547);
SetPlayerCameraLookAt(playerid,1998.0272,-1449.7122,13.5594+1);
Mach es doch so:
if(killerid != INVALID_PLAYER_ID)
{
SetPlayerPos(playerid,2044.4293,-1402.7386,68.3260);
SetPlayerCameraPos(playerid,1996.2949,-1451.4928,13.5547);
SetPlayerCameraLookAt(playerid,1998.0272,-1449.7122,13.5594+1);
TogglePlayerControllable(playerid, 0);
}Der andere Teil war das Problem..
-
Ich habe alles so gemacht wie da,und es passiert ingame NIX...
Dann hast du wohl etwas falsch..
Poste mal deinen Code -
Meinst du Textdraws?
Wenn ja, hast du auch unter "OnPlayerClickTextDraw" die Funktionen eingefügt? (was passieren soll) -
Naja wenn du die ATM's 1,2,3,4,5 erstellst (ID), und den ATM 4 löschst hast du nur noch 1,2,3,5 - 4 existiert nicht, ist aber größer als 0, also wird die ID auch durchgelaufen
Also mach es wie Cireyses:
ErikSon:Ich vermute, dass er die ID von 4 dann auf 0 setzt, mit ID meint er einen Wert vom Enum nicht die vom Array. - Vermute ich.
Richtig..
Wenn ich es so machen würde, wie @Paradoxon:, würde das Ganze ja gar keinen Sinn ergeben -
Ich habe in meinem Enum immer eine Variable bool:Used,
beim erstellen eines Objektes wird dieser auf true gesetzt, beim zerstören wieder auf false.
Damit kannst du dann eine Schleife durchgehe mit nur den benutzten Objeckten (..[][Used] == true).
Oder bei einem Befehl wo du die ID vom z.B. dem ATM eingeben musst, kannst du abfragen ob
es überhaupt existiert.
Achso..
Genau die Variante benutze ich auch
Ich frage ab, ob die ID des Automaten > 0 sein muss..
Wenn man einen Automaten erstellt, hat er direkt die ID 1..
Ist also genau das Gleiche..
Trdm danke dir! -
Bin mir nicht ganz sicher, hatte diesen Fehler noch nie, aber schau dir die DICK geschrieben Zeichen an
Versuch mal einen Wert von z.B 5 rein zuschreiben.
Stimmt, habe den Wert nicht definiert..
Kann man es nicht auch ohne den Wert?PS:
Es gibt auch andere Wege nur die ATMs durchzufragen die auch vorhanden sind.
Kenne ein Paar, jedoch will ich gerne mal wissen, welche du meinst
Wäre nett, wenn du welche postest, jedoch nicht unbedingt nötig! -
Hey,
habe einen Fehler in diesem Code:
new ATM[][EATM]; // So definiert ( EATM ist ein "enum" )
for(new i = 1; i<sizeof(ATM); i++) //FehlerzeileFehler: indeterminate array size in "sizeof" expression
Möchte halt, dass er nur die Automaten durchgeht, die auch existieren..
Wenn ich jetzt z.B. anstatt "sizeof(ATM)" - "MAX_ATM" hinpacken würde, würde der ja auch unnötige Automaten durchgehen.
Man könnte ja auch abfragen, ob die ATM-ID <= 0 ist, jedoch möchte ich es lieber so haben, wenn es geht..Wo liegt der Fehler?
-
Ich weiß, der Thread ist alt, jedoch klappt bei mir die Auto-Complete-Funktion nicht.
Habe es auch schon mehrmals versucht und auch alles genauso gemacht, wie es hier steht, jedoch klappts iwi nicht
Also es kommt nichts, wenn ich etwas eingebe.. -
Ich glaube Jeffry: hat da mal was gezeigt wie es geht, glaub mit seinem Tutorial
[ SCRIPTING ] [jTuT] Interaktive Dialoge
Hatte das mal gesehen, aber nicht runtergeladen, und bis jetzt schon wieder vergessen..
Danke dir -
Wenn du den Inhalt vom Dialog in einem String abspeicherst.
Geht das nicht irgendwie anders?
Sonst muss ich mehr als 20 Strings dafür benutzen.. -
Ist es möglich, den Text eines List-Dialoges, jede auszulesen?
Das heißt:
//ID | TEXT
0 | Text01
1 | Text02
2 | Text03
3 | Text04Kann man den Text einer Zeile irgendwie auslesen?
-
Habe ich auch gerade gesehen, aber weist du ich habe das abladen System noch nicht ganz getestet.
Meine jetzige schleife:for(new i;i<sizeof(aInfo);i++){
if(!IsPlayerInRangeOfPoint(playerid, 3.0, aInfo[i][a_x], aInfo[i][a_y], aInfo[i][a_z]))continue;
aInfo[i][LoadValue] += 100;
if(aInfo[i][LoadValue] > 15000)return SendClientMessage(playerid, -1, "Der Automat hat bereits, $15.000");
}
Du hast trdm n Fehler drin..
Du erhöhst die Variable des Automaten und fragst erst danach ab, ob er schon mehr als 15000$ hat..Versuch es mal so:
ocmd:moneydrop(playerid)
{
new vehid, string[136];
if(PlayerInfo[playerid][pJob] != 22)return SendClientMessage(playerid, -1, "Du bist kein Geldlieferant.");
if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER)return SendClientMessage(playerid, -1, "Du sitzt in keinem Fahrzeug.");
new carid = GetPlayerVehicleID(playerid);
if(!IsASecuricar(carid))return SendClientMessage(playerid, -1, "Du sitzt in keinem Geldtransporter.");
for ( new i; i < sizeof(Lieferantveh); i++)
{
if(carid != Lieferantveh[i])continue;
vehid = i;
}
if(MoneyLoad[vehid] == 0)return SendClientMessage(playerid, -1, "Der Geldtransporter ist nicht beladen.");
for(new i;i<sizeof(aInfo);i++){
if(!IsPlayerInRangeOfPoint(playerid, 3.0, aInfo[i][a_x], aInfo[i][a_y], aInfo[i][a_z]))continue;
else if(aInfo[i][LoadValue] > 15000)return SendClientMessage(playerid, -1, "Der Automat hat bereits, $15.000");
aInfo[i][LoadValue] += 100;
}
new rand = 300 + random(200);
GivePlayerMoney(playerid, rand), MoneyLoad[vehid] = 0;
format(string, sizeof(string), "ERFOLGREICH: {FFFFFF}Du hast den Geldtransporter erfolgreich entladen. Verdienst: $i", rand);
return SendClientMessage(playerid, COLOR_GREEN, string);
} -
Was genau funktioniert denn nicht?
for(new i;i<sizeof(aInfo);i++){
if(!IsPlayerInRangeOfPoint(playerid, 3.0, aInfo[i][a_x], aInfo[i][a_y], aInfo[i][a_z]))continue;
aInfo[/*?*/][LoadValue] += 100; // Hier
}
if(aInfo[tmp_id][LoadValue] > 15000)return SendClientMessage(playerid, -1, "Der Automat hat bereits, $15.000");
aInfo[tmp_id][LoadValue] += 100; // Hier
Warum ist das doppelt? -
Einfach mal googlen!
[ SCRIPTING ] BOTS mit RNPC inkl. BOTS zu verfolgenden Zombies machen
[ SCRIPTING ] SAMP 0.3 Bot erstellen TUTORIAL
http://www.youtube.com/watch?v=2cTtyHqJaGkOder such dir eben was anderes aus Google, dass dir gefällt..
-
Ich kann dir nur raten, keine PVars zu benutzen, da das viel komplizierter ist ( manchmal ) und es nicht so übersichtlich ist.
-
Hey,
habe hier nen Code:
new dir:dHandle = dir_open("./scriptfiles/Accounts/");
new item[40], type;while(dir_list(dHandle, item, type))
{
if(type == FM_FILE)
{
printf("%s / Adminlevel = %d",item,dInt(item,"Admin"));
if(dInt(item,"Geld") >= 0)printf("%s hat Geld!",item);
}
}
dir_close(dHandle);
Jedoch steht immer, dass ich Adminlevel 0 habe und es kommt auch nicht die Nachricht, dass ich Geld habe..
Ich habe das ganze unter OnGameModeInit gemacht, um mit der Funktion erstmal klar zukommen, jedoch klappts nicht
Wie gesagt, er zeigt an, dass ich nichts besitze, obwohl ichs besitze..
Woran liegt das? -
Du könntest eine unsichtbare ( transparente ) Farbe definieren und
sie den Bots gebendie Bots auf der Karte mit dieser Farbe markieren ( Hier )..