Advertisement
Ceelebia

IceRace 0.5 BETA

May 30th, 2015
501
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 8.39 KB | None | 0 0
  1. --[[
  2.  
  3. IceRace 0.5 BETA
  4. Module développé par Ceelebia
  5. Basé sur l'exemple de module du sujet "[Tutoriel] Syntaxe lua et exemple de module" de Podoko ;)
  6.  
  7. En cas de redistribution de la version originale ou d'une version modifiée :
  8. vous DEVEZ citer les auteurs d'origine (Ceelebia & Podoko)
  9.  
  10. ]]
  11.  
  12.  
  13.  
  14. admin = "Ceelebia" -- Pseudo de l'administrateur du salon
  15. delaiEntreDeuxGlacons = 10 -- Délai (en millisecondes) d'attente entre le spawn de deux glaçons
  16.  
  17. --- Le code du module. Evitez d'y toucher ;) ---
  18.  
  19. function main() -- Fonction de lancement du module
  20.     tfm.exec.disableAutoNewGame(true) -- Désactivation du changement de cartes
  21.     tfm.exec.disableAutoShaman(true) -- Désactivation des chamanes sur les cartes
  22.  
  23.     mapList =   {   "125204","159903","176885","185685","197214","198028","212956","263777","270489","294822","322898","343455","350169","352617","404907","414991","421583","422305","465849","476573","481925","484218","497904","498707","506950","508252","509145","515913","542870","544675","570888","593948","609552","626107","742744","898449","1089882","1095753","1100306","1296882","1341133","1365330","1380404","1390764","1405207","1452753","1474189","1518389","1568962","1651220","1653564","1662853","1696100","1703817","1709353","1721620","1758349","1789491","1805044","1821046","1830591","1887755","1901078","1912644","2002867","2099300","2110278","2170579","2190794","2472355","2476452","2479717","2541893","2562533","2564902","2574988","2611862","2768546","2781563","2785680","2850049","2854223","2859994","2866657","2873024","2876773","2877342","2902195","2993038","3036001","3056988","3165231","3175580","3210210","3265149","3296020","3296027","3296031","3418308","3460996","3482188","3518304","3537721","3605225","3611506","3630912","3688810","3755513","3797905","3810119","3866756"}
  24.     offsets = {} -- Création de la table qui contiendra les offsets de chaque joueur.
  25.     glacons = {} -- Création de la table qui contiendra les glacons (ou plutôt leur ID) de chaque joueur.
  26.     lastSpirit = {} -- Création de la table qui contiendra l'heure à laquel chaque joueur a lancé un esprit
  27.     bans = {} -- Création de la table qui contient les bans (muhahah)
  28.     for name in pairs(tfm.get.room.playerList) do -- Pour tous les joueurs déjà dans le salon
  29.             eventNewPlayer(name)    -- On fait comme s'ils venaient d'entrer pour activer l'écoute des touches du clavier
  30.     end
  31.  
  32.     message = "IceRace v0.5 BETA\nJeu développé par Ceelebia\nBasé un module de Podoko\n\nReproduction interdite\n\nAdministrateur du salon : " .. admin
  33.     ui.addPopup (103, 0, message, nil, nil, nil, nil, nil)
  34.  
  35.     system.disableChatCommandDisplay("offset", true)
  36.     system.disableChatCommandDisplay("next", true)
  37.     system.disableChatCommandDisplay("cheatlol", true)
  38.     system.disableChatCommandDisplay("ban", true)
  39. end
  40.  
  41.  
  42. function eventNewPlayer(name) -- Se déclenche automatiquement quand un joueur entre dans le salon
  43.     tfm.exec.bindKeyboard(name, 40, true, true) -- On écoute la touche 39 (flèche bas)
  44.     tfm.exec.bindKeyboard(name, 83, true, true) -- On écoute la touche 38 (S)
  45.     tfm.exec.bindKeyboard(name, 32, true, true) -- On écoute la touche 32 (espace)
  46.  
  47.     offsets[name] = {x=0, y=10} -- On ajoute l'offset du joueur dans la liste
  48.     lastSpirit[name] = os.time() -- renvoie l'heure au moment de l'appel en millisecondes.
  49.     glacons[name] = "pasencore"
  50. end
  51.  
  52.  
  53. function eventKeyboard(name, key, down, x, y)
  54.     if (key==40 or key==83) and not tfm.get.room.playerList[name].isDead and os.time()-lastSpirit[name]>=delaiEntreDeuxGlacons and glacons[name] ~= "pasencore" then
  55.             local tid = glacons[name]
  56.             tfm.exec.removeObject(tid)
  57.             local id = tfm.exec.addShamanObject(54, x+offsets[name].x, y+offsets[name].y, 0, 0, 0, false) -- On met l'esprit
  58.             lastSpirit[name] = os.time() -- On sauvegarde l'heure où on lance l'esprit
  59.             glacons[name] = id
  60.     elseif (key==40 or key==83) and glacons[name] ~= "STOP" and os.time()-lastSpirit[name]>=delaiEntreDeuxGlacons then
  61.         local id = tfm.exec.addShamanObject(54, x+offsets[name].x, y+offsets[name].y, 0, 0, 0, false) -- On met l'esprit
  62.         lastSpirit[name] = os.time() -- On sauvegarde l'heure où on lance l'esprit
  63.         glacons[name] = id
  64.     elseif (key==32) then
  65.         eventChatCommand(name, "cheatlol")
  66.     end
  67. end
  68.  
  69.  
  70. function eventLoop(timePast, timeLeft)
  71.     if timeLeft <= 0 then -- S'il reste moins de 0 millisecondes
  72.             tfm.exec.newGame( mapList[math.random(#mapList)] ) -- On lance une carte de la liste
  73.     end
  74. end
  75.  
  76. function eventPlayerDied(name)
  77.     if playerLeft() == 0 then -- S'il n'y a plus de joueurs sur la carte ...
  78.             tfm.exec.newGame( mapList[math.random(#mapList)] ) -- On lance une carte de la liste
  79.     end
  80.  
  81.     glacons[name] = "STOP"
  82. end
  83.  
  84. function eventPlayerWon(name, timeBegin, timeRes)
  85.     if playerLeft() == 0 then -- Comme pour eventPlayerDied
  86.             tfm.exec.newGame( mapList[math.random(#mapList)] )
  87.     end
  88. end
  89.  
  90.  
  91. function playerLeft()
  92.     local i = 0 -- Compteur de souris
  93.     for _, prop in pairs(tfm.get.room.playerList) do
  94.             if not prop.isDead then -- Si le joueur est encore sur la carte ...
  95.                     i = i+1 -- On ajoute 1 au compteur
  96.             end
  97.     end
  98.     return i -- On renvoie le nombre de souris vivantes
  99. end
  100.  
  101. function secureEventChatCommand(playerName, command)
  102.     local nextWord = string.gmatch(command, '%S+') -- on sauvegarde la fonction qui renverra les mots de command
  103.     local word1 = nextWord()
  104.     if word1 == "offset" then -- si le premier mot est la commande "offset"
  105.         local a, b = tonumber(nextWord()), tonumber(nextWord()) -- on sauvegarde l'x et l'y du nouvel offset sous forme de nombre
  106.         offsets[playerName] = { x = a and math.abs(a)<30 and a or offsets[name].x, y = b and math.abs(b)<30 and b or offsets[name].y }
  107.     elseif word1 == "next" and playerName == admin then
  108.         tfm.exec.newGame( mapList[math.random(#mapList)] ) -- On lance une carte de la liste
  109.     elseif word1 == "cheatlol" and playerName == admin then
  110.         tfm.exec.killPlayer(playerName)
  111.         tfm.exec.respawnPlayer(playerName)
  112.         tfm.exec.giveCheese(playerName)
  113.         tfm.exec.playerVictory(playerName)
  114.     elseif word1 == "cheatlol" and playerName ~= admin then
  115.         tfm.exec.killPlayer(playerName)
  116.         message = playerName .. " a tenté de tricher sans avoir l'autorisation de l'administrateur " .. admin .. "\nAttention : vous risquez un bannissement du salon !"
  117.         ui.addPopup (103, 0, message, nil, nil, nil, nil, nil)
  118.     elseif word1 == "ban" and playerName == admin then
  119.         local name = nextWord()
  120.         local temps = nextWord()
  121.         local raison = nextWord()
  122.         if name == admin then -- Si on tente de ban l'admin
  123.             name = nil -- On fait tout crash ;)
  124.         end
  125.         bans[name] = temps
  126.         tfm.exec.killPlayer(name)
  127.         message = "L'administrateur " .. playerName .. " a banni " .. name .. " du salon pour ".. temps .." parties. Raison : " .. raison
  128.         ui.addPopup (103, 0, message, nil, nil, nil, nil, nil)
  129.     end
  130. end
  131. function eventChatCommand(playerName, command) -- Les commandes
  132.     pcall(secureEventChatCommand, playerName, command)
  133. end
  134.  
  135.  
  136. function banMotor()
  137.  
  138.     for name in pairs(tfm.get.room.playerList) do -- Pour tous les joueurs déjà dans le salon
  139.  
  140.             if bans[name] == nil then
  141.                 -- pass
  142.             else
  143.                 bans[name] = tonumber(bans[name])
  144.             end
  145.  
  146.             if bans[name] == nil then
  147.                 -- pass
  148.             elseif bans[name] == 0 then
  149.                 message = "Votre bannissement est terminé. Ne faites plus les mêmes erreurs ;)"
  150.                 ui.addPopup (103, 0, message, name, nil, nil, nil, nil)
  151.                 bans[name] = nil
  152.             elseif bans[name] ~= 0 then
  153.                 message = "Vous êtes banni pendant encore " .. bans[name] .. " parties ! Courage :D"
  154.                 ui.addPopup (103, 0, message, name, nil, nil, nil, nil)
  155.                 tfm.exec.killPlayer(name)
  156.                 bans[name] = bans[name] - 1
  157.             end
  158.    
  159.     end
  160.  
  161. end
  162.  
  163. function eventNewGame()
  164.     if pcall(banMotor) then
  165.         -- pass
  166.     else
  167.         print("Une erreur est survenue lors du checkban.\nReset des bans...")
  168.         bans = {}
  169.     end
  170.  
  171.     tfm.exec.setUIShamanName("- IceRace 0.5 BETA")
  172. end
  173.  
  174. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement