Die nachicht an den Fraktionsmember wird nicht gesendet da steht dann immer noch Info: /r [Nachicht]
Nutz einfach mal ocmd... ![]()
Die nachicht an den Fraktionsmember wird nicht gesendet da steht dann immer noch Info: /r [Nachicht]
Nutz einfach mal ocmd... ![]()
Als erstes empfehle ich dir nicht dcmd zu nutzen...sondern eher ocmd/zcmd/ycmd...oder sonst was ![]()
Bei einem Parameter solltest du übrigens kein sscanf nutzen, sondern kannst direkt auf params zugreifen:
dcmd_r(playerid,params[])
{
if(IstSpielerInFraktion(playerid, 0))return SendClientMessage(playerid,ROT,"Du bist in keiner Fraktion.");
new string[128];
if(params[0] == EOS)return SendClientMessage(playerid,GELB,"INFO: /r [Nachicht]");
new fID = sSpieler[playerid][Fraktion];
GetPlayerName(playerid,string,MAX_PLAYER_NAME);
format(string,sizeof(string), "**(( %s: %s ))**", string, params);
for(new i=GetPlayerPoolSize(); i!=-1; i--)
{
if(!IsPlayerConnected(i) || !IstSpielerInFraktion(i, fID))continue;
SendClientMessage(i,HBLAU, string);
}
return 1;
}
Alles anzeigen
Der Code steht ja in einem public wie "TachoUpdate"...
und dann such mal im Skript nach "TachoUpdate" dann solltest du einen Timer finden ![]()
Das ist scheinst das falsche MySQL Plugin...welche Include Version nutzt du denn...dafür das passende Plugin musste auch verwenden ![]()
Dein MySQL Plugin wird nicht geladen ![]()
Poste am besten mal den ganzen Server Log ![]()
Du rufst das ja in einem gewissen Intervall auf..z.B. von ~1000ms welches du in SetTimer/Ex eingestellt hast.
Den könntest du einfach etwas runter setzen, dann aktualisiert sich das öfters ![]()
aber den Standardwert zu setzen würde sicher nicht schaden.
Oki, hier dann:
/* SA:MP Include GetVehicleNumberPlate
*
* (c) by Kaliber, 2016
*
*/
#if !defined _samp_included
#include <a_samp>
#endif
#if defined _samp_plate_ex
#endinput
#endif
#define _samp_plate_ex
native __SetVehicleNumberPlate(vehicleid, numberplate[]) = SetVehicleNumberPlate;
native __DestroyVehicle(vehicleid) = DestroyVehicle;
stock _DestroyVehicle(vehicleid)
{
if(existproperty(.value=50+vehicleid)) deleteproperty(.value=50+vehicleid);
return __DestroyVehicle(vehicleid);
}
#if defined _ALS_DestroyVehicle
#undef DestroyVehicle
#else
#define _ALS_DestroyVehicle
#endif
#define DestroyVehicle _DestroyVehicle
stock _SetVehicleNumberPlate(vehicleid, numberplate[])
{
if(strlen(numberplate) > 32) return 0; //Um Schaden zu vermeiden!
setproperty(.value=50+vehicleid,.string=numberplate);
return __SetVehicleNumberPlate(vehicleid, numberplate);
}
#if defined _ALS_SetVehicleNumberPlate
#undef SetVehicleNumberPlate
#else
#define _ALS_SetVehicleNumberPlate
#endif
#define SetVehicleNumberPlate _SetVehicleNumberPlate
/*
native GetVehicleNumberPlate(vehicleid);
*/
stock GetVehicleNumberPlate(vehicleid)
{
new plate[32];
if(existproperty(.value=50+vehicleid))
{
getproperty(.value=50+vehicleid,.string=plate);
strunpack(plate,plate,sizeof(plate));
}
else plate="XYZSR998";
return plate;
}
Alles anzeigen
Soo jetzt müsste alles gut sein ![]()
Das macht aber nicht immer Sinn.
Angenommen in einem Dialog möchte ich alle Fahrzeuge mit deren Nummernschild anzeigen, habe aber nie SetVehicleNumberPlate genutzt. Dann gibt der Dialog nichts aus, oder, wenn man dort dann das Nummernschild setzt, ändert es sich weg vom Standard (wäre reiner Zufall das gleiche Schild zu bekommen).
new string[512],plate[32];
for(new i=GetVehiclePoolSize(); i!=0; i--)
{
format(plate,32,GetVehicleNumberPlate(i));
format(string,sizeof(string),"%sID: %d | Plate: %s",string,i,((plate[0]==EOS)?("XYZ1234"):(plate)));
}
ShowPlayerDialog(..., string, ...);
So meinte ich das...
und da dieses Nummernschild anfangs immer das selbe ist..brauchste nichts hooken..
DestroyVehicle sollte ebenfalls gehookt werden.
Stimmt, das hab ich vergessen...
/* SA:MP Include GetVehicleNumberPlate
*
* (c) by Kaliber, 2016
*
*/
#if !defined _samp_included
#include <a_samp>
#endif
#if defined _samp_plate_ex
#endinput
#endif
#define _samp_plate_ex
native __SetVehicleNumberPlate(vehicleid, numberplate[]) = SetVehicleNumberPlate;
native __DestroyVehicle(vehicleid) = DestroyVehicle;
stock _DestroyVehicle(vehicleid)
{
if(existproperty(.value=50+vehicleid)) deleteproperty(.value=50+vehicleid);
return __DestroyVehicle(vehicleid);
}
#if defined _ALS_DestroyVehicle
#undef DestroyVehicle
#else
#define _ALS_DestroyVehicle
#endif
#define DestroyVehicle _DestroyVehicle
stock _SetVehicleNumberPlate(vehicleid, numberplate[])
{
if(strlen(numberplate) > 32) return 0; //Um Schaden zu vermeiden!
setproperty(.value=50+vehicleid,.string=numberplate);
return __SetVehicleNumberPlate(vehicleid, numberplate);
}
#if defined _ALS_SetVehicleNumberPlate
#undef SetVehicleNumberPlate
#else
#define _ALS_SetVehicleNumberPlate
#endif
#define SetVehicleNumberPlate _SetVehicleNumberPlate
/*
native GetVehicleNumberPlate(vehicleid);
*/
stock GetVehicleNumberPlate(vehicleid)
{
new plate[32];
getproperty(.value=50+vehicleid,.string=plate);
strunpack(plate,plate,sizeof(plate));
return plate;
}
Alles anzeigen
Ne, das mit dem Standard setzen find ich bescheuert..weil ist ja eh immer XYZ1234 oder sowas..und man kann ja einfach prüfen ob die Funktion was leeres wiedergibt, dann setzt man halt das Standard Ding..ansonsten das Nummernschild, das wesentlich effizienter ![]()
Sehr gut ![]()
Nun...geht der Log noch weiter? ![]()
Wenn ja..poste den mal ganz & lade evtl das crashdetect Plugin..
Wenn nicht, dann gibt es einen großen Fehler im Skript..wie eine endlosschleife oder es wird auf ungültigen Speicher zugegriffen ![]()
Wo muss ich das ändern?
...lösche das printf...und die Spalte erstellst du am einfachsten über PhpMyAdmin...
Unknown column 'KSKLevel' in 'field list' in Callback
Dir fehlt die Spalte KSKLevel in deiner Tabelle ![]()
Und printf crasht deinen Server weil:
Warning: The format string or its output should not exceed 1024 characters. Anything beyond that length can lead to a server to crash.
PS: Das bedeutet die Länge darf nicht 1024 Zeichen überschreiten...
Gut, habe mal deinen Befehl bisschen aufgepeppt ![]()
CMD:members(playerid)
{
if(!Spieler[playerid][pFraktion]) return SendClientMessage(playerid, COLOR_RED, "* Du befindest dich in keiner Fraktion!");
const MAX_MEMBER = 3; //Mach mal hier lieber nur 3..sonst könnte die Zeile zu lang werden
new string[(MAX_PLAYER_NAME + 16 + 10 + 2) * MAX_MEMBER],c;
SendClientMessage(playerid, COLOR_GREEN, "* Mitglieder online:");
for(new i=GetPlayerPoolSize(); i != -1; i--)
{
if(!IsLoggedIn(i) || Spieler[i][pFraktion] != Spieler[playerid][pFraktion]) continue;
if(c++ < MAX_MEMBER)
{
format(string,sizeof(string),"%s%s %s (Rang: %d) | ",string,GetRankName(Spieler[i][pFraktion], Spieler[i][pRank]), GetName(i), Spieler[i][pRank]);
}
else
{
SendClientMessage(playerid,COLOR_GREY,string);
string=""; //String Reset (1000x schneller als strdel xD)
c=0;
}
}
if(c) SendClientMessage(playerid,COLOR_GREY,string);
return 1;
}
Alles anzeigen
Probiers mal aus, war zu faul es zu testen ![]()
//Edit:
@256:
Hier gerade mal aus dem Kopf geschrieben:
/* SA:MP Include GetVehicleNumberPlate
*
* (c) by Kaliber, 2016
*
*/
#if !defined _samp_included
#include <a_samp>
#endif
#if defined _samp_plate_ex
#endinput
#endif
#define _samp_plate_ex
native __SetVehicleNumberPlate(vehicleid, numberplate[]) = SetVehicleNumberPlate;
stock _SetVehicleNumberPlate(vehicleid, numberplate[])
{
if(strlen(numberplate) > 32) return 0; //Um Schaden zu vermeiden!
setproperty(.value=50+vehicleid,.string=numberplate);
return __SetVehicleNumberPlate(vehicleid, numberplate);
}
#if defined _ALS_SetVehicleNumberPlate
#undef SetVehicleNumberPlate
#else
#define _ALS_SetVehicleNumberPlate
#endif
#define SetVehicleNumberPlate _SetVehicleNumberPlate
/*
native GetVehicleNumberPlate(vehicleid);
*/
stock GetVehicleNumberPlate(vehicleid)
{
new plate[32];
getproperty(.value=50+vehicleid,.string=plate);
strunpack(plate,plate,sizeof(plate));
return plate;
}
Alles anzeigen
Nutzung:
new veh;
SetVehicleNumberPlate(veh,"Hallo test");
printf("Nummernschild: %s",GetVehicleNumberPlate(veh)); //Gibt "Hallo test" aus :)
1. ...wie meinst du das in einen String packen..für einen Dialog?
2. Wie prüfst du in welcher Fraktion jemand ist...
3. Oder meinst du einfach als SendClientMessage..dafür brauchst du die nicht in einen String packen ![]()
An sich ist das kein schöner Code...
Hier mal eine Alternative:
stock SendLongClientMessage(playerid, color, const string[])
{
new tmp[128],l=strlen(string);
if(l < 100) return SendClientMessage(playerid,color,string);
new space = strfind(string," ",false,80);
if(space == -1) return SendClientMessage(playerid,color,string);
strmid(tmp,string,0,space,sizeof(tmp)),strcat(tmp,"...",sizeof(tmp));
SendClientMessage(playerid,color,tmp);
strmid(tmp,string,space+1,l,sizeof(tmp)),strins(tmp,"...",0,sizeof(tmp));
SendClientMessage(playerid,color,tmp);
return 1;
}
Alles anzeigen
Dafür brauch man nicht mal eine Schleife ![]()
Die DrawDistance ist auch ein Float, also das im Enum ergänzen ![]()
Könnte mir jemand ein Textdraw Ticket System machen für die Supporter ? Also Rechts wie bei D.S.Z oder Breadfish Roleplay da ich das nicht hinkrieg, ich kenne mich nicht mit Textdraws aus da ich mit normalen Commands und weiteres arbeite, und wann Payday ist ganz oben wie bei LyD 0/60 und ja ich kenn mich mit Textdraws aus
Versuch dich doch mal selbst daran? ![]()
Ist nicht so schwer dank schönen Editoren ![]()
Hier den, den ich ganz praktisch finde: http://forum.sa-mp.com/showthread.php?t=117851
Dann hätten wir noch eine Deluxe Version: http://forum.sa-mp.com/showthread.php?t=543002
Und noch einen...den ich noch nie probiert hab: http://forum.sa-mp.com/showthread.php?t=376758
Gibt aber noch mehr...aber kannst ja mal einfach ein wenig schauen und probieren ![]()
PS: Denn ich bezweifle..dass dir jemand das alles designen + skripten wird für nada ![]()
Hat einer eine Idee für eine Mittelsmann Seite (Funktionen)
Hätte euch ja Vorschlagen hier zu schauen: https://mein-mittelsmann.de/
Aber...naja ![]()
Ehh die Punkte die es da gab..waren ja nicht schlecht:
Das ist doch aber MTA oder? ![]()