Засичане дали е края на мапа или човека е излязъл

Ако имате затруднения при изработката/преработката на даден плъгин - пишете тук, ще се опитаме да ви помогнем!
Аватар
sianbg
Извън линия
Потребител
Потребител
Мнения: 232
Регистриран на: 13 Ное 2017, 12:18
Получена благодарност: 1 път
Обратна връзка:

Засичане дали е края на мапа или човека е излязъл

Мнение от sianbg » 07 Фев 2018, 13:35

Здравейте. Понеже се разправях с 4vendeta и тяхната некомпетентност да си опишат услугите правилно... Уж предлагат vps, ама се оказа, че е от 3та компания ... Казват ми що не пита ... Трябва да питам за всяко нещо ли или да прочета това, което сте написали и уж предлагате. Накрая дори не ми отговориха, но това е друга тема. Чудя се изобщо дали да съм при тях. Може би ще мигрирам към друга по-сериозна компания, но ...

Значи заради тях в момента ми се налага сървъра да е някъде, а mysql да е на друг сървър... Поради тази причина искам да оптимизирам заявките в плъгините. Значи при dissconnect на играч се записват неговата статистика. Проблема е, че при смяна на картата всички играчи ще минат през функцията за dissconnect. Това означава, че при 32 играча ще имам 32 заявки към сървъра. Трябва ми код с, който да разпознавам дали просто играч е излязъл или се е сменила картата. Така ще мога да обновя 32 играча с 1 заявка. Това ще е голяма оптимизация в сегашното положение...

Аватар
4Vendeta
Извън линия
Потребител
Потребител
Мнения: 8
Регистриран на: 29 Сеп 2017, 17:39
Местоположение: София
Обратна връзка:

Засичане дали е края на мапа или човека е излязъл

Мнение от 4Vendeta » 07 Фев 2018, 13:53

Естествено да плюем можем, защото не знаем как стоят нещата. Типично по български.
Първо да се изкажем, че разяснението ти относно това, кое-какво е напълно извън темата на самият пост и абсолютно не е на място. Но нали ни е казано да плюем наляво-надясно, защо да не го постнем където ни падне ?

Нека разясним в кое сме НЕКОМПЕТЕНТНИ ? В това, че в RENT 4Vendeta не предлагаме хостинг услуги, каквито вие желаете ? База данни ? Това, че друга хостинг компания в нашият бранш го предлага, не означава, че автоматично и ние го предлагаме ? Никъде не е ОПИСАНО, че предлагаме такива УСЛУГИ. Влизате в гугъл, чуквате си за уеб хостинг, избирате си фирма и си хоствате нещата там, като свързвате наетият сървър от НАС към уеб хостинга. Някъде да е описано УЕБ ХОСТИНГ + ГЕЙМ ХОСТИНГ ? Никъде! И понеже тук се обясняваш за трета компания, ще разгледаме и този случай. Първо: Коя е първата и втората компания, че говорим за трета ? Това, че сме предложили да наемете VPS или Dedicated сървър от сайт с друго име, да не би да означава, че това е друга компания ? Най-малкото преди да се изказваш неподготвен, защо просто не сравни двата контакт адреса ? Дали не са еднакви и следователно не говорим за една и съща фирма ? Иначе веднага мажем както падне и говорим за некомпетентност без да знаем за какво става дума ? Услугите са описани по най-добрият разбираем начин, а това че вие не може да се светнете, че става дума за една и съща компания, не е изобщо наш проблем. А то дори няма никакъв смисъл да се разяснява това нещо, защото изобщо няма никакво значение! Иначе няма да говорим за причината, защо услугите са разделени на два различни сайта, под различни имена (въпреки че говорим за една и съща компания под един лозунг).
Извън темата
Няма да давам подробният пример за продажба на домати и продажба на шапки. В един сайт ли ще се направи и с еднакви имена ли ? (ДОМАТИ.бг и ШАПКИ.бг или ПЕТКО.бг - домати и шапки) Изцяло наш избор.
А друг е въпроса, че дори базата данни да беше на същият хост, където е сървъра, то отново ще имаш същият брой заявки. Изобщо няма никакво значение къде ще е самият хост на базата данни. Дали ще е при хоста, където е сървъра или на съвсем различно място. Броят на заявките е един и същ, понеже достъпваш до базата по един и същ начин, независимо къде е самият хост на самата база данни. Тук няма как да сме виновни в каквото и да е било, следователно пак опираме до първото написано нещо от нас - излишно споменаване на нещата с това, от какво си недоволен и недоразбрал.


Типично по български !

Аватар
TheRedShoko
Извън линия
Модератор
Модератор
Мнения: 1016
Регистриран на: 06 Окт 2016, 07:42
Местоположение: Бургас
Се отблагодари: 5 пъти
Получена благодарност: 84 пъти

Засичане дали е края на мапа или човека е излязъл

Мнение от TheRedShoko » 07 Фев 2018, 16:18

plugin_end се извиква при край на мапа. Ако не то върши работа - hook map change amxx в google и може да откриеш достатъчно много начини, по които да го прихванеш края на мапа. И не виждам причина, която да те накара да не обновяваш базата данни в края на мапа. Това означава, че ако има някакви промени по данните няма да бъдат запазени. Веднага ти давам пример с точките на плъгин за shop - ако последния рунд получиш някакви точки те няма да се запазят.

Аватар
sianbg
Извън линия
Потребител
Потребител
Мнения: 232
Регистриран на: 13 Ное 2017, 12:18
Получена благодарност: 1 път
Обратна връзка:

Засичане дали е края на мапа или човека е излязъл

Мнение от sianbg » 07 Фев 2018, 17:02

Изразил съм си собственото мнение с цел подобряване на описанието и за какво точно ми трябва кода. Може би съм бил емоционален в коментара си към вас, но не мисля, че нарушавам правилата. Заглавието е правилно, описал съм всичко и не съм обидил никого. Нито съм казал, че не струвате или да не си вземат хостинг от там. Безспорно Вие сте най-добрата компания за cs сървъри в България.

viewtopic.php?f=37&t=2355&p=12359&hilit=4vendeta#p12359 - ето това е вашата тема. Като имате 2 домейна ги сложете и двата ... Вашият пример: Идвам за шапка ама няма шапка. Ама бай Пенчо ми вика аз нямам ама ей там има. Типично по български както казвате вие.

Нека изясним нещата. Уж една фирма ама не мога да си прехвърля баланса или направо да си наема vps. Не ставало така. Съгласен съм може би някаква документация или пък нещо друго. Вкарах си парите чрез paypal и ви питах дали може да ми ги пратите обратно като таксите са за моя сметка. Дори не ми отговорихте. Прочетох правилата и условията за ползване и прочетох следното
При поръчката на дадена услуга, Вие се съгласявате, че при заплащането на дадената и избрана от вас услуга нужната сума няма как да бъде върната на заплатилият услугата. Ние си запазваме правото да не връщаме по никакъв начин суми поради една или друга причина.
Ако трябва да бъдем честни не очаквам и не искам вече да ми връщате парите. Просто аз не съм наел услуга, а имам баланс в акаунта. Така, че това не мисля, че важи за моя случай. Ваше е правото да не ми връщате парите. Не съм за 5лв както и вие. Ще си наема от вас сървър. Ето една положителна реклама. Дори и да ви плюя ще си наема от вас сървър, защото както казах Вие сте най-добрите в България.


Относно техническото ви обяснение. Заявките ще са същите, но времето ще е различно. Едно е да изпълняваш локално към mysql, друго е да пращаш отдалечена заявка. Единственият вариант е да са в един дата център. Защото 32 заявки на localhost ще ги изпълня за същото време както 1 с отдалечен mysql. Просто не се хабете да ме убеждавате, че нямало разлика ... От достатъчно година съм в тази сфера и съм достатъчно наясно точно с mysql. Аз пак ще си постигна скоростта, която искам, но ще ми отнеме време. Просто за 1 сървър в който всички данни ще са mysql... Технически нямам никакъв проблем да си направя нещата така.


Вижте, ако имаше линк, че vps се закупува от друг сайт нямаше да се допусне това недоразумение. Просто исках да тествам vps на вашата компания. Да видя как работи и всичко. Можеше да имам късмет и да попадна на ядро на линукса както при вашите cs сървъри. Все пак с това се занимавате и се надявах vps-ти да са също за това устроени. Явно не е така, но един линк щеше да спести всичко това. Съжалявам, че не питам за щяло и не щяло както 90% от потребители ви. Свикнал съм да се оправям сам,но ... За следващия път ще знам.


@TheRedShoko Благодаря,но когато картата се сменя виждам, че dissconect-ва и после reconnect. Следователно всеки играч вика тази функция при смяна на картата. Не ми върши работа, ако сложа запазването в базата данни само в края на картата. Така хората излезли преди това няма да бъдат запазени. Трябва ми да правя проверка при dissconect на клиент дали е от края на картата или той е излязъл. Ако е края на картата няма да прави нищо и функцията за края на картата ще се справи. Мога да си сложа една променлива и да я сетна при смяна на картата. Въпроса по скоро ми е дали евента за край на картата ще бъде винаги извикван преди първият клиент дори да се е reconnect-нал.

Добавено преди 7 минути 33 секунди:

Код за потвърждение: Избери целия код

#include < amxmodx >

new g_endMap

public plugin_init( )
{
    register_plugin( "S", "0.1", "S" )
    
     
   g_endMap = false
}


public client_dissconected( )
{
    if(!g_endMap) {
	//save user data
    }
}

public plugin_end( )
{
     g_endMap = true
}
Това ще работи ли ? Гарантирано ли е, че plugin_end ще се извика първа при смяна на картата ?

Аватар
EMOTO2.COM
Извън линия
Потребител
Потребител
Мнения: 344
Регистриран на: 11 Яну 2018, 17:02
Се отблагодари: 26 пъти
Получена благодарност: 31 пъти
Обратна връзка:

Засичане дали е края на мапа или човека е излязъл

Мнение от EMOTO2.COM » 07 Фев 2018, 17:12

sianbg написа: 07 Фев 2018, 13:35 Значи заради тях в момента ми се налага сървъра да е някъде, а mysql да е на друг сървър...
А вариянта да хостваш mysql базите при това "някъде" защо го отписваш? По твоята логика ако направиш това изобщо няма да ти е нужно да оптимизирваш каквото и да е било защото и двете неща ще са пуснати от 1 хост.
Присъедини се към най-доброто място за игра!
https://emoto2.com/

Аватар
sianbg
Извън линия
Потребител
Потребител
Мнения: 232
Регистриран на: 13 Ное 2017, 12:18
Получена благодарност: 1 път
Обратна връзка:

Засичане дали е края на мапа или човека е излязъл

Мнение от sianbg » 07 Фев 2018, 18:00

Съжалявам, но когато не можеш да помогнеш защо пишеш ? Обичам да си правя нещата точно и да съм 100% сигурен, че ще работи. Представи си, че заявката за ъпдейт може да се забави, а имам друга селект заявка в друг плъгин. Може би не е удачен пример, но ако пък и си реализирам оптимизацията шанса клиент да не бъде записан е 0.1%, а ако е при localhost шанса да уцели точната милисекунда сиг е 0.00001%. Просто обмислям нещата на различно ниво. И не става въпрос само за mysql, а rcon софтуера, който се изпълнява от уеб сървъра ? Там още по-голямо забавяне. Вместо да думна заявка на локалхост, пак ще трябва отдалечено. Там нещата още по зле. Там протокола е UDP където не се чака отговор и не се знае дали е получено или не. Какво става, ако заявката не се получи ? Мисля, че, ако работи на localhost няма как да имаш загубен пакет. Пускам 2 заявки една след друга и коя ще се получи първа ? За части от секундата може да се получи бъг, който ще търся 1 месец. Моля Ви спрете да ми обяснявате технически неща с които съм наясно. Не съм наясно с pawn и питам за него.

Аватар
EMOTO2.COM
Извън линия
Потребител
Потребител
Мнения: 344
Регистриран на: 11 Яну 2018, 17:02
Се отблагодари: 26 пъти
Получена благодарност: 31 пъти
Обратна връзка:

Засичане дали е края на мапа или човека е излязъл

Мнение от EMOTO2.COM » 07 Фев 2018, 21:11

Аз мисля, че много точно и ясно съм ти написъл какво можеш да направиш за да си "оптимизираш" самите заявки при положение, че в момента сървъра ти е на един хост а базите на други. Незнам защо пишеш, че немога да ти помогна като съм ти написал вариянт който би ти помогнал с оптимизирването? Започвам да си мисля, че точно ти не си разбрал какво съм искал да ти кажа в същност! Реално погледнато ако направиш каквато и да е оптимизация на плугините си, винаги заявките ще бъдат изпълнявани по-бързо независимо дали са локал или отдалечено, но в случая който ти написъх аз колкото и да си оптимизирваш плугините ако сървъра и базата са на различни хостове няма да постигнеш тази бързина която ще бъде при локала...
Присъедини се към най-доброто място за игра!
https://emoto2.com/

Аватар
TheRedShoko
Извън линия
Модератор
Модератор
Мнения: 1016
Регистриран на: 06 Окт 2016, 07:42
Местоположение: Бургас
Се отблагодари: 5 пъти
Получена благодарност: 84 пъти

Засичане дали е края на мапа или човека е излязъл

Мнение от TheRedShoko » 07 Фев 2018, 21:38

Идеята ми беше да го направиш с променлива, но не мога да гарантирам кога ще се изпълни. Не пише нищо в документацията.

Добавено преди 6 минути 3 секунди:
Прегледах AMXX-a отдолу и се оказа, че plugin_end се вика след извикването на client_disconnected за всички играчи в сървъра => не върши работа. Разгледай останалите варианти за край на рунда. Не са малко. Може да се направи с task, с event 30, с fakemeta, rehlds и редица други.

Аватар
sianbg
Извън линия
Потребител
Потребител
Мнения: 232
Регистриран на: 13 Ное 2017, 12:18
Получена благодарност: 1 път
Обратна връзка:

Засичане дали е края на мапа или човека е излязъл

Мнение от sianbg » 08 Фев 2018, 01:45

Благодаря много. Мисля, че ще ползвам event 30 и админите няма да имат право да сменят картата. Понеже прочетох, че тогава не се извиквало.

@EMOTO2.COM разбрах те. Просто искам да ти кажа, че разликата ще е в пъти. Направих си труда да тествам всичко, което казах. Ето кода с който тествах

Код за потвърждение: Избери целия код

<?php

if (isset($_GET['multi'])) {
            $msc = microtime(true);
            for ($i = 0; $i < 32; $i++) {
                $name = "name-" . $i;
                $rank = "rank-" . $i;

                $stmt = $mysql->prepare("INSERT INTO `s1_players` (`player_id`, `player_level`, `player_xp`, `rank`, `online`) VALUES (?, ?, ?, ?, '-1') ON DUPLICATE KEY UPDATE online=VALUES(online), player_level=VALUES(player_level), player_xp=VALUES(player_xp), rank=VALUES(rank)");
                $stmt->bind_param('siis', $name, $i, $i, $rank);
                $stmt->execute();
                $stmt->close();
            }
            $msc = microtime(true) - $msc;
            echo $msc . ' s'; // in seconds
            echo ($msc * 1000) . ' ms'; // in millseconds
        }

        if (isset($_GET['one'])) {
            $q = "INSERT INTO `s1_players` (`player_id`, `player_level`, `player_xp`, `rank`, `online`) VALUES ";
            $msc = microtime(true);
            for ($i = 0; $i < 32; $i++) {

                $name = "name-" . $i;
                $rank = "rank-" . $i;
                $q .= "('$name', '$i', '$i', '$rank', '-1'),";
            }
            $q = rtrim($q, ",");
            $q .= " ON DUPLICATE KEY UPDATE online=VALUES(online), player_level=VALUES(player_level), player_xp=VALUES(player_xp), rank=VALUES(rank)";
            $stmt = $mysql->prepare($q);
            $stmt->execute();
            $stmt->close();
            $msc = microtime(true) - $msc;
            echo $msc . ' s'; // in seconds
            echo ($msc * 1000) . ' ms'; // in millseconds
        }
    
    
Ето резултатите изпълнени локално на mysql
32 заявки: средно 3ms
1 заявка с ъпдейт на 32 човека: 0.452ms

Ето и резултатите ако базата е отдалечена:
32 заявки: средно 800ms
1 заявка с ъпдейт на 32 човека: 24ms


Мисля, че резултата е доста приличен. Виж разликата винаги е в пъти. На локално няма да усетиш абсолютно никаква разлика. Ето затова казвам, че сега ми се налага, а иначе не бих. Просто исках да си затвърдя думите с доказателства.

Аватар
Nikolow
Извън линия
AMXX Скриптър
AMXX Скриптър
Мнения: 196
Регистриран на: 27 Ное 2016, 13:02
Местоположение: Варна
Се отблагодари: 7 пъти
Получена благодарност: 79 пъти
Обратна връзка:

Засичане дали е края на мапа или човека е излязъл

Мнение от Nikolow » 08 Фев 2018, 17:24

Друг е въпроса, че ако реално искаш да постигнеш добро качество ще си разпределиш услугите посредством някаква логика. Няма как да изискваш от хоста, който примерно има над 100 сървъра на нод, да ти сложи и база данни и допълнителни "екстри". Предполагам знаеш, че ще стане омешана работа. Идеята на такива гейм хостинг компании са простотата. Не случайно се търси това, а и самите компании градят услугите си на този принцип. Ако реално желаеш да постигнеш нещо, което да е организирано по твоята собствена логика (която изложи по-горе за бързината), ще си организираш услугите както трябва. Вариантите са наистина много. В момента се сещам за няколко като да организираш всичко на една машина и да ползваш въпросният локален хост, където ти е пуснат сървъра. Ако говорим за още по-сериозна "работа", ще си разделиш услугите на различни машини -> WEB Server на една машина, която се занимава изцяло само с това, CS сървъри на друга машина, която е оптимизирана и работи само за това и прочие..., а връзките между тях може да осъществиш (ако са физически близо) посредством подходящ кабел, за по-бърза връзка (каквато ти искаш да постигнеш).
Пък и е друг въпроса дали реално при хостинг компанията (която всички знаем), която предлага въпросната база данни, дали е на същата машина. Реално могат да ти дадат данни за база данни, която изобщо не е на същият хост. Пак увисваме така, нали ? По твоята идея трябва базата данни да е на същият хост, на който е и самият сървър и да се получи достъпването до така нареченият локален хост, с цел бързодействие.
Tired and retired...

Публикувай отговор
  • Подобни теми
    Отговори
    Преглеждания
     Последно мнение

Обратно към “Помощ в скриптирането”

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 7 госта