PK
5aVB Scripts/PK
M=E Scripts/BaleAttacher.lua--
-- baleAttacher
-- Class Balle-AttachAble Tippers
--
-- @author Geri-G
-- @date 13/07/10
--
-- Copyright (C) Geri-G
-- Edited by Bayn with invaluable help from Face. Thanks again to him.
BaleAttacher = {};
function BaleAttacher.prerequisitesPresent(specializations)
return SpecializationUtil.hasSpecialization(Attachable, specializations);
end;
function BaleAttacher:load(xmlFile)
self.searchBales = BaleAttacher.searchBales;
self.attachobjects = BaleAttacher.attachobjects;
self.detachobjects = BaleAttacher.detachobjects;
self.OrientJoint = BaleAttacher.OrientJoint;
self.setWorkState= SpecializationUtil.callSpecializationsFunction("setWorkState");
self.isBaleInRange = BaleAttacher.isBaleInRange;
self.place = {};
self.place.node1 = Utils.indexToObject(self.components, getXMLString(xmlFile,"vehicle.Baletrailer#castPoint1"));
self.place.node2 = Utils.indexToObject(self.components, getXMLString(xmlFile,"vehicle.Baletrailer#castPoint2"));
self.place.attacherNode = Utils.indexToObject(self.components, Utils.getNoNil(getXMLString(xmlFile,"vehicle.Baletrailer#attacherNode"),"0>"));
self.place.highOffset = Utils.getNoNil(getXMLFloat(xmlFile,"vehicle.Baletrailer#highOffset"),4);
self.Attachedobjects = {};
self.attacherMod = 0;
self.attacherModOld = 0;
self.allowAttachment = true;
self.balesAttached = false;
self.attachBales = false;
end;
function BaleAttacher:readStream(streamId, connection)
self:setWorkState(streamReadBool(streamId), true);
end;
function BaleAttacher:writeStream(streamId, connection)
streamWriteBool(streamId, self.balesAttached);
end;
function BaleAttacher:update(dt)
if self:getIsActiveForInput() then
if InputBinding.hasEvent(InputBinding.IMPLEMENT_EXTRA2) then
self:setWorkState(not self.attachBales);
end;
end;
end;
function BaleAttacher:updateTick(dt)
end;
function BaleAttacher:draw()
if self.balesAttached then
g_currentMission:addHelpButtonText(string.format(g_i18n:getText("DETACH_BALES"), self.typeDesc), InputBinding.IMPLEMENT_EXTRA2);
else
g_currentMission:addHelpButtonText(string.format(g_i18n:getText("ATTACH_BALES"), self.typeDesc), InputBinding.IMPLEMENT_EXTRA2);
end;
end;
function BaleAttacher:isBaleInRange(node1,node2,Yoffset,Bale)
local Xmax, Ymax, Zmax = getWorldTranslation(node1);
Xmax, Ymax, Zmax = worldToLocal(self.place.attacherNode,Xmax, Ymax, Zmax);
local Xmin, Ymin, Zmin = getWorldTranslation(node2);
Xmin, Ymin, Zmin = worldToLocal(self.place.attacherNode,Xmin, Ymin, Zmin);
local Xt, Yt, Zt = getWorldTranslation(Bale);
Xt, Yt, Zt = worldToLocal(self.place.attacherNode,Xt, Yt, Zt);
if (Xt < math.max(Xmax,Xmin) and Xt > math.min(Xmax,Xmin)) and (Zt < math.max(Zmax,Zmin) and Zt > math.min(Zmax,Zmin)) and (Yt<= ((Ymax+Ymin)/2)+Yoffset and Yt>= (Ymax+Ymin)/2) then
return true;
else
return false;
end;
end;
function BaleAttacher:searchBales()
for index,item in pairs(g_currentMission.itemsToSave) do
if item.item:isa(Bale) then
if item.item.isAttached == nil then--and (getUserAttribute(item.item.nodeId, "isHaybale") == true or getUserAttribute(item.item.nodeId, "isStrawbale") == true or getUserAttribute(item.item.nodeId, "isRoundbale") == true) then
local isInRange = self:isBaleInRange(self.place.node1,self.place.node2,self.place.highOffset,item.item.nodeId);
local is1stAttached = false;
if isInRange then
is1stAttached = self:attachobjects(item.item.nodeId,item.item);
end;
if is1stAttached then
self.balesAttached = true;
end;
end;
end;
end;
for k,v in pairs(g_currentMission.vehicles) do
if v ~= self and v ~= self.attacherVehicle then
local is1stAttached = false;
for index,components in pairs(v.components) do
local isInRange = self:isBaleInRange(self.place.node1,self.place.node2,self.place.highOffset,components.node);
if isInRange then
is1stAttached = self:attachobjects(components.node);
end;
end;
if is1stAttached then
self.balesAttached = true;
end;
end;
end;
end;
function BaleAttacher:setWorkState(isCoupling,noEventSend)
WorkStateEvent.sendEvent(self, isCoupling, noEventSend);
if isCoupling then
self:detachobjects();
self.attachBales = true;
else
self:searchBales();
self.attachBales = false;
end;
end;
function BaleAttacher:OrientJoint(Source, Target)
local xw, yw, zw = getWorldTranslation(Source);
local x,y,z = worldToLocal(getParent(Target), xw, yw, zw);
setTranslation(Target, x,y,z);
--JointRotation Anpassung an das Objekt
local zX, zY, zZ = localDirectionToWorld(Source, 0,0,1);
local zX, zY, zZ = worldDirectionToLocal(getParent(Target), zX, zY, zZ);
local yX, yY, yZ = localDirectionToWorld(Source, 0,1,0);
local yX, yY, yZ = worldDirectionToLocal(getParent(Target), yX, yY, yZ);
setDirection(Target, zX, zY, zZ, yX, yY, yZ);
return false;
end;
function BaleAttacher:attachobjects(object,baleT)
local attachedobject = {};
attachedobject.object = object;
if self.isServer then
attachedobject.AT = createTransformGroup("AT");
link(self.place.attacherNode,attachedobject.AT);
attachedobject.objectMass = getMass(object);
setMass(object,attachedobject.objectMass*0.3);
self:OrientJoint(object,attachedobject.AT);
local constr = JointConstructor:new();
constr:setActors(self.place.attacherNode, object);
constr:setJointTransforms(attachedobject.AT, object);
for i=1, 3 do
constr:setTranslationLimit(i-1, true, 0, 0);
constr:setRotationLimit(i-1,0,0);
end;
attachedobject.JointIndex = constr:finalize();
if baleT ~= nil then
attachedobject.baleT = baleT;
baleT.isAttached = true;
end;
end;
table.insert(self.Attachedobjects, attachedobject);
return true;
end;
function BaleAttacher:detachobjects()
if self.isServer then
for k,v in pairs(self.Attachedobjects) do
removeJoint(v.JointIndex);
delete(v.AT);
v.JointIndex = nil;
setMass(v.object,v.objectMass);
if v.baleT ~= nil then
v.baleT.isAttached = nil;
end;
end;
end;
self.Attachedobjects = nil;
self.Attachedobjects = {};
self.balesAttached = false;
end;
function BaleAttacher:onAttach(attacherVehicle)
if self.isServer then
self:setWorkState(false);
end;
end;
function BaleAttacher:onDetach()
if self.isServer then
self:setWorkState(true);
end;
end;
function BaleAttacher:onActivate()
--if self.isServer then
--self:setWorkState(false);
--end;
end;
function BaleAttacher:onDeactivate()
--if self.isServer then
--self:setWorkState(true);
--end;
end;
function BaleAttacher:loadFromAttributesAndNodes(xmlFile, key, resetVehicles)
if not resetVehicles then
end;
return BaseMission.VEHICLE_LOAD_OK;
end;
function BaleAttacher:getSaveAttributesAndNodes(nodeIdent)
-- local attributes = ' side="'..tostring(self.currentSide)..'"';
local attributes = nil;
local node = nil;
return attributes, node;
end;
function BaleAttacher:delete()
end;
function BaleAttacher:mouseEvent(posX, posY, isDown, isUp, button)
end;
function BaleAttacher:keyEvent(unicode, sym, modifier, isDown)
end;
PK
d1A*ر( ( Scripts/toggleAnimatedParts.lua_=[[ toggleAnimParts.lua
--------------------------------------------------------------------------------------------------------------------
Author: Sven777b (ICQ#95176001)
Konzept & Betatests : Desperados93
Version 1.0 - 12.04.2010
Version 1.3 - 19.04.2010
Version 1.4 - 30.07.2011
frei verwendbar - keine erlaubnis ntig | free for use - no permission needed.
Modifikationen erst nach Rcksprache! | modifications only with my permission.
Hinweis: das Kopieren von Sourcecode ist strafbar nach UrhG 2.1
--------------------------------------------------------------------------------------------------------------------
Fahrzeug XML:
=================================================================
id : frei vergebener Name - ist gleichzeitig Bezeichner fr l10n Text und InputBinding
showHelp : true/false - Hilfetext anzeigen oder nicht
rotMin/rotMax : rotation auf 3 Achsen
transMin/transMax : bewegung auf 3 Achsen
scaleMin/scaleMax : skalierung auf 3 Achsen - alles kombinierbar
moveTime : Laufzeit in Sekunden in der die Bewegung abgeschlossen wird.
autoReturn : true/false - wenn true, dann kehrt die Animation zurck sobald der Knopf losgelassen wird.
permRotAxis : 1-3 - rotiert das Objekt permanent um die angegebene Achse. moveTime definiert dabei die Zeit fr eine 360 Umdrehung.
listenTo : bergeht das InputBinding und reagiert stattdessen auf die angegebene Variable. So kann man eine Bewegung zum Beispiel ans Licht koppeln
=================================================================
moddesc:
Abschnitt :
Abschnitt :
(fr jedes InputBinding sollte ein passender Text in l10n angelegt werden welcher auch als Hilfetext dient)
Dachfensterroofwindow
(die InputBindings mssen ebenfalls definiert werden)
]]
toggleAnimatedParts = {};
function toggleAnimatedParts.prerequisitesPresent(specializations)
return true;
end;
function toggleAnimatedParts:load(xmlFile)
self.toggle = SpecializationUtil.callSpecializationsFunction("toggle");
self.animParts = {};
local c = 0;
while true do
local baseString = string.format("vehicle.animParts.animPart(%d)#",c);
local index = getXMLString(xmlFile,baseString.."index");
local id = getXMLString(xmlFile,baseString.."id");
local listenTo = getXMLString(xmlFile,baseString.."listenTo");
if index == nil or id == nil or (InputBinding[id] == nil and listenTo == nil) then
break;
end;
local part = {};
part.index = Utils.indexToObject(self.components, index);
part.id = id;
part.listenTo = listenTo;
local rotMin = getXMLString(xmlFile,baseString.."rotMin");
local rotMax = getXMLString(xmlFile,baseString.."rotMax");
if rotMin ~= nil and rotMax ~= nil then
local x,y,z = Utils.getVectorFromString(rotMin);
part.rotMin = {math.rad(Utils.getNoNil(x,0)),math.rad(Utils.getNoNil(y,0)),math.rad(Utils.getNoNil(z,0))};
local x,y,z = Utils.getVectorFromString(rotMax);
part.rotMax = {math.rad(Utils.getNoNil(x,0)),math.rad(Utils.getNoNil(y,0)),math.rad(Utils.getNoNil(z,0))};
end;
local transMin = getXMLString(xmlFile,baseString.."transMin");
local transMax = getXMLString(xmlFile,baseString.."transMax");
if transMin ~= nil and transMax ~= nil then
local x,y,z = Utils.getVectorFromString(transMin);
part.transMin = {Utils.getNoNil(x,0),Utils.getNoNil(y,0),Utils.getNoNil(z,0)};
local x,y,z = Utils.getVectorFromString(transMax);
part.transMax = {Utils.getNoNil(x,0),Utils.getNoNil(y,0),Utils.getNoNil(z,0)};
end;
local scaleMin = getXMLString(xmlFile,baseString.."scaleMin");
local scaleMax = getXMLString(xmlFile,baseString.."scaleMax");
if scaleMin ~= nil and scaleMax ~= nil then
local x,y,z = Utils.getVectorFromString(scaleMin);
part.scaleMin = {Utils.getNoNil(x,1),Utils.getNoNil(y,1),Utils.getNoNil(z,1)};
local x,y,z = Utils.getVectorFromString(scaleMax);
part.scaleMax = {Utils.getNoNil(x,1),Utils.getNoNil(y,1),Utils.getNoNil(z,1)};
end;
local permRotAxis = getXMLInt(xmlFile,baseString.."permRotAxis");
if permRotAxis ~= nil then
if permRotAxis >= 1 and permRotAxis <= 3 then
part.permRotAxis = permRotAxis;
end;
end;
part.moveTime = Utils.getNoNil(getXMLFloat(xmlFile,baseString.."moveTime"),1)*1000;
part.helpText = Utils.getNoNil(getXMLBool(xmlFile, baseString.."showHelp"),false);
part.autoReturn = Utils.getNoNil(getXMLBool(xmlFile, baseString.."autoReturn"),false);
part.toMax = false;
part.move = false;
table.insert(self.animParts,part);
c=c+1;
end;
end;
function toggleAnimatedParts:delete()
end;
function toggleAnimatedParts:mouseEvent(posX, posY, isDown, isUp, button)
end;
function toggleAnimatedParts:keyEvent(unicode, sym, modifier, isDown)
end;
function toggleAnimatedParts:update(dt)
if self:getIsActiveForInput() then
for nr,part in ipairs(self.animParts) do
if not part.autoReturn then
if InputBinding.hasEvent(InputBinding[part.id]) then
self:toggle(nr,not part.toMax);
end;
else
if InputBinding.isPressed(InputBinding[part.id]) then
if not part.toMax then
self:toggle(nr,true);
end;
else
if part.toMax then
self:toggle(nr,false);
end;
end;
end;
end;
end;
if self:getIsActive() then
for _,part in ipairs(self.animParts) do
if part.listenTo ~= nil then
if self[part.listenTo] then
part.toMax = true;
part.move = true;
else
part.toMax = false;
end;
end;
if part.move then
part.move = false;
if part.rotMin ~= nil then
local curRot = {getRotation(part.index)};
local newRot = Utils.getMovedLimitedValues(curRot, part.rotMax, part.rotMin, 3, part.moveTime, dt, not part.toMax);
setRotation(part.index, unpack(newRot));
for i=1,3 do
if math.abs(newRot[i]-curRot[i]) > 0.001 then
part.move = true;
end;
end;
end;
if part.transMin ~= nil then
local curTrans = {getTranslation(part.index)};
local newTrans = Utils.getMovedLimitedValues(curTrans, part.transMax, part.transMin, 3, part.moveTime, dt, not part.toMax);
setTranslation(part.index, unpack(newTrans));
for i=1,3 do
if math.abs(newTrans[i]-curTrans[i]) > 0.001 then
part.move = true;
end;
end;
end;
if part.scaleMin ~= nil then
local curScale = {getScale(part.index)};
local newScale = Utils.getMovedLimitedValues(curScale, part.scaleMax, part.scaleMin, 3, part.moveTime, dt, not part.toMax);
setScale(part.index, unpack(newScale));
for i=1,3 do
if math.abs(newScale[i]-curScale[i]) > 0.001 then
part.move = true;
end;
end;
end;
if part.permRotAxis ~= nil then
local spd = ((2*math.pi) / part.moveTime) * dt;
local newRot = {0,0,0};
newRot[part.permRotAxis] = spd;
rotate(part.index, unpack(newRot));
part.move = part.toMax;
end;
end;
end;
end;
end;
function toggleAnimatedParts:updateTick(dt)
end;
function toggleAnimatedParts:draw()
if self:getIsActiveForInput() then
for _,part in ipairs(self.animParts) do
if part.helpText then
g_currentMission:addHelpButtonText(g_i18n:getText(part.id), InputBinding[part.id]);
end;
end;
end;
end;
function toggleAnimatedParts:toggle(id,state,nes)
toggleAnimEvent.sendEvent(self,id,state,nes);
self.animParts[id].toMax = state;
self.animParts[id].move = true;
end;
function toggleAnimatedParts:readStream(streamId, connection)
for nr,part in ipairs(self.animParts) do
local state = streamReadBool(streamId);
self:toggle(nr,state,true);
end;
end;
function toggleAnimatedParts:writeStream(streamId, connection)
for nr,part in ipairs(self.animParts) do
streamWriteBool(streamId,part.toMax);
end;
end;
toggleAnimEvent = {};
toggleAnimEvent_mt = Class(toggleAnimEvent, Event);
InitEventClass(toggleAnimEvent, "toggleAnimEvent");
function toggleAnimEvent:emptyNew()
local self = Event:new(toggleAnimEvent_mt);
self.className="toggleAnimEvent";
return self;
end;
function toggleAnimEvent:new(object, id, state)
local self = toggleAnimEvent:emptyNew()
self.object = object;
self.id = id;
self.state = state;
return self;
end;
function toggleAnimEvent:readStream(streamId, connection)
self.object = networkGetObject(streamReadInt32(streamId));
self.id = streamReadInt8(streamId);
self.state = streamReadBool(streamId);
self:run(connection);
end;
function toggleAnimEvent:writeStream(streamId, connection)
streamWriteInt32(streamId, networkGetObjectId(self.object));
streamWriteInt8(streamId, self.id);
streamWriteBool(streamId, self.state);
end;
function toggleAnimEvent:run(connection)
self.object:toggle(self.id,self.state, true);
if not connection:getIsServer() then
g_server:broadcastEvent(toggleAnimEvent:new(self.object, self.id, self.state), nil, connection, self.object);
end;
end;
function toggleAnimEvent.sendEvent(vehicle, id, state, nes)
if nes == nil or nes == false then
if g_server ~= nil then
g_server:broadcastEvent(toggleAnimEvent:new(vehicle, id, state), nil, nil, vehicle);
else
g_client:getServerConnection():sendEvent(toggleAnimEvent:new(vehicle, id, state));
end;
end;
end;
PK
=+)6 Scripts/WorkStateEvent.luaWorkStateEvent = {};
WorkStateEvent_mt = Class(WorkStateEvent, Event);
InitEventClass(WorkStateEvent, "WorkStateEvent");
function WorkStateEvent:emptyNew()
local self = Event:new(WorkStateEvent_mt);
self.className="WorkStateEvent";
return self;
end;
function WorkStateEvent:new(vehicle, isCoupled)
local self = WorkStateEvent:emptyNew()
self.vehicle = vehicle;
self.isCoupled = isCoupled;
return self;
end;
function WorkStateEvent:readStream(streamId, connection)
local id = streamReadInt32(streamId);
self.isCoupled = streamReadBool(streamId);
self.vehicle = networkGetObject(id);
self:run(connection);
end;
function WorkStateEvent:writeStream(streamId, connection)
streamWriteInt32(streamId, networkGetObjectId(self.vehicle));
streamWriteBool(streamId, self.isCoupled);
end;
function WorkStateEvent:run(connection)
self.vehicle:setWorkState(self.isCoupled, true);
if not connection:getIsServer() then
g_server:broadcastEvent(WorkStateEvent:new(self.vehicle, self.isCoupled), nil, connection, self.vehicle);
end;
end;
function WorkStateEvent.sendEvent(vehicle, isCoupled, noEventSend)
if noEventSend == nil or noEventSend == false then
if g_server ~= nil then
g_server:broadcastEvent(WorkStateEvent:new(vehicle, isCoupled), nil, nil, vehicle);
else
g_client:getServerConnection():sendEvent(WorkStateEvent:new(vehicle, isCoupled));
end;
end;
end;PK
؊VB texturen/PK
aVBN2;8
8
texturen/aufnahme.ddsDDS |
DXT1 @ ! @Z UUZ UU(b UU( UU" a{ UU UU UU A UU UU UU UU ! UU A UU A UU UU UU a UU UU a UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU UU a UU a UU a UU a UU UU UU UU UU UU ! UU UUA{ UU UUb UU Z UUb UU PP A{ @@ UU UU UU @@ UU UU UU UU UU @ UU UU UU U ) UUSS ) UU @) @@ UU UU UU @ @@@ UU ` j@ UU UU? UUxs !s@@@@ j
A{aZÿ!j*As"Aa{.{!~a{aaš7_v͡;/͡-~{&!!!!1);A6˞3AŞ;!蛮A&jaŲAŤfaŤAŧjՁ͋$eՁoՁjՁՁ㳞աJ݁kj݁ͨՁ**Ձ*+݁'Ձ͈KՁͩ#݁ͭ ա+݁ͪz݁+jݡݡݡ;ޡժݡէݡթ{{ծݡjժպզվծjկժվ.՞먺պոէꪪվվ>[_ڪ{ݡժݡZvjkݡݡƾݡͮ®aŊݡͯա͈(ݡշݡա.Ձ(݁iݡ͞o݁ͻ݁>ը(աͪՁ;ϸ݁OՁ)UՁKkXՁ^aՁtAų/a;aߴA;aCK(! A )ꮡA=!Zá_JOځԿ~̿aŁAa!A2n!rw!6ꁤaAsfj\A{ Jxk `zz~` u@ U` _U A{PPPP !s As @@@@ @@@@ ," @@@@ q]U] UU@ t}UU PPPP UU@ >UU@ +~ A@ :@ &B