Visa ämne
Anrop » Anrop » FAQ
 Skriv ut ämne
Lär-dig-själv-göra-Uppdrag - Mall 1
TBA - Kommer upp igen snart.
Redigerat av SkaGGet den 2014-06-09 15:45
Stay frosty !
Det här må vara överkurs men det är något som jag känner att många här inte har koll på inklusive de som gör op ganska ofta, När man utför kommandon t.ex.

Citera

this addItemcargoGlobal ["ACRE_PRC148_UHF",10];


Så finns det egentligen bara två saker man vill fråga sig, Är det här kommandot globalt eller lokalt och när kommer det köras?
Vad är skillnaden mellan globalt och lokalt och varför behöver man bry sig undrar du säkert då?

Det är faktiskt ganska viktigt att känna till om det kommando du vill utföra är MP synkat (ett s.k. globalt kommando) eller om den bara har lokal effekt, Ta samma exempel där vi har addItemCargoGlobal, Det kommandot lägger till ett item i en container så som en ammolåda, fordon eller dylikt och som namnet antyder så är den global

När kommandot är globalt så innebär det att om någon dator eller servern utför kommandot så utförs det hos allas datorer så vad det innebär i praktiken är att om kommandot

Citera

this addItemcargoGlobal ["ACRE_PRC148_UHF",10];
endast utförs hos servern så kommer 10st AN/PRC-148 radioapparater att dyka upp för alla på servern och då återkommer jag till den andra viktiga frågan: "när det kommer det att köras?"

Om du sätter ut en ammolåda i editorn och skriver exakt samma rad som innan i dess init fält och det är 20 pers som spelar på servern så kommer det att skapas 200 AN/PRC-148 radioapparater i den lådan när uppdraget väl är igång, Varför?
Kom ihåg att addItemCargoGlobal är ett globalt kommando, init.sqf och alla init fält som sitter i kartan är saker som kommer att utföras av alla spelare när kartan laddats och således så kommer spelare 1 att läsa initen och skapa 10 radioapparater för alla, spelare 2 kommer att läsa initen och skapa 10 radioapparater för alla och så vidare.

Vill du bara ha exakt 10 radioapparater så har du två sätt att lösa det på, Antingen så gör du ett medvetet val att vara konsekvent med att bara utföra globala kommandon hos servern och det kan man göra t.ex. i init.sqf på följande vis:

Citera

if (isServer) then {
ammo1 addItemcargoGlobal ["ACRE_PRC148_UHF",10];
};


Alla kommer att köra init.sqf men if-satsen förhindrar att alla utom servern faktiskt utför det globala kommandot
Eller så använder du ett lokalt kommando istället som i det här fallet helt enkelt är addItemCargo.

Om du sätter

Citera

this addItemCargo ["ACRE_PRC148_UHF",10];
som init på en låda så kommer den raden fortfarande att köras av alla spelare som laddat uppdraget men eftersom att effekten är lokal så kommer varje spelare ha 10 radioapparater som den se och förfogar över i den lådan oberoende av de andra spelarna.

Ibland är det inte uppenbart om ett kommando är lokalt eller globalt men det brukar oftast framgå på bikin (https://community.bistudio.com) så det är en bra hemsida att ha till hands när man sätter ihop ett uppdrag.
The enemy cannot predict your actions if you have no idea what you're doing.
Nu har jag dock inte märkt av det i spel att addItemcargoGlobal x per deltagare, så 20deltagare x 10 = 200. Jag har inte märkt att den logic delen är så, utan när jag kört i DediMP så har det varit 10st i en sån låda. Men absolut om man kör saker via init.sqf eller vissa sqf kodande där man inte beräknar att alla läser det som sägs, dvs det blir gånger på gånger på gånger koden läses.. det är jag numera med på.

Känt mera att just addItemcargoGlobal funkar bra, men kanske är något jag haft tur med mer än att det ska funka Pfft
Stay frosty !

Citera

SkaGGet skrev:

Nu har jag dock inte märkt av det i spel att addItemcargoGlobal x per deltagare, så 20deltagare x 10 = 200. Jag har inte märkt att den logic delen är så, utan när jag kört i DediMP så har det varit 10st i en sån låda. Men absolut om man kör saker via init.sqf eller vissa sqf kodande där man inte beräknar att alla läser det som sägs, dvs det blir gånger på gånger på gånger koden läses.. det är jag numera med på.

Känt mera att just addItemcargoGlobal funkar bra, men kanske är något jag haft tur med mer än att det ska funka Pfft


Det jag skrev är 100% korrekt. Jag gick till och med in i editorn och testade så jag inte satt och snackade skit här..
En möjlig anledning till varför du inte upplever ett scenario där du får ut 200 radios (till exempel) kan vara för att du även har

Citera

ClearItemCargoGlobal this;


Det gör att spelare 1 rensare lådan, lägger till 10 radios, spelare 2 rensar lådan och lägger till 10 radios, repeat för varje spelare. I slutändan kanske det bara ligger 10 radios för sista spelaren som exekverade koden rensat upp det innan men det finns ingen garanti för att spelarna kör sina kommandon i turording samt att det är vårdslöst att skriva sådan kod för det skapar en jävla massa onödig trafik/sync mellan alla datorer som leder till desync
The enemy cannot predict your actions if you have no idea what you're doing.
Det må vara onödigt att namnge alla objekt som man vill till exempel lägga till saker i som jag gjorde i mitt exempel innan med ammo1,
En annan möjlig lösning är att man skapar en fil som heter "spawnItem.sqf" och skriver följande:

Citera

_object = _this select 0;
_item = _this select 1;
_amount = _this select 2;

if (isServer) then {
_object addItemCargoGlobal[_item, _amount];
};


och sedan kan du helt enkelt bara sätta följande för varje låda, bil eller annat som du vill förvara items i:

Citera

Nul = [this, "ACRE_PRC148_UHF", 10] execVM "spawnItem.sqf"


Det finns massor av sätt att lösa samma problem på, Det där är bara ett av många.
The enemy cannot predict your actions if you have no idea what you're doing.
Facepalm

Jag misstror dig ingenstans, eller tror inte du pratar skit.. sa tillochmed att jag upplevde det så, så mer än annat sa jag väl att jag hade felet om så vore saken.

Du boldskriver saker och låter som om man förolämpat din heligaste sak i livet. All text som skrevs kunde summeras snabbt och enkelt till:

if (isServer) then {
ammo1 addItemcargoGlobal ["ACRE_PRC148_UHF",10];
};
istället för ammokoden då den säkert rensar sig själv iom clearcargoglobal, ha inte kod i initen då den körs gång på gång via start

Men stänger ned själva guiden tills jag har ork att redigera om berörda delar.
Stay frosty !
Nej all text kan inte bara summeras till det, Jag skrev det med en relativt utförlig förklaring för att eventuella läsare av tråden ska kunna komma in och förstå vad det är som jag pratar om.

Om du kanske skulle sluta vara så egocentrisk och förstå att jag inte bara skriver till dig utan till alla så kanske det blir lite klarare och det är av samma anledning som att jag skriver med fetstil just för att det är en viktig sak jag poängterar. Ta det som du vill


PS.
Jag kollade upp i editorn för att verifiera så att jag inte snackade skit för att jag blev osäker när du säger att du inte märkt av det fenomenet,
Det brukar vara bra om man säkerställer så man vet vad man pratar om först innan man börjar härja ;-)

Edit 2:
Om det är någon som har ytterligare frågor om det här med globalt och lokalt så skicka era frågor via PM eller TS så öppnar jag en ny tråd som är dedikerad till det om det nu är oönskvärt att ha den diskussionen här
Redigerat av xealot den 2014-06-09 15:55
The enemy cannot predict your actions if you have no idea what you're doing.