Trinx Posted September 27, 2013 Share Posted September 27, 2013 Bonjour / Bonsoir, Voilà, j'essaye de scripter un script qui protège contre les abus du Minigun, Lance-Roquette, Rhino, Hunter, etc.. Pour le moment j'ai essayé d'enlever l'accès au Minigun + Rhino à ceux qui n'ont pas accès à la commande KICK. function AntiRhino (vehicle, seat, jacker) if ( getElementModel (vehicle) == 432 ) then if ( hasObjectPermissionTo (source, "function.kickPlayer")) then return end removePedFromVehicle (source) outputChatBox ("Vous n'avez pas le droit d'utiliser ce véhicule.", source, 255, 0, 0, true) end end addEventHandler ("onPlayerVehicleEnter", getRootElement(), AntiRhino) function AntiMiniGun (previous, current) if ( current == 38 ) then if ( hasObjectPermissionTo (source, "function.kickPlayer")) then return end takeWeapon ( source, 38 ) outputChatBox ("Vous n'avez pas le droit d'utiliser cette arme.", source, 255, 0, 0, true) end end addEventHandler ("onPlayerWeaponSwitch", getRootElement(), AntiMiniGun) Je précise qu'il n'y a aucune erreur au DebugScript, et j'utilise le logiciel : MTA Script Editor. Merci d'avance. Link to comment
nic062 Posted September 27, 2013 Share Posted September 27, 2013 Tu n'etais pas loin de la bonne solution function AntiRhino (vehicle, seat, jacker) if ( getElementModel (vehicle) == 432 ) then if not ( hasObjectPermissionTo (source, "function.kickPlayer")) then removePedFromVehicle (source) local x,y,z = getElementPosition(source) setElementPosition(source,x, y, z+3) outputChatBox ("Vous n'avez pas le droit d'utiliser ce véhicule.", source, 255, 0, 0, true) else ouputChatBox("A le droit") end end end addEventHandler ("onPlayerVehicleEnter", getRootElement(), AntiRhino) function AntiMiniGun (previous, current) if ( current == 38 ) then if not ( hasObjectPermissionTo (source, "function.kickPlayer")) then takeWeapon ( source, 38 ) outputChatBox ("Vous n'avez pas le droit d'utiliser cette arme.", source, 255, 0, 0, true) else ouputChatBox("A le droit") end end end addEventHandler ("onPlayerWeaponSwitch", getRootElement(), AntiMiniGun) Par contre je n'ai pas testé avec ton anti-MiniGun mais cela devrait marché sans soucis suite à ma modif. Bonne journée Link to comment
Trinx Posted September 27, 2013 Author Share Posted September 27, 2013 (edited) Merci de ta précieuse aide, je ne sais pas comment je peux te remercier assez pour ça A une prochaine fois ! Edited September 27, 2013 by Guest Link to comment
nic062 Posted September 27, 2013 Share Posted September 27, 2013 Au plaisir de d'avoir pu aider Link to comment
Trinx Posted September 28, 2013 Author Share Posted September 28, 2013 Bon alors il y'a un problème au niveau des restrictions des armes, le minigun disparaît uniquement quand le joueur switch d'armes, donc quand il se give, il peux tirer, j'ai essayé avec d'autres events comme : "onResourceStart", ça ne fonctionne pas.. Que-doit je faire? Link to comment
nic062 Posted September 28, 2013 Share Posted September 28, 2013 Avec la version 1.4 on utilisera l'event onWeaponFire mais l'heure est à la 1.3.4 alors on va contourner le probleme, on pourrait utiliser onPlayerDamage mais sans utiliser les damages une des solutions serai d'utiliser un timer qui fera appel à la fonction de verification. J'ai mis comme event onPlayerJoin donc à partir du moment ou le joueur va arriver sur le serveur toutes les 50ms il y aura une verification si le joueur a le minigun script coté server : function antiMiniGun() setTimer(removeW, 50, 0, source) end addEventHandler ( "onPlayerJoin", getRootElement(), antiMiniGun) function removeW(source) if not ( hasObjectPermissionTo (source, "function.kickPlayer")) and takeWeapon(source, 38) then outputChatBox ("Vous n'avez pas le droit d'utiliser cette arme.", source, 255, 0, 0, true) end end Link to comment
Trinx Posted September 28, 2013 Author Share Posted September 28, 2013 Encore une fois, merci de ton aide! A une prochaine fois Link to comment
Trinx Posted September 28, 2013 Author Share Posted September 28, 2013 J'ai un nouveau problème.. ( et j'espère que c'est le dernier ) Le script est fonctionnel, mais à un moment, il flood les logs + debugscript (3), voici une photo: Le flood s'arrête uniquement quand je restart, et encore après un moment, ça recommence a flood.. et ainsi de suite, pourtant le script est fonctionnel Link to comment
Moderators Citizen Posted September 29, 2013 Moderators Share Posted September 29, 2013 Bonjour tout le monde, Je passais par là et j'ai décidé de m'en mêler. C'est tout tout a fait normal que ça bug, car dès qu'un joueur quitte le serveur, son timer qui lui faisait référence continue toujours de tourner, il faudrait donc le killer (le timer hein, pas le joueur ). Mais imaginez 50 joueurs sur le serveur, ça va faire 50 timers qui appelle tous la même fonction mais avec un argument différent. En plus à 50 millisecondes, il va certainement y avoir des lags car le serveur va avoir du mal à gérer ces 50 timers et le reste du gamemode. Si ça ne tenait qu'à moi, j'aurais fait ça client-side comme ça chaque pc/joueur à son propre timer, et pour vérifier s'il à le droit de kick dans l'acl, je lui aurai mit un setElementData server-side lorsqu'il rejoint le serveur et ducoups côté client, je fais un petit getElementData et le tour est joué. Comme ça le serveur n'a rien à gérer et on gagne donc en performance. Mais bon ici pour faire simple et rester server-side: function antiMiniGun() setTimer(removeW, 50, 0) end addEventHandler ( "onResourceStart", getResourceRootElement(getThisResource()), antiMiniGun) function removeW() for k, player in ipairs (getElementsByType ("player")) if not hasObjectPermissionTo (player, "function.kickPlayer") and takeWeapon(player, 38) then outputChatBox ("Vous n'avez pas le droit d'utiliser cette arme.", source, 255, 0, 0, true) end end end A noter qu'il n'y a plus qu'un timer qui est créé, et seulement au démarrage du serveur. La fonction removeW récupère tous les joueurs dans la partie (évite forcément les bug d'argument null lorsqu'un joueur quitte la partie). Voilà, on pourrai raccourcir le code pour le faire tenir en une fonction mais bon on rentrerai un peu plus dans des notions avancées de programming (les fonctions anonymes pour ceux à qui ça parleraient ) Cordialement, Citizen Link to comment
Trinx Posted September 29, 2013 Author Share Posted September 29, 2013 Tout d'abord Merci de ton aide, Mais je veux garder des performances pour le serveur, mais je ne sais pas comment faire, ni utiliser des Trigger.. Ensuite je voudrait pas au démarrage du serveur, mais quand le joueur prend l'arme, ou quand il se connecte au serveur, ça serait mieux que redémarrer le serveur, sachant qu'il est hébergé. Link to comment
nic062 Posted September 29, 2013 Share Posted September 29, 2013 Salut salut, En effet j'ai fais une belle M**** plus haut ^^. L'une des solutions serait d'utiliser le client side mais Maxur (developpeur principal de notre serveur) à trouvé une solution bien optimisé que voici : local lockedVehicle = { 432, -- Rhino 425 -- Hunter } local lockedWeapon = { 35, -- Rocket Launcher 36, -- Heat-Seeking RPG 38 -- Minigun } function checkLockedVehicle(player) if not hasObjectPermissionTo(player, "function.kickPlayer") then for k, veh in ipairs(lockedVehicle) do if getElementModel(source) == veh then cancelEvent() outputChatBox("Vous n'avez pas le droit d'utiliser ce véhicule.", player, 255, 0, 0) break end end end end addEventHandler("onVehicleStartEnter", getRootElement(), checkLockedVehicle) function checkLockedWeapon() if not hasObjectPermissionTo(source, "function.kickPlayer") then for k, weapon in ipairs(lockedWeapon) do if getPedWeapon(source) == weapon then takeWeapon(source, weapon) outputChatBox("Vous n'avez pas le droit d'utiliser cette arme.", source, 255, 0, 0) break end end end end addEventHandler("onPlayerTarget", getRootElement(), checkLockedWeapon) Note : Concernant le minigun, il sera automatiquement supprimé si le joueur cible un joueur ou un vehicule. Comme tu peux le remarqué il a également ajouté un tableau en debut de script te permetant d'ajouter supprimer les armes interdites/véhicules. Personnelement je pense que utilser l'event onPlayerTarget est la meilleur des solutions en attendant la sortie de la 1.4 pour garder la totalité coté du script coté serveur Bonne soirée. Link to comment
Trinx Posted September 29, 2013 Author Share Posted September 29, 2013 Parfait! Le script marche, aucune erreur. Merci à toi et à ton équipe Problème résolu! Link to comment
nic062 Posted September 29, 2013 Share Posted September 29, 2013 Au plus grand plaisir L'equipe de Fox-Roleplay. Link to comment
Moderators Citizen Posted September 29, 2013 Moderators Share Posted September 29, 2013 Mais je veux garder des performances pour le serveur Fait mon système client-side comme j'ai expliqué, et mon système n'a pas besoin de trigger oO (même si le setElementData synchronise la valeur client-side). Le code de Maxur est difficilement perfectible, y a même le break pour arrêter la boucle for Je me pose quand même la question de savoir si l'event onPedWeaponSwitch est triggered lors d'un giveWeapon Car si c'est le cas, on peut l'utiliser à la place de onPlayerTarget pour que l'arme soit immédiatement retirée alors que le système de maxur laisse quand même le gars se balader avec A tester. Link to comment
Trinx Posted October 1, 2013 Author Share Posted October 1, 2013 Je crois qu'on a déjà essayé, si le joueur se give le Minigun, sans switcher d'armes, il peux tirer avec.. Mais avec le script de Maxur, même si il peux se balader avec, je n'ai plus peur des abus des armes massives Link to comment
Moderators Citizen Posted October 1, 2013 Moderators Share Posted October 1, 2013 Tu devrais pourtant, en effet, rien ne l'empêche de prendre un bazooka et de tirer à coté des autres joueurs et/ou véhicules du moment où il ne vise pas sur un élément de MTA. J'ai testé pour bien définir les conditions pour que l’événement soit triggered. Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now