H2S04
Użytkownicy-
Postów
51 -
Dołączył
-
Ostatnia wizyta
-
Wygrane w rankingu
2
Typ zawartości
Profile
Forum
Wydarzenia
Treść opublikowana przez H2S04
-
Mam problem z tablicami, przerobiłem je trochę, by działać na samych tablicach i nie musieć ich nadpisywać, wcześniej wyciągałem je i nadpisywałem, ale postanowiłem skrócić kod, lecz teraz przy strzale lub przeładowaniu, wartości nie chcą wskoczyć. Strzelę nie pobierze ammo, i nie mogę znowu strzelić, gdy zmienię broń na łuk, ciągle stara się przeładować (autoreload, a ammo ustawione na 5), Draw rysuje się że magazynek pistoletu spada na 0 i wraca do 5, a amunicja z EQ, pobiera się normalnie . Co zrobiłem źle? EDIT: Naprawiłem problem strzelania, nie przyczaiłem, że alarm się nie wykona bo nie klikam przycisku... dodałem linijkę na dół kodu Czy kod się pierdzieli przez brak referencji? Zamiast zmieniać mi tablicę secweapon zmienia mi Weapon? CREATE: #region //Weapons #region //Secondray Weapons /* secweapon[,0] = "Metal Made Pistol"; //Nazwa Broni secweapon[,1] = 0.3; //Szybkośc Strzelania * room_speed // 1 = 1sec; secweapon[,2] = 1.5; //Szybkość Przeładowania * room_Speed // 1 = 1sec; secweapon[,3] = 3; //Minimalna Penetracja Pancerza secweapon[,4] = 8; //Maksymalna Penetracja Pancerza secweapon[,5] = 2; //Typ Używanej Amunicji //// 9mm secweapon[,6] = 0; //Ilość Amunicji w Magazynku secweapon[,7] = 20; //Maksymalna Ilość Amunicji w Magazynku */ secweapon[0,0] = "EMPTY"; //Nazwa Broni secweapon[0,1] = 0; //Szybkośc Strzelania * room_speed // 1 = 1sec; secweapon[0,2] = 0; //Szybkość Przeładowania * room_Speed // 1 = 1sec; secweapon[0,3] = 0; //Minimalna Penetracja Pancerza secweapon[0,4] = 0; //Maksymalna Penetracja Pancerza secweapon[0,5] = 0; //Typ Używanej Amunicji //// secweapon[0,6] = 0; //Ilość Amunicji w Magazynku secweapon[0,7] = 0; //Maksymalna Ilość Amunicji w Magazynku secweapon[1,0] = "Wood Made Pistol"; //Nazwa Broni secweapon[1,1] = 0.3; //Szybkośc Strzelania * room_speed // 1 = 1sec; secweapon[1,2] = 2; //Szybkość Przeładowania * room_Speed // 1 = 1sec; secweapon[1,3] = 3; //Minimalna Penetracja Pancerza secweapon[1,4] = 5; //Maksymalna Penetracja Pancerza secweapon[1,5] = 2; //Typ Używanej Amunicji //// 9mm secweapon[1,6] = 5; //Ilość Amunicji w Magazynku secweapon[1,7] = 15; //Maksymalna Ilość Amunicji w Magazynku secweapon[2,0] = "Metal Made Pistol"; //Nazwa Broni secweapon[2,1] = 0.3; //Szybkośc Strzelania * room_speed // 1 = 1sec; secweapon[2,2] = 1.8; //Szybkość Przeładowania * room_Speed // 1 = 1sec; secweapon[2,3] = 3; //Minimalna Penetracja Pancerza secweapon[2,4] = 8; //Maksymalna Penetracja Pancerza secweapon[2,5] = 2; //Typ Używanej Amunicji //// 9mm secweapon[2,6] = 0; //Ilość Amunicji w Magazynku secweapon[2,7] = 20; //Maksymalna Ilość Amunicji w Magazynku secweapon[3,0] = "Normal Pistol"; //Nazwa Broni secweapon[3,1] = 0.15; //Szybkośc Strzelania * room_speed // 1 = 1sec; secweapon[3,2] = 1.7; //Szybkość Przeładowania * room_Speed // 1 = 1sec; secweapon[3,3] = 5; //Minimalna Penetracja Pancerza secweapon[3,4] = 10; //Maksymalna Penetracja Pancerza secweapon[3,5] = 2; //Typ Używanej Amunicji //// 9mm secweapon[3,6] = 0; //Ilość Amunicji w Magazynku secweapon[3,7] = 25; //Maksymalna Ilość Amunicji w Magazynku secweapon[4,0] = "Better Pistol"; //Nazwa Broni secweapon[4,1] = 0.15; //Szybkośc Strzelania * room_speed // 1 = 1sec; secweapon[4,2] = 1.5; //Szybkość Przeładowania * room_Speed // 1 = 1sec; secweapon[4,3] = 7; //Minimalna Penetracja Pancerza secweapon[4,4] = 12; //Maksymalna Penetracja Pancerza secweapon[4,5] = 2; //Typ Używanej Amunicji //// 9mm secweapon[4,6] = 0; //Ilość Amunicji w Magazynku secweapon[4,7] = 30; //Maksymalna Ilość Amunicji w Magazynku secweapon[5,0] = "Police Pistol"; //Nazwa Broni secweapon[5,1] = 0.15; //Szybkośc Strzelania * room_speed // 1 = 1sec; secweapon[5,2] = 1.5; //Szybkość Przeładowania * room_Speed // 1 = 1sec; secweapon[5,3] = 8; //Minimalna Penetracja Pancerza secweapon[5,4] = 14; //Maksymalna Penetracja Pancerza secweapon[5,5] = 2; //Typ Używanej Amunicji //// 9mm secweapon[5,6] = 0; //Ilość Amunicji w Magazynku secweapon[5,7] = 25; //Maksymalna Ilość Amunicji w Magazynku secweapon[6,0] = "Special Forces Pistol"; //Nazwa Broni secweapon[6,1] = 0.15; //Szybkośc Strzelania * room_speed // 1 = 1sec; secweapon[6,2] = 1.5; //Szybkość Przeładowania * room_Speed // 1 = 1sec; secweapon[6,3] = 8; //Minimalna Penetracja Pancerza secweapon[6,4] = 18; //Maksymalna Penetracja Pancerza secweapon[6,5] = 3; //Typ Używanej Amunicji //// 5.56mm secweapon[6,6] = 0; //Ilość Amunicji w Magazynku secweapon[6,7] = 20; //Maksymalna Ilość Amunicji w Magazynku secweapon[7,0] = "Metal Made Pistol"; //Nazwa Broni secweapon[7,1] = 0.4; //Szybkośc Strzelania * room_speed // 1 = 1sec; secweapon[7,2] = 2; //Szybkość Przeładowania * room_Speed // 1 = 1sec; secweapon[7,3] = 15; //Minimalna Penetracja Pancerza secweapon[7,4] = 25; //Maksymalna Penetracja Pancerza secweapon[7,5] = 4; //Typ Używanej Amunicji //// 7.62mm secweapon[7,6] = 0; //Ilość Amunicji w Magazynku secweapon[7,7] = 10; //Maksymalna Ilość Amunicji w Magazynku #endregion #region //Primary Weapons /* primweapon[,0] = "Metal Made Pistol"; //Nazwa Broni primweapon[,1] = 0.3; //Szybkośc Strzelania * room_speed // 1 = 1sec; primweapon[,2] = 1.5; //Szybkość Przeładowania * room_Speed // 1 = 1sec; primweapon[,3] = 3; //Minimalna Penetracja Pancerza primweapon[,4] = 8; //Maksymalna Penetracja Pancerza primweapon[,5] = 2; //Typ Używanej Amunicji //// primweapon[,6] = 0; //Ilość Amunicji w Magazynku primweapon[,7] = 20; //Maksymalna Ilość Amunicji w Magazynku */ primweapon[0,0] = "EMPTY"; //Nazwa Broni primweapon[0,1] = 0; //Szybkośc Strzelania * room_speed // 1 = 1sec; primweapon[0,2] = 0; //Szybkość Przeładowania * room_Speed // 1 = 1sec; primweapon[0,3] = 0; //Minimalna Penetracja Pancerza primweapon[0,4] = 0; //Maksymalna Penetracja Pancerza primweapon[0,5] = 0; //Typ Używanej Amunicji //// primweapon[0,6] = 0; //Ilość Amunicji w Magazynku primweapon[0,7] = 0; //Maksymalna Ilość Amunicji w Magazynku primweapon[1,0] = "BOW"; //Nazwa Broni primweapon[1,1] = 1; //Szybkośc Strzelania * room_speed // 1 = 1sec; primweapon[1,2] = 1; //Szybkość Przeładowania * room_Speed // 1 = 1sec; primweapon[1,3] = 5; //Minimalna Penetracja Pancerza primweapon[1,4] = 15; //Maksymalna Penetracja Pancerza primweapon[1,5] = 1; //Typ Używanej Amunicji //// Arrows primweapon[1,6] = 0; //Ilość Amunicji w Magazynku primweapon[1,7] = 1; //Maksymalna Ilość Amunicji w Magazynku primweapon[2,0] = "Small PM"; //Nazwa Broni primweapon[2,1] = 0.1; //Szybkośc Strzelania * room_speed // 1 = 1sec; primweapon[2,2] = 2; //Szybkość Przeładowania * room_Speed // 1 = 1sec; primweapon[2,3] = 5; //Minimalna Penetracja Pancerza primweapon[2,4] = 12; //Maksymalna Penetracja Pancerza primweapon[2,5] = 2; //Typ Używanej Amunicji //// 9mm primweapon[2,6] = 0; //Ilość Amunicji w Magazynku primweapon[2,7] = 30; //Maksymalna Ilość Amunicji w Magazynku primweapon[3,0] = "Rifle 74"; //Nazwa Broni primweapon[3,1] = 0.3; //Szybkośc Strzelania * room_speed // 1 = 1sec; primweapon[3,2] = 1.5; //Szybkość Przeładowania * room_Speed // 1 = 1sec; primweapon[3,3] = 3; //Minimalna Penetracja Pancerza primweapon[3,4] = 8; //Maksymalna Penetracja Pancerza primweapon[3,5] = 4; //Typ Używanej Amunicji //// 7.62mm primweapon[3,6] = 0; //Ilość Amunicji w Magazynku primweapon[3,7] = 30; //Maksymalna Ilość Amunicji w Magazynku #endregion #region //Special Weapons /* specweapon[,0] = "Metal Made Pistol"; //Nazwa Broni specweapon[,1] = 0.3; //Szybkośc Strzelania * room_speed // 1 = 1sec; specweapon[,2] = 1.5; //Szybkość Przeładowania * room_Speed // 1 = 1sec; specweapon[,3] = 3; //Minimalna Penetracja Pancerza specweapon[,4] = 8; //Maksymalna Penetracja Pancerza specweapon[,5] = 2; //Typ Używanej Amunicji //// 9mm specweapon[,6] = 0; //Ilość Amunicji w Magazynku specweapon[,7] = 20; //Maksymalna Ilość Amunicji w Magazynku */ specweapon[0,0] = "EMPTY"; //Nazwa Broni specweapon[0,1] = 0; //Szybkośc Strzelania * room_speed // 1 = 1sec; specweapon[0,2] = 0; //Szybkość Przeładowania * room_Speed // 1 = 1sec; specweapon[0,3] = 0; //Minimalna Penetracja Pancerza specweapon[0,4] = 0; //Maksymalna Penetracja Pancerza specweapon[0,5] = 0; //Typ Używanej Amunicji //// specweapon[0,6] = 0; //Ilość Amunicji w Magazynku specweapon[0,7] = 0; //Maksymalna Ilość Amunicji w Magazynku specweapon[1,0] = "Wood Rifle"; //Nazwa Broni specweapon[1,1] = 1; //Szybkośc Strzelania * room_speed // 1 = 1sec; specweapon[1,2] = 2; //Szybkość Przeładowania * room_Speed // 1 = 1sec; specweapon[1,3] = 8; //Minimalna Penetracja Pancerza specweapon[1,4] = 25; //Maksymalna Penetracja Pancerza specweapon[1,5] = 3; //Typ Używanej Amunicji //// 9mm specweapon[1,6] = 0; //Ilość Amunicji w Magazynku specweapon[1,7] = 10; //Maksymalna Ilość Amunicji w Magazynku specweapon[2,0] = "Pipe Pump"; //Nazwa Broni specweapon[2,1] = 1; //Szybkośc Strzelania * room_speed // 1 = 1sec; specweapon[2,2] = 1; //Szybkość Przeładowania * room_Speed // 1 = 1sec; specweapon[2,3] = 3; //Minimalna Penetracja Pancerza specweapon[2,4] = 8; //Maksymalna Penetracja Pancerza specweapon[2,5] = 2; //Typ Używanej Amunicji //// 9mm specweapon[2,6] = 0; //Ilość Amunicji w Magazynku specweapon[2,7] = 5; //Maksymalna Ilość Amunicji w Magazynku #endregion #region //Ammunition /* ammunition[,0] = "EMPTY"; //Nazwa Amunicji ammunition[,1] = 0; //Ilość Posiadana ammunition[,2] = 0; //Max Ilość Posiadania ammunition[,3] = 0; //Penetracja ammunition[,4] = 0; //Minimalna Ilość DMG ammunition[,5] = 0; //Maksymalna Ilość DMG ammunition[,6] = 0; //Szybkość Pocisku */ ammunition[0,0] = "EMPTY"; //Nazwa Amunicji ammunition[0,1] = 0; //Ilość Posiadana ammunition[0,2] = 0; //Max Ilość Posiadania ammunition[0,3] = 0; //Penetracja ammunition[0,4] = 0; //Minimalna Ilość DMG ammunition[0,5] = 0; //Maksymalna Ilość DMG ammunition[0,6] = 0; //Szybkość Pocisku ammunition[1,0] = "Arrows"; //Nazwa Amunicji ammunition[1,1] = 5; //Ilość Posiadana ammunition[1,2] = 50; //Max Ilość Posiadania ammunition[1,3] = 20; //Penetracja ammunition[1,4] = 10; //Minimalna Ilość DMG ammunition[1,5] = 25; //Maksymalna Ilość DMG ammunition[1,6] = 30; //Szybkość Pocisku ammunition[2,0] = "9mm"; //Nazwa Amunicji ammunition[2,1] = 50; //Ilość Posiadana ammunition[2,2] = 100; //Max Ilość Posiadania ammunition[2,3] = 5; //Penetracja ammunition[2,4] = 5; //Minimalna Ilość DMG ammunition[2,5] = 15; //Maksymalna Ilość DMG ammunition[2,6] = 50; //Szybkość Pocisku ammunition[3,0] = "5.56mm"; //Nazwa Amunicji ammunition[3,1] = 50; //Ilość Posiadana ammunition[3,2] = 100; //Max Ilość Posiadania ammunition[3,3] = 10; //Penetracja ammunition[3,4] = 10; //Minimalna Ilość DMG ammunition[3,5] = 20; //Maksymalna Ilość DMG ammunition[3,6] = 60; //Szybkość Pocisku ammunition[4,0] = "7.62mm"; //Nazwa Amunicji ammunition[4,1] = 50; //Ilość Posiadana ammunition[4,2] = 100; //Max Ilość Posiadania ammunition[4,3] = 15; //Penetracja ammunition[4,4] = 15; //Minimalna Ilość DMG ammunition[4,5] = 30; //Maksymalna Ilość DMG ammunition[4,6] = 70; //Szybkość Pocisku ammunition[5,0] = "Shotgun Shell"; //Nazwa Amunicji ammunition[5,1] = 10; //Ilość Posiadana ammunition[5,2] = 100; //Max Ilość Posiadania ammunition[5,3] = 5; //Penetracja ammunition[5,4] = 5; //Minimalna Ilość DMG ammunition[5,5] = 15; //Maksymalna Ilość DMG ammunition[5,6] = 30; //Szybkość Pocisku #endregion canshot = true; //Mogę Strzelać canuneq = true; // Mogę Wyrzucić Broń Weapon = secweapon; //Wybieranie Tablicy secweapon, primweapon, specweapon SecSlot = 1; //Slot Broni 1 = Secondary PrimSlot = 1; //Slot Broni 2 = Primary SpecSlot = 0; //Slot Broni 3 = Special ActualSlot = 0; //Aktualnie używany slot; 0 = Sceondary, 1 = Primary, 2 = Special WeaponSlot = 0; //Broń W Danym Slocie WeaponName = ""; //Nazwa Broni ReloadSpeed = 0; //Czas Przeładowania Broni; ReloadSpeedMax = 0; //Czas Przeładowania Broni Max; ShotSpeed = 0; //Szybkość Strzelania; ActualAmmo = 0; //Aktualnie przypisana Amunicja WeaponSprite = 0; //Rysowanie Sprita broni WeaponIndex = 0; //Image_Index Sprite Broni MaxWeaponAmmo = 0; //Maxymalna ilość ammo w broni (maxmag); WeaponMinArmorPen = 0; //Minimalna Penetracja Panerza WeaponMaxArmorPen = 0; //Maksymalna Penetracja Pancerza AmmoPenetration = 0; //Penetracja Ammunicji MinAmmoDMG = 0; //Min DMG Amunicji MaxAmmoDMG = 0; //Max DMG Amunicji MaxEqAmmo = 0; //Max Ammo w EQ AmmoName = ""; //Nazwa Amunicji AmmoSpeed = 0; //Szybkosc Amunicji sspd = 0; //Timer Strzelania rspeed = 0; //Timer Reloadu canreload = true; reload = false; reloadend = false; recoil = 0; // Recoil Broni moverecoilend = 0; // Końcowy Recoil moverecoil = 0; //Recoil Podczas ruchu 0 = Stoje, 1 = Idę, 2 = Bignę, 3 = Sprintuję; dmg = 0; ap = 0; alldmg = 0; STEP: if global.pausegame == false && myDead == false{ //Wybieranie Slotu Broni if reload == false{ if keyboard_check_pressed(ord("1")){ ActualSlot = 0; } if keyboard_check_pressed(ord("2")){ ActualSlot = 1; } if keyboard_check_pressed(ord("3")){ ActualSlot = 2; } } //Wybieranie Broni if (ActualSlot == 0) { //Przypisanie warotści których nie trzeba nadpisywać Weapon = secweapon; WeaponSlot = SecSlot; //Przypisanie broni do slotu; WeaponSprite = 1; //Przypisanie Sprite Broni 1 = s_SceWeaponSprite } else { if (ActualSlot == 1) { Weapon = primweapon; WeaponSlot = PrimSlot; //Przypisanie broni do slotu; WeaponSprite = 2; } else { if (ActualSlot == 2) { Weapon = specweapon; WeaponSlot = SpecSlot; //Przypisanie broni do slotu; WeaponSprite = 3; } } } /* secweapon[,0] = "Metal Made Pistol"; //Nazwa Broni secweapon[,1] = 0.3; //Szybkośc Strzelania * room_speed // 1 = 1sec; secweapon[,2] = 1.5; //Szybkość Przeładowania * room_Speed // 1 = 1sec; secweapon[,3] = 3; //Minimalna Penetracja Pancerza secweapon[,4] = 8; //Maksymalna Penetracja Pancerza secweapon[,5] = 2; //Typ Używanej Amunicji //// 9mm secweapon[,6] = 0; //Ilość Amunicji w Magazynku secweapon[,7] = 20; //Maksymalna Ilość Amunicji w Magazynku ammunition[,0] = "EMPTY"; //Nazwa Amunicji ammunition[,1] = 0; //Ilość Posiadana ammunition[,2] = 0; //Max Ilość Posiadania ammunition[,3] = 0; //Penetracja ammunition[,4] = 0; //Minimalna Ilość DMG ammunition[,5] = 0; //Maksymalna Ilość DMG ammunition[,6] = 0; //Szybkość Pocisku */ ActualAmmo = Weapon[WeaponSlot,5]; //Przypisanie typu ammunicji; ReloadSpeed = Weapon[WeaponSlot,2]*room_speed; //Przypisanie szybkości przeładowania; ReloadSpeedMax = Weapon[WeaponSlot,2]*room_speed; //Przypisanie Maxymalnej szybkości przeładowania; ShotSpeed = Weapon[WeaponSlot,1]; //Przypisanie szybkości strzelania; WeaponName = Weapon[WeaponSlot,0]; //Przypisanie Nazwy Broni MaxWeaponAmmo = Weapon[WeaponSlot,7]; //Przypisanie Maksymalnej ilości Ammo w Broni WeaponMinArmorPen = Weapon[WeaponSlot,3]; //Przypisanie Minimalnej Penetracji Pocisku Przez Broń WeaponMaxArmorPen = Weapon[WeaponSlot,4]; //Przypisanie Maksymalnej Penetracji Pocisku Przez Broń WeaponIndex = WeaponSlot; //Przypisanie Indexu Sprite Broni MinAmmoDMG = ammunition[ActualAmmo,4]; //Przypisanie Minimalnego DMG z Amunicji MaxAmmoDMG = ammunition[ActualAmmo,5]; //Przypisanie Maksymalnego DMG z Amunicji AmmoPenetration = ammunition[ActualAmmo,3]; //Pryzpisanie Penetracji Pancerza z Amunicji MaxEqAmmo = ammunition[ActualAmmo,2]; //Przypisanie Maksymalnej ilości Ammo w EQ AmmoName = ammunition[ActualAmmo,0]; //Przypisanie Nazwy Amunicji AmmoSpeed = ammunition[ActualAmmo,6]; #region // LOSOWANIE SZANSY NA TRAFIENIE DANEJ CZĘŚCI CIAŁA PATRZĄC NA PROSZUANIE SIĘ POSTACI if movement == true{ if imwalk == true{ // jezeli ide na shift headproc = 60; torsproc = 30; armproc = 20; legproc = 10; missproc = 0; } if imrun == true { // jezeli sprintuje headproc = 97; torsproc = 70; armproc = 50; legproc = 40; missproc = 0; } if imrunn == true{ // jezeli truchtam headproc = 80; torsproc = 55; armproc = 40; legproc = 20; missproc = 0; } } else { // jezeli stoje headproc = 50; torsproc = 25; armproc = 15; legproc = 5; missproc = 0; } randomize() // upewniamy się że seed będzie losowy i da losowe wyniki procent = irandom(100); //Zawsze domyślnie nie trafisz bodyshot = 6; //Ale jesli procent bedzie dobry to trafisz przynajmniej to if procent > legproc { //wieksze od 10 bodyshot = round(irandom_range(4,5)); } //A jak bedzie lepszy to już to trafisz. if procent > armproc { //wieksze od 25 bodyshot = round(irandom_range(2,3)); //Ten warunek jak się spełni to nadpisze poprzednią zmianę "bodyshot" więc nie musisz się martwić o sprawdzanie Min-max } if procent > torsproc { //wieksze od 30 bodyshot = 1; } if procent > headproc { //wieksze od 90 bodyshot = 0; } #endregion //recoil = 0; // recoil //moverecoilmin = -1; // zmieniajaca wartosc na - //moverecoilend = 0; // koncowy recoil //moverecoil = 0; // stan recoilu = 0, jak stoi, 1 jak idzie, 2 jak truchta, 3 jak biegnie; recoil = random_range(-5,5); moverecoilend = (moverecoil * recoil) / global.recoilskill; dmg = round(irandom_range(MinAmmoDMG,MaxAmmoDMG)); ap = round(irandom_range(WeaponMinArmorPen,WeaponMaxArmorPen)); if global.expmenu == false { #region //SHOT CODE if mouse_check_button(mb_left) { if canshot == true && reload == false { if global.UnAmmo == false { if Weapon[WeaponSlot,6] > 0 { canshot = false; alldmg = ((dmg + ap) + AmmoPenetration); if WeaponName = "BOW"{ inst = instance_create_layer(x,y,"Instances",o_arrow); inst.speed = AmmoSpeed; inst.spdd = AmmoSpeed; inst.direction = direction; inst.image_angle = direction; inst.ap = ap; inst.dmg = alldmg; inst.bshot = bodyshot; global.lastdmg = alldmg; sspd = ShotSpeed; Weapon[WeaponSlot,6] -= 1; } else { shel = instance_create_layer(x,y,"Instances",o_shell); inst = instance_create_layer(x,y,"Instances",o_bullet); inst.speed = AmmoSpeed; inst.spdd = AmmoSpeed; inst.direction = direction + moverecoilend; inst.image_angle = direction + + moverecoilend; inst.ap = ap; inst.dmg = alldmg; inst.bshot = bodyshot; sspd = ShotSpeed; Weapon[WeaponSlot,6] -= 1; } } } else { //if global unammo = true canshot = false; alldmg = ((dmg + ap) + AmmoPenetration); if WeaponName = "BOW"{ inst = instance_create_layer(x,y,"Instances",o_arrow); inst.speed = AmmoSpeed; inst.spdd = AmmoSpeed; inst.direction = direction; inst.image_angle = direction; inst.ap = ap; inst.dmg = alldmg; inst.bshot = bodyshot; global.lastdmg = alldmg; sspd = ShotSpeed; } else { shel = instance_create_layer(x,y,"Instances",o_shell); inst = instance_create_layer(x,y,"Instances",o_bullet); inst.speed = AmmoSpeed; inst.spdd = AmmoSpeed; inst.direction = direction + moverecoilend; inst.image_angle = direction + + moverecoilend; inst.ap = ap; inst.dmg = alldmg; inst.bshot = bodyshot; sspd = ShotSpeed; } } } } if canshot = false && reload = false{ if sspd > 0{ sspd -= 1; } else { canshot = true; } #endregion #region //RELOAD CODE /* secweapon[0,0] = "Metal Made Pistol"; //Nazwa Broni secweapon[0,1] = 0.3; //Szybkośc Strzelania * room_speed // 1 = 1sec; secweapon[0,2] = 1.5; //Szybkość Przeładowania * room_Speed // 1 = 1sec; secweapon[0,3] = 3; //Minimalna Penetracja Pancerza secweapon[0,4] = 8; //Maksymalna Penetracja Pancerza secweapon[0,5] = 2; //Typ Używanej Amunicji //// 9mm secweapon[0,6] = 0; //Ilość Amunicji w Magazynku secweapon[0,7] = 20; //Maksymalna Ilość Amunicji w Magazynku ammunition[0,0] = "EMPTY"; //Nazwa Amunicji ammunition[0,1] = 0; //Ilość Posiadana ammunition[0,2] = 0; //Max Ilość Posiadania ammunition[0,3] = 0; //Penetracja ammunition[0,4] = 0; //Minimalna Ilość DMG ammunition[0,5] = 0; //Maksymalna Ilość DMG ammunition[,6] = 0; //Szybkość Pocisku */ if (WeaponName = "BOW") // JEZE BRON TO ŁUK { if (canreload == true) { // JEZELI MOGĘ PRZEŁADOWAĆ if ((Weapon[WeaponSlot,6] < MaxWeaponAmmo) && (ammunition[ActualAmmo,1] > 0)) // JEŻELI AMMO JEST MNIEJSZE OD MAX AMMO I EQ AMMO JEST WIEKSZE OD 0 { canshot = false; // NIE MOGE STRZELIC canreload = false; // NIE MOGE PRZELADOWAC reload = true; // PRZELADOWANIE rspeed = ReloadSpeed; // SZYBKOSC PRZELADOWANIA } } } else { // JEZELI NIE JEST LUKIEM if keyboard_check_pressed(ord("R")) { if (canreload == true){ if (ammunition[ActualAmmo,1] > 0) { if (Weapon[WeaponSlot,6] < MaxWeaponAmmo) { canshot = false; canreload = false; reload = true; rspeed = ReloadSpeed; var mage; mage = instance_create_layer(x,y,"Instances",o_Mag); mage.mag = ActualAmmo; } } } } } if reload == true { show_debug_message("PRZELADOWYWUJE"); show_debug_message("rspeed: "+string(rspeed)); if rspeed > 0{ rspeed -= 1; show_debug_message("rspeed -= 1"); show_debug_message("rspeed: "+string(rspeed)); } else { reloadend = true; show_debug_message("rspeed: "+string(rspeed)); show_debug_message("END RELOAD"); } } if reloadend == true { show_debug_message("RELOAD END = TRUE"); /* secweapon[0,0] = "Metal Made Pistol"; //Nazwa Broni secweapon[0,1] = 0.3; //Szybkośc Strzelania * room_speed // 1 = 1sec; secweapon[0,2] = 1.5; //Szybkość Przeładowania * room_Speed // 1 = 1sec; secweapon[0,3] = 3; //Minimalna Penetracja Pancerza secweapon[0,4] = 8; //Maksymalna Penetracja Pancerza secweapon[0,5] = 2; //Typ Używanej Amunicji //// 9mm secweapon[0,6] = 0; //Ilość Amunicji w Magazynku secweapon[0,7] = 20; //Maksymalna Ilość Amunicji w Magazynku ammunition[0,0] = "EMPTY"; //Nazwa Amunicji ammunition[0,1] = 0; //Ilość Posiadana ammunition[0,2] = 0; //Max Ilość Posiadania ammunition[0,3] = 0; //Penetracja ammunition[0,4] = 0; //Minimalna Ilość DMG ammunition[0,5] = 0; //Maksymalna Ilość DMG ammunition[,6] = 0; //Szybkość Pocisku */ var a; a = MaxWeaponAmmo - Weapon[WeaponSlot,6]; // a = maxammo (30) - ammo w magazynku (25) == 5 ammo do doadania; show_debug_message("A = "+string(a)); if ammunition[ActualAmmo,1] > a { // jeżeli ammo w eq jest wieksze od a(5) teraz jest 100 wiec jest wieksze 100 > 5 show_debug_message("Ilosc ammo > a"); Weapon[WeaponSlot,6] += a; // dodaj 5 ammo show_debug_message("DODAJ AMMO DO MAG"); ammunition[ActualAmmo,1] -= a; // odejmij 5 ammo show_debug_message("ODEJMIJ AMMO Z EQ"); } else { // jeżeli ammo w eq jest mniejsze od a(5) (np 3) dodaj reszte naboi z eq Weapon[WeaponSlot,6] += ammunition[ActualAmmo,1]; show_debug_message("DODAJRESZTE AMMO"); ammunition[ActualAmmo,1] = 0; show_debug_message("USTAWIA EQAMMO NA 0"); } reloadend = false; show_debug_message("RELOAD END = FALSE"); reload = false; show_debug_message("RELOAD = FALSE"); canreload = true; show_debug_message("CANRELOAD = TRUE"); canshot = true; show_debug_message("CANSHOT = TRUE"); } #endregion #endregion } //global.Expmenu == false; end } //global.pausegame = false && mydead == false; end
- 4 odpowiedzi
-
- tablica
- strzelanie
-
(i 2 więcej)
Oznaczone tagami:
-
Dzięki Threef, znowu zrobiłem sobie pod górkę, kombinowaniem, wyjdę z roboty, będę testował ? Pozdrawiam.
-
Wróciłem i jak zwykle mam pytanie. Otóż wiem jak się liczy procenty ale nie wiem jak mam to wykorzystać. Jak napisać kod, który daje mi np 100-90% szans, że trafię w głowę, 90-75 % szans, że trafię w tors, 75-45% szans, że trafię w rękę, 45-20% szans, że trafię w nogę i 20-0%, że nie trafię w ogóle. Napisałem coś takiego bez procentów, ale nie działa poprawnie, bo losowanie liczby to dalej losowanie :/ step postaci: if imwalk == true{ // jeżeli idę maxhead = 100; minhead = 90; maxtorso = 90; mintorso = 30; maxarm = 30; minarm = 25; maxleg = 25; minleg = 10; maxmiss = 10; minmiss = 0; } create pocisku: var tt = irandom(1.1); procent = lerp(0,100,tt); step pocisku: if procent > minhead && procent < maxhead{ bodyshot = 0; } else { if procent > mintorso && procent < maxtorso{ bodyshot = 1; } else { if procent > minarm && procent < maxarm{ bodyshot = round(irandom_range(2,3)); } else { if procent > minleg && procent < maxleg{ bodyshot = round(irandom_range(4,5)); } else { if procent > minmiss && procent < maxmiss{ bodyshot = 6; } } } }
-
Tak znowu ja, tak dalej mam pierdołę GMS 2! W Create mam tablicę dwuwymiarową broni, weapon[1,1] = 20 //Posiadana ilość amunicji W stepie wpisałem kod ammo = weapon[weaponh,1] gdzie weaponh jest aktualnie wybraną bronią i tutaj zaczynają się cuda... (w GMS zawsze działało to normalnie) w Evencie Global Mosue Left Down po wpisaniu na próbę ammo -= 1; nie ma reakcji... totalne 0 (mam debugowanie na draw'ach więc widzę czy ubywa czy nie) Po stworzeniu w stepie kodu: if mouse_check_button(mb_left){ if weaponh > 0{ if ammo > 0 { ammo -= 1; } } } Amunicji ubywa po naciśnięciu i trzymaniu LPM tylko o 1, po puszczeniu wraca do poziomu 20, siedzę myślę i dalej nie wiem co zrobiłem źle, a jak zrobiłem to pewnie jakąś pierdołę, której nie widzę :/ CREATE: // SECONDARY // weapon[1,0] = true; // Have Weapon weapon[1,1] = 20; // Ammo weapon[1,2] = 20; // Max Ammo weapon[1,3] = 2; // Mag weapon[1,4] = 3; // Max Mag weapon[1,5] = 1; // Reload Time weapon[1,6] = 1; // Shot Time weapon[1,7] = 5; // DMG weapon[1,8] = 15; // MAX DMG weapon[1,9] = 3; // Armor Penetration weapon[1,10] = "Test1"; // Name STEP: ammo = weapon[weaponh,1]; maxammo = weapon[weaponh,2]; mag = weapon[weaponh,3]; maxmag = weapon[weaponh,4]; reloadtime = weapon[weaponh,5]; shottime = weapon[weaponh,6]; dmg = weapon[weaponh,7]; maxdmg = weapon[weaponh,8]; armorp = weapon[weaponh,9]; weapname = weapon[weaponh,10];
-
Wszystko działa dobrze :/ jednak dalej jak staję obok broni, tak by zaliczyło kolizję to, teleportuje broń na postać... Dziwne... EDIT3: NIŻEJ; EDIT4: Spróbuję zamienić else na przełącznik... zobaczę jak to będzie działać. EDIT5: Na samym dnie :/ EDIT1: Cholera zapomniałem edytować posta wyżej :o... EDIT2: A ch**a nie wygląda dobrze... Zebrałem broń, gdy nie posiadałem żadnej, więc powinien iść tylko debug: GML primweap Jest większe od 5 // 1 Początek primweap = 0; // 3 początek other.mag + mag <= maxmag // 3 koniec // 1 Koniec</span></span></span></span></span></span></span></span></span></span></span> A dodatkowo wykonuje to GML primweap Jest większe od 5 // 1 Początek primweap != 0; // 4 początek other.mag + mag <= maxmag Tworzenie nowej bronii //4 Koniec // 1 Koniec</span></span></span></span></span></span></span></span></span></span></span> Jeszcze to obadam zaraz... Próba1 : GML Resizing fullscreen window.. Resizing swap chain.. primweap Jest większe od 5 // 1 Początek primweap = 0; // 3 początek other.mag + mag <= maxmag // 3 koniec // 1 Koniec primweap Jest większe od 5 // 1 Początek primweap != 0; // 4 początek other.mag + mag <= maxmag Tworzenie nowej bronii //4 Koniec // 1 Koniec primweap Jest większe od 5 // 1 Początek primweap != 0; // 4 początek other.mag + mag <= maxmag Tworzenie nowej bronii //4 Koniec // 1 Koniec primweap Jest większe od 5 // 1 Początek primweap != 0; // 4 początek other.mag + mag <= maxmag Tworzenie nowej bronii //4 Koniec // 1 Koniec Attempting to set gamepadcount to 0 --------------------------------------------------------------- minFPS, maxFPS, avgFPS -31, 1310, 363 --------------------------------------------------------------- --------------------------------------------------------------- minFPS, maxFPS, avgFPS -31, 1310, 363 --------------------------------------------------------------- C:\ProgramData/GameMakerStudio2/Cache/runtimes\runtime-2.0.7.110/windows/Runner.exe DONE (0) Igor complete. elapsed time 00:00:19.3177988s for command "C:\ProgramData/GameMakerStudio2/Cache/runtimes\runtime-2.0.7.110/bin/Igor.exe" -options="C:\Users\HieNa\AppData\Local\GameMakerStudio2\GMS2TEMP\build.bff" -- Windows Run started at 06/24/2017 07:49:15 SUCCESS: Run Program Complete EDIT3: Tu cię mam gagatku. Zrobiłem myk, Podniosłem broń, wymusiłem nowy debug msg (że podniosę drugą broń), podlazłem wcisnąłem "E", nie wzięło broni, to dawaj drugi raz wymuszony debug msg i proszę, kod nie działa jak powinien :D Dzięki za dobrą wskazówkę, bo wcześniej tego nie znałem, a w gm już dłubałem wiele razy :). Teraz można pomyśleć jak to naprawić :), Tylko jak? haha dodać alarmy? W stepie jeżeli zmienna = true? Bo już sam nie wiem :D Próba 2: GML Resizing fullscreen window.. Resizing swap chain.. primweap Jest większe od 5 // 1 Początek primweap = 0; // 3 początek other.mag + mag <= maxmag // 3 koniec // 1 Koniec // Podniosłem jedną, będę podnosił drugą primweap Jest większe od 5 // 1 Początek primweap != 0; // 4 początek other.mag + mag <= maxmag Tworzenie nowej bronii //4 Koniec // 1 Koniec primweap Jest większe od 5 // 1 Początek primweap != 0; // 4 początek other.mag + mag <= maxmag Tworzenie nowej bronii //4 Koniec // 1 Koniec // Podniosłem jedną, będę podnosił drugą primweap Jest większe od 5 // 1 Początek primweap != 0; // 4 początek other.mag + mag <= maxmag Tworzenie nowej bronii //4 Koniec // 1 Koniec Attempting to set gamepadcount to 0 --------------------------------------------------------------- minFPS, maxFPS, avgFPS -31, 1364, 347 --------------------------------------------------------------- --------------------------------------------------------------- minFPS, maxFPS, avgFPS -31, 1364, 347 --------------------------------------------------------------- C:\ProgramData/GameMakerStudio2/Cache/runtimes\runtime-2.0.7.110/windows/Runner.exe DONE (0) Igor complete. elapsed time 00:00:17.8518242s for command "C:\ProgramData/GameMakerStudio2/Cache/runtimes\runtime-2.0.7.110/bin/Igor.exe" -options="C:\Users\HieNa\AppData\Local\GameMakerStudio2\GMS2TEMP\build.bff" -- Windows Run started at 06/24/2017 08:02:18 SUCCESS: Run Program Complete Kod: [Poprawiony, wywaliłem niepotrzebne instance_destroy(other);] GML if keyboard_check_pressed(ord("E")){ if other.weap > 5{ show_debug_message("primweap Jest większe od 5 // 1 Początek") if primweap = other.weap{ show_debug_message("Jest = other.weap // 2 początek") if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{ show_debug_message("other.mag + mag <= maxmag") global.weaponid[other.weap,5] += other.mag; other.mag = 0; } else { show_debug_message("other.mag + mag > maxmag") var a = global.weaponid[other.weap,6] - global.weaponid[other.weap,5]; global.weaponid[other.weap,5] += a; other.mag -= a; } show_debug_message("// 2 koniec") } else { if primweap = 0{ show_debug_message("primweap = 0; // 3 początek") primweap = other.weap; primammo = other.ammo; if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{ show_debug_message("other.mag + mag <= maxmag") global.weaponid[other.weap,5] += other.mag; instance_destroy(other); } else { show_debug_message("other.mag + mag > maxmag") var a = global.weaponid[other.weap,6] - global.weaponid[other.weap,5] global.weaponid[other.weap,5] += a; instance_destroy(other); } show_debug_message("// 3 koniec") } else { show_debug_message("primweap != 0; // 4 początek") var oldammo, oldweap, oldweapinst; oldammo = primammo; oldweap = primweap; primweap = other.weap; primammo = other.ammo; if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{ show_debug_message("other.mag + mag <= maxmag") global.weaponid[other.weap,5] += other.mag; instance_destroy(other); } else { show_debug_message("other.mag + mag > maxmag") var a = global.weaponid[other.weap,6] - global.weaponid[other.weap,5]; global.weaponid[other.weap,5] += a; instance_destroy(other); } show_debug_message("Tworzenie nowej bronii") oldweapinst = instance_create_layer(x,y,"Instances",o_WeaponOld); oldweapinst.ammo = oldammo; oldweapinst.weap = oldweap; oldweapinst.mag = 0; show_debug_message("//4 Koniec") } } show_debug_message("// 1 Koniec") } } Napisałem nowy kod: (spoilery nie działają z [g ml] :/ GML var a, b, cse; if keyboard_check_pressed(ord("E")){ show_debug_message("//Sprawdzam czy nie jest pistoletem"); if other.weap > 5{ show_debug_message("//Sprawdzam czy bronie główne są takie same"); if primweap = other.weap{ show_debug_message("//Bronie główne są takie same"); cse = 1; } else { show_debug_message("//Bronie główne są różne"); show_debug_message("//Sprawdzam czy posiadam główną broń w EQ"); if primweap = 0{ show_debug_message("//Nie posiadam broni głównej"); cse = 2; } else { show_debug_message("//Posiadam broń główną"); cse = 3; } } } switch(cse){ case 1: show_debug_message("//Sprawdzam Stan Amunicji"); if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{ show_debug_message("//Magazynków jest mniej, niż ilość maxymalna więc zabieram wszystko"); global.weaponid[other.weap,5] += other.mag; other.mag = 0; } else { show_debug_message("//Magazynków jest więcej niż ilość maxymalna, więc sprawdzam ilę mogę wziąć"); a = global.weaponid[other.weap,6] - global.weaponid[other.weap,5]; global.weaponid[other.weap,5] += a; other.mag -= a; } show_debug_message("//Dodałem magazynki"); break; ///////////////////////// case 2: primweap = other.weap; primammo = other.ammo; if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{ show_debug_message("//Magazynków jest mniej, niż ilość maxymalna więc zabieram wszystko"); global.weaponid[other.weap,5] += other.mag; instance_destroy(other); } else { show_debug_message("//Magazynków jest więcej niż ilość maxymalna, więc sprawdzam ilę mogę wziąć"); a = global.weaponid[other.weap,6] - global.weaponid[other.weap,5] global.weaponid[other.weap,5] += a; instance_destroy(other); } show_debug_message("//Podniosłem broń do pustego slotu."); break; ///////////////////////// case 3: show_debug_message("//Zaczynam zamianę broni.") var oldammo, oldweap, oldweapinst; oldammo = primammo; show_debug_message("//Zapisuję starą ilość ammo"); oldweap = primweap; show_debug_message("//Zapisuję stare id broni"); primweap = other.weap; show_debug_message("//Zamieniam broń na nową broń"); primammo = other.ammo; show_debug_message("//Zamieniam ammo na nową wartość ammo"); show_debug_message("//Sprawdzam Stan Amunicji"); if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{ show_debug_message("//Magazynków jest mniej, niż ilość maxymalna więc zabieram wszystko"); global.weaponid[other.weap,5] += other.mag; instance_destroy(other); } else { show_debug_message("//Magazynków jest więcej niż ilość maxymalna, więc sprawdzam ilę mogę wziąć"); var a = global.weaponid[other.weap,6] - global.weaponid[other.weap,5]; global.weaponid[other.weap,5] += a; instance_destroy(other); } show_debug_message("//Tworzenie nowej broni:") oldweapinst = instance_create_layer(x,y,"Instances",o_WeaponOld); show_debug_message("//Tworzę instancję przez zmienną"); oldweapinst.ammo = oldammo; show_debug_message("//Dodaję do instancji starą amunicję"); oldweapinst.weap = oldweap; show_debug_message("//Nadaję broni ID"); oldweapinst.mag = 0; show_debug_message("//Ustalam ilość magazynków na 0"); show_debug_message("//Koniec zamiany broni") break; ///////////////////////// case 4: // break; ///////////////////////// case 5: break; ////////////////////////// } } Ale i to nie pomogło :/ Klops jest teraz taki, że Podniosłem broń nr1, wcisnąłem wymuszony debug msg, i starałem się podnieść drugą, nie udało się dalej wcisnąłem debug msg, i w tedy podniosłem broń, ale widzę po kodzie, że dwa razy wykonuje mi kod zmiany broni, coś jest nie tak i już nie wiem co :c GML Resizing fullscreen window.. Resizing swap chain.. //Sprawdzam czy nie jest pistoletem //Sprawdzam czy bronie główne są takie same //Bronie główne są różne //Sprawdzam czy posiadam główną broń w EQ //Nie posiadam broni głównej //Magazynków jest mniej, niż ilość maxymalna więc zabieram wszystko //Podniosłem broń do pustego slotu. // Podniosłem jedną, będę podnosił drugą //Sprawdzam czy nie jest pistoletem //Sprawdzam czy bronie główne są takie same //Bronie główne są różne //Sprawdzam czy posiadam główną broń w EQ //Posiadam broń główną //Zaczynam zamianę broni. //Zapisuję starą ilość ammo //Zapisuję stare id broni //Zamieniam broń na nową broń //Zamieniam ammo na nową wartość ammo //Sprawdzam Stan Amunicji //Magazynków jest mniej, niż ilość maxymalna więc zabieram wszystko //Tworzenie nowej broni: //Tworzę instancję przez zmienną //Dodaję do instancji starą amunicję //Nadaję broni ID //Ustalam ilość magazynków na 0 //Koniec zamiany broni //Sprawdzam czy nie jest pistoletem //Sprawdzam czy bronie główne są takie same //Bronie główne są różne //Sprawdzam czy posiadam główną broń w EQ //Posiadam broń główną //Zaczynam zamianę broni. //Zapisuję starą ilość ammo //Zapisuję stare id broni //Zamieniam broń na nową broń //Zamieniam ammo na nową wartość ammo //Sprawdzam Stan Amunicji //Magazynków jest mniej, niż ilość maxymalna więc zabieram wszystko //Tworzenie nowej broni: //Tworzę instancję przez zmienną //Dodaję do instancji starą amunicję //Nadaję broni ID //Ustalam ilość magazynków na 0 //Koniec zamiany broni // Podniosłem jedną, będę podnosił drugą //Sprawdzam czy nie jest pistoletem //Sprawdzam czy bronie główne są takie same //Bronie główne są różne //Sprawdzam czy posiadam główną broń w EQ //Posiadam broń główną //Zaczynam zamianę broni. //Zapisuję starą ilość ammo //Zapisuję stare id broni //Zamieniam broń na nową broń //Zamieniam ammo na nową wartość ammo //Sprawdzam Stan Amunicji //Magazynków jest mniej, niż ilość maxymalna więc zabieram wszystko //Tworzenie nowej broni: //Tworzę instancję przez zmienną //Dodaję do instancji starą amunicję //Nadaję broni ID //Ustalam ilość magazynków na 0 //Koniec zamiany broni Attempting to set gamepadcount to 0 --------------------------------------------------------------- minFPS, maxFPS, avgFPS -31, 1319, 420 --------------------------------------------------------------- --------------------------------------------------------------- minFPS, maxFPS, avgFPS -31, 1319, 420 --------------------------------------------------------------- C:\ProgramData/GameMakerStudio2/Cache/runtimes\runtime-2.0.7.110/windows/Runner.exe DONE (0) Igor complete. elapsed time 00:00:14.9509962s for command "C:\ProgramData/GameMakerStudio2/Cache/runtimes\runtime-2.0.7.110/bin/Igor.exe" -options="C:\Users\HieNa\AppData\Local\GameMakerStudio2\GMS2TEMP\build.bff" -- Windows Run started at 06/24/2017 11:08:41 SUCCESS: Run Program Complete
-
Zrobię sąsiadce laptopa, ogarnę ten temat i napiszę co i jak. Ale wygląda na to, że kod cały się wykonuje skoro działa. Tylko jest ten glitch, że muszę kliknąć dwa razy E by podnieść broń :/ Coś będę modził :D
-
Mam problem z kodem zmiany broni. Po pierwszym kliknięciu "E" broń leżąca na ziemi zmienia x i y na x i y postaci, po drugim wciśnięciu "E" broń dopiero się zmienia... Jest to upierdliwe :/ Collision Code with o_WeaponParent: GML if keyboard_check_pressed(ord("E")){ if other.weap > 5{ if primweap = other.weap{ if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{ global.weaponid[other.weap,5] += other.mag; other.mag = 0; } else { var a = global.weaponid[other.weap,6] - other.mag; global.weaponid[other.weap,5] += a; other.mag -= a; } } else { if primweap = 0{ primweap = other.weap; primammo = other.ammo; if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{ global.weaponid[other.weap,5] += other.mag; instance_destroy(other); } else { var a = global.weaponid[other.weap,6] - other.mag; global.weaponid[other.weap,5] += a; instance_destroy(other); } instance_destroy(other); } else { var oldammo, oldweap, oldweapinst; oldammo = primammo; oldweap = primweap; primweap = other.weap; primammo = other.ammo; if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{ global.weaponid[other.weap,5] += other.mag; instance_destroy(other); } else { var a = global.weaponid[other.weap,6] - other.mag; global.weaponid[other.weap,5] += a; instance_destroy(other); } oldweapinst = instance_create_layer(x,y,"Instances",o_WeaponOld); oldweapinst.ammo = oldammo; oldweapinst.weap = oldweap; oldweapinst.mag = 0; instance_destroy(other); } } } else { if secweap = other.weap{ if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{ global.weaponid[other.weap,5] += other.mag; other.mag = 0; } else { var a = global.weaponid[other.weap,6] - other.mag; global.weaponid[other.weap,5] += a; other.mag -= a; } } else { if secweap = 0{ secweap = other.weap; secammo = other.ammo; if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{ global.weaponid[other.weap,5] += other.mag; instance_destroy(other); } else { var a = global.weaponid[other.weap,6] - other.mag; global.weaponid[other.weap,5] += a; instance_destroy(other); } instance_destroy(other); } else { var oldammo, oldweap, oldweapinst; oldammo = secammo; oldweap = secweap; secweap = other.weap; secammo = other.ammo; if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{ global.weaponid[other.weap,5] += other.mag; instance_destroy(other); } else { var a = global.weaponid[other.weap,6] - other.mag; global.weaponid[other.weap,5] += a; instance_destroy(other); } oldweapinst = instance_create_layer(x,y,"Instances",o_WeaponOld); oldweapinst.ammo = oldammo; oldweapinst.weap = oldweap; oldweapinst.mag = 0; instance_destroy(other); } } } } //} /* global.weaponid[16,0] = "Pumpo"; // name global.weaponid[16,1] = 20; // dmg global.weaponid[16,2] = 40; // AP global.weaponid[16,3] = 10; // Ammo global.weaponid[16,4] = 10; // Max Ammo global.weaponid[16,5] = 0; // Mag global.weaponid[16,6] = 5; // Max mag global.weaponid[16,7] = 0; // empty mag global.weaponid[16,8] = sou_Pumpo; // sound global.weaponid[16,9] = room_speed*4; // reload time global.weaponid[16,10] = room_speed*1; // shoting time global.weaponid[16,11] = 0; // mag ammo ///////////////////////////////*/ GML other.weap //jest to id broni jaką posiada objekt do losowania broni. primweap //zmienna broni głównej other.mag //zmienna ile jest magazynków przy broni. global.weaponid[other.weap,5] //posiadana ilość magazynków, global.weaponid[other.weap,6] //maxymalna ilość magazynków; other.ammo //posiadana amunicja przez obiekt other.weap > 5 //jeżeli nie jest to pistoletem, to przypisuje do slotu głównej broni oldammo //aktualnie posiadana amunicja do danej broni oldweap //id broni oldweapinst //nowa instancja broni primammo //amunicja do głównej broni</span></span> W postaci mam jeszcze zmienną, którą broń posiadam GML usedweap; // jest = 0(pistolety) lub 1(karabiny); to jest czy używam primweap czy secweap</span>
-
Na przyszłość będę pamiętał o komentarzach do kodu. Kod pisałem ja :), broń to zmienna, nie instancja, później będę rysował po prostu dany sprite, czy to przeładowania czy po prostu chodzenia z bronią. GML other.weap //jest to id broni jaką posiada objekt do losowania broni. primweap //zmienna broni głównej other.mag //zmienna ile jest magazynków przy broni. global.weaponid[other.weap,5] //posiadana ilość magazynków, global.weaponid[other.weap,6] //maxymalna ilość magazynków; other.ammo //posiadana amunicja przez obiekt other.weap > 5 //jeżeli nie jest to pistoletem, to przypisuje do slotu głównej broni oldammo //aktualnie posiadana amunicja do danej broni oldweap //id broni oldweapinst //nowa instancja broni primammo //amunicja do głównej broni</span> W postaci mam jeszcze zmienną, którą broń posiadam GML usedweap; // jest = 0(pistolety) lub 1(karabiny); to jest czy używam primweap czy secweap
-
Mam problem z kodem zmiany broni. Po pierwszym kliknięciu "E" broń leżąca na ziemi zmienia x i y na x i y postaci, po drugim wciśnięciu "E" broń dopiero się zmienia... Jest to upierdliwe :/ Collision Code with o_WeaponParent: GML if keyboard_check_pressed(ord("E")){ if other.weap > 5{ if primweap = other.weap{ if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{ global.weaponid[other.weap,5] += other.mag; other.mag = 0; } else { var a = global.weaponid[other.weap,6] - other.mag; global.weaponid[other.weap,5] += a; other.mag -= a; } } else { if primweap = 0{ primweap = other.weap; primammo = other.ammo; if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{ global.weaponid[other.weap,5] += other.mag; instance_destroy(other); } else { var a = global.weaponid[other.weap,6] - other.mag; global.weaponid[other.weap,5] += a; instance_destroy(other); } instance_destroy(other); } else { var oldammo, oldweap, oldweapinst; oldammo = primammo; oldweap = primweap; primweap = other.weap; primammo = other.ammo; if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{ global.weaponid[other.weap,5] += other.mag; instance_destroy(other); } else { var a = global.weaponid[other.weap,6] - other.mag; global.weaponid[other.weap,5] += a; instance_destroy(other); } oldweapinst = instance_create_layer(x,y,"Instances",o_WeaponOld); oldweapinst.ammo = oldammo; oldweapinst.weap = oldweap; oldweapinst.mag = 0; instance_destroy(other); } } } else { if secweap = other.weap{ if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{ global.weaponid[other.weap,5] += other.mag; other.mag = 0; } else { var a = global.weaponid[other.weap,6] - other.mag; global.weaponid[other.weap,5] += a; other.mag -= a; } } else { if secweap = 0{ secweap = other.weap; secammo = other.ammo; if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{ global.weaponid[other.weap,5] += other.mag; instance_destroy(other); } else { var a = global.weaponid[other.weap,6] - other.mag; global.weaponid[other.weap,5] += a; instance_destroy(other); } instance_destroy(other); } else { var oldammo, oldweap, oldweapinst; oldammo = secammo; oldweap = secweap; secweap = other.weap; secammo = other.ammo; if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{ global.weaponid[other.weap,5] += other.mag; instance_destroy(other); } else { var a = global.weaponid[other.weap,6] - other.mag; global.weaponid[other.weap,5] += a; instance_destroy(other); } oldweapinst = instance_create_layer(x,y,"Instances",o_WeaponOld); oldweapinst.ammo = oldammo; oldweapinst.weap = oldweap; oldweapinst.mag = 0; instance_destroy(other); } } } } //} /* global.weaponid[16,0] = "Pumpo"; // name global.weaponid[16,1] = 20; // dmg global.weaponid[16,2] = 40; // AP global.weaponid[16,3] = 10; // Ammo global.weaponid[16,4] = 10; // Max Ammo global.weaponid[16,5] = 0; // Mag global.weaponid[16,6] = 5; // Max mag global.weaponid[16,7] = 0; // empty mag global.weaponid[16,8] = sou_Pumpo; // sound global.weaponid[16,9] = room_speed*4; // reload time global.weaponid[16,10] = room_speed*1; // shoting time global.weaponid[16,11] = 0; // mag ammo ///////////////////////////////*/
-
Mam drobnostkę, dawno programowałem w GMS i do tego kupiłem sobie GMS2 (Studio dawał mi popalić, bo ciągle miał jakieś problemy z winem 10 u mnie :/ ) i coś robię źle ale tego nie widzę... Hmm, nie wiem, wszystko wygląda ok, ale chyba coś musiałem zje*ać :D EDIT: Dobra ja durny jestem jak pień... Nie wiem na cholerę mi potrzebne było with (o_WeaponParent)... Ehh ja to zawsze :D Błąd: GML //Pumpo _______________________________________ ################################################################################ ############ FATAL ERROR in action number 1 of Step Evento_WeaponChooser for object o_Player: Variable <unknown_object>.<unknown variable>(100023, -2147483648) not set before reading it. at gml_Object_o_Player_Collision_5aae0650_fffc_495c_88b1_5aa3451b403a (line 7) - if other.weap > 5 { ################################################################################ ############ Collision Event o_WeaponParent. GML /// @description Insert description here // You can write your code in this editor var oldweap; with (o_WeaponParent){ if other.weap > 5 { if primweap = 0{ primweap = other.weap; primammo = other.ammo; primmag = other.mag; instance_destroy(other); } else { oldweap = instance_create_layer(x,y,"Instances",o_WeaponOld); oldweap.weap = primweap; oldweap.ammo = primammo; oldweap.mag = 0; } } } /* //Wypisałem sobie na zaś trochę tego, już mam wypisane bronie jakie chciałem. global.weaponid[16,0] = "Pumpo"; // name global.weaponid[16,1] = 20; // dmg global.weaponid[16,2] = 40; // AP global.weaponid[16,3] = 10; // Ammo global.weaponid[16,4] = 10; // Max Ammo global.weaponid[16,5] = 0; // Mag global.weaponid[16,6] = 5; // Max mag global.weaponid[16,7] = 0; // empty mag global.weaponid[16,8] = sou_Pumpo; // sound global.weaponid[16,9] = room_speed*4; // reload time global.weaponid[16,10] = room_speed*1; // shoting time global.weaponid[16,11] = 0; // mag ammo ////////////////////////////////</span>
-
Witam. Kupiłem GMS2 i jest tam nowy system kamery... Nie ma już viewów, tzn są ale nie ma już funkcji view_xview,yview,wview,hwiev... I teraz moje pytanie... Jak teraz zaprogramować dezaktywację regionalną? Muszę to zrobić, bo mam mapę całą w obiektach (Podziemia, które można kopać). Mam już upatrzony w necie system kamery, dzięki której mogę przybliżać i oddalać kamerę, i teraz potrzeba mi dezaktywować obiekty, które są poza kamerą... Mam mapę 9984x9984 pełną czarnych kratek 64x64, jest ich od cholery przez co nie jestem w stanie uruchomić gry... Objekt "o_Cam" Create: GML /// @description Insert description here // You can write your code in this editor camspeed = 30; //Build a camera at (0,0), with size 640x480, 0 degrees of angle, no target instance, instant-jupming hspeed and vspeed, with a 32 pixel border camera = camera_create_view(4992, 4992, 1920, 1080, 0, self, 30, 30, 1920, 1080); view_set_camera(0, camera); zoom_level = 1; //Get the starting view size to be used for interpolation later default_zoom_width = camera_get_view_width(view_camera[0]); default_zoom_height = camera_get_view_height(view_camera[0]); global.buildqueue = 0; depth = -100; Step: GML /// @description Insert description here // You can write your code in this editor if keyboard_check(vk_escape){ game_end(); } if keyboard_check(ord("W")){ y -= camspeed; } if keyboard_check(ord("S")){ y += camspeed } if keyboard_check(ord("A")){ x -= camspeed; } if keyboard_check(ord("D")){ x += camspeed; } if keyboard_check_pressed(ord("R")){ person = instance_create_layer(mouse_x,mouse_y,"Instances",o_Person); person.sex = choose("Man","Woman"); person.FatherNational = choose("Russian","English","Polish"); person.MotherNational = choose("Russian","English","Polish","German"); } //Move the zoom level based on mouse scrolling. Clamp the value so stuff doesn't get too silly. zoom_level = clamp(zoom_level + (((mouse_wheel_down() - mouse_wheel_up())) * 0.1), 0.1, 5); //Get current size var view_w = camera_get_view_width(view_camera[0]); var view_h = camera_get_view_height(view_camera[0]); //Set the rate of interpolation var rate = 0.2; //Get new sizes by interpolating current and target zoomed size var new_w = lerp(view_w, zoom_level * default_zoom_width, rate); var new_h = lerp(view_h, zoom_level * default_zoom_height, rate); //Apply the new size camera_set_view_size(view_camera[0], new_w, new_h); //Get the shift necessary to re-align the view. var shift_x = camera_get_view_x(view_camera[0]) - (new_w - view_w) * 0.5; var shift_y = camera_get_view_y(view_camera[0]) - (new_h - view_h) * 0.5; //Update the view position camera_set_view_pos(view_camera[0],shift_x, shift_y); camera_set_view_pos(camera, clamp( camera_get_view_x(camera), 0, room_width - camera_get_view_width(camera) ), clamp( camera_get_view_y(camera), 0, room_height - camera_get_view_height(camera) )); var xx, yy; if mouse_check_button(mb_middle){ xx = mouse_x; yy = mouse_y; x = xx; y = yy; } instance_deactivate_region(view_xport[0] - 128, view_yport - 128, view_wport[0] + 256, view_hport[0] + 256 , false,true); instance_activate_region(view_xport[0] - 64, view_yport - 64, view_wport[0] + 128, view_hport[0] + 128, false); Room Start: GML /// @description Insert description here // You can write your code in this editor //Enable the use of views view_enabled = true; //Make view 0 visible view_set_visible(0, true); //Set the port bounds of view 0 to 640x480 view_set_wport(0, 1920); view_set_hport(0, 1080); window_set_rectangle((display_get_width() - view_wport[0]) * 0.5, (display_get_height() - view_hport[0]) * 0.5, view_wport[0], view_hport[0]); surface_resize(application_surface,view_wport[0],view_hport[0]); window_set_fullscreen(true);
-
Wiecie co... Stworzyłem nowy projekt, napisałem to samo na próbę i działa... Już kilka razy tak miałem, że jakiś kod nie chciał działać, a po napisaniu go w nowym projekcie działał. Jednak u siebie w projekcie zrobiłem to w kolizjach i też jest ok :)
-
Wiesz, że dopiero zacząłem pisać i mam tylko 3 zmienne globalne? Jakoś nigdy z tym nie miałem problemu, zazwyczaj GMS robił mi psikusy, kiedy kod był dobry a nie chciał działać :/ Poza tym nigdy nie miałem problemu z dużą ilością zmiennych globalnych... Myślę, że dalej GMS robi mi psikusa (jak zawsze z resztą) i kod który powinien działać po prostu działać nie chce, chyba trzeba kupić GMS a nie jechać na darmowym :/
-
Zrobiłem skrypt, który wsadziłem w step bohatera. EDIT: Zapomniałem napisać po co mi ten kod, chodzi głównie o zmianę spirte a raczej narysowanie na graczu kolejnego sprite torby lub plecaka, później jakoś to wykorzystam np. będzie mógł wziąć więcej amunicji itp.
-
Mam problem z kodem... Otóż po wejściu na torbę albo na plecak, zamiast usunąć plecak lub torbę usuwa mi bohatera... Dawno nie programowałem w game maker ale chyba wszystko napisałem dobrze. GML if place_meeting(x,y,o_bpack){ if global.backpack = false{ if global.bag = true{ if keyboard_check_pressed(ord("B")){ global.bag = false; global.backpack = true; with(other){ instance_destroy(); } instance_create(x,y,o_bpack); } } else { global.backpack = true; with(other) { instance_destroy(); } } } } if place_meeting(x,y,o_bag){ if global.bag = false{ if global.backpack = true{ if keyboard_check_pressed(ord("B")){ global.backpack = false; global.bag = true; with(other){ instance_destroy(); } instance_create(x,y,o_bpack); } } else { global.bag = true; with(other) { instance_destroy(); } } } }
-
Zaraz sprawdzę jak coś edytuję... Dziwne jest to że w stepie wszystko działało w innych projektach :/ Nie na darmo też mam zmienną "weaponn" W niej będę zmieniał wartoś "x" tablicy :D
-
Problem wygląda następująco i pierwszy raz coś nie chce działać :/ Zawsze problemów nie było... Przy strzale odejmuje wartość ammo o jeden i w tym przypadku jest 14 ale zaraz zmienia się na 15 ;o skąd i jak? GML Information about object: o_player Sprite: s_playerpistol Solid: false Visible: true Depth: 0 Persistent: false Parent: Children: Mask: No Physics Object Create Event: execute code: instance_create(x,y,o_playerlegs); move = false; sprint = false; cshot = true; reload = false; lspeed = 0; mspeed = 4; ammo = 0; maxammo = 0; mag = 0; maxmag = 0; shottime = 0; reloadtime = 0; mindmg = 0; maxdmg =0; weaponname = 0; weapon[0,0] = 1; weapon[0,1] = 15; // ammo weapon[0,2] = 15; // max ammo weapon[0,3] = 1; // mag weapon[0,4] = 5; // max mag weapon[0,5] = 15;// shoot time weapon[0,6] = 60; // reload time weapon[0,7] = 5; // min dmg weapon[0,8] = 15; // max dmg weapon[0,9] = "Glock"; Alarm Event for alarm 0: execute code: realod = false; cshoot = true; ammo = maxammo; mag -= 1; Alarm Event for alarm 1: execute code: cshot = true; Step Event: execute code: image_angle = direction; direction = point_direction(x,y,mouse_x,mouse_y); weaponn = 0; ammo = weapon[weaponn,1]; maxammo = weapon[weaponn,2]; mag = weapon[weaponn,3]; maxmag = weapon[weaponn,4]; shottime = weapon[weaponn,5]; reloadtime = weapon[weaponn,6]; mindmg = weapon[weaponn,7]; maxdmg = weapon[weaponn,8]; weaponname = weapon[weaponn,9]; dmg = round(random_range(mindmg,maxdmg)); if keyboard_check_pressed(ord("R")){ if mag > 0{ if ammo < maxammo{ if reload = false{ alarm[0] = realodtime; reload = true; cshoot = false; } } } } if mouse_check_button(mb_left){ if cshot = true && reload = false{ if ammo > 0{ ammo -= 1; cshot = false; alarm[1] = shottime; } } } if keyboard_check(vk_shift){ sprint = true; } else { sprint = false; } if sprint = true{ mspeed = 6; } else { mspeed = 4; } if keyboard_check(ord("W")) or keyboard_check(ord("S")) or keyboard_check(ord("A")) or keyboard_check(ord("D")){ move = true; } else { move = false; } if move = true{ if sprint = false{ lspeed = 0.5; } else { lspeed = 0.8; } } else { lspeed = 0; } if keyboard_check(ord("W")) && place_free(x,y-mspeed){ y -= mspeed; } if keyboard_check(ord("S")) && place_free(x,y+mspeed){ y += mspeed; } if keyboard_check(ord("A")) && place_free(x-mspeed,y){ x -= mspeed; } if keyboard_check(ord("D")) && place_free(x+mspeed,y){ x += mspeed; } Draw Event: execute code: draw_self(); // pistol bullet draw_set_color(c_green); draw_line(x,y,x + lengthdir_x(50,direction-20) ,y + lengthdir_y(50,direction-20)); draw_set_color(c_white); //// laser draw_set_color(c_red); draw_line(x + lengthdir_x(50,direction-20) ,y + lengthdir_y(50,direction-20),x + lengthdir_x(500,direction) ,y + lengthdir_y(500,direction)); draw_set_color(c_white); /* // rifle bullet draw_set_color(c_green); draw_line(x,y,x + lengthdir_x(80,direction-14) ,y + lengthdir_y(80,direction-14)); draw_set_color(c_white); draw_set_color(c_red); draw_line(x + lengthdir_x(80,direction-14) ,y + lengthdir_y(80,direction-14),x + lengthdir_x(500,direction-1) ,y + lengthdir_y(500,direction-1)); draw_set_color(c_white); Draw GUI Event: execute code: draw_text(0,0,ammo) draw_text(64,0,mag) draw_text(128,0,weaponname) /* weapon = 0; ammo = weapon[weapon,1]; maxammo = weapon[weapon,2]; mag = weapon[weapon,3]; maxmag = weapon[weapon,4]; shottime = weapon[weapon,5]; reloadtime = weapon[weapon,6]; mindmg = weapon[weapon,7]; maxdmg = weapon[weapon,8]; weaponname = weapon[weapon,9];
-
Kurde :D Wiedziałem, że coś zrobiłem nie tak. Brak snu daje takie efekty, że człowiek się myli tam gdzie nie trzeba. Na drugi raz popatrzę dwa razy.
-
Problem z mp_potential_path. EDIT: Problem z nie wykonującym się alarmem.
H2S04 opublikował(a) temat w Pytania początkujących
Mam problem z zbieraczką, która ma pojechać do obiektu o_ore1/2/3. Napisałem skrypt ruchu lecz nie działa, stoi ona w miejscu i nie chce jechać, a mp_potential_step nie działa jak bym chciał. Chciał bym jeszcze dowiedzieć się jak ta zbieraczka ma wrócić do budynku z którego wyjechała. Każdy budynek ma własny "index" który później jest nadawany też stworzonej zbieraczce. Jeśli budynek ma index = 0; to zbieraczka, którą stworzę w tym budynku też będzie miała index = 0; Oraz Type = Type budynku. Z typem chodzi o to jaki ma zbierać surowiec, jak type = 0 to jedzie do o_ore1. Oczywiście zbieraczka po dojechaniu do budynku ma się zniszczyć, a później znowu utworzyć (Ale ten problem mam z głowy, bo dodałem alarm, który cały czas tworzy mi zbieraczki jeżeli jest jakaś w budynku). Tylko właśnie zatrzymałem się na tym path finding'u :/ EDIT: Problem z wracaniem do budynku już wiem jak rozwiązać... Takie proste, że o tym nawet nie pomyślałem... Wystarczy stworzyć w create zmienną = x oraz drugą = y. i później wpisać zamiast x i y te zmienne... collision line zrobi niszczenie pojazdu oraz dodawanie surowców itd. :D EDIT2: Napisałem prosty kod... Jakoś na początku działał ale teraz już nie chce działać... Gdy podjedzie do obiektu o_ore1, pojazd się zatrzymuje, get zmienia się z false na true lecz alarm się nie wykonuje :o Chociaż poruszanie się tego pojazdu to dalej klapa << naprawione :/ Nie mogę się tego problemu z alarmem pozbyć. Czemu to cholerstwo nie chce się włączyć? :C EDIT3: Uporałem się z tym... 7h męki ale się udało... Jakieś bugi z alarmami :/ Zmieniłem alarm i wszystko było OK. kod: Zbieraczka Information about object: o_GraberCar Sprite: s_Grabore Solid: true Visible: true Depth: 0 Persistent: false Parent: Children: Mask: No Physics Object Create Event: execute code: image_speed = 0; index = 0; // index budynku(id) type = 0; // typ zbierania speed = 0; dir = direction; n = instance_nearest(x,y,o_ore1) n1 = instance_nearest(x,y,o_ore2) n2 = instance_nearest(x,y,o_ore3) //grid = mp_grid_create(0,0,room_height/3,room_width/322,32,32); path = path_add(); //mp_grid_add_instances(grid,o_solid,1); //mp_grid_path(grid,path,x,y,n.x,n.y,1); mp_potential_path(path,n.x,n.y,1,0,solid) Step Event: execute code: image_angle = direction; if type = 0{ if instance_exists(o_ore1){ if distance_to_point(n.x,n.y) > 0{ path_start(path,5,0,1); } else { path_end(); speed = 0; } } } Pozdrawiam :). Kod po przebudowie: Information about object: o_GraberCar Sprite: s_Grabore Solid: true Visible: true Depth: 0 Persistent: false Parent: Children: Mask: No Physics Object Create Event: execute code: image_speed = 0; index = 0; type = 0; speed = 0; start = false; alarm[10] = room_speed*1; get = false; back = false; time = 0; startdir = 0 yellow = 0; red = 0; blue = 0; startx = 0; starty = 0; Alarm Event for alarm 0: execute code: var am; am = choose(5,10,15,20,25,30,35,40,45,50) global.yellow += 1; if get = true{ if type = 0{ if time < 5{ col = collision_line(x,y,x+lengthdir_x(64,direction),y+lengthdir_y(64,direction),o_ore 1,false,false); col.amount -= am; yellow += am; time += 1; alarm[0] = room_speed*1; } else { time = 0; get = false; back = true; } } } Alarm Event for alarm 10: execute code: start = true; Alarm Event for alarm 11: execute code: global.yellow += yellow; global.blue += blue; global.red += red; bc = collision_line(x,y,x+128,y+128,o_Graber,false,false); bc.stack += 1; instance_destroy(); Step Event: execute code: n1 = instance_nearest(x,y,o_ore2) n2 = instance_nearest(x,y,o_ore3) image_angle = direction; if start = true{ if back = false{ if type = 0{ if instance_exists(o_ore1){ n = instance_nearest(x,y,o_ore1) if distance_to_point(n.x,n.y) > 1 { path = path_add(); mp_potential_path(path,n.x,n.y,4,4,false) //mp_potential_step(n.x,n.y,4,o_solid); path_start(path,4,0,1); } else { path_end(); speed = 0; direction = point_direction(x,y,n.x,n.y); alarm[0] = 3; get = true; } } } } else { if distance_to_point(startx,starty) > 0{ mp_potential_step(startx,starty,4,false); } else { direction = startdir-180; speed = 0; start = false; alarm[11] = 3 } } } Draw Event: execute code: draw_sprite_ext(sprite_index,type,x,y,1,1,direction,c_white,1); draw_line_colour(x,y,x+lengthdir_x(64,direction),y+lengthdir_y(64,direction),c_r ed,c_red); if start = true{ draw_line_colour(x,y,n.y,n.y,c_green,c_green); } draw_text_colour(x,y+32,yellow,c_white,c_white,c_white,c_white,1); draw_text_colour(x,y+16,get,c_white,c_white,c_white,c_white,1); draw_text_colour(x,y,startdir,c_white,c_white,c_white,c_white,1); draw_text_colour(x,y-16,yellow,c_white,c_white,c_white,c_white,1); draw_text_colour(x,y-32,time,c_white,c_white,c_white,c_white,1); -
Mam problem z tworzeniem budynku... Zamiast jednego tworzy się ich od cholery. Liczba dochodzi do 20 :/ Info z kodu budynku: Information about object: o_Gbuild Sprite: s_OreGraber Solid: false Visible: true Depth: 0 Persistent: false Parent: Children: Mask: No Physics Object Create Event: execute code: can = false; col = c_white; direction = 0; Step Event: execute code: image_angle = direction; x = mouse_x; y = mouse_y; if place_free(x,y){ can = true; col = c_white; } else { can = false; col = c_red; } Mouse Event for Left Pressed: execute code: if can = true{ instance_create(x,y,o_Gbuilding); instance_destroy(); } Mouse Event for Glob Right Pressed: execute code: instance_destroy(); Draw Event: execute code: draw_sprite_ext(sprite_index,0,x,y,1,1,direction,col,1); Po końcu alarmu ma stworzyć się ten obiekt: Information about object: o_Graber Sprite: s_OreGraber Solid: true Visible: true Depth: 0 Persistent: false Parent: Children: Mask: No Physics Object Create Event: execute code: direction = 0; type = 0; select = false; index = 0; x += choose(0,128,256,512)// kod by sprawdzić czy tworzy się więcej jak jeden. Step Event: execute code: if select = true{ instance_create(x+128,y,o_Gtype); } Mouse Event for Left Pressed: execute code: select = not select; Mouse Event for Glob Right Pressed: execute code: select = false; Draw Event: execute code: if select = true{ //draw_rectangle_colour(x-68,y-68,x+68,y+68,c_green,c_green,c_green,c_green,1); draw_sprite_ext(s_select,image_index,x,y,1,1,0,c_white,0.5) draw_sprite_ext(s_arrow,0,x+128,y,1,1,direction,c_black,0.5) } draw_sprite_ext(sprite_index,type,x-10,y+10,1,1,direction,c_black,0.2); draw_sprite_ext(sprite_index,type,x,y,1,1,direction,c_white,1); draw_text_colour(x,y,index,c_white,c_white,c_white,c_white,1); Pozdrawiam. EDIT: Dobra przeszukałem wszystko i problem znalazłem. Dopiero ogarnąłem to, że tworzyło mi się kilka ikonek budowy budynku, po kliknięciu wszystkie się aktywowały...
-
Jak Cię zastanawiają to już daję odpowiedź :) Jest to pocisk, chodzi tylko o wizualizację. Po co mi mały pixel lecący do celu. Jak dla mnie lepiej wygląda lecąca taka jak by smuga, lecz nie chcę by ta smuga przechodziła też przez zombiaka :) Robiłem wcześniej to na draw_line lecz efekt był mizerny :) Zabieram się do pracy nad tym i idę spać bo nie spałem od... wczoraj.. GameMaker jakoś mnie pochłonął :D PS. Coś nie idzie :/ draw_sprite_part_ext nie ma rotacji i jest to problem. Kle lecą poziomo zamiast pionowo do celu oraz zauważyłem, że nie bardzo to idzie. Idę spać bo już padam przed lapkiem. Może jak ktoś będzie miał chwilę to jakoś lepiej wytłumaczyć to się na przyszłość nauczę lecz teraz jestem wrakiem i niczego nie zrobię w GMie :D Pozdrawiam. GML (Draw) var ps; if instance_exists(o_Zombie){ ps = min(256,point_distance(x,y,o_Zombie.x,o_Zombie.y)); draw_set_blend_mode(bm_add); draw_sprite_part_ext(sprite_index,sprite_index,sprite_index,sprite_index,ps,sprite_index,x,y,1,2,c_yellow,0.5) draw_set_blend_mode(bm_normal); }
-
Witam. Mam problem ze skalowaniem obiektu. Mój pocisk jest długości 256 pixeli i chciał bym go zmniejszyć do 0 gdy zbliży się do obiektu o_Zombie ponieważ punkt x na tym spricie jest równy 0 by podczas tworzenia nie przechodził przez postać. GML (End Step) var near; near = instance_nearest(x,y,o_Zombie) if collision_line(x,y,xprevious,yprevious,o_Zombie,0,1){ near.hp -= global.dm[o_Player.wm]; image_xscale = point_distance(x, y, o_Zombie.x, o_Zombie.y) / 256 // <<<<<<<< Próbowałem tak ale nie działa :/ repeat(5 + random(30)) with (instance_create(near.x,near.y,o_bloodhit)){ direction = (other.image_angle) - 15 + random(30) } instance_destroy(); }
-
Problem z Dźwiękiem (Pliki oraz niechciane odtwarzanie)
H2S04 odpowiedział(a) na H2S04 temat w Pytania początkujących
Dzięki chłopaki za odpowiedź. Chyba się przeniosę na nowy model. A sound_play używałem bo tak się po prostu nauczyłem i przyzwyczaiłem :) -
Problem z Dźwiękiem (Pliki oraz niechciane odtwarzanie)
H2S04 opublikował(a) temat w Pytania początkujących
Witajcie. Mam problem z dźwiękiem. Otóż nigdzie nie mam kodu, który by odtwarzał dźwięk prócz tego. GML if ms = 1 { if wm != 100{ if ammo[wm] > 0{ ammo[wm] -= 1; ms = 0; alarm[0] = cs; instance_create(x,y,o_Bulletp) sound_play(so_sf); sound_play(so[wm]); // wm jest to aktualnie posiadana bron. so jest soundem w przypadku wm = 0, so = so_glock } else { if soe = 0{ sound_play(so_empty) soe = 1; alarm[10] = cs; } } } else { alarm[0] = cs; ms = 0; sp = 4; } } Problem wygląda następująco. Podczas wejścia do gry i włączeniu drugiego rooma (1 to menu) po załadowaniu "słychać strzały". Nie mogę dojść o co chodzi. Mam jeszcze drugi problem z dźwiękiem. Otóż gdy wybiorę opcję Uncompressed wszystko jest niby ok, a gdy wybiorę opcję Compressed dźwięk się nie odtwarza lub ma jakieś "loty" i pojawia się błąd. error opening mp3 file C:\Users\HieNa\AppData\Local\gm_ttt_99424\gm_ttt_52847\so_sf.mp3 - Podany alias jest ju? u?ywany w tej aplikacji. U?yj unikatowego aliasu Po wybraniu Compressed i zrobieniu instalki gry mam tylko 3 dźwięki z 9. Pozdrawiam. PS. Wyłączyłem opcję "Use New Audio Engine" PS2. Zrobiłem dźwięki od nowa i całkiem coś się już powaliło :/ Odtwarza tylko jeden dźwięk, dźwięk broni nr 11 (m4a1). nie ważne czy wezmę broń nr 0 czy broń nr 6. Zauważyłem, że odtwarza 1 dźwięk na liście. Dobra wymęczyłem to. Jest 6:44 a siedzę w GM:S już od 22. Mózg nie wyrabia i się zamotał. PS2 zostało rozwiązane. ( zmiena so = dźwięk zawierała sound_play()....... Tak nie zauważyłem tego przez 4 godziny. Lecz nie rozumiem dalej jednej rzeczy i chciał bym chociaż tego się dowiedzieć. Dlaczego pliki skompresowane nie działają jak powinny? Podczas strzelania dźwięk się "gubi" pojawia się po pojedynczym kliknięciu, a przy przytrzymaniu GlobalLPM po prostu odtworzy się może raz lub w ogóle. Przy plikach nie skompresowanych tego problemu nie ma ponieważ dźwięki są w pliku wykonywalnym. Pozdrawiam. -
No dobra ale gdzie to wpisać. Bo dałem w Step i nie działa w create nie działa dalej to samo. EDIT: Dzięki tobie mnie olśniło... Wystarczyła dodatkowa zmienna. Create: GML minhp = 0 Step: GML if global.hp <= minhp{ global.hp = minhp; lc = c_black; }