Beiträge von Freakyman

    Hy leute habe das problem das auf einmal mein model schwarz bzw sehr dunkel ist ob wohl eine Textur in Farbe drauf liegt.

    So sieht das model aus.

    Ich wüsste nicht das irgendwas gedrück habe.
    vielleicht wisst ihr wieso das so ist.

    Hallo unzwar habe ich vollgendes problem mit dem heaptiptrigger.
    Wenn ich ein trigger erstellen will bekomme ich folgendes in die log geschrieben.

    PlaceableHeap.lua : attempt to index global 'PlaceableUPK' (a nil value)

    weiß einer von euch abhilfe?

    Hy leute ich wollte mal fragen ob und wie man den objekt attacher einbauen kann.

    Muss man da viel beachten auser die xml und moddesc diese sachen einzufügen?

    moddesc:

    Spoiler anzeigen

    <text name="Lock"> <en>Lock load</en> <de>Last sperren</de> </text>
    <text name="Unlock"> <en>Unlock load</en> <de>Last entsperren</de> </text>
    <specialization name="objectAttacher" className="objectAttacher" filename="objectAttacher.lua"/>
    <specialization name="dynamicMountAttacher" />
    <specialization name="attachable" />
    <specialization name="objectAttacher" />

    xml:

    Spoiler anzeigen

    baleCastPoints allowVehicleAttachment="true" >
    <baleCastPoint frontRight="0>28|0" backLeft="0>28|2" attacherNode="1>" highOffset="2" />
    <baleCastPoint frontRight="0>28|1" backLeft="0>28|3" attacherNode="1>" highOffset="2" />
    </baleCastPoints>
    <dynamicMountAttacherTrigger triggerNode="0>24" rootNode="0>" jointNode="0>" />


    und hier mal die lua:

    Spoiler anzeigen

    --- objectAttacher
    -- Specialization for attaching objects on a trailer
    --
    -- @author Geri-G
    --
    -- edited by PeterJ FS-UK modteam
    -- 16/11/2012
    --

    objectAttacher = {};

    function objectAttacher.prerequisitesPresent(specializations)
    return SpecializationUtil.hasSpecialization(Attachable, specializations) and SpecializationUtil.hasSpecialization(DynamicMountAttacher, specializations);
    end;

    function objectAttacher:load(xmlFile)

    self.setIsBaleAttached = SpecializationUtil.callSpecializationsFunction("setIsBaleAttached");
    self.searchObjects = objectAttacher.searchObjects;
    self.attachobjects = objectAttacher.attachobjects;
    self.detachobjects = objectAttacher.detachobjects;
    self.OrientJoint = objectAttacher.OrientJoint;
    self.isObjectInRange = objectAttacher.isObjectInRange;
    self.place = {};
    local i=0;
    while true do
    local basename = string.format("vehicle.baleCastPoints.baleCastPoint(%d)",i);
    local place = {};
    place.node1 = Utils.indexToObject(self.components, getXMLString(xmlFile,basename.."#frontRight"));

    if place.node1 == nil then
    break;
    end;
    place.node2 = Utils.indexToObject(self.components, getXMLString(xmlFile,basename.."#backLeft"));
    place.attacherNode = Utils.indexToObject(self.components, Utils.getNoNil(getXMLString(xmlFile,basename.."#attacherNode"),"0>"));
    place.highOffset = Utils.getNoNil(getXMLFloat(xmlFile,basename.."#highOffset"),4);
    table.insert(self.place,place);
    i=i+1;
    end;
    self.allowVehicleAttachment = getXMLBool(xmlFile,"vehicle.baleCastPoints#allowVehicleAttachment");
    self.Attachedobjects = {};
    self.objectsAttached = false;
    self.isBaleAttach = false;
    end;

    function objectAttacher:delete()
    end;

    function objectAttacher:readStream(streamId, connection)
    local baleAttach = streamReadBool(streamId);
    self:setIsBaleAttached(baleAttach, true);
    end;

    function objectAttacher:writeStream(streamId, connection)
    streamWriteBool(streamId, self.isBaleAttach);
    end;

    function objectAttacher:keyEvent(unicode, sym, modifier, isDown)
    end;

    function objectAttacher:mouseEvent(posX, posY, isDown, isUp, button)
    end;

    function objectAttacher:update(dt)
    if self:getIsActiveForInput() then
    if InputBinding.hasEvent(InputBinding.IMPLEMENT_EXTRA3) then
    self:setIsBaleAttached(not self.isBaleAttach);
    end;
    end;
    end;

    function objectAttacher:updateTick(dt)
    end;

    function objectAttacher:draw()
    if self:getIsActive() then

    if not self.isBaleAttach then
    g_currentMission:addHelpButtonText(g_i18n:getText("Unlock"), InputBinding.IMPLEMENT_EXTRA3);
    else
    g_currentMission:addHelpButtonText(g_i18n:getText("Lock"), InputBinding.IMPLEMENT_EXTRA3);
    end;

    end;
    end;

    function objectAttacher:isObjectInRange(place,object)
    local Xmax, Ymax, Zmax = getWorldTranslation(place.node1);
    Xmax, Ymax, Zmax = worldToLocal(place.attacherNode,Xmax, Ymax, Zmax);

    local Xmin, Ymin, Zmin = getWorldTranslation(place.node2);
    Xmin, Ymin, Zmin = worldToLocal(place.attacherNode,Xmin, Ymin, Zmin);

    local Xt, Yt, Zt = getWorldTranslation(object);
    Xt, Yt, Zt = worldToLocal(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)+place.highOffset and Yt>= (Ymax+Ymin)/2) then
    return true;
    else
    return false;
    end;
    end;

    function objectAttacher:searchObjects()
    for index,item in pairs(g_currentMission.itemsToSave) do
    if item.item:isa(Bale) then
    if item.item.isAttached == nil then
    for k,v in pairs(self.place) do
    local isInRange = self:isObjectInRange(v,item.item.nodeId);
    local is1stAttached = false;
    if isInRange then
    is1stAttached = self:attachobjects(v,item.item.nodeId,item.item);
    end;
    if is1stAttached then
    self.objectsAttached = true;
    end;
    end;
    end;
    end;
    end;
    if self.allowVehicleAttachment == true then
    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
    for k1,v1 in pairs(self.place) do
    local isInRange = self:isObjectInRange(v1,components.node);
    if isInRange then
    is1stAttached = self:attachobjects(v1,components.node);
    end;
    end;
    end;
    if is1stAttached then
    self.objectsAttached = true;
    end;
    end;
    end;
    end;
    end;

    function objectAttacher:setIsBaleAttached(baleAttach, noEventSend)
    SetBaleAttachEvent.sendEvent(self, baleAttach, noEventSend)
    self.isBaleAttach = baleAttach;

    if baleAttach then
    self:detachobjects();
    else
    self:searchObjects();
    end;
    end;

    function objectAttacher:OrientJoint(Source, Target)
    local xw, yw, zw = getWorldTranslation(Source);
    local x,y,z = worldToLocal(getParent(Target), xw, yw, zw);
    setTranslation(Target, x,y,z);

    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 objectAttacher:attachobjects(place,object,baleT)
    local attachedobject = {};
    attachedobject.object = object;
    if self.isServer then
    attachedobject.AT = createTransformGroup("AT");
    link(place.attacherNode,attachedobject.AT);

    self:OrientJoint(object,attachedobject.AT);

    local constr = JointConstructor:new();
    constr:setActors(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 objectAttacher:detachobjects()
    if self.isServer then
    for k,v in pairs(self.Attachedobjects) do
    removeJoint(v.JointIndex);
    delete(v.AT);
    v.JointIndex = nil;
    if v.baleT ~= nil then
    v.baleT.isAttached = nil;
    end;
    end;
    end;

    self.Attachedobjects = nil;
    self.Attachedobjects = {};
    self.objectsAttached = false;
    end;

    function objectAttacher:onAttach(attacherVehicle)
    if self.isServer then
    self:setIsBaleAttached(false);
    end;
    end;

    function objectAttacher:onDetach()
    if self.isServer then
    self:setIsBaleAttached(true);
    end;
    end;


    SetBaleAttachEvent = {};
    SetBaleAttachEvent_mt = Class(SetBaleAttachEvent, Event);

    InitEventClass(SetBaleAttachEvent, "SetBaleAttachEvent");

    function SetBaleAttachEvent:emptyNew()
    local self = Event:new(SetBaleAttachEvent_mt);
    self.className="SetBaleAttachEvent";
    return self;
    end;

    function SetBaleAttachEvent:new(object, baleAttach)
    local self = SetBaleAttachEvent:emptyNew()
    self.object = object;
    self.baleAttach = baleAttach;
    return self;
    end;

    function SetBaleAttachEvent:readStream(streamId, connection)
    local id = streamReadInt32(streamId);
    self.baleAttach = streamReadBool(streamId);
    self.object = networkGetObject(id);
    self:run(connection);
    end;

    function SetBaleAttachEvent:writeStream(streamId, connection)
    streamWriteInt32(streamId, networkGetObjectId(self.object));
    streamWriteBool(streamId, self.baleAttach);
    end;

    function SetBaleAttachEvent:run(connection)
    if not connection:getIsServer() then
    g_server:broadcastEvent(self, false, connection, self.object);
    end;
    self.object:setIsBaleAttached(self.baleAttach, true);
    end;

    function SetBaleAttachEvent.sendEvent(vehicle, baleAttach, noEventSend)
    if baleAttach ~= vehicle.isBaleAttach then
    if noEventSend == nil or noEventSend == false then
    if g_server ~= nil then
    g_server:broadcastEvent(SetBaleAttachEvent:new(vehicle, baleAttach), nil, nil, vehicle);
    else
    g_client:getServerConnection():sendEvent(SetBaleAttachEvent:new(vehicle, baleAttach));
    end;
    end;
    end;

    end;

    würde mich freuen wenn mir jemand sagen kann ob ich da was beim einbaue beachten muss so das ich es in jeden model einfügen kann.