12
« le: 02 Janvier 2012, 21:43:33 »
Bonsoir à tous,
Comme vous le savez je suis entrain de réaliser le script d'un derby, j'ai déjà pas mal avancer mais avant d'en faire un peu plus, j'aimerais avoir votre avis. J'ai réaliser mon derby sur une base que je me suis inspiré, je l'ai modifié, j'ai réussi à créer une première map à mélanger pas mal de choses. Maintenant je voudrais en créer une deuxième, et là ceci s'avère un peu plus compliquer. Je vais donc poster ci-dessous les codes qui sont en relation avec le derby en lui même, je vous demanderais donc de m'expliquer ce qu'il faut réellement changer pour avoir une seconde map. J'ai déjà pas mal insister mais malheureusement les erreurs apparaissent, je préfère demander sur votre forum car j'ai eu déjà pas mal de réponses qui m'ont bien avancés & permit l'avancement de mon GameMode.
PS : Pour les positions des véhicules, notez leur position XYZ je comprendrais.
Voici donc mon code :
new playerinminigame[MAX_PLAYERS];
new bloodring[16],derbyon,derbyplaying,playercarid[MAX_PLAYERS],playerinderby[MAX_PLAYERS],derbyrank,reward,bloodringfull[15],playerinbloodring[MAX_PLAYERS];
forward Spawnbloodrings();
forward Destroybloodrings();
forward Respawnbloodrings();
forward StartDerby();
new Float:derbycars[15][4] = {
{-1362.9799,932.8219,1036.0580,9.0890}, // 0
{-1346.4526,935.4996,1036.0889,13.6811}, // 1
{-1335.6995,938.2600,1036.1177,16.8043}, // 2
{-1320.8756,944.9904,1036.2062,27.0307}, // 3
{-1306.8385,953.5919,1036.3212,37.8366}, // 4
{-1353.9670,934.0486,1036.2421,11.5836}, // 5
{-1328.6377,941.0197,1036.3208,18.9670}, // 6
{-1313.9012,948.6513,1036.4198,29.5596}, // 7
{-1501.0956,960.3203,1036.9474,313.0457}, // 8
{-1506.8105,968.1082,1037.0840,304.3027}, // 9
{-1513.0317,976.8713,1037.2457,301.9500}, // 10
{-1516.0858,988.2343,1037.4362,274.5044}, // 11
{-1517.6569,995.6628,1037.5626,272.2782}, // 12
{-1515.1127,1004.8807,1037.6969,262.3869}, // 13
{-1510.7020,1014.6202,1037.8568,249.1825} // 14
};
public OnFilterScriptExit()
{
Destroybloodrings();
return 1;
}
public OnGameModeExit()
{
Destroybloodrings();
return 1;
}
public OnPlayerConnect(playerid)
{
playerinminigame[playerid] = 0;
playercarid[playerid] = -1;
playerinderby[playerid] = 0; // Derby
playerinbloodring[playerid] = -1;
return 1;
}
{
new string[256];
if(playerinderby[playerid] == 1)
{
new DerbyPlayerName[MAX_PLAYER_NAME];
GetPlayerName(playerid, DerbyPlayerName, sizeof(DerbyPlayerName));
format(string, sizeof(string), "%s a abandonné le derby en cours , rank : %d", DerbyPlayerName, derbyrank);
SendClientMessageToAll(0x33AA33AA, string);
playerinderby[playerid] = 0;
playerinminigame[playerid] = 0;
bloodringfull[playerinbloodring[playerid]] = 0;
playerinbloodring[playerid] = -1;
if(derbyrank <= 2)
{
for(new i=0; i<MAX_PLAYERS; i++)
{
if (IsPlayerConnected(i) && playerinderby[i] == 1)
{
new winnername[256];
GetPlayerName(i,winnername, sizeof(winnername));
RewardCalc(i,100,1000);
format(string, sizeof(string), "%s remporte la somme de $%d", winnername, reward);
SendClientMessageToAll(0x33AA33AA, string);
GivePlayerMoney(i,reward);
playerinderby[i] = 0;
playerinminigame[i] = 0;
SetPlayerVirtualWorld(i,0);
SetPlayerInterior(playerid, 0);
SetPlayerPos(i, spawnX, spawnY, spawnZ);
}
}
derbyplaying = 0;
derbyrank = 0;
derbyon = 0;
KillTimer(dtimer);
Respawnbloodrings();
return 1;
}
derbyrank--;
}
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
new string[256];
if(playerinderby[playerid] == 1)
{
new DerbyPlayerName[MAX_PLAYER_NAME];
GetPlayerName(playerid, DerbyPlayerName, sizeof(DerbyPlayerName));
format(string, sizeof(string), "%s a été expulsé du derby pour kill, rank: %d", DerbyPlayerName, derbyrank);
SendClientMessageToAll(0x33AA33AA, string);
playerinderby[playerid] = 0;
playerinminigame[playerid] = 0;
bloodringfull[playerinbloodring[playerid]] = 0;
playerinbloodring[playerid] = -1;
if(derbyrank <= 2)
{
for(new i=0; i<MAX_PLAYERS; i++)
{
if (IsPlayerConnected(i) && playerinderby[i] == 1)
{
new winnername[256];
GetPlayerName(i,winnername, sizeof(winnername));
RewardCalc(i,100,1000);
format(string, sizeof(string), "%s vient de gagner la somme de $%d", winnername, reward);
SendClientMessageToAll(0x33AA33AA, string);
GivePlayerMoney(i,reward);
playerinderby[i] = 0;
playerinminigame[i] = 0;
SetPlayerVirtualWorld(i,0);
SetPlayerInterior(playerid, 0);
SetPlayerPos(i, spawnX, spawnY, spawnZ);
}
}
derbyplaying = 0;
derbyrank = 0;
derbyon = 0;
KillTimer(dtimer);
Respawnbloodrings();
return 1;
}
derbyrank--;
}
return 1;
}
if(strcmp(cmd, "/derby", true) == 0) // Là je vais créer /derby2 pour la 2eme map
{
if(derbyplaying == 1)
{
SendClientMessage(playerid, 0xB4B5B7AA, "Le derby est déjà lancé");
return 1;
}
if(playerinminigame[playerid] == 1)
{
SendClientMessage(playerid, 0xB4B5B7AA, "Vous êtes déjà dans un minigame");
return 1;
}
new pname[256];
GetPlayerName(playerid, pname, 256);
if(derbyon == 0)
{
derbyon = 1;
playerinminigame[playerid] = 1;
playerinderby[playerid] = 1;
derbyrank = 1;
SetPlayerInterior(playerid,15);
SetPlayerVirtualWorld(playerid,7);
SetVehicleVirtualWorld(bloodring[0],7);
bloodringfull[0] = 1;
PutPlayerInVehicle(playerid, bloodring[0], 0);
playerinbloodring[playerid] = 0;
TogglePlayerControllable(playerid, 0);
startvar[0] = 1;
dtimer = SetTimer("StartDerby", 60000, 0);
format(string, sizeof(string), "%s a lancé le derby vous avez une minute pour le rejoindre /join", pname);//
SendClientMessageToAll(0x33AA33AA,string);
return 1;
} else if(derbyon == 1 && derbyrank < 15) {
playerinminigame[playerid] = 1;
playerinderby[playerid] = 1;
derbyrank++;
SetPlayerInterior(playerid,15);
for(new i=0; i<15; i++)
{
if(bloodringfull[i] == 0)
{
SetPlayerVirtualWorld(playerid,7);
SetVehicleVirtualWorld(bloodring[i],7);
bloodringfull[i] = 1;
PutPlayerInVehicle(playerid, bloodring[i], 0);
TogglePlayerControllable(playerid, 0);
playerinbloodring[playerid] = i;
format(string, sizeof(string), "%s a rejoind le derby", pname);//
SendClientMessageToAll(0x33AA33AA,string);
return 1;
}
}
} else if(derbyon == 1 && derbyrank >= 15) {
format(string, sizeof(string), "Le derby est plein , veuillez patientez", pname);//
SendClientMessage(playerid,0x33AA33AA,string);
return 1;
}
}
return 0;
}
public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(newstate == 2)
{
playercarid[playerid] = GetPlayerVehicleID(playerid);
}
if(oldstate == 2)
{
if(playerinderby[playerid])
{
PutPlayerInVehicle(playerid,playercarid[playerid],0);
}
}
return 1;
}
public Spawnbloodrings()
{
for(new i=0; i<15; i++)
{
bloodring[i] = CreateVehicle(504,derbycars[i][0],derbycars[i][1],derbycars[i][2],derbycars[i][3],-1,-1,-1);
LinkVehicleToInterior(bloodring[i],15);
SetVehicleVirtualWorld(bloodring[i],1);
bloodringfull[i] = 0;
}
return 1;
}
public Destroybloodrings()
{
for(new i=0; i<15; i++)
{
DestroyVehicle(bloodring[i]);
bloodringfull[i] = 0;
}
}
public Respawnbloodrings()
{
for(new i=0; i<15; i++)
{
SetVehicleToRespawn(bloodring[i]);
SetVehicleVirtualWorld(bloodring[i],1);
bloodringfull[i] = 0;
}
}
public load()
{
Spawnbloodrings();
return 0;
}
Voilà, merci énormément de votre aide. C'est la dernière grande étape de mon gamemode, je vous demande seulement par précaution, j'ai réellement chercher avant de vous demander.
Merci & Bonnes fêtes & bonnes rentrées aux Etudiants.