/** Extract liquid from this @param sznMaterial: Material to extract @param inMaxAmount: Max Amount of Material being extracted @param pnPump: Object which extracts the liquid @param pnPipe: Pipe which extracts the liquid (connected to pnPump) @param bnWildcard: Usefull to extract random liquids; use '*' for sznMaterial for all Materials @return [irMaterial,irAmount] -irMaterial: Material being extracted -irAmount: Amount being extracted */ public func LiquidOutput(string sznMaterial, int inMaxAmount, object pnPump, object pnPipe, bool bnWildcard) { //Search liquid to pump if (bnWildcard) { var ptBarrel = FindObject(Find_Container(this), Find_Func("IsBarrel"), Find_Func("IsBarrelForMaterial", sznMaterial), Find_Not(Find_Func("BarrelIsEmpty"))); var sztMaterial=""; if (ptBarrel) sztMaterial = ptBarrel->GetBarrelMaterial(); //Nothing to pump if (sztMaterial == "") return ["", 0]; sznMaterial = sztMaterial; } var itFound = 0; for (var ptBarrel in FindObjects(Find_Container(this), Find_Func("IsBarrel"), Find_Func("IsBarrelForMaterial", sznMaterial), Find_Not(Find_Func("BarrelIsEmpty")))) { var atFound = ptBarrel->GetLiquid(sznMaterial, inMaxAmount - itFound, this); //Crazy stuff happend? itFound += BoundBy(atFound[1], 0, inMaxAmount - itFound); if (itFound == inMaxAmount) break; } return [sznMaterial, itFound]; }
protected func Activate(pCaller) { if(FindObject2(Find_Container(pCaller),Find_ID(STBW),Find_Not(Find_Func("HasCell")))) { ShiftContents(Contained(),0,STBW); Enter(FindObject2(Find_Container(pCaller),Find_ID(STBW),Find_Not(Find_Func("HasCell")))); } return 1; }
// Damage and hurl objects away. // documented in /docs/sdk/script/fn global func BlastObjects(int x, int y, int level, object container, int cause_plr, int damage_level, object layer, object prev_container) { var obj; // Coordinates are always supplied globally, convert to local coordinates. var l_x = x - GetX(), l_y = y - GetY(); // caused by: if not specified, controller of calling object if (cause_plr == nil) if (this) cause_plr = GetController(); // damage: if not specified this is the same as the explosion radius if (damage_level == nil) damage_level = level; // In a container? if (container) { if (container->GetObjectLayer() == layer) { container->BlastObject(damage_level, cause_plr); if (!container) return true; // Container could be removed in the meanwhile. for (obj in FindObjects(Find_Container(container), Find_Layer(layer), Find_Exclude(prev_container))) if (obj) obj->BlastObject(damage_level, cause_plr); } }
func StartFloating() { RemoveTimer("Seed"); SetAction("Idle"); this.Collectible = 1; this.NutritionalValue = this.NutritionalValue_; for (var attachment in mesh_attachments) DetachMesh(attachment); for (var obj in FindObjects(Find_Container(this))) { obj->Exit(); obj->StartFloating(); } }
func FxOverallDamageStuffDamage(pTarget, iEffectNumber, iDmgEngy, iCause, iBy) { var iPlr = pTarget->GetOwner(); if(iDmgEngy < 0) { pTarget.kill_bounty = 0; if(pTarget->GetEnergy() + iDmgEngy/1000 <= 0) { var hands = [GetHandItem(0), GetHandItem(1)]; for(var obj in FindObjects(Find_Container(pTarget))) { if(GetIndexOf(hands, obj) != -1) continue; if(!obj->~NoRemove()) { AddEffect("ScheduledRemove", obj, 1, 1, nil, Clonk, pTarget); pTarget.kill_bounty += Max(1, (obj->GetValue() / 5)) * 2; } } }
global func BlastObjectsBlue(int x, int y, int level, object container, int cause_plr, object layer) { var obj; // Coordinates are always supplied globally, convert to local coordinates. var l_x = x - GetX(), l_y = y - GetY(); // In a container? if (container) { if (container->GetObjectLayer() == layer) { container->BlastObject(level, cause_plr); if (!container) return true; // Container could be removed in the meanwhile. for (obj in FindObjects(Find_Container(container), Find_Layer(layer))) if (obj) obj->BlastObject(level, cause_plr); } }