Collectables mit Trigger

» Settlers Map Source Forums » Siedler DEdK Script Forum » Collectables mit Trigger

Pages: 1

Messoras
#1
15-12-2016 18:51
Posts: 84

Collectables mit Trigger

'N Abend zusammen,
ich habe für meine aktuelle Map eine neue Comfort gebastelt, die ähnlich wie die CustomNPCs funktioniert.
Sie ermöglicht es, einfach Schatztruhen mit anderen Entity Typen zu platzieren und auch nicht nur mit Helden auslösen zu können.
Probiert habe ich es am Beispiel der Nephilim Blume ( Blume des Lebens ), die man in einer Kampagne auch schon mal einsammeln musste.
So wird das ganze deutlich einfacher.

-------------------------------------
-- == COLLECTABLES von Messoras == --
-------------------------------------

--[[   //  Collectables  //  by Messoras
Dieses Comfortset ermöglicht das Erstellen von sammelbaren Entities.
Die Collectables funktionieren wie Schatztruhen, können aber jeder beliebigen Entity zugewiesen werden.
ACHTUNG: mcbs Trigger Fix wird benötigt.

== Funktionen ==

    1. CreateCollectable( string entity, string/table/function trigger, function callback, number newType )
        - Aufrufen um Collectable zu erstellen, das mit Trigger ausgelöst wird
        - Tauscht vorhandene Entity aus und entfernt sie, wenn eingesammelt ( Wie Schatzkisten )
        
        == Parameter ==
        - entity: string		-- Skriptname des Collectable
        - trigger:
            -> string:			-- Entity mit dem Skriptnamen trigger löst Callback aus, wenn nah beim NPC
            -> table:			-- Alle Entities, denen in Table enthaltene Skriptnamen zugeordnet sind,
								-- fungieren als Auslöser, wenn nah beim NPC
            -> function:		-- Callback wird ausgelöst, wenn Triggerfunktion true liefert
		- callback: function	-- Callbackfunktion des NPC ( Löst aus, wenn mit dem NPC gesprochen wird )
		- newType: number		-- Entity, die eingesammelt werden soll. ( Bleibt gleich, wenn nil )
    --
]]
-------------------------------------------------------------------------------------------------------------
function CreateCollectable(_entity, _trigger, _callback, _newType)
	-- check entity
	assert(type(_entity)=="string","Collectables: Wrong Entity Scriptname. Must be String")
	
    -- check trigger
    assert(type(_trigger)=="string" or type(_trigger)=="table" or type(_trigger)=="function", 
        "Collectables: Wrong Trigger. Must be String, Funktion or Table"
	)
	
	-- check callback
	assert(type(_callback)=="function","Collectables: Wrong Callback. Must be Function")
	
	-- check newType
	assert(type(_newType)=="number" or not _newType,"Collectables: Wrong newType. Must be Number")
	
	local pos = GetPosition(_entity)
	Logic.SetEntityName(Logic.CreateEntity(Entities.XD_Sparkles, pos.X, pos.Y, 0, 0),
		_entity.."_sparkle_effect_collectable" 
	)
	if _newType then ReplaceEntity(_entity,_newType) end
	
	-- Implementierung des Triggers ( Entity/Entities oder Funktion )
    collectJob = function(_nameloc, _triggerloc, _callbackloc)
        if type(_triggerloc) == "table" then
            for i = 1, _triggerloc.n do
                if IsNear(_triggerloc[i],_nameloc,300) then
					DestroyEntity(_nameloc)
					DestroyEntity(_nameloc.."_sparkle_effect_collectable")
					_callbackloc()
                    return true
                end
            end
        elseif type(_triggerloc) == "string" then
            if IsNear(_triggerloc,_nameloc,300) then
				DestroyEntity(_nameloc)
				DestroyEntity(_nameloc.."_sparkle_effect_collectable")
				_callbackloc()
                return true
            end
        elseif type(_triggerloc) == "function" then
            if _triggerloc() then
				DestroyEntity(_nameloc)
				DestroyEntity(_nameloc.."_sparkle_effect_collectable")
                _callbackloc()
                return true
            end
        elseif not _triggerloc then
            Message("Trigger is nil")
            return true
        end
    end
	
	StartSimpleJob("collectJob",_entity,_trigger,_callback)
end

-----------------------------
-- == Ende COLLECTABLES == --
-----------------------------






Achtung:
Diese Comfortfunktion greift auf mcbs TriggerFix zu. Damit sie funktioniert fügt erst diesen eurem Skript hinzu ( MCBs TriggerFix )




Wie immer sind Feedback und Verbesserungsvorschläge erwünscht!

Gruß,
Messoras

____________________
Six feet of earth make us all equal.

Spielt Siedler 5 online mit mir, dank des neuen Siedler 5 MP Projekts von Kimichura.

This posting has been edited by Messoras: 15-12-2016 at 18:58.

Pages: 1

SiteEngine v1.5.0 by nevermind, ©2005-2007
Design by SpiderFive (www.siedler-games.de) - English translation by juja

Impressum