per quale gioco? soc, cs o cop?
Visualizzazione Stampabile
LOL, scusa, hai ragione -.-' Sto uscendo di testa.
SoC. E ti chiedo qualche informazione in più riguardo un problema che non riesco a risolvere. Sto cercando di rendere compatibile il mod Faction Wars (quello che rende liberi i png di spostarsi un po' ovunque a caso) e il Complete 2009. In realtà tutto sembra funzionare benissimo anche sovrascrivendo il FW sul Complete 2009.
L'unico problema è che se becco un nemico al Bar (es.: un bandito o un Monolith) e lo uccido, immediatamente scatta l'allarme e tutti gli stalker presenti nell'area mi diventano ostili.
Ti viene in mente su quali files dovrei lavorare per eliminare questo fastidioso inconveniente?
lo ho notato anche io è veramnete fastidioso..praticamente mi son ritrovato al bar mentre c'era un attacco di banditi erano veramente tanti e sono stato costretto a passare dal bar correndo come un pazzo:asd::asd:
premetto che di modding non conosco niente ma se serve un aiuto qualsiasi..tipo testare se funziona la modifica o roba del genere posso essere di aiuto. tanto ormai ho disinstallato e installato Soc talmente tante volte che ci ho fatto l'abitudine:D:lol:
Allora procedendo con ordine, il programma per aprire l'all.spawn lo trovi quà http://sdk.stalker-game.com/en/index...ting_all.spawn con tanto di guida scritta da me (in inglese).
Per il problema del bar è un fatto di logica degli npc, in pratica quando si spara a qualcuno nel territorio del bar dovrebbe scattare un allarme che ti rende tutti nemici, se ricordo bene. Devi dare un'occhiata alla logica degli npcs lì presenti :sisi:
Si ma con pure con soc liscio è capitato che ho trovato 3 mercenari che mi sapracchiavano, io ho risposto al fuoco, e tutti al bar sono diventati ostili.
Aspetta, mi sopravvaluti!
"Dare un'occhiata alla logica degli npc" è un concetto privo di significato per me: devi avere pazienza, io so poco o nulla di modding. Il fatto è che ho visto rilasciate alcune versioni del Faction Wars "rese compatibili", ad esempio, col megamod Oblivion Lost 2.2. Quindi mi chiedevo se fosse possibile - in modi e metodi relativamente facili - realizzare qualcosa di simile per il Complete 2009.
Il fatto che i png del Bar se la prendano se io killo qualcuno nel Bar - sia anche un Bandito - posso capirlo; capisco già meno come io possa intervenire sui files del gioco (parliamo solo del all.spawn o potrebbero essere coinvolti anche altri files?); ancora meno capisco come sia possibile che il Faction Wars "liscio" non causi questo problema mentre se sovrascritto sul Complete 2009, sì :p
Grazie per qualsiasi ulteriore aiuto o chiarimento.
@spetsnaz: Lieto di essere in gradita compagnia! Per lo meno non si tratta di un problema mio personale. Speriamo di risolvere la cosa al più presto, in un modo o nell'altro!
Ah, ora che mi viene in mente (magari può essere utile): io ho provato a sovrascrivere il FW 1.0 originale cambiando poi il file all.spawn e mettendo rispettivamente:
1- Quello del Complete 2009 originale.
2- Quello compatibile col ZRP.
3- Quello "liscio" del FW.
In tutti e tre i casi mi è saltato fuori il problema descritto sopra.
Edito:
Ah. *panico*
La funzione che principalmente governa la logica degli NPC al bar è presente nel file xr_effect.script e si chiama:
function bar_territory_logic(actor,npc)
da li gestisci in base alle infoportion ciò che deve accadere.
Poi ci srebbero i file dei gulag ma li non dirti niente purtroppo
Si ma se l'all.spawn del FW non è compatibile con quelli del complete 2009+zrp, non concludi nulla perché sovrascrivendolo con quello del FW annulli le modifiche del complete... non sò se mi spiego.
Soluzione alternativa: chiedete una versione compatibile all'autore del FW jamie1992, anzi se lo becco in chat glielo chiedo di persona ;)
Grazie mille per i chiarimenti. Effettivamente è stata rilasciata una versione del all.spawn mergeata col ZRP e la sto provando proprio in questi giorni (sfortunatamente non ho ancora beccato nemici al Bar, quindi non so bene come andrà). Proverò anche a dare un'occhiata al file segnalato da Boris. Grazie ancora per l'interessamento.
Darimar potresti dirmi dove scaricare questo file cosi faccio qualche test pure io?
Forse ho trovato il metodo per il tuo problema Darimar, ed ancher il modo di cominciare a metter mani al codice qualora tu volessi.
In primis ti serve il Notepad C++ o il semplice blocco note.
Generalmente se tu uccidi un PNG al bar, pur essendo tuo nemico, allerti tutti gli stalker la prima volta.
La seconda volta che tu uccidi qualcuno già alcuni stalker ti diventano ostili.
La terza volta praticamente tutti gli stalker nell'area ti sono ostili.
Quindi dobbiamo fare in modo che se tu uccidi o un bandito, o un mercenario o un monolith o un militare questo meccanismo non si debba attivare.
Ora passiamo ai fatti.
Nella cartella script c'è un file chiamato bind_monster.script;
Al suo interno trovi questa funzione "function generic_object_binder:death_callback(victim, who)"
e diciamo che qualunque cosa animata strelok uccida passa da qui.
Ora prova ad inserire questa riga all' interno della funzione:
e salva il file.Codice:xr_effects.get_community(self.object)
Adesso vai al file nella stessa cartella chiamato xr_effects.script e all'inizio del file prima di qualunque altra cosa questa funzione:
Adesso siamo alla fine del lavoro, nello stesso xr_effects.script trova questa funzione:Codice:function get_community(obj)
local rel = obj:relation(db.actor)
if rel == game_object.enemy and not obj:character_community() == "dolg" or
obj:character_community() == "bandit" or
obj:character_community() == "killer" or
obj:character_community() == "monolith" or
obj:character_community() == "military" then
return true
else
return false
end
end
Questa è solo una parte di quella funzione che ti dicevo,Codice:function bar_territory_logic(actor, npc)
local level = level.name()
if level == "l05_bar" then
if dialogs.actor_in_dolg(actor,npc) then
if has_alife_info("bar_dolg_territory_kill") then
news_manager.send_tip(actor, "bar_territory_dolg_kill", nil, "dolg", nil, 507)
xr_gulag.setGulagEnemy("bar_dolg_general", db.actor)
xr_gulag.setGulagEnemy("bar_dolg_veterans", db.actor)
xr_gulag.setGulagEnemy("bar_dolg_bunker", db.actor)
xr_gulag.setGulagEnemy("bar_dolg_zastava", db.actor)
xr_gulag.setGulagEnemy("bar_dolg_zastava_2", db.actor)
xr_gulag.setGulagEnemy("bar_visitors", db.actor)
return
end
sostituiscila completamente con questa:
In buona sostanza ogni cosa che ti è ostile al bar la puoi uccidere senza far scattare gli allarmi, ma deve esser nemico di suo nei tuoi confronti.Codice:function bar_territory_logic(actor, npc)
local level = level.name()
if level == "l05_bar" then
if dialogs.actor_in_dolg(actor,npc) then
if has_alife_info("bar_dolg_territory_kill") and not get_community() then
news_manager.send_tip(actor, "bar_territory_dolg_kill", nil, "dolg", nil, 507)
xr_gulag.setGulagEnemy("bar_dolg_general", db.actor)
xr_gulag.setGulagEnemy("bar_dolg_veterans", db.actor)
xr_gulag.setGulagEnemy("bar_dolg_bunker", db.actor)
xr_gulag.setGulagEnemy("bar_dolg_zastava", db.actor)
xr_gulag.setGulagEnemy("bar_dolg_zastava_2", db.actor)
xr_gulag.setGulagEnemy("bar_visitors", db.actor)
return
end
if has_alife_info("bar_dolg_territory_3_hit") and not get_community() then
news_manager.send_tip(actor, "bar_territory_dolg_3_hit", nil, "dolg", nil, 507)
xr_gulag.setGulagEnemy("bar_dolg_general", db.actor)
xr_gulag.setGulagEnemy("bar_dolg_veterans", db.actor)
xr_gulag.setGulagEnemy("bar_dolg_bunker", db.actor)
xr_gulag.setGulagEnemy("bar_dolg_zastava", db.actor)
xr_gulag.setGulagEnemy("bar_dolg_zastava_2", db.actor)
return
end
if has_alife_info("bar_dolg_territory_2_hit") and not get_community() then
news_manager.send_tip(actor, "bar_territory_dolg_2_hit", nil, "dolg", nil, 507)
return
end
if has_alife_info("bar_dolg_territory_1_hit") and not get_community() then
news_manager.send_tip(actor, "bar_territory_dolg_1_hit", nil, "dolg", nil, 507)
return
end
else
if has_alife_info("bar_dolg_territory_kill") and not get_community() then
db.actor:give_info_portion("bar_territory_nodolg_kill")
news_manager.send_tip(actor, "bar_territory_nodolg_kill", nil, "dolg", nil, 507)
xr_gulag.setGulagEnemy("bar_dolg_general", db.actor)
xr_gulag.setGulagEnemy("bar_dolg_veterans", db.actor)
xr_gulag.setGulagEnemy("bar_dolg_bunker", db.actor)
xr_gulag.setGulagEnemy("bar_dolg_zastava", db.actor)
xr_gulag.setGulagEnemy("bar_dolg_zastava_2", db.actor)
xr_gulag.setGulagEnemy("bar_visitors", db.actor)
return
end
if has_alife_info("bar_dolg_territory_2_hit") and not get_community() then
db.actor:give_info_portion("bar_territory_nodolg_2_hit")
news_manager.send_tip(actor, "bar_territory_nodolg_2_hit", nil, "dolg", nil, 507)
xr_gulag.setGulagEnemy("bar_dolg_general", db.actor)
xr_gulag.setGulagEnemy("bar_dolg_veterans", db.actor)
xr_gulag.setGulagEnemy("bar_dolg_bunker", db.actor)
xr_gulag.setGulagEnemy("bar_dolg_zastava", db.actor)
xr_gulag.setGulagEnemy("bar_dolg_zastava_2", db.actor)
xr_gulag.setGulagEnemy("bar_visitors", db.actor)
return
end
if has_alife_info("bar_dolg_territory_1_hit") and not get_community() then
db.actor:give_info_portion("bar_territory_nodolg_1_hit")
news_manager.send_tip(actor, "bar_territory_nodolg_1_hit", nil, "dolg", nil, 507)
return
end
end
end
return
end
Prova e fammi sapere, sono sicuro che funonzia:)
Fantastico, Boris, sei stato gentilissimo! Farò una prova al più presto seguendo i tuoi suggerimenti, grazie mille.
@spetsnaz:
Ecco il thread:
http://gsc-game.com/main.php?t=commu...&page=1#304992
ciao boris grazie mille:):)
senti ma settando quello che hai fatto tu per esempio se io aggiungo anche la freedom
qui
la freedom sarà nemica verso i miei confronti o nei confronti del bar? perchè se x esempio mi unisco alla duty e la freedom attacca al bar e io li freddo i duty si fanno nemici e preferirei che ciò non succeda.Codice:function get_community(obj)
local rel = obj:relation(db.actor)
if rel == game_object.enemy and not obj:character_community() == "dolg" or
obj:character_community() == "bandit" or
obj:character_community() == "killer" or
obj:character_community() == "monolith" or
obj:character_community() == "military" then
return true
else
return false
end
end
@Darimar grazie del link
Si, se li killerai non verrai penalizzato al bar:
e il gioco è fatto.Codice:function get_community(obj)
local rel = obj:relation(db.actor)
if rel == game_object.enemy and not obj:character_community() == "dolg" or
obj:character_community() == "bandit" or
obj:character_community() == "killer" or
obj:character_community() == "freedom" or
obj:character_community() == "monolith" or
obj:character_community() == "military" then
return true
else
return false
end
end
Ma l'hai provato il codice?
Funziona bene???
sinceramente sto giocando e giocando ma non la stanno attaccando la base spero oggi di avere + fortuna :sad:
cmq grazie ancora :D
EDIT:
quando arrivo al bar e fuori c'è qualcuno che spara ma non sono riuscito a identificarlo mi crasha il gioco probabilmente ho sbagliato a inserire qualche stringa penso questa
xr_effects.get_community(self.object)
comunque la inserisco va bene ? o va inserito all'interno della funzione in un modo particolare? scusami per tutte ste domande ma nel settore non sono molto ferratox(
Questa è l'intera funzione che trovo:
A che livello devo copia/incollare la nuova riga che mi hai proposto?Codice:function generic_object_binder:death_callback(victim, who)
if who:id() == db.actor:id() then
xr_statistic.addKillCount(self.object)
end
if self.st.mob_death then
xr_logic.issue_event(self.object, self.st.mob_death, "death_callback", victim, who)
end
if self.st.active_section then
xr_logic.issue_event(self.object, self.st[self.st.active_scheme], "death_callback", victim, who)
end
smart_terrain.on_death( self.object:id() )
--' Íàíîñèì íåáîëüøîé èìïóëüñ âïåðåä.
local h = hit()
h.draftsman = self.object
h.type = hit.fire_wound
h.direction = db.actor:position():sub(self.object:position())
h:bone("pelvis")
h.power = 1
h.impulse = 10
self.object:hit(h)
if table.getn(self.particles) > 0 then
for kk,vv in pairs(self.particles) do
vv:on_death()
end
end
end
Mi sapresti dire meglio cosa intendi con "Al bar e fuori c'è qualcuno che spara"?? "Identificarlo" vuoi dire che non sai a che fazione appartiene??
In teoria prima di un if e dopo un end quindi già tra
va beneCodice:end
if self.st.mob_death then
così:
Codice:function generic_object_binder:death_callback(victim, who)
if who:id() == db.actor:id() then
xr_statistic.addKillCount(self.object)
end
xr_effects.get_community(self.object) -- LA NOSTRA RIGA
if self.st.mob_death then
xr_logic.issue_event(self.object, self.st.mob_death, "death_callback", victim, who)
end
if self.st.active_section then
xr_logic.issue_event(self.object, self.st[self.st.active_scheme], "death_callback", victim, who)
end
smart_terrain.on_death( self.object:id() )
--' Íàíîñèì íåáîëüøîé èìïóëüñ âïåðåä.
local h = hit()
h.draftsman = self.object
h.type = hit.fire_wound
h.direction = db.actor:position():sub(self.object:position())
h:bone("pelvis")
h.power = 1
h.impulse = 10
self.object:hit(h)
if table.getn(self.particles) > 0 then
for kk,vv in pairs(self.particles) do
vv:on_death()
end
end
end
no nella discarica al bar al primo avamposto duty quello vicino alla tana dei cani, dove ci sono gli zombi impiccati x intenderci :asd: cmq questo è il log
Codice:FATAL ERROR
[error]Expression : fatal error
[error]Function : CIni_IdToIndex<1,struct COMMUNITY_DATA,class shared_str,int,class CHARACTER_COMMUNITY>::GetByIndex
[error]File : e:\stalker\patch_1_0004\xr_3da\xrgame\ini_id_loader.h
[error]Line : 147
[error]Description : <no expression>
[error]Arguments : item by index not found in section game_relations, line communities
stack trace:
Allora modifichiamo questa riga in bind_monster.script:
Codice:xr_effects.get_community(self.object:id) -- LA NOSTRA RIGA
Mentre in xr_effects.script Proviamo a modificare questa parte così:
Ora dovrebbe funzionare bene, se crasha di nuovo riposta il log come prima per favore.Codice:function get_community(npc_id)
local obj=level.object_by_id(npc_id)
if not obj then
return false
elseif obj and IsStalker(obj) then
if (obj:relation(db.actor) == game_object.enemy and not obj:character_community() == "dolg") or
obj:character_community() == "bandit" or
obj:character_community() == "killer" or
obj:character_community() == "freedom" or
obj:character_community() == "monolith" or
obj:character_community() == "zombied" or
obj:character_community() == "military" then
return true
else
return false
end
end
end
Io non sono molto esperto in questo genere di cose e spero riusciate a capirmi:stress:
idem :(
domani provo a reinstallare la mod
Codice:FATAL ERROR
[error]Expression : fatal error
[error]Function : CIni_IdToIndex<1,struct COMMUNITY_DATA,class shared_str,int,class CHARACTER_COMMUNITY>::GetByIndex
[error]File : e:\stalker\patch_1_0004\xr_3da\xrgame\ini_id_loader.h
[error]Line : 147
[error]Description : <no expression>
[error]Arguments : item by index not found in section game_relations, line communities
Yeah. L'autore è un certo ExoStalker sul forum GSC:
http://gsc-game.com/index.php?t=comm...c_id=16&page=1
Lui sostiene di aver mergeato l'all.spawn del Faction Wars con l'all.spawn del ZRP R11 RC3.
Ora, premetto che non so quale versione del ZRP sia presente nel Complete 2009 1.4.4 e che, apparentemente, anche l'all.spawn del Faction Wars 1.0 "liscio" SEMBRA funzionare bene se sovrascritto brutalmente sopra al gamedata del Complete 2009.
Rimane comunque il fatto che sovrascrivendo l'all.spawn originale del FW 1.0 ho notato un certo "dinamismo" in più (es.: appena arrivo al Bar mi sono trovato un gruppo di Monolith che lo stavano attraversando. Ovviamente, appena ho aperto il fuoco e ne ho ucciso uno, l'intero Bar mi si è rivoltato contro!). Con l'all.spawn mergeato col ZRP di cui sopra, questo "dinamismo" non sembra comparire: ho trascorso giorni - in game - senza che alcuna Fazione passasse per il Bar.
Queste le mie impressioni e i miei dati "certi" raccolti a oggi.
Ringrazio ancora Boris per la pazienza e il supporto: fra me e spetsnaz spero riusciremo a collaudare adeguatamente gli smanettamenti che ci proponete!
Spero di potermi sdebitare, in qualche modo, in futuro.
Credo che non riesca a trovare l'ID per risalire alla comunità d'appartenenza :look:
[error]Function : CIni_IdToIndex<1,struct COMMUNITY_DATA,class shared_str,int,class CHARACTER_COMMUNITY>::GetByIndex
[error]Arguments : item by index not found
dovrei aver risolto avendo aggiunto questa riga alla funzione::look:Codice:function get_community(npc_id)
local obj=level.object_by_id(npc_id)
if not obj then
return false