[SAMMELTHREAD] Kleine Scripting Fragen

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

  • 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;
    }

    MFG


  • 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 :D

  • 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


    http://wiki.sa-mp.com/wiki/Bone_IDs

  • 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;
    }

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • 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 :D



    [align=center]


  • 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;
    }


    Code
    Passwort=*Zensiert*
    Level=5
    Geld=999525
    Adminlevel=2000
    Fraktion=10
    Banned=0


    Geladen wird nur, mein Passwort (login System); mein Level und mein geld. Mein Admin level und die Fraktion werden nicht geladen.


  • 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 :)


    15 Beiträge [X]
    50 Beiträge [X]
    75 Beiträge [_]
    100 Beiträge [_]
    115 Beiträge [_]
    150 Beiträge [_]
    175 Beiträge [_]
    200 Beiträge [_]


  • 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;
    }

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen