Drücke auf den blauen Download Button, dann lädt es die .rar Datei runter (siehe unterer Bildschirmrand).
Im Anhang als .zip, falls du keine .rar öffnen kannst.
Beiträge von Jeffry
-
-
Das macht ja nichts.
Öffne den Code und ersetze alle "CMD:" mit "ocmd_", und nutze anstatt der zcmd-Include die ocmd-Include. -
Das ist etwas viel.
Versuche erst mal folgendes:
Kommentiere das ganze Callback aus und teste dann, ob der Fehler noch immer auftritt.Wenn der Fehler dann nicht mehr vorkommt, dann wissen wir, so wir suchen müssen, ansonsten ist der Fehler hier gar nicht drin.
-
Was hast du vor?
Wäre sowas hier nicht sinnvoller, damit du das Objekt auch verschieben und anpassen kannst? http://forum.sa-mp.com/showthread.php?t=335711 -
Suche eine einfache grade Stange. Kann auch eine Schranke ohne sonst was dran sein.
1251 wäre sowas.
-
Ja, das ist möglich, du kannst das sogar auf verschiedene Arten machen, diese wären:
- Objekt setzen + Pickup => Menü anzeigen bei OnPlayerPickUpPickup.
- Objekt setzen + Checkpoint => Menü anzeigen bei OnPlayerEnterCheckpoint (gegebenenfalls mit einem Checkpoint-Streamer).
- Wenn der Spieler in der Nähe des gesetzten Objektes einen Befehl (z.B. /automat) eingibt => Menü anzeigen.
- Per Timer/OnPlayerUpdate prüfen, ob der Spieler in der Nähe des Objektes ist => Menü anzeigen.Persönlich finde ich die Variante mit dem Pickup am sinnvollsten, vor allem weil es am wenigsten auf die Ressourcen geht und der Code am leichtesten ist, da man keine Berechnungen braucht, daher beschreibe ich dir diese Variante. Falls du eine andere der oben genannten haben willst, oder dir selbst noch eine einfällt, die du lieber haben willst, dann sag bitte Bescheid.
Unter den Includes die Deklaration für den Speicher der Objekt-IDs und Pickup-IDs:
C#define DIALOG_FAHRKARTEN 1403 new fahrkartenAutomat[10] = {-1,...}; //Maximal 10 Fahrkartenautomaten new fahrkartenPickup[10] = {-1,...};
Unter OnGameModeInit:CfahrkartenAutomat[0] = CreateObject(/*Model & Koordinaten hier einfügen*/); fahrkartenAutomat[1] = CreateObject(/*Model & Koordinaten hier einfügen*/); //... fahrkartenAutomat[9] = CreateObject(/*Model & Koordinaten hier einfügen*/);[wiki]CreateObject[/wiki]
Und dazu dann, jeweils vor dem Fahrkartenautomaten, bzw. in ihm drin, so dass das Pickup nicht sichtbar ist, falls du das so haben willst:CfahrkartenPickup[0] = CreatePickup(/*Model & Koordinaten hier einfügen*/); fahrkartenPickup[1] = CreatePickup(/*Model & Koordinaten hier einfügen*/); //... fahrkartenPickup[9] = CreatePickup(/*Model & Koordinaten hier einfügen*/);[wiki]CreatePickup[/wiki]
Dann brauchst du nur noch bei OnPlayerPickUpPickup folgendes einfügen:
Cfor(new i=0; i<sizeof(fahrkartenPickup); i++) { if(fahrkartenPickup[i] == pickupid) { ShowPlayerDialog(playerid, DIALOG_FAHRKARTEN, DIALOG_STYLE_LIST, "Fahrkartenautomat", "Text Hier\nUnd Hier\n...", "Ok", "Abbrechen"); return 1; } }
Und bei OnDialogResponse entsprechend dann die Aktionen durchführen, die gemacht werden sollen, wenn der Spieler das jeweilige Item ausgewählt hat:C
Alles anzeigenif(dialogid == DIALOG_FAHRKARTEN) { if(!response) return 1; switch(listitem) { case 0: { //... } case 1: { //... } //... } return 1; }
Anschließend musst du dann abfragen, ob der Spieler einen Zug betreten hat, oder nicht, und dort dann abfragen, ob er das korrekte Ticket für die Strecke gekauft hat (zuvor mit dem Dialog).Die entsprechend markierten Stellen musst du natürlich mit deinen Dingen ausfüllen.
-
Poste bitte mal dein OnPlayerDeath.
-
Da gibt es einige Möglichkeiten, die du hast, um dies zu realisieren.
Ich erkläre dir mal die grundlegenden Teile, die du für den Befehl benötigst, damit du es dann selbstständig fertigstellen kannst.Also erstes brauchst du einen Befehl, ich nehme hier jetzt als Beispiel ocmd als Command Prozessor, falls du einen anderen Command-Prozessor nutzt, dann ändere das bitte entsprechend ab, das sollte aber klar sein.
C
Alles anzeigenocmd_makeleader(playerid, params[]) { //Spieler muss selbst Rang 5 sein: if(PlayerInfo[playerid][pRank] < 5) return SendClientMessage(playerid, 0xFF0000FF, "Error: Du musst mindestens Rang 5 sein."); //Deklaration der Variable, in der dann die eingegebene Spieler-ID steht new pID; //Splitten der Parameter: u = ID oder Name -> ID if(sscanf(params, "u", pID)) return SendClientMessage(playerid, 0xFF0000FF, "Error: /makeleader [ID/Name]"); //Anderer Spieler darf nicht bereits Leader sein: if(PlayerInfo[pID][pLeader] == 1) return SendClientMessage(playerid, 0xFF0000FF, "Error: Dieser Spieler ist bereits Leader."); //Spieler kann sich nichts selbst zum Leader machen: if(playerid == pID) return SendClientMessage(playerid, 0xFF0000FF, "Error: Du kannst dich nicht selbst zum Leader ernennen."); //Wenn nun alles passt, dann kannst du den Spieler als Leader setzen: PlayerInfo[pID][pLeader] = 1; new str[145], pname[MAX_PLAYER_NAME], aname[MAX_PLAYER_NAME]; GetPlayerName(pID, pname, MAX_PLAYER_NAME); GetPlayerName(playerid, aname, MAX_PLAYER_NAME); format(str, sizeof(str), "Server: %s hat den Spieler %s zum Leader ernannt.", aname, pname); SendClientMessageToAll(0xFFFFFFFF, str); //Hier dann den Spieler "pID" in die Skin-Auswahl setzen, je nach dem wie das bei dir //vom Code her aufgabaut ist, das weiß ich nicht. //... return 1; }Alternativ kannst du anstatt sscanf auch strtok nutzen, je nach dem wie deine anderen Befehle aufgebaut sind.
Du musst natürlich bedenken, dass du obigen Code nicht einfach 1:1 kopieren kannst, sondern ihn an deine Variablen-Namen (etc) anpassen musst, aber das sollte klar sein, ich kenne ja deinen Code nicht, somit auch die Bezeichnungen nicht.
-
Das lässt sich so nicht sagen. Wenn du nur an den Queries etwas änderst, dann ist das einzige Problem, das möglich ist, ein Syntax Fehler im Query. Am besten du machst die Änderung mal und schaust dann im MySQL Log nach, ob dort ein Fehler ausgegeben wird (gegebenenfalls vorher den Log leeren).
Poste zusätzlich gegebenenfalls dann eine vorher und eine nachher-Version des Queries das du geändert hast. -
Siehe Vorschlagslösung hier:
Includes richtig erstellen | Hooking ganz einfach -
Mache es so:
Im Gamemode:Cpublic OnPlayerRequestClass(playerid, classid) { SetPlayerPos(playerid,1420.6406,-1719.2148,6.8594); SetPlayerCameraPos(playerid,1420.6908,-1714.8286,6.8664); SetPlayerCameraLookAt(playerid,1420.6406,-1719.2148,6.8594); SetPlayerFacingAngle(playerid,357.3007); return 1; }
In der Include:C
Alles anzeigenpublic OnPlayerRequestClass(playerid, classid) { ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,"Charakterauswahl","test des dialogs","schließen",""); SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746); SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746); SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746); return CallLocalFunction("Hook_OnPlayerRequestClass","dd",playerid, classid); } forward Hook_OnPlayerRequestClass(playerid, classid); #if defined _ALS_OnPlayerRequestClass #undef OnPlayerRequestClass #else #define _ALS_OnPlayerRequestClass #endif #define OnPlayerRequestClass Hook_OnPlayerRequestClass
Beachte, dass OnPlayerRequestClass und somit das SetPlayerPos (etc) zuerst in der Include ausgeführt wird, sprich es ist unwirksam, wenn im Gamemode nochmals SetPlayerPos verwendet wird. Wenn du verhindern willst, dass OnPlayerRequestClass im Gamemode ausgeführt wird, dann musst du das CallLocalFunction in der Include entfernen, bzw. über eine if-Abfrage entsprechend verhindern. -
Das geht via Hooking: Includes richtig erstellen | Hooking ganz einfach
-
Ich kenne nicht das ganze System, aber rein von dem geposteten Code dürfte es so gehen:
C
Alles anzeigenif(strcmp(cmd, "/anhängervoll", true) == 0) { if(!IsPlayerInRangeOfPoint(playerid,5.0,264.8677,1452.7062,10.5859)) return SendClientMessage(playerid, COLOR_GRAD1, "Du bist nicht an der Raffinerie!"); if(PlayerInfo[playerid][pJob] != 23) return SendClientMessage(playerid, COLOR_GRAD1, "Das können nur Trucker!"); if(Spritda[playerid] == -1)return SendClientMessage(playerid, COLOR_GRAD1, "Du bist gerade am befüllen!"); if(Spritda[playerid] == 1)return SendClientMessage(playerid, COLOR_GRAD1, "Du hast dein Anhänger schon befüllt!"); new vehicle = GetPlayerVehicleID(playerid); if(!Truckerjob(vehicle))return SendClientMessage(playerid,COLOR_GRAD1, "Du bist in keinem Truck!"); SetTimerEx("TruckerVoll", 30000,0,"i",playerid); FreezePlayer(playerid); SendClientMessage(playerid,COLOR_GRAD1, "Du befüllst nun deinen Anhänger! (30 Sek.)"); Spritda[playerid] = -1; return 1; } if(strcmp(cmd, "/anhängerleer", true) == 0) { if(!IsPlayerInRangeOfPoint(playerid,10.0,-1723.6121,-118.5779,3.1207)) return SendClientMessage(playerid, COLOR_GRAD1, "Du bist nicht an der Lagerhalle!"); if(PlayerInfo[playerid][pJob] != 23) return SendClientMessage(playerid, COLOR_GRAD1, "Das können nur Trucker!"); if(Spritda[playerid] == -2)return SendClientMessage(playerid, COLOR_GRAD1, "Du bist gerade am befüllen!"); if(Spritda[playerid] == 0) return SendClientMessage(playerid, COLOR_GRAD1, "Du hast dir an der Raffinerie kein Sprit geholen!"); new vehicle = GetPlayerVehicleID(playerid); if(!Truckerjob(vehicle))return SendClientMessage(playerid,COLOR_GRAD1, "Du bist in keinem Truck!"); SetTimerEx("TruckerLeer", 30000,0,"i",playerid); FreezePlayer(playerid); SendClientMessage(playerid,COLOR_GRAD1, "Du befüllst nun die Lagerhalle von Jet! (30 Sek.)"); Spritda[playerid] = -2; return 1; } -
Ich habe gestern bei deinem Kollege nachgefragt, er hat gesagt, dass alle Probleme behoben sind.
Was ist denn momentan das Problem? Vielleicht lässt es sich ja auch so über die Scripting Base lösen, ansonsten müssen wir nochmal nach einem Termin schauen, weil heute geht es bei mir nicht mehr.Aber erkläre bitte das Problem das vorhanden ist, gegebenenfalls lässt es sich so lösen.
-
Nein, es wird ja kein anderer Spieler gefunden.
Was soll denn da stehen, wenn nur du online bist, welcher Wert? -
Versuche es so:
C
Alles anzeigenforward Float:GetNearestMedic(playerid); stock Float:GetNearestMedic(playerid) { new Float:x, Float:y, Float:z, Float:nearest = 9999999.0, Float:distance; GetPlayerPos(playerid, x, y, z); for(new i=0; i < MAX_PLAYERS; i++) { if(!IsPlayerConnected(i) || i == playerid) continue; if(PlayerInfo[i][p_Fraktion] != 4) continue; distance = GetPlayerDistanceFromPoint(i, x, y, z); if(distance < nearest) { nearest = distance; } } return nearest; } -
Wenn die Nachricht nicht gesendet wird, dann ist entweder:
1) playerid ein Admin
2) alle anderen Spieler AdminsPrüfe bitte, ob eines davon der Fall ist.
-
Ich gebe dir ein paar gute Tipps wie du dir es selbst sehr gut beibringen kannst, so habe ich es zumindest vor 6 Jahren gelernt (von null an, ohne Programmierkenntnisse aus anderen Spachen).
Du solltest dich zu aller erst mit den Grundlagen der Programmierung beschäftigen, bevor du anfängst einen vorhandenen Gamemode zu "vergewaltigen", dazu gehört nämlich ein Grundwissen, welches man sich zuerst aufbauen muss.
Ich erkläre dir mal wie du am besten lernen kannst, damit du in Zukunft auch verstehst, was ein Code ist, und wann du welchen Code benutzen musst.
Also ich habe PAWN gelernt, indem ich mir den LAdmin4v2 (damals sehr neu) genommen habe, und versucht habe, die einzelnen Teile zu verstehen. Dann habe ich einfach losgelegt, und überlegt, welcher Teil das tut, was ich will. Den Code hab ich mir dann angeschaut, und so für den neuen Code verändert, dass er seinen Zweck erfüllt hat.
Wichtig: Fang klein an, jeder tut das, nimm nicht gleich einen Gamemode und verunstalte den, du wirst nichts kapieren. Ich arbeite nun über 6Jahre mit PAWN und mein Wissen ist noch lange nicht komplett, im Gegenteil. Auch ich lerne ständig neue Dinge dazu.
Falls dir jemand sagt, du sollst dir die PAWN Doc durchlesen, lass es, genauso rate ich dir davon ab das wiki in allen Einzelteilen durchzulesen. Du wirst es nicht verstehen. Das kannst du in 3 Jahren machen, wenn du es verstehst, und selbst dann wirst du den Großteil in der Pawn Doc nicht auf Anhieb verstehen.Noch was: Ausprobieren. Du kannst nichts kaputt machen. Das einzige was passieren kann, ist dass du Errors bekommst. Na und? Für was gibt es STRG+Z. Einfach probieren, wenn du nicht weiter kommst, lass es, oder frag nach Hilfe, sofern es im kleinen Bereich ist.
Learning By Doing nennt sich das. Nicht aufgeben, einfach machen machen machen. Das muss nicht immer perfekt sein, und muss auch nicht immer Sinn ergeben, hauptsache du machst was. Zum Anfang kannst du dir z.B. vornehmen, einen FilterScript der hier im Forum veröffentlicht wurde (einen einfachen) nachzumachen. Musst ihn ja nicht auch veröffentlichen, aber nur zur Übung einfach nachmachen. Wenn du hängst, kannst du ja nachsehen, was falsch ist.
Meiner Meinung nach besser als alles andere.
Wie machst du das?
Du suchst dir einen Filterscript der irgendwas macht, sei es ein Auto Spawn Menu.
Schau dir zuerst mal an, was der FilterScript denn machst (z.B. ein Auto-Menu, um Auto's zu spawnen). Dann überlegst du, was du denn alles dafür brauchst, suchst dir die Funktionen zusammen (Google, SAMP Wiki) und legst los so ein Menu zu erstellen. Wenn du irgendwo hängst, kannst du einen Blick in den Code werfen, und ein paar Zeilen, die du denkst zu verstehen abschreiben, dann siehst du ja was passiert.
Am Besten ist es aber, wenn du es ganz ohne in den Code zu schauen hin bekommst, deshalb fang mit leichten Dingen an.
Bis du erst mal richtig rein findest vergehen mit Sicherheit 1-3 Monate! Also nicht verzagen, du wirst am Anfang ziemlich oft stecken bleiben und auf die Nase fallen (ist wie laufen lernen). Ich weiß das von mir. Wenn du einmal drinne bist, dann gehts jeden Tag besser.PS: Ich hab es ganz alleine gelernt. Die einzige Hilfestellung die ich damals hatte war ein /kill Command aus 6 Zeilen Code, den mir jemand gemacht hat.
Das wichtigste ist: Immer dranbleiben!
Viel Erfolg!
-
C
Alles anzeigennew Spielerdatei[64]; new name[MAX_PLAYER_NAME]; GetPlayerName(playerid,name,sizeof(name)); format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name); if(dini_Exists(Spielerdatei)) { new string[256]; format(string,sizeof(string),"{FFFFFF}Willkommen {264BF0}%s{FFFFFF} aus MSR Reallife bitte logge dich ein deine Id {264BF0}%i{FFFFFF}\n",SpielerName(playerid),playerid); format(string,sizeof(string),"%sSolltest du dein Passwort vergessen melde dich unter der E-mail mannekkarl9@gmail.com mit deiner Bitte",string); ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Einlogen",string,"Login","Abbrechen"); } else { ShowPlayerDialog(playerid, DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Register:","Bitte gib dein Gewünschtets Passwort ein ","Register","Abbrechen"); } -
Ein Callback wird mit "forward" und "public" deklariert.
Eine Variable wird mit "new" deklariert.Ein Callback kannst du auch als Funktion bezeichnen, die unter bestimmten Voraussetzungen aufgerufen wird.
Eine Variable ist ein temporärer Speicher für Informationen.