OnPlayerEnterCheckpoint Hát igen ezzel probálkoztam. OnPlayerEnterCheckpoint mindegyik chekpointnál érvényes lesz a parancs vagy akármi mindt ezzen a példán:
public OnPlayerSpawn(playerid)// játékos le spannolása
{
SetPlayerCheckpoint(playerid, 1982.6150, -220.6680, -0.2432, 3.0); chekpoint lerakás
return 1;
}
public OnPlayerEnterCheckpoint(playerid) ha a játékos a Checkpointba van akkor ez fog történi (összes chekpoint)
{
CreateVehicle(520, 1982.6150, -221.0145, -0.2432, 82.2873, -1, -1, 60000);//kocsi lerakás
DisablePlayerCheckpoint(playerid);// Checkpoint eltüntetése
return 1;
}
eddig rendben értem
de amikor azt akkrom hogy minden Checkpoint mást csináljon azt hogy??:D
#include <a_samp>
#include <zcmd>
#define cp 0
new gPlayerCheckpointStatus[MAX_PLAYERS];
CMD:cp1(playerid,params[])
{
SetPlayerCheckpoint(playerid,-210.4612,987.3130,19.1967,5.0); // Ez a CP
return 1;
}
public OnPlayerEnterCheckpoint(playerid)
{
switch(gPlayerCheckpointStatus[playerid]) {
case cp: {
SendClientMessage(playerid,0x00CC00AA,\"Felvettél egy checkpointot!\");
}
}
return 1;
}
Lehet hogy nem mûködik, teszteld le!
#include <a_samp>
#include <zcmd>
#define cp 0
new gPlayerCheckpointStatus[MAX_PLAYERS];
CMD:cp1(playerid,params[])
{
SetPlayerCheckpoint(playerid,-210.4612,987.3130,19.1967,5.0); // Ez a CP
return 1;
}
public OnPlayerEnterCheckpoint(playerid)
{
switch(gPlayerCheckpointStatus[playerid]) {
case cp: {
SendClientMessage(playerid,0x00CC00AA,\"Felvettél egy checkpointot!\");
}
}
return 1;
}
Lehet hogy nem mûködik, teszteld le!
Majdnem...
A történet ott kezdõdik hogy létre kell hozni egy adattömböt a checkpointokkal.
Akkor minden egyes létrehozott adat sor kap egy index számot.
Ezen index szám alapján tudod meghatározni hogy épp melyik cp aktív az adott játékosnak, mivel tudjuk hogy egy Checkpointot lehet csak megjeleníteni egy játékosnak egyszerre (leszámítva a mapicon cp-t 0.3c óta).
Mikor létrehozod a játékosnak a cpt akkor eltárolod az adott cp index számát is a játékosnak, ismétlem minden egyes alkalommal mikor létrehozod, akkor kell tárolni az adott cp index számát.
Majd ezt a tárolt adatot hívod meg OnPlayerEnterCheckpoint-nál.
Tessék,
CMD:cp1(playerid,params[])
{
SetPlayerCheckpoint(playerid,-210.4612,987.3130,19.1967,5.0); // Ez a CP
SetPVarInt(playerid, \"CP\", 1 );
return 1;
}
CMD:cp2(playerid,params[])
{
SetPlayerCheckpoint(playerid,-210.4612,987.3130,19.1967,5.0); // Ez a 2 CP
SetPVarInt(playerid, \"CP\", 2 );
return 1;
}
public OnPlayerEnterCheckpoint(playerid)
{
if(GetPVarInt(playerid, \"CP\") == 1 )
{
SendClientMessage(playerid,0x00CC00AA,\"Felvetted a checkpointot!\");
SetPVarInt(playerid, \"CP\", 0 );
}
if(GetPVarInt(playerid, \"CP\") == 2 )
{
SendClientMessage(playerid,0x00CC00AA,\"Felvetted a 2 checkpointot!\");
SetPVarInt(playerid, \"CP\", 0 );
}
return 1;
}
de azzal az összes cp eltüntetem!!!
ja meg
SetPVarInt(playerid, \"CP\", 1);
hogy tudom le nulázni szerver kapcsolodásnál??:)
What?
Hogy hogy az összes cpt?
Mikor csak egyet jelenít meg.
Ja meg
public OnPlayerConnect(playerid)
{
SetPVarInt(playerid, \"CP\", 0);
}
De minden játékos kilépésnél törlõdik a PVar adat, és minden PVar alap értéke nulla, ha nincs létrehozva.
( Gondolom lekérdezés hát vazze nincs is ilyen néven PerPlayerVariable nesze return 0; )
Emiatt OnPlayerConnectnél felesleges 0-ra állítani, inkább -1 re szokás ott állítani, mert lehet szükség van a nulla értékre is.