ocmd:buysnack(playerid,params[])
{
if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT)return SendClientMessage(playerid,C_Error,"Du bist nicht zu Fuß!");
if(!IsPlayerNearSnack(playerid))return SendClientMessage(playerid,C_Error,"Du bist nicht in der Nähe eines Snackautomats.");
if(sInfo[playerid][canbuysnack] == 0) return SendClientMessage(playerid,COLOR_GRAY,"* Du kannst nur alle 10 Sekunden einen Snack kaufen!");
new snackid = GetPlayerSnackID(playerid),Float:PlayerHealth;
GetPlayerHealth(playerid,PlayerHealth);
if(getplayermoney(playerid)<=Food[snackid][fprice])return SendClientMessage(playerid,COLOR_GRAY,"Du hast nicht genug Geld dabei!");
if(PlayerHealth >= 80) return SendClientMessage(playerid,COLOR_GRAY,"* Du hast keinen Hunger!");
if(Food[snackid][fvalue] == 0) return SendClientMessage(playerid,COLOR_GRAY,"* Der Automat ist leer!");
TogglePlayerControllable(playerid,false);
TogglePlayerControllable(playerid,true);
ApplyAnimation(playerid,"VENDING","VEND_Use",4.1,0,1,1,0,2000,1);
Food[snackid][fvalue]--;
UpdateSnackLabel(GetPlayerSnackID(playerid));
SetTimerEx("ClearAnimations", 2000, false, "d", playerid);
SetTimerEx("AllowSnackBuy", 10000, false, "d", playerid);
sInfo[playerid][canbuysnack] = 0;
SetPlayerHealth(playerid,PlayerHealth + 20);
return 1;
}
Alles anzeigen
Kleine Information den Befehl habe ich umgeschrieben, eigentlich wird er so ähnlich beim drücken der Entertaste ausgeführt (also nicht wundern warum dort
"#1 000117fc in public OnPlayerKeyStateChange (0, 16, 0) from script.amx" steht ... hab nur kurz die Entertaste gedrückt um es auch dort nochmal zu testen.)
stock IsPlayerNearSnack(playerid)
{
for(new i = 0; i < MAX_FOODS; i++)
{
if(IsPlayerInRangeOfPoint(playerid,3.0,Food[i][fx],Food[i][fy],Food[i][fz]))
{
if(Food[i][fdisabled] == 0)return 1;
}
}
return 0;
}
Alles anzeigen