W tym bardzo prostym tutorialu postaram sie opisac w jaki sposob dodac szanse na oslepienie gracza. A wiec najpierw tworzymy standardowo klase lub item a nastepnie dodajemy funkcje dla naszego okreslonego warunku. Jezeli mamy oslepiac np wszystkich w okreslonym zasiegu to dodajemu funkcje do petli i ustalamy okreslona odleglosc, klawisz uzycia itp. Wzorowac sie mozna np na dynamicie. Natomiast jezeli chcemy dodac szanse na oslepienie przy zadaniu obrazen to kod funkcji dodajemy do takedamage, tu takze mozna wzorowac sie na innych przedmiotach. Sam kod funkcji oslepienia, wyglada tak:
PerformBlind(indeks, 255); CreateTimer(3.0, WylaczOslepienie, indeks);
Gdzie 3.0 to czas oslepienia a indeks to id gracza na ktorym ma byc wywolywana funkcja. Wiecej o tym poczytac mozna np w tutku z obrazeniami.
Nastepnie musimy gdzies na dole silnika dodac nasz kod oslepienia:
public Action:WylaczOslepienie(Handle:timer, any:client) { if(!IsValidClient(client)) return; PerformBlind(client, 0); } public Action:PerformBlind(target, amount) { if(!IsValidClient(target)) return; new targets[2]; targets[0] = target; new color[4] = {0, 0, 0, 0}; color[0] = 0; color[1] = 0; color[2] = 0; color[3] = amount; new flags; if (amount == 0) flags = (0x0001 | 0x0010); else flags = (0x0002 | 0x0008); new Handle:message = StartMessageEx(GetUserMessageId("Fade"), targets, 1); if(GetUserMessageType() == UM_Protobuf) { PbSetInt(message, "duration", 768); PbSetInt(message, "hold_time", 1536); PbSetInt(message, "flags", flags); PbSetColor(message, "clr", color); } else { BfWriteShort(message, 768); BfWriteShort(message, 1536); BfWriteShort(message, flags); BfWriteByte(message, color[0]); BfWriteByte(message, color[1]); BfWriteByte(message, color[2]); BfWriteByte(message, color[3]); } EndMessage(); }
Ps: Niektorzy moga sie dziwic dlaczego wszystko jest tak szczegolowo opisane ale nie uwierzycie ile osob pyta o takie banaly .