Achte bei Zeilennummer 170 und 187 auf die Zeilenausrichtung! Und wegen dem ret_memcpy, ersetze die Include Datei dini.inc mit der hier im Anhang!
Beiträge von Templer
-
-
Die Zahl 115 weg, ka was du damit erreichen wolltest
SetVehiclePos(pVehicle,2967.0801,-1678.4745,872.0);
SetPlayerPos(playerid,2967.0801,-1678.4745,872.0); -
Für das erstellen von Textdraws empfehle ich dir das hier: Zamaroht's Textdraw Editor v1.0, womit du InGame Textdraws erstellen kannst und wegen Tankanzeige bzw. TankSystem hier ein Topic wo ich gestern einem geholfen habe >>Klick Mich<<
-
Es ist ganz und gar nicht schwer, hier ein kleines Beispiel:
#define CHECK_STANDART (1) //ID für STANDART!
#define CHECK_PARLAMENT (2) //ID für Parlament z.B.new gCheckStatus[MAX_PLAYERS];
public OnPlayerConnect(playerid)
{
gCheckStatus[playerid] = -1;
return 1;
}public OnPlayerEnterCheckpoint(playerid)
{
if(gCheckStatus[playerid] != -1)
{
DisablePlayerCheckpoint(playerid);
gCheckStatus[playerid] = -1;
switch (gCheckStatus[playerid])
{
case CHECK_STANDART:
{
PlayerPlaySound(playerid, 1058, 0.0, 0.0, 0.0);
GameTextForPlayer(playerid, "~w~Du bist am Ziel~n~~y~angekommen!", 5000, 1);
}
case CHECK_PARLAMENT:
{
PlayerPlaySound(playerid, 1058, 0.0, 0.0, 0.0);
GameTextForPlayer(playerid, "~w~Du bist am~n~~y~Parlament!", 5000, 1);
}
}
}
return 1;
}public OnPlayerCommandText(playerid, cmdtext[])
{
if(strcmp(cmdtext, "/checktest", false) == 0)
{
SetPlayerCheckpoint(playerid, 123.0, 123.0, 123.0, 100.0); //Erfundene Koordinaten ^^
gCheckStatus[playerid] = CHECK_STANDART;
GameTextForPlayer(playerid, "~w~Checkpoint ~g~gesetzt!", 5000, 1);
return 1;
}
if(strcmp(cmdtext, "/checktest2", false) == 0)
{
SetPlayerCheckpoint(playerid, 123.0, 123.0, 123.0, 100.0); //Erfundene Koordinaten ^^
gCheckStatus[playerid] = CHECK_PARLAMENT;
GameTextForPlayer(playerid, "~w~Checkpoint zum ~y~Parlament~n~~g~gesetzt!", 5000, 1);
return 1;
}
return 0;
} -
strtok ersetzt nicht den split Funktion. Das was du hier versuchst zu machen, ist einen String zu splitten nach dem Delimitter ',', jedoch kann man auch das strtok umschreiben, das man einen benutzerdefinierten Delimitter auch verwendet kann, also füge nun folgenden stock in dein Script:
stock strtokEx(const string[], &index, delimitter) //edited by Templer
{
new length = strlen(string);
while ((index < length) && (string[index] <= delimitter))
{
index++;
}new offset = index;
new result[20];
while ((index < length) && (string[index] > delimitter) && ((index - offset) < (sizeof(result) - 1)))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
return result;
}und ersetze dann deine Zeilen mit diesen hier:
strmid(HausDaten[_cache_haus][Besitzer],strtokEx(line,haus_index,','),0,MAX_PLAYER_NAME,MAX_PLAYER_NAME);
HausDaten[_cache_haus][ax] = floatstr(strtokEx(line,haus_index,','));
HausDaten[_cache_haus][ay] = floatstr(strtokEx(line,haus_index,','));
HausDaten[_cache_haus][az] = floatstr(strtokEx(line,haus_index,','));
HausDaten[_cache_haus][ix] = floatstr(strtokEx(line,haus_index,','));
HausDaten[_cache_haus][iy] = floatstr(strtokEx(line,haus_index,','));
HausDaten[_cache_haus][iz] = floatstr(strtokEx(line,haus_index,','));
HausDaten[_cache_haus][interior] = strval(strtokEx(line,haus_index,','));
HausDaten[_cache_haus][virtual_world] = strval(strtokEx(line,haus_index,','));
HausDaten[_cache_haus][kosten] = strval(strtokEx(line,haus_index,','));
HausDaten[_cache_haus][play_time] = strval(strtokEx(line,haus_index,','));
HausDaten[_cache_haus][nicht_zum_kauf] = strval(strtokEx(line,haus_index,','));
HausDaten[_cache_haus][verschlossen] = strval(strtokEx(line,haus_index,',')); -
Dann mach uns mal ein Screen InGame davon wie es bei /wanted angezeigt wird
-
Existiert auch der Dateipfad und die Datei selber von accFormat? Groß-/Kleinschreibung auch beachten
-
Du weißt schon, dass folgende Zeile unter OnGameModeInit gehört?
publc OnGameModeInit()
{
garagesfpd = CreatePickup(1239,23,269.5619,116.9947,1004.6172);//Garage->SFPD
return 1;
}und die Definition new oben in dein Script, am besten unter den #define Zeilen
new garagesfpd;
-
Einfach diese Zeile dazufügen
if(!strlen(strget(cmdtext, 1)) || !strlen(strget(cmdtext, 2)) || !strlen(strget(cmdtext, 3))) return SendClientMessage(playerid,COLOR_ROT,"VERWENDUNG: /veh [model] [farbe1] [farbe2]");
So ist das Endergebnis:if(!strcmp(strget(cmdtext, 0), "/veh"))
{
if(IstSpielerAdmin[playerid] == 1)
{
if(!strlen(strget(cmdtext, 1)) || !strlen(strget(cmdtext, 2)) || !strlen(strget(cmdtext, 3))) return SendClientMessage(playerid,COLOR_ROT,"VERWENDUNG: /veh [model] [farbe1] [farbe2]");
new autoid = strval(strget(cmdtext, 1));
new farbe1 = strval(strget(cmdtext, 2));
new farbe2 = strval(strget(cmdtext, 3));
if(autoid <= 399)
{
SendClientMessage(playerid,COLOR_ROT,"[GAMEMASTER]:So Eine Car Id gibt es Nicht (400 bis 612)");
return 1;
}
if(autoid >= 612)
{
SendClientMessage(playerid,COLOR_ROT,"[GAMEMASTER]:So Eine Car Id gibt es Nicht (400 bis 612)");
return 1;
}
else
{
new string[128];
new Float:x, Float:y, Float:z, Float:za, Auto;
new Text3D:AdminAuto = Create3DTextLabel("LS-ADMIN",COLOR_ORANGE,30.0,30.0,5.0,30.0,1);
GetPlayerPos(playerid, x, y, z);
GetPlayerFacingAngle(playerid,za);
Auto = CreateVehicle(autoid, x, y, z, za, farbe1, farbe2, -1);
PutPlayerInVehicle(playerid, Auto, 0);
Attach3DTextLabelToVehicle(AdminAuto, Auto, 0.0, 0.0, 0.0);
format(string, sizeof(string), "Dein Auto wurde erfolgreich gespawn! AutoID:%d Farbe1:%d Farbe2:%d", autoid, farbe1, farbe2);
SendClientMessage(playerid, COLOR_PINK, string);
return 1;
}
}
else
{
SendClientMessage(playerid,COLOR_ROT,"[GAMEMASTER]:Du bist kein Admin!");
return 1;
}
} -
Die Theorie ist, einen Textdraw immer wieder neu erstellen lassen mit einem Timer und die Boxgröße mit der funktion floatadd um einen gewissen Wert erhöhen.
-
Hab es für dich schöner ausgerichtet und den Fehler behoben, er lag an der Zeile hier:
format(string, 256, "%s %d", string, name, bst);
Also das folgende einfach mit deinem ganz ersetzen
dcmd_wanteds(playerid,params[])
{
#pragma unused params
if(!IsPlayerConnected(playerid)) return 1;
new name[MAX_PLAYER_NAME], s[128], string[265];
GetPlayerName(playerid,name,sizeof(name));
format(s,sizeof(s),"acc/%s.ini",name);
new jobid = dini_Int(s, "job");
if(jobid == 1 || jobid == 2 || jobid == 3 || jobid == 4 || jobid == 15)
{
SendClientMessage(playerid, rot, "|_Wanted-Datenbank_|");
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i)) continue;
GetPlayerName(i,name,sizeof(name));
format(s,sizeof(s),"acc/%s.ini",name);
new bst = dini_Int(s, "wanted");
if(bst >= 1)
{
format(string, 256, "%s %d", name, bst);
SendClientMessage(playerid, Gelb, string);
}
}
}
return 1;
} -
Also entweder du nützt es, wie Blackfox es erwähnt hat, in OnPlayerPickUpPickup, womit du dann dein public SpielerImPickup nichtmehr brauchst, dann wäre es so (was ich eher glaube du versucht hast zu machen)
new garagesfpd;
public OnGameModeInit()
{
garagesfpd = CreatePickup(1239,23,269.5619,116.9947,1004.6172);//Garage->SFPD
return 1;
}
public OnPlayerPickUpPickup(playerid, pickupid)
{
if(pickupid == garagesfpd)
{
SetPlayerInterior(playerid,10);
SetPlayerPos(playerid,268.0854,118.7060,1004.6172);
Spieler[playerid][Int] = 10;
GameTextForPlayer(playerid,"Du bist nun im SFPD",5000,4);
return 1;
}
return 1;
}
oder du deinen public als Timer laufen lässt und dann IsPlayerInRangeOfPoint verwendest:
forward SpielerImPickup();public OnGameModeInit()
{
CreatePickup(1239,23,269.5619,116.9947,1004.6172);//Garage->SFPD
SetTimer("SpielerImPickup", 1000, 1);
return 1;
}public SpielerImPickup()
{
new playerid = 0;
for(; playerid < MAX_PLAYERS; playerid++)
{
if(IsPlayerInRangeOfPoint(playerid, 3.5, 269.5619,116.9947,1004.6172))
{
SetPlayerInterior(playerid,10);
SetPlayerPos(playerid,268.0854,118.7060,1004.6172);
Spieler[playerid][Int] = 10;
GameTextForPlayer(playerid,"Du bist nun im SFPD",5000,4);
}
}
return 1;
}Empfohlen wäre jedoch die Variante mit OnPlayerPickUpPickup
-
Godfather und Selfmade ist kein Unterscheid, nur andere Variablen Bezeichnungen, also müsstest du das für dich umschreiben können
-
Wo wird das Wanted ausgelesen beim Einloggen? Also Code bitte.
-
public OnPlayerSpawn(playerid)
{
TogglePlayerControllable(playerid, 1);
if(gPlayerLogged[playerid] == 0)
{
SetPlayerPos(playerid, 1191.7267,-1987.8882,66.5406); //Position wo Spieler steht
SetPlayerFacingAngle(playerid, 118.0); //Welche Ausrichtung der Spieler steht
SetPlayerCameraPos(playerid, 1185.3153,-1991.2488,68.1091); //Die Position der Kamera
SetPlayerCameraLookAt(playerid, 1191.7267,-1987.8882,66.5406); //Die Position der Kamera wohin sie schauen soll!
TogglePlayerControllable(playerid, 0);
if(gPlayerAccount[playerid] == 1) return SendClientMessage(playerid, 0xFFFFFF00, "Du musst dich vorher anmelden mit /login");
else return SendClientMessage(playerid, 0xFFFFFF00, "Du musst dich vorher registrieren mit /register");
}
if(pFirstLog[playerid] == true)
{
SetPlayerPos(playerid,0.0,0.0,0.0); // Tutorial Position
TogglePlayerControllable(playerid,false);
TutTime[playerid] = 1;
TutTimer[playerid] = SetTimerEx("Tutorial",1000,1,"i",playerid);
return 1; //<- Dieses return hat gefehlt!
}
return 1;
} -
Indem du entweder meine vorherige Variante nützt oder deine ChatRadius Variante! Beides ergibt doppelt
-
Für sowas nimmt man kein sscanf her, also bleib bei strcmp hier
if(NimmSkin[playerid] == 255)
{
if(!strcmp("next",text,false))
{
switch(NimmSkinID[playerid])
{
case 1: //Polizei
{
if(NimmImmerSkin[playerid] == 1) { SetPlayerSkin(playerid, JoinPed[0][0]); NimmImmerSkin[playerid] = 1; GenommenerSkin[playerid] = JoinPed[0][0]; }
else if(NimmImmerSkin[playerid] == 2) { SetPlayerSkin(playerid, JoinPed[1][0]); NimmImmerSkin[playerid] = 2; GenommenerSkin[playerid] = JoinPed[1][0]; }
else if(NimmImmerSkin[playerid] == 3) { SetPlayerSkin(playerid, JoinPed[2][0]); NimmImmerSkin[playerid] = 3; GenommenerSkin[playerid] = JoinPed[2][0]; }
}
case 2: //Fahrschule
{
if(NimmImmerSkin[playerid] == 1) { SetPlayerSkin(playerid, JoinPed[3][0]); NimmImmerSkin[playerid] = 1; GenommenerSkin[playerid] = JoinPed[3][0]; }
else if(NimmImmerSkin[playerid] == 2) { SetPlayerSkin(playerid, JoinPed[4][0]); NimmImmerSkin[playerid] = 2; GenommenerSkin[playerid] = JoinPed[4][0]; }
else if(NimmImmerSkin[playerid] == 3) { SetPlayerSkin(playerid, JoinPed[5][0]); NimmImmerSkin[playerid] = 3; GenommenerSkin[playerid] = JoinPed[5][0]; }
}
}
return 0;
}
else if(!strcmp("fertig",text,false))
{
Spieler[playerid][Skin] = NimmSkin[playerid];
SetSpawnInfo(playerid,Spieler[playerid][Team],Spieler[playerid][Skin],0.0,0.0,0.0,0,0,0,0,0,0,0);
gTeam[playerid] = Spieler[playerid][Team];
SpawnPlayer(playerid);
NimmImmerSkin[playerid] = 0;
NimmSkinID[playerid] = 0;
NimmSkin[playerid] = 0;
return 0;
}
else return SendClientMessage(playerid,Rot,"Benutze 'next' oder 'fertig'");
} -
also beim GF ises ja so, dass es dort HouseInfo[id][hOwner] gibt, also würde es dann so gehen...
for(new house = 0; house < sizeof(HouseInfo); house++)
{
if(strcmp(HouseInfo[house][hOwner], PlayerInfo[playerid][pName], false) == 0)
{
//Wenn Spieler gefunden und Namen übereinstimmen Code
return 1;
}
} -
Hagi Ignorierst du gerne Posts die vorher gemacht worden sind? Das haben wir schon alles durch was du meinst
Außerdem hast du den gleichen Fehler gemacht Hagi, obwohl du es richtig beschrieben hast
-
Hab grad was besseres gefunden wie man deine Theorie anwendet, siehe hier
public OnGameModeInit()
{
for(new i = 0; i < MAX_EINGANG; i++)
{
EingangPick[i] = Create3DTextLabel("Eingang[Entertaste]",0x00A4DCFF,Eingang[i][0],Eingang[i][1],Eingang[i][2], 10,0, 0);
}
return 1;
}//Edit: Was für Errors meinst du denn?