Wiek: 30 Dołączył: 6280 dni temu Posty: 710 Skąd: jesteś ?
Punkty: 265
Wysłany: 2009-03-07, 22:10 <! SetTimer !>
Duża liczba osobników homo sapiens sapiens znanych powszechnie jako ludzie, na tym forum jako "użytkownicy" ma problemy z używaniem bardzo przydatnej funkcji jaką jest timer. Postaram się przedstawić w jaki sposób jej używać.
| Budowa ogólna |
| SetTimer
Kod:
SetTimer("Nazwa funkcji", czas przez/co ile będzie wykonywana, bool powtarzalności, true = 1, false = 0);
| SetTimerEx
Kod:
SetTimerEx("Nazwa funkcji", czas przez/co ile będzie wykonywana, bool powtarzalności, true = 1, false = 0, formatowanie inicjacji danych w funkcji, inicjacja danych w funkcji);
| Zastosowanie |
Zastosowanie timerów jest baaaardzo szerokie, od prostej funkcji sprawdzającej, do streamer'a obiektów.
| Przykłady praktyczne |
Nasz timer może wykonywać baaaardzo wiele rzeczy. Podam kilka przykładów.
| SetTimer
Funkcje które umieszczamy w SetTimer, odnoszą się do rzeczy które nie mają żadnego parametru np. gdy tworzymy funkcję dla wszystkich graczy czy gdy funkcja poprostu nie ma argumentów.
Funkcja dla wszystkich graczy:
Nasza funkcja:
Kod:
forward god();
public god()
{
for(new i=0,j=GetMaxPlayers(); i<j; i++) //pętla dla wszystkich graczy
{
if(!IsPlayerConnected(i))continue;//Jeśli gracz z pętli nie jest podłączony pętla przeskakuje o 1 i jedzie dalej
SetPlayerHealth(i,400); //Aby god działał, muszę ustawić pewną wartość życia dla graczy
SetPlayerArmour(i,400); // - || -
}
}
Tą funkcję wywołam w publicu OnGameModeInit, gdyż ta funkcja ma pracować od czasu włączenia mode.
Kod:
public OnGameModeInit()
{
SetTimer("god",250,1);
return 1;
}
Funkcja sprawdzająca dla wszystkich graczy:
Nasza funkcja:
Kod:
forward WeaponsCheck();
public WeaponsCheck()
{
new slot, ammo, weap; //zmienne
for(new i=0,j=GetMaxPlayers(); i<j; i++)//Pętla dla wszystkich graczy
{
if(!IsPlayerConnected(i))continue;//Jeśli gracz z pętli nie jest podłączony pętla przeskakuje o 1 i jedzie dalej
for (slot = 0; slot < 14; slot++) //Pętla dla sprawdzenia wszystkich slotów.
{
GetPlayerWeaponData(i, slot, weap, ammo); //Pobieranie broni z wszystkich slotów.
if(weap == 16 || weap == 32 || weap == 0 || weap == 1 || weap == 46)// Jeśli broń ma id to:
{
//W moim przypadku nic
}
else //A jeśli jest inaczej
{
SendClientMessage(i, red, "This isn't a deathmatch gamemode ! Don't use weapons !"); //Wysyła wiadomość
ResetPlayerWeapons(i); //Resetuje bronie gracza
}
}
}
return 1;
}
Tą funkcję wywołam w publicu OnGameModeInit, gdyż ta funkcja ma pracować od czasu włączenia mode.
Kod:
public OnGameModeInit()
{
SetTimer("WeaponsCheck", 5000, 1);
return 1;
}
Funkcja sprawdzająca:
Nasza funkcja:
Kod:
forward WindaUpped();
public WindaUpped()
{
new Float: x, Float: y, Float: z; //Zmienne floatowe
GetObjectPos(ServerData[gElevator], x, y, z); //Pobranie pozycji obiektu
if(z == 57.413) //Jeśli koordynat "z" wyniesie 57.413 to:
{
MoveObject(ServerData[gDoor1], 958.210, -1187.412, 57.018, 0.5);
MoveObject(ServerData[gDoor2], 958.207, -1185.559, 57.017, 0.5);
SetTimer("CloseUp", 3000, 0);
KillTimer(ServerData[tElevatorTimer]);
}
return 1;
}
Tą funkcję wywołam w publicu OnPlayerSelectedMenuRow, gdyż ta funkcja ma za zadanie sprawdzić gdzie jest pozycja drzwi od windy i w momencie gdy winda jest na górze, funkcja otworzy drzwi.
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach Nie możesz załączać plików na tym forum Nie możesz ściągać załączników na tym forum