GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: RenZoKen le 14 Février 2010, 12:10:21
-
Bonjour à tous/toutes
Tout est dans le titre, après de nombreuses tentatives et recherches :closedeyes , je n'arrive pas à trouver :
- Un système de Login Auto ( via l'adresse IP )
- Une sauvegarde des couleurs des véhicules quand ils respawn après avoir utilisé /color [id1] [id2]
- Une commande /duel
Donc je me tourne vers vous. :D
Coordialement, RenZoKen :-[
-
salut,
- regarde dans le FS AdminOnDuty il y ai
- heu je sait pas
- Ah je comptait faire un FS de duel quand j'aurais fini mon serveur mais bon :-[
Voila ce que je peut te dire :)
-
Pour les couleurs il sufit de le mettre dans les sauvegardes dans OnPlayerDisconnect
-
Quand je fais la commande /color, la couleur change.
Quand le véhicule respawn, elle redevient comme à la base.
Il doit me manquer un truc genre SaveChangeColorVehicle(vehicleid, color1, color2); ou sinon quelque chose qui change directement mes couleurs sur les AddStaticVehicle dans mon GM mais j'penses pas que ca existe ^^
Je vais regarder sur le FS AdminOnDuty pour le Login Auto voir ce que ca donne :)
-
je pense plutot qu'une recherche s'impose sur gtaonline ou sur samp.com
-
Cette recherche s'est déjà effectuée 3 ou 4 fois :dry
-
Une petite sauvegarde des données lors du /color et un chargement de ses sauvegardes au niveau des couleurs dans les AddStaticVehicle
-
Pour l'FS duel tu peut le faire toi meme en mappant une map et mettre deux équipe ou sinon yavais la map de Zord qui gérai pour faire un Duel
-
vu que tu as deja chercher tu as vu ceci
auto login http://www.gtaonline.fr/forums/index.php/topic,7529.0.html (http://www.gtaonline.fr/forums/index.php/topic,7529.0.html)
couleur voiture prend exemple ici http://www.gtaonline.fr/forums/index.php/topic,8068.0.html (http://www.gtaonline.fr/forums/index.php/topic,8068.0.html)
et OMG le FS duel tout pret http://forum.sa-mp.com/index.php?topic=140765.0 (http://forum.sa-mp.com/index.php?topic=140765.0)
et tu me dit que tu as chercher :... sa promet
-
Pour le Login Auto, j'étais en train de le chercher.
Pour les couleurs, j'avais déjà vu mais je pensais que c'était seulement pour le garage tuning.
Pour le duel, j'avais déja vu mais sauf que moi je veux que ce soit l'admin qui choisi les 2 joueurs et non pas les joueurs qui se choissisent entre eux et à tout moment.
-
Pour le duel, j'avais déja vu mais sauf que moi je veux que ce soit l'admin qui choisi les 2 joueurs et non pas les joueurs qui se choissisent entre eux et à tout moment.
A toi de le modifier ;)
-
Pour le duel, c'est bon je m'en suis fait un à ma maniere.
Après pour le login auto et le save des couleurs, j'y arrive toujours pas ...
Voici ma commande pour les couleurs, je rappelle que mon seul problème pour cette commande est que la couleur change mais apres le respawn du véhicule, elle redevient comme à l'origine :
if(strcmp(cmd, "/color", true) == 0 || strcmp(cmd, "/colour", true) == 0)
{
new var1[256];
new filename[256];
format(filename, sizeof(filename), "%d", GetPlayerVehicleID(playerid));
GetPlayerName(playerid, playername, MAX_PLAYER_NAME);
var1 = dini_Get(filename, "owner");
tmp[playerid] = GetPlayerVehicleID(playerid);
if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER )
{
SendClientMessage(playerid, COLOR_BRIGHTRED, "Vous devez vous trouver dans votre véhicule");
return 1;
}
new tmp1[256];
tmp1= strtok(cmdtext, idx);
tmp2= strtok(cmdtext, idx);
if(!strlen(tmp1) || !strlen(tmp2))
{
SendClientMessage(playerid, COLOR_BRIGHTRED, "Utiliser: /color [id 1] [id 2]");
return 1;
}
if (strcmp(var1,playername,false) == 0) {
GetPlayerName(playerid, playername, MAX_PLAYER_NAME);
format(filename, sizeof(filename), "%d", GetPlayerVehicleID(playerid));
tmp = strtok(cmdtext, idx);
if(!strlen(tmp1) || !strlen(tmp2))
{
SendClientMessage(playerid, COLOR_BRIGHTRED, "Utiliser: /color [color1] [color2]");
return 1;
}
new color1 = strval(tmp1);
new color2 = strval(tmp2);
ChangeVehicleColor(GetPlayerVehicleID(playerid), color1, color2);
SendClientMessage(playerid, COLOR_LIGHTGREEN, "Votre véhicule spawnera de cette couleur désormais.");
return 1;
}
else {
SendClientMessage(playerid, COLOR_BRIGHTRED, "Ce véhicule ne vous appartient pas !");
return 1;
}
}
-
Pour la couleur il faudrai sauvegarder le vehicul dans un fichier que tu met dans scriptfiles
Et pour l'auto login tu peut le faire par l'ip voila un exemple :
GetPlayerIp(playerid,PlayerIP,20);
if (PlayerIP == GetIP) SendClientMessage(playerid,bleu,"Tu à été automatiquement loguer");
Après le GetIP est l'ip que tu as sauvegarder dans le Fichier joueurs
Donc en gros sa fait :
On prend l'ip du joueurs;
Si l'ip que on vien de prendre corespond a l'ip sauvegarder on lui envoie "Tu à été automatiquement loguer"
-
Ok merci, et je le place où dans mon GM ?
-
BAh tu met dans OnPlayerConnect mais apres il faut l'aptapter ;)
-
Ok je l'ai placé dans OnPlayerSpawn :
GetPlayerIp(playerid,ip,20);
new val1[256];
new playername[MAX_PLAYER_NAME];
new filename[256];
format(filename, sizeof(filename), "%d", ip);
GetPlayerName(playerid, playername, MAX_PLAYER_NAME);
val1 = dini_Get(filename, "ip");
if (strcmp(val1,playername,false) == 0)
{
SendClientMessage(playerid,COLOR_LIGHTGREEN,"Tu as été automatiquement loggé");
}
Le probleme est que quand j'arrive, ca me dit bien " Tu as été automatiquement loggé " comme si j'avais été loggé automatiquement suite à la lecture de l'IP, mais ca me logge pas en fait ><
PS : Si le joueur a une IP dynamique, ca va plus marcher si ?
-
Bah il te suffit du mettre avec SendClientMessage le code du login
Et pour ton Ip dinamique non sa ne marcheras pas il fautdra que le joueurs utilise /login [mot de passe]
-
Petit probleme au niveau du Login Auto,
Voici mon login auto placé dans OnPlayerSpawn :
GetPlayerIp(playerid,ip,20);
new val1[256];
new filename[256];
new playername[MAX_PLAYER_NAME];
format(filename, sizeof(filename), "%d", ip);
GetPlayerName(playerid, playername, MAX_PLAYER_NAME);
val1 = dini_Get(filename, "ip");
if (strcmp(val1,playername,false) == 0)
{
SendClientMessage(playerid,COLOR_LIGHTGREEN,"Tu as été automatiquement loggé");
SendClientMessage(playerid, COLOR_LIGHTGREEN, "Votre argent et votre position sont sauvegardés automatiquement quand vous quittez le jeu!");
LoadSave(playerid);
}
Et voici le public permettant le login auto :
forward LoadSave(playerid);
public LoadSave(playerid)
{
new playername[MAX_PLAYER_NAME];
GetPlayerName(playerid, playername, sizeof(playername));
if (dini_Exists(udb_encode(playername)))
{
logged[playerid] = 1;
new Float:x, Float:y, Float:z;
new Float:a;
new moneys[MAX_PLAYERS];
new tmp4[256];
playercount[playerid] = dini_Int(udb_encode(playername), "vehicleresetcount");
if(playercount[playerid] != gVC)
{
dini_IntSet(udb_encode(playername), "carowned", 0);
dini_IntSet(udb_encode(playername), "car", 0);
dini_IntSet(udb_encode(playername), "notified", 1);
SendClientMessage(playerid, COLOR_BRIGHTRED, "NOTICE <::> Les véhicules du serveur ont été changés depuis votre dernière visite!");
}
GetPlayerName(playerid, playername, MAX_PLAYER_NAME);
x = dini_Int(udb_encode(playername), "x");
y = dini_Int(udb_encode(playername), "y");
z = dini_Int(udb_encode(playername), "z");
a = dini_Int(udb_encode(playername), "a");
carowned[playerid] = dini_Int(udb_encode(playername), "carowned");
moneys[playerid] = dini_Int(udb_encode(playername), "money");
if(moneys[playerid] < 10000)
{
bank[playerid] = dini_Int(udb_encode(playername), "bank");
if(bank[playerid] > 20000)
{
SendClientMessage(playerid,COLOR_YELLOW, "Vous avez $20000 ou plus dans votre compte bancaire et vous ne recevez pas les $10000.");
}
if(bank[playerid] < 20000)
{
moneys[playerid] = 10000;
SendClientMessage(playerid,COLOR_YELLOW, "Vous avez moins de $20000 dans votre compte bancaire alors vous recevez $10000.");
}
GivePlayerMoney(playerid,moneys[playerid]);
}
if(moneys[playerid] >= 10000)
{
GivePlayerMoney(playerid,moneys[playerid]);
}
tmp4 = dini_Get(udb_encode(playername), "bank");
PlayerInfo[playerid][pAdmin] = dini_Int(udb_encode(playername), "level");
bank[playerid] = strval(tmp4);
SetPlayerPos(playerid,x,y,z);
SetPlayerFacingAngle(playerid,a);
PlayerPlaySound(playerid,1056,0.0,0.0,0.0);
biznote[playerid] = dini_Int(udb_encode(playername), "bizsold");
carnote[playerid] = dini_Int(udb_encode(playername), "carsold");
if(biznote[playerid] == 1)
{
SendClientMessage(playerid, COLOR_BRIGHTRED, "NOTICE <::>Votre business a été vendu par un admin récemment. L'argent de la vente a été transféré sur votre compte bancaire !");
dini_IntSet(udb_encode(playername), "bizsold", 0);
}
if(carnote[playerid] == 1)
{
SendClientMessage(playerid, COLOR_BRIGHTRED, "NOTICE <::> Votre véhicule a vendu par un admin récemment. L'argent de la vente a été transféré sur votre compte bancaire!");
dini_IntSet(udb_encode(playername), "carsold", 0);
}
}
return 1;
}
Le problème est que le login auto marche bien, mais le truc c'est que vu qu'il n'y a pas besoin de rentrer le mot de passe, il suffit de prendre le pseudo et ca connecte le joueur même si l'IP est differente. Donc tout le monde peut se conecté avec n'importe quel compte ;D
-
à la place de sa : if (strcmp(val1,playername,false) == 0)
Mais if (val1 == ip)
-
C'est fait, voilà le résultat :
C:\....\SFTDM_Reloaded_2.0.pwn(2483) : error 033: array must be indexed (variable "val1")
-
Sa doit etre indéxé
-
Indexé ? C'est à dire ? ;D
-
indexer ces [valeur]
-
Et en gros je dois rajouter quoi pour qu'il n'y est plus cette erreur ?
-
Up
-
Ca sert à rien d'up un jour après...
Déjà d'une, soit ils ne savent pas.
De deux, ils ont une vie donc ils ne sont pas là 24/24
Et de trois, c'est déjà bien qu'ils t'aident donc tu pourrais attendre 2/3 jours avant une réponse.
-
J'ai jamais dis que ce n'était pas bien, au contraire je les remercie.
Et je up pour pas faire couler le sujet rien de plus.
-
En un jour il coule pas ... Encore ca ferait une semaine d'accord, mais évite d'up tous les jours :)
Voilà, maintenant tu le sais, arrétons là.
++
Barto
-
Ouki, désolé. :)
-
Up
-
Au lieux de Uper a chaque fois essaye de faire des trucs car bon personne aime scripter pour quelqu'un qui ne fait que tu copier coller il faut essayer de progresser alors essaye de nous montrer que tu veut le faire marcher ton code ;)
-
J'ai réussi à faire marcher le Login Auto via l'IP.
Le probleme qui s'impose est que vu qu'il est dans OnPlayerSpawn et que j'ai des commandes comme /kill qui tue et ramene au spawn, quand le joueur retourne au spawn, ca le relogin et donc ses sous, sa position etc... sont doublé.
-
Il faut soit le mettre dans OnPlayerCOnnect ou sinn tu peut faire un bloquage avec :
new autologc[MAX_PLAYERS]
If (autologc[playerid] == 0)
{
Ton ptit chariabia
autologc[playerid] ++;
}
-
J'ai créé un public qui lis l'IP et qui fait le log auto seulement si le joueur n'est loggé. J'ai appelé ce public : LogAuto que j'ai placé dans OnPlayerSpawn ce qui revient à peut près à ce que tu me dis master donc c'est bon le problème est reglé. Merci à vous :happy
Maintenant mon seul problème est pour la sauvegarde des couleurs. Il faudrait que je créé 2 public : un SaveColor et un autre LoadColor. Je placerai SaveColor dans ma commande /color et dans OnPlayerDisconnect et LoadColor dans OnPlayerConnect. Dans SaveColor, il me faudrait mettre soit une sorte de chrono infini, soit quelque chose qui créé un fichier dans scriptfiles avec le changement de couleur et dans LoadColor quelque chose qui charge le fichier sauvegardé dans scriptfiles. Mais c'est pour la création du SaveColor que je vois pas trop comment faire.
Quelqu'un aurait-il une idée ? ???
-
Up ;)
-
up
-
Ben je crois que plus personne ne t'aidera RenZou :(
-
Ben je crois que plus personne ne t'aidera RenZou :(
+1