שלום לכולם,
מאז שהתחלתי לבקר פה שמתי לב שהמון אנשים שואלים על הערכים הממולצים לפקודות ה-netcode של cod4, אנסה ב"מאמר" הזה לעבור ע"פ הפקודות העיקריות, בעצם כולן, המקנפגות את מנוע ה-netcode של המשחק.
אז מהו בעצם ה-netcode הזה? לכל משחק רשת יש מערכת netcode משלו האחראית על תעבורת המידע מהמחשב שלכם - לשרת המשחק. ז"א כשאתם מכוונים לראש של מישהו ויורים ישנו מנגנון שלם שמתרגם את המידע הזה שנרשם במשחק אצלכם במחשב (הלחיצה על העכבר) לחבילות מידע (packet) שיוכלו להיות מועברות לשרת, ושהשרת יוכל לקרוא אותן. ככה העניין עובד, בתמציתיות רבה.
האם לא שמתם לב במהלך המשחקים שלכם ברשת שישנם שחקנים שיש להם מן יתרון כזה שלא יכולתם להסביר? "הם פשוט תמיד פוגעים". העניין הוא, שכמו בכל מנגנון טכני, יש מה לשפר, לשמן ולכוונן. שחקנים מקצועיים מסתמכים לא רק על ה-skills שלהם, אלא גם על הציוד ההיקפי והחומרה במחשב שלהם, בין היתר. לא פחות חשוב מכך הינו מנגנון ה-netcode, כי לא משנה כמה fps תשיג בעזרת מחשב עוצמתי, ולא משנה עד כמה העכבר שלך יהיה חד ומדוייק, ה-netcode בסופו של דבר הוא קצה המשתמש שלך והוא זה שאחראי לספר לשרת מה עשית בדיוק. והשרת, בתורו, יספר לשחקן האחר שלפני שנייה כיוונת לראשו וירית, שהוא מת מ-headshot.
פקודות ה-netcode העיקריות הולכות כלהלן:
com_maxfps
rate
cl_maxpackets
cl_packetdup
snaps
וזהו.
com_maxfps - כמו שהפקודה עצמה רומזת, הערך שתשימו פה ייצג את מקסימום הפריימים לשנייה שהמשחק שלכם יפיק, אם אכן הוא יגיע לאותו ערך שהצבתם, ז"א הערך מקיים רק גבול מקסימלי, הוא לא מבטיח fps כי זה בהכרח. 0 - אין גבול. 999 הינו המקסימום.
אז למה הפקודה הזו כ"כ חשובה? ובכן, העובדה המצחיקה היא שישנו באג במנוע ה-q3 שעליו המשחק עדיין מתבסס, מאז cod1. בערכים הבאים: 43, 76, 125, 333 מנוע המשחק מעניק לכם תוספת מזערית לגובה הקפיה ומרחקה, מהירות הריצה, וה-registration של היריות שלכם בשרת. לפעמים התוספת המינימלית הזו יכולה להבדיל בין חיים ומוות במשחק, ולבין הצלחה או כישלון בקפיצות למקומות מסויימים. זו הסיבה שאתם רואים תמיד com_maxfps 125 בקונפיגים של שחקנים מקצועיים.
אמליץ לכם להשתמש בערך com_maxfps 125 גם אם אתם מגיעים ל-333, כי היציבות וההמשכיות של 125 fps חשובה יותר מאותם הרגעים שאתם מגיעים ל-333.
rate - המהירות שבה השרת מספק לכם את המידע על עולם המשחק. כל השרתים שיצא לי לשחק בהם בארץ מספקים rate של 25000, וזהו גם הערך שבו אתם תשתמשו.
cl_maxpackets - אולי הפקודה הכי לא מובנת בהיסטוריה של המשחק. הפקודה הזו מגדירה את מספר חבילות המידע שאתם שולחים לשרת בשנייה. מנוע המשחק עצמו וה-netcode בכלל בנויים כך שאתה יכול לשלוח רק מספר פאקטים מסויים המופק מה-maxfps שלך חלקי משתנה X (משתנה בערכים שונים). המשתנה הזה הוא קבוע לטווחים מסויימים והוא תמיד מספר שלם.
ז"א בקיצור אם אתם קבעתם com_maxfps 125 ואתם משיגים אותו ו-cl_maxpackets 100 אתם לא באמת תשלחו 100 פאקטים לשנייה, אלא 62.5. אם אתם קבעתם com_maxfps 333 ויש לכם 333 fps ו-cl_maxpackets 100 אתם עוד פעם לא תשלחו 100 פאקטים לשנייה, אלא 83.25 פאקטים לשנייה. נכון, אין "חצי" או "רבע" פאקט לכן המנוע מעגל ל-63 במקום 62.5, או 83 במקום 83.25.
מתמטיקה פשוטה נכון? מה אתם צריכים לעשות אם כן? החליטו איזה fps קבוע אתם מצליחים להשיג במרבית הזמן, ואז לפי המחשבון הזה http://www.funender.com/quake/articles/fps.html, תראו כמה פאקטים מקסימום תוכלו לשלוח.
אני אישית עדיין משאיר על cl_maxpackets 100 כי כך המשחק מחליט לי אוטומטית את מספר הפאקטים המקסימלי שהוא שולח לבדו, בהתאם ל-125 fps שיש לי. (ז"א 63 packets per second).
אז עכשיו למדתם שאתם לא באמת שולחים 100 packets לשנייה, כי מנוע ה-netcode אף פעם לא קובע משתנה שאם תחלקו את ה-fps שלכם בו, תקבלו 100 packets.
cl_packetdup - הפקודה הזו מנסה "לחפות" על קישוריות האינטרנט הישראלית הגרועה כ"כ. כמו ששמה אומר, הפקודה סה"כ קובעת כמה פאקטים זהים המשחק ישלח לשרת - במקרה שחלקם לא יגיעו ליעדם. האם אי פעם חוויתם לאגים? או יריתם וזה קפא לכם לשנייה? התופעה הזו מכונה packet loss, ותוכנות כמו the all seeing eye מציגות את הפאקט לוס לצג הפינג של השרתים. בגלל סיבות שונות ומשונות, לפעמים המידע (בצורת פאקטים) שאנחנו שולחים לשרתי המשחק פשוט אובדים אי שם באינטרנט. על מנת לחפות על כך, אם כן, אפשר לשכפל את הפאקטים כדי להבטיח את הגעתם.
אבל בגלל שפאקטים זהים משוכפלים, זה יכול לכאורה להעלות את הפינג, כי אתם "תציפו" את השרת. כמו כן אתם צורכים חלק גדול יותר של רוחב הפס ומהירות הקישור שלכם לשרת בשביל אותו הפאקט שנשלח 2-3-4 פעמים רק כדי לוודא שהוא נשלח.
לכן אפשר לבטל את השכפול, אם הקישור שלכם מצויין, ואתם לא חווים לאגים ו-packet loss ע"י cl_packetdup 0.
snaps - הפקודה הזו אומרת לשרת כמה פעמים עליו "לצלם" את עולם המשחק שלכם. או, כמה פעמים השרת "מרענן" לכם את המידע שאתם רואים. ב-pam4 ובשרתים רבים ה-snaps ממילא מוגבלים ל-30 או 40 ע"י פקודת שרת: sv_snaps 30/40, לכן השאירו זאת על 30.
בקיצור, לסיכום, אלו הם הערכים המומלצים לשחקן הישראלי הממוצע:
com_maxfps 125
cl_maxpackets 100/63
rate 25000
cl_packetdup 2/1/0
snaps 30
הלאה לשרתים!
עוד טיפ מומלץ הוא להפעיל את ה-lagometer ע"י הפקודה cg_drawlagometer 1 ואז יופיע לכם ריבוע בצד הימני של המסך שמציג גרפים של ה-fps, packets per second, snaps וכ'ו. תוכלו לשחק עם הערכים לבד כך שהקפיצות בלאגומטר ייעלמו וכל הצבעים יהיו שם בירוק.
נ.ב. - אם תרצו להעלות זאת כנושא דביק, או למדריכים, אשמח. רק תלמדו מהתקריות בעבר ותנו קרדיט בהתאם.
שלכם,
phobus.