Swarm Universe

Swarm Universe

Swarm Universe Workshop
Explore the vast possibilities of the fully integrated Swarm Universe modding-toolkit and share your creations.
z0mbiesrock 7 2017 年 6 月 2 日 上午 10:07
More Help needed on scripts
Why are all the scripts I make so laggy?
< >
正在显示第 1 - 8 条,共 8 条留言
z0mbiesrock 7 2017 年 6 月 2 日 上午 10:09 
////
// shared helper variables
create("Var", "H1", 0);
create("Var", "H2", 0);
create("Var", "H3", 0);
create("Var", "Sc", 0);
create("Var", "fk", 0);
create("Var", "s", "");


////
// all variables for first set of hunters
create("Var", "hunter1Preset", "HMC Infest"); // preset used for hunters
create("Var", "hunter1Spawnrate"); // spawnrate for hunters in seconds
create("Var", "hunter1SpawnrateLeft"); // spawnrate left until new hunters will be spawned
create("Var", "hunter1SpawnAmount"); // amount of hunters spawned per "killerSpawnrate"
create("Var", "hunter1PosMax", 0); // amount of available spawn positions for hunters

// find all available hunter spawn positions (must be named "pH1sX" where "X" is an sequential id starting at 0; for example: "pSh0")
H1.set(0);
while(!=(H1.get(), -1))
if(exists(+("pH1s", H1.get())))
H1.+=(1);
hunter1PosMax.set(H1.get());
else
H1.set(-1);
end // if
end // while
create("Var", "hunter1PAmount"); // parameter for "hordefight-hunters1.txt"


////
// all variables for second set of hunters
create("Var", "hunter2Preset", "HMC Infest"); // preset used for hunters
create("Var", "hunter2Spawnrate"); // spawnrate for hunters in seconds
create("Var", "hunter2SpawnrateLeft"); // spawnrate left until new hunters will be spawned
create("Var", "hunter2SpawnAmount"); // amount of hunters spawned per "killerSpawnrate"
create("Var", "hunter2PosMax", 0); // amount of available spawn positions for hunters

// find all available hunter spawn positions (must be named "pH2sX" where "X" is an sequential id starting at 0; for example: "pSh0")
H2.set(0);
while(!=(H2.get(), -1))
if(exists(+("pH2s", H2.get())))
H2.+=(1);
hunter2PosMax.set(H2.get());
else
H2.set(-1);
end // if
end // while
create("Var", "hunter2PAmount"); // parameter for "hordefight-hunters2.txt"


////
// all variables for third set of hunters
create("Var", "hunter3Preset", "HMC Infest"); // preset used for hunters
create("Var", "hunter3Spawnrate"); // spawnrate for hunters in seconds
create("Var", "hunter3SpawnrateLeft"); // spawnrate left until new hunters will be spawned
create("Var", "hunter3SpawnAmount"); // amount of hunters spawned per "killerSpawnrate"
create("Var", "hunter3PosMax", 0); // amount of available spawn positions for hunters

// find all available hunter spawn positions (must be named "pH3sX" where "X" is an sequential id starting at 0; for example: "pSh0")
H3.set(0);
while(!=(H3.get(), -1))
if(exists(+("pH3s", H3.get())))
H3.+=(1);
hunter3PosMax.set(H3.get());
else
H3.set(-1);
end // if
end // while
create("Var", "hunter3PAmount"); // parameter for "hordefight-hunters3.txt"

////
// all variables for scorpions
create("Var", "scorpionPreset", "Scorpion (Infected)"); // preset used for scorpions
create("Var", "scorpionSpawnrate"); // spawnrate for scorpion in seconds
create("Var", "scorpionSpawnrateLeft"); // spawnrate left until new scorpions will be spawned
create("Var", "scorpionSpawnAmount"); // amount of scorpions spawned per "killerSpawnrate"
create("Var", "scorpionPosMax", 0); // amount of available spawn positions for scorpions

// find all available scorpion spawn positions (must be named "pScX" where "X" is an sequential id starting at 0; for example: "pSh0")
Sc.set(0);
while(!=(Sc.get(), -1))
if(exists(+("pSc", Sc.get())))
Sc.+=(1);
scorpionPosMax.set(Sc.get());
else
Sc.set(-1);
end // if
end // while

////
// all variables for firecrackers
create("Var", "firecrackerPreset", "Firecracker"); // preset used for firecrackers
create("Var", "firecrackerSpawnrate"); // spawnrate for firecrackers in seconds
create("Var", "firecrackerSpawnrateLeft"); // spawnrate left until new firecrackers will be spawned
create("Var", "firecrackerSpawnAmount"); // amount of firecrackers spawned per "firecrackerSpawnrate"
create("Var", "firecrackerPosMax", 0); // amount of available spawn positions for firecrackers

// find all available obstacle spawn positions (must be named "pFcX" where "X" is an sequential id starting at 0; for example: "pKi0")
fk.set(0);
while(!=(fk.get(), -1))
if(exists(+("pFc", fk.get())))
fk.+=(1);
firecrackerPosMax.set(fk.get());
else
fk.set(-1);
end // if
end // while
create("Var", "firecrackerPAmount"); // parameter for "spawnfirecrackers.txt"

// horde progress
create("Var", "time", 0);

////
// variables that are needed to kill all enemies when it's time for the boss fight and to pause the game for a short period of time
create("Var", "lastEnemyId", 0);
create("Var", "enemyName", "");
create("Var", "arenaDelay", 0);

wait(120);
startThread("hordefight.txt");
z0mbiesrock 7 2017 年 6 月 2 日 上午 10:09 
setLogging( true );
// unlock more and more spawns over time


if(==(time.get(), 0))
// block hunter1
hunter1SpawnAmount.set(0);

// block hunter2
hunter2SpawnAmount.set(0);

// block hunter3
hunter3SpawnAmount.set(0);

// block hunter3
scorpionMax.set(0);

// block hunter3
firecrackerSpawnAmount.set(0);
end // if

if(==(time.get(), 1))
// unlock hunter1 after 1 seconds
hunter1SpawnAmount.set(2);
hunter1Spawnrate.set(3);
hunter1SpawnrateLeft.set(0);
end // if

if(==(time.get(), 5))
// increase hunter1 amount
hunter1SpawnAmount.set(4);
hunter1Spawnrate.set(4);
end // if

if(==(time.get(), 14))
// unlock hunter2 after 6 seconds
hunter2SpawnAmount.set(1);
hunter2Spawnrate.set(2);
hunter2SpawnrateLeft.set(0);
end // if

if(==(time.get(), 15))
// increase obstacles
hunter2Spawnrate.set(30);

// unlock hunter3 after 15 seconds
hunter3SpawnAmount.set(4);
hunter3Spawnrate.set(16);
hunter3SpawnrateLeft.set(0);
end // if

if(==(time.get(), 30))
// increase hunter1 amount
hunter1SpawnAmount.set(2);
hunter1Spawnrate.set(3);

// unlock scorpion
scorpionSpawnAmount.set(1);
scorpionSpawnrate.set(12);
scorpionSpawnrateLeft.set(0);
end // if

if(==(time.get(), 55))
// increase scorpion amount
scorpionSpawnAmount.set(2);
scorpionSpawnrate.set(16);
end // if

if(==(time.get(), 60))
// increase hunter1 amount
hunter1SpawnAmount.set(3);
hunter1Spawnrate.set(3);
end // if

if(==(time.get(), 75))
// increase hunter1 amount
hunter1SpawnAmount.set(3);
hunter1Spawnrate.set(2);

hunter3SpawnAmount.set(6);
hunter3Spawnrate.set(5);
end // if

if(==(time.get(), 79))
// unlock firecrackers
firecrackerSpawnAmount.set(4);
firecrackerSpawnrate.set(1);
end // if

if(>=(time.get(), 85))
// End horde, start boss fight.
startThread( "preboss.txt" );
end // if
z0mbiesrock 7 2017 年 6 月 2 日 上午 10:09 
if(>(hunter1SpawnAmount.get(), 0))
// killers are unlocked
if(>(hunter1SpawnrateLeft.get(), 0))
// killer delay running, lower it and do nothing
hunter1SpawnrateLeft.-=(1);
else
// new killers can be spawned, perpare parameters for thread "spawnKillers.txt"
hunter1PAmount.set(hunter1SpawnAmount.get());
startThread("hordefight-hunters1.txt");

// reset delay
hunter1SpawnrateLeft.set(hunter1Spawnrate.get());
end // if
end // if
z0mbiesrock 7 2017 年 6 月 2 日 上午 10:09 
if(>(scorpionSpawnAmount.get(), 0))
// killers are unlocked
if(>(scorpionSpawnrateLeft.get(), 0))
// killer delay running, lower it and do nothing
scorpionSpawnrateLeft.-=(1);
else
// new killers can be spawned, perpare parameters for thread "spawnKillers.txt"
scorpionPAmount.set(scorpionSpawnAmount.get());
startThread("hordefight-scorpions.txt");

// reset delay
scorpionSpawnrateLeft.set(scorpionSpawnrate.get());
end // if
end // if
z0mbiesrock 7 2017 年 6 月 2 日 上午 10:09 
import("hunters1.txt"); // handle spawns for hunter set 1
import("hunters2.txt"); // handle spawns for hunter set 2
import("hunters3.txt"); // handle spawns for hunter set 3
z0mbiesrock 7 2017 年 6 月 2 日 上午 10:09 
// make script threadsave
create("Var", "amount", hunter1PAmount.get(), "local");

create("Var", "pos", 0, 0, "local");

// loop until every required hunter1 is spwaned
while(>(amount.get(), 0))
// select a random position for each hunter1
pos.set(asCode(+("pH1s", math.rnd(hunter1PosMax.get()))).getPos());

// add some "fuzziness" so not all hunter1s spawn on top of each other
pos.setAt(0, +(-(pos.get(0), 75), math.rnd(75)));
pos.setAt(1, +(-(pos.get(1), 75), math.rnd(75)));

// build name for hunter1 as it needs to be assigned to the global enemy spawner "eSp" (see "lanes.txt")
lastEnemyId.+=(1);
enemyName.set(+("e", lastEnemyId.get()));

// spawn hunter1
create("Enemy", enemyName.get(), hunter1Preset.get(), pos.get());

// assign hunter1 to the global enemy spawner
enemyName.asCode().assignToSpawner("eSp");

// one less hunter1 to spawn
amount.-=(1);

// wait a little bit
wait(16);
end // while
z0mbiesrock 7 2017 年 6 月 2 日 上午 10:10 
// make script threadsave
create("Var", "amount", scorpionPAmount.get(), "local");

create("Var", "pos", 0, 0, "local");

// loop until every required scorpion is spwaned
while(>(amount.get(), 0))
// select a random position for each scorpion
pos.set(asCode(+("pSc", math.rnd(scorpionPosMax.get()))).getPos());

// add some "fuzziness" so not all scorpions spawn on top of each other
pos.setAt(0, +(-(pos.get(0), 75), math.rnd(75)));
pos.setAt(1, +(-(pos.get(1), 75), math.rnd(75)));

// build name for scorpion as it needs to be assigned to the global enemy spawner "eSp" (see "lanes.txt")
lastEnemyId.+=(1);
enemyName.set(+("e", lastEnemyId.get()));

// spawn scorpion
create("Enemy", enemyName.get(), scorpionPreset.get(), pos.get());

// assign scorpion to the global enemy spawner
enemyName.asCode().assignToSpawner("eSp");

// one less scorpion to spawn
amount.-=(1);

// wait a little bit
wait(16);
end // while
Freemind  [开发者] 2017 年 6 月 2 日 下午 8:10 
Have you tried without logging? It's often the cause for unreasonably bad script performance and should be used very selectively. The speed with logging turned on is not representative of the final performance - especially the longer the log-file gets. The other big drain is when there's an endless loop somewhere. All scripts must wait at some point, only then can the game proceed. It will forcefully shut down scripts if they take too long and the result can look like an unreasonable slowdown. We have talked about that, so I guess that's not it.

These are the reasons most of the time. I didn't spot any obvious problems other than the logging call yet, that will take a deeper analysis. Please let me know if turning off logging solved anything.

< >
正在显示第 1 - 8 条,共 8 条留言
每页显示数: 1530 50

发帖日期: 2017 年 6 月 2 日 上午 10:07
回复数: 8