Sziasztok elkészítettem azzal amit GameStar rakott fel kapu kezelõ progit...
Ezt.
#include <a_samp>
new bool:open = false, gate, timer;
forward AutoCheck();
public OnFilterScriptInit()
{
timer = SetTimer(\"AutoCheck\", 2500, 1);
gate = CreateObject(983, 60.200000762939, -249.5, 1.2999999523163, 0.0000, 0.0000, 0.0000, 50.0);
return 1;
}
public OnFilterScriptExit()
{
KillTimer(timer);
DestroyObject(gate);
return 1;
}
public AutoCheck()
{
new bool:o;
for(new i = 0; i < GetMaxPlayers(); i++) if(IsPlayerConnected(i))
{
if(IsPlayerInRangeOfPoint(i,8.0,60.200000762939, -249.5, 1.2999999523163))
{
o = true;
if(!open) MoveObject(gate, 67.400001525879, -249.60000610352, 1.299, 2.0);
break;
}
}
if(!o && open) MoveObject(gate, 60.200000762939, -249.5, 1.2999999523163, 2.0);
return 1;
}
DE berakom a modba így
new bool:open = false, gate, timer;
forward AutoCheck();
public OnFilterScriptExit()
{
KillTimer(timer);
DestroyObject(gate);
return 1;
}
public AutoCheck()
{
new bool:o;
for(new i = 0; i < GetMaxPlayers(); i++) if(IsPlayerConnected(i))
{
if(IsPlayerInRangeOfPoint(i,8.0,60.200000762939, -249.5, 1.2999999523163))
{
o = true;
if(!open) MoveObject(gate, 67.400001525879, -249.60000610352, 1.299, 2.0);
break;
}
}
if(!o && open) MoveObject(gate, 60.200000762939, -249.5, 1.2999999523163, 2.0);
return 1;
public OnGameModeInit()
{
timer = SetTimer(\"AutoCheck\", 2500, 1);
gate = CreateObject(983, 60.200000762939, -249.5, 1.2999999523163, 0.0000, 0.0000, 0.0000, 50.0);
return 1;
}
Az a bajom,hogy a kapu object sem úgy áll ahogy beraktam a mappba,én keresztbe raktam itt meg ellentétesen van,és amikor kinyilik akkor azután nem zárodik vissza.
Mi a teendõ?Vagy mit és hol rontottam el?Esetleg kijavítanátok jóra?
Köszi elõre is a helpet.
Próbáld meg így:
new gate;
OnGamemode....{
gate=CreateDynamicObject(983, 60.200000762939, -249.5, 1.2999999523163, 0.0000, 0.0000, 0.0000, 50.0);
return 1;
}
public OnPlayerUpdate(playerid)
{
if(IsPlayerInRangeOfPoint(playerid,8,x,y,z kordináta))
{
MoveDynamicObject(gate,67.400001525879, -249.60000610352, 1.299,3);//hova menyen a kapu
SetTimer(\"close\",4000,0);//becsukási ideje
return 1;
}
return 1;
}
forward close();
public close()
{
MoveDynamicObject(gate,60.200000762939, -249.5, 1.2999999523163,3);//becsukás kordináció
return 1;
}
Huhuhu.
Próbáld meg így:
new gate;
OnGamemode....{
gate=CreateDynamicObject(983, 60.200000762939, -249.5, 1.2999999523163, 0.0000, 0.0000, 0.0000, 50.0);
return 1;
}
public OnPlayerUpdate(playerid)
{
if(IsPlayerInRangeOfPoint(playerid,8,x,y,z kordináta))
{
MoveDynamicObject(gate,67.400001525879, -249.60000610352, 1.299,3);//hova menyen a kapu
SetTimer(\"close\",4000,0);//becsukási ideje
return 1;
}
return 1;
}
forward close();
public close()
{
MoveDynamicObject(gate,60.200000762939, -249.5, 1.2999999523163,3);//becsukás kordináció
return 1;
}
Szerintem eddig ez a legjobb. Ezt valaki belerakja egy hosszabb terjedelmû módba nemcsak a módot, de a szervergépet is kinyiffantja ;)
1.Hiba: OnPlayerUpdate(playerid) egy másodperc alatt kb 20x fut le. Akkor ha azon a pizíción van elindítja neki 1mp-ben 20x a \"close\" tájmert ;)
2.Hiba: Ettõl , hogy te is leirtad az objectet más változóval nem fog visszafordulni.
Javaslat: Keress egy frissebb verziót. Vagy frissítsd te magad ;)
:laugh:
new gate,
bool:gopend,
gtimer;
OnGamemode....{
gate=CreateDynamicObject(983, 60.200000762939, -249.5, 1.2999999523163, 0.0000, 0.0000, 0.0000, 50.0);
gopend = false;
return 1;
}
public OnPlayerUpdate(playerid)
{
if(IsPlayerInRangeOfPoint(playerid,8,x,y,z kordináta) && gopend == false)
{
Killtimer(gtimer);
MoveDynamicObject(gate,67.400001525879, -249.60000610352, 1.299,3);//hova menyen a kapu
gtimer = SetTimer(\"close\",4000,0);//becsukási ideje
gopend = true
return 1;
}
return 1;
}
forward close();
public close()
{
MoveDynamicObject(gate,60.200000762939, -249.5, 1.2999999523163,3);//becsukás kordináció
gopend = false;
return 1;
}
Így jó, és nem kezdi el 20x ugyanazt.
Ajánlom, hogy használj valami include-t, ami kapukkal foglalkozik. Az egyszerûbb, és mivel nem kezdõk írták, nem terheli annyira a szervert.