Lift

Započeo _.Xavi._, Mart 09, 2023, 10:20:50 PRE PODNE

prethodna tema - sledeća tema

0 članova i 1 gost pregledaju ovu temu.

Pitanje/savjet: Treba mi lift koji ide od jedne do druge lokacije, i ceka 5 sekundi kad dodje do lokacije, i onda se vraca nazad i opet ceka 5 sec i tako iznova ( nikad ne staje, uvek ide od jedne do druge lokacije i ceka 5 sec )
Opširnije: Objašnjeno sve gore
Dodatno: ostaviti samo prazno mesto gde su kordinate za te 2 lokacije, dodacu ja kasnije

Ovo je pitanje/savet ? Il je ispuni mi zelju ?

Nauci osnove, tek onda se javi, ah da nece biti potrebe jer ces znati sam napraviti...

hvala, eto ja tebe cekao da mi kazes da naucim osnove, sam se ne bih setio nikad

Objasnit cu ti logicki sve to, nadam se da ces se uspjeti sam snaci i napisat kod, trenutno nisam u mogucnosti pisati kod.

Uglavnom, trebat ce ti jedan timer kojeg ce se vrtjeti konstantno u intervalu od 5 sekundi, mozes napraviti jednu varijablu pomocu koje ces provjeravati poziciju lifta i na osnovu toga joj mijenjati vrijednost i u zavisnosti od uslova pomjerati na zeljeno mjesto.

https://www.open.mp/docs/scripting/functions/SetTimer
https://www.open.mp/docs/scripting/functions/MoveObject

Ne bi ti trebalo biti tesko za snaci se.

probao sam ranije sa onim chatgpt, evo koda koji sam dobio [pawn]// Kreiraj objekat
new lvlift = CreateDynamicObject(19447, 1957.717041, 1902.649047, 26.410770, -0.299999, 90.299980, -117.099967, 0.0, 0.0, 0.0, -1, -1, -1, 300.0, 300.0);

// Postavi objekat u kretanje ka drugoj lokaciji
MoveDynamicObject(lvlift, 1957.383300, 1902.464843, 129.890335, 5.0, 0.0, 0.0);
new isMoving = true;

// Funkcija koja ce se pozivati svakih 5 sekundi nakon što objekt stigne na ciljnu lokaciju
forward OnObjectMoveEnd(lvlift);

public OnObjectMoveEnd(new lvlift)
{
    // Provjeri da li se objekt trenutno krece
    if (isMoving)
    {
        // Ako se objekt krece, postavi zastavicu na false i pricekaj 5 sekundi
        isMoving = false;
        SetTimer(5000, true, "OnTimerFinished", "i", objid);
    }
    else
    {
        // Ako se objekt ne krece, postavi zastavicu na true i pošalji ga natrag na pocetnu lokaciju
        isMoving = true;
        MoveDynamicObject(lvlift, 1957.717041, 1902.649047, 26.410770, 5.0, 0.0, 0.0);
    }
    return 1;
}

// Funkcija koja se poziva kada istekne vrijeme cekanja od 5 sekundi
public OnTimerFinished(timerid, new lvlift)
{
    // Postavi zastavicu na true i pošalji objekt natrag na pocetnu lokaciju
    isMoving = true;
    MoveDynamicObject(lvlift, 1957.717041, 1902.649047, 26.410770, 5.0, 0.0, 0.0);
    return 1;
}[/pawn]  al kad kompajlujem izlazi ono pawn library has stopped working


forward MoveElevator();

const Float:ELEVATOR_SPEED = 3.0;

static g_sElevatorObject;
static g_sElevatorLevel;
static bool:g_sElevatorGoingUp;
static const g_sElevatorLevelPos[] = {
3.0,
5.0,
7.0,
10.0
};


public OnGameModeInit() {
g_sElevatorObject = CreateObject(x, y, g_sElevatorLevelPos[0], rx, ry, rz);
g_sElevatorLevel = 0;
g_sElevatorGoingUp = true;

SetTimer("MoveElevator", 5000, false);
return 1;
}

public MoveElevator() {
if (g_sElevatorGoingUp && ++ g_sElevatorLevel == sizeof g_sElevatorLevelPos) {
g_sElevatorLevel = sizeof g_sElevatorLevelPos - 2;
g_sElevatorGoingUp = false;
} else if (!g_sElevatorGoingUp && -- g_sElevatorLevel == -1) {
g_sElevatorLevel = 2;
g_sElevatorGoingUp = true;
}

MoveObject(g_sElevatorObject, x, y, g_sElevatorLevelPos[g_sElevatorLevel], ELEVATOR_SPEED);
}

public OnObjectMoved(objectid) {
if (objectid == g_sElevatorObject) {
SetTimer("MoveElevator", 5000, false);
}
return 1;
}

Citat: // xunder poslato Mart 11, 2023, 00:39:56 PRE PODNE

forward MoveElevator();

const Float:ELEVATOR_SPEED = 3.0;

static g_sElevatorObject;
static g_sElevatorLevel;
static bool:g_sElevatorGoingUp;
static const g_sElevatorLevelPos[] = {
3.0,
5.0,
7.0,
10.0
};


public OnGameModeInit() {
g_sElevatorObject = CreateObject(x, y, g_sElevatorLevelPos[0], rx, ry, rz);
g_sElevatorLevel = 0;
g_sElevatorGoingUp = true;

SetTimer("MoveElevator", 5000, false);
return 1;
}

public MoveElevator() {
if (g_sElevatorGoingUp && ++ g_sElevatorLevel == sizeof g_sElevatorLevelPos) {
g_sElevatorLevel = sizeof g_sElevatorLevelPos - 2;
g_sElevatorGoingUp = false;
} else if (!g_sElevatorGoingUp && -- g_sElevatorLevel == -1) {
g_sElevatorLevel = 2;
g_sElevatorGoingUp = true;
}

MoveObject(g_sElevatorObject, x, y, g_sElevatorLevelPos[g_sElevatorLevel], ELEVATOR_SPEED);
}

public OnObjectMoved(objectid) {
if (objectid == g_sElevatorObject) {
SetTimer("MoveElevator", 5000, false);
}
return 1;
}

sta si ti ovde ispisao Boze sačuvaj.. moglo je mnogo kraće i lepse

Citat: Iv0 Dev poslato Mart 11, 2023, 14:13:17 POSLE PODNE
sta si ti ovde ispisao Boze sačuvaj.. moglo je mnogo kraće i lepse

daj mi kraci ako znas, ako ne nema veze posluzice i ovo ako radi, nisam jos probao

Citat: _.Xavi._ poslato Mart 11, 2023, 14:18:49 POSLE PODNE
daj mi kraci ako znas, ako ne nema veze posluzice i ovo ako radi, nisam jos probao

pise ti xunder, ne neki lijevi haha, uzmi to i probaj...
Ecuador Online Gaming Community Founder

dsc.gg/ecuador-rp

Citat: Iv0 Dev poslato Mart 11, 2023, 14:13:17 POSLE PODNE
sta si ti ovde ispisao Boze sačuvaj.. moglo je mnogo kraće i lepse

Napisano je tacno ono sto je autor teme trazio da skripta radi.

Krace? Da, moglo je. Mogao sam koristiti jednu varijablu umjesto Level i GoingUp (Level bi mogao u tom slucaju ici samo do 1073741823 jer bi se radio masking prvih 30 bitova za level, poslednji 31. bit za GoingUp). Da li je to ono sto bi autor teme mogao da razumije bez da pisem velike komentare? Sumnjam.

Ljepse? Ljepota koda je subjektivna ali kod koji sam napisao je lako razumljiv svakome ko prati moderne prakse programiranja. Ne znam sta tacno ovdje moze da bude ljepse, definicije i varijable su self-descriptive, koristi se K&R koji je jedan od (ako ne i) najkoriscenijih stilova indentacije i skripta je sama po sebi jako kratka da bi mogao reci da je nerazumna.

Elem, vjerovatno si mladji i pojma nemas cemu sluzi forum ali evo tldr. da ti dam, ako vec znas bolji nacin ili hoces da ispravis moj odgovor onda uradi to. Svojim komentarom nikome nisi pomogao.

PS. Znam da je tebi interesantna zamisao da me mozes ispraviti i volio bih da pokazes svima nama koji nacin je bolji od mog. Cekam.

Citat: // xunder poslato Mart 12, 2023, 06:27:29 PRE PODNE
Napisano je tacno ono sto je autor teme trazio da skripta radi.

Krace? Da, moglo je. Mogao sam koristiti jednu varijablu umjesto Level i GoingUp (Level bi mogao u tom slucaju ici samo do 1073741823 jer bi se radio masking prvih 30 bitova za level, poslednji 31. bit za GoingUp). Da li je to ono sto bi autor teme mogao da razumije bez da pisem velike komentare? Sumnjam.

Ljepse? Ljepota koda je subjektivna ali kod koji sam napisao je lako razumljiv svakome ko prati moderne prakse programiranja. Ne znam sta tacno ovdje moze da bude ljepse, definicije i varijable su self-descriptive, koristi se K&R koji je jedan od (ako ne i) najkoriscenijih stilova indentacije i skripta je sama po sebi jako kratka da bi mogao reci da je nerazumna.

Elem, vjerovatno si mladji i pojma nemas cemu sluzi forum ali evo tldr. da ti dam, ako vec znas bolji nacin ili hoces da ispravis moj odgovor onda uradi to. Svojim komentarom nikome nisi pomogao.

PS. Znam da je tebi interesantna zamisao da me mozes ispraviti i volio bih da pokazes svima nama koji nacin je bolji od mog. Cekam.
Zasto si se ti drug upecao na ove mongolide?


evo samo sam dodao kordinate ali nema lifta gde treba da bude? (portam se sa komandom do lokacije i ispravna je), [pawn]forward MoveElevator();

const Float:ELEVATOR_SPEED = 3.0;

static g_sElevatorObject;
static g_sElevatorLevel;
static bool:g_sElevatorGoingUp;
static const g_sElevatorLevelPos[] = {
   3.0,
   5.0,
   7.0,
   10.0
};

public MoveElevator() {
   if (g_sElevatorGoingUp && ++ g_sElevatorLevel == sizeof g_sElevatorLevelPos) {
      g_sElevatorLevel = sizeof g_sElevatorLevelPos - 2;
      g_sElevatorGoingUp = false;
   } else if (!g_sElevatorGoingUp && -- g_sElevatorLevel == -1) {
      g_sElevatorLevel = 2;
      g_sElevatorGoingUp = true;
   }

   MoveObject(g_sElevatorObject, 1957.717041, 1902.649047, 26.410770, g_sElevatorLevelPos[g_sElevatorLevel], ELEVATOR_SPEED);
}[/pawn]   i pod ongamemodeinit [pawn]   g_sElevatorObject = CreateObject(19447, 1957.717041, 1902.649047, 26.410770, -0.299999, 90.299980, -117.099967, -1, -1, -1, 300.00, 300.00);
   g_sElevatorLevel = 0;
   g_sElevatorGoingUp = true;

   SetTimer( "MoveElevator", 5000, false );
   return 1;
   }
   return true;
}[/pawn]


g_sElevatorObject = CreateObject(19447, 1957.717041, 1902.649047, 26.410770, -0.299999, 90.299980, -117.099967, -1, -1, -1, 300.00, 300.00);


Nemoguce da si ovo uspio compile (sem ako nisi redefinisao CreateObject - sumnjam).
"g_sElevatorLevelPos" je Z koordinata svakog sprata za lift (visina).

U OnGameModeInit "g_sElevatorLevelPos[0]" bi trebalo biti mjesto gdje kreiras lift (prvi sprat/prizemlje, svejedno).


Citat: // xunder poslato Mart 14, 2023, 23:04:42 POSLE PODNE

g_sElevatorObject = CreateObject(19447, 1957.717041, 1902.649047, 26.410770, -0.299999, 90.299980, -117.099967, -1, -1, -1, 300.00, 300.00);



Nemoguce da si ovo uspio compile (sem ako nisi redefinisao CreateObject - sumnjam).
"g_sElevatorLevelPos" je Z koordinata svakog sprata za lift (visina).


U OnGameModeInit "g_sElevatorLevelPos[0]" bi trebalo biti mjesto gdje kreiras lift (prvi sprat/prizemlje, svejedno).
Ti si programer, ti ne mozes to da uspes, on je skripter pa mu se moze. Jbg takav ti je access control u pawn.   :-[