Jump to content

Scripting segítség!


Recommended Posts

Sziasztok!

Egy RP modot kezdtem írni, de van valami, amit nem tudok megoldani:

local autoSchoolMarker = createMarker(-1272, 2713, 51, "arrow", 2.0, 255, 255, 0, 255, everyone) 
  
function teleport(hitElement, matchingDimension)     
    setElementPosition(hitElement, -1222, 3466.7, 98.6) 
    outputChatBox("Beléptél az autóiskolába!", hitElement, 0, 255, 0, true) 
end 
  
addEventHandler("onMarkerHit", autoSchoolMarker, teleport()) 

Maga a script nem hibás, viszont amikor belemegyek a markerbe, az nem csinál semmit (pedig el kellene teleportálnia...).

Ha valaki tudna segíteni azt nagyon megköszönném!

Link to comment

Még jó, hogy nem csinál semmit.

"Maga a script nem hibás" - Erre nem vennék mérget, kapásból ajánlanám a funkciók wiki oldalának átnézését. Először pl. a

setElementPosition 

-t, jól látható, hogy az 1. argumentnek, magának az elementnek kell lennie és olyan element nincs, hogy "hitElement" .. :D

A másik, jól olvashatóan oda van írva, hogy ez egy elavult, bugos funkció, szóval cseréld le

spawnPlayer 

-re.

Link to comment

Ne vedd figyelembe Max Taylor hozzaszolasat, hibas amit mond.

Miert? spawnPlayer csak szerver oldalon van es alapbol miert kellene azt hasznalnia?

Mivel kiirta, hogy spawnPlayer nem letezik, ezert gondolom kliens oldalon van a scripted. Mar akkor ha igen, akkor onMarkerHit nem letezik, csak onClientMarkerHit. Illetve, az eventHandlernel nem kell beleirnod a "()"-t, siman csak a funkcio nevet. hitElement pedig letezik, ugyanis az event valtozo.

Azt ajanlom, hogy szerver oldalon legyen a script, a meta-ban kicsereled a fajl tipusat "server"-re es kitorlod a "()"-t a handlerbol es mukodni fog.

setElementPosition nem elavult, hanem bugot okoz, ha ezzel spawnolod a pedet vagy a jatekost.

Link to comment
  • 1 year later...

Hali,

Elég régi topic és már biztos mindenki tudja hogyan kellene ennek működnie, azért berakom ide az én kódomat is.

Eléggé sok hibát vétettél. A kezdő koordinátáid nem tudom, hogy miért ott voltak ahol. Pontosan nem tudom, mert egyből az autósiskolához vezettem, de sehogy sem sikerült előhozni, így megváltoztattam azokat. Persze ahova te akarod rakni, átírod. Ha valakit beteleportálsz valahova, az ki is szeretne jönni, ezt a részt pedig nem másoltad- vagy nem is csináltad meg. Feltételezem, hogy az autósiskola belső teréhez szeretted volna teleportálni, ebben az esetben pedig az Interiort is változtatni kell. Bár az a Z koordináta nem elég magas, szóval nem tudom.

A hitElement létezik így van, de ha kicsit belegondolunk ez minden egyes elementre tartozik, ami azt a markert érinti. Biztos beakarsz teleportálni egy kocsit is?

Egyébként amit lehet, sőt mindent amit meglehet azt serverside írd meg, ezzel sem terhelve a clientside-t.

Ha valami nem működik, akkor az hibás, ajánlom a szerver ablakot nézegetni, hogy ír-e ki hibát, vagy játékon belül a debugscript-et. Elegendő, hogyha az acl.xmlben adsz magadnak jogokat, még az admin resource se kell hozzá, csak lépj be és írd be a parancsot.

A kód pedig: (serverside)

    local posX, posY, posZ = -2026.6, -102, 35.1640625 
    local posfX, posfY, posfZ = -2026.8, -103.6, 1035.171875 
    local marker_id_0 = createMarker ( posX, posY, posZ+1, "arrow", 1.5, 255, 255, 0, 255 ) 
    marker_id_1 = createMarker ( posfX, posfY, posfZ+1, "arrow", 1.5, 255, 255, 0, 255 ) 
    setElementInterior ( marker_id_1, 3)     
function WarpInToAutoSchool(sourcePlayer) 
        setElementInterior ( sourcePlayer, 3, posfX, posfY-1.15, posfZ) 
        outputChatBox ( "Beléptél az autóiskolába!", sourcePlayer, 0, 255, 0, true) 
end  
function WarpOutFromAutoSchool(sourcePlayer) 
        setElementInterior ( sourcePlayer, 0, posX, posY+1.15, posZ) 
end  
addEventHandler ( "onMarkerHit", marker_id_0, WarpInToAutoSchool) 
addEventHandler ( "onMarkerHit", marker_id_1, WarpOutFromAutoSchool)  

Tanácsos a koordinátákat külön változóban eltárolni, mivel hogyha többhelyen használod, akkor nem kell ezer helyen átírni, valamint maga a function is sokkal átláthatóbb. A koordináták nyilvánvalóan azért vannak kívül a függvényen, mert akkor nem jönnének létre, csak ha meghívódik a függvény, ami sose történne meg.

setElementInterior ( marker_id_1, 3, posfX, posYf, posfZ)    

Ezzel a belső térben található markert át tettem egy másik interiorba, egyébként nem látszódna.

A két function végzi a be és ki teleportálást. Amint láthatod, mindkét esetben az Y koordináta kapott plusz értékeket, mivel ha ezt nem tettem volna meg, akkor a script alapján folyamatosan be és kiteleportálgatott volna.

Ez egy nagyon alap script, fejleszteni simán lehet, az előbbi hiba kiküszöbölésére például, meglehet sokkal szebben is csinálni, de ez egy jó alap. Egy kisebb hozzáfűznivaló még, hogyha Interiorból, vagy éppen be szeretnél teleportálni, akkor használd a fentebb bemásolt setElementInterior()-t, mivel opcionálisan pozició változtatást is tud, ezáltal nem kell használni a setElementPosition()-t. Persze ez csak Interioroknál.

Üdv.

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...