PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Wiremod] Expression2 - CJ's functions



gamerpaddy
22.04.2009, 03:27
Hallo,
da ich kürzlich mit LUA angefangen habe
habe ich mich geich an das expression2 gesetzt
und ein paar neue funktionen gescriptet die ich auch auf wiremod.com released habe.

! erste LUA versuche !

wie genau so eine expression2 funktion aussieht habe ich mir an den vorhandenen scripts abgeschaut um zu begreifen was ich machen muss das er die funktion überhaupt annimmt.


die funktionen:

extinguish -> löscht (nicht removed) ein entity wen es brennt.

sequence -> so in der art wie meine wire_animator idee nur als kleiner code
die sequencen findet man im model viewer in Source SDK heraus.

setHealth -> Setzt die lebenspunkte von dem entity auf die angegebene nummer.

npcSetEnemy -> setzt den feind von NPC 1 (bsp. NPC1:npcSetEnemy(NPC2 oder player)

takeDamage Entity 1 fügt entity2 X schaden zu

createEffect ->spawnt ein effekt (effekte -> http://wiki.garrysmod.com/wiki/?title=Util.Effect) (Explosion und dof_node effekt wurde gesperrt wegen spam!)
Vector1 ist die ziehl position von dem effekt und vector2 ist die position von dem effekt



Entity:extinguish(1)
Entity:sequence("idle")
Entity:setHealth(100)
Entity:npcSetEnemy(Entity2)
E:takeDamage(N,E)
createEffect(S,v,v)


registerFunction("extinguish", "e:n", " ", function(self, args)
local op1, op2 = args[2], args[3]
local rv1, rv2 = op1[1](self, op1),op2[1](self, op2)
if(!validEntity(rv1)) then return 0 end
if(!isOwner(self, rv1)) then return end
if rv2 then rv1:Extinguish(); end
end)

registerFunction("sequence", "e:s", " ", function(self, args)
local op1, op2 = args[2],args[3]
local rv1, rv2 = op1[1](self, op1),op2[1](self, op2)
if(!validEntity(rv1)) then return 0 end
if(!isOwner(self, rv1)) then return end
local sequence = rv1:LookupSequence( rv2 )
rv1:SetSequence(sequence)
end)

registerFunction("setHealth", "e:n", " ", function(self, args)
local op1, op2 = args[2],args[3]
local rv1, rv2 = op1[1](self, op1),op2[1](self, op2)
if(!validEntity(rv1)) then return 0 end
if(!isOwner(self, rv1)) then return end
rv1:SetHealth( rv2 )
end)

registerFunction("npcSetEnemy", "e:e", " ", function(self, args)
local op1, op2 = args[2],args[3]
local rv1, rv2 = op1[1](self, op1),op2[1](self, op2)
if(!validEntity(rv1)) then return 0 end
if(!isOwner(self, rv1)) then return end
rv1:SetEnemy( rv2 )
end)
/* NEW functions */
registerFunction("takeDamage", "e:ne", " ", function(self, args)
local op1, op2, op3 = args[2],args[3],args[4]
local rv1, rv2, rv3 = op1[1](self, op1),op2[1](self, op2),op3[1](self, op3)
if(!isOwner(self, rv1)) then return end
if(!validEntity(rv1)) then return 0 end
rv1:TakeDamage( rv2, rv3 )
end)

registerFunction("createEffect", "svv", " ", function(self, args)
local op1, op2, op3 = args[2],args[3],args[4]
local rv1, rv2, rv3 = op1[1](self, op1),op2[1](self, op2),op3[1](self, op3)
local effectdata = EffectData()
local vPoint = Vector(rv2[1],rv2[2],rv2[3])
local vPointUp = Vector(rv3[1],rv3[2],rv3[3])
if (rv1 == "Explosion") then return 0 end
if (rv1 == "dof_node") then return 0 end
effectdata:SetOrigin( vPointUp )
effectdata:SetStart( vPoint )
effectdata:SetScale( 1 )
util.Effect( rv1, effectdata )
end)



registerFunction("extinguish", "e:n", " ", function(self, args)
local op1, op2 = args[2], args[3]
local rv1, rv2 = op1[1](self, op1),op2[1](self, op2)
if(!validEntity(rv1)) then return 0 end
if(!isOwner(self, rv1)) then return end
if rv2 then rv1:Extinguish(); end
end)

registerFunction("sequence", "e:s", " ", function(self, args)
local op1, op2 = args[2],args[3]
local rv1, rv2 = op1[1](self, op1),op2[1](self, op2)
if(!validEntity(rv1)) then return 0 end
if(!isOwner(self, rv1)) then return end
local sequence = rv1:LookupSequence( rv2 )
rv1:SetSequence(sequence)
end)

registerFunction("setHealth", "e:n", " ", function(self, args)
local op1, op2 = args[2],args[3]
local rv1, rv2 = op1[1](self, op1),op2[1](self, op2)
if(!validEntity(rv1)) then return 0 end
if(!isOwner(self, rv1)) then return end
rv1:SetHealth( rv2 )
end)

registerFunction("npcSetEnemy", "e:e", " ", function(self, args)
local op1, op2 = args[2],args[3]
local rv1, rv2 = op1[1](self, op1),op2[1](self, op2)
if(!validEntity(rv1)) then return 0 end
if(!isOwner(self, rv1)) then return end
rv1:SetEnemy( rv2 )
end)
/* NEW functions */
registerFunction("takeDamage", "e:ne", " ", function(self, args)
local op1, op2, op3 = args[2],args[3],args[4]
local rv1, rv2, rv3 = op1[1](self, op1),op2[1](self, op2),op3[1](self, op3)
if(!isOwner(self, rv1)) then return end
if(!validEntity(rv1)) then return 0 end
rv1:TakeDamage( rv2, rv3 )
end)

registerFunction("createEffect", "svv", " ", function(self, args)
local op1, op2, op3 = args[2],args[3],args[4]
local rv1, rv2, rv3 = op1[1](self, op1),op2[1](self, op2),op3[1](self, op3)
local effectdata = EffectData()
local vPoint = Vector(rv2[1],rv2[2],rv2[3])
local vPointUp = Vector(rv3[1],rv3[2],rv3[3])
if (rv1 == "Explosion") then return 0 end
if (rv1 == "dof_node") then return 0 end
effectdata:SetOrigin( vPointUp )
effectdata:SetStart( vPoint )
effectdata:SetScale( 1 )
util.Effect( rv1, effectdata )
end)

es wurden alle funktionen getestet
daher kann ich sagen das die npcSetEnemy funktion macken hat und die takeDamage ein "script error" aufruft wen das entity stirbt oder gelöscht wird
(arbeitszeit mit hilfe von der garrysmod.com wiki und vorhandenen funktionen -> 45 min)

installation:
macht eine .txt file in garrysmod/garrysmod/addons/wire/lua/entitys/gmod_wire_expression2/core/custom.
kopiert den script rein und benennt die .txt in CJ.lua um..


ich hoffe ich kann damit einen expression2 fan glücklich machen :gmod:

UPDATE: createEffect umgebaut (mit vector steuerung)