[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
  • Ich hoffe es findet sich Heute morgen jemand, der mir bei dem Problem helfen kann.
    Undzwar wird bei mir das Registriert Datum zwar gespeichert, aber es wird leider bei jedem Login geupdated, dies sollte aber nicht der Fall sein. Und es wird bei den versuchen vom "Einloggen" = pVersuche das Jahr und der Monat in die Tabelle eingetragen.





    Script: http://pastebin.com/WYGHNxLj


    Hoffe es kann jemand Helfen.

    Die Kritik an anderen hat noch keinem die eigene Leistung erspart.

    – Noël Coward

  • Hab den Fehler gefunden


    Spoiler anzeigen

    new query[450 + MAX_PLAYER_NAME],Tag,Monat,Jahr,Stunde,Minute,Sekunde;
    getdate(Tag,Monat,Jahr);
    gettime(Stunde,Minute,Sekunde);
    format(query,sizeof(query),"%02d.%02d.%d - %02d:%02d:%d",Tag,Monat,Jahr,Stunde,Minute,Sekunde);
    mysql_format(DBHandle, query, sizeof(query),"UPDATE `Accounts` SET `pAlter` = '%d', `pBargeld` = '%d', `pKontoguthaben` = '%d', `pLastLogin` = '%s', `pRegDatum` = '%s', `pLeben` = '%.1f' WHERE `pName` = '%e'",Spieler[playerid][pAlter],Spieler[playerid][pBargeld],Spieler[playerid][pKontoguthaben],query,[color=#ff0000]query[/color],Spieler[playerid][pLeben],Spieler[playerid][pName]);
    mysql_tquery(DBHandle, query, "","");


    Das rote ;)


    Mit freundlichen Grüßen,
    Fabi.StaR

    Mit freundlichen Grüßen,


    Fabi.StaR :love::saint:



  • Color geht in pwn Tags nicht.
    Ich helf ihm gerade schon per PN ^^

    • Offizieller Beitrag

    mysql_format(DBHandle, query, sizeof(query),"UPDATE `Accounts` SET `pAlter` = '%d', `pBargeld` = '%d', `pKontoguthaben` = '%d', `pLastLogin` = '%s', `pLeben` = '%.1f' WHERE `pName` = '%e'",Spieler[playerid][pAlter],Spieler[playerid][pBargeld],Spieler[playerid][pKontoguthaben],query,Spieler[playerid][pLeben],Spieler[playerid][pName]);


    pRegDatum sollte nur beim Registrieren gesetzt werden.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Mir kann nicht einer sagen, was hier der Fehler ist?


    Code
    C:\Users\Chris\Desktop\Scripting\PAWN\Selfmade\gamemodes\script.pwn(256) : error 010: invalid function or declaration
    Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase
    
    
    
    
    1 Error.


    stock Move(){
    for(new r=0; r<MAX_ROWS; r++){
    new movement = random(100)+1;
    if(movement <= 25){
    for(new c=0; c<MAX_COUNT; c++){
    new this_move = random(100)+1;
    if(this_move <= 80){
    new hcnt = c + 1;
    switch(hcnt){
    new newPos;
    case 1: {newPos = NextPos(hPosition[r][Pos1]);}
    case 2: {newPos = NextPos(hPosition[r][Pos2]);}
    case 3: {newPos = NextPos(hPosition[r][Pos3]);}
    case 4: {newPos = NextPos(hPosition[r][Pos4]);}
    case 5: {newPos = NextPos(hPosition[r][Pos5]);}
    case 6: {newPos = NextPos(hPosition[r][Pos6]);}
    case 7: {newPos = NextPos(hPosition[r][Pos7]);}
    case 8: {newPos = NextPos(hPosition[r][Pos8]);}
    case 9: {newPos = NextPos(hPosition[r][Pos9]);}
    }
    }
    }
    }
    }
    return 1;
    }



    Es scheint fast so, als sei es ein Klammerfehler, denn wenn ich die letzte "}" entferne, dann bekomme ich auch keinen Error mehr, aber das kommt mir komisch vor, da die Klammern richtig gesetzt sind.
    Sogar Notepad++ hat die richtig gezählt und gedeutet. Kann mir einer sagen, warum dieser Fehler kommt? Das verwirrt mich ein wenig :D

  • 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?

  • ErikSon
    Das wird wohl an deiner if-abfrage liegen
    zum einen vergleicht man die bit-werte daher nutze den Bitoperator &.


    Aber darin besteht nicht das Problem sondern der wert mit dem KEY_ANALOG_DOWN definiert wurde ist eventuell nicht richtig oder das Callback wird nicht aufgerufen.


    Daher kannst du ja ein printf rein setzen in das Callback und dir newkeys ausgeben. Dann kennst du den Tastenwert vom Numpad 2 dieses kannst du ja nutzen zum vergleichen.



    ahja


    if(sscanf(params,"dD",color[0],color[1]))


    D ist ein optionaler Specifer bedeutet du kannst color[1] angeben oder nicht es fehlt dort lediglich die Setzung eines Defaultwertes


    if(sscanf(params,"dD(-1)",color[0],color[1]))

  • Das wird wohl an deiner if-abfrage liegen
    zum einen vergleicht man die bit-werte daher nutze den Bitoperator &.


    Aber darin besteht nicht das Problem sondern der wert mit dem KEY_ANALOG_DOWN definiert wurde ist eventuell nicht richtig oder das Callback wird nicht aufgerufen.


    Daher kannst du ja ein printf rein setzen in das Callback und dir newkeys ausgeben. Dann kennst du den Tastenwert vom Numpad 2 dieses kannst du ja nutzen zum vergleichen.


    Habe ich beides versucht, klappt jedoch nicht..
    Hier nochmal Codeausschnitt:
    else if(newkeys & KEY_ANALOG_DOWN) //Numpad 2 (Wird nicht aufgerufen)
    {
    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);
    printf("N2");
    return StopDynamicObject(Objekt[obj][o_obj]);
    }
    else if(newkeys & KEY_ANALOG_LEFT) //Numpad 4 (Wird aufgerufen)
    {
    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);
    printf("N4");
    return StopDynamicObject(Objekt[obj][o_obj]);
    }

  • Habe ich beides versucht, klappt jedoch nicht..
    Hier nochmal Codeausschnitt:


    Ich glaube genau lesen ist nicht so deine Stärke ?


    Das wird wohl an deiner if-abfrage liegen
    zum einen vergleicht man die bit-werte daher nutze den Bitoperator &.


    Aber darin besteht nicht das Problem

    Daher kannst du ja ein printf rein setzen in das Callback und dir newkeys ausgeben. Dann kennst du den Tastenwert vom Numpad 2 dieses kannst du ja nutzen zum vergleichen.

  • Die Pfeiltasten + Numpad 2/8 werden nicht erkannt, also es wird nichts in der Konsole ausgegeben..
    Bei Numpad 2/8 steht folgendes im Wiki:

    Zitat

    Only detected when "JOYPAD" configuration is selected for controller.


    Geht das nicht auch anders?
    Die anderen Tasten, wie z.B. Z/H/N werden erkannt, jedoch kann ich die Tasten in meinem System nicht nutzen..
    Und warum funktionieren die Pfeiltasten/W/A/S/D nicht, also warum werden die nicht erkannt und ausgegeben?

  • Und warum funktionieren die Pfeiltasten/W/A/S/D nicht, also warum werden die nicht erkannt und ausgegeben?


    Diese funktionieren jedoch musst du das über OnPlayerUpdate lösen mit der Funktion GetPlayerKey eventuell erkennst du darüber auch die Restlichen Numpad-Tasten.


    Warum ist das so ?
    Das liegt daran das dieses Callback sonst zu oft aufgerufen werden würde(könnte zu laggs führen), daher wurden nur bestimmte Tasten verwendet.

  • So Leute.... ich glaube ja ich bin ein Bisschen dumm gerade, aber ich finde einfach meinen Fehler nicht >.>
    CreateGroup(ID, Name[])
    {
    new i = 0;
    while(i != MAX_GROUPS)
    {
    if(!Group[i][gActive])
    {
    Group[i][gActive] = true;
    /////////////////////////////////////
    format(Group[i][gName], sizeof (Group[i][gName]), Name);
    /////////////////////////////////////
    new pName[MAX_PLAYER_NAME];
    GetPlayerName(ID, pName, sizeof pName);
    format(Group[i][gLeaderName], sizeof Group[i][gLeaderName],pName);
    break;
    }
    ++i;
    }
    return 1;
    }
    Error in der Format Zeile die einzeln steht:

    Code
    error 032: array index out of bounds (variable "Group")
    error 001: expected token: "]", but found "-identifier-"
    warning 215: expression has no effect
    error 001: expected token: ";", but found "]"
    fatal error 107: too many error messages on one line


    Hier sonst noch der Enum dazu:
    #define MAX_GROUPS 50
    enum groups{
    gMemberMax = 15,
    gName[20],
    gLeaderName[MAX_PLAYER_NAME],
    bool:gActive = false
    }
    new Group[MAX_GROUPS][groups];

  • sizeof (Group[i][gName])
    Das geht nicht. Ließ dir durch wie enums wirklich funktionieren, dann weisst auch warum.
    Trag an Stelle von sizeof (Group[i][gName]) jeweils direkt MAX_PLAYER_NAME ein.
    gMemberMax = 15,
    Das ist ebenfalls nicht richtig. "Ließ dir durch wie enums wirklich funktionieren, dann weisst auch warum."
    Den Wert auf 15 setzen musst du direkt an der Variable, nicht im enum.
    Sprich: Group[0..MAX_GROUPS-1][gMemberMax] = 15
    Gleich gilt auch für bool:gActive = false

    Spoiler anzeigen
    bool:gActive = false
    Das geht zwar, allerdings nicht weshalb du denkst. Durch sonderliche Zufälle klappt es trotzdem


    //Edit: Rechtschreibung :pinch:

    Einmal editiert, zuletzt von Goldkiller ()

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