Musst es so schreiben:
if(sscanf(params,"uii",pID,pheal,hpreis))return SendClientMessage(playerid,GRAU,"Verwendung: /heal [playerid] [heal] [preis]"); //Fehler zeile
Nur bei s die Länge vom Array angeben ![]()
mfg. ![]()
Musst es so schreiben:
if(sscanf(params,"uii",pID,pheal,hpreis))return SendClientMessage(playerid,GRAU,"Verwendung: /heal [playerid] [heal] [preis]"); //Fehler zeile
Nur bei s die Länge vom Array angeben ![]()
mfg. ![]()
Also...du lässt einfach während dem Anzeigen eines Dialoges, dem Spieler noch einen Dialog mit anderem content anzeigen...der 1. verschwindet und der 2. wird angezeigt und es sieht so aus, als ob sich der content vom 1. Dialog geändert hätte? ![]()
Gut zu wissen, dass da samp mitspielt ![]()
//Edit:
PS: Verwende anstatt Funktionen Makros:
#define GetPlayerDialog(%0) g_PlayerDialog[%0]
mfg. ![]()
Hier...:
ocmd:invite(playerid, params[])
{
if(!pInfo[playerid][pLeader]) return SendClientMessage(playerid,WEIß,"Du bist kein Leader!");
if(sscanf(params,"u",pID)) return SendClientMessage(playerid,WEIß,"{FFD200}Benutzung:{FEFEFE} /invite [spielerid]");
if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,ROT,"Dieser Spieler ist nicht online !");
if(pID == playerid) return SendClientMessage(playerid,WEIß,"Du kannst dich nicht selber inviten !");
if(pInfo[pID][pMember] || pInfo[pID][pLeader]) return SendClientMessage(playerid,WEIß,"Dieser Spieler ist bereits in einer Fraktion !");
new str[128], name[MAX_PLAYER_NAME], pname[MAX_PLAYER_NAME];
GetPlayerName(pID, name, MAX_PLAYER_NAME),GetPlayerName(playerid, pname, MAX_PLAYER_NAME);
format(str, 128,"Du wurdest von %s in die Fraktion %s invitet!",pname,fraktname);
SendClientMessage(pID,WEIß,str);
format(str, 128,"Du hast %s in deine Fraktion invitet er muss noch Annehmen / Ablehnen!!",name);
SendClientMessage(playerid,WEIß,str);
Eingeladen[pID] = pInfo[playerid][pLeader];
SendClientMessage(pID,GRÜN,"{31FF00} Möchtest du dieser Fraktion beitreten?");
ShowPlayerDialog(pID,DIALOG_INVITE,DIALOG_STYLE_LIST,"{E1FF00}Invite{FEFEFE}","Möchtest du dieser Fraktion beitreten","Annehmen","Ablehnen");
return 1;
}
if(dialogid == DIALOG_INVITE)
{
if(!response) return SendClientMessage(playerid,GRAU,"Du hast die Einladung abgelehnt"),Eingeladen[playerid] = 0;
SendClientMessage(playerid,GRAU,"Du hast bist der Fraktion beigetreten. viel spaß in deiner neuen Fraktion.");
pInfo[playerid][pMember] = Eingeladen[playerid];
pInfo[playerid][pRank] = 1;
SendClientMessage(playerid, GRÜN, " Du kannst mit /hilfe deine Fraktionsbefehle betrachten");
SendClientMessage(playerid, GRÜN, " Wir wünschen dir Viel Spaß und viel Erfolg in deiner neuen Fraktion");
SendClientMessage(playerid, GRÜN, " Höre bitte immer auf deinen Leader. Sei immer nett und Freundlich");
if(pInfo[playerid][pMember]==1) {
SendClientMessage(playerid,GRAU,"Du bist nun in der Fraktion Rettungsdienst.");
SendClientMessage(playerid,GRAU,"Du kannst mit /f den Team Chat benutzen und unter /navi die Fraktion Base finden");
SetPlayerSkin(playerid,276),pInfo[playerid][pSkin] = 276;
SetPlayerColor(playerid,WEIß);
}
Eingeladen[playerid]=0;
}
Hoffe ich konnte dir helfen ![]()
mfg. ![]()
Fabian™
Also, mir ist gerade extrem langweilig also stelle ich dir mal eine kleine ausführliche komplett Lösung zur Verfügung:
//Oben im Script
new frequ[MAX_PLAYERS char];
Also oben erstellen wir eine globale Variable für alle Spieler, deshalb MAX_PLAYERS ich mache es zu einem char-Array, weil dies Speicher spart und da es keine 255 Frequenzen gibt, können wir dies ideal nutzen.
Als nächstes musst du jedem der senden und empfangen soll eine Frequenz zuweisen..halt da wo du das System gebrauchen willst.
//Das würde z.B. so aussehen:
frequ{playerid} = 5; //Dieser Spieler wäre auf Frequenz 5 und könnte zu jedem in dieser Frequenz senden.
Der Command sollte ungefähr so aussehen:
//(Egal,ob strcmp,dcmd,ocmd,zcmd,ycmd,cmd,oder sonst was, denken wir uns das steht hier: "senden")
{
if(!frequ{playerid}) return SendClientMessage(playerid,-1,"Du hast keine Frequenz!");
return SendFrequenzChat(frequ{playerid},color,"Hallo!");
}
So, was macht dieser Command, zuerst prüfen wir ob frequ{playerid} 0 ist, wenn dies der Fall ist, kann er nicht schreiben.
Wenn nicht, senden wir an alle in unserer Frequenz ein "Hallo!" in irgendeiner Farbe!
Du kannst da auch einfach frequid reinschreiben und oben mit sscanf den Text und die id splitten, ich denke das bekommst du hin ![]()
und als letztes noch eine simple Funktion:
stock SendFrequenzChat(frequid,color,text[]) {
for(new i; i<MAX_PLAYERS; i++) {
if(!IsPlayerConnected(i) || frequ{i} != frequid) continue;
SendClientMessage(i,color,text);
}
return 1;
}
Diese Funktion geht einfach nur in einer Schleife alle Spieler durch und prüft ob sie auf dem Server sind und ob sie in der selben Frequenz sind wie die frequid ![]()
Ich hoffe ich konnte dir das so einigermaßen erklären, so das du es gut umsetzten kannst ![]()
mfg. ![]()
Schreib das mal so:
if(!strcmp(cmdtext, "/acar", true))
{
if(!PlayerInfo[playerid][pAdmin]) return SendClientMessage(playerid, FARBE_WEISS, "Du bist nicht im Admindienst! (Aduty)");
if(AdminCar[playerid]) return DestroyVehicle(AdminCar[playerid]),SendClientMessage(playerid, FARBE_ROT, "Fahrzeug vernichtet."),AdminCar[playerid] = 0;
return ShowPlayerDialog(playerid, DIALOG_ADMINCAR, DIALOG_STYLE_INPUT,"{FF0000}Admincar","Fahrzeug ID eingeben","Erstellen","Abrechen");
}
und poste mal wie du DIALOG_ADMINCAR definiert hast ![]()
mfg. ![]()
Haut mir Errors rein.
Schau dir mal mein Edit an! ![]()
PS: Da wurde auch oben im Code was verbessert...
mfg. ![]()
Schreib es mal bitte einfach so:
for(new i; i<MAX_TANKSTELLEN; i++)
{
new Tankstellen[200];
format(Tankstellen,sizeof(Tankstellen),"/Tankstellen/%d.ini",i);
if(!fexist(Tankstellen)) continue;
format(Tanke[i][besitzer],MAX_PLAYER_NAME,dini_Get(Tankstellen,"besitzer"));
Tanke[i][tankstellex] = dini_Float(Tankstellen,"tankstellex");
Tanke[i][tankstelley] = dini_Float(Tankstellen,"tankstelley");
Tanke[i][tankstellex] = dini_Float(Tankstellen,"tankstellex");
Tanke[i][produktpreis] = dini_Int(Tankstellen,"produktpreis");
format(Tanke[i][tankstellenname],32,dini_Get(Tankstellen,"tankstellenname"));
Tanke[i][benzinpreis] = dini_Int(Tankstellen,"benzinpreis");
Tanke[i][dieselpreis] = dini_Int(Tankstellen,"dieselpreis");
Tanke[i][superpreis] = dini_Int(Tankstellen,"superpreis");
Tanke[i][kaufpreis] = dini_Int(Tankstellen,"kaufpreis");
Tanke[i][kauflevel] = dini_Int(Tankstellen,"kauflevel");
Tanke[i][kasse] = dini_Int(Tankstellen,"kasse");
Tanke[i][pickupx] = dini_Float(Tankstellen,"pickupx");
Tanke[i][pickupy] = dini_Float(Tankstellen,"pickupy");
Tanke[i][pickupz] = dini_Float(Tankstellen,"pickupz");
Tanke[i][pickupids] = dini_Int(Tankstellen,"pickupids");
Tanke[i][pickupwelt] = dini_Int(Tankstellen,"pickupwelt");
printf("Tankstelle %i wurden geladen.",i);
}
//Edit:
Das enum sollte so aussehen:
enum Tankstelle
{
besitzer[MAX_PLAYER_NAME],
Float:tankstellex,
Float:tankstelley,
Float:tankstellez,
produktpreis,
produkte,
tankstellenname[32],
benzinpreis,
dieselpreis,
superpreis,
kaufpreis,
kauflevel,
kasse,
pickupx,
pickupy,
pickupz,
pickupids,
pickupwelt
};
mfg. ![]()
Müsste ich dafür eine Neue PHP Datei erstellen?
Nein.
Bei mir kommt keine Fehlermeldung, ich möchte das Script nur auf Linux, weil mein Server dann nicht startet wenn mein Server startet dann steht da: Unknown, aber MySQL ist richtig!
Unknown...bedeutet wahrscheinlich es werden nicht alle Plugins richtig geladen...
hast du wirklich alle mit .so in die Server.cfg geschrieben und sind alle .so Plugins im plugin Ordner?
Wenn ja, solltest du den nativechecker mal für Linux downloaden...der spuckt dir dann eine genauere Fehlermeldung aus ![]()
PS: @alle anderen...hackt nicht so auf ihm rum..auch wenn es lustig ist
(das macht man nicht!)
mfg. ![]()
Du nutzt das falsche MySQL Plugin anscheinend...
mfg. ![]()
Zeig mal wie du deine momentane Geschwindigkeit berechnest und nimm dort einen höheren Multiplikator ![]()
mfg. ![]()
Schreib das unten in dein Script:
stock strtok(const string[], &index) //(c) by Kaliber
{
new pos = strfind(string, " ", false, index+1),buffer[128];
if(pos == -1) pos = strlen(string);
strmid(buffer,string,index,pos,128),index = pos;
return buffer;
}
mfg. ![]()
Indem du ShowPlayerDialog verwendest...und dein System anpasst... ![]()
Wenn du den Fehler endlich mal weg haben willst, schick mir mal deine TeamViewer Daten per PN ![]()
mfg. ![]()
ja. Aber die frage ist...
Wie mache ich das nicht alles überschrieben wird von die einträge vom selben name.
Nicht UPDATE nutzen, sondern einfach INSERT? ![]()
Ja aber wie soll ich das den sont machen wenn jetzte einer /kick macht soll ja dann beim Grund Kick stehen beim Ban genau so
Wat? Erkläre das mal bitte ausführlich...ich verstehe nicht, was du willst ![]()
//Edit: Wenn du beim Kick Befehl einfach den String Grund auf Kick änderst...(Du brauchst dafür eig keine Variable, sondern kannst es immer statisch reinschreiben)
Grund[128] = "Ban"
...wenn du das bei deinem Kick & Ban Befehl stehen hast...kein Wunder ![]()
Danke, aber gibt es vielleicht auch ne möglichkeit, meins zu kürzen ?
Also, wenn du das nicht von LeijaT nehmen willst und unregelmäßige Sprünge machst zwischen den IDs, dann musst du alle ID's in ein Array schreiben ungefähr so:
static const auto_ids[] = {400,401,402,403,404,405,406,407,408 ,409,410,411,412,413,414,415,416,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,449,450,451,455,456,457,458,459,466,467,470,471,474,475,477,478,479,480,482,483,485,486,489,490,491,492,494,495,496,498,499,500,502,503,504,505,506,507,508,514,515,516,517,518,524,525,526,527,528,529,530,531,532,533,534,535,536,539,540,541,542,543,544,545,546,547,549,550,551,552,554,555,556,557,558,559,560,561,562,565,566,567,568,571,572,573,574,575,576,578,579,580,582,583,585,587,588,589,596,597,598,599,600,601,602,603,604,605,609};
//und dann einfach abfragen
stock IsACar(modelid) {
for(new i; i<sizeof(auto_ids); i++) if(modelid == auto_ids[i]) return 1;
return 0;
}
mfg. ![]()
Mach mal aus dem <= in deinen Schleifen ein < ![]()
mfg. ![]()