May 14, 201313 yr comment_147065 Bonjour à tous voilà le moment tant attendu ! Votre premier plugin !Dans ce tutoriel, nous allons voir comment est organisé un plugin dans counter strike source, quelles sont les différentes fonctions utiles et de la programmation pur et dure. Voici tout les liens qui vous seront utiles pour réaliser et comprendre ce plugin : http://wiki.alliedmods.net/Counter-Strike:_Source_Events tout les events dans counter strikehttp://wiki.alliedmods.net/Generic_Source_Eventshttp://docs.sourcemod.net/api/ Toutes les fonctions sourcepawn Le plugin que nous allons créer est un bonus aléatoires (gift) que nous donnons aux joueurs lorsqu'il spawn.la création du plugin se fait bout par bout. 1°/ Les Includes : Quelles librairies nous faudrait-il pour créer ce plugin ?Sourcemod ==> Obligatoire si nous voulons créer un plugin sourcemod ^^ !Colors ==> Pour ajouter de la couleur et de la lisibilité ! 2°/ Les variables :Les variables que nous utiliserons aujourd'hui seront principalement des tableaux. Pourquoi des tableaux ?Les tableaux sont indispensables lors de création de plugin (dans 99% des plugins vous avez au moins une variable à tableau). Qu'est ce qu'un tableau ?http://www.siteduzero.com/informatique/tutoriels/apprenez-a-programmer-en-c/les-tableaux-dans-la-memoire Pour résumer ce qui est sur ce site : Un tableau est une grosse variable qui rassemble plusieurs valeurs dans une seule variable. Comment définit-on un tableau en sourcepawn ?Cela dépend du type que vous voulez pour votre tableau (string, nombre, etc ...) new tableau[25]; Mais attention, pour créer une chaîne de caractères nous avons déjà besoin d'utiliser un tableau pour définir le nombre de caractère que nous voulons, donc pour créer un tableau composant plusieurs chaines de caractères nous devons faire comme ceci : new String:tableau[5][10] ; /*Ici nous pouvons mettre 5 chaînes de caractère avec un place maximum de 10 caractères*/ Pourquoi utiliser un tableau pour le sourcepawn ?Dans un premier temps, je vais vous expliquer comment sont référencés les joueurs sur un serveur.Lorsqu'un joueur rentre dans un serveur ont lui attribue un chiffre unique pour celui ci qui permettra au plugin de reconnaître plus facilement les joueurs. Nous pouvons attribuer un nombre jusqu'à maximum 64 joueurs qui est le nombre maximum de joueur possible sur un serveur css.Donc lorsque nous voulons utiliser un variable qui prend en compte qu'un seul joueur, nous utiliserons un tableau d'une place de 64 joueurs.Dans le sourcepawn, il y a des variables qui sont déjà prédéfinis pour ne pas se tromper (car rappelons le nous, le sourcepawn n'est pas fait que pour counter strike source et pour un soucis de portabilité, nous utiliserons cette variable pour définir le nombre maximum de joueur dans une partie : MAXPLAYERS +1 . Quelles sont les variables que nous utiliserons pour notre plugin ? new gift[MAXPLAYERS+1]; /* création de la variable gift qui prend en compte tout les joueurs sur le serveur*/ new medik[MAXPLAYERS+1];/* création de la variable medik qui prend en compte tout les joueurs sur le serveur*/ new g_packhe[MAXPLAYERS+1]; /* création de la variable packhe qui prend en compte tout les joueurs sur le serveur*/ 3°/ Les info du plugin :Les informations du plugin sont important, pour savoir de quoi il s'agit ou pour retrouver l'auteur. Donc systématiquement dans votre plugin vous mettrais ceci : public Plugin:myinfo = { name = "Gift", author = "Toi", description = "Plugin Gift", version = "0.1", url = "http://forum.supreme-elite.fr" } 4°/ Le démarrage du plugin :Pour un plugin sourcepawn, nous avons une fonction qui permet d'initialiser toutes les fonctions que vous voulez. Chaque fonction sera initialiser dans cette boucle. public OnPluginStart() { /*Initialisation de vos fonctions, variables etc ... } Il y a beaucoup de sous fonction qui permette de les initialiser : RegConsoleCmd("sm_gift", Command_Gift); RegConsoleCmd("sm_medik", Command_Medik);/* création de la commande medik */RegConsoleCmd("sm_packhe", Command_PackHe); /* création de la commande packhe */ /* Ces sous fonction (en violet), permettent d'initialiser une commande qui nous taperons dans le chat ou dans la console. Entre guillemet, nous avons ce qui nous devrons tapez pour lancer la fonction. En dernier, le nom de la fonction dans notre plugin. */ HookEvent("player_spawn", OnPlayerSpawn); /* Cette sous fonction permet d'initialiser un événement de counter strike source qui est ici "player_spawn". Pour connaître tout les événements référencez-vous au lien au tout début. Entre guillemet, c'est le nom de l'événement. En dernier, Le nom de la fonction qui nous utiliserons dans notre plugin Donc voici les 4 sous fonctions que nous mettrons dans le plugin start. Ce qui nous donnera : public OnPluginStart() { RegConsoleCmd("sm_gift", Command_Gift); /* création de la commande gift */ RegConsoleCmd("sm_medik", Command_Medik);/* création de la commande medik */ RegConsoleCmd("sm_packhe", Command_PackHe); /* création de la commande packhe */ HookEvent("player_spawn", OnPlayerSpawn); } 5°/ Fonction OnPlayerSpawn :Nous utiliserons cette fonction pour initialiser le gift et les flags pour pouvoir utiliser les commandes medik et packhe. Pour ce qui ne savent pas ce qu'est un flag : C'est un nom qu'on donne souvent à une variable qui va permette de savoir si oui ou non l'utilisateur pourra utiliser la fonction bloqué par ce flag. public OnPlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast) /*partie qui se passe à chaque spawn d'un joueur */ { new client = GetClientOfUserId(GetEventInt(event, "userid")); /* on récupère le chiffre attribué au joueur */ g_bCutdammage[client] = false; medik[client]=0; /* Flag : on autorise la commande gift 0 fois */ g_packhe[client]=0; /* Flag : on autorise la commande gift 0 fois */ g_bKnife[client]=0; /* Flag : on autorise la commande gift 0 fois */ if (GetUserFlagBits(client) & ADMFLAG_CUSTOM6 || GetUserFlagBits(client) & ADMFLAG_BAN) /* si le joueur est admin ou vip, on fait ce que ce passe entre parenthèse sinon on passe a la suite*/ { CPrintToChat(client, " {green}[VIP] : Vous pouvez taper !gift."); /* écrit au joueur seulement*/ gift[client] = 1; /* Flag : on autorise la commande gift 1 fois */ } } 6°/ Commande GIFT :Cette commande va attribuer un cadeau aléatoire au joueur qui tapera la commande : public Action:Command_Gift(client, args) /* commande gift*/ { if ((GetUserFlagBits(client) & ADMFLAG_CUSTOM6 || GetUserFlagBits(client) & ADMFLAG_BAN)&&IsPlayerAlive(client)) { if (gift[client] > 0) /* si gift =1 ou est superieur alors on autorise la commane*/ { new bonus = GetRandomInt(1, 200); /* on met un nombre au hasard dans le variable bonus entre 1 et 200*/ new team = GetClientTeam(client); if(team==2||team==3) /* si le joueurs est en anti ou en terro */ { if(bonus<=10) // si le nombre tiré au hasard est inférieur ou égal a 10 sinon on passe au "else if" ligne 84 { new health = GetClientHealth(client); /* on prend le valeur de la vie du joueur*/ new nowhealth = health + 15; /* on lui ajoute 15 */ SetEntityHealth(client, nowhealth); /* on applique la nouvelle vie donc on ajoute 15 Hp */ CPrintToChat(client, " {green}[VIP] : Vous avez gagner 15 HP."); gift[client]--; /* gift ne sera plus utilisable */ return Plugin_Handled; } else if (bonus<=20) // si le nombre tiré au hasard est inférieur ou égal a 20 sinon on passe au "else if" ligne 94 { new health = GetClientHealth(client); new nowhealth = health - 15; SetEntityHealth(client, nowhealth); CPrintToChat(client, " {green}[VIP] : Vous avez perdu 15 HP."); gift[client]--; return Plugin_Handled; } else if (bonus<=30) // si le nombre tiré au hasard est inférieur ou égal a 30 sinon on passe au "else if" ligne 104 { GivePlayerItem(client, "weapon_awp"); /* on donne un usp a un joueur */ SetWeaponAmmo(client, 7); /* on lui donne 7 balles */ SetWeaponClipAmmo(client, 2, 0); /* 0 balle dans le chargeur */ CPrintToChat(client, " {green}[VIP] : Vous avez gagner 1 USP"); gift[client]--; return Plugin_Handled; } else if (bonus<=38) // si le nombre tiré au hasard est inférieur ou égal a 38 sinon on passe au "else if" ligne 115 { g_packhe[client]=1;/* la commande packhe est utilisable */ medik[client]=1;/* la commande medik est utilisable */ CPrintToChat(client, " {green}[VIP] : Vous avez gagner un !packhe et un !medik."); gift[client]--; return Plugin_Handled; } else if (bonus<=60) // si le nombre tiré au hasard est inférieur ou égal a 60 sinon on passe au "else if" ligne 126 { new Float:speed = GetEntPropFloat(client, Prop_Data, "m_flLaggedMovementValue"); /* on prend la valeur de la vitesse du joueur */ new Float:nowspeed = speed + 0.1; /* on lui ajoute 0.1 donc normalement 1+0.1 */ SetEntPropFloat(client, Prop_Data, "m_flLaggedMovementValue", nowspeed); /* on applique cette nouvelle vitesse */ CPrintToChat(client, " {green}[VIP] : Vous avez gagner de la vitesse pendant 15sec."); gift[client]--; CreateTimer(15.0, Timer_Gift_speed2, client) ; /* au bout de 15 secondes, on execute ce qui a dans le fonction timer_gift_speed2 */ return Plugin_Handled; } else if (bonus<=65) // si le nombre tiré au hasard est inférieur ou égal a 65 sinon on passe au "else" ligne 138 { new Float:speed = GetEntPropFloat(client, Prop_Data, "m_flLaggedMovementValue"); new Float:nowspeed = speed - 0.1; SetEntPropFloat(client, Prop_Data, "m_flLaggedMovementValue", nowspeed); CPrintToChat(client, " {green}[VIP] : Vous avez gagner de la vitesse pendant 15sec."); gift[client]--; CreateTimer(15.0, Timer_Gift_speed1, client) ; return Plugin_Handled; } else //sinon { CPrintToChat(client, " {green}[VIP] : Pas de chance vous avez perdu !."); gift[client]--; } } else { CPrintToChat(client, " {green}[VIP] : Erreur le plugin ne fonctionne que pour les terroristes."); } } else // si le gift =0 { CPrintToChat(client, " {green}[VIP] : Vous avez déjà utilisé votre !gift."); return Plugin_Handled; } } else // si la personn est morte ou non-vip { CPrintToChat(client, " {green}[VIP] : Vous devez etre vivant ou vip."); return Plugin_Handled; } return Plugin_Continue; } public Action:Timer_Gift_speed1(Handle:timer, any:client) /* en gros on remet la vitesse initiale */ { new Float:speed1 = GetEntPropFloat(client, Prop_Data, "m_flLaggedMovementValue"); new Float:nowspeed1 = speed1 + 0.1; SetEntPropFloat(client, Prop_Data, "m_flLaggedMovementValue", nowspeed1); CPrintToChat(client, " {green}[VIP] : Vous avez perdu votre malus vitesse !"); } public Action:Timer_Gift_speed2(Handle:timer, any:client) /* en gros on remet la vitesse initiale */ { new Float:speed1 = GetEntPropFloat(client, Prop_Data, "m_flLaggedMovementValue"); new Float:nowspeed1 = speed1 - 0.1; SetEntPropFloat(client, Prop_Data, "m_flLaggedMovementValue", nowspeed1); CPrintToChat(client, " {green}[VIP] : Vous avez perdu votre bonus vitesse !"); } 7°/ Commande medik : public Action:Command_Medik(client, args) { if(medik[client]==1) /* si le flag medik autorise le passage */ { new health = GetClientHealth(client); /* on crée une variable health et on recupère celle du joueur */ if(health>=70) /* si sa vie est supérieur a 70 */ { CPrintToChat(client, " {green}[VIP] : Vous avez deja plus de 70 Hp."); return Plugin_Handled; } else { new nowhealth = health + 40; /* on crée une nouvelle variable et on lui ajoute 40 de plus que health */ SetEntityHealth(client, nowhealth); /* on applique la vie qu'il y a dans la variable newhealth */ CPrintToChat(client, " {green}[VIP] : Vous avez gagner 40 Hp."); medik[client]=0; /* on interdit une prochaine commande medik */ return Plugin_Handled; } } else { CPrintToChat(client, " {green}[VIP] : Vous n'avez pas acces a cette commande."); return Plugin_Handled; } return Plugin_Continue; } 8°/ Commande packhe : public Action:Command_PackHe(client, args) { if ((GetUserFlagBits(client) & ADMFLAG_CUSTOM6 || GetUserFlagBits(client) & ADMFLAG_BAN)&&IsPlayerAlive(client)) { if(g_packhe[client]==1) { CPrintToChat(client, " {green}[VIP] : Vous avez gagné un pack HE !"); GivePlayerItem(client, "weapon_hegrenade"); /* on donne les trois grenade */ GivePlayerItem(client, "weapon_flashbang"); GivePlayerItem(client, "weapon_smokegrenade"); g_packhe[client]=0; return Plugin_Handled; } else { CPrintToChat(client, " {green}[VIP] : Vous n'avez pas accès à cette commande !"); return Plugin_Handled; } } else { CPrintToChat(client, " {green}[VIP] : Il faut etre vip pour utiliser cette commande !"); return Plugin_Handled; } return Plugin_Continue; } 9°/ fonction créer par un utilisateur et utiliser dans la commande gift : stock SetWeaponClipAmmo(client, slot, ammo) { new ammoOffset = FindSendPropInfo("CCSPlayer", "m_iAmmo"); return SetEntData(client, ammoOffset+(slot*4), ammo); } stock SetWeaponAmmo(client, ammo) { new iWeapon = GetEntDataEnt2(client, FindSendPropInfo("CCSPlayer", "m_hActiveWeapon")); SetEntData(iWeapon, FindSendPropInfo("CBaseCombatWeapon", "m_iClip1"), ammo); } 10°/ plugin complet : #include <sourcemod> #include <colors> new gift[MAXPLAYERS+1]; /* création de la variable gift qui prend en compte tout les joueurs sur le serveur*/ new medik[MAXPLAYERS+1];/* création de la variable medik qui prend en compte tout les joueurs sur le serveur*/ new g_packhe[MAXPLAYERS+1]; /* création de la variable packhe qui prend en compte tout les joueurs sur le serveur*/ public Plugin:myinfo = { name = "Gift", author = "Dertione", description = "Plugin Gift", version = "0.5", url = "http://forum.supreme-elite.fr" } public OnPluginStart() { RegConsoleCmd("sm_gift", Command_Gift); /* création de la commande gift */ RegConsoleCmd("sm_medik", Command_Medik);/* création de la commande medik */ RegConsoleCmd("sm_packhe", Command_PackHe); /* création de la commande packhe */ HookEvent("player_spawn", OnPlayerSpawn); /*partie qui se passe à chaque spawn d'un joueur */ } public OnPlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast) /*partie qui se passe à chaque spawn d'un joueur */ { new client = GetClientOfUserId(GetEventInt(event, "userid")); /* on récupere le steam id d'un joueur */ g_bCutdammage[client] = false; medik[client]=0; /* on autorise la commande gift 0 fois */ g_packhe[client]=0; /* on autorise la commande gift 0 fois */ g_bKnife[client]=0; /* on autorise la commande gift 0 fois */ if (GetUserFlagBits(client) & ADMFLAG_CUSTOM6 || GetUserFlagBits(client) & ADMFLAG_BAN) /* si le joueur est admin ou vip, on fait ce que ce passe entre parenthese sinon on passe a la suite*/ { CPrintToChat(client, " {green}[VIP] : Vous pouvez taper !gift."); /* ecrit au joueur seulement*/ gift[client] = 1; /* on autorise la commande gift 1 fois */ } } public Action:Command_Gift(client, args) /* commande gift*/ { if ((GetUserFlagBits(client) & ADMFLAG_CUSTOM6 || GetUserFlagBits(client) & ADMFLAG_BAN)&&IsPlayerAlive(client)) { if (gift[client] > 0) /* si gift =1 ou est superieur alors on autorise la commande*/ { new bonus = GetRandomInt(1, 200); /* on met un nombre au hasard dans la variable bonus entre 1 et 200*/ new team = GetClientTeam(client); if(team==2||team==3) /* si le joueurs est en ct ou en terro */ { if(bonus<=10) // si le nombre tiré au hasard est inférieur ou égal a 10 sinon on passe au "else if" ligne 84 { new health = GetClientHealth(client); /* on prend le valeur de la vie du joueur*/ new nowhealth = health + 15; /* on lui ajoute 15 */ SetEntityHealth(client, nowhealth); /* on applique la nouvelle vie donc on ajoute 15 Hp */ CPrintToChat(client, " {green}[VIP] : Vous avez gagner 15 HP."); gift[client]--; /* gift ne sera plus utilisable */ return Plugin_Handled; } else if (bonus<=20) // si le nombre tiré au hasard est inférieur ou égal a 20 sinon on passe au "else if" ligne 94 { new health = GetClientHealth(client); new nowhealth = health - 15; SetEntityHealth(client, nowhealth); CPrintToChat(client, " {green}[VIP] : Vous avez perdu 15 HP."); gift[client]--; /* gift ne sera plus utilisable */ return Plugin_Handled; } else if (bonus<=30) // si le nombre tiré au hasard est inférieur ou égal a 30 sinon on passe au "else if" ligne 104 { GivePlayerItem(client, "weapon_awp"); /* on donne un usp a un joueur */ SetWeaponAmmo(client, 7); /* on lui donne 7 balles */ SetWeaponClipAmmo(client, 2, 0); /* 0 balle dans le chargeur */ CPrintToChat(client, " {green}[VIP] : Vous avez gagner 1 USP"); gift[client]--; /* gift ne sera plus utilisable */ return Plugin_Handled; } else if (bonus<=38) // si le nombre tiré au hasard est inférieur ou égal a 38 sinon on passe au "else if" ligne 114 { g_packhe[client]=1;/* la commande packhe est utilisable */ medik[client]=1;/* la commande medik est utilisable */ CPrintToChat(client, " {green}[VIP] : Vous avez gagner un !packhe et un !medik."); gift[client]--; /* gift ne sera plus utilisable */ return Plugin_Handled; } else if (bonus<=50) // si le nombre tiré au hasard est inférieur ou égal a 50 sinon on passe au "else if" ligne 126 { new Float:speed = GetEntPropFloat(client, Prop_Data, "m_flLaggedMovementValue"); /* on prend la valeur de la vitesse du joueur */ new Float:nowspeed = speed + 0.1; /* on lui ajoute 0.1 donc normalement 1+0.1 */ SetEntPropFloat(client, Prop_Data, "m_flLaggedMovementValue", nowspeed); /* on applique cette nouvelle vitesse */ CPrintToChat(client, " {green}[VIP] : Vous avez gagner de la vitesse pendant 15sec."); gift[client]--; /* gift ne sera plus utilisable */ CreateTimer(15.0, Timer_Gift_speed2, client) ; /* au bout de 15 secondes, on execute ce qui a dans le fonction timer_gift_speed2 */ return Plugin_Handled; } else if (bonus<=65) // si le nombre tiré au hasard est inférieur ou égal a 65 sinon on passe au "else" ligne 138 { new Float:speed = GetEntPropFloat(client, Prop_Data, "m_flLaggedMovementValue"); new Float:nowspeed = speed - 0.1; SetEntPropFloat(client, Prop_Data, "m_flLaggedMovementValue", nowspeed); CPrintToChat(client, " {green}[VIP] : Vous avez perdu de la vitesse pendant 15sec."); gift[client]--; CreateTimer(15.0, Timer_Gift_speed1, client) ; return Plugin_Handled; } else //sinon { CPrintToChat(client, " {green}[VIP] : Pas de chance vous avez perdu !."); gift[client]--; } } else { CPrintToChat(client, " {green}[VIP] : Erreur le plugin ne fonctionne que pour les terroristes."); } } else // si le gift =0 { CPrintToChat(client, " {green}[VIP] : Vous avez déjà utilisé votre !gift."); return Plugin_Handled; } } else // si la personn est morte ou non-vip { CPrintToChat(client, " {green}[VIP] : Vous devez etre vivant ou vip."); return Plugin_Handled; } return Plugin_Continue; } public Action:Command_Medik(client, args) { if(medik[client]==1) /* si le flag medik autorise le passage */ { new health = GetClientHealth(client); /* on crée une variable health et on recupère celle du joueur */ if(health>=70) /* si sa vie est supérieur a 70 */ { CPrintToChat(client, " {green}[VIP] : Vous avez deja plus de 70 Hp."); return Plugin_Handled; } else { new nowhealth = health + 40; /* on crée une nouvelle variable et on lui ajoute 40 de plus que health */ SetEntityHealth(client, nowhealth); /* on applique la vie qu'il y a dans la variable newhealth */ CPrintToChat(client, " {green}[VIP] : Vous avez gagner 40 Hp."); medik[client]=0; /* on interdit une prochaine commande medik */ return Plugin_Handled; } } else { CPrintToChat(client, " {green}[VIP] : Vous n'avez pas acces a cette commande."); return Plugin_Handled; } return Plugin_Continue; } public Action:Timer_Gift_speed1(Handle:timer, any:client) /* en gros on remet la vitesse initiale */ { new Float:speed1 = GetEntPropFloat(client, Prop_Data, "m_flLaggedMovementValue"); new Float:nowspeed1 = speed1 + 0.1; SetEntPropFloat(client, Prop_Data, "m_flLaggedMovementValue", nowspeed1); CPrintToChat(client, " {green}[VIP] : Vous avez perdu votre bonus vitesse !"); } public Action:Timer_Gift_speed2(Handle:timer, any:client) /* en gros on remet la vitesse initiale */ { new Float:speed1 = GetEntPropFloat(client, Prop_Data, "m_flLaggedMovementValue"); new Float:nowspeed1 = speed1 - 0.1; SetEntPropFloat(client, Prop_Data, "m_flLaggedMovementValue", nowspeed1); CPrintToChat(client, " {green}[VIP] : Vous avez perdu votre bonus vitesse !"); } public Action:Command_PackHe(client, args) { if ((GetUserFlagBits(client) & ADMFLAG_CUSTOM6 || GetUserFlagBits(client) & ADMFLAG_BAN)&&IsPlayerAlive(client)) { if(g_packhe[client]==1) { CPrintToChat(client, " {green}[VIP] : Vous avez gagné un pack HE !"); GivePlayerItem(client, "weapon_hegrenade"); /* on donne les trois grenade */ GivePlayerItem(client, "weapon_flashbang"); GivePlayerItem(client, "weapon_smokegrenade"); g_packhe[client]=0; return Plugin_Handled; } else { CPrintToChat(client, " {green}[VIP] : Vous n'avez pas accès à cette commande !"); return Plugin_Handled; } } else { CPrintToChat(client, " {green}[VIP] : Il faut etre vip pour utiliser cette commande !"); return Plugin_Handled; } return Plugin_Continue; } stock SetWeaponClipAmmo(client, slot, ammo) { new ammoOffset = FindSendPropInfo("CCSPlayer", "m_iAmmo"); return SetEntData(client, ammoOffset+(slot*4), ammo); } stock SetWeaponAmmo(client, ammo) { new iWeapon = GetEntDataEnt2(client, FindSendPropInfo("CCSPlayer", "m_hActiveWeapon")); SetEntData(iWeapon, FindSendPropInfo("CBaseCombatWeapon", "m_iClip1"), ammo); } J'aimerais savoir si vous avez rencontrés des difficultés à comprendre ce tuto et si oui, lesquelles ?Pour toutes questions n'hésitez pas ! Report
May 14, 201313 yr comment_147066 Ah tiens ça peut être intéressant d'apprendre, je zieuterai ça ce week end, merci ! Report
May 14, 201313 yr Author comment_147072 Pour toutes questions, n'hesite pas a me la poser que ce soit ts3, steam fofo ^^. Report
May 14, 201313 yr comment_147081 C'est drôle, ca me dit un truc ces bouts de code Par contre, ya marqué author = "Dertione", je comprends pas trop Report
May 14, 201313 yr Author comment_147088 C'est pas ton plugin si tu veux savoir. C'est mon premier plugin gift que j'avais commencé avant d'avoir ta source. Je vois pas ce qui a de bien compliqué dans ce plugin --". toi tu utilisais ca pour savoir si c'etait un vip ou non : public IsVIP(client) { decl String:steamId[30]; GetClientAuthString(client, steamId, sizeof(steamId)); if (GetUserFlagBits(client) & ADMFLAG_CUSTOM6) return true; else return false; } Alors que dans ce plugin, c'est un simple if. Toi tu utilisais ca pour donner une arme : if (GetPlayerWeaponSlot(client, 1) != -1) RemovePlayerItem(client, GetPlayerWeaponSlot(client, 1)); GivePlayerItem(client, "weapon_usp", 0); FakeClientCommand(client, "slot2"); new WeaponIndex = GetEntPropEnt(client, Prop_Send, "m_hActiveWeapon"); SetEntProp(WeaponIndex, Prop_Send, "m_iClip1", 5); new Ammo = FindDataMapOffs(client, "m_iAmmo") + (8 * 4); SetEntData(client, Ammo, 0); CPrintToChat(client, "{green}[VIP]{default} Bravo ! Vous avez gagne {lightgreen}un USP (5 balles)"); Alors que moi, j'utilises deux fonctions qui m'ont été donné gentiment par Kriax. Toi tu donnais comme sa les he : GivePlayerItem(client, "weapon_hegrenade"); GivePlayerItem(client, "weapon_smokegrenade"); GivePlayerItem(client, "weapon_flashbang"); CPrintToChat(client, "{green}[VIP]{default} Bravo ! Vous avez gagne {lightgreen}un pack de grenades"); alors que moi c'est un packhe. toi tu utilisais ca pour donner de la vie : new life = GetClientHealth(client); if (life <= 15) SetEntityHealth(client, 0); else SetEntityHealth(client, life - 15); Alors que moi, j'ai bien développer car j'apprenais seulement le sourcepawn. Pour ce plugin, le seul que je peux remercier, c'est Kriax. Dsl de te decevoir mais ce n'est en aucun cas du plagia et tu pourrais voir (si tu avais encore les accès) que dans le gift du jail (donc ta source) il y a cela comme plugin info : public Plugin:myinfo = { name = "Plugin Jail VIP", author = "Raijojp", version = "1.0", description = "Plugin VIP pour le serveur Jail", url = "http://forum.supreme-elite.fr" }; J'ai horreur du plagia, je trouves ça mesquin. Report
May 14, 201313 yr comment_147090 Les 2 fonctions de l'arme ? Mais ca revient au même lol x).M'enfin.Cela dit, ce que je pige pas, c'est pourquoi m'avoir demandé ma source alors ?Et dans ton premier post, ya pas de remerciement pour Kriax. Pour quelqu'un qui aime pas le plagiat ... Edited May 14, 201313 yr by Raijojp Report
May 14, 201313 yr Author comment_147093 car comme tu le vois, a ce temps la, j'étais très très limité dans le sourcepawn et genre le lancé de cut, le jour vip, etc etc ... Je ne savais pas faire et je t'en remercie encore une fois de nous l'avoir donné. définition du Plagiat : Le plagiat est une faute morale, civile, commerciale et/ou pénale consistant à copier un auteur ou créateur sans le dire. Ce plugin a été fait par mes soins avec l'aide de Kriax, Dans de nombreux plugin, je l'ai remercié en le mettant dans le plugin info mais pour celui la, il m'a aidé que partiellement. Je ne vois pas en quoi ne pas remercier Kriax serait du plagiat mais bon, cherchons la petite bête car tu es venu pour ça ^^ ! Allez évitons de flood ce sujet qui est pour de futur apprenti codeur. Je t'ai donné une explication, ca s'arrête la ^^ ! Report
May 14, 201313 yr comment_147104 Merci Dertione, j'me demandais si t'avais oublié le plugin, je vais essayé ça dans le weekend! Report
May 14, 201313 yr comment_147121 Pour quelqu'un qui aime pas le plagiat ... Pk tu dit ça ? C'est pas ton plugin si tu veux savoir. C'est mon premier plugin gift que j'avais commencé avant d'avoir ta source. Je vois pas ce qui a de bien compliqué dans ce plugin --". Je confirme, l'une des premières aides que je lui ai apporter Edited May 14, 201313 yr by kriax Report
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.