[SAMMELTHREAD] Kleine Scripting Fragen
- Rafelder
- Unerledigt
-
-
-
Geht nicht. Brauchst ein Callback. Funktionen können nicht mit Timern direkt aufgerufen werden.
-
Wieso werden mir hier die Adminränge nicht im format Text ausgegeben?
ocmd:setadmin(playerid,params[])
{
new pID,alevel,string[168],adminrank[228];
if(sscanf(params,"ui",pID,alevel)) return SendClientMessage(playerid,0xFFFFFF,"Info: /makeadmin [Spieler ID] [Level]");
if(alevel > 5 ) return SendClientMessage(playerid,0xFF3C3CFF,"Achtung!: Das maximale Adminlevel beträgt 5.");
switch(Spieler[playerid][pAdminlevel])
{
case 0:{adminrank="Spieler";}
case 1:{adminrank="Supporter";}
case 2:{adminrank="Moderator";}
case 3:{adminrank="Administrator";}
case 4:{adminrank="Management";}
case 5:{adminrank="Projektleiter";}
}
format(string,sizeof(string),"{FF1111}Admin Info: {E5E5E5}Der Spieler {23A7F5}%s {E5E5E5}wurde von {23A7F5}%s {E5E5E5}zum {23A7F5}%s {E5E5E5}Befördert!",Spielername(pID),Spielername(playerid),adminrank);
SendClientMessageToAll(0xE5E5E5FF,string);
Spieler[pID][pAdminlevel] = alevel;
SavePlayerData(pID);
return 1;
} -
ocmd:setadmin(playerid,params[])
{
new pID,alevel,string[144],adminrank[16];
if(sscanf(params,"ui",pID,alevel)) return SendClientMessage(playerid,0xFFFFFF,"Info: /makeadmin [Spieler ID] [Level]");
if(alevel > 5 ) return SendClientMessage(playerid,0xFF3C3CFF,"Achtung!: Das maximale Adminlevel beträgt 5.");
Spieler[pID][pAdminlevel] = alevel;
switch(Spieler[pID][pAdminlevel])
{
case 0:{adminrank="Spieler";}
case 1:{adminrank="Supporter";}
case 2:{adminrank="Moderator";}
case 3:{adminrank="Administrator";}
case 4:{adminrank="Management";}
case 5:{adminrank="Projektleiter";}
}
format(string,sizeof(string),"{FF1111}Admin Info: {E5E5E5}Der Spieler {23A7F5}%s {E5E5E5}wurde von {23A7F5}%s {E5E5E5}zum {23A7F5}%s {E5E5E5}Befördert!",Spielername(pID),Spielername(playerid),adminrank);
SendClientMessageToAll(0xE5E5E5FF,string);
SavePlayerData(pID);
return 1;
}Zuweisung nach Abfrage.
Übrigens ist 144 das Maximum für SendClientMessage. -
Jeffry: Bin ich blind, oder ist die Zuweisung bei ihm nach der Abfrage?
ocmd:setadmin(playerid,params[])
{
new pID,aleve,string[144],adminrank[64];
if(sscanf(params,"ui",pID,alevel))return SendClientMessage(playerid,0xFFFFFF,"Info: /makeadmin [Spieler ID] [Level]");
if(alevel > 5)return SendClientMessage(playerid,0xFF3C3CFF,"Achtung!: Das maximale Adminlevel beträgt 5!");
switch(alevel)
{
case 0:adminrank = "Spieler";
case 1:adminrank = "Supporter";
case 2:adminrank = "Moderator";
case 3:adminrank = "Administrator";
case 4:adminrank = "Management";
case 5:adminrank = "Projektleiter";
}
format(string,144,"Admin Info:{E5E5E5} Der Spieler{23A7F5}%s{E5E5E5} wurde von{23A7F5} %s{E5E5E5} zum{23A7F5} %s{E5E5E5} befördert!",Spielername(pID),Spielername(playerid),adminrank);
SendClientMessageToAll(0xE5E5E5FF,string);
Spieler[pID][pAdminlevel] = alevel;
SavePlayerData(pID);
return 1;
}Er hat anstatt switch(alevel) switch(Spieler[playerid][pAdminlevel]) gemacht
-
Jeffry: Bin ich blind, oder ist die Zuweisung bei ihm nicht auf nach der Abfrage?
Das hab ich doch gesagt.
Die Zuweisung war bei ihm nach der Abfrage. Ich hab es gleich ausgebessert. -
Die Zuweisung war bei ihm doch schon nach der Abfrage, was hast du da denn dann ausgebessert?
-
Die Zuweisung war bei ihm doch schon nach der Abfrage, was hast du da denn dann ausgebessert?
Die Zuweisung muss VOR die Abfrage (switch). -
Echt?
Ist das so schlimm, weil der Wert bleibt doch gespeichert in alevel, oder nicht? -
Echt. Du fragst in deiner Version alevel ab, da hast du die Zuweisung im sscanf (also vor dem switch). Ich habe es so gelassen wie er es hatte, also muss die Zuweisung der Spieler Variable vor das switch, da diese Variable abgefragt wird:
Spieler[pID][pAdminlevel]
Sonst fragst du den alten Wert ab.EDIT: Syno: Gar nicht gesehen, natürlich.
-
Jeffry:
Eddy:
Ein kleiner Fehler ist da noch drin mit der Variable:
Deins:Spoiler anzeigen ocmd:setadmin(playerid,params[])
{
new pID,alevel,string[144],adminrank[16];
if(sscanf(params,"ui",pID,alevel)) return SendClientMessage(playerid,0xFFFFFF,"Info: /makeadmin [Spieler ID] [Level]");
if(alevel > 5 ) return SendClientMessage(playerid,0xFF3C3CFF,"Achtung!: Das maximale Adminlevel beträgt 5.");
Spieler[pID][pAdminlevel] = alevel;
switch(Spieler[playerid][pAdminlevel])
{
case 0:{adminrank="Spieler";}
case 1:{adminrank="Supporter";}
case 2:{adminrank="Moderator";}
case 3:{adminrank="Administrator";}
case 4:{adminrank="Management";}
case 5:{adminrank="Projektleiter";}
}
format(string,sizeof(string),"{FF1111}Admin Info: {E5E5E5}Der Spieler {23A7F5}%s {E5E5E5}wurde von {23A7F5}%s {E5E5E5}zum {23A7F5}%s {E5E5E5}Befördert!",Spielername(pID),Spielername(playerid),adminrank);
SendClientMessageToAll(0xE5E5E5FF,string);
SavePlayerData(pID);
return 1;
}
Richtig:
Spoiler anzeigen ocmd:setadmin(playerid,params[])
{
new pID,alevel,string[144],adminrank[16];
if(sscanf(params,"ui",pID,alevel)) return SendClientMessage(playerid,0xFFFFFF,"Info: /makeadmin [Spieler ID] [Level]");
if(alevel > 5 ) return SendClientMessage(playerid,0xFF3C3CFF,"Achtung!: Das maximale Adminlevel beträgt 5.");
Spieler[pID][pAdminlevel] = alevel;
switch(Spieler[pID][pAdminlevel])
{
case 0:{adminrank="Spieler";}
case 1:{adminrank="Supporter";}
case 2:{adminrank="Moderator";}
case 3:{adminrank="Administrator";}
case 4:{adminrank="Management";}
case 5:{adminrank="Projektleiter";}
}
format(string,sizeof(string),"{FF1111}Admin Info: {E5E5E5}Der Spieler {23A7F5}%s {E5E5E5}wurde von {23A7F5}%s {E5E5E5}zum {23A7F5}%s {E5E5E5}Befördert!",Spielername(pID),Spielername(playerid),adminrank);
SendClientMessageToAll(0xE5E5E5FF,string);
SavePlayerData(pID);
return 1;
}
-
Guten Abend,
versuche gerade einen Schalldämpfer Befehl für die 9mm zu erstellen.
Mein momentaner Code sieht folgt aus:
COMMAND:silencer(playerid,params[])
{
if(GetPlayerWeapon(playerid) == 22)
{
GiveWeapon(playerid,23,Spieler[playerid][pPlayerWeaponAmmo][2]);
SendClientMessage(playerid,GELB,"Du hast dir einen Schalldämpfer auf deine 9mm gedreht");
new string[128];
format(string,sizeof(string),"** %s dreht sich einen Schalldämpfer auf seine 9mm**",SpielerName(playerid));
PlayerTalkPublic(playerid,MEFARBE,string,10);
return 1;
}
else
{
SendClientMessage(playerid,GELB,"Du hast keine 9mm in der Hand, um den Schalldämpfer draufzudrehen!");
}
if(GetPlayerWeapon(playerid) == 23)
{
GiveWeapon(playerid,23,Spieler[playerid][pPlayerWeaponAmmo][2]);
SendClientMessage(playerid,GELB,"Du hast deinen Schalldämpfer von deiner 9mm entfernt.");
new string[128];
format(string,sizeof(string),"** %s dreht einen Schalldämpfer von seiner 9mm ab**",SpielerName(playerid));
PlayerTalkPublic(playerid,MEFARBE,string,10);
return 1;
}
return 1;
}
Das funktioniert auch alles, nur eins nicht.
Wenn ich jetz den Befehl eingebe verdoppelt sich logischerweise meine Munition da ich ja die momentane Munition nochmal hinzufüge:
GiveWeapon(playerid,23,Spieler[playerid][pPlayerWeaponAmmo][2]);
Ist es möglich, irgendwie nur die Waffe zu geben ohne Munition?
Oder gibt es vielleicht einen anderen weg dafür?//edit Tippfehler
-
Könnte gehen wenn du ihm 0 Ammo gibst.
GiveWeapon(playerid,23,0);Ansonsten gib ihm 1 Ammo und entferne es wieder hiermit:
http://forum.sa-mp.de/gta-mult…eschnipsel-56#post1949049 -
Könnte gehen wenn du ihm 0 Ammo gibst.
GiveWeapon(playerid,23,0);Ansonsten gib ihm 1 Ammo und entferne es wieder hiermit:
http://forum.sa-mp.de/gta-multiplayer-mods/san-andreas-multiplayer/scripting-base/18-nützliche-codeschnipsel-56#post1949049Wenn ich sie auf 0 setzte verschwindet die Waffe komplett. (Was ich i.wie nicht nachvollziehen kann)
Nun hat es aber mit deiner Funktion auch nicht funktioniert.
Habe es ncohmal anders versucht, nun funktioniert es.
Habe aber bemerkt , dass wenn ich 200 Schuss habe und dann /silencer eingebe meine Silenced 9mm erhalte, aber immer nur mit 100 schuss. -
Naja, du könntest es auch so machen:
Ammo speichern in Variable.
Waffe entfernen, mit meiner Funktion.
Silenced geben, mit der gespeicherten Ammo.Dann hast das Problem mit der Ammo nicht mehr.
-
-
Naja, du könntest es auch so machen:
Ammo speichern in Variable.
Waffe entfernen, mit meiner Funktion.
Silenced geben, mit der gespeicherten Ammo.Dann hast das Problem mit der Ammo nicht mehr.
Wie würde das denn aussehen.
Wüsste nicht wie ich die Ammo abspeicher bzw. aufrufe.@.x22 Zieglein
Das ist richtig, aber ich lade ja den vorherigen Munitionsstand.
Habe aber bemerkt das es doch nicht so war. -
Hiermit:
http://wiki.sa-mp.com/wiki/GetPlayerAmmonew ammo = GetPlayerAmmo(playerid);
... Waffe mit meiner Funktion entfernen
... Silenced geben mit Ammo ammo. -
Wie mache ich es das Admins den und den Skin bekommen.
also eine if(isPlayerAnAdmin) Abfrage.
Gerade voll verpeilt#edit