GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Bl4st3r67 le 05 Décembre 2009, 10:24:52
-
Bonjour, je m'inspire du topic qu'a créer LePetitClown pour ne pas à avoir faire plein de topic inutiles.
Je commence tout juste à apprendre a scripter le PAWN et j'ai quelques soucis :/
Ma première question:
J'ai réussi à créer deux "team" ( Enfaite, sa attribue juste un couleur aux personnages, Vert pour l'armée et Rouge pour les Terroristes... )
Se que j'aimerais faire, c'est que les Terroristes n'aient pas accès aux véhicules de l'armée et vice-versa.
J'ai cherché, trouver deux trois truc mais je ne comprends vraiment rien =( ...
Merci d'avance si vous me répondez.
++
EDIT: J'aimerais aussi savoir comment "bloquer" les munitions pour les armes ( pas plus de 200 munitions pour les M4, 150 pour les AK etc)
Pour ajouter du réalisme, car IRL on n'a pas 500 chargeur sur soi même...
Merci Au revoir
++
EDIT2: J'ai réussi =D
public OnPlayerSelectedMenuRow(playerid, row) {
new Menu:Current = GetPlayerMenu(playerid); // Si le joueur séléctionne quel que chose du menu.
if (Current == armurerie){
if (row == 0){
SetPlayerArmedWeapon (playerid ,31);
SetPlayerAmmo(playerid,31,200);
} else if (row == 1){
SetPlayerArmedWeapon(playerid ,29);
SetPlayerAmmo(playerid,29,150);
} else if (row == 2){
SetPlayerArmedWeapon(playerid ,24);
SetPlayerAmmo(playerid,24,7);
} else if (row == 3){
SetPlayerArmedWeapon(playerid ,16);
SetPlayerAmmo(playerid,16,4);
}
TogglePlayerControllable(playerid,1); // On défreeze le joueur
}
return 1;
Edit3: Erf, juste le M4 fonctionne ...
-
Salut,
pour empêcher un terroriste de rentrer dans un véhicule de l'armée et vice-versa tu doit vérifier dans OnPlayerEnterVehicle
Si le joueur peut bien y entrer.
Donc tu peut faire une condition comme celle-ci :
if( GetVehicleModel(vehicleid) == UN VEHICULE DE L'ARMEE )
{
if( TU VERIFIE SI LE JOUEUR EST BIEN DANS L'ARMEE )
{
RemovePlayerFromVehicle( playerid);
}
}
Pour ne pas dépasser le nombre maximum de munition, déjà tu peut savoir combien le joueur a de munitions avec ceci :
GetPlayerWeaponData (http://wiki.sa-mp.com/wiki/GetPlayerWeaponData)
Ensuite essaye de réfléchir un peu :)
++ 8)
-
Bonsoir, merci de m'avoir répondu.
J'ai essayé pour les véhicules mais j'aurais une petite question;
if(GetVehicleModel(vehicleid) == 1) // Je dois mettre l'ID du véhicule (Ex:520 pour l'Hydra) ou son numéro dans la liste ?
{
if(Team[playerid] = 1)
{
RemovePlayerFromVehicle(playerid);
}
}
Quand je met le code si dessus, j'ai trois erreurs;
C:\Documents and Settings\admin\Bureau\SAMP3Serveur\gamemodes\DeathWarBETA.pwn(608) : error 017: undefined symbol "vehicleid"
C:\Documents and Settings\admin\Bureau\SAMP3Serveur\gamemodes\DeathWarBETA.pwn(610) : error 017: undefined symbol "playerid"
C:\Documents and Settings\admin\Bureau\SAMP3Serveur\gamemodes\DeathWarBETA.pwn(612) : error 017: undefined symbol "playerid"
Voilà,
Merci d'avance et bonne soirée
++
-
Tu la mit dans quelle callback ton code ?
-
Dans le OnGameModeInit ?
Merci.
++
-
Faut le mettre dans OnPlayerEnterVehicle (;
-
Merci beaucoup =D
J'essayerai demain.
Bonne Soirée
++
Double post
Bonjour, voilà j'ai mis dans le bon Call Back mais sa ne marche toujours pas.
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
if(GetVehicleModel(vehicleid) == 1)
{
if(Team[playerid] = 1)
{
RemovePlayerFromVehicle(playerid);
}
}
}
C:\Documents and Settings\admin\Bureau\SAMP3Serveur\gamemodes\DeathWarBETA.pwn(608) : error 017: undefined symbol "vehicleid"
C:\Documents and Settings\admin\Bureau\SAMP3Serveur\gamemodes\DeathWarBETA.pwn(610) : error 017: undefined symbol "playerid"
C:\Documents and Settings\admin\Bureau\SAMP3Serveur\gamemodes\DeathWarBETA.pwn(612) : error 017: undefined symbol "playerid"
C:\Documents and Settings\admin\Bureau\SAMP3Serveur\gamemodes\DeathWarBETA.pwn(691) : warning 211: possibly unintended assignment
Si vous avez une idée ^^ merci d'avance.
++
EDIT: Plus que 1 erreur.
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
if(GetVehicleModel(vehicleid) == 1)
{
if(classid == 1)
{
RemovePlayerFromVehicle(playerid);
}
}
}
C:\Documents and Settings\admin\Bureau\SAMP3Serveur\gamemodes\DeathWarBETA.pwn(684) : error 017: undefined symbol "classid"
Ou si je remplace le classid par Team[playerid]
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
if(GetVehicleModel(vehicleid) == 1)
{
if(Team[playerid] = 2)
{
RemovePlayerFromVehicle(playerid);
}
}
}
C:\Documents and Settings\admin\Bureau\SAMP3Serveur\gamemodes\DeathWarBETA.pwn(684) : warning 211: possibly unintended assignment
-
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
if(GetVehicleModel(vehicleid) == 1)
{
if(Team[playerid] == 2)
{
RemovePlayerFromVehicle(playerid);
}
}
}
-
Oui il faut mettre 2 fois le signe égal dans une condition :
if(Team[playerid] == 2)
++ 8)
-
Ha juste pour un "=" x) Maintenant au moins j'y ferais plus attention ^^. Merci
Es ce que je doit faire sa pour chaque véhicule ou il y a un moyen de le faire en une ligne (genre: 1 -> 40)
Merci d'avance.
++
EDIT: Erf sa ne marche pas IG, Je prend un terro (Team 2) et essaie d'entrer dans le véhicule 1 et sa marche :/
Je pense que c'est mon système de team, je vais essayer d'en faire un autre et je vous tien au courant.
++
EDIT2:
J'ai créer un petit menu pour avoir des armes, aucune erreur sous pawno mais dans le jeu rien ne marche :/
public OnPlayerCommandText(playerid, cmdtext[])
if (strcmp("/armurerie", cmdtext, true, 10) == 0)
{
if(IsPlayerInRangeOfPoint(playerid, 8.0, 422.3651,2528.4390,16.6317))
ShowMenuForPlayer(armurerie,playerid); // On active le menu "tunning"
}
return 1;
}
armurerie = CreateMenu("~g~Weapons ~g~Selection",1,125,150,300);
if(IsValidMenu(armurerie)) {
SetMenuColumnHeader(armurerie , 0, "Choisissez votre pack d'armes:");
AddMenuItem(armurerie ,0,"Pack Normal");
AddMenuItem(armurerie ,0,"Pack Tireur D'élite");
AddMenuItem(armurerie ,0,"Pack Démolition");
AddMenuItem(armurerie ,0,"Pack Commando");
}
public OnPlayerSelectedMenuRow(playerid, row) {
new Menu:Current = GetPlayerMenu(playerid); // Si le joueur séléctionne quel que chose du menu.
if (Current == armurerie){
if (row == 0){
SetPlayerArmedWeapon (playerid ,31);
SetPlayerAmmo(playerid,6,200);
SetPlayerArmedWeapon (playerid ,16);
SetPlayerAmmo(playerid,9,4);
SetPlayerArmedWeapon (playerid ,24);
SetPlayerAmmo(playerid,3,7);
} else if (row == 1){
SetPlayerArmedWeapon (playerid ,34);
SetPlayerAmmo(playerid,7,15);
SetPlayerArmedWeapon (playerid ,23);
SetPlayerAmmo(playerid,3,34);
SetPlayerArmedWeapon (playerid ,4);
SetPlayerAmmo(playerid,2,1);
} else if (row == 2){
SetPlayerArmedWeapon (playerid ,36);
SetPlayerAmmo(playerid,8,6);
SetPlayerArmedWeapon (playerid ,16);
SetPlayerAmmo(playerid,9,4);
SetPlayerArmedWeapon (playerid ,24);
SetPlayerAmmo(playerid,3,7);
} else if (row == 3){
SetPlayerArmedWeapon (playerid ,29);
SetPlayerAmmo(playerid,5,150);
SetPlayerArmedWeapon (playerid ,23);
SetPlayerAmmo(playerid,3,34);
SetPlayerArmedWeapon (playerid ,4);
SetPlayerAmmo(playerid,2,1);
}
}
return 1;
}
J'ai mis SetPlayerArmedWeapon et SetPlayerAmmo car je ne veux pas dépasser un certain nombre de munition et sa m'a parut plus simple que avec GetPlayerWeaponData.
Voilà je ne comprends pas pourquoi sa ne marche pas :/
Merci d'avance.
++
Double post
Up Please.
Bonne Soirée
++
-
Up Please
Merci D'avance Bonne Journée.
++
-
Je n'ai pas trop le temps, mais je dirai que pouyr donner les armes ;
GivePlayerWeapon
-
Bonsoir, je n'utilise pas le GivePlayerWeapon car il suffit au joueur de faire plusieur fois la commande pour atteindre un nombre de balle exorbitant... Et je veux un maximum de realisme. Mais merci quand même de m'avoir repondu :)
Bonne Soirée
++