Beim einloggen:
SetPVarInt(playerid,"eingeloggt",1);
beim spawnen:
if(GetPVarInt(playerid,"eingeloggt") == 0)
{
SendClientMessage(playerid,FARBE,"Du wurdest gekickt weil du nicht eingeloggt bist.");
Kick(playerid);
}
Beim einloggen:
SetPVarInt(playerid,"eingeloggt",1);
beim spawnen:
if(GetPVarInt(playerid,"eingeloggt") == 0)
{
SendClientMessage(playerid,FARBE,"Du wurdest gekickt weil du nicht eingeloggt bist.");
Kick(playerid);
}
Dafür brauchste einige Programme:
3D-Programm (3D Studio max + kams (erweiterung um dff dateien zu laden)
Txdworkshop (um texturen und models aus der img. datei zu bekommen)
Grafikprogramm (um texturen zu machen)
Dann einfach nach tutorials googlen oder wenn du 3ds max hast auf youtube: http://www.youtube.com/user/ddoodm
Zitatdini_create(Spielerdatei);
dini_set(Spielerdatei,"Passwort",key);
du musst dini_Create schreiben nicht dini_create. Das gleiche gilt auch für dini_Set
new Float:xx, Float:yy, Float:zz;
GetPlayerPos(playerid, xx, yy, zz);
if((xx > -992.5172 && xx < 4000.0000) && (yy < 528.0000 && yy > -4000.0000)) //Los Santos
{
//Wenn der Spieler in Los Santos ist
}
so kannst du Abfragen ob der Spieler in Los Santos ist
new Test[64]
strmid(test,dini_Get("/UserFiles/Test.ini", "Test"),0,256,256);
print("Test:");
print(Test);
schon probiert?
Hey
Hab nen nervigen Bug mit den Skins...
Wenn man auf meinen Server connected wird der Skin aus einer Datei ausgelesen. Manchmal hab ich dann aber trotzdem den CJ-Skin. (passiert auch bei anderen Spielern). Wenn ich dann aber überprüf welchen Skin ich hab (GetPlayerSkin) dann steht da die richtige Skin-ID. Achja: alle anderen sehen meinen richtigen Skin nur ich seh den CJ-Skin Weiß jemand an was da liegen kann?
mfg
zu 2.: Mach doch einfach bei OnGameModeInit SendRconCommand("loadfs NAME");
Du kannst das Fahrzeug auch einfach in eine andere Virtualworld setzen und in der Datei abspeichern, dass das Fahrzeug "gelöscht" ist. Das Fahrzeug spawnt zwar immernoch, aber man sieht es nicht und es gibt keine ID-Verschiebung
Verwende einfach das hier:
stock SendClientMessageInRange(playerid,msg[],farbe,range)
{
for(new i=0;i<GetMaxPlayers();i++)
{
new Float:x,Float:y,Float:z;
GetPlayerPos(playerid,x,y,z);
if(IsPlayerInRangeOfPoint(i,range,x,y,z))
{
SendClientMessage(i,color,msg);
}
}
return 1;
}
Bsp:
//OnPlayerSpawn
SendClientMessageInRange(playerid,"Ich bin gespawnt",DEINE FARBE,100);
Du musst statt dini_IntSet, dini_FloatSet nehmen.
60000 millisekunden sind 1 Minute. Im Timer wird pro Minute die Variable hochgehählt und wenn sie auf 60 ist (60*60 = 3600 = 1 Stunde) bekommt man die Waffe etc. Das praktische daran ist, man kann jederzeit die onlinezeit variable abfragen.
stock Register [playerid,pw]
{
new Spielerdatei[64];
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof(name));
format(Spielerdatei,sizeof(Spielerdatei,"/Accounts/%s.txt",name);
dini_Create(Spielerdatei);
dini_Set(Spielerdatei,"Passwort",pw);
SendClientMessage(playerid, COLOR_Hellrot,"Erfolgreich Registriert.");
return 1;
}
wenn ich mich nicht irre müsste das:
stock Register(playerid,pw)
{
new Spielerdatei[64];
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof(name));
format(Spielerdatei,sizeof(Spielerdatei,"/Accounts/%s.txt",name);
dini_Create(Spielerdatei);
dini_Set(Spielerdatei,"Passwort",pw);
SendClientMessage(playerid, COLOR_Hellrot,"Erfolgreich Registriert.");
return 1;
}
heißen
Game: Wenn er aber mehrere Virtualworlds verwendet (1: DM, 2 Stunt usw.) tut deine Variante nichtmehr.
PS: Man schreibt mich Haxler mit "a"
mit MAX_PLAYERS wird die Variable für alle Spieler erstellt.
EDIT:
zu 3:
new onlinezeit[MAX_PLAYERS];
forward Online(playerid);
// OnPlayerConnect
onlinezeit[playerid] =0;
SetTimerEx("Online",60000,1,"d",playerid);
// OnPlayerDisconnect
onlinezeit[playerid] =0;
// Public:
public Online(playerid)
{
onlinezeit[playerid] ++;
if(onlinezeit[playerid] >= 60)
{
GivePlayerWeapon(playerid,WAFFENID,1000);
SendClientMessage(playerid,FARBE,"Da du 1 Stunde online warst, bekommst du eine Waffe!");
onlinezeit[playerid] =0;
}
return 1;
}
Nicht getestet aber soltle funktionieren. Statt WAFFENID musst du eine Waffen-ID eingeben und statt FARBE eine Farbe.
Unter public OnPlayerPickUpPickup(playerid, pickupid).
Einfach beim Befehl abfragen, in welcher Virtualworld der Spieler ist:
new vw = GetPlayerVirtualWorld(playerid);
// Beispiel
if(vw == 1)return SendClientMessage(playerid,farbe,"Du darfst diesen Befehl hier nicht verwenden!"); // Wenn der Spieler in der Virtualworld 1 bekommt er die Nachricht
Kommt die Nachricht oder passiert überhaupt nichts?
EDIT: hab nen fehler entdeckt
public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(newstate == PLAYER_STATE_DRIVER && oldstate == PLAYER_STATE_ONFOOT)
{
new vehicleid = GetPlayerVehicleID(playerid);
if(LSPDFahrzeug(vehicleid) && SpielerInfo[playerid][Firma] != 1)
{
SendClientMessage(playerid,COLOR_GRAD2,"Du bist kein Mitglied des 'LSPD'");
RemovePlayerFromVehicle(playerid);
}
else
if(SFPDFahrzeug(vehicleid) && SpielerInfo[playerid][Firma] != 2)
{
SendClientMessage(playerid,COLOR_GRAD2,"Du bist kein Mitglied des 'SFPD'");
RemovePlayerFromVehicle(playerid);
}
else
if(LVPDFahrzeug(vehicleid) && SpielerInfo[playerid][Firma] != 3)
{
SendClientMessage(playerid,COLOR_GRAD2,"Du bist kein Mitglied des 'LVPD'");
RemovePlayerFromVehicle(playerid);
}
}
return 1;
}
Nein eigentlich nicht. Hast du es schonmal mit einer anderen Pickup-ID versucht?
Ich würds so machen:
public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(newstate == PLAYER_STATE_DRIVER && oldstate == PLAYER_STATE_ONFOOT)
{
new vehid = GetPlayerVehicleID(playerid);
if(LSPDFahrzeug(vehicleid) && SpielerInfo[playerid][Firma] != 1)
{
SendClientMessage(playerid,COLOR_GRAD2,"Du bist kein Mitglied des 'LSPD'");
RemovePlayerFromVehicle(playerid);
}
else
if(SFPDFahrzeug(vehicleid) && SpielerInfo[playerid][Firma] != 2)
{
SendClientMessage(playerid,COLOR_GRAD2,"Du bist kein Mitglied des 'SFPD'");
RemovePlayerFromVehicle(playerid);
}
else
if(LVPDFahrzeug(vehicleid) && SpielerInfo[playerid][Firma] != 3)
{
SendClientMessage(playerid,COLOR_GRAD2,"Du bist kein Mitglied des 'LVPD'");
RemovePlayerFromVehicle(playerid);
}
}
return 1;
}
Bei deiner Variante wird das Fahrzeug für alle Spieler abgeschlossen, wenn der Spieler nicht zur gewählten Firma gehört.
Nach OnPlayerDeath wird OnPlayerSpawn aufgerufen. D.H. wenn du in OnPlayerSpawn den Spieler an eine bestimmte Position teleportierst, ist dein Code unter OnPlayerDeath nutzlos.
public OnPlayerDeath(playerid, killerid, reason)
{
if(GetPlayerVirtualWorld(playerid) == 1)
{
SetPVarInt(playerid,"dmtot",1);
}
return 1;
}
public OnPlayerSpawn(playerid)
{
if(GetPVarInt(playerid,"dmtot")==1)
{
GivePlayerWeapon(playerid, 8, 1);
GivePlayerWeapon(playerid, 24, 100);
GivePlayerWeapon(playerid, 31, 500);
GivePlayerWeapon(playerid, 25, 100);
GivePlayerWeapon(playerid, 34, 20);
GivePlayerWeapon(playerid, 17, 10);
GivePlayerWeapon(playerid, 28, 400);
SetPlayerPos(playerid, 18.7913,2218.5874,123.9989);
SetPVarInt(playerid,"dmtot",0);
}
else
// Restlicher Code
}