Skip to content
Extraits de code Groupes Projets
Valider fbfc4732 rédigé par unknown's avatar unknown
Parcourir les fichiers

Added the hunter, needs other fixes

parent 795ca306
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
Aucun aperçu pour ce type de fichier
...@@ -50,7 +50,6 @@ in ...@@ -50,7 +50,6 @@ in
%%%% Description of the map %%%% %%%% Description of the map %%%%
/*
NRow = 10 NRow = 10
NColumn = 20 NColumn = 20
Map = [[0 1 0 0 0 0 0 0 0 1 1 0 1 0 0 0 1 0 0 0] Map = [[0 1 0 0 0 0 0 0 0 1 1 0 1 0 0 0 1 0 0 0]
...@@ -63,7 +62,8 @@ in ...@@ -63,7 +62,8 @@ in
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0]
[0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0] [0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0]
[0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0]] [0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0]]
*/
/*
NRow = 5 NRow = 5
NColumn = 5 NColumn = 5
Map = [[0 0 0 0 1] Map = [[0 0 0 0 1]
...@@ -71,12 +71,12 @@ in ...@@ -71,12 +71,12 @@ in
[0 0 0 1 0] [0 0 0 1 0]
[0 0 1 0 0] [0 0 1 0 0]
[0 0 0 0 0]] [0 0 0 0 0]]
*/
%%%% Players description %%%% %%%% Players description %%%%
NbPlayers = 3 NbPlayers = 2
Players = [player020oneafterone player020oneafterone player020oneafterone] Players = [player020random player020hunter]
Colors = [ black c(245 88 203) c(255 102 0)] Colors = [c(245 88 203) c(255 102 0)]
%%%% Surface time/turns %%%% %%%% Surface time/turns %%%%
......
Aucun aperçu pour ce type de fichier
Aucun aperçu pour ce type de fichier
...@@ -9,52 +9,60 @@ define ...@@ -9,52 +9,60 @@ define
StartPlayer StartPlayer
TreatStream TreatStream
AllDirections = [east west north south surface] AllDirections = [east west north south surface]
AllWeapons = [missile drone] AllWeapons = [missile]
fun {GetNewEnemyTarget MyId Dead} fun{NewRec Rec Feature Value}
Enemy=({OS.rand} mod Input.nbPlayer) + 1 NewRecord={Record.clone Rec}
in in
if {List.length Dead}==Input.nbPlayer then {List.forAll {Record.arity NewRecord} proc{$ Feat}
null if Feat==Feature then NewRecord.Feat=Value
elseif Enemy \= MyId andthen {Not {List.member Enemy Dead}} then else NewRecord.Feat=Rec.Feat end
Enemy end}
else NewRecord
{GetNewEnemyTarget MyId Dead} end
fun{ValidPosition X Y History}
if X < 1 orelse X > Input.nRow then
false
elseif Y < 1 orelse Y > Input.nColumn then
false
else
{And {Not {List.nth {List.nth Input.map X} Y}==1}
{Not {List.member pt(x:X y:Y) History}}}
end end
end end
fun {GetNewChargeFireItem Item} fun{GetRandomPosInWater History}
case Item RandomX = ({OS.rand} mod Input.nRow) + 1
of missile then '#'(fireItem:missile({GetRandomPosInWater nil}) charge:0) RandomY = ({OS.rand} mod Input.nColumn) + 1
[] drone then Unbound in in
if {OS.rand} mod 2 == 0 then '#'(fireItem:drone(row Unbound) charge:0) if {Not {ValidPosition RandomX RandomY History}} then
else '#'(fireItem:drone(column Unbound) charge:0) end {GetRandomPosInWater History}
else pt(x:RandomX y:RandomY)
end end
end end
fun{StartPlayer Color ID} fun {HandleInitPosition State initPosition(ID Pos)}
Stream RandomPt = {GetRandomPosInWater State.history}
Port in
ID=State.id Pos=RandomPt
{NewRec {NewRec State pos Pos} history nil}
end
fun {GetRandomElement L}
Idx=({OS.rand} mod {List.length L}) + 1
in in
{NewPort Stream Port} {List.nth L Idx}
thread end
{AliveTreatStream Stream '#'( id:id(id:ID color:Color name:name)
pos:pt(x:0 y:0) fun {UpdatePos pt(x:X y:Y) Direction}
history:nil case Direction
dead:nil of east then pt(x:X y:Y+1)
chargingItems: [ [] west then pt(x:X y:Y-1)
{GetNewChargeFireItem drone} {GetNewChargeFireItem drone} [] south then pt(x:X+1 y:Y)
{GetNewChargeFireItem missile} [] north then pt(x:X-1 y:Y)
] [] surface then pt(x:X y:Y)
chargedItems:nil
target:'#'(idNum:{GetNewEnemyTarget ID nil} history:nil confirmedRow:unit confirmedColumn:unit)
life:Input.maxDamage
gaveUpPosition: false
loopDirection: AllDirections
dronesLog:'#'(row:0 column:0)
)}
end end
Port
end end
fun {GetPossibleDirections CurrentPos History Directions} fun {GetPossibleDirections CurrentPos History Directions}
...@@ -80,71 +88,116 @@ define ...@@ -80,71 +88,116 @@ define
end end
end end
fun {GetRandomElement L} fun {HandleMove State move(ID Pos Direction)}
Idx=({OS.rand} mod {List.length L}) + 1 RandomDirection={GetRandomElement {GetPossibleDirections State.pos State.history AllDirections}}
NewPos={UpdatePos State.pos RandomDirection}
in in
{List.nth L Idx} ID=State.id Pos=NewPos Direction=RandomDirection
case RandomDirection
of surface then
{NewRec {NewRec State pos NewPos} history nil}
else
{NewRec {NewRec State pos NewPos} history Pos|State.history}
end
end end
fun{ValidPosition X Y PointsHistory} fun {GetNewChargeFireItem Item}
if X < 1 orelse X > Input.nRow then case Item
false of missile then Unbound in '#'(fireItem:missile(Unbound) charge:0)
elseif Y < 1 orelse Y > Input.nColumn then
false
else
{And {Not {List.nth {List.nth Input.map X} Y}==1}
{Not {List.member pt(x:X y:Y) PointsHistory}}}
end end
end end
fun{NewRec Rec Feature Value} fun {CheckFireItemReady '#'(fireItem:FireItem charge:NbCharge)}
NewRecord={Record.clone Rec} Input.{Record.label FireItem}==NbCharge
in
{List.forAll {Record.arity NewRecord} proc{$ Feat}
if Feat==Feature then NewRecord.Feat=Value
else NewRecord.Feat=Rec.Feat end
end}
NewRecord
end end
fun{GetRandomPosInWater History} fun{HandleChargeItem State chargeItem(ID Item)}
RandomX = ({OS.rand} mod Input.nRow) + 1 ToCharge={GetRandomElement State.chargingItems}
RandomY = ({OS.rand} mod Input.nColumn) + 1 AfterCharge={NewRec ToCharge charge ToCharge.charge+1}
in NewChargingItems
if {Not {ValidPosition RandomX RandomY History}} then in
{GetRandomPosInWater History} if {CheckFireItemReady AfterCharge} then NewChargingItem={GetNewChargeFireItem {Record.label AfterCharge.fireItem}} in
else pt(x:RandomX y:RandomY) ID=State.id Item={Record.label AfterCharge.fireItem}
NewChargingItems={List.map State.chargingItems fun{$ Item}
if Item==ToCharge then NewChargingItem
else Item end
end}
{NewRec {NewRec State chargingItems NewChargingItems} chargedItems AfterCharge.fireItem|State.chargedItems}
else
NewChargingItems={List.map State.chargingItems fun{$ Item}
{System.show Item}
if Item.charge==ToCharge.charge andthen {Record.label Item.fireItem}=={Record.label AfterCharge.fireItem} then AfterCharge
else Item end
end}
ID=State.id Item=null
{NewRec State chargingItems NewChargingItems}
end end
end end
fun {UpdatePos pt(x:X y:Y) Direction} fun {HandleFireItem State fireItem(ID KindFire)}
case Direction case State.chargedItems#State.targets
of east then pt(x:X y:Y+1) of nil#_ then
[] west then pt(x:X y:Y-1) ID=State.id KindFire=null
[] south then pt(x:X+1 y:Y) State
[] north then pt(x:X-1 y:Y) [] Missile#nil then
[] surface then pt(x:X y:Y) ID=State.id KindFire=null
State
[] (missile(Position)|T1)#(Target|T2) then Position=Target in
ID=State.id KindFire=missile(Position)
{System.show '-----------------Firing a missile at enemy postion'#Position}
{NewRec {NewRec State chargedItems {List.subtract State.chargedItems T1}} targets T2}
end end
end end
fun {HandleMove State move(ID Pos Direction)} fun{InitChargingItemsMissile NumberOfMissiles Acc}
RandomDirection={GetRandomElement {GetPossibleDirections State.pos State.history AllDirections}} if NumberOfMissiles==0 then Acc
NewPos={UpdatePos State.pos RandomDirection} else Missile = {GetNewChargeFireItem missile} in
in {InitChargingItemsMissile NumberOfMissiles-1 Missile|Acc}
ID=State.id Pos=NewPos Direction=RandomDirection
case RandomDirection
of surface then
{NewRec {NewRec State pos NewPos} history nil}
else
{NewRec {NewRec State pos NewPos} history Pos|State.history}
end end
end end
fun {HandleInitPosition State initPosition(ID Pos)} fun{HandleFireMine State fireMine(ID Mine)}
RandomPt = {GetRandomPosInWater State.history} case State.placedMines
in of nil then
ID=State.id Pos=RandomPt ID=State.id Mine=null
{NewRec {NewRec State pos Pos} history nil} State
elseif {OS.rand} mod 5 \= 0 then MineToExplode={GetRandomElement State.placedMines} in
ID=State.id Mine=MineToExplode
{NewRec State placedMines {List.subtract State.placedMines MineToExplode}}
else
ID=State.id Mine=null
State
end
end
fun {ManhattanDistance Pos1 Pos2}
{Abs Pos1.x-Pos2.x}+{Abs Pos1.y-Pos2.y}
end
fun {DamageFromExplosion MyPos ExplosionPos}
case {ManhattanDistance MyPos ExplosionPos}
of 0 then 2
[] 1 then 1
else 0 end
end
fun{HandleExplosion State ID Pos Msg}
Damage={DamageFromExplosion State.pos Pos}
in
case Damage
of 0 then
Msg=null
State
else NewLife={Max 0 State.life-Damage} in
case NewLife
of 0 then
Msg=sayDeath(State.id)
{NewRec State life 0}
else
Msg=sayDamageTaken(State.id Damage NewLife)
{NewRec State life NewLife}
end
end
end end
fun{InverseUpdatePos pt(x:X y:Y) Direction} fun{InverseUpdatePos pt(x:X y:Y) Direction}
...@@ -186,78 +239,76 @@ define ...@@ -186,78 +239,76 @@ define
end end
end end
fun {HandleSayMove State sayMove(id(id:EnemyId color:_ name:_) Direction)} fun{HandleSayMove State Enemies sayMove(MovedID MovedDir) Acc}
%% MoreComplex case Enemies of nil then State
case EnemyId==State.target.idNum [] Enemy|T andthen Enemy.idNum==MovedID.id then UpdatedEnemy PossiblePos in
of true then UpdatedEnemy={NewRec Enemy history MovedDir|Enemy.history}
{NewRec State target '#'(idNum:EnemyId history:Direction|State.target.history)} PossiblePos ={EnemyPossiblePositions 1 1 Enemy.history nil}
else if {List.length PossiblePos}==1 then Temp in
State Temp={NewRec State enemies {List.append UpdatedEnemy|Acc T}}
end {NewRec Temp targets {List.nth PossiblePos 1}|State.targets}
end else
{NewRec State enemies {List.append UpdatedEnemy|Acc T}}
fun {CheckFireItemReady '#'(fireItem:FireItem charge:NbCharge)}
Input.{Record.label FireItem}==NbCharge
end
fun{HandleChargeItem State chargeItem(ID Item)}
ToCharge={GetRandomElement State.chargingItems}
AfterCharge={NewRec ToCharge charge ToCharge.charge+1}
NewChargingItems
in
if {CheckFireItemReady AfterCharge} then NewChargingItem={GetNewChargeFireItem {Record.label AfterCharge.fireItem}} in
ID=State.id Item={Record.label AfterCharge.fireItem}
NewChargingItems={List.map State.chargingItems fun{$ Item}
if Item==ToCharge then NewChargingItem
else Item end
end}
{NewRec {NewRec State chargingItems NewChargingItems} chargedItems AfterCharge.fireItem|State.chargedItems}
else
NewChargingItems={List.map State.chargingItems fun{$ Item}
if Item==ToCharge then AfterCharge
else Item end
end}
ID=State.id Item=null
{NewRec State chargingItems NewChargingItems}
end
end
fun {FireSomething State fireItem(ID KindFire)}
case State.chargedItems
of nil then ID=State.id KindFire=null State
else ToFire={GetRandomElement State.chargedItems} in
case ToFire
of drone(column Y) then Y=(State.dronesLog.column mod Input.nColumn)+1
[] drone(row X) then X=(State.dronesLog.row mod Input.row)+1
end end
KindFire=ToFire ID=State.id [] AnotherEnemy|T then
{NewRec State chargedItems {List.subtract State.chargedItems ToFire}} {HandleSayMove State T sayMove(MovedID MovedDir) AnotherEnemy|Acc}
end end
end end
fun {HandleFireItem State fireItem(ID KindFire)}
Possibilities
in
if {List.length State.target.history} >= 10 then
Possibilities={EnemyPossiblePositions 1 1 State.target.history nil}
{System.show 'Enemy History'#State.target.history}
else
{FireSomething State fireItem(ID KindFire)}
end
end
fun {HandleAnswerDrone State sayAnswerDrone(Drone ID Answer)} proc{DeadTreatStream Stream State}
case ID case Stream
of id(id:EnemyId color:_ name:_) then of initPosition(ID Pos)|T then
if Answer then ID=null
case Drone {DeadTreatStream T State}
of drone(column Y) then [] move(ID Pos Direction)|T then
{NewRec State target {NewRec State.target confirmedColumn}} ID=null
[] drone(row X) then {DeadTreatStream T State}
[] dive|T then %% Ignored
end {DeadTreatStream T State}
else State end [] saySurface(ID)|T then %% Ignored
else State end {DeadTreatStream T State}
[] sayMove(ID Direct)|T then %% Ignored
{DeadTreatStream T State}
[] chargeItem(ID Item)|T then
ID=null
{DeadTreatStream T State}
[] isDead(Answer)|T then
Answer=true
{DeadTreatStream T State}
[] fireItem(ID KindFire)|T then
ID=null
{DeadTreatStream T State}
[] fireMine(ID Mine)|T then
ID=null
{DeadTreatStream T State}
[] sayCharge(ID KindItem)|T then %% Ignored
{DeadTreatStream T State}
[] sayMinePlaced(ID)|T then %% Ignored
{DeadTreatStream T State}
[] sayMissileExplode(ID Pos Msg)|T then
Msg=null
{DeadTreatStream T State}
[] sayMineExplode(ID Pos Msg)|T then
Msg=null
{DeadTreatStream T State}
[] sayPassingDrone(drone(row X) ID Answer)|T then
ID=null
{DeadTreatStream T State}
[] sayPassingDrone(drone(column Y) ID Answer)|T then
ID=null
{DeadTreatStream T State}
[] sayAnswerDrone(Drone ID Answer)|T then %% Ignore
{DeadTreatStream T State}
[] sayPassingSonar(ID Resp)|T then
ID=null
{DeadTreatStream T State}
[] sayAnswerSonar(ID Answer)|T then %% Ignore
{DeadTreatStream T State}
[] sayDamageTaken(ID Damage LifeLeft)|T then %% Ignore
{DeadTreatStream T State}
[] sayDeath(ID)|T then %% Ignore
{DeadTreatStream T State}
end
end end
proc{AliveTreatStream Stream State} proc{AliveTreatStream Stream State}
...@@ -271,20 +322,22 @@ define ...@@ -271,20 +322,22 @@ define
{System.show 'Player'#State.id.id#'received'#move(ID Pos Direction)} {System.show 'Player'#State.id.id#'received'#move(ID Pos Direction)}
NewState={HandleMove State move(ID Pos Direction)} NewState={HandleMove State move(ID Pos Direction)}
{System.show 'Player'#State.id.id#'replied'#move(ID Pos Direction)} {System.show 'Player'#State.id.id#'replied'#move(ID Pos Direction)}
{AliveTreatStream T NewState} {AliveTreatStream T NewState}
[] dive|T then %% Ignored [] dive|T then %% Ignored
{System.show 'Player'#State.id.id#'received'#dive} {System.show 'Player'#State.id.id#'received'#dive}
{AliveTreatStream T State} {AliveTreatStream T State}
[] saySurface(ID)|T then %% Ignored
{System.show 'Player'#State.id.id#'received'#saySurface(ID)}
{AliveTreatStream T State}
[] sayMove(ID Direction)|T then NewState in %% Ignored
{System.show 'Player'#State.id.id#'received'#sayMove(ID Direction)}
{System.show 'Player'#State.id.id#'before enemies:'#State.enemies}
NewState={HandleSayMove State State.enemies sayMove(ID Direction) nil}
{System.show 'Player'#State.id.id#'after enemies:'#State.enemies}
{AliveTreatStream T NewState}
[] isDead(Answer)|T then [] isDead(Answer)|T then
Answer=false Answer=false
{AliveTreatStream T State} {AliveTreatStream T State}
[] sayDeath(ID)|T then %% Ignore
{System.show 'Player'#State.id.id#'received'#sayDeath(ID)}
{AliveTreatStream T State}
[] sayMove(ID Direct)|T then NewState in
{System.show 'Player'#State.id.id#'received'#sayMove(ID Direct)}
NewState={HandleSayMove State sayMove(ID Direct)}
{AliveTreatStream T State}
[] chargeItem(ID Item)|T then NewState in [] chargeItem(ID Item)|T then NewState in
{System.show 'Player'#State.id.id#'received'#chargeItem(ID Item)} {System.show 'Player'#State.id.id#'received'#chargeItem(ID Item)}
NewState={HandleChargeItem State chargeItem(ID Item)} NewState={HandleChargeItem State chargeItem(ID Item)}
...@@ -295,26 +348,86 @@ define ...@@ -295,26 +348,86 @@ define
NewState={HandleFireItem State fireItem(ID KindFire)} NewState={HandleFireItem State fireItem(ID KindFire)}
{System.show 'Player'#State.id.id#'replied'#fireItem(ID KindFire)} {System.show 'Player'#State.id.id#'replied'#fireItem(ID KindFire)}
{AliveTreatStream T NewState} {AliveTreatStream T NewState}
[] saySurface(ID)|T then %% Ignored [] fireMine(ID Mine)|T then NewState in
{System.show 'Player'#State.id.id#'received'#saySurface(ID)} {System.show 'Player'#State.id.id#'received'#fireMine(ID Mine)}
{AliveTreatStream T State} NewState={HandleFireMine State fireMine(ID Mine)}
{System.show 'Player'#State.id.id#'replied'#fireMine(ID Mine)}
{AliveTreatStream T NewState}
[] sayCharge(ID KindItem)|T then %% Ignored [] sayCharge(ID KindItem)|T then %% Ignored
{System.show 'Player'#State.id.id#'received'#sayCharge(ID KindItem)} {System.show 'Player'#State.id.id#'received'#sayCharge(ID KindItem)}
{AliveTreatStream T State} {AliveTreatStream T State}
[] sayMinePlaced(ID)|T then %% Ignored [] sayMinePlaced(ID)|T then %% Ignored
{System.show 'Player'#State.id.id#'received'#sayMinePlaced(ID)} {System.show 'Player'#State.id.id#'received'#sayMinePlaced(ID)}
{AliveTreatStream T State} {AliveTreatStream T State}
[] sayMissileExplode(ID Pos Msg)|T then NewState in
{System.show 'Player'#State.id.id#'received'#sayMissileExplode(ID Pos Msg)}
NewState={HandleExplosion State ID Pos Msg}
{System.show 'Player'#State.id.id#'replied'#sayMissileExplode(ID Pos Msg)}
if NewState.life > 0 then {AliveTreatStream T NewState}
else {DeadTreatStream T NewState} end
[] sayMineExplode(ID Pos Msg)|T then NewState in
{System.show 'Player'#State.id.id#'received'#sayMineExplode(ID Pos Msg)}
NewState={HandleExplosion State ID Pos Msg}
{System.show 'Player'#State.id.id#'replied'#sayMineExplode(ID Pos Msg)}
if NewState.life > 0 then {AliveTreatStream T NewState}
else {DeadTreatStream T NewState} end
[] sayPassingDrone(drone(row X) ID Answer)|T then
{System.show 'Player'#State.id.id#'received'#sayPassingDrone(drone(row X) ID Answer)}
ID=State.id.id
Answer=State.pos.x==X
{System.show 'Player'#State.id.id#'replied'#sayPassingDrone(drone(row X) ID Answer)}
{AliveTreatStream T State}
[] sayPassingDrone(drone(column Y) ID Answer)|T then [] sayPassingDrone(drone(column Y) ID Answer)|T then
{System.show 'Player'#State.id.id#'received'#sayPassingDrone(drone(column Y) ID Answer)} {System.show 'Player'#State.id.id#'received'#sayPassingDrone(drone(column Y) ID Answer)}
ID=State.id.id ID=State.id.id
Answer=State.pos.y==Y Answer=State.pos.y==Y
{System.show 'Player'#State.id.id#'replied'#sayPassingDrone(drone(column Y) ID Answer)} {System.show 'Player'#State.id.id#'replied'#sayPassingDrone(drone(column Y) ID Answer)}
{AliveTreatStream T State} {AliveTreatStream T State}
[] sayAnswerDrone(Drone ID Answer)|T then NewState in %% Ignore [] sayAnswerDrone(Drone ID Answer)|T then %% Ignore
{System.show 'Player'#State.id.id#'received'#sayAnswerDrone(Drone ID Answer)} {System.show 'Player'#State.id.id#'received'#sayAnswerDrone(Drone ID Answer)}
NewState={HandleAnswerDrone State sayAnswerDrone(Drone ID Answer)}
{AliveTreatStream T State} {AliveTreatStream T State}
[] sayPassingSonar(ID Resp)|T then
ID=State.id.id Resp=pt(x:State.pos.x y:{Max 0 State.pos.y})
{System.show 'Player'#State.id.id#'received'#sayPassingSonar(ID Resp)}
{AliveTreatStream T State}
[] sayAnswerSonar(ID Answer)|T then %% Ignore
{System.show 'Player'#State.id.id#'received'#sayAnswerSonar(ID Answer)}
{AliveTreatStream T State}
[] sayDamageTaken(ID Damage LifeLeft)|T then %% Ignore
{System.show 'Player'#State.id.id#'received'#sayDamageTaken(ID Damage LifeLeft)}
{AliveTreatStream T State}
[] sayDeath(ID)|T then NewState DeadEnemy in %% Ignore
{System.show 'Player'#State.id.id#'received'#sayDeath(ID)}
{AliveTreatStream T State}
end
end
fun{InitEnemies MyIDNum Count Acc}
if Count==0 then Acc
elseif Count==MyIDNum then
{InitEnemies MyIDNum Count-1 Acc}
else NewEnemy in
NewEnemy=enemy(idNum:Count history:nil alive:true)
{InitEnemies MyIDNum Count-1 NewEnemy|Acc}
end end
end end
fun{StartPlayer Color ID}
Stream
Port
in
{NewPort Stream Port}
thread
{AliveTreatStream Stream '#'( id:id(id:ID color:Color name:name)
life:Input.maxDamage
pos:pt(x:0 y:0)
chargingItems:{InitChargingItemsMissile Input.nbPlayer nil}
chargedItems:nil
placedMines:nil
targets:nil
enemies:{InitEnemies ID Input.nbPlayer nil}
history:nil)}
end
Port
end
end end
\ No newline at end of file
Fichier ajouté
Fichier supprimé
Aucun aperçu pour ce type de fichier
...@@ -2,6 +2,7 @@ functor ...@@ -2,6 +2,7 @@ functor
import import
Player020Random Player020Random
Player020OneAfterOne Player020OneAfterOne
Player020Hunter
export export
playerGenerator:PlayerGenerator playerGenerator:PlayerGenerator
define define
...@@ -13,6 +14,8 @@ in ...@@ -13,6 +14,8 @@ in
{Player020Random.portPlayer Color ID} {Player020Random.portPlayer Color ID}
[] player020oneafterone then [] player020oneafterone then
{Player020OneAfterOne.portPlayer Color ID} {Player020OneAfterOne.portPlayer Color ID}
[] player020hunter then
{Player020Hunter.portPlayer Color ID}
end end
end end
end end
\ No newline at end of file
Aucun aperçu pour ce type de fichier
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter