uhmm..io non ho queste cartelle![]()
le cartelle devi crearle tu nella directory di stalker, però devi ricordarti di modificare una stringa del file fsgame.ltx così:
$game_data$ = true| true| $fs_root$| gamedata\
sennò poi non te le legge.
per aprire il file .ltx usa il blocco note oppure il notepad.
############
una domanda:
quali file devo modificare per applicare le .ogf agli npc?
mi spiego meglio: se voglio far indossare ai novellini del campo base una tuta "seva" al posto della tuta in pelle??
e poi: mi consigliate un programma per modificare gli .ogf?
grazie anticipatamente.
Segui questo procedimento:
Poi invece di copiare la gamedata, la crei stesso tu e ricostruisci l'ordine delle cartelle.PROCEDIMENTO INSTALLAZIONE MODS IN S.T.A.L.K.E.R.
Ho riportato nel primo post di questo Topic "L'Angolo del MOD" passo per passo come si inseriscono i MODS di S.T.A.L.K.E.R.:
- Andate nella directory di gioco: C:\Programmi\THQ\S.T.A.L.K.E.R. - Shadow of Chernobyl trovetere un file .ltx dal nome fsgame;apritelo con un Blocco Note.
- Ora è necessaria innanzitutto questa ulteriore operazione:
Cambiare la seconda linea del file fsgame.ltx (nella root di S.T.A.L.K.E.R.) da
Codice:
$game_data$ = false| true| $fs_root$| gamedata
a
$game_data$ = true| true| $fs_root$| gamedata
...confermate l'operazione chiudendo il file.
- ATTENZIONE! Se non avete capito come modificare il file fsgame.ltx, o avete paura di sbagliare o meglio, per facilitare l'operazione ecco il DOWNLOAD del file già modificato che vi ricordo è da inserire in C:\Programmi\THQ\S.T.A.L.K.E.R. - Shadow of Chernobyl; la stessa destinazione del 'gamedata'.
http://www.mediafire.com/?4dsk22d3gdx
- Ora potete scaricare la modifica desiderata, quando lo scompatterete uscirà fuori una cartella dal nome 'gamedata', inseritela nella directory principale C:\Programmi\THQ\S.T.A.L.K.E.R. - Shadow of Chernobyl quindi avviate S.T.A.L.K.E.R. e avrete la modifica inserita nel gioco.
Stessa cosa per gli altri MODS,ogni qual volta scaricherete una modifica troverete al 90% o la cartella 'gamedata' che semplicemente taglierete nella Directory di S.T.A.L.K.E.R. dove è già presente la cartella 'gamedata' creata da voi o dopo aver inserito del primo Mod o le sotto-cartelle di quest'ultima 'gamedata' da tagliare dentro la cartella stessa.
Piu facile a farsi che non a spiegarlo!
Ciao, per far cambiare la tuta indossata devi modificare i file character_desc_livello.xml contenuti in config\gameplay e + nello specificole cartelle devi crearle tu nella directory di stalker, però devi ricordarti di modificare una stringa del file fsgame.ltx così:
$game_data$ = true| true| $fs_root$| gamedata\
sennò poi non te le legge.
per aprire il file .ltx usa il blocco note oppure il notepad.
############
una domanda:
quali file devo modificare per applicare le .ogf agli npc?
mi spiego meglio: se voglio far indossare ai novellini del campo base una tuta "seva" al posto della tuta in pelle??
e poi: mi consigliate un programma per modificare gli .ogf?
grazie anticipatamente.
il tag visual
Codice:<!---------------------------------------esc_wolf-----------------------------------------------------> <specific_character id="esc_wolf" team_default = "1"> <name>esc_wolf_name</name> <icon>ui_npc_u_stalker_neytral_balon_1</icon> <bio>esc_wolf_bio</bio> <class>esc_wolf</class> <community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect> <rank>434</rank> <reputation>5</reputation> <money min="600" max="2000" infinitive="0"/> <snd_config>characters_voice\human_01\stalker\</snd_config> <crouch_type>-1</crouch_type> <visual>actors\neytral\stalker_neytral_wolf</visual> <supplies> [spawn] \n wpn_pm \n ammo_9x18_fmj = 1 \n wpn_ak74u \n ammo_5.45x39_fmj \n device_torch \n hand_radio \n </supplies> #include "gameplay\character_criticals_4.xml" <start_dialog>escape_lager_volk_talk</start_dialog> <start_dialog>dm_hello_dialog</start_dialog> <actor_dialog>dm_cool_info_dialog</actor_dialog> <actor_dialog>dm_help_wounded_medkit_dialog</actor_dialog> <actor_dialog>tm_wolf_dialog</actor_dialog> <actor_dialog>tm_wolf_reward</actor_dialog> <actor_dialog>escape_lager_volk_story</actor_dialog> <actor_dialog>escape_lager_volk_story2</actor_dialog> </specific_character>
questo fa si che venga caricata la mesh (ogf) stalker_neytral_wolf contenuta in meshes\actors\neytral.Codice:<visual>actors\neytral\stalker_neytral_wolf</visual>
Quindi ti basta cambiare questo parametro.
Poi per modificare le ogf è abbastanza complicato e dipende da quello che vuoi fare: se vuoi cambiare la texture a cui è legata ti basta un editor esadecimale, altrimenti devi esportarla in maya o 3dsmax e poi usare l'sdk.
Per maggiori info: http://sdk.stalker-game.com/en/index...egory:Articles
GRazie a tutti! funziona perfettamente!
come al solito sempre utile!
grazie mille gr1ph00n!
scusa se ti scoccio: puoi consigliarmi un buon programma per modificare le ogf? magari postandomi il link? non riesco proprio a trovarlo in internet, mi basta l'editor esadecimale per correlare le texture alla ogf.
Ciao, di hex editor c'è ne sono a bizzeffe, per esempio
http://www.chmaas.handshake.de/delph...vi32/xvi32.htm
Cmq segui questa guida per poter modificare gli ogf, naturalmente ti spiega solo come cambiare la texture corrispondente:
http://forums.filefront.com/s-t-l-k-...ons-items.html
Domanda come si Apre un file bind?Dovresti cambiare qlk parametro nello specific character id dell'actor e anche nell'all.spawn, quindi conviene che vai ad aggiungere
nel metodo update dell'actor_binder nel file bind_stalker.scriptCodice:if db.actor:money() == 40 then db.actor:give_money(10000 - 40) end
in pratica funziona così, appena si hanno 40 ru, ti vengono aggiunti 10000 - 40 ru ovvero 9960, aggiunti ai 40 che già si hanno, ti escono 10000 ru.
esatto
usa il blocco note
Una domanda: avendo tre coordinate,è possibile posizione in qualsiasi parte del livello un arma,un'armatura o un reperto?
Scusate se è una domanda che è già stata fatta.
Si certo è possibile, questi due articoli ti saranno utili:
http://sdk.stalker-game.com/en/index...ting_all.spawn
http://sdk.stalker-game.com/en/index...through_script
Se non capisci qlk cosa, sai dove chiedere![]()
Grazie Gr1ph00n,mi sfugge una cosa,ho capito come trovare le coordinate e indicarle,ma come faccio a indicare la mappa in cui si posiziona l'oggetto?Si certo è possibile, questi due articoli ti saranno utili:
http://sdk.stalker-game.com/en/index...ting_all.spawn
http://sdk.stalker-game.com/en/index...through_script
Se non capisci qlk cosa, sai dove chiedere
Un'altra cosa
Codice:local obj = alife():create("bar_dolg_respawn_3",a,13193,8,65535)
Gli ultimi tre numeri,da dove sono stati presi?
Ultima modifica di Sacrificato; 24-11-08 alle 14:36:18
Ciao, allora procedendo per ordine:
- ogni posizione è univoca, c'è ne una sola in tutto il gioco, quindi non c'è bisogno di specificare il livello. Devi sapere che la posizione ( così come la direzione ) è determinata dai valori x, y, z di un vettore, quindi ti basta scrivere per esempio
- per spawnare un oggetto si usa il metodo create della classe alife, lo puoi usare in 2 modi:Codice:vector():set(123, 123, 123)
Codice:local obj = alife():create(sezione, vettore_posizione, level_vertex_id, game_vertex_id)dove:Codice:local obj = alife():create(sezione, vettore_posizione, level_vertex_id, game_vertex_id, parent_id)
sezione è il nome del npc\mostro\oggetto
vettore_posizione è la posizione, deve essere sempre un vettore quindi bisogna scrivere vector():set(x,y,z)
level_vertex_id = id del vertice del livello
game_vertex_id = id della porzione di livello
parent_id = quando specificato, farà spawnare l'oggetto nell'inventario dell'npc che è indicato con il suo id
Inoltre questo metodo ritorna una server_entity, ma non mi dilungo su quest'argomento, se non ti interessa, perciò scriviamo local obj = ...
Per esempio per spawnare un succhiasangue ti basta scrivere così:
per spawnare un arma nell'inventario del marchiato:Codice:local obj = alife():create("bloodsucker_normal", vector():set(123, 123, 123), 123, 123)
db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id() ritornano rispettivamente: la posizione, level vertex id, game vertex id e id del marchiato che è chiamato actor nei file di gioco.Codice:local obj = alife():create("wpn_ak74", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
Penso che tu sappia come prendere le coordinate in gioco, se no allora te lo spiego dopo![]()
Chiaro come sempre,si per le coordinate so come fare...una cosa,sto facendo confusione tra level_vertex_id e game_vertex_id ....son sempre necessari entrambi?
P.s.
Ho visto che in Cs invece le coordinate si prendono con un'altro comando da console...ma per la costruzione degli script il procedimento è sempre uguale?
Allora:Chiaro come sempre,si per le coordinate so come fare...una cosa,sto facendo confusione tra level_vertex_id e game_vertex_id ....son sempre necessari entrambi?
P.s.
Ho visto che in Cs invece le coordinate si prendono con un'altro comando da console...ma per la costruzione degli script il procedimento è sempre uguale?
- si sono sempre necessari, ma puoi anke mettere quelli dell'actor, anche se potrebbero esserci dei problemi (soprattutto se il livello in cui si è è diverso da quello in cui si vorrebbe spawnare l'oggetto).
local obj = alife():create("wpn_ak74", vector():set(123,123,123), db.actor:level_vertex_id(), db.actor:game_vertex_id())
Se vuoi ti posso fare una gamedata per printare i valori sia a schermo che nel log, cosa fattibile sia in CS che in SOC senza problemi.
Se ad esempio voglio posizionare un'arma nella base dei Clear Sky va bene questo?
Questa stringa occorre scriverla in un nuovo file di testo a piacimento (che poi verrà rinominato nomefile.script)?Codice:local obj = alife():create("wpn_ak74", vector():set(-184.88, 2.05, -299.49), db.actor:level_vertex_id(), db.actor:game_vertex_id())
Il valore "function" deve essere messo?
Scusa se son domande banali.
Ciao, allora procedendo sempre per ordine:
- con quella porzione di codice spawni un ak74 nella posizione: -184.88, 2.05, -299.49; però devi essere sicuro che si tratti dello stesso stesso livello in cui ti trovi altrimenti potrebbe dare problemi, ti basta aggiungere un controllo di flusso tipo:
- I file degli script hanno sempre estensione .script sia in SoC che in CS, sono scritti in linguaggio lua, quindi dovresti imparare un pò il linguaggio per non fare errori. Potrei anche dirti che per scrivere una funzione devi fare così:Codice:if level.name() == "l01_escape" then -- fai qlk cosa end
però ti consiglio di leggere qlk guida, fai riferimento a questi link:Codice:function nome_funzione(parametri) -- corpo della funzione end
http://www.lua.org/manual/5.1/manual.html
http://pgl.yoyo.org/luai/i/_
http://www.lua.org/pil/index.html
http://it.wikipedia.org/wiki/Lua
Altrimenti potresti commettere facilmente errori.
Naturalmente la nuova funzione che scrivi la devi chiamare in qlk altro file che viene usato dal gioco, tipo nei metodi update o net_spawn della classe actor_binder in bind_stalker.script. Cmq ti ricordo che devi fare in modo che il codice venga eseguito una sola volta altrimenti va a finire che il codice venga eseguito + volte. Invece se vai ad usare l'all.spawn, ciò ke spawni viene creato solo una volta in tutta la partità, con le dovute eccezioni.
Se hai ancora domande sai dove chiedere
Ok adesso ho le idee più chiare...spero di riuscire a far spawnare qualcosa ....un'ultimissima cosa......mi sta venendo il mal di testa a leggere gli script con il blocco note -.-...quale è un programma che permette una visualizzazione migliore?
Ciao, ti consiglio di usare notepad++
http://notepad-plus.sourceforge.net/it/site.htm
Apri il file poi setti il linguaggio
Ciao,finalmente son riuscito a far spawnare un oggetto nell'inventario..e ok..compare una sola volta..
invece poi son riuscito a far spawnare anche un oggetto nelle coordinate precise ma,mi son ritrovato un'invasione di 100 e passa reperti o.o
Che ho combinato?
Spoiler:![]()
Ciao, se non mi mostri il codice che hai scritto non ti posso aiutareCiao,finalmente son riuscito a far spawnare un oggetto nell'inventario..e ok..compare una sola volta..
invece poi son riuscito a far spawnare anche un oggetto nelle coordinate precise ma,mi son ritrovato un'invasione di 100 e passa reperti o.o
Che ho combinato?
Spoiler:![]()
![]()
Ah...è vero....ecco questo lo ho scritto nella sezione update del file bind_stalker...la mia intenzione era all'inizio quella di far spawnare l'oggetto nell'inventario....e ok..poi ho tentato di farlo spawnare nelle coordinate precise....
Come puoi capire son scarso e non ci capisco ancora più di tanto,considerando anche che con l'inglese non ci vado d'accordoCodice:if not db.actor:object("af_compass") then local obj = alife():create("af_compass", vector():set(-184.88, 2.05, -299.49), db.actor:level_vertex_id(), db.actor:game_vertex_id()) enddiciamo che non ci speravo neanche di riuscire a far "apparire" qualcosa....comunque grazie dell'aiuto
Salve volevo sapere io ho win xp pro,ed ogni tanto il gioco stalker SoC si blocca ed ho letto l'articolo del registro di sitema,ma perchè non fate un programmino che si installi nel registro di sistema direttamente? si eviterebbero spiacevolissime conseguenze,alcuni siti lo fanno,perchè una cosa e farlo a mano omettendo una lettera ho un numero in meno,col registro non si torna indietro,e le conseguenze sarebbero catastrofiche,specie per chi come mè ha da poco xp e non sà come riformattarlo dovesse andar male qualcosa.Non prendetevela,il mio era un consiglio sempre se avrete tempo a disposizione ovviamente![]()
Grazie![]()
Ciao, alloraAh...è vero....ecco questo lo ho scritto nella sezione update del file bind_stalker...la mia intenzione era all'inizio quella di far spawnare l'oggetto nell'inventario....e ok..poi ho tentato di farlo spawnare nelle coordinate precise....
Come puoi capire son scarso e non ci capisco ancora più di tanto,considerando anche che con l'inglese non ci vado d'accordoCodice:if not db.actor:object("af_compass") then local obj = alife():create("af_compass", vector():set(-184.88, 2.05, -299.49), db.actor:level_vertex_id(), db.actor:game_vertex_id()) enddiciamo che non ci speravo neanche di riuscire a far "apparire" qualcosa....comunque grazie dell'aiuto
ritorna un valore diverso da nil (nullo) se l'actor ha l'oggetto "af_compass" nell'inventario.Codice:db.actor:object("af_compass")
Perciò una volta spawnato, la condizionenon è + raggiunta e quindi non viene eseguito il codice successivo.Codice:not db.actor:object("af_compass")
Invece se fai spawnare un oggetto nello spazio, la condizionenon verrà mai raggiunta; e dato che il metodo update viene chiamato ogni secondo appariranno un bel pò di oggetti. Perciò ti conviene mettere come condizione o l'avere o meno una data info_portion oppure salvare una variabile nel salvataggio.Codice:not db.actor:object("af_compass")
Magari, se vuoi posso scriverti io del codice per far spawnare solo una volta un oggetto
Si, si può fare, però basterebbe un pò di accortenza quando si fa qlk cosa che potrebbe danneggiare il pcSalve volevo sapere io ho win xp pro,ed ogni tanto il gioco stalker SoC si blocca ed ho letto l'articolo del registro di sitema,ma perchè non fate un programmino che si installi nel registro di sistema direttamente? si eviterebbero spiacevolissime conseguenze,alcuni siti lo fanno,perchè una cosa e farlo a mano omettendo una lettera ho un numero in meno,col registro non si torna indietro,e le conseguenze sarebbero catastrofiche,specie per chi come mè ha da poco xp e non sà come riformattarlo dovesse andar male qualcosa.Non prendetevela,il mio era un consiglio sempre se avrete tempo a disposizione ovviamente![]()
Grazie![]()
Ultima modifica di Gr1ph00n; 28-11-08 alle 14:57:38
Ciao...quindi alla fin fine quella porzione di codice che ho scritto è utile per mettere un oggetto nell'inventario....che poi ho visto che alla fine appena usi tale oggetto la prima condizione è accettata e l'oggetto si respawna di nuovo....comunque non sapevo che si potesse salvare una variabile nel salvataggioCiao, alloraritorna un valore diverso da nil (nullo) se l'actor ha l'oggetto "af_compass" nell'inventario.Codice:db.actor:object("af_compass")
Perciò una volta spawnato, la condizionenon è + raggiunta e quindi non viene eseguito il codice successivo.Codice:not db.actor:object("af_compass")
Invece se fai spawnare un oggetto nello spazio, la condizionenon verrà mai raggiunta; e dato che il metodo update viene chiamato ogni secondo appariranno un bel pò di oggetti. Perciò ti conviene mettere come condizione o l'avere o meno una data info_portion oppure salvare una variabile nel salvataggio.Codice:not db.actor:object("af_compass")
Magari, se vuoi posso scriverti io del codice per far spawnare solo una volta un oggetto
se puoi scrivimi il codice per far spawnare una sola volta....
Ciao Sacrificato, potresti provare ad usare questo:
Chiamando questa funzione nel net_spawn dell'actor binder, verranno spawnati solo la prima volta che si entra in un livello, gli oggetti contenuti nell'array 'spawn_tbl'. L'unica cosa che devi controllare è questa: se i nomi dei livelli combaciano con quelli che ho messo, io oramai ho disinstallato Clear Sky quindi non posso controllare in game, puoi provare printando nella console con questo comando:Codice:local spawn_tbl = { escape = { { section = "bloodsucker_normal", position = vector():set(123, 123, 123), level_vertex_id = 123, game_vertex_id = 123 }, { section = "bloodsucker_normal", position = vector():set(123, 123, 123), level_vertex_id = 123, game_vertex_id = 123 }, { section = "bloodsucker_normal", position = vector():set(123, 123, 123), level_vertex_id = 123, game_vertex_id = 123 }, { section = "bloodsucker_normal", position = vector():set(123, 123, 123), level_vertex_id = 123, game_vertex_id = 123 } }, stancia_2 = {}, hospital = {}, limansk = {}, military = {}, red_forest = {}, yantar = {}, agroprom_underground = {}, agroprom = {}, darkvalley = {}, garbage = {}, marsh = {} } function spawn() local obj = nil local level_name = level.name() if xr_logic.pstor_retrieve(db.actor, "spwn_" .. level_name, false) == false then for k, v in pairs(spawn_tbl[level_name]) do obj = alife():create(v.section, v.position, v.level_vertex_id, v.game_vertex_id) end xr_logic.pstor_store(db.actor, "spwn_" .. level_name, true) end end
Codice:get_console():execute("load *** livello = " .. level.name())![]()