PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Loclip



Maurice
09.08.2008, 18:43
Jeder kennt es, fast jeder hasst es.

Es ist die .lua die sich mit dem Namen "Loclip" schimpft. So lustig der Name so nervig die Funktion:
Sobald man einen Teil der Map berührt wird man aus dem Noclip geholt.

Der Sinn?
Verhindern von Crash wegen aus-der-map-fliegen.

Warum weg?
Es ist unglaublich nervig dass man nicht in den Boden fliegen kann. Man Versucht etwas zu bauen, will dadurch darunter in den Boden, wird aus dem Noclip geholt, steckt in der eigenen Contraption fest, kann nicht mehr in Noclip da man immernoch die Map berührt und hängt dann sehr unangenehm da rum.

Und nu?
Ich habe 3 Ultimativen! Nach der Tollheit sortiert:
1: Ein Port teil in der Map. Ich weiß nicht wie man das nennt aber einfach eine Mauerding direkt außerhalb der Map das einen zum Spawn portet. (Map-side)
2: Ein Script, das alle 2-3 Sekunden die Position der Spieler überprüft und wenn diese X Einheiten von 0 weg sind zum Spawn porten.
3: Einfach nichts. Es wäre mir lieber der Server würde crashen als dass man nicht in den Boden fliegen kann. Es ist immerhin ein Build Server.

A.I.
09.08.2008, 18:47
Die dritte Möglichkeit ist einfach am besten, da die anderen nahezu umöglich sind.

tui
09.08.2008, 18:49
Ich bin ganz deiner Meinung!Aber warum crasht der Server dann?Bei den Servern auf den ich spiel,crasht er nicht.Es könnte aber auch deswegen sein,weil ich nicht auf 24/7 Servern spiele,

LoC
09.08.2008, 18:52
Oh, man. :(

Husky
09.08.2008, 19:02
Warum eigentlich der Name Loclip? Der Name ist so Besch....eiden. ;) Scherz

Aber stimmt schon, das nervt gewaltig.

LoC
09.08.2008, 19:04
Warum hast du was gegen den Namen?
Immer meinten alle dass würde uClip heißen, da es aber von mir ist und keinen Namen trägt, habe ich irgendwann mal Loclip gesagt.

Ist jetzt übrigens runter, beim nächsten Mapchange ist es weg.

computer22
09.08.2008, 19:05
Sorry, aber ich bin Maurice's meinung.

Husky
09.08.2008, 19:05
Warum hast du was gegen den Namen?
Immer meinten alle dass würde uClip heißen, da es aber von mir ist und keinen Namen trägt, habe ich irgendwann mal Loclip gesagt.

Ist jetzt übrigens runter, beim nächsten Mapchange ist es weg.
Das war doch nur ein Scherz. Hab nichts gegen den Namen. ;) Ich habe es mal geändert.

Toxin_Snake
09.08.2008, 19:27
Endlich hatt es jemand ausgesprochen!
Preiset Maurice! :gmod:

monky2k6
09.08.2008, 21:24
Preiset Maurice! :gmod:

Und LoC der auf den Vorschlag schnell eingegangen ist und das Addon entfernt hat! :gmod:

PytonB!tch
09.08.2008, 21:40
Danke Maurice und danke LoC

Specter123
09.08.2008, 21:51
Das erste könnte man ja Teoretisch (Wird´s so geschrieben?) machen, aber es wäre aufwendig hinter jeder Wand (Brush) einen weitere Wand zu setzten die einen zurückteleportiert, denke ich mal.

€r!k
09.08.2008, 22:00
Das erste könnte man ja Teoretisch (Wird´s so geschrieben?) machen, aber es wäre aufwendig hinter jeder Wand (Brush) einen weitere Wand zu setzten die einen zurückteleportiert, denke ich mal.

Nee ich kenn diese Mapgrenzen. Es reicht wenn du um die ganze map einfach mal nen riesen "Raum" ziehst der als trigger_teleport fungiert. Ist wirklich simpel und frisst keine Ressourcen, da es nur einer ist. Größe ist da egal.

Lucid
10.08.2008, 02:46
Wuerde das hier funktionieren?
Der Code ist nicht getestet worden!



function GMdD_ntcrsh() --die funktion
for _,ent in pairs(player.GetAll()) do --alle spieler pruefen
if (ent:IsValid()) then --wenn er gueltig ist, dann...
local p = ent:GetPos() --seine position auslesen
if (p.x > 16200) or (p.x < -16200)
or (p.y > 16200) or (p.y < -16200)
or (p.z > 16200) or (p.z < -16200) then --alles ueberpruefen
ent:SetPos(Vector(0,0,0)) --zurueck in die map mit ihm!
end
end
end
end
hook.Add("Think", "GModDE_anticrash", GMdD_ntcrsh) --diese funktion jeden frame ausfuehren

Ab heute bin ich dann weg... nur noch an Wochenenden am PC >.<

BennyG
10.08.2008, 11:05
Wahrscheinlich,aber meiner Meinung nach wäre es sinnvoller den
GAMEMODE.SetupMove (http://wiki.garrysmod.com/wiki/?title=Gamemode.SetupMove)
Hook,zu verwenden.

Lastet weniger den Server aus,und verhindert das der Sieler überhaupt sich erst bewegt,da dies vorher gecallt wird.
Weiß nur leider nicht ob der auch für Noclip zählt :/

SMILIE
10.08.2008, 11:46
Nur ist das Problem das bei den Maps der Nullpunkt nicht immer in der Mitte ist, sondern das der vielleicht auch außerhalb der Map liegt.
Ich zum Beispiel verwende den Nullpunkt immer als Ecke.

Außerdem sind die Maps verschieden groß, deshalb kann man nicht einen bestimmten Wert nehmen da man sonst vielleicht noch innerhalb der Map wieder zurück teleportiert wird


Zur Mapping Methode: Um den trigger_teleport müsste man dann aber nochmal einen nodraw Brush machen sonst ist das Ganze ein einziges großes Leak ^^ aber das ist ja nicht schwer.

LoC
10.08.2008, 12:38
Ich habe genau das von Smilie beschriebene Problem. Kann man irgendwie herausfinden wo der Spawn Punkt ist und den Player dahin teleportieren?

computer22
10.08.2008, 12:44
Wieso macht Ihr nicht einfach garnix?
Man kann selbst schauen das man nicht aus der Map fliegt...

Stoned
10.08.2008, 12:57
Ich habe genau das von Smilie beschriebene Problem. Kann man irgendwie herausfinden wo der Spawn Punkt ist und den Player dahin teleportieren?

du hast ja !setspawn, einfach diese koords auch fuer den teleport verwenden ?

LoC
10.08.2008, 13:01
du hast ja !setspawn, einfach diese koords auch fuer den teleport verwenden ?
Würde aber nicht funktionieren, wenn der Spieler noch keinen eigenen Spawn-Punkt gesetzt hat.

LittleSnipes
10.08.2008, 13:02
Einfach kill?

BennyG
10.08.2008, 13:37
Ich habe genau das von Smilie beschriebene Problem. Kann man irgendwie herausfinden wo der Spawn Punkt ist und den Player dahin teleportieren?

Öh,ja klar.


local Spawns = ents.FindByClass("info_player_spawn")
local Randspawn = math.random(#Spawns)
local Spawnpos = Spawns[Randspawn]:GetPos()

Lucid
16.08.2008, 00:26
function GetRandomSpawnpoint()
local p = ents.FindByClass("info_player_start") or ents.FindByClass("info_player_deathmatch")
if (p == nil) then
return Vector(0,0,0)
end
return p[math.random(table.getn(p))]:GetPos()
end

function MapBegrenzung(ply, movedata)
local p = movedata:GetOrigin()
if (p.x > 16200) or (p.x < -16200)
or (p.y > 16200) or (p.y < -16200)
or (p.z > 16200) or (p.z < -16200) then
movedata:SetOrigin(GetRandomSpawnpoint())
movedata:SetVelocity(Vector(0,0,0))
end
end
hook.Add("SetupMove", "LoClipErsatz", MapBegrenzung)

So? :)
Diesmal sogar getestet, klappt wunderbar