• 19 Avril 2024, 20:15:05


Auteur Sujet: [RESOLU]Argent Pour le zombie  (Lu 5441 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne TotoMine

  • *
  • Nouveau
  • Messages: 11
    • Voir le profil
[RESOLU]Argent Pour le zombie
« le: 27 Février 2012, 12:26:50 »
Bonjour à tous, comme vous pouvez le constatez je suis nouveau,
et avec mes maigre connaissance en script je demande votre aide
j'aimerais pouvoir avoir de l'argent dès que un zombie est tué le script (http://community.mtasa.com/index.php?p=resources&s=details&id=347 ) par exemple gagner 200 d'argent dès qu'un zombie est tué

merci pour vos futurs réponses
« Modifié: 01 Mars 2012, 19:18:51 par TotoMine »

Hors ligne Citizen

  • Scripteur LUA confirmé
  • *
  • Messages: 235
    • Voir le profil
    • Byston Evolution
Re : Argent Pour le zombie
« Réponse #1 le: 28 Février 2012, 08:58:32 »
Bonjour TotoMine et bienvenue sur le forum  ;)

Pourrais-tu être plus précis ? Je ne comprends pas si tu utilises ce script ( dans ce cas tu n'aurais pas besoin d'aide vu qu'il le fait déjà ) ou alors un autre script de zombies qui ne donne pas d'argent ??

En tout cas, il te faudra utiliser ce qu'on appelle un event.
Un event est un événement que l'on peut "attacher" à n'importe qu'elle fonction et dès que le serveur "trigger" cet event, il va exécuter la ou les fonctions attaché à cet event.

Il y a beaucoup d’évents du côté serveur et client ( j'explique en bas qu'est-ce que c'est )
Pour notre cas, on a besoin d'un event qui est trigger ( ~appeler ) lorsqu'une personne meurt.
Seulement voila, il y en a 2:
- onPedWasted        ( pour les peds ou bots si tu préfères )
- onPlayerWasted ( pour les joueurs de ton serveur )

Je suppose que tes zombies sont des bots et je vais donc utiliser onPedWasted, je vais aussi créer ma fonction qui va donner 200 ( comme la ressource que tu nous as montré ) au joueur qui l'a tué.

Code: (lua) [Sélectionner]
-- je crée une fonction avec les paramètres de l'event ( pour pouvoir les utiliser dans la fonction )
function zombieDied( totalAmmo, killer, killerWeapon, bodypart, stealth )
-- je vois que finalement, je n'ai besoin que du paramètre killer de cet event
-- donc je peux l'écrire comme ceci
function zombieDied( totalAmmo, killer )
-- je suis obliger de laisser totalAmmo car ce qui compte c'est l'ordre.
-- si je l'enleve et ne laisse que killer, j'aurai dans ma variable killer,
-- j'aurai le nombre de munitions qu'avais le bot au moment de mourir.
-- ce qui signifie aussi que je peux mettre n'importe quoi comme nom de variable
-- je peux mettre function zombieDied( dlouhfqshda, dlouhfqshdb ) mais
-- ce ne sera pas pratique pour les utiliser et on peu facilement se tromper
-- je le remet pour que ça soit plus lisible ( donc tu mets dans ton script ce qui suit )

function zombieDied( totalAmmo, killer )
givePlayerMoney( killer, 200 ) -- je donne 200$ au tueur
end
addEventHandler( "onPedWasted", getRootElement(), zombieDied ) -- j'attache la fonction a cet event
-- getRootElement(), permet juste de dire, dans ce cas la, que tous les bots en mourant feront appeler cet event

Plutôt simple non ? :P

Bon il faudra l'améliorer avec une condition pour vérifier que c'est bien un zombie et non pas un bot d'une autre ressource
comme heuuu un marchand de hotdog, ou un vendeur d'armes  :D.
Mais je ne peux pas la faire sans en savoir plus sur tes zombies :happy

En ce qui concerne la partie client et la partie serveur.
La partie serveur est tout le code exécuter par la console ( je fais biensur référence à MTA Server.exe ).
Tout ce que tu y feras sera synchrone pour tous les joueurs, créer un objet, une voiture, une couleur de voiture etc...

La partie client est en gros l'ordinateur des joueurs. Tout le code client est exécuté par l'ordinateur du joueur.
C'est très utile car c'est le seul endroit où tu peux faire afficher des images à l’écran, des fenêtres, des boutons etc...
Par contre tout ce que tu y fera, ne sera pas synchrone avec les autres joueurs.
Imaginons le code suivant dans la partie client:
function pcjJoueur( thePlayer )
local x, y, z = getElementPosition( thePlayer )
createVehicle( 461, x+2, y, z ) -- x+2 pour ne pas que la moto apparait "dans" le joueur
end
addCommandHandler( "pcj", vehiculeJoueur ) -- je crée une commande pour la fonction
Si ensuite une joueur, toi par exemple, tape la commande /pcj, la moto ne sera créé que pour toi, toi seul la vera.
Bon par contre je n'est pas compris pourquoi on ne peux pas rentrer dans les véhicules en client mais c'est pas grave :blink

Je te conseille pour l'instant d'utiliser le client que pour afficher des images et tout le tralala.

Pour afficher une image en partant de la partie serveur, il suffit en fait de passer le relai au client pour afficher l'image grâce à la fonction triggerClientEvent
Pour chaque fonction du wiki, il y a un ou des exemples que tu peux tester en copiant collant le code.
Tu peux donc envoyer des informations, grâce à cette fonction, à un ou plusieurs client.

Et pour envoyer des infos depuis un client vers un autre client ( pour une raison X ), il faut d'abord passer par le serveur ( triggerServerEvent ) puis au client voulu avec triggerClientEvent

Voila, il me faut juste avoir les infos pour terminer la fonction pour être sur qu'il reçoit 200$ pour avoir tué un zombie et non pas autre chose.

Cordialement,
    Citizen
The rEvolution is coming ...

Hors ligne TotoMine

  • *
  • Nouveau
  • Messages: 11
    • Voir le profil
Re : Argent Pour le zombie
« Réponse #2 le: 28 Février 2012, 10:16:35 »
D'accord mer ci pour le temps que tu m'a accordé
donc je m'explique plus clairement les zombie sont effectivement des bots et j'aimerais faire une sorte de mode zombie a la call of duty , des qu'on tue 1 zombie on gagne par exemple 200$ et ensuite le joueur pourra dépenser les 200 dollars dans une sorte de freeroam mais payant avec des dollars pour chaque ressource qu'il va spawn (ça j'ai pas encore trouvé si tu as un lien je le veux
vien  ::) ) et est ce normal que les zombie fasse laguer le serveur ????
Et non ce script ne le fait pas dès que je tue un zombie l'argent reste a 0

Double post
ou sinon si tu as un mode zombie avec de l'argent passe le lien ce sera peut etre plus simple
« Modifié: 28 Février 2012, 10:35:13 par TotoMine »

Hors ligne Citizen

  • Scripteur LUA confirmé
  • *
  • Messages: 235
    • Voir le profil
    • Byston Evolution
Re : Argent Pour le zombie
« Réponse #3 le: 28 Février 2012, 12:39:38 »
Ya pas de problème, c'est mon rôle  :P

Baaa j'ai trouvé ça où y a même un système d'achat et d'autres trucs
http://community.mtasa.com/index.php?p=resources&s=details&id=2405
Essaye de voir si ça te convient.

Ba si y en a beaucoup et que ton pc est pas très puissant, oui c'est normal que ça fasse laguer puisqu'il doit sans arrêt changer leur rotation pour se diriger vers le joueur. Mais si ça lague pour une dizaine de zombies, c'est pas normal.

Je vais télécharger les 2 ressources pour voir ce qu'il faudrait rajouter pour la fonction. Si tu as envie d'essayer, il faut trouver un
setElementData( blabla, "zombie", true ) ou quelquechose dans ce style après un createPed
Ce qui donnera un quelquechose comme ça:

Code: (lua) [Sélectionner]
function zombieDied( totalAmmo, killer )
if ( getElementData( source, "zombie" ) == true ) then -- source est une variable "cachée" qui est passé avec un event
-- d'après le wiki, la source de cet event est le bot qui vient de mourrir
givePlayerMoney( killer, 200 ) -- je donne 200$ au tueur
end
end
addEventHandler( "onPedWasted", getRootElement(), zombieDied ) -- j'attache l'event à ma fonction

EDIT:============================================================================================================
J'ai regardé la ressource que tu utilises, et effectivement, j'ai trouvé dans zombie_server.lua:
ligne 401:
Code: (lua) [Sélectionner]
local zomb = createPed( tonumber( ZombiePedSkins[randomZskin] ), gx, gy, gz )
if zomb ~= false then
setElementData ( zomb, "zombie", true  )

Donc c'est exactement ce que je pensais, tu peux utiliser:
Code: (lua) [Sélectionner]
function zombieDied( totalAmmo, killer )
if ( getElementData( source, "zombie" ) == true ) then -- source est une variable "cachée" qui est passé avec un event
-- d'après le wiki, la source de cet event est le bot qui vient de mourrir
givePlayerMoney( killer, 200 ) -- je donne 200$ au tueur
end
end
addEventHandler( "onPedWasted", getRootElement(), zombieDied ) -- j'attache l'event à ma fonction

Par contre ce qui serait plus simple, c'est de rajouter le givePlayerMoney( killer, 200 ) directement dans
la fonction qui augmente le nombre de zombies tués.
Rends toi a la ligne 331 ( commenté ):
Code: (lua) [Sélectionner]
function deanimated( ammo, attacker, weapon, bodypart )
if (attacker) then -- vérifie si la variable attacker contient quelquechose ( sinon c'est qu'il s'est tué tout seul :p )
if (getElementType ( attacker ) == "player") and (getElementType ( source ) == "ped") then -- vérifie si le tueur est un joueur et si la source de cet event est un ped
if (getElementData (source, "zombie") == true) then -- vérifie si c'est un zombie
local oldZcount = getElementData ( attacker, "Zombie kills" ) -- récupère le nombre de zombies tués
if oldZcount ~= false then -- si ce n'est pas égal a false ( si c'est elementData existe )
setElementData ( attacker, "Zombie kills", oldZcount+1  ) -- on met a jour l'elementData avec le nombre précédent+1
                                        givePlayerMoney( attacker, 200 )
triggerEvent ( "onZombieWasted", source, attacker, weapon, bodypart )
else
setElementData ( attacker, "Zombie kills", 1  )
                                        givePlayerMoney( attacker, 200 )
triggerEvent ( "onZombieWasted", source, attacker, weapon, bodypart )
end
end
end
end
end
addEventHandler("onPedWasted", resourceRoot, deanimated)

Code: (lua) [Sélectionner]
triggerEvent ( "onZombieWasted", source, attacker, weapon, bodypart )Il a créer son propre event onZombieWasted un peu plus haut avec addEvent. A ba nan enfait il ne l'a pas créé :blink, il faut que tu le rajoutes:
Code: (lua) [Sélectionner]
addEvent( "onZombieWasted", true )
--ADJUSTS PLAYERS ZOMBIE KILL SCORE

Bref donc il peut le trigger quand il le souhaite et tu pourras l'attacher à n'importe qu'elle autre fonction.

Ducoups, on peut aussi faire:
Code: (lua) [Sélectionner]
function zombieDied( totalAmmo, killer )
givePlayerMoney( killer, 200 ) -- je donne 200$ au tueur
end
addEventHandler( "onZombieWasted", getRootElement(), zombieDied ) -- j'attache l'event à ma fonction
au lieu de modifier la fonction.

A toi de voir  :happy
« Modifié: 28 Février 2012, 13:54:52 par Citizen »
The rEvolution is coming ...

Hors ligne TotoMine

  • *
  • Nouveau
  • Messages: 11
    • Voir le profil
Re : Argent Pour le zombie
« Réponse #4 le: 28 Février 2012, 13:24:48 »
ok c''est gentil et non sa lague avec 250 zombie pour les autre joueur  :wall mais bon jai un 3gh avec un geforce 560 gtx et 4 go de ram

Double post
et une derniere chose ,aurait tu un systeme pour depenser l'argent gagner ,dans des armes , de la vie , un freeroam payant quoi
« Modifié: 28 Février 2012, 13:45:00 par TotoMine »

Hors ligne Citizen

  • Scripteur LUA confirmé
  • *
  • Messages: 235
    • Voir le profil
    • Byston Evolution
Re : Argent Pour le zombie
« Réponse #5 le: 28 Février 2012, 14:09:59 »
250 Zombies ?!! :ohmy
Tu m'étonnes que ça lague !  :laugh
Mais tu as du modifier les settings dans la meta.xml parce que tu peux avoir 100 zombies au maximum par défaut.
Donc tu l'as modifié ? si c'est le cas, je te conseil de de remettre a 100 ou 150 environ.

Pour ton système d'achat, tu peux essayer mabako services

Voila voila  :D
The rEvolution is coming ...

Hors ligne TotoMine

  • *
  • Nouveau
  • Messages: 11
    • Voir le profil
Re : Argent Pour le zombie
« Réponse #6 le: 28 Février 2012, 14:19:28 »
merci effectivement j'ai touché le meta mais en local c niquel c juste les joueurs internet qui lague ^^

Double post
comment enlever certaine fonctionnalité lorsque l'on fait f1 ( le freeroam ) exemple enlever certaine armes


et rajouter certain vehicule (ferrari ...mais pour tout les joueurs )
« Modifié: 28 Février 2012, 14:46:53 par TotoMine »

Hors ligne Citizen

  • Scripteur LUA confirmé
  • *
  • Messages: 235
    • Voir le profil
    • Byston Evolution
Re : Re : Argent Pour le zombie
« Réponse #7 le: 29 Février 2012, 15:51:50 »
comment enlever certaine fonctionnalité lorsque l'on fait f1 ( le freeroam ) exemple enlever certaine armes

Pour toi je te conseil carrément de ne plus lancer freeroam et d'utiliser mabako-services, ça t’épargnera du temps
Et pour l'achat de véhicules, il doit aussi y avoir des ressources que tu pourras modifier pour qu'il autorise aussi les tanks etc...

et rajouter certain vehicule (ferrari ...mais pour tout les joueurs )
Tu ne peux pas rajouter des véhicules, seulement les remplacer. Il y a une ressource qui s'appelle modLoader qui est super.
Tu télécharge ta ferrari sur un site ( un .dff et un .txd normalement ) et tu les mets dans le dossier véhicules de la ressources et c'est terminé  :ohmy

Voila j'espère que ça te sera utile.
The rEvolution is coming ...

Hors ligne TotoMine

  • *
  • Nouveau
  • Messages: 11
    • Voir le profil
Re : Argent Pour le zombie
« Réponse #8 le: 29 Février 2012, 17:27:57 »
merci

Double post
Quel dossier modifier pour rajouter une catégorie Tuning par exemple dans le freerooam ( c'est ma derniere requete )
« Modifié: 29 Février 2012, 17:39:06 par TotoMine »

Hors ligne Citizen

  • Scripteur LUA confirmé
  • *
  • Messages: 235
    • Voir le profil
    • Byston Evolution
Re : Argent Pour le zombie
« Réponse #9 le: 29 Février 2012, 20:01:02 »
Citer
Quel dossier modifier pour rajouter une catégorie Tuning
Oula c'est pas si facile, il faut que tu rajoutes un bouton quelquepart dans la fenêtre de freeroam, la faire afficher que lorsque tu es dans un véhicule qu'on peut tuner seulement.
Ensuite faut attacher le bouton à une fonction qui t'affichera une autre fenêtre avec tous les "upgrades" disponible pour ce véhicule, avec un bouton "Appliquer" et "Annuler" qui doivent aussi attaché respectivement à la fonction qui te permettra de faire un triggerServerEvent( oui car on était en client là ) sur un event que tu auras créé et attaché à une fonction ( côtés serveur ) avec les l'ugrade désiré en argument et l'autre bouton attaché à une fonction qui fermera juste la fenêtre que tu auras créer.

Il te faut donc comprendre comment les "upgrades" fonctionnent, comment faire un triggerServerEvent avec une variable à transmettre et avoir des notions GUI ( tu auras besoin de savoir faire une fenêtre, des boutons et savoir les attacher à une fonction pour qu'elle soit appelée quand on clique dessus, du texte, et peut être les gridlists ou les comboboxes ).

Sinon tu peux trouver une ressource qui te permet de tuner comme dans le solo, et tu pourras surement changer les prix.
Elle existe j'en suis sur ( je sais que mabako-services fait les Pay'n'Spray ( juste la couleur comme le solo ) mais je sais pas s'il fait aussi les garages de tunings, je te conseil de tester.

A plus !
The rEvolution is coming ...

Hors ligne TotoMine

  • *
  • Nouveau
  • Messages: 11
    • Voir le profil
Re : Argent Pour le zombie
« Réponse #10 le: 29 Février 2012, 20:04:18 »
je veux pas parler de sa par exemple dans le freeroam quand on clic sur " Create" Pour un véhicule il y a marquer aircraft et tout et j'aimerais créer une colonne appeler tuning ou je mettrait certain véhicule de modloader

Hors ligne Citizen

  • Scripteur LUA confirmé
  • *
  • Messages: 235
    • Voir le profil
    • Byston Evolution
Re : Argent Pour le zombie
« Réponse #11 le: 29 Février 2012, 23:00:11 »
Ah ba ta question n’était pas du tout clair !

Étant donné que les véhicules que tu auras télécharge remplacerons les véhicules de GTA, ça ne sert a rien de rajouter une catégorie.
Par exemple si tu as téléchargé une ferrari qui remplace l'infernus, tu auras juste a faire spawn une Infernus pour avoir ta ferrari. Tu auras donc juste a remplacer Infernus par Ferrari dans le menu.

Mais si tu tiens vraiment à rajouter cette catégorie, il faut juste regarder comment il fait pour faire ces catégories  :happy

Mais c'est pas utile, car après faut faire en sorte quand cliquant dessus, ça spawn l'infernus

Tu fais comme tu le sens :)

The rEvolution is coming ...

Hors ligne TotoMine

  • *
  • Nouveau
  • Messages: 11
    • Voir le profil
Re : Argent Pour le zombie
« Réponse #12 le: 01 Mars 2012, 10:04:57 »
ouai j'ai un problème avec modloader je met les voiture télécharger dedans (vehicle) ensuite je le met dans ressource je le lance mais les voiture ne sont pas changé

Hors ligne Citizen

  • Scripteur LUA confirmé
  • *
  • Messages: 235
    • Voir le profil
    • Byston Evolution
Re : Argent Pour le zombie
« Réponse #13 le: 01 Mars 2012, 11:31:38 »
As-tu lu le readme qui est fournit avec la ressource ??

Tout d'abord, il faut que modLoader puisse accéder à la fonction restartResource pour qu'il puisse se redémarrer tout seul après avoir modifier sa meta.xml.
Pour cela il faut mettre la ressource dans le groupe Admin de ton ACL ( dans le dossier deathmatch ):
Code: (xml) [Sélectionner]
<group name="Admin">
        ...
        <object name="resource.modLoader"></object>
        ...
</group>

Ensuite, dans ton mod télechargé, tu mets le .dff et le .txd dans le dossier "vehicules". Il faut aussi que le nom de ces fichiers soit en minuscule ! Même le .txd ou .ddf ( donc pas de "Infernus.DFF" mais "infernus.dff" par exemple )

Et si tu as un readme fournit avec ton mod, il doit peut être contenir du handling pour ce véhicule. Il faut que tu crées un nouveau fichier dans le dossier "vehicles" que tu vas nommé comme le dff ou le txd mais avec .hnd et tu mets la ligne de handling dedans, tu sauvegardes et c'est finit !

Je n'invente rien, c'est tout marqué dans le readme de la ressource !

Si ça ne marche pas, essaye de "restart modLoader" dans la console ( s'il te dit: "Resource is not running", il faut que tu fasses "start modLoader" )


Dit moi si ça marche, si ce n'est pas le cas, donne moi le lien du mod que tu as téléchargé.

The rEvolution is coming ...

Hors ligne TotoMine

  • *
  • Nouveau
  • Messages: 11
    • Voir le profil
Re : Argent Pour le zombie
« Réponse #14 le: 01 Mars 2012, 11:33:02 »
ouai mais sa je le fait mais je pense qu'il manque le server et le client


Double post
http://community.mtasa.com/index.php?p=resources&s=details&id=3016    voila elui que j'ai téléchargé donc je met enfaite le txd et dff dans le dossier vehicle je demarre la ressource ( je fais aussi le hnd )mais rien ne se passe aurais tu un lien fonctionnel
« Modifié: 01 Mars 2012, 11:35:45 par TotoMine »