• 16 Février 2019, 05:09:36


Auteur Sujet: Scripting Tutorial 6 - King of the Hill Gamemode  (Lu 5090 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne spykerc8

  • *
  • 'The GTAOnline.fr GodFather'
  • Messages: 3821
    • Voir le profil
    • http://www.gtaonline.fr
Scripting Tutorial 6 - King of the Hill Gamemode
« le: 08 Mars 2007, 17:41:02 »
Bonjour,

Après le dernier tutorial interminable produit par la team MTA, en voici un nouveau bien plus simple et plus intéressant sur la réalisation d'un mod de type King of the hill.
Si une personne occupe la zone, elle gagnera des points toutes les secondes.
Après un certains temps d'occupation le match se termine et le gagnant est celui qui a le plus de points.


[yt=425,350]_qt872N7YDw[/yt]

Vidéo HD :
Script King of the Hill : http://www.mtavc.com/scripts/script6.lua



Préparation

Pour commencer nous allons créer un timer qui vérifiera la positions des joueurs toutes les 500 millisecondes.

Code: Lua
  1. kothTimer = setTimer ( "checkHillArea", 500, 0 )
  2.  

Une fois que le timer est créer, nous allons créer un espace que les joueurs devront occuper pour gagner des points.

Code: Lua
  1. addEventHandler ( "onResourceStart", getRootElement(), "kothStart" )
  2. function kothStart ( name )
  3. hillArea = createColSquare ( -2171.0678710938, 678.17950439453, 0, 15, 15 )
  4.  

MTA:SA a la possibilité d'uitiliser les zones de gangs sur le radar du jeu, comme en solo. Pour créer une zone sur le radar afin de signaler notre zone de capture, nous allons donc utiliser 'createRadarArea ( X, Y, sizeX, sizeY, R, G, B, A, [ elements visible to ] )'

Code: Lua
  1. hillRadar = createRadarArea ( -2183.5678710938, 705.67950439453, 40, -40, 0, 255, 0, 175 )
  2.  

Une fois que nous avons défini notre zone, nous allons créer une boucle pour afficher les textes à l'écran. Ce texte affichera le leader, et les points pour chaque joueur.
Il faut également régler les points des personnes sur 0 avant de commencer : On va utiliser 'setElementData'.

Code: Lua
  1. local globalTextDisplay = textCreateDisplay ()
  2. textItemLeaderScore = textCreateTextItem ( "Leader: None", 0.15, 0.3, 0, 255, 0, 0, 255, 1.4 )
  3. textDisplayAddText ( globalTextDisplay, textItemLeaderScore )
  4.  
  5. for k,v in getElementsByType ( "player" ) do
  6. setElementData ( v, "points", 0 )
  7. local playerTextDisplay = textCreateDisplay ()
  8. local yourScore = textCreateTextItem ( "Score: "..getElementData(v, "points"), 0.15, 0.7, 0, 255, 0, 0, 255, 1.8 )
  9. textDisplayAddText ( playerTextDisplay, yourScore )
  10. textDisplayAddObserver ( playerTextDisplay, v )
  11. setElementData ( v, "textItemPoints", yourScore )
  12.  
  13. textDisplayAddObserver ( globalTextDisplay, v )
  14. leaderPlayer = false
  15. end
  16.  

Une fois que c'est fait, on va également créer un timer pour que le mode se finisse en 5 minutes.

Code: Lua
  1. kothEndTimer = setTimer ( "kothEnd", 300000, 1 )
  2. end
  3.  

Il va également faloir faire en sorte que les joueurs se connectant au serveur aient 0 points et que leurs noms et points s'affichent à l'écran.

Code: Lua
  1. addEventHandler ( "onPlayerJoin", getRootElement(), "kothJoin" )
  2. function kothJoin ()
  3. setElementData ( source, "points", 0 )
  4. local playerTextDisplay = textCreateDisplay ()
  5. local yourScore = textCreateTextItem ( "Score: "..getElementData(source, "points"), 0.15, 0.7, 0, 255, 0, 0, 255, 1.8 )
  6. textDisplayAddText ( playerTextDisplay, yourScore )
  7. textDisplayAddObserver ( playerTextDisplay, source )
  8. setElementData ( source, "textItemPoints", yourScore )
  9. textDisplayAddObserver ( globalTextDisplay, source )
  10. end
  11.  

Au spawn du joueur.

Code: Lua
  1. addEventHandler ( "onPlayerSpawn", getRootElement(), "kothSpawn" )
  2. function kothSpawn ( spawnpoint, team )
  3.  

Nous allons également lui donner un AK-47 (ID arme : 30) et 10000 de munitions.

Code: Lua
  1. giveWeapon ( source, 30, 10000 )
  2. end
  3.  


Fonctions principales

Code: Lua
  1. function checkHillArea ()

Nous voici dons à notre fonction appellée par le timer toutes les 500 ms. Nous allons créer une table pour stocker les informations sur les joueurs dans la zone de capture.

Code: Lua
  1. local hillPlayers = getElementsWithinColShape ( hillArea, "player" )
  2.  

Nous allons également devoir vérifier si le joueur est toujours vivant avec 'isPlayerDead()', et si ce n'est pas le cas, le supprimer de la table avec 'table.remove()' afin qu'il ne gagne pas de points s'il est mort.

Code: Lua
  1. for k,v in hillPlayers do
  2. if ( isPlayerDead ( v ) ) then
  3. table.remove(hillPlayers,k)
  4. end
  5. end
  6.  

Après avoir retiré tous les joueurs morts, nous allons compter les résultats encore présents dans la table.

Code: Lua
  1. if table.getn ( hillPlayers ) ~= 0 then
  2.  

Si le résultat n'est pas égal à 0, nous allons régler la couleur de la zone de capture sur le radar et la mettant en rouge et la faire clignoter, comme quand vous êtes attaqués en mode solo.

Code: Lua
  1. setRadarAreaFlashing ( hillRadar, true )
  2. setRadarAreaColor ( hillRadar, 255, 0, 0, 175 )
  3.  

Nous allons également donner des points et mettre à jour les textes à l'écran, pour chaque joueur dans la zone. Nous allons donc récupérer leurs points et le texte affiché acec 'getElementData()', puis ajouter 1 point à chaque, et enfin mettre à jour le texte avec 'textItemSetText()'.

Code: Lua
  1. for k,v in hillPlayers do
  2. local currentPoints = getElementData ( v, "points" )
  3. local newPoints = currentPoints + 1
  4. setElementData ( v, "points", newPoints )
  5. textItemSetText ( getElementData(v,"textItemPoints"), "Score: "..newPoints )
  6. end
  7.  


Sinon, si la table ne retourne aucun résultat, nous allons régler la couleur de la zone de capture sur vert et ne pas la faire clignoter.

Code: Lua
  1. else
  2. setRadarAreaFlashing ( hillRadar, false )
  3. setRadarAreaColor ( hillRadar, 0, 255, 0, 175 )
  4. end
  5.  


Nous allons maintenant afficher le nom du leader à l'écran.

Code: Lua
  1. local leaderText = ""
  2. local leaders = 1
  3. for k,v in getElementsByType ( "player" ) do
  4.  

S'il n'y a pas encore de leader, le premier joueur que le script va trouver, le sera.

Code: Lua
  1. if leaderPlayer == false then leaderPlayer = v end
  2.  

Si le joueur vérifié par la fonction n'est pas le leader, nous allons récupérer ses points et les points du leader.

Code: Lua
  1. local leaderPoints = getElementData ( leaderPlayer, "points" )
  2. playerPoints = getElementData ( v, "points" )
  3.  

Si le joueur a plus de points que le leader, nous allons mettre à jour le leader pour que le joueur le devienne.

Code: Lua
  1. if playerPoints > leaderPoints then
  2. leaders = 1
  3. leaderPlayer = v
  4. leaderText = getClientName ( v )
  5.  

S'ils ont le même nombre de points, nous avons deux leaders..

Code: Lua
  1. elseif playerPoints == leaderPoints then
  2. leaders = leaders + 1
  3. leaderText = leaderText.."/"..getClientName(v)
  4. end
  5. end
  6. end
  7.  

S'il y a moins de 3 leaders, et que le leader existe, nous allons l'afficher à l'écran.

Code: Lua
  1. if leaders > 3 or leaders == getPlayerCount () or leaderPlayer == false then
  2. textItemSetText ( textItemLeaderScore, "Leader: None" )
  3. else
  4. textItemSetText ( textItemLeaderScore, "Leader: "..leaderText.." - "..getElementData(leaderPlayer,"points") )
  5. end
  6. end
  7.  


Voyons ce qui va se passer quand la partie se termine..

Code: Lua
  1. function kothEnd ( )
  2.  

Nous allons tuer le timer principal, les joueurs ne pourront plus gagner de points.

Code: Lua
  1. killTimer ( kothTimer )
  2.  

Nous allons encore une fois récupérer le nom du leader, mais affiché d'une façon différente...

Code: Lua
  1. local leaderText = ""
  2. local leaders = 1
  3. for k,v in getElementsByType ( "player" ) do
  4. if leaderPlayer == false then leaderPlayer = v end
  5.  
  6. local leaderPoints = getElementData ( leaderPlayer, "points" )
  7. playerPoints = getElementData ( v, "points" )
  8. if v ~= leaderPlayer then
  9. if playerPoints > leaderPoints then
  10. leaders = 1
  11. leaderPlayer = v
  12. leaderText = getClientName ( v )
  13. elseif playerPoints == leaderPoints then
  14. leaders = leaders + 1
  15. leaderText = leaderText.."/"..getClientName(v)
  16. end
  17. else
  18. leaderText = getClientName (leaderPlayer )
  19. end
  20. end
  21. local textDisplayWinner = textCreateDisplay ()
  22. local textItem
  23. if leaders > 3 or leaders == getPlayerCount () or leaderPlayer == false then
  24. textItem = textCreateTextItem ( "The time is out!\nWinner: None\nNewRound!", 0.5, 0.5, 2, 255, 0, 0, 255, 255 )
  25. else
  26. textItem = textCreateTextItem ( "The time is out!\nWinner: "..leaderText.." with "..getElementData ( leaderPlayer, "points" ).."points!\n\nNewRound!", 0.5, 0.5, 2, 255, 0, 0, 255, 255 )
  27. end
  28. textDisplayAddText ( textDisplay, textItem )
  29. for k,v in getElementsByType ( "player" ) do
  30. textDisplayAddObserver ( textDisplayWinner, v )
  31. setElementData ( v, "points", 0 )
  32. textItemSetText ( getElementData(v,"textItemPoints"), "Score: 0" )
  33. end
  34.  

Et enfin...
Nous allons relancer la ressource.

Code: Lua
  1. restartResource ( getThisResource() )
  2. end
  3.  


Augmentation de la puissance des armes

Code: Lua
  1. addEventHandler ( "onPlayerDamage", getRootElement(), "kothDamage" )
  2. function kothDamage ( attacker, weapon, bodypart, loss )
  3.  

Cette fonction s'applique au cas où l'on est toucher par un tir d'un autre joueur. Cela augmente sa puissance en la réglant à 125% du tire d'origine. Nous allons également vérifier combien il reste de vie.

Code: Lua
  1. local damage = loss * 1.25
  2. local hpLeft = getPlayerHealth ( source ) - damage
  3.  

S'il restait plus de 0 de vie, le joueur etait toujours en vie, nous allons donc chercher quelle partie du corps a été touchée.
S'il s'agit de la tête, nous tuons le joueur, sinon, nous allons augmenter la puissance du tire et retirer des points de vie.

Code: Lua
  1. if ( hpLeft > 0 ) then
  2. if ( bodypart == 9 ) then
  3. killPlayer ( source, attacker, weapon, bodypart )
  4. else
  5. setPlayerHealth ( source, hpLeft )
  6. end
  7.  

Si après ça, le joueur a 0 ou moins de vie, nous le tuons...

Code: Lua
  1. else
  2. killPlayer ( source, attacker, weapon, bodypart )
  3. end
  4. end
  5. end
  6.  


Messages

Quand un joueur va entrer ou sortir de la zone de capture, nous allons en avertir les autres joueurs avec le code suivant.

Code: Lua
  1. addEventHandler ( "onColShapeHit", -- getRootElement(), "kothHillEnter" )
  2. function kothHillEnter ( player, dim )
  3. if source == hillArea then
  4. outputMessage ( getClientName(player).." entered the zone!", 255, 255, 109, 255 )
  5. end
  6. end
  7.  
  8. addEventHandler ( "onColShapeLeave", --getRootElement(), "kothHillExit" )
  9. function kothHillExit ( player, dim )
  10. if source == hillArea then
  11. if isPlayerDead ( player ) ~= true then
  12. outputMessage ( getClientName(player).." left the zone!", 255, 255, 109, 255 )
  13. end
  14. end
  15. end
  16.  


Et enfin, nous allons afficher les messages de morts.

Code: Lua
  1. addEventHandler ( "onPlayerWasted", getRootElement(), "KillMessages_onPlayerWasted" )
  2. function KillMessages_onPlayerWasted ( totalammo, killer, killerweapon, bodypart )
  3.  

Nous récupérons le nom du joueur tuer, la couleur du message et l'alpha, et on stock tout ça en variable.

Code: Lua
  1. local killed_nick = getClientName ( source )
  2. local r,g,b = getPlayerNametagColor( source )
  3. local a = 120
  4.  

Si le joueur était la zone de capture, nous réglons l'alpha sur une valeur supérieure.

Code: Lua
  1. if ( isElementWithinColShape ( source, hillArea ) ) then
  2. r = 255
  3. g = 255
  4. b = 109
  5. a = 255
  6. end
  7.  

Sinon, nous affichons simplement le message.

Code: Lua
  1. if ( killer ) then
  2. if (source == killer) then
  3. killed_nick = "himself"
  4. end
  5. local killmessage = getClientName(killer).." killed "..killed_nick
  6. local killerweapon_name = getWeaponNameFromID ( killerweapon )
  7. if ( killerweapon_name ) then
  8. outputMessage( killmessage.." ("..killerweapon_name..")",  r, g, b, a )
  9. else
  10. outputMessage( killmessage, r, g, b, a )
  11. end
  12. else
  13. outputMessage( killed_nick.." died", r, g, b, a )
  14. end
  15. end
  16.  

Code: Lua
  1. ------OUTPUT MESSAGE CODE-----
  2. addEventHandler ( "onResourceStart", getRootElement(), "createTextOnLoad" )
  3. function createTextOnLoad ( name )
  4. local outputMessageTextDisplay = textCreateDisplay ()
  5. local distance = 0.027
  6. local start = 0.25
  7. local size = 1.2
  8. outputMessageTextItem1 = textCreateTextItem ( "", 0.8, start + distance, 1, 255, 255, 255, 255, size )
  9. outputMessageTextItem2 = textCreateTextItem ( "", 0.8, start + (distance * 2 ), 1, 255, 255, 255, 255, size )
  10. outputMessageTextItem3 = textCreateTextItem ( "", 0.8, start + (distance * 3 ), 1, 255, 255, 255, 255, size )
  11. outputMessageTextItem4 = textCreateTextItem ( "", 0.8, start + (distance * 4 ), 1, 255, 255, 255, 255, size )
  12. outputMessageTextItem5 = textCreateTextItem ( "", 0.8, start + (distance * 5 ), 1, 255, 255, 255, 255, size )
  13. outputMessageTextItem6 = textCreateTextItem ( "", 0.8, start + (distance * 6 ), 1, 255, 255, 255, 255, size )
  14. textDisplayAddText ( outputMessageTextDisplay, outputMessageTextItem1 )
  15. textDisplayAddText ( outputMessageTextDisplay, outputMessageTextItem2 )
  16. textDisplayAddText ( outputMessageTextDisplay, outputMessageTextItem3 )
  17. textDisplayAddText ( outputMessageTextDisplay, outputMessageTextItem4 )
  18. textDisplayAddText ( outputMessageTextDisplay, outputMessageTextItem5 )
  19. textDisplayAddText ( outputMessageTextDisplay, outputMessageTextItem6 )
  20. local players = getElementsByType ( "player" )
  21. for k,v in players do
  22. textDisplayAddObserver ( outputMessageTextDisplay, v )
  23. end
  24. end
  25.  
  26. addEventHandler ( "onPlayerJoin", getRootElement(), "showTextPlayerJoin" )
  27. function showTextPlayerJoin ()
  28. textDisplayAddObserver ( outputMessageTextDisplay, source )
  29. end
  30.  
  31. function outputMessage ( text, r, g, b, a )
  32. local text2 = textItemGetText ( outputMessageTextItem2 )
  33. local r2,g2,b2,a2 = textItemGetColor ( outputMessageTextItem2 )
  34. local text3 = textItemGetText ( outputMessageTextItem3 )
  35. local r3,g3,b3,a3 = textItemGetColor ( outputMessageTextItem3 )
  36. local text4 = textItemGetText ( outputMessageTextItem4 )
  37. local r4,g4,b4,a4 = textItemGetColor ( outputMessageTextItem4 )
  38. local text5 = textItemGetText ( outputMessageTextItem5 )
  39. local r5,g5,b5,a5 = textItemGetColor ( outputMessageTextItem5 )
  40. local text6 = textItemGetText ( outputMessageTextItem6 )
  41. local r6,g6,b6,a6 = textItemGetColor ( outputMessageTextItem6 )
  42. textItemSetText ( outputMessageTextItem5, text6 )
  43. textItemSetColor ( outputMessageTextItem5, r6, g6, b6, a6 )
  44. textItemSetText ( outputMessageTextItem4, text5 )
  45. textItemSetColor ( outputMessageTextItem4, r5, g5, b5, a5 )
  46. textItemSetText ( outputMessageTextItem3, text4 )
  47. textItemSetColor ( outputMessageTextItem3, r4, g4, b4, a4 )
  48. textItemSetText ( outputMessageTextItem2, text3 )
  49. textItemSetColor ( outputMessageTextItem2, r3, g3, b3, a3 )
  50. textItemSetText ( outputMessageTextItem1, text2 )
  51. textItemSetColor ( outputMessageTextItem1, r2, g2, b2, a2 )
  52. ---
  53. textItemSetText ( outputMessageTextItem6, text )
  54. textItemSetColor ( outputMessageTextItem6, r, g, b, a )
  55. --
  56. end
  57.  



Code complet

Code: Lua
  1. setTimer ( "checkHillArea", 500, 0 )
  2. leaderPlayers = {}
  3.  
  4.  -- -2171.0678710938, 693.17950439453,
  5.   -- -2157.6557617188, 693.22534179688
  6. --y    -2171.02734375, 678.80639648438
  7.  
  8. --13.412109375  -14.37310791015
  9.  
  10. addEventHandler ( "onResourceStart", getRootElement(), "kothStart" )
  11. function kothStart ( name )
  12.         hillArea = createColSquare ( -2171.0678710938, 678.17950439453, 0, 15, 15 )
  13.         --hillArea = createColCube ( -2171.0678710938, 693.17950439453, -50, 30, 30, 700 )
  14.         hillRadar = createRadarArea ( -2183.5678710938, 705.67950439453, 40, -40, 0, 255, 0, 175 )
  15.         --addScoreboardColumn ( "Points", "points", 0.2 )
  16.         local globalTextDisplay = textCreateDisplay ()
  17.         textItemLeaderScore = textCreateTextItem ( "Leader: None", 0.15, 0.3, 0, 255, 0, 0, 255, 1.4 )
  18.         textDisplayAddText ( globalTextDisplay, textItemLeaderScore )
  19.        
  20.         for k,v in getElementsByType ( "player" ) do
  21.                 setElementData ( v, "points", 0 )
  22.                 local playerTextDisplay = textCreateDisplay ()
  23.                 local yourScore = textCreateTextItem ( "Score: "..getElementData(v, "points"), 0.15, 0.7, 0, 255, 0, 0, 255, 1.8 )
  24.                 textDisplayAddText ( playerTextDisplay, yourScore )
  25.                 textDisplayAddObserver ( playerTextDisplay, v )
  26.                 setElementData ( v, "textItemPoints", yourScore )
  27.                
  28.                 textDisplayAddObserver ( globalTextDisplay, v )
  29.                 leaderPlayer = false
  30.         end
  31.         kothTimer = setTimer ( "kothEnd", 300000, 1 )
  32. end
  33.  
  34. function kothEnd ( )
  35.         local leader
  36.         for k,v in getElementsByType ( "player" ) do
  37.                 if ( leader ) then
  38.                         local currentPoints = getElementData ( v, "points" )
  39.                         local leaderPoints = getElementData ( leader, "points" )
  40.                         if ( currentPoints > leaderPoints ) then
  41.                                 leader = v
  42.                         end
  43.                 else
  44.                         leader = v
  45.                 end
  46.         end
  47.         local textDisplayWinner = textCreateDisplay ()
  48.         local textItem
  49.         if ( getElementData ( leader, "points" ) > 0 ) then
  50.                 textItem = textCreateTextItem ( "The time is out!\nWinner: "..leader.." with "..getElementData ( leader, "points" ).."points!\n\nNewRound!", 0.5, 0.5, 2, 255, 0, 0, 255, 255 )
  51.         else
  52.                 textItem = textCreateTextItem ( "The time is out!\nWinner: None\nNewRound!", 0.5, 0.5, 2, 255, 0, 0, 255, 255 )
  53.         end
  54.         textDisplayAddText ( textDisplay, textItem )
  55.         for k,v in getElementsByType ( "player" ) do
  56.                 textDisplayAddObserver ( textDisplayWinner, v )
  57.                 setElementData ( v, "points", 0 )
  58.                 textItemSetText ( getElementData(v,"textItemPoints"), "Score: 0" )
  59.         end
  60.         setTimer("textDestroyTextItem", 2000, 1, textItem)
  61.         setTimer("textDestroyDisplay", 2000, 1, textDisplayWinner)
  62.         textItemSetText ( textItemLeaderScore, "Leader: None" )
  63.         kothTimer = setTimer ( "kothEnd", 300000, 1 )
  64. end
  65.  
  66. addEventHandler ( "onPlayerJoin", getRootElement(), "kothJoin" )
  67. function kothJoin ()
  68.         setElementData ( source, "points", 0 )
  69.         local playerTextDisplay = textCreateDisplay ()
  70.         local yourScore = textCreateTextItem ( "Score: "..getElementData(source, "points"), 0.15, 0.7, 0, 255, 0, 0, 255, 1.8 )
  71.         textDisplayAddText ( playerTextDisplay, yourScore )
  72.         textDisplayAddObserver ( playerTextDisplay, source )
  73.         setElementData ( source, "textItemPoints", yourScore )
  74.        
  75.         textDisplayAddObserver ( globalTextDisplay, source )   
  76. end
  77.  
  78. function checkHillArea ()
  79.         local hillPlayers = getElementsWithinColShape ( hillArea, "player" )
  80.         --remove any dead players from the table
  81.         for k,v in hillPlayers do
  82.                 if ( isPlayerDead ( v ) ) then
  83.                         table.remove(hillPlayers,k)
  84.                 end
  85.         end
  86.         if table.getn ( hillPlayers ) ~= 0 then
  87.                 setRadarAreaFlashing ( hillRadar, true )
  88.                 setRadarAreaColor ( hillRadar, 255, 0, 0, 175 )
  89.  
  90.                 for k,v in hillPlayers do --next we check if anyone has a higher score
  91.                         local currentPoints = getElementData ( v, "points" )
  92.                         local newPoints = currentPoints + 1
  93.                         setElementData ( v, "points", newPoints )
  94.                         textItemSetText ( getElementData(v,"textItemPoints"), "Score: "..newPoints )   
  95.                         --outputChatBox ( currentPoints + 1 )
  96.                 end
  97.         else
  98.                 setRadarAreaFlashing ( hillRadar, false )
  99.                 setRadarAreaColor ( hillRadar, 0, 255, 0, 175 )
  100.         end
  101.        
  102.         local leaderText = ""
  103.         local leaders = 1
  104.         for k,v in getElementsByType ( "player" ) do
  105.                 if leaderPlayer == false then leaderPlayer = v end
  106.                
  107.                 local leaderPoints = getElementData ( leaderPlayer, "points" )
  108.                 playerPoints = getElementData ( v, "points" )
  109.                 if v ~= leaderPlayer then
  110.                         if playerPoints > leaderPoints then            
  111.                                 leaders = 1
  112.                                 leaderPlayer = v
  113.                                 leaderText = getClientName ( v )
  114.                         elseif playerPoints == leaderPoints then
  115.                                 leaders = leaders + 1
  116.                                 leaderText = leaderText.."/"..getClientName(v)
  117.                         end    
  118.                 else
  119.                         leaderText = getClientName (leaderPlayer )
  120.                 end
  121.         end
  122.        
  123.         if leaders > 3 or leaders == getPlayerCount () or leaderPlayer == false then
  124.                 textItemSetText ( textItemLeaderScore, "Leader: None" )        
  125.         else
  126.                 textItemSetText ( textItemLeaderScore, "Leader: "..leaderText.." - "..getElementData(leaderPlayer,"points") )  
  127.         end
  128. end
  129.  
  130.  
  131. addEventHandler ( "onColShapeHit", --[[hillArea]] getRootElement(), "kothHillEnter" )
  132. function kothHillEnter ( player, dim )
  133.         if source == hillArea then
  134.                 outputMessage ( getClientName(player).." entered the zone!", 255, 255, 109, 255 )
  135.         end
  136. end
  137.  
  138.  
  139. addEventHandler ( "onColShapeLeave", --[[hillArea]]getRootElement(), "kothHillExit" )
  140. function kothHillExit ( player, dim )
  141.         if source == hillArea then
  142.         if isPlayerDead ( player ) ~= true then --so it isnt shown twice
  143.                 outputMessage ( getClientName(player).." left the zone!", 255, 255, 109, 255 )
  144.         end
  145.         end
  146. end
  147.  
  148.  
  149. addEventHandler ( "onPlayerWasted", getRootElement(), "KillMessages_onPlayerWasted" )
  150. function KillMessages_onPlayerWasted ( totalammo, killer, killerweapon, bodypart )
  151.         -- Grab the nick of the killed player
  152.         local killed_nick = getClientName ( source )
  153.         local r,g,b = getPlayerNametagColor     ( source )
  154.         -- Got a killer? Print the normal "* X died" if not
  155.         local a = 120
  156.         if ( isElementWithinColShape ( source, hillArea ) ) then
  157.                 r = 255
  158.                 g = 255
  159.                 b = 109
  160.                 a = 255
  161.         end
  162.         if ( killer ) then
  163.                 -- Suicide?
  164.                 if (source == killer) then
  165.                         killed_nick = "himself"
  166.                 end
  167.                 -- Populate a "' X killed Y" killmessage
  168.                 local killmessage = getClientName(killer).." killed "..killed_nick
  169.                 -- Grab the name of the killer weapon. Got any? Print the message with or without the weapon name
  170.                 local killerweapon_name = getWeaponNameFromID ( killerweapon )
  171.                 if ( killerweapon_name ) then
  172.                         outputMessage( killmessage.." ("..killerweapon_name..")",  r, g, b, a )
  173.                 else
  174.                         outputMessage( killmessage, r, g, b, a )
  175.                 end
  176.         else
  177.                 outputMessage( killed_nick.." died", r, g, b, a )
  178.         end
  179. end
  180.  
  181.  
  182.  
  183. ------OUTPUT MESSAGE CODE-----
  184. addEventHandler ( "onResourceStart", getRootElement(), "createTextOnLoad" )
  185. function createTextOnLoad ( name )
  186.         local outputMessageTextDisplay = textCreateDisplay ()
  187.         local distance = 0.027
  188.         local start = 0.25
  189.         local size = 1.2
  190.                 outputMessageTextItem1 = textCreateTextItem ( "", 0.8, start + distance, 1, 255, 255, 255, 255, size )
  191.                 outputMessageTextItem2 = textCreateTextItem ( "", 0.8, start + (distance * 2 ), 1, 255, 255, 255, 255, size )
  192.                 outputMessageTextItem3 = textCreateTextItem ( "", 0.8, start + (distance * 3 ), 1, 255, 255, 255, 255, size )
  193.                 outputMessageTextItem4 = textCreateTextItem ( "", 0.8, start + (distance * 4 ), 1, 255, 255, 255, 255, size )
  194.                 outputMessageTextItem5 = textCreateTextItem ( "", 0.8, start + (distance * 5 ), 1, 255, 255, 255, 255, size )
  195.                 outputMessageTextItem6 = textCreateTextItem ( "", 0.8, start + (distance * 6 ), 1, 255, 255, 255, 255, size )
  196.         textDisplayAddText ( outputMessageTextDisplay, outputMessageTextItem1 )
  197.         textDisplayAddText ( outputMessageTextDisplay, outputMessageTextItem2 )
  198.         textDisplayAddText ( outputMessageTextDisplay, outputMessageTextItem3 )
  199.         textDisplayAddText ( outputMessageTextDisplay, outputMessageTextItem4 )
  200.         textDisplayAddText ( outputMessageTextDisplay, outputMessageTextItem5 )
  201.         textDisplayAddText ( outputMessageTextDisplay, outputMessageTextItem6 )
  202.         local players = getElementsByType ( "player" )
  203.         for k,v in players do
  204.                 textDisplayAddObserver ( outputMessageTextDisplay, v )
  205.         end
  206. end
  207.  
  208. addEventHandler ( "onPlayerJoin", getRootElement(), "showTextPlayerJoin" )
  209. function showTextPlayerJoin ()
  210.         textDisplayAddObserver ( outputMessageTextDisplay, source )
  211. end
  212.  
  213. function outputMessage ( text, r, g, b, a )
  214.         local text2 = textItemGetText ( outputMessageTextItem2 )
  215.         local r2,g2,b2,a2 = textItemGetColor ( outputMessageTextItem2 )
  216.         local text3 = textItemGetText ( outputMessageTextItem3 )
  217.         local r3,g3,b3,a3 = textItemGetColor ( outputMessageTextItem3 )
  218.         local text4 = textItemGetText ( outputMessageTextItem4 )
  219.         local r4,g4,b4,a4 = textItemGetColor ( outputMessageTextItem4 )
  220.         local text5 = textItemGetText ( outputMessageTextItem5 )
  221.         local r5,g5,b5,a5 = textItemGetColor ( outputMessageTextItem5 )
  222.         local text6 = textItemGetText ( outputMessageTextItem6 )
  223.         local r6,g6,b6,a6 = textItemGetColor ( outputMessageTextItem6 )
  224.         textItemSetText ( outputMessageTextItem5, text6 )
  225.         textItemSetColor ( outputMessageTextItem5, r6, g6, b6, a6 )
  226.         textItemSetText ( outputMessageTextItem4, text5 )
  227.         textItemSetColor ( outputMessageTextItem4, r5, g5, b5, a5 )
  228.         textItemSetText ( outputMessageTextItem3, text4 )
  229.         textItemSetColor ( outputMessageTextItem3, r4, g4, b4, a4 )
  230.         textItemSetText ( outputMessageTextItem2, text3 )
  231.         textItemSetColor ( outputMessageTextItem2, r3, g3, b3, a3 )
  232.         textItemSetText ( outputMessageTextItem1, text2 )
  233.         textItemSetColor ( outputMessageTextItem1, r2, g2, b2, a2 )
  234.         ---
  235.         textItemSetText ( outputMessageTextItem6, text )
  236.         textItemSetColor ( outputMessageTextItem6, r, g, b, a )
  237.         --
  238. end


~ Leader honoraire de la FsK Team ~ -
~ Membre honoraire de la PCP Team ~

Co-fondateur de GTAO - Retraité de la communauté

"Nous ne sommes rien, soyons tout !"


Hors ligne Labiloute

  • XSA
  • *
  • Tueur en série
  • Messages: 207
    • Voir le profil
    • GTA-Stunt.com
Re : Scripting Tutorial 6 - King of the Hill Gamemode
« Réponse #1 le: 09 Mars 2007, 11:28:33 »
OUCH enorme tuto mais je pense qui ravira plus d'un

LA SORTIE MERDE ! :wall