ocmd oder strcmp ?
ocmd
ocmd oder strcmp ?
ocmd
ocmd:spawnplayer(playerid,params[])
{
new pID, string[128];
if(sscanf(params,"us",pID))return SendClientMessage(playerid,Rot,"SERVER:/pm [ID]");
format(string,sizeof(string),"%s hat dich gespawnt ",SpielerName(playerid));
SendClientMessage(pID,Weiss,string);
SpawnPlayer(pID);
return 1;
}
Alles anzeigenWo muss dies hier rein?
Hab leider null Ahnung
dcmd_a(playerid,params[]) { if(Player[playerid][pAdmin] >= 1) { new atext[256]; if(sscanf(params,"s",atext)){ return SendClientMessage(playerid,COLOR_HELLBLUE,"[Benutzung]{A8A8A8} /a [Text]"); } new name[MAX_PLAYER_NAME]; new string[128]; GetPlayerName(playerid,name,sizeof(name)); format(string,sizeof(string),"** [%d] Admin %s: %s **" ,Player[playerid][pAdmin],name,atext); SendAdminMessage(COLOR_HELLBLUE,string); } else SendClientMessage(playerid,COLOR_RED,"[Fehler]{A8A8A8} Sie besitzen nicht die nötige Einstufung zur Ausführung dieses Befehls!"); return 1;}
dcmd_a(playerid,params[])
{
if(Player[playerid][pAdmin] >= 1) {
new atext[256];
if(sscanf(params,"s",atext)){
return SendClientMessage(playerid,COLOR_HELLBLUE,"[Benutzung]{A8A8A8} /a [Text]");
}
new name[MAX_PLAYER_NAME];
new string[128];
GetPlayerName(playerid,name,sizeof(name));
format(string,sizeof(string),"** [%d] Admin %s: %s **" ,Player[playerid][pAdmin],name,atext);
SendAdminMessage(COLOR_HELLBLUE,string);
} else SendClientMessage(playerid,COLOR_RED,"[Fehler]{A8A8A8} Sie besitzen nicht die nötige Einstufung zur Ausführung dieses Befehls!");
return 1;
}
dcmd_a(playerid,params[]){
if(Player[playerid][pAdmin] >= 1)retrun SendClientMessage(playerid,COLOR_RED,"[Fehler]{A8A8A8} Sie besitzen nicht die nötige Einstufung zur Ausführung dieses Befehls!");
new atext[128];
if(sscanf(params,"s[128]",atext))return SendClientMessage(playerid,COLOR_HELLBLUE,"[Benutzung]{A8A8A8} /a [Text]");
new name[MAX_PLAYER_NAME],string[144];
GetPlayerName(playerid,name,sizeof(name));
format(string,sizeof(string),"** [%d] Admin %s: %s **" ,Player[playerid][pAdmin],name,atext);
SendAdminMessage(COLOR_HELLBLUE,string);
return 1;
}
Hier bitte du verwendest doch bestimmt das sscanf plugin dahermusst du die string länge des parameter mit angeben
SendClientMessage fasst ganze 144 Zeichen
mooin, ich weiß ich nerv schon, aber trzd. nomma:
ocmd:produkte(playerid,params[])
{
new MSG[200], Anzahl, Parameter[20], IstBeladenMitProds[MAX_PLAYERS];
if(IsPlayerInAnyVehicle(playerid))
{
if(sscanf(params, "si", Parameter , Anzahl))return SendClientMessage(playerid, FARBE_GRAU, "Fehler: /produkte [Get/Deliver] [Anzahl]");
for(new b = 1; b < MAX_ANZAHL_AN_BIZZ; b++)// b = 1 lassen wir wollen kein Biz miz ID 0 :D
{
if(!strcmp(Parameter, "Get", true) && Anzahl < 501)
{
format(MSG, 200, "Dein Car hat %i Produkte aufgeladen.", Anzahl);
SendClientMessage(playerid, FARBE_HELLBLAU, MSG);
IstBeladenMitProds[playerid] = Anzahl;
return 1;
}
if(!strcmp(Parameter, "Deliver", true) && IstSpielerBeiBiz(playerid) && BizInfo[b][bKasse] >= Anzahl * 750 && BizInfo[b][bProds] < 500 && Anzahl + BizInfo[b][bProds] <= 500)
{
GivePlayerMoney(playerid, Anzahl * 750);
format(MSG, 200, "Du hast die Produkte abgeliefert. Dein Lohn: %i$.", Anzahl * 750);
SendClientMessage(playerid, FARBE_HELLBLAU, MSG);
BizInfo[b][bKasse] -= Anzahl * 750;
BizInfo[b][bProds] += Anzahl;
IstBeladenMitProds[playerid] = 0;
return 1;
}
}
}
return 1;
}
Der Deliver geht garnicht, Get klappt..
LG
edit 1 und 2 3fehler beim pawn code XD
dan kannst du dir sicher sein das es an der deliver abfrage liegt
das dort ihrgend eine abfrage nicht erfüllt wird
new bool:no;
if(!strcmp(Parameter, "Deliver", true)){
for(new b = 1; b < MAX_ANZAHL_AN_BIZZ; b++){
if(IstSpielerBeiBiz(playerid) && BizInfo[b][bKasse] >= (Anzahl * 750) && BizInfo[b][bProds] < 500 && (Anzahl + BizInfo[b][bProds]) <= 500){
GivePlayerMoney(playerid, Anzahl * 750);
format(MSG, 200, "Du hast die Produkte abgeliefert. Dein Lohn: %i$.", Anzahl * 750);
SendClientMessage(playerid, FARBE_HELLBLAU, MSG);
BizInfo[b][bKasse] -= Anzahl * 750;
BizInfo[b][bProds] += Anzahl;
IstBeladenMitProds[playerid] = 0;
no =false;
break;
}else no =true;
}
}
if(no)return SendClientMessage(playerid,-1,"Das bist erfüllt nicht die Vorraussetzungen!");
ich hab es mal umstrukturiert und die for schleife ausserhalb der abfrage !. Dafür gehörst du eingeknastet für die vergwaltigst
deines skriptes.
Ps: benutz auch nicht so riesige strings du kannst maximal nur 144 Zeichen mit SendClientMessage nutzen
Mal eine Frage.
Bin gerade drüber ein Rücken Mod System für jeweilige Waffen zu erstellen (wie bei dem Rücken Mod).
Bisher werden die Waffen auch am Rücken angezeigt.
Wie bekomme ich aber die Position für die Hüfte des Spielers raus ?
Bzw. hat das sogar jemand diese Position?
Mal eine Frage.
Bin gerade drüber ein Rücken Mod System für jeweilige Waffen zu erstellen (wie bei dem Rücken Mod).
Bisher werden die Waffen auch am Rücken angezeigt.
Wie bekomme ich aber die Position für die Hüfte des Spielers raus ?
Bzw. hat das sogar jemand diese Position?
kannst du auch selbst raus bekommen
EditAttachedObject
http://wiki.sa-mp.com/wiki/EditAttachedObject
in den editormodus gehen das ganze anpassen
und die daten per printf über OnPlayerEditAttachedObject ausgeben lassen
http://wiki.sa-mp.com/wiki/OnPlayerEditAttachedObject
Jedoch hat SetPlayerAttachedObject als parameter die knochen
http://wiki.sa-mp.com/wiki/SetPlayerAttachedObject
Ich danke dir.
Die Links hab ich gesucht
Wieso lädt er IG nicht das Adminlevel, Geld und die Fraktion? Das Level wird geladen, mehr nicht.
stock LoadAccount(playerid)
{
SetPlayerScore(playerid,dini_Int(Spielerdatei[playerid],"Level"));
GivePlayerMoney(playerid,dini_Int(Spielerdatei[playerid],"Geld"));
SetPVarInt(playerid,"Adminlevel",dini_Int(Spielerdatei[playerid],"Adminlevel"));
SetPVarInt(playerid,"Fraktion",dini_Int(Spielerdatei[playerid],"Fraktion"));
SetPVarInt(playerid,"Banned",dini_Int(Spielerdatei[playerid],"Banned"));
if(GetPVarInt(playerid,"Banned")==1)
{
SendClientMessage(playerid,COLOR_ADMCMD,"Du wurdest von Server gebannt. Für weitere Infos wende dich bitte an einen Admin.");
Kick(playerid);
}
SetPVarInt(playerid,"loggedin",1);
return 1;
}
Alles anzeigenWieso lädt er IG nicht das Adminlevel, Geld und die Fraktion? Das Level wird geladen, mehr nicht.
stock LoadAccount(playerid)
{
SetPlayerScore(playerid,dini_Int(Spielerdatei[playerid],"Level"));
GivePlayerMoney(playerid,dini_Int(Spielerdatei[playerid],"Geld"));
SetPVarInt(playerid,"Adminlevel",dini_Int(Spielerdatei[playerid],"Adminlevel"));
SetPVarInt(playerid,"Fraktion",dini_Int(Spielerdatei[playerid],"Fraktion"));
SetPVarInt(playerid,"Banned",dini_Int(Spielerdatei[playerid],"Banned"));
if(GetPVarInt(playerid,"Banned")==1)
{
SendClientMessage(playerid,COLOR_ADMCMD,"Du wurdest von Server gebannt. Für weitere Infos wende dich bitte an einen Admin.");
Kick(playerid);
}
SetPVarInt(playerid,"loggedin",1);
return 1;
}
Ich würde behaupten, dass du die PVar's und die Definition in der *.ini-Datei verschieden angeben musst (sprich statt PVar "AdminLevel" nimmst du "pAdminLevel").
Ungetestet und nur behauptet. Ich finde nämlich sonst keinen Fehler..
Hey Leute..Ich hab da mal so ne Frage..Kann ich oben im Script ein new; oder etwas ähnliches setzen, worein ich dann Werte bzw. Floats setzen kann?
Ich will das dann für Bankautomaten benutzen, es is ja hohl wenn man immer if(IsPlayerInRangeOfPoint(blabla,blabla,blabla,blabla));
{
ShowPlayerDialog(playerid,DIALOG_BANK,DIALOG_STYLE_LIST(blabla,blabla);
return 1;
} usw. eben für jeden einzelnen Punkt an einem Automat macht.
Geht das nicht auch einfacher zum Beispiel: if(IsPlayerInRangeOfPoint(ATM));
{
ShowPlayerDialog(playerid,DIALOG_BANK,DIALOG_STYLE_LIST(blabla,blabla);
return 1;
}
Danke im Vorraus..Ich hoffe ihr versteht meine Frage
Alles anzeigenHey Leute..Ich hab da mal so ne Frage..Kann ich oben im Script ein new; oder etwas ähnliches setzen, worein ich dann Werte bzw. Floats setzen kann?
Ich will das dann für Bankautomaten benutzen, es is ja hohl wenn man immer if(IsPlayerInRangeOfPoint(blabla,blabla,blabla,blabla));
{
ShowPlayerDialog(playerid,DIALOG_BANK,DIALOG_STYLE_LIST(blabla,blabla);
return 1;
} usw. eben für jeden einzelnen Punkt an einem Automat macht.
Geht das nicht auch einfacher zum Beispiel: if(IsPlayerInRangeOfPoint(ATM));
{
ShowPlayerDialog(playerid,DIALOG_BANK,DIALOG_STYLE_LIST(blabla,blabla);
return 1;
}
Danke im Vorraus..Ich hoffe ihr versteht meine Frage
du kannst IsPlayerInRangeOfPoint hooken und dort dein code einfügen.
Jedoch was du genau willst weiß ich jetzt immer noch nicht.
wenn du es dir vermeinden willst immer bei einem command
if(IsPlayerInRangeOfPoint(blabla,blabla,blabla,blabla));
else
if(IsPlayerInRangeOfPoint(blabla,blabla,blabla,blabla));
else
if(IsPlayerInRangeOfPoint(blabla,blabla,blabla,blabla));
.....
zu benutzen um den dialog aufzurufen mach dir doch eine array und geh mit einer forschleife durch
somit kannst du auch ganz einfach atms mit einer zeile hinzufügen
ein ausschnitt aus meinem einen skript
enum ATM
{
Float:X,
Float:Y,
Float:Z,
Float:Rz,
}
new ATMInfo[MAX_ATMS][ATM] ={
{158.7676, -1949.1267,3.3820,120.0061}
};
CMD:atm(playerid, params[])
{
new bool:no;
for(new i; i < MAX_ATMS; ++i){
if(IsPlayerInRangeOfPoint(playerid,4.0,ATMInfo[i][X], ATMInfo[i][Y], ATMInfo[i][Z])){
ShowPlayerDialog(playerid, DIALOG_ATM, DIALOG_STYLE_LIST,"ATM", "Kontostand\nEinzahlen\nAuszahlen\nÜberweisen", "Auswählen", "Beenden");
no=false;
break;
}
else no=true;
}
if(no)return SendClientMessage(playerid,-1,"Du bist nicht in der nähe eines Atms");
return 1;
}
Ich würde behaupten, dass du die PVar's und die Definition in der *.ini-Datei verschieden angeben musst (sprich statt PVar "AdminLevel" nimmst du "pAdminLevel").
Ungetestet und nur behauptet. Ich finde nämlich sonst keinen Fehler..
Das heißt? Wie sollte ich es umändern? (ich steh grad total auf ner langen leitung)
PS: Soll ich mal den Stock SpielerSpeichern(playerid) hochladen?
Das heißt? Wie sollte ich es umändern? (ich steh grad total auf ner langen leitung)
PS: Soll ich mal den Stock SpielerSpeichern(playerid) hochladen?
Nee, ich mein das so:
SetPlayerScore(playerid,dini_Int(Spielerdatei[playerid],"Level"));
GivePlayerMoney(playerid,dini_Int(Spielerdatei[playerid],"Geld"));
SetPVarInt(playerid,"pAdminlevel",dini_Int(Spielerdatei[playerid],"Adminlevel"));
SetPVarInt(playerid,"pFraktion",dini_Int(Spielerdatei[playerid],"Fraktion"));
SetPVarInt(playerid,"pBanned",dini_Int(Spielerdatei[playerid],"Banned"));
danke ... ich geh es sofort ma testen
Housefrau: Es ist immernoch der gleich Error ...
Ich schick dir ma den Stock mit speichern und die File
stock SpielerSpeichern(playerid)
{
if(GetPVarInt(playerid,"loggedin")==1)
{
new Spielerdatei[64];
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof(name));
format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
dini_IntSet(Spielerdatei[playerid],"Level",GetPlayerScore(playerid));
dini_IntSet(Spielerdatei[playerid],"Geld",GetPlayerMoney(playerid));
dini_IntSet(Spielerdatei[playerid],"Adminlevel",GetPVarInt(playerid,"Adminlevel"));
dini_IntSet(Spielerdatei[playerid],"Fraktion",GetPVarInt(playerid,"Fraktion"));
dini_IntSet(Spielerdatei[playerid],"Banned",GetPVarInt(playerid,"Banned"));
}
return 1;
}
Geladen wird nur, mein Passwort (login System); mein Level und mein geld. Mein Admin level und die Fraktion werden nicht geladen.
Wo definierst du "Spielerdatei[playerid]" ?
Und in welchem Public führst du den jeweiligen Stock aus (OnDialogResponse, OnPlayerSpawn, ...) ?
ocmd:create(playerid,params[])
{
New Float:Posx,Float:Posx,Float:Posz;
GetPlayerPos(playerid,Posx,Posy,Posz);
Jz diesen Pickup definieren mit Pick[0]
Pick[0] = CreatePickup(1234,0,posx,posy,posz,-1);
}
dann wenn man diesen Befehl fürs zweite mal benutzt dass dan der Pickup mit Pick[1] definiert wird und immer so weiter , wenn es funktioniert bitte helfen
Alles anzeigen
ocmd:create(playerid,params[])
{
New Float:Posx,Float:Posx,Float:Posz;
GetPlayerPos(playerid,Posx,Posy,Posz);
Jz diesen Pickup definieren mit Pick[0]
Pick[0] = CreatePickup(1234,0,posx,posy,posz,-1);
}
dann wenn man diesen Befehl fürs zweite mal benutzt dass dan der Pickup mit Pick[1] definiert wird und immer so weiter , wenn es funktioniert bitte helfen
eine globalevriabel erstellen und diese hochzählen lassen. zu dem benutzt man um was neues zu definieren ein new klein geschrieben
und du musst den wert 1 zurück geben return 1;.
Zu dem benutz mehr arrays da diese weniger memory verbrauchen. Sollte dies die einzigsten pickups auf dem Server sind kannst du sogar solang die anzahl nicht über 256
geht ein char in der array benutzen um sogar die memory noch mehr zu drücken und man benutz nun nur 8 bytes pro reihe.
#define MAX_PICK 100
new Pick[MAX_PICK], PickID;
ocmd:create(playerid,params[])
{
if(PickID >= MAX_PICK)return SendClientMessage(playerid,-1,"Du kannst keine Pickups mehr erstellen");
new Float:Pos[3];
GetPlayerPos(playerid,Pos[0],Pos[1],Pos[2]);
Pick[PickID] = CreatePickup(1234,0,Pos[0],Pos[1],Pos[2],-1);
PickID++;
return 1;
}