[{"content":"Voici toutes mes fiches de révision !\nPython Le python est un langage utilisé dans tout, du simple programme au IA les plus avancés.\nCours Python Javascript Le Javascript est un langage utilisé principalement dans le web (Front-end et Back-end).\nCours Javascript Exercices Javascript CSS Le CSS est utilisé pour stylisé les pages web.\nCours CSS SQL Le SQL est un langage utilisé dans la requète de bases de données.\nCours SQL Le web Les fiches sont plus concentré sur le réseaux en lui même\nLes adresses IP Les sous réseaux Le bash Bash ","permalink":"https://trneedaname.github.io/moc/fiches/","summary":"\u003cp\u003eVoici toutes mes fiches de révision !\u003c/p\u003e\n\u003ch2 id=\"python\"\u003ePython\u003c/h2\u003e\n\u003cp\u003eLe python est un langage utilisé dans tout, du simple programme au IA les plus avancés.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/fiches/python/\"\u003e Cours Python \u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"javascript\"\u003eJavascript\u003c/h2\u003e\n\u003cp\u003eLe Javascript est un langage utilisé principalement dans le web (Front-end et Back-end).\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/fiches/javascript/\"\u003e Cours Javascript \u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/fiches/exercices-de-javascript/\"\u003e Exercices Javascript \u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"css\"\u003eCSS\u003c/h2\u003e\n\u003cp\u003eLe CSS est utilisé pour stylisé les pages web.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/fiches/css/\"\u003e Cours CSS \u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"sql\"\u003eSQL\u003c/h2\u003e\n\u003cp\u003eLe SQL est un langage utilisé dans la requète de bases de données.\u003c/p\u003e","title":"Fiches"},{"content":"Rock Climber mod The goal of this mod is to add ways for Xcom \u0026amp; ADVENT to move around on the map. It does so by adding 2 abilities, 1 item and 1 vest.\nThe item has charges and will be removed from the unit\u0026rsquo;s inventory after use. The vest adds a simple ability with a short cooldown and unlimited use.\nThe abilities can be added to character groups (ie. all \u0026lsquo;AdventTrooper\u0026rsquo;) or a single unit (ie. \u0026lsquo;AdvTrooperM3\u0026rsquo;) or even a soldier class.\nThe ability added to character groups \u0026amp; units is passive, while the soldier added ability is active.\nConfig Below is the default config, as you can see, the mod is highly configurable, by default is doesn\u0026rsquo;t add the ability to any units, character groups or classes.\nini 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 [RockClimber.X2Ability_RockClimber] ; ========================== ; Ability : Class ; ========================== ;* Ability setup, TR_RockClimb_IsPassive_Ability = true, does nothing ; The Action Point cost of the ability, default is 1 TR_RockClimb_AP_Cost_Ability = 1 ; The cooldown of the ability, default is 2 TR_RockClimb_Cooldown_Ability = 2 ; The Number of turns the effect is active for, default is 3 TR_RockClimb_NumTurns_Ability = 3 ; Does the ability has charges, default is false TR_RockClimb_HasCharge_Ability = false ; The number of charges the ability has, default is 2 TR_RockClimb_InitialCharge_Ability = 2 ; Is the ability free (AP cost), default is false TR_RockClimb_IsFree_Ability = false ; Can the ability appear as an AWC perk, default is false TR_RockClimb_IsCrossClass = false ; Is the ability passive, default is false TR_RockClimb_IsPassive_Ability = false ; ========================== ; Ability : Item ; ========================== ;* Ability setup, TR_RockClimb_IsPassive_Item = true, does nothing ; The Action Point cost of the ability, default is 1 TR_RockClimb_AP_Cost_Item = 1 ; The cooldown of the ability, default is 4 TR_RockClimb_Cooldown_Item = 4 ; The Number of turns the effect is active for, default is 1 TR_RockClimb_NumTurns_Item = 1 ; Is the item consumed after use, default is true TR_RockClimb_Consume_Item = true ; Does the item has charges, default is true TR_RockClimb_HasCharge_Item = true ; The number of charges the ability has, default is 2 TR_RockClimb_InitialCharge_Item = 2 ; Is the ability free (AP cost), default is false TR_RockClimb_IsFree_Item = false ; Is the ability passive, default is false TR_RockClimb_IsPassive_Item = false ; ========================== ; Ability : Armour ; ========================== ;* Ability setup, TR_RockClimb_IsPassive_Item_Armour = true, does nothing ; The Action Point cost of the ability, default is 1 TR_RockClimb_AP_Cost_Item_Armour = 1 ; The cooldown of the ability, default is 3 TR_RockClimb_Cooldown_Item_Armour = 3 ; The Number of turns the effect is active for, default is 1 TR_RockClimb_NumTurns_Item_Armour = 1 ; Does the item has charges, default is false TR_RockClimb_HasCharge_Item_Armour = false ; The number of charges the ability has, default is 3 TR_RockClimb_InitialCharge_Item_Armour = 3 ; Is the ability free (AP cost), default is false TR_RockClimb_IsFree_Item_Armour = false ; Is the ability passive, default is true TR_RockClimb_IsPassive_Item_Armour = true ; ========================== ; Ability : Vest ; ========================== ;* Ability setup, TR_RockClimb_IsPassive_Item_Vest = true, does nothing ; The Action Point cost of the ability, default is 1 TR_RockClimb_AP_Cost_Item_Vest = 1 ; The cooldown of the ability, default is 5 TR_RockClimb_Cooldown_Item_Vest = 5 ; The Number of turns the effect is active for, default is 3 TR_RockClimb_NumTurns_Item_Vest = 3 ; Does the item has charges, default is false TR_RockClimb_HasCharge_Item_Vest = false ; The number of charges the ability has, default is 3 TR_RockClimb_InitialCharge_Item_Vest = 3 ; Is the ability free (AP cost), default is false TR_RockClimb_IsFree_Item_Vest = false ; Is the ability passive, default is false TR_RockClimb_IsPassive_Item_Vest = false [RockClimber.X2Item_RockClimb] ; Is the item enabled (note, this doesn\u0026#39;t disable the abilities), by default is True IsRockClimbingEnabled_Item = true ; Build option for the item, by default it can\u0026#39;t be build TR_RockClimb_CanBeBuild_Item = false ; Is the item starting, by default it\u0026#39;s starting TR_RockClimb_IsStratingItem_Item = true ; Build option for the item, by default it\u0026#39;s infinite TR_RockClimb_IsInfinite_Item = true ; How much the item cost, if TR_RockClimb_IsInfinite_Item = true, does not apply TR_RockClimb_TradeValue_Item = 5 ; How much the item cost, if TR_RockClimb_IsInfinite_Item = true, does not apply TR_RockClimb_Cost_Item = 20 ; Enable or not the reversed image, by default is False RockClimb_RevImage_Item = false ; ======================================================= ; Is the vest enabled (note, this doesn\u0026#39;t disable the abilities), by default is True IsRockClimbingEnabled_Item_Vest = true ; Build option for the vest, by default it can be build TR_RockClimb_CanBeBuild_Item_Vest = true ; Is the vest starting, by default it\u0026#39;s not starting TR_RockClimb_IsStratingItem_Vest_Item_Vest = false ; Build option for the item, by default it\u0026#39;s not infinite TR_RockClimb_IsInfinite_Item_Vest = false ; How much the item cost, if TR_RockClimb_IsInfinite_Item_Vest = true, does not apply TR_RockClimb_TradeValue_Item_Vest = 10 ; How much the item cost, if TR_RockClimb_IsInfinite_Item_Vest = true, does not apply TR_RockClimb_Cost_Item_Vest = 30 ; Enable or not the reversed image, by default is False RockClimb_RevImage_Item_Vest = false ; The Health bonus of the vest, default is 2 TR_RockClimbing_HealthBonus_Vest = 2 ; The Mobility bonus of the vest, default is 2 TR_RockClimbing_MobilityBonus_Vest = 2 [RockClimber.X2DLCInfo_RockClimber] ;* Adds the \u0026#39;TR_RockClimb_Item\u0026#39; ability to the items listed ;+RockClimb_Items = \u0026#39;BattleScanner\u0026#39; ;* Adds the \u0026#39;TR_RockClimb_Item_Armour\u0026#39; ability to the armours listed +RockClimb_Armours = \u0026#39;LightPlatedArmor\u0026#39; +RockClimb_Armours = \u0026#39;LightPoweredArmor\u0026#39; +RockClimb_Armours = \u0026#39;LightAlienArmor\u0026#39; +RockClimb_Armours = \u0026#39;LightAlienArmorMk2\u0026#39; ;* Adds the \u0026#39;TR_RockClimb_Ability_Passive\u0026#39; ability to the character groups listed ;+RockClimber_CharacterGroups = \u0026#39;viper\u0026#39; ;* Adds the \u0026#39;TR_RockClimb_Ability_Passive\u0026#39; ability to the unit names listed ;+RockClimber_UnitName = \u0026#39;AdvCaptainM3\u0026#39; ;* Adds the \u0026#39;TR_RockClimb_Ability\u0026#39; ability to the classes listed ;+RockClimber_Classes = \u0026#39;skirmisher\u0026#39; ","permalink":"https://trneedaname.github.io/wiki-xcom/rock-climber/","summary":"\u003ch2 id=\"rock-climber-mod\"\u003eRock Climber mod\u003c/h2\u003e\n\u003cp\u003eThe goal of this mod is to add ways for Xcom \u0026amp; ADVENT to move around on the map.\nIt does so by adding 2 abilities, 1 item and 1 vest.\u003c/p\u003e\n\u003cp\u003eThe item has charges and will be removed from the unit\u0026rsquo;s inventory after use.\nThe vest adds a simple ability with a short cooldown and unlimited use.\u003c/p\u003e\n\u003cp\u003eThe abilities can be added to character groups (ie. all \u0026lsquo;AdventTrooper\u0026rsquo;) or a single unit (ie. \u0026lsquo;AdvTrooperM3\u0026rsquo;) or even a soldier class.\u003c/p\u003e","title":"Rock Climber"},{"content":"Militia Overhaul This post will detail the idea, hows and what of my Militia Overhaul mod. More information can be found over here (mod integration, addons and more \u0026ldquo;dev-like\u0026rdquo; changes).\nBrief History The mod started in early 2022 as an idea, but was written in April 2023 with the help of Endlesspie49, who helped to shape the mod into what it is now.\nIt has obviously evolved, but the core ideas are the same, an overhaul that makes the player at the centre of the militia, while making it as diverse as the Xcom roster, while being as modular as possible, to allow for full customisation.\nIdea for the mod What the militia should be The militia is now a full roster of different units with their own weapons, AI, abilities and role.\nThey are separated into normal (which can appear in large numbers), hero (which can appear in smaller numbers) and unique, which are unique units that will only appear if Advent digs deep enough.\nThe factions can also be attacked, they too feature a fully fledged roster of units and abilities (some say you can even find the factions leaders if you search enough).\nMods that form the overhaul Militia Gear Note This mod creates all of the weaponry that the militia can use. By default, it only creates the base weapons (from vanilla \u0026amp; WOTC) with no extras like DLC added weapons, those are added via addons. The stats are adjusted for a vanilla-like setup (although they are a bit higher).\nMilitia Accesories Note This mod creates some extra goodies that Xcom can use (most notably different ways to call the militia for help), as well as use their expertise in survival for some neat tech and tools.\nMilitia Breakthroughs Note This mod creates new breakthroughs that can be used to improve the militia\u0026rsquo;s stats; they can be expensive in the late game, but are integral to the Resistance\u0026rsquo;s survival.\nMilitia Changes (Integrated in the overhaul) Note This mod adds 2 units, a medic and a fake militia soldier (aka, a faceless) as well as add 2 new abilities. The mod is integrated into the overhaul as it uses a tier system (like the normal militia) and doesn\u0026rsquo;t quite fit the full overhaul\u0026rsquo;s vision as is.\nThese mods form the framework of the Militia Overhaul I present, but they wouldn\u0026rsquo;t be complete without a proper militia overhaul mod.\nTo help the goal of modularity, the overhaul is multiple mods.\nMilitia Overhaul mods Yes, mods.\nWhat this overhaul does As stated earlier, this overhaul aims to fit into any modded playthroughs, and as it stands, the militia is a single unit.\nThe only logical step is to allow it to become more Xcom-like in terms of units, abilities and tactics. The proper \u0026ldquo;Militia Overhaul\u0026rdquo; mods create the units, AI, abilities and encounter list.\nEach units are divided in archetypes, each of those gain a \u0026ldquo;class\u0026rdquo; specific ability, it then rolls positive and negative abilities.\nAbout the abilities Each of those class specific abilities have multiple levels, which can increase with tech reserch or at the GTS.\nMath of the abilities Roll from 0-2 negative abilities (50% for the first, 20% for the second) Roll from 0-2/3 positive abilities (50% for the first, 20% for the second) Note : each negative roll can be decreased by 10% with GTS unlocks (from 50% \u0026amp; 20% -\u0026gt; 40% \u0026amp; 10%).\nEach positive abilities can increase by 10% the same way, another unlock can increase the ability count from 2 to 3.\nMilitia Overhaul : Vanilla Balance This mod creates units that are only from the vanilla game \u0026amp; WOTC, they try to be as vanilla friendly as possible, but some liberties were taken to flesh out these units.\nRifleman Civilian : The most common type of unit, they aren\u0026rsquo;t very good but they compensate with accuracy by volume\nLoadout : Rifle, Frag grenade, Light militia armour\nPoint shooter : Slightly less common, specialised in straight shooting at enemies, has better stats and abilities\nLoadout : Rifle, Pistol, Medium militia armour\nWatcher : As common as the point shooter but specialised in overwatches and ambush tactics\nLoadout : Rifle, Flash grenade, Medium militia armour\nEach roll a class specific ability (in order : red shirt1, ammo pouch2, overwatcher3)\nThe Civilian can roll : Empty clip, Mag dump, Lucky.\nThe Point shooter can roll : Good shot, Prior fighting knowledge, Came prepared.\nThe Watcher can roll : Eagle Eyed, Vital shot, Target rich environment\nRanger Swordsman : The most common of the ranger units, it specialise in using it\u0026rsquo;s sword to slice enemies appart and getting back to cover.\nLoadout : Shotgun, Sword, Light militia armour\nShotgunner : As common as the swordsman, specialise in flanking maneuvers and dishing out high single target damage.\nLoadout : Shotgun, Pistol, Medium militia armour\nBullwark : The rarest ranger unit, specialise in tanking and concentrating enemy fire, keeping allies safe.\nLoadout : Shotgun, Smoke grenade, Heavy militia armour\nEach roll a class specific ability (in order : Sharp edge4, Close and personnal5, Heavy armour6)\nGrenadier Support : The most common of the grenadier units, it specialise in using it\u0026rsquo;s grenade launcher to support it\u0026rsquo;s allies and make enemies unable to attack\nLoadout : Bullpup, Grenade launcher, Flash grenade, Smoke grenade, Medium militia armour\nDestroyer : A rare grenadier unit, specialise in destroying cover and making enemies easier to hit\nLoadout : Bullpup, Grenade launcher, Frag grenade, Medium militia armour\nEach roll a class specific ability (in order : Supporter7, Heavy ordonance use8)\nCannoner Suppressor : The most common of the cannoner units, it specialise in suppressing enemy targets, pinning them down with a rain of bullets.\nLoadout : Cannon, Frag grenade, Medium militia armour\nCannoner : As common as the Suppressor, specialise in spraying the enemy in bullets.\nLoadout : Cannon, Flash grenade, Medium militia armour\nTechie Electrical : The most common of the techie units, specialise attacking units with it\u0026rsquo;s Gremlin.\nLoadout : Rifle, Gremlin, Medium militia armour\nHacker : A rare Techie units, it specialise in hacking enemy robots and disabling, or even taking control of them.\nLoadout : Bullup, Gremlin, Light militia armour\nHealer Soldier Medic : The most common healer units, it specialise in shooting enemies and doing some light healing. Loadout : Bullup, Gremlin, Light militia armour\nFirst Responder : A rare healer unit, specialise in healing it\u0026rsquo;s allies and making them stay alive.\nLoadout : Shotgun, Medkit, Light militia armour\nMobile Hospital : A rare healer unit, specialise in heavy healing at the cost of attack damage.\nLoadout : Pistol, Medkit, Smokes Heavy armour militia armour\nBooster : The rarer healer unit, specialise in boosting it\u0026rsquo;s allies and making them better fighters.\nLoadout : Rifle, Stim gun, Medium militia armour\nSniper Sharpshooter : The most common sniper units, it specialise in targeting priority targets at long range.\nLoadout : Sniper rifle, Smoke grenade, Light militia armour\nOverseer : A common sniper unit specialising in overwatching and keeping enemies at bay.\nLoadout : Sniper rifle, pistol, Light militia armour\nMilitia Overhaul : Proficiency Inspired Militia Overhaul : Long War of The Chosen Inspired Red shirt : -20 aim, can shoot twice per turn.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nAmmo pouch : +2 ammo, gain 1 free reload\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nOverwatcher : +10 aim when in overwatch, attacked unit has defense reduced by 20%.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n\u0026#160;\u0026#x21a9;\u0026#xfe0e; \u0026#160;\u0026#x21a9;\u0026#xfe0e; \u0026#160;\u0026#x21a9;\u0026#xfe0e; \u0026#160;\u0026#x21a9;\u0026#xfe0e; \u0026#160;\u0026#x21a9;\u0026#xfe0e; ","permalink":"https://trneedaname.github.io/wiki-xcom/militia-overhaul/","summary":"\u003ch2 id=\"militia-overhaul\"\u003eMilitia Overhaul\u003c/h2\u003e\n\u003cp\u003eThis post will detail the idea, hows and what of my Militia Overhaul mod.\nMore information can be found over \u003ca href=\"https://github.com/TRNEEDANAME/Militia_Wiki/wiki\"\u003ehere\u003c/a\u003e (mod integration, addons and more \u0026ldquo;dev-like\u0026rdquo; changes).\u003c/p\u003e\n\n            \u003clink rel=\"stylesheet\" href=\"/css/vendors/admonitions.8594290f339d32b2f8b5f41037b938fae025295031470fae1aa647a2fac468a9.css\" integrity=\"sha256-hZQpDzOdMrL4tfQQN7k4\u0026#43;uAlKVAxRw\u0026#43;uGqZHovrEaKk=\" crossorigin=\"anonymous\"\u003e\n    \u003cdiv class=\"admonition memo\"\u003e\n      \u003cdiv class=\"admonition-header\"\u003e\u003csvg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 384 512\"\u003e\u003cpath d=\"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM112 256l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"/\u003e\u003c/svg\u003e\n        \u003cspan\u003eBrief History\u003c/span\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"admonition-content\"\u003e\n        \u003cp\u003eThe mod started in early 2022 as an idea, but was written in April 2023 with the help of Endlesspie49, who helped to shape the mod into what it is now.\u003c/p\u003e","title":"Militia Overhaul"},{"content":"Le PHP, c\u0026rsquo;est quoi ? Le langage PHP (PHP: Hypertext Preprocessor) est un langage de script côté serveur, principalement utilisé pour le développement web dynamique. Contrairement à JavaScript qui s\u0026rsquo;exécute dans le navigateur, PHP s\u0026rsquo;exécute sur le serveur et génère du HTML envoyé au client.\nConvention PHP utilise principalement le Camel case pour les variables et fonctions. Par exemple, on écrira $maVariable. Les opérations comportent généralement un espace :\nphp 1 2 3 \u0026lt;?php echo 2 + 1; ?\u0026gt; Points-virgules et accolades PHP utilise des accolades {} pour définir les blocs et nécessite un point-virgule ; à la fin de chaque instruction. Toutes les variables commencent par $.\nToutes les conventions sont disponibles sur PSR (PHP Standards Recommendations).\nLes types et variables Différences entre port��e globale et locale Portée des variables en PHP En PHP, les variables déclarées en dehors d\u0026rsquo;une fonction ont une portée globale, mais ne sont pas accessibles directement dans les fonctions.\nphp 1 2 3 4 5 6 7 \u0026lt;?php $x = 10; function test() { // $x n\u0026#39;est pas accessible ici sans le mot-clé global echo $x; // Warning: Undefined variable } ?\u0026gt; Pour accéder à une variable globale dans une fonction, il faut utiliser le mot-clé global :\nphp 1 2 3 4 5 6 7 8 \u0026lt;?php $x = 10; function test() { global $x; echo $x; // 10 } test(); ?\u0026gt; Les variables locales sont limitées à la fonction où elles sont déclarées :\nphp 1 2 3 4 5 6 7 8 \u0026lt;?php function test() { $y = 20; // variable locale echo $y; // 20 } test(); echo $y; // Warning: Undefined variable ?\u0026gt; Les variables php 1 2 3 4 5 6 7 8 9 10 \u0026lt;?php $age = 80; $nom = \u0026#34;Jean\u0026#34;; $etudiant = true; $animaux = [\u0026#34;chien\u0026#34;, \u0026#34;chat\u0026#34;, \u0026#34;poisson\u0026#34;, \u0026#34;chameau\u0026#34;]; echo $age . \u0026#34;\\n\u0026#34;; echo $nom . \u0026#34;\\n\u0026#34;; print_r($animaux); echo \u0026#34;Le type de \u0026#39;age\u0026#39; est \u0026#34; . gettype($age) . \u0026#34;, celui de \u0026#39;nom\u0026#39; est \u0026#34; . gettype($nom) . \u0026#34; et le type de \u0026#39;animaux\u0026#39; est \u0026#34; . gettype($animaux) . \u0026#34;\\n\u0026#34;; ?\u0026gt; À savoir Le type du tableau animaux est un array.\nPHP est un langage dit \u0026ldquo;orienté objet\u0026rdquo;, ce qui signifie qu\u0026rsquo;il est possible d\u0026rsquo;encapsuler des concepts en objets.\nphp 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 \u0026lt;?php class Voiture { public $marque; public $nom; public function __construct($marque, $nom) { $this-\u0026gt;marque = $marque; /* le `$this-\u0026gt;marque` définit l\u0026#39;attribut de la classe, le `$marque` est le paramètre de la fonction ,*/ $this-\u0026gt;nom = $nom; } public function donneInfo() { echo \u0026#34;La voiture {$this-\u0026gt;nom} est de marque {$this-\u0026gt;marque}\\n\u0026#34;; } } // On instancie 2 voitures différentes $voiture1 = new Voiture(\u0026#34;Toyota\u0026#34;, \u0026#34;Corolla\u0026#34;); $voiture2 = new Voiture(\u0026#34;Renault\u0026#34;, \u0026#34;Espace\u0026#34;); $voiture1-\u0026gt;donneInfo(); $voiture2-\u0026gt;donneInfo(); ?\u0026gt; PHP est un langage à typage dynamique, mais depuis PHP 7, il est possible de déclarer des types stricts pour les paramètres et valeurs de retour.\nRedéfinitions des types Les types php 1 2 3 4 5 6 7 8 \u0026lt;?php $age = 20; var_dump(is_string($age)); // bool(false) echo \u0026#34;Changement de la variable \u0026#39;age\u0026#39; en string\\n\u0026#34;; $age = \u0026#34;tomate\u0026#34;; echo $age . \u0026#34;\\n\u0026#34;; var_dump(is_string($age)); // bool(true) ?\u0026gt; À savoir Même si utiliser == semble fonctionner, il est recommandé de ne pas l\u0026rsquo;utiliser. Privilégiez === pour la vérification stricte des types (valeur ET type).\nEntrées / sorties Les entrées En ligne de commande Demander une entrée utilisateur avec readline() ou fgets(STDIN) :\nphp 1 2 3 4 5 \u0026lt;?php echo \u0026#34;Quel est votre nom ? \u0026#34;; $nom = trim(fgets(STDIN)); echo \u0026#34;Bonjour $nom !\\n\u0026#34;; ?\u0026gt; Dans un formulaire web html 1 2 3 4 5 6 7 8 9 10 11 12 13 \u0026lt;!DOCTYPE html\u0026gt; \u0026lt;html lang=\u0026#34;fr\u0026#34;\u0026gt; \u0026lt;head\u0026gt; \u0026lt;meta charset=\u0026#34;UTF-8\u0026#34;\u0026gt; \u0026lt;title\u0026gt;Formulaire\u0026lt;/title\u0026gt; \u0026lt;/head\u0026gt; \u0026lt;body\u0026gt; \u0026lt;form method=\u0026#34;POST\u0026#34; action=\u0026#34;traitement.php\u0026#34;\u0026gt; \u0026lt;label\u0026gt;Nom : \u0026lt;input type=\u0026#34;text\u0026#34; name=\u0026#34;nom\u0026#34;\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;button type=\u0026#34;submit\u0026#34;\u0026gt;Envoyer\u0026lt;/button\u0026gt; \u0026lt;/form\u0026gt; \u0026lt;/body\u0026gt; \u0026lt;/html\u0026gt; php 1 2 3 4 5 6 7 \u0026lt;?php // traitement.php if ($_SERVER[\u0026#34;REQUEST_METHOD\u0026#34;] == \u0026#34;POST\u0026#34;) { $nom = htmlspecialchars($_POST[\u0026#34;nom\u0026#34;]); echo \u0026#34;Bonjour $nom !\u0026#34;; } ?\u0026gt; Les sorties Version console php 1 2 3 4 5 \u0026lt;?php echo \u0026#34;Hello World !\u0026#34;; // ou print \u0026#34;Hello World !\u0026#34;; ?\u0026gt; Version site (texte) php 1 2 3 4 5 6 7 8 9 10 11 12 13 14 \u0026lt;!DOCTYPE html\u0026gt; \u0026lt;html lang=\u0026#34;fr\u0026#34;\u0026gt; \u0026lt;head\u0026gt; \u0026lt;meta charset=\u0026#34;UTF-8\u0026#34;/\u0026gt; \u0026lt;link href=\u0026#34;style.css\u0026#34; rel=\u0026#34;stylesheet\u0026#34;/\u0026gt; \u0026lt;title\u0026gt;Ex 1\u0026lt;/title\u0026gt; \u0026lt;/head\u0026gt; \u0026lt;body\u0026gt; \u0026lt;h1\u0026gt;Ex 1\u0026lt;/h1\u0026gt; \u0026lt;p id=\u0026#34;texte_a_changer\u0026#34;\u0026gt; \u0026lt;?php echo \u0026#34;Hello World !\u0026#34;; ?\u0026gt; \u0026lt;/p\u0026gt; \u0026lt;/body\u0026gt; \u0026lt;/html\u0026gt; Décomposition \u0026lt;?php : balise d\u0026rsquo;ouverture PHP echo : affiche du texte ou du HTML ?\u0026gt; : balise de fermeture PHP (optionnelle en fin de fichier) Le contenu PHP est exécuté côté serveur avant d\u0026rsquo;envoyer le HTML au client Version avec JavaScript pour manipulation DOM html 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 \u0026lt;!DOCTYPE html\u0026gt; \u0026lt;html lang=\u0026#34;fr\u0026#34;\u0026gt; \u0026lt;head\u0026gt; \u0026lt;meta charset=\u0026#34;UTF-8\u0026#34;/\u0026gt; \u0026lt;link href=\u0026#34;style.css\u0026#34; rel=\u0026#34;stylesheet\u0026#34;/\u0026gt; \u0026lt;title\u0026gt;Ex 1\u0026lt;/title\u0026gt; \u0026lt;/head\u0026gt; \u0026lt;body\u0026gt; \u0026lt;h1\u0026gt;Ex 1\u0026lt;/h1\u0026gt; \u0026lt;p id=\u0026#34;texte_a_changer\u0026#34;\u0026gt;\u0026lt;/p\u0026gt; \u0026lt;/body\u0026gt; \u0026lt;script\u0026gt; // PHP peut générer du JavaScript let texte = document.getElementById(\u0026#34;texte_a_changer\u0026#34;); texte.textContent = \u0026#34;\u0026lt;?php echo \u0026#39;Hello World depuis PHP !\u0026#39;; ?\u0026gt;\u0026#34;; \u0026lt;/script\u0026gt; \u0026lt;/html\u0026gt; Les fonctions php 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 \u0026lt;?php function maFonction($age) { if (!is_numeric($age)) { echo \u0026#34;Veuillez rentrer un nombre.\\n\u0026#34;; $age = readline(\u0026#34;Quel est votre âge ? \u0026#34;); return maFonction($age); /* Ici on return la même fonction si la condition `!is_numeric` (n\u0026#39;est pas un nombre) est vraie, c\u0026#39;est la récursivité. C\u0026#39;est utilisé pour ce genre de code demandant un input à l\u0026#39;utilisateur pour éviter les erreurs d\u0026#39;entrées. C\u0026#39;est aussi utile pour les PGCD et autres formules mathématiques. ,*/ } $age = intval($age); $age = $age + 1; echo \u0026#34;Vous avez $age ans\\n\u0026#34;; } $age_utilisateur = readline(\u0026#34;Quel est votre âge ? \u0026#34;); maFonction($age_utilisateur); ?\u0026gt; Typage strict (PHP 7+) Depuis PHP 7, il est possible de déclarer des types stricts :\nphp 1 2 3 4 5 6 7 8 \u0026lt;?php declare(strict_types=1); function addition(int $a, int $b): int { return $a + $b; } echo addition(5, 3); // 8 // echo addition(\u0026#34;5\u0026#34;, 3); // TypeError ?\u0026gt; Les conditions Les conditions permettent de vérifier si une valeur est vraie ou fausse.\nphp 1 2 3 4 5 6 7 8 \u0026lt;?php $age = readline(\u0026#34;Âge ? \u0026#34;); if ($age \u0026lt; 18) { echo \u0026#34;Tu es mineur\\n\u0026#34;; } else { echo \u0026#34;Tu n\u0026#39;es pas mineur\\n\u0026#34;; } ?\u0026gt; Boucles Boucle for php 1 2 3 4 5 \u0026lt;?php for ($i = 0; $i \u0026lt; 7; $i++) { echo $i . \u0026#34;\\n\u0026#34;; } ?\u0026gt; Boucle while php 1 2 3 4 5 6 7 \u0026lt;?php $i = 0; while ($i \u0026lt; 5) { echo $i . \u0026#34;\\n\u0026#34;; $i++; } ?\u0026gt; Boucle foreach (spécifique aux tableaux) php 1 2 3 4 5 6 7 8 9 10 11 \u0026lt;?php $animaux = [\u0026#34;chien\u0026#34;, \u0026#34;chat\u0026#34;, \u0026#34;poisson\u0026#34;, \u0026#34;chameau\u0026#34;]; // Parcourir les valeurs foreach ($animaux as $animal) { echo $animal . \u0026#34;\\n\u0026#34;; } // Parcourir avec index et valeur foreach ($animaux as $index =\u0026gt; $animal) { echo \u0026#34;$index: $animal\\n\u0026#34;; } ?\u0026gt; Switch En PHP, le switch permet de comparer une expression à plusieurs valeurs possibles.\nphp 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 \u0026lt;?php $t = readline(\u0026#34;Saisir un caractère : \u0026#34;); switch ($t) { case \u0026#34;a\u0026#34;: case \u0026#34;e\u0026#34;: case \u0026#34;i\u0026#34;: case \u0026#34;o\u0026#34;: case \u0026#34;u\u0026#34;: case \u0026#34;y\u0026#34;: echo \u0026#34;C\u0026#39;est une voyelle\\n\u0026#34;; break; default: echo \u0026#34;Pas une voyelle\\n\u0026#34;; break; } ?\u0026gt; Décomposition switch($expression) évalue l\u0026rsquo;$expression Chaque case compare la valeur de l\u0026rsquo;expression break empêche l\u0026rsquo;exécution des cases suivantes default est exécuté si aucune valeur ne correspond Différences principales avec JavaScript Tableau comparatif Aspect JavaScript PHP Exécution Côté client (navigateur) Côté serveur Variables let, const, var $variable Concaténation + ou template literals . ou \u0026quot;$var\u0026quot; Affichage console.log() echo, print Tableaux [] (Array) [] (array) Comparaison stricte === === Fin d\u0026rsquo;instruction Point-virgule optionnel Point-virgule obligatoire Typage Dynamique uniquement Dynamique + strict (PHP 7+) ","permalink":"https://trneedaname.github.io/fiches/php/","summary":"\u003ch2 id=\"le-php-c-est-quoi\"\u003eLe PHP, c\u0026rsquo;est quoi ?\u003c/h2\u003e\n\u003cp\u003eLe langage \u003ccode\u003ePHP\u003c/code\u003e (PHP: Hypertext Preprocessor) est un langage de script côté serveur, principalement utilisé pour le développement web dynamique.\nContrairement à JavaScript qui s\u0026rsquo;exécute dans le navigateur, PHP s\u0026rsquo;exécute sur le serveur et génère du HTML envoyé au client.\u003c/p\u003e\n\n    \u003cdiv class=\"admonition memo\"\u003e\n      \u003cdiv class=\"admonition-header\"\u003e\u003csvg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 384 512\"\u003e\u003cpath d=\"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM112 256l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"/\u003e\u003c/svg\u003e\n        \u003cspan\u003eConvention\u003c/span\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"admonition-content\"\u003e\n        \u003cp\u003ePHP utilise principalement le \u003ca href=\"https://fr.wikipedia.org/wiki/Camel_case\"\u003eCamel case\u003c/a\u003e pour les variables et fonctions.\nPar exemple, on écrira \u003ccode\u003e$maVariable\u003c/code\u003e.\nLes opérations comportent généralement un espace :\u003c/p\u003e","title":"php"},{"content":"The Playable Chosen mod made by fireborn has issues with the abilities\nThis mod aims to fix those issues and include LWOTC / CI support The chosen uses the proficiency system.\nHunter The hunter specialise in tracking and taking enemies out from afar. He can also get in close with his pistol and grappling hook\nSkill tree Sharpshooter Specialise into shooting enemmies from afar, the bigger, the better.\nTracker Specialise into finding enemies and tagging their weak points for hunting later.\nClose combat Specialise into pistol attacks and close range.\nRank Sharpshooter Tracker Close Combat Squaddie Chosen Specialisation : Hunter I see you I\u0026rsquo;m always a quickdraw Corporal A fine red mist Targeting Always the right ammo for the job Sergeant The bigger they are Bad design finder I can do that too Lieutenant Kill to shot Better compound grenade Found you ! Captain Killing shot This one\u0026rsquo;s free Now run Major Free shots on the house Can\u0026rsquo;t run Just die Colonel Killer fog Credential : Admin Best shooter in the west, and east Proficiency \u0026ndash; Chosen Specialisation : Hunter At level 1 (squaddie) : gain \u0026ldquo;Death from above\u0026rdquo;, \u0026ldquo;summon beasts lvl 1\u0026rdquo; and \u0026ldquo;capture\u0026rdquo; At level 2 (sergeant) : gain \u0026ldquo;Better sight\u0026rdquo;, \u0026ldquo;summon lvl 2\u0026rdquo; and \u0026ldquo;tracking shot\u0026rdquo; At level 3 (captain) : gain \u0026ldquo;All seeing\u0026rdquo;, \u0026ldquo;summon lvl 3\u0026rdquo;, \u0026ldquo;better capture\u0026rdquo;\nI see you : can see all enemies in a 30 tiles radius (passive)\nI'm always a quickdraw : gain \u0026ldquo;quickdraw\u0026rdquo; and \u0026ldquo;Lightning Hand\u0026rdquo; (2 turn cooldown lightning hands)\nA fine red mist : If the unit dies by this shot, has a chance to panic nearby units (50%, 4 turn cooldown)\nTargeting : copy of holotargeting (free action, 1 turn cooldown)\nAlways the right ammo for the job : Can freely swap between a configured set of ammo types\nThe bigger they are : shot that does more damage based on the unit\u0026rsquo;s HP (for every 5HP of the unit, +10 crit \u0026amp; +2 damage)\nBad design finder : Targeting increase crit chance, reduce defense and dodge (+15 crit, -10 defense, -25 dodge)\nI can do that too : Return fire three times against any enemies that attack him, max of 3 attacks\nKill to shoot : If the targeted unit dies, grant 1AP and refund the ammo (5 turn cooldown, free action)\nBetter compound grenade : The grenade now targets robotic units, last longer and panic (passive)\nFound you ! : If a unit moves in the hunter\u0026rsquo;s line of sight, take a shot at it, no limit (passive)\nFree shots on the house : Target a unit, making it loose all defense, if an ally kill it, refund the AP and ammo, the hunter gets +1AP (6 turn cooldown, 2AP)\nCan't run : removes all mobility and aim from a unit (last 3 turns, 2AP, 8 turn cooldown)\nJust die : shoot at a unit until it dies (2AP, 10 turn cooldown, 3 charges)\nKiller fog : For every units killed by the hunter, gets +10 aim, +1 mobility, each kills refund 2AP and refunds 1 ammo (12 turn cooldown, 1AP, 2 charges)\nCredential : Admin : Gets a +200 in hacking, can destroy, disable or take control of any robotic units in it\u0026rsquo;s vision (passive)\nBest shooter in the west, and east : Shoot 4 times at every enemies in sight with a +40 aim, +10 crit buff (12 turn cooldown, 2AP, 1 charge)\nProficiency abilities\nSummon Beast lvl 1 : Summon 1-2 faceless (1AP, 4 turn cooldown)\nCapture : capture a humanoid target, granting some supplies (20 by default) (2AP, 5 turn cooldown)\nBetter sight : +20 aim, no aim penalty for squadsight shots, +10 vision=\nSummon Beast lvl 2 : Summon 2-3 chryssalids in addition to the faceless\nTrackig shot : Track a unit, if it moves, guaranted attack (2AP, 5 turn cooldown)\nAll seeing : Can see the whole map\nSummon Beast lvm 3 : Summon 1-2 bersekers in addition to the other summons\nBetter capture : Capture now grants some elerium, alloys and intel, with a chance of an elerium core (10%)\nRegarding the Chryssalid The chryssalids summoned by the hunter are player controlled, the chryssalids created by the cocoons are AI controlled They otherwise have the same stats as base game (can be configured)\n","permalink":"https://trneedaname.github.io/wiki-xcom/playable-chosen-reworked/","summary":"\u003cp\u003eThe \u003ca href=\"https://steamcommunity.com/sharedfiles/filedetails/?id=3010054920\"\u003ePlayable Chosen\u003c/a\u003e mod made by fireborn has issues with the abilities\u003c/p\u003e\n\u003cp\u003eThis mod aims to fix those issues and include LWOTC / CI support\nThe chosen uses the proficiency system.\u003c/p\u003e\n\u003ch2 id=\"hunter\"\u003eHunter\u003c/h2\u003e\n\u003cp\u003eThe hunter specialise in tracking and taking enemies out from afar.\nHe can also get in close with his pistol and grappling hook\u003c/p\u003e\n\u003ch3 id=\"skill-tree\"\u003eSkill tree\u003c/h3\u003e\n\u003ch4 id=\"sharpshooter\"\u003eSharpshooter\u003c/h4\u003e\n\u003cp\u003eSpecialise into shooting enemmies from afar, the bigger, the better.\u003c/p\u003e\n\u003ch4 id=\"tracker\"\u003eTracker\u003c/h4\u003e\n\u003cp\u003eSpecialise into finding enemies and tagging their weak points for hunting later.\u003c/p\u003e","title":"Playable Chosen Reworked"},{"content":"My Playable Codex mod is riddled with balancing \u0026amp; general issues, so I plan to remake it, starting by a complete rework of the skill tree. They\u0026rsquo;ll focus on a gimmick of the unit, making that particularity better and more fun to use.\nThe class isn\u0026rsquo;t balanced for vanilla at all, but it can be made so\nSkill tree The trees as they are now (2025-12-27) are not really thought out, the new ones are as follow :\nTeleporter Focuses on teleport, damage mitigation and other tricks to redirect damages\nCodex Factory Focuses on cloning, overwhelming enemies with sheer numbers\nRun n gun Focuses on straight shooting and taking out enemies with it\u0026rsquo;s precision rifle\nEach new abilities will have a footnote detailing how it works\nRank Teleporter Codex Factory Run n Gun Squaddie Teleport Clone Mechanical Advantages1 Corporal Emergency Teleport2 Cloning improvment3 Psionic Bomb4 Sergeant Swap5 Clone buff6 Blast Padding Lieutenant Teleporting buff7 Clone subroutine8 Run and Teleport Captain Enhanced tech9 Clone decoy10 Shadowstep Major Damage negation11 Non damaging clones12 Emergency Psionic overload13 Colonel Tele Attack14 Unlimited clones15 Precision shot16 AWC perks Rank Teleporter Codex Factory Run n Gun Squaddie Corporal Shadowing shroud17 Dead clone maker18 Long Watch Sergeant Healing teleport19 Clone specialisation20 Death from above Lieutenant Clone regeneration21 Repositioning teleport22 Captain Teleporting bullet23 Major Colonel Teleport out24 Specialist of death25 Serial Units Decoys : Work like a mimic beacon Standard Clones : Half HP (unless the codex has Cloning improvment or Non Damaging Clones), other stats are the same, they can create clones themselves but cannot use any special abilities (inherit blast padding and other such abilities if the original has them) Enhanced clones : 70 aim, 2 armour, 15HP, 15 mobility, 10 dodge, can create lesser clones and use a lesser form of psionic rift. Due to the amount, they don\u0026rsquo;t have any real guns and can only use a \u0026ldquo;codex gun\u0026rdquo; that deal 6 damage Lesser clones : 8HP, 18 mobility, 40 dodge, 90 aim they can use a minor form of teleport, the gun they have does 4 damage Tech The mod introduces new techs aimed at buffing the codex\u0026rsquo;s clones and teleport\nTeleporting Matter Over Distance Improvement Allows the enhanced clones \u0026amp; lesser clones to get a better weapons due to a better understanding of matter formation over long distance, +4 damage, +10 aim, +1 pierce. The main codex\u0026rsquo;s weapon get +3 damage, 5 aim and 1 shred\nClones matter dispersion The clones get a shroud using their very own matter, +10 dodge, +1 armour The main codex get +15 dodge and +3 HP\nThe codex gain immunity to poison, mind control, fire and other biological attacks\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nFree action teleporting the unit in a small (5x5) range (4 turn cooldown)\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nMake each cloning only consume 25% of the health\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nA rift that unload all weapons in its radius, if units stay in the rift, they take damage\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nSwap places with either an ally or enemy (1AP, 2 turn cooldown, does not end the turn, does not require line of sight)\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nEach clones get +15 aim, +1 mobility and +10 dodge, the clone also get 1 action point when being cloned\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nAfter teleporting, gain +10 aim, +5 crit, +3 mobility and+1 armour (passive)\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nCreate a free clone, 1AP, 3 turn cooldown, 3 charges\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nTeleporting has its cooldown reduced by half and its range increased, psionic rift also gets its cooldown reduced by 2, radius increased by 2 and damage increased by 4\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nThe codex create a decoy, taking 10% of its total health, every units is compeled to shoot at the decoy, the decoy has 15 health, 1 armour, cannot move or attack and dissapear after a turn, 2 use, 5 turn cooldown, 1AP, does not end the turn\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nTeleport briefly in another dimension, making the attack miss with a chance to redirect the attack (active, use the dodge stat with a base 50 chance, grant 20 dodge as well, 30% chance to redirect the damage to the enemy)\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nClones now don\u0026rsquo;t damage the codex (the decoy now takes 5% of health, rounded up)\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nHas a chance to desorient or stun a target, remove all ammo and makes the unit unable to move (4 turns cooldown, 1AP, end the turn, stun for 4 actions, desorient for 6, 50/50% chances for both)\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nTeleport near a unit (3x3 around), grant a single action point to attack said unit 3 times (gives 200% damage), get teleported back to the starting point (6 turn cooldown, 1AP, end turn)\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nThe codex create 5 enhanced clones in a 10x10 radius, they can each create 2 lesser clones, due to the strain, (2AP, 2 charges, 6 turn cooldown \u0026amp; the main codex is rendered stunned for 3 turns)\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nThe codex target an enemy, inflicting 200% damage, has a +50 chance to crit and cannot miss, (2 AP, 8 turn cooldown)\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nThe codex teleport into another dimension, it gains the \u0026ldquo;phantom\u0026rdquo; perk and the ability to get in shadow 2 times per mission\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nMake a free clone using a dead humanoid body (1AP, 3 turn cooldown, 4 charges, create a lesser clone)\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nEvery teleport gives +5 HP and a 2 turn regeneration\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nClones can have different loadouts, they can swap using an ability, each loadouts get additional abilities (2AP, sniper : long watch, steady aim, Lightning Hands, +20 aim, sniper \u0026amp; pistol / ranger : run and gun, implacable, rapid fire, +1 mobility, shotgun, grenadier : Biggest Booms, saturation fire, +1 armour, cannon, grenade launcher / specialist : Aid Protocol, Ever Vigilant, Gremlin heal, +1 mobility, codex rifle, gremlin) \u0026ndash; Addon with support for LWOTC / Proficiency\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nEvery clones get a passive regen of 2HP\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nOn kill, gain a free teleport (passive)\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nTake a shot guaranted to hit, (1AP, 2 ammo, 4 turn cooldown)\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nTarget an enemy unit, sending it to the shadow dimension, cannot target \u0026lsquo;boss\u0026rsquo; units or large ones (2AP, 6 turn cooldown, 2 charges)\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nTarget a unit, if it dies, it has a chance to become a clone, if the unit dies, the codex get another AP to target another unit again (active, 1AP, 3 turn cooldown after the chain is broken, 2 charges, create an enhanced clone)\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","permalink":"https://trneedaname.github.io/wiki-xcom/playable-codex-revamped/","summary":"\u003cp\u003eMy \u003ca href=\"https://steamcommunity.com/sharedfiles/filedetails/?id=2827187144\"\u003ePlayable Codex\u003c/a\u003e mod is riddled with balancing \u0026amp; general issues, so I plan to remake it, starting by a complete rework of the skill tree.\nThey\u0026rsquo;ll focus on a gimmick of the unit, making that particularity better and more fun to use.\u003c/p\u003e\n\u003cp\u003eThe class isn\u0026rsquo;t balanced for vanilla at all, but it can be made so\u003c/p\u003e\n\u003ch2 id=\"skill-tree\"\u003eSkill tree\u003c/h2\u003e\n\u003cp\u003eThe trees as they are now (2025-12-27) are not really thought out, the new ones are as follow :\u003c/p\u003e","title":"Playable Codex Revamped"},{"content":"Le Java, c\u0026rsquo;est quoi ? Le langage Java est compilé, ce qui veut dire que le code est transformé en un code intérmediaire (dans le cas du java un .class) qui est ensuite interpreté en code machine.\nLe Java est un langage objet.\nConvention Le java utilise le Camel Case pour nommer les variables et fonctions. Les fonctions et lignes longues doivent être découpés :\njava 1 2 3 maFonction(longExpression1, longExpression2, longExpression3, longExpression4, longExpression5); Accolades Le Java est sensible à la syntaxe mais utilise des accolades {} pour définir les blocs, contrairement à Python qui utilise l\u0026rsquo;indentation.\nToutes les conventions sont disponibles sur le site officiel Oracle\nLes types et variables Les différentes variables Les différents types de variables En java, les variables peuvent être initialisés de différentes façon.\nLa visibilité En java, le code est divisé en package (la partie UI / logique\u0026hellip;)\nTableau des modifiers1\nModifier Classe Paquet Sous classe Toutes les classes public Oui Oui Oui Oui protected Oui Oui Oui Non no modifier Oui Oui Non Non private Oui Non Non Non java 1 2 3 4 int maVariable = 0; int public maVariable = 0; int protected maVariable = 0; int private maVariable = 0; Les différents types Le java est un langage typé, ce qui veut dire que chaque variable doit indiquer son type.\njava 1 2 3 4 5 int monNombre = 0; String monTexte = \u0026#34;texte\u0026#34;; // Le type String doit avoir une majuscule, comme expliqué après boolean monBool = true; char monCharactere = \u0026#39;c\u0026#39;; float monNombreAVirgule = 0.0; Les types ne peuvent pas être redéfini sans casting explicite par le developpeur\nLes objets Le Java est orienté objet, ce qui signifie qu’il est possible d’encapsuler des concepts en objets.\nLe code si dessous est un objet avec les fonctions de bases\njava 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 public class Voiture { /* On utilise private pour rendre les \u0026#34;getters\u0026#34; et \u0026#34;setters\u0026#34; utiles, sinon on peut accéder au élement comme tel : voiture.age Ce n\u0026#39;est pas recommandé car les getters / setters peuvent avoir une certaine logique (pas de nombre en dessous de 1, le modèle doit avoir un certain nombre de charactères...) ,*/ private String modele; private int age; private String marque; // Un constructeur permet d\u0026#39;initialiser l\u0026#39;objet avec tout ou un certain nombre d\u0026#39;éléments public Voiture(String modele, int age, String marque) { // le \u0026#39;this.element\u0026#39; référence la classe // On pourrait donc mettre : // this.modele = toto; // Si dans le constructeur on met \u0026#39;toto\u0026#39; au lieu de modele this.modele = modele; this.age = age; this.marque = marque; } // Ici, le constructeur ne prend que 2 paramètres, l\u0026#39;age est initialisé automatiquement public Voiture(String modele, String marque) { this.modele = modele; this.age = 1; this.marque = marque; } // Renvoi l\u0026#39;élément de la classe public String getModele() { return modele; } public int getAge() { return age; } public String getMarque() { return marque; } public void setModele(String modele) { this.modele = modele; } public void setAge(int age) { this.age = age; } public void setMarque(String marque) { this.marque = marque; } // Une fonction très pratique en java est le \u0026#39;equals\u0026#39; qui vérifie si un objet est égale à une autre instance du même objet (avec des paramètres différents) /* L\u0026#39;utilisation de \u0026#39;@override\u0026#39; permet de redéfinir une fonction déja définit. Ne pas l\u0026#39;utiliser est possible mais l\u0026#39;utiliser est une bonne pratique : - Le compilateur vas check si la fonction existe dans la classe de base, si non, erreur de compilation */ // Tout les objets descende du primitif \u0026#39;Object\u0026#39; qui possède des fonctions \u0026#39;equals\u0026#39; et \u0026#39;toString\u0026#39; @Override public boolean equals(Object autreVoiture) { if (this == autreVoiture) { return true; } if (autreVoiture == null) { return false; } // getClass renvoi la classe if (getClass() != autreVoiture.getClass()) { return false; } // On fait du upcast de Object (le type le plus primitif) vers notre type Voiture Voiture autre = (Voiture) autreVoiture; if (modele == null) { if (autre.modele != null) return false; } else if (!modele.equals(autre.modele)) { return false; } if (this.age != autre.age) return false; if (marque == null) { if (autre.marque != null) return false; } else if (!marque.equals(autre.marque)) { return false; } return true; } // Le equals() ce dessus est correct, mais en pratique on utilise plutôt ce genre de code /* // On import la classe Objects qui permet de caster // Les imports sont TOUJOURS en haut du code (comme en python ou autre) import java.util.Objects; @Override public boolean equals(Object objet) { if (this == objet) return true; if (!(objet instanceof Voiture)) return false; Voiture autre = (Voiture) objet; return age == autre.age \u0026amp;\u0026amp; Objects.equals(modele, autre.modele) \u0026amp;\u0026amp; Objects.equals(marque, autre.marque); }*/ @Override public String toString() { return \u0026#34;La voiture \u0026#34; + getMarque() + \u0026#34; à un \u0026#34; + getAge() + \u0026#34; ans et est de modèle \u0026#34; + getModele(); } // Le main est la classe qui est executé, comme le main en python public static void main(String[] args) { Voiture v1 = new Voiture(\u0026#34;Classe A\u0026#34;, \u0026#34;Mercedes\u0026#34;); Voiture v2 = new Voiture(\u0026#34;Capture\u0026#34;, \u0026#34;Renault\u0026#34;); System.out.println(v1.toString()); System.out.println(v2.toString()); System.out.println(v1.equals(v2)); } } Le POO permet de donner à des objets des fonctions spécifiques\njava 1 2 3 4 5 6 7 // Dans le même fichier public void vieillir() { age++; } public boolean estAncienne() { return age \u0026gt; 10; } L\u0026rsquo;héritage Un objet peut hériter d\u0026rsquo;un autre\njava 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 // le extends est UNIQUE // Un objet ne peut avoir q\u0026#39;un seul objet père public class VoitureElectrique extends Voiture { private int autonomie; public int getAutonomie() { return autonomie; } public void setAutonomie(int autonomie) { this.autonomie = autonomie; } // L\u0026#39;utilisation du \u0026#39;super\u0026#39; appel la fonction de la classe de base, ici, voiture public VoitureElectrique(String modele, int age, String marque, int autonomie) { super(modele, age, marque); // idem que faire appel au constructeur de \u0026#39;voiture\u0026#39; this.autonomie = autonomie; } public VoitureElectrique(String modele, String marque, int autonomie) { super(modele, 1, marque); this.autonomie = autonomie; } @Override public boolean equals(Object objet) { if (!super.equals(objet)) { return false; } if (!(objet instanceof VoitureElectrique)) { return false; } VoitureElectrique autre = (VoitureElectrique) objet; return autonomie == autre.autonomie; } @Override public void vieillir() { super.vieillir(); autonomie -= 10; // perte de capacité batterie if (autonomie \u0026lt; 0) { autonomie = 0; } } public void rouler(int kilometres) { int consommation = kilometres / 5; // ex: 5 km = 1 km d\u0026#39;autonomie autonomie -= consommation; if (autonomie \u0026lt; 0) { autonomie = 0; } } public void recharger(int km) { autonomie += km; } public boolean batterieFaible() { return autonomie \u0026lt; 50; } } Redéfinir un type Le java étant un langage typé, la redéfinition des types est plus compliqué qu\u0026rsquo;en python ou JS\nCertain type ont des fonctions spécifique, comme parseInt(String) pour le type int\nAttention La documentation pour cette fonction est tel :\nQuote Parses the string argument as a signed decimal integer. The characters in the string must all be decimal digits, except that the first character may be an ASCII minus sign \u0026lsquo;-\u0026rsquo; (\u0026rsquo;\\u002D\u0026rsquo;) to indicate a negative value or an ASCII plus sign \u0026lsquo;+\u0026rsquo; (\u0026rsquo;\\u002B\u0026rsquo;) to indicate a positive value. The resulting integer value is returned, exactly as if the argument and the radix 10 were given as arguments to the parseInt(java.lang.String, int) method.\nLien vers la documentation Java\nCela veut dire que seul des nombres (le premier caractère peut être un + ou un - pour indiquer une valeur négative ou positive) peuvent être dans le string, sinon une exception est levé.\njava 1 2 3 4 5 6 7 8 class Exemple { public static void main(String[] args) { String s = \u0026#34;-20\u0026#34;; // On utilise Integer car c\u0026#39;est la classe primitive des int int i = Integer.parseInt(s); System.out.println(i); } } : Ce tableau provient de la documentation Java\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","permalink":"https://trneedaname.github.io/fiches/java/","summary":"\u003ch2 id=\"le-java-c-est-quoi\"\u003eLe Java, c\u0026rsquo;est quoi ?\u003c/h2\u003e\n\u003cp\u003eLe langage \u003ccode\u003eJava\u003c/code\u003e est compilé, ce qui veut dire que le code est transformé en un code intérmediaire (dans le cas du java un \u003ccode\u003e.class\u003c/code\u003e) qui est ensuite interpreté en code machine.\u003c/p\u003e\n\u003cp\u003eLe Java est un langage \u003cstrong\u003eobjet\u003c/strong\u003e.\u003c/p\u003e\n\n    \u003cdiv class=\"admonition memo\"\u003e\n      \u003cdiv class=\"admonition-header\"\u003e\u003csvg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 384 512\"\u003e\u003cpath d=\"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM112 256l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"/\u003e\u003c/svg\u003e\n        \u003cspan\u003eConvention\u003c/span\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"admonition-content\"\u003e\n        \u003cp\u003eLe java utilise le \u003ca href=\"https://fr.wikipedia.org/wiki/Camel_case\"\u003eCamel Case\u003c/a\u003e pour nommer les variables et fonctions.\nLes fonctions et lignes longues doivent être découpés :\u003c/p\u003e","title":"java"},{"content":"Les sous-réseaux, c\u0026rsquo;est quoi Info Un sous-réseaux permet de découper un réseaux en plusieurs petit réseaux.\nOn utilise la partie hôte pour les calculer.\nPar exemple, le réseau 192.168.13.0/24 utilisera le dernière octet pour les sous-réseaux.\nLes formules Nombre de sous-réseaux Calcul 2^n ou n est le nombre de bits à utiliser (si on veut 7 sous réseaux, n fera donc 4 car 2³=8 ce qui est trop petit)\nNombre de bits hôte Calcul 32 - réseaux, si on à une adresse en 24, le nombre de bits utilisable pour l\u0026rsquo;hôte sont 32-24, donc 8\nNombre d\u0026rsquo;hôte utilisable Calcul Le nombre d\u0026rsquo;hôte utilisable est calculr comme qui suit : 2^n-2 ou n est le nombre de bits de l\u0026rsquo;hôte Les 2 adresses à retirer sont l\u0026rsquo;adresse de réseau et celle de broadcast\nExemple Calcul de sous-réseaux adresse 221.34.32.0/24 On veut 6 sous réseaux\nOn trouve combien de bits on utilise Il faut 2^3 bits car 2^3=8 (2^2 est trop petit) Le masque final sera donc : 24+3=27\nDonc le masque en CIDR sera : 255.255.255.224 (24 en binaire donne 1110 0000)\nCalcul du nombres de sous-réseaux en fonction du nombre d\u0026rsquo;hôtes adresse : 167.83.0.0/16 On veut le nombre maximal de sous-réseaux pouvant acceuilir 1150 hôtes\nOn décompose le nombre d\u0026rsquo;hôtes en binaire 1150 = 0100 0111 1110 (1024+64+32+16+8+4+2) Il faut donc 11 bits pour calculer ce nombre d\u0026rsquo;hôtes\nOn sait que le nombre de bits disponible est de 16 (32 - 16) 16 - 11 = 5\nLe nombre de sous réseaux maximal est donc 5\n","permalink":"https://trneedaname.github.io/fiches/sous-reseaux/","summary":"\u003ch2 id=\"les-sous-réseaux-c-est-quoi\"\u003eLes sous-réseaux, c\u0026rsquo;est quoi\u003c/h2\u003e\n\n            \u003clink rel=\"stylesheet\" href=\"/css/vendors/admonitions.8594290f339d32b2f8b5f41037b938fae025295031470fae1aa647a2fac468a9.css\" integrity=\"sha256-hZQpDzOdMrL4tfQQN7k4\u0026#43;uAlKVAxRw\u0026#43;uGqZHovrEaKk=\" crossorigin=\"anonymous\"\u003e\n    \u003cdiv class=\"admonition info\"\u003e\n      \u003cdiv class=\"admonition-header\"\u003e\u003csvg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003cpath d=\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM216 336l24 0 0-64-24 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l48 0c13.3 0 24 10.7 24 24l0 88 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-80 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zm40-208a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"/\u003e\u003c/svg\u003e\n        \u003cspan\u003eInfo\u003c/span\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"admonition-content\"\u003e\n        \u003cp\u003eUn sous-réseaux permet de découper un réseaux en plusieurs petit réseaux.\u003c/p\u003e","title":"sous-reseaux"},{"content":"Les IP, c\u0026rsquo;est quoi ? Une IP c\u0026rsquo;est une adresse qui permet de référencer une machine connecté à Internet.\nIl y a deux types d\u0026rsquo;adresses, IP v4 et IP v6\nLes IP v4 sont écrites en décimales sur 4 octets, les IP v6 sont en hexadécimales sur 6 octets.\nIP v4 Les ID Les adresses IP v4 sont découpés en 2 parties :\nID réseau ID hôte L\u0026rsquo;id de réseau permet de connaître le réseau auquel la machine est connecté, l\u0026rsquo;id d\u0026rsquo;hôte permet de connaître la machine\nImportant Sans le masque il est impossible de savoir ou l\u0026rsquo;adresse réseau finit !\nA savoir Il y a 2 adresses qui ne peuvent être attribués, 0 et 255\n0 est l\u0026rsquo;adresse de réseau 255 est l\u0026rsquo;adresse de broadcast Le nombre d\u0026rsquo;adresse total est donc 2^n - 1 ou n est le masque en notation bits (aussi appelé CIDR)\nLe masque Le masque est sur 4 octets et s\u0026rsquo;écrit en décimal ou bits Il permet de savoir ou l\u0026rsquo;id de réseaux finit (tout les bits à 1 sur le masque sont le réseau)\nExemple 143.177.222.11/16 définit le masque comme faisant 16 bits, donc 2 octets.\nOn peut aussi écrire le masque comme faisant 255.255.0.0\nL\u0026rsquo;id de réseau est donc 143.177, l\u0026rsquo;id d\u0026rsquo;hôte est donc 222.11\nLes sous réseaux Pour les sous réseaux, une fiche spéciale à été faite Sous Séseaux ","permalink":"https://trneedaname.github.io/fiches/ip/","summary":"\u003ch2 id=\"les-ip-c-est-quoi\"\u003eLes IP, c\u0026rsquo;est quoi ?\u003c/h2\u003e\n\u003cp\u003eUne IP c\u0026rsquo;est une adresse qui permet de référencer une machine connecté à Internet.\u003c/p\u003e\n\u003cp\u003eIl y a deux types d\u0026rsquo;adresses, \u003ccode\u003eIP v4\u003c/code\u003e et \u003ccode\u003eIP v6\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eLes \u003ccode\u003eIP v4\u003c/code\u003e sont écrites en décimales sur \u003ccode\u003e4\u003c/code\u003e octets, les \u003ccode\u003eIP v6\u003c/code\u003e sont en hexadécimales sur \u003ccode\u003e6\u003c/code\u003e octets.\u003c/p\u003e\n\u003ch2 id=\"ip-v4\"\u003eIP v4\u003c/h2\u003e\n\n    \u003cdiv class=\"admonition memo\"\u003e\n      \u003cdiv class=\"admonition-header\"\u003e\u003csvg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 384 512\"\u003e\u003cpath d=\"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM112 256l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"/\u003e\u003c/svg\u003e\n        \u003cspan\u003eLes ID\u003c/span\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"admonition-content\"\u003e\n        \u003cp\u003eLes adresses IP v4 sont découpés en 2 parties :\u003c/p\u003e","title":"IP"},{"content":"Le Bash, c’est quoi ? Le langage Bash (Bourne Again SHell) est un langage de script interprété par un terminal Unix/Linux. Il sert principalement à automatiser des tâches système, manipuler des fichiers, exécuter des commandes, etc.\nLe Bash est un language de programmation, mais en tant que tel il n\u0026rsquo;est pas très utile, il est principalement utilisé en conjonction avec des commandes qui permettent d\u0026rsquo;interagir avec le système.\nCes commandes (ainsi que le Shell) sont installé par défaut sur la plupart des distribution Linux.\nLe manuel Si vous utilisez une distribution Linux (ou WSL sur windows / une VM), la commande man va être très utile, man commande vous donne le manuel de la commande en question, ce qui est pratique (surtout pour les différents flags et autre fonctions)\ninfo La commande info est aussi utile mais plus complète (je recommande de lire les info sur emacs mais cela prend du temps à comprendre), elle est utilisé par plusieurs programme (tar, bash, emacs ainsi que de nombreuses commandes du standard GNU l\u0026rsquo;utilise en complément de man)\nConvention Les scripts Bash ont généralement l’extension .sh et commencent toujours par une ligne d’en-tête (appelée shebang) :\nPour executer le code Vous pouvez utiliser tout le Bash en ligne de commande (ligne par ligne), mais pour faire un fichier il faut utiliser la commande chmod +x mon_fichier.sh La commande chmod est expliqué ici\nbash 1 #!/bin/bash Les conventions recommandent :\nd’utiliser des minuscules pour les noms de variables et de fonctions de séparer les mots par des underscores _ : ma_variable, ma_fonction() Pas d\u0026rsquo;espaces entre les affectations : x=10 (et non x = 10). Attention Mettre des espaces entre les affectations casse le système d\u0026rsquo;affectation !\nLes variables bash 1 2 3 4 5 6 7 #!/bin/bash nom=\u0026#34;Jean\u0026#34; age=20 est_francais=true echo \u0026#34;Nom : $nom\u0026#34; echo \u0026#34;Âge : $age\u0026#34; echo \u0026#34;Est français : $est_francais\u0026#34; À savoir Pour utiliser une variable, on écrit $nom_variable Les variables sont toujours des chaînes de caractères en Bash, même si elles contiennent des nombres Les tableaux bash 1 2 3 4 5 animaux=(\u0026#34;chien\u0026#34; \u0026#34;chat\u0026#34; \u0026#34;poisson\u0026#34; \u0026#34;chameau\u0026#34;) echo \u0026#34;Premier animal : ${animaux[0]}\u0026#34; echo \u0026#34;Tous les animaux : ${animaux[@]}\u0026#34; echo \u0026#34;Taille du tableau : ${#animaux}\u0026#34; echo \u0026#34;Nombre d\u0026#39;animaux : ${#animaux[@]}\u0026#34; À savoir Les indices commencent à 0. [@] permet d’afficher tous les éléments, # donne la taille du tableau.\nEntrées / sorties Les entrées Lire une valeur entrée par l’utilisateur avec read :\nbash 1 2 read -p \u0026#34;Quel est ton nom: \u0026#34; nom echo \u0026#34;Bonjour $nom !\u0026#34; Options utiles -p : n’ajoute pas de retour à la ligne -i : permet d\u0026rsquo;entrer une liste -d : continue jusqu\u0026rsquo;à ce que la lettre delimitante est lue (-d \u0026quot;i\u0026quot; par exemple) Les sorties Afficher un texte avec echo :\nbash 1 echo \u0026#34;Hello World !\u0026#34; Options utiles -n : n’ajoute pas de retour à la ligne -e : permet d’interpréter les caractères spéciaux comme \\n (nouvelle ligne) Les conditions bash 1 2 3 4 5 6 7 8 read -p \u0026#34;Quel est ton âge ? \u0026#34; age if [ \u0026#34;$age\u0026#34; -lt 18 ]; then echo \u0026#34;Tu es mineur.\u0026#34; elif [ \u0026#34;$age\u0026#34; -eq 18 ]; then echo \u0026#34;Tu viens d’avoir la majorité !\u0026#34; else echo \u0026#34;Tu es majeur.\u0026#34; fi À savoir Les crochets [ et ] entourent les conditions (avec espaces obligatoires) Les opérateurs numériques : -lt (\u0026lt;), -le (\u0026lt;=), -gt (\u0026gt;), -ge (\u0026gt;=), -eq (=), -ne (!=) Les chaînes de caractères : ==, !=, -z (vide), -n (non vide) Les boucles Boucle for bash 1 2 3 for i in {1..5}; do echo \u0026#34;Itération $i\u0026#34; done Info Les boucles utilise .. pour donner un début et une fin\n1..5 va de 1 à 5 (inclut)\nBoucle while bash 1 2 3 4 5 i=0 while [ $i -lt 5 ]; do echo \u0026#34;Valeur : $i\u0026#34; ((i++)) done Boucle until bash 1 2 3 4 5 i=0 until [ $i -ge 5 ]; do echo \u0026#34;Compteur : $i\u0026#34; ((i++)) done La différence entre while et until Page info de Bash sur les boucles\nEt oui, tout les manuels / pages info sont en anglais (à moins de changer le locale)\nLes fonctions bash 1 2 3 4 ma_fonction() { echo \u0026#34;Hello depuis une fonction !\u0026#34; } ma_fonction Avec paramètres bash 1 2 3 4 5 6 dire_bonjour() { nom=$1 echo \u0026#34;Bonjour $nom !\u0026#34; } dire_bonjour \u0026#34;Alice\u0026#34; dire_bonjour \u0026#34;Bob\u0026#34; Les cas (switch) bash 1 2 3 4 5 6 7 8 9 read -p \u0026#34;Entre une lettre : \u0026#34; lettre case $lettre in a|e|i|o|u|y) echo \u0026#34;C\u0026#39;est une voyelle\u0026#34; ;; ,*) echo \u0026#34;Pas une voyelle\u0026#34; ;; esac Décomposition Chaque motif est séparé par | ;; marque la fin d’un bloc * correspond au cas par défaut esac termine la structure Les tests de fichiers bash 1 2 3 4 5 6 fichier=\u0026#34;test.txt\u0026#34; if [ -f \u0026#34;$fichier\u0026#34; ]; then echo \u0026#34;Le fichier existe.\u0026#34; else echo \u0026#34;Le fichier n\u0026#39;existe pas.\u0026#34; fi Options utiles -f : fichier régulier -d : dossier -e : existe -r, -w, -x : lisible, modifiable, exécutable Piping et redirections Les pipes (|) permettent d’envoyer la sortie d’une commande comme entrée d’une autre commande. Les redirections (\u0026gt;, \u0026gt;\u0026gt;, \u0026lt;) permettent de manipuler les flux d’entrée/sortie.\nbash 1 2 3 4 5 6 7 8 9 # Exemple simple : envoyer la sortie de `ls` à `grep` # ls permet de lister tout les fichiers d\u0026#39;un dossier ls | grep \u0026#34;.sh\u0026#34; # Rediriger la sortie vers un fichier (écrase le contenue) echo \u0026#34;Bonjour\u0026#34; \u0026gt; fichier.txt # Ajouter sans écraser echo \u0026#34;Encore une ligne\u0026#34; \u0026gt;\u0026gt; fichier.txt # Lire depuis un fichier, équivalent à ~cat fichier.txt~ cat \u0026lt; fichier.txt Décomposition | : utilise la sortie d\u0026rsquo;une commande comme l\u0026rsquo;entrée d\u0026rsquo;une autre \u0026gt; : écrit dans un fichier (écrase) \u0026gt;\u0026gt; : ajoute à un fichier \u0026lt; : lit à partir d’un fichier Commandes utiles en ligne de commande grep grep cherche du texte dans un fichier ou dans la sortie d’une commande.\nbash 1 2 3 4 grep \u0026#34;chien\u0026#34; animaux.txt # cherche les lignes contenant \u0026#34;chien\u0026#34; ls | grep \u0026#34;.sh\u0026#34; # filtre uniquement les fichiers .sh grep -i \u0026#34;bonjour\u0026#34; fichier.txt # ignore la casse grep -r \u0026#34;maFonction\u0026#34; ./src # recherche récursive dans un dossier Attention La fonction grep permet d\u0026rsquo;utiliser des patternes Regex.\nLes bases du Regex Les classes de caractère [abc] : un caractère, soit a soit b soit c [^abc] : un caractère, sauf a, b ou c [a-c] : un caractère de a à c [^a-c] : un caractère, sauf de a à c [0-9 : un nombre (aussi possible d\u0026rsquo;utiliser \\d) [a-cA-C] : un caractère de a à c ou A à C Il y a aussi les classes de caractères UNIX\n[[:alnum:]]: tout les caractères (équivalent à [0-9A-Za-z]) [[:alpha]] : tout les caractères (équivalent à [A-Za-z) [[:digit:]] : tout les nombres (équivalent à [0-9]) [[:lower:]] \u0026amp; [[:upper:]] tout les caractères en minuscules et majuscules Quantité Tout les quantificateurs supportent les classes de caractère\na? : zero ou un a a* : zero ou plusieurs a a+ : un ou plusieurs a a{4} : exactement 4 a a{4,} : 4 ou plus de a a{1,4} : entre 1 et 4 a Séquences spéciales Ces séquences permettent de définir des concepts et caractères non commun\n. : n\u0026rsquo;importe quel caractère unique \\s : les espaces \\S : les non espaces \\d : les nombres \\D : les non nombres R : les retour à la lignes Pour plus d\u0026rsquo;info, allez sur quickref : Regex\ntr Change ou modifie les caractères (supporte les classes de caractères UNIX [:alpha:] / [:alnum:]\u0026hellip;).\nbash 1 echo \u0026#34;toto\u0026#34; | tr o 8 # renvoi t8t8 Il est possible d\u0026rsquo;utiliser une partie des classes UNIX\nshell 1 echo \u0026#34;La commande tr permet de changer du texte\u0026#34; | tr [:lower:] [:upper:] # renvoi \u0026#34;lA COMMANDE TR PERMET DE CHANGER DU TEXTE\u0026#34; cut cut découpe les lignes selon un délimiteur.\nbash 1 cat data.csv | cut -d \u0026#34;,\u0026#34; -f 1 # affiche la première colonne Décomposition -d : donne le délimiteur à utiliser -f : quel field(s) à renvoyer (peut être une liste) Exemple bash 1 2 echo \u0026#34;ceci,est,un,fichier,csv\u0026#34; \u0026gt; file.csv cat file.csv | cut -d \u0026#34;,\u0026#34; -f 1,2,3 Résultat ceci,est,un\nsort Trie les lignes d’un fichier ou d’une commande.\nbash 1 2 3 sort noms.txt # tri alphabétique sort -n notes.txt # tri numérique sort -r noms.txt # tri inverse uniq Supprime les doublons (souvent combiné avec sort).\nbash 1 sort noms.txt | uniq wc Compte le nombre de lignes, mots, ou caractères.\nbash 1 2 3 wc -l fichier.txt # lignes wc -w fichier.txt # mots wc -c fichier.txt # caractères tails Renvoi les dernière ligne(s) d\u0026rsquo;un fichier\nbash 1 tail -n 1 fichier.txt # lignes head Renvoi les première ligne(s) d\u0026rsquo;un fichier\nbash 1 head -n 1 fichier.txt awk Permet de manipuler et formater des colonnes (langage de traitement de texte).\nbash 1 2 awk \u0026#39;{print $1, $3}\u0026#39; data.txt # affiche la 1re et 3e colonne awk -F, \u0026#39;{print $2}\u0026#39; data.csv # colonne 2 avec virgule comme séparateur sed Permet de rechercher et remplacer du texte. La commande sed supporte aussi le Regex.\nbash 1 2 sed \u0026#39;s/chat/chien/g\u0026#39; animaux.txt # remplace \u0026#34;chat\u0026#34; par \u0026#34;chien\u0026#34; sed -i \u0026#39;s/chien/loup/g\u0026#39; animaux.txt # remplace directement dans le fichier chmod La commande chmod permet de modifier les droits des fichiers, la syntaxe est comme tel\nbash 1 chmod [GROUPE][OPERATEUR][PERMISSIONS] [FICHIER] Operateurs Les opérateurs sont +, -, =\n+ : donne des permissions - : retire des permissions = : attribut des permissions différentes Groupes Les groupes sont : u, g, o, a\nu : l\u0026rsquo;utilisateur g : le groupe auquel l\u0026rsquo;utilisateur appartient o : les autres (pas dans le groupes) a : tout le monde Un seul groupe peut est owner du fichier\nPermissions Les permissions sont : r, w, x (on peut aussi utiliser l\u0026rsquo;octal, voir man chmod)\nr : lire le fichier w : écrire dans le fichier x : éxecute un fichier ou traverse un dossier bash 1 chmod u+r mon_fichier.txt Ommetre le groupe assume l\u0026rsquo;utilisateur\nbash 1 chmod +r mon_fichier.txt ","permalink":"https://trneedaname.github.io/fiches/bash/","summary":"\u003ch2 id=\"le-bash-c-est-quoi\"\u003eLe Bash, c’est quoi ?\u003c/h2\u003e\n\u003cp\u003eLe langage \u003ccode\u003eBash\u003c/code\u003e (Bourne Again SHell) est un langage de script interprété par un terminal Unix/Linux.\nIl sert principalement à automatiser des tâches système, manipuler des fichiers, exécuter des commandes, etc.\u003c/p\u003e\n\u003cp\u003eLe Bash est un language de programmation, mais en tant que tel il n\u0026rsquo;est pas très utile, il est principalement utilisé en conjonction avec des commandes qui permettent d\u0026rsquo;interagir avec le système.\u003c/p\u003e\n\u003cp\u003eCes commandes (ainsi que le Shell) sont installé par défaut sur la plupart des distribution Linux.\u003c/p\u003e","title":"Bash"},{"content":"The mod The goal of this mod is to allow any players the ability to create abilities using only configuration.\nThe config files Files The config files are as follows :\nXComAbilityCreatorEffects.ini XComAbilityCreatorMain.ini Explanation XComAbilityCreatorEffects This file lists all of the effects that can be used to create abilities.\nXComAbilityCreatorMain This file is the main config, where abilities are created.\n","permalink":"https://trneedaname.github.io/wiki-xcom/ability-creator/","summary":"\u003ch2 id=\"the-mod\"\u003eThe mod\u003c/h2\u003e\n\u003cp\u003eThe goal of this mod is to allow any players the ability to create abilities using only configuration.\u003c/p\u003e\n\u003ch2 id=\"the-config-files\"\u003eThe config files\u003c/h2\u003e\n\u003ch3 id=\"files\"\u003eFiles\u003c/h3\u003e\n\u003cp\u003eThe config files are as follows :\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eXComAbilityCreatorEffects.ini\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eXComAbilityCreatorMain.ini\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"explanation\"\u003eExplanation\u003c/h3\u003e\n\u003ch4 id=\"xcomabilitycreatoreffects\"\u003eXComAbilityCreatorEffects\u003c/h4\u003e\n\u003cp\u003eThis file lists all of the effects that can be used to create abilities.\u003c/p\u003e\n\u003ch4 id=\"xcomabilitycreatormain\"\u003eXComAbilityCreatorMain\u003c/h4\u003e\n\u003cp\u003eThis file is the main config, where abilities are created.\u003c/p\u003e","title":"Ability Creator"},{"content":"Le CSS, c\u0026rsquo;est quoi ? Le CSS1 est utilisé pour styliser les pages web. Il peut utiliser des variables et conditions.\ncss 1 2 3 element { attribut: valeur; } Ordre d\u0026rsquo;applications Les attributs utilise un ordre, par exemple font-family, font-style\u0026hellip;\nLe Cascading explique comment le CSS est appliqué.\nCascade css 1 2 3 4 5 6 7 8 /* Je sélectionne l\u0026#39;élément paragraphe */ p { color: red; /* Les couleurs peuvent être écrites en RGB / Hex ou utilisant des noms pour les plus communs */ } /* Je redéfinie la couleur */ p { color: green; } ID et class Les id et class sont utilisés pour différenciés des élements spécifique.\ncss 1 2 3 4 5 6 7 p#souligne { text-decoration: underline; } p.important { color: red; font-weight: bolder; } Important La class et le id sont différents !\nL\u0026rsquo;id doit être unique dans la page (barre de navigation, titre du site, footer\u0026hellip;) alors qu\u0026rsquo;une class peut être utilisé plusieurs fois.\nCascading Style Sheet\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","permalink":"https://trneedaname.github.io/fiches/css/","summary":"\u003ch2 id=\"le-css-c-est-quoi\"\u003eLe CSS, c\u0026rsquo;est quoi ?\u003c/h2\u003e\n\u003cp\u003eLe \u003ccode\u003eCSS\u003c/code\u003e\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e est utilisé pour styliser les pages web.\nIl peut utiliser des variables et conditions.\u003c/p\u003e\n\n            \u003clink rel=\"stylesheet\" href=\"/css/vendors/admonitions.8594290f339d32b2f8b5f41037b938fae025295031470fae1aa647a2fac468a9.css\" integrity=\"sha256-hZQpDzOdMrL4tfQQN7k4\u0026#43;uAlKVAxRw\u0026#43;uGqZHovrEaKk=\" crossorigin=\"anonymous\"\u003e\n    \u003cdiv class=\"admonition code\"\u003e\n      \u003cdiv class=\"admonition-header\"\u003e\u003csvg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 512\"\u003e\u003cpath d=\"M392.8 1.2c-17-4.9-34.7 5-39.6 22l-128 448c-4.9 17 5 34.7 22 39.6s34.7-5 39.6-22l128-448c4.9-17-5-34.7-22-39.6zm80.6 120.1c-12.5 12.5-12.5 32.8 0 45.3L562.7 256l-89.4 89.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l112-112c12.5-12.5 12.5-32.8 0-45.3l-112-112c-12.5-12.5-32.8-12.5-45.3 0zm-306.7 0c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3l112 112c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256l89.4-89.4c12.5-12.5 12.5-32.8 0-45.3z\"/\u003e\u003c/svg\u003e\n        \u003cspan\u003ecss\u003c/span\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"admonition-content\"\u003e\n        \u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\"\u003e1\n\u003c/span\u003e\u003cspan class=\"lnt\"\u003e2\n\u003c/span\u003e\u003cspan class=\"lnt\"\u003e3\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-css\" data-lang=\"css\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003eelement\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eattribut\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003evaleur\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\u003ch2 id=\"ordre-d-applications\"\u003eOrdre d\u0026rsquo;applications\u003c/h2\u003e\n\u003cp\u003eLes attributs utilise un ordre, par exemple \u003ccode\u003efont-family\u003c/code\u003e, \u003ccode\u003efont-style\u003c/code\u003e\u0026hellip;\u003c/p\u003e","title":"css"},{"content":"The resistance in Xcom\n","permalink":"https://trneedaname.github.io/dev-xcom/the-resistance/","summary":"\u003cp\u003eThe resistance in Xcom\u003c/p\u003e","title":"The resistance"},{"content":"Who I am Hi \u0026#x1f44b; !\nI\u0026rsquo;m TRNEEDANAME, a french game dev / mod maker. This site is my blog, where you\u0026rsquo;ll find what I did and what I\u0026rsquo;m doing.\nWhat I use I use Linux as my main OS (NixOS to be precise), before that I used Arch for close to 4 years.\nAs my text editor / IDE / everything else (mostly), I use Emacs because I write in org-mode (I use a framework called Doom Emacs).\nThe file you\u0026rsquo;re reading is in fact a .org file !\nWhat I do I make mods for Project Zomboid and Xcom in my spare time, I started with Xcom 2 in ~2020, in 2024 I joined the Project Zomboid RP scene as a player, then admin / mod maker for different servers.\nI also play games, as of now I\u0026rsquo;m playing Satisfactory Factorio (it took over my life) and Project Zomboid.\nI enjoy writing wikis, as shown by my Militia wiki for Xcom 2 (still in the work as of now)\nOutside of things computer related, I do archery.\nTechnology used by this site The theme used is PaperMod with a nord inspired theme.\nThis site is made using Hugo with ox-hugo to convert from .org file to .md\nThe fonts used Titles : Noto Sans Display Main body text : Noto Sans Code / monospace : Berkely-Mono (with ligatures) The fonts are local as to allow for faster load time.\nContact me To contact me about this website, please send me an email to trneedaname@proton.me. Otherwise please fill a bug / feature report on the github repository of the mod / steam page.\nLicences All the content on this site (unless otherwise specified) is under GNU GPLv3 licence, all of the code is under the same licence.\nMy mods / content will never be behind a paywall, as this go against the core idea of programming for me, they will always be under MIT License.\n","permalink":"https://trneedaname.github.io/about/","summary":"\u003ch2 id=\"who-i-am\"\u003eWho I am\u003c/h2\u003e\n\u003cp\u003eHi \u0026#x1f44b; !\u003c/p\u003e\n\u003cp\u003eI\u0026rsquo;m TRNEEDANAME, a french game dev / mod maker.\nThis site is my blog, where you\u0026rsquo;ll find what I did and what I\u0026rsquo;m doing.\u003c/p\u003e\n\u003ch3 id=\"what-i-use\"\u003eWhat I use\u003c/h3\u003e\n\u003cp\u003eI use Linux as my main OS (NixOS to be precise), before that I used Arch for close to 4 years.\u003c/p\u003e\n\u003cp\u003eAs my text editor / IDE / everything else (mostly), I use \u003ca href=\"https://www.gnu.org/software/emacs/emacs.html\"\u003eEmacs\u003c/a\u003e because I write in org-mode (I use a framework called \u003ca href=\"https://github.com/doomemacs/doomemacs\"\u003eDoom Emacs\u003c/a\u003e).\u003c/p\u003e","title":"About"},{"content":"Le SQL est un language de requète de base de données.\nLe SQL c\u0026rsquo;est quoi ? Info Le Structured Query Language est un langage de requète de bases de données, chaque requête est exécuté à la suite.\nConvention En SQL on utilise le Snake Case, les objets sont au singulier, exemple :\nLes tables descriptives sont plus faciles à comprendre, les colonnes doivent être lisibles : date_achat et non dt_achat !\nImportant Chaque ordre d\u0026rsquo;une requète sur sa propre ligne !\nsql 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 CREATE TABLE IF NOT EXISTS utilisateur( id INTEGER PRIMARY KEY, nom TEXT, dateNaissance DATE, villeNaissance TEXT ); INSERT INTO utilisateur (nom, dateNaissance, villeNaissance) VALUES (\u0026#34;Jean\u0026#34;, \u0026#39;2000-01-01\u0026#39;, \u0026#34;Lille\u0026#34;), (\u0026#34;François\u0026#34;, \u0026#39;1980-05-07\u0026#39;, \u0026#34;Roubaix\u0026#34;); -- A ne pas faire ! SELECT * FROM utilisateur WHERE dateNaissance \u0026gt; \u0026#39;1990-01-01\u0026#39;; -- A faire ! SELECT * FROM utilisateur WHERE dateNaissance \u0026gt; \u0026#39;1990-01-01\u0026#39;; Les conventions sont définies par la norme ISO/IEC 9075.\nLes requètes simples SELECT Permet de sélectionner des valeurs dans une table.\nsql 1 2 3 4 5 6 7 8 9 10 11 12 13 14 CREATE TABLE IF NOT EXISTS utilisateur( id INTEGER PRIMARY KEY, nom TEXT, dateNaissance DATE, villeNaissance TEXT ); INSERT INTO utilisateur (nom, dateNaissance, villeNaissance) VALUES (\u0026#34;Jean\u0026#34;, \u0026#39;2000-01-01\u0026#39;, \u0026#34;Lille\u0026#34;), (\u0026#34;François\u0026#34;, \u0026#39;1980-05-07\u0026#39;, \u0026#34;Roubaix\u0026#34;), (\u0026#34;Thomas\u0026#34;, \u0026#39;1990-01-01\u0026#39;, \u0026#34;Paris\u0026#34;); SELECT * FROM utilisateur; WHERE Filtre les résultats selon une condition.\nsql 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 CREATE TABLE IF NOT EXISTS utilisateur( id INTEGER PRIMARY KEY, nom TEXT, dateNaissance DATE, villeNaissance TEXT ); INSERT INTO utilisateur (nom, dateNaissance, villeNaissance) VALUES (\u0026#34;Jean\u0026#34;, \u0026#39;2000-01-01\u0026#39;, \u0026#34;Lille\u0026#34;), (\u0026#34;François\u0026#34;, \u0026#39;1980-05-07\u0026#39;, \u0026#34;Roubaix\u0026#34;), (\u0026#34;Thomas\u0026#34;, \u0026#39;1990-01-01\u0026#39;, \u0026#34;Paris\u0026#34;); SELECT * FROM utilisateur WHERE dateNaissance \u0026gt; \u0026#39;1990-01-01\u0026#39;; Il est possible d\u0026rsquo;utiliser les opérateurs \u0026gt;, \u0026lt;, \u0026lt;= et \u0026gt;=.\nBETWEEN Permet de filtrer des valeurs comprises dans un intervalle.\nsql 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 CREATE TABLE IF NOT EXISTS utilisateur( id INTEGER PRIMARY KEY, nom TEXT, dateNaissance DATE, villeNaissance TEXT ); INSERT INTO utilisateur (nom, dateNaissance, villeNaissance) VALUES (\u0026#34;Jean\u0026#34;, \u0026#39;2000-01-01\u0026#39;, \u0026#34;Lille\u0026#34;), (\u0026#34;François\u0026#34;, \u0026#39;1980-05-07\u0026#39;, \u0026#34;Roubaix\u0026#34;), (\u0026#34;Thomas\u0026#34;, \u0026#39;1990-01-01\u0026#39;, \u0026#34;Paris\u0026#34;); SELECT * FROM utilisateur WHERE dateNaissance BETWEEN \u0026#39;1980-01-01\u0026#39; AND \u0026#39;2000-12-31\u0026#39;; Info BETWEEN inclut les bornes : ici, les utilisateurs nés le 1er janvier 1980 et le 31 décembre 2000 seront inclus.\nLIKE LIKE permet de rechercher des valeurs partiellement correspondantes.\n% : zéro ou plusieurs caractères _ : un seul caractère sql 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 CREATE TABLE IF NOT EXISTS utilisateur( id INTEGER PRIMARY KEY, nom TEXT, dateNaissance DATE, villeNaissance TEXT ); INSERT INTO utilisateur (nom, dateNaissance, villeNaissance) VALUES (\u0026#34;Jean\u0026#34;, \u0026#39;2000-01-01\u0026#39;, \u0026#34;Lille\u0026#34;), (\u0026#34;François\u0026#34;, \u0026#39;1980-05-07\u0026#39;, \u0026#34;Roubaix\u0026#34;), (\u0026#34;Thomas\u0026#34;, \u0026#39;1990-01-01\u0026#39;, \u0026#34;Paris\u0026#34;); SELECT * FROM utilisateur WHERE nom LIKE \u0026#39;%J%\u0026#39;; Cherche ici tous les utilisateurs dont le nom contient la lettre “J”.\nFonctions d’agrégation Les fonctions d’agrégation permettent de calculer des valeurs globales à partir de plusieurs lignes.\nCOUNT Compte le nombre d\u0026rsquo;éléments.\nA voir On utilise des ' et non des \u0026quot; car SQL peut interprété table comme une commande.\nsql 1 2 3 4 5 6 7 8 9 10 11 12 13 14 CREATE TABLE IF NOT EXISTS produit( id SERIAL PRIMARY KEY, nom TEXT, type_produit TEXT ); INSERT INTO produit (nom, type_produit) VALUES (\u0026#39;table\u0026#39;, \u0026#39;jardin\u0026#39;), (\u0026#39;chaise\u0026#39;, \u0026#39;jardin\u0026#39;), (\u0026#39;lampe\u0026#39;, \u0026#39;chambre\u0026#39;), (\u0026#39;parasol\u0026#39;, \u0026#39;jardin\u0026#39;); SELECT COUNT(*) AS \u0026#39;Quantité\u0026#39;, type_produit AS \u0026#39;Type\u0026#39; FROM produit GROUP BY type_produit, type_produit; AVG Calcule la moyenne d\u0026rsquo;une colonne.\nsql 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 CREATE TABLE IF NOT EXISTS course ( id SERIAL PRIMARY KEY, nom_coureur TEXT, nom_course TEXT, temps_course DOUBLE PRECISION, taille_course INTEGER ); INSERT INTO course (nom_coureur, nom_course, temps_course, taille_course) VALUES (\u0026#39;Jean\u0026#39;, \u0026#39;course du peuplier\u0026#39;, 32.04, 200), (\u0026#39;Charles\u0026#39;, \u0026#39;course de la musaraigne\u0026#39;, 10.41, 100), (\u0026#39;Thomas\u0026#39;, \u0026#39;course du chat\u0026#39;, 42.41, 200), (\u0026#39;Jeanne\u0026#39;, \u0026#39;course du berger\u0026#39;, 21.10, 200), (\u0026#39;Marc\u0026#39;, \u0026#39;course de Lille\u0026#39;, 15.86, 100), (\u0026#39;Patrique\u0026#39;, \u0026#39;course de pot\u0026#39;, 20.06, 100); SELECT AVG(temps_course) AS \u0026#34;temps moyen\u0026#34;, taille_course AS \u0026#34;distance\u0026#34; FROM course GROUP BY taille_course; MIN sql 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 CREATE TABLE IF NOT EXISTS course ( id SERIAL PRIMARY KEY, nom_coureur TEXT, nom_course TEXT, temps_course DOUBLE PRECISION, taille_course INTEGER ); INSERT INTO course (nom_coureur, nom_course, temps_course, taille_course) VALUES (\u0026#39;Jean\u0026#39;, \u0026#39;course du peuplier\u0026#39;, 32.04, 200), (\u0026#39;Charles\u0026#39;, \u0026#39;course de la musaraigne\u0026#39;, 10.41, 100), (\u0026#39;Thomas\u0026#39;, \u0026#39;course du chat\u0026#39;, 42.41, 200), (\u0026#39;Jeanne\u0026#39;, \u0026#39;course du berger\u0026#39;, 21.10, 200), (\u0026#39;Marc\u0026#39;, \u0026#39;course de Lille\u0026#39;, 15.86, 100), (\u0026#39;Patrique\u0026#39;, \u0026#39;course de pot\u0026#39;, 20.06, 100); SELECT nom_coureur AS \u0026#39;coureur\u0026#39;, taille_course AS \u0026#39;taille course\u0026#39;, MIN(temps_course) AS \u0026#39;temps minimum\u0026#39; FROM course GROUP BY taille_course; MAX sql 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 CREATE TABLE IF NOT EXISTS course ( id SERIAL PRIMARY KEY, nom_coureur TEXT, nom_course TEXT, temps_course DOUBLE PRECISION, taille_course INTEGER ); INSERT INTO course (nom_coureur, nom_course, temps_course, taille_course) VALUES (\u0026#39;Jean\u0026#39;, \u0026#39;course du peuplier\u0026#39;, 32.04, 200), (\u0026#39;Charles\u0026#39;, \u0026#39;course de la musaraigne\u0026#39;, 10.41, 100), (\u0026#39;Thomas\u0026#39;, \u0026#39;course du chat\u0026#39;, 42.41, 200), (\u0026#39;Jeanne\u0026#39;, \u0026#39;course du berger\u0026#39;, 21.10, 200), (\u0026#39;Marc\u0026#39;, \u0026#39;course de Lille\u0026#39;, 15.86, 100), (\u0026#39;Patrique\u0026#39;, \u0026#39;course de pot\u0026#39;, 20.06, 100); SELECT nom_coureur AS \u0026#39;coureur\u0026#39;, taille_course AS \u0026#39;taille course\u0026#39;, MAX(temps_course) AS \u0026#39;temps maxiumum\u0026#39; FROM course GROUP BY taille_course; Info La clause GROUP BY permet de regrouper les lignes selon une colonne, pour appliquer des fonctions d’agrégation sur chaque groupe.\nSUM sql 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 CREATE TABLE IF NOT EXISTS produit ( id INTEGER PRIMARY KEY, nom TEXT, nombre_produit INTEGER, type_produit TEXT ); INSERT INTO produit (nom, nombre_produit, type_produit) VALUES (\u0026#39;Baguette\u0026#39;, 10, \u0026#34;aliment\u0026#34;), (\u0026#39;Chaise\u0026#39;, 5, \u0026#34;objet\u0026#34;), (\u0026#39;Banane\u0026#39;, 25, \u0026#34;aliment\u0026#34;), (\u0026#39;Tasse\u0026#39;, 8, \u0026#34;aliment\u0026#34;); SELECT type_produit AS \u0026#39;type de produit\u0026#39;, SUM(nombre_produit) AS \u0026#39;nombre de produit\u0026#39; FROM produit GROUP BY type_produit; ORDER BY ORDER BY permet de trier les résultats.\nsql 1 2 3 4 5 6 7 8 9 10 11 12 13 CREATE TABLE IF NOT EXISTS utilisateur( id INTEGER PRIMARY KEY, nom TEXT, dateNaissance DATE, villeNaissance TEXT ); INSERT INTO utilisateur (nom, dateNaissance, villeNaissance) VALUES (\u0026#34;Jean\u0026#34;, \u0026#39;2000-01-01\u0026#39;, \u0026#34;Lille\u0026#34;), (\u0026#34;François\u0026#34;, \u0026#39;1980-05-07\u0026#39;, \u0026#34;Roubaix\u0026#34;), (\u0026#34;Thomas\u0026#34;, \u0026#39;1990-01-01\u0026#39;, \u0026#34;Paris\u0026#34;); SELECT * FROM utilisateur ORDER BY dateNaissance DESC; DESC : ordre décroissant ASC (par défaut) : ordre croissant Modification et suppression INSERT INTO Ajoute une ou plusieurs lignes dans une table.\nsql 1 2 3 4 5 6 7 8 9 10 11 12 13 CREATE TABLE IF NOT EXISTS utilisateur( id INTEGER PRIMARY KEY, nom TEXT, dateNaissance DATE, villeNaissance TEXT ); INSERT INTO utilisateur (nom, dateNaissance, villeNaissance) VALUES (\u0026#39;Lucie\u0026#39;, \u0026#39;1995-09-12\u0026#39;, \u0026#39;Marseille\u0026#39;), (\u0026#39;Paul\u0026#39;, \u0026#39;1988-03-22\u0026#39;, \u0026#39;Lyon\u0026#39;); SELECT * FROM utilisateur; Info Il est possible d’insérer plusieurs lignes à la fois avec une seule commande.\nUPDATE Modifie des valeurs existantes.\nsql 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 CREATE TABLE IF NOT EXISTS utilisateur( id INTEGER PRIMARY KEY, nom TEXT, dateNaissance DATE, villeNaissance TEXT ); INSERT INTO utilisateur (nom, dateNaissance, villeNaissance) VALUES (\u0026#34;Jean\u0026#34;, \u0026#39;2000-01-01\u0026#39;, \u0026#34;Lille\u0026#34;), (\u0026#34;François\u0026#34;, \u0026#39;1980-05-07\u0026#39;, \u0026#34;Roubaix\u0026#34;), (\u0026#34;Thomas\u0026#34;, \u0026#39;1990-01-01\u0026#39;, \u0026#34;Paris\u0026#34;); UPDATE utilisateur SET villeNaissance = \u0026#39;Bordeaux\u0026#39; WHERE nom = \u0026#39;Jean\u0026#39;; SELECT * FROM utilisateur; Important Toujours utiliser une clause WHERE, sinon toutes les lignes seront modifiées.\nDELETE Supprime des lignes de la table.\nAttention Il est recommandé de faire un SELECT avant de faire un DELETE. Il est aussi possible de faire une TRANSACTION\nsql 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 CREATE TABLE IF NOT EXISTS utilisateur( id INTEGER PRIMARY KEY, nom TEXT, dateNaissance DATE, villeNaissance TEXT ); INSERT INTO utilisateur (nom, dateNaissance, villeNaissance) VALUES (\u0026#34;Jean\u0026#34;, \u0026#39;2000-01-01\u0026#39;, \u0026#34;Lille\u0026#34;), (\u0026#34;François\u0026#34;, \u0026#39;1980-05-07\u0026#39;, \u0026#34;Roubaix\u0026#34;), (\u0026#34;Thomas\u0026#34;, \u0026#39;1990-01-01\u0026#39;, \u0026#34;Paris\u0026#34;); BEGIN TRANSACTION; DELETE FROM utilisateur WHERE nom = \u0026#39;Jean\u0026#39;; ROLLBACK; SELECT * FROM utilisateur; Aucun changement de la base !\nSupprime l’utilisateur “François” La deuxième requête affiche la table mise à jour sql 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 CREATE TABLE IF NOT EXISTS utilisateur( id INTEGER PRIMARY KEY, nom TEXT, dateNaissance DATE, villeNaissance TEXT ); INSERT INTO utilisateur (nom, dateNaissance, villeNaissance) VALUES (\u0026#34;Jean\u0026#34;, \u0026#39;2000-01-01\u0026#39;, \u0026#34;Lille\u0026#34;), (\u0026#34;François\u0026#34;, \u0026#39;1980-05-07\u0026#39;, \u0026#34;Roubaix\u0026#34;), (\u0026#34;Thomas\u0026#34;, \u0026#39;1990-01-01\u0026#39;, \u0026#34;Paris\u0026#34;); DELETE FROM utilisateur WHERE nom = \u0026#39;François\u0026#39;; SELECT * FROM utilisateur; Les jointures Info Les jointures servent à relier les données de plusieurs tables grâce à des colonnes communes (souvent des identifiants).\nINNER JOIN On retourne seulement les lignes correspondantes dans les deux tables\nsql 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 CREATE TABLE IF NOT EXISTS utilisateur( id INTEGER PRIMARY KEY, nom TEXT ); CREATE TABLE IF NOT EXISTS commande( id INTEGER PRIMARY KEY, utilisateur_id INTEGER, produit TEXT, nombre_produit INTERGER, FOREIGN KEY(utilisateur_id) REFERENCES utilisateur(id) ); INSERT INTO utilisateur (nom) VALUES (\u0026#39;Jean\u0026#39;), (\u0026#39;François\u0026#39;), (\u0026#34;Thomas\u0026#34;); INSERT INTO commande (utilisateur_id, produit, nombre_produit) VALUES (1, \u0026#39;Chaise\u0026#39;, 4), (2, \u0026#39;Table\u0026#39;, 1); -- INNER JOIN : uniquement les utilisateurs ayant une commande SELECT u.nom, c.produit, c.nombre_produit FROM utilisateur AS u INNER JOIN commande AS c ON c.utilisateur_id = u.id; LEFT JOIN On retourne toutes les lignes de la table de gauche et droite qui correspondent.\nsql 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 CREATE TABLE IF NOT EXISTS utilisateur( id INTEGER PRIMARY KEY, nom TEXT ); CREATE TABLE IF NOT EXISTS commande( id INTEGER PRIMARY KEY, utilisateur_id INTEGER, produit TEXT, nombre_produit INTERGER, FOREIGN KEY(utilisateur_id) REFERENCES utilisateur(id) ); INSERT INTO utilisateur (nom) VALUES (\u0026#39;Jean\u0026#39;), (\u0026#39;François\u0026#39;), (\u0026#34;Thomas\u0026#34;); INSERT INTO commande (utilisateur_id, produit, nombre_produit) VALUES (1, \u0026#39;Chaise\u0026#39;, 4), (2, \u0026#39;Table\u0026#39;, 1); SELECT u.nom, c.produit FROM utilisateur AS u LEFT JOIN commande AS c ON c.utilisateur_id = u.id; RIGHT JOIN On retourne toutes les lignes de la table de droite.\nsql 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 CREATE TABLE IF NOT EXISTS utilisateur( id INTEGER PRIMARY KEY, nom TEXT ); CREATE TABLE IF NOT EXISTS commande( id INTEGER PRIMARY KEY, utilisateur_id INTEGER, produit TEXT, nombre_produit INTERGER, FOREIGN KEY(utilisateur_id) REFERENCES utilisateur(id) ); INSERT INTO utilisateur (nom) VALUES (\u0026#39;Jean\u0026#39;), (\u0026#39;François\u0026#39;), (\u0026#34;Thomas\u0026#34;); INSERT INTO commande (utilisateur_id, produit, nombre_produit) VALUES (1, \u0026#39;Chaise\u0026#39;, 4), (2, \u0026#39;Table\u0026#39;, 1); SELECT u.nom, c.produit FROM utilisateur AS u RIGHT JOIN commande AS c ON c.utilisateur_id = u.id; Memo Dans une jointure, utiliser des alias (ici u et c) rend le code plus lisible. Toujours écrire les mots-clés SQL en majuscules : SELECT, FROM, JOIN, WHERE, etc.\n","permalink":"https://trneedaname.github.io/fiches/sql/","summary":"\u003cp\u003eLe SQL est un language de requète de base de données.\u003c/p\u003e","title":"SQL"},{"content":"Les exercices de javascript.\nRetour au cours Le cours peut se trouver ici : Cours Fichier CSS Les styles appliqués aux fichiers HTML/JS.\ncss 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 /* ===================== Body ===================== */ body { margin: 0; font-family: Arial, sans-serif; } /* ===================== Title ===================== */ h1 { text-align: center; margin: 20px 0; } /* ===================== Lists ===================== */ li { list-style: upper-roman; } /* ===================== Text styles ===================== */ .type { color: red; font-weight: bold; } .name { color: green; font-weight: bold; } /* ===================== Navigation ===================== */ nav { display: flex; background-color: #333; padding: 10px; } nav a { flex: 1; display: flex; justify-content: center; align-items: center; text-decoration: none; color: white; font-weight: bold; padding: 15px 0; } nav a:hover { color: #ffcc00; } /* ===================== Output ===================== */ #output { margin-top: 20px; } Fichiers JS Exercice 1 – Prompt utilisateur js 1 2 3 4 5 6 // Récupère le paragraphe let pa = document.getElementById(\u0026#34;name\u0026#34;); // Demande le nom de l\u0026#39;utilisateur let name = prompt(\u0026#34;User name : \u0026#34;); // Affiche le nom dans le paragraphe pa.textContent += name; Exercice 2 – Types de variables js 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 // Déclaration des variables let num = 15; let num2 = 3.14; let txt = \u0026#34;letiable\u0026#34;; let bool = false; let no_init; let nulle = null; // Regroupe dans un objet pour itérer let variables = { num, num2, txt, bool, no_init, nulle }; // Récupère la zone de sortie let output = document.getElementById(\u0026#34;output\u0026#34;); // Fonction pour afficher chaque type for (let name in variables) { let type = (variables[name] === null) ? \u0026#34;null\u0026#34; : typeof variables[name]; let p = document.createElement(\u0026#34;p\u0026#34;); p.innerHTML = `La variable \u0026lt;span class=\u0026#39;name\u0026#39;\u0026gt;${name}\u0026lt;/span\u0026gt; est de type \u0026lt;span class=\u0026#39;type\u0026#39;\u0026gt;${type}\u0026lt;/span\u0026gt;`; output.appendChild(p); } Question n°1 Les types principaux : number, string, boolean\nQuestion n°2 Les variables non initialisées sont undefined.\nExercice 3 – Addition / concaténation js 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 // Variables let nb = 15; let nb_txt = \u0026#34;10\u0026#34;; let nb_parse = parseInt(nb_txt); // Calcul avant conversion let somme = nb + nb_txt; // Récupère la zone de sortie let output = document.getElementById(\u0026#34;output\u0026#34;); // Helper pour ajouter une ligne function addLine(text) { let p = document.createElement(\u0026#34;p\u0026#34;); p.innerHTML = text; output.appendChild(p); } // Affichage étape par étape addLine(`Premier nombre : \u0026lt;span class=\u0026#39;type\u0026#39;\u0026gt;${nb}\u0026lt;/span\u0026gt;`); addLine(`Deuxième nombre (string) : \u0026lt;span class=\u0026#39;type\u0026#39;\u0026gt;${nb_txt}\u0026lt;/span\u0026gt;`); addLine(`Après parsing : \u0026lt;span class=\u0026#39;type\u0026#39;\u0026gt;${nb_parse}\u0026lt;/span\u0026gt;`); addLine(`Résultat avant conversion : \u0026lt;span class=\u0026#39;type\u0026#39;\u0026gt;${somme}\u0026lt;/span\u0026gt;`); // Conversion et nouvelle addition somme = nb + nb_parse; addLine(`Résultat après conversion : \u0026lt;span class=\u0026#39;type\u0026#39;\u0026gt;${somme}\u0026lt;/span\u0026gt;`); Question n°1 Résultats : 1510 avant conversion, 25 après conversion\nQuestion n°2 Explication : avec un string, c\u0026rsquo;est une concaténation ; sinon, c\u0026rsquo;est une addition.\nFichiers HTML Index TP html 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 \u0026lt;!doctype html\u0026gt; \u0026lt;html lang=\u0026#34;fr\u0026#34;\u0026gt; \u0026lt;head\u0026gt; \u0026lt;meta charset=\u0026#34;UTF-8\u0026#34;/\u0026gt; \u0026lt;link href=\u0026#34;style.css\u0026#34; rel=\u0026#34;stylesheet\u0026#34;/\u0026gt; \u0026lt;title\u0026gt;TP JavaScript\u0026lt;/title\u0026gt; \u0026lt;/head\u0026gt; \u0026lt;body\u0026gt; \u0026lt;h1\u0026gt;TP JavaScript\u0026lt;/h1\u0026gt; \u0026lt;nav\u0026gt; \u0026lt;a href=\u0026#34;tpJS_ex1.html\u0026#34;\u0026gt;Ex 1\u0026lt;/a\u0026gt; \u0026lt;a href=\u0026#34;tpJS_ex2.html\u0026#34;\u0026gt;Ex 2\u0026lt;/a\u0026gt; \u0026lt;a href=\u0026#34;tpJS_ex3.html\u0026#34;\u0026gt;Ex 3\u0026lt;/a\u0026gt; \u0026lt;/nav\u0026gt; \u0026lt;/body\u0026gt; \u0026lt;/html\u0026gt; Exercice 1 HTML html 1 2 3 4 5 6 7 8 9 10 11 12 13 14 \u0026lt;!doctype html\u0026gt; \u0026lt;html lang=\u0026#34;fr\u0026#34;\u0026gt; \u0026lt;head\u0026gt; \u0026lt;meta charset=\u0026#34;UTF-8\u0026#34;/\u0026gt; \u0026lt;link href=\u0026#34;style.css\u0026#34; rel=\u0026#34;stylesheet\u0026#34;/\u0026gt; \u0026lt;title\u0026gt;Ex 1\u0026lt;/title\u0026gt; \u0026lt;/head\u0026gt; \u0026lt;body\u0026gt; \u0026lt;h1\u0026gt;Ex 1\u0026lt;/h1\u0026gt; \u0026lt;p id=\u0026#34;name\u0026#34;\u0026gt;Your name is : \u0026lt;/p\u0026gt; \u0026lt;a href=\u0026#34;tpJS_index.html\u0026#34;\u0026gt;Retour à l\u0026#39;index\u0026lt;/a\u0026gt; \u0026lt;script src=\u0026#34;ex1.js\u0026#34;\u0026gt;\u0026lt;/script\u0026gt; \u0026lt;/body\u0026gt; \u0026lt;/html\u0026gt; Exercice 2 HTML html 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 \u0026lt;!doctype html\u0026gt; \u0026lt;html lang=\u0026#34;fr\u0026#34;\u0026gt; \u0026lt;head\u0026gt; \u0026lt;meta charset=\u0026#34;UTF-8\u0026#34;/\u0026gt; \u0026lt;link href=\u0026#34;style.css\u0026#34; rel=\u0026#34;stylesheet\u0026#34;/\u0026gt; \u0026lt;title\u0026gt;Ex 2\u0026lt;/title\u0026gt; \u0026lt;/head\u0026gt; \u0026lt;body\u0026gt; \u0026lt;h1\u0026gt;Ex 2\u0026lt;/h1\u0026gt; \u0026lt;a href=\u0026#34;tpJS_index.html\u0026#34;\u0026gt;Retour à l\u0026#39;index\u0026lt;/a\u0026gt; \u0026lt;br\u0026gt;\u0026lt;br\u0026gt; \u0026lt;div id=\u0026#34;output\u0026#34;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;script src=\u0026#34;ex2.js\u0026#34;\u0026gt;\u0026lt;/script\u0026gt; \u0026lt;/body\u0026gt; \u0026lt;/html\u0026gt; Exercice 3 HTML html 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 \u0026lt;!doctype html\u0026gt; \u0026lt;html lang=\u0026#34;fr\u0026#34;\u0026gt; \u0026lt;head\u0026gt; \u0026lt;meta charset=\u0026#34;UTF-8\u0026#34;/\u0026gt; \u0026lt;link href=\u0026#34;style.css\u0026#34; rel=\u0026#34;stylesheet\u0026#34;/\u0026gt; \u0026lt;title\u0026gt;Ex 3\u0026lt;/title\u0026gt; \u0026lt;/head\u0026gt; \u0026lt;body\u0026gt; \u0026lt;h1\u0026gt;Ex 3\u0026lt;/h1\u0026gt; \u0026lt;a href=\u0026#34;tpJS_index.html\u0026#34;\u0026gt;Retour à l\u0026#39;index\u0026lt;/a\u0026gt; \u0026lt;br\u0026gt; \u0026lt;div id=\u0026#34;output\u0026#34;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;script src=\u0026#34;ex3.js\u0026#34;\u0026gt;\u0026lt;/script\u0026gt; \u0026lt;/body\u0026gt; \u0026lt;/html\u0026gt; ","permalink":"https://trneedaname.github.io/fiches/exercices-de-javascript/","summary":"\u003cp\u003eLes exercices de javascript.\u003c/p\u003e","title":"Exercices de Javascript"},{"content":"Le JavaScript, c\u0026rsquo;est quoi ? Le langage JavaScript est interprété, ce qui veut dire que chaque instruction est exécutée au moment de l’exécution dans le navigateur. Il peut manipuler des variables, des fonctions, le DOM, et plus encore.\nConvention Le JavaScript utilise le Camel Case pour nommer les variables et fonctions. Par exemple, on écrira maVariable. Les opérations comportent toujours un espace :\njavascript 1 console.log(2 + 1); Accolades JS est sensible à la syntaxe mais utilise des accolades {} pour définir les blocs, contrairement à Python qui utilise l\u0026rsquo;indentation.\nToutes les conventions sont disponibles sur W3School.\nLes liens Exercices Les exercices peuvent se trouver ici : Exercices Les types et variables Différences entre var et let Utilisation de var et let var présente plusieurs problèmes :\nPortée : fonction (ou globale si déclarée en dehors d’une fonction). Remontée : la déclaration est remontée en haut de la portée, mais pas l’initialisation. Peut être redéclarée dans la même portée sans erreur. javascript 1 2 3 4 5 6 var x = 10; if (true) { var x = 20; // même variable que ci-dessus console.log(x); // 20 } console.log(x); // 20 (toujours la même variable) let est plus moderne et ne présente pas ces problèmes.\njavascript 1 2 3 4 5 6 let y = 10; if (true) { let y = 20; // variable différente, limitée au bloc console.log(y); // 20 } console.log(y); // 10 (variable extérieure inchangée) Les variables javascript 1 2 3 4 5 6 7 8 let age = 20; let nom = \u0026#34;Jean\u0026#34;; let etudiant = true; let animaux = [\u0026#34;chien\u0026#34;, \u0026#34;chat\u0026#34;, \u0026#34;poisson\u0026#34;, \u0026#34;chameau\u0026#34;]; console.log(age); console.log(nom); console.log(animaux); console.log(`Le type de \u0026#39;age\u0026#39; est ${typeof age}, celui de \u0026#39;nom\u0026#39; est ${typeof nom} et le type de \u0026#39;animaux\u0026#39; est ${typeof animaux}`); À savoir Le type de la liste animaux est un object.\nLe JavaScript est un langage dit \u0026ldquo;orienté objet\u0026rdquo;, ce qui signifie qu’il est possible d’encapsuler des concepts en objets.\njavascript 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 class Voiture { constructor(marque, nom) { this.marque = marque; /* le `this.marque` définit l\u0026#39;attribut de la classe, le `marque` est le paramètre de la fonction ,*/ this.nom = nom; } donneInfo() { console.log(`La voiture ${this.nom} est de marque ${this.marque}`); } } // On instancie 2 voitures différentes var voiture1 = new Voiture(\u0026#34;Toyota\u0026#34;, \u0026#34;Corolla\u0026#34;); var voiture2 = new Voiture(\u0026#34;Renault\u0026#34;, \u0026#34;Espace\u0026#34;); voiture1.donneInfo(); voiture2.donneInfo(); Comme montré, le JavaScript n’a pas de types prédéfinis comme d’autres langages (Java, C++, C, \u0026hellip;). Les types sont définis par l’interpréteur. Cela permet de redéfinir les types à la volée.\nRedéfinitions des types Les types javascript 1 2 3 4 5 6 let age = 20; console.log(typeof age === \u0026#34;string\u0026#34;); console.log(\u0026#34;Changement de la variable \u0026#39;age\u0026#39; en string\u0026#34;); age = \u0026#34;tomate\u0026#34;; console.log(age); console.log(typeof age === \u0026#34;string\u0026#34;); À savoir Même si utiliser == semble fonctionner, il est recommandé de ne pas l’utiliser. Privilégiez === pour la vérification stricte des types.\nEntrées / sorties Les entrées Demander une entrée utilisateur avec prompt() :\njavascript 1 2 let nom = prompt(\u0026#34;Quel est votre nom ?\u0026#34;); console.log(`Bonjour ${nom} !`); Les sorties Version console javascript 1 console.log(\u0026#34;Hello World !\u0026#34;); Version site (texte) html 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 \u0026lt;!doctype html\u0026gt; \u0026lt;html lang=\u0026#34;fr\u0026#34;\u0026gt; \u0026lt;head\u0026gt; \u0026lt;meta charset=\u0026#34;UTF-8\u0026#34;/\u0026gt; \u0026lt;link href=\u0026#34;style.css\u0026#34; rel=\u0026#34;stylesheet\u0026#34;/\u0026gt; \u0026lt;title\u0026gt;Ex 1\u0026lt;/title\u0026gt; \u0026lt;/head\u0026gt; \u0026lt;body\u0026gt; \u0026lt;h1\u0026gt;Ex 1\u0026lt;/h1\u0026gt; \u0026lt;p id=\u0026#34;texte_a_changer\u0026#34;\u0026gt;\u0026lt;/p\u0026gt; \u0026lt;/body\u0026gt; \u0026lt;script\u0026gt; let texte = document.getElementById(\u0026#34;texte_a_changer\u0026#34;); texte.textContent = \u0026#34;Hello World !\u0026#34;; \u0026lt;/script\u0026gt; \u0026lt;/html\u0026gt; Décomposition let texte : crée une variable texte document.getElementById(\u0026quot;texte_a_changer\u0026quot;) : document désigne la page web ; getElementById sélectionne l’élément avec l’id texte_a_changer (ici un \u0026lt;p\u0026gt;) texte.textContent : redéfinit le contenu de la variable (et donc le contenu HTML) Version site (alert) javascript 1 2 alert(\u0026#34;Une alerte\u0026#34;); confirm(\u0026#34;Confirmez ?\u0026#34;) La fonction alert prend le focus et force l\u0026rsquo;utilisateur à lire le texte.\nLa fonction confirm renvoi true si l\u0026rsquo;utilisateur appuie sur OK ou false sinon.\nLes fonctions javascript 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 function maFonction(age) { if (isNaN(age)) { alert(\u0026#34;Veuillez rentrer un nombre.\u0026#34;); return maFonction(prompt(\u0026#34;Quel est votre âge ?\u0026#34;)); /* Ici on return la même fonction si la condition `isNaN` (Is Not A Number -\u0026gt; \u0026#39;N\u0026#39;est pas un nombre) est vrai, c\u0026#39;est la récursivité. C\u0026#39;est utilisé pour ce genre de code demandant un input à l\u0026#39;utilisateur pour éviter les erreurs d\u0026#39;entrées. C\u0026#39;est aussi utile pour les PGCD et autres formules mathématiques. ,*/ } age = parseInt(age); age = age + 1; console.log(`Vous avez ${age} ans`); } maFonction(prompt(\u0026#34;Quel est votre âge ?\u0026#34;)); Les conditions Les conditions permettent de vérifier si une valeur est vraie ou fausse.\njavascript 1 2 3 4 5 6 let age = prompt(\u0026#34;Âge ?\u0026#34;); if (age \u0026lt; 18) { console.log(\u0026#34;Tu es mineur\u0026#34;); } else { console.log(\u0026#34;Tu n\u0026#39;es pas mineur\u0026#34;); } Boucles Boucle for javascript 1 2 3 for (let i = 0; i \u0026lt; 7; i++) { console.log(i); } Boucle while javascript 1 2 3 4 5 let i = 0; while (i \u0026lt; 5) { console.log(i); i++; } Switch En JavaScript, le switch permet de comparer une expression à plusieurs valeurs possibles.\njavascript 1 2 3 4 5 6 7 8 9 10 11 12 13 14 let t = prompt(\u0026#34;Saisir un caractère :\u0026#34;); switch (t) { case \u0026#34;a\u0026#34;: case \u0026#34;e\u0026#34;: case \u0026#34;i\u0026#34;: case \u0026#34;o\u0026#34;: case \u0026#34;u\u0026#34;: case \u0026#34;y\u0026#34;: alert(\u0026#34;C\u0026#39;est une voyelle\u0026#34;); break; default: alert(\u0026#34;Pas une voyelle\u0026#34;); break; } Décomposition switch(expression) évalue l’expression Chaque case compare la valeur de l’expression break empêche l’exécution des cases suivantes default est exécuté si aucune valeur ne correspond ","permalink":"https://trneedaname.github.io/fiches/javascript/","summary":"\u003ch2 id=\"le-javascript-c-est-quoi\"\u003eLe JavaScript, c\u0026rsquo;est quoi ?\u003c/h2\u003e\n\u003cp\u003eLe langage \u003ccode\u003eJavaScript\u003c/code\u003e est interprété, ce qui veut dire que chaque instruction est exécutée au moment de l’exécution dans le navigateur.\nIl peut manipuler des variables, des fonctions, le DOM, et plus encore.\u003c/p\u003e\n\n    \u003cdiv class=\"admonition memo\"\u003e\n      \u003cdiv class=\"admonition-header\"\u003e\u003csvg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 384 512\"\u003e\u003cpath d=\"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM112 256l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"/\u003e\u003c/svg\u003e\n        \u003cspan\u003eConvention\u003c/span\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"admonition-content\"\u003e\n        \u003cp\u003eLe JavaScript utilise le \u003ca href=\"https://fr.wikipedia.org/wiki/Camel_case\"\u003eCamel Case\u003c/a\u003e pour nommer les variables et fonctions.\nPar exemple, on écrira \u003ccode\u003emaVariable\u003c/code\u003e.\nLes opérations comportent toujours un espace :\u003c/p\u003e","title":"Javascript"},{"content":"Le python est un language interprété utilisé dans beaucoup de domaine\nLe Python, c\u0026rsquo;est quoi ? Info Le langage Python est un langage dit interprété, ce qui veut dire que chaque instruction est lue ligne par ligne, de haut en bas. Le code est compilé au moment de l’exécution.\nConvention Le python utilise le Snake Case pour nommer les variables, par exemple, une variable serait donc ma_variable.\nIl est important d\u0026rsquo;être explicite, par exemple :\npython 1 2 3 4 5 6 7 8 def func(valeur): return (valeur % 4 == 0) and (valeur % 100 != 0 or valeur % 400 == 0) val = int(input(\u0026#34;Quelle année voulez vous tester\u0026#34;)) res = func(val) if (res): print(f\u0026#34;L\u0026#39;année {val} est bien bissextile !\u0026#34;) else: print(f\u0026#34;L\u0026#39;année {val} n\u0026#39;est pas bissextile !\u0026#34;) Même si cela compile et exécute, il est bien mieux d\u0026rsquo;écrire\npython 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 def est_anne_bissextile(annee): # Les années bissextiles sont toutes des multiples de 4 if annee % 4 != 0: return False # Les années séculaires ne sont pas bissextiles, hormis 1600, 2000, 2400, etc. if annee % 100 == 0: return annee % 400 == 0 # Tous les autres résultats sont vrais. return True annee = int(input(\u0026#34;Quelle année voulez vous tester\u0026#34;)) resultat = est_anne_bissextile(annee) if (resultat): print(f\u0026#34;L\u0026#39;année {annee} est bien bissextile !\u0026#34;) else: print(f\u0026#34;L\u0026#39;année {annee} n\u0026#39;est pas bissextile !\u0026#34;) Ce code paraît plus \u0026ldquo;verbeux\u0026rdquo; mais il est bien plus lisible !\nL\u0026rsquo;indentation Python utilise l\u0026rsquo;indentation pour marquer si du code appartient à une condition, une boucle, une fonction ou une classe.\nToutes les conventions sont disponibles sur W3School et Python Style Guide.\nLes types et variables python 1 2 3 4 5 6 7 age = 80 nom = \u0026#34;Jean\u0026#34; etudiant = True animaux = [\u0026#34;chien\u0026#34;, \u0026#34;chat\u0026#34;, \u0026#34;poisson\u0026#34;, \u0026#34;chameau\u0026#34;] print(age) print(nom) print(f\u0026#34;Le type de la variable \u0026#39;age\u0026#39; est {type(age)} alors que le type de \u0026#39;nom\u0026#39; est {type(nom)}, le type de \u0026#39;etudiant\u0026#39; est {type(etudiant)}\u0026#34;) Comme montré, Python n\u0026rsquo;a pas de types prédéfinis comme d\u0026rsquo;autres langages (Java, C++, C, \u0026hellip;). Les types sont définis par l\u0026rsquo;interpréteur. Cela permet de redéfinir les types à la volée.\nRedéfinitions des types Les types python 1 2 3 4 5 6 age = 20 print(type(age) == str) print(\u0026#34;Changement de la variable \u0026#39;age\u0026#39; en string\u0026#34;) age = \u0026#34;tomate\u0026#34; print(age) print(type(age) == str) Booléens Pour les vérifications booléennes (True ou False), utiliser == peut être remplacé par is pour plus de lisibilité. Les vérifications fausses sont donc is not.\nAttention Avec des int cela renvoie une SyntaxWarning, ce n\u0026rsquo;est pas une erreur en soit mais à éviter.\nSyntaxWarning: \u0026quot;is\u0026quot; with 'int' literal. Did you mean \u0026quot;==\u0026quot;?\nComme vous pouvez le voir, le résultat est le même.\npython 1 2 3 4 5 6 nom = \u0026#34;Jean\u0026#34; print(type(nom) == str) print(type(nom) != bool) print(\u0026#34;Utilisation de \u0026#39;is\u0026#39; et \u0026#39;is not\u0026#39;\u0026#34;) print(type(nom) is str) print(type(nom) is not bool) Utiliser is fonctionne quant même.\npython 1 print(type(4) is str) Les entrées / sorties L\u0026rsquo;entrée Dans tout les language l\u0026rsquo;I/O (input / output) est très commun, le python rend cela très simple :\npython 1 2 nom = input(\u0026#34;Quel est votre nom ? \u0026#34;) print(f\u0026#34;Bonjour {nom} !\u0026#34;) String \u0026amp; f-string La fonction print() que j\u0026rsquo;utilise peut paraître un peu différente. J\u0026rsquo;utilise des f-strings qui permettent d\u0026rsquo;insérer des variables directement dans les chaînes de caractères avec {}.\nPour demander un nombre il faut mettre le input() dans un int() ou autre.\npython 1 2 3 4 age = input(\u0026#34;Quel est votre age ? \u0026#34;) age = age + 1 print(age) print(type(age)) Erreur Comme vous le voyez en exécutant le code, l\u0026rsquo;interpréteur de Python renvoie\nTypeError: can only concatenate str (not \u0026quot;int\u0026quot;) to str\nLa sortie python 1 print(\u0026#34;Hello World !\u0026#34;) Le python supporte la concaténation des string. Avec le input() transformé :\npython 1 2 3 age = int(input(\u0026#34;Quel est votre age ? \u0026#34;)) age = age + 1 print(\u0026#34;Votre age est donc \u0026#34; + str(age)) A voir La variable age à du être entouré dans une autre fonction str(), elle transforme le int en string\nLes fonctions Les fonctions sont des blocs de code réutilisables.\npython 1 2 3 4 def ma_fonction(age): age = age + 1 print(f\u0026#34;Vous avez {age} ans\u0026#34;) ma_fonction(int(input(\u0026#34;Quel est votre âge ?\u0026#34;))) Décomposition def définit le début d\u0026rsquo;une fonction. ma_fonction est le nom de la fonction. (age) est un paramètre. Dans cet exemple, on prend l\u0026rsquo;âge en paramètre et on lui ajoute 1. Tabulations Comme dit plus haut le Python utilise l\u0026rsquo;indentation : tout ce qui est indenté après le def est considéré comme faisant partie de la fonction.\npython 1 2 3 4 5 6 def ma_fonction(age): print(f\u0026#34;J\u0026#39;avais {age} ans\u0026#34;) age = age + 1 print(f\u0026#34;J\u0026#39;ai {age} ans\u0026#34;) mon_age = 20 ma_fonction(mon_age) On peut créer des fonctions avec un nombre illimité de paramètres, par exemple :\npython 1 2 3 4 5 6 def ma_super_longue_fonction(age, nom, formation, lycee): print(f\u0026#34;Je m\u0026#39;appelle {nom}, j\u0026#39;ai {age} ans et je suis en {pays}\u0026#34;) age = 20 nom = \u0026#34;Jean\u0026#34; pays = \u0026#34;France\u0026#34; ma_super_longue_fonction(age, nom, formation, pays) Les conditions Une condition vérifie si ce que vous demandez est vrai (True) ou faux (False).\npython 1 2 3 4 5 age = 20 if age \u0026lt; 18: print(\u0026#34;Tu es mineur\u0026#34;) else: print(\u0026#34;Tu n\u0026#39;es pas mineur\u0026#34;) Si la condition n\u0026rsquo;est pas vraie mais que l\u0026rsquo;on veut tester d\u0026rsquo;autres conditions, on utilise elif.\npython 1 2 3 4 5 6 7 nombre = int(input(\u0026#34;Veuillez entrer un nombre : \u0026#34;)) if nombre == 42: print(\u0026#34;Le nombre est bien la vie\u0026#34;) elif nombre \u0026lt; 42: print(\u0026#34;Le nombre est inférieur\u0026#34;) elif nombre \u0026gt; 42: print(\u0026#34;Le nombre est supérieur\u0026#34;) Chainage de condition Les conditions peuvent être enchaînées.\nand signifie \u0026ldquo;et\u0026rdquo; or signifie \u0026ldquo;ou\u0026rdquo; python 1 2 3 4 5 age = 20 if age \u0026gt; 18 and age \u0026lt; 25: print(\u0026#34;L\u0026#39;âge est compris entre 18 et 25\u0026#34;) elif age \u0026gt; 18 or age \u0026lt; 25: print(\u0026#34;L\u0026#39;âge est supérieur à 18 ou inférieur à 25\u0026#34;) Les boucles Les boucle permettent de répeter une suite d\u0026rsquo;instructions un nombre n de fois.\nBoucle for Les boucle for itère sur une séquence.\nTant que le tableau a des valeurs, on affiche chaque élément\nExemple n°1 python 1 2 3 tableau = [0, 1, 2, 3, 4, 5, 6] for i in tableau: print(i) Décomposition for : boucle qui itère sur chaque élément d\u0026rsquo;une séquence. i : variable représentant l\u0026rsquo;élément actuellement lu. in : définit sur quelle séquence la boucle s\u0026rsquo;exécute. Exemple n°2 python 1 2 for i in range(0, 10): print(i) Décomposition range : fonction qui renvoie une séquence entre deux valeurs A savoir que range() n\u0026rsquo;inclut pas la valeur de fin\nBoucle while La boucle while s\u0026rsquo;exécute tant que la condition est vraie.\nExemple n°1 Tant que la valeur est inférieure à 5, on l\u0026rsquo;affiche et on l\u0026rsquo;incrémente\npython 1 2 3 4 i = 0 while i \u0026lt; 5: print(i) i += 1 # i = i + 1 fait la même chose Décomposition while : boucle qui continue tant que la condition est vraie i \u0026lt; 5 : condition d\u0026rsquo;arrêt i += 1 : incrémente la variable pour éviter boucle infinie Exemple n°2 Tant que la liste n\u0026rsquo;est pas vide, on retire et affiche le premier élément\npython 1 2 3 liste = [10, 20, 30, 40] while liste: print(liste.pop(0)) Décomposition liste : la séquence sur laquelle on travaille while liste : boucle continue tant que la liste n\u0026rsquo;est pas vide pop(0) q: retire le premier élément et le renvoi Les tableaux Les tableaux permettent de représenter des suites de données. Par exemple, les string (texte) en python peuvent être traité comme des tableaux.\npython 1 2 3 texte = \u0026#34;hello world\u0026#34; for i in range(len(texte)): print(texte[i]) Décomposition len : renvoi la taille de l\u0026rsquo;élément (ici, la taille du tableau) Pour ajouter des valeurs, on utilise append\npython 1 2 3 4 5 6 tab = [] val = int(input(\u0026#34;Veuillez donner un nombre supérieur à 0\u0026#34;)) for i in range(0,val): val = int(input(\u0026#34;Saisissez la valeur n°\u0026#34;+str(i) + \u0026#34; : \u0026#34;)) tab.append(val) print(tab) ","permalink":"https://trneedaname.github.io/fiches/python/","summary":"\u003cp\u003eLe python est un language interprété utilisé dans beaucoup de domaine\u003c/p\u003e","title":"Python"},{"content":"Mods for xcom This file will have all of the different mods I did and am doing, each mods will have a dedicated page but each ones will have a brief explanation below.\nAbility Creator Allows for the creation of abilities using only config.\nPlayable Codex Revamped A complete rework of my Playable codex mod, link here Playable Chosen Reworked A complete rework of the Playable Chosen mod, link here ","permalink":"https://trneedaname.github.io/moc/xcom-mods/","summary":"\u003ch2 id=\"mods-for-xcom\"\u003eMods for xcom\u003c/h2\u003e\n\u003cp\u003eThis file will have all of the different mods I did and am doing, each mods will have a dedicated page but each ones will have a brief explanation below.\u003c/p\u003e\n\u003ch3 id=\"ability-creator\"\u003eAbility Creator\u003c/h3\u003e\n\u003cp\u003eAllows for the creation of abilities using only config.\u003c/p\u003e\n\u003ch3 id=\"playable-codex-revamped\"\u003ePlayable Codex Revamped\u003c/h3\u003e\n\u003cp\u003eA complete rework of my Playable codex mod, link \u003ca href=\"/wiki-xcom/playable-codex-revamped/\"\u003e here \u003c/a\u003e\u003c/p\u003e\n\u003ch3 id=\"playable-chosen-reworked\"\u003ePlayable Chosen Reworked\u003c/h3\u003e\n\u003cp\u003eA complete rework of the Playable Chosen mod, link \u003ca href=\"/wiki-xcom/playable-chosen-reworked/\"\u003e here \u003c/a\u003e\u003c/p\u003e","title":"Xcom Mods"}]