Beiträge von IPrototypeI

    Guten Tag ich möchte euch mal meine Stadthalle vorstellen, wo die Gebäude mal nicht von mir selbst konzipiert wurden.
    Diese Map hat rund 700 Objekte und 108 entfernte Objekte


    Falls sich paar fragen wie es möglich ist auf solch eine Distanz die Objekte einzustreamen dies macht CreateDynamicObjectEx möglich mit dem hochschreiben
    der draw und natürlich der streamdistanz.


    CreateDynamicObjectEx(869, 1448.57629, -1824.89893, 12.53609, 0.00000, 0.00000, 0.00000, 800.0, 800.0);


    Ich würde mich über eine Bewertung und konstruktive Kritik freuen.



    MFG IPrototypeI



    Luftaufnahmen



    Nahaufnahmen


    Nachtaufnahme

    Ich bekomme immer die Nachricht das ich das Auto abgeschleppt habe egal ob ich in der nähe eine Autos bin oder nicht


    probier das ganze mal so



    if(newkeys & KEY_YES)
    {
    print("hacken");
    new veh = GetPlayerVehicleID(playerid);
    if(!isPlayerInFrakt(playerid,3) || GetVehicleModel(veh) != 525)return 1;
    if(IsTrailerAttachedToVehicle(veh))return DetachTrailerFromVehicle(veh);
    SendClientMessage(playerid,0xFFFF00AA,"Versuche Fahrzeug abzuschleppen!");
    new Float:Pos[5];
    GetVehiclePos(veh,Pos[0],Pos[1],Pos[2]);
    new i,aveh=-1;
    for(; i < MAX_VEHICLES; ++i)
    {
    if(!IsValidVehicle(i) || i == veh)continue;
    Pos[3] = GetVehicleDistanceFromPoint(i, Pos[0],Pos[1],Pos[2]);
    if((Pos[4] > Pos[3] || Pos[4] == 0) && Pos[3] < 7.0){
    Pos[4] = Pos[3];
    aveh = i;
    }
    }
    if(aveh == -1)return SendClientMessage(playerid,0xFFFF00AA,"Es ist kein Auto in der Nähe!");
    return AttachTrailerToVehicle(veh,GetPlayerVehicleID(playerid));
    }


    falls der key nix funktioniert würde ich einen anderen nehmen
    zusätzlich sollte dieses native nach eingefügt werden oben im skript

    native IsValidVehicle(veh);

    Parrsiert nichts :/


    Dein SQL-Befehl war nichtmal ganz komplett da du zum einen die Klammer vergessen hast und zum anderen noch das setzen den Primärschlüssels was bei AUTO_INCREMENT pflicht ist.



    mysql_function_query(MySqlConnection,"CREATE TABLE `accounts` IF NOT EXISTS (`ID` int(11) NOT NULL AUTO_INCREMENT,`Name` varchar(24) NOT NULL,`Password` varchar(130) NOT NULL,`Score` int NOT NULL, `Money` int NOT NULL,`Money` int NOT NULL,PRIMARY KEY (`ID`)) AUTO_INCREMENT=7;",false,"","");

    #Edit, brauche es um den Clantag rausfiltern zu lassen.



    << Bitte um Hilfe >>



    Hier sollte so funktionieren:




    stock NC_GetPlayerName(playerid) {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));
    return name;
    }
    #if defined _ALS_GetPlayerName
    #undef GetPlayerName
    #else
    #define _ALS_GetPlayerName
    #endif
    #define GetPlayerName NC_GetPlayerName


    nein kaliber das returnen von strings bewirkt keinen memoryleak diese diskussion bin ich mal mit blackace nachgegangen und wir kamen zu dem ergebnis das diese nicht stimmt. Da nach der beendung eine funktion der ganze speicher wieder freigegeben wird. Sonst würden deine ganzen local definierten variabeln einen memoryleak verursachen, was sie jedoch nicht tun. Es ist ja auch nix anders als bei integern oder floats nur das ein längerer binärcode bei arrays zurück gegeben wird.

    Er kann mit dem Fahrzeug fahren egal ob er gerade eine Fahrstunde hat oder nicht


    Das liegt dan letztendlich an deiner abfrage


    if(GetPlayerVehicleID(playerid)==PKWVehs[i])


    Werden auch die fahrzeugids in dem array gespeichert beim erstellen oder lässt du deinen code davor abbrechen durch ein return .


    Du könntest quasi was ausgeben lassen:




    if(newstate==PLAYER_STATE_DRIVER)
    {
    for(new i=0; i<sizeof(PKWVehs); i++)
    {
    printf("Fahrschulauto %d",i);
    if(GetPlayerVehicleID(playerid)==PKWVehs[i])
    {
    printf("||||||||||||||||| Fahrzeug betreten %d",i);
    if(TakingLesson[playerid] == 1)
    {

    Ich hab mich für mysql entschieden, nur welche Version soll ich nehme ?


    Nur sind die leute immer noch nicht in der Lage zu verstehen für was das r steht in der MySQL Plugin generation von BlueG und Pain123/Maddinat0r.


    Da das r nur lediglich für revision steht und die jeweilige Versionsnummer angibt. Es sollte klar sein das man eher das neuere Plugin verwendet, da dies zum einen vom code optimiert wurde und mehrer Bugs von den vorherigen Versionen
    gefixxt sind.

    das ganze bedeutet das auf einen index eines arrays zugegriffen wird welcher nicht existiert.


    Beispiel:



    new array[10];
    array[11] = 10;


    den index 11 gibt es nicht das würde solch ein Fehler erzeugen.


    Du kannst dein skript ja im debug modus kompilieren dazu eine pawn.cfg im pawno ordner erstellen und den kompilerparameter -d3 hinzufügen es gibt jedoch auch andere parameter -d0 würde ebenfalls gehen.
    Dadurch werden zusätzliche informationen mitkompilt die zahl hinter dem -d gibt die stufen an so werden dir zum beispiel zusätzlich informationen angezeigt oder ein zusätzliches file erzeugt etc... .

    Konntet ihr mir helfen und dies mal für MySQL R8 (Mit mysql_function_query()) schreiben? Ich komm echt nicht mehr weiter.


    Vielen Dank im Voraus!


    Liebe Grüße
    palwal



    Es ist unnötig bei deiner ersten funktion das ganze über mysql zu machen:



    stock FreeFrakCheck()
    {
    for(new i;i<MAX_FRACTION_CARS;i++)if(FractionCars[i][fVehid] == 0)return i;
    return 0;
    }


    Beim zweiten code:


    mysql_function_query(connectionHandler,query,"","");


    unter was du dein verbindunghandler gespeichert hast weiß ich jedoch nicht daher kann der name connectionHandler abweichen.
    connectionHandler ist der wert welcher mysql_connect zurück gibt den du in einer variabel speicherst.

    Weiterhin möchte ich, dass nur der User der den Roller gemietet hat ihn auch fahren kann. Ich weiß jetzt nur nicht wie ich vorgehen soll.
    Kann mir einer weiter helfen?


    Du kannst eine weitere spielervariabeln deinem enum für den spieler hinzufügen und darin die Fahrzeugid speichern beim erstellen eines Rollers.
    Darüber kannst du den Roller auch wieder beim disconnecten löschen oder nach dem eingeben des befehls.


    Zum Thema nicht betreten gibt es mehrere Möglichkeiten dies zu verhindern, jedoch nur zwei je nach deiner wahl um zu erkennenob der Roller dem spieler gehört gehen wir hierzu über OnPlayerStateChange
    dort kannst du das entweder so machen sollte das Fahrzeugmodell die des rollers entsprechen wird abgefragt ob die fahrzeugid die des spielers entspricht, wenn nicht wird er runter geschmießen.
    Eine andere möglichkeit wäre durch die Spieler zu gehen um somit herraus zu bekommen ob es ein gemieteter roller ist oder ein gekaufter ich weiß jedoch nicht ob du da differnenzieren möchtest.

    du kannst ebenfalls die objekte rotieren dann überscheiden sie sich jedoch, durch das anheben eines objektes um 1 tausendstel kannst du das wieder entflackern.
    Ebenfalls würde ich mal darüber nachdenken das ganze zu texturieren.
    Um objekte zu sparen kannst du auch größere flächen nutzen.

    Dann würde ich jetzt gerne sehen, wie du das mit einer Schleife realisieren kannst, sodass der Code 1:1 das macht was mein Code macht. Alles andere interessiert mich hier nicht mehr.
    Und nur wenn da ein Code-Schnipsel (kein Plugin etc) kommt, der zudem noch ressourcenschonender (bzw. mindestens gleichwertig ist), dann geb ich dir gerne Recht. Ansonsten bleibe ich bei meiner Aussage oben.


    Das mit einer Schleife zu realisierne ist möglich, wenn man zusätzlich noch eine variabel deklariert :D.



    stock ReturnPlayerID(l_PlayerName[]) //©Jeffry
    {
    new l_name[MAX_PLAYER_NAME + 1],cName=-1;
    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;
    else if(strfind(l_name, l_PlayerName, true) != -1 && cName == -1)cName = i;
    }
    }
    return (!cName)?(INVALID_PLAYER_ID):(i);
    }


    //edit Flüchtigkeitsfehler beseitigt danke Kaliber

    Wie schreibt man so ein Funktion :D


    Das beruht einfach darauf das du das Callback OnPlayerCommandText hookst hooking methoden gibt es genug einfach mal danach googeln
    und von dort aus wird der eingegebene string verarbeitet sprich alles nach dem ersten leerzeichen wird extrahiert
    Beispiel:
    /say hallo wie gehts


    hier das say.


    Danach wird diese funktion bei den meisten cmd-prozessoren über CallLocalFunction oder CallRemoteFunction aufgerufen.


    weil der punkt ist ja der, dass sich hinter den defines nur deklarationen von publics verstecken.


    #define CMD->%0(%1) forward %0_CMD(%1); public %0_CMD(%1)


    Ja ich benutze auch mein eigenen CMD prozessor diesen habe ich ebenfalls hier auch releast siehe meine Signatur PCMD.
    Der Unterschied zu den meisten anderen prozessoren besteht darin das mein Prozessor schneller ist, da die funktionen via #emit aufgerufen werden.
    Es kommt drauf an welcher CMD prozessor dir sympatisch rüber kommt. Es gibt ja genug davon YCMD, ZCMD, RCMD, PCMD; OCMD, DCMD ...
    dazu kannst du ja lediglich mal auch ins englische forum schauen.

    Danke für die schnellen Antworten!


    @|Prototype|
    Soweit habe ich es verstanden, werde es auch mal versuchen, ABER! Was bedeutet bei deinem Array die [10] und die [2]


    Die 10 gibt doch glaube ich die maximale Angabe der Skins sprich 10 Skinids's werden darin deklariet oder? Aber die 2?


    Arrays bis zu 2 dimensionen kannst du dir wie tabellen vorstellen:


    Array[10][2]


    10 Einträge und zwei Spalten:


    Bedeutet das du 10 Zellen erstellen kannst mit jeweils 2 werten das kann man jedoch noch ausweiten


    //edit es reicht auch wenn du googelst normal sollte es schon solch ein array geben jedoch sind die nicht ganz vollständig


    oder du machst dir die mühe und nimmst mein skin-array auseinander in einem hexdezimal code sind 3 skins


    stock const static SkinArray[76]={
    0x80200,0x180A04,0x3C1C08,0x4C240C,
    0x5C2C10,0x6C3414,0x803C18,0x90461C,0xB05620,
    0xC05E24,0xD06628,0xF4782C,0x1108630,0x1249034,
    0x144A038,0x158A83C,0x184C040,0x194C844,0x1A4D048,
    0x1B4D84C,0x1C4E050,0x1D4E854,0x1E4F058,0x1F8FA5C,
    0x2150860,0x2251064,0x2492068,0x269326C,0x27D3C70,
    0x28D4474,0x29D4C78,0x2B5567C,0x2C56080,0x2D96A84,
    0x2E97288,0x3217A8C,0x3399890,0x365A494,0x37DBA98,
    0x399CA9C,0x3BE00A0,0x3DDE4A4,0x3F1F4A8,0x409FEAC,
    0x41A0AB0,0x43216B4,0x4421EB8,0x45226BC,0x4622EC0,
    0x47236C4,0x4823EC8,0x49246CC,0x4A24ED0,0xD4,
    /////////////////////Männer//////////////////////
    0x2C1409,0x983E0D,
    0xD45228,0xE47037,0x1148240,0x1549A4C,0x168B258,
    0x1E8BA5C,0x2290682,0x2451A8C,0x2612E96,0x2C958A9,
    0x30580BF,0x31588C3,0x33592C7,0x355A8D3,0x369B0D7,
    0x389C2E0,0x3B1D2E8,0x3D1E6EE,0x405F6F6,0x2550A,
    /////////////////////Frauen//////////////////////
    };

    Das ganze über die Skinauswahl laufen zu lassen wäre nicht möglich, da du die Skins nur über OnGameModeInit festlegen kannst.
    Das einzige was du in diesem Bereich tun könntest wäre abzufragen ob der Skin männlich oder weiblich wäre und je nach geschlecht des spielers zurück gibst ob er diesen skin nehmen darf oder nicht, wenn er auf spawn klickt.


    Wenn du das ganze jedoch genau so machen möchtest wie du es hier beschrieben hast musst du eine eigene skinauswahl machen.
    Das bedeutet du setzt dem spieler seine spawninformationen (SetSpawnInfo) danach portest du den spieler an eine position änderst seine virtuelle welt (SetPlayerVirtualWorld)
    und je nach wunsch kannst du drei Befehle machen um den nächsten oder vorherigen skin zu wählen und den skin auszuwählen oder das ganze über die tasten (OnPlayerKeyState oder OnPlayerUpdate und GetPlayerKey) oder du benutzt anklickbare Textdraws.


    Um die skins zu unterteilen in männlich und weiblich kannst du ein 2 dimensionales array erstellen wo einmal die skins und das dazugehörige geschlecht als eintrag
    vorhanden ist.
    Beispiel:
    new Array[10][2] = {
    {0,0},
    {1,0}
    ...
    };


    Ich selbst habe das ganze auch mal gemacht und könnte dir dieses array auch posten jedoch bezweifel ich das du damit überhaupt was anfangen kannst, daher solltest du
    das ganze besser selbst erstellen.


    stock const WeekDays[7][11] = {
    "Sonntag",
    "Monntag",
    "Dienstag",
    "Mittwoch",
    "Donnerstag",
    "Freitag",
    "Samstag"
    };


    #define DATE_W(%0,%1,%2) WeekDays[(( %0 + _:DATE_Y(%1,%2) + _:DATE_Y(%1,%2)/4 - _:DATE_Y(%1,%2)/100 + _:DATE_Y(%1,%2)/400 + (31 * _:DATE_M(%1))/12 )% 7)]
    #define DATE_M(%0) (%0 + 12 * _:DATE_A(%0) - 2)
    #define DATE_Y(%0,%1) (%1 - _:DATE_A(%0))
    #define DATE_A(%0) ((14 - %0) / 12)


    Verwendung:

    new Date[3];
    getdate(Date[0],Date[1],Date[2]);
    printf("%s",DATE_W(Date[2],Date[1],Date[0]));



    Mit diesem Codeschnipsel ist es möglich den Wochentag zu bestimmen.

    Ich weiß ja nicht ob du mit den Trends im bereich webdesign 2014 vertraut bist jedoch sind momentan video hintergründe sehr beliebt.
    Da sind wir schon gleich beim stichwort video daher kannst du auch eine videoanimation erstellen und das gabze mit html einbinden.


    Beispielseiten:
    http://christopherkoelsch.com/about.html


    http://www.theguardian.com/wor…re-dunalley-holmes-family



    Tutorial:


    http://kesilconsulting.com/web…d-tutorial/#axzz2vaRxC4Rv


    es gibt jedoch noch genug weitere einfach mal googeln