Danke @Kaliber
jetzt habe ich das auch gerafft.
public OnPlayerPickUpPickup(playerid, pickupid)
{
if(pickupid == shopteamblue || pickupid == shopteamred || pickupid == shopteamgrey)
{
ShowMenuForPlayer(shopmenu,playerid);
TogglePlayerControllable(playerid,false);
}
else
{
maxmoney = maxmoney -1;
DestroyPickup(pickupid);
GivePlayerMoney(playerid, 1000);
}
return 1;
}
Alles anzeigen
Folgende Sache:
Ich genieree in 3 Zonen jede Sekunde 1 Geld pickup an einer random Stelle.
Jedoch habe ich recht schnell die Grenze von 4096 erreicht.
Macht das Einsetzen von einem Streamer da sinn, bzw. wieviele Pickups koennte ich dann einsetzen, und gibt es da dann sowas wie eine Stream Distanz bei Objekten? Oder verhalten diese sich genauso wie normale Pickups?
Weiteres Problem ist: Ich habe letztendlich nur 3 Pickups mit ID, und alle anderen (Geldscheine) geben dem Spieler 1000$.
Nun will ich jedoch andere Pickuptypen spawnen, Geldtaschen zum einsammeln die dann 10000 bringen sollen.
Jedoch weiss ich nicht wie ich bei random und immer wieder generierten Pickups dort eine ID zuweisen kann um damit was in OnPlayerPickUpPickup zu machen
public MoneyVillage()
{
totaltime = totaltime+1;
if(maxmoney < 4096)
{
new Float:ra1=((frandom(6)-334.0716));
new Float:ra2=((frandom(21)+2211.4011));
new Float:ra3=((frandom(1)+42.4844));
maxmoney = maxmoney +1;
bagvar = bagvar +1;
CreatePickup(1212,19,ra1,ra2,ra3, 0);
moneyval= moneyval+100000;
printf("SPAWNED: %d",maxmoney);
}
}
Alles anzeigen
Weiterhin habe ich einen Befehl geschaffen um Geld zu droppen, kann ich den eventuell noch optimieren? Ich wollte verhindern dass beim droppen die Grenze von 4096 Pickups ueberschritten wird weil sonst der Serber abgeschmiert ist
maxmoney ist hierbei die Anzahl an pickups, frandom eine Funktion fuer random Floats
if(strcmp(cmd, "/dropmoney", true) == 0)
{
new tmp[20], dropval;
tmp = strtok(cmdtext, idx);
dropval = strval(tmp);
if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "USAGE: /dropmoney [value]");
if(GetPlayerMoney(playerid) >= dropval && maxmoney <= 4000 && dropval > 0 && dropval <= 100000 && (maxmoney+dropval/100)<4095 && dropval != 0)
{
if(dropval%1000 == 0)
{
new dropstring[32];
format(dropstring,sizeof(dropstring),"SERVER: Dropped $%d",dropval);
SendClientMessage(playerid, COLOR_WHITE, dropstring);
GivePlayerMoney(playerid,-dropval);
for(new i; i <dropval/1000; i++)
{
maxmoney = maxmoney +1;
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid,x,y,z);
new Float:ra1=((frandom(3)+x+0.5));
new Float:ra2=((frandom(3)+y+0.5));
new Float:ra3=((frandom(1)+z-0.8));
CreatePickup(1212,19,ra1,ra2,ra3, 0);
}
}
else
{
if(dropval%1000 != 0)
{
SendClientMessage(playerid, COLOR_WHITE, "SERVER: The desired value has to be divisible by 1000");
}
}
}
else
{
if(GetPlayerMoney(playerid) < dropval )
{
SendClientMessage(playerid, COLOR_WHITE, "SERVER: You do not have enough money.");
}
if(dropval > 100000)
{
SendClientMessage(playerid, COLOR_WHITE, "SERVER: The desired value has to be $100000 or less");
}
if(dropval==0)
{
SendClientMessage(playerid, COLOR_WHITE, "SERVER: You can not drop nothing!");
}
if((maxmoney+dropval/1000)>=4095 && dropval <= 100000)
{
new allowmoney[128];
format(allowmoney,sizeof(allowmoney),"SERVER: Because of limitations you can not drop more than $%d right now!",(4095-maxmoney)*1000);
SendClientMessage(playerid,COLOR_WHITE,allowmoney);
printf("Player may only drop %d",(4095-maxmoney)*1000);
}
}
}
Alles anzeigen
Den wuerde ich dann gerne in den Codeschnippsel Thread posten