myCon = mysql_connect(SQL_HOST, SQL_USER, SQL_DATA, SQL_PASS);
Schreibs mal so:
myCon = mysql_connect(SQL_HOST, SQL_USER, SQL_PASS, SQL_DATA);
myCon = mysql_connect(SQL_HOST, SQL_USER, SQL_DATA, SQL_PASS);
Schreibs mal so:
myCon = mysql_connect(SQL_HOST, SQL_USER, SQL_PASS, SQL_DATA);
Hi das hatte ich noch nie kann mir da jemand weiter helfen ?
Welche MySQL-Version hast du und wie sieht dein mysql_connect aus ![]()
Ich erstelle Züge so:
Du musst auch schon CreateVehicleEx verwenden und nicht AddStaticVehicle und eben den Parameter für den Zug auf true setzen..
nur einer ausgewählt werden soll (random mäßig)?
Kannst du so lösen:
stock Player_Random()
{
new tmp[20],idx;
for(new i = GetPlayerPoolSize(); i != -1; i--)
{
if(IsPlayerConnected(i) && !IsPlayerNPC(i) && isPlayerTTT[i] == true)
{
tmp[idx++] = i;
}
}
return tmp[random(idx)];
}
Alles anzeigen
Muss aber dazu gesagt werden, dass isPlayerTTT schon einen Index für den Spieler benötigt, wie im Beispiel gezeigt.
Also das muss new bool:isPlayerTTT[MAX_PLAYERS]; deklariert werden.
und die 20 bei tmp bedeutet, dass es maximal 20 Spieler sein können. Sind es nur 5, setz es auf 5 ![]()
Setze über das ShowPlayerDialog in deinem Befehl ein: SetPVarInt(playerid,"gpid", giveplayerid);
Und dann über das response im Dialog-Callback schreibst du:
new giveplayerid = GetPVarInt(playerid,"gpid");
DeletePVar(playerid,"gpid");
Ja, theoretisch kann man das machen.
In dem Tutorial siehst du das ja, da gibt es ein Großes Array für alle Fraktionsfahrzeuge.
Du solltest nicht alles in einem Array speichern, weil diese dann immer die größte Größe hätten.
Sagen wir du hast 50 FBI Fahrzeuge, aber nur 10 Taxi Fahrzeuge, würde das so dazu führen, dass 50 trotzdem der größte Index wäre, und somit ist das eine Speicherplatzverschwendung.
Allerdings kannst du natürlich eine enum für jede Variable, die für eine Fahrzeuggruppe steht deklarieren:
enum e_fbi_fahrzeuge
{
e_fbi_vehid,
e_fbi_Tank,
e_fbi_Health
};
new FBIFahrzeuge[50][e_fbi_fahrzeuge];
//Zuweisen dann natürlich so:
FBIFahrzeuge[0][e_fbi_vehid] = CreateVehicle(...);
Alles anzeigen
Aber es wäre interessant zu wissen, was genau für Eigenschaften du zusätzlich noch haben magst.
Man kann diese ganzen Systeme natürlich auch viel dynamischer aufbauen z.B. indem du alles in einer MySQL Datenbank speicherst oder du alle Eigenschaften konstant deklarierst und dann einfach nur eine Schleife drüber laufen lässt.
Hier auch mal ein Tutorial über das mit dem MySQL Zeug von Jeffry: [jTuT] Fraktions-Fahrzeug-System mit MySQL R39-5
Keine Ahnung, was du alles vor hast.
Habe die Sirene beim Krankenwagen z.b auf 1 gesetzt da funktioniert es aber beim Sultan funktioniert das iwie nicht
Das liegt daran, dass der Callback nur für Fahrzeuge funktioniert die eine Sirene haben..wie Krankenwagen / Polizei Fahrzeuge...
Bei dem Sultan musst du über [wiki]OnPlayerKeyStateChange[/wiki] prüfen, ob die Taste KEY_CTRL_BACK gedrückt wurde ![]()
PS: Also so glaube ich das, hab den Callback noch nie benutzt.
Funktioniert generell bei mir nicht kann mir einer sagen warum das so ist?
Wie hast du es denn getestet?
Gibt es eine möglichkeit Kordis von einem Bild abzulesen per drauf drücken oder so?
Sogar Dynamic: https://forum.sa-mp.com/showthread.php?t=467190
https://forum.sa-mp.com/showthread.php?t=120586
Gibt viele, einfach mal googeln ![]()
Was ist die Taste für "F" ?
Dafür gibt es ein wiki: [wiki]Keys[/wiki]
F = Enter = KEY_SECONDARY_ATTACK
Nichts für ungut, aber erwartest du jetzt, dass wir hier 1000 Zeilen für dich nach einem Fehler durchsuchen?
Lade mal crashdetect, eventuell treten da ja Fehler auf oder beschreibe bei 1. dein Problem präziser.
Bei Problem 2. kann es sein, dass das einfach noch dein altes Fahrzeug ist?!
Dazu gab es sogar mal ein Tutorial, genau dafür ![]()
https://forum.sa-mp.com/showthread.php?t=158294
Schau es dir mal an, sollten danach konkrete Fragen bestehen, kannst du ja gerne fragen ![]()
zu finden bzw. es richtig anzuwenden
Also ein Fehler ist da nicht wirklich, hier mal aus Wikipedia ein Beispiel:
https://en.wikipedia.org/wiki/Binomial_distribution#Example
// binomial_distribution
#include <iostream>
#include <random>
#include <iomanip>
int main()
{
using namespace std;
const int nrolls = 1000; // Anzahl an Versuchen
const int maxIndex = 6+1;
default_random_engine generator;
binomial_distribution<int> distribution(maxIndex, 0.3);
int p[maxIndex] = {};
for (int i = 0; i < nrolls; ++i) {
int number = distribution(generator);
++p[number];
}
for (int i = 0; i < maxIndex; ++i) {
cout << i << ": " << fixed << setprecision(20) << (p[i]/static_cast<double>(nrolls)) << "%" << endl;
}
system("pause");
return 0;
}
Alles anzeigen
Der Output kommt dem doch schon sehr nah.
Je nach Rolls, weicht das ja auch immer ab. Da ist ja eine Varianz.
deswegen ist es so merkwürdig
Du konvertierst erst nach der Operation das zu einem Double ![]()
Damit er das aber richtig rechnet, muss es sich schon während der Operation um einen float/double Wert handeln.
Deshalb schreib das mal so:
cout << i << ": " << fixed << setprecision(20) << p[i]/static_cast<double>(nrolls) << "%" << endl;
PS: Da du im Namespace std:: bist, kannst du es überall weglassen ![]()
allerdings steht dann bei der Ausgabe überall nur 0
Hast mal nur so p[i] ausgegeben und geschaut, ob da auch was größer 0 drinnen steht?
Was hat also die 1000 da zu suchen wenn t eigentlich die maximale Anzahl von Versuchenist?
Nein der Parameter t gibt die obere Grenze an (also wie groß x werden kann).
Denn in dem Beispiel hast ja nur n Array von index 0-9..und das muss angegeben werden ![]()
Und die haben eine manuelle Schleife, wie oft, das eben aufgerufen werden soll (ZEILE 15). Und das ist nrolls in dem Fall ![]()
Ehh hast du das einfach mal gegoogelt?
http://www.cplusplus.com/refer…om/binomial_distribution/
Ich frage mich nur, was das mit SA:MP zu tuen hat, bzw wofür du das benötigst ![]()
//Funktioniert nicht
Was funktioniert denn da nicht?
Du gibst keine SendClientMessage(playerid,-1,string); aus ![]()
format(string,sizeof(string),"%s{FFFFFF}: %s", a_rang[sort[ i][0]-1], GetName([sort[i ][1]]);
Weil da zu viele komische Klammern sind und eine zu wenig xD
format(string,sizeof(string),"%s{FFFFFF}: %s", a_rang[sort[i][0]-1], GetName(sort[i][1]));
Ich kann das nicht benutzen, das andee "Zolltor" hat eine andere Objektid. Das 2. Tor hat eine andere Objektid, schlimm?
Nein ist es nicht.
Sry hab vergessen, dass das so in Pawn ja nicht geht, schreib es mal so:
#define E:: e_z
enum E::Tor
{
Float:E::x,
Float:E::y,
Float:E::z,
Float:E::from_rX,
Float:E::from_rY,
Float:E::from_rZ,
Float:E::to_rX,
Float:E::to_rY,
Float:E::to_rZ
};
stock const zollTore[][e_zTor] = {
{2234.0056,-2216.0217,13.546, 0.0,270.0,135.0, 0.0,0.0,135.0},
{2179.1099,-2255.8748,14.7734, 0.0,0.0,135.0, 0.0,0.0,0.0} //Musst noch angeben, in welche Rotation gedreht werden soll
};
new ZollTor[2];
ocmd:zolltor(playerid,params[])
{
if(pInfo[playerid][pJob] != 1) return SendClientMessage(playerid,-1,"{bc4343}Du bist kein Mitarbeiter vom Zoll und kannst das Tor nicht öffnen.");
new i = GetZollStation(playerid);
if(i == -1) return SendClientMessage(playerid,-1,"Du befindest dich an keinem Zoll Tor!");
MoveDynamicObjectRot(ZollTor[i], zollTore[i][E::to_rX], zollTore[i][E::to_rY], zollTore[i][E::to_rZ], true);
SetTimerEx("@checkZone", 3000, 0, "ii", playerid, i);
return 1;
}
stock GetZollStation(playerid)
{
for(new i; i<sizeof(zollTore); i++)
{
if(IsPlayerInRangeOfPoint(playerid,10.0,zollTore[i][E::x],zollTore[i][E::y],zollTore[i][E::z])) return i;
}
return -1;
}
@checkZone(p,i);@checkZone(p,i)
{
return (!IsPlayerConnected(p) || !IsPlayerInRangeOfPoint(p, 10.0,zollTore[i][E::x],zollTore[i][E::y],zollTore[i][E::z])) ? Zollzu(i) : SetTimerEx("@checkZone", 3000, 0, "ii", p,i);
}
stock MoveDynamicObjectRot(obj, Float:rX, Float:rY, Float:rZ, bool:open)
{
new Float:x,Float:y,Float:z;
GetDynamicObjectPos(obj,x,y,z);
MoveDynamicObject(obj,x,y,z+((open)?(0.0001):(-0.0001)),0.0001,rX,rY,rZ);
return 1;
}
forward Zollzu (i);
public Zollzu (i)
{
MoveDynamicObjectRot(ZollTor[i], zollTore[i][E::from_rX], zollTore[i][E::from_rY], zollTore[i][E::from_rZ], false);
return 1;
}
Alles anzeigen
und die Zuweisung mit den Objekten machst du dann so:
ZollTor[0] = CreateDynamicObject(...); //da wo du jetzt ZollTor1 hast
//und dann eben das selbe nochmal für ZollTor[1]
ich will noch bei Zolltor2 ein Ingamesound abspielen.
Nur da, oder bei beiden?
Im Endeffekt, wenn du wirklich nur 2 ZollTore haben willst...ist das System n bisschen over...aber im Endeffekt spielt das jetzt keine Rolle.