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