Guten Tag,
ich suche einen uploaded.net Premium Account für 30 Minuten!
/edit
Hab ne alternative gefunden.
Guten Tag,
ich suche einen uploaded.net Premium Account für 30 Minuten!
/edit
Hab ne alternative gefunden.
Verstehe nicht ganz was du meinst ( bin ein Anfänger )
Wie setzt du der Variable pCarKey einen Wert?
Schönes Tutorial, gut erklärt.
Aber wieso machst du dir so einen Umweg, warum nicht gleich mit sscanf arbeiten ?
mfg
ZitatAußerdem verwende ich in den Beispielen strtok, da dies ohne Plugin realsierbar ist und somit eine höhere Funktionalität gewährleistet.
Wenn der Timer abläuft, wird der Public RadbmxTimer aufgerufen.
Dort wird das Rad gelöscht und die Variable zurückgesetzt.
@m4a_X:
Naja, kommt immer auf den Gamemode Typ an.
Bei manchen Reallife/Roleplay Servern, gibt es Pickup/Drop/Inventar Systeme, dort eignet sich das ganze mit dem Timer am besten.
#define MAX_WEAPONS 50
new PlayerWeapons[MAX_PLAYERS][MAX_WEAPONS];
new Spawned[MAX_PLAYERS];
Dann unter OnPlayerSpawn in der letzten Zeile:
Spawned[playerid] = 1;
Unter OnPlayerConnect:
Spawned[playerid] = -1;
Am besten unten im Script:
stock GivePlayerWeapons(playerid, weaponid, ammo)
{
PlayerWeapons[playerid][weaponid] = weaponid;
GivePlayerWeapon(playerid, weaponid, ammo);
}
Waffen gibst du dann mit GivePlayerWeapons, statt mit GivePlayerWeapon.
In einem Sekundentimer am besten:
if(GetPlayerWeapon(i) >= 1 && 47)
{
new weaponid = GetPlayerWeapon(i);
if(PlayerWeapons[i][weaponid] == 0 && weaponid != 46 && !IsPlayerNPC(i))
{
if(Spawned[i] == 1)
{
SendClientMessage(i,-1,"Waffenhack erkannt.");
}
}
}
Mach es so:
SetTimer("PayDay", 60000, true);
public PayDay()
{
for(new playerid = 0; playerid < MAX_PLAYERS; playerid++)
{
if(IsPlayerConnected(playerid))
{
sInfo[playerid][payday]++;
if(sInfo[playerid][payday] == 60)
{
new paytext[300],paytext1[299];
PlayerPlaySound(playerid,1083,0,0,0);
SendClientMessage(playerid,COLOR_YELLOW,"_______________|Payday|_______________");
giveplayermoney(playerid,GetPlayerScore(playerid)*460);
format(paytext,sizeof(paytext),"Gehalt: {37FF00}+%i$ {FFFFFF}+| Steuern: {FF0005}-%i$ {FFFFFF}| Krankenversicherung: {FF0005}-%i$",GetPlayerScore(playerid)*400,GetPlayerScore(playerid)*50,GetPlayerScore(playerid)*30);
SendClientMessage(playerid,C_Weiß,paytext);
GivePlayerMoney(playerid,-GetPlayerScore(playerid)*50);
GivePlayerMoney(playerid,-GetPlayerScore(playerid)*30);
if(GetPlayerScore(playerid) >= 4)
{
format(paytext1,sizeof(paytext1),"KFZ-Versicherung: {FF0005}-%i$ {FFFFFF}| Wasser & Strom: {FF0005}-%i$ {FFFFFF}| Müllentsorgung: {FF0005}-%i$",GetPlayerScore(playerid)*22,GetPlayerScore(playerid)*8,GetPlayerScore(playerid)*4);
SendClientMessage(playerid,C_Weiß,paytext1);
GivePlayerMoney(playerid,-GetPlayerScore(playerid)*22);
GivePlayerMoney(playerid,-GetPlayerScore(playerid)*8);
GivePlayerMoney(playerid,-GetPlayerScore(playerid)*4);
}
new string[256],respektlevel;
sInfo[playerid][respekt]++;
respektlevel=GetPlayerScore(playerid)*3;
if(sInfo[playerid][respekt]>=respektlevel)
{
format(string,sizeof(string),"Du hast genug Respektpunkte für einen Levelaufstieg. Tippe: /buylevel",sInfo[playerid][respekt],respektlevel);
}
else
{
format(string,sizeof(string),"Respektpunkte: [%i / %i]",sInfo[playerid][respekt],respektlevel);
}
SendClientMessage(playerid,COLOR_YELLOW,string);
sInfo[playerid][payday]=0;
}
}
return 1;
}
}
Schau mal bei OnGameModeInit.
Kein Problem.
Sag das doch gleich:
ocmd:createhaus(playerid,params[])
{
new preis,interior,Float:ixc,Float:iyc,Float:izc;
if(!IsPlayerAnAdmin(playerid,3))return SendClientMessage(playerid, ROT, "Du bist kein Admin oder dein Rang ist zu niedrig!");
if(sscanf(params,"iifff",preis,interior,ixc,iyc,izc))return SendClientMessage(playerid,ROT,"Befehl: /createhaus [PREIS][INTERIOR][INT-X][INT-Y][INT-Z]");
new Float:xc, Float: yc, Float:zc;
GetPlayerPos(playerid,xc,yc,zc);
for(new i=1; i<sizeof(hInfo); i++)
{
if(hInfo[i][h_Erstellt] == 0)
{
hInfo[i][h_Erstellt] =1;
hInfo[i][h_x]=xc;
hInfo[i][h_y]=yc;
hInfo[i][h_z]=zc;
hInfo[i][h_ix]=Float:ixc;
hInfo[i][h_iy]=Float:iyc;
hInfo[i][h_iz]=Float:izc;
hInfo[i][h_interior]=interior;
hInfo[i][h_preis]=preis;
strmid(hInfo[i][h_besitzer],"",0,MAX_PLAYER_NAME,MAX_PLAYER_NAME);
updateHaus(i);
new query[256];
format(query,sizeof(query),"INSERT INTO house (h_id,h_Erstellt,h_x,h_y,h_z,h_ix,h_iy,h_iz,h_interior,preis) VALUES ('%i','%i','%f','%f','%f','%f','%f','%f','%i','%i')",i,hInfo[i][h_Erstellt],xc,yc,zc,hInfo[i][h_ix],hInfo[i][h_iy],hInfo[i][h_iz],hInfo[i][h_interior],hInfo[i][h_preis]);
mysql_function_query(dbverbindung, query, false,"","");
return 1;
}
}
return 1;
}
Schau mal:
Es existieren 0 Häuser.
Du gibst den Befehl ein und die Schleife geht durch ALLE Häuser, da ja keins existiert fängt das ganze bei ID 1 an.
Erstellst du nun z.B 9 weitere Häuser, sind wir bei ID 10.
Nun willst du ein 11 Haus erstellen, die Schleife geht durch (Beispiel: #define MAX_HAUS 300) also durch 300 und sieht das 10 Häuser bereits bestehen, also kommt ID 11 da die Variable h_Erstellt == 0 bei der ID 11 ist, da diese ID ja Frei ist, erstellt er das Haus mit der ID 11.
Falls du das mit MAX_HAUS machen möchtest:
#define MAX_HAUS 300
for(new i=1; i<sizeof(MAX_HAUS); i++)
Beachte das du damit nur 300 Häuser erstellen kannst.
Nein.
Die Schleife geht durch alle Häuser ja, doch dann frage ich ab ob h_Erstellt == 0 ist, sprich ob da nichts erstellt wurde bei der nächstliegenden ID.
Ich verstehe leider nicht, was du meinst
Falls du Interesse hast, kann ich dir das ganze gerne per Teamviewer machen.
ocmd:createhaus(playerid,params[])
{
new preis,interior,Float:ixc,Float:iyc,Float:izc;
if(!IsPlayerAnAdmin(playerid,3))return SendClientMessage(playerid, ROT, "Du bist kein Admin oder dein Rang ist zu niedrig!");
if(sscanf(params,"iifff",preis,interior,ixc,iyc,izc))return SendClientMessage(playerid,ROT,"Befehl: /createhaus [PREIS][INTERIOR][INT-X][INT-Y][INT-Z]");
new Float:xc, Float: yc, Float:zc;
GetPlayerPos(playerid,xc,yc,zc);
for(new i=1; i<sizeof(hInfo); i++)
{
if(hInfo[i][h_Erstellt] == 0)
{
hInfo[i][h_Erstellt] =1;
hInfo[i][h_x]=xc;
hInfo[i][h_y]=yc;
hInfo[i][h_z]=zc;
hInfo[i][h_ix]=Float:ixc;
hInfo[i][h_iy]=Float:iyc;
hInfo[i][h_iz]=Float:izc;
hInfo[i][h_interior]=interior;
hInfo[i][h_preis]=preis;
strmid(hInfo[i][h_besitzer],"",0,MAX_PLAYER_NAME,MAX_PLAYER_NAME);
updateHaus(i);
new query[256];
format(query,sizeof(query),"INSERT INTO house (h_id,h_Erstellt,h_x,h_y,h_z,h_ix,h_iy,h_iz,h_interior,preis) VALUES ('%i','%i','%f','%f','%f','%f','%f','%f','%i','%i')",i,hInfo[i][h_Erstellt],xc,yc,zc,hInfo[i][h_ix],hInfo[i][h_iy],hInfo[i][h_iz],hInfo[i][h_interior],hInfo[i][h_preis]);
mysql_function_query(dbverbindung, query, false,"","");
}
}
return 1;
}
Ersetz alle Haus Schleifen durch:
for(new i=1; i<sizeof(hInfo); i++)
Und erstell noch eine Variable für die Häuser mit dem Namen: h_Erstellt.
Er fragt ob du wieder Interesse hast, sicher das du da nicht gespielt hast?
Zeig mal die Funktion: getFreeHouseID und OnHausCreate.
Lad dir das aktuelle Plugin runter:
http://forum.sa-mp.com/showthread.php?t=102865
Wie erstellst du die Häuser?