←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

CoD Nowy
Ulepszanie perków

  • +
  • -
1stADXionC's Photo 1stADXionC 20.06.2016

Witam!
Stworzyłem za pomocą użytkownika Andrzejek system ulepszania perków. Lecz mam małe problemy podczas kompilacji.

Do silnika dodałem:

poziomy_runy[MAX_ILOSC_RUNY+1][MAX_WIELKOSC_POZIOMU+1]

register_native("cod_get_runa_poziom", "PobierzPoziomRuny", 1);

public PobierzPoziomRuny(runa, Return[], len)
{
    if(runa <= ilosc_runy)
    {
        param_convert(2);
        copy(Return, len, poziomy_runy[runa]);
    }
}

Przykładowy perk:

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <codmod>
#include <runy>
#include <hamsandwich>

new const runa_name[] = "Golden";
new const runa_desc[] = "Obrazenia zwiekszone o";
new const runa_poziom[] = "1";

new bool:ma_rune[33];

public plugin_init()
{
    register_plugin(runa_name, "0.1", "1stADXionC");
    
    cod_get_register_runa(runa_name, runa_desc, runa_poziom);
    
    RegisterHam(Ham_TakeDamage, "player", "TakeDamage");
}

public cod_get_runa_enabled(id)
{
    ma_rune[id] = true;
}

public cod_get_runa_disabled(id)
{
    ma_rune[id] = false;
}

public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
    if(!is_user_connected(idattacker))
        return HAM_IGNORED;
    
    if(!ma_rune[idattacker])
    {
        if(cod_get_runa_poziom() = 1) cod_inflict_damage(idattacker, this, 10.0, 0.00, idinflictor, damagebits);
            else if(cod_get_runa_poziom() = 2) cod_inflict_damage(idattacker, this, 10.0, 0.0, idinflictor, damagebits);
            else if(cod_get_runa_poziom() = 3) cod_inflict_damage(idattacker, this, 15.0, 0.0, idinflictor, damagebits);
            else if(cod_get_runa_poziom() = 4) cod_inflict_damage(idattacker, this, 20.0, 0.0, idinflictor, damagebits);
            else if(cod_get_runa_poziom() = 5) cod_inflict_damage(idattacker, this, 25.0, 0.0, idinflictor, damagebits);
    }
    
    return HAM_IGNORED;
}

Błędy podczas kompilacji perku:

Welcome to the AMX Mod X 1.8.1-300 Compiler.
Copyright (c) 1997-2013 ITB CompuPhase, AMX Mod X Team

Error: Number of arguments does not match definition on line 41
Warning: Expression has no effect on line 41
Error: Expected token: ";", but found ")" on line 41
Error: Invalid expression, assumed zero on line 41
Error: Too many error messages on one line on line 41

Compilation aborted.
4 Errors.
Could not locate output file C:\Users\1stADXionC\Desktop\AleLulaaaa\codruna_golden.amx (compile failed).
Quote

  • +
  • -
rzeznik9871's Photo rzeznik9871 20.06.2016

w if'ach musza byc 2 znaki rownosci "=="

Quote

  • +
  • -
1stADXionC's Photo 1stADXionC 20.06.2016

Welcome to the AMX Mod X 1.8.1-300 Compiler.
Copyright (c) 1997-2013 ITB CompuPhase, AMX Mod X Team

Error: Number of arguments does not match definition on line 41
Error: Number of arguments does not match definition on line 42
Error: Number of arguments does not match definition on line 43
Error: Number of arguments does not match definition on line 44
Error: Number of arguments does not match definition on line 45

5 Errors.
Could not locate output file C:\Users\1stADXionC\Desktop\AleLulaaaa\codruna_golden.amx (compile failed).


 

Quote

  • +
  • -
rzeznik9871's Photo rzeznik9871 20.06.2016

PobierzPoziomRuny(runa, Return[], len)

musisz zwrocic rune (co kolwiek to znaczy)  do osobnej tablicy

czyli cos takiego

public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
    if(!is_user_connected(idattacker))
        return HAM_IGNORED;
    
    if(!ma_rune[idattacker])
    {
        new wartosc_runy[31]
        cod_get_runa_poziom(runa_name,wartosc_runy,30)
        if(wartosc_runy == 1) cod_inflict_damage(idattacker, this, 10.0, 0.00, idinflictor, damagebits);
            else if(wartosc_runy == 2) cod_inflict_damage(idattacker, this, 10.0, 0.0, idinflictor, damagebits);
            else if(wartosc_runy == 3) cod_inflict_damage(idattacker, this, 15.0, 0.0, idinflictor, damagebits);
            else if(wartosc_runy == 4) cod_inflict_damage(idattacker, this, 20.0, 0.0, idinflictor, damagebits);
            else if(wartosc_runy == 5) cod_inflict_damage(idattacker, this, 25.0, 0.0, idinflictor, damagebits);
    }
    
    return HAM_IGNORED;
}

czy jakos tak nie jestem do konca pewny bo nie bardzo rozumiem jak to dziala

 

/edit

dobra rozumiem powinno byc ok


Edited by rzeznik9871, 20.06.2016 11:27.
Quote

  • +
  • -
1stADXionC's Photo 1stADXionC 20.06.2016

Welcome to the AMX Mod X 1.8.1-300 Compiler.
Copyright (c) 1997-2013 ITB CompuPhase, AMX Mod X Team

Error: Argument type mismatch (argument 1) on line 42
Error: Array must be indexed (variable "wartosc_runy") on line 43
Error: Array must be indexed (variable "wartosc_runy") on line 44
Error: Array must be indexed (variable "wartosc_runy") on line 45
Error: Array must be indexed (variable "wartosc_runy") on line 46
Error: Array must be indexed (variable "wartosc_runy") on line 47

6 Errors.
Could not locate output file C:\Users\1stADXionC\Desktop\AleLulaaaa\codruna_golden.amx (compile failed).

No to ja proponuje, pierwsze zrobić to menu i natyw jeden od pobierania aktualnego poziomu i w pluginie od perku, tak gdzie jest jesgo umiejetnosci pobierać poziom i ustawic dla niego odpowiedni dodatek np. jak mowiles o obrażeniach to np.
 
 

new Float:Damage = 0.0;
    
    if(cod_get_poziom_perku() = 1) Damage += 10;
    else if(cod_get_poziom_perku() = 2) Damage += 20;
        else if(cod_get_poziom_perku() = 3) Damage += 30;
        else if(cod_get_poziom_perku() = 4) Damage += 40;
        else if(cod_get_poziom_perku() = 5) Damage += 50;
        
        //I COŚ TU DALEJ

Dlaczego tak, bo uwżam że to będzie najlepsze rozwiązanie. Bo każdy perk ma inna umiejetność.
A tak robisz w głównym pluginie, lub w osobnym pluginie jak wolisz
 
 

new gPoziom_perku_id[33] = 0; // rejestrujesz zmienna globalna

public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR)
    
    // Add your code here...
}
public plugin_natives() {
    register_native("cod_get_poziom_perku", "PobierzPoziomPerku", 1); //rejestrujesz natyw cod_get_poziom_perku() w pluginie od perka dodajesz native cod_get_poziom_perku();
}
public PobierzPoziomPerku(id) {
    return gPoziom_perku_id[id]; //odczytujesz wartosc poziomu perku
}

Jeżeli chcesz dodać również opisy do menu co daje poziom do aktualnego perku wystarczy prosty natyw i będzie wszystko git, możesz też ustawiać ceny do każdego perku jaką chcesz, no możliwości masz wiele.

 


Edited by 1stADXionC, 20.06.2016 11:41.
Quote

  • +
  • -
rzeznik9871's Photo rzeznik9871 20.06.2016

public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
    if(!is_user_connected(idattacker))
        return HAM_IGNORED;
    
    if(!ma_rune[idattacker])
    {
        cod_get_runa_poziom(runa,wartosc_runy,idattacker)
        if(wartosc_runy[idattacker] == 1) cod_inflict_damage(idattacker, this, 10.0, 0.00, idinflictor, damagebits);
            else if(wartosc_runy[idattacker] == 2) cod_inflict_damage(idattacker, this, 10.0, 0.0, idinflictor, damagebits);
            else if(wartosc_runy[idattacker] == 3) cod_inflict_damage(idattacker, this, 15.0, 0.0, idinflictor, damagebits);
            else if(wartosc_runy[idattacker] == 4) cod_inflict_damage(idattacker, this, 20.0, 0.0, idinflictor, damagebits);
            else if(wartosc_runy[idattacker] == 5) cod_inflict_damage(idattacker, this, 25.0, 0.0, idinflictor, damagebits);
    }
    
    return HAM_IGNORED;
}

new wartosc_runy[33] jako zmienna globalna daj

public PobierzPoziomRuny(runa, Return[], len)

to runa to id runy tak? tylko teraz pytanie skąd to pobrac spróbuj zrobic tak jak napisalem ale nie jestem pewny czy zadziala niestety na codzie znam sie jak kon rafal na motoryzacji wiec to tak troche pomoc w ciemno ^^

Quote

  • +
  • -
1stADXionC's Photo 1stADXionC 20.06.2016

https://amxx.pl/topi...-system-perków/

Runy to jest edytowany plugin perki.
Quote

  • +
  • -
1stADXionC's Photo 1stADXionC 20.06.2016

https://amxx.pl/topi...-system-perków/

Runy to jest edytowany plugin perki.
Quote

  • +
  • -
AwIlL^^'s Photo AwIlL^^ 20.06.2016

została zmieniona konstrukcja cod_get_runa_poziom(runa, return[], len) na cod_get_runa_poziom(id)
miłej zabawy :)

Quote

  • +
  • -
1stADXionC's Photo 1stADXionC 20.06.2016

Temat można zamknąć, poradziłem sobie :)

Quote