• 28 Mars 2024, 19:25:01


Auteur Sujet: Scripting Tutorial 6 - King of the Hill Gamemode  (Lu 14693 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 : http://www.mtasa.com/videos/scriptvideo6.avi
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) [Sélectionner]
kothTimer = setTimer ( "checkHillArea", 500, 0 )

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) [Sélectionner]
addEventHandler ( "onResourceStart", getRootElement(), "kothStart" )
function kothStart ( name )
hillArea = createColSquare ( -2171.0678710938, 678.17950439453, 0, 15, 15 )

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) [Sélectionner]
hillRadar = createRadarArea ( -2183.5678710938, 705.67950439453, 40, -40, 0, 255, 0, 175 )

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) [Sélectionner]
local globalTextDisplay = textCreateDisplay ()
textItemLeaderScore = textCreateTextItem ( "Leader: None", 0.15, 0.3, 0, 255, 0, 0, 255, 1.4 )
textDisplayAddText ( globalTextDisplay, textItemLeaderScore )
 
for k,v in getElementsByType ( "player" ) do
setElementData ( v, "points", 0 )
local playerTextDisplay = textCreateDisplay ()
local yourScore = textCreateTextItem ( "Score: "..getElementData(v, "points"), 0.15, 0.7, 0, 255, 0, 0, 255, 1.8 )
textDisplayAddText ( playerTextDisplay, yourScore )
textDisplayAddObserver ( playerTextDisplay, v )
setElementData ( v, "textItemPoints", yourScore )
 
textDisplayAddObserver ( globalTextDisplay, v )
leaderPlayer = false
end

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

Code: (lua) [Sélectionner]
kothEndTimer = setTimer ( "kothEnd", 300000, 1 )
end

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) [Sélectionner]
addEventHandler ( "onPlayerJoin", getRootElement(), "kothJoin" )
function kothJoin ()
setElementData ( source, "points", 0 )
local playerTextDisplay = textCreateDisplay ()
local yourScore = textCreateTextItem ( "Score: "..getElementData(source, "points"), 0.15, 0.7, 0, 255, 0, 0, 255, 1.8 )
textDisplayAddText ( playerTextDisplay, yourScore )
textDisplayAddObserver ( playerTextDisplay, source )
setElementData ( source, "textItemPoints", yourScore )
textDisplayAddObserver ( globalTextDisplay, source )
end

Au spawn du joueur.

Code: (lua) [Sélectionner]
addEventHandler ( "onPlayerSpawn", getRootElement(), "kothSpawn" )
function kothSpawn ( spawnpoint, team )

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

Code: (lua) [Sélectionner]
giveWeapon ( source, 30, 10000 )
end


Fonctions principales

Code: (lua) [Sélectionner]
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) [Sélectionner]
local hillPlayers = getElementsWithinColShape ( hillArea, "player" )

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) [Sélectionner]
for k,v in hillPlayers do
if ( isPlayerDead ( v ) ) then
table.remove(hillPlayers,k)
end
end

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

Code: (lua) [Sélectionner]
if table.getn ( hillPlayers ) ~= 0 then

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) [Sélectionner]
setRadarAreaFlashing ( hillRadar, true )
setRadarAreaColor ( hillRadar, 255, 0, 0, 175 )

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) [Sélectionner]
for k,v in hillPlayers do
local currentPoints = getElementData ( v, "points" )
local newPoints = currentPoints + 1
setElementData ( v, "points", newPoints )
textItemSetText ( getElementData(v,"textItemPoints"), "Score: "..newPoints )
end


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) [Sélectionner]
else
setRadarAreaFlashing ( hillRadar, false )
setRadarAreaColor ( hillRadar, 0, 255, 0, 175 )
end


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

Code: (lua) [Sélectionner]
local leaderText = ""
local leaders = 1
for k,v in getElementsByType ( "player" ) do

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

Code: (lua) [Sélectionner]
if leaderPlayer == false then leaderPlayer = v end

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) [Sélectionner]
local leaderPoints = getElementData ( leaderPlayer, "points" )
playerPoints = getElementData ( v, "points" )

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

Code: (lua) [Sélectionner]
if playerPoints > leaderPoints then
leaders = 1
leaderPlayer = v
leaderText = getClientName ( v )

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

Code: (lua) [Sélectionner]
elseif playerPoints == leaderPoints then
leaders = leaders + 1
leaderText = leaderText.."/"..getClientName(v)
end
end
end

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

Code: (lua) [Sélectionner]
if leaders > 3 or leaders == getPlayerCount () or leaderPlayer == false then
textItemSetText ( textItemLeaderScore, "Leader: None" )
else
textItemSetText ( textItemLeaderScore, "Leader: "..leaderText.." - "..getElementData(leaderPlayer,"points") )
end
end


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

Code: (lua) [Sélectionner]
function kothEnd ( )

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

Code: (lua) [Sélectionner]
killTimer ( kothTimer )

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

Code: (lua) [Sélectionner]
local leaderText = ""
local leaders = 1
for k,v in getElementsByType ( "player" ) do
if leaderPlayer == false then leaderPlayer = v end
 
local leaderPoints = getElementData ( leaderPlayer, "points" )
playerPoints = getElementData ( v, "points" )
if v ~= leaderPlayer then
if playerPoints > leaderPoints then
leaders = 1
leaderPlayer = v
leaderText = getClientName ( v )
elseif playerPoints == leaderPoints then
leaders = leaders + 1
leaderText = leaderText.."/"..getClientName(v)
end
else
leaderText = getClientName (leaderPlayer )
end
end
local textDisplayWinner = textCreateDisplay ()
local textItem
if leaders > 3 or leaders == getPlayerCount () or leaderPlayer == false then
textItem = textCreateTextItem ( "The time is out!\nWinner: None\nNewRound!", 0.5, 0.5, 2, 255, 0, 0, 255, 255 )
else
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 )
end
textDisplayAddText ( textDisplay, textItem )
for k,v in getElementsByType ( "player" ) do
textDisplayAddObserver ( textDisplayWinner, v )
setElementData ( v, "points", 0 )
textItemSetText ( getElementData(v,"textItemPoints"), "Score: 0" )
end

Et enfin...
Nous allons relancer la ressource.

Code: (lua) [Sélectionner]
restartResource ( getThisResource() )
end


Augmentation de la puissance des armes

Code: (lua) [Sélectionner]
addEventHandler ( "onPlayerDamage", getRootElement(), "kothDamage" )
function kothDamage ( attacker, weapon, bodypart, loss )

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) [Sélectionner]
local damage = loss * 1.25
local hpLeft = getPlayerHealth ( source ) - damage

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) [Sélectionner]
if ( hpLeft > 0 ) then
if ( bodypart == 9 ) then
killPlayer ( source, attacker, weapon, bodypart )
else
setPlayerHealth ( source, hpLeft )
end

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

Code: (lua) [Sélectionner]
else
killPlayer ( source, attacker, weapon, bodypart )
end
end
end


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) [Sélectionner]
addEventHandler ( "onColShapeHit", -- getRootElement(), "kothHillEnter" )
function kothHillEnter ( player, dim )
if source == hillArea then
outputMessage ( getClientName(player).." entered the zone!", 255, 255, 109, 255 )
end
end
 
addEventHandler ( "onColShapeLeave", --getRootElement(), "kothHillExit" )
function kothHillExit ( player, dim )
if source == hillArea then
if isPlayerDead ( player ) ~= true then
outputMessage ( getClientName(player).." left the zone!", 255, 255, 109, 255 )
end
end
end


Et enfin, nous allons afficher les messages de morts.

Code: (lua) [Sélectionner]
addEventHandler ( "onPlayerWasted", getRootElement(), "KillMessages_onPlayerWasted" )
function KillMessages_onPlayerWasted ( totalammo, killer, killerweapon, bodypart )

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) [Sélectionner]
local killed_nick = getClientName ( source )
local r,g,b = getPlayerNametagColor( source )
local a = 120

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

Code: (lua) [Sélectionner]
if ( isElementWithinColShape ( source, hillArea ) ) then
r = 255
g = 255
b = 109
a = 255
end

Sinon, nous affichons simplement le message.

Code: (lua) [Sélectionner]
if ( killer ) then
if (source == killer) then
killed_nick = "himself"
end
local killmessage = getClientName(killer).." killed "..killed_nick
local killerweapon_name = getWeaponNameFromID ( killerweapon )
if ( killerweapon_name ) then
outputMessage( killmessage.." ("..killerweapon_name..")",  r, g, b, a )
else
outputMessage( killmessage, r, g, b, a )
end
else
outputMessage( killed_nick.." died", r, g, b, a )
end
end

Code: (lua) [Sélectionner]
------OUTPUT MESSAGE CODE-----
addEventHandler ( "onResourceStart", getRootElement(), "createTextOnLoad" )
function createTextOnLoad ( name )
local outputMessageTextDisplay = textCreateDisplay ()
local distance = 0.027
local start = 0.25
local size = 1.2
outputMessageTextItem1 = textCreateTextItem ( "", 0.8, start + distance, 1, 255, 255, 255, 255, size )
outputMessageTextItem2 = textCreateTextItem ( "", 0.8, start + (distance * 2 ), 1, 255, 255, 255, 255, size )
outputMessageTextItem3 = textCreateTextItem ( "", 0.8, start + (distance * 3 ), 1, 255, 255, 255, 255, size )
outputMessageTextItem4 = textCreateTextItem ( "", 0.8, start + (distance * 4 ), 1, 255, 255, 255, 255, size )
outputMessageTextItem5 = textCreateTextItem ( "", 0.8, start + (distance * 5 ), 1, 255, 255, 255, 255, size )
outputMessageTextItem6 = textCreateTextItem ( "", 0.8, start + (distance * 6 ), 1, 255, 255, 255, 255, size )
textDisplayAddText ( outputMessageTextDisplay, outputMessageTextItem1 )
textDisplayAddText ( outputMessageTextDisplay, outputMessageTextItem2 )
textDisplayAddText ( outputMessageTextDisplay, outputMessageTextItem3 )
textDisplayAddText ( outputMessageTextDisplay, outputMessageTextItem4 )
textDisplayAddText ( outputMessageTextDisplay, outputMessageTextItem5 )
textDisplayAddText ( outputMessageTextDisplay, outputMessageTextItem6 )
local players = getElementsByType ( "player" )
for k,v in players do
textDisplayAddObserver ( outputMessageTextDisplay, v )
end
end
 
addEventHandler ( "onPlayerJoin", getRootElement(), "showTextPlayerJoin" )
function showTextPlayerJoin ()
textDisplayAddObserver ( outputMessageTextDisplay, source )
end
 
function outputMessage ( text, r, g, b, a )
local text2 = textItemGetText ( outputMessageTextItem2 )
local r2,g2,b2,a2 = textItemGetColor ( outputMessageTextItem2 )
local text3 = textItemGetText ( outputMessageTextItem3 )
local r3,g3,b3,a3 = textItemGetColor ( outputMessageTextItem3 )
local text4 = textItemGetText ( outputMessageTextItem4 )
local r4,g4,b4,a4 = textItemGetColor ( outputMessageTextItem4 )
local text5 = textItemGetText ( outputMessageTextItem5 )
local r5,g5,b5,a5 = textItemGetColor ( outputMessageTextItem5 )
local text6 = textItemGetText ( outputMessageTextItem6 )
local r6,g6,b6,a6 = textItemGetColor ( outputMessageTextItem6 )
textItemSetText ( outputMessageTextItem5, text6 )
textItemSetColor ( outputMessageTextItem5, r6, g6, b6, a6 )
textItemSetText ( outputMessageTextItem4, text5 )
textItemSetColor ( outputMessageTextItem4, r5, g5, b5, a5 )
textItemSetText ( outputMessageTextItem3, text4 )
textItemSetColor ( outputMessageTextItem3, r4, g4, b4, a4 )
textItemSetText ( outputMessageTextItem2, text3 )
textItemSetColor ( outputMessageTextItem2, r3, g3, b3, a3 )
textItemSetText ( outputMessageTextItem1, text2 )
textItemSetColor ( outputMessageTextItem1, r2, g2, b2, a2 )
---
textItemSetText ( outputMessageTextItem6, text )
textItemSetColor ( outputMessageTextItem6, r, g, b, a )
--
end



Code complet

Code: (lua) [Sélectionner]
setTimer ( "checkHillArea", 500, 0 )
leaderPlayers = {}

 -- -2171.0678710938, 693.17950439453,
  -- -2157.6557617188, 693.22534179688
--y    -2171.02734375, 678.80639648438

--13.412109375  -14.37310791015

addEventHandler ( "onResourceStart", getRootElement(), "kothStart" )
function kothStart ( name )
hillArea = createColSquare ( -2171.0678710938, 678.17950439453, 0, 15, 15 )
--hillArea = createColCube ( -2171.0678710938, 693.17950439453, -50, 30, 30, 700 )
hillRadar = createRadarArea ( -2183.5678710938, 705.67950439453, 40, -40, 0, 255, 0, 175 )
--addScoreboardColumn ( "Points", "points", 0.2 )
local globalTextDisplay = textCreateDisplay ()
textItemLeaderScore = textCreateTextItem ( "Leader: None", 0.15, 0.3, 0, 255, 0, 0, 255, 1.4 )
textDisplayAddText ( globalTextDisplay, textItemLeaderScore )

for k,v in getElementsByType ( "player" ) do
setElementData ( v, "points", 0 )
local playerTextDisplay = textCreateDisplay ()
local yourScore = textCreateTextItem ( "Score: "..getElementData(v, "points"), 0.15, 0.7, 0, 255, 0, 0, 255, 1.8 )
textDisplayAddText ( playerTextDisplay, yourScore )
textDisplayAddObserver ( playerTextDisplay, v )
setElementData ( v, "textItemPoints", yourScore )

textDisplayAddObserver ( globalTextDisplay, v )
leaderPlayer = false
end
kothTimer = setTimer ( "kothEnd", 300000, 1 )
end

function kothEnd ( )
local leader
for k,v in getElementsByType ( "player" ) do
if ( leader ) then
local currentPoints = getElementData ( v, "points" )
local leaderPoints = getElementData ( leader, "points" )
if ( currentPoints > leaderPoints ) then
leader = v
end
else
leader = v
end
end
local textDisplayWinner = textCreateDisplay ()
local textItem
if ( getElementData ( leader, "points" ) > 0 ) then
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 )
else
textItem = textCreateTextItem ( "The time is out!\nWinner: None\nNewRound!", 0.5, 0.5, 2, 255, 0, 0, 255, 255 )
end
textDisplayAddText ( textDisplay, textItem )
for k,v in getElementsByType ( "player" ) do
textDisplayAddObserver ( textDisplayWinner, v )
setElementData ( v, "points", 0 )
textItemSetText ( getElementData(v,"textItemPoints"), "Score: 0" )
end
setTimer("textDestroyTextItem", 2000, 1, textItem)
setTimer("textDestroyDisplay", 2000, 1, textDisplayWinner)
textItemSetText ( textItemLeaderScore, "Leader: None" )
kothTimer = setTimer ( "kothEnd", 300000, 1 )
end

addEventHandler ( "onPlayerJoin", getRootElement(), "kothJoin" )
function kothJoin ()
setElementData ( source, "points", 0 )
local playerTextDisplay = textCreateDisplay ()
local yourScore = textCreateTextItem ( "Score: "..getElementData(source, "points"), 0.15, 0.7, 0, 255, 0, 0, 255, 1.8 )
textDisplayAddText ( playerTextDisplay, yourScore )
textDisplayAddObserver ( playerTextDisplay, source )
setElementData ( source, "textItemPoints", yourScore )

textDisplayAddObserver ( globalTextDisplay, source )
end

function checkHillArea ()
local hillPlayers = getElementsWithinColShape ( hillArea, "player" )
--remove any dead players from the table
for k,v in hillPlayers do
if ( isPlayerDead ( v ) ) then
table.remove(hillPlayers,k)
end
end
if table.getn ( hillPlayers ) ~= 0 then
setRadarAreaFlashing ( hillRadar, true )
setRadarAreaColor ( hillRadar, 255, 0, 0, 175 )

for k,v in hillPlayers do --next we check if anyone has a higher score
local currentPoints = getElementData ( v, "points" )
local newPoints = currentPoints + 1
setElementData ( v, "points", newPoints )
textItemSetText ( getElementData(v,"textItemPoints"), "Score: "..newPoints )
--outputChatBox ( currentPoints + 1 )
end
else
setRadarAreaFlashing ( hillRadar, false )
setRadarAreaColor ( hillRadar, 0, 255, 0, 175 )
end

local leaderText = ""
local leaders = 1
for k,v in getElementsByType ( "player" ) do
if leaderPlayer == false then leaderPlayer = v end

local leaderPoints = getElementData ( leaderPlayer, "points" )
playerPoints = getElementData ( v, "points" )
if v ~= leaderPlayer then
if playerPoints > leaderPoints then
leaders = 1
leaderPlayer = v
leaderText = getClientName ( v )
elseif playerPoints == leaderPoints then
leaders = leaders + 1
leaderText = leaderText.."/"..getClientName(v)
end
else
leaderText = getClientName (leaderPlayer )
end
end

if leaders > 3 or leaders == getPlayerCount () or leaderPlayer == false then
textItemSetText ( textItemLeaderScore, "Leader: None" )
else
textItemSetText ( textItemLeaderScore, "Leader: "..leaderText.." - "..getElementData(leaderPlayer,"points") )
end
end

 
addEventHandler ( "onColShapeHit", --[[hillArea]] getRootElement(), "kothHillEnter" )
function kothHillEnter ( player, dim )
if source == hillArea then
outputMessage ( getClientName(player).." entered the zone!", 255, 255, 109, 255 )
end
end


addEventHandler ( "onColShapeLeave", --[[hillArea]]getRootElement(), "kothHillExit" )
function kothHillExit ( player, dim )
if source == hillArea then
if isPlayerDead ( player ) ~= true then --so it isnt shown twice
outputMessage ( getClientName(player).." left the zone!", 255, 255, 109, 255 )
end
end
end


addEventHandler ( "onPlayerWasted", getRootElement(), "KillMessages_onPlayerWasted" )
function KillMessages_onPlayerWasted ( totalammo, killer, killerweapon, bodypart )
-- Grab the nick of the killed player
local killed_nick = getClientName ( source )
local r,g,b = getPlayerNametagColor ( source )
-- Got a killer? Print the normal "* X died" if not
local a = 120
if ( isElementWithinColShape ( source, hillArea ) ) then
r = 255
g = 255
b = 109
a = 255
end
if ( killer ) then
-- Suicide?
if (source == killer) then
killed_nick = "himself"
end
-- Populate a "' X killed Y" killmessage
local killmessage = getClientName(killer).." killed "..killed_nick
-- Grab the name of the killer weapon. Got any? Print the message with or without the weapon name
local killerweapon_name = getWeaponNameFromID ( killerweapon )
if ( killerweapon_name ) then
outputMessage( killmessage.." ("..killerweapon_name..")",  r, g, b, a )
else
outputMessage( killmessage, r, g, b, a )
end
else
outputMessage( killed_nick.." died", r, g, b, a )
end
end



------OUTPUT MESSAGE CODE-----
addEventHandler ( "onResourceStart", getRootElement(), "createTextOnLoad" )
function createTextOnLoad ( name )
local outputMessageTextDisplay = textCreateDisplay ()
local distance = 0.027
local start = 0.25
local size = 1.2
outputMessageTextItem1 = textCreateTextItem ( "", 0.8, start + distance, 1, 255, 255, 255, 255, size )
outputMessageTextItem2 = textCreateTextItem ( "", 0.8, start + (distance * 2 ), 1, 255, 255, 255, 255, size )
outputMessageTextItem3 = textCreateTextItem ( "", 0.8, start + (distance * 3 ), 1, 255, 255, 255, 255, size )
outputMessageTextItem4 = textCreateTextItem ( "", 0.8, start + (distance * 4 ), 1, 255, 255, 255, 255, size )
outputMessageTextItem5 = textCreateTextItem ( "", 0.8, start + (distance * 5 ), 1, 255, 255, 255, 255, size )
outputMessageTextItem6 = textCreateTextItem ( "", 0.8, start + (distance * 6 ), 1, 255, 255, 255, 255, size )
textDisplayAddText ( outputMessageTextDisplay, outputMessageTextItem1 )
textDisplayAddText ( outputMessageTextDisplay, outputMessageTextItem2 )
textDisplayAddText ( outputMessageTextDisplay, outputMessageTextItem3 )
textDisplayAddText ( outputMessageTextDisplay, outputMessageTextItem4 )
textDisplayAddText ( outputMessageTextDisplay, outputMessageTextItem5 )
textDisplayAddText ( outputMessageTextDisplay, outputMessageTextItem6 )
local players = getElementsByType ( "player" )
for k,v in players do
textDisplayAddObserver ( outputMessageTextDisplay, v )
end
end

addEventHandler ( "onPlayerJoin", getRootElement(), "showTextPlayerJoin" )
function showTextPlayerJoin ()
textDisplayAddObserver ( outputMessageTextDisplay, source )
end

function outputMessage ( text, r, g, b, a )
local text2 = textItemGetText ( outputMessageTextItem2 )
local r2,g2,b2,a2 = textItemGetColor ( outputMessageTextItem2 )
local text3 = textItemGetText ( outputMessageTextItem3 )
local r3,g3,b3,a3 = textItemGetColor ( outputMessageTextItem3 )
local text4 = textItemGetText ( outputMessageTextItem4 )
local r4,g4,b4,a4 = textItemGetColor ( outputMessageTextItem4 )
local text5 = textItemGetText ( outputMessageTextItem5 )
local r5,g5,b5,a5 = textItemGetColor ( outputMessageTextItem5 )
local text6 = textItemGetText ( outputMessageTextItem6 )
local r6,g6,b6,a6 = textItemGetColor ( outputMessageTextItem6 )
textItemSetText ( outputMessageTextItem5, text6 )
textItemSetColor ( outputMessageTextItem5, r6, g6, b6, a6 )
textItemSetText ( outputMessageTextItem4, text5 )
textItemSetColor ( outputMessageTextItem4, r5, g5, b5, a5 )
textItemSetText ( outputMessageTextItem3, text4 )
textItemSetColor ( outputMessageTextItem3, r4, g4, b4, a4 )
textItemSetText ( outputMessageTextItem2, text3 )
textItemSetColor ( outputMessageTextItem2, r3, g3, b3, a3 )
textItemSetText ( outputMessageTextItem1, text2 )
textItemSetColor ( outputMessageTextItem1, r2, g2, b2, a2 )
---
textItemSetText ( outputMessageTextItem6, text )
textItemSetColor ( outputMessageTextItem6, r, g, b, a )
--
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