So:
SetPlayerPos(playerid, GiftBox[i][e_x], GiftBox[i][e_y], GiftBox[i][e_z]+2);
So:
SetPlayerPos(playerid, GiftBox[i][e_x], GiftBox[i][e_y], GiftBox[i][e_z]+2);
Mit der Funktion bekommst du den Slot:
stock getSlotOut(const string[])
{
new p = strfind(string," ");
if(p == -1) return -1;
new p2 = strfind(string," ",false,p+1);
if(p2 == -1) return -1;
new id[11];
strmid(id,string,p,p2,sizeof(id));
return strval(id);
}
//und dann der code so:
case DIALOG_IMOBEL:
{
if(!response) return 1;
new id = getSlotOut(inputtext),string[11];
if(id == -1) return SendClientMessage(playerid,-1,"Fehler"); //Sollte eig nie vorkommen!
mobelidVar[playerid] = mobelid;
format(string,sizeof(string),"%d",id);
SendClientMessage(playerid,-1,string);
ShowPlayerDialog(playerid,DIALOG_IMOBEL2,DIALOG_STYLE_LIST,"Möbelstück","Entfernen\nAuswählen","Weiter","Abbruch");
return 1;
}
Es gibt so etwas, das nennt sich DEBUG.
Wenn du ca weißt (und das tust du), wann der Fehler auftritt bzw was du tust damit der Fehler auftritt...setze ein Print rein und dann weißte wo im Code die falsche Stelle ist...ist nicht allzu kompliziert..
Wenn du z.B. in einem Command /test Hallo 5 eingibst und der Befehl so aussieht:
CMD:test(playerid, params[])
{
new string[128],id;
if(sscanf(params,"s[3]d",string,id)) //Hallo = 5 Zeichen, hast aber nur 3 zur Verfügung....Buffer overflow
}
Das enum so schreiben:
enum _weaponData {
weapName[32],
weapAmmo,
weapDamage,
weapCostumSlot,
weapNativeSlot
}
Der fehler besteht noch immer,
danke aber für eure vielen ansätze
..ich hab das Skript kompiliert gehabt...bei mir kamen keine Fehler...
Hast du auch meinen Code kopiert und mit deinem ersetzt? ![]()
Habe da einige Sachen geändert gehabt..die man nicht direkt sieht..wie z.B. aus einer ) eine } gemacht...und Namen von Makros geändert..bzw angepasst..
Deine Makros so schreiben:
#define AMMO_EXTRA (0) //Das hier hast du vergessen...ehh weiß nicht was für n wert das haben soll
#define AMMO_NOAMMO (0)
#define AMMO_9MM (1)
#define AMMO_SHOTGUN (2)
#define AMMO_MAGNUM (3)
#define AMMO_9x19MM (4)
#define AMMO_762x39MM (5)
#define AMMO_556MM (6)
#define AMMO_762x51MM (7)
#define AMMO_THROW (8)
#define AMMO_UNABLE (9)
#define AMMTYPE_NOAMMO (0)
#define AMMTYPE_NORM (1)
#define AMMTYPE_HOLLOWPOINT (2)
#define AMMTYPE_BREAKING (3)
#define AMMTYPE_GUMMI (4)
#define WSLOT_FIST (0)
#define WSLOT_MEELE (1)
#define WSLOT_HANDGUN (2)
#define WSLOT_MAIN (3)
#define WSLOT_THROW (4)
#define WSLOT_OTHER (5)
//Und dann das so:
stock const weaponData[47][_weaponData] = {
{"Faust", AMMO_NOAMMO, 4,WSLOT_FIST,0},
{"Schlagring", AMMO_NOAMMO, 5,WSLOT_FIST,0},
{"Golfschläger", AMMO_NOAMMO, 6,WSLOT_MEELE, 1},
{"Schlagstock", AMMO_NOAMMO, 8,WSLOT_MEELE, 1},
{"Messer", AMMO_NOAMMO, 8,WSLOT_MEELE, 1},
{"Baseballschläger", AMMO_NOAMMO, 8,WSLOT_MEELE, 1},
{"Schaufel", AMMO_NOAMMO, 6,WSLOT_MEELE, 1},
{"BillardKö", AMMO_NOAMMO, 5,WSLOT_MEELE, 1},
{"Katana", AMMO_NOAMMO, 25,WSLOT_MEELE, 1},
{"Kettensäge", AMMO_NOAMMO, 25,WSLOT_MEELE, 1},
{"Dildo", AMMO_NOAMMO, 1,WSLOT_MEELE, 10},
{"Dildo", AMMO_NOAMMO, 1,WSLOT_MEELE, 10},
{"Vibrator", AMMO_NOAMMO, 1,WSLOT_MEELE, 10},
{"Vibrator", AMMO_NOAMMO, 1,WSLOT_MEELE, 10},
{"Blumenstrauß", AMMO_NOAMMO, 1,WSLOT_MEELE, 10},
{"Gehstock", AMMO_NOAMMO, 5,WSLOT_MEELE, 10},
{"Splittergranate",AMMO_THROW,0, WSLOT_THROW, 8},
{"Tränengas",AMMO_THROW,0, WSLOT_THROW, 8},
{"Molotov Cocktail", AMMO_THROW,0, WSLOT_THROW, 8},
{"Noting",-1,-1,-1,-1},
{"Noting",-1,-1,-1,-1},
{"Noting",-1,-1,-1,-1},
{"9mm", AMMO_9MM, 20,WSLOT_HANDGUN, 2},
{"9mm-SD", AMMO_9MM,15,WSLOT_HANDGUN, 2},
{"Desert Eagle", AMMO_MAGNUM, 30,WSLOT_HANDGUN, 2},
{"Shotgun", AMMO_SHOTGUN, 30,WSLOT_MAIN,3},
{"Abgesägte Shotgun", AMMO_SHOTGUN, 25,WSLOT_MAIN,3},
{"Combat Shotgun", AMMO_SHOTGUN, 20,WSLOT_MAIN,3},
{"Uzi", AMMO_9x19MM, 15,WSLOT_HANDGUN, 4},
{"Mp5", AMMO_9MM, 20,WSLOT_MAIN,4},
{"Ak-47", AMMO_762x39MM, 30,WSLOT_MAIN,5},
{"M4A1", AMMO_556MM, 30,WSLOT_MAIN,5}, // Zeile 84
{"Tec9", AMMO_9x19MM, 15,WSLOT_HANDGUN, 4},
{"Country Rifle", AMMO_762x51MM, 40,WSLOT_MAIN,6},
{"Sniper Rifle", AMMO_762x51MM, 50,WSLOT_MAIN,6},
{"RPG",AMMO_UNABLE,0,-1,7},
{"HS Rocketlauncher", AMMO_UNABLE,0,-1,7},
{"Flammenwerfer",AMMO_UNABLE,0,-1,7},
{"Minigun",AMMO_UNABLE,0,-1,7},
{"Rucksackbombe",AMMO_UNABLE,0,-1,8},
{"Detonator",AMMO_UNABLE,0,-1,12},
{"Sprühdose",AMMO_EXTRA,0,WSLOT_OTHER, 9},
{"Feuerlöscher",AMMO_EXTRA,0,WSLOT_OTHER, 9},
{"Kamera",AMMO_EXTRA,0,WSLOT_OTHER, 9},
{"Nachtsichtgerät",AMMO_UNABLE,0,-1,11},
{"Thermalgerät",AMMO_UNABLE,0,-1,11},
{"Fallschirm",AMMO_EXTRA,4,WSLOT_OTHER, 11}
};
mfg. ![]()
Bei OnPlayerDeath:
if(killerid != INVALID_PLAYER_ID) //If-Abfrage halt noch erweitern prüfen ob er in der Arena ist
{
new name[MAX_PLAYER_NAME],string[128];
GetPlayerName(playerid,name,MAX_PLAYER_NAME);
GetPlayerName(killerid,string,MAX_PLAYER_NAME);
format(string,128,"* Spieler %s hat %s getötet!",string,name);
SendClientMessageToAll(-1,string); //ggf Anpassen, an wen es gesendet werden soll
}
Mit:
if(IsPlayerInRangeOfPoint(playerid,range,x,y,z))
{
}
Ehh...was ist das denn für ein Log ![]()
...die crashmeldung wäre irgendwie entscheidend ![]()
crashdetect Plugin reinhauen, fehler erneut hervorrufen und dann den Log hier posten ![]()
mfg. ![]()
Du erstellst ein Array mit der maximalen Anzahl der Koordinaten. Dann beim erstellen, packst du einmal die Koords in das Array und in eine SQLite Datenbank.
Zu prüfen ob wer in der Nähe ist loopst du halt durch das Array.
Und beim Server start, liest du alle Einträge in der Datenbank aus und packst die in das Array.
Fertig ![]()
Moin kurze Frage zu den Actors. Ist das normal das die anfangen wegzulaufen wenn man diese anschießt ?
...Nein...
if(newskeys & KEY_N) ist aber falsch
if(newskeys == KEY_N) ist richtig.
Andersherum.
if(newkeys & KEY_N) ist richtig!
Erklärung, wieso das so ist, findest du hier: http://wiki.sa-mp.com/wiki/OnPlayerKeyStateChange
Gibt ja Google.
Wenn man spezifische Fragen oder Erklärungen sucht, oder etwas wirklich nicht versteht und man dazu nichts gefunden hat...dann ist das ja kein Problem.
Aber einfach sagen, ich suche das...und es aber 1000 Erklärungen dazu gibt..sogar im Forum..ist das etwas lächerlich...
Alles anzeigenDu kannst die Textdraws mit einem Textdraw Editor wie diesem erstellen:
forum.sa-mp.com/showthread.php?t=406833
alternativ:
forum.sa-mp.com/showthread.php?t=543002
Danach musst du die Textdraws anklickbar machen.
wiki.sa-mp.com/wiki/TextDrawSetSelectable
Dann musst die Größe das anklickbaren Bereiches mit TextDrawTextSize anpassen. wiki.sa-mp.com/wiki/TextDrawTextSize Der X Wert ist die Position PLUS die Größe des nach rechts anklickbaren Bereiches. Der Y Wert ist die geschätzte Höhe.
Angenommen du erstellst dein Textdraw bei X = 120 und Y = 90. Dann machst du den Text "Hallo Welt" da rein. Sagen wir, der Text ist so groß, dass er in etwa über ein Zehntel deines Bildschirmes geht (musst du abschätzen, oder mit einem Lineal abmessen), dann heißt das 640 durch 10, das wäre 64. Somit ist TextDrawTextSize-X = 120 + 64 = 184.
Nun misst, bzw. schätzt, du die Höhe des Textdraws, sagen wir mal du bekommst den Text in etwa 20 mal untereinander hin, bis dein Bildschirm von oben nach unten voll damit wäre. Heißt also: 480 durch 20, das gibt 24. Somit wäre TextDrawTextSize-Y = 24.
Und dann bei OnPlayerRequestClass: wiki.sa-mp.com/wiki/SelectTextDraw
Anschließend musst du bei wiki.sa-mp.com/wiki/OnPlayerClickTextDraw die jeweiligen Aktionen durchführen.
Im Link ist auch nochmal ein komplett-Beispiel dabei, das kannst du gegebenenfalls zuerst ausprobieren, damit du das Prinzip verstehst.
Ahh gut, dass du das alles schreibst, wenn wir schon dabei sind:
1. Eintrag in google: http://wiki.sa-mp.com/wiki/TextDraws
Da wird dir erklärt was ein Textdraw ist und wie es funktioniert, da du anscheinend nicht googlen kannst, davon geht anscheinend Jeffry aus (tut mir Leid, dass er dich so bloßstellt mit seinem Beitrag, aber ok).
2. Eintrag in google: https://wiki.sa-mp.com/wiki/TextDrawCreate
Damit erstellst du ein TextDraw.
3. Eintrag in google: https://wiki.sa-mp.com/wiki/CreatePlayerTextDraw
TextDraws haben ein Limit, du solltest deshalb überlegen die TextDraws Spieler basiert machen.
Googlen wir mal weiter, ohhh was ist das denn, findet man etwa auch Tutorials wenn man sucht
Das ja der Wahnsinn: Textdraws
4. Eintrag in google: http://forum.sa-mp.com/showthread.php?t=543002
und jetzt halte dich gut fest, es gibt sogar sub-Einträge in google die ähnliche Themen auf der Website anzeigen..und was haben wir denn hier, noch mehr Editoren, die hättest du nie gefunden:
Ja...also anscheinend hättest du das echt nicht durch die ersten 4 Einträge von google herausbekommen. Wow unglaublich.
Gut Jeffry, dass du nicht davon ausgehst, dass er googlen kann.
Meinen Beitrag sollte ihn dazu animieren, genau das zu tun, dein Beitrag ist einfach nur ihm den ganzen Rotz vor die Nase setzen.
Bei seinem Nächsten Problem, wird er sich wieder nicht zu helfen wissen und herkommen, damit du noch ein paar Beiträge generieren kannst.
Wow...genial
![]()
In Zeile 329 fehlt ein else.
Sprich, es muss so lauten:
public OnUserCheck(playerid)
{
if(cache_get_row_count() ==0)
{
ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_PASSWORD,"Account Erstellung","Bitte Erstelle dir ein Account","Erstellen","Verlassen");
}
else
{
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Anmeldung","Bitte Logge dich mit dein Password ein","Einloggen","Verlassen");
}
return 1;
}
Dann verschaffe dir einen? http://www.gidf.de
Ist nicht allzu kompliziert...oder erwartest du jetzt, dass dir das jemand machen wird?! ![]()
Super...dann prüf mal dein Skript und checke warum ![]()
Musste schauen wo überprüft wird ob du einen Account hast oder nicht...ob die Querys stimmen, ob du die Tables alle richtig angelegt hast...
Wenn du die mysql_static.so lädst, brauchst du die mysql.so Datei nicht laden ![]()
Also lösche die aus der server.cfg ![]()