People complained about my edited firefight script lagging.
$fireScorchTime=6000;
$fireSpreadTime=4000;
$fireDestroyTime=30000;
$minWaterToExtinguish=1;
AddDamageType("Fire", '<bitmap:add-ons/ci/fire> %1', '%2 <bitmap:add-ons/ci/fire> %1',0.5,1);
function servercmdStartFire(%client,%brick)
{
if(!isobject(%client.minigame)) //If they are not in a mini
{
messageclient(%client,'',"You are not in a minigame.");
return;
}
startFire(%client,%brick);
startFireDamageTest(%client.minigame);
}
function startfire(%client,%brick)
{
%brick.fireclient=%client;
%brick.fireminigame=%client.minigame;
%brick.setemitter(burnemittera);
%brick.setlight(FireFightLight);
%brick.fireSpreadSched=schedule($fireSpreadTime,0,spreadFire,%brick);
%brick.scorchSched=schedule($fireScorchTime,0,scorchBrick,%brick);
%brick.fireDestroySched=schedule($fireDestroyTime,0,fireDestroy,%brick);
}
function scorchBrick(%obj)
{
if(!isObject(%obj) || !%obj.fireminigame)
return;
%obj.setcolor(16);
}
function spreadFire(%obj)
{
if(!isObject(%obj) || %obj.isdead() || !%obj.fireminigame)
return;
InitContainerRadiusSearch(%obj.gettransform(),1,$typemasks::fxbrickobjecttype);
while((%target=containerSearchNext())!=0)
{
if(%target.getclassname()$=fxdtsbrick)
{
if(getRandom(0,1) && isobject(%target) && !%target.fireclient)
{
startfire(%obj.fireclient,%target);
}
}
}
}
function fireDestroy(%obj)
{
if(!isObject(%obj) || !%obj.fireminigame)
return;
%obj.setemitter(jeepExplosionEmitter);
schedule(100,0,deletebrick,%obj);
}
function deletebrick(%obj)
{
%obj.killbrick();
}
function startFireDamageTest(%mini)
{
%total=ClientGroup.getCount();
for(%i=0;%i<%total;%i++)
{
%cl=ClientGroup.getObject(%i);
if(%cl.minigame==%mini && !%cl.firedamagetest)
{
%cl.firedamagetest=1;
firedamagetest(%cl);
}
}
}
function firedamagetest(%cl)
{
if(!isObject(%cl) || !%cl.minigame)
{
%cl.firedamagetest=0;
return;
}
if(isObject(%cl.player))
{
InitContainerRadiusSearch(%cl.player.gettransform(),1,$typemasks::fxbrickobjecttype);
while((%target=containerSearchNext())!=0)
{
if(%target.fireminigame$=%cl.minigame && !%target.isdead())
{
%cl.player.damage(%target,%target,getRandom(5,15));
}
}
}
schedule(1000,0,firedamagetest,%cl);
}
package firefight
{
function servercmdjoinminigame(%client,%minigame,%a,%b,%c)
{
Parent::servercmdjoinminigame(%client,%minigame,%a,%b,%c);
echo("ENTER MINIGAME "@%client.name SPC %minigame);
}
};
ActivatePackage(firefight);
datablock fxLightData(FireFightLight)
{
uiName = "Fire Light";
LightOn = true;
radius = 1;
brightness = 9;
color = "1 0.5 0 1";
flareOn = false;
flarebitmap = "base/lighting/corona";
NearSize = 2;
FarSize = 1;
};
function firewandProjectile::onCollision(%this,%obj,%col,%fade,%pos,%normal)
{
if(isobject(%obj.client.minigame))
{
if(%col.getclassname()$=fxDTSbrick && !%col.fireclient)
{
servercmdstartfire(%obj.client,%col);
}
else if(%col.getclassname()$="Player")
{
startFirePlayer(%col);
}
}
else
{
messageclient(%obj.client,'',"You are not in a minigame.");
}
}
//players on FIRE!!
datablock ShapeBaseImageData(playerOnFireImage)
{
shapeFile = "base/data/shapes/empty.dts";
emap = false;
mountPoint = $HeadSlot;
offset = "0 0 -2";
stateName[0] = "Ready";
stateTransitionOnTimeout[0] = "FireA";
stateTimeoutValue[0] = 0.01;
stateName[1] = "FireA";
stateTransitionOnTimeout[1] = "Done";
stateWaitForTimeout[1] = True;
stateTimeoutValue[1] = 1.0;
stateEmitter[1] = burnemittera;
stateEmitterTime[1] = 1.0;
stateName[2] = "Done";
stateTransitionOnTimeout[2] = "FireA";
stateTimeoutValue[2] = 0.01;
};
function startfireplayer(%obj)
{
if(%obj.fireminigame)
return;
%obj.fireminigame=%obj.client.minigame;
%obj.emote(playeronfireimage);
%obj.damage(%obj,%obj,getrandom(10,20));
schedule(1000,0,continuefireplayer,%obj);
}
function continuefireplayer(%obj)
{
if(!%obj.fireminigame || !isobject(%obj))
return;
if(!getrandom(0,4))
{
%obj.fireminigame=0;
return;
}
%obj.emote(playeronfireimage);
%obj.damage(%obj,%obj,getrandom(10,20));
schedule(1000,0,continuefireplayer,%obj);
}
function firehoseProjectile::onCollision(%this,%obj,%col,%pos,%fade)
{
if(%col.getclassname()$="Player" && %col.fireminigame)
{
%col.fireminigame=0;
}
else
if(%col.fireminigame$=%obj.client.minigame)
{
%col.water++;
if(%col.water>=$minWaterToExtinguish)
{
if(isobject(%col.emitter))
%col.emitter.delete();
%col.setlight(0);
%col.fireclient=0;
%col.fireminigame=0;
%obj.client.incscore(1);
}
}
Parent::onCollision(%this,%obj,%col,%pos,%fade);
}What could I do to reduce the lag?