Beiträge von Jeffry

    Zitat

    [20:12:01] Loading plugin: mysql
    [20:12:01] Failed.


    Ich gehe davon aus, dass die mysql.dll im plugins Ordner ist.
    Der Fehler sind irgendwelche fehlende Dateien, das können entweder die Microsoft Visual C++ Installationen sein, oder die .NET Frameworks (ab 3.5). Welche direkt das sind kann ich dir nicht sagen, da das komischerweise nicht bei allen gleich ist.


    Hier die Links für MSVC++ (je nach dem welches/welche zu brauchst):
    http://www.microsoft.com/de-de/download/details.aspx?id=5555
    http://www.microsoft.com/de-de/download/details.aspx?id=29
    http://www.microsoft.com/en-us…oad/details.aspx?id=10986


    Das sind, zumindest in etwa, die die ich drauf habe. Da gibt es so viele Versionen, da blickt niemand mehr durch.
    Immer nach der Installation wieder testen ob es geht.

    Parameter 5 muss ein Array sein (String).
    stock SaveZones()
    {
    new str[5];
    for(new zid=0; zid<sizeof(Zonen);zid++)
    {
    format(str, sizeof(str), "%d", zid);
    mysql_SetInt("gangwar","Owner",Zonen[zid][gOwner],"Zone",str);
    mysql_SetInt("gangwar","Aktiv",Zonen[zid][gOn],"Zone", str);
    mysql_SetInt("gangwar","Stand1",Zonen[zid][gStand1],"Zone", str);
    mysql_SetInt("gangwar","Stand2",Zonen[zid][gStand2],"Zone", str);
    mysql_SetInt("gangwar","Angreifer",Zonen[zid][gAngreifer],"Zone", str);
    mysql_SetInt("gangwar","Zeit",Zonen[zid][gZeit],"Zone", str);
    mysql_SetInt("gangwar","Kasse",Zonen[zid][gKasse],"Zone", str);
    mysql_SetInt("gangwar","Typ",Zonen[zid][gTyp],"Zone", str);
    mysql_SetInt("gangwar","Capture",Zonen[zid][capture_cd],"Zone", str);
    mysql_SetFloat("gangwar","MinX",Zonen[zid][gMinX],"Zone", str);
    mysql_SetFloat("gangwar","MinY",Zonen[zid][gMinY],"Zone", str);
    mysql_SetFloat("gangwar","MaxX",Zonen[zid][gMaxX],"Zone", str);
    mysql_SetFloat("gangwar","MaxY",Zonen[zid][gMaxY],"Zone", str);
    }
    return 1;
    }

    ICy.: Ein return in einer Schleife ohne eine if-Abfrage? Sinn? :huh:
    Außerdem solltest du dir das wieder abgewöhnen, alle Deklarationen in den for-Schleifen-Kopf zu schreiben, das ist eine ganz schlechte Angewohnheit und stört den Lesefluss.


    Enum:
    enum leichen{
    Float:l_x,
    Float:l_y,
    Float:l_z,
    pickup,
    Text:textLabel
    }
    new leichenInfo[MAX_PLAYERS][leichen];


    OnPlayerDeath:
    GetPlayerPos(playerid,leichenInfo[playerid][l_x],leichenInfo[playerid][l_y],leichenInfo[playerid][l_z]);
    leichenInfo[playerid][pickup] = CreatePickup(1254,1,leichenInfo[playerid][l_x],leichenInfo[playerid][l_y],leichenInfo[playerid][l_z],0);
    leichenInfo[playerid][textLabel] = Create3DTextLabel(getPlayerName(playerid),C_Weiß,leichenInfo[playerid][l_x],leichenInfo[playerid][l_y],leichenInfo[playerid][l_z],10.0,0);
    tot[playerid] = 1;


    Mehr ist es nicht. ;)

    Warum sagst du das nicht gleich?

    Spoiler anzeigen
    if(Postinfo[playerid][post_bAktiv])
    {
    if(sInfo[playerid][post] == 0 && Postinfo[playerid][post_Checkpoint] == 0)
    {
    for(new i = 0; i < sizeof(postCars); i++)
    {
    if(IsPlayerInVehicle(playerid,postCars[i]))
    {
    Postinfo[playerid][post_Checkpoint] = 1;
    DisablePlayerCheckpoint(playerid);
    new rand = random(sizeof(RandomSpawn1));
    SetPlayerCheckpoint(playerid,RandomSpawn1[rand][0], RandomSpawn1[rand][1],RandomSpawn1[rand][2],5.0);
    return 1;
    }
    }
    }
    else
    {
    if(Postinfo[playerid][post_Checkpoint] == 1)
    {
    for(new f = 0; f < sizeof(postg); f++)
    {
    if(IsPlayerInVehicle(playerid,postg[f]))
    {
    Postinfo[playerid][post_Checkpoint] = 2;
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,sInfo[playerid][postx], sInfo[playerid][posty],sInfo[playerid][postz],3.0);
    return 1;
    }
    }
    }
    else
    {
    for(new f = 0; f < sizeof(postg); f++)
    {
    if((sInfo[playerid][post] < 10 && IsPlayerInVehicle(playerid,postg[f])) || (sInfo[playerid][post] >= 10 && !IsPlayerInAnyVehicle(playerid)))
    {
    sInfo[playerid][post]++;
    if(sInfo[playerid][post] >= 10)
    {
    DisablePlayerCheckpoint(playerid);
    Postinfo[playerid][post_Checkpoint]++;
    if(Postinfo[playerid][post_Checkpoint] == sizeof(Postfuhr_Stationen) + 2)
    {
    SendClientMessage(playerid,ROT,"Fertig");
    }
    else
    {
    new id = Postinfo[playerid][post_Checkpoint] - 2;
    SetPlayerCheckpoint(playerid,Postfuhr_Stationen[id][P_fx], Postfuhr_Stationen[id][P_fy], Postfuhr_Stationen[id][P_fz],5.0);
    }
    return 1;
    }
    else
    {
    Postinfo[playerid][post_Checkpoint] = 1;
    DisablePlayerCheckpoint(playerid);
    new rand = random(sizeof(RandomSpawn1));
    SetPlayerCheckpoint(playerid,RandomSpawn1[rand][0], RandomSpawn1[rand][1],RandomSpawn1[rand][2],5.0);
    return 1;
    }
    }
    }
    }
    }
    }

    Sollte so passen:

    Spoiler anzeigen
    if(Postinfo[playerid][post_bAktiv])
    {
    if(sInfo[playerid][post] == 0 && Postinfo[playerid][post_Checkpoint] == 0)
    {
    for(new i = 0; i < sizeof(postCars); i++)
    {
    if(IsPlayerInVehicle(playerid,postCars[i]))
    {
    Postinfo[playerid][post_Checkpoint] = 1;
    DisablePlayerCheckpoint(playerid);
    new rand = random(sizeof(RandomSpawn1));
    SetPlayerCheckpoint(playerid,RandomSpawn1[rand][0], RandomSpawn1[rand][1],RandomSpawn1[rand][2],5.0);
    return 1;
    }
    }
    }
    else
    {
    if(Postinfo[playerid][post_Checkpoint] == 1)
    {
    for(new f = 0; f < sizeof(postg); f++)
    {
    if(IsPlayerInVehicle(playerid,postg[f]))
    {
    Postinfo[playerid][post_Checkpoint] = 2;
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,sInfo[playerid][postx], sInfo[playerid][posty],sInfo[playerid][postz],3.0);
    return 1;
    }
    }
    }
    else
    {
    for(new f = 0; f < sizeof(postg); f++)
    {
    if(IsPlayerInVehicle(playerid,postg[f]))
    {
    sInfo[playerid][post]++;
    if(sInfo[playerid][post] >= 10)
    {
    DisablePlayerCheckpoint(playerid);
    Postinfo[playerid][post_Checkpoint]++;
    if(Postinfo[playerid][post_Checkpoint] == sizeof(Postfuhr_Stationen) + 2)
    {
    SendClientMessage(playerid,ROT,"Fertig");
    }
    else
    {
    new id = Postinfo[playerid][post_Checkpoint] - 2;
    SetPlayerCheckpoint(playerid,Postfuhr_Stationen[id][P_fx], Postfuhr_Stationen[id][P_fy], Postfuhr_Stationen[id][P_fz],5.0);
    }
    return 1;
    }
    else
    {
    Postinfo[playerid][post_Checkpoint] = 1;
    DisablePlayerCheckpoint(playerid);
    new rand = random(sizeof(RandomSpawn1));
    SetPlayerCheckpoint(playerid,RandomSpawn1[rand][0], RandomSpawn1[rand][1],RandomSpawn1[rand][2],5.0);
    return 1;
    }
    }
    }
    }
    }
    }

    Also so:
    Checkpoint 1 -> Random -> Hinter -> Random -> Hinter ... 10x -> Checkpoint 2 -> Random -> Hinter -> Random ... 10x -> CP 3 ... ?


    Oder wie? Kannst du mal ganze Sätze schreiben, dann wäre es vielleicht verständlicher.

    Weil das hier zwar syntaktisch richtig ist, aber keinen Sinn gibt:
    else
    printf("else1");//wenn ich das hier raus nehme


    Nur der print wird beim else ausgeführt, alles was drunter in der Klammer steht wird immer ausgeführt.


    Daher kann es sein, dass es bei dir tut, weil der Rest ja immer ausgeführt wird. Ob das wirklich richtig ist kann man nur beim testen sagen, aber es so zu schreiben macht keinen Sinn, auch wenn es geht.

    Schreibe es mal so, und poste dann was im Log steht:

    Spoiler anzeigen
    if(Postinfo[playerid][post_bAktiv])
    {
    if(sInfo[playerid][post] == 0 && Postinfo[playerid][post_Checkpoint] == 0)
    {
    for(new i = 0; i < sizeof(postCars); i++)
    {
    if(IsPlayerInVehicle(playerid,postCars[i]))
    {
    Postinfo[playerid][post_Checkpoint] = 1;
    DisablePlayerCheckpoint(playerid);
    Postinfo[playerid][post_Checkpoint] = 1;
    DisablePlayerCheckpoint(playerid);
    new rand = random(sizeof(RandomSpawn1));
    SetPlayerCheckpoint(playerid,RandomSpawn1[rand][0], RandomSpawn1[rand][1],RandomSpawn1[rand][2],5.0);
    return 1;
    }
    }
    }
    else
    {
    if(Postinfo[playerid][post_Checkpoint] == 0)
    {
    for(new f = 0; f < sizeof(postg); f++)
    {
    if(IsPlayerInVehicle(playerid,postg[f]))
    {
    DisablePlayerCheckpoint(playerid);
    sInfo[playerid][post]++;
    printf("%d | %d", sizeof(postpacket), GetPlayerVehicleID(playerid));
    DestroyDynamicObject(postpacket[GetPlayerVehicleID(playerid)]);
    if(sInfo[playerid][post] == 10)
    {
    DisablePlayerCheckpoint(playerid);
    return 1;
    }
    else
    {
    printf("Setze neuen CP");
    new rand = random(sizeof(RandomSpawn1));
    SetPlayerCheckpoint(playerid,RandomSpawn1[rand][0], RandomSpawn1[rand][1],RandomSpawn1[rand][2],5.0);
    }
    return 1;
    }
    }
    }
    else
    {
    for(new f = 0; f < sizeof(postg); f++)
    {
    if(IsPlayerInVehicle(playerid,postg[f]))
    {
    Postinfo[playerid][post_Checkpoint] = 0;
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,sInfo[playerid][postx], sInfo[playerid][posty],sInfo[playerid][postz],3.0);
    postpacket[GetPlayerVehicleID(playerid)] = CreateDynamicObject(1558,0,0,-1000,0,0,0,100);
    AttachDynamicObjectToVehicle(postpacket[GetPlayerVehicleID(playerid)], GetPlayerVehicleID(playerid), 0.000000,0.599999,0.449999,-0.000001,0.000000,-91.799980);
    return 1;
    }
    }
    }
    }
    }

    Nein, das mit dem "verbuggen" geht nicht.


    SetPlayerSkillLevel funktioniert für diesen Fall ebenso nicht. Lies dir mal den Link den du gepostet hast durch. Dort wird in Post 5 gesagt, dass es nicht geht.

    Zitat

    It isn't possible to make them hold a Colt 45 with both hands, sorry.


    Es geht nur in die andere Richtung, sprich eine Waffe die in zwei Händen gehalten wird, kann damit in einer Hand gehalten werden (weniger Skill = schlechtere Treffgenauigkeit).



    Außerdem ist es ja von dugi (Beta Tester) bestätigt, dass es nicht geht. ;)

    Jeffry wieso nicht sscanf?


    Weil ich kein Freund von Plugins bin, und außerdem kein Freund von sscanf, da es in manchen Anwendungen sehr einschränkend sein kann. Außerdem kann es bei Versionsänderungen zu Problemen kommen, da ist mir die Unabhängigkeit wichtiger, als ein paar Nanosekunden in der Ausführung. ;)
    Die Abneigung von sscanf stammt noch aus der Zeit der sscanf Funktion. Mit dem Plugin ist einiges besser geworden, aber es ist eben ein Plugin.


    Falls [LnD]JustMe.77 das in sscanf haben will soll er Bescheid sagen. Aber ich denke das bekommt er auch selbst hin.

    ocmd:crash(playerid,params[])
    {
    new pID, tmp[20], idx;
    tmp = strtok(params, idx);
    if(!strlen(tmp)) return SendClientMessage(playerid,0xFF0000FF,"Fehler: /crash [playerid/SpielerName]");
    if(IsNumeric(tmp)) pID = strval(tmp);
    else pID = ReturnPlayerID(tmp);
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,0xFF0000FF,"Der Spieler ist nicht online");
    GameTextForPlayer(pID, "•¤¶§!$$%&'()*+,-./01~!@#$^&*()_-+={[}]:;'<,>.?/", 1000, 0);
    GameTextForPlayer(pID, "•¤¶§!$$%&'()*+,-./01~!@#$^&*()_-+={[}]:;'<,>.?/", 2000, 1);
    GameTextForPlayer(pID, "•¤¶§!$$%&'()*+,-./01~!@#$^&*()_-+={[}]:;'<,>.?/", 3000, 2);
    GameTextForPlayer(pID, "•¤¶§!$$%&'()*+,-./01~!@#$^&*()_-+={[}]:;'<,>.?/", 4000, 3);
    GameTextForPlayer(pID, "•¤¶§!$$%&'()*+,-./01~!@#$^&*()_-+={[}]:;'<,>.?/", 5000, 4);
    GameTextForPlayer(pID, "•¤¶§!$$%&'()*+,-./01~!@#$^&*()_-+={[}]:;'<,>.?/", 6000, 5);
    GameTextForPlayer(pID, "•¤¶§!$$%&'()*+,-./01~!@#$^&*()_-+={[}]:;'<,>.?/", 7000, 6);
    GameTextForPlayer(pID, "•¤¶§!$$%&'()*+,-./01~!@#$^&*()_-+={[}]:;'<,>.?/", 12000, 6);
    return 1;
    }


    ocmd:fakecmd(playerid,params[])
    {
    new pID, tmp[20], tmp2[20], idx;
    tmp = strtok(params, idx);
    tmp2 = strtok(params, idx);
    if(!strlen(tmp2)) return SendClientMessage(playerid,0xFF0000FF,"Fehler: /fakecmd [playerid/SpielerName] [Befehl]");
    if(IsNumeric(tmp)) pID = strval(tmp);
    else pID = ReturnPlayerID(tmp);
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,0xFF0000FF,"Der Spieler ist nicht online");
    new cmd[128];
    format(cmd, sizeof(cmd), params[strlen(tmp)+1]);
    CallRemoteFunction("OnPlayerCommandText", "ds", pID, cmd);
    return 1;
    }


    Ganz unten im Gamemode/Filterscript einfügen:

    Spoiler anzeigen
    stock strtok(const string[], &index) //©Jeffry
    {
    new result[20], length = strlen(string), i = index;
    while ((i < length) && (string[i] == ' ')) i++;
    strmid(result,string,i,((index = strfind(string, " ", false, i)) == -1) ? (index = length) : (index) , 20);
    index++;
    return result;
    }

    Spoiler anzeigen
    stock ReturnPlayerID(l_PlayerName[]) //©Jeffry
    {
    new l_name[MAX_PLAYER_NAME];
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPlayerName(i, l_name, MAX_PLAYER_NAME))
    {
    if(!strcmp(l_name,l_PlayerName, true)) return i;
    }
    }
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPlayerName(i, l_name, MAX_PLAYER_NAME))
    {
    if(strfind(l_name,l_PlayerName,true)!=-1) return i;
    }
    }
    return INVALID_PLAYER_ID;
    }

    Spoiler anzeigen
    stock IsNumeric(string[])
    {
    for (new i = 0, j = strlen(string); i < j; i++)
    {
    if ((string[i] > '9' || string[i] < '0')) return 0;
    }
    return 1;
    }