GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Segítségkérés => A témát indította: justrics - 2012. október 16. - 23:10:45

Cím: Kapus kérdés.
Írta: justrics - 2012. október 16. - 23:10:45
Sziasztok ismét egy problémába ütköztem. Azt akarom megoldani, hogy a /nyit parancsra ne csak egy kapu nyíljon, tehát valami frakciós kapu rendszerre volna szükségem de nem tudom megoldani, már próbáltam minden, hogyan de egyre csak növeltem az errorokat. Nekem így van az egyik kapu megcsinálva és ez szuperül megy is. Látszik, hogy a gateclose alatt próbáltam megírni a másik kaput is de nem ment. Ha tudtok benne segíteni azt nagyon megköszönném! :)
Itt van a new az elején:
 

new kapu1;
new kapu2;

 
Itt van az object:
 

kapu1= CreateObject(968,1065.50000000,-1776.29980469,13.10000038,0.00000000,270.00000000,269.99993896);//object(barrierturn) (1)
kapu2= CreateObject(968,1066.50000000,-1755.89941406,13.19999981,0.00000000,90.00000000,270.00000000); //object(barrierturn)(2)

 
Itt van a parancs:
 
forward GateClose();
public GateClose()
{
SetObjectRot(kapu2,0.00000000,90.00000000,270.00000000);
SetObjectRot(kapu1,0.00000000,270.00000000,269.99993896);
return 1;
}
CMD:nyit(playerid,params[])
{
if (IsPlayerInRangeOfPoint(playerid,8,1065.4315,-1759.4772,13.4035))
{
SetObjectRot(kapu2,0.00000000,10.00000000,269.99996948);
SetTimer(\"GateClose\", 6000, 0);
SendClientMessage(playerid, ZOLD,\"A sorompó kinyitva! Hamarosan bezárodik (6mp).\");
}else{
    SendClientMessage(playerid,PIROS,\"Nem állsz kapu közelében!\");
}
return 1;
}
Cím: Kapus kérdés.
Írta: Johnies00 - 2012. október 17. - 00:58:47
CMD:nyit(playerid,params[])
{
if (IsPlayerInRangeOfPoint(playerid,8,1065.4315,-1759.4772,13.4035))
{
SetObjectRot(kapu2,0.00000000,10.00000000,269.99996948);
                SetObjectRot(kapu1, rotx, roty, rotz);
SetTimer(\"GateClose\", 6000, 0);
SendClientMessage(playerid, ZOLD,\"A sorompó kinyitva! Hamarosan bezárodik (6mp).\");
}else{
    SendClientMessage(playerid,PIROS,\"Nem állsz kapu közelében!\");
}
return 1;
}

 
Egy sor hiányzott, a rotx y és z helyére írd be a kapu1 nek a pozicióit (amikor el van mozdulva)
U.I.:
 
kapu1= CreateObject(968,1065.50000000,-1776.29980469,13.10000038,0.00000000,270.00000000,269.99993896);
kapu2= CreateObject(968,1066.50000000,-1755.89941406,13.19999981,0.00000000,90.00000000,270.00000000);

 
helyett
 
kapu1 = CreateObject(968,1065.50000000,-1776.29980469,13.10000038,0.00000000,270.00000000,269.99993896);
kapu2 = CreateObject(968,1066.50000000,-1755.89941406,13.19999981,0.00000000,90.00000000,270.00000000);
Cím: Kapus kérdés.
Írta: justrics - 2012. október 17. - 16:16:16
Ez zsír mûköidik csak egy gondom van még vele, hogy egyszerre nyitja mind a kettõt. :D Azt valahogyan meglehet oldani?
Cím: Kapus kérdés.
Írta: Dante Sanders - 2012. október 18. - 13:38:21
Hátha nem egyszere inditanád a Timert akkor jó lenne
Cím: Kapus kérdés.
Írta: Johnies00 - 2012. október 18. - 19:34:03
Lehet félreértettem.  ;D

Úgy akarod hogy amelyik kapuhoz közelebb van azt nyissa a /nyit, vagy ha egyikhez se vagy elég közel akkor semmit?
Cím: Kapus kérdés.
Írta: justrics - 2012. október 18. - 20:57:00
Pontosan azt szeretném megcsinálni, hogy pl van több kapu de mindegyik egy parancs nyissa, és csak akkor nyissa ha közel vagy ahhoz a kapuhoz. :)
Cím: Kapus kérdés.
Írta: Johnies00 - 2012. október 19. - 16:29:51

CMD:nyit(playerid, params[])
{
if(IsPlayerInRangeOfPoint(playerid, sugár, X1, Y1, Z1)) // Ha itt vagy || Kapu 1 pozíciója és sugara
{
    SetObjectRot(kapu1, Xrot1, Yrot1, Zrot1); // Megadjuk kapu 1 rotációját (nyitott állapotban)
    SetTimer(\"GateClose\", 6000, false); // Elindítja a GateClose timert
    SendClientMessage(playerid, ZOLD, \"1es kapu kinyitva, 6 mp és záródik\");
}
else if(IsPlayerInRangeOfPoint(playerid, sugár, X2, Y2, Z2)) // Vagy ha itt vagy || Kapu 2 pozíciója és sugara
{
    SetObjectRot(kapu2, Xrot2, Yrot2, Zrot2); // Megadjuk kapu 2 rotációját (nyitott állapotban)
    SetTimer(\"GateClose\", 6000, false); // Elindítja a GateClose timert
    SendClientMessage(playerid, ZOLD, \"2es kapu kinyitva, 6 mp és záródik\");
}
else // Ha egyik helyen se vagy
{
    SendClientMessage(playerid, ZOLD, \"Nem vagy 1 kapu közelébe se!\");
}
return 1;
}

 


public GateClose()
{
SetObjectRot(kapu1, Xrot1alap, Yrot1alap, Zrot1alap); // Kapu 1 rotációja (Zárt állapotban)
SetObjectRot(kapu2, Xrot2alap, Yrot2alap, Zrot2alap); // Kapu 2 rotációja (Zárt állapotban)
}
Cím: Kapus kérdés.
Írta: justrics - 2012. október 24. - 10:10:16
Köszönöm a válaszod. Most sikerült a teszthez jutni. :D Azonban nem jó mert ha a másik kapu elé állok és beírom, hogy /nyit akkor valamiért a \"Nem állsz kapu közelébent írja ki\"
Cím: Kapus kérdés.
Írta: Johnies00 - 2012. október 24. - 17:36:50
Ellenõrizd a pozíciókat, ha jók akkor másold be a 2 parancsot.
Cím: Kapus kérdés.
Írta: justrics - 2012. október 24. - 19:22:19
Szia a pozíciók biztosan jók megnéztem. :) Itt a kód ahogyan összeraktam
 

forward GateClose();
public GateClose()
{
SetObjectRot(kapu2,0.00000000,90.00000000,270.00000000);
SetObjectRot(kapu1,0.00000000,270.00000000,269.99993896);
return 1;
}
CMD:nyit(playerid,params[])
{
if (IsPlayerInRangeOfPoint(playerid,8,1065.4315,-1759.4772,13.4035))
{
SetObjectRot(kapu2,0.00000000,10.00000000,269.99996948);
SetTimer(\"GateClose\", 6000, 0);
SendClientMessage(playerid, ZOLD,\"A sorompó kinyitva! Hamarosan bezárodik (6mp).\");
return 1;
}
else if(IsPlayerInRangeOfPoint(playerid,8,1089.4406,-1773.0548,13.3462)) // Vagy ha itt vagy.
    {
        SetObjectRot(kapu1,0,351,269.99); // Megadjuk kapu 2 rotációját (nyitott állapotban)
        SetTimer(\"GateClose\", 6000, false); // Elindítja a GateClose timert
        SendClientMessage(playerid, ZOLD, \"A sorompó kinyitva! Hamarosan bezárodik (6mp).\");
        return 1;
    }
else
{
    SendClientMessage(playerid,PIROS,\"Nem állsz kapu közelében!\");
}
return 1;
}
Cím: Kapus kérdés.
Írta: Johnies00 - 2012. október 24. - 22:37:33
A return-okat az utolsó kivételével vedd ki, az nem kell oda. (Az idõzítõ által meghívott függvénybõl is, felesleges.)

Viszont ha sorompóról van szó akkor az a 8 as sugár sok lesz.. (Mivel mind2 pozícióban benne leszel és bugolhat.)
Cím: Kapus kérdés.
Írta: justrics - 2012. október 24. - 23:13:53
Na returnok kiszedve. Sugár 2 es re véve de megint azt írja nem állok kapu közelében. :D
Cím: Kapus kérdés.
Írta: Johnies00 - 2012. október 24. - 23:30:35

CMD:nyit(playerid,params[])
{
    if(IsPlayerInRangeOfPoint(playerid,2,1065.4315,-1759.4772,13.4035))
    {
        SetObjectRot(kapu2,0.00000000,10.00000000,269.99996948);
        SetTimer(\"GateClose\", 6000, 0);
        SendClientMessage(playerid, ZOLD,\"A sorompó kinyitva! Hamarosan bezárodik (6mp).\");
    }
    else if(IsPlayerInRangeOfPoint(playerid,2,1089.4406,-1773.0548,13.3462))
    {
        SetObjectRot(kapu1,0,351,269.99);
        SetTimer(\"GateClose\", 6000, false);
        SendClientMessage(playerid, ZOLD, \"A sorompó kinyitva! Hamarosan bezárodik (6mp).\");
    }
    else
    {
        SendClientMessage(playerid,PIROS,\"Nem állsz kapu közelében!\");
    }
    return 1;
}

 
Ha így nem jó akkor 100% hogy valami a koordinátákkal van.. (Teszteltem)

Viszont ha a pozíciók is stimmelnek nem tudom mi lehet.. Ez esetben úgy tudok segíteni ha elküldöd PM ben a módot/szkriptet
Cím: Kapus kérdés.
Írta: justrics - 2012. október 25. - 16:35:31
Oké sikerült! Köszönöm! :)