[ FILTERSCRIPT ] DT_DynamicCar [Ver.: 1.3.7]
Beiträge von Jeffry
-
-
Der Befehl hat aber nichts mit dem Speichern in eine Datei zu tun.
Es muss so aussehen, beim Speichern:
new playersip[16];
GetPlayerIp(pID,playersip,sizeof(playersip));
dini_Set(Pfad_der_Spielerdatei, "IP", playerisip);Pfad_der_Spielerdatei logischerweise mit dem korrekten Pfad ersetzen.
EDIT:
Simon2202: War auch nicht auf dich bezogen. -
Verlässt du den Server bevor du in der Datenbank nachschaust?
Wenn nein, mach das mal.Wenn du es direkt speichern willst, dann füge bei REGISTER2 noch das hier vor dem return ein:
savePlayer(playerid); -
Allerdings fährt die Kamera jetzt erst links ans Auto (gerade) und dann fährt sie vor das Auto.
Ich weiß nicht genau wie du es haben willst, aber so entspricht es in etwa deinem Bild:
new Float:x, Float:y, Float:z, Float:a;
GetVehicleZAngle(vehicleid, a);
GetPlayerPos(playerid, x, y, z);
x += (5.0 * -floatcos(a, degrees));
y += (5.0 * -floatsin(a, degrees));
new Float:pos2x, Float:pos2y;
pos2x = x + (7.0 * floatsin(-a, degrees));
pos2y = y + (7.0 * floatcos(-a, degrees));GetPlayerPos(playerid, x, y, z);
InterpolateCameraPos(playerid, x, y, z+1, pos2x, pos2y, z, 3000, CAMERA_MOVE);
InterpolateCameraLookAt(playerid, pos2x, pos2y, z+1, x + (3.0 * floatsin(-a, degrees)), y + (3.0 * floatcos(-a, degrees)), z, 3000, CAMERA_MOVE);Von der Sicht des Autos aus nach vorne, dann dreht sie und schaut das Licht an, von etwas seitlich.
-
Und zwar wollte ich mal fragen wie man das abstellen kann das die Filterscript Dialoge überschrieben werden mit den Gamemode Dialoge?
Ich glaub auch nicht dass es dafür eine Möglichkeit gibt, aber könnte mich auch irren.
Es gibt eine Möglichkeit:
Als Include (oder ganz oben) in jedem Code:
new gPlayerDialog[MAX_PLAYERS] = {-1,...};stock ex_ShowPlayerDialog(playerid, dialogid, style, caption[], info[], button1[], button2[])
{
CallRemoteFunction("RemoveDialog", "d", playerid);
gPlayerDialog[playerid] = dialogid;
return ShowPlayerDialog(playerid, dialogid, style, caption, info, button1, button2);
}#if defined _HOOK_ShowPlayerDialog
#undef ShowPlayerDialog
#else
#define _HOOK_ShowPlayerDialog
#endif
#define ShowPlayerDialog ex_ShowPlayerDialogforward RemoveDialog(playerid);
public RemoveDialog(playerid)
{
gPlayerDialog[playerid] = -1;
return 1;
}OnDialogResponse:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(gPlayerDialog[playerid] == -1) return 1;
gPlayerDialog[playerid] = -1;//Hier geht's los mit deinen if(dialogid...) Verzweigungen
if(dialogid == DIALOG_1)
{
//...
}
return 1;
} -
Das hat aber nichts mit dem /wetter Befehl zu tun.
Du musst zu deinen /gotols /gotosf /gotolv Befehlen diesen Funktionsaufruf hinzufügen, sonst wird das Wetter nicht geändert.SetWetter();
Oder du machst noch eine Funktion die das nur für den einen Spieler prüft, weil so machst du es ja immer für alle.
-
So reicht es völlig:
if(dialogid==DIALOG_REGISTER)
{
if(response)
{
new name[MAX_PLAYER_NAME],query[128],passwort[35];
GetPlayerName(playerid,name,sizeof(name));
if(strlen(inputtext)>3)
{
//Registrierungsfunktion
mysql_escape_string(inputtext,passwort,dbhandle);
format(query,sizeof(query),"INSERT INTO user (username,password) VALUES ('%s','%s') ",name,passwort);
mysql_function_query(dbhandle,query,false,"OnPlayerRegister","d",playerid);//kann ich das auch beim DIALOG_REGISTER2 ausführen ?
TogglePlayerControllable(playerid,0);
sInfo[playerid][regstep] = 1;
ShowPlayerDialog(playerid,DIALOG_REGISTER2,DIALOG_SYTLE_LIST,"Wähle dein Geschlecht","Männlich\nWeiblich","Auswählen","");
return 1;
}
else
{
//Kleiner als 4 Zeichen
SendClientMessage(playerid,ROT,"Dein Passwort muss mindestens 4 Zeichen lang sein.");
ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Registrierung","Gib bitte dein gewünschtes Passwort an:","Okay","Abbrechen");
}
}
else
{
Kick(playerid);
}
return 1;
}if(dialogid==DIALOG_REGISTER2)
{
sInfo[playerid][geschlecht] = listitem+1; // 1 = männlich 2 = weiblich
sInfo[playerid][regstep] = 0;
sInfo[playerid][tutpart] = 1;
SetTimerEx("TutTimer",2000,false,"i",playerid);
return 1;
}Du brauchst keinen INSERT bei dem REGISTER2, sondern du speicherst das Geschlecht einfach bei deinem SpielerSpeichern.
-
Stimmt doch alles. Sicher, dass du es richtig testest?
-
Dann liegt es an deinem SetWetter. Debugge das mal so:
public SetWetter(){
new Float:xx, Float:yy, Float:zz;
for(new i=0; i< GetMaxPlayers(); i++){
if(IsPlayerConnected(i)){
GetPlayerPos(i, xx, yy, zz);
if((xx > -992.5172 && xx < 4000.0000) && (yy < 528.0000 && yy > -4000.0000)) SetPlayerWeather(i, Weather[0]), printf("Setze Wetter für %d zu %d in LS", i, Weather[0]);//LS
if((xx > -4000.0000 && xx< -992.5172) && (yy < 4000.0000 && yy > -4000.0000)) SetPlayerWeather(i, Weather[1]), printf("Setze Wetter für %d zu %d in SF", i, Weather[1]);//SF
if((xx > -992.5172 && xx< 4000.0000) && (yy < 4000.0000 && yy > 528.0000)) SetPlayerWeather(i, Weather[2]), printf("Setze Wetter für %d zu %d in LV", i, Weather[2]);//LV
}
}
return 1;
}Was wird geprintet?
-
Debugge es bitte mal, zum sehen, ob es an sscanf liegt, oder an der SetWetter Funktion:
ocmd:wetter(playerid,params[]){
if(!isAdmin(playerid,3)) return SendClientMessage(playerid,ROT,"Info: Du bist dazu nicht befugt!");
if(adminduty[playerid] == 0) return SendClientMessage(playerid,ROT,"Du bist nicht Aduty!");
new wid,wo[3];
if(sscanf(params,"s[3]i",wo,wid)) return SendClientMessage(playerid,-1,"Benutze: /wetter [LS/SF/LV] [WetterID]");
if(strcmp(wo,"LS",true) == 0) Weather[0] = wid;
if(strcmp(wo,"SF",true) == 0) Weather[1] = wid;
if(strcmp(wo,"LV",true) == 0) Weather[2] = wid;
printf("wo=%s | W0=%d | W1=%d | W2=%d", wo, Weather[0], Weather[1], Weather[2]);
SendClientMessage(playerid,-1,"Wetter erfolgreich geändert.");
return SetWetter();
}Was wird geprintet?
-
Dann schreib es so:
ocmd:wetter(playerid,params[]){
if(!isAdmin(playerid,3)) return SendClientMessage(playerid,ROT,"Info: Du bist dazu nicht befugt!");
if(adminduty[playerid] == 0) return SendClientMessage(playerid,ROT,"Du bist nicht Aduty!");
new wid,wo[3];
if(sscanf(params,"s[3]i",wo,wid)) return SendClientMessage(playerid,-1,"Benutze: /wetter [LS/SF/LV] [WetterID]");
if(strcmp(wo,"LS",true) == 0) Weather[0] = wid;
if(strcmp(wo,"SF",true) == 0) Weather[1] = wid;
if(strcmp(wo,"LV",true) == 0) Weather[2] = wid;
SendClientMessage(playerid,-1,"Wetter erfolgreich geändert.");
return SetWetter();
} -
Ich frage nochmal: Wie hast du "TorStatus" deklariert?
-
Das darf nicht in's enum:
enum tore{
bool:CNNGate,
bool:TERRORGate,
bool:HITMANGate,
bool:Marvinstor,
bool:Prasitor,
bool:Specing,
bool:AC_JOB1,
bool:AC_JOB2,
bool:AC_JOB3,
bool:AC_JOB4,
bool:AC_JOB5,
bool:Army1Gate,
bool:Army2Gate,
}new O_TORL;
new O_TORR;So.
Ich tippe darauf, dass TorStatus auch kein "bool" ist.
-
Wenn du das Plugin verwendest muss es so sein:
if(sscanf(params,"s[3]i",wo,wid)) return SendClientMessage(playerid,-1,"Benutze: /wetter [LS/SF/LV] [WetterID]"); -
Wie hast du "TorStatus" deklariert?
Bei den beiden letzten:
Entferne das bool, vor O_TORR/L. -
Du verwendest nirgends
http://wiki.sa-mp.com/wiki/SetWeather
(bzw "Player")Dass bedeutet, dass sich das Wetter auch nicht ändern kann.
-
Sorry, bin gestern Abend nicht mehr dazu gekommen mir das nochmal genau anzuschauen. Jetzt ist es so, dass hier so viel unterschiedlicher Code steht, da fehlt jeder Zusammenhang, vor allem weil du ja auch einiges geändert hast.
Kannst du bitte den Code der zu dem Tuning gehört, und das was dafür relevant ist, nochmals posten, so wie es jetzt ist, und den Log dazu, falls du einen hast?
Dann schau ich mir das heute Abend nochmal genau an. -
Was wird geprintet, wenn du es so einfügst?
public Geldupdate(playerid)
{
printf("Geldupdate für %d -> $%0.2f", playerid, SInfo[playerid][pGeld]);
format(str,sizeof(str),"~g~SA$ %.2f",SInfo[playerid][pGeld]);
printf("str = %s", str);
TextDrawSetString(Gelddraw[playerid], str);
return 1;
}Nutzt du das Textdraw oder die Geldvariable noch woanders, oder passiert der Fehler immer nur an dieser Stelle?
-
SetPlayerCameraLookAt fehlt da, deshalb klappt es nicht, grade kurz probiert.
forward UBSicht(playerid);
public UBSicht(playerid)
{
new Float:usX, Float:usY, Float:usZ;
GetPosVorSpieler(playerid, -5.0, usX, usY, usZ);
SetPlayerCameraPos(playerid, usX, usY, usZ+3);
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
SetPlayerCameraLookAt(playerid, x, y, z+3);
return 1;
}SetTimerEx("UBSicht", 25, true, "i", 16);
-
Hast du die andere Methode ausprobiert?
Wenn ja, und es auch nicht geht, poste das enum in dem pGeld deklariert ist.