-
Ahoy, lenne 10 db csekpoínt, melybõl random módon 3-at kell teljesítenie / érintenie a játékosnak.
Ezek ugye véletlenszerûen változnak, ám olykor elõfordul, hogy egymás után ugyanaz jön egy küldetés alatt... :nono:
Példa: érinti az elsõt, érinti a másodikat, majd benne van az esély, hogy újra az elsõ CP hely jön elõ.
new Float: Cimzett[][11] =
{
{1550.3191,1121.7886,10.8203}, {1115.6642,1365.1157,10.8203}, {1036.4130,2313.1960,11.4683}, {1458.4666,1953.5004,11.4683}, {1599.9231,2144.2908,11.4609},
{1655.5189,1736.1045,10.8281}, {2025.9143,998.1968,10.8203}, {2192.9465,1994.2487,12.2969}, {1530.4325,2355.3801,10.8203}, {1347.0576,2608.6394,10.8203}
};
new rand = random(sizeof(Cimzett)); SetPlayerCheckpoint(playerid,Cimzett[rand][0],Cimzett[rand][1],Cimzett[rand][2], 1.0);
Hogyan lehetne azt tehát, hogy ha már belépett egy CP-be, akkor ugyanazon a helyen ne jelenjen meg újra CP a küldetés során?
-
Epsilon szkriptjében láttam egy eljárást melyet én is használtam a poker szkriptemben mivel egyszerûbb volt annál amit én írtam, ez pedig a következõ lenne, már átalakítva számodra:
#include <a_samp>
#define MAXCP 10
#define MAX_RANDCP 3
#define DEBUG
stock
RandomCP(array[])
{
new
bool:e[MAXCP] = { false, ... };
for(new p = 0; p < MAX_RANDCP; p++)
{
do
array[p] = random(MAXCP);
while(e[array[p]])
e[array[p]] = true;
}
}
new
Float:Cimzett[MAXCP][] =
{
{ 1550.3191, 1121.7886, 10.8203 },
{ 1115.6642, 1365.1157, 10.8203 },
{ 1036.4130, 2313.1960, 11.4683 },
{ 1458.4666, 1953.5004, 11.4683 },
{ 1599.9231, 2144.2908, 11.4609 },
{ 1655.5189, 1736.1045, 10.8281 },
{ 2025.9143, 998.1968, 10.8203 },
{ 2192.9465, 1994.2487, 12.2969 },
{ 1530.4325, 2355.3801, 10.8203 },
{ 1347.0576, 2608.6394, 10.8203 }
};
new
Cp_Player[MAX_PLAYERS][MAX_RANDCP];
public
OnPlayerConnect(playerid)
{
for(new i; i < MAX_RANDCP; i++)
{
Cp_Player[playerid] = -1;
}
return 1;
}
public
OnPlayerCommandText(playerid, cmdtext[])
{
if(strcmp(cmdtext, \"/start\", true) == 0)
{
if(Cp_Player[playerid][0] != -1) return SendClientMessage(playerid, -1, \"Már elindítva.\");
RandomCP(Cp_Player[playerid]);
#if defined DEBUG
new
str[128];
format(str, sizeof str, \"%d, %d, %d,\", Cp_Player[playerid][0] , Cp_Player[playerid][1] , Cp_Player[playerid][2]);
SendClientMessage(playerid, -1, str);
#endif
SetPlayerCheckpoint(playerid, Cimzett[ Cp_Player[playerid][0] ][0],
Cimzett[ Cp_Player[playerid][0] ][1],
Cimzett[ Cp_Player[playerid][0] ][2],
1.0);
Cp_Player[playerid][0] = -2;
return 1;
}
#if defined DEBUG
if(strcmp(cmdtext, \"/gotocp\", true, 7) == 0)
{
new
t = strval(cmdtext[8]);
if(!(0 <= t < MAXCP)) return SendClientMessage(playerid, -1, \"Nincs ilyen cp, maximális érték (\" #MAXCP \" minusz 1)\");
SetPlayerPos(playerid, Cimzett[ t ][0] + 1.5,
Cimzett[ t ][1],
Cimzett[ t ][2]);
return 1;
}
#endif
return 0;
}
public
OnPlayerEnterCheckpoint(playerid)
{
DisablePlayerCheckpoint(playerid);
if(Cp_Player[playerid][1] != -1)
{
SetPlayerCheckpoint(playerid, Cimzett[ Cp_Player[playerid][1] ][0],
Cimzett[ Cp_Player[playerid][1] ][1],
Cimzett[ Cp_Player[playerid][1] ][2],
1.0);
Cp_Player[playerid][1] = -1;
}
else if(Cp_Player[playerid][2] != -1)
{
SetPlayerCheckpoint(playerid, Cimzett[ Cp_Player[playerid][2] ][0],
Cimzett[ Cp_Player[playerid][2] ][1],
Cimzett[ Cp_Player[playerid][2] ][2],
1.0);
Cp_Player[playerid][2] = -1;
}
else if(Cp_Player[playerid][0] == -2)
{
SendClientMessage(playerid, -1, \"Game Over\");
Cp_Player[playerid][0] = -1;
}
return 1;
}
Lehet hogy bonyolult lett, de ha kiszeded a debug részeket lehet kicsit átláthatóbb.
-
Hupsz kicsit szétcsúszott ahogy nézem :D
Összébb raktam pawnoba, így lett 92 errormentes sör sor.
Milyen Debug részt szedjek ki? Amit írtál abban az 58-tól 63-ig illetve 72-tõl 83-ig lévõ sorokat kiszedhetem, arra gondoltál?
-
Igen azokra gondoltam.
Amúgy nem tudom nálad mi lehet a gond, én kimásolom innen beillesztem egy új fájlba, megnyomom az F5-öt, beírom az új fájl nevét és hiba nélkül lefordítja.
Igaz én notepad++-t használok, sima pawn editorral nem próbáltam.
Kiszedtem én:
#include <a_samp>
#define MAXCP 10
#define MAX_RANDCP 3
stock
RandomCP(array[])
{
new
bool:e[MAXCP] = { false, ... };
for(new p = 0; p < MAX_RANDCP; p++)
{
do
array[p] = random(MAXCP);
while(e[array[p]])
e[array[p]] = true;
}
}
new
Float:Cimzett[MAXCP][] =
{
{ 1550.3191, 1121.7886, 10.8203 },
{ 1115.6642, 1365.1157, 10.8203 },
{ 1036.4130, 2313.1960, 11.4683 },
{ 1458.4666, 1953.5004, 11.4683 },
{ 1599.9231, 2144.2908, 11.4609 },
{ 1655.5189, 1736.1045, 10.8281 },
{ 2025.9143, 998.1968, 10.8203 },
{ 2192.9465, 1994.2487, 12.2969 },
{ 1530.4325, 2355.3801, 10.8203 },
{ 1347.0576, 2608.6394, 10.8203 }
};
new
Cp_Player[MAX_PLAYERS][MAX_RANDCP];
public
OnPlayerConnect(playerid)
{
for(new i; i < MAX_RANDCP; i++)
{
Cp_Player[playerid] = -1;
}
return 1;
}
public
OnPlayerCommandText(playerid, cmdtext[])
{
if(strcmp(cmdtext, \"/start\", true) == 0)
{
if(Cp_Player[playerid][0] != -1) return SendClientMessage(playerid, -1, \"Már elindítva.\");
RandomCP(Cp_Player[playerid]);
SetPlayerCheckpoint(playerid, Cimzett[Cp_Player[playerid][0]][0], Cimzett[Cp_Player[playerid][0]][1], Cimzett[Cp_Player[playerid][0]][2], 1.0);
Cp_Player[playerid][0] = -2;
return 1;
}
return 0;
}
public
OnPlayerEnterCheckpoint(playerid)
{
DisablePlayerCheckpoint(playerid);
if(Cp_Player[playerid][1] != -1)
{
SetPlayerCheckpoint(playerid, Cimzett[Cp_Player[playerid][1]][0], Cimzett[Cp_Player[playerid][1]][1], Cimzett[Cp_Player[playerid][1]][2], 1.0);
Cp_Player[playerid][1] = -1;
}
else if(Cp_Player[playerid][2] != -1)
{
SetPlayerCheckpoint(playerid, Cimzett[Cp_Player[playerid][2]][0], Cimzett[Cp_Player[playerid][2]][1], Cimzett[Cp_Player[playerid][2]][2], 1.0);
Cp_Player[playerid][2] = -1;
}
else if(Cp_Player[playerid][0] == -2)
{
SendClientMessage(playerid, -1, \"Game Over\");
Cp_Player[playerid][0] = -1;
}
return 1;
}
-
Ha minden igaz mûködik, köszönöm a segítségedet & átírást MESTER! :yes: :thumbsup: