GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: [StAfF]MaN le 01 Mai 2008, 22:28:44

Titre: prob avec zone et capture de drapeau
Posté par: [StAfF]MaN le 01 Mai 2008, 22:28:44
Bonjour !! Je reviens vous embêter avec mes problèmes lol Cette fois c'est a cause d'une zone pour mon capture de drapeau :

code :

en haut :

new drapeau[MAX_PLAYERS];
new porteur[MAX_PLAYERS];
new drap;
new gang1;
new gang2;

forward drap1();
forward drap2();
forward gang();

dans OnPlayerSpawn :

script...

if(drapeau[playerid] == 1){
if(couleur[playerid] == 1){
SetPlayerPos(playerid, 231.3357,1748.4213,17.6481);
SendClientMessage(playerid, COLOR_RED, "Retourne chercher le drapeau !!! et ramène le dans TON camp");
return 1;
}
}
if(drapeau[playerid] == 1){
if(couleur[playerid] == 2){
SetPlayerPos(playerid, -238.6161,2612.3850,62.7031);
SendClientMessage(playerid, COLOR_RED, "Retourne chercher le drapeau !!! et ramène le dans TON camp");
return 1;
}
}
return 1;
}

Dans OnPlayerPickUpPickup

script...

if(drapeau[playerid] == 1){
if(porteur[playerid] == 0){
if(pickupid == drap){
new name[256];
new tmpp[256];
GetPlayerName(playerid, name, sizeof(name));
format(tmpp, sizeof(tmpp), "~r~%s est le porte drapeau !! ",name);
GameTextForAll(tmpp, 3000, 3);
AttachObjectToPlayer(7090, playerid, 1.5, 0.5, 0, 0, 1.5, 2);
GameTextForPlayer(playerid,"~r~Tu es le ~b~porteur ~r~du drapeau", 3000, 3);
porteur[playerid] = 1;
}
}
}
return 1;
}

Dans OnPlayerCommandText

script...

    if(strcmp(cmd,"/drapeau", true)==0){
    new tmpp[256];
    new texte[256];
    new name[MAX_PLAYER_NAME];
    tmpp = strtok(cmdtext, idx);
    if(couleur[playerid] == 0){
    SendClientMessage(playerid, COLOR_RED, "Choisi une team avant de rentrer dans la capture de drapeau !!");
    SendClientMessage(playerid, COLOR_RED, "team rouge : /DMrouge, team violet : /DMviolet");
    return 1;
    }
    if(couleur[playerid] == 1){
    GetPlayerName(playerid, name, sizeof(name));
    format(texte, sizeof(texte), " %s est entré dans le DM capture de drapeau en TEAM ROUGE", name);
    SendClientMessageToAll(COLOR_YELLOW, texte);
    SendClientMessageToAll(COLOR_YELLOW, "Avant de pouvoir le rejoindre vous devea choisir une équipe, soit les rouge soit les violet");
    SendClientMessageToAll(COLOR_YELLOW, "Tapez donc /DMrouge pour être rouge et /Dmviolet pour être violet, tapez ensuite /drapeau pour entrer dasn la capture de drapeau !!");
    SetPlayerPos(playerid, 231.3357,1748.4213,17.6481);
    }
    if(couleur[playerid] == 2){
    GetPlayerName(playerid, name, sizeof(name));
    format(texte, sizeof(texte), " %s est entré dans le DM capture de drapeau en TEAM VIOLET", name);
    SendClientMessageToAll(COLOR_YELLOW, texte);
    SendClientMessageToAll(COLOR_YELLOW, "Avant de pouvoir le rejoindre vous devea choisir une équipe, soit les rouge soit les violet");
    SendClientMessageToAll(COLOR_YELLOW, "Tapez donc /DMrouge pour être rouge et /Dmviolet pour être violet, tapez ensuite /drapeau pour entrer dasn la capture de drapeau !!");
    SetPlayerPos(playerid, -238.6161,2612.3850,62.7031);
    }
    drapeau[playerid] = 1;
    porteur[playerid] = 0;
    DMArena[playerid] = 1;
    gang1 = 1;
    gang2 = 1;
    SetPlayerInterior(playerid,0);
    SendClientMessage(playerid, COLOR_YELLOW, "te voila donc dans le DM capture de drapeau, ton but est de récupérer avec les autres membres de ta team");
    SendClientMessage(playerid, COLOR_YELLOW, "le drapeau qui est signalé par un marqueur rouge sur la minimap et de le ramener dans ton camp a l'endroit indiqué.");
    GameTextForPlayer(playerid, "~r~Bonne capture !!!",3000,6);
    drap = CreatePickup(7090, 22, -155.9434,2287.6399,30.2833);
    SetPlayerCheckpoint(playerid, -155.9434,2287.6399,30.2833, 5);
    GivePlayerWeapon(playerid, 29, 9999);
    GivePlayerWeapon(playerid, 34, 9999);
    SetPlayerHealth(playerid, 100);
    return 1;
   }

script...


et la fin :

public drap1()
{
if(countdown == 0)
{
    KillTimer(Compte);
    PlayAllSound(1057);
}else{
    PlayAllSound(1056);
    countdown--;
}
return 1;
}

public drap2()
{
if(countdown == 0)
{
    KillTimer(Compte);
    PlayAllSound(1057);
}else{
    PlayAllSound(1056);
    countdown--;
}
return 1;
}

public gang(){
new playerid;
gang1 = SetPlayerWorldBounds(playerid,297.2881,295.6295,1748.3870,1735.0648);
gang2 = SetPlayerWorldBounds(playerid,-285.3674,-245.9594,2592.1355,2585.1033);
if(gang1 == 1){
if(porteur[playerid] == 1){
Compte=SetTimer("drap1",1000,1);
countdown = 15;
SendClientMessage(playerid, COLOR_RED,"reste 15 seconde dans ta zone pour la valider");
return 1;
}
if(countdown == 0){
new name[256];
new tmpp[256];
SendClientMessage(playerid, COLOR_YELLOW, "Tu a réussi a capturer le drapeau");
GetPlayerName(playerid, name, sizeof(name));
format(tmpp, sizeof(tmpp), "~r~%s A reussi a capturer le drapeau ",name);
GameTextForAll(tmpp, 3000, 3);
DestroyPlayerObject(playerid, 7090);
drap = CreatePickup(7090, 22, -155.9434,2287.6399,30.2833);
return 1;
}

if(porteur[playerid] == 0){
return 1;
}
if(gang1 == 0){
if(porteur[playerid] == 0){
return 1;
}

if(gang2 == 1){
if(porteur[playerid] == 1){
Compte=SetTimer("drap2",1000,1);
countdown = 15;
SendClientMessage(playerid, COLOR_RED,"reste 15 seconde dans ta zone pour la valider");
return 1;
}
if(countdown == 0){
new name[256];
new tmpp[256];
SendClientMessage(playerid, COLOR_YELLOW, "Tu a réussi a capturer le drapeau");
GetPlayerName(playerid, name, sizeof(name));
format(tmpp, sizeof(tmpp), "~r~%s A reussi a capturer le drapeau ",name);
GameTextForAll(tmpp, 3000, 3);
DestroyPlayerObject(playerid, 7090);
drap = CreatePickup(7090, 22, -155.9434,2287.6399,30.2833);
return 1;
}
if(porteur[playerid] == 1){
return 1;
}
if(gang2 == 0){
if(porteur[playerid] == 0){
return 1;
}
}
}
}
}
return 1;
}

Voila Alors en faite :

Il n'y a pas les zones... De plus, l'objet, quand il est prit par un player, les autres voient toujours le pickup... Le player qui porte l'objet ne vois pas le drapeau qui doit être attaché a lui normalement, je veut qu'il soit visible par tous mais ça ne fonctionne pas...
De plus je n'arrive pas a faire en sorte que quand le player qui porte le drapeau, meurt, que le drapeau reste a l'endroit ou le player qui le portai est mort, et qu'il soit réccupérable par les autres...
Après, bah pour les derniers public, a partir du public gang(){ bah je ne peut savoir si ça fonctionne....

Est ce que vous pouvez m'aider SVP ^^
Titre: Re : prob avec zone et capture de drapeau
Posté par: [StAfF]MaN le 02 Mai 2008, 15:20:21
up les gens   :(  :angelnot

Edit : J'ai fais un truk, et quand le player prend le drapeau, il a soit une ramp bleu, pour les bateaux, soit une route qui s'attache a lui, c'est pas trop ce que je veut faire lol mais je m'en rapproche xD :


AttachObjectToPlayer(drap, playerid, 1.5, 0.5, 0, 0, 1.5, 2);


Alors qu'avant j'avais mis :

AttachObjectToPlayer(7090, playerid, 1.5, 0.5, 0, 0, 1.5, 2); donc l'ID de l'objet directement, a savoir que dans mon OnGameModeInit j'ai mis aussi

drap = CreatePickup(7090, 22, -155.9434,2287.6399,30.2833);

Voila... :s
Titre: Re : prob avec zone et capture de drapeau
Posté par: [StAfF]MaN le 02 Mai 2008, 19:00:25
Bon allé, un petit triple poste....  :-X

help please !!! J'ai passé un temps fou a essayer pleins de trucs mais en vain...
Titre: Re : prob avec zone et capture de drapeau
Posté par: [StAfF]MaN le 04 Mai 2008, 00:07:35
Svp les mecs... J'ai pas arrêter de chercher et je trouve pas....  :wall  :(
Titre: Re : prob avec zone et capture de drapeau
Posté par: Nikko™ le 04 Mai 2008, 13:58:49
Salut,

Mais ton truc de capturé le drapeux cest un mode entier ???

[HS] Mdr 4 posts d'affilés  :rules ^^ [HS]

++
nikko
Titre: Re : prob avec zone et capture de drapeau
Posté par: [StAfF]MaN le 04 Mai 2008, 14:55:31
Bah pratiquement oui, c'est assez énorme, puis ça ma pris pas mal de temps pour tout faire !! ...

Oui 4 postes a suivre c'est abuser, mais j'ai vraiment besoin d'aide...  :(

Edit : plus d'infos la : http://staffteam.clanfree.net/new.html
Titre: Re : prob avec zone et capture de drapeau
Posté par: [StAfF]MaN le 10 Mai 2008, 20:53:03
Re encore ^^ (il y a que des message de moi  :P)

Bon s'était pour vous dire que les zones j'ai laissé tombé, j'ai remplacé par des checkpoint, plus facile a faire, moi qui n'est jamais travaillé avec des zones, mais j'aimerais bien savoir comment faire quand même ^^

Voila, donc mon code fonctionne mais il reste de petits détails tel que :

Attacher l'objet au joueur, que je n'arrive toujours pas a faire...
Faire en sorte que quand un joueur a déjà fait la commande /drapeau et qu'un autre player la fasse après, bah que le player qui a fait /drapeau en deuxième, ou troisième, enfin pas le 1er, qu'il prenne la partie en cour, donc, si un player a déjà le drapeau
que le player qui vien de rentrer ne vois pas un nouveau drapeau quand il tapera /drapeau ^^

Voila je mes le code la :

en haut:

new drapeau[MAX_PLAYERS];
new porteur[MAX_PLAYERS];
new drapob;
new drap1;
new drap2;
new drap11;
new drap21;


forward drap();
forward drapb();
forward gang();


public OnPlayerSpawn(playerid)
{

script ....
if(drapeau[playerid] == 1){
if(couleur[playerid] == 1){
SetPlayerPos(playerid, 231.3357,1748.4213,17.6481);
SendClientMessage(playerid, COLOR_RED, "Retourne chercher le drapeau !!! et ramène le dans TON camp");
return 1;
}
}
if(drapeau[playerid] == 1){
if(couleur[playerid] == 2){
SetPlayerPos(playerid, -238.6161,2612.3850,62.7031);
SendClientMessage(playerid, COLOR_RED, "Retourne chercher le drapeau !!! et ramène le dans TON camp");
return 1;
}
}
return 1;
}


public OnPlayerPickUpPickup(playerid, pickupid){

script ...
if(pickupid == drapob){
if(drapeau[playerid] == 1){
if(porteur[playerid] == 0){
new name[256];
new tmpp[256];
GetPlayerName(playerid, name, sizeof(name));
format(tmpp, sizeof(tmpp), "%s est le porteur du drapeau !!",name);
GameTextForAll(tmpp,32000,5);
AttachObjectToPlayer(7090, playerid, 1.5, 0.5, 0, 0, 1.5, 2);
GameTextForPlayer(playerid,"~r~Tu es le ~b~porteur ~r~du drapeau", 3000, 3);
porteur[playerid] = 1;
for(new i = 0; i < MAX_PLAYERS; i++)
{
DisablePlayerCheckpoint(i);
DestroyPickup(i);
}
}
}
if(couleur[playerid] == 1){
for(new i = 0; i < MAX_PLAYERS; i++)
{
SetPlayerCheckpoint(i,297.2881,1735.0648,17.6406,5);
}
}
if(couleur[playerid] == 2){
for(new i = 0; i < MAX_PLAYERS; i++)
{
SetPlayerCheckpoint(i,-285.3674,2585.1033,63.5703,5);
}
}
}
return 1;
}



public OnPlayerCommandText(playerid, cmdtext[]){

script...
    if(strcmp(cmd,"/drapeau", true)==0){
    new tmpp[256];
    new texte[256];
    new name[MAX_PLAYER_NAME];
    tmpp = strtok(cmdtext, idx);
    if(couleur[playerid] == 0){
    SendClientMessage(playerid, COLOR_RED, "Choisi une team avant de rentrer dans la capture de drapeau !!");
    SendClientMessage(playerid, COLOR_RED, "team rouge : /DMrouge, team violet : /DMviolet");
    return 1;
    }
    if(couleur[playerid] == 1){
    GetPlayerName(playerid, name, sizeof(name));
    format(texte, sizeof(texte), " %s est entré dans le DM capture de drapeau en TEAM ROUGE", name);
    SendClientMessageToAll(COLOR_YELLOW, texte);
    SendClientMessageToAll(COLOR_YELLOW, "Avant de pouvoir le rejoindre vous devez choisir une équipe, soit les rouge soit les violet");
    SendClientMessageToAll(COLOR_YELLOW, "Tapez donc /DMrouge pour être rouge et /Dmviolet pour être violet, tapez ensuite /drapeau pour entrer dans la capture de drapeau !!");
    SetPlayerPos(playerid, 231.3357,1748.4213,17.6481);
    }
    if(couleur[playerid] == 2){
    GetPlayerName(playerid, name, sizeof(name));
    format(texte, sizeof(texte), " %s est entré dans le DM capture de drapeau en TEAM VIOLET", name);
    SendClientMessageToAll(COLOR_YELLOW, texte);
    SendClientMessageToAll(COLOR_YELLOW, "Avant de pouvoir le rejoindre vous devez choisir une équipe, soit les rouge soit les violet");
    SendClientMessageToAll(COLOR_YELLOW, "Tapez donc /DMrouge pour être rouge et /Dmviolet pour être violet, tapez ensuite /drapeau pour entrer dans la capture de drapeau !!");
    SetPlayerPos(playerid, -238.6161,2612.3850,62.7031);
    }
    drapeau[playerid] = 1;
    porteur[playerid] = 0;
    DMArena[playerid] = 1;
    SetPlayerInterior(playerid,0);
    SendClientMessage(playerid, COLOR_YELLOW, "te voila donc dans le DM capture de drapeau, ton but est de récupérer avec les autres membres de ta team");
    SendClientMessage(playerid, COLOR_YELLOW, "le drapeau qui est signalé par un marqueur rouge sur la minimap et de le ramener dans ton camp a l'endroit indiqué.");
    GameTextForPlayer(playerid, "~r~Bonne capture !!!",3000,6);
    drapob = CreatePickup(7090, 22, -155.9434,2287.6399,30.2833);
    SetPlayerCheckpoint(playerid, -155.9434,2287.6399,30.2833, 5);
    GivePlayerWeapon(playerid, 29, 9999);
    GivePlayerWeapon(playerid, 34, 9999);
    SetPlayerHealth(playerid, 100);
    return 1;
   }



public OnPlayerEnterCheckpoint(playerid)
{

script ...
if(drapeau[playerid] == 1){
//if(IsPlayerInCheckpoint(playerid) == 1){
if(porteur[playerid] == 1){
if(couleur[playerid] == 1){
SendClientMessage(playerid, COLOR_RED,"reste 15 secondes dans ta zone pour la valider");
drap11=SetTimer("drap",1000,1);
drap1 = 15;
return 1;
}
if(IsPlayerInCheckpoint(playerid) == 0){
KillTimer(drap11);
return 1;
}
}
}
if(drapeau[playerid] == 1){
if(couleur[playerid] == 2){
if(porteur[playerid] == 1){
//if(IsPlayerInCheckpoint(playerid) == 1){
SendClientMessage(playerid, COLOR_RED,"reste 15 secondes dans ta zone pour la valider");
drap21=SetTimer("drapb",1000,1);
drap2 = 15;
return 1;
}
if(IsPlayerInCheckpoint(playerid) == 0){
KillTimer(drap21);
return 1;
}
}
}
return 1;
}



public drap()
{
new playerid;
new name[256];
new tmpp[256];
if(drap1 == 0)
{
    KillTimer(drap11);
    PlayAllSound(1057);
    SendClientMessage(playerid, COLOR_YELLOW, "Tu a réussi a capturer le drapeau");
    GetPlayerName(playerid, name, sizeof(name));
    format(tmpp, sizeof(tmpp), "~r~%s A reussi a capturer le drapeau ",name);
    GameTextForAll(tmpp, 3000, 5);
    DestroyPlayerObject(playerid, 7090);
    SetPlayerScore(playerid,GetPlayerScore(playerid)+100);
    porteur[playerid] = 0;
    drapob = CreatePickup(7090, 22, -155.9434,2287.6399,30.2833);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    DisablePlayerCheckpoint(i);
    }
    for(new i = 0; i < MAX_PLAYERS; i++)
{
    SetPlayerCheckpoint(i, -155.9434,2287.6399,30.2833, 5);
    }
    }
if(porteur[playerid] == 0){
return 1;
}
if(IsPlayerInCheckpoint(playerid) == 0){
if(porteur[playerid] == 0){
return 1;
}
}else{
    PlayAllSound(1056);
    drap1--;
}
return 1;
}
public drapb()
{
new playerid;
new name[256];
new tmpp[256];
if(drap2 == 0)
{
    KillTimer(drap21);
    PlayAllSound(1057);
    SendClientMessage(playerid, COLOR_YELLOW, "Tu a réussi a capturer le drapeau");
    GetPlayerName(playerid, name, sizeof(name));
    format(tmpp, sizeof(tmpp), "~r~%s A reussi a capturer le drapeau ",name);
    GameTextForAll(tmpp, 3000, 3);
    DestroyPlayerObject(playerid, 7090);
    porteur[playerid] = 0;
    SetPlayerScore(playerid,GetPlayerScore(playerid)+100);
    drapob = CreatePickup(7090, 22, -155.9434,2287.6399,30.2833);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    DisablePlayerCheckpoint(i);
    }
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    SetPlayerCheckpoint(i, -155.9434,2287.6399,30.2833, 5);
    }
    }
   
if(porteur[playerid] == 0){
return 1;
}

if(IsPlayerInCheckpoint(playerid) == 0){
if(porteur[playerid] == 0){
return 1;
}
}else{
    PlayAllSound(1056);
    drap2--;
}
return 1;
}

Voila ^^ J'espère que vous pourrez m'aider pour le peut qu'il me reste ;)
Titre: Re : Re : prob avec zone et capture de drapeau
Posté par: Nikko™ le 10 Mai 2008, 21:05:04
Faire en sorte que quand un joueur a déjà fait la commande /drapeau et qu'un autre player la fasse après, bah que le player qui a fait /drapeau en deuxième, ou troisième, enfin pas le 1er, qu'il prenne la partie en cour, donc, si un player a déjà le drapeau
que le player qui vien de rentrer ne vois pas un nouveau drapeau quand il tapera /drapeau ^^
Mdr un peu compliquer ta phrase je trouver Oo  :blink
Mais bon chui dsl jpeu pas t'aider, mais perd pas espoir ^^  :jesors

++
nikko
Titre: Re : prob avec zone et capture de drapeau
Posté par: [StAfF]MaN le 11 Mai 2008, 02:07:32
Compliqué mais je pense compréhensible ^^ Quelqu'un qui sait peut m'aider ^^ svp ;)  :D

Et j'ai oublier de dire que j'arrive pas a faire en sorte que l'objet soit attaché au player...
Et que quand le player meurt, l'objet soit positionné a l'endroit ou il meurt et que les autres players puissent le prendre a leur tour
Titre: Re : prob avec zone et capture de drapeau
Posté par: Nikko™ le 11 Mai 2008, 11:14:02
Je pense que ca ce joue avec des timer...

++
nikko
Titre: Re : Re : prob avec zone et capture de drapeau
Posté par: Bayshore le 11 Mai 2008, 11:21:16
Compliqué mais je pense compréhensible ^^ Quelqu'un qui sait peut m'aider ^^ svp ;)  :D

Et j'ai oublier de dire que j'arrive pas a faire en sorte que l'objet soit attaché au player...
Et que quand le player meurt, l'objet soit positionné a l'endroit ou il meurt et que les autres players puissent le prendre a leur tour

Yosh

Tu utilises AttachObjectToPlayer (http://wiki.sa-mp.com/wiki/AttachObjectToPlayer), ensuite quand le player meurt (http://wiki.sa-mp.com/wiki/OnPlayerDeath) tu récupères sa position (http://wiki.sa-mp.com/wiki/GetPlayerPos) puis tu met un pickup (http://wiki.sa-mp.com/wiki/CreatePickup) là où est le cadavre :laugh

Ensuite tu refait le tralala (http://wiki.sa-mp.com/wiki/OnPlayerPickUpPickup)...

;)

++
Alexandre
Titre: Re : prob avec zone et capture de drapeau
Posté par: [StAfF]MaN le 11 Mai 2008, 12:45:23
bah oui c'est ce que je fais pour le AttachToPlayer !! Mais ça ne fonctionne pas, on ne vois pas le drapeau  :ohmy Regarde :

public OnPlayerPickUpPickup(playerid, pickupid){

script ...
if(pickupid == drapob){
if(drapeau[playerid] == 1){
if(porteur[playerid] == 0){
new name[256];
new tmpp[256];
GetPlayerName(playerid, name, sizeof(name));
format(tmpp, sizeof(tmpp), "%s est le porteur du drapeau !!",name);
GameTextForAll(tmpp,32000,5);
AttachObjectToPlayer(7090, playerid, 1.5, 0.5, 0, 0, 1.5, 2);
GameTextForPlayer(playerid,"~r~Tu es le ~b~porteur ~r~du drapeau", 3000, 3);
porteur[playerid] = 1;
for(new i = 0; i < MAX_PLAYERS; i++)
{
DisablePlayerCheckpoint(i);
DestroyPickup(i);
}
}
}
if(couleur[playerid] == 1){
for(new i = 0; i < MAX_PLAYERS; i++)
{
SetPlayerCheckpoint(i,297.2881,1735.0648,17.6406,5);
}
}
if(couleur[playerid] == 2){
for(new i = 0; i < MAX_PLAYERS; i++)
{
SetPlayerCheckpoint(i,-285.3674,2585.1033,63.5703,5);
}
}
}
return 1;
}

J'ai mis l'ID de l'objet mais quand on est en jeu, une fois qu'on est rentré dans le pickup, bah le pickup disparait normale, mais il n'y a pas d'objet qui s'attache au joueur...
Sinon je vais faire comme tu ma dis pour récupérer l'objet quand un player meurt ;)
Titre: Re : prob avec zone et capture de drapeau
Posté par: [StAfF]MaN le 12 Mai 2008, 23:09:48
heu alors s'était juste pour savoir ou je doit mettre le bout de code pour quand le player meurt ^^ parce que je l'avais mis la dedans mais ça ne fonctionne pas :



if(drapeau[playerid] == 1){
if(porteur[playerid] == 1){
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
        for(new i = 0; i < MAX_PLAYERS; i++)
        {
DestroyPlayerObject(i, 7090);
DisablePlayerCheckpoint(i);
porteur[i] = 0;
}
        for(new i = 0; i < MAX_PLAYERS; i++)
        {
CreatePickup(7090, 22, x, y, z);
SetPlayerCheckpoint(i, x, y, z, 1);
return 1;
}
}
}
}
    return 1;
}


Dans OnPlayerDeath mais ça ne fonctionne pas :s
Titre: Re : prob avec zone et capture de drapeau
Posté par: Bayshore le 13 Mai 2008, 17:14:06
Yosh.

Il y a 2 returns ;D essaye d'en enlever un. :)

++
Alexandre

PS: Si tu pouvais indenter ton code se serait pas mal. :happy
Titre: Re : prob avec zone et capture de drapeau
Posté par: S!m le 14 Mai 2008, 01:33:03
salut,

bon j'aperçois tout de suite au moins deux problèmes......


premièrement, tu essai d'attacher un Pickup à l'aide d'une fonction prévue pour les Objets....

ça ne peut fonctionner....

par la suite, afin d'empecher les autres de partir avec un deuxième drapeau, fait une variable, quand le premier joueur prend le pickup,  la variable est a 1 et les autres ne peuvent plus prendre le pickup....

je vais regarder un peu plus au cas ou...

EDIT:

pourquoi tu as fait 2 boucles?
public OnPlayerDeath(playerid,reason)
{
if(drapeau[playerid] == 1){
if(porteur[playerid] == 1){
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
        for(new i = 0; i < MAX_PLAYERS; i++)
        {
DestroyPlayerObject(i, 7090);
DisablePlayerCheckpoint(i);
porteur[i] = 0;
CreatePickup(7090, 22, x, y, z);
SetPlayerCheckpoint(i, x, y, z, 1);
               //pas de return ici, comme le disait -Alexandre
}
    return 1;
            }
      }
    return 1;
}

je crois que c'est déja mieu....

++Sim++
Titre: Re : prob avec zone et capture de drapeau
Posté par: [StAfF]MaN le 14 Mai 2008, 14:33:57
Merci ça fonctionne ;)

Sinon pour la variable je suis en train de faire ça ^^ Merci Sim, en espérant que vous pourrez m'aider pour le prob du drapeau !! ^^

Edit : Voila j'ai fais la variable, ce qui a changé un peut tout le script, avec le

for(new i = 0; i < MAX_PLAYERS; i++)
{

lol ^^


Voila je met un Pastbin :      http://pastebin.gtaonline.fr/pastebin.php?show=432

l'identation est pas bonne par contre :s
Titre: Re : prob avec zone et capture de drapeau
Posté par: feldbrau le 14 Mai 2008, 17:38:33
Je vien de penser a un truc (peut-etre que c'est trop tard), mais le FS pour placer les objets In Game ressemble fort a ceux que tu veut. Juste a modifier la distance et la facon de placer l'objet a la mort.

Si ca peut comme meme aider ;)

++
Titre: Re : prob avec zone et capture de drapeau
Posté par: [StAfF]MaN le 14 Mai 2008, 17:58:55
Non c'est bon maintenant a la mort du perso il y a un pickup et un checkpoint c'est bon, c'est ce que je voulais, mais il y a un petit prob en faite...

Quand un joueur passe sur le pickup du player qui est mort, le pickup disparait c'est bon, mais toujours pas d'objet attaché a lui... Et de plus, le checkpoint ne part pas...

Tout le code est sur le pastbin que j'ai donné ;)
Titre: Re : prob avec zone et capture de drapeau
Posté par: feldbrau le 14 Mai 2008, 18:03:18
Dans OnPlayerPickuppickup, met le attachobjectplayer dans une condition (si le drapeau est porté ou non). Si tu veut poste le public Onplyerpickup... et le attach.

Si tu veut, je te file mon msn (envoi un MP si tu veut ;)), sinon jvais essayer de faire un exemple mais sans ton code jrisque de te faire faire des bétises.
Titre: Re : prob avec zone et capture de drapeau
Posté par: [StAfF]MaN le 14 Mai 2008, 19:55:49
Voila le pastbin avec le code, c'est juste ce qui concerne la capture de flag ;)

Je te file mon MSN ;)

pour ton histoire de mettre une variable, elle y est déjà la variable mais sa fonctionne pas...
Titre: Re : prob avec zone et capture de drapeau
Posté par: feldbrau le 15 Mai 2008, 00:57:01
Je pense avoir trouvé:

Ton code:
if(pickupid == drapob)
{
          if(drapeau[playerid] == 1)
          {
                 for(new i = 0; i < MAX_PLAYERS; i++)
                 {
                       if(porteur[i] == 0)
                       {
                               new name[256];
                                new tmpp[256];
                                GetPlayerName(playerid, name, sizeof(name));
                                format(tmpp, sizeof(tmpp), "%s est le porteur du drapeau !!",name);
                                GameTextForAll(tmpp,32000,5);
                                AttachObjectToPlayer(7090, playerid, 1.5, 0.5, 0, 0, 1.5, 2);
                                GameTextForPlayer(playerid,"~r~Tu es le ~b~porteur ~r~du drapeau", 3000, 3);
                                porteur[i] = 1;
                                DisablePlayerCheckpoint(i);
                                DestroyPickup(i);
                        }
}

Code bon:

if(pickupid == drapob)
{
          if(drapeau[playerid] == 1)
          {
                 for(new i = 0; i < MAX_PLAYERS; i++)
                 {
                       if(porteur[i] == 0)
                       {
                                new name[256];
                                new tmpp[256];
                                new Float:X, Float:Y, Float:Z;
                                GetPlayerName(playerid, name, sizeof(name));
                                GetPlayerPos(playerid, X, Y, Z);
                                format(tmpp, sizeof(tmpp), "%s est le porteur du drapeau !!",name);
                                GameTextForAll(tmpp,32000,5);
                                AttachObjectToPlayer(7090, playerid, X, Y+1, Z, 0, 1.5, 2);
                                GameTextForPlayer(playerid,"~r~Tu es le ~b~porteur ~r~du drapeau", 3000, 3);
                                porteur[i] = 1;
                                DisablePlayerCheckpoint(i);
                                DestroyPickup(i);
                        }
}

Jpense que ca devrait mieu marcher.
Titre: Re : prob avec zone et capture de drapeau
Posté par: [StAfF]MaN le 15 Mai 2008, 11:29:29
non ça fonctionne pas  :blink  ça ne fait pas buger ma commande heureusement mais sa n'ajoute rien ...
Titre: Re : prob avec zone et capture de drapeau
Posté par: feldbrau le 15 Mai 2008, 15:12:18
Ca fait une erreur de compil ? Et IG c'est quoi qui va pas avec la commande que je t'ai filé, le drapeau qui de position pas? . . .
Titre: Re : prob avec zone et capture de drapeau
Posté par: [StAfF]MaN le 15 Mai 2008, 15:44:04
Non pas d'erreur de compile, mais en faite, quand le player prend le pickup normalement un objet s'attache a lui, ce qui fait que tout le monde vois un drapeau sur le porteur, et IG bah quand on passe sur le pickup drapeau, il n'y a pas d'objet qui s'attache au player...

ça c'est un des probs, après l'autre prob que j'ai c'est quand un player tape /drapeau, et qu'un autre tape /drapeau aussi après, bah normalement, si le premier player a pris le drapeau, l'autre le vois avec, mais il y a un nouveau pickup avec un nouveau checkpoint qui apparait, normalement ça ne devrait pas...

Et j'en est encore un, c'est quand un player a le drapeau, qu'il rentre dans son camp, un timer se met en route, mais si le player sort de son camp et qu'il y retourne après, l'ancien timer ce remet, et un nouveau s'enclanche, ce qui fait que tout bug après lol !! J'ai mis un killtimer si le player n'est pas dans son camp, mais il ne fonctionne pas, tout ça c'est visible sur le pastbin bien sur ;)
Titre: Re : prob avec zone et capture de drapeau
Posté par: feldbrau le 15 Mai 2008, 16:40:03
On va deja resoudre le premier probleme ^^.

Donc a la base (si je me souvien bien) AttachObject faut pas mettre 0,1,0 car il va prendre la position sur la carte. Il faut recup la position du joueur +1 par exemple. Je vais essayer de retrouver le FS pour les objects In Game ca affiche a tous le monde l'objet porté.
Titre: Re : prob avec zone et capture de drapeau
Posté par: [StAfF]MaN le 15 Mai 2008, 17:40:17
Dans Bread_Oed en faite il y a la commande /ostick qui attache un objet au player, mais il y a pleins de truc zarb :

pastbin :   http://pastebin.gtaonline.fr/pastebin.php?show=433

c'est le filter Bread_Oed ;) Que tu puisse voir tout, ça évite que je fasse des erreurs en recopiant le code pour le mettre dans mon poste ^^
Titre: Re : prob avec zone et capture de drapeau
Posté par: feldbrau le 16 Mai 2008, 23:40:16
Je vais faire des test pour creer le mode moi meme, je te donnerai le code ;) (juste le temps de retelecharger SAMP)
Titre: Re : prob avec zone et capture de drapeau
Posté par: [StAfF]MaN le 17 Mai 2008, 02:20:15
Non c'est bon, je préfère avoir un coup de main plutôt que quelqu'un me fasse le code ^^ C'est sympa de ta pars ;)

Sinon j'ai un new bug  :blink Quand le player a le drapeau, il va dans son camp, mais le timer ne s'enclenche plus ....  :ohmy

Faut que je règle ça ;)