GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: LiL SmokKe le 01 Novembre 2011, 11:08:45
-
Bonjour à tous.
Voilà, ça fait plusieurs jours que je cherche en vain pour trouver une solution a un problème de gestion du PayTime assez embêtant.
Je m'explique :
Ce que j'aimerais faire, c'est un PayTime (toutes les heures) qui soit aux alentours de 200$, histoire de pas avoir rapidement des joueurs avec des dizaines de millions de dollars. Aussi, je voyais quelque chose du genre : Tu travail -> Tu gagne de l'argent , tu ne travail pas -> 10$/heure. (Dans le but de développer le RP civil et autres.)
Dans les faits cela peut paraitre simple voir enfantin, mais quand je suis tombé nez-à-nez avec le code du public PayDay () j'ai commencé à prendre peur ;)
Voici mon code de PayDay : http://pastebin.gtaonline.fr/pastebin.php?show=1174 (http://pastebin.gtaonline.fr/pastebin.php?show=1174)
On m'avais déjà donnée certaines pistes en lisant des topics par-ci par-là sur le forum. Mais aucunes concrètes.
D'avance merci de vos réponse.
Si elles peuvent même m'aider c'est encore mieux ;)
Bonne Journée,
Lil SmokKe
-
Salut ,
J'ai pas bien compris tu veux modifier ton code Payday() déjà présent ou en créer un nouveau ?
Vincent
-
Salut.
Je pensais le modifier.
Mais si la seul solution que j'ai est d'en créer un autre, alors pas de souci je le ferais.
Ceci dépend de ce que vous me conseillerez ou non de faire.
D'avance Merci.
Lil SmokKe
-
Et bien tu peux toujours le modifier , mais dans ce cas il va falloir être vigilant car en modifiant une partie d'un GM ça peut affecter le reste de ce dernier .
Sinon pour ton système de PayTime , il doit y avoir une variable du genre "PlayerInfo[pJob]" ou similaire donc tu peux déjà t'en servir pour régler la paye .
Vincent
-
Salut.
Je sais, et j'ai pris conscience du fait que tout pouvais être affecté.
Seulement là il s'agit simplement de la partie "argent" du PayTime. En clair, les choses qui doivent être reload toute les heures via le PayTime le seront toujours.
J'ai cherché un peu dans certains autres GM et j'ai trouvé ceci dans U2C-RP (Merci Foo).
[spoiler="Code"] if(PlayerInfo[i][pPayDay] >= 5)
{
Tax += TaxValue;//Should work for every player online
PlayerInfo[i][pAccount] -= TaxValue;
new checks = PlayerInfo[i][pPayCheck] / 5;
checks += (random(1)+10) + PlayerInfo[i][pLevel]*(5);
new member = PlayerInfo[i][pMember],leader = PlayerInfo[i][pLeader],rank = PlayerInfo[i][pRank];
if(member == 1 || leader == 1) // LSPD
{
if(rank == 1)
checks += 45+random(15);
else if(rank == 2)
checks += 70+random(15);
else if(rank == 3)
checks += 100+random(15);
else if(rank == 4)
checks += 140+random(15);
else if(rank == 5)
checks += 170+random(15);
else if(rank == 6)
checks += 200+random(15);
}[/spoiler]
Donc d'après ce que j'ai compris, une fois que le joueur à dépassé les 5 PayTime, il disposera d'un salaire varient pour chaque rang qu'il occupera et pour chaque faction ( Ex : Chef LSPD = 200+ une valeur aléatoire entre 0 et 15 ? )
Voilà,
D'avance Merci.
-
Attention à l'opérateur "+=" .
En effet :
x += y
équivaut à
x = x+y
Du moins il me semble
Donc ici ça donnerait par exemple :
checks += 45+random(15);
équivaut à
checks = checks + (45+random(15));
PS : Source (http://msdn.microsoft.com/fr-fr/library/sa7629ew.aspx)
-
D'accord.
Donc si j'ai bien compris :
Salaire = Salaire + 200 + random(15) ?
C'est un peu bête dans l'absolu, mais bon. Si c'est ça, je suppose qu'il y a une variable "checks" quelque part et qu'il est possible de la modifier.
-
Pourquoi rajouter random ?
-
Oui, il y a une variable checks, juste quelques lignes plus haut :
new checks = PlayerInfo[i][pPayCheck] / 5;
checks += (random(1)+10) + PlayerInfo[i][pLevel]*(5);
Le calcul est un peu compliqué mais si on l'éclate pour un joueur de rang 5 par exemple ça nous donne :
checks = PlayerInfo[i][pPayCheck] / 5 + random(1) 10 + PlayerInfo[i][pLevel]*5 + 170 + random (15);
La dernière partie du salaire (2 derniers termes) est conditionnée par le faite que le joueur est membre ou leader.
Donc, si tu veux que les joueurs "civils" gagnent quand même un salaire tu peux modifier comme suit :
new checks = PlayerInfo[i][pPayCheck] / 5;
checks += (random(1)+10) + PlayerInfo[i][pLevel]*(5);
devient
new checks = 10; // 10$ de l'heure
Ceci correspond à la partie fixe du salaire donnée à tous les joueurs.
Les lignes du style checks += XX + random (15); correspondent à la partie concernant l'appartenance à un groupe et le rang que le joueur a dans ce groupe.
Tu peux changer le montant de cette partie en modifiant les valeurs correspondantes à XX.
Et libre à toi de supprimer le random (15).
++
Syg
-
Merci Syg pour ta brillante explication. Que j'ai somme toute mis du temps a comprendre, et relus plusieurs fois. Enfin ;)
Si je récapè-pette tout :
- Je suis un peu abruti pour ne pas avoir vue la variable checks juste au dessus.
Pour disposer d'un salaire fixe (à savoir 10$ de RMI pour une personne n'ayant aucuns travail) je dois modifier la variable check comme dans le dernier exemple que tu m'a cité.
Du coup, pour que les personnes disposant d'un travail et/ou d'une faction gagnent plus je doit faire qqch de se type :
[spoiler="PayTime"]new checks = 10; // Modification de la variable CHECK pour avec 10$ de plancher
...
new member = PlayerInfo[i][pMember],leader = PlayerInfo[i][pLeader],rank = PlayerInfo[i][pRank];
if(member == 1 || leader == 1) // Exemple de la LSPD
{
if(rank == 1)
checks += 45+random(15); // 10 + (45+random(15))
else if(rank == 2)
checks += 70+random(15);
else if(rank == 3)
checks += 100+random(15);
else if(rank == 4)
checks += 140+random(15);
else if(rank == 5)
checks += 170+random(15);
else if(rank == 6)
checks += 200+random(15);
}
[/spoiler]
Merci encore de ton/votre aide.
Bonne Journée.
-
C'est exactement ça.
Comme quoi, tu n'es pas aussi abruti que tu ne le penses ;).
++
Syg