Başlık troll değil. İsim bulamadığımdan öyle koyma gereği duydum. :D Bu script ile 1 ile 30 saniye seçip üfleyebilirsiniz. Üfleme sırası boyunca yanınıza yaklaşan uçurulur. (Yani rüzgarın bir kağıda değmesi gibi)
Kullanım Bilgileri:
/ufle (Saniye) --> Minimum 1, maksimum 30 saniye üfler.
Kod Paylaşımı:
#include <a_samp>
#include <zcmd>
#include <sscanf2>
new uflemedurumu[MAX_PLAYERS], ufluyoryinebizimki[MAX_PLAYERS], baksi[MAX_PLAYERS];
CMD:ufle(playerid, params[])
{
new sid;
if(sscanf(params, "d", sid)) return SendClientMessage(playerid, -1, "{2DA4A6}[KULLANIM]: {FFFFFF}/ufle (Saniye)");
if(sid < 1 || sid > 30) return SendClientMessage(playerid, -1, "{2DA4A6}[HATA]: {FFFFFF}Minimum 1, maksimum 30 saniye giriniz.");
if(uflemedurumu[playerid] == 1) return SendClientMessage(playerid, -1, "{2DA4A6}[HATA]: {FFFFFF}Şu an zaten üflüyorsunuz, biraz bekleyiniz.");
ApplyAnimation(playerid, "BD_FIRE", "WASH_UP", 4.1, true, false, false, false, 0, false);
ApplyAnimation(playerid, "BD_FIRE", "WASH_UP", 4.1, true, false, false, false, 0, false);
ufluyoryinebizimki[playerid] = sid;
uflemedurumu[playerid] = 1;
baksi[playerid] = SetTimerEx("OTimer_", 1000, 1, "i", playerid);
return 1;
}
forward OTimer_(playerid);
public OTimer_(playerid)
{
if(ufluyoryinebizimki[playerid] == 1) uflemedurumu[playerid] = 0, ClearAnimations(playerid), KillTimer(baksi[playerid]);
if(ufluyoryinebizimki[playerid] > 0) ufluyoryinebizimki[playerid] --;
for(new i=0; i < GetPlayerPoolSize(); i++)
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
if(IsPlayerInRangeOfPoint(i, 3.0, x, y, z))
{
if(playerid != i)
{
if(ufluyoryinebizimki[playerid] > 0)
{
new Float:dx, Float:dy, Float:dz;
GetPlayerPos(i, dx, dy, dz);
SetPlayerPos(i, dx-4, dy, dz);
}
}
}
}
return 1;
}
Ellerine sağlık, sistemden birkaç ekran görüntüsü ve pastebin linkleri eklemen fena olmazdı :helal:
Pastebin koyarsan sevinirim. for(new i; i < MAX_PLAYERS; i++) yerine for(new i = 0, j = GetPlayerPoolSize(); i <= j; i++) kullanırsan daha sağlıklı olur. Ayrıca timer i OnPlayerUpdate de kullanmışsın, bildiğim kadarıyla OnPlayerUpdate her saniye update etmiyor. Saniyede 2-3 defa Update olabilir. En sağlıklısı timer kullan.
Alıntı yapılan: Excision - 13 Temmuz 2017, 17:03:03
Pastebin koyarsan sevinirim. for(new i; i < MAX_PLAYERS; i++) yerine for(new i = 0, j = GetPlayerPoolSize(); i <= j; i++) kullanırsan daha sağlıklı olur. Ayrıca timer i OnPlayerUpdate de kullanmışsın, bildiğim kadarıyla OnPlayerUpdate her saniye update etmiyor. Saniyede 2-3 defa Update olabilir. En sağlıklısı timer kullan.
26 kere falan ediyor ortalama. Dalgınlığıma gelmiş. GetPlayerPoolSize ile benim yaptığım kod aynı işlevi görüyor fakat seninki daha sağlıklı.
Timerı düzelttikten sonra konuyu güncelleyeceğim. Konu düzenlendi.
Paylaşım için teşekkürler.
eyv