Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

История благодарностей участнику DirtyMatt ::: Спасибо сказали: 32
Дата поста: В теме: За сообщение: Спасибо сказали:
30.5.2016, 9:13 ReHLDS, Reverse-engineered HLDS
Jlx7,
Cкрытый текст
о прет бро

Так mmtimer в 2016 году уже неактуален
Jlx7
26.12.2015, 19:08 boxhost.biz
HTML 5 дизайн слизан с интернета (Вроде называется Host Box HTML5 Langing Page Template).
С названием своей "конторы" вы долго не думали, наверное))0)
Alloha
9.10.2015, 10:57 Обсуждение игровых хостингов
FLOPS вообще не игровой хостинг.
И, прочитайте договор об оказании услуг.
ssx
8.8.2015, 19:19 Gold Style CS:Bans
Cкрытый текст
[attachment=35111:Снимок.PNG][attachment=35112:Снимок2.PNG][attachme
nt=35113:Сни
мок3.PNG][attachment=35114:Снимок4.PNG]

HoHoL, ThePhoenix, tribbiani
6.8.2015, 17:00 CS:Bans - замена AmxBans
leshiy,
protected/views/bans/view.php
Код
<?php
/**
* Вьюшка просмотра деталей бана
*/

/**
* @author Craft-Soft Team
* @package CS:Bans
* @version 1.0 beta
* @copyright (C)2013 Craft-Soft.ru.  Все права защищены.
* @link http://craft-soft.ru/
* @license http://creativecommons.org/licenses/by-nc-sa/4.0/deed.ru  «Attribution-NonCommercial-ShareAlike»
*/

$page = 'Банлист';
$this->pageTitle = Yii::app()->name . ' - ' . $page . ' - Детали бана ' . $model->player_nick;
$this->breadcrumbs=array(
    $page=>array('index'),
    $model->player_nick,
);
if($geo) {
    Yii::app()->clientScript->registerScriptFile('//api-maps.yandex.ru/2.0/?load=package.full&lang=ru-RU',CClientScript::POS_END);
    Yii::app()->clientScript->registerScript('yandexmap', "
        ymaps.ready(inityamaps);
        function inityamaps () {
            var myMap = new ymaps.Map('map', {center: [{$geo['lat']}, {$geo['lng']}], zoom: 10});
        }
    ",CClientScript::POS_END);
}

if($model->ban_length == '-1') {
    $length = 'Разбанен';
} else {
    $length = Prefs::date2word($model->ban_length);
    if($model->unbanned) {
        $length .= '(Истек)';
    } elseif(Yii::app()->hasModule('billing')) {
        $length .= CHtml::link(
            'Купить разбан',
            array('/billing/unban', 'id' => $model->primaryKey),
            array('class' => 'btn btn-mini btn-success pull-right')
        );
    }
}
?>

<h2>Подробности бана <i><?php echo CHtml::encode($model->player_nick); ?></i></h2>
<div style="float: right">
    <?php
    if(Webadmins::checkAccess('bans_edit', $model->admin_nick)):
    echo CHtml::link(
        '<i class="icon-edit"></i>',
        $this->createUrl('/bans/update', array('id' => $model->bid)),
        array(
            'rel' => 'tooltip',
            'title' => 'Редактировать',
        )
    );
    endif;
    ?>
     
    <?php
    if(Webadmins::checkAccess('bans_unban', $model->admin_nick) && !$model->unbanned):
    echo CHtml::ajaxLink(
        '<i class="icon-remove"></i>',
        $this->createUrl('/bans/unban', array('id' => $model->bid)),
        array(
            'type' => 'post',
            'beforeSend' => 'function() {if(!confirm("Разбанить игрока '.$model->player_nick.'?")) {return false;} }',
            'success' => 'function(data) {alert(data); document.location.href="'.$this->createUrl('/bans/index').'";}'
        ),
        array(
            'rel' => 'tooltip',
            'title' => 'Разбанить',
        )
    );
    endif;
    ?>
     
    <?php
    if(Webadmins::checkAccess('bans_delete', $model->admin_nick)):
    echo CHtml::ajaxLink(
        '<i class="icon-trash"></i>',
        $this->createUrl('/bans/delete', array('id' => $model->bid, 'ajax' => 1)),
        array(
            'type' => 'post',
            'beforeSend' => 'function() {if(!confirm("Удалить бан?")) {return false;} }',
            'success' => 'function() {alert("Бан удален"); document.location.href="'.$this->createUrl('/bans/index').'"}'
        ),
        array(
            'rel' => 'tooltip',
            'title' => 'Удалить бан',
        )
    );
    endif;
    ?>
</div>

<?php $this->widget('bootstrap.widgets.TbDetailView', array(
    'data'=>$model,
    'type' => array('condensed', 'bordered'),
    'htmlOptions' => array('style'=>'text-align: left'),
    'attributes'=>array(
        array(
            'name' => 'player_ip',
            'type' => 'raw',
            'value' => $geo['city'] ? CHtml::link(
                    $model->player_ip,
                    '#',
                    array(
                        'onclick' => '$("#modal-map").modal("show");',
                        'rel' => 'tooltip',
                        'title' => 'Подробности IP адреса'
                    )
                ) : $model->player_ip,
            'visible' => ($ipaccess)
        ),
        array(
            'name' => 'player_id',
            'type' => 'raw',
            'value' => Prefs::steam_convert($model->player_id, TRUE)
                ? CHtml::link($model->player_id, 'http://steamcommunity.com/profiles/'
                        . Prefs::steam_convert($model->player_id), array('target' => '_blank'))
                : $model->player_id,
        ),
        'player_nick',
        'adminName:html',
        'ban_reason',
        array(
            'name' => 'ban_type',
            'value' => Prefs::getBanType($model->ban_type)
        ),
        array(
            'name' => 'ban_created',
            'value' => date('d.m.Y - H:i:s', $model->ban_created),
        ),
        array(
            'name' => 'ban_length',
            'type' => 'raw',
            'value' => $length
        ),
        'expiredTime',
        'server_name',
        'ban_kicks',
    ),
)); ?>

<hr>
<p class="text-success">
    <i class="icon-calendar"></i>
    История банов
</p>
<?php
$this->widget('bootstrap.widgets.TbGridView',array(
    'type' => 'bordered stripped',
    'id'=>'ban-history-grid',
    'dataProvider'=>$history,
    'enableSorting' => FALSE,
    'template' => '{items} {pager}',
    'columns'=>array(
        array(
            'name' => 'player_nick',
            'type' => 'html',
            'value' => 'Chtml::link($data->player_nick, Yii::app()->createUrl("/bans/view", array("id" => $data->bid)))'
        ),
        array(
            'name' => 'player_id',
            'type' => 'raw',
            'value' => 'Prefs::steam_convert($data->player_id, TRUE)
                ? CHtml::link($data->player_id, "http://steamcommunity.com/profiles/"
                        . Prefs::steam_convert($data->player_id), array("target" => "_blank"))
                : $data->player_id',
        ),
        array(
            'name' => 'player_ip',
            'value' => '$data->player_ip',
            'visible' => $ipaccess
        ),
        array(
            'name' => 'type',
            'value' => '$data->type'
        ),        
        array(
            'name' => 'ban_created',
            'value' => 'date("d.m.Y - H:i:s", $data->ban_created)',
        ),
        'ban_reason',
        
        array(
            'name' => 'ban_length',
            'type' => 'raw',
            'value' =>
                '$data->ban_length == "-1"
                    ?
                "Разбанен"
                    :
                Prefs::date2word($data->ban_length) .
                ($data->expired == 1 ? " (истек)" : "")'
        ),
    ),
));
?>
<hr>
<p class="text-success">
    <i class="icon-comment"></i>
    Комментарии
</p>

<?php
$this->widget('bootstrap.widgets.TbGridView', array(
    'type'=>'striped bordered condensed',
    'id'=>'comments-grid',
    'template' => '{items}',
    'dataProvider'=> $c,
    'enableSorting' => FALSE,
    'rowHtmlOptionsExpression' => 'array(
        "id" => "$data->id"
    )',
    'columns'=>array(

        array(
            'header' => 'Дата',
            'value'=>'date("d.m.Y", $data->date)',
            'htmlOptions' => array(
                'style' => 'width:80px'
            )
        ),

        array(
            'header' => 'Комментарий',
            'value'=>'$data->comment',
        ),

        'name',
        array(
            'name' => 'addr',
            'value' => '$data->addr',
            'htmlOptions' => array(
                'style' => 'width:100px'
            ),
            'visible' => $ipaccess
        ),
        array(
            'name' => 'email',
            'value' => '$data->email',
            'htmlOptions' => array(
                'style' => 'width:200px'
            )
        ),
        //'email',

        array(
            'class'=>'bootstrap.widgets.TbButtonColumn',
            'header' => 'Действия',
            'template'=>'{update} {delete}',
            'buttons'=>array
            (
                'delete' => array
                (
                    'label'=>'Удалить',
                    'icon'=>'trash',
                    'url'=>'Yii::app()->createUrl("/comments/delete", array("id"=>$data->id))',
                ),
                'update' => array
                (
                    'label'=>'Редактировать',
                    'icon'=>'pencil',
                    'url'=>'Yii::app()->createUrl("/comments/update", array("id"=>$data->id, "bid" => $data->bid))',
                ),

            ),
            'htmlOptions'=>array(
                'style'=>'width: 80px; text-align:center',
            ),
            'visible' => Webadmins::checkAccess('bans_edit', $model->admin_nick)
        )

    ),
));

if(Yii::app()->config->use_comment && (!Yii::app()->user->isGuest || Yii::app()->config->comment_all)):?>
    <div style="width: auto; margin: 0 auto">
        <?php $this->widget('bootstrap.widgets.TbButton', array(
            'label'=>'Добавить комментарий',
            'buttonType' => 'button',
            'size'=>'small', // null, 'large', 'small' or 'mini'
            'htmlOptions' => array('onclick' => '$("#addcomment").slideToggle("slow");'),
        )); ?>
    </div>
    <div style="width: 100%; display: none" id="addcomment">
        <?php echo CHtml::form('','post'); ?>
        <?php echo CHtml::errorSummary($comments); ?>
        <table class="table table-bordered">
            <tr>
                <td class="span4">
                    <?php echo CHtml::activeLabel(
                            $comments,
                            'email'
                        ); ?>
                </td>
                <td class="span8">
                    <?php
                    echo CHtml::activeEmailField(
                            $comments,
                            'email',
                            !Yii::app()->user->isGuest ?
                            array(
                                'value' => Yii::app()->user->email,
                                'readonly' => 'readonly'
                            )
                            :
                            ''
                        )
                    ?>
                </td>
            </tr>
            <tr>
                <td>
                    <?php echo CHtml::activeLabel($comments, 'name'); ?>
                </td>
                <td>
                    <?php
                    echo CHtml::activeTextField(
                            $comments,
                            'name',
                            !Yii::app()->user->isGuest ?
                            array(
                                'value' => Yii::app()->user->name,
                                'readonly' => 'readonly'
                            )
                            :
                            ''
                        )
                    ?>
                </td>
            </tr>
            <tr>
                <td>
                    <?php echo CHtml::activeLabel($comments, 'comment'); ?>
                </td>
                <td>
                    <?php
                    echo CHtml::activeTextArea($comments, 'comment')
                    ?>
                </td>
            </tr>
            <?php if(CCaptcha::checkRequirements() && Yii::app()->user->isGuest):?>
            <tr>
                <td>
                    <?php echo CHtml::activeLabelEx($comments, 'verifyCode')?>
                </td>
                <td>
                    <?php echo CHtml::activeTextField($comments, 'verifyCode')?>
                    <?php $this->widget('CCaptcha')?>
                </td>
            </tr>
            <?php endif?>
            <tr>
                <td colspan="2">
                    <?php echo CHtml::submitButton($label = 'Сохранить'); ?>
                </td>
            </tr>
        </table>
        <?php echo CHtml::endForm(); ?>
    </div>
<?php endif?>
<hr />
<p class="text-success">
    <i class="icon-folder-open"></i>
    Файлы
</p>

<?php
$this->widget('bootstrap.widgets.TbGridView', array(
    'type'=>'striped bordered condensed',
    'id'=>'files-grid',
    'template' => '{items}',
    'dataProvider'=>$f,
    'enableSorting' => FALSE,
    'columns'=>array(

        array(
            'header' => 'Дата',
            'value'=>'date("d.m.Y", $data->upload_time)',
        ),

        'demo_real',

        array(
            'header' => 'Размер',
            'value'=>'Prefs::formatfilesize($data->file_size)',
        ),

        array(
            'header' => 'Комментарий',
            'value'=>'$data->comment',
        ),

        'name',
        array(
            'name' => 'addr',
            'value' => '$data->addr',
            'visible' => $ipaccess
        ),
        'down_count',

        array(
            'class'=>'bootstrap.widgets.TbButtonColumn',
            'header' => 'Действия',
            'template'=>'{download} {update} {delete}',
            'buttons'=>array
            (
                'download' => array
                (
                    'label'=>'Скачать',
                    'icon'=>'download-alt',
                    'url'=>'Yii::app()->createUrl("/files/download", array("id"=>$data->id))',
                ),
                'update' => array
                (
                    'label'=>'Редактировать',
                    'icon'=>'pencil',
                    'url'=>'Yii::app()->createUrl("/files/update", array("id"=>$data->id))',
                    'visible' => 'Webadmins::checkAccess(\'bans_edit\', $data->name)'
                ),
                'delete' => array
                (
                    'label'=>'Удалить',
                    'icon'=>'trash',
                    'url'=>'Yii::app()->createUrl("/files/delete", array("id"=>$data->id, "YII_CSRF_TOKEN" => Yii::app()->request->csrfToken))',
                    'visible' => 'Webadmins::checkAccess(\'bans_edit\', $data->name)'
                ),
            ),
            'htmlOptions'=>array(
                'style'=>'width: 120px; text-align:center',
            ),
        )

    ),
));
?>
<?php if(Yii::app()->config->use_demo && (!Yii::app()->user->isGuest || Yii::app()->config->demo_all)):?>
    <div style="width: auto; margin: 0 auto">
        <?php $this->widget('bootstrap.widgets.TbButton', array(
            'label'=>'Добавить файл',
            'buttonType' => 'button',
            'size'=>'small', // null, 'large', 'small' or 'mini'
            'htmlOptions' => array('onclick' => '$(".addfile").slideToggle("slow");'),
        )); ?>
    </div>
    <div style="width: 100%; display: none; margin: 0 auto" class="addfile">
        <?php echo CHtml::form('','post', array('id' => 'addfile-form', 'enctype'=>'multipart/form-data')); ?>
        <?php echo CHtml::errorSummary($files); ?>
        <table class="table table-bordered">
            <tr>
                <td class="span4">
                    <?php echo CHtml::activeLabel(
                            $files,
                            'email'
                        ); ?>
                </td>
                <td class="span8">
                    <?php
                    echo CHtml::activeEmailField(
                            $files,
                            'email',
                            !Yii::app()->user->isGuest ?
                            array(
                                'value' => Yii::app()->user->email,
                                'readonly' => 'readonly'
                            )
                            :
                            ''
                        )
                    ?>
                </td>
            </tr>
            <tr>
                <td>
                    <?php echo CHtml::activeLabel($files, 'name'); ?>
                </td>
                <td>
                    <?php
                    echo CHtml::activeTextField(
                            $files,
                            'name',
                            !Yii::app()->user->isGuest ?
                            array(
                                'value' => Yii::app()->user->name,
                                'readonly' => 'readonly'
                            )
                            :
                            ''
                        )
                    ?>
                </td>
            </tr>
            <tr>
                <td>
                    <?php echo CHtml::activeLabel($files, 'demo_real'); ?>
                </td>
                <td>
                    <?php echo CHtml::activeFileField($files, 'demo_real') ?>
                </td>
            </tr>
            <tr>
                <td>
                    <?php echo CHtml::activeLabel($files, 'comment'); ?>
                </td>
                <td>
                    <?php echo CHtml::activeTextArea($files, 'comment'); ?>
                </td>
            </tr>
            <?php if(CCaptcha::checkRequirements() && Yii::app()->user->isGuest):?>
            <tr>
                <td>
                    <?php echo CHtml::activeLabel($files, 'verifyCode'); ?>
                </td>
                <td>
                    <?php echo CHtml::activeTextField($files, 'verifyCode') ?>
                    <?php $this->widget('CCaptcha')?>
                </td>
            </tr>
            <?php endif?>
            <tr>
                <td colspan="2">
                    <?php echo CHtml::submitButton('Сохранить'); ?>
                </td>
            </tr>
        </table>
        <?php echo CHtml::endForm(); ?>
    </div>
<?php endif;?>
<?php if($ipaccess): ?>

<?php $this->beginWidget('bootstrap.widgets.TbModal',
    array(
        'id'=>'modal-map',
        'htmlOptions'=> array('style'=>' width:860px; margin-left: -430px;height: 600px'),
)); ?>

<div class="modal-header">
    <a class="close" data-dismiss="modal">&times;</a>
    <h3>Информация об IP "<?php echo $model->player_ip ?>"</h3>
</div>
<div class="modal-body" style="min-height: 460px">
    <div id="map" style="width:800px; height:400px; marg: 0 auto"></div>
    <div style="top: -30px">
        <b>Страна: </b>
        <?php echo $geo['country'] ?>
        <br>
        <b>Регион: </b>
        <?php echo $geo['region'] ?>
        <br>
        <b>Город: </b>
        <?php echo $geo['city'] ?>
    </div>
</div>
<div class="modal-footer">
    <?php $this->widget('bootstrap.widgets.TbButton', array(
        'label'=>'Закрыть',
        'url'=>'#',
        'htmlOptions'=>array('data-dismiss'=>'modal'),
    )); ?>
</div>
<?php $this->endWidget(); ?>
<?php endif; ?>
leshiy
3.8.2015, 16:42 Проблема с доменом
Цитата(Nebo @ 3.8.2015, 17:35) *
DirtyMatt, Ну тогда придется идти в паспортный стол :)
Но я что то очкую идти туда, поймут ли они меня там. А может вообще закроют, за ложные данные :D ы

Не будут они ничего предпринимать. Просто объяснишь им ситуацию, мол специально ввел левые данные, а сейчас изменить хочу на свои действительные. Берешь справку, что твои данные - только твои, с печатью.

И еще, ты в панели регистратора хотя бы сменил данные?
Nebo
3.8.2015, 16:32 Проблема с доменом
Цитата(Nebo @ 3.8.2015, 14:33) *
andruha, да тут, вообщем какая проблема то.
Крч, когда я регал домен, указал не свои данные, левые, Фамилия, Паспорт и т.п. Потом, после регистрации пришло письмо, что нужно в течение 3х дней предоставить данные, копия паспорта. Ну я вообщем написал им, как есть, что указал не верные данные, что делать, что прислать и бла бла бла.
Ответили, что нужна копия паспорта и написать оф.письмо и отправить им на почту (электронную), я так и сделал.
След, что они ответили, это:

получается мне нужно топать в паспортный стол и объяснять им данную ситуацию. И вообще, че то я очку туда идти, заберут нахер :)

magis1337, уже не актульно, выше же написал. Что все работает, теперь по серьезнее проблемка :)
_______
или можно вообще забить на эту ерунду и дальше пользоватся?

Домен перестанут делегировать. Будут требовать твои паспортные данные. Если не предоставить - заблокируют.
У меня недавно так было с REGRU...
Nebo
26.7.2015, 17:07 [Продам] Плагины Скальпеля
Ломал я их и базу))))0)
Плагины - дрянь.
Да и модуль для обхода в паблике валяется ;)
Tet
8.4.2015, 17:42 [Поиск] Плагин выдает флаг игрокам в ночное время!
Цитата(Legend21 @ 8.4.2015, 16:21) *
Вы с таксами не шутите - это не игрушка derisive.gif

Скрытый текст
Но таксы же милые ;c
Andrei
3.4.2015, 15:20 [Графика] Создание фотографий и картинок
Заказал пару работ на тему CS.
[attachment=32343:photo_20...18_13_30.jpg][attachment=32344:photo_20...18_13_42.
jpg]
Понравилось, все норм :)
Bloo, Jlx7
1.4.2015, 19:39 Decoder
Цитата(sergey787 @ 1.4.2015, 19:56) *
мне желательно самому это сделать, поделись софтом)

Дурачка нашел? :D
Скрытый текст

[attachment=32311:__________.png]
DDoS
1.4.2015, 17:50 Посоветуйте игру, хоррор (кооп)
Pineview Drive
AndrewZ
1.4.2015, 17:47 Функция eval
Цитата
Not possible because amxx plugins are compiled to virtual bytecode, which are executed at runtime. It is not an interpreted language.

Скрытый текст
https://forums.alliedmods.net/showpost.php?p=798284&postcount=9
OverGame
31.3.2015, 16:57 Скрипт переноса админов из БД в users.ini
Скрытый текст
Код
<?php

@require_once 'inc/db.config.inc.php';


try {
    $db = new PDO('mysql:host=' . $config->db_host . ';dbname=' . $config->db_db, $config->db_user, $config->db_pass);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $db->exec("set names utf8");

    $dbs = $db->query('SELECT * FROM amx_amxadmins');
    $dbs->setFetchMode(PDO::FETCH_OBJ);

// Сохраняем результат в файл
    while ($row = $dbs->fetch()) {
        if ($row->flags == "ce")
            $cfg .= '"' . $row->steamid . '" ';

        else if ($row->flags == "ca")
            $cfg .= '"' . $row->nickname . '" ';

        else if ($row->flags == "a")
            $cfg .= '"' . $row->nickname . '" ';

        $cfg .= '"' . $row->password . '" ';
        $cfg .= '"' . $row->access . '" ';
        $cfg .= '"' . $row->flags . '" ';
        $cfg .= '; SteamID: ' . $row->steamid . ' ';
        $cfg .= 'Nickname: ' . $row->nickname . ' ' . PHP_EOL;


        $cfgFile = 'users.ini';

        if (!file_put_contents($cfgFile, $cfg)) {
            return 'Не удалось сохранить конфиг.';
        }
    }
} catch (PDOException $e) {
    echo "Мээн, у нас проблема!!!";
    file_put_contents('rrors.txt', $e->getMessage(), FILE_APPEND);
}
$db = null;
?>

Проверь ;)
steelzzz
31.3.2015, 16:45 Скрипт переноса админов из БД в users.ini
Цитата(steelzzz @ 31.3.2015, 16:40) *
Огромное спасибо! Прописывать админку как обычно или как? Просто у меня создались такие строчки

""" "e567f509f1728a705f95bad7fe3b3aaf" "abcdefghijklmnopqrstu" "a" ; SteamID: Player Nickname: Player

Прописывать как обычно. Для хэширования пароля можете использовать онлайн сервисы.

Попробуйте такой вариант...
Скрытый текст
Код
<?php

@require_once 'inc/db.config.inc.php';


try {
    $db = new PDO('mysql:host=' . $config->db_host . ';dbname=' . $config->db_db, $config->db_user, $config->db_pass);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $db->exec("set names utf8");

    $dbs = $db->query('SELECT * FROM amx_amxadmins');
    $dbs->setFetchMode(PDO::FETCH_OBJ);

// Сохраняем результат в файл
    while ($row = $dbs->fetch()) {
        if ($row->flags == "ce")
            $cfg .= '"' . $row->steamid . '" ';

        else if ($row->flags == "ca")
            $cfg .= '"' . $row->username . '" ';

        else if ($row->flags == "a")
            $cfg .= '"' . $row->username . '" ';

        $cfg .= '"' . $row->password . '" ';
        $cfg .= '"' . $row->access . '" ';
        $cfg .= '"' . $row->flags . '" ';
        $cfg .= '; SteamID: ' . $row->steamid . ' ';
        $cfg .= 'Nickname: ' . $row->nickname . ' ' . PHP_EOL;


        $cfgFile = 'users.ini';

        if (!file_put_contents($cfgFile, $cfg)) {
            return 'Не удалось сохранить конфиг.';
        }
    }
} catch (PDOException $e) {
    echo "Мээн, у нас проблема!!!";
    file_put_contents('rrors.txt', $e->getMessage(), FILE_APPEND);
}
$db = null;
?>
steelzzz
31.3.2015, 16:03 Скрипт переноса админов из БД в users.ini
admin.sma
Код:
/* AMX Mod X script.
* Admin Base Plugin
*
* by the AMX Mod X Development Team
* originally developed by OLO
*
* This file is part of AMX Mod X.
*
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at
* your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* In addition, as a special exception, the author gives permission to
* link the code of this program with the Half-Life Game Engine ("HL
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
* L.L.C ("Valve"). You must obey the GNU General Public License in all
* respects for all of the code used other than the HL Engine and MODs
* from Valve. If you modify this file, you may extend this exception
* to your version of the file, but you are not obligated to do so. If
* you do not wish to do so, delete this exception statement from your
* version.
*/

// Uncomment for SQL version
// #define USING_SQL

#include <amxmodx>
#include <amxmisc>
#if defined USING_SQL
#include <sqlx>
#endif

//new Vector:AdminList;

new AdminCount;

new PLUGINNAME[] = "AMX Mod X"

#define ADMIN_LOOKUP (1<<0)
#define ADMIN_NORMAL (1<<1)
#define ADMIN_STEAM (1<<2)
#define ADMIN_IPADDR (1<<3)
#define ADMIN_NAME (1<<4)

new g_cmdLoopback[16]
new bool:g_CaseSensitiveName[33];

// pcvars
new amx_mode;
new amx_password_field;
new amx_default_access;

public plugin_init()
{
#if defined USING_SQL
register_plugin("Admin Base (SQL)", AMXX_VERSION_STR, "AMXX Dev Team")
#else
register_plugin("Admin Base", AMXX_VERSION_STR, "AMXX Dev Team")
#endif
register_dictionary("admin.txt")
register_dictionary("common.txt")
amx_mode=register_cvar("amx_mode", "1")
amx_password_field=register_cvar("amx_password_field", "_pw")
amx_default_access=register_cvar("amx_default_access", "")

register_cvar("amx_vote_ratio", "0.02")
register_cvar("amx_vote_time", "10")
register_cvar("amx_vote_answers", "1")
register_cvar("amx_vote_delay", "60")
register_cvar("amx_last_voting", "0")
register_cvar("amx_show_activity", "2")
register_cvar("amx_votekick_ratio", "0.40")
register_cvar("amx_voteban_ratio", "0.40")
register_cvar("amx_votemap_ratio", "0.40")

set_cvar_float("amx_last_voting", 0.0)

#if defined USING_SQL
register_srvcmd("amx_sqladmins", "adminSql")
register_cvar("amx_sql_table", "admins")
#endif
register_cvar("amx_sql_host", "127.0.0.1")
register_cvar("amx_sql_user", "root")
register_cvar("amx_sql_pass", "")
register_cvar("amx_sql_db", "amx")
register_cvar("amx_sql_type", "mysql")

register_concmd("amx_reloadadmins", "cmdReload", ADMIN_CFG)
register_concmd("amx_addadmin", "addadminfn", ADMIN_RCON, "<playername|auth> <accessflags> [password] [authtype] - add specified player as an admin to users.ini")

format(g_cmdLoopback, 15, "amxauth%c%c%c%c", random_num('A', 'Z'), random_num('A', 'Z'), random_num('A', 'Z'), random_num('A', 'Z'))

register_clcmd(g_cmdLoopback, "ackSignal")

remove_user_flags(0, read_flags("z")) // Remove 'user' flag from server rights

new configsDir[64]
get_configsdir(configsDir, 63)

server_cmd("exec %s/amxx.cfg", configsDir) // Execute main configuration file
server_cmd("exec %s/sql.cfg", configsDir)

// Create a vector of 5 cells to store the info.
//AdminList=vector_create(5);


#if defined USING_SQL
server_cmd("amx_sqladmins")
#else
format(configsDir, 63, "%s/users.ini", configsDir)
loadSettings(configsDir) // Load admins accounts
#endif
}
public client_connect(id)
{
g_CaseSensitiveName[id] = false;
}
public addadminfn(id, level, cid)
{
if (!cmd_access(id, level, cid, 3))
return PLUGIN_HANDLED

new idtype = ADMIN_STEAM | ADMIN_LOOKUP

if (read_argc() >= 5)
{
new t_arg[16]
read_argv(4, t_arg, 15)

if (equali(t_arg, "steam") || equali(t_arg, "steamid") || equali(t_arg, "auth"))
{
idtype = ADMIN_STEAM
}
else if (equali(t_arg, "ip"))
{
idtype = ADMIN_IPADDR
}
else if (equali(t_arg, "name") || equali(t_arg, "nick"))
{
idtype = ADMIN_NAME

if (equali(t_arg, "name"))
idtype |= ADMIN_LOOKUP
} else {
console_print(id, "[%s] Unknown id type ^"%s^", use one of: steamid, ip, name", PLUGINNAME, t_arg)
return PLUGIN_HANDLED
}
}

new arg[33]
read_argv(1, arg, 32)
new player = -1

if (idtype & ADMIN_STEAM)
{
if (containi(arg, "STEAM_0:") == -1)
{
idtype |= ADMIN_LOOKUP
player = cmd_target(id, arg, CMDTARGET_ALLOW_SELF | CMDTARGET_NO_BOTS)
} else {
new _steamid[44]
static _players[32], _num, _pv
get_players(_players, _num)
for (new _i=0; _i<_num; _i++)
{
_pv = _players[_i]
get_user_authid(_pv, _steamid, sizeof(_steamid)-1)
if (!_steamid[0])
continue
if (equal(_steamid, arg))
{
player = _pv
break
}
}
if (player < 1)
{
idtype &= ~ADMIN_LOOKUP
}
}
}
else if (idtype & ADMIN_NAME)
{
player = cmd_target(id, arg, CMDTARGET_ALLOW_SELF | CMDTARGET_NO_BOTS)

if (player)
idtype |= ADMIN_LOOKUP
else
idtype &= ~ADMIN_LOOKUP
}
else if (idtype & ADMIN_IPADDR)
{
new len = strlen(arg)
new dots, chars

for (new i = 0; i < len; i++)
{
if (arg[i] == '.')
{
if (!chars || chars > 3)
break

if (++dots > 3)
break

chars = 0
} else {
chars++
}

if (dots != 3 || !chars || chars > 3)
{
idtype |= ADMIN_LOOKUP
player = find_player("dh", arg)
}
}
}

if (idtype & ADMIN_LOOKUP && !player)
{
console_print(id, "%L", id, "CL_NOT_FOUND")
return PLUGIN_HANDLED
}

new flags[64]
read_argv(2, flags, 63)

new password[64]
if (read_argc() >= 4)
read_argv(3, password, 63)

new auth[33]
new Comment[33]; // name of player to pass to comment field
if (idtype & ADMIN_LOOKUP)
{
get_user_name(player, Comment, sizeof(Comment)-1)
if (idtype & ADMIN_STEAM)
{
get_user_authid(player, auth, 32)
}
else if (idtype & ADMIN_IPADDR)
{
get_user_ip(player, auth, 32)
}
else if (idtype & ADMIN_NAME)
{
get_user_name(player, auth, 32)
}
} else {
copy(auth, 32, arg)
}

new type[16], len

if (idtype & ADMIN_STEAM)
len += format(type[len], 15-len, "c")
else if (idtype & ADMIN_IPADDR)
len += format(type[len], 15-len, "d")

if (strlen(password) > 0)
len += format(type[len], 15-len, "a")
else
len += format(type[len], 15-len, "e")

AddAdmin(id, auth, flags, password, type, Comment)
cmdReload(id, ADMIN_CFG, 0)

if (player > 0)
{
new name[32]
get_user_info(player, "name", name, 31)
accessUser(player, name)
}

return PLUGIN_HANDLED
}

AddAdmin(id, auth[], accessflags[], password[], flags[], comment[]="")
{
#if defined USING_SQL
new error[128], errno

new Handle:info = SQL_MakeStdTuple()
new Handle:sql = SQL_Connect(info, errno, error, 127)

if (sql == Empty_Handle)
{
server_print("[AMXX] %L", LANG_SERVER, "SQL_CANT_CON", error)
//backup to users.ini
#endif
// Make sure that the users.ini file exists.
new configsDir[64]
get_configsdir(configsDir, 63)
format(configsDir, 63, "%s/users.ini", configsDir)

if (!file_exists(configsDir))
{
console_print(id, "[%s] File ^"%s^" doesn't exist.", PLUGINNAME, configsDir)
return
}

// Make sure steamid isn't already in file.
new line = 0, textline[256], len
const SIZE = 63
new line_steamid[SIZE + 1], line_password[SIZE + 1], line_accessflags[SIZE + 1], line_flags[SIZE + 1], parsedParams

// <name|ip|steamid> <password> <access flags> <account flags>
while ((line = read_file(configsDir, line, textline, 255, len)))
{
if (len == 0 || equal(textline, ";", 1))
continue // comment line

parsedParams = parse(textline, line_steamid, SIZE, line_password, SIZE, line_accessflags, SIZE, line_flags, SIZE)

if (parsedParams != 4)
continue // Send warning/error?

if (containi(line_flags, flags) != -1 && equal(line_steamid, auth))
{
console_print(id, "[%s] %s already exists!", PLUGINNAME, auth)
return
}
}

// If we came here, steamid doesn't exist in users.ini. Add it.
new linetoadd[512]

if (comment[0]==0)
{
formatex(linetoadd, 511, "^r^n^"%s^" ^"%s^" ^"%s^" ^"%s^"", auth, password, accessflags, flags)
}
else
{
formatex(linetoadd, 511, "^r^n^"%s^" ^"%s^" ^"%s^" ^"%s^" ; %s", auth, password, accessflags, flags, comment)
}
console_print(id, "Adding:^n%s", linetoadd)

if (!write_file(configsDir, linetoadd))
console_print(id, "[%s] Failed writing to %s!", PLUGINNAME, configsDir)
#if defined USING_SQL
}

new table[32]

get_cvar_string("amx_sql_table", table, 31)

new Handle:query = SQL_PrepareQuery(sql, "SELECT * FROM `%s` WHERE (`auth` = '%s')", table, auth)

if (!SQL_Execute(query))
{
SQL_QueryError(query, error, 127)
server_print("[AMXX] %L", LANG_SERVER, "SQL_CANT_LOAD_ADMINS", error)
console_print(id, "[AMXX] %L", LANG_SERVER, "SQL_CANT_LOAD_ADMINS", error)
} else if (SQL_NumResults(query)) {
console_print(id, "[%s] %s already exists!", PLUGINNAME, auth)
} else {
console_print(id, "Adding to database:^n^"%s^" ^"%s^" ^"%s^" ^"%s^"", auth, password, accessflags, flags)

SQL_QueryAndIgnore(sql, "REPLACE INTO `%s` (`auth`, `password`, `access`, `flags`) VALUES ('%s', '%s', '%s', '%s')", table, auth, password, accessflags, flags)
}

SQL_FreeHandle(query)
SQL_FreeHandle(sql)
SQL_FreeHandle(info)
#endif

}
public plugin_cfg()
{
set_task(6.1, "delayed_load")
}

public delayed_load()
{
new configFile[128], curMap[64], configDir[128]

get_configsdir(configDir, sizeof(configDir)-1)
get_mapname(curMap, sizeof(curMap)-1)

new i=0;

while (curMap[i] != '_' && curMap[i++] != '^0') {/*do nothing*/}

if (curMap[i]=='_')
{
// this map has a prefix
curMap[i]='^0';
formatex(configFile, sizeof(configFile)-1, "%s/maps/prefix_%s.cfg", configDir, curMap);

if (file_exists(configFile))
{
server_cmd("exec %s", configFile);
}
}

get_mapname(curMap, sizeof(curMap)-1)


formatex(configFile, sizeof(configFile)-1, "%s/maps/%s.cfg", configDir, curMap)

if (file_exists(configFile))
{
server_cmd("exec %s", configFile)
}

}

loadSettings(szFilename[])
{
new File=fopen(szFilename,"r");

if (File)
{
new Text[512];
new Flags[32];
new Access[32]
new AuthData[44];
new Password[32];

while (!feof(File))
{
fgets(File,Text,sizeof(Text)-1);

trim(Text);

// comment
if (Text[0]==';')
{
continue;
}

Flags[0]=0;
Access[0]=0;
AuthData[0]=0;
Password[0]=0;

// not enough parameters
if (parse(Text,AuthData,sizeof(AuthData)-1,Password,sizeof(Password)-1,Access,sizeof(Access)-1,Flags,sizeof(Flags)-1) < 2)
{
continue;
}

admins_push(AuthData,Password,read_flags(Access),read_flags(Flags));

AdminCount++;
}

fclose(File);
}

if (AdminCount == 1)
{
server_print("[AMXX] %L", LANG_SERVER, "LOADED_ADMIN");
}
else
{
server_print("[AMXX] %L", LANG_SERVER, "LOADED_ADMINS", AdminCount);
}

return 1;
}

#if defined USING_SQL
public adminSql()
{
new table[32], error[128], type[12], errno

new Handle:info = SQL_MakeStdTuple()
new Handle:sql = SQL_Connect(info, errno, error, 127)

get_cvar_string("amx_sql_table", table, 31)

SQL_GetAffinity(type, 11)

if (sql == Empty_Handle)
{
server_print("[AMXX] %L", LANG_SERVER, "SQL_CANT_CON", error)

//backup to users.ini
new configsDir[64]

get_configsdir(configsDir, 63)
format(configsDir, 63, "%s/users.ini", configsDir)
loadSettings(configsDir) // Load admins accounts

return PLUGIN_HANDLED
}

new Handle:query

if (equali(type, "sqlite"))
{
if (!sqlite_TableExists(sql, table))
{
SQL_QueryAndIgnore(sql, "CREATE TABLE %s ( auth TEXT NOT NULL DEFAULT '', password TEXT NOT NULL DEFAULT '', access TEXT NOT NULL DEFAULT '', flags TEXT NOT NULL DEFAULT '' )", table)
}

query = SQL_PrepareQuery(sql, "SELECT auth, password, access, flags FROM %s", table)
} else {
SQL_QueryAndIgnore(sql, "CREATE TABLE IF NOT EXISTS `%s` ( `auth` VARCHAR( 32 ) NOT NULL, `password` VARCHAR( 32 ) NOT NULL, `access` VARCHAR( 32 ) NOT NULL, `flags` VARCHAR( 32 ) NOT NULL ) COMMENT = 'AMX Mod X Admins'", table)
query = SQL_PrepareQuery(sql,"SELECT `auth`,`password`,`access`,`flags` FROM `%s`", table)
}

if (!SQL_Execute(query))
{
SQL_QueryError(query, error, 127)
server_print("[AMXX] %L", LANG_SERVER, "SQL_CANT_LOAD_ADMINS", error)
} else if (!SQL_NumResults(query)) {
server_print("[AMXX] %L", LANG_SERVER, "NO_ADMINS")
} else {

AdminCount = 0

/** do this incase people change the query order and forget to modify below */
new qcolAuth = SQL_FieldNameToNum(query, "auth")
new qcolPass = SQL_FieldNameToNum(query, "password")
new qcolAccess = SQL_FieldNameToNum(query, "access")
new qcolFlags = SQL_FieldNameToNum(query, "flags")

new AuthData[44];
new Password[44];
new Access[32];
new Flags[32];

while (SQL_MoreResults(query))
{
SQL_ReadResult(query, qcolAuth, AuthData, sizeof(AuthData)-1);
SQL_ReadResult(query, qcolPass, Password, sizeof(Password)-1);
SQL_ReadResult(query, qcolAccess, Access, sizeof(Access)-1);
SQL_ReadResult(query, qcolFlags, Flags, sizeof(Flags)-1);

admins_push(AuthData,Password,read_flags(Access),read_flags(Flags));

++AdminCount;
SQL_NextRow(query)
}

if (AdminCount == 1)
{
server_print("[AMXX] %L", LANG_SERVER, "SQL_LOADED_ADMIN")
}
else
{
server_print("[AMXX] %L", LANG_SERVER, "SQL_LOADED_ADMINS", AdminCount)
}

SQL_FreeHandle(query)
SQL_FreeHandle(sql)
SQL_FreeHandle(info)
}

return PLUGIN_HANDLED
}
#endif

public cmdReload(id, level, cid)
{
if (!cmd_access(id, level, cid, 1))
return PLUGIN_HANDLED

//strip original flags (patch submitted by mrhunt)
remove_user_flags(0, read_flags("z"))

admins_flush();

#if !defined USING_SQL
new filename[128]

get_configsdir(filename, 127)
format(filename, 63, "%s/users.ini", filename)

AdminCount = 0;
loadSettings(filename); // Re-Load admins accounts

if (id != 0)
{
if (AdminCount == 1)
{
console_print(id, "[AMXX] %L", LANG_SERVER, "LOADED_ADMIN");
}
else
{
console_print(id, "[AMXX] %L", LANG_SERVER, "LOADED_ADMINS", AdminCount);
}
}
#else
AdminCount = 0
adminSql()

if (id != 0)
{
if (AdminCount == 1)
console_print(id, "[AMXX] %L", LANG_SERVER, "SQL_LOADED_ADMIN")
else
console_print(id, "[AMXX] %L", LANG_SERVER, "SQL_LOADED_ADMINS", AdminCount)
}
#endif

new players[32], num, pv
new name[32]
get_players(players, num)
for (new i=0; i<num; i++)
{
pv = players[i]
get_user_name(pv, name, 31)
accessUser(pv, name)
}

return PLUGIN_HANDLED
}

getAccess(id, name[], authid[], ip[], password[])
{
new index = -1
new result = 0

static Count;
static Flags;
static Access;
static AuthData[44];
static Password[32];

g_CaseSensitiveName[id] = false;

Count=admins_num();
for (new i = 0; i < Count; ++i)
{
Flags=admins_lookup(i,AdminProp_Flags);
admins_lookup(i,AdminProp_Auth,AuthData,sizeof(AuthData)-1);

if (Flags & FLAG_AUTHID)
{
if (equal(authid, AuthData))
{
index = i
break
}
}
else if (Flags & FLAG_IP)
{
new c = strlen(AuthData)

if (AuthData[c - 1] == '.') /* check if this is not a xxx.xxx. format */
{
if (equal(AuthData, ip, c))
{
index = i
break
}
} /* in other case an IP must just match */
else if (equal(ip, AuthData))
{
index = i
break
}
}
else
{
if (Flags & FLAG_CASE_SENSITIVE)
{
if (Flags & FLAG_TAG)
{
if (contain(name, AuthData) != -1)
{
index = i
g_CaseSensitiveName[id] = true
break
}
}
else if (equal(name, AuthData))
{
index = i
g_CaseSensitiveName[id] = true
break
}
}
else
{
if (Flags & FLAG_TAG)
{
if (containi(name, AuthData) != -1)
{
index = i
break
}
}
else if (equali(name, AuthData))
{
index = i
break
}
}
}
}

if (index != -1)
{
Access=admins_lookup(index,AdminProp_Access);

if (Flags & FLAG_NOPASS)
{
result |= 8
new sflags[32]

get_flags(Access, sflags, 31)
set_user_flags(id, Access)

log_amx("Login: ^"%s<%d><%s><>^" became an admin (account ^"%s^") (access ^"%s^") (address ^"%s^")", name, get_user_userid(id), authid, AuthData, sflags, ip)
}
else
{

admins_lookup(index,AdminProp_Password,Password,sizeof(Password)-1);

if (equal(password, Password))
{
result |= 12
set_user_flags(id, Access)

new sflags[32]
get_flags(Access, sflags, 31)

log_amx("Login: ^"%s<%d><%s><>^" became an admin (account ^"%s^") (access ^"%s^") (address ^"%s^")", name, get_user_userid(id), authid, AuthData, sflags, ip)
}
else
{
result |= 1

if (Flags & FLAG_KICK)
{
result |= 2
log_amx("Login: ^"%s<%d><%s><>^" kicked due to invalid password (account ^"%s^") (address ^"%s^")", name, get_user_userid(id), authid, AuthData, ip)
}
}
}
}
else if (get_pcvar_float(amx_mode) == 2.0)
{
result |= 2
}
else
{
new defaccess[32]

get_pcvar_string(amx_default_access, defaccess, 31)

if (!strlen(defaccess))
{
copy(defaccess, 32, "z")
}

new idefaccess = read_flags(defaccess)

if (idefaccess)
{
result |= 8
set_user_flags(id, idefaccess)
}
}

return result
}

accessUser(id, name[] = "")
{
remove_user_flags(id)

new userip[32], userauthid[32], password[32], passfield[32], username[32]

get_user_ip(id, userip, 31, 1)
get_user_authid(id, userauthid, 31)

if (name[0])
{
copy(username, 31, name)
}
else
{
get_user_name(id, username, 31)
}

get_pcvar_string(amx_password_field, passfield, 31)
get_user_info(id, passfield, password, 31)

new md5Password[34];

md5(password, md5Password)

new result = getAccess(id, username, userauthid, userip, md5Password)

if (result & 1)
{
client_cmd(id, "echo ^"* %L^"", id, "INV_PAS")
}

if (result & 2)
{
client_cmd(id, "%s", g_cmdLoopback)
return PLUGIN_HANDLED
}

if (result & 4)
{
client_cmd(id, "echo ^"* %L^"", id, "PAS_ACC")
}

if (result & 8)
{
client_cmd(id, "echo ^"* %L^"", id, "PRIV_SET")
}

return PLUGIN_CONTINUE
}

public client_infochanged(id)
{
if (!is_user_connected(id) || !get_pcvar_num(amx_mode))
{
return PLUGIN_CONTINUE
}

new newname[32], oldname[32]

get_user_name(id, oldname, 31)
get_user_info(id, "name", newname, 31)

if (g_CaseSensitiveName[id])
{
if (!equal(newname, oldname))
{
accessUser(id, newname)
}
}
else
{
if (!equali(newname, oldname))
{
accessUser(id, newname)
}
}
return PLUGIN_CONTINUE
}

public ackSignal(id)
{
server_cmd("kick #%d ^"%L^"", get_user_userid(id), id, "NO_ENTRY")
return PLUGIN_HANDLED
}

public client_authorized(id)
return get_pcvar_num(amx_mode) ? accessUser(id) : PLUGIN_CONTINUE

public client_putinserver(id)
{
if (!is_dedicated_server() && id == 1)
return get_pcvar_num(amx_mode) ? accessUser(id) : PLUGIN_CONTINUE

return PLUGIN_CONTINUE
}
Bloo, oxoTHuk., steelzzz
31.3.2015, 15:56 Скрипт переноса админов из БД в users.ini
Скрытый текст
Код
<?php

@require_once 'inc/db.config.inc.php';


try {
    $db = new PDO('mysql:host=' . $config->db_host . ';dbname=' . $config->db_db, $config->db_user, $config->db_pass);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $db->exec("set names utf8");

    $dbs = $db->query('SELECT * FROM amx_amxadmins');
    $dbs->setFetchMode(PDO::FETCH_OBJ);

// Сохраняем результат в файл
    while ($row = $dbs->fetch()) {
        if ($row->flags == "ce")
            $cfg .= '"' . $row->steamid . '" ';

        else if ($row->flags == "ca")
            $cfg .= '"' . $row->username . '" ';

        else if ($row->flags == "a")
            $cfg .= '"' . $row->username . '" ';

        $cfg .= '"' . $row->password . '" ';
        $cfg .= '"' . $row->access . '" ';
        $cfg .= '"' . $row->flags . '" ';
        $cfg .= '; SteamID: ' . $row->steamid . ' ';
        $cfg .= 'Nickname: ' . $row->nickname . ' ' . PHP_EOL;


        $cfgFile = 'users.ini';

        if (!file_put_contents($cfgFile, $cfg)) {
            return 'Не удалось сохранить конфиг.';
        }
    }
} catch (PDOException $e) {
    echo "Мээн, у нас проблема!!!";
    file_put_contents('rrors.txt', $e->getMessage(), FILE_APPEND);
}
?>

Тупо берет всех админов из БД, не распределяя по серверам.
P.S возможно это быдло-код... я не гуру скриптер :)
oxoTHuk., steelzzz
25.3.2015, 11:04 Открыть only awp csdm
Это бред какой-то... 2x2 и 22 игрока...
Kazya
19.3.2015, 16:30 Открыть only awp csdm
Помню, раньше был один такой сервер. Карты необычные, азарт на высоте.
Играл пол года на нем, потом забыл про него.....


Буду постоянным игроком, если сервер не однодневка.
Kazya
17.3.2015, 17:22 awp random
Код:
#include amxmodx
#include cstrike
#include fun

#if AMXX_VERSION_NUM < 183
#include colorchat
#endif

#define GIVE_ROUND 3 // После какого раунда выдаем AWP

new g_RoundCount

public plugin_init(){
register_plugin("AWP Random", "1.0", "DirtyMatt");

register_event("HLTV", "fRoundStart", "a", "1=0", "2=0")
}

public fRoundStart(){
g_RoundCount++;

if(g_RoundCount >= GIVE_ROUND){
fGiveAwp();
}
}

public fGiveAwp(){
new players[32], playerName[32], iPlayers, randomPlayer;
get_players(players, iPlayers, "h");
randomPlayer = random(iPlayers);

if(!is_user_connected(players[randomPlayer]) & !is_user_alive(players[randomPlayer])){
give_item(players[randomPlayer], "weapon_awp");
cs_set_user_bpammo(players[randomPlayer], CSW_AWP, 30);
get_user_name(players[randomPlayer], playerName, charsmax(playerName));
client_print_color(0, 0, "^1[^4Server^1]^3 Поздравляем! Игрок^4 %s^3 получил AWP", playerName);
}
}

Не тестировал.
GANS2302

2 страниц V   1 2