[TUT]Levels


Всем привет, давно я не публиковал какого-либо типа новости и вот с публикацией новости "Levels System by heka" я захотел написать данную статью так как такие легкие плагине просто нельзя назвать "приватом", а я видел там многие подумали что это очень продуманный плагин и т.п.
Данную статью я пишу мало задумываясь.
В общем начнем.В данной статье хочу продемонстрировать как сделать "систему уровней" и сколько же надо знаний для того что бы сохранить все это с помощью модуля nVault....
Для начала сделаем для более больших "потех" делаем несколько глобальных переменных, а и да впишите в инклюды amxmodx, amxmisc, nvault, zombieplague, fun, fakemeta, cstrike, быть может ляпнул лишнего инклюда, но да ничего он нам не помешает.
переменные:
new PlayerXp[33] - переменная XP - то есть опытаnew PlayerLevels[33]  - переменная уровнейnew AllDamage[33] - переменная всего полученного урона(позже объясню)new vault - переменная необходимая для сохранения уровня и опытаnew Float:NeedDamage = 500 - переменная, сколько урона необходима, тоже позжеи еще вот такую переменнуюnew const g_Levels[5] =  0, 120, 300, 500, 1000000    - сколько опыта необходимо для поднятия след. уровня(где 5 кол-во уровней)


регистрируем плагин и пару forwards
public plugin_init() register_plugin("УРОВНИ", "ВЕРСИЯ", "АНАНАС")//всем довольны?, так мы продолжим.//регистрируем 2 события HamSandwich`a(позже его разберем)RegisterHam(Ham_Killed, "player", "Ham_Killed_Post", 1)RegisterHam(Ham_TakeDamage, "player", "Ham_TakeDamage_Post", 1)


Продолжим.
Далее создаем эти forward`s и делаем их функции
сначала возьмем TakeDamage(момент когда наносится урон)
public Ham_TakeDamage_Post(id, victim, attacker, Float:damage, damagebits)if(zp_get_user_zombie(victim)) AllDamage[attacker] += damageif(AllDamage[attacker] >= NeedDamage)  AllDamage[attacker] = 0.0  PlayerXp[attacker] += 10     while(PlayerXp[attacker] >= g_Levels[PlayerLevels[attacker]]) //Повторять функцию выше пока не будет выполнено условие             PlayerLevels[attacker] += 1      


В Выше написано коде кратко говоря написано:Если жертва зомби то каждый допущенный по нему урон будет складываться с предыдущим уроном и так пока не наберет 500(Переменная NeedDamage)
Когда набирает результат делается равным 0 и прибавляется 10 Xp(Опыта)

теперь HamKilled

public Ham_Killed_Post(id, attacker, shouldgib); PlayerXp[attacker] += 10while(PlayerXp[attacker] >= g_Levels[PlayerLevels[attacker]])      PlayerLevel[attacker] += 1


Здесь тому кто убил прибавляет 10 опыта когда наберется достаточно опыта для след.уровня то повысит уровень!))

Осталось только это все в nVault сохранить, сохранять мы будем с помощью steamid

public client_connect(id)       LoadData(id)   public client_disconnect(id)            SaveData(id) 


Сохраняет и загружает файлы хранящиеся в nVault`e

далее делаем сами эти функции
public SaveData(id)      new AuthID[35] get_user_authid(id,AuthID,34)     new vaultkey[64],vaultdata[256]     format(vaultkey,63,"%s-Mod",AuthID)     format(vaultdata,255,"%i#%i#",PlayerXp[id],PlayerLevels[id])     nvault_set(g_vault,vaultkey,vaultdata)     return PLUGIN_CONTINUE   public LoadData(id)      new AuthID[35] get_user_authid(id,AuthID,34)     new vaultkey[64],vaultdata[256]      format(vaultkey,63,"%s-Mod",AuthID)     format(vaultdata,255,"%i#%i#",PlayerXp[id],PlayerLevels[id])     nvault_get(g_vault,vaultkey,vaultdata,255)     replace_all(vaultdata, 255, "#", " ")     new playerxp[32], playerlevel[32]     parse(vaultdata, playerxp, 31, playerlevel, 31)     PlayerXp[id] = str_to_num(playerxp)     PlayerLevels[id] = str_to_num(playerlevel)     return PLUGIN_CONTINUE   



Теперь мы можем делать так называемые бонусы допустим
еще зарегестрируем в public plugin_init 1 HamSandwich

RegisterHam(Ham_Spawn, "player", "Ham_Spawn_Post", 1)


момент возрождения/создания entity

Делаем его функцию

public Ham_Spawn_Post(id)if(PlayerLevels[id] >= 3) set_user_maxspeed(id, 1.7)if(PlayerLevels[id] >= 5)  set_user_health(id, get_user_health(id) + 100)


это был банальный пример

Кратко:
Если уровень более или равен 3 тогда устанавливает скорость 1.7

Если уровень более или равен 5 тогда прибавляет 100 жизней

Это для простого показа

Такс данную статью и сам код писал на ходу брал кое что с оленей(мало) и с amxmodx ну от туда основные понятия
Данную статью писал уставший....прошу не придерется к словам, в общем кому тот прочитает

И напомню это всего лишь был пример написания системы уровней

Комментарии 19

  1. Faktor от 2 мая 2012 19:58
    Спасибо
    Все туториалы у тебя очень хорошие
  2. Overkill от 2 мая 2012 20:00
    Круто. :hi:
  3. RMA
    RMA от 2 мая 2012 20:01
    Круто, автору зачет, только скачал систему, на тебе ТУТОР :5: +лови печеньку
    Оперативно!
  4. Oleg от 2 мая 2012 20:04
    если б не система не было бы сейчас тутора)
  5. Sugarv от 2 мая 2012 20:09
    Цитата: heka

    Да, твоя система послужила причиной, но код я у тебя не брал, уж поверь
  6. Alexander.3 от 2 мая 2012 20:41
    код уг.
    
    if(PlayerLevels[id] >= 5)
    
      set_user_health(id, get_user_health(id) + 100)
    


    Это точно не скомпилится, где кавычки? Нету кавычек, так форматируй строку нормально.
    --------------------
    Разработка игровых режимов:
    http://ZombieLite.Ru/

    Связь со мной:
    http://Alexander3.Ru/
  7. Oleg от 2 мая 2012 20:43
    сайт блокирует кавычки
  8. Alexander.3 от 2 мая 2012 20:44
    Печально, тогда уж скриншоты, без кавычек это не туториал.. новички просто откопируют код.. такое уже было ;)
    --------------------
    Разработка игровых режимов:
    http://ZombieLite.Ru/

    Связь со мной:
    http://Alexander3.Ru/
  9. BlackCat от 2 мая 2012 21:23
    heka,
    Завидно ему просто, никто ничего не покупает - обламываем всем радость что-либо продавать. тема "ебать как я люблю всех обламывать"
    --------------------
    Кто то еще играет в кс 1.6? Оо
  10. flymik24 от 2 мая 2012 22:09
    Kazan727,
    Скинте в ЛС весь код который тут описан в .txt формате (со всеми ковычками)
  11. BlackCat от 2 мая 2012 22:12
    flymik24,
    тхт нельзя через лс посылать.
    --------------------
    Кто то еще играет в кс 1.6? Оо
  12. bOeM от 2 мая 2012 22:14
    Класненько )
  13. flymik24 от 2 мая 2012 22:20
    BlackCat,
    Ну а как тогда можно скинуть код без исчезновения кавычек ?
  14. DarkSlayerXIV от 2 мая 2012 22:38
    Самому нарисовать
  15. BlackCat от 2 мая 2012 22:42
    flymik24,
    а ну раз такое дело, то тогда можно выйти за пределы разумного и скинуть файл формата ".тхт" в ЛС!
    П.С для этого есть
     "text" ( "" - Кавычки ) 
    --------------------
    Кто то еще играет в кс 1.6? Оо
  16. Alexander.3 от 2 мая 2012 23:43
    в новость залить, не?
    --------------------
    Разработка игровых режимов:
    http://ZombieLite.Ru/

    Связь со мной:
    http://Alexander3.Ru/
  17. Artem13 от 3 мая 2012 08:24
    впишите в инклюды amxmodx, amxmisc, nvault, zombieplague, fun, fakemeta, cstrike

    а как же hamsandwich если ты его используешь?)
  18. BlackCat от 3 мая 2012 11:12
    Artem13,
    да он же про. он юзает сэндвич не включая его в инклуды.
    --------------------
    Кто то еще играет в кс 1.6? Оо
  19. Sugarv от 3 мая 2012 14:03
    BlackCat,во первых, я ничего не продаю
    во вторых, ты же сам нуб, твои "лучшие" плагины это одно режимные оружия и то код не твой а ты из многих плагинов взял его, ты же ничего толком не знаешь, у тебя стандартные знания, я конечно понимаю что лично у тебя наверняка не достаточно знаний что бы додуматься и вписать новый инклюд, я заходил в твой магазин, там одно гавно по другому сказать нельзя, да и если в твои публикации глянуть тоже не удивишься...Alexander.3,Данную статью писал уставший....прошу не придерется к словам, и еще 1 даже бы если у меня был код намного лучше зачем мне его выкладывать?
    и да, код будучи "уг" все равно работает
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.